import xemacs-21.2.37
authorkazuhiko <kazuhiko>
Tue, 21 Nov 2000 09:07:52 +0000 (09:07 +0000)
committerkazuhiko <kazuhiko>
Tue, 21 Nov 2000 09:07:52 +0000 (09:07 +0000)
271 files changed:
CHANGES-beta
ChangeLog
Makefile.in.in
README.packages
configure
configure.in
etc/NEWS
etc/PACKAGES
info/internals.info
info/internals.info-2
info/lispref.info
info/lispref.info-2
info/lispref.info-4
info/lispref.info-5
info/lispref.info-6
info/lispref.info-7
info/lispref.info-8
info/lispref.info-9
info/new-users-guide.info
info/widget.info
info/xemacs-faq.info
info/xemacs-faq.info-1
info/xemacs-faq.info-2
info/xemacs.info
info/xemacs.info-1
info/xemacs.info-3
lib-src/ChangeLog
lib-src/make-po.c
lib-src/qsort.c
lisp/ChangeLog
lisp/abbrev.el
lisp/apropos.el
lisp/auto-autoloads.el
lisp/buff-menu.el
lisp/byte-optimize.el
lisp/bytecomp.el
lisp/cl-macs.el
lisp/code-files.el
lisp/code-process.el
lisp/coding.el
lisp/cus-edit.el
lisp/cus-face.el
lisp/custom.el
lisp/dialog.el
lisp/dumped-lisp.el
lisp/etags.el
lisp/faces.el
lisp/files-nomule.el
lisp/files.el
lisp/fill.el
lisp/float-sup.el
lisp/font-lock.el
lisp/font-menu.el
lisp/font.el
lisp/format.el
lisp/frame.el
lisp/gutter-items.el
lisp/gutter.el
lisp/help.el
lisp/hyper-apropos.el
lisp/indent.el
lisp/info.el
lisp/isearch-mode.el
lisp/iso8859-1.el
lisp/itimer.el
lisp/keymap.el
lisp/ldap.el
lisp/lib-complete.el
lisp/lisp.el
lisp/loaddefs.el
lisp/menubar-items.el
lisp/menubar.el
lisp/minibuf.el
lisp/modeline.el
lisp/mouse.el
lisp/msw-font-menu.el
lisp/mule/chinese.el
lisp/mule/cyrillic.el
lisp/mule/ethiopic.el
lisp/mule/mule-category.el
lisp/mule/mule-ccl.el
lisp/mule/mule-cmds.el
lisp/mule/mule-coding.el
lisp/mule/mule-misc.el
lisp/mule/thai-xtis.el
lisp/mule/vietnamese.el
lisp/multicast.el
lisp/mwheel.el
lisp/obsolete.el
lisp/package-admin.el
lisp/package-get.el
lisp/packages.el
lisp/paragraphs.el
lisp/paths.el
lisp/printer.el
lisp/process.el
lisp/replace.el
lisp/select.el
lisp/simple.el
lisp/sound.el
lisp/startup.el
lisp/subr.el
lisp/syntax.el
lisp/term/bg-mouse.el
lisp/term/sun-mouse.el
lisp/term/sun.el
lisp/update-elc-2.el
lisp/userlock.el
lisp/version.el
lisp/view-less.el
lisp/wid-edit.el
lisp/window-xemacs.el
lisp/window.el
lisp/x-faces.el
lisp/x-font-menu.el
lisp/x-mouse.el
lisp/x-select.el
lwlib/ChangeLog
lwlib/lwlib.h
man/ChangeLog
man/internals/internals.texi
man/lispref/abbrevs.texi
man/lispref/annotations.texi
man/lispref/backups.texi
man/lispref/buffers.texi
man/lispref/building.texi
man/lispref/commands.texi
man/lispref/compile.texi
man/lispref/consoles-devices.texi
man/lispref/control.texi
man/lispref/customize.texi
man/lispref/databases.texi
man/lispref/debugging.texi
man/lispref/dialog.texi
man/lispref/display.texi
man/lispref/dragndrop.texi
man/lispref/edebug-inc.texi
man/lispref/edebug.texi
man/lispref/errors.texi
man/lispref/eval.texi
man/lispref/extents.texi
man/lispref/faces.texi
man/lispref/files.texi
man/lispref/frames.texi
man/lispref/functions.texi
man/lispref/glyphs.texi
man/lispref/gutter.texi
man/lispref/help.texi
man/lispref/hooks.texi
man/lispref/index.texi
man/lispref/internationalization.texi
man/lispref/intro.texi
man/lispref/keymaps.texi
man/lispref/ldap.texi
man/lispref/lispref.texi
man/lispref/lists.texi
man/lispref/loading.texi
man/lispref/locals.texi
man/lispref/macros.texi
man/lispref/maps.texi
man/lispref/markers.texi
man/lispref/menus.texi
man/lispref/minibuf.texi
man/lispref/modes.texi
man/lispref/mouse.texi
man/lispref/mule.texi
man/lispref/numbers.texi
man/lispref/objects.texi
man/lispref/os.texi
man/lispref/positions.texi
man/lispref/postgresql.texi
man/lispref/processes.texi
man/lispref/range-tables.texi
man/lispref/searching.texi
man/lispref/sequences.texi
man/lispref/specifiers.texi
man/lispref/streams.texi
man/lispref/strings.texi
man/lispref/symbols.texi
man/lispref/syntax.texi
man/lispref/text.texi
man/lispref/tips.texi
man/lispref/toolbar.texi
man/lispref/tooltalk.texi
man/lispref/variables.texi
man/lispref/windows.texi
man/lispref/x-windows.texi
man/new-users-guide/files.texi
man/new-users-guide/search.texi
man/widget.texi
man/xemacs-faq.texi
man/xemacs/abbrevs.texi
man/xemacs/basic.texi
man/xemacs/building.texi
man/xemacs/files.texi
man/xemacs/menus.texi
man/xemacs/packages.texi
man/xemacs/startup.texi
man/xemacs/windows.texi
man/xemacs/xemacs.texi
modules/base64/base64.c
nt/ChangeLog
nt/README
nt/config.h
nt/xemacs.mak
src/alloc.c
src/buffer.c
src/callint.c
src/callproc.c
src/casefiddle.c
src/casetab.c
src/cmdloop.c
src/cmds.c
src/config.h.in
src/console-stream.c
src/console-x.c
src/console.c
src/database.c
src/device.c
src/dialog-msw.c
src/dired.c
src/doc.c
src/editfns.c
src/eldap.c
src/elhash.c
src/emacs.c
src/emodules.c
src/event-Xt.c
src/event-msw.c
src/events.h
src/extents.c
src/faces.c
src/file-coding.c
src/fileio.c
src/filelock.c
src/floatfns.c
src/frame.h
src/glyphs.c
src/glyphs.h
src/gui-x.c
src/input-method-xlib.c
src/lisp.h
src/lread.c
src/lstream.h
src/marker.c
src/menubar-x.c
src/menubar.c
src/miscplay.c
src/mule-ccl.c
src/mule-charset.c
src/objects.c
src/print.c
src/process-unix.c
src/redisplay-msw.c
src/redisplay-tty.c
src/regex.c
src/scrollbar.c
src/search.c
src/select.c
src/syntax.c
src/sysdep.c
src/toolbar.c
src/tooltalk.doc
src/unexcw.c
src/unexelfsgi.c
src/window.c
tests/ChangeLog
tests/automated/byte-compiler-tests.el
tests/automated/hash-table-tests.el
tests/automated/lisp-tests.el
version.sh

index aefa0ef..d00ae9a 100644 (file)
@@ -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
index 40a41b4..befb17f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+2000-11-14  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.37 is released.
+
+2000-10-19  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * README.packages: Add "uninstalled package" FAQ.
+
+       * etc/PACKAGES: Add details on os-utils contents.
+
+2000-11-01  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: Handle alloca with Compaq C on Alpha Linux.
+
+2000-10-27  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: Oops, _getpt ==> _getpty
+
+2000-10-23  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * Makefile.in.in: Remove lockdir related things.
+
+2000-10-11  Martin Buchholz  <martin@xemacs.org>
+
+       * 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  <yoshiki@xemacs.org>
+
+       * etc/NEWS: Change lprogress-display to progress-feedback.
+
+2000-10-08  Karl M. Hegbloom  <karlheg@debian.org>
+
+       * configure.in: Typo - missing paren.
+
+2000-10-10  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: 
+       Use stropts.h, not sys/stropts.h.
+       Use strtio.h, not sys/strtio.h.
+
+2000-10-06  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: Pretend that DEC OSF >= 5 is really DEC OSF 4.
+
 2000-10-04  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.36 is released.
index 2ccb3c0..04c1805 100644 (file)
@@ -123,7 +123,6 @@ pkgdir=@pkgdir@
 ## 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 @@ buildlispdir=${srcdir}/lisp
 ## 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 @@ gzip-el:
 ## (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
index d618862..04cc713 100644 (file)
@@ -19,6 +19,13 @@ Q. I really liked the old way that packages were bundled and do not
 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
 -----------------
 
index 0de4081..b2bcf8c 100755 (executable)
--- a/configure
+++ b/configure
@@ -1140,7 +1140,7 @@ case "$canonical" in
   *-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 ;;
 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
+    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 <<EOF
+#line 6303 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure: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 <<EOF
+#define $ac_tr_func 1
+EOF
+}
+else
+  echo "$ac_t""no" 1>&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 <<EOF
+#line 6356 "configure"
+#include "confdefs.h"
+
+#define NeedFunctionPrototypes 1
+#include <X11/Xlib.h>
+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 HAVE_XFREE386 1
+#define XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE 1
 EOF
 }
 
-  else
-    echo "$ac_t""no" 1>&6
-  fi
+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 <<EOF
-#line 6323 "configure"
+#line 6394 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6330,7 +6401,7 @@ int main() {
 XmuReadBitmapDataFromFile()
 ; return 0; }
 EOF
-if { (eval echo configure:6334: \"$ac_link\") 1>&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 @@ EOF
 
       
 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 <<EOF
-#line 6378 "configure"
+#line 6449 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6385: \"$ac_link\") 1>&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
 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 <<EOF
-#line 6430 "configure"
+#line 6501 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6437: \"$ac_link\") 1>&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 @@ EOF
  fi
     fi
         cat > conftest.$ac_ext <<EOF
-#line 6503 "configure"
+#line 6574 "configure"
 #include "confdefs.h"
 #include <fcntl.h>
     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 @@ fi
 if test "$with_x11" = "yes"; then
   ac_safe=`echo "X11/extensions/shape.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/shape.h""... $ac_c" 1>&6
-echo "configure:6572: checking for X11/extensions/shape.h" >&5
+echo "configure:6643: checking for X11/extensions/shape.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6575 "configure"
+#line 6646 "configure"
 #include "confdefs.h"
 #include <X11/extensions/shape.h>
 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 @@ case "$x_libraries" in *X11R4* )
 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 @@ fi
 test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no
 test -z "$with_xauth" && { ac_safe=`echo "X11/Xauth.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xauth.h""... $ac_c" 1>&6
-echo "configure:6642: checking for X11/Xauth.h" >&5
+echo "configure:6713: checking for X11/Xauth.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6645 "configure"
+#line 6716 "configure"
 #include "confdefs.h"
 #include <X11/Xauth.h>
 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 @@ fi
  }
 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 <<EOF
-#line 6678 "configure"
+#line 6749 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6685,7 +6756,7 @@ int main() {
 XauGetAuthByAddr()
 ; return 0; }
 EOF
-if { (eval echo configure:6689: \"$ac_link\") 1>&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 @@ if test "$with_tooltalk" != "no" ; then
       for dir in "" "Tt/" "desktop/" ; do
     ac_safe=`echo "${dir}tt_c.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ${dir}tt_c.h""... $ac_c" 1>&6
-echo "configure:6734: checking for ${dir}tt_c.h" >&5
+echo "configure:6805: checking for ${dir}tt_c.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6737 "configure"
+#line 6808 "configure"
 #include "confdefs.h"
 #include <${dir}tt_c.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ if test "$with_tooltalk" != "no" ; then
 xe_msg_checking="for tt_message_create in -ltt"
 test -n "$extra_libs" && xe_msg_checking="$xe_msg_checking using extra libs $extra_libs"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 6783 "configure"
+#line 6854 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6790,7 +6861,7 @@ int main() {
 tt_message_create()
 ; return 0; }
 EOF
-if { (eval echo configure:6794: \"$ac_link\") 1>&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 @@ fi
 
 test -z "$with_cde" && { ac_safe=`echo "Dt/Dt.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Dt/Dt.h""... $ac_c" 1>&6
-echo "configure:6851: checking for Dt/Dt.h" >&5
+echo "configure:6922: checking for Dt/Dt.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6854 "configure"
+#line 6925 "configure"
 #include "confdefs.h"
 #include <Dt/Dt.h>
 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 @@ fi
  }
 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 <<EOF
-#line 6887 "configure"
+#line 6958 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6894,7 +6965,7 @@ int main() {
 DtDndDragStart()
 ; return 0; }
 EOF
-if { (eval echo configure:6898: \"$ac_link\") 1>&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 @@ EOF
 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 @@ EOF
 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
+echo "configure:7062: checking for ldap.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6994 "configure"
+#line 7065 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 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 @@ fi
  }
 test -z "$with_ldap" && { ac_safe=`echo "lber.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for lber.h""... $ac_c" 1>&6
-echo "configure:7022: checking for lber.h" >&5
+echo "configure:7093: checking for lber.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7025 "configure"
+#line 7096 "configure"
 #include "confdefs.h"
 #include <lber.h>
 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 @@ fi
 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 <<EOF
-#line 7059 "configure"
+#line 7130 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7066,7 +7137,7 @@ int main() {
 ldap_search()
 ; return 0; }
 EOF
-if { (eval echo configure:7070: \"$ac_link\") 1>&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 @@ fi
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber" && xe_msg_checking="$xe_msg_checking using extra libs -llber"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 7100 "configure"
+#line 7171 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7107,7 +7178,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:7111: \"$ac_link\") 1>&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 @@ fi
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber -lkrb" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 7141 "configure"
+#line 7212 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7148,7 +7219,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:7152: \"$ac_link\") 1>&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 @@ fi
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber -lkrb -ldes" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb -ldes"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 7182 "configure"
+#line 7253 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7189,7 +7260,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:7193: \"$ac_link\") 1>&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 @@ EOF
   for ac_func in ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7244: checking for $ac_func" >&5
+echo "configure:7315: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7247 "configure"
+#line 7318 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -7266,7 +7337,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7270: \"$ac_link\") 1>&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 @@ fi
 
 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
+echo "configure:7377: checking for ${header_dir}libpq-fe.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7309 "configure"
+#line 7380 "configure"
 #include "confdefs.h"
 #include <${header_dir}libpq-fe.h>
 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 @@ fi
 
   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 <<EOF
-#line 7343 "configure"
+#line 7414 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7350,7 +7421,7 @@ int main() {
 PQconnectdb()
 ; return 0; }
 EOF
-if { (eval echo configure:7354: \"$ac_link\") 1>&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 @@ EOF
 
     
 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 <<EOF
-#line 7392 "configure"
+#line 7463 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7399,7 +7470,7 @@ int main() {
 PQconnectStart()
 ; return 0; }
 EOF
-if { (eval echo configure:7403: \"$ac_link\") 1>&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 @@ fi
 
 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 <<EOF
-#line 7459 "configure"
+#line 7530 "configure"
 #include "confdefs.h"
 #define XPM_NUMBERS
 #include <X11/xpm.h>
@@ -7464,7 +7535,7 @@ echo "configure:7456: checking for Xpm - no older than 3.4f" >&5
       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 @@ EOF
 
     libs_x="-lXpm $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXpm\" to \$libs_x"; fi
     echo $ac_n "checking for \"FOR_MSW\" xpm""... $ac_c" 1>&6
-echo "configure:7510: checking for \"FOR_MSW\" xpm" >&5
+echo "configure:7581: checking for \"FOR_MSW\" xpm" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 7513 "configure"
+#line 7584 "configure"
 #include "confdefs.h"
 
 int main() {
 XpmCreatePixmapFromData()
 ; return 0; }
 EOF
-if { (eval echo configure:7520: \"$ac_link\") 1>&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 @@ EOF
 
     test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for compface.h""... $ac_c" 1>&6
-echo "configure:7546: checking for compface.h" >&5
+echo "configure:7617: checking for compface.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7549 "configure"
+#line 7620 "configure"
 #include "confdefs.h"
 #include <compface.h>
 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 @@ fi
  }
   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 <<EOF
-#line 7582 "configure"
+#line 7653 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7589,7 +7660,7 @@ int main() {
 UnGenFace()
 ; return 0; }
 EOF
-if { (eval echo configure:7593: \"$ac_link\") 1>&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 @@ EOF
       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 <<EOF
-#line 7650 "configure"
+#line 7721 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7657,7 +7728,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7661: \"$ac_link\") 1>&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 @@ else
   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 <<EOF
-#line 7685 "configure"
+#line 7756 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7692,7 +7763,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure: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 @@ else
   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 <<EOF
-#line 7720 "configure"
+#line 7791 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7727,7 +7798,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7731: \"$ac_link\") 1>&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 @@ fi
 
     test -z "$with_jpeg" && { ac_safe=`echo "jpeglib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for jpeglib.h""... $ac_c" 1>&6
-echo "configure:7761: checking for jpeglib.h" >&5
+echo "configure:7832: checking for jpeglib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7764 "configure"
+#line 7835 "configure"
 #include "confdefs.h"
 #include <jpeglib.h>
 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 @@ fi
  }
   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 <<EOF
-#line 7797 "configure"
+#line 7868 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7804,7 +7875,7 @@ int main() {
 jpeg_destroy_decompress()
 ; return 0; }
 EOF
-if { (eval echo configure:7808: \"$ac_link\") 1>&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 @@ EOF
 
     png_problem=""
   test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6
-echo "configure:7844: checking for pow" >&5
+echo "configure:7915: checking for pow" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7847 "configure"
+#line 7918 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pow(); below.  */
@@ -7866,7 +7937,7 @@ pow();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7870: \"$ac_link\") 1>&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 @@ fi
  }
   test -z "$with_png" && { ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for png.h""... $ac_c" 1>&6
-echo "configure:7891: checking for png.h" >&5
+echo "configure:7962: checking for png.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7894 "configure"
+#line 7965 "configure"
 #include "confdefs.h"
 #include <png.h>
 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 @@ fi
  }
   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 <<EOF
-#line 7927 "configure"
+#line 7998 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7934,7 +8005,7 @@ int main() {
 png_read_image()
 ; return 0; }
 EOF
-if { (eval echo configure:7938: \"$ac_link\") 1>&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 @@ fi
  }
   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 <<EOF
-#line 7964 "configure"
+#line 8035 "configure"
 #include "confdefs.h"
 #include <png.h>
     int main(int c, char **v) {
@@ -7968,7 +8039,7 @@ echo "configure:7961: checking for workable png version information" >&5
     if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1;
     return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;}
 EOF
-if { (eval echo configure: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 @@ EOF
 
     test -z "$with_tiff" && { ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6
-echo "configure:8015: checking for tiffio.h" >&5
+echo "configure:8086: checking for tiffio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8018 "configure"
+#line 8089 "configure"
 #include "confdefs.h"
 #include <tiffio.h>
 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 @@ fi
  }
   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 <<EOF
-#line 8051 "configure"
+#line 8122 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8058,7 +8129,7 @@ int main() {
 TIFFClientOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:8062: \"$ac_link\") 1>&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 @@ fi
 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 @@ echo "configure:8104: checking for the Athena widgets" >&5
     if test "$athena_3d" = "no"; then
     
 echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 8123 "configure"
+#line 8194 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8130,7 +8201,7 @@ int main() {
 XawScrollbarSetThumb()
 ; return 0; }
 EOF
-if { (eval echo configure:8134: \"$ac_link\") 1>&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 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
           
 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 8155 "configure"
+#line 8226 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8162,7 +8233,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:8166: \"$ac_link\") 1>&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 @@ fi
   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 <<EOF
-#line 8202 "configure"
+#line 8273 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8209,7 +8280,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:8213: \"$ac_link\") 1>&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 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for threeDClassRec in -lXaw""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 8236 "configure"
+#line 8307 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8243,7 +8314,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:8247: \"$ac_link\") 1>&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 @@ fi
     if test "$athena_3d" = "no"; then
     ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8278: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:8349: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8281 "configure"
+#line 8352 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6
-echo "configure:8306: checking for X11/Xaw/XawInit.h" >&5
+echo "configure:8377: checking for X11/Xaw/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8309 "configure"
+#line 8380 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ fi
   else
             ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:8340: checking for X11/$athena_variant/XawInit.h" >&5
+echo "configure:8411: checking for X11/$athena_variant/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8343 "configure"
+#line 8414 "configure"
 #include "confdefs.h"
 #include <X11/$athena_variant/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8365: checking for X11/$athena_variant/ThreeD.h" >&5
+echo "configure:8436: checking for X11/$athena_variant/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8368 "configure"
+#line 8439 "configure"
 #include "confdefs.h"
 #include <X11/$athena_variant/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ fi
         if test -z "$athena_h_path"; then
       ac_safe=`echo "$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:8401: checking for $athena_variant/XawInit.h" >&5
+echo "configure:8472: checking for $athena_variant/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8404 "configure"
+#line 8475 "configure"
 #include "confdefs.h"
 #include <$athena_variant/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8426: checking for $athena_variant/ThreeD.h" >&5
+echo "configure:8497: checking for $athena_variant/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8429 "configure"
+#line 8500 "configure"
 #include "confdefs.h"
 #include <$athena_variant/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ fi
         if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
       ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:8463: checking for X11/Xaw3d/XawInit.h" >&5
+echo "configure:8534: checking for X11/Xaw3d/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8466 "configure"
+#line 8537 "configure"
 #include "confdefs.h"
 #include <X11/Xaw3d/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8488: checking for X11/Xaw3d/ThreeD.h" >&5
+echo "configure:8559: checking for X11/Xaw3d/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8491 "configure"
+#line 8562 "configure"
 #include "confdefs.h"
 #include <X11/Xaw3d/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ fi
         if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
       ac_safe=`echo "Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:8528: checking for Xaw3d/XawInit.h" >&5
+echo "configure:8599: checking for Xaw3d/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8531 "configure"
+#line 8602 "configure"
 #include "confdefs.h"
 #include <Xaw3d/XawInit.h>
 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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8553: checking for Xaw3d/ThreeD.h" >&5
+echo "configure:8624: checking for Xaw3d/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8556 "configure"
+#line 8627 "configure"
 #include "confdefs.h"
 #include <Xaw3d/ThreeD.h>
 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 @@ fi
             if test -z "$athena_h_path"; then
       ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8593: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:8664: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8596 "configure"
+#line 8667 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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 @@ fi
 
     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
+echo "configure:8707: checking for Xm/Xm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8639 "configure"
+#line 8710 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   
 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 8666 "configure"
+#line 8737 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8673,7 +8744,7 @@ int main() {
 XmStringFree()
 ; return 0; }
 EOF
-if { (eval echo configure:8677: \"$ac_link\") 1>&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 @@ fi
 
   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 <<EOF
-#line 8708 "configure"
+#line 8779 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 #ifdef LESSTIF_VERSION
@@ -9110,7 +9181,7 @@ fi
 
 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 @@ EOF
 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
+echo "configure:9210: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9142 "configure"
+#line 9213 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 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 @@ done
 
   
 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 <<EOF
-#line 9183 "configure"
+#line 9254 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9190,7 +9261,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:9194: \"$ac_link\") 1>&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 @@ fi
 
 
   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 <<EOF
-#line 9238 "configure"
+#line 9309 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9245,7 +9316,7 @@ int main() {
 XOpenIM()
 ; return 0; }
 EOF
-if { (eval echo configure:9249: \"$ac_link\") 1>&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 @@ fi
         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 <<EOF
-#line 9278 "configure"
+#line 9349 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9285,7 +9356,7 @@ int main() {
 XmImMbLookupString()
 ; return 0; }
 EOF
-if { (eval echo configure:9289: \"$ac_link\") 1>&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 @@ EOF
 
     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 <<EOF
-#line 9362 "configure"
+#line 9433 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9369,7 +9440,7 @@ int main() {
 XmbDrawString()
 ; return 0; }
 EOF
-if { (eval echo configure:9373: \"$ac_link\") 1>&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 @@ EOF
     test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support
   test -z "$with_wnn" && { ac_safe=`echo "wnn/jllib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for wnn/jllib.h""... $ac_c" 1>&6
-echo "configure:9413: checking for wnn/jllib.h" >&5
+echo "configure:9484: checking for wnn/jllib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9416 "configure"
+#line 9487 "configure"
 #include "confdefs.h"
 #include <wnn/jllib.h>
 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 @@ fi
     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
+echo "configure:9517: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9449 "configure"
+#line 9520 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9468,7 +9539,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9472: \"$ac_link\") 1>&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 @@ done
 
     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 <<EOF
-#line 9506 "configure"
+#line 9577 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9513,7 +9584,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:9517: \"$ac_link\") 1>&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 @@ fi
     if test -z "$with_wnn" -o "$with_wnn" = "yes"; then
     
 echo $ac_n "checking for jl_dic_list_e in -lwnn""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 9557 "configure"
+#line 9628 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9564,7 +9635,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:9568: \"$ac_link\") 1>&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 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 9591 "configure"
+#line 9662 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9598,7 +9669,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:9602: \"$ac_link\") 1>&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 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 9625 "configure"
+#line 9696 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9632,7 +9703,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:9636: \"$ac_link\") 1>&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 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 9659 "configure"
+#line 9730 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9666,7 +9737,7 @@ int main() {
 dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:9670: \"$ac_link\") 1>&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 @@ EOF
     if test "$with_wnn6" != "no"; then
       
 echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 9723 "configure"
+#line 9794 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9730,7 +9801,7 @@ int main() {
 jl_fi_dic_list()
 ; return 0; }
 EOF
-if { (eval echo configure:9734: \"$ac_link\") 1>&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 @@ EOF
   if test "$with_canna" != "no"; then
     ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6
-echo "configure:9769: checking for canna/jrkanji.h" >&5
+echo "configure:9840: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9772 "configure"
+#line 9843 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 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 @@ fi
     c_switch_site="$c_switch_site -I/usr/local/canna/include"
     ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6
-echo "configure:9804: checking for canna/jrkanji.h" >&5
+echo "configure:9875: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9807 "configure"
+#line 9878 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 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 @@ fi
 
   test -z "$with_canna" && { ac_safe=`echo "canna/RK.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/RK.h""... $ac_c" 1>&6
-echo "configure:9840: checking for canna/RK.h" >&5
+echo "configure:9911: checking for canna/RK.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9843 "configure"
+#line 9914 "configure"
 #include "confdefs.h"
 #include <canna/RK.h>
 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 @@ fi
  }
   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 <<EOF
-#line 9876 "configure"
+#line 9947 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9883,7 +9954,7 @@ int main() {
 RkBgnBun()
 ; return 0; }
 EOF
-if { (eval echo configure:9887: \"$ac_link\") 1>&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 @@ fi
  }
   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 <<EOF
-#line 9915 "configure"
+#line 9986 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9922,7 +9993,7 @@ int main() {
 jrKanjiControl()
 ; return 0; }
 EOF
-if { (eval echo configure:9926: \"$ac_link\") 1>&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 @@ if test "$need_motif" = "yes" ; then
   libs_x="-lXm $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXm\" to \$libs_x"; fi
     
 echo $ac_n "checking for layout_object_getvalue in -li18n""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 9980 "configure"
+#line 10051 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9987,7 +10058,7 @@ int main() {
 layout_object_getvalue()
 ; return 0; }
 EOF
-if { (eval echo configure:9991: \"$ac_link\") 1>&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
 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
+echo "configure:10148: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10080 "configure"
+#line 10151 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10099,7 +10170,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10103: \"$ac_link\") 1>&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
 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
+echo "configure:10205: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10137 "configure"
+#line 10208 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10156,7 +10227,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10160: \"$ac_link\") 1>&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 @@ done
 
 
 echo $ac_n "checking for openpty""... $ac_c" 1>&6
-echo "configure:10189: checking for openpty" >&5
+echo "configure:10260: checking for openpty" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10192 "configure"
+#line 10263 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char openpty(); below.  */
@@ -10211,7 +10282,7 @@ openpty();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10215: \"$ac_link\") 1>&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 @@ else
 
   
 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 <<EOF
-#line 10239 "configure"
+#line 10310 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10246,7 +10317,7 @@ int main() {
 openpty()
 ; return 0; }
 EOF
-if { (eval echo configure:10250: \"$ac_link\") 1>&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 @@ EOF
 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
+echo "configure:10356: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10288 "configure"
+#line 10359 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 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 @@ done
   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
+echo "configure:10400: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10332 "configure"
+#line 10403 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 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 @@ else
 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
+echo "configure:10441: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10373 "configure"
+#line 10444 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10392,7 +10463,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10396: \"$ac_link\") 1>&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 @@ else
 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
+echo "configure:10498: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10430 "configure"
+#line 10501 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 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 @@ extra_objs="$extra_objs realpath.o" &&  if test "$extra_verbose" = "yes"; then
 for ac_func in getloadavg
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10472: checking for $ac_func" >&5
+echo "configure:10543: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10475 "configure"
+#line 10546 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10494,7 +10565,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10498: \"$ac_link\") 1>&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 @@ if test "$ac_cv_func_getloadavg" = "yes"; then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:10531: checking for $ac_hdr" >&5
+echo "configure:10602: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10534 "configure"
+#line 10605 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 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 @@ else
 
     
 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 <<EOF
-#line 10580 "configure"
+#line 10651 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10587,7 +10658,7 @@ int main() {
 kstat_open()
 ; return 0; }
 EOF
-if { (eval echo configure:10591: \"$ac_link\") 1>&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
 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
+echo "configure:10697: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10629 "configure"
+#line 10700 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 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 @@ done
 
     
 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 <<EOF
-#line 10671 "configure"
+#line 10742 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10678,7 +10749,7 @@ int main() {
 kvm_read()
 ; return 0; }
 EOF
-if { (eval echo configure:10682: \"$ac_link\") 1>&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
 fi
 
 echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6
-echo "configure:10716: checking whether netdb declares h_errno" >&5
+echo "configure:10787: checking whether netdb declares h_errno" >&5
 cat > conftest.$ac_ext <<EOF
-#line 10718 "configure"
+#line 10789 "configure"
 #include "confdefs.h"
 #include <netdb.h>
 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
 rm -f conftest*
 
 echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6
-echo "configure:10745: checking for sigsetjmp" >&5
+echo "configure:10816: checking for sigsetjmp" >&5
 cat > conftest.$ac_ext <<EOF
-#line 10747 "configure"
+#line 10818 "configure"
 #include "confdefs.h"
 #include <setjmp.h>
 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
 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 <<EOF
-#line 10778 "configure"
+#line 10849 "configure"
 #include "confdefs.h"
 #include <time.h>
 #if STDC_HEADERS
@@ -10809,7 +10880,7 @@ main()
   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 @@ fi
 
 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
+echo "configure:10914: checking whether gettimeofday accepts one or two arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 10845 "configure"
+#line 10916 "configure"
 #include "confdefs.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -10862,7 +10933,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:10866: \"$ac_link\") 1>&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
 
 
 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 <<EOF
-#line 10893 "configure"
+#line 10964 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:10900: \"$ac_compile\") 1>&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 @@ test "$ac_cv_c_inline" != "no" -a "$GCC" = "yes" && extra_objs="$extra_objs inli
  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
+echo "configure:11012: checking for working alloca.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10943 "configure"
+#line 11015 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 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 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:10974: checking for alloca" >&5
+echo "configure:11046: checking for alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10977 "configure"
+#line 11049 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -11001,7 +11073,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:11005: \"$ac_link\") 1>&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 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:11044: checking whether alloca needs Cray hooks" >&5
+echo "configure:11116: checking whether alloca needs Cray hooks" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11047 "configure"
+#line 11119 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -11067,10 +11139,10 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11071: checking for $ac_func" >&5
+echo "configure:11143: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11074 "configure"
+#line 11146 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -11093,7 +11165,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11097: \"$ac_link\") 1>&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 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:11127: checking stack direction for C alloca" >&5
+echo "configure:11199: checking stack direction for C alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11130 "configure"
+#line 11202 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -11145,7 +11217,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:11149: \"$ac_link\") 1>&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 @@ EOF
 
 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
+echo "configure:11251: checking for vfork.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11181 "configure"
+#line 11254 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 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 @@ else
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:11214: checking for working vfork" >&5
+echo "configure:11287: checking for working vfork" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11217 "configure"
+#line 11290 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -11308,7 +11381,7 @@ main() {
   }
 }
 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
 
 
 echo $ac_n "checking for working strcoll""... $ac_c" 1>&6
-echo "configure:11338: checking for working strcoll" >&5
+echo "configure:11411: checking for working strcoll" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11341 "configure"
+#line 11414 "configure"
 #include "confdefs.h"
 #include <string.h>
 main ()
@@ -11347,7 +11420,7 @@ main ()
        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
 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
+echo "configure:11452: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11382 "configure"
+#line 11455 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -11401,7 +11474,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11405: \"$ac_link\") 1>&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
 done
 
 echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6
-echo "configure:11433: checking whether getpgrp takes no argument" >&5
+echo "configure:11506: checking whether getpgrp takes no argument" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11436 "configure"
+#line 11509 "configure"
 #include "confdefs.h"
 
 /*
@@ -11487,7 +11560,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:11491: \"$ac_link\") 1>&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
 
 
 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 <<EOF
-#line 11521 "configure"
+#line 11594 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #include <unistd.h>
@@ -11550,7 +11623,7 @@ int main (int argc, char *argv[])
   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 @@ test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no
 if test "$rel_alloc $have_mmap" = "default yes"; then
   if test "$doug_lea_malloc" = "yes"; then
         echo $ac_n "checking for M_MMAP_THRESHOLD""... $ac_c" 1>&6
-echo "configure:11580: checking for M_MMAP_THRESHOLD" >&5
+echo "configure:11653: checking for M_MMAP_THRESHOLD" >&5
     cat > conftest.$ac_ext <<EOF
-#line 11582 "configure"
+#line 11655 "configure"
 #include "confdefs.h"
 #include <malloc.h>
 int main() {
@@ -11590,7 +11663,7 @@ int main() {
 
 ; 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 @@ EOF
 
 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
+echo "configure:11692: checking for termios.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11622 "configure"
+#line 11695 "configure"
 #include "confdefs.h"
 #include <termios.h>
 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 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "termio.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termio.h""... $ac_c" 1>&6
-echo "configure:11670: checking for termio.h" >&5
+echo "configure:11743: checking for termio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11673 "configure"
+#line 11746 "configure"
 #include "confdefs.h"
 #include <termio.h>
 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*
 
 
 echo $ac_n "checking for socket""... $ac_c" 1>&6
-echo "configure:11710: checking for socket" >&5
+echo "configure:11783: checking for socket" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11713 "configure"
+#line 11786 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -11732,7 +11805,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11736: \"$ac_link\") 1>&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 @@ if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "netinet/in.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for netinet/in.h""... $ac_c" 1>&6
-echo "configure:11751: checking for netinet/in.h" >&5
+echo "configure:11824: checking for netinet/in.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11754 "configure"
+#line 11827 "configure"
 #include "confdefs.h"
 #include <netinet/in.h>
 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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "arpa/inet.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for arpa/inet.h""... $ac_c" 1>&6
-echo "configure:11776: checking for arpa/inet.h" >&5
+echo "configure:11849: checking for arpa/inet.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11779 "configure"
+#line 11852 "configure"
 #include "confdefs.h"
 #include <arpa/inet.h>
 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 @@ EOF
 }
 
       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 <<EOF
-#line 11811 "configure"
+#line 11884 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -11818,7 +11891,7 @@ int main() {
 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 @@ else
 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 <<EOF
-#line 11842 "configure"
+#line 11915 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -11848,7 +11921,7 @@ int main() {
 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
 
 
 echo $ac_n "checking for msgget""... $ac_c" 1>&6
-echo "configure:11883: checking for msgget" >&5
+echo "configure:11956: checking for msgget" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11886 "configure"
+#line 11959 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char msgget(); below.  */
@@ -11905,7 +11978,7 @@ msgget();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11909: \"$ac_link\") 1>&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 @@ if eval "test \"`echo '$ac_cv_func_'msgget`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6
-echo "configure:11924: checking for sys/ipc.h" >&5
+echo "configure:11997: checking for sys/ipc.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11927 "configure"
+#line 12000 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6
-echo "configure:11949: checking for sys/msg.h" >&5
+echo "configure:12022: checking for sys/msg.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11952 "configure"
+#line 12025 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 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*
 
 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
+echo "configure:12068: checking for dirent.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11998 "configure"
+#line 12071 "configure"
 #include "confdefs.h"
 #include <dirent.h>
 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 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "sys/dir.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/dir.h""... $ac_c" 1>&6
-echo "configure:12030: checking for sys/dir.h" >&5
+echo "configure:12103: checking for sys/dir.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12033 "configure"
+#line 12106 "configure"
 #include "confdefs.h"
 #include <sys/dir.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure: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*
 
 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
+echo "configure:12144: checking for nlist.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12074 "configure"
+#line 12147 "configure"
 #include "confdefs.h"
 #include <nlist.h>
 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*
 
 
 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
+echo "configure:12189: checking for multimedia/audio_device.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12119 "configure"
+#line 12192 "configure"
 #include "confdefs.h"
 #include <multimedia/audio_device.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure: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*
       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 <<EOF
-#line 12177 "configure"
+#line 12250 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12184,7 +12257,7 @@ int main() {
 ALopenport()
 ; return 0; }
 EOF
-if { (eval echo configure:12188: \"$ac_link\") 1>&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
       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 <<EOF
-#line 12224 "configure"
+#line 12297 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12231,7 +12304,7 @@ int main() {
 AOpenAudio()
 ; return 0; }
 EOF
-if { (eval echo configure:12235: \"$ac_link\") 1>&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
     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
+echo "configure:12346: checking for ${dir}/soundcard.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12276 "configure"
+#line 12349 "configure"
 #include "confdefs.h"
 #include <${dir}/soundcard.h>
 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*
 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
+echo "configure:12415: checking for audio/audiolib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12345 "configure"
+#line 12418 "configure"
 #include "confdefs.h"
 #include <audio/audiolib.h>
 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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   
     
 echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 12373 "configure"
+#line 12446 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12380,7 +12453,7 @@ int main() {
 AuOpenServer()
 ; return 0; }
 EOF
-if { (eval echo configure:12384: \"$ac_link\") 1>&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 @@ EOF
  fi
     libs_x="-laudio $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-laudio\" to \$libs_x"; fi
             cat > conftest.$ac_ext <<EOF
-#line 12423 "configure"
+#line 12496 "configure"
 #include "confdefs.h"
 #include <audio/Xtutil.h>
 EOF
@@ -12450,7 +12523,7 @@ if test "$with_esd_sound" != "no"; then
   # Extract the first word of "esd-config", so it can be a program name with args.
 set dummy esd-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure: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.
     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
+echo "configure:12556: checking for esd_play_stream" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12486 "configure"
+#line 12559 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char esd_play_stream(); below.  */
@@ -12505,7 +12578,7 @@ esd_play_stream();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12509: \"$ac_link\") 1>&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 @@ test -z "$with_tty" && with_tty=yes
 
 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 @@ EOF
     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 <<EOF
-#line 12581 "configure"
+#line 12654 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12588,7 +12661,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:12592: \"$ac_link\") 1>&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 @@ EOF
 
     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
+echo "configure:12698: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12628 "configure"
+#line 12701 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 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*
 
     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
+echo "configure:12728: checking for ncurses/term.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12658 "configure"
+#line 12731 "configure"
 #include "confdefs.h"
 #include <ncurses/term.h>
 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*
       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
+echo "configure:12766: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12696 "configure"
+#line 12769 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 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*
        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 <<EOF
-#line 12741 "configure"
+#line 12814 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12748,7 +12821,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:12752: \"$ac_link\") 1>&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
       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 <<EOF
-#line 12788 "configure"
+#line 12861 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12795,7 +12868,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:12799: \"$ac_link\") 1>&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 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 12822 "configure"
+#line 12895 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12829,7 +12902,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:12833: \"$ac_link\") 1>&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 @@ EOF
 
     test -z "$with_gpm" && { ac_safe=`echo "gpm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for gpm.h""... $ac_c" 1>&6
-echo "configure:12881: checking for gpm.h" >&5
+echo "configure:12954: checking for gpm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12884 "configure"
+#line 12957 "configure"
 #include "confdefs.h"
 #include <gpm.h>
 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*
  }
   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 <<EOF
-#line 12917 "configure"
+#line 12990 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12924,7 +12997,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:12928: \"$ac_link\") 1>&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_x11" = "yes" -o "$with_tty" = "yes" && extra_objs="$extra_objs event
 
 test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \
   != "no no no" && echo "checking for database support" 1>&6
-echo "configure: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
+echo "configure:13056: checking for ndbm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12986 "configure"
+#line 13059 "configure"
 #include "confdefs.h"
 #include <ndbm.h>
 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*
 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 <<EOF
-#line 13026 "configure"
+#line 13099 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13033,7 +13106,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:13037: \"$ac_link\") 1>&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
 
 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
+echo "configure:13138: checking for dbm_open" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13068 "configure"
+#line 13141 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dbm_open(); below.  */
@@ -13087,7 +13160,7 @@ dbm_open();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13091: \"$ac_link\") 1>&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 @@ else
 
     
 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 <<EOF
-#line 13115 "configure"
+#line 13188 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13122,7 +13195,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:13126: \"$ac_link\") 1>&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 @@ EOF
 
 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 <<EOF
-#line 13170 "configure"
+#line 13243 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -13188,7 +13261,7 @@ int main() {
 
 ; 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 @@ rm -f conftest*
 
   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 <<EOF
-#line 13210 "configure"
+#line 13283 "configure"
 #include "confdefs.h"
 #include <$db_h_file>
 #if DB_VERSION_MAJOR > 1
 rm -f conftest*
 
     echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6
-echo "configure:13229: checking for $dbfunc" >&5
+echo "configure:13302: checking for $dbfunc" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13232 "configure"
+#line 13305 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $dbfunc(); below.  */
@@ -13251,7 +13324,7 @@ $dbfunc();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13255: \"$ac_link\") 1>&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 @@ else
 
     
 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 <<EOF
-#line 13279 "configure"
+#line 13352 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13286,7 +13359,7 @@ int main() {
 $dbfunc()
 ; return 0; }
 EOF
-if { (eval echo configure:13290: \"$ac_link\") 1>&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
 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 <<EOF
-#line 13359 "configure"
+#line 13432 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13366,7 +13439,7 @@ int main() {
 SOCKSinit()
 ; return 0; }
 EOF
-if { (eval echo configure:13370: \"$ac_link\") 1>&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
 
 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
+echo "configure:13505: checking for dlfcn.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13435 "configure"
+#line 13508 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 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 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   
       
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 13463 "configure"
+#line 13536 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13470,7 +13543,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:13474: \"$ac_link\") 1>&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 @@ else
   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 <<EOF
-#line 13498 "configure"
+#line 13571 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13505,7 +13578,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:13509: \"$ac_link\") 1>&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 @@ EOF
     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 <<EOF
-#line 13553 "configure"
+#line 13626 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13560,7 +13633,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:13564: \"$ac_link\") 1>&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 @@ else
   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 <<EOF
-#line 13596 "configure"
+#line 13669 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13603,7 +13676,7 @@ int main() {
 dld_init()
 ; return 0; }
 EOF
-if { (eval echo configure:13607: \"$ac_link\") 1>&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 @@ xehost=$canonical
 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 @@ if test "$GCC" = "yes"; then
   XEGCC=yes
 else
   echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 13682 "configure"
+#line 13755 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -13700,7 +13773,7 @@ rm -f conftest*
 fi
 
 echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&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 @@ if test -n "$dll_cflags"; then
 
   # Check to make sure the dll_cflags actually works.
   echo $ac_n "checking if PIC flag ${dll_cflags} really works""... $ac_c" 1>&6
-echo "configure: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 <<EOF
-#line 13804 "configure"
+#line 13877 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:13811: \"$ac_compile\") 1>&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 @@ cc_produces_so=no
 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 @@ if test -n "$xcldf"; then
   xe_libs=
   ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5'
   cat > conftest.$ac_ext <<EOF
-#line 13893 "configure"
+#line 13966 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:13900: \"$ac_link\") 1>&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 -z "$LTLD"; then
   if test "$XEGCC" = yes; then
     # Check if gcc -print-prog-name=ld gives a path.
     echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure: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 @@ echo "configure:13925: checking for ld used by GCC" >&5
     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 @@ ld_dynamic_link_flags=
 
 # Check to see if it really is or isn't GNU ld.
 echo $ac_n "checking if the linker is GNU ld""... $ac_c" 1>&6
-echo "configure: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 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
   xe_gnu_ld=yes
@@ -14012,7 +14085,7 @@ else
   # OK - only NOW do we futz about with ld.
   # See if the linker supports building shared libraries.
   echo $ac_n "checking whether the linker supports shared libraries""... $ac_c" 1>&6
-echo "configure: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 @@ EOF
     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
+echo "configure:14304: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 14234 "configure"
+#line 14307 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -14253,7 +14326,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14257: \"$ac_link\") 1>&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 @@ done
 fi
 
 cat > conftest.$ac_ext <<EOF
-#line 14296 "configure"
+#line 14369 "configure"
 #include "confdefs.h"
 int main(int c,char *v[]){return 0;}
 EOF
-if { (eval echo configure:14300: \"$ac_link\") 1>&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
index dbbcaf6..6dcfa75 100644 (file)
@@ -57,7 +57,7 @@ dnl - no cache file
 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 @@ case "$canonical" in
   *-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 @@ dnl Avoid re-AC_DEFINE-ing xmkmf symbols we've already defined above.
 
   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 <X11/Xlib.h>
+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 @@ fi
 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 @@ fi
 
 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 case "${GCC}${opsys}" in hpux* )
 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.
index 856fc15..e2ae0ca 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -255,7 +255,7 @@ height of the default face.  Set `window-pixel-scroll-increment' to
 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'.
 
index 138ea65..7251e06 100644 (file)
@@ -227,7 +227,8 @@ Front-end for Inferior Lisp.
 
 *** os-utils
 
-Miscellaneous single-file O/S utilities.
+Miscellaneous single-file O/S utilities, for printing, archiving,
+compression, remote shells, etc.
 
 *** view-process
 
index 4acd152..fd90b74 100644 (file)
@@ -41,12 +41,12 @@ Foundation instead of in the original English.
 Indirect:
 internals.info-1: 1776
 internals.info-2: 46627
-internals.info-3: 94462
-internals.info-4: 144159
+internals.info-3: 94463
+internals.info-4: 144160
 internals.info-5: 194051
-internals.info-6: 243653
-internals.info-7: 287720
-internals.info-8: 336587
+internals.info-6: 243655
+internals.info-7: 287722
+internals.info-8: 336589
 \1f
 Tag Table:
 (Indirect)
@@ -65,34 +65,34 @@ Node: The XEmacs Object System (Abstractly Speaking)\7f46627
 Node: How Lisp Objects Are Represented in C\7f60713
 Node: Rules When Writing New C Code\7f65390
 Node: General Coding Rules\7f66194
-Node: Writing Lisp Primitives\7f71914
-Node: Adding Global Lisp Variables\7f83083
-Node: Coding for Mule\7f86721
-Node: Character-Related Data Types\7f87700
-Node: Working With Character and Byte Positions\7f90697
-Node: Conversion to and from External Data\7f94462
-Node: General Guidelines for Writing Mule-Aware Code\7f100603
-Node: An Example of Mule-Aware Code\7f103291
-Node: Techniques for XEmacs Developers\7f105272
-Node: A Summary of the Various XEmacs Modules\7f113219
-Node: Low-Level Modules\7f114039
-Node: Basic Lisp Modules\7f121500
-Node: Modules for Standard Editing Operations\7f128094
-Node: Editor-Level Control Flow Modules\7f133982
-Node: Modules for the Basic Displayable Lisp Objects\7f137493
-Node: Modules for other Display-Related Lisp Objects\7f140446
-Node: Modules for the Redisplay Mechanism\7f141787
-Node: Modules for Interfacing with the File System\7f144159
-Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f147857
-Node: Modules for Interfacing with the Operating System\7f153310
-Node: Modules for Interfacing with X Windows\7f160866
-Node: Modules for Internationalization\7f164349
-Node: Allocation of Objects in XEmacs Lisp\7f166986
-Node: Introduction to Allocation\7f167507
-Node: Garbage Collection\7f171193
-Node: GCPROing\7f172349
-Node: Garbage Collection - Step by Step\7f179353
-Node: Invocation\7f179745
+Node: Writing Lisp Primitives\7f71915
+Node: Adding Global Lisp Variables\7f83084
+Node: Coding for Mule\7f86722
+Node: Character-Related Data Types\7f87701
+Node: Working With Character and Byte Positions\7f90698
+Node: Conversion to and from External Data\7f94463
+Node: General Guidelines for Writing Mule-Aware Code\7f100604
+Node: An Example of Mule-Aware Code\7f103292
+Node: Techniques for XEmacs Developers\7f105273
+Node: A Summary of the Various XEmacs Modules\7f113220
+Node: Low-Level Modules\7f114040
+Node: Basic Lisp Modules\7f121501
+Node: Modules for Standard Editing Operations\7f128095
+Node: Editor-Level Control Flow Modules\7f133983
+Node: Modules for the Basic Displayable Lisp Objects\7f137494
+Node: Modules for other Display-Related Lisp Objects\7f140447
+Node: Modules for the Redisplay Mechanism\7f141788
+Node: Modules for Interfacing with the File System\7f144160
+Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f147858
+Node: Modules for Interfacing with the Operating System\7f153311
+Node: Modules for Interfacing with X Windows\7f160867
+Node: Modules for Internationalization\7f164350
+Node: Allocation of Objects in XEmacs Lisp\7f166987
+Node: Introduction to Allocation\7f167508
+Node: Garbage Collection\7f171194
+Node: GCPROing\7f172350
+Node: Garbage Collection - Step by Step\7f179354
+Node: Invocation\7f179746
 Node: garbage_collect_1\7f182759
 Node: mark_object\7f192239
 Node: gc_sweep\7f194051
@@ -103,87 +103,87 @@ Node: sweep_bit_vectors_1\7f203254
 Node: Integers and Characters\7f203930
 Node: Allocation from Frob Blocks\7f204682
 Node: lrecords\7f206286
-Node: Low-level allocation\7f218510
-Node: Cons\7f222617
-Node: Vector\7f223343
-Node: Bit Vector\7f223920
-Node: Symbol\7f224413
-Node: Marker\7f224767
-Node: String\7f225322
-Node: Compiled Function\7f228935
-Node: Dumping\7f229104
-Node: Overview\7f231325
-Node: Data descriptions\7f231895
-Node: Dumping phase\7f233900
-Node: Object inventory\7f234303
-Node: Address allocation\7f237157
-Node: The header\7f238544
-Node: Data dumping\7f239052
-Node: Pointers dumping\7f239713
-Node: Reloading phase\7f240931
-Node: Remaining issues\7f242692
-Node: Events and the Event Loop\7f243653
-Node: Introduction to Events\7f244103
-Node: Main Loop\7f246052
-Node: Specifics of the Event Gathering Mechanism\7f249627
-Node: Specifics About the Emacs Event\7f262080
-Node: The Event Stream Callback Routines\7f262335
-Node: Other Event Loop Functions\7f262580
-Node: Converting Events\7f263720
-Node: Dispatching Events; The Command Builder\7f264329
-Node: Evaluation; Stack Frames; Bindings\7f264564
-Node: Evaluation\7f264906
-Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f271461
-Node: Simple Special Forms\7f273845
-Node: Catch and Throw\7f274628
-Node: Symbols and Variables\7f277203
-Node: Introduction to Symbols\7f277467
-Node: Obarrays\7f278535
-Node: Symbol Values\7f282068
-Node: Buffers and Textual Representation\7f284356
-Node: Introduction to Buffers\7f285014
-Node: The Text in a Buffer\7f287720
-Node: Buffer Lists\7f294870
-Node: Markers and Extents\7f296821
-Node: Bufbytes and Emchars\7f299086
-Node: The Buffer Object\7f299301
-Node: MULE Character Sets and Encodings\7f302781
-Node: Character Sets\7f303843
-Node: Encodings\7f307328
-Node: Japanese EUC (Extended Unix Code)\7f308395
-Node: JIS7\7f309227
-Node: Internal Mule Encodings\7f310577
-Node: Internal String Encoding\7f312407
-Node: Internal Character Encoding\7f314552
-Node: CCL\7f316276
-Node: The Lisp Reader and Compiler\7f323029
-Node: Lstreams\7f323242
-Node: Creating an Lstream\7f324273
-Node: Lstream Types\7f325500
-Node: Lstream Functions\7f325752
-Node: Lstream Methods\7f329318
-Node: Consoles; Devices; Frames; Windows\7f332460
-Node: Introduction to Consoles; Devices; Frames; Windows\7f332775
-Node: Point\7f335308
-Node: Window Hierarchy\7f336587
-Node: The Window Object\7f341035
-Node: The Redisplay Mechanism\7f344472
-Node: Critical Redisplay Sections\7f345264
-Node: Line Start Cache\7f346251
-Node: Redisplay Piece by Piece\7f349487
-Node: Extents\7f351524
-Node: Introduction to Extents\7f352058
-Node: Extent Ordering\7f353200
-Node: Format of the Extent Info\7f354441
-Node: Zero-Length Extents\7f356328
-Node: Mathematics of Extent Ordering\7f357726
-Node: Extent Fragments\7f362483
-Node: Faces\7f363569
-Node: Glyphs\7f363685
-Node: Specifiers\7f366704
-Node: Menus\7f366833
-Node: Subprocesses\7f369091
-Node: Interface to X Windows\7f371067
-Node: Index\7f371238
+Node: Low-level allocation\7f218512
+Node: Cons\7f222619
+Node: Vector\7f223345
+Node: Bit Vector\7f223922
+Node: Symbol\7f224415
+Node: Marker\7f224769
+Node: String\7f225324
+Node: Compiled Function\7f228937
+Node: Dumping\7f229106
+Node: Overview\7f231327
+Node: Data descriptions\7f231897
+Node: Dumping phase\7f233902
+Node: Object inventory\7f234305
+Node: Address allocation\7f237159
+Node: The header\7f238546
+Node: Data dumping\7f239054
+Node: Pointers dumping\7f239715
+Node: Reloading phase\7f240933
+Node: Remaining issues\7f242694
+Node: Events and the Event Loop\7f243655
+Node: Introduction to Events\7f244105
+Node: Main Loop\7f246054
+Node: Specifics of the Event Gathering Mechanism\7f249629
+Node: Specifics About the Emacs Event\7f262082
+Node: The Event Stream Callback Routines\7f262337
+Node: Other Event Loop Functions\7f262582
+Node: Converting Events\7f263722
+Node: Dispatching Events; The Command Builder\7f264331
+Node: Evaluation; Stack Frames; Bindings\7f264566
+Node: Evaluation\7f264908
+Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f271463
+Node: Simple Special Forms\7f273847
+Node: Catch and Throw\7f274630
+Node: Symbols and Variables\7f277205
+Node: Introduction to Symbols\7f277469
+Node: Obarrays\7f278537
+Node: Symbol Values\7f282070
+Node: Buffers and Textual Representation\7f284358
+Node: Introduction to Buffers\7f285016
+Node: The Text in a Buffer\7f287722
+Node: Buffer Lists\7f294872
+Node: Markers and Extents\7f296823
+Node: Bufbytes and Emchars\7f299088
+Node: The Buffer Object\7f299303
+Node: MULE Character Sets and Encodings\7f302783
+Node: Character Sets\7f303845
+Node: Encodings\7f307330
+Node: Japanese EUC (Extended Unix Code)\7f308397
+Node: JIS7\7f309229
+Node: Internal Mule Encodings\7f310579
+Node: Internal String Encoding\7f312409
+Node: Internal Character Encoding\7f314554
+Node: CCL\7f316278
+Node: The Lisp Reader and Compiler\7f323031
+Node: Lstreams\7f323244
+Node: Creating an Lstream\7f324275
+Node: Lstream Types\7f325502
+Node: Lstream Functions\7f325754
+Node: Lstream Methods\7f329320
+Node: Consoles; Devices; Frames; Windows\7f332462
+Node: Introduction to Consoles; Devices; Frames; Windows\7f332777
+Node: Point\7f335310
+Node: Window Hierarchy\7f336589
+Node: The Window Object\7f341041
+Node: The Redisplay Mechanism\7f344478
+Node: Critical Redisplay Sections\7f345270
+Node: Line Start Cache\7f346257
+Node: Redisplay Piece by Piece\7f349493
+Node: Extents\7f351530
+Node: Introduction to Extents\7f352064
+Node: Extent Ordering\7f353206
+Node: Format of the Extent Info\7f354447
+Node: Zero-Length Extents\7f356334
+Node: Mathematics of Extent Ordering\7f357734
+Node: Extent Fragments\7f362491
+Node: Faces\7f363577
+Node: Glyphs\7f363693
+Node: Specifiers\7f366712
+Node: Menus\7f366841
+Node: Subprocesses\7f369099
+Node: Interface to X Windows\7f371075
+Node: Index\7f371246
 \1f
 End Tag Table
index 0dbaa54..b3867f7 100644 (file)
@@ -590,9 +590,9 @@ copying a supplied argument into a local variable, so that
    Lisp lists are popular data structures in the C code as well as in
 Elisp.  There are two sets of macros that iterate over lists.
 `EXTERNAL_LIST_LOOP_N' should be used when the list has been supplied
-by the user, and cannot be trusted to be acyclic and nil-terminated.  A
-`malformed-list' or `circular-list' error will be generated if the list
-being iterated over is not entirely kosher.  `LIST_LOOP_N', on the
+by the user, and cannot be trusted to be acyclic and `nil'-terminated.
+A `malformed-list' or `circular-list' error will be generated if the
+list being iterated over is not entirely kosher.  `LIST_LOOP_N', on the
 other hand, is faster and less safe, and can be used only on trusted
 lists.
 
index f7da7ad..6ab2727 100644 (file)
@@ -53,51 +53,52 @@ Foundation instead of in the original English.
 Indirect:
 lispref.info-1: 2366
 lispref.info-2: 48665
-lispref.info-3: 97204
-lispref.info-4: 147044
-lispref.info-5: 195878
-lispref.info-6: 243565
-lispref.info-7: 291843
-lispref.info-8: 340452
-lispref.info-9: 388779
-lispref.info-10: 438231
-lispref.info-11: 486459
-lispref.info-12: 536230
-lispref.info-13: 584130
-lispref.info-14: 632353
-lispref.info-15: 680607
-lispref.info-16: 726799
-lispref.info-17: 775533
-lispref.info-18: 825531
-lispref.info-19: 875222
-lispref.info-20: 924063
-lispref.info-21: 973600
-lispref.info-22: 1021181
-lispref.info-23: 1067505
-lispref.info-24: 1116678
-lispref.info-25: 1165730
-lispref.info-26: 1215205
-lispref.info-27: 1260832
-lispref.info-28: 1310121
-lispref.info-29: 1357971
-lispref.info-30: 1406195
-lispref.info-31: 1455872
-lispref.info-32: 1504421
-lispref.info-33: 1553719
-lispref.info-34: 1595052
-lispref.info-35: 1641357
-lispref.info-36: 1690574
-lispref.info-37: 1727545
-lispref.info-38: 1776475
-lispref.info-39: 1825715
-lispref.info-40: 1874374
-lispref.info-41: 1922471
-lispref.info-42: 1970588
-lispref.info-43: 2018981
-lispref.info-44: 2067685
-lispref.info-45: 2117245
-lispref.info-46: 2159831
-lispref.info-47: 2189044
+lispref.info-3: 97152
+lispref.info-4: 146992
+lispref.info-5: 196731
+lispref.info-6: 245085
+lispref.info-7: 293492
+lispref.info-8: 342147
+lispref.info-9: 387229
+lispref.info-10: 436160
+lispref.info-11: 485017
+lispref.info-12: 533548
+lispref.info-13: 581024
+lispref.info-14: 630620
+lispref.info-15: 678992
+lispref.info-16: 724920
+lispref.info-17: 770257
+lispref.info-18: 817727
+lispref.info-19: 865285
+lispref.info-20: 912910
+lispref.info-21: 960937
+lispref.info-22: 1009857
+lispref.info-23: 1056119
+lispref.info-24: 1102583
+lispref.info-25: 1152243
+lispref.info-26: 1200932
+lispref.info-27: 1249787
+lispref.info-28: 1298454
+lispref.info-29: 1345033
+lispref.info-30: 1393850
+lispref.info-31: 1442263
+lispref.info-32: 1492252
+lispref.info-33: 1540816
+lispref.info-34: 1587991
+lispref.info-35: 1637817
+lispref.info-36: 1686493
+lispref.info-37: 1732226
+lispref.info-38: 1781365
+lispref.info-39: 1828801
+lispref.info-40: 1877354
+lispref.info-41: 1923907
+lispref.info-42: 1972602
+lispref.info-43: 2016977
+lispref.info-44: 2061346
+lispref.info-45: 2107840
+lispref.info-46: 2148682
+lispref.info-47: 2197899
+lispref.info-48: 2211766
 \1f
 Tag Table:
 (Indirect)
@@ -105,813 +106,813 @@ Node: Top\7f2366
 Node: Copying\7f48665
 Node: Introduction\7f67823
 Node: Caveats\7f69414
-Node: Lisp History\7f71145
-Node: Conventions\7f72401
-Node: Some Terms\7f73216
-Node: nil and t\7f73937
-Node: Evaluation Notation\7f75614
-Node: Printing Notation\7f76527
-Node: Error Messages\7f77401
-Node: Buffer Text Notation\7f77842
-Node: Format of Descriptions\7f78717
-Node: A Sample Function Description\7f79571
-Node: A Sample Variable Description\7f83557
-Node: Acknowledgements\7f84465
-Node: Lisp Data Types\7f86443
-Node: Printed Representation\7f88998
-Node: Comments\7f91040
-Node: Primitive Types\7f91937
-Node: Programming Types\7f93596
-Node: Integer Type\7f95548
-Node: Floating Point Type\7f96585
-Node: Character Type\7f97204
-Node: Symbol Type\7f105108
-Node: Sequence Type\7f107803
-Node: Cons Cell Type\7f109322
-Node: Dotted Pair Notation\7f113806
-Node: Association List Type\7f115927
-Node: Array Type\7f116810
-Node: String Type\7f118276
-Node: Vector Type\7f120957
-Node: Bit Vector Type\7f121729
-Node: Function Type\7f122591
-Node: Macro Type\7f123704
-Node: Primitive Function Type\7f124401
-Node: Compiled-Function Type\7f125927
-Node: Autoload Type\7f126481
-Node: Char Table Type\7f127495
-Node: Hash Table Type\7f127669
-Node: Range Table Type\7f128824
-Node: Weak List Type\7f129677
-Node: Editing Types\7f129827
-Node: Buffer Type\7f131454
-Node: Marker Type\7f133481
-Node: Extent Type\7f134205
-Node: Window Type\7f135473
-Node: Frame Type\7f136884
-Node: Device Type\7f137679
-Node: Console Type\7f138505
-Node: Window Configuration Type\7f139706
-Node: Event Type\7f140404
-Node: Process Type\7f140568
-Node: Stream Type\7f141603
-Node: Keymap Type\7f142726
-Node: Syntax Table Type\7f143264
-Node: Display Table Type\7f144287
-Node: Database Type\7f144726
-Node: Charset Type\7f144892
-Node: Coding System Type\7f145056
-Node: ToolTalk Message Type\7f145240
-Node: ToolTalk Pattern Type\7f145439
-Node: Window-System Types\7f145611
-Node: Face Type\7f146757
-Node: Glyph Type\7f146888
-Node: Specifier Type\7f147044
-Node: Font Instance Type\7f147217
-Node: Color Instance Type\7f147407
-Node: Image Instance Type\7f147604
-Node: Toolbar Button Type\7f147802
-Node: Subwindow Type\7f147995
-Node: X Resource Type\7f148174
-Node: Type Predicates\7f148327
-Node: Equality Predicates\7f157456
-Node: Numbers\7f162261
-Node: Integer Basics\7f163716
-Node: Float Basics\7f166065
-Node: Predicates on Numbers\7f167807
-Node: Comparison of Numbers\7f169440
-Node: Numeric Conversions\7f173261
-Node: Arithmetic Operations\7f174727
-Node: Rounding Operations\7f180192
-Node: Bitwise Operations\7f181297
-Node: Math Functions\7f190343
-Node: Random Numbers\7f192659
-Node: Strings and Characters\7f194425
-Node: String Basics\7f195878
-Node: Predicates for Strings\7f198296
-Node: Creating Strings\7f199059
-Node: Predicates for Characters\7f204376
-Node: Character Codes\7f205447
-Node: Text Comparison\7f206860
-Node: String Conversion\7f210222
-Node: Modifying Strings\7f213898
-Node: String Properties\7f214539
-Node: Formatting Strings\7f215184
-Node: Character Case\7f224802
-Node: Case Tables\7f227948
-Node: Char Tables\7f231846
-Node: Char Table Types\7f233238
-Node: Working With Char Tables\7f234813
-Node: Lists\7f236762
-Node: Cons Cells\7f237885
-Node: Lists as Boxes\7f239221
-Node: List-related Predicates\7f241863
-Node: List Elements\7f243565
-Node: Building Lists\7f248594
-Node: Modifying Lists\7f254586
-Node: Setcar\7f255398
-Node: Setcdr\7f257819
-Node: Rearrangement\7f260330
-Node: Sets And Lists\7f265916
-Node: Association Lists\7f270144
-Ref: Association Lists-Footnote-1\7f279435
-Node: Property Lists\7f279640
-Node: Working With Normal Plists\7f281188
-Node: Working With Lax Plists\7f283456
-Node: Converting Plists To/From Alists\7f285696
-Node: Weak Lists\7f287044
-Node: Sequences Arrays Vectors\7f289207
-Node: Sequence Functions\7f291843
-Node: Arrays\7f295502
-Node: Array Functions\7f298566
-Node: Vectors\7f301099
-Node: Vector Functions\7f302597
-Node: Bit Vectors\7f305168
-Node: Bit Vector Functions\7f306013
-Node: Symbols\7f308263
-Node: Symbol Components\7f309312
-Node: Definitions\7f313485
-Node: Creating Symbols\7f315710
-Node: Symbol Properties\7f322744
-Node: Plists and Alists\7f324271
-Node: Object Plists\7f326020
-Node: Other Plists\7f328780
-Node: Evaluation\7f330582
-Node: Intro Eval\7f331387
-Ref: Intro Eval-Footnote-1\7f334740
-Node: Eval\7f334875
-Node: Forms\7f339293
-Node: Self-Evaluating Forms\7f340452
-Node: Symbol Forms\7f341965
-Node: Classifying Lists\7f342882
-Node: Function Indirection\7f343638
-Node: Function Forms\7f346749
-Node: Macro Forms\7f347746
-Node: Special Forms\7f349346
-Node: Autoloading\7f351655
-Node: Quoting\7f352153
-Node: Control Structures\7f353514
-Node: Sequencing\7f355134
-Node: Conditionals\7f357999
-Node: Combining Conditions\7f361422
-Node: Iteration\7f364692
-Node: Nonlocal Exits\7f366471
-Node: Catch and Throw\7f367173
-Node: Examples of Catch\7f371012
-Node: Errors\7f373031
-Node: Signaling Errors\7f374520
-Node: Processing of Errors\7f379259
-Node: Handling Errors\7f381538
-Node: Error Symbols\7f388779
-Node: Cleanups\7f392735
-Node: Variables\7f396513
-Node: Global Variables\7f398282
-Node: Constant Variables\7f399358
-Node: Local Variables\7f399984
-Node: Void Variables\7f404921
-Node: Defining Variables\7f408437
-Node: Accessing Variables\7f415601
-Node: Setting Variables\7f417026
-Node: Variable Scoping\7f421545
-Node: Scope\7f423144
-Node: Extent\7f424669
-Node: Impl of Scope\7f426148
-Node: Using Scoping\7f428111
-Node: Buffer-Local Variables\7f429633
-Node: Intro to Buffer-Local\7f430469
-Node: Creating Buffer-Local\7f433012
-Node: Default Value\7f438231
-Node: Variable Aliases\7f441374
-Node: Functions\7f443159
-Node: What Is a Function\7f444253
-Node: Lambda Expressions\7f448299
-Node: Lambda Components\7f449209
-Node: Simple Lambda\7f451041
-Node: Argument List\7f452698
-Node: Function Documentation\7f456426
-Node: Function Names\7f458368
-Node: Defining Functions\7f460941
-Node: Calling Functions\7f463981
-Node: Mapping Functions\7f467830
-Node: Anonymous Functions\7f470518
-Node: Function Cells\7f473763
-Node: Inline Functions\7f478573
-Node: Related Topics\7f480383
-Node: Macros\7f481436
-Node: Simple Macro\7f482720
-Node: Expansion\7f483455
-Node: Compiling Macros\7f486459
-Node: Defining Macros\7f488295
-Node: Backquote\7f489612
-Node: Problems with Macros\7f492009
-Node: Argument Evaluation\7f492704
-Node: Surprising Local Vars\7f495619
-Node: Eval During Expansion\7f497687
-Node: Repeated Expansion\7f499380
-Node: Customization\7f501296
-Node: Common Keywords\7f501765
-Node: Group Definitions\7f504610
-Node: Variable Definitions\7f506802
-Node: Customization Types\7f511792
-Node: Simple Types\7f513227
-Node: Composite Types\7f515384
-Node: Splicing into Lists\7f520074
-Node: Type Keywords\7f521909
-Node: Loading\7f525429
-Node: How Programs Do Loading\7f527104
-Node: Autoload\7f536230
-Node: Repeated Loading\7f542309
-Node: Named Features\7f544422
-Node: Unloading\7f550854
-Node: Hooks for Loading\7f553010
-Node: Byte Compilation\7f553727
-Node: Speed of Byte-Code\7f555644
-Node: Compilation Functions\7f556851
-Node: Docs and Compilation\7f563239
-Node: Dynamic Loading\7f565892
-Node: Eval During Compile\7f568256
-Node: Compiled-Function Objects\7f569521
-Node: Disassembly\7f574319
-Node: Debugging\7f581573
-Node: Debugger\7f582985
-Node: Error Debugging\7f584130
-Node: Infinite Loops\7f586883
-Node: Function Debugging\7f588127
-Node: Explicit Debug\7f590917
-Node: Using Debugger\7f591688
-Node: Debugger Commands\7f593550
-Node: Invoking the Debugger\7f597867
-Node: Internals of Debugger\7f601782
-Node: Syntax Errors\7f606669
-Node: Excess Open\7f607917
-Node: Excess Close\7f609792
-Node: Compilation Errors\7f611213
-Node: Edebug\7f612501
-Node: Using Edebug\7f614609
-Node: Instrumenting\7f617306
-Node: Edebug Execution Modes\7f620795
-Node: Jumping\7f623905
-Node: Edebug Misc\7f626248
-Node: Breakpoints\7f627637
-Node: Global Break Condition\7f630443
-Node: Embedded Breakpoints\7f631398
-Node: Trapping Errors\7f632353
-Node: Edebug Views\7f634429
-Node: Edebug Eval\7f636394
-Node: Eval List\7f637571
-Node: Reading in Edebug\7f640956
-Node: Printing in Edebug\7f641755
-Node: Tracing\7f643470
-Node: Coverage Testing\7f645356
-Node: The Outside Context\7f647397
-Node: Checking Whether to Stop\7f648346
-Node: Edebug Display Update\7f648993
-Node: Edebug Recursive Edit\7f651016
-Node: Instrumenting Macro Calls\7f652671
-Node: Specification List\7f655153
-Node: Backtracking\7f664564
-Node: Debugging Backquote\7f666502
-Node: Specification Examples\7f670208
-Node: Edebug Options\7f672275
-Node: Read and Print\7f677612
-Node: Streams Intro\7f678589
-Node: Input Streams\7f680607
-Node: Input Functions\7f685508
-Node: Output Streams\7f687568
-Node: Output Functions\7f691619
-Node: Output Variables\7f695919
-Node: Minibuffers\7f700718
-Node: Intro to Minibuffers\7f701870
-Node: Text from Minibuffer\7f704058
-Node: Object from Minibuffer\7f709144
-Node: Minibuffer History\7f713239
-Node: Completion\7f716218
-Node: Basic Completion\7f718193
-Node: Minibuffer Completion\7f723222
-Node: Completion Commands\7f726799
-Node: High-Level Completion\7f731456
-Node: Reading File Names\7f736199
-Node: Programmed Completion\7f739891
-Node: Yes-or-No Queries\7f742273
-Node: Multiple Queries\7f748010
-Node: Reading a Password\7f752077
-Node: Minibuffer Misc\7f753414
-Node: Command Loop\7f758284
-Node: Command Overview\7f759628
-Node: Defining Commands\7f762906
-Node: Using Interactive\7f763654
-Node: Interactive Codes\7f768427
-Node: Interactive Examples\7f774219
-Node: Interactive Call\7f775533
-Node: Command Loop Info\7f780934
-Node: Events\7f785913
-Node: Event Types\7f787373
-Node: Event Contents\7f789296
-Node: Event Predicates\7f793772
-Node: Accessing Mouse Event Positions\7f795097
-Node: Frame-Level Event Position Info\7f795796
-Node: Window-Level Event Position Info\7f796836
-Node: Event Text Position Info\7f798600
-Node: Event Glyph Position Info\7f801092
-Node: Event Toolbar Position Info\7f802415
-Node: Other Event Position Info\7f803086
-Node: Accessing Other Event Info\7f803495
-Node: Working With Events\7f805115
-Node: Converting Events\7f811103
-Node: Reading Input\7f814055
-Node: Key Sequence Input\7f815057
-Node: Reading One Event\7f817011
-Node: Dispatching an Event\7f819828
-Node: Quoted Character Input\7f820279
-Node: Peeking and Discarding\7f821627
-Node: Waiting\7f825531
-Node: Quitting\7f827839
-Node: Prefix Command Arguments\7f832247
-Node: Recursive Editing\7f837334
-Node: Disabling Commands\7f842130
-Node: Command History\7f844198
-Node: Keyboard Macros\7f845935
-Node: Keymaps\7f848152
-Node: Keymap Terminology\7f849729
-Node: Format of Keymaps\7f852658
-Node: Creating Keymaps\7f853069
-Node: Inheritance and Keymaps\7f855148
-Node: Key Sequences\7f857520
-Node: Prefix Keys\7f862316
-Node: Active Keymaps\7f865901
-Node: Key Lookup\7f875222
-Node: Functions for Key Lookup\7f880385
-Node: Changing Key Bindings\7f886082
-Node: Key Binding Commands\7f892979
-Node: Scanning Keymaps\7f895044
-Node: Other Keymap Functions\7f903555
-Node: Menus\7f904177
-Node: Menu Format\7f904769
-Node: Menubar Format\7f913415
-Node: Menubar\7f914040
-Node: Modifying Menus\7f917153
-Node: Menu Filters\7f922167
-Node: Pop-Up Menus\7f924063
-Node: Menu Accelerators\7f926268
-Node: Creating Menu Accelerators\7f927024
-Node: Keyboard Menu Traversal\7f928384
-Node: Menu Accelerator Functions\7f929111
-Node: Buffers Menu\7f932188
-Node: Dialog Boxes\7f933482
-Node: Dialog Box Format\7f933649
-Node: Dialog Box Functions\7f935074
-Node: Toolbar\7f935471
-Node: Toolbar Intro\7f935906
-Node: Creating Toolbar\7f938306
-Node: Toolbar Descriptor Format\7f939223
-Node: Specifying the Toolbar\7f943720
-Node: Other Toolbar Variables\7f947325
-Node: Gutter\7f951751
-Node: Gutter Intro\7f952340
-Node: Creating Gutter\7f954343
-Node: Gutter Descriptor Format\7f957226
-Node: Specifying a Gutter\7f961683
-Node: Other Gutter Variables\7f965216
-Node: Common Gutter Widgets\7f969601
-Node: Buffer Tabs\7f970593
-Node: Progress Bars\7f970734
-Node: Scrollbars\7f970879
-Node: Drag and Drop\7f971014
-Node: Supported Protocols\7f972090
-Node: OffiX DND\7f972593
-Node: CDE dt\7f973600
-Node: MSWindows OLE\7f974191
-Node: Loose ends\7f974362
-Node: Drop Interface\7f974754
-Node: Drag Interface\7f975776
-Node: Modes\7f975950
-Node: Major Modes\7f976901
-Node: Major Mode Conventions\7f979816
-Node: Example Major Modes\7f985771
-Node: Auto Major Mode\7f993804
-Node: Mode Help\7f1001252
-Node: Derived Modes\7f1002353
-Node: Minor Modes\7f1004544
-Node: Minor Mode Conventions\7f1005846
-Node: Keymaps and Minor Modes\7f1008709
-Node: Modeline Format\7f1009544
-Node: Modeline Data\7f1011312
-Node: Modeline Variables\7f1016465
-Node: %-Constructs\7f1021181
-Node: Hooks\7f1024168
-Node: Documentation\7f1030930
-Node: Documentation Basics\7f1032353
-Node: Accessing Documentation\7f1035403
-Node: Keys in Documentation\7f1041682
-Node: Describing Characters\7f1045161
-Node: Help Functions\7f1047510
-Node: Obsoleteness\7f1053961
-Node: Files\7f1056955
-Node: Visiting Files\7f1058880
-Node: Visiting Functions\7f1060385
-Node: Subroutines of Visiting\7f1065432
-Node: Saving Buffers\7f1067505
-Node: Reading from Files\7f1073598
-Node: Writing to Files\7f1075755
-Node: File Locks\7f1078472
-Node: Information about Files\7f1081525
-Node: Testing Accessibility\7f1082286
-Node: Kinds of Files\7f1086026
-Node: Truenames\7f1087707
-Node: File Attributes\7f1088709
-Node: Changing File Attributes\7f1093848
-Node: File Names\7f1099254
-Node: File Name Components\7f1100863
-Node: Directory Names\7f1103964
-Node: Relative File Names\7f1107417
-Node: File Name Expansion\7f1108495
-Node: Unique File Names\7f1112402
-Node: File Name Completion\7f1114017
-Node: User Name Completion\7f1116678
-Node: Contents of Directories\7f1118018
-Node: Create/Delete Dirs\7f1121331
-Node: Magic File Names\7f1122437
-Node: Partial Files\7f1128067
-Node: Intro to Partial Files\7f1128295
-Node: Creating a Partial File\7f1129535
-Node: Detached Partial Files\7f1130470
-Node: Format Conversion\7f1131592
-Node: Files and MS-DOS\7f1138108
-Node: Backups and Auto-Saving\7f1140172
-Node: Backup Files\7f1140847
-Node: Making Backups\7f1142244
-Node: Rename or Copy\7f1144993
-Node: Numbered Backups\7f1147486
-Node: Backup Names\7f1149721
-Node: Auto-Saving\7f1153013
-Node: Reverting\7f1161155
-Node: Buffers\7f1164313
-Node: Buffer Basics\7f1165730
-Node: Current Buffer\7f1167783
-Node: Buffer Names\7f1172471
-Node: Buffer File Name\7f1175676
-Node: Buffer Modification\7f1179795
-Node: Modification Time\7f1181988
-Node: Read Only Buffers\7f1185363
-Node: The Buffer List\7f1187781
-Node: Creating Buffers\7f1192611
-Node: Killing Buffers\7f1194757
-Node: Indirect Buffers\7f1198488
-Node: Windows\7f1201060
-Node: Basic Windows\7f1202538
-Node: Splitting Windows\7f1205636
-Node: Deleting Windows\7f1212525
-Node: Selecting Windows\7f1215205
-Node: Cyclic Window Ordering\7f1218334
-Node: Buffers and Windows\7f1222958
-Node: Displaying Buffers\7f1224799
-Node: Choosing Window\7f1229975
-Node: Window Point\7f1237691
-Node: Window Start\7f1239738
-Node: Vertical Scrolling\7f1244228
-Node: Horizontal Scrolling\7f1250365
-Node: Size of Window\7f1253874
-Node: Position of Window\7f1258592
-Node: Resizing Windows\7f1260832
-Node: Window Configurations\7f1266261
-Node: Frames\7f1269686
-Node: Creating Frames\7f1272027
-Node: Frame Properties\7f1273368
-Node: Property Access\7f1274184
-Node: Initial Properties\7f1275033
-Node: X Frame Properties\7f1277519
-Node: Size and Position\7f1282153
-Node: Frame Name\7f1284149
-Node: Frame Titles\7f1285063
-Node: Deleting Frames\7f1286887
-Node: Finding All Frames\7f1287487
-Node: Frames and Windows\7f1289481
-Node: Minibuffers and Frames\7f1291186
-Node: Input Focus\7f1292104
-Node: Visibility of Frames\7f1295181
-Node: Raising and Lowering\7f1297100
-Node: Frame Configurations\7f1299476
-Node: Frame Hooks\7f1300070
-Node: Consoles and Devices\7f1301875
-Node: Basic Console Functions\7f1304618
-Node: Basic Device Functions\7f1305041
-Node: Console Types and Device Classes\7f1305757
-Node: Connecting to a Console or Device\7f1307958
-Node: The Selected Console and Device\7f1310121
-Node: Console and Device I/O\7f1311147
-Node: Positions\7f1311911
-Node: Point\7f1312880
-Node: Motion\7f1315970
-Node: Character Motion\7f1316737
-Node: Word Motion\7f1318974
-Node: Buffer End Motion\7f1320475
-Node: Text Lines\7f1321972
-Node: Screen Lines\7f1326567
-Node: List Motion\7f1330630
-Node: Skipping Characters\7f1334038
-Node: Excursions\7f1336257
-Node: Narrowing\7f1339289
-Node: Markers\7f1344614
-Node: Overview of Markers\7f1345520
-Node: Predicates on Markers\7f1350212
-Node: Creating Markers\7f1351458
-Node: Information from Markers\7f1355495
-Node: Changing Markers\7f1356593
-Node: The Mark\7f1357971
-Node: The Region\7f1366465
-Node: Text\7f1372151
-Node: Near Point\7f1374850
-Node: Buffer Contents\7f1379037
-Node: Comparing Text\7f1380443
-Node: Insertion\7f1381851
-Node: Commands for Insertion\7f1385693
-Node: Deletion\7f1388649
-Node: User-Level Deletion\7f1392244
-Node: The Kill Ring\7f1396405
-Node: Kill Ring Concepts\7f1398579
-Node: Kill Functions\7f1399633
-Node: Yank Commands\7f1401538
-Node: Low-Level Kill Ring\7f1403409
-Node: Internals of Kill Ring\7f1406195
-Node: Undo\7f1408975
-Node: Maintaining Undo\7f1413304
-Node: Filling\7f1415924
-Node: Margins\7f1421918
-Node: Auto Filling\7f1425847
-Node: Sorting\7f1427028
-Node: Columns\7f1436328
-Node: Indentation\7f1438844
-Node: Primitive Indent\7f1439623
-Node: Mode-Specific Indent\7f1440867
-Node: Region Indent\7f1443378
-Node: Relative Indent\7f1446326
-Node: Indent Tabs\7f1448708
-Node: Motion by Indent\7f1450029
-Node: Case Changes\7f1450808
-Node: Text Properties\7f1454059
-Node: Examining Properties\7f1455872
-Node: Changing Properties\7f1457739
-Node: Property Search\7f1461330
-Node: Special Properties\7f1466041
-Node: Saving Properties\7f1466322
-Node: Substitution\7f1469464
-Node: Registers\7f1472734
-Node: Transposition\7f1475277
-Node: Change Hooks\7f1476171
-Node: Transformations\7f1478211
-Node: Searching and Matching\7f1482596
-Node: String Search\7f1483727
-Node: Regular Expressions\7f1488451
-Node: Syntax of Regexps\7f1489818
-Node: Regexp Example\7f1504421
-Node: Regexp Search\7f1506591
-Node: POSIX Regexps\7f1512679
-Node: Search and Replace\7f1514514
-Node: Match Data\7f1517879
-Node: Simple Match Data\7f1519009
-Node: Replacing Match\7f1523274
-Node: Entire Match Data\7f1525608
-Node: Saving Match Data\7f1527599
-Node: Searching and Case\7f1528980
-Node: Standard Regexps\7f1531014
-Node: Syntax Tables\7f1533212
-Node: Syntax Basics\7f1534326
-Node: Syntax Descriptors\7f1537298
-Node: Syntax Class Table\7f1539148
-Node: Syntax Flags\7f1545186
-Node: Syntax Table Functions\7f1548403
-Node: Motion and Syntax\7f1552267
-Node: Parsing Expressions\7f1553719
-Node: Standard Syntax Tables\7f1559788
-Node: Syntax Table Internals\7f1560632
-Node: Abbrevs\7f1561658
-Node: Abbrev Mode\7f1563461
-Node: Abbrev Tables\7f1564181
-Node: Defining Abbrevs\7f1565714
-Node: Abbrev Files\7f1567619
-Node: Abbrev Expansion\7f1569392
-Node: Standard Abbrev Tables\7f1574023
-Node: Extents\7f1575182
-Node: Intro to Extents\7f1576425
-Node: Creating and Modifying Extents\7f1580417
-Node: Extent Endpoints\7f1581924
-Node: Finding Extents\7f1585187
-Node: Mapping Over Extents\7f1588935
-Node: Extent Properties\7f1595052
-Node: Detached Extents\7f1605196
-Node: Extent Parents\7f1607055
-Node: Duplicable Extents\7f1608749
-Node: Extents and Events\7f1611970
-Node: Atomic Extents\7f1613877
-Node: Specifiers\7f1614324
-Node: Introduction to Specifiers\7f1616437
-Node: Specifiers In-Depth\7f1618747
-Node: Specifier Instancing\7f1623659
-Node: Specifier Types\7f1626921
-Node: Adding Specifications\7f1631995
-Node: Retrieving Specifications\7f1641357
-Node: Specifier Tag Functions\7f1645092
-Node: Specifier Instancing Functions\7f1648326
-Node: Specifier Example\7f1651733
-Node: Creating Specifiers\7f1654889
-Node: Specifier Validation Functions\7f1659206
-Node: Other Specification Functions\7f1661590
-Node: Faces and Window-System Objects\7f1665409
-Node: Faces\7f1665733
-Node: Merging Faces\7f1667350
-Node: Basic Face Functions\7f1669311
-Node: Face Properties\7f1671409
-Node: Face Convenience Functions\7f1681651
-Node: Other Face Display Functions\7f1684781
-Node: Fonts\7f1685594
-Node: Font Specifiers\7f1686295
-Node: Font Instances\7f1687480
-Node: Font Instance Names\7f1688447
-Node: Font Instance Size\7f1689288
-Node: Font Instance Characteristics\7f1690574
-Node: Font Convenience Functions\7f1691743
-Node: Colors\7f1693033
-Node: Color Specifiers\7f1693473
-Node: Color Instances\7f1695831
-Node: Color Instance Properties\7f1696575
-Node: Color Convenience Functions\7f1697201
-Node: Glyphs\7f1698254
-Node: Glyph Functions\7f1699855
-Node: Creating Glyphs\7f1700262
-Node: Glyph Properties\7f1712902
-Node: Glyph Convenience Functions\7f1722069
-Node: Glyph Dimensions\7f1726016
-Node: Images\7f1727096
-Node: Image Specifiers\7f1727545
-Node: Image Instantiator Conversion\7f1742891
-Node: Image Instances\7f1744256
-Node: Image Instance Types\7f1745007
-Node: Image Instance Functions\7f1747770
-Node: Glyph Types\7f1754821
-Node: Mouse Pointer\7f1756593
-Node: Redisplay Glyphs\7f1759596
-Node: Subwindows\7f1760629
-Node: Annotations\7f1760872
-Node: Annotation Basics\7f1761888
-Node: Annotation Primitives\7f1765826
-Node: Annotation Properties\7f1767155
-Node: Locating Annotations\7f1770195
-Node: Margin Primitives\7f1771032
-Node: Annotation Hooks\7f1772926
-Node: Display\7f1773586
-Node: Refresh Screen\7f1774564
-Node: Truncation\7f1776475
-Node: The Echo Area\7f1779000
-Node: Warnings\7f1785435
-Node: Invisible Text\7f1789871
-Node: Selective Display\7f1792450
-Node: Overlay Arrow\7f1796576
-Node: Temporary Displays\7f1797929
-Node: Blinking\7f1802050
-Node: Usual Display\7f1804235
-Node: Display Tables\7f1806784
-Node: Display Table Format\7f1807588
-Node: Active Display Table\7f1809030
-Node: Character Descriptors\7f1813025
-Node: Beeping\7f1813782
-Node: Hash Tables\7f1818548
-Node: Introduction to Hash Tables\7f1819156
-Node: Working With Hash Tables\7f1825715
-Node: Weak Hash Tables\7f1826832
-Node: Range Tables\7f1828849
-Node: Introduction to Range Tables\7f1829538
-Node: Working With Range Tables\7f1829969
-Node: Databases\7f1830854
-Node: Connecting to a Database\7f1831153
-Node: Working With a Database\7f1832245
-Node: Other Database Functions\7f1833103
-Node: Processes\7f1833677
-Node: Subprocess Creation\7f1835901
-Node: Synchronous Processes\7f1839190
-Node: MS-DOS Subprocesses\7f1845908
-Node: Asynchronous Processes\7f1846982
-Node: Deleting Processes\7f1850695
-Node: Process Information\7f1852566
-Node: Input to Processes\7f1856492
-Node: Signals to Processes\7f1858782
-Node: Output from Processes\7f1863598
-Node: Process Buffers\7f1864410
-Node: Filter Functions\7f1867277
-Node: Accepting Output\7f1872847
-Node: Sentinels\7f1874374
-Node: Process Window Size\7f1877864
-Node: Transaction Queues\7f1878213
-Node: Network\7f1879911
-Node: System Interface\7f1881745
-Node: Starting Up\7f1883015
-Node: Start-up Summary\7f1883609
-Node: Init File\7f1887163
-Node: Terminal-Specific\7f1889544
-Node: Command Line Arguments\7f1892703
-Node: Getting Out\7f1896192
-Node: Killing XEmacs\7f1896761
-Node: Suspending XEmacs\7f1898430
-Node: System Environment\7f1901772
-Node: User Identification\7f1908439
-Node: Time of Day\7f1911968
-Node: Time Conversion\7f1914755
-Node: Timers\7f1919795
-Node: Terminal Input\7f1921968
-Node: Input Modes\7f1922471
-Node: Translating Input\7f1924884
-Node: Recording Input\7f1929049
-Node: Terminal Output\7f1931149
-Node: Flow Control\7f1934772
-Node: Batch Mode\7f1938564
-Node: X-Windows\7f1939946
-Node: X Selections\7f1940817
-Node: X Server\7f1943027
-Node: Resources\7f1943478
-Node: Server Data\7f1948787
-Node: Grabs\7f1949994
-Node: X Miscellaneous\7f1951574
-Node: ToolTalk Support\7f1953959
-Node: XEmacs ToolTalk API Summary\7f1954176
-Node: Sending Messages\7f1955476
-Node: Example of Sending Messages\7f1955727
-Node: Elisp Interface for Sending Messages\7f1956789
-Node: Receiving Messages\7f1963181
-Node: Example of Receiving Messages\7f1963404
-Node: Elisp Interface for Receiving Messages\7f1964240
-Node: LDAP Support\7f1968065
-Node: Building XEmacs with LDAP support\7f1968559
-Node: XEmacs LDAP API\7f1969536
-Node: LDAP Variables\7f1970588
-Node: The High-Level LDAP API\7f1973188
-Node: The Low-Level LDAP API\7f1976651
-Node: The LDAP Lisp Object\7f1977482
-Node: Opening and Closing a LDAP Connection\7f1978035
-Node: Low-level Operations on a LDAP Server\7f1979835
-Node: LDAP Internationalization\7f1982529
-Node: LDAP Internationalization Variables\7f1983434
-Node: Encoder/Decoder Functions\7f1985163
-Node: Syntax of Search Filters\7f1986202
-Node: PostgreSQL Support\7f1987500
-Node: Building XEmacs with PostgreSQL support\7f1987895
-Node: XEmacs PostgreSQL libpq API\7f1989242
-Node: libpq Lisp Variables\7f1991121
-Node: libpq Lisp Symbols and DataTypes\7f1994085
-Node: Synchronous Interface Functions\7f2007325
-Node: Asynchronous Interface Functions\7f2011816
-Node: Large Object Support\7f2015319
-Node: Other libpq Functions\7f2015946
-Node: Unimplemented libpq Functions\7f2018981
-Node: XEmacs PostgreSQL libpq Examples\7f2024300
-Node: Internationalization\7f2030391
-Node: I18N Levels 1 and 2\7f2030734
-Node: I18N Level 3\7f2031440
-Node: Level 3 Basics\7f2031721
-Node: Level 3 Primitives\7f2032554
-Node: Dynamic Messaging\7f2034160
-Node: Domain Specification\7f2034623
-Node: Documentation String Extraction\7f2036526
-Node: I18N Level 4\7f2037444
-Node: MULE\7f2037636
-Node: Internationalization Terminology\7f2038685
-Node: Charsets\7f2050884
-Node: Charset Properties\7f2051580
-Node: Basic Charset Functions\7f2056295
-Node: Charset Property Functions\7f2058476
-Node: Predefined Charsets\7f2060518
-Node: MULE Characters\7f2063438
-Node: Composite Characters\7f2064285
-Node: Coding Systems\7f2065545
-Node: Coding System Types\7f2067685
-Node: ISO 2022\7f2071669
-Node: EOL Conversion\7f2083944
-Node: Coding System Properties\7f2085116
-Node: Basic Coding System Functions\7f2089433
-Node: Coding System Property Functions\7f2091467
-Node: Encoding and Decoding Text\7f2092025
-Node: Detection of Textual Encoding\7f2093161
-Node: Big5 and Shift-JIS Functions\7f2094697
-Node: Predefined Coding Systems\7f2095823
-Node: CCL\7f2107917
-Node: CCL Syntax\7f2111021
-Node: CCL Statements\7f2112597
-Node: CCL Expressions\7f2117245
-Node: Calling CCL\7f2119784
-Node: CCL Examples\7f2122773
-Node: Category Tables\7f2122910
-Node: Tips\7f2125268
-Node: Style Tips\7f2125909
-Node: Compilation Tips\7f2135428
-Node: Documentation Tips\7f2137342
-Node: Comment Tips\7f2142851
-Node: Library Headers\7f2145853
-Node: Building XEmacs and Object Allocation\7f2149825
-Node: Building XEmacs\7f2150708
-Node: Pure Storage\7f2157043
-Node: Garbage Collection\7f2159831
-Node: Standard Errors\7f2170970
-Node: Standard Buffer-Local Variables\7f2175179
-Node: Standard Keymaps\7f2177812
-Node: Standard Hooks\7f2181544
-Node: Index\7f2189044
+Node: Lisp History\7f71093
+Node: Conventions\7f72349
+Node: Some Terms\7f73164
+Node: nil and t\7f73885
+Node: Evaluation Notation\7f75562
+Node: Printing Notation\7f76475
+Node: Error Messages\7f77349
+Node: Buffer Text Notation\7f77790
+Node: Format of Descriptions\7f78665
+Node: A Sample Function Description\7f79519
+Node: A Sample Variable Description\7f83505
+Node: Acknowledgements\7f84413
+Node: Lisp Data Types\7f86391
+Node: Printed Representation\7f88946
+Node: Comments\7f90988
+Node: Primitive Types\7f91885
+Node: Programming Types\7f93544
+Node: Integer Type\7f95496
+Node: Floating Point Type\7f96533
+Node: Character Type\7f97152
+Node: Symbol Type\7f105056
+Node: Sequence Type\7f107751
+Node: Cons Cell Type\7f109270
+Node: Dotted Pair Notation\7f113754
+Node: Association List Type\7f115875
+Node: Array Type\7f116758
+Node: String Type\7f118224
+Node: Vector Type\7f120905
+Node: Bit Vector Type\7f121677
+Node: Function Type\7f122539
+Node: Macro Type\7f123652
+Node: Primitive Function Type\7f124349
+Node: Compiled-Function Type\7f125875
+Node: Autoload Type\7f126429
+Node: Char Table Type\7f127443
+Node: Hash Table Type\7f127617
+Node: Range Table Type\7f128772
+Node: Weak List Type\7f129625
+Node: Editing Types\7f129775
+Node: Buffer Type\7f131402
+Node: Marker Type\7f133429
+Node: Extent Type\7f134153
+Node: Window Type\7f135421
+Node: Frame Type\7f136832
+Node: Device Type\7f137627
+Node: Console Type\7f138453
+Node: Window Configuration Type\7f139654
+Node: Event Type\7f140352
+Node: Process Type\7f140516
+Node: Stream Type\7f141551
+Node: Keymap Type\7f142674
+Node: Syntax Table Type\7f143212
+Node: Display Table Type\7f144235
+Node: Database Type\7f144674
+Node: Charset Type\7f144840
+Node: Coding System Type\7f145004
+Node: ToolTalk Message Type\7f145188
+Node: ToolTalk Pattern Type\7f145387
+Node: Window-System Types\7f145559
+Node: Face Type\7f146705
+Node: Glyph Type\7f146836
+Node: Specifier Type\7f146992
+Node: Font Instance Type\7f147165
+Node: Color Instance Type\7f147355
+Node: Image Instance Type\7f147552
+Node: Toolbar Button Type\7f147750
+Node: Subwindow Type\7f147943
+Node: X Resource Type\7f148122
+Node: Type Predicates\7f148275
+Node: Equality Predicates\7f157404
+Node: Numbers\7f162215
+Node: Integer Basics\7f163670
+Node: Float Basics\7f166019
+Node: Predicates on Numbers\7f167761
+Node: Comparison of Numbers\7f169394
+Node: Numeric Conversions\7f173215
+Node: Arithmetic Operations\7f174681
+Node: Rounding Operations\7f180820
+Node: Bitwise Operations\7f181933
+Node: Math Functions\7f190979
+Node: Random Numbers\7f193512
+Node: Strings and Characters\7f195278
+Node: String Basics\7f196731
+Node: Predicates for Strings\7f199149
+Node: Creating Strings\7f199912
+Node: Predicates for Characters\7f205253
+Node: Character Codes\7f206324
+Node: Text Comparison\7f207744
+Node: String Conversion\7f211189
+Node: Modifying Strings\7f214859
+Node: String Properties\7f215500
+Node: Formatting Strings\7f216145
+Node: Character Case\7f225763
+Node: Case Tables\7f229317
+Node: Char Tables\7f233288
+Node: Char Table Types\7f234680
+Node: Working With Char Tables\7f236265
+Node: Lists\7f238282
+Node: Cons Cells\7f239405
+Node: Lists as Boxes\7f240741
+Node: List-related Predicates\7f243383
+Node: List Elements\7f245085
+Node: Building Lists\7f250114
+Node: Modifying Lists\7f256106
+Node: Setcar\7f256918
+Node: Setcdr\7f259349
+Node: Rearrangement\7f261870
+Node: Sets And Lists\7f267456
+Node: Association Lists\7f271684
+Ref: Association Lists-Footnote-1\7f280975
+Node: Property Lists\7f281180
+Node: Working With Normal Plists\7f282728
+Node: Working With Lax Plists\7f285065
+Node: Converting Plists To/From Alists\7f287345
+Node: Weak Lists\7f288693
+Node: Sequences Arrays Vectors\7f290856
+Node: Sequence Functions\7f293492
+Node: Arrays\7f297151
+Node: Array Functions\7f300215
+Node: Vectors\7f302748
+Node: Vector Functions\7f304246
+Node: Bit Vectors\7f306817
+Node: Bit Vector Functions\7f307662
+Node: Symbols\7f309961
+Node: Symbol Components\7f311010
+Node: Definitions\7f315183
+Node: Creating Symbols\7f317408
+Node: Symbol Properties\7f324442
+Node: Plists and Alists\7f325969
+Node: Object Plists\7f327718
+Node: Other Plists\7f330478
+Node: Evaluation\7f332277
+Node: Intro Eval\7f333082
+Ref: Intro Eval-Footnote-1\7f336435
+Node: Eval\7f336570
+Node: Forms\7f340988
+Node: Self-Evaluating Forms\7f342147
+Node: Symbol Forms\7f343660
+Node: Classifying Lists\7f344577
+Node: Function Indirection\7f345333
+Node: Function Forms\7f348432
+Node: Macro Forms\7f349429
+Node: Special Forms\7f351029
+Node: Autoloading\7f353338
+Node: Quoting\7f353836
+Node: Control Structures\7f355197
+Node: Sequencing\7f356817
+Node: Conditionals\7f359682
+Node: Combining Conditions\7f363105
+Node: Iteration\7f366375
+Node: Nonlocal Exits\7f368154
+Node: Catch and Throw\7f368856
+Node: Examples of Catch\7f372695
+Node: Errors\7f374714
+Node: Signaling Errors\7f376203
+Node: Processing of Errors\7f384950
+Node: Handling Errors\7f387229
+Node: Error Symbols\7f394470
+Node: Cleanups\7f398426
+Node: Variables\7f402204
+Node: Global Variables\7f403973
+Node: Constant Variables\7f405049
+Node: Local Variables\7f405675
+Node: Void Variables\7f410612
+Node: Defining Variables\7f414128
+Node: Accessing Variables\7f421292
+Node: Setting Variables\7f422717
+Node: Variable Scoping\7f427236
+Node: Scope\7f428835
+Node: Extent\7f430360
+Node: Impl of Scope\7f431839
+Node: Using Scoping\7f433802
+Node: Buffer-Local Variables\7f435324
+Node: Intro to Buffer-Local\7f436160
+Node: Creating Buffer-Local\7f438703
+Node: Default Value\7f444602
+Node: Variable Aliases\7f447745
+Node: Functions\7f449596
+Node: What Is a Function\7f450690
+Node: Lambda Expressions\7f454736
+Node: Lambda Components\7f455646
+Node: Simple Lambda\7f457478
+Node: Argument List\7f459135
+Node: Function Documentation\7f462863
+Node: Function Names\7f464805
+Node: Defining Functions\7f467378
+Node: Calling Functions\7f470418
+Node: Mapping Functions\7f474266
+Node: Anonymous Functions\7f476954
+Node: Function Cells\7f480199
+Node: Inline Functions\7f485017
+Node: Related Topics\7f486827
+Node: Macros\7f487880
+Node: Simple Macro\7f489164
+Node: Expansion\7f489899
+Node: Compiling Macros\7f492903
+Node: Defining Macros\7f494739
+Node: Backquote\7f496056
+Node: Problems with Macros\7f498453
+Node: Argument Evaluation\7f499148
+Node: Surprising Local Vars\7f502063
+Node: Eval During Expansion\7f504131
+Node: Repeated Expansion\7f505824
+Node: Customization\7f507740
+Node: Common Keywords\7f508209
+Node: Group Definitions\7f511054
+Node: Variable Definitions\7f513246
+Node: Customization Types\7f518236
+Node: Simple Types\7f519671
+Node: Composite Types\7f521828
+Node: Splicing into Lists\7f526518
+Node: Type Keywords\7f528353
+Node: Loading\7f531873
+Node: How Programs Do Loading\7f533548
+Node: Autoload\7f542674
+Node: Repeated Loading\7f548744
+Node: Named Features\7f550857
+Node: Unloading\7f557287
+Node: Hooks for Loading\7f559443
+Node: Byte Compilation\7f560160
+Node: Speed of Byte-Code\7f562077
+Node: Compilation Functions\7f563284
+Node: Docs and Compilation\7f569941
+Node: Dynamic Loading\7f572594
+Node: Eval During Compile\7f574958
+Node: Compiled-Function Objects\7f576223
+Node: Disassembly\7f581024
+Node: Debugging\7f588278
+Node: Debugger\7f589690
+Node: Error Debugging\7f590835
+Node: Infinite Loops\7f593588
+Node: Function Debugging\7f594832
+Node: Explicit Debug\7f597632
+Node: Using Debugger\7f598403
+Node: Debugger Commands\7f600265
+Node: Invoking the Debugger\7f604582
+Node: Internals of Debugger\7f608497
+Node: Syntax Errors\7f613384
+Node: Excess Open\7f614632
+Node: Excess Close\7f616507
+Node: Compilation Errors\7f617928
+Node: Edebug\7f619216
+Node: Using Edebug\7f621324
+Node: Instrumenting\7f624021
+Node: Edebug Execution Modes\7f627510
+Node: Jumping\7f630620
+Node: Edebug Misc\7f632963
+Node: Breakpoints\7f634352
+Node: Global Break Condition\7f637158
+Node: Embedded Breakpoints\7f638113
+Node: Trapping Errors\7f639068
+Node: Edebug Views\7f641144
+Node: Edebug Eval\7f643109
+Node: Eval List\7f644286
+Node: Reading in Edebug\7f647671
+Node: Printing in Edebug\7f648470
+Node: Tracing\7f650185
+Node: Coverage Testing\7f652073
+Node: The Outside Context\7f654114
+Node: Checking Whether to Stop\7f655063
+Node: Edebug Display Update\7f655710
+Node: Edebug Recursive Edit\7f657733
+Node: Instrumenting Macro Calls\7f659388
+Node: Specification List\7f661870
+Node: Backtracking\7f671281
+Node: Debugging Backquote\7f673219
+Node: Specification Examples\7f676925
+Node: Edebug Options\7f678992
+Node: Read and Print\7f684331
+Node: Streams Intro\7f685308
+Node: Input Streams\7f687326
+Node: Input Functions\7f692227
+Node: Output Streams\7f694287
+Node: Output Functions\7f698338
+Node: Output Variables\7f702638
+Node: Minibuffers\7f707439
+Node: Intro to Minibuffers\7f708591
+Node: Text from Minibuffer\7f710779
+Node: Object from Minibuffer\7f715873
+Node: Minibuffer History\7f719966
+Node: Completion\7f722945
+Node: Basic Completion\7f724920
+Node: Minibuffer Completion\7f729803
+Node: Completion Commands\7f733380
+Node: High-Level Completion\7f738037
+Node: Reading File Names\7f742786
+Node: Programmed Completion\7f746478
+Node: Yes-or-No Queries\7f748860
+Node: Multiple Queries\7f754597
+Node: Reading a Password\7f758664
+Node: Minibuffer Misc\7f760007
+Node: Command Loop\7f764887
+Node: Command Overview\7f766231
+Node: Defining Commands\7f769509
+Node: Using Interactive\7f770257
+Node: Interactive Codes\7f775030
+Node: Interactive Examples\7f780822
+Node: Interactive Call\7f782136
+Node: Command Loop Info\7f787551
+Node: Events\7f792530
+Node: Event Types\7f793991
+Node: Event Contents\7f795914
+Node: Event Predicates\7f800390
+Node: Accessing Mouse Event Positions\7f801708
+Node: Frame-Level Event Position Info\7f802407
+Node: Window-Level Event Position Info\7f803447
+Node: Event Text Position Info\7f805211
+Node: Event Glyph Position Info\7f807703
+Node: Event Toolbar Position Info\7f809026
+Node: Other Event Position Info\7f809697
+Node: Accessing Other Event Info\7f810106
+Node: Working With Events\7f811726
+Node: Converting Events\7f817727
+Node: Reading Input\7f821126
+Node: Key Sequence Input\7f822128
+Node: Reading One Event\7f824763
+Node: Dispatching an Event\7f827587
+Node: Quoted Character Input\7f828038
+Node: Peeking and Discarding\7f829386
+Node: Waiting\7f833290
+Node: Quitting\7f835604
+Node: Prefix Command Arguments\7f840012
+Node: Recursive Editing\7f845099
+Node: Disabling Commands\7f849894
+Node: Command History\7f851962
+Node: Keyboard Macros\7f853699
+Node: Keymaps\7f855916
+Node: Keymap Terminology\7f857493
+Node: Format of Keymaps\7f860422
+Node: Creating Keymaps\7f860833
+Node: Inheritance and Keymaps\7f862913
+Node: Key Sequences\7f865285
+Node: Prefix Keys\7f870081
+Node: Active Keymaps\7f873666
+Node: Key Lookup\7f883037
+Node: Functions for Key Lookup\7f888200
+Node: Changing Key Bindings\7f893901
+Node: Key Binding Commands\7f901063
+Node: Scanning Keymaps\7f903128
+Node: Other Keymap Functions\7f911696
+Node: Menus\7f912318
+Node: Menu Format\7f912910
+Node: Menubar Format\7f921556
+Node: Menubar\7f922181
+Node: Modifying Menus\7f925294
+Node: Menu Filters\7f930638
+Node: Pop-Up Menus\7f932534
+Node: Menu Accelerators\7f934862
+Node: Creating Menu Accelerators\7f935618
+Node: Keyboard Menu Traversal\7f936978
+Node: Menu Accelerator Functions\7f937705
+Node: Buffers Menu\7f940781
+Node: Dialog Boxes\7f942075
+Node: Dialog Box Format\7f942242
+Node: Dialog Box Functions\7f943667
+Node: Toolbar\7f944064
+Node: Toolbar Intro\7f944499
+Node: Creating Toolbar\7f946899
+Node: Toolbar Descriptor Format\7f947816
+Node: Specifying the Toolbar\7f952313
+Node: Other Toolbar Variables\7f955920
+Node: Gutter\7f960348
+Node: Gutter Intro\7f960937
+Node: Creating Gutter\7f962940
+Node: Gutter Descriptor Format\7f965827
+Node: Specifying a Gutter\7f970284
+Node: Other Gutter Variables\7f973819
+Node: Common Gutter Widgets\7f978206
+Node: Buffer Tabs\7f979198
+Node: Progress Bars\7f979339
+Node: Scrollbars\7f979484
+Node: Drag and Drop\7f979619
+Node: Supported Protocols\7f980695
+Node: OffiX DND\7f981198
+Node: CDE dt\7f982205
+Node: MSWindows OLE\7f982796
+Node: Loose ends\7f982967
+Node: Drop Interface\7f983359
+Node: Drag Interface\7f984381
+Node: Modes\7f984555
+Node: Major Modes\7f985506
+Node: Major Mode Conventions\7f988421
+Node: Example Major Modes\7f994376
+Node: Auto Major Mode\7f1002409
+Node: Mode Help\7f1009857
+Node: Derived Modes\7f1010958
+Node: Minor Modes\7f1013149
+Node: Minor Mode Conventions\7f1014451
+Node: Keymaps and Minor Modes\7f1017314
+Node: Modeline Format\7f1018149
+Node: Modeline Data\7f1019917
+Node: Modeline Variables\7f1025070
+Node: %-Constructs\7f1029786
+Node: Hooks\7f1032773
+Node: Documentation\7f1039533
+Node: Documentation Basics\7f1040956
+Node: Accessing Documentation\7f1044006
+Node: Keys in Documentation\7f1050287
+Node: Describing Characters\7f1053770
+Node: Help Functions\7f1056119
+Node: Obsoleteness\7f1062569
+Node: Files\7f1065561
+Node: Visiting Files\7f1067486
+Node: Visiting Functions\7f1068991
+Node: Subroutines of Visiting\7f1074149
+Node: Saving Buffers\7f1076222
+Node: Reading from Files\7f1082315
+Node: Writing to Files\7f1084476
+Node: File Locks\7f1087193
+Node: Information about Files\7f1090260
+Node: Testing Accessibility\7f1091021
+Node: Kinds of Files\7f1094761
+Node: Truenames\7f1096442
+Node: File Attributes\7f1097444
+Node: Changing File Attributes\7f1102583
+Node: File Names\7f1108005
+Node: File Name Components\7f1109578
+Node: Directory Names\7f1112023
+Node: Relative File Names\7f1115253
+Node: File Name Expansion\7f1116223
+Node: Unique File Names\7f1119977
+Node: File Name Completion\7f1121592
+Node: User Name Completion\7f1124860
+Node: Contents of Directories\7f1126267
+Node: Create/Delete Dirs\7f1129580
+Node: Magic File Names\7f1130686
+Node: Partial Files\7f1136334
+Node: Intro to Partial Files\7f1136562
+Node: Creating a Partial File\7f1137802
+Node: Detached Partial Files\7f1138738
+Node: Format Conversion\7f1139860
+Node: Files and MS-DOS\7f1145358
+Node: Backups and Auto-Saving\7f1147422
+Node: Backup Files\7f1148097
+Node: Making Backups\7f1149494
+Node: Rename or Copy\7f1152243
+Node: Numbered Backups\7f1154736
+Node: Backup Names\7f1156971
+Node: Auto-Saving\7f1160263
+Node: Reverting\7f1168424
+Node: Buffers\7f1171759
+Node: Buffer Basics\7f1173175
+Node: Current Buffer\7f1175228
+Node: Buffer Names\7f1179932
+Node: Buffer File Name\7f1183139
+Node: Buffer Modification\7f1187258
+Node: Modification Time\7f1189501
+Node: Read Only Buffers\7f1192876
+Node: The Buffer List\7f1196115
+Node: Creating Buffers\7f1200932
+Node: Killing Buffers\7f1203078
+Node: Indirect Buffers\7f1206910
+Node: Windows\7f1209484
+Node: Basic Windows\7f1210962
+Node: Splitting Windows\7f1214060
+Node: Deleting Windows\7f1219386
+Node: Selecting Windows\7f1223304
+Node: Cyclic Window Ordering\7f1227527
+Node: Buffers and Windows\7f1232682
+Node: Displaying Buffers\7f1234460
+Node: Choosing Window\7f1239799
+Node: Window Point\7f1247717
+Node: Window Start\7f1249787
+Node: Vertical Scrolling\7f1254586
+Node: Horizontal Scrolling\7f1260784
+Node: Size of Window\7f1264313
+Node: Position of Window\7f1269031
+Node: Resizing Windows\7f1271284
+Node: Window Configurations\7f1276722
+Node: Frames\7f1280219
+Node: Creating Frames\7f1282560
+Node: Frame Properties\7f1283900
+Node: Property Access\7f1284716
+Node: Initial Properties\7f1285623
+Node: X Frame Properties\7f1288109
+Node: Size and Position\7f1292743
+Node: Frame Name\7f1294741
+Node: Frame Titles\7f1295655
+Node: Deleting Frames\7f1297479
+Node: Finding All Frames\7f1298454
+Node: Frames and Windows\7f1301682
+Node: Minibuffers and Frames\7f1304464
+Node: Input Focus\7f1305382
+Node: Visibility of Frames\7f1308487
+Node: Raising and Lowering\7f1310477
+Node: Frame Configurations\7f1312853
+Node: Frame Hooks\7f1313910
+Node: Consoles and Devices\7f1315715
+Node: Basic Console Functions\7f1318458
+Node: Basic Device Functions\7f1318881
+Node: Console Types and Device Classes\7f1319727
+Node: Connecting to a Console or Device\7f1321994
+Node: The Selected Console and Device\7f1324178
+Node: Console and Device I/O\7f1325204
+Node: Positions\7f1325968
+Node: Point\7f1326937
+Node: Motion\7f1330027
+Node: Character Motion\7f1330794
+Node: Word Motion\7f1333031
+Node: Buffer End Motion\7f1334532
+Node: Text Lines\7f1336069
+Node: Screen Lines\7f1340970
+Node: List Motion\7f1345033
+Node: Skipping Characters\7f1348515
+Node: Excursions\7f1350734
+Node: Narrowing\7f1353774
+Node: Markers\7f1359105
+Node: Overview of Markers\7f1360011
+Node: Predicates on Markers\7f1364703
+Node: Creating Markers\7f1365949
+Node: Information from Markers\7f1370149
+Node: Changing Markers\7f1371247
+Node: The Mark\7f1372775
+Node: The Region\7f1381278
+Node: Text\7f1386964
+Node: Near Point\7f1389663
+Node: Buffer Contents\7f1393850
+Node: Comparing Text\7f1395256
+Node: Insertion\7f1396664
+Node: Commands for Insertion\7f1400574
+Node: Deletion\7f1403468
+Node: User-Level Deletion\7f1407062
+Node: The Kill Ring\7f1411222
+Node: Kill Ring Concepts\7f1413396
+Node: Kill Functions\7f1414450
+Node: Yank Commands\7f1416373
+Node: Low-Level Kill Ring\7f1418244
+Node: Internals of Kill Ring\7f1421330
+Node: Undo\7f1424110
+Node: Maintaining Undo\7f1428447
+Node: Filling\7f1431065
+Node: Margins\7f1437059
+Node: Auto Filling\7f1441082
+Node: Sorting\7f1442263
+Node: Columns\7f1451577
+Node: Indentation\7f1454658
+Node: Primitive Indent\7f1455437
+Node: Mode-Specific Indent\7f1456762
+Node: Region Indent\7f1459294
+Node: Relative Indent\7f1462241
+Node: Indent Tabs\7f1464623
+Node: Motion by Indent\7f1465944
+Node: Case Changes\7f1466723
+Node: Text Properties\7f1470076
+Node: Examining Properties\7f1471889
+Node: Changing Properties\7f1473772
+Node: Property Search\7f1477363
+Node: Special Properties\7f1482082
+Node: Saving Properties\7f1482363
+Node: Substitution\7f1485505
+Node: Registers\7f1488775
+Node: Transposition\7f1491358
+Node: Change Hooks\7f1492252
+Node: Transformations\7f1494292
+Node: Searching and Matching\7f1499396
+Node: String Search\7f1500527
+Node: Regular Expressions\7f1505508
+Node: Syntax of Regexps\7f1506875
+Node: Regexp Example\7f1521478
+Node: Regexp Search\7f1523648
+Node: POSIX Regexps\7f1529979
+Node: Search and Replace\7f1532056
+Node: Match Data\7f1535421
+Node: Simple Match Data\7f1536551
+Node: Replacing Match\7f1540816
+Node: Entire Match Data\7f1543497
+Node: Saving Match Data\7f1545735
+Node: Searching and Case\7f1547123
+Node: Standard Regexps\7f1549157
+Node: Syntax Tables\7f1551355
+Node: Syntax Basics\7f1552469
+Node: Syntax Descriptors\7f1555441
+Node: Syntax Class Table\7f1557291
+Node: Syntax Flags\7f1563329
+Node: Syntax Table Functions\7f1566546
+Node: Motion and Syntax\7f1570834
+Node: Parsing Expressions\7f1572286
+Node: Standard Syntax Tables\7f1578355
+Node: Syntax Table Internals\7f1579199
+Node: Abbrevs\7f1580225
+Node: Abbrev Mode\7f1582028
+Node: Abbrev Tables\7f1582748
+Node: Defining Abbrevs\7f1584287
+Node: Abbrev Files\7f1586208
+Node: Abbrev Expansion\7f1587991
+Node: Standard Abbrev Tables\7f1592622
+Node: Extents\7f1593781
+Node: Intro to Extents\7f1595024
+Node: Creating and Modifying Extents\7f1599016
+Node: Extent Endpoints\7f1600597
+Node: Finding Extents\7f1603860
+Node: Mapping Over Extents\7f1607982
+Node: Extent Properties\7f1614105
+Node: Detached Extents\7f1624266
+Node: Extent Parents\7f1626125
+Node: Duplicable Extents\7f1627819
+Node: Extents and Events\7f1631040
+Node: Atomic Extents\7f1632947
+Node: Specifiers\7f1633394
+Node: Introduction to Specifiers\7f1635507
+Node: Specifiers In-Depth\7f1637817
+Node: Specifier Instancing\7f1642729
+Node: Specifier Types\7f1645991
+Node: Adding Specifications\7f1651065
+Node: Retrieving Specifications\7f1660486
+Node: Specifier Tag Functions\7f1664231
+Node: Specifier Instancing Functions\7f1667465
+Node: Specifier Example\7f1670872
+Node: Creating Specifiers\7f1674028
+Node: Specifier Validation Functions\7f1678345
+Node: Other Specification Functions\7f1680731
+Node: Faces and Window-System Objects\7f1684552
+Node: Faces\7f1684876
+Node: Merging Faces\7f1686493
+Node: Basic Face Functions\7f1688454
+Node: Face Properties\7f1690602
+Node: Face Convenience Functions\7f1700875
+Node: Other Face Display Functions\7f1704095
+Node: Fonts\7f1704907
+Node: Font Specifiers\7f1705608
+Node: Font Instances\7f1706793
+Node: Font Instance Names\7f1707760
+Node: Font Instance Size\7f1708601
+Node: Font Instance Characteristics\7f1709887
+Node: Font Convenience Functions\7f1711065
+Node: Colors\7f1712355
+Node: Color Specifiers\7f1712795
+Node: Color Instances\7f1715155
+Node: Color Instance Properties\7f1715899
+Node: Color Convenience Functions\7f1716525
+Node: Glyphs\7f1717578
+Node: Glyph Functions\7f1719179
+Node: Creating Glyphs\7f1719586
+Node: Glyph Properties\7f1732226
+Node: Glyph Convenience Functions\7f1741393
+Node: Glyph Dimensions\7f1745340
+Node: Images\7f1746420
+Node: Image Specifiers\7f1746869
+Node: Image Instantiator Conversion\7f1762360
+Node: Image Instances\7f1763725
+Node: Image Instance Types\7f1764476
+Node: Image Instance Functions\7f1767241
+Node: Glyph Types\7f1774298
+Node: Mouse Pointer\7f1776070
+Node: Redisplay Glyphs\7f1779073
+Node: Subwindows\7f1780106
+Node: Annotations\7f1780349
+Node: Annotation Basics\7f1781365
+Node: Annotation Primitives\7f1785303
+Node: Annotation Properties\7f1786642
+Node: Locating Annotations\7f1789682
+Node: Margin Primitives\7f1790519
+Node: Annotation Hooks\7f1792413
+Node: Display\7f1793073
+Node: Refresh Screen\7f1794051
+Node: Truncation\7f1796245
+Node: The Echo Area\7f1798770
+Node: Warnings\7f1805207
+Node: Invisible Text\7f1809643
+Node: Selective Display\7f1812222
+Node: Overlay Arrow\7f1816348
+Node: Temporary Displays\7f1817701
+Node: Blinking\7f1821822
+Node: Usual Display\7f1824006
+Node: Display Tables\7f1826555
+Node: Display Table Format\7f1827359
+Node: Active Display Table\7f1828801
+Node: Character Descriptors\7f1832796
+Node: Beeping\7f1833553
+Node: Hash Tables\7f1838319
+Node: Introduction to Hash Tables\7f1838927
+Node: Working With Hash Tables\7f1845486
+Node: Weak Hash Tables\7f1846603
+Node: Range Tables\7f1848620
+Node: Introduction to Range Tables\7f1849309
+Node: Working With Range Tables\7f1849755
+Node: Databases\7f1850714
+Node: Connecting to a Database\7f1851013
+Node: Working With a Database\7f1852120
+Node: Other Database Functions\7f1852994
+Node: Processes\7f1853563
+Node: Subprocess Creation\7f1855787
+Node: Synchronous Processes\7f1859238
+Node: MS-DOS Subprocesses\7f1865960
+Node: Asynchronous Processes\7f1867034
+Node: Deleting Processes\7f1871391
+Node: Process Information\7f1873262
+Node: Input to Processes\7f1877354
+Node: Signals to Processes\7f1880049
+Node: Output from Processes\7f1884864
+Node: Process Buffers\7f1885676
+Node: Filter Functions\7f1888555
+Node: Accepting Output\7f1894146
+Node: Sentinels\7f1895673
+Node: Process Window Size\7f1899163
+Node: Transaction Queues\7f1899512
+Node: Network\7f1901210
+Node: System Interface\7f1903844
+Node: Starting Up\7f1905114
+Node: Start-up Summary\7f1905708
+Node: Init File\7f1909262
+Node: Terminal-Specific\7f1911643
+Node: Command Line Arguments\7f1914802
+Node: Getting Out\7f1918291
+Node: Killing XEmacs\7f1918860
+Node: Suspending XEmacs\7f1920528
+Node: System Environment\7f1923907
+Node: User Identification\7f1930088
+Node: Time of Day\7f1933617
+Node: Time Conversion\7f1936404
+Node: Timers\7f1941646
+Node: Terminal Input\7f1943819
+Node: Input Modes\7f1944322
+Node: Translating Input\7f1946781
+Node: Recording Input\7f1950946
+Node: Terminal Output\7f1953046
+Node: Flow Control\7f1956667
+Node: Batch Mode\7f1960629
+Node: X-Windows\7f1962011
+Node: X Selections\7f1962882
+Node: X Server\7f1965633
+Node: Resources\7f1966084
+Node: Server Data\7f1971395
+Node: Grabs\7f1972602
+Node: X Miscellaneous\7f1974182
+Node: ToolTalk Support\7f1976567
+Node: XEmacs ToolTalk API Summary\7f1976784
+Node: Sending Messages\7f1978084
+Node: Example of Sending Messages\7f1978335
+Node: Elisp Interface for Sending Messages\7f1979397
+Node: Receiving Messages\7f1985993
+Node: Example of Receiving Messages\7f1986216
+Node: Elisp Interface for Receiving Messages\7f1987052
+Node: LDAP Support\7f1990909
+Node: Building XEmacs with LDAP support\7f1991403
+Node: XEmacs LDAP API\7f1992380
+Node: LDAP Variables\7f1993432
+Node: The High-Level LDAP API\7f1996032
+Node: The Low-Level LDAP API\7f1999505
+Node: The LDAP Lisp Object\7f2000336
+Node: Opening and Closing a LDAP Connection\7f2000891
+Node: Low-level Operations on a LDAP Server\7f2002697
+Node: LDAP Internationalization\7f2005421
+Node: LDAP Internationalization Variables\7f2006326
+Node: Encoder/Decoder Functions\7f2008057
+Node: Syntax of Search Filters\7f2009094
+Node: PostgreSQL Support\7f2010392
+Node: Building XEmacs with PostgreSQL support\7f2010787
+Node: XEmacs PostgreSQL libpq API\7f2012134
+Node: libpq Lisp Variables\7f2014013
+Node: libpq Lisp Symbols and DataTypes\7f2016977
+Node: Synchronous Interface Functions\7f2030217
+Node: Asynchronous Interface Functions\7f2034708
+Node: Large Object Support\7f2038213
+Node: Other libpq Functions\7f2038840
+Node: Unimplemented libpq Functions\7f2041875
+Node: XEmacs PostgreSQL libpq Examples\7f2047194
+Node: Internationalization\7f2053285
+Node: I18N Levels 1 and 2\7f2053628
+Node: I18N Level 3\7f2054334
+Node: Level 3 Basics\7f2054615
+Node: Level 3 Primitives\7f2055448
+Node: Dynamic Messaging\7f2057054
+Node: Domain Specification\7f2057517
+Node: Documentation String Extraction\7f2059187
+Node: I18N Level 4\7f2060105
+Node: MULE\7f2060297
+Node: Internationalization Terminology\7f2061346
+Node: Charsets\7f2073545
+Node: Charset Properties\7f2074241
+Node: Basic Charset Functions\7f2078956
+Node: Charset Property Functions\7f2081137
+Node: Predefined Charsets\7f2083207
+Node: MULE Characters\7f2086127
+Node: Composite Characters\7f2087002
+Node: Coding Systems\7f2088269
+Node: Coding System Types\7f2090409
+Node: ISO 2022\7f2094393
+Node: EOL Conversion\7f2106668
+Node: Coding System Properties\7f2107840
+Node: Basic Coding System Functions\7f2112163
+Node: Coding System Property Functions\7f2114197
+Node: Encoding and Decoding Text\7f2114755
+Node: Detection of Textual Encoding\7f2115891
+Node: Big5 and Shift-JIS Functions\7f2117427
+Node: Predefined Coding Systems\7f2118579
+Node: CCL\7f2130673
+Node: CCL Syntax\7f2133777
+Node: CCL Statements\7f2135353
+Node: CCL Expressions\7f2140001
+Node: Calling CCL\7f2142540
+Node: CCL Examples\7f2145545
+Node: Category Tables\7f2145682
+Node: Tips\7f2148041
+Node: Style Tips\7f2148682
+Node: Compilation Tips\7f2158201
+Node: Documentation Tips\7f2160115
+Node: Comment Tips\7f2165624
+Node: Library Headers\7f2168626
+Node: Building XEmacs and Object Allocation\7f2172598
+Node: Building XEmacs\7f2173481
+Node: Pure Storage\7f2180059
+Node: Garbage Collection\7f2182847
+Node: Standard Errors\7f2193690
+Node: Standard Buffer-Local Variables\7f2197899
+Node: Standard Keymaps\7f2200532
+Node: Standard Hooks\7f2204266
+Node: Index\7f2211766
 \1f
 End Tag Table
index e2a39c4..9d40b0e 100644 (file)
@@ -460,7 +460,7 @@ but not flawless.  There are a few topics that are not covered, either
 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
index 7c10dcf..5f78301 100644 (file)
@@ -530,7 +530,7 @@ describing the data type.
                => nil
 
 
- - Function: old-eq obj1 obj2
+ - Function: old-eq object1 object2
      This function exists under XEmacs 20 and is exactly like `eq'
      except that it suffers from the char-int confoundance disease.  In
      other words, it returns `t' if given a character and the
@@ -943,8 +943,12 @@ any argument is floating.
 not check for overflow.  Thus `(1+ 134217727)' may evaluate to
 -134217728, depending on your hardware.
 
- - Function: 1+ number-or-marker
-     This function returns NUMBER-OR-MARKER plus 1.  For example,
+ - Function: 1+ number
+     This function returns NUMBER plus one.  NUMBER may be a number,
+     character or marker.  Markers and characters are converted to
+     integers.
+
+     For example,
 
           (setq foo 4)
                => 4
@@ -968,16 +972,21 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
      more convenient and natural way to increment a variable is
      `(incf foo)'.
 
- - Function: 1- number-or-marker
-     This function returns NUMBER-OR-MARKER minus 1.
+ - Function: 1- number
+     This function returns NUMBER minus one.  NUMBER may be a number,
+     character or marker.  Markers and characters are converted to
+     integers.
 
  - Function: abs number
      This returns the absolute value of NUMBER.
 
- - Function: + &rest numbers-or-markers
+ - Function: + &rest numbers
      This function adds its arguments together.  When given no
      arguments, `+' returns 0.
 
+     If any of the arguments are characters or markers, they are first
+     converted to integers.
+
           (+)
                => 0
           (+ 1)
@@ -985,12 +994,15 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
           (+ 1 2 3 4)
                => 10
 
- - Function: - &optional number-or-marker &rest other-numbers-or-markers
+ - Function: - &optional number &rest other-numbers
      The `-' function serves two purposes: negation and subtraction.
      When `-' has a single argument, the value is the negative of the
      argument.  When there are multiple arguments, `-' subtracts each of
-     the OTHER-NUMBERS-OR-MARKERS from NUMBER-OR-MARKER, cumulatively.
-     If there are no arguments, the result is 0.
+     the OTHER-NUMBERS from 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.
 
           (- 10 1 2 3 4)
                => 0
@@ -999,10 +1011,13 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
           (-)
                => 0
 
- - Function: * &rest numbers-or-markers
+ - Function: * &rest numbers
      This function multiplies its arguments together, and returns the
      product.  When given no arguments, `*' returns 1.
 
+     If any of the arguments are characters or markers, they are first
+     converted to integers.
+
           (*)
                => 1
           (* 1)
@@ -1010,20 +1025,24 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
           (* 1 2 3 4)
                => 24
 
- - Function: / dividend divisor &rest divisors
-     This function divides DIVIDEND by DIVISOR and returns the
-     quotient.  If there are additional arguments DIVISORS, then it
-     divides DIVIDEND by each divisor in turn.  Each argument may be a
-     number or a marker.
+ - Function: / dividend &rest divisors
+     The `/' function serves two purposes: inversion and division.  When
+     `/' has a single argument, the value is the inverse of the
+     argument.  When there are multiple arguments, `/' divides DIVIDEND
+     by each of the 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.  This means the result has to be rounded.  On most machines,
-     the result is rounded towards zero after each division, but some
+     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 `/' is implemented using the C division
      operator, which also 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.
+
      If you divide by 0, an `arith-error' error is signaled.  (*Note
      Errors::.)
 
@@ -1033,6 +1052,8 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
                => 2
           (/ 25 3 2)
                => 4
+          (/ 3.0)
+               => 0.3333333333333333
           (/ -17 6)
                => -2
 
@@ -1110,20 +1131,20 @@ is a nearby integer.  `ffloor' returns the nearest integer below;
 `fceiling', the nearest integer above; `ftruncate', the nearest integer
 in the direction towards zero; `fround', the nearest integer.
 
- - Function: ffloor float
-     This function rounds FLOAT to the next lower integral value, and
+ - Function: ffloor number
+     This function rounds NUMBER to the next lower integral value, and
      returns that value as a floating point number.
 
- - Function: fceiling float
-     This function rounds FLOAT to the next higher integral value, and
+ - Function: fceiling number
+     This function rounds NUMBER to the next higher integral value, and
      returns that value as a floating point number.
 
- - Function: ftruncate float
-     This function rounds FLOAT towards zero to an integral value, and
+ - Function: ftruncate number
+     This function rounds NUMBER towards zero to an integral value, and
      returns that value as a floating point number.
 
- - Function: fround float
-     This function rounds FLOAT to the nearest integral value, and
+ - Function: fround number
+     This function rounds NUMBER to the nearest integral value, and
      returns that value as a floating point number.
 
 \1f
@@ -1351,62 +1372,65 @@ Standard Mathematical Functions
 supported (which is the normal state of affairs).  They allow integers
 as well as floating point numbers as arguments.
 
- - Function: sin arg
- - Function: cos arg
- - Function: tan arg
+ - Function: sin number
+ - Function: cos number
+ - Function: tan number
      These are the ordinary trigonometric functions, with argument
      measured in radians.
 
- - Function: asin arg
-     The value of `(asin ARG)' is a number between -pi/2 and pi/2
-     (inclusive) whose sine is ARG; if, however, ARG is out of range
-     (outside [-1, 1]), then the result is a NaN.
+ - Function: asin number
+     The value of `(asin NUMBER)' is a number between -pi/2 and pi/2
+     (inclusive) whose sine is NUMBER; if, however, NUMBER is out of
+     range (outside [-1, 1]), then the result is a NaN.
+
+ - Function: acos number
+     The value of `(acos NUMBER)' is a number between 0 and pi
+     (inclusive) whose cosine is NUMBER; if, however, NUMBER is out of
+     range (outside [-1, 1]), then the result is a NaN.
 
- - Function: acos arg
-     The value of `(acos ARG)' is a number between 0 and pi (inclusive)
-     whose cosine is ARG; if, however, ARG is out of range (outside
-     [-1, 1]), then the result is a NaN.
+ - Function: atan number &optional number2
+     The value of `(atan NUMBER)' is a number between -pi/2 and pi/2
+     (exclusive) whose tangent is NUMBER.
 
- - Function: atan arg
-     The value of `(atan ARG)' is a number between -pi/2 and pi/2
-     (exclusive) whose tangent is ARG.
+     If optional argument NUMBER2 is supplied, the function returns
+     `atan2(NUMBER,NUMBER2)'.
 
- - Function: sinh arg
- - Function: cosh arg
- - Function: tanh arg
+ - Function: sinh number
+ - Function: cosh number
+ - Function: tanh number
      These are the ordinary hyperbolic trigonometric functions.
 
- - Function: asinh arg
- - Function: acosh arg
- - Function: atanh arg
+ - Function: asinh number
+ - Function: acosh number
+ - Function: atanh number
      These are the inverse hyperbolic trigonometric functions.
 
- - Function: exp arg
-     This is the exponential function; it returns e to the power ARG.
-     e is a fundamental mathematical constant also called the base of
-     natural logarithms.
+ - Function: exp number
+     This is the exponential function; it returns e to the power
+     NUMBER.  e is a fundamental mathematical constant also called the
+     base of natural logarithms.
 
- - Function: log arg &optional base
-     This function returns the logarithm of ARG, with base BASE.  If
-     you don't specify BASE, the base E is used.  If ARG is negative,
-     the result is a NaN.
+ - Function: log number &optional base
+     This function returns the logarithm of NUMBER, with base BASE.  If
+     you don't specify BASE, the base E is used.  If NUMBER is
+     negative, the result is a NaN.
 
- - Function: log10 arg
-     This function returns the logarithm of ARG, with base 10.  If ARG
-     is negative, the result is a NaN.  `(log10 X)' == `(log X 10)', at
-     least approximately.
+ - Function: log10 number
+     This function returns the logarithm of NUMBER, with base 10.  If
+     NUMBER is negative, the result is a NaN.  `(log10 X)' == `(log X
+     10)', at least approximately.
 
  - Function: expt x y
      This function returns X raised to power Y.  If both arguments are
      integers and Y is positive, the result is an integer; in this
      case, it is truncated to fit the range of possible integer values.
 
- - Function: sqrt arg
-     This returns the square root of ARG.  If ARG is negative, the
-     value is a NaN.
+ - Function: sqrt number
+     This returns the square root of NUMBER.  If NUMBER is negative,
+     the value is a NaN.
 
- - Function: cube-root arg
-     This returns the cube root of ARG.
+ - Function: cube-root number
+     This returns the cube root of NUMBER.
 
 \1f
 File: lispref.info,  Node: Random Numbers,  Prev: Math Functions,  Up: Numbers
index b423272..95a8a55 100644 (file)
@@ -142,9 +142,10 @@ putting strings together, or by taking them apart.
      `bit-vector' (*note Bit Vectors::).  This function has not been
      available in XEmacs prior to 21.0 and FSF Emacs prior to 20.3.
 
- - Function: make-string count character
-     This function returns a string made up of COUNT repetitions of
-     CHARACTER.  If COUNT is negative, an error is signaled.
+ - Function: make-string length character
+     This function returns a new string consisting entirely of LENGTH
+     successive copies of CHARACTER.  LENGTH must be a non-negative
+     integer.
 
           (make-string 5 ?x)
                => "xxxxx"
@@ -284,7 +285,7 @@ File: lispref.info,  Node: Character Codes,  Next: Text Comparison,  Prev: Predi
 Character Codes
 ===============
 
- - Function: char-int ch
+ - Function: 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:
@@ -327,10 +328,11 @@ File: lispref.info,  Node: Text Comparison,  Next: String Conversion,  Prev: Cha
 Comparison of Characters and Strings
 ====================================
 
- - Function: char-equal character1 character2
+ - Function: char-equal character1 character2 &optional buffer
      This function returns `t' if the arguments represent the same
      character, `nil' otherwise.  This function ignores differences in
-     case if `case-fold-search' is non-`nil'.
+     case if the value of `case-fold-search' is non-`nil' in BUFFER,
+     which defaults to the current buffer.
 
           (char-equal ?x ?x)
                => t
@@ -491,12 +493,12 @@ functions are used primarily for making help messages.
      See also the function `format' in *Note Formatting Strings::.
 
  - Function: string-to-number string &optional base
-     This function returns the numeric value of the characters in
-     STRING, read in BASE.  It skips spaces and tabs at the beginning
-     of STRING, then reads as much of STRING as it can interpret as a
+     This function returns the numeric value represented by STRING,
+     read in BASE.  It skips spaces and tabs at the beginning of
+     STRING, then reads as much of 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
+     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 BASE is not specified, it defaults to ten.  With BASE other
@@ -793,7 +795,7 @@ that are passed to them as arguments.
    The examples below use the characters `X' and `x' which have ASCII
 codes 88 and 120 respectively.
 
- - Function: downcase string-or-char
+ - Function: downcase string-or-char &optional buffer
      This function converts a character or a string to lower case.
 
      When the argument to `downcase' is a string, the function creates
@@ -804,6 +806,9 @@ codes 88 and 120 respectively.
      XEmacs 19.) If the original character is lower case, or is not a
      letter, then the value equals the original character.
 
+     Optional second arg BUFFER specifies which buffer's case tables to
+     use, and defaults to the current buffer.
+
           (downcase "The cat in the hat")
                => "the cat in the hat"
           
@@ -811,7 +816,7 @@ codes 88 and 120 respectively.
                => ?x   ;; Under XEmacs 20.
                => 120  ;; Under XEmacs 19.
 
- - Function: upcase string-or-char
+ - Function: upcase string-or-char &optional buffer
      This function converts a character or a string to upper case.
 
      When the argument to `upcase' is a string, the function creates
@@ -824,6 +829,9 @@ codes 88 and 120 respectively.
      case, or is not a letter, then the value equals the original
      character.
 
+     Optional second arg BUFFER specifies which buffer's case tables to
+     use, and defaults to the current buffer.
+
           (upcase "The cat in the hat")
                => "THE CAT IN THE HAT"
           
@@ -831,7 +839,7 @@ codes 88 and 120 respectively.
                => ?X   ;; Under XEmacs 20.
                => 88   ;; Under XEmacs 19.
 
- - Function: capitalize string-or-char
+ - Function: capitalize string-or-char &optional buffer
      This function capitalizes strings or characters.  If
      STRING-OR-CHAR is a string, the function creates and returns a new
      string, whose contents are a copy of STRING-OR-CHAR in which each
@@ -846,6 +854,9 @@ codes 88 and 120 respectively.
      When the argument to `capitalize' is a character, `capitalize' has
      the same result as `upcase'.
 
+     Optional second arg BUFFER specifies which buffer's case tables to
+     use, and defaults to the current buffer.
+
           (capitalize "The cat in the hat")
                => "The Cat In The Hat"
           
@@ -910,18 +921,19 @@ Changing the standard case table doesn't affect any existing buffers.
  - Function: case-table-p object
      This predicate returns non-`nil' if OBJECT is a valid case table.
 
- - Function: set-standard-case-table table
-     This function makes TABLE the standard case table, so that it will
-     apply to any buffers created subsequently.
+ - Function: set-standard-case-table case-table
+     This function makes CASE-TABLE the standard case table, so that it
+     will apply to any buffers created subsequently.
 
  - Function: standard-case-table
      This returns the standard case table.
 
- - Function: current-case-table
-     This function returns the current buffer's case table.
+ - Function: current-case-table &optional buffer
+     This function returns the case table of BUFFER, which defaults to
+     the current buffer.
 
- - Function: set-case-table table
-     This sets the current buffer's case table to TABLE.
+ - Function: set-case-table case-table
+     This sets the current buffer's case table to CASE-TABLE.
 
    The following three functions are convenient subroutines for packages
 that define non-ASCII character sets.  They modify a string
@@ -1026,8 +1038,8 @@ different sorts of values.  The different char table types are
      character.  Higher-level Lisp functions are provided for working
      with syntax tables.  The valid values are integers.
 
- - Function: char-table-type table
-     This function returns the type of char table TABLE.
+ - Function: char-table-type char-table
+     This function returns the type of char table CHAR-TABLE.
 
  - Function: char-table-type-list
      This function returns a list of the recognized char table types.
@@ -1046,8 +1058,9 @@ Working With Char Tables
      should be a symbol, one of `char', `category', `display',
      `generic', or `syntax'.
 
- - Function: put-char-table range val table
-     This function sets the value for chars in RANGE to be VAL in TABLE.
+ - Function: put-char-table range value char-table
+     This function sets 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:
@@ -1061,21 +1074,21 @@ Working With Char Tables
 
         * 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.
 
- - Function: get-char-table ch table
-     This function finds the value for char CH in TABLE.
+ - Function: get-char-table character char-table
+     This function finds the value for CHARACTER in CHAR-TABLE.
 
- - Function: get-range-char-table range table &optional multi
-     This function finds the value for a range in TABLE.  If there is
-     more than one value, MULTI is returned (defaults to `nil').
+ - Function: get-range-char-table range char-table &optional multi
+     This function finds the value for a range in CHAR-TABLE.  If there
+     is more than one value, MULTI is returned (defaults to `nil').
 
- - Function: reset-char-table table
-     This function resets a char table to its default state.
+ - Function: reset-char-table char-table
+     This function resets CHAR-TABLE to its default state.
 
- - Function: map-char-table function table &optional range
-     This function maps FUNCTION over entries in TABLE, calling it with
-     two args, each key and value in the table.
+ - Function: map-char-table function char-table &optional range
+     This function maps 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
index 1145cac..4273b1d 100644 (file)
@@ -403,9 +403,9 @@ Altering List Elements with `setcar'
 a list, `setcar' replaces one element of a list with a different
 element.
 
- - Function: setcar cons object
-     This function stores OBJECT as the new CAR of CONS, replacing its
-     previous CAR.  It returns the value OBJECT.  For example:
+ - Function: setcar cons-cell object
+     This function stores OBJECT as the new CAR of CONS-CELL, replacing
+     its previous CAR.  It returns the value OBJECT.  For example:
 
           (setq x '(1 2))
                => (1 2)
@@ -481,9 +481,9 @@ Altering the CDR of a List
 
    The lowest-level primitive for modifying a CDR is `setcdr':
 
- - Function: setcdr cons object
-     This function stores OBJECT as the new CDR of CONS, replacing its
-     previous CDR.  It returns the value OBJECT.
+ - Function: setcdr cons-cell object
+     This function stores OBJECT as the new CDR of CONS-CELL, replacing
+     its previous CDR.  It returns the value OBJECT.
 
    Here is an example of replacing the CDR of a list with a different
 list.  All but the first element of the list are removed in favor of a
@@ -1082,26 +1082,28 @@ File: lispref.info,  Node: Working With Normal Plists,  Next: Working With Lax P
 Working With Normal Plists
 --------------------------
 
- - Function: plist-get plist prop &optional default
+ - Function: plist-get plist property &optional default
      This function extracts a value from a property list.  The function
-     returns the value corresponding to the given PROP, or DEFAULT if
-     PROP is not one of the properties on the list.
-
- - Function: plist-put plist prop val
-     This function changes the value in PLIST of PROP to VAL.  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.
-
- - Function: plist-remprop plist prop
-     This function removes from PLIST the property PROP and its value.
-     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.
+     returns the value corresponding to the given PROPERTY, or DEFAULT
+     if PROPERTY is not one of the properties on the list.
+
+ - Function: plist-put plist property value
+     This function changes the value in PLIST of PROPERTY to VALUE.  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.  The PLIST is modified by side
+     effects.
+
+ - Function: plist-remprop plist property
+     This function removes from PLIST the property PROPERTY and its
+     value.  The new plist is returned; use `(setq x (plist-remprop x
+     property))' to be sure to use the new value.  The PLIST is
+     modified by side effects.
 
- - Function: plist-member plist prop
-     This function returns `t' if PROP has a value specified in PLIST.
+ - Function: plist-member plist property
+     This function returns `t' if PROPERTY has a value specified in
+     PLIST.
 
    In the following functions, if optional arg NIL-MEANS-NOT-PRESENT is
 non-`nil', then a property with a `nil' value is ignored or removed.
@@ -1135,22 +1137,22 @@ Working With Lax Plists
    Recall that a "lax plist" is a property list whose keys are compared
 using `equal' instead of `eq'.
 
- - Function: lax-plist-get lax-plist prop &optional default
+ - Function: 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 PROP, or
-     DEFAULT if PROP is not one of the properties on the list.
+     function returns the value corresponding to the given PROPERTY, or
+     DEFAULT if PROPERTY is not one of the properties on the list.
 
- - Function: lax-plist-put lax-plist prop val
-     This function changes the value in LAX-PLIST of PROP to VAL.
+ - Function: lax-plist-put lax-plist property value
+     This function changes the value in LAX-PLIST of PROPERTY to VALUE.
 
- - Function: lax-plist-remprop lax-plist prop
-     This function removes from LAX-PLIST the property PROP and its
+ - Function: lax-plist-remprop lax-plist property
+     This function removes from LAX-PLIST the property PROPERTY and its
      value.  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
+     x property))' to be sure to use the new value.  The LAX-PLIST is
      modified by side effects.
 
- - Function: lax-plist-member lax-plist prop
-     This function returns `t' if PROP has a value specified in
+ - Function: lax-plist-member lax-plist property
+     This function returns `t' if PROPERTY has a value specified in
      LAX-PLIST.
 
    In the following functions, if optional arg NIL-MEANS-NOT-PRESENT is
index 2e16da4..5bc2e97 100644 (file)
@@ -471,19 +471,20 @@ Functions That Operate on Bit Vectors
  - Function: bitp object
      This function returns `t' if OBJECT is either 0 or 1.
 
- - Function: bit-vector &rest objects
+ - Function: bit-vector &rest bits
      This function creates and returns a bit vector whose elements are
-     the arguments OBJECTS.  The elements must be either of the two
-     integers 0 or 1.
+     the arguments BITS.  Each argument must be a bit, i.e. one of the
+     two integers 0 or 1.
 
           (bit-vector 0 0 0 1 0 0 0 0 1 0)
                => #*0001000010
           (bit-vector)
                => #*
 
- - Function: make-bit-vector length object
+ - Function: make-bit-vector length bit
      This function creates and returns a bit vector consisting of
-     LENGTH elements, each initialized to OBJECT.
+     LENGTH elements, each initialized to BIT, which must be one of the
+     two integers 0 or 1.
 
           (setq picket-fence (make-bit-vector 9 1))
                => #*111111111
@@ -999,7 +1000,7 @@ stored in places other than symbols:
           (getf '(foo 4) 'foo)
                => 4
 
- - Function: putf plist property value
+ - Macro: putf plist property value
      This stores VALUE as the value of the PROPERTY property in the
      property list PLIST.  It may modify PLIST destructively, or it may
      construct a new list structure without altering the old.  The
index e9ddbe6..333739c 100644 (file)
@@ -191,11 +191,11 @@ symbol function indirection when calling `erste'.
    The built-in function `indirect-function' provides an easy way to
 perform symbol function indirection explicitly.
 
- - Function: indirect-function function
-     This function returns the meaning of FUNCTION as a function.  If
-     FUNCTION is a symbol, then it finds FUNCTION's function definition
-     and starts over with that value.  If FUNCTION is not a symbol,
-     then it returns FUNCTION itself.
+ - Function: indirect-function object
+     This function returns the meaning of OBJECT as a function.  If
+     OBJECT is a symbol, then it finds OBJECT's function definition and
+     starts over with that value.  If OBJECT is not a symbol, then it
+     returns OBJECT itself.
 
      Here is how you could define `indirect-function' in Lisp:
 
@@ -980,18 +980,125 @@ and others.
    Quitting, which happens when the user types `C-g', is not considered
 an error, but it is handled almost like an error.  *Note Quitting::.
 
- - Function: error format-string &rest args
-     This function signals an error with an error message constructed by
-     applying `format' (*note String Conversion::) to FORMAT-STRING and
-     ARGS.
+   XEmacs has a rich hierarchy of error symbols predefined via
+`deferror'.
+
+     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
+
+   The five most common errors you will probably use or base your new
+errors off of are `syntax-error', `invalid-argument', `invalid-state',
+`invalid-operation', and `invalid-change'.  Note the semantic
+differences:
+
+   * `syntax-error' is for errors in complex structures: parsed strings,
+     lists, and the like.
+
+   * `invalid-argument' is for errors in a simple value.  Typically, the
+     entire value, not just one part of it, is wrong.
+
+   * `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:
+
+   * `invalid-change' means that an attempt is being made to change some
+     settings into an invalid state.  `invalid-change' is a type of
+     `invalid-operation'.
+
+   * `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), `invalid-change' as
+     just mentioned, and arithmetic errors.
+
+ - Function: error datum &rest args
+     This function signals a non-continuable error.
+
+     DATUM should normally be an error symbol, i.e. a symbol defined
+     using `define-error'.  ARGS will be made into a list, and DATUM
+     and ARGS passed as the two arguments to `signal', the most basic
+     error handling function.
 
      This error is not continuable: you cannot continue execution after
-     the error using the debugger `r' or `c' commands.  If you wish the
-     user to be able to continue execution, use `cerror' or `signal'
-     instead.
+     the error using the debugger `r' command.  See also `cerror'.
+
+     The correct semantics of 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.:
+
+        * the buffer in which an editing error occurred.
+
+        * 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.)
+
+        * 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.
+
+     For historical compatibility, DATUM can also be a string.  In this
+     case, DATUM and ARGS are passed together as the arguments to
+     `format', and then an error is signalled using the error symbol
+     `error' and formatted string.  Although this usage of `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 `cerror', `signal', and `signal-error'."
 
      These examples show typical uses of `error':
 
+          (error 'syntax-error
+                 "Dialog descriptor must supply at least one button"
+               descriptor)
+          
           (error "You have committed an error.
                   Try something else.")
                error--> You have committed an error.
@@ -1000,17 +1107,12 @@ an error, but it is handled almost like an error.  *Note Quitting::.
           (error "You have committed %d errors." 10)
                error--> You have committed 10 errors.
 
-     `error' works by calling `signal' with two arguments: the error
-     symbol `error', and a list containing the string returned by
-     `format'.  This is repeated in an endless loop, to ensure that
-     `error' never returns.
-
      If you want to use your own string as an error message verbatim,
      don't just write `(error STRING)'.  If STRING contains `%', it
      will be interpreted as a format specifier, with undesirable
      results.  Instead, use `(error "%s" STRING)'.
 
- - Function: cerror format-string &rest args
+ - Function: cerror datum &rest args
      This function behaves like `error', except that the error it
      signals is continuable.  That means that debugger commands `c' and
      `r' can resume execution.
@@ -1118,163 +1220,3 @@ Debugging::) is non-`nil'.  Unlike error handlers, the debugger runs in
 the environment of the error, so that you can examine values of
 variables precisely as they were at the time of the error.
 
-\1f
-File: lispref.info,  Node: Handling Errors,  Next: Error Symbols,  Prev: Processing of Errors,  Up: Errors
-
-Writing Code to Handle Errors
-.............................
-
-   The usual effect of signaling an error is to terminate the command
-that is running and return immediately to the XEmacs editor command
-loop.  You can arrange to trap errors occurring in a part of your
-program by establishing an error handler, with the special form
-`condition-case'.  A simple example looks like this:
-
-     (condition-case nil
-         (delete-file filename)
-       (error nil))
-
-This deletes the file named FILENAME, catching any error and returning
-`nil' if an error occurs.
-
-   The second argument of `condition-case' is called the "protected
-form".  (In the example above, the protected form is a call to
-`delete-file'.)  The error handlers go into effect when this form
-begins execution and are deactivated when this form returns.  They
-remain in effect for all the intervening time.  In particular, they are
-in effect during the execution of functions called by this form, in
-their subroutines, and so on.  This is a good thing, since, strictly
-speaking, errors can be signaled only by Lisp primitives (including
-`signal' and `error') called by the protected form, not by the
-protected form itself.
-
-   The arguments after the protected form are handlers.  Each handler
-lists one or more "condition names" (which are symbols) to specify
-which errors it will handle.  The error symbol specified when an error
-is signaled also defines a list of condition names.  A handler applies
-to an error if they have any condition names in common.  In the example
-above, there is one handler, and it specifies one condition name,
-`error', which covers all errors.
-
-   The search for an applicable handler checks all the established
-handlers starting with the most recently established one.  Thus, if two
-nested `condition-case' forms offer to handle the same error, the inner
-of the two will actually handle it.
-
-   When an error is handled, control returns to the handler.  Before
-this happens, XEmacs unbinds all variable bindings made by binding
-constructs that are being exited and executes the cleanups of all
-`unwind-protect' forms that are exited.  Once control arrives at the
-handler, the body of the handler is executed.
-
-   After execution of the handler body, execution continues by returning
-from the `condition-case' form.  Because the protected form is exited
-completely before execution of the handler, the handler cannot resume
-execution at the point of the error, nor can it examine variable
-bindings that were made within the protected form.  All it can do is
-clean up and proceed.
-
-   `condition-case' is often used to trap errors that are predictable,
-such as failure to open a file in a call to `insert-file-contents'.  It
-is also used to trap errors that are totally unpredictable, such as
-when the program evaluates an expression read from the user.
-
-   Even when an error is handled, the debugger may still be called if
-the variable `debug-on-signal' (*note Error Debugging::) is non-`nil'.
-Note that this may yield unpredictable results with code that traps
-expected errors as normal part of its operation.  Do not set
-`debug-on-signal' unless you know what you are doing.
-
-   Error signaling and handling have some resemblance to `throw' and
-`catch', but they are entirely separate facilities.  An error cannot be
-caught by a `catch', and a `throw' cannot be handled by an error
-handler (though using `throw' when there is no suitable `catch' signals
-an error that can be handled).
-
- - Special Form: condition-case var protected-form handlers...
-     This special form establishes the error handlers HANDLERS around
-     the execution of PROTECTED-FORM.  If PROTECTED-FORM executes
-     without error, the value it returns becomes the value of the
-     `condition-case' form; in this case, the `condition-case' has no
-     effect.  The `condition-case' form makes a difference when an
-     error occurs during PROTECTED-FORM.
-
-     Each of the HANDLERS is a list of the form `(CONDITIONS BODY...)'.
-     Here CONDITIONS is an error condition name to be handled, or a
-     list of condition names; BODY is one or more Lisp expressions to
-     be executed when this handler handles an error.  Here are examples
-     of handlers:
-
-          (error nil)
-          
-          (arith-error (message "Division by zero"))
-          
-          ((arith-error file-error)
-           (message
-            "Either division by zero or failure to open a file"))
-
-     Each error that occurs has an "error symbol" that describes what
-     kind of error it is.  The `error-conditions' property of this
-     symbol is a list of condition names (*note Error Symbols::).  Emacs
-     searches all the active `condition-case' forms for a handler that
-     specifies one or more of these condition names; the innermost
-     matching `condition-case' handles the error.  Within this
-     `condition-case', the first applicable handler handles the error.
-
-     After executing the body of the handler, the `condition-case'
-     returns normally, using the value of the last form in the handler
-     body as the overall value.
-
-     The argument VAR is a variable.  `condition-case' does not bind
-     this variable when executing the PROTECTED-FORM, only when it
-     handles an error.  At that time, it binds VAR locally to a list of
-     the form `(ERROR-SYMBOL . DATA)', giving the particulars of the
-     error.  The handler can refer to this list to decide what to do.
-     For example, if the error is for failure opening a file, the file
-     name is the second element of DATA--the third element of VAR.
-
-     If VAR is `nil', that means no variable is bound.  Then the error
-     symbol and associated data are not available to the handler.
-
-   Here is an example of using `condition-case' to handle the error
-that results from dividing by zero.  The handler prints out a warning
-message and returns a very large number.
-
-     (defun safe-divide (dividend divisor)
-       (condition-case err
-           ;; Protected form.
-           (/ dividend divisor)
-         ;; The handler.
-         (arith-error                        ; Condition.
-          (princ (format "Arithmetic error: %s" err))
-          1000000)))
-     => safe-divide
-     
-     (safe-divide 5 0)
-          -| Arithmetic error: (arith-error)
-     => 1000000
-
-The handler specifies condition name `arith-error' so that it will
-handle only division-by-zero errors.  Other kinds of errors will not be
-handled, at least not by this `condition-case'.  Thus,
-
-     (safe-divide nil 3)
-          error--> Wrong type argument: integer-or-marker-p, nil
-
-   Here is a `condition-case' that catches all kinds of errors,
-including those signaled with `error':
-
-     (setq baz 34)
-          => 34
-     
-     (condition-case err
-         (if (eq baz 35)
-             t
-           ;; This is a call to the function `error'.
-           (error "Rats!  The variable %s was %s, not 35" 'baz baz))
-       ;; This is the handler; it is not a form.
-       (error (princ (format "The error was: %s" err))
-              2))
-     -| The error was: (error "Rats!  The variable baz was 34, not 35")
-     => 2
-
index d9a7549..a0554c4 100644 (file)
@@ -50,6 +50,166 @@ may be included in a translation approved by the Free Software
 Foundation instead of in the original English.
 
 \1f
+File: lispref.info,  Node: Handling Errors,  Next: Error Symbols,  Prev: Processing of Errors,  Up: Errors
+
+Writing Code to Handle Errors
+.............................
+
+   The usual effect of signaling an error is to terminate the command
+that is running and return immediately to the XEmacs editor command
+loop.  You can arrange to trap errors occurring in a part of your
+program by establishing an error handler, with the special form
+`condition-case'.  A simple example looks like this:
+
+     (condition-case nil
+         (delete-file filename)
+       (error nil))
+
+This deletes the file named FILENAME, catching any error and returning
+`nil' if an error occurs.
+
+   The second argument of `condition-case' is called the "protected
+form".  (In the example above, the protected form is a call to
+`delete-file'.)  The error handlers go into effect when this form
+begins execution and are deactivated when this form returns.  They
+remain in effect for all the intervening time.  In particular, they are
+in effect during the execution of functions called by this form, in
+their subroutines, and so on.  This is a good thing, since, strictly
+speaking, errors can be signaled only by Lisp primitives (including
+`signal' and `error') called by the protected form, not by the
+protected form itself.
+
+   The arguments after the protected form are handlers.  Each handler
+lists one or more "condition names" (which are symbols) to specify
+which errors it will handle.  The error symbol specified when an error
+is signaled also defines a list of condition names.  A handler applies
+to an error if they have any condition names in common.  In the example
+above, there is one handler, and it specifies one condition name,
+`error', which covers all errors.
+
+   The search for an applicable handler checks all the established
+handlers starting with the most recently established one.  Thus, if two
+nested `condition-case' forms offer to handle the same error, the inner
+of the two will actually handle it.
+
+   When an error is handled, control returns to the handler.  Before
+this happens, XEmacs unbinds all variable bindings made by binding
+constructs that are being exited and executes the cleanups of all
+`unwind-protect' forms that are exited.  Once control arrives at the
+handler, the body of the handler is executed.
+
+   After execution of the handler body, execution continues by returning
+from the `condition-case' form.  Because the protected form is exited
+completely before execution of the handler, the handler cannot resume
+execution at the point of the error, nor can it examine variable
+bindings that were made within the protected form.  All it can do is
+clean up and proceed.
+
+   `condition-case' is often used to trap errors that are predictable,
+such as failure to open a file in a call to `insert-file-contents'.  It
+is also used to trap errors that are totally unpredictable, such as
+when the program evaluates an expression read from the user.
+
+   Even when an error is handled, the debugger may still be called if
+the variable `debug-on-signal' (*note Error Debugging::) is non-`nil'.
+Note that this may yield unpredictable results with code that traps
+expected errors as normal part of its operation.  Do not set
+`debug-on-signal' unless you know what you are doing.
+
+   Error signaling and handling have some resemblance to `throw' and
+`catch', but they are entirely separate facilities.  An error cannot be
+caught by a `catch', and a `throw' cannot be handled by an error
+handler (though using `throw' when there is no suitable `catch' signals
+an error that can be handled).
+
+ - Special Form: condition-case var protected-form handlers...
+     This special form establishes the error handlers HANDLERS around
+     the execution of PROTECTED-FORM.  If PROTECTED-FORM executes
+     without error, the value it returns becomes the value of the
+     `condition-case' form; in this case, the `condition-case' has no
+     effect.  The `condition-case' form makes a difference when an
+     error occurs during PROTECTED-FORM.
+
+     Each of the HANDLERS is a list of the form `(CONDITIONS BODY...)'.
+     Here CONDITIONS is an error condition name to be handled, or a
+     list of condition names; BODY is one or more Lisp expressions to
+     be executed when this handler handles an error.  Here are examples
+     of handlers:
+
+          (error nil)
+          
+          (arith-error (message "Division by zero"))
+          
+          ((arith-error file-error)
+           (message
+            "Either division by zero or failure to open a file"))
+
+     Each error that occurs has an "error symbol" that describes what
+     kind of error it is.  The `error-conditions' property of this
+     symbol is a list of condition names (*note Error Symbols::).  Emacs
+     searches all the active `condition-case' forms for a handler that
+     specifies one or more of these condition names; the innermost
+     matching `condition-case' handles the error.  Within this
+     `condition-case', the first applicable handler handles the error.
+
+     After executing the body of the handler, the `condition-case'
+     returns normally, using the value of the last form in the handler
+     body as the overall value.
+
+     The argument VAR is a variable.  `condition-case' does not bind
+     this variable when executing the PROTECTED-FORM, only when it
+     handles an error.  At that time, it binds VAR locally to a list of
+     the form `(ERROR-SYMBOL . DATA)', giving the particulars of the
+     error.  The handler can refer to this list to decide what to do.
+     For example, if the error is for failure opening a file, the file
+     name is the second element of DATA--the third element of VAR.
+
+     If VAR is `nil', that means no variable is bound.  Then the error
+     symbol and associated data are not available to the handler.
+
+   Here is an example of using `condition-case' to handle the error
+that results from dividing by zero.  The handler prints out a warning
+message and returns a very large number.
+
+     (defun safe-divide (dividend divisor)
+       (condition-case err
+           ;; Protected form.
+           (/ dividend divisor)
+         ;; The handler.
+         (arith-error                        ; Condition.
+          (princ (format "Arithmetic error: %s" err))
+          1000000)))
+     => safe-divide
+     
+     (safe-divide 5 0)
+          -| Arithmetic error: (arith-error)
+     => 1000000
+
+The handler specifies condition name `arith-error' so that it will
+handle only division-by-zero errors.  Other kinds of errors will not be
+handled, at least not by this `condition-case'.  Thus,
+
+     (safe-divide nil 3)
+          error--> Wrong type argument: integer-or-marker-p, nil
+
+   Here is a `condition-case' that catches all kinds of errors,
+including those signaled with `error':
+
+     (setq baz 34)
+          => 34
+     
+     (condition-case err
+         (if (eq baz 35)
+             t
+           ;; This is a call to the function `error'.
+           (error "Rats!  The variable %s was %s, not 35" 'baz baz))
+       ;; This is the handler; it is not a form.
+       (error (princ (format "The error was: %s" err))
+              2))
+     -| The error was: (error "Rats!  The variable baz was 34, not 35")
+     => 2
+
+\1f
 File: lispref.info,  Node: Error Symbols,  Prev: Handling Errors,  Up: Errors
 
 Error Symbols and Condition Names
@@ -1044,171 +1204,3 @@ important customization method.
 * Default Value::              The default value is seen in buffers
                                  that don't have their own local values.
 
-\1f
-File: lispref.info,  Node: Intro to Buffer-Local,  Next: Creating Buffer-Local,  Up: Buffer-Local Variables
-
-Introduction to Buffer-Local Variables
---------------------------------------
-
-   A buffer-local variable has a buffer-local binding associated with a
-particular buffer.  The binding is in effect when that buffer is
-current; otherwise, it is not in effect.  If you set the variable while
-a buffer-local binding is in effect, the new value goes in that binding,
-so the global binding is unchanged; this means that the change is
-visible in that buffer alone.
-
-   A variable may have buffer-local bindings in some buffers but not in
-others.  The global binding is shared by all the buffers that don't have
-their own bindings.  Thus, if you set the variable in a buffer that does
-not have a buffer-local binding for it, the new value is visible in all
-buffers except those with buffer-local bindings.  (Here we are assuming
-that there are no `let'-style local bindings to complicate the issue.)
-
-   The most common use of buffer-local bindings is for major modes to
-change variables that control the behavior of commands.  For example, C
-mode and Lisp mode both set the variable `paragraph-start' to specify
-that only blank lines separate paragraphs.  They do this by making the
-variable buffer-local in the buffer that is being put into C mode or
-Lisp mode, and then setting it to the new value for that mode.
-
-   The usual way to make a buffer-local binding is with
-`make-local-variable', which is what major mode commands use.  This
-affects just the current buffer; all other buffers (including those yet
-to be created) continue to share the global value.
-
-   A more powerful operation is to mark the variable as "automatically
-buffer-local" by calling `make-variable-buffer-local'.  You can think
-of this as making the variable local in all buffers, even those yet to
-be created.  More precisely, the effect is that setting the variable
-automatically makes the variable local to the current buffer if it is
-not already so.  All buffers start out by sharing the global value of
-the variable as usual, but any `setq' creates a buffer-local binding
-for the current buffer.  The new value is stored in the buffer-local
-binding, leaving the (default) global binding untouched.  The global
-value can no longer be changed with `setq'; you need to use
-`setq-default' to do that.
-
-   Local variables in a file you edit are also represented by
-buffer-local bindings for the buffer that holds the file within XEmacs.
-*Note Auto Major Mode::.
-
-\1f
-File: lispref.info,  Node: Creating Buffer-Local,  Next: Default Value,  Prev: Intro to Buffer-Local,  Up: Buffer-Local Variables
-
-Creating and Deleting Buffer-Local Bindings
--------------------------------------------
-
- - Command: make-local-variable variable
-     This function creates a buffer-local binding in the current buffer
-     for VARIABLE (a symbol).  Other buffers are not affected.  The
-     value returned is VARIABLE.
-
-     The buffer-local value of VARIABLE starts out as the same value
-     VARIABLE previously had.  If VARIABLE was void, it remains void.
-
-          ;; In buffer `b1':
-          (setq foo 5)                ; Affects all buffers.
-               => 5
-          (make-local-variable 'foo)  ; Now it is local in `b1'.
-               => foo
-          foo                         ; That did not change
-               => 5                   ;   the value.
-          (setq foo 6)                ; Change the value
-               => 6                   ;   in `b1'.
-          foo
-               => 6
-          
-          ;; In buffer `b2', the value hasn't changed.
-          (save-excursion
-            (set-buffer "b2")
-            foo)
-               => 5
-
-     Making a variable buffer-local within a `let'-binding for that
-     variable does not work.  This is because `let' does not distinguish
-     between different kinds of bindings; it knows only which variable
-     the binding was made for.
-
-     *Please note:* do not use `make-local-variable' for a hook
-     variable.  Instead, use `make-local-hook'.  *Note Hooks::.
-
- - Command: make-variable-buffer-local variable
-     This function marks VARIABLE (a symbol) automatically
-     buffer-local, so that any subsequent attempt to set it will make it
-     local to the current buffer at the time.
-
-     The value returned is VARIABLE.
-
- - Function: local-variable-p variable &optional buffer
-     This returns `t' if VARIABLE is buffer-local in buffer BUFFER
-     (which defaults to the current buffer); otherwise, `nil'.
-
- - Function: buffer-local-variables &optional buffer
-     This function returns a list describing the buffer-local variables
-     in buffer BUFFER.  It returns an association list (*note
-     Association Lists::) in which each association contains one
-     buffer-local variable and its value.  When a buffer-local variable
-     is void in BUFFER, then it appears directly in the resulting list.
-     If BUFFER is omitted, the current buffer is used.
-
-          (make-local-variable 'foobar)
-          (makunbound 'foobar)
-          (make-local-variable 'bind-me)
-          (setq bind-me 69)
-          (setq lcl (buffer-local-variables))
-              ;; First, built-in variables local in all buffers:
-          => ((mark-active . nil)
-              (buffer-undo-list nil)
-              (mode-name . "Fundamental")
-              ...
-              ;; Next, non-built-in local variables.
-              ;; This one is local and void:
-              foobar
-              ;; This one is local and nonvoid:
-              (bind-me . 69))
-
-     Note that storing new values into the CDRs of cons cells in this
-     list does _not_ change the local values of the variables.
-
- - Command: kill-local-variable variable
-     This function deletes the buffer-local binding (if any) for
-     VARIABLE (a symbol) in the current buffer.  As a result, the
-     global (default) binding of VARIABLE becomes visible in this
-     buffer.  Usually this results in a change in the value of
-     VARIABLE, since the global value is usually different from the
-     buffer-local value just eliminated.
-
-     If you kill the local binding of a variable that automatically
-     becomes local when set, this makes the global value visible in the
-     current buffer.  However, if you set the variable again, that will
-     once again create a local binding for it.
-
-     `kill-local-variable' returns VARIABLE.
-
-     This function is a command because it is sometimes useful to kill
-     one buffer-local variable interactively, just as it is useful to
-     create buffer-local variables interactively.
-
- - Function: kill-all-local-variables
-     This function eliminates all the buffer-local variable bindings of
-     the current buffer except for variables marked as "permanent".  As
-     a result, the buffer will see the default values of most variables.
-
-     This function also resets certain other information pertaining to
-     the buffer: it sets the local keymap to `nil', the syntax table to
-     the value of `standard-syntax-table', and the abbrev table to the
-     value of `fundamental-mode-abbrev-table'.
-
-     Every major mode command begins by calling this function, which
-     has the effect of switching to Fundamental mode and erasing most
-     of the effects of the previous major mode.  To ensure that this
-     does its job, the variables that major modes set should not be
-     marked permanent.
-
-     `kill-all-local-variables' returns `nil'.
-
-   A local variable is "permanent" if the variable name (a symbol) has a
-`permanent-local' property that is non-`nil'.  Permanent locals are
-appropriate for data pertaining to where the file came from or how to
-save it, rather than with how to edit the contents.
-
index 1f01bd3..f3d6418 100644 (file)
@@ -20,7 +20,7 @@ preserved on all copies.
 Indirect:
 new-users-guide.info-1: 635
 new-users-guide.info-2: 50468
-new-users-guide.info-3: 100029
+new-users-guide.info-3: 100033
 \1f
 Tag Table:
 (Indirect)
@@ -58,19 +58,19 @@ Node: Files\7f65082
 Node: File Names\7f65804
 Node: Visiting\7f67607
 Node: Saving Files\7f69731
-Node: Other Customizations\7f73108
-Node: Setting Variables\7f75584
-Node: Init File\7f78793
-Node: Select and Move\7f84263
-Node: Selecting Text\7f85217
-Node: Mouse\7f86730
-Node: Region Operation\7f88055
-Node: Moving Text\7f89315
-Node: Accumulating text\7f90555
-Node: Search and Replace\7f92876
-Node: Key Index\7f96740
-Node: Command Index\7f100029
-Node: Variable Index\7f104131
-Node: Concept Index\7f104708
+Node: Other Customizations\7f73110
+Node: Setting Variables\7f75586
+Node: Init File\7f78795
+Node: Select and Move\7f84265
+Node: Selecting Text\7f85219
+Node: Mouse\7f86732
+Node: Region Operation\7f88057
+Node: Moving Text\7f89317
+Node: Accumulating text\7f90557
+Node: Search and Replace\7f92878
+Node: Key Index\7f96744
+Node: Command Index\7f100033
+Node: Variable Index\7f104135
+Node: Concept Index\7f104712
 \1f
 End Tag Table
index 652d4f1..425627c 100644 (file)
@@ -94,7 +94,7 @@ and the HTML form support in the `w3' browser.
    The advantages for a programmer of using the `widget' package to
 implement forms are:
 
-  1. More complex field than just editable text are supported.
+  1. More complex fields than just editable text are supported.
 
   2. You can give the user immediate feedback if he enters invalid data
      in a text field, and sometimes prevent entering invalid data.
@@ -416,7 +416,7 @@ Basic Types
      NAME ::= (NAME [KEYWORD ARGUMENT]... ARGS)
           |   NAME
 
-   Where, NAME is a widget name, KEYWORD is the name of a property,
+   where NAME is a widget name, KEYWORD is the name of a property,
 ARGUMENT is the value of the property, and ARGS are interpreted in a
 widget specific way.
 
@@ -490,7 +490,8 @@ widget specific way.
           The value of the symbol is expanded according to this table.
 
 `:doc'
-     The string inserted by the `%d' escape in the format string.
+     The string inserted by the `%d' or `%h' escape in the format
+     string.
 
 `:tag'
      The string inserted by the `%t' escape in the format string.
@@ -538,7 +539,7 @@ widget specific way.
      specified value.
 
 `:validate'
-     A function which takes a widget as an argument, and return nil if
+     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 `:error' property to a string explaining the error.
@@ -685,8 +686,10 @@ widget will match all string values.
    The following extra properties are recognized.
 
 `: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.
 
 `:value-face'
      Face used for highlighting the editable field.  Default is
@@ -705,7 +708,7 @@ widget will match all string values.
 `:keymap'
      Keymap used in the editable field.  The default value is
      `widget-field-keymap', which allows you to use all the normal
-     editing commands, even if the buffers major mode suppress some of
+     editing commands, even if the buffer's major mode suppress some of
      them.  Pressing return invokes the function specified by `:action'.
 
 \1f
@@ -1517,35 +1520,35 @@ Wishlist
 Tag Table:
 Node: Top\7f211
 Node: Introduction\7f591
-Node: User Interface\7f4074
-Node: Programming Example\7f8969
-Node: Setting Up the Buffer\7f13119
-Node: Basic Types\7f14836
-Node: link\7f20881
-Node: url-link\7f21395
-Node: info-link\7f21707
-Node: push-button\7f21998
-Node: editable-field\7f22571
-Node: text\7f23910
-Node: menu-choice\7f24208
-Node: radio-button-choice\7f25061
-Node: item\7f26628
-Node: choice-item\7f27016
-Node: toggle\7f27514
-Node: checkbox\7f28251
-Node: checklist\7f28557
-Node: editable-list\7f30001
-Node: group\7f31183
-Node: Sexp Types\7f31470
-Node: constants\7f31783
-Node: generic\7f32862
-Node: atoms\7f33395
-Node: composite\7f35342
-Node: Widget Properties\7f37812
-Node: Defining New Widgets\7f40877
-Node: Widget Browser\7f46177
-Node: Widget Minor Mode\7f47035
-Node: Utilities\7f47592
-Node: Widget Wishlist\7f48073
+Node: User Interface\7f4075
+Node: Programming Example\7f8970
+Node: Setting Up the Buffer\7f13120
+Node: Basic Types\7f14837
+Node: link\7f20895
+Node: url-link\7f21409
+Node: info-link\7f21721
+Node: push-button\7f22012
+Node: editable-field\7f22585
+Node: text\7f24068
+Node: menu-choice\7f24366
+Node: radio-button-choice\7f25219
+Node: item\7f26786
+Node: choice-item\7f27174
+Node: toggle\7f27672
+Node: checkbox\7f28409
+Node: checklist\7f28715
+Node: editable-list\7f30159
+Node: group\7f31341
+Node: Sexp Types\7f31628
+Node: constants\7f31941
+Node: generic\7f33020
+Node: atoms\7f33553
+Node: composite\7f35500
+Node: Widget Properties\7f37970
+Node: Defining New Widgets\7f41035
+Node: Widget Browser\7f46335
+Node: Widget Minor Mode\7f47193
+Node: Utilities\7f47750
+Node: Widget Wishlist\7f48231
 \1f
 End Tag Table
index 99ec491..836f830 100644 (file)
@@ -9,257 +9,260 @@ END-INFO-DIR-ENTRY
 \1f
 Indirect:
 xemacs-faq.info-1: 205
-xemacs-faq.info-2: 50174
-xemacs-faq.info-3: 99767
-xemacs-faq.info-4: 149758
-xemacs-faq.info-5: 199303
+xemacs-faq.info-2: 49999
+xemacs-faq.info-3: 99617
+xemacs-faq.info-4: 149492
+xemacs-faq.info-5: 199354
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f205
-Node: Introduction\7f16499
-Node: Q1.0.1\7f19941
-Node: Q1.0.2\7f20477
-Node: Q1.0.3\7f21022
-Node: Q1.0.4\7f21284
-Node: Q1.0.5\7f22734
-Node: Q1.0.6\7f23423
-Node: Q1.0.7\7f24429
-Node: Q1.0.8\7f24682
-Node: Q1.0.9\7f24897
-Node: Q1.0.10\7f25175
-Node: Q1.0.11\7f25418
-Node: Q1.0.12\7f25807
-Node: Q1.0.13\7f26175
-Node: Q1.0.14\7f26424
-Node: Q1.1.1\7f26934
-Node: Q1.1.2\7f27976
-Node: Q1.1.3\7f28369
-Node: Q1.2.1\7f29320
-Node: Q1.2.2\7f30376
-Node: Q1.2.3\7f30810
-Node: Q1.3.1\7f31894
-Node: Q1.3.2\7f32545
-Node: Q1.3.3\7f33009
-Node: Q1.3.4\7f33250
-Node: Q1.3.5\7f34023
-Node: Q1.3.6\7f36428
-Node: Q1.3.7\7f37959
-Node: Q1.4.1\7f38894
-Node: Q1.4.2\7f39756
-Node: Q1.4.3\7f40097
-Node: Q1.4.4\7f40516
-Node: Q1.4.5\7f42056
-Node: Q1.4.6\7f42360
-Node: Installation\7f43353
-Node: Q2.0.1\7f45716
-Node: Q2.0.2\7f46516
-Node: Q2.0.3\7f48284
-Node: Q2.0.4\7f49582
-Node: Q2.0.5\7f50174
-Node: Q2.0.6\7f50522
-Node: Q2.0.7\7f50903
-Node: Q2.0.8\7f51284
-Node: Q2.0.9\7f52861
-Node: Q2.0.10\7f54299
-Node: Q2.0.11\7f55143
-Node: Q2.0.12\7f56084
-Node: Q2.1.1\7f57606
-Node: Q2.1.2\7f60348
-Node: Q2.1.3\7f61525
-Node: Q2.1.4\7f62818
-Node: Q2.1.5\7f63617
-Node: Q2.1.6\7f63979
-Node: Q2.1.7\7f64456
-Node: Q2.1.8\7f64809
-Node: Q2.1.9\7f66343
-Node: Q2.1.10\7f66765
-Node: Q2.1.11\7f67522
-Node: Q2.1.12\7f68387
-Node: Q2.1.13\7f69342
-Node: Q2.1.14\7f70373
-Node: Q2.1.15\7f71484
-Node: Q2.1.16\7f78516
-Node: Q2.1.17\7f79210
-Node: Q2.1.18\7f79807
-Node: Q2.1.19\7f79934
-Node: Q2.1.20\7f80464
-Node: Q2.1.21\7f80846
-Node: Q2.1.22\7f81039
-Node: Q2.1.23\7f82336
-Node: Q2.1.24\7f83004
-Node: Customization\7f83460
-Node: Q3.0.1\7f88298
-Node: Q3.0.2\7f89004
-Node: Q3.0.3\7f89568
-Node: Q3.0.4\7f89985
-Node: Q3.0.5\7f90818
-Node: Q3.0.6\7f91599
-Node: Q3.0.7\7f92179
-Node: Q3.0.8\7f92843
-Node: Q3.0.9\7f93801
-Node: Q3.1.1\7f94362
-Node: Q3.1.2\7f95099
-Node: Q3.1.3\7f95530
-Node: Q3.1.4\7f95719
-Node: Q3.1.5\7f95908
-Node: Q3.1.6\7f96292
-Node: Q3.1.7\7f97001
-Node: Q3.1.8\7f99225
-Node: Q3.2.1\7f99767
-Node: Q3.2.2\7f101420
-Node: Q3.2.3\7f102219
-Node: Q3.2.4\7f102821
-Node: Q3.2.5\7f103855
-Node: Q3.2.6\7f104322
-Node: Q3.3.1\7f105247
-Node: Q3.3.2\7f105677
-Node: Q3.3.3\7f106308
-Node: Q3.3.4\7f106689
-Node: Q3.3.5\7f107790
-Node: Q3.4.1\7f109284
-Node: Q3.4.2\7f109927
-Node: Q3.5.1\7f110439
-Node: Q3.5.2\7f111888
-Node: Q3.5.3\7f112306
-Node: Q3.5.4\7f113144
-Node: Q3.5.5\7f113976
-Node: Q3.5.6\7f115116
-Node: Q3.5.7\7f116106
-Node: Q3.5.8\7f117546
-Node: Q3.5.9\7f118293
-Node: Q3.5.10\7f119073
-Node: Q3.5.11\7f119709
-Node: Q3.6.1\7f120262
-Node: Q3.6.2\7f121007
-Node: Q3.6.3\7f121435
-Node: Q3.7.1\7f121935
-Node: Q3.7.2\7f122823
-Node: Q3.7.3\7f123482
-Node: Q3.7.4\7f123904
-Node: Q3.7.5\7f124247
-Node: Q3.7.6\7f124715
-Node: Q3.7.7\7f125430
-Node: Q3.7.8\7f126450
-Node: Q3.8.1\7f126869
-Node: Q3.8.2\7f127329
-Node: Q3.8.3\7f127792
-Node: Q3.8.4\7f128398
-Node: Q3.8.5\7f129117
-Node: Q3.9.1\7f129902
-Node: Q3.9.2\7f130842
-Node: Q3.9.3\7f131440
-Node: Q3.9.4\7f132102
-Node: Q3.10.1\7f132981
-Node: Q3.10.2\7f133799
-Node: Q3.10.3\7f134804
-Node: Q3.10.4\7f135532
-Node: Q3.10.5\7f135915
-Node: Subsystems\7f136967
-Node: Q4.0.1\7f139454
-Node: Q4.0.2\7f139979
-Node: Q4.0.3\7f140537
-Node: Q4.0.4\7f140858
-Node: Q4.0.5\7f141100
-Node: Q4.0.6\7f141331
-Node: Q4.0.7\7f141919
-Node: Q4.0.8\7f142244
-Node: Q4.0.9\7f143471
-Node: Q4.0.10\7f145509
-Node: Q4.0.11\7f145998
-Node: Q4.0.12\7f146876
-Node: Q4.1.1\7f147849
-Node: Q4.1.2\7f148252
-Node: Q4.1.3\7f148579
-Node: Q4.2.1\7f148888
-Node: Q4.2.2\7f149518
-Node: Q4.2.3\7f149758
-Node: Q4.2.4\7f150302
-Node: Q4.3.1\7f150955
-Node: Q4.3.2\7f151539
-Node: Q4.3.3\7f153020
-Node: Q4.3.4\7f153292
-Node: Q4.3.5\7f153969
-Node: Q4.4.1\7f154597
-Node: Q4.4.2\7f156083
-Node: Q4.5.1\7f157287
-Node: Q4.6.1\7f158056
-Node: Q4.7.1\7f163316
-Node: Q4.7.2\7f164271
-Node: Q4.7.3\7f164568
-Node: Q4.7.4\7f164754
-Node: Q4.7.5\7f165638
-Node: Q4.7.6\7f167279
-Node: Miscellaneous\7f167568
-Node: Q5.0.1\7f170981
-Node: Q5.0.2\7f171720
-Node: Q5.0.3\7f172574
-Node: Q5.0.4\7f173276
-Node: Q5.0.5\7f174215
-Node: Q5.0.6\7f176195
-Node: Q5.0.7\7f176852
-Node: Q5.0.8\7f177457
-Node: Q5.0.9\7f177976
-Node: Q5.0.10\7f178490
-Node: Q5.0.11\7f178738
-Node: Q5.0.12\7f179276
-Node: Q5.0.13\7f180193
-Node: Q5.0.14\7f180877
-Node: Q5.0.15\7f181642
-Node: Q5.0.16\7f181939
-Node: Q5.0.17\7f182451
-Node: Q5.0.18\7f182716
-Node: Q5.0.19\7f182910
-Node: Q5.0.20\7f183334
-Node: Q5.1.1\7f184249
-Node: Q5.1.2\7f186318
-Node: Q5.1.3\7f187054
-Node: Q5.1.4\7f190448
-Node: Q5.1.5\7f190983
-Node: Q5.1.6\7f193107
-Node: Q5.1.7\7f194593
-Node: Q5.1.8\7f196186
-Node: Q5.1.9\7f196738
-Node: Q5.1.10\7f197623
-Node: Q5.1.11\7f198754
-Node: Q5.2.1\7f199303
-Node: Q5.2.2\7f199873
-Node: Q5.2.3\7f200290
-Node: Q5.2.4\7f200525
-Node: Q5.3.1\7f201435
-Node: Q5.3.2\7f202656
-Node: Q5.3.3\7f203432
-Node: Q5.3.4\7f203916
-Node: Q5.3.5\7f204583
-Node: Q5.3.6\7f205452
-Node: Q5.3.7\7f205697
-Node: Q5.3.8\7f207887
-Node: Q5.3.9\7f208134
-Node: Q5.3.10\7f209087
-Node: Q5.3.11\7f211171
-Node: Q5.3.12\7f212762
-Node: MS Windows\7f214036
-Node: Q6.0.1\7f215513
-Node: Q6.0.2\7f216260
-Node: Q6.0.3\7f216725
-Node: Q6.0.4\7f217005
-Node: Q6.1.1\7f219284
-Node: Q6.1.2\7f220155
-Node: Q6.1.3\7f220610
-Node: Q6.1.4\7f220892
-Node: Q6.1.5\7f221270
-Node: Q6.1.6\7f222138
-Node: Q6.2.1\7f224444
-Node: Q6.2.2\7f225345
-Node: Q6.2.3\7f225757
-Node: Q6.3.1\7f226046
-Node: Q6.3.2\7f227140
-Node: Q6.3.3\7f230321
-Node: Q6.4.1\7f230590
-Node: Current Events\7f231925
-Node: Q7.0.1\7f232579
-Node: Q7.0.2\7f233218
-Node: Q7.0.3\7f234291
-Node: Q7.0.4\7f234519
+Node: Introduction\7f16704
+Node: Q1.0.1\7f20146
+Node: Q1.0.2\7f20682
+Node: Q1.0.3\7f21227
+Node: Q1.0.4\7f21489
+Node: Q1.0.5\7f22939
+Node: Q1.0.6\7f23628
+Node: Q1.0.7\7f24634
+Node: Q1.0.8\7f24887
+Node: Q1.0.9\7f25102
+Node: Q1.0.10\7f25380
+Node: Q1.0.11\7f25623
+Node: Q1.0.12\7f26012
+Node: Q1.0.13\7f26380
+Node: Q1.0.14\7f26629
+Node: Q1.1.1\7f27139
+Node: Q1.1.2\7f28181
+Node: Q1.1.3\7f28574
+Node: Q1.2.1\7f29525
+Node: Q1.2.2\7f30581
+Node: Q1.2.3\7f31015
+Node: Q1.3.1\7f32099
+Node: Q1.3.2\7f32750
+Node: Q1.3.3\7f33214
+Node: Q1.3.4\7f33455
+Node: Q1.3.5\7f34228
+Node: Q1.3.6\7f36633
+Node: Q1.3.7\7f38164
+Node: Q1.4.1\7f39099
+Node: Q1.4.2\7f39961
+Node: Q1.4.3\7f40302
+Node: Q1.4.4\7f40721
+Node: Q1.4.5\7f42261
+Node: Q1.4.6\7f42565
+Node: Installation\7f43558
+Node: Q2.0.1\7f46133
+Node: Q2.0.2\7f46933
+Node: Q2.0.3\7f48701
+Node: Q2.0.4\7f49999
+Node: Q2.0.5\7f50591
+Node: Q2.0.6\7f50939
+Node: Q2.0.7\7f51320
+Node: Q2.0.8\7f51701
+Node: Q2.0.9\7f53278
+Node: Q2.0.10\7f54716
+Node: Q2.0.11\7f55560
+Node: Q2.0.12\7f56501
+Node: Q2.0.13\7f58024
+Node: Q2.0.14\7f58513
+Node: Q2.1.1\7f59571
+Node: Q2.1.2\7f62313
+Node: Q2.1.3\7f63490
+Node: Q2.1.4\7f64783
+Node: Q2.1.5\7f65582
+Node: Q2.1.6\7f65944
+Node: Q2.1.7\7f66421
+Node: Q2.1.8\7f66774
+Node: Q2.1.9\7f68308
+Node: Q2.1.10\7f68730
+Node: Q2.1.11\7f69487
+Node: Q2.1.12\7f70352
+Node: Q2.1.13\7f71307
+Node: Q2.1.14\7f72338
+Node: Q2.1.15\7f73449
+Node: Q2.1.16\7f80481
+Node: Q2.1.17\7f81175
+Node: Q2.1.18\7f81772
+Node: Q2.1.19\7f81899
+Node: Q2.1.20\7f82429
+Node: Q2.1.21\7f82811
+Node: Q2.1.22\7f83004
+Node: Q2.1.23\7f84301
+Node: Q2.1.24\7f84969
+Node: Q2.1.25\7f85441
+Node: Customization\7f86076
+Node: Q3.0.1\7f90914
+Node: Q3.0.2\7f91620
+Node: Q3.0.3\7f92184
+Node: Q3.0.4\7f92601
+Node: Q3.0.5\7f93434
+Node: Q3.0.6\7f94215
+Node: Q3.0.7\7f94795
+Node: Q3.0.8\7f95459
+Node: Q3.0.9\7f96417
+Node: Q3.1.1\7f96978
+Node: Q3.1.2\7f97715
+Node: Q3.1.3\7f98146
+Node: Q3.1.4\7f98335
+Node: Q3.1.5\7f98524
+Node: Q3.1.6\7f98908
+Node: Q3.1.7\7f99617
+Node: Q3.1.8\7f101841
+Node: Q3.2.1\7f102383
+Node: Q3.2.2\7f104036
+Node: Q3.2.3\7f104835
+Node: Q3.2.4\7f105437
+Node: Q3.2.5\7f106471
+Node: Q3.2.6\7f106938
+Node: Q3.3.1\7f107863
+Node: Q3.3.2\7f108293
+Node: Q3.3.3\7f108924
+Node: Q3.3.4\7f109305
+Node: Q3.3.5\7f110406
+Node: Q3.4.1\7f111900
+Node: Q3.4.2\7f112543
+Node: Q3.5.1\7f113055
+Node: Q3.5.2\7f114504
+Node: Q3.5.3\7f114922
+Node: Q3.5.4\7f115760
+Node: Q3.5.5\7f116592
+Node: Q3.5.6\7f117732
+Node: Q3.5.7\7f118722
+Node: Q3.5.8\7f120162
+Node: Q3.5.9\7f120909
+Node: Q3.5.10\7f121689
+Node: Q3.5.11\7f122325
+Node: Q3.6.1\7f122878
+Node: Q3.6.2\7f123623
+Node: Q3.6.3\7f124051
+Node: Q3.7.1\7f124551
+Node: Q3.7.2\7f125439
+Node: Q3.7.3\7f126098
+Node: Q3.7.4\7f126520
+Node: Q3.7.5\7f126863
+Node: Q3.7.6\7f127331
+Node: Q3.7.7\7f128046
+Node: Q3.7.8\7f129066
+Node: Q3.8.1\7f129485
+Node: Q3.8.2\7f129945
+Node: Q3.8.3\7f130408
+Node: Q3.8.4\7f131014
+Node: Q3.8.5\7f131733
+Node: Q3.9.1\7f132518
+Node: Q3.9.2\7f133458
+Node: Q3.9.3\7f134056
+Node: Q3.9.4\7f134718
+Node: Q3.10.1\7f135597
+Node: Q3.10.2\7f136415
+Node: Q3.10.3\7f137420
+Node: Q3.10.4\7f138148
+Node: Q3.10.5\7f138531
+Node: Subsystems\7f139583
+Node: Q4.0.1\7f142070
+Node: Q4.0.2\7f142595
+Node: Q4.0.3\7f143153
+Node: Q4.0.4\7f143474
+Node: Q4.0.5\7f143716
+Node: Q4.0.6\7f143947
+Node: Q4.0.7\7f144535
+Node: Q4.0.8\7f144860
+Node: Q4.0.9\7f146087
+Node: Q4.0.10\7f148125
+Node: Q4.0.11\7f148614
+Node: Q4.0.12\7f149492
+Node: Q4.1.1\7f150465
+Node: Q4.1.2\7f150868
+Node: Q4.1.3\7f151195
+Node: Q4.2.1\7f151504
+Node: Q4.2.2\7f152134
+Node: Q4.2.3\7f152374
+Node: Q4.2.4\7f152918
+Node: Q4.3.1\7f153571
+Node: Q4.3.2\7f154155
+Node: Q4.3.3\7f155636
+Node: Q4.3.4\7f155908
+Node: Q4.3.5\7f156585
+Node: Q4.4.1\7f157213
+Node: Q4.4.2\7f158699
+Node: Q4.5.1\7f159903
+Node: Q4.6.1\7f160672
+Node: Q4.7.1\7f165932
+Node: Q4.7.2\7f166887
+Node: Q4.7.3\7f167184
+Node: Q4.7.4\7f167370
+Node: Q4.7.5\7f168254
+Node: Q4.7.6\7f169895
+Node: Miscellaneous\7f170184
+Node: Q5.0.1\7f173597
+Node: Q5.0.2\7f174336
+Node: Q5.0.3\7f175190
+Node: Q5.0.4\7f175892
+Node: Q5.0.5\7f176831
+Node: Q5.0.6\7f178811
+Node: Q5.0.7\7f179468
+Node: Q5.0.8\7f180073
+Node: Q5.0.9\7f180592
+Node: Q5.0.10\7f181106
+Node: Q5.0.11\7f181354
+Node: Q5.0.12\7f181892
+Node: Q5.0.13\7f182809
+Node: Q5.0.14\7f183493
+Node: Q5.0.15\7f184258
+Node: Q5.0.16\7f184555
+Node: Q5.0.17\7f185067
+Node: Q5.0.18\7f185332
+Node: Q5.0.19\7f185526
+Node: Q5.0.20\7f185950
+Node: Q5.1.1\7f186865
+Node: Q5.1.2\7f188934
+Node: Q5.1.3\7f189670
+Node: Q5.1.4\7f193064
+Node: Q5.1.5\7f193599
+Node: Q5.1.6\7f195723
+Node: Q5.1.7\7f197209
+Node: Q5.1.8\7f198802
+Node: Q5.1.9\7f199354
+Node: Q5.1.10\7f200239
+Node: Q5.1.11\7f201370
+Node: Q5.2.1\7f201919
+Node: Q5.2.2\7f202489
+Node: Q5.2.3\7f202906
+Node: Q5.2.4\7f203141
+Node: Q5.3.1\7f204051
+Node: Q5.3.2\7f205272
+Node: Q5.3.3\7f206048
+Node: Q5.3.4\7f206532
+Node: Q5.3.5\7f207199
+Node: Q5.3.6\7f208068
+Node: Q5.3.7\7f208313
+Node: Q5.3.8\7f210503
+Node: Q5.3.9\7f210750
+Node: Q5.3.10\7f211703
+Node: Q5.3.11\7f213787
+Node: Q5.3.12\7f215378
+Node: MS Windows\7f216652
+Node: Q6.0.1\7f218129
+Node: Q6.0.2\7f218876
+Node: Q6.0.3\7f219341
+Node: Q6.0.4\7f219621
+Node: Q6.1.1\7f221900
+Node: Q6.1.2\7f222771
+Node: Q6.1.3\7f223226
+Node: Q6.1.4\7f223508
+Node: Q6.1.5\7f223886
+Node: Q6.1.6\7f224754
+Node: Q6.2.1\7f227060
+Node: Q6.2.2\7f227961
+Node: Q6.2.3\7f228373
+Node: Q6.3.1\7f228662
+Node: Q6.3.2\7f229756
+Node: Q6.3.3\7f232937
+Node: Q6.4.1\7f233206
+Node: Current Events\7f234541
+Node: Q7.0.1\7f235195
+Node: Q7.0.2\7f235834
+Node: Q7.0.3\7f236907
+Node: Q7.0.4\7f237135
 \1f
 End Tag Table
index 6401a38..791fbce 100644 (file)
@@ -97,6 +97,8 @@ Installation and Trouble Shooting
 * 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!
@@ -123,6 +125,7 @@ Trouble Shooting:
 * 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
 
@@ -1115,6 +1118,8 @@ Installation:
 * 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!
@@ -1141,6 +1146,7 @@ Trouble Shooting:
 * 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)
 
 \1f
 File: xemacs-faq.info,  Node: Q2.0.1,  Next: Q2.0.2,  Prev: Installation,  Up: Installation
@@ -1236,21 +1242,3 @@ else, so if you see references to NAS or Network Audio System, it's the
 same thing.  It also might be found at
 `ftp://ftp.x.org/contrib/audio/nas/'.
 
-\1f
-File: xemacs-faq.info,  Node: Q2.0.4,  Next: Q2.0.5,  Prev: Q2.0.3,  Up: Installation
-
-Q2.0.4: Problems with Linux and ncurses.
-----------------------------------------
-
-   On Linux 1.3.98 with termcap 2.0.8 and the ncurses that came with
-libc 5.2.18, XEmacs 20.0b20 is unable to open a tty device:
-
-     src/xemacs -nw -q
-     Initialization error:
-     Terminal type `xterm' undefined (or can't access database?)
-
-   Ben Wing <ben@xemacs.org> writes:
-
-     Your ncurses configuration is messed up.  Your /usr/lib/terminfo
-     is a bad pointer, perhaps to a CD-ROM that is not inserted.
-
index 6f1f39f..66252fd 100644 (file)
@@ -7,6 +7,24 @@ START-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 \1f
+File: xemacs-faq.info,  Node: Q2.0.4,  Next: Q2.0.5,  Prev: Q2.0.3,  Up: Installation
+
+Q2.0.4: Problems with Linux and ncurses.
+----------------------------------------
+
+   On Linux 1.3.98 with termcap 2.0.8 and the ncurses that came with
+libc 5.2.18, XEmacs 20.0b20 is unable to open a tty device:
+
+     src/xemacs -nw -q
+     Initialization error:
+     Terminal type `xterm' undefined (or can't access database?)
+
+   Ben Wing <ben@xemacs.org> writes:
+
+     Your ncurses configuration is messed up.  Your /usr/lib/terminfo
+     is a bad pointer, perhaps to a CD-ROM that is not inserted.
+
+\1f
 File: xemacs-faq.info,  Node: Q2.0.5,  Next: Q2.0.6,  Prev: Q2.0.4,  Up: Installation
 
 Q2.0.5: Do I need X11 to run XEmacs?
@@ -169,7 +187,7 @@ that stock SunOS systems do not ship with DNS resolver code in libc.
      then proceed to link against the DNS resolver library code.
 
 \1f
-File: xemacs-faq.info,  Node: Q2.0.12,  Next: Q2.1.1,  Prev: Q2.0.11,  Up: Installation
+File: xemacs-faq.info,  Node: Q2.0.12,  Next: Q2.0.13,  Prev: Q2.0.11,  Up: Installation
 
 Q2.0.12: Why can't I strip XEmacs?
 ----------------------------------
@@ -212,7 +230,49 @@ Q2.0.12: Why can't I strip XEmacs?
           /usr/local/lib/xemacs-19.16/i586-unknown-linuxaout
 
 \1f
-File: xemacs-faq.info,  Node: Q2.1.1,  Next: Q2.1.2,  Prev: Q2.0.12,  Up: Installation
+File: xemacs-faq.info,  Node: Q2.0.13,  Next: Q2.0.14,  Prev: Q2.0.12,  Up: Installation
+
+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_.
+
+\1f
+File: xemacs-faq.info,  Node: Q2.0.14,  Next: Q2.1.1,  Prev: Q2.0.13,  Up: Installation
+
+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
+
+   `xemacs-sumo.tar.gz'
+
+   For an XEmacs compiled with Mule you also need
+
+   `xemacs-mule-sumo.tar.gz'
+
+   from the `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
+
+   `cd $prefix/lib/xemacs ; gunzip -c <tarballname> | 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.
+
+\1f
+File: xemacs-faq.info,  Node: Q2.1.1,  Next: Q2.1.2,  Prev: Q2.0.14,  Up: Installation
 
 2.1: Trouble Shooting
 =====================
@@ -874,7 +934,7 @@ and 20.x.  I am using Linux.
           #define MAIL_USE_FLOCK
 
 \1f
-File: xemacs-faq.info,  Node: Q2.1.24,  Prev: Q2.1.23,  Up: Installation
+File: xemacs-faq.info,  Node: Q2.1.24,  Next: Q2.1.25,  Prev: Q2.1.23,  Up: Installation
 
 Q2.1.24:  XEmacs won't start without network. (NEW)
 ---------------------------------------------------
@@ -888,6 +948,19 @@ not on the network, you may be missing a "localhost" entry in your
    Add that line, and XEmacs will be happy.
 
 \1f
+File: xemacs-faq.info,  Node: Q2.1.25,  Prev: Q2.1.24,  Up: Installation
+
+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
+`etc/PACKAGES'), or install the `Sumo Tarball' (see *note Q2.0.14::).
+
+\1f
 File: xemacs-faq.info,  Node: Customization,  Next: Subsystems,  Prev: Installation,  Up: Top
 
 3 Customization and Options
@@ -1242,65 +1315,3 @@ directory/name of the current buffer file and not just the name.
    That is, use the file name, or the dired-directory, or the buffer
 name.
 
-\1f
-File: xemacs-faq.info,  Node: Q3.1.7,  Next: Q3.1.8,  Prev: Q3.1.6,  Up: Customization
-
-Q3.1.7: `xemacs -name junk' doesn't work?
------------------------------------------
-
-   When I run `xterm -name junk', I get an xterm whose class name
-according to xprop, is `junk'.  This is the way it's supposed to work,
-I think.  When I run `xemacs -name junk' the class name is not set to
-`junk'.  It's still `emacs'.  What does `xemacs -name' really do?  The
-reason I ask is that my window manager (fvwm) will make a window sticky
-and I use XEmacs to read my mail.  I want that XEmacs window to be
-sticky, without having to use the window manager's function to set the
-window sticky.  What gives?
-
-   `xemacs -name' sets the application name for the program (that is,
-the thing which normally comes from `argv[0]').  Using `-name' is the
-same as making a copy of the executable with that new name.  The
-`WM_CLASS' property on each frame is set to the frame-name, and the
-application-class.  So, if you did `xemacs -name FOO' and then created
-a frame named BAR, you'd get an X window with WM_CLASS = `( "BAR",
-"Emacs")'.  However, the resource hierarchy for this widget would be:
-
-     Name:    FOO   .shell             .container   .BAR
-     Class:   Emacs .TopLevelEmacsShell.EmacsManager.EmacsFrame
-
-   instead of the default
-
-     Name:    xemacs.shell             .container   .emacs
-     Class:   Emacs .TopLevelEmacsShell.EmacsManager.EmacsFrame
-
-   It is arguable that the first element of WM_CLASS should be set to
-the application-name instead of the frame-name, but I think that's less
-flexible, since it does not give you the ability to have multiple frames
-with different WM_CLASS properties.  Another possibility would be for
-the default frame name to come from the application name instead of
-simply being `emacs'.  However, at this point, making that change would
-be troublesome: it would mean that many users would have to make yet
-another change to their resource files (since the default frame name
-would suddenly change from `emacs' to `xemacs', or whatever the
-executable happened to be named), so we'd rather avoid it.
-
-   To make a frame with a particular name use:
-
-     (make-frame '((name . "the-name")))
-
-\1f
-File: xemacs-faq.info,  Node: Q3.1.8,  Next: Q3.2.1,  Prev: Q3.1.7,  Up: Customization
-
-Q3.1.8: `-iconic' doesn't work.
--------------------------------
-
-   When I start up XEmacs using `-iconic' it doesn't work right.  Using
-`-unmapped' on the command line, and setting the `initiallyUnmapped' X
-Resource don't seem to help much either...
-
-   Ben Wing <ben@xemacs.org> writes:
-
-     Ugh, this stuff is such an incredible mess that I've about given up
-     getting it to work.  The principal problem is numerous
-     window-manager bugs...
-
index b753711..7123481 100644 (file)
@@ -32,390 +32,391 @@ translation approved by the author instead of in the original English.
 \1f
 Indirect:
 xemacs.info-1: 1350
-xemacs.info-2: 48878
-xemacs.info-3: 98489
-xemacs.info-4: 147801
-xemacs.info-5: 197397
-xemacs.info-6: 246837
-xemacs.info-7: 296794
-xemacs.info-8: 345041
-xemacs.info-9: 392811
-xemacs.info-10: 442411
-xemacs.info-11: 490852
-xemacs.info-12: 538047
-xemacs.info-13: 586228
-xemacs.info-14: 636005
-xemacs.info-15: 685652
-xemacs.info-16: 734792
-xemacs.info-17: 783205
-xemacs.info-18: 830803
-xemacs.info-19: 862297
-xemacs.info-20: 893951
-xemacs.info-21: 943355
-xemacs.info-22: 985941
+xemacs.info-2: 48895
+xemacs.info-3: 98506
+xemacs.info-4: 147816
+xemacs.info-5: 197412
+xemacs.info-6: 246852
+xemacs.info-7: 296809
+xemacs.info-8: 345202
+xemacs.info-9: 392972
+xemacs.info-10: 442574
+xemacs.info-11: 491015
+xemacs.info-12: 538210
+xemacs.info-13: 586468
+xemacs.info-14: 634794
+xemacs.info-15: 684331
+xemacs.info-16: 731876
+xemacs.info-17: 780201
+xemacs.info-18: 826586
+xemacs.info-19: 867946
+xemacs.info-20: 899600
+xemacs.info-21: 949004
+xemacs.info-22: 991590
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f1350
-Node: License\7f22773
-Node: Distrib\7f36055
-Node: Intro\7f37719
-Node: Frame\7f40590
-Node: Point\7f44534
-Node: Echo Area\7f46501
-Node: Mode Line\7f48878
-Node: XEmacs under X\7f53309
-Node: Keystrokes\7f56486
-Node: Intro to Keystrokes\7f57330
-Node: Representing Keystrokes\7f59433
-Node: Key Sequences\7f60790
-Node: String Key Sequences\7f64131
-Node: Meta Key\7f64514
-Node: Super and Hyper Keys\7f65987
-Node: Character Representation\7f72232
-Node: Commands\7f73252
-Node: Pull-down Menus\7f76101
-Node: File Menu\7f79450
-Node: Edit Menu\7f83272
-Node: Apps Menu\7f85655
-Node: Options Menu\7f86145
-Node: Buffers Menu\7f90163
-Node: Tools Menu\7f90470
-Node: Help Menu\7f90961
-Node: Menu Customization\7f91362
-Node: Entering Emacs\7f95592
-Node: Exiting\7f98489
-Node: Command Switches\7f102962
-Node: Startup Paths\7f112326
-Node: Basic\7f119653
-Node: Inserting Text\7f121062
-Node: Moving Point\7f124058
-Node: Erasing\7f127664
-Node: Basic Files\7f128969
-Node: Basic Help\7f130891
-Node: Blank Lines\7f131486
-Node: Continuation Lines\7f133062
-Node: Position Info\7f134729
-Node: Arguments\7f138145
-Node: Undo\7f142244
-Node: Minibuffer\7f145191
-Node: Minibuffer File\7f147801
-Node: Minibuffer Edit\7f149606
-Node: Completion\7f152547
-Node: Completion Example\7f154478
-Node: Completion Commands\7f155573
-Node: Strict Completion\7f158549
-Node: Completion Options\7f160330
-Node: Minibuffer History\7f161838
-Node: Repetition\7f165022
-Node: M-x\7f167867
-Node: Help\7f172961
-Node: Help Summary\7f174371
-Node: Key Help\7f177157
-Node: Name Help\7f178116
-Node: Apropos\7f180761
-Node: Library Keywords\7f183880
-Node: Help Mode\7f186201
-Node: Misc Help\7f186698
-Node: Mark\7f189846
-Node: Setting Mark\7f191700
-Node: Using Region\7f194822
-Node: Marking Objects\7f195559
-Node: Mark Ring\7f197397
-Node: Mouse Selection\7f199113
-Node: Additional Mouse Operations\7f201120
-Node: Killing\7f205324
-Node: Yanking\7f210960
-Node: Kill Ring\7f211763
-Node: Appending Kills\7f213365
-Node: Earlier Kills\7f215402
-Node: Using X Selections\7f218015
-Node: X Clipboard Selection\7f219265
-Node: X Selection Commands\7f221442
-Node: X Cut Buffers\7f222528
-Node: Active Regions\7f223887
-Node: Accumulating Text\7f228467
-Node: Rectangles\7f231540
-Node: Registers\7f235059
-Node: RegPos\7f236513
-Node: RegText\7f237669
-Node: RegRect\7f238775
-Node: RegConfig\7f239654
-Node: RegNumbers\7f240594
-Node: RegFiles\7f241312
-Node: Bookmarks\7f241970
-Node: Display\7f245342
-Node: Scrolling\7f246837
-Node: Horizontal Scrolling\7f250980
-Node: Selective Display\7f252175
-Node: Display Vars\7f253394
-Node: Search\7f256072
-Node: Incremental Search\7f257265
-Node: Non-Incremental Search\7f266193
-Node: Word Search\7f267635
-Node: Regexp Search\7f269253
-Node: Regexps\7f271623
-Node: Search Case\7f285620
-Node: Replace\7f286401
-Node: Unconditional Replace\7f287349
-Node: Regexp Replace\7f288484
-Node: Replacement and Case\7f289419
-Node: Query Replace\7f290399
-Node: Other Repeating Search\7f293626
-Node: Fixit\7f294881
-Node: Kill Errors\7f295461
-Node: Transpose\7f296794
-Node: Fixing Case\7f299198
-Node: Spelling\7f299844
-Node: Files\7f301305
-Node: File Names\7f302615
-Node: Visiting\7f306952
-Node: Saving\7f313638
-Node: Backup\7f318561
-Node: Backup Names\7f319957
-Node: Backup Deletion\7f321440
-Node: Backup Copying\7f322590
-Node: Interlocking\7f324296
-Node: Reverting\7f328424
-Node: Auto Save\7f330336
-Node: Auto Save Files\7f331303
-Node: Auto Save Control\7f333144
-Node: Recover\7f334982
-Node: Version Control\7f336137
-Node: Concepts of VC\7f338175
-Node: Editing with VC\7f339785
-Node: Variables for Check-in/out\7f345041
-Node: Log Entries\7f346940
-Node: Change Logs and VC\7f348120
-Node: Old Versions\7f351387
-Node: VC Status\7f353390
-Node: Renaming and VC\7f355104
-Node: Snapshots\7f355783
-Node: Making Snapshots\7f356284
-Node: Snapshot Caveats\7f357577
-Node: Version Headers\7f359386
-Node: ListDir\7f362085
-Node: Comparing Files\7f364134
-Node: Dired\7f365667
-Node: Dired Enter\7f366338
-Node: Dired Edit\7f367163
-Node: Dired Deletion\7f368910
-Node: Dired Immed\7f372133
-Node: Misc File Ops\7f373409
-Node: Buffers\7f375897
-Node: Select Buffer\7f378055
-Node: List Buffers\7f379850
-Node: Misc Buffer\7f381608
-Node: Kill Buffer\7f383251
-Node: Several Buffers\7f384381
-Node: Windows\7f388248
-Node: Basic Window\7f388959
-Node: Split Window\7f390678
-Node: Other Window\7f392811
-Node: Pop Up Window\7f395240
-Node: Change Window\7f396745
-Node: Mule\7f399653
-Node: Mule Intro\7f400916
-Node: Language Environments\7f401932
-Node: Input Methods\7f404039
-Node: Select Input Method\7f407759
-Node: Coding Systems\7f409914
-Node: Recognize Coding\7f414100
-Node: Specify Coding\7f417426
-Node: Major Modes\7f422357
-Node: Choosing Modes\7f424576
-Node: Indentation\7f426966
-Node: Indentation Commands\7f429061
-Node: Tab Stops\7f431790
-Node: Just Spaces\7f433639
-Node: Text\7f434454
-Node: Text Mode\7f436437
-Node: Nroff Mode\7f438516
-Node: TeX Mode\7f440159
-Node: TeX Editing\7f442411
-Node: TeX Print\7f445845
-Node: Outline Mode\7f449064
-Node: Outline Format\7f450545
-Node: Outline Motion\7f453345
-Node: Outline Visibility\7f454898
-Node: Words\7f457819
-Node: Sentences\7f460766
-Node: Paragraphs\7f462962
-Node: Pages\7f465250
-Node: Filling\7f467850
-Node: Auto Fill\7f468421
-Node: Fill Commands\7f470568
-Node: Fill Prefix\7f472733
-Node: Case\7f474921
-Node: Programs\7f476949
-Node: Program Modes\7f479499
-Node: Lists\7f481731
-Node: Defuns\7f487571
-Node: Grinding\7f490224
-Node: Basic Indent\7f490852
-Node: Multi-line Indent\7f492873
-Node: Lisp Indent\7f494489
-Node: C Indent\7f497939
-Node: Matching\7f503179
-Node: Comments\7f504701
-Node: Balanced Editing\7f511153
-Node: Lisp Completion\7f512167
-Node: Documentation\7f513182
-Node: Change Log\7f514421
-Node: Tags\7f516999
-Node: Tag Syntax\7f518648
-Node: Create Tags Table\7f522592
-Node: Etags Regexps\7f526652
-Node: Select Tags Table\7f531310
-Node: Find Tag\7f535083
-Node: Tags Search\7f538047
-Node: List Tags\7f541503
-Node: Fortran\7f542532
-Node: Fortran Motion\7f543608
-Node: Fortran Indent\7f544428
-Node: ForIndent Commands\7f545113
-Node: ForIndent Num\7f546258
-Node: ForIndent Conv\7f547532
-Node: ForIndent Vars\7f548308
-Node: Fortran Comments\7f549476
-Node: Fortran Columns\7f553074
-Node: Fortran Abbrev\7f554497
-Node: Asm Mode\7f555406
-Node: Running\7f555958
-Node: Compilation\7f556928
-Node: Lisp Modes\7f561778
-Node: Lisp Libraries\7f563051
-Node: Loading\7f563605
-Node: Compiling Libraries\7f568065
-Node: Mocklisp\7f570956
-Node: Lisp Eval\7f571633
-Node: Lisp Debug\7f575273
-Node: Lisp Interaction\7f580700
-Node: External Lisp\7f582055
-Node: Packages\7f584129
-Node: Package Terminology\7f584870
-Node: Using Packages\7f586228
-Node: Building Packages\7f595106
-Node: Abbrevs\7f597628
-Node: Defining Abbrevs\7f599828
-Node: Expanding Abbrevs\7f602275
-Node: Editing Abbrevs\7f604977
-Node: Saving Abbrevs\7f606850
-Node: Dynamic Abbrevs\7f608805
-Node: Picture\7f610107
-Node: Basic Picture\7f612540
-Node: Insert in Picture\7f614825
-Node: Tabs in Picture\7f616247
-Node: Rectangles in Picture\7f617768
-Node: Sending Mail\7f619676
-Node: Mail Format\7f621387
-Node: Mail Headers\7f622737
-Node: Mail Mode\7f629145
-Node: Reading Mail\7f632758
-Node: Calendar/Diary\7f634333
-Node: Calendar Motion\7f636005
-Node: Calendar Unit Motion\7f636888
-Node: Move to Beginning or End\7f639211
-Node: Specified Dates\7f640344
-Node: Scroll Calendar\7f641232
-Node: Mark and Region\7f643023
-Node: General Calendar\7f644929
-Node: LaTeX Calendar\7f646537
-Node: Holidays\7f648551
-Node: Sunrise/Sunset\7f651653
-Node: Lunar Phases\7f654692
-Node: Other Calendars\7f656077
-Node: Calendar Systems\7f657564
-Node: To Other Calendar\7f660675
-Node: From Other Calendar\7f662666
-Node: Mayan Calendar\7f664971
-Node: Diary\7f668166
-Node: Diary Commands\7f669915
-Node: Format of Diary File\7f673238
-Node: Date Formats\7f676108
-Node: Adding to Diary\7f678682
-Node: Special Diary Entries\7f680313
-Node: Calendar Customization\7f685652
-Node: Calendar Customizing\7f686514
-Node: Holiday Customizing\7f689749
-Node: Date Display Format\7f696236
-Node: Time Display Format\7f697194
-Node: Daylight Savings\7f698332
-Node: Diary Customizing\7f701520
-Node: Hebrew/Islamic Entries\7f706141
-Node: Fancy Diary Display\7f709481
-Node: Included Diary Files\7f711397
-Node: Sexp Diary Entries\7f712378
-Node: Appt Customizing\7f717468
-Node: Sorting\7f718514
-Node: Shell\7f723320
-Node: Single Shell\7f724613
-Node: Interactive Shell\7f726227
-Node: Shell Mode\7f729992
-Node: Terminal emulator\7f732483
-Node: Term Mode\7f734792
-Node: Paging in Term\7f735706
-Node: Narrowing\7f736504
-Node: Hardcopy\7f738454
-Node: Recursive Edit\7f739426
-Node: Dissociated Press\7f742413
-Node: CONX\7f744976
-Node: Amusements\7f746000
-Node: Emulation\7f746480
-Node: Customization\7f748340
-Node: Minor Modes\7f750156
-Node: Variables\7f751788
-Node: Examining\7f753744
-Node: Easy Customization\7f755205
-Node: Customization Groups\7f756219
-Node: Changing an Option\7f759148
-Node: Face Customization\7f765418
-Node: Specific Customization\7f767182
-Node: Edit Options\7f769789
-Node: Locals\7f771373
-Node: File Variables\7f774552
-Node: Keyboard Macros\7f779102
-Node: Basic Kbd Macro\7f781273
-Node: Save Kbd Macro\7f783205
-Node: Kbd Macro Query\7f784863
-Node: Key Bindings\7f786805
-Node: Keymaps\7f787679
-Node: Rebinding\7f791529
-Node: Interactive Rebinding\7f792228
-Node: Programmatic Rebinding\7f794417
-Node: Key Bindings Using Strings\7f797224
-Node: Disabling\7f798851
-Node: Syntax\7f800630
-Node: Syntax Entry\7f801511
-Node: Syntax Change\7f805595
-Node: Init File\7f807764
-Node: Init Syntax\7f809228
-Node: Init Examples\7f811579
-Node: Terminal Init\7f815769
-Node: Audible Bell\7f817506
-Node: Faces\7f820937
-Node: Frame Components\7f825779
-Node: X Resources\7f826224
-Node: Geometry Resources\7f827883
-Node: Iconic Resources\7f830331
-Node: Resource List\7f830803
-Node: Face Resources\7f837310
-Node: Widgets\7f840987
-Node: Menubar Resources\7f841926
-Node: Quitting\7f843440
-Node: Lossage\7f846418
-Node: Stuck Recursive\7f847062
-Node: Screen Garbled\7f847768
-Node: Text Garbled\7f848902
-Node: Unasked-for Search\7f849541
-Node: Emergency Escape\7f850326
-Node: Total Frustration\7f852105
-Node: Bugs\7f852736
-Node: Glossary\7f862297
-Node: Manifesto\7f893951
-Node: Key Index\7f917428
-Node: Command Index\7f943355
-Node: Variable Index\7f985941
-Node: Concept Index\7f1002027
+Node: License\7f22790
+Node: Distrib\7f36072
+Node: Intro\7f37736
+Node: Frame\7f40607
+Node: Point\7f44551
+Node: Echo Area\7f46518
+Node: Mode Line\7f48895
+Node: XEmacs under X\7f53326
+Node: Keystrokes\7f56503
+Node: Intro to Keystrokes\7f57347
+Node: Representing Keystrokes\7f59450
+Node: Key Sequences\7f60807
+Node: String Key Sequences\7f64148
+Node: Meta Key\7f64531
+Node: Super and Hyper Keys\7f66004
+Node: Character Representation\7f72249
+Node: Commands\7f73269
+Node: Pull-down Menus\7f76118
+Node: File Menu\7f79467
+Node: Edit Menu\7f83289
+Node: Apps Menu\7f85672
+Node: Options Menu\7f86162
+Node: Buffers Menu\7f90180
+Node: Tools Menu\7f90487
+Node: Help Menu\7f90978
+Node: Menu Customization\7f91379
+Node: Entering Emacs\7f95609
+Node: Exiting\7f98506
+Node: Command Switches\7f102979
+Node: Startup Paths\7f112343
+Node: Basic\7f119673
+Node: Inserting Text\7f121077
+Node: Moving Point\7f124073
+Node: Erasing\7f127679
+Node: Basic Files\7f128984
+Node: Basic Help\7f130906
+Node: Blank Lines\7f131501
+Node: Continuation Lines\7f133077
+Node: Position Info\7f134744
+Node: Arguments\7f138160
+Node: Undo\7f142259
+Node: Minibuffer\7f145206
+Node: Minibuffer File\7f147816
+Node: Minibuffer Edit\7f149621
+Node: Completion\7f152562
+Node: Completion Example\7f154493
+Node: Completion Commands\7f155588
+Node: Strict Completion\7f158564
+Node: Completion Options\7f160345
+Node: Minibuffer History\7f161853
+Node: Repetition\7f165037
+Node: M-x\7f167882
+Node: Help\7f172976
+Node: Help Summary\7f174386
+Node: Key Help\7f177172
+Node: Name Help\7f178131
+Node: Apropos\7f180776
+Node: Library Keywords\7f183895
+Node: Help Mode\7f186216
+Node: Misc Help\7f186713
+Node: Mark\7f189861
+Node: Setting Mark\7f191715
+Node: Using Region\7f194837
+Node: Marking Objects\7f195574
+Node: Mark Ring\7f197412
+Node: Mouse Selection\7f199128
+Node: Additional Mouse Operations\7f201135
+Node: Killing\7f205339
+Node: Yanking\7f210975
+Node: Kill Ring\7f211778
+Node: Appending Kills\7f213380
+Node: Earlier Kills\7f215417
+Node: Using X Selections\7f218030
+Node: X Clipboard Selection\7f219280
+Node: X Selection Commands\7f221457
+Node: X Cut Buffers\7f222543
+Node: Active Regions\7f223902
+Node: Accumulating Text\7f228482
+Node: Rectangles\7f231555
+Node: Registers\7f235074
+Node: RegPos\7f236528
+Node: RegText\7f237684
+Node: RegRect\7f238790
+Node: RegConfig\7f239669
+Node: RegNumbers\7f240609
+Node: RegFiles\7f241327
+Node: Bookmarks\7f241985
+Node: Display\7f245357
+Node: Scrolling\7f246852
+Node: Horizontal Scrolling\7f250995
+Node: Selective Display\7f252190
+Node: Display Vars\7f253409
+Node: Search\7f256087
+Node: Incremental Search\7f257280
+Node: Non-Incremental Search\7f266208
+Node: Word Search\7f267650
+Node: Regexp Search\7f269268
+Node: Regexps\7f271638
+Node: Search Case\7f285635
+Node: Replace\7f286416
+Node: Unconditional Replace\7f287364
+Node: Regexp Replace\7f288499
+Node: Replacement and Case\7f289434
+Node: Query Replace\7f290414
+Node: Other Repeating Search\7f293641
+Node: Fixit\7f294896
+Node: Kill Errors\7f295476
+Node: Transpose\7f296809
+Node: Fixing Case\7f299213
+Node: Spelling\7f299859
+Node: Files\7f301320
+Node: File Names\7f302630
+Node: Visiting\7f306967
+Node: Saving\7f313799
+Node: Backup\7f318722
+Node: Backup Names\7f320118
+Node: Backup Deletion\7f321601
+Node: Backup Copying\7f322751
+Node: Interlocking\7f324457
+Node: Reverting\7f328585
+Node: Auto Save\7f330497
+Node: Auto Save Files\7f331464
+Node: Auto Save Control\7f333305
+Node: Recover\7f335143
+Node: Version Control\7f336298
+Node: Concepts of VC\7f338336
+Node: Editing with VC\7f339946
+Node: Variables for Check-in/out\7f345202
+Node: Log Entries\7f347101
+Node: Change Logs and VC\7f348281
+Node: Old Versions\7f351548
+Node: VC Status\7f353551
+Node: Renaming and VC\7f355265
+Node: Snapshots\7f355944
+Node: Making Snapshots\7f356445
+Node: Snapshot Caveats\7f357738
+Node: Version Headers\7f359547
+Node: ListDir\7f362246
+Node: Comparing Files\7f364295
+Node: Dired\7f365828
+Node: Dired Enter\7f366499
+Node: Dired Edit\7f367324
+Node: Dired Deletion\7f369071
+Node: Dired Immed\7f372294
+Node: Misc File Ops\7f373570
+Node: Buffers\7f376058
+Node: Select Buffer\7f378216
+Node: List Buffers\7f380011
+Node: Misc Buffer\7f381769
+Node: Kill Buffer\7f383412
+Node: Several Buffers\7f384542
+Node: Windows\7f388409
+Node: Basic Window\7f389120
+Node: Split Window\7f390839
+Node: Other Window\7f392972
+Node: Pop Up Window\7f395403
+Node: Change Window\7f396908
+Node: Mule\7f399816
+Node: Mule Intro\7f401079
+Node: Language Environments\7f402095
+Node: Input Methods\7f404202
+Node: Select Input Method\7f407922
+Node: Coding Systems\7f410077
+Node: Recognize Coding\7f414263
+Node: Specify Coding\7f417589
+Node: Major Modes\7f422520
+Node: Choosing Modes\7f424739
+Node: Indentation\7f427129
+Node: Indentation Commands\7f429224
+Node: Tab Stops\7f431953
+Node: Just Spaces\7f433802
+Node: Text\7f434617
+Node: Text Mode\7f436600
+Node: Nroff Mode\7f438679
+Node: TeX Mode\7f440322
+Node: TeX Editing\7f442574
+Node: TeX Print\7f446008
+Node: Outline Mode\7f449227
+Node: Outline Format\7f450708
+Node: Outline Motion\7f453508
+Node: Outline Visibility\7f455061
+Node: Words\7f457982
+Node: Sentences\7f460929
+Node: Paragraphs\7f463125
+Node: Pages\7f465413
+Node: Filling\7f468013
+Node: Auto Fill\7f468584
+Node: Fill Commands\7f470731
+Node: Fill Prefix\7f472896
+Node: Case\7f475084
+Node: Programs\7f477112
+Node: Program Modes\7f479662
+Node: Lists\7f481894
+Node: Defuns\7f487734
+Node: Grinding\7f490387
+Node: Basic Indent\7f491015
+Node: Multi-line Indent\7f493036
+Node: Lisp Indent\7f494652
+Node: C Indent\7f498102
+Node: Matching\7f503342
+Node: Comments\7f504864
+Node: Balanced Editing\7f511316
+Node: Lisp Completion\7f512330
+Node: Documentation\7f513345
+Node: Change Log\7f514584
+Node: Tags\7f517162
+Node: Tag Syntax\7f518811
+Node: Create Tags Table\7f522755
+Node: Etags Regexps\7f526815
+Node: Select Tags Table\7f531473
+Node: Find Tag\7f535246
+Node: Tags Search\7f538210
+Node: List Tags\7f541666
+Node: Fortran\7f542695
+Node: Fortran Motion\7f543771
+Node: Fortran Indent\7f544591
+Node: ForIndent Commands\7f545276
+Node: ForIndent Num\7f546421
+Node: ForIndent Conv\7f547695
+Node: ForIndent Vars\7f548471
+Node: Fortran Comments\7f549639
+Node: Fortran Columns\7f553237
+Node: Fortran Abbrev\7f554660
+Node: Asm Mode\7f555569
+Node: Running\7f556121
+Node: Compilation\7f557090
+Node: Lisp Modes\7f561940
+Node: Lisp Libraries\7f563213
+Node: Loading\7f563767
+Node: Compiling Libraries\7f568227
+Node: Mocklisp\7f571118
+Node: Lisp Eval\7f571795
+Node: Lisp Debug\7f575435
+Node: Lisp Interaction\7f580862
+Node: External Lisp\7f582217
+Node: Packages\7f584291
+Node: Package Terminology\7f585110
+Node: Using Packages\7f586468
+Node: Building Packages\7f595346
+Node: Available Packages\7f597895
+Node: Abbrevs\7f603278
+Node: Defining Abbrevs\7f605477
+Node: Expanding Abbrevs\7f607924
+Node: Editing Abbrevs\7f610626
+Node: Saving Abbrevs\7f612499
+Node: Dynamic Abbrevs\7f614454
+Node: Picture\7f615756
+Node: Basic Picture\7f618189
+Node: Insert in Picture\7f620474
+Node: Tabs in Picture\7f621896
+Node: Rectangles in Picture\7f623417
+Node: Sending Mail\7f625325
+Node: Mail Format\7f627036
+Node: Mail Headers\7f628386
+Node: Mail Mode\7f634794
+Node: Reading Mail\7f638407
+Node: Calendar/Diary\7f639982
+Node: Calendar Motion\7f641654
+Node: Calendar Unit Motion\7f642537
+Node: Move to Beginning or End\7f644860
+Node: Specified Dates\7f645993
+Node: Scroll Calendar\7f646881
+Node: Mark and Region\7f648672
+Node: General Calendar\7f650578
+Node: LaTeX Calendar\7f652186
+Node: Holidays\7f654200
+Node: Sunrise/Sunset\7f657302
+Node: Lunar Phases\7f660341
+Node: Other Calendars\7f661726
+Node: Calendar Systems\7f663213
+Node: To Other Calendar\7f666324
+Node: From Other Calendar\7f668315
+Node: Mayan Calendar\7f670620
+Node: Diary\7f673815
+Node: Diary Commands\7f675564
+Node: Format of Diary File\7f678887
+Node: Date Formats\7f681757
+Node: Adding to Diary\7f684331
+Node: Special Diary Entries\7f685962
+Node: Calendar Customization\7f691301
+Node: Calendar Customizing\7f692163
+Node: Holiday Customizing\7f695398
+Node: Date Display Format\7f701885
+Node: Time Display Format\7f702843
+Node: Daylight Savings\7f703981
+Node: Diary Customizing\7f707169
+Node: Hebrew/Islamic Entries\7f711790
+Node: Fancy Diary Display\7f715130
+Node: Included Diary Files\7f717046
+Node: Sexp Diary Entries\7f718027
+Node: Appt Customizing\7f723117
+Node: Sorting\7f724163
+Node: Shell\7f728969
+Node: Single Shell\7f730262
+Node: Interactive Shell\7f731876
+Node: Shell Mode\7f735641
+Node: Terminal emulator\7f738132
+Node: Term Mode\7f740441
+Node: Paging in Term\7f741355
+Node: Narrowing\7f742153
+Node: Hardcopy\7f744103
+Node: Recursive Edit\7f745075
+Node: Dissociated Press\7f748062
+Node: CONX\7f750625
+Node: Amusements\7f751649
+Node: Emulation\7f752129
+Node: Customization\7f753989
+Node: Minor Modes\7f755805
+Node: Variables\7f757437
+Node: Examining\7f759393
+Node: Easy Customization\7f760854
+Node: Customization Groups\7f761868
+Node: Changing an Option\7f764797
+Node: Face Customization\7f771067
+Node: Specific Customization\7f772831
+Node: Edit Options\7f775438
+Node: Locals\7f777022
+Node: File Variables\7f780201
+Node: Keyboard Macros\7f784751
+Node: Basic Kbd Macro\7f786922
+Node: Save Kbd Macro\7f788854
+Node: Kbd Macro Query\7f790512
+Node: Key Bindings\7f792454
+Node: Keymaps\7f793328
+Node: Rebinding\7f797178
+Node: Interactive Rebinding\7f797877
+Node: Programmatic Rebinding\7f800066
+Node: Key Bindings Using Strings\7f802873
+Node: Disabling\7f804500
+Node: Syntax\7f806279
+Node: Syntax Entry\7f807160
+Node: Syntax Change\7f811244
+Node: Init File\7f813413
+Node: Init Syntax\7f814877
+Node: Init Examples\7f817228
+Node: Terminal Init\7f821418
+Node: Audible Bell\7f823155
+Node: Faces\7f826586
+Node: Frame Components\7f831428
+Node: X Resources\7f831873
+Node: Geometry Resources\7f833532
+Node: Iconic Resources\7f835980
+Node: Resource List\7f836452
+Node: Face Resources\7f842959
+Node: Widgets\7f846636
+Node: Menubar Resources\7f847575
+Node: Quitting\7f849089
+Node: Lossage\7f852067
+Node: Stuck Recursive\7f852711
+Node: Screen Garbled\7f853417
+Node: Text Garbled\7f854551
+Node: Unasked-for Search\7f855190
+Node: Emergency Escape\7f855975
+Node: Total Frustration\7f857754
+Node: Bugs\7f858385
+Node: Glossary\7f867946
+Node: Manifesto\7f899600
+Node: Key Index\7f923077
+Node: Command Index\7f949004
+Node: Variable Index\7f991590
+Node: Concept Index\7f1007676
 \1f
 End Tag Table
index 378b1c7..ad6342f 100644 (file)
@@ -70,7 +70,8 @@ Important General Concepts
 * 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.
@@ -109,7 +110,6 @@ Advanced Features
 * 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
@@ -175,6 +175,13 @@ Pull-down Menus
 * 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.
@@ -444,13 +451,6 @@ Lisp Libraries
 * 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.
index 80127b0..6c41e8f 100644 (file)
@@ -393,7 +393,7 @@ command line arguments.
      Emacs only.
 
 \1f
-File: xemacs.info,  Node: Startup Paths,  Next: Basic,  Prev: Command Switches,  Up: Top
+File: xemacs.info,  Node: Startup Paths,  Next: Packages,  Prev: Command Switches,  Up: Top
 
 How XEmacs finds Directories and Files
 ======================================
@@ -555,7 +555,7 @@ aiding in debugging any problems which come up.
      package data directories as well as `data-directory'.
 
 \1f
-File: xemacs.info,  Node: Basic,  Next: Undo,  Prev: Startup Paths,  Up: Top
+File: xemacs.info,  Node: Basic,  Next: Undo,  Prev: Packages,  Up: Top
 
 Basic Editing Commands
 **********************
index cf05b9a..da7bcf0 100644 (file)
@@ -1,3 +1,11 @@
+2000-11-14  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.37 is released.
+
+2000-09-01  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * make-po.c (BUFSIZE): Increase value to 32768.
+
 2000-10-04  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.36 is released.
index 3db1189..37bb4fa 100644 (file)
@@ -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"
index ff8ef60..404469a 100644 (file)
@@ -64,7 +64,7 @@ typedef struct
       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.
 
index a37b66e..5977c1a 100644 (file)
@@ -1,3 +1,378 @@
+2000-11-14  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.37 is released.
+
+2000-11-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * code-cmds.el: Provide the feature.
+
+2000-07-21  Jan Vroonhof  <jan@xemacs.org>
+
+       * 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 <carney@scubadoo.com>
+
+       * etags.el (buffer-tag-table-files): Use append instead of nconc.
+
+2000-11-09  Steve Youngs  <youngs@xemacs.org>
+
+       * package-get.el (package-get-download-sites): Add a pre-release
+       site for experimental packages.
+
+       * auto-autoloads.el: Regenerated.
+
+2000-08-01  Andy Piper  <andy@xemacs.org>
+
+       * 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  <martin@xemacs.org>
+
+       * bytecomp.el (byte-compile-defvar-or-defconst):
+       Only do loadhist recording if defvar form includes a value.
+
+2000-11-02  Martin Buchholz  <martin@xemacs.org>
+
+       * bytecomp.el (byte-compile-initial-macro-environment):
+       `eval-when-compile' should not compile its body.
+
+2000-11-02  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * mule/cyrillic.el: Add Windows 1251 code page encoding (by
+       Sergey Groznyh <gsm@fct.ru> 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  <martin@xemacs.org>
+
+       * 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  <stephen@xemacs.org>
+
+       * cus-face.el: Typo fixes and tiny clarifications.
+       * custom.el: ditto
+
+2000-10-27  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * 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  <yoshiki@xemacs.org>
+
+       * files.el (auto-mode-alist): Allow mixed case suffix for idlwave-mode.
+
+2000-01-05  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * hyper-apropos.el (hyper-apropos-this-symbol): Don't always
+       get symbol at point-min.
+
+2000-10-24  Didier Verna  <didier@xemacs.org>
+
+       * 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  <didier@xemacs.org>
+
+       * process.el (shell-command): when called from a program, avoid
+       'push-mark's "mark-set" message.
+
+2000-10-15  MIYASHITA Hisashi  <himi@m17n.org>
+
+       * 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  <yoshiki@xemacs.org>
+
+       * files.el (auto-mode-alist): Remove obsolete entry for html3-mode.
+
+2000-10-13  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * byte-optimize.el (byte-optimize-car): New function.
+       (byte-optimize-cdr): Ditto.
+
+2000-10-12  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * 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  <ge204@eng.cam.ac.uk>
+
+       * update-elc-2.el: Quote regexps correctly.
+
+2000-10-05  MIYASHITA Hisashi  <himi@m17n.org>
+
+       * 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  <rpluim@bigfoot.com>
+
+       * 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  <daniel@rimspace.net>
+
+       * 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  <martin@xemacs.org>
+
+       * 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  <karlheg@bittersweet.inetarena.com>
+
+       * packages.el (packages-special-base-regexp): Add `man'.
+
+2000-10-08  Adrian Aichner  <adrian@xemacs.org>
+
+       * 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 <martin@xemacs.org>
 
        * XEmacs 21.2.36 is released.
 
        * 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  <martin@xemacs.org>
 
        * 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.
        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'.
        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):
        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):
        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.
        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
        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.
 
        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.
        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
        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.
 
        * files.el (auto-mode-alist): Add .spec for RPM.
 
 2000-07-31  Andy Piper  <andy@xemacs.org>
-       
+
        * gutter-items.el (update-tab-in-gutter): deprecate :properties.
 
 2000-07-31  Yoshiki Hayashi  <yoshiki@xemacs.org>
 2000-07-10  Andy Piper  <andy@xemacs.org>
 
        * dialog-items.el: sync with Ben's patch.
-       
+
        * gutter-items.el (buffers-tab-switch-to-buffer): remove now-bogus
        comment.
        (progress-text-glyph): deleted.
         * 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:
         * 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.
         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):
 
 2000-07-16  Martin Buchholz  <martin@xemacs.org>
 
-       * 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.
 
 
        * 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  <aichner@ecf.teradyne.com>
 
 2000-07-15  Martin Buchholz  <martin@xemacs.org>
 
-       * 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.
 
        * 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.
 
        only when necessary.
 
 2000-06-30  Charles G Waldman  <cgw@alum.mit.edu>
-       
+
        * cl-macs.el: fix cl-transform-function-property kludge
        so that it does not require a random feature.
 
 
        * package-ui.el (defgroup pui):  Correct a misspelling
        (pui-toggle-package-delete):  Change `seleted' to `selected'
-       
+
 2000-06-12  Jan Vroonhof  <vroonhof@math.ethz.ch>
 
-       * 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.
        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.
        * 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.
 
        * 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):
        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.
        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.
 
 2000-04-29  Martin Buchholz  <martin@xemacs.org>
 
-       * 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.
             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  <ben@xemacs.org>
 
        * help.el (describe-installation): correct typo introduced
        * 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):
        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.
        * 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.
 2000-04-16  Ben Wing  <ben@xemacs.org>
 
        * 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.
        (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.
 
                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.
        * 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.
        (append-progress-display): ditto.
 
 2000-03-20  Jeff Miller <jmiller@cablespeed.com>
-       
+
        * lisp/make-docfile.el: call-process-internal is now implemented
        in process.el.
 
 2000-03-21  Ben Wing  <ben@xemacs.org>
 
-       * 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  <ben@xemacs.org>
        * 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.
        * 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.
        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):
         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
         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
 
         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
        * simple.el (capitalize-string-as-title):
        * simple.el (capitalize-region-as-title):
        New.
-       
+
 
         * subr.el (add-hook):
         * subr.el (make-local-hook): New.
index 110de33..eaf3c8b 100644 (file)
@@ -67,38 +67,36 @@ This causes `save-some-buffers' to offer to save the abbrevs.")
   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 @@ is not undone."
 
 \f
 
-(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 @@ define the abbrev table NAME exactly as it is currently defined."
 
 (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 @@ Optional second argument QUIETLY non-nil means don't print anything."
   (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 @@ Don't use this function in a Lisp program; use `define-abbrev' instead."
   (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)
index 0b535d8..76be36b 100644 (file)
@@ -377,7 +377,7 @@ Returns list of symbols and documentation found."
 ;; 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 @@ Returns list of symbols and documentation found."
            (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 @@ Returns list of symbols and documentation found."
                      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 @@ Returns list of symbols and documentation found."
                              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)
index b303ad3..cec581d 100644 (file)
@@ -131,16 +131,19 @@ be used only with -batch." nil nil)
 ;;;### (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)
 
 ;;;***
 \f
@@ -153,8 +156,8 @@ Files in subdirectories of DIRECTORY are processed also." t nil)
 (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 @@ don't ask and compile the file anyway.
 
 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 @@ Run `byte-compile-file' on the files 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 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 VARIABLE has a `custom-type' property, it must be a widget and the
 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 @@ Like `defface', but FACE is evaluated as a normal argument." nil nil)
 
 (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 @@ FACE.  Nil otherwise." nil nil)
 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)
 
 ;;;***
 \f
@@ -1048,7 +1051,7 @@ A list defining the keywords for `font-lock-mode' to highlight.
 
 For example, an element of the first form highlights (if not already highlighted):
 
-  \"\\\\<foo\\\\>\"                    Discrete occurrences of \"foo\" in the value
+  \"\\\\\\=<foo\\\\\\=>\"                    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 @@ For example, an element of the first form highlights (if not already highlighted
                                  `fubar-match' finds and matches in the value
                                  of `fubar-face'.
 
-  (\"\\\\<anchor\\\\>\" (0 anchor-face) (\"\\\\<item\\\\>\" nil nil (0 item-face)))
+  (\"\\\\\\=<anchor\\\\\\=>\" (0 anchor-face) (\"\\\\\\=<item\\\\\\=>\" nil nil (0 item-face)))
    -------------- ---------------  ------------ --- --- -------------
        |            |               |            |   |          |
    MATCHER          |         ANCHOR-MATCHER     |   +------+ MATCH-HIGHLIGHT
@@ -1138,10 +1141,10 @@ size, you can use \\[font-lock-fontify-buffer].
 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 @@ Generates the `Font', `Size', and `Weight' submenus for the Options menu.
 This is run the first time that a font-menu is needed for each device.
 If you don't like the lazy invocation of this function, you can add it to
 `create-device-hook' and that will make the font menus respond more quickly
-when they are selected for the first time.  If you add fonts to your system, 
+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 @@ recovering from an error in this function; it says do not attempt
 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 @@ or if you change your font path, you can call this to re-initialize the menus."
 ;;;### (autoloads (mwheel-install) "mwheel" "lisp/mwheel.el")
 
 (autoload 'mwheel-install "mwheel" "\
-Enable mouse wheel support." nil nil)
+Enable mouse wheel support." t nil)
 
 ;;;***
 \f
@@ -1446,7 +1450,7 @@ recent to least recent -- in other words, the version names don't have to
 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 @@ server and XEmacs has the necessary sound support compiled in." t nil)
 ;;;### (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 @@ The buffer in question is current when this function is called." nil nil)
 (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)
index 49d09d0..5e62c34 100644 (file)
@@ -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 @@ This command deletes and replaces all the previously existing windows
 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 @@ The current window remains selected."
 \f
 ;; 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 @@ to generate such a string.  This variable is always buffer-local.")
                                (progn (setq current (point)) ?\.)
                                ?\ ))
                    (insert (if (buffer-modified-p buffer)
-                               ?\* 
+                               ?\*
                                ?\ ))
                    (insert (if ro
                                ?\%
@@ -604,7 +604,7 @@ to generate such a string.  This variable is always buffer-local.")
   "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 @@ The R column contains a % for buffers that are read-only."
   "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."
index b18664b..6f9f8f4 100644 (file)
@@ -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:
 
 ;;(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 ...))
                       (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)
 (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)
 
       (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)))
 \f
 ;;; enumerating those functions which need not be called if the returned
 ;;; value is not used.  That is, something like
         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
 (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
index 2fc251a..cc06e51 100644 (file)
@@ -10,7 +10,7 @@
 ;;     Richard Stallman <rms@gnu.org>
 ;; 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.
 
 ;;;                            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
 ;;;    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:
 ;;;
 ;;;  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 @@ is compiled with optimization, this causes a speedup.")
     (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 @@ on the specbind stack.  The cdr of each cell is an integer bitmask.")
 (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 @@ otherwise pop it")
 (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 @@ otherwise pop it")
              '(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 @@ otherwise pop it")
              (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 @@ Files in subdirectories of DIRECTORY are processed also."
 (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 @@ don't ask and compile the file anyway.
 
 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 FORM is a lambda or a macro, byte-compile it as a function."
                                         (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 @@ If FORM is a lambda or a macro, byte-compile it as a function."
     (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 @@ invoked interactively."
 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
index 3299793..6eddb94 100644 (file)
@@ -2434,10 +2434,10 @@ The type name can then be used in `typecase', `check-type', etc."
          (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)
index f3d138a..1738d70 100644 (file)
@@ -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 @@ object (the entry specified a coding system)."
 ;...
 
 (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 @@ CODING-SYSTEM (the actual coding system used to decode the file), and
 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 @@ and last save file modtime are set, and it is marked unmodified.
 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 @@ and `insert-file-contents-post-hook'."
                   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))
index 1b248dc..09279c8 100644 (file)
@@ -195,7 +195,7 @@ See also the function `find-operation-coding-system'.")
 
 (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.
index 30e4036..3cc7fbe 100644 (file)
@@ -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.
index 1d528c7..b6317b3 100644 (file)
@@ -682,8 +682,8 @@ If given a prefix (or a COMMENT argument), also prompt for a comment."
         (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 @@ If given a prefix (or a COMMENT argument), also prompt for a comment."
   (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 @@ If given a prefix (or a COMMENT argument), also prompt for a comment."
   (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 @@ Otherwise, look up symbol in `custom-guess-type-alist'."
       ;; 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 @@ Leave point at the location of the call, or after the last expression."
        (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 @@ Leave point at the location of the call, or after the last expression."
 (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 @@ Leave point at the location of the call, or after the last expression."
       (when started-writing
        (princ ")\n"))))
     )
-                       
+
 
 (defun custom-save-loaded-themes ()
   (let ((themes (reverse (get 'user 'theme-loads-themes)))
@@ -3381,7 +3381,7 @@ Leave point at the location of the call, or after the last expression."
       (mapc (lambda (theme)
              (princ "\n   '")
              (prin1 theme)) themes)
-      (princ " )\n"))))         
+      (princ " )\n"))))
 
 ;;;###autoload
 (defun customize-save-customized ()
index 656f710..403f806 100644 (file)
@@ -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 @@ Control whether the text should be strikethru.")
                            :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 @@ If FRAME is nil, use the default face."
 
 (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 @@ If FRAME is nil, use the default face."
 ;;;###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 @@ This means reset face to its value in to-theme."
   "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))
 
 
index 20f02ab..5cd137d 100644 (file)
@@ -396,7 +396,7 @@ LOAD should be either a library file name, or a feature name."
 
 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 @@ following keyboard arguments
   (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 @@ BODY is as with custom-theme-load-themes."
 
 
 (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)))))
 
index cdfbe55..03a9931 100644 (file)
@@ -308,7 +308,7 @@ For type `page-setup':
 
 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
index 7b7d338..a299732 100644 (file)
        ;;;;;;;;;;;;;;;;;; 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")
index e71cbe9..56fc478 100644 (file)
@@ -408,7 +408,7 @@ File name returned is relative to tag table file's directory."
 (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))))
 
 \f
index eff6c16..953025b 100644 (file)
@@ -842,12 +842,12 @@ the function to be called on it."
       ;;     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 @@ If FRAME is nil, return the default frame properties."
 
 (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 @@ have the entries from the new plist and return the new spec"
           (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 @@ in that frame; otherwise change each frame."
 (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))
-
-                       (face-background 'toolbar))))
-          (purecopy '("foregroundToolBarColor"
-                      (or
-                       (and 
-                        (featurep 'x)
-                        (x-get-resource "foregroundToolBarColor"
-                                        "ForegroundToolBarColor" 'string
-                                        nil nil 'warn))
-                       (face-foreground 'toolbar))))
+          '("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)))
+          '("foregroundToolBarColor"
+            (or
+             (and
+              (featurep 'x)
+              (x-get-resource "foregroundToolBarColor"
+                              "ForegroundToolBarColor" 'string
+                              nil nil 'warn))
+             (face-foreground 'toolbar)))
           )))
 
 (when (featurep 'tty)
index cab09cc..0c983fc 100644 (file)
@@ -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 @@ and last save file modtime are set, and it is marked unmodified.
 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.
index af78d9b..05d60f6 100644 (file)
@@ -291,11 +291,11 @@ changing the major mode does not clear it.  However, calling
 (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 @@ If there is no such live buffer, return nil."
                 (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 @@ conversion,find-file-hooks, automatic uncompression, etc.
        (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 @@ run `normal-mode' explicitly."
     ("\\.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 @@ run `normal-mode' explicitly."
     ("\\.[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 @@ with the name of the interpreter specified in the first line.
 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 @@ If it matches, mode MODE is selected.")
 ;               "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 @@ for current buffer."
               (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 @@ for current buffer."
                  (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 @@ After saving the buffer, run `after-save-hook'."
                (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 @@ After saving the buffer, run `after-save-hook'."
   "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 @@ If WILDCARD, it also runs the shell specified by `shell-file-name'."
                           (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
index a1eafa1..2b2179b 100644 (file)
@@ -88,7 +88,7 @@ reinserts the fill prefix in each resulting line."
 
 ;; #### - 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 @@ This function is used when `adaptive-fill-regexp' does not match."
   :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 @@ number equals or exceeds the local fill-column - right-margin difference."
                  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 @@ Remove indentation from each line."
   (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 @@ Remove indentation from each line."
     ;; 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 @@ Remove indentation from each line."
        (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 @@ space does not end a sentence, so don't break a line there."
 
     (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 @@ argument to it), and if it returns non-nil, we simply return its value."
          (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 @@ space does not end a sentence, so don't break a line there."
      (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 @@ space does not end a sentence, so don't break a line there."
            (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 @@ See `fill-paragraph' and `fill-region' for more information."
       (fill-region (point) (mark) arg)
     (fill-paragraph arg)))
 
-\f  
+\f
 (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 variable automatically becomes buffer-local when set in any fashion.")
 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 @@ extended to include entire paragraphs as in the interactive command."
     (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 @@ If the mark is not active, this applies to the current paragraph."
 
 ;; 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 @@ If the mark is not active, this applies to the current paragraph."
 
 ;; 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 @@ If the mark is not active, this applies to the current paragraph."
 ;; 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 @@ If the mark is not active, this applies to the current paragraph."
 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 @@ otherwise it is made canonical."
       (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 @@ otherwise it is made canonical."
          (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 @@ otherwise it is made canonical."
                             (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 @@ extra spaces between words.  It does nothing in other justification modes."
           (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 @@ extra spaces between words.  It does nothing in other justification modes."
 (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 @@ MAIL-FLAG for a mail message, i. e. don't fill header lines."
       (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 @@ MAIL-FLAG for a mail message, i. e. don't fill header lines."
                             (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 @@ MAIL-FLAG for a mail message, i. e. don't fill header lines."
                        (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)
index 11d409d..f034ecc 100644 (file)
     (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
index ee880bb..5a9452c 100644 (file)
@@ -390,7 +390,7 @@ megabyte for buffers in `rmail-mode', and size is irrelevant otherwise."
 
 For example, an element of the first form highlights (if not already highlighted):
 
-  \"\\\\<foo\\\\>\"                    Discrete occurrences of \"foo\" in the value
+  \"\\\\\\=<foo\\\\\\=>\"                    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 @@ For example, an element of the first form highlights (if not already highlighted
                                  `fubar-match' finds and matches in the value
                                  of `fubar-face'.
 
-  (\"\\\\<anchor\\\\>\" (0 anchor-face) (\"\\\\<item\\\\>\" nil nil (0 item-face)))
+  (\"\\\\\\=<anchor\\\\\\=>\" (0 anchor-face) (\"\\\\\\=<item\\\\\\=>\" nil nil (0 item-face)))
    -------------- ---------------  ------------ --- --- -------------
        |            |               |            |   |          |
    MATCHER          |         ANCHOR-MATCHER     |   +------+ MATCH-HIGHLIGHT
@@ -909,11 +909,13 @@ See the variable `font-lock-keywords' for customization."
 ;;;###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 @@ The name is assumed to begin with a capital letter.")
      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.")
 
 \f
index 14c680d..d1cb509 100644 (file)
@@ -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 @@ the last entry in the menu."
   :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 @@ the last entry in the menu."
 This is run the first time that a font-menu is needed for each device.
 If you don't like the lazy invocation of this function, you can add it to
 `create-device-hook' and that will make the font menus respond more quickly
-when they are selected for the first time.  If you add fonts to your system, 
+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 @@ or if you change your font path, you can call this to re-initialize the menus."
     (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 if you change your font path, you can call this to re-initialize the menus."
                                                 (/ (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 @@ or if you change your font path, you can call this to re-initialize the menus."
     ;; 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 if you change your font path, you can call this to re-initialize the menus."
                                          (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))))))
index 28bb05d..db52f88 100644 (file)
@@ -299,7 +299,7 @@ for use in the 'weight' field of an X font string.")
       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)
index 7542247..076dba5 100644 (file)
@@ -312,7 +312,7 @@ formats defined in `format-alist', or a list of such symbols."
                              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 @@ one of the formats defined in `format-alist', or a list of such symbols."
              )
         (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 is nil then do not do any format conversion."
   (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 @@ a list (ABSOLUTE-FILE-NAME . SIZE)."
      (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 @@ Formats are defined in `format-alist'.  Optional arg is the PROMPT to use."
 ;;; 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 @@ strings.
 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)
index 8224377..f13e517 100644 (file)
@@ -776,7 +776,7 @@ all frames that were visible, and iconify all frames that were not."
     (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 @@ prepended to the `default-frame-plist' when creating a frame for the
 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 @@ is first in the list.  VISIBLE-ONLY will only list non-iconified frames."
   :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)."
index b1c75df..d5676d3 100644 (file)
@@ -47,11 +47,16 @@ This option should be set through the options menu."
                                         '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 @@ a large number or nil will slow down tab responsiveness."
 (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 @@ by `buffers-tab-grouping-regexp'."
                 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 @@ If this is 0, then the full buffer name will be shown."
        (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 @@ This just returns the buffer's name, optionally truncated."
           (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 @@ items by redefining the function `format-buffers-menu-line'."
       (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 @@ items by redefining the function `format-buffers-menu-line'."
 (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 @@ items by redefining the function `format-buffers-menu-line'."
                 ((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 @@ items by redefining the function `format-buffers-menu-line'."
                         (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
index 44df9a0..19283da 100644 (file)
@@ -60,15 +60,15 @@ element in the gutter changes.  The value of this variable may be
 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)
index ab95b37..b07aa17 100644 (file)
@@ -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 @@ otherwise it is killed."
 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 @@ describes the minor mode."
 (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 @@ The number of messages shown is controlled by `view-lossage-message-count'."
   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 @@ part of the documentation of internal subroutines."
 
 (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)]
index 7725839..7194df8 100644 (file)
@@ -1085,12 +1085,13 @@ Deletes lines which match PATTERN."
               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_")
index adf2485..5c642cf 100644 (file)
@@ -64,9 +64,9 @@ Default number of columns for margin-changing functions to indent.")
       ;; 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 @@ Called from a program, takes three arguments, START, END and ARG."
          (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 @@ interactively or with optional argument FORCE, it will be fixed."
 
 (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 @@ If `auto-fill-mode' is active, re-fills region to fit in new margin."
 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
index b2e266e..bc8f765 100644 (file)
@@ -428,9 +428,9 @@ nil or `never', the default, auto-generated info directory
                 (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' (`\\<help-mode-map>\\[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'
+(`\\<help-mode-map>\\[Info-goto-emacs-command-node]')")
 
 ;;;###autoload
 (defvar Info-directory-list nil
@@ -447,12 +447,10 @@ from .emacs.  For instance:
 
     (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 @@ heading."
   "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 @@ Marker points nowhere if file has no tag table.")
 
 (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 @@ File: dir  Node: Top       This is the top of the INFO tree
 
 ")
 
-(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 @@ further (recursive) error recovery.  TRYFILE is ??"
     (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 @@ further (recursive) error recovery.  TRYFILE is ??"
        ;; 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 @@ further (recursive) error recovery.  TRYFILE is ??"
                    (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 @@ further (recursive) error recovery.  TRYFILE is ??"
 
 (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 @@ actually get any text from."
        (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 @@ actually get any text from."
   (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 @@ actually get any text from."
 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 @@ directory has been modified more recently."
             (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 @@ and `END-INFO-DIR-ENTRY'"
            (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 @@ and `END-INFO-DIR-ENTRY'"
 (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 @@ Description of info files are merged from the info files in the
 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 @@ the value of `Info-save-auto-generated-dir' "
                      (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 @@ the value of `Info-save-auto-generated-dir' "
                                       (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 @@ the value of `Info-save-auto-generated-dir' "
                       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 @@ the value of `Info-save-auto-generated-dir' "
                                        (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 @@ the value of `Info-save-auto-generated-dir' "
              (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 @@ the value of `Info-save-auto-generated-dir' "
 
 ;;;###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 @@ For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\""
          (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 @@ For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\""
       (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 @@ For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\""
          (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 @@ For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\""
     (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[.<suffix>]
+               (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 @@ for; usually a downcased version of NAME."
                    (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 @@ annotation for any node of any file.  (See `a' and `x' commands.)"
     (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 @@ annotation for any node of any file.  (See `a' and `x' commands.)"
              (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 @@ annotation for any node of any file.  (See `a' and `x' commands.)"
             (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 @@ annotation for any node of any file.  (See `a' and `x' commands.)"
                      (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 @@ NAME may be an abbreviation of the reference name."
 
 (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 @@ This command is designed to be used whether you are already in Info or not."
 
 (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 @@ At end of the node's text, moves to the next node."
 \f
 (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 @@ e Edit the contents of the current node."
 
 (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 @@ The locations are of the format used in Info-history, i.e.
            (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)
index 492bacd..3cb2440 100644 (file)
@@ -180,8 +180,8 @@ an overlay having an `invisible' property and that overlay has a property
 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 @@ is treated as a regexp.  See \\[isearch-forward] for more info."
 (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 @@ If there is no completion possible, say so and continue searching."
   (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 @@ Before that, if search-invisible is `open', unhide the extents with an
                 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 @@ Before that, if search-invisible is `open', unhide the extents with an
   (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 @@ Before that, if search-invisible is `open', unhide the extents with an
     ;; 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))
index dbfe12f..01a15eb 100644 (file)
          (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
index f4bdbcf..5199917 100644 (file)
@@ -120,7 +120,7 @@ many seconds.")
 ;; 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 @@ wrong-type-argument.  This is a macro."
                            (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 @@ This is a macro."
                    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 @@ This is a macro."
 \f
 ;; 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 @@ VALUE is the number of seconds until this itimer expires.
   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.
index 9f3f69d..bfd8c87 100644 (file)
@@ -70,8 +70,8 @@ but optional second arg NODIGITS non-nil treats them like other chars."
 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 @@ KEYMAP are redefined.  See also `accessible-keymaps'."
       )))
 
 
-;; From Bill Dubuque <wgd@martigny.ai.mit.edu>
-
 ;; 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 @@ KEYMAP are redefined.  See also `accessible-keymaps'."
           (setq defn (key-binding defn))) ;; a keyboard macro
       (insert (format "%s" defn)))))
 
-;; From Bill Dubuque <wgd@martigny.ai.mit.edu>
 (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 @@ Prompts with PROMPT."
           ,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 binding is probably a symbol with a function definition; see
 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 <wgd@martigny.ai.mit.edu>
 (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 @@ that local binding will continue to shadow any global binding."
   (define-key (current-global-map) key command)
   nil)
 
-;; from Bill Dubuque <wgd@martigny.ai.mit.edu>
 (defun local-set-key (key command)
   "Give KEY a local binding as COMMAND.
 COMMAND is a symbol naming an interactively-callable function.
index 4f5e9a9..1c14c13 100644 (file)
@@ -5,7 +5,7 @@
 ;; Author: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
 ;; Maintainer: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
 ;; Created: Jan 1998
-;; Version: $Revision: 1.7.2.8 $
+;; Version: $Revision: 1.7.2.9 $
 ;; Keywords: help comm
 
 ;; This file is part of XEmacs
 ;; 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 @@ Acme organization in the United States."
 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 @@ Valid properties include:
                       (checklist :inline t
                                  :greedy t
                                  (list
-                                  :tag "Search Base" 
+                                  :tag "Search Base"
                                   :inline t
                                   (const :tag "Search Base" base)
                                   string)
@@ -119,7 +119,7 @@ Valid properties include:
                                    (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 @@ Valid properties include:
 
 (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 @@ This table is built from RFC2252 Section 5 and RFC2256 Section 5")
     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 @@ This table is built from RFC2252 Section 5 and RFC2256 Section 5")
 
 
 ;; 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 @@ and the corresponding decoder is then retrieved from
       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 @@ If ATTRSONLY is non nil, the attributes will be retrieved without
 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 @@ entry according to the value of WITHDN."
     (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 @@ entry according to the value of WITHDN."
 
 (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 @@ PASSWD is the corresponding password"
 
 (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 @@ PASSWD is the corresponding password"
 
 (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 @@ PASSWD is the corresponding password."
 
 
 (provide 'ldap)
-               
+
 ;;; ldap.el ends here
index 69d5554..bbdc5d8 100644 (file)
@@ -128,8 +128,8 @@ Display MESSAGE and evaluate FORMS, returning value of the last one."
 ;;=== 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
 
     ([<path> <subdir>] <cache-record> <cache-record> ...)
index 5878e23..4226730 100644 (file)
@@ -80,17 +80,15 @@ With argument, do it that many times.  Negative arg -N means
 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 @@ With argument, do it that many times.
 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 @@ With argument, do it that many times.
 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))))
 \f
 (defun beginning-of-defun (&optional arg)
   "Move backward to the beginning of a defun.
index 52458c3..6ec4914 100644 (file)
@@ -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
 ;              ".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"))
 
 \f
 ;; This needs to be redone better. -slb
index 11f695f..31e54a6 100644 (file)
@@ -121,7 +121,7 @@ which will not be used as accelerators."
        (t "")))
 
 (defconst default-menubar
-  (purecopy-menubar
+; (purecopy-menubar ;purespace is dead
    ;; note backquote.
    `(
      ("%_File"
@@ -1453,7 +1453,7 @@ which will not be used as accelerators."
        ["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)])))
 
 \f
 (defun maybe-add-init-button ()
index de084e1..a971530 100644 (file)
@@ -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 @@ See `current-menubar' for a description of the syntax of a menubar."
        ((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 @@ MENU-LEAF is a menubar leaf node.  See the documentation of `current-menubar'.
 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 @@ SUBMENU is the new menu to add.
  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 @@ the menu hierarchy.  The documentation of `add-submenu' describes menu-paths."
 
 (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 @@ NEW-NAME is the string that the menu item will be printed as from now on."
 ;; 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 @@ NEW-NAME is the string that the menu item will be printed as from now on."
 
 (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 @@ button was clicked."
       (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")
index 34d2ddb..019519f 100644 (file)
@@ -196,7 +196,7 @@ minibuffer is reinvoked while it is the selected window."
     (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 @@ Sixth arg ABBREV-TABLE, if non-nil, becomes the value of `local-abbrev-table'
 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 @@ the special minibuffer behavior."
 
 (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")
index c6e6a09..3e10878 100644 (file)
@@ -588,14 +588,14 @@ parentheses on the modeline."
                     "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 @@ Normally nil in most modes, since there is no process to display.")
 (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 @@ Normally nil in most modes, since there is no process to display.")
 (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
index 3fdc75a..67bea91 100644 (file)
@@ -119,7 +119,7 @@ between point and mark."
   (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 @@ Returns whether a drag was begun."
   ;; #### 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 @@ Returns whether a drag was begun."
   "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 @@ Display cursor at that position for a second."
       (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
index 23a2b6d..5b97f33 100644 (file)
   "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
index aff138f..7ab691e 100644 (file)
 ;; (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)
index a766710..610dce0 100644 (file)
 
 ;;; 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 ?\e,L-\e(B ".")
 (modify-syntax-entry ?\e,Lp\e(B ".")
 ;;; 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
 
         (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
                   (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
+   ?\e,L"\e(B ?\e,L#\e(B 32 ?\e,Ls\e(B 32 32 32 32 32 32 ?\e,L)\e(B 32 ?\e,L*\e(B ?\e,L,\e(B ?\e,L+\e(B ?\e,L/\e(B ;"
+   ?\e,Lr\e(B 32 32 32 32 32 32 32 32 32 ?\e,Ly\e(B 32 ?\e,Lz\e(B ?\e,L|\e(B ?\e,L{\e(B ?\e,L\7f\e(B
+   ?\e,L \e(B ?\e,L.\e(B ?\e,L~\e(B ?\e,L(\e(B ?\e,A$\e(B 32 ?\e,A&\e(B ?\e,L}\e(B ?\e,L!\e(B ?\e,A)\e(B ?\e,L$\e(B ?\e,A+\e(B ?\e,A,\e(B ?\e,L-\e(B ?\e,A.\e(B ?\e,L'\e(B
+   ?\e,A0\e(B ?\e,A1\e(B ?\e,L&\e(B ?\e,Lv\e(B 32 ?\e,A5\e(B ?\e,A6\e(B ?\e,A7\e(B ?\e,Lq\e(B ?\e,Lp\e(B ?\e,Lt\e(B ?\e,A;\e(B ?\e,Lx\e(B ?\e,L%\e(B ?\e,Lu\e(B ?\e,Lw\e(B
+  ?\e,L0\e(B ?\e,L1\e(B ?\e,L2\e(B ?\e,L3\e(B ?\e,L4\e(B ?\e,L5\e(B ?\e,L6\e(B ?\e,L7\e(B ?\e,L8\e(B ?\e,L9\e(B ?\e,L:\e(B ?\e,L;\e(B ?\e,L<\e(B ?\e,L=\e(B ?\e,L>\e(B ?\e,L?\e(B
+  ?\e,L@\e(B ?\e,LA\e(B ?\e,LB\e(B ?\e,LC\e(B ?\e,LD\e(B ?\e,LE\e(B ?\e,LF\e(B ?\e,LG\e(B ?\e,LH\e(B ?\e,LI\e(B ?\e,LJ\e(B ?\e,LK\e(B ?\e,LL\e(B ?\e,LM\e(B ?\e,LN\e(B ?\e,LO\e(B
+  ?\e,LP\e(B ?\e,LQ\e(B ?\e,LR\e(B ?\e,LS\e(B ?\e,LT\e(B ?\e,LU\e(B ?\e,LV\e(B ?\e,LW\e(B ?\e,LX\e(B ?\e,LY\e(B ?\e,LZ\e(B ?\e,L[\e(B ?\e,L\\e(B ?\e,L]\e(B ?\e,L^\e(B ?\e,L_\e(B
+  ?\e,L`\e(B ?\e,La\e(B ?\e,Lb\e(B ?\e,Lc\e(B ?\e,Ld\e(B ?\e,Le\e(B ?\e,Lf\e(B ?\e,Lg\e(B ?\e,Lh\e(B ?\e,Li\e(B ?\e,Lj\e(B ?\e,Lk\e(B ?\e,Ll\e(B ?\e,Lm\e(B ?\e,Ln\e(B ?\e,Lo\e(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 (\e,L@caaZXY\e(B)      \e,L7T`PRabRcYbU\e(B!")
+                  (documentation . "Support for Cyrillic Windows-1251."))
+ '("Cyrillic"))
+
+;;; ALTERNATIVNYJ
 
 (eval-and-compile
 
         (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
index 9c31637..66e08ed 100644 (file)
@@ -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)
index 913fc71..254b541 100644 (file)
@@ -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 @@ Categories are given by their designators."
   (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 @@ If optional fourth argument RESET is non-nil, previous categories associated
        ;; 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 @@ The categories are given by their designators."
          (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.
index 1f24a55..72880fe 100644 (file)
@@ -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:
 
 ;; 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.
 ;; 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'.
                          (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 -|
 (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
 (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))
          (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
 
 ;; 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))
           (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)
       (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.
   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-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-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-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-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-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-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-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)))))
 
 \f
-;;; CCL dump stuff
+;;; CCL dump staffs
+
+;; To avoid byte-compiler warning.
+(defvar ccl-code)
 
 ;;;###autoload
 (defun ccl-dump (ccl-code)
 
 ;; 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))))
 (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-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-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-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-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-single (rrr RRR Rrr)
+  (let ((id (ccl-get-next-code)))
+    (insert (format "map-single r%d r%d map(%S)\n" RRR rrr id))))
 
 \f
 ;; CCL emulation staffs 
 (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 @@ The compiled code is a vector of integers."
 ;;;###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))
index 2b6ad0e..d07ff15 100644 (file)
 ;; 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.")
+(require 'code-cmds)
 
-;; Keep "C-x C-m ..." for mule specific commands.
-(define-key ctl-x-map "\C-m" mule-keymap)
+;; Preserve the old name
+(defvaralias 'mule-keymap 'coding-keymap)
 
-(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)
 (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 @@ They means `lf', `crlf', and `cr' respectively."
   (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)))
 \f
 ;;; Language support stuff.
 
@@ -1057,7 +680,7 @@ to using the function `set-language-environment'."
 
 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.
index 7ea0183..281e980 100644 (file)
@@ -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
index 2a411dd..eeecb2f 100644 (file)
@@ -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 @@ because its `find-charset-string' ignores ASCII charset."
 ;      ))))
 
 
-;;; 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 @@ when the language environment is made current."
          (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 @@ when the language environment is made current."
                              ((= dim 2) 'iso-8-2)
                              (t 'iso-8-designate))
                        ))))))))
-           
+
 ;;; mule-misc.el ends here
index 1092a05..1036597 100644 (file)
        '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"
index e25c833..a3f6540 100644 (file)
@@ -209,8 +209,8 @@ Both tables are indexed by the position code of Vietnamese characters.")
  '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 @@ Both tables are indexed by the position code of Vietnamese characters.")
  '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 @@ Both tables are indexed by the position code of Vietnamese characters.")
 
 ;; 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))
index efd3f80..bcc6d08 100644 (file)
@@ -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.
index 57725f2..03d4392 100644 (file)
@@ -100,6 +100,7 @@ This can be slightly disconcerting, but some people may prefer it."
 ;;;###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
index 635f368..8e8571f 100644 (file)
@@ -57,7 +57,7 @@ This makes referencing or setting OLDVAR equivalent to referencing or
 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 @@ Multibyte characters are concerned."
   "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))
index 333d303..2f971ea 100644 (file)
@@ -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 @@ The optional `pkg-dir' can be used to override the default package hierarchy
                  ;; 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 @@ or return a location appropriate for the package otherwise."
          (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 @@ is the top-level directory under which the package was installed."
                      ;; 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 @@ PACKAGE is a symbol, not a string."
                  ;; 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 @@ PACKAGE is a symbol, not a string."
                           (lambda (dir)
                             (condition-case ()
                                 (delete-directory dir)))
-                          dirs))                       
+                          dirs))
                    (setq default-directory orig-default-directory)
                    )))
            )
@@ -499,7 +499,7 @@ PACKAGE is a symbol, not a string."
              (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)))
 
index b837861..88be9d3 100644 (file)
@@ -184,6 +184,7 @@ order until the package is found.  As a special case, `site-name' can be
 (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 @@ used interactively, for example from a mail or news buffer."
       (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)
index 11162e4..780d9a0 100644 (file)
@@ -355,7 +355,7 @@ This function is basically a wrapper over `locate-file'."
      (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 @@ DEFAULT is a default list of packages."
   (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 @@ Call HANDLE on each file off definitions of PACKAGE-LISP there."
 
 (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)
index cb6025c..0d209a9 100644 (file)
@@ -99,8 +99,7 @@ to paragraphs.  The fill functions insert and delete only soft newlines."
                               (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 @@ hard newline are considered to match.")
 ;; 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 @@ the beginning of the line, so it should not use \"^\" as an anchor.  This
 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 @@ In order to be recognized as the end of a sentence, the ending period,
 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 "\
index 1636a56..d83d54c 100644 (file)
@@ -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 @@ Its name should end with a slash.")
 (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 @@ the terminal-initialization file to be loaded.")
 (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)
index 8a12a5a..2a9cc7b 100644 (file)
@@ -134,32 +134,33 @@ user-id          User logon id
 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 @@ PostScript printer.  Under MS Windows, the built-in printing support is used."
                        (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 @@ PostScript printer.  Under MS Windows, the built-in printing support is used."
                       ;; 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 @@ PostScript printer.  Under MS Windows, the built-in printing support is used."
             )))
        ((and (not (eq system-type 'windows-nt))
              (fboundp 'lpr-buffer))
-        (lpr-region buf))
+        (lpr-region buffer))
        (t (error "No print support available"))))
index e078009..e287189 100644 (file)
@@ -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 @@ In either case, the output is inserted after point (leaving mark after it)."
   (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 @@ Remaining arguments are strings to give program as arguments."
 
 (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.
index 990625b..6d7c7ee 100644 (file)
@@ -56,7 +56,7 @@ That becomes the \"string to replace\".")
 (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 @@ Alternatively, click \\[occur-mode-mouse-goto] on an item to go to it.
 
 (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 @@ It serves as a menu to find any of the occurrences in this buffer.
                    (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 @@ It serves as a menu to find any of the occurrences in this buffer.
                    (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 serves as a menu to find any of the occurrences in this buffer.
 ;; 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-w to delete match and recursive edit,
 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 @@ The valid answers include `act', `skip', `act-and-show',
       (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 @@ just as `query-replace' does.  Instead, write a simple loop like this:
   (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 @@ When searching for a match, this function use `replace-search-function' and `rep
                        (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 @@ When searching for a match, this function use `replace-search-function' and `rep
          ;; 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)))
index 479e548..3905641 100644 (file)
@@ -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 @@ COMPOUND_TEXT and STRING are the most commonly used data types.
 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 @@ This will do nothing under anything other than X.")
   "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 @@ nil if this is impossible, or a suitable representation otherwise."
 (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 @@ nil if this is impossible, or a suitable representation otherwise."
                    (< (cdr value) 0))
               (cdr value)
             value)))
-       
+
        ((and (listp value)             ; (integer integer)
              (eq (length value) 2)
              (integerp (car value))
@@ -644,21 +644,21 @@ nil if this is impossible, or a suitable representation otherwise."
                    (< (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 @@ nil if this is impossible, or a suitable representation otherwise."
 
 (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)
index c8d5e1f..eb9ebee 100644 (file)
@@ -108,14 +108,14 @@ This does not apply to \"yanked\" strings."
 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 @@ to REGEXP-FLAG) contains uppercase letters."
             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 @@ In Auto Fill mode, if no numeric arg, break the preceding line if it's long."
          ;; 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 @@ In Auto Fill mode, if no numeric arg, break the preceding line if it's long."
        (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 @@ With arg N, insert N newlines."
   (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 @@ With prefix argument, insert the result to the current buffer."
         (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 @@ to get different commands to edit and resubmit."
 ;; next-complete-history-element
 ;; previous-complete-history-element
 \f
-(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 @@ A numeric argument serves as a repeat count."
             (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 @@ Repeating \\[universal-argument] without digits or minus sign
 
 \f
 ;; 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 @@ ring directly.")
 
 (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 @@ yanking point\; just return the Nth kill forward."
 ;(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 @@ to make one entry in the kill ring."
 ;     (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 @@ to make one entry in the kill ring."
    ;; 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 @@ to make one entry in the kill ring."
    ((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 @@ to make one entry in the kill ring."
    (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 @@ visual feedback indicating the extent of the region being copied."
          ;; 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 @@ the user to see that the mark has moved, and you want the previous
 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 @@ Most editing commands should not alter the mark.
 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 @@ if `shifted-motion-keys-select-region' is nil."
        '(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 @@ boundaries do not cause an error to be signaled."
   (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 @@ boundaries do not cause an error to be signaled."
   (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 @@ boundaries do not cause an error to be signaled."
       (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 @@ If you are thinking of using this in a Lisp program, consider
 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 @@ to use and more reliable (no dependence on goal column, etc.)."
   (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 @@ Use with care, as it slows down movement significantly.  Outline mode sets this.
   :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 @@ Use with care, as it slows down movement significantly.  Outline mode sets this.
                       (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 @@ Use with care, as it slows down movement significantly.  Outline mode sets this.
          (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 @@ Use with care, as it slows down movement significantly.  Outline mode sets this.
                (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 @@ Use with care, as it slows down movement significantly.  Outline mode sets this.
                (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 @@ Use with care, as it slows down movement significantly.  Outline mode sets this.
 ;; 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 @@ With a non-nil argument, clears out the goal column
 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 @@ With argument 0, interchanges line point is in with line mark is in."
 
 (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 @@ This can be run repeatedly to move to current line up a number of lines."
 
 (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 @@ With argument, kill comments on that many lines starting with this one."
       (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 @@ not end the comment.  Blank lines do not get comments."
   ;; 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 @@ not end the comment.  Blank lines do not get comments."
            (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 @@ indicating whether soft newlines should be inserted.")
                        (= (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 @@ for `auto-fill-function' when turning Auto Fill mode on."
 
 (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 @@ state before disabling selective display."
 
 (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 @@ is supposed to make it easier to insert characters when necessary."
 
 (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 @@ specialization of overwrite-mode, entered by setting the
 
 (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 @@ in the mode line."
 
 (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 @@ The C code calls this periodically, right before redisplay."
   "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
index e63c0e9..2857165 100644 (file)
@@ -163,12 +163,11 @@ nVolume (0 for default): ")
       ;; 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
index e3473aa..361cd71 100644 (file)
@@ -136,7 +136,7 @@ Otherwise, XEmacs will offer migration to the init directory.")
 
 ;; #### 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 @@ after your init file is read, in case it sets `mail-host-address'."
   :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 @@ after, and will not be true at any time before.")
 \f
 
 (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 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
       (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))
index fd65346..bbde00d 100644 (file)
@@ -359,7 +359,7 @@ function allows you to set the local value.
 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 @@ See also `with-temp-buffer'."
     (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 @@ The original alist is not modified.  See also `destructive-alist-to-plist'."
 
 ;; 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)))
 \f
 ;;; Error functions
 
@@ -746,9 +746,9 @@ yourself.]"
 ;;;; 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))
 
index 8835eab..08557cd 100644 (file)
@@ -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 @@ If STRING is invalid, signal an error."
        (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 @@ Defined flags are the characters 1, 2, 3, 4, 5, 6, 7, 8, p, a, and b.
    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 @@ This is similar to `map-char-table', but works only on syntax tables, and
                                          (standard-syntax-table)
                                          __key)
                        (funcall __function __key __value)))
-                 __table __range))
+                 __syntax_table __range))
 
 ;(defun test-xm ()
 ;  (let ((o (copy-syntax-table))
index ca3b447..e75f35e 100644 (file)
@@ -71,7 +71,7 @@ To reinitialize the mouse if the terminal is reset, type ESC : RET"
       ((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 @@ through the buffer as the BitGraph mouse's X position in the window."
   (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 @@ X and Y are 0-based character positions on the screen."
   "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)
index 0537147..2879126 100644 (file)
@@ -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 @@ Just like the Common Lisp function of the same name."
 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 @@ Handles wrapped and horizontally scrolled lines correctly."
 
 
 (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 @@ Handles wrapped and horizontally scrolled lines correctly."
 \f
 (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 @@ Returns nil."
                    (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 @@ Returns nil."
        (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 @@ Returns nil."
 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 @@ but that uses minibuffer, and mucks up last-command."
 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 @@ Returns list (window x y) where x and y are relative to window."
 
          (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 @@ Returns one of (text scrollbar modeline minibuffer)"
            (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))))
 \f
 ;;;
 ;;; 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 @@ where each mouse-list is bound to the function in REGION."
 
 (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 @@ of MENU.  MENU (or its symbol-value) should be a menu defined by defmenu.
 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 @@ is used as a label for the menu, i.e. it's inverted and not selectable."
 (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 <car> <cdr>) from \"\\E[n;<car>;<cdr>t\". 
+That is it returns (cons <car> <cdr>) from \"\\E[n;<car>;<cdr>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 @@ CODE values: 13 = Tool-Position, 14 = Size-in-Pixels, 18 = Size-in-Chars."
        (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 @@ Insert contents into the current buffer at point."
   (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 @@ Insert contents into the current buffer at point."
 (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)
index 94d443c..5cb92ef 100644 (file)
   (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))
 
     (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
 ;;;
 
 ;;;
 ;;; {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!
 ;;;
 (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
 ;;;
 ;;; 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 ()
index aa46fcf..eb2bd21 100644 (file)
 (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))
            (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))
     (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
index ff7f344..7f4657c 100644 (file)
 
 (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 @@ You can <q>uit; don't modify this file.")
 
 (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 @@ You can <q>uit; don't modify this file.")
                 (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 @@ to get the latest version of the file, then make the change again.")
 \f
 ;;; 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 @@ to get the latest version of the file, then make the change again.")
                 (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 @@ to get the latest version of the file, then make the change again.")
                 (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 @@ to get the latest version of the file, then make the change again.")
      (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 @@ Do you really want to edit the buffer? " fn)
          (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 @@ Do you really want to edit the buffer? " fn)
 ;;; 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
index d913142..d2bc894 100644 (file)
 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 @@ argument are optional. Only the Non-nil arguments are used in the test."
 ;; `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
index 28c14be..bc41a17 100644 (file)
@@ -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)
     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 @@ This is meant to be added to `find-file-hooks'."
   "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 @@ Positive prefix arg sets, negative disables."
 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)
index b84901d..3f22c46 100644 (file)
@@ -512,14 +512,16 @@ Suitable for use with `map-extents'."
 
 (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 @@ Otherwise, just return the value."
       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)
index 3418047..6fb0abd 100644 (file)
@@ -51,11 +51,11 @@ If WINDOW is nil, the selected window is used."
   (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)
 
index 4687c8a..cfd37e7 100644 (file)
 
 ;;;; 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.
-
-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."
+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.
+
+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 @@ counts, all windows on all frames that share that minibuffer count
 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.
-
-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.
+minibuffer does not count, only the selected window counts.
+
+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 @@ Otherwise, include frames only on the selected device."
         (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 @@ Otherwise, include frames only on the selected device."
 ;       (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 @@ If the variable split-window-keep-point is non-nil, both new windows
 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 @@ or if the window is the only window of its frame."
        (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
index 5dddded..aabfe87 100644 (file)
       (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)))
index 03b4092..b4adead 100644 (file)
   "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)
index 2d57100..3db5e6c 100644 (file)
@@ -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)
index 3b3a598..1dcf05a 100644 (file)
@@ -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 @@ be the text between those markers)."
   (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 @@ be the text between those markers)."
   "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)))
 
 \f
 ;FSFmacs (provide 'select)
index c530488..776a3b8 100644 (file)
@@ -1,7 +1,21 @@
+2000-11-14  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.37 is released.
+
+2000-11-02  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * lwlib.h: Typo fixes and tiny clarifications.
+
 2000-10-04  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.36 is released.
 
+2000-09-21  Andy Piper  <andy@xemacs.org>
+
+       * lwlib.h: declare copy_widget_value_tree.
+
+       * lwlib.c (copy_widget_value_tree): make non-static.
+
 2000-09-19  Martin Buchholz  <martin@xemacs.org>
 
        * *: Spelling mega-patch
index 76d3241..9ee62e8 100644 (file)
@@ -104,7 +104,7 @@ typedef struct _widget_args
   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 @@ typedef struct _widget_value
 
   /* 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 @@ typedef struct _widget_value
   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;
index 959ddd5..0ba2252 100644 (file)
@@ -1,3 +1,328 @@
+2000-11-14  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.37 is released.
+
+2000-10-27  Martin Buchholz  <martin@xemacs.org>
+
+       * 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  <adrian@xemacs.org>
+
+       * 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  <stephen@xemacs.org>
+
+       * xemacs/menus.texi:
+       * widget.texi:
+       Typo fixes and tiny clarifications.
+
+2000-10-19  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * 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 <martin@xemacs.org>
 
        * XEmacs 21.2.36 is released.
index 5b8d38e..d7e67c5 100644 (file)
@@ -1813,7 +1813,7 @@ Lisp lists are popular data structures in the C code as well as in
 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 @@ for example @code{or}, @code{and}, @code{if}, @code{cond}, @code{while},
 @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 @dfn{mark} method.  This is called during the marking stage and passed
 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 @@ All windows have three fields governing their contents:
 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 @@ means ``side-by-side'' and @dfn{vertically-arrayed} means
 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 @@ generalized to handle integers and linked list equally well).
 @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
index c59e84c..1736cbe 100644 (file)
@@ -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 @@ Mode, emacs, The XEmacs Reference Manual}.
 @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 @@ This function undefines all the abbrevs in abbrev table @var{table},
 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 @@ abbrev, or @code{nil} if the user declines to confirm redefining an
 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 @@ described here.
 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 @@ the file to save the abbrevs in.
 @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
index 700375f..755851b 100644 (file)
@@ -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 @@ space to display in.
 @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 @@ which should be a glyph object.
 @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}.
index 62fc2e8..e1c0a18 100644 (file)
@@ -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 @@ which may save disk space.  (You would put this code in your
 
 @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 @@ its value.  Major modes should not set this variable---they should set
 @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 @@ This function returns the name of the most recent backup file for
 
 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 @@ be sure to redefine the function @code{make-auto-save-file-name}
 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 @@ about them, you can get rid of them by reading in the previous version
 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 @@ Normally, @code{revert-buffer} asks for confirmation before it changes
 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
index cc95f52..301364d 100644 (file)
@@ -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 @@ also be buffers that are not visiting files.  While several buffers may
 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 @@ original buffer.  Next, @code{set-buffer} makes another buffer current.
 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 @@ not display the buffer in the currently selected window or in any other
 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 @@ buffer under the name @samp{*shell*}.
 @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 @@ a name.)  For example:
 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 @@ otherwise.  If @var{buffer} is not supplied, the current buffer
 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 @@ counter that increments every time the buffer is modified.  If
 @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 @@ some other program has probably altered the file.
 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 @@ See also the file locking mechanism in @ref{File Locks}.
 @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 @@ properties have no effect.  If @code{inhibit-read-only} is a list, then
 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 @@ global, non-frame ordering is returned instead.
 ;; @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 @@ If no suitable buffer exists, the buffer @samp{*scratch*} is returned
 
 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 @@ intended for interactive use, and is described fully in @cite{The XEmacs
 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 @@ buffers, the indirect buffers are automatically killed as well.
 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 @@ the base buffer kills all its indirect children.
 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 @@ not supplied, it defaults to the current buffer.
 @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
index 9f962af..4e9c1cd 100644 (file)
@@ -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 @@ most emphatically @emph{not} call this yourself; it will reinitialize
 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 @@ local site.
 @example
 @group
 emacs-build-time "Mon Apr  7 20:28:52 1997"
-     @result{} 
+     @result{}
 @end group
 @end example
 @end defvar
@@ -310,7 +314,7 @@ information:
  (@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 @@ not apply if XEmacs was configured with @samp{--debug}.  Therefore, be
 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 @@ Lisp integer.
 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.
index d68d1b4..9821a57 100644 (file)
@@ -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 @@ value becomes the argument for the command.  Prompt.
 @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 @@ command, @code{command-execute} calls @code{call-interactively}, which
 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 @@ See @code{documentation} in @ref{Accessing Documentation}, for a
 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 @@ considered commands, because they are not functions.
 
 @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 @@ Otherwise, the command is added only if it uses the minibuffer to read
 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 @@ foobar
 @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 @@ For information about how exactly the XEmacs command loop works,
 @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 @@ also specify the modifier keys that were held down at the time.
 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 @@ particular type.
 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 @@ The event button.  This an integer, either 1, 2 or 3.  It is allowed
 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 @@ feature of @var{plist}.  The following example creates a copy of
 @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 @@ This function allows the given event structure to be reused.  You
 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 @@ XEmacs provides some auxiliary functions for converting between events
 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)}.
+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.
 
-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{console} is the console to store in the event,
+and defaults to the selected console.
 
-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.
+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 @@ Lisp programs can read input a key sequence at a time by calling
 @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.
+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
-will not be side-effected by subsequent calls to this function.
+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 @@ and does not set @code{quit-flag}.  @xref{Quitting}.
 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 @@ In most cases, the function @code{next-command-event} is more
 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 @@ functions to read command input.
 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 @@ It returns @code{nil}.
 
 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 @@ take two arguments to specify the time (one integer and one float
 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 @@ and Discarding}).  Otherwise, the value is @code{nil}.
 
 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 @@ updating in such a case by using @code{force-redisplay}.  @xref{Refresh
 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 @@ non-@code{nil} in any way thus causes a quit.
   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 @@ for input.  Instead of quitting, @kbd{C-g} serves as the requested
 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 @@ in @ref{Errors}.)
 
   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 @@ M-3     M-x display-prefix  @print{} 3      ; @r{(Same as @code{C-u 3}.)}
 
 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 @@ argument, either numeric or raw, in the @code{interactive} declaration.
 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 @@ a recursive edit but also provides the other features of the debugger.
   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 @@ then type @kbd{C-M-c} to exit and continue executing @code{simple-rec}.
 (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 @@ not a symbol, string, or vector, an error is signaled.
 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
index 6feb3e0..7db86b7 100644 (file)
@@ -213,17 +213,23 @@ for the file name.
 @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 @@ normally @code{nil}, but is bound to @code{t} by
 @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 string containing the byte-code instructions.
 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 @@ representation.  It is the definition of the command
   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 @@ This function returns the vector of Lisp objects referenced by
 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
index 67f5f07..3a0e4bc 100644 (file)
@@ -90,12 +90,14 @@ frame.  This function is useful because devices and frames are similar
 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 @@ but no color).
 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 @@ represents XEmacs's stdout.
 @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 @@ argument @var{argv-list} is a list of strings describing command line
 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
index 4588d48..59000f7 100644 (file)
@@ -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 @@ based on the value of @var{condition}.  If the evaluated @var{condition} is
 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 @@ never evaluated---it is ignored.  Thus, in the example below,
 
 @example
 @group
-(if nil 
-    (print 'true) 
+(if nil
+    (print 'true)
   'very-false)
 @result{} very-false
 @end group
@@ -226,7 +226,7 @@ clauses was successful.  To do this, we use @code{t} as the
 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 @@ You could almost write @code{or} in terms of @code{if}, but not quite:
 @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 @@ return points at once.  First, two return points with the same tag,
 @end group
 
 @group
-(catch 'hack 
+(catch 'hack
   (print (catch2 'hack))
   'no)
 @print{} yes
@@ -664,48 +664,161 @@ which you call for other purposes, such as if you try to take the
 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 @@ message and returns a very large number.
 @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 @@ including those signaled with @code{error}:
       ;; @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 @@ make it possible to categorize errors at various levels of generality
 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.
index 4c2c260..fddbf33 100644 (file)
@@ -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 @@ definitions---as well as face definitions.
 
 @menu
 * Common Keywords::
-* Group Definitions::            
-* Variable Definitions::         
+* Group Definitions::
+* Variable Definitions::
 * Customization Types::
 @end menu
 
@@ -627,7 +627,7 @@ Substitute the tag here.  You specify the tag with the @code{:tag}
 keyword.
 
 @item %%
-Display a literal @samp{%}. 
+Display a literal @samp{%}.
 @end table
 
 @item :action @var{action}
@@ -710,7 +710,7 @@ in a @code{menu-choice} widget.  By default, the tag used will be either the
 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 @@ implemented.
 @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.
index b3106e3..6b05aa8 100644 (file)
@@ -35,58 +35,58 @@ For a @var{type} of @code{'dbm}, there are no subtypes, so
 
 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
index 698d0ed..99c351e 100644 (file)
@@ -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 @@ Entering:
 @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
index 7aba6fb..a282f5e 100644 (file)
@@ -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
index 1a85ffc..043f4e4 100644 (file)
@@ -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 @@ that XEmacs presents to the user.
 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 @@ redrawn from scratch.  Normally this occurs the next time that
 @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 @@ function;
 @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 @@ displayed there.
 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 @@ effect is seen only within XEmacs.
 
 @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 @@ at the matching parenthesis.  A fraction of a second often gives
 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 @@ Here is an example of calling this function explicitly.
 @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 @@ Here is an example of calling this function explicitly.
     (blink-matching-open)))
 @end group
 @end smallexample
-@end defun
+@end deffn
 
 @node Usual Display
 @section Usual Display Conventions
index ceab662..5d48ba6 100644 (file)
@@ -1,7 +1,7 @@
 @c -*-texinfo-*-
 @c This is part of the XEmacs Lisp Reference Manual.
 @c Copyright (C) 1998 Oliver Graf <ograf@fga.de>
-@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 @@ OffiX is supported if 'offix is member of the variable dragdrop-protocols, or
 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 @@ misc-user-event.
 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 @@ extent-property with the same name. Extents are checked prior to the
 variable.
 
 The customization group @code{drag-n-drop} shows all variables of user
-interest. 
+interest.
 
 @node Drag Interface
 @section Drag Interface
index bce6dbc..682ffc0 100644 (file)
@@ -22,10 +22,10 @@ each breakpoint.
 
 @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 @@ open-parenthesis before @code{if}.
 @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 @@ the display you will see:
 @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 @@ package you are using but only when you also use Edebug.  For example,
 @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 @@ program more slowly or stop sooner.
 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 @@ point, type @kbd{w} first, to move point there.
 
 @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 @@ execution.
 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 @@ to the first breakpoint if there are no following breakpoints.  This
 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 @@ break condition} is a condition that is repeatedly evaluated at every
 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 @@ produce a traditional trace listing of execution in a separate buffer,
 
 @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 @@ the breakpoint is reached, the frequency data is looks like this:
 @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 @@ Whenever Edebug is entered just to think about whether to take some
 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 @@ following data, but some of these are deliberately not restored if an
 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 @@ The variables @code{overlay-arrow-position} and
 @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 @@ evaluation list window.
 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 @@ resulting expansion is evaluated, or any time later.)  You must explain
 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 @@ name.
 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 @@ An unquoted anonymous lambda expression.
 @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 @@ Each of the following elements is matched as alternatives as if by using
 of them match, nothing is matched, but the @code{&not} 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 @@ described here.  See the @code{defun} example below.
 @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 @@ specification for the macro as follows: the specifications for those
 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 @@ function body.
 
 @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 @@ what happens to data about windows, you may want to set this variable to
 @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 @@ mode for Edebug when it is first activated.  Possible values are
 @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 @@ See @ref{Edebug Execution Modes}.
 @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 @@ and coverage information for a definition.
 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 @@ results in Edebug.  The default value is @code{50}.
 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 @@ See @ref{Debugging Backquote}.
 
 @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
index 37f5ad4..527211a 100644 (file)
@@ -149,7 +149,7 @@ sometimes.
 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 @@ macros across the Edebug activation boundary.
 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 @@ Use copy of @code{current-local-map} instead of @code{emacs-lisp-mode-map}
 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
index d246f1b..abde5b9 100644 (file)
@@ -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 @@ error message is constructed from the data items alone when the error
 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 @@ This is a @code{file-error}.@*
 @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
index 4714c04..71ce6d2 100644 (file)
@@ -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 @@ function @code{eval}.
 @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 @@ function, not a symbol.
 @smallexample
 @group
 ((lambda (arg) (erste arg))
- '(1 2 3)) 
+ '(1 2 3))
      @result{} 1
 @end group
 @end smallexample
@@ -445,12 +445,11 @@ symbol function indirection when calling @code{erste}.
   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:
 
index a654d69..d9c852c 100644 (file)
@@ -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 @@ commands.  @xref{Duplicable Extents}.
 @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 @@ however, a detached extent will not necessarily return a value of
 @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 @@ are also provided (@pxref{Mapping Over Extents}).  When reading through
 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 @@ to the beginning and end of @var{buffer-or-string}, respectively.
 
   @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 @@ the end of the region is open), but this can be changed with the
   @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 @@ Thus, this function may be used to walk a tree of extents in a buffer:
 @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 @@ from that parent (or from the root ancestor if the parent in turn
 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 @@ there is none, @code{nil} is returned.
 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 @@ respectively. (@var{layout} defaults to @code{text} if not specified.)
 @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
 
index ee36e15..4837ae7 100644 (file)
@@ -127,16 +127,18 @@ other non-@code{nil} value both permanent and temporary are included.
 @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 @@ specifier, unlike all the other built-in properties, and cannot contain
 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, it will automatically be converted into a @code{generic}
 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 @@ specifier, it will be converted into a @code{generic} specifier
 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 @@ in @code{specifier-instance}.  @xref{Specifiers}.
 @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 @@ returned by @code{make-glyph} (@pxref{Glyphs}).  The argument may also
 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 @@ This function returns the font specifier of face @var{face}.
 @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 @@ that is defined.
 @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 @@ A vector of two or three elements: a face to inherit from, optionally a
 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 @@ The color-instance object returned describes the way the background
 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 @@ This function returns non-@code{nil} if @var{object} is a color-instance.
 @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
index 7608b4a..e3e4171 100644 (file)
@@ -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 @@ temporary buffer.  Visiting the file is not necessary and takes longer.
 
 @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 @@ file named @var{filename}, it displays the message @samp{New file} in
 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 @@ When this command is called interactively, it prompts for
 @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 @@ let you modify it.  Entering View mode runs the normal hook
 
 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 @@ major modes set it to @code{t} in particular buffers.
 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 @@ is visiting the file @var{filename}: these include the buffer's visited
 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 @@ the file should not be locked, so this function does nothing.  It also
 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 @@ case the change that the user was about to make does not take place.
 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 @@ name of a text file, a directory, or even another symbolic link, or it
 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 @@ For example, here are the file attributes for @file{files.texi}:
 @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 @@ is on file system number -32252.
   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 @@ Signal a @code{file-already-exists} error if
 @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 @@ contents of @file{foo3} are lost.
 @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 @@ In an interactive call, this function prompts for @var{filename} and
 @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 @@ its directory is writable.)
 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 @@ In an interactive call, this function prompts for @var{filename} and
 @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 @@ how to manipulate file names.
 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 @@ parts: the @dfn{directory name} part, and the @dfn{nondirectory} part
 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 @@ returns a string ending in one of the three characters @samp{:},
 (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 @@ returns a string ending in one of the three characters @samp{:},
 (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 @@ version numbers, only true file version numbers.
 (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 @@ name but not identical to it.  (This is not quite the same as the usual
 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 @@ such as @samp{$HOME}, and the constructs @samp{~}, and @samp{..}.
 @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 @@ converts a string of the form @file{[X]Y.DIR.1} to the form
 @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 @@ abbreviation instead.
   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 @@ starting from the root of the tree; then it is called an @dfn{absolute}
 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 @@ example:
      @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 @@ there is no danger of generating a name being used by another process.
 @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 @@ To avoid confusion, each Lisp application should preferably use a unique
 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 @@ The argument @var{partial-filename} must be a file name containing no
 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 @@ In the following example, suppose that the current default directory,
 @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 @@ completion-ignored-extensions
 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 @@ returned.
 @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 @@ for an operation it does not recognize.  Here's one way to do this:
         @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 @@ for a certain operation.
 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 @@ work correctly.
 @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 @@ buffer is deleted, all file parts are deleted with it.
 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 @@ When @code{write-region} writes data into a file, it first calls the
 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 @@ 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
+@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 @@ list of the absolute file name and the length of the data inserted
 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
index 1ae6f9b..892ca6c 100644 (file)
@@ -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 @@ This predicate returns @code{t} if @var{object} is a frame, and
 
 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 @@ The set of possible properties depends in principle on what kind of
 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 @@ and their values.
 
 @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 @@ elements of property list @var{plist}.  If you don't mention a property
 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 @@ pixels.  If you don't supply @var{frame}, they use the selected frame.
 @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 @@ Frames remain potentially visible until you explicitly @dfn{delete}
 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 @@ If @var{device} is specified only frames on that device will be returned.
 ``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{minibuf}, says which frames to consider:
+The second argument, @var{which-frames}, says which frames to consider:
 
 @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.
-@item anything else
+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.
+
+@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}
+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 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 @@ upper left corner, down and to the right, until it reaches the window at
 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 @@ The operation of @code{focus-frame} is not affected by the value of
 @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 @@ change it.
 @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 @@ even as an icon.
 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 @@ iconified, it will not be visible.  (Under FSF Emacs, the functionality
 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 @@ This function returns a frame configuration list that describes
 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
index c2e6bb4..638cf96 100644 (file)
@@ -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 @@ define them.
 * 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 @@ function:
 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 @@ The length of the result is the same as the length of @var{sequence}.
   "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 @@ other suitable punctuation.
 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 @@ and can be stored into a function cell just as any other object can be
 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 @@ making an alternate name for a function.)
 @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}
index bf0c043..bc8663d 100644 (file)
@@ -82,7 +82,7 @@ a toolbar, or as a mouse pointer or an icon, for example.
 
 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 @@ instantiator}, or @dfn{image instance} does not refer to what people
 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 @@ filled in with the corresponding colors from the face.
 @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 @@ the file must exist when the instantiator is added to the image, but
 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 @@ The default value of this variable defines the logical color names
 @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 @@ instance of type @code{nothing}.
 @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 @@ fix this.)
 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
index db5882d..f3f9b9c 100644 (file)
@@ -115,10 +115,10 @@ gutter.  The values of the variables @code{default-gutter-visible-p},
 @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 @@ the user to choose where the gutter should go.
 
 @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 @@ Specifier for the gutter at the right edge of the frame.
 @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 @@ visibility that is used in frame geometry calculations.
 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
index 7117fb1..9ab8294 100644 (file)
@@ -226,7 +226,7 @@ Set the current horizontal position as a goal for C-n and C-p.
 @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 @@ C-g             abort-recursive-edit
 @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 \\=\\<MAPVAR> 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 \<MAPVAR> 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 @@ help character, and the help character has no binding after that prefix.
 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 @@ users of that function should be told to use the newer one instead.
 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 @@ documentation.  @var{new} can also be a string (if there is not a single
 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},
index e8a3381..9773d56 100644 (file)
@@ -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 @@ special way (they are passed arguments, or else their values are used).
 @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
index 31ed313..937b347 100644 (file)
@@ -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,
index b39bee5..4882f74 100644 (file)
@@ -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 @@ Example:
 @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")
index 93f6309..162051f 100644 (file)
@@ -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 @@ when it starts in an interactive mode:
 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 @@ necessary.  Here is a sample; alter the names:
 @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 @@ but not flawless.  There are a few topics that are not covered, either
 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 @@ The description follows on succeeding lines, sometimes with examples.
                                           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
index f727df8..a509fdf 100644 (file)
@@ -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 @@ This function constructs and returns a new keymap object.  All entries
 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 @@ That is, the @kbd{A} keystroke is represented by all of these forms:
         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 @@ other.
 @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 @@ bindings, as in @code{lookup-key} (above).
 @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 @@ The argument @var{accept-defaults} controls checking for default bindings,
 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 @@ meta-prefix-char                    ; @r{The default value.}
 @end group
 @group
 (setq meta-prefix-char 24)
-     @result{} 24      
+     @result{} 24
 @end group
 @group
 (key-binding "\C-xb")
@@ -1149,26 +1151,28 @@ changing an entry in @code{ctl-x-map}, and this has the effect of
 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 @@ bindings in another.  For example,
 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 @@ Here is an example showing a keymap before and after substitution:
 
 @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 @@ digits to run @code{digit-argument}, and @kbd{-} to run
 @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 @@ sequences beginning with @kbd{C-x}.)
 
 @smallexample
 @group
-(current-local-map) 
+(current-local-map)
 @result{} #<keymap lisp-interaction-mode-map 5 entries 0x558>
 (accessible-keymaps (current-local-map))
 @result{}(([] . #<keymap lisp-interaction-mode-map 5 entries 0x558>)
@@ -1452,7 +1461,7 @@ indicating their relationship to their enclosing keymap.
 @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 @@ bound to @var{definition} in a set of keymaps.
 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 @@ for mouse clicks.
   @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 @@ For example, in the default global map, the characters @samp{@key{SPC}
 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
index 6e9c686..827fca0 100644 (file)
@@ -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 @@ and ensuring compliance with LDAP internationalization rules and formats
 
 @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 @@ and ensuring compliance with LDAP internationalization rules and formats
 
 @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 @@ Acme organization in the United States.
 @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 @@ The authentication method to use, possible values depend on the LDAP
 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 @@ LDAP operations.  All of them open a connection to a host, perform an
 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 @@ Note that the former functions @code{ldap-*-internal} functions have been
 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 @@ This function returns non-@code{nil} if @var{object} is a @code{ldap} object.
 @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 @@ The dereference policy is one of the symbols @code{never},
 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 @@ The maximum number of matches to return for searches performed on this connectio
 @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 @@ thus requiring a preliminary call to @code{ldap-open}.  Multiple
 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 @@ Perform a search on an open connection @var{ldap} created with @code{ldap-open}.
 @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 @@ Modify an entry in an LDAP directory.
 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 @@ and the corresponding decoder is then retrieved from
 @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 @@ If non-@code{nil}, no encoding/decoding will be performed LDAP attribute values
 
 @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 @@ are available.
 @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 @@ This table is built from RFC2252 Section 5 and RFC2256 Section 5
 
 @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 @@ In that syntax simple filters have the form:
 @code{<value>} 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 @@ not operators.
 
 @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}.
index 19e4b5a..5003ef5 100644 (file)
@@ -247,8 +247,8 @@ Conventions
 
 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 @@ Evaluation
 * 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 @@ Variables
 
 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 @@ Functions
 * 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 @@ Debugging Lisp Programs
 
 * 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 @@ Debugging Invalid Lisp Syntax
 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 and Minor Modes
 * 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 Names
 * 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 @@ File Names
 
 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 @@ Windows
                               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 @@ Markers
 * 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 @@ Text
                        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 @@ LDAP Support
 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
 
index d708b8e..cd237e1 100644 (file)
@@ -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 @@ new @sc{car} or @sc{cdr}.
 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 @@ x2:              |
 
   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 @@ with it.  This means that it's a malformed or circular plist.
 @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 @@ to @code{setq} the value back into where it came from.
 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
 
index e533588..e3888ed 100644 (file)
@@ -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 @@ to load automatically from @var{filename}.  The string @var{filename}
 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 @@ definition.
 
 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 @@ object, then it is defined as an autoload object like this:
 (autoload @var{filename} @var{docstring} @var{interactive} @var{type})
 @end example
 
-For example, 
+For example,
 
 @example
 @group
@@ -509,7 +509,7 @@ file should call @code{provide} at the top level to add the feature to
   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 @@ presence or absence of emacs or environment extensions.
 
 @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 @@ If @var{fexp} is a list whose car is the symbol @code{or}, the function
 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:
index ef9359d..2d3ed27 100644 (file)
@@ -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
index 92c6dbf..78b43d6 100644 (file)
@@ -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 @@ Here are some examples:
 @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 @@ macro.  Here is a correct expansion for the @code{for} macro:
 @end group
 @end smallexample
 
-Here is a macro definition that creates this expansion: 
+Here is a macro definition that creates this expansion:
 
 @smallexample
 @group
index 1421e91..15e9fb4 100644 (file)
@@ -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 @@ The minibuffer keymap used for reading Lisp expressions.
 
 @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
index 44920a8..b22c287 100644 (file)
@@ -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 @@ chapter.
 @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 @@ passed an integer argument greater than the length of the buffer,
 @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 @@ This function moves @var{marker} to @var{position}
 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 @@ If you are using this in an editing command, you are most likely making
 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:
 
 @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 @@ marks of the current buffer, most recent first.
 @example
 @group
 mark-ring
-@result{} (#<marker at 11050 in markers.texi> 
+@result{} (#<marker at 11050 in markers.texi>
     #<marker at 10832 in markers.texi>
     @dots{})
 @end group
index 7f6e158..53d1ef7 100644 (file)
@@ -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 @@ also specifies a particular item to be modified.  For example,
 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 @@ to the menubar itself.
 @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 @@ be inserted.
 @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 @@ more information.
 @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 @@ run.
 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 @@ for more information about how to modify the menu traversal keys.
 @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.
index ac8b10d..d897a0e 100644 (file)
@@ -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 @@ string; however, if @var{read} is non-@code{nil}, then it uses
 @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 @@ arguments @var{prompt} and @var{initial} are used as in
 @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 @@ This function reads a Lisp object using the minibuffer, and returns it
 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 @@ This function reads a Lisp expression using the minibuffer, evaluates
 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 @@ This function simply evaluates the result of a call to
 @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 @@ text which is a valid form already:
 @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 @@ this chapter so as to keep them near the higher-level completion
 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 @@ is @code{t}.
 
 @smallexample
 @group
-(try-completion 
+(try-completion
  "foo"
  '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)))
      @result{} "fooba"
@@ -536,44 +536,40 @@ too short).  Both of those begin with the string @samp{foobar}.
 
 @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 @@ example for @code{try-completion}:
 @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 @@ Here's an example of using @code{completing-read}:
 @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 @@ only buffer name starting with the given input is
 @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 @@ enters null input, the return value is @code{nil}.
 (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 @@ as to complete in the set of extant Lisp symbols, and it uses the
 @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 @@ symbol.
 
 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 @@ user enters null input, the return value is @code{nil}.
 @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 @@ case, point goes at the beginning of @var{initial}.  The default for
 @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 @@ invalid.  At the next prompt the user types @kbd{y}.
 @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 @@ Do you need a lift? (y or n)
 
 @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 @@ Here is an example:
 @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 @@ and inserted in the minibuffer. If @var{default} is @code{nil}, then
 @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 @@ other frame's minibuffer window.
 @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 @@ minibuffer.  The outer-level minibuffer is invisible while you are
 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
index d338082..5db9648 100644 (file)
@@ -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 @@ Fundamental mode.  Rmail mode is a complicated and specialized mode.
 * 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 @@ the conventions listed above:
 @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 @@ the conventions listed above:
 @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 @@ correspondingly more complicated.  Here are excerpts from
 @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 @@ correspondingly more complicated.  Here are excerpts from
       ;; @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 @@ set up.  This lets the user customize the keymap.
 
 @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 @@ set up.  This lets the user customize the keymap.
 @end smallexample
 
   Finally, here is the complete major mode function definition for
-Emacs Lisp mode.  
+Emacs Lisp mode.
 
 @smallexample
 @group
@@ -545,7 +545,7 @@ the @samp{mode:} local variable near the end of a file; the
 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 @@ For example,
 @end group
 @group
  ("\\.el\\'" . emacs-lisp-mode)
- ("\\.c\\'" . c-mode) 
+ ("\\.c\\'" . c-mode)
  ("\\.h\\'" . c-mode)
  @dots{})
 @end group
@@ -621,11 +621,11 @@ Here is an example of how to prepend several pattern pairs to
 @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 @@ This construct defines @var{variant} as a major mode command, using
 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 @@ The new mode has its own keymap, named @code{@var{variant}-map}.
 @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 @@ directory.
 (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 @@ The default value of @code{minor-mode-alist} is:
 @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 @@ The default value of @code{default-modeline-format} is:
  "   "
  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 @@ up in the @file{.emacs} file, but Lisp programs can set them also.
   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 @@ expression.
 @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 @@ modified for a particular class of buffers only.
               (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 @@ difference.
 @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.
 
index 9f9424a..495ab44 100644 (file)
@@ -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 @@ is ok for mouse tracking, since it doesn't make sense for mouse tracking
 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
 
index d227bcc..9483964 100644 (file)
@@ -47,7 +47,7 @@ hugely variant shapes as the "same" character.  Sometimes, especially
 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 @@ properties of a charset.
 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 @@ This function returns the number of characters per dimension of
 @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 @@ This function returns the display direction of @var{charset}---either
 @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 @@ This function makes a multi-byte character from @var{charset} and octets
 @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 @@ character is the result of overstriking all the characters in the
 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 @@ character set and UTF-8, for example).
   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 @@ the control character "ASCII DEL" respectively.
 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 @@ bit environments.
 
 (#### 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 @@ End-of-line conversion to be used.  It should be one of the types
 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 @@ designation by escape sequence.
 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 @@ This function decodes a JIS X 0208 character of Shift-JIS coding-system.
 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 @@ This function decodes a Big5 character @var{code} of BIG5 coding-system.
 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 @@ coding-system.  The corresponding character code in Big5 is returned.
   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 @@ table of coding systems.)
 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 @@ implements a virtual machine with 8 registers called @code{r0}, ...,
 @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 @@ executed when the input is exhausted.  Both the main block and the EOF
 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 @@ the form @code{(r0 = @var{integer})}.
 @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 @@ array, and the @code{branch} statement uses the @var{expression} as the
 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 @@ block just as the @code{branch} statement does.
 @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 @@ other CCL programs, and from Lisp using these functions:
 @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 @@ 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.  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 @@ values, specifying the initial value for the R0, R1 .. R7 registers and
 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 @@ registers and IC.  Returns the resulting string.
 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 @@ whether the character is in that category.
   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 @@ This function returns the standard category table.  This is the one used
 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
 
index 241de5d..6258217 100644 (file)
@@ -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 @@ they have a fixed, limited amount of precision.
 
   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 @@ if any argument is floating.
 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 @@ more convenient and natural way to increment a variable is
 @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 @@ This function adds its arguments together.  When given no arguments,
 @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 @@ cumulatively.  If there are no arguments, the result is 0.
 @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 @@ product.  When given no arguments, @code{*} returns 1.
 @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 @@ differently with negative arguments.  This is because the Lisp function
 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 @@ If you divide by 0, an @code{arith-error} error is signaled.
      @result{} 2
 (/ 25 3 2)
      @result{} 4
+(/ 3.0)
+     @result{} 0.3333333333333333
 (/ -17 6)
      @result{} -2
 @end example
@@ -627,23 +647,23 @@ nearest integer below; @code{fceiling}, the nearest integer above;
 @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 @@ like this (with 8-bit binary numbers):
 (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 @@ On the other hand, shifting one place to the right looks like this:
 (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 @@ In binary, in the 28-bit implementation, the argument looks like this:
 @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 @@ which becomes the following when left shifted:
 @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 @@ looks like this:
 
 @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 @@ In contrast, shifting the pattern of bits one place to the right with
 (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 @@ bit is one in the result if, and only if, the @var{n}th bit is zero in
 @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 @@ These mathematical functions are available if floating point is
 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; in this case, it is truncated to fit the range of possible
 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
index 320c41e..e14d9f9 100644 (file)
@@ -1081,11 +1081,11 @@ where @var{property-data} consists of zero or more elements, in groups
 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 @@ to @code{old-eq} when executed under XEmacs 20.
 
 @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
index afe40ac..67d1ff3 100644 (file)
@@ -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 @@ It loads the library @file{site-start}, unless the option
 @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 @@ It sets the major mode according to @code{initial-major-mode}, provided
 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 @@ mode or using a window system.
 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 @@ It calls @code{frame-notice-user-settings}, which modifies the
 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 @@ terminal-initialization file.  To do this, put the following in
 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 @@ form:
 -@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 @@ common.
 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 @@ of the XEmacs process.  (This is useful primarily in batch operation; see
 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 @@ case you can give input to some other job such as a shell merely by
 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 @@ lewis@@slug[24] % fg
 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 @@ UniSoft UniPlus.
 @item usg-unix-v
 AT&T System V.
 
-@item vax-vms
-VAX VMS.
-
 @item windows-nt
 Microsoft windows NT.
 
@@ -645,12 +642,14 @@ done when XEmacs starts up, the value actually used is the one saved when
 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 @@ SHELL=/bin/csh
 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 @@ variable with @code{let} is also reasonable practice.
 
 @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 @@ This function returns a list of the current 1-minute, 5-minute and
 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 @@ lewis@@rocky[5] % uptime
 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 @@ the function will signal an error.
 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 @@ environment variables @code{LOGNAME} and @code{USER}.
 @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 @@ This function returns the full name of @var{user}.  If @var{user} is
 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 @@ This function returns the real @sc{uid} of the user.
 @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 @@ This stands for the time zone abbreviation.
 @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 @@ has elapsed.  @var{secs} is a number of seconds, expressed as an integer
 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 @@ functions.
 @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 @@ The @code{current-input-mode} function returns the input mode settings
 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 @@ such as @code{recent-keys} and dribble files record the characters after
 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 @@ return.  By default, 100 events are stored.
 @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 @@ remember last 250 events and will make @code{recent-keys} return last
 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 @@ the proper value, but others do not.  If XEmacs has the wrong value, it
 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 @@ terminals, this problem is gradually being cured.  For the mean time,
 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
index 1383201..85e05a7 100644 (file)
@@ -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 @@ Likewise, to move to the end of the buffer, use:
 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 @@ the end of the last line, and the value will be 2.
 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 @@ This function returns the number of lines between the positions
 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 @@ performance of your code.  @xref{Text Lines, cache-long-line-scans}.
 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 @@ beginning of the first screen line.  @xref{Minibuffer Misc}.
 @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 @@ quotes are ignored.) @var{arg} defaults to 1 if omitted.  If @var{arg}
 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 @@ balanced expressions.  For example,
 @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 @@ This special form evaluates @var{forms} with @var{buffer} as the current
 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 @@ tool for the job.  Here is what you must use instead:
 
 @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
 
index f565f44..d22ab29 100644 (file)
@@ -781,7 +781,7 @@ Returns: t if successfully submitted
 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
index f664474..d750074 100644 (file)
@@ -60,7 +60,7 @@ The other two, @code{call-process} and @code{call-process-region},
 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 @@ since they are passed directly to the specified program.
 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 @@ of @code{call-process}:
 @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 @@ etc.) to work between the process and its children whereas pipes do not.
 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 @@ To determine whether a given subprocess actually got a pipe or a
 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 @@ This function returns a list of all processes that have not been deleted.
 @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 @@ process is started and remains constant as long as the process exists.
 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 @@ for a network connection that is closed.  Once a connection
 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 @@ specify the process to send input to, and the input data to send.  The
 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 string &optional start end
+This function sends @var{process} the contents of @var{string} as
+standard input.
 
-@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.
+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 @@ introduction.txt                text.texi~
 @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 @@ it the signal @code{SIGCONT}.  This presumes that @var{process} was
 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 @@ associated with no buffer.
 
 @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 @@ Here is how to do these things:
 
 @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 @@ text arrives, insert the following line just before the
 @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 @@ there is no filter function:
 @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 @@ function.  It always returns either @code{open} or @code{closed} for a
 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
index 900eda5..6424d49 100644 (file)
@@ -36,37 +36,38 @@ Return non-@code{nil} if @var{object} is a range table.
 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
 
index 2436514..a8ec820 100644 (file)
@@ -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 @@ portions of it.
   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 @@ upper bound and returns @code{nil}.  (It would be more consistent now
 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 @@ returns @code{nil} instead of signaling an error.  If @var{noerror} is
 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 @@ whitespace:
 
   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 @@ will see the following:
 @group
 sentence-end
 @result{}
-"[.?!][]\"')@}]*\\($\\| $\\|  \\|  \\)[       
+"[.?!][]\"')@}]*\\($\\| $\\|  \\|  \\)[
 ]*"
 @end group
 @end example
@@ -655,7 +657,7 @@ Search, emacs, The XEmacs Reference Manual}.  Here we describe only the search
 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 @@ error is signaled.  If @var{noerror} is @code{t},
 @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 @@ comes back" twice.
 @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 @@ feature for matching regexps from end to beginning.  It's not worth the
 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 @@ components are separated with the characters specified with
 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 @@ functions only when you really need the longest match.
   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 @@ that all men are created
 @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 @@ positions within the text:
 @group
 (string-match "\\(qu\\)\\(ick\\)"
               "The quick fox jumped quickly.")
-              ;0123456789      
+              ;0123456789
      @result{} 4
 @end group
 
@@ -1191,7 +1202,7 @@ character of the buffer counts as 1.)
 @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 @@ If you did the search in a string, pass the same string as @var{string}.
 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 @@ letter, @code{replace-match} considers this a capitalized first word
 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 @@ Subexpressions are those expressions grouped inside @samp{\(@dots{}\)}.
   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 @@ corresponds to @code{(match-end @var{n})}.
 
 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 @@ that shows the problem that arises if you fail to save the match data:
 
   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
index fd7f170..43bab70 100644 (file)
@@ -603,9 +603,9 @@ This function returns @code{t} if @var{object} is a bit vector.
 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 @@ integers 0 or 1.
 @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
index 660d251..adb36ff 100644 (file)
@@ -478,7 +478,7 @@ In many circumstances, the higher-level function @code{set-specifier} is
 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 @@ selected window for the duration of a second:
 (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 @@ and instantiator list, a list of such conses, or nearly any other
 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 @@ If @var{locale} is a particular locale (a window, buffer, frame, device,
 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 @@ on each element of the list and the results concatenated together.
 
 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 @@ whose value can be per-buffer, per-window, per-frame, or per-device,
 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 @@ buffer, and @code{global}.  (@code{nil} is not valid.)
 @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 @@ is non-@code{nil}, however, @var{tag-set} must be equal to an
 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
index 98b6494..0128d22 100644 (file)
@@ -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 @@ characters are used.  @code{print} returns @var{object}.  For example:
 (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 @@ This function outputs the printed representation of @var{object} to
 
 @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 precision in any of these cases is the number of digits following
 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
index d9d00a0..8cd793b 100644 (file)
@@ -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 @@ putting strings together, or by taking them apart.
 
 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 @@ position up to which the substring is copied.  The character whose index
 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 @@ This function returns @code{t} if @var{object} is an integer or character.
 @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 @@ integer that can be converted into one.
 @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 @@ no characters is less than any other string.
 (string< "abc" "ab")
      @result{} nil
 (string< "" "")
-     @result{} nil                   
+     @result{} nil
 @end group
 @end example
 @end defun
@@ -560,13 +562,13 @@ See also the function @code{format} in @ref{Formatting Strings}.
 
 @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 @@ in how they use the result of formatting.
 
 @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 @@ operation} error.
 (format "The buffer object prints as %s." (current-buffer))
      @result{} "The buffer object prints as #<buffer strings.texi>."
 
-(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 @@ An optional precision, preceded by a @samp{.} character.
 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 @@ only 3 letters, so 4 blank spaces are inserted for padding.  In the
 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 @@ conversions.
 
 @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 @@ modify the strings that are passed to them as arguments.
   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 @@ corresponding lower case character. (This value is actually an integer
 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 @@ letter, then the value equals the original character.
 @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 @@ the corresponding upper case character. (This value is actually an
 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 @@ is not a letter, then the value equals the original character.
 @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 @@ table (@pxref{Syntax Class Table}).
 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 @@ This predicate returns non-@code{nil} if @var{object} is a valid case
 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 @@ character.  Higher-level Lisp functions are provided for
 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 @@ This function makes a new, empty char table of type @var{type}.
 @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 vector of two elements: a two-octet charset and a row number
 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
index ef25af8..268648d 100644 (file)
@@ -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 @@ stored in the property list @var{plist}.  For example,
 @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 @@ in the place where you got @var{plist}.  For example,
 (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}
index 82b93a0..2bbbdd6 100644 (file)
@@ -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 @@ prefix (@samp{'}).  @xref{Motion and Syntax}.
   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 @@ standard syntax table says about them.
 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 @@ signaled if @var{char} is not a character.
 @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 @@ character, @samp{)}.
 @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 result is a list of eight elements describing the final state of
 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
index 7aad873..b4ec428 100644 (file)
@@ -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 @@ a buffer other than the current one (otherwise you could just
 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 @@ This is also responsible for calling @code{blink-paren-function} when
 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 @@ cases.
   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 @@ auto-saving of that buffer ``because it has shrunk''.  However,
 @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 @@ You thought
 @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 @@ After the lines are joined, the function @code{fixup-whitespace} is
 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 @@ This has too many spaces at the start of (this list)
 ---------- Buffer: foo ----------
 @end group
 @end smallexample
-@end defun
+@end deffn
 
 @deffn Command just-one-space
 @comment !!SourceFile simple.el
@@ -738,7 +741,7 @@ adds it to the most recent element.  It uses the @code{last-command}
 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 @@ level, but still convenient for use in Lisp programs.  They take care of
 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.
+returns the @var{count}th kill, counting from the current yanking pointer.
 
-If @var{n} is zero, indicating a request for the latest kill,
+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 @@ to the newly killed text.
 
   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 @@ rotate the ring so that the newly killed text is at the front.
 
   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 @@ kill-ring       kill-ring-yank-pointer
   |               |
   |     ___ ___    --->  ___ ___      ___ ___
    --> |___|___|------> |___|___|--> |___|___|--> 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 @@ This kind of element records a previous value of point.  Ordinary cursor
 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 @@ was previously visited or saved.  @code{primitive-undo} uses those
 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 @@ In an interactive call, @var{buffer-or-name} is the current buffer.
 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 @@ This function returns @code{nil}.  It cannot be called interactively.
 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 @@ If @var{force} is non-@code{nil}, that says to fix the line's
 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 @@ definition for @code{sort-lines}:
 @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 @@ its @code{sort-subr} call looks like this:
 @example
 @group
 (sort-subr reverse
-           (function 
-            (lambda () 
+           (function
+            (lambda ()
               (skip-chars-forward "\n \t\f")))
            'forward-paragraph)
 @end group
@@ -1582,16 +1594,16 @@ region.  Fields are separated by whitespace and numbered starting from
 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 @@ occupying a number of columns that depends on the value of
 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 @@ converts the tab into spaces so that it can move precisely to column
 @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 @@ count from zero at the left margin.
 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 @@ contents are entirely blank, then this is the horizontal position of the
 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 @@ is reached.  If @var{minimum} is specified and non-@code{nil}, then at
 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 @@ This command calls the function in @code{indent-line-function} to
 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 @@ In Mail mode, @kbd{C-c C-y} (@code{mail-yank-original}) uses
 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 @@ interactively.
   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 @@ buffer.  @xref{Character Case}, for case conversion commands that work
 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 @@ This Is The Contents Of The 5th Foo.
 @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 @@ When @code{downcase-region} is called interactively, @var{start} and
 @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 @@ When @code{upcase-region} is called interactively, @var{start} and
 @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 @@ When @code{capitalize-word} is called interactively, @var{count} is
 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 @@ When @code{downcase-word} is called interactively, @var{count} is set
 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 @@ functions to examine the properties of a number of characters at once.
 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 @@ the @var{prop} property of that symbol.
 @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 @@ properties are not identical to those of the character just after
 @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 @@ returns the position of the first character beyond @var{pos} whose
 @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 @@ equals @var{pos} only if @var{limit} equals @var{pos}.
 @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 @@ The predefined properties are the same as those for extents.
 @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 @@ uses may be possible.
 
 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 @@ This function applies a translation table to the characters in the
 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 @@ the register.  A marker represents a position.  A list represents a
 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}.
+This command restores the status recorded in register @var{register}.
 
-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{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{reg} contains a window configuration or a frame configuration.
+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 @@ changed in the future.
 @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 @@ target digest.  MD5 is used heavily by various authentication schemes.
 
 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 @@ binary bodies, and to encode binary characters in message headers.
 
 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 @@ an error.
 
 The function can also be used interactively, in which case it works on
 the currently active region.
-@end defun
+@end deffn
 
-@defun base64-encode-string string
+@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 @@ For Mule, the same considerations apply as for
 @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 @@ returned.
 (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
index 5e952ab..eb4be94 100644 (file)
@@ -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 @@ standard names instead.
 
 @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 @@ may be worth rearranging a data structure so that one of these primitive
 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 @@ Do not start or end a documentation string with whitespace.
 @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
index 3d725a6..7cf6a90 100644 (file)
@@ -210,7 +210,7 @@ the user to choose where the toolbar should go.
 
 @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 @@ Specifier for the toolbar at the right edge of the frame.
 @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 @@ Thus, for example, if you set the frame width to 80 characters and the
 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
index 0140d16..0ce1334 100644 (file)
@@ -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 @@ the callback is specified with a Lisp symbol (the symbol should
 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 @@ stored in the first argument of the message.
        (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 @@ stored in the first argument of the message.
 
 @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 @@ nulls (use @code{arg_bval}).
 @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 @@ string to display.
 
 @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 @@ chapter 3 of the @cite{ToolTalk Programmer's Guide}.
 @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 @@ argument.  It will be called each time the pattern matches an incoming
 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 @@ Create a new ToolTalk pattern and initialize its session attribute to
 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
index d5d5ab5..6d3cc9d 100644 (file)
@@ -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 @@ which is 2, not the new value, 1.
      @result{} 2
 @end group
 @group
-(let ((Y 1) 
+(let ((Y 1)
       (Z Y))
   (list Y Z))
      @result{} (1 2)
@@ -635,7 +635,7 @@ The value of the @code{setq} form is the value of the last @var{form}.
 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 @@ second @var{symbol} is set, and so on:
 @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 @@ local to the current buffer at the time.
 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 @@ the current buffer is used.
     (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 @@ cannot be a built-in variable, a variable that has a buffer-local value
 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
index 287184b..b05616e 100644 (file)
@@ -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 @@ displayed in windows.
 * 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 @@ life.  (@xref{Deleting Windows}.)
 @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 @@ but not always: @code{pop-to-buffer} and @code{display-buffer}
 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 @@ lines high by 80 columns wide; then the window is split.
 
 @group
 ;; @r{Returns window created}
-(setq w2 (split-window w 15))   
+(setq w2 (split-window w 15))
      @result{} #<window 28 on windows.texi>
 @end group
 @group
@@ -220,8 +202,8 @@ The frame looks like this:
 
 @smallexample
 @group
-         __________ 
-        |          |  line 0  
+         __________
+        |          |  line 0
         |    w     |
         |__________|
         |          |  line 15
@@ -259,8 +241,8 @@ Now, the screen looks like this:
 @smallexample
 @group
      column 35
-         __________ 
-        |   |      |  line 0  
+         __________
+        |   |      |  line 0
         | w |  w3  |
         |___|______|
         |          |  line 15
@@ -281,7 +263,7 @@ characters; see @ref{Display Tables}.
 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 @@ Here is the complete function definition for it:
 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 @@ part of the documentation string):
 @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 @@ This function returns @code{nil} if @var{window} is deleted, and
 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 @@ deleting the other windows in that frame.  If @var{window} is omitted or
 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 @@ where there is only one window), then the frame reverts to having a
 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:
 
-@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
+@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.
+
+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 @@ appears in @var{window} (on redisplay).  The buffer being displayed in
 
 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 @@ The return value is @var{window}.
 @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 @@ The selected window can be the least recently used window if it is the
 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}.
+
+@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
 
-@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
 @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 @@ If there are two windows of the same size, then the function returns
 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 @@ horizontal, the ordering is top to bottom in the left part, and so on.
 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 @@ minibuffer window even if it is not active.
 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 existing frames.
 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 @@ buffer @samp{windows.texi}:
 @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 @@ The functions described there are easier to use than these, but they
 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 @@ selected window.
 @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 @@ buffer on.
 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 @@ display a buffer in---@code{display-buffer}.  All the higher-level
 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 @@ appear in two windows at once.  Otherwise, if @var{buffer-or-name} is
 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 @@ point and the buffer's point always move together; they remain equal.
 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 @@ inevitably, at the beginning of a text line.
 @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 @@ For a realistic example, see the description of @code{count-lines} in
 @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 @@ names that fit the user's point of view.
 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 @@ bottom of the window appear instead at the top.  The default value is
 @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 @@ separate key binding to do this.  For example,
 (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 @@ far as to reduce the net horizontal scroll to zero.  There is no limit
 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 @@ is off the screen due to horizontal scrolling:
 @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 @@ and divider, if any, is not counted.
 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 @@ used.
 
   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 @@ that change the size of windows and low-level functions that access
 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 @@ If the requested size would exceed that of the window's frame, then the
 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 @@ It could be defined as follows:
 @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 previously saved.
 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
index 1cadf17..04a521d 100644 (file)
@@ -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 @@ This function returns the contents of cut buffer number @var{n}. (This
 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 @@ be made before the connection to the X server is initialized, that is,
 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 @@ get information about the capabilities and origin of the X server
 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
index d7219b1..1cfd3bf 100644 (file)
@@ -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 @@ buffer is by using the @b{Describe Variable} option from the @b{Help}
 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 @@ command. Similarly, you can also remove a directory by using the command
 @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 @@ screen with its name in the mode-line. If the filename you specify
 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 @@ This command will visit a file in another frame
 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 @@ Wrote /usr/workspace/myfile.texinfo
 @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 @@ message:
 
 @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 @@ Save file /usr/workspace/myfile.texinfo? (y or n)
 
 @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 @@ Write file: /usr/workspace/
 @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 @@ documentation for this variable. Its default value should be
 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 @@ being saved automatically. The auto saved files are named by putting the
 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,9 +230,9 @@ the user about the lock and provide some
 options. For more information on protection against simultaneous
 editing, @xref{Interlocking,,,xemacs,XEmacs User's Manual}.
 
-   
 
-   
+
+
 
 
 
index cedc71e..d4cc7f6 100644 (file)
@@ -12,9 +12,9 @@ of the text they are searching, i.e. if you are searching for "String",
 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 @@ string which has been found so far. If you find the correct match just
 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 @@ you an error message.
    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 @@ you have typed the whole string you can use the following commands:
 @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 @@ direction.
 @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 the spelling of a word or a region. You can use menus to
 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.
index 46f6bd1..4a797d5 100644 (file)
@@ -94,7 +94,7 @@ implement forms are:
 
 @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 ::= (NAME [KEYWORD ARGUMENT]... ARGS)
      |   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 @@ The value of the symbol is expanded according to this table.
 @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 @@ Should be a function called with two arguments, the widget and a value,
 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 @@ The following extra properties are recognized.
 
 @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 @@ which matches everything.
 @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
 
index 7014895..d683baa 100644 (file)
@@ -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 <rossini@@biostat.washington.edu>
 @author Ben Wing <ben@@xemacs.org>
@@ -148,6 +148,8 @@ Installation and Trouble Shooting
 * 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 @@ Trouble Shooting:
 * 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 @@ developers responsible for the 19.16/20.x releases are:
 
 @itemize @bullet
 @item @email{martin@@xemacs.org, Martin Buchholz}
-@ifhtml
+@html
 <br><img src="mrb.jpeg" alt="Portrait of Martin Buchholz"><br>
-@end ifhtml
+@end html
 
 
 @item @email{steve@@xemacs.org, Steve Baur}
 
-@ifhtml
+@html
 <br><img src="steve.gif" alt="Portrait of Steve Baur"><br>
-@end ifhtml
+@end html
 
 
 @item @email{hniksic@@xemacs.org, Hrvoje Niksic}
 
-@ifhtml
+@html
 <br><img src="hniksic.jpeg" alt="Portrait of Hrvoje Niksic"><br>
-@end ifhtml
+@end html
 
 @end itemize
 
@@ -811,26 +814,26 @@ The developers responsible for the 19.14 release are:
 
 @itemize @bullet
 @item @email{cthomp@@xemacs.org, Chuck Thompson}
-@ifhtml
+@html
 <br><img src="cthomp.jpeg" alt="Portrait of Chuck Thompson"><br>
-@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
 <br><img src="wing.gif" alt="Portrait of Ben Wing"><br>
-@end ifhtml
+@end html
 
 @end itemize
 
 
 @itemize @bullet
 @item @email{jwz@@jwz.org, Jamie Zawinski}
-@ifhtml
+@html
 <br><img src="jwz.gif" alt="Portrait of Jamie Zawinski"><br>
-@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 @@ Installation:
 * 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 @@ Trouble Shooting:
 * 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 @@ check to see if you've put DNS in the shared libc and will then proceed
 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 @@ cp lib-src/DOC-19.16-XEmacs
 @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 <tarballname> | 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 @@ and uncomment the line that reads:
 @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 @@ on the network, you may be missing a "localhost" entry in your
 
 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
 
index f7fd2ac..28a6814 100644 (file)
@@ -1,5 +1,5 @@
 
-@node Abbrevs, Picture, Packages, Top
+@node Abbrevs, Picture, Running, Top
 @chapter Abbrevs
 @cindex abbrevs
 @cindex expansion (of abbrevs)
index 542d289..0d6b4e5 100644 (file)
@@ -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
index e7d3589..479a53d 100644 (file)
@@ -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 is finished.  You do not have to keep this buffer visible;
 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
index 7ee4fcf..ba63163 100644 (file)
@@ -212,8 +212,10 @@ non-@code{nil}, the @code{find-file} command will check the
 @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
index d64afe4..6513323 100644 (file)
@@ -21,6 +21,9 @@ Perform standard editing operations, such as
 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
index 15197a9..ccd8f07 100644 (file)
@@ -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 @@ local needs with safe removal of unnecessary code.
 * 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 @@ changed packages.
 
 @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 @@ Runs the rules @code{srckit} followed by @code{binkit}.  This is
 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
+
index f7bd171..dde0945 100644 (file)
@@ -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
 
index 17e903e..2dd07c3 100644 (file)
@@ -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 @@ show different parts of it, because each window has its own value of point.
  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 @@ order, generally top to bottom and left to right.  From the rightmost
 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 @@ are no more windows.
   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 @@ buffer to select.
 @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 @@ work using this function.
 
 @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}).
index 8dc6609..abb9efb 100644 (file)
@@ -129,7 +129,8 @@ Important General Concepts
 * 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 @@ Advanced Features
 * 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 @@ Pull-down Menus
 * 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 @@ Lisp Libraries
 * 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.
index 48459a7..2c5bac1 100644 (file)
@@ -66,7 +66,7 @@ determined.  Else assume binary coding if all else fails.
        /* 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 @@ determined.  Else assume binary coding if all else fails.
        /* 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);
index d91476c..90971b2 100644 (file)
@@ -1,3 +1,27 @@
+2000-11-14  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.37 is released.
+
+2000-10-27  Martin Buchholz  <martin@xemacs.org>
+
+       * config.h: Oops, _getpt ==> _getpty
+
+2000-10-11  Martin Buchholz  <martin@xemacs.org>
+
+       * config.h (HAVE_XFREE86): Remove.
+       (HAVE_XREGISTERIMINSTANTIATECALLBACK): New.
+       (XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE): New.
+
+2000-10-10  Martin Buchholz  <martin@xemacs.org>
+
+       * config.h:
+       Sync with pty/signaling related changes to src/config.h.in
+
+2000-10-07  Adrian Aichner  <aichner@ecf.teradyne.com>
+
+       * xemacs.mak (default): Enforce runnig nmake from xemacs.mak's
+       directory to avoid problems with relative paths.
+
 2000-10-04  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.36 is released.
index dba6c22..439eda5 100644 (file)
--- a/nt/README
+++ b/nt/README
@@ -137,7 +137,7 @@ If you want support for X you will also need:
     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.
 
index 34ac06b..6dd1f1c 100644 (file)
@@ -92,8 +92,8 @@ Boston, MA 02111-1307, USA.  */
 #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 @@ Boston, MA 02111-1307, USA.  */
 /* 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 @@ Boston, MA 02111-1307, USA.  */
 #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
index b0ffd19..f081407 100644 (file)
 
 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
index 008689b..b069424 100644 (file)
@@ -1006,9 +1006,9 @@ list6 (Lisp_Object obj0, Lisp_Object obj1, Lisp_Object obj2, Lisp_Object obj3,
 }
 
 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 @@ Return a new list of length LENGTH, with each element being INIT.
     size_t size = XINT (length);
 
     while (size--)
-      val = Fcons (init, val);
+      val = Fcons (object, val);
     return val;
   }
 }
@@ -1128,13 +1128,13 @@ make_vector_internal (size_t sizei)
 }
 
 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 @@ make_vector (size_t length, Lisp_Object init)
 }
 
 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 @@ make_bit_vector_internal (size_t sizei)
 }
 
 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);
+  CHECK_BIT (bit);
 
-  if (ZEROP (init))
+  if (ZEROP (bit))
     memset (p->bits, 0, num_longs * sizeof (long));
   else
     {
@@ -1342,19 +1342,20 @@ make_bit_vector_from_byte_vector (unsigned char *bytevec, size_t length)
 }
 
 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 @@ set_string_char (Lisp_String *s, Charcount i, Emchar c)
 #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 @@ Make a copy of OBJECT in pure storage.
 Recursively copies contents of vectors and cons cells.
 Does not copy symbols.
 */
-       (obj))
+       (object))
 {
-  return obj;
+  return object;
 }
 
 \f
@@ -2679,12 +2680,10 @@ sweep_bit_vectors_1 (Lisp_Object *prev,
 #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 = &current_##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 @@ do {                                                                      \
              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 @@ void
 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 this value exceeds `gc-cons-threshold', a garbage collection happens.
 }
 
 #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.
index 2a97d62..1ba488c 100644 (file)
@@ -402,11 +402,10 @@ assoc_ignore_text_properties (REGISTER Lisp_Object key, Lisp_Object list)
 #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 @@ NAME may also be a buffer; if so, the value is that buffer.
 
   /* #### 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 @@ The value is never nil.
 
 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 @@ as BUFFER means use current buffer.
      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 @@ VISIBLE-OK.
 }
 \f
 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 @@ No argument or nil as argument means do this for the current buffer.
 }
 
 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 @@ with `delete-process'.
     /* #### 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 @@ Use `switch-to-buffer' or `pop-to-buffer' to switch buffers permanently.
 
 \f
 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 @@ dfc_convert_to_external_format (dfc_conversion_type source_type,
   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 @@ dfc_convert_to_internal_format (dfc_conversion_type source_type,
 
       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 @@ dfc_convert_to_internal_format (dfc_conversion_type source_type,
   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 @@ the read-only state of the buffer.  See also `kill-all-local-variables'.
   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 @@ will never be a symbolic link anywhere in its directory path.
 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 @@ and VALUE is the old value.
 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 @@ The default is t, which means that text is invisible
 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 "...".
index 25bbd0c..b3abc7b 100644 (file)
@@ -53,6 +53,9 @@ Lisp_Object Vmark_even_if_inactive;
 #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 @@ when reading the arguments.
            }
          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 @@ when reading the arguments.
                        directly */
                    break;
                }
-#endif /* 1 */
              arg_from_tty = 1;
              break;
            }
@@ -952,7 +946,7 @@ when reading the arguments.
 }
 
 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")'.
 */
index b908a3a..35a62a7 100644 (file)
@@ -331,9 +331,6 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you
     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 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you
 
   {
     int nread;
-    int first = 1;
     int total_read = 0;
     Lisp_Object instream;
     struct gcpro ngcpro1;
@@ -536,7 +532,6 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you
 
        if (!NILP (display) && INTERACTIVE)
          {
-           first = 0;
            redisplay ();
          }
       }
index 88fe83e..49cf028 100644 (file)
@@ -30,28 +30,29 @@ Boston, MA 02111-1307, USA.  */
 enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP};
 \f
 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 @@ casify_object (enum case_action flag, Lisp_Object obj, Lisp_Object buffer)
       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);
 }
 \f
 /* 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, start, end);
-  record_change (buf, start, end - start);
+  mccount = begin_multiple_change (buf, s, e);
+  record_change (buf, s, e - s);
 
-  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 @@ casify_region_internal (enum case_action flag, Lisp_Object b, Lisp_Object e,
        }
 
       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 @@ casify_region_internal (enum case_action flag, Lisp_Object b, Lisp_Object e,
 }
 
 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 @@ These arguments specify the starting and ending character numbers of
 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 @@ These arguments specify the starting and ending character numbers of
  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 @@ In programs, give two arguments, the starting and ending
  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 @@ In programs, give two arguments, the starting and ending
  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);
 }
 
 \f
@@ -288,39 +288,39 @@ casify_word (enum case_action flag, Lisp_Object arg, Lisp_Object buffer)
 }
 
 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);
 }
 \f
 
index 2d52a84..4bb1cde 100644 (file)
@@ -55,16 +55,16 @@ static void compute_trt_inverse (Lisp_Object trt, Lisp_Object inverse);
 #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 @@ See `set-case-table' for more information on these data structures.
 }
 
 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 @@ static Lisp_Object set_case_table (Lisp_Object table, int standard);
 
 
 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 @@ BUG: Under XEmacs/Mule, translations to or from non-ASCII characters
  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
index e015320..80a99dc 100644 (file)
@@ -549,9 +549,13 @@ Don't call this unless you know what you're doing.
          }
       }
 
+#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.
index c902092..82e7568 100644 (file)
@@ -46,31 +46,31 @@ Lisp_Object Vself_insert_face_command;
 Lisp_Object Vauto_fill_chars;
 \f
 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 @@ On reaching end of buffer, stop and signal error.
 }
 
 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 @@ If BUFFER is nil, the current buffer is assumed.
 
 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 @@ This function does not move point.
 
 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 @@ N was explicitly specified.
     }
   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 @@ static void internal_self_insert (Emchar ch, int noautofill);
 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 @@ Whichever character you type to run this command is inserted.
 
   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 @@ internal_self_insert (Emchar c1, int noautofill)
 /* (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;
 }
 \f
@@ -506,7 +507,7 @@ More precisely, a char with closeparen syntax is self-inserted.
 
   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;
index 1d1a9bb..357df62 100644 (file)
@@ -34,12 +34,15 @@ Boston, MA 02111-1307, USA.  */
 #ifndef NOT_C_CODE
 #ifdef __GNUC__
 #define alloca __builtin_alloca
-#elif HAVE_ALLOCA_H
+#elif defined __DECC
+#include <alloca.h>
+#pragma intrinsic(alloca)
+#elif defined HAVE_ALLOCA_H
 #include <alloca.h>
 #elif defined(_AIX)
 #pragma alloca
 #elif ! defined (alloca)
-char *alloca ();
+void *alloca ();
 #endif
 #endif /* C code */
 
@@ -172,8 +175,9 @@ char *alloca ();
 #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 @@ char *alloca ();
 
 /* 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 @@ char *alloca ();
 #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 @@ extern "C" {
 
    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
index 7077b3c..a02f7f4 100644 (file)
@@ -279,17 +279,17 @@ void
 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;
 
index dcc7407..f7bcdfb 100644 (file)
@@ -43,31 +43,43 @@ x_initially_selected_for_input (struct console *con)
   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 @@ x_semi_canonicalize_console_connection (Lisp_Object connection,
   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 @@ x_canonicalize_device_connection (Lisp_Object connection, Error_behavior errb)
   split_up_display_spec (connection, &hostname_length, &display_length,
                         &screen_length);
 
-  screen_str = build_string (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));
index ab147bc..8e79a8d 100644 (file)
@@ -196,7 +196,7 @@ valid_console_type_p (Lisp_Object type)
 }
 
 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 @@ DEFUN ("cdfw-console", Fcdfw_console, 1, 1, 0, /*
 Given a console, device, frame, or window, return the associated console.
 Return nil otherwise.
 */
-       (obj))
+       (object))
 {
-  return CDFW_CONSOLE (obj);
+  return CDFW_CONSOLE (object);
 }
 
 \f
@@ -307,7 +307,7 @@ Return non-nil if OBJECT is a console that has not been deleted.
 }
 
 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 @@ Value is `tty' for a tty console (a character-only terminal),
 }
 
 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 @@ Return a list of all consoles.
 
 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 @@ Disable input on console CONSOLE.
 }
 
 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 @@ See also `current-input-mode'.
       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
 
index e7750b6..9cf085f 100644 (file)
@@ -144,9 +144,9 @@ allocate_database (void)
 }
 
 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 @@ finalize_database (void *header, int for_disksave)
 
   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 @@ Return the subtype of database DATABASE, if any.
 }
 
 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 @@ Return the filename associated with the database DATABASE.
 }
 
 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
index b02ecc3..16c10a6 100644 (file)
@@ -227,9 +227,9 @@ DEFUN ("dfw-device", Fdfw_device, 1, 1, 0, /*
 Given a device, frame, or window, return the associated device.
 Return nil otherwise.
 */
-       (obj))
+       (object))
 {
-  return DFW_DEVICE (obj);
+  return DFW_DEVICE (object);
 }
 
 \f
index 27fbad7..62c70e2 100644 (file)
@@ -157,6 +157,9 @@ mswindows_is_dialog_msg (MSG *msg)
     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;
       }
index 474c828..69142b7 100644 (file)
@@ -179,18 +179,18 @@ static Lisp_Object file_name_completion (Lisp_Object file,
                                          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.
-
-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.
+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.
+
+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 @@ to the names of directories.
      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 @@ to the names of directories.
   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 @@ static Lisp_Object user_name_completion (Lisp_Object user,
                                          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
index d683fba..88e95af 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -138,7 +138,7 @@ unparesseuxify_doc_string (int fd, EMACS_INT position,
     }
 
   /* #### 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 @@ read_doc_string (Lisp_Object filepos)
 
 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 @@ This is like `get', but it can refer to strings stored in the
 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 @@ translation.
 
   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 @@ translation.
 #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 @@ Return a new string which is STRING with substrings of the form \\=\\[COMMAND]
 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 \\=\\<MAPVAR> 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 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
   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 \\<mapname> construct in STR itself..  */
+     or from a \\<mapname> 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 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
   */
 #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 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
            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 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
        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 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
 
            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 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
            tem = make_string_from_buffer (buf_, BUF_BEG (buf_),
                                           BUF_Z (buf_) - BUF_BEG (buf_));
            Ferase_buffer (buffer);
-           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;
-
-           /* Reset STRDATA in case gc relocated it.  */
-           strdata = XSTRING_DATA (str);
-
-           break;
          }
+         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;
+
+         /* Reset STRDATA in case gc relocated it.  */
+         strdata = XSTRING_DATA (string);
+
+         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;
index 1129eb1..7a8df46 100644 (file)
@@ -99,26 +99,26 @@ init_editfns (void)
 }
 \f
 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 @@ DEFUN ("string-to-char", Fstring_to_char, 1, 1, 0, /*
 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 @@ DEFUN ("temp-directory", Ftemp_directory, 0, 0, 0, /*
 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 @@ Jamie thinks this is bogus. */
 
 \f
 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 @@ This is highly bogus, however, and XEmacs always behaves as if
 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 @@ text into.  If BUFFER is nil, the current buffer is assumed.
   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 @@ text into.  If BUFFER is nil, the current buffer is assumed.
       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 @@ If BUFFER is nil, the current buffer is assumed.
    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 @@ Returns the number of substitutions performed.
 
 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 @@ See also `save-restriction'.
 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);
-
-  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);
+  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, 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 @@ Both arguments must be characters (i.e. NOT integers).
 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 @@ DEFUN ("char=", Fchar_Equal, 2, 2, 0, /*
 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;
 }
 \f
 #if 0 /* Undebugged FSFmacs code */
@@ -2367,36 +2368,36 @@ Transpose region START1 to END1 with START2 to END2.
 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 @@ More specifically:
 
  - 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.
 
index c26272d..c118529 100644 (file)
@@ -120,7 +120,7 @@ print_ldap (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
   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);
 }
 
index 36b51de..2fb2c04 100644 (file)
@@ -71,9 +71,9 @@ struct Lisp_Hash_Table
 #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 @@ internal_hash (Lisp_Object obj, int depth)
 
 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))
 {
index abc8bfe..c8e3b40 100644 (file)
@@ -385,8 +385,8 @@ int nodumpfile;
 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 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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 @@ Remember to set `command-line-processed' to nil before dumping
 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 @@ and announce itself normally when it is run.
   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 @@ and announce itself normally when it is run.
   UNGCPRO;
 
   {
-    char *intoname_ext;
-    char *symname_ext;
+    char *filename_ext;
+    char *symfile_ext;
 
-    LISP_STRING_TO_EXTERNAL (intoname, intoname_ext, Qfile_name);
+    LISP_STRING_TO_EXTERNAL (filename, filename_ext, Qfile_name);
 
-    if (STRINGP (symname))
-      LISP_STRING_TO_EXTERNAL (symname, symname_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 @@ and announce itself normally when it is run.
      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 @@ This is mainly meant for use in path searching.
 
   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 @@ especially executable programs intended for XEmacs to invoke.
 
   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 @@ configure's idea of what EXEC-DIRECTORY will be.
 
   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 @@ configure's idea of what LISP-DIRECTORY will be.
 
   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 @@ functions `locate-data-file' and `locate-data-directory' and the variable
 
   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 @@ or were installed as packages, and are intended for XEmacs to use.
 
   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 @@ configure's idea of what SITE-DIRECTORY will be.
 
   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 @@ configure's idea of what SITE-DIRECTORY will be.
 
   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 @@ configure's idea of what DOC-DIRECTORY will be.
 
   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 @@ configure's idea of what EXEC-PREFIX-DIRECTORY will be.
 
   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
index eb03bc8..6458319 100644 (file)
@@ -79,7 +79,7 @@ XEmacs, and then reload those new or changed modules that are required.
 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 @@ referring to variables inside the module code.  However, once you have
 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;
index d597719..ddbb49d 100644 (file)
@@ -687,20 +687,29 @@ x_handle_sticky_modifiers (XEvent *ev, struct device *d)
     { /* 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 @@ x_handle_sticky_modifiers (XEvent *ev, struct device *d)
           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 @@ x_handle_sticky_modifiers (XEvent *ev, struct device *d)
          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 @@ do {                                                \
          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++)
index 2dfb2fe..a09c81f 100644 (file)
@@ -1276,6 +1276,8 @@ mswindows_drain_windows_queue (void)
     {
       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 @@ mswindows_wnd_proc (HWND hwnd, UINT message_, WPARAM wParam, LPARAM lParam)
          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*/
index e8fa7f8..3dcab79 100644 (file)
@@ -533,6 +533,7 @@ EXFUN (Fmake_event, 2);
 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
index 910c0aa..a79f7d6 100644 (file)
@@ -3426,7 +3426,7 @@ DEFUN ("next-extent-change", Fnext_extent_change, 1, 2, 0, /*
 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 @@ canonicalize_extent_property (Lisp_Object prop, Lisp_Object value)
 
 /* 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 @@ For a list of built-in properties, see `set-extent-property'.
 
 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 @@ Scans characters forward from POS till it finds a change in the PROP
  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 @@ Scans characters backward from POS till it finds a change in the PROP
  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
index 0d5f503..91d1517 100644 (file)
@@ -596,7 +596,7 @@ face_property_matching_instance (Lisp_Object face, Lisp_Object property,
 
 \f
 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 @@ other non-nil value both permanent and temporary are included.
 }
 
 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 @@ get_extent_fragment_face_cache_index (struct window *w,
       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;
     }
 }
 
index 9fce353..aaca9ef 100644 (file)
@@ -176,68 +176,47 @@ EXFUN (Fcopy_coding_system, 2);
 #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 @@ character set.  Recognized properties are:
 
 '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 @@ if TYPE is 'ccl:
          }
        else if (EQ (type, Qccl))
          {
+           Lisp_Object sym;
+           struct ccl_program test_ccl;
+           Extbyte *suffix;
+
+           /* Check key first.  */
            if (EQ (key, Qdecode))
-             {
-               CHECK_VECTOR (value);
-               CODING_SYSTEM_CCL_DECODE (codesys) = value;
-             }
+             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_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 @@ mask_has_at_most_one_bit_p (int mask)
 }
 
 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 @@ detect_eol_type (struct detection_state *st, const unsigned char *src,
 
 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 @@ detect_coding_type (struct detection_state *st, const Extbyte *src,
     {
       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 @@ determine_real_coding_system (Lstream *stream, Lisp_Object *codesys_in_out,
 
 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 @@ type.  Optional arg BUFFER defaults to the current buffer.
   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 @@ decoding_reader (Lstream *stream, unsigned char *data, size_t size)
        /* 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 @@ decoding_writer (Lstream *stream, const unsigned char *data, size_t size)
   /* 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 @@ make_decoding_output_stream (Lstream *stream, Lisp_Object codesys)
    be used for both reading and writing. */
 
 static void
-mule_decode (Lstream *decoding, const unsigned char *src,
-            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 @@ mule_decode (Lstream *decoding, const unsigned char *src,
       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 @@ make_encoding_output_stream (Lstream *stream, Lisp_Object codesys)
    Store the encoded data into DST. */
 
 static void
-mule_encode (Lstream *encoding, const unsigned char *src,
-            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 @@ mule_encode (Lstream *encoding, const unsigned char *src,
       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 @@ text.  BUFFER defaults to the current buffer if unspecified.
   ((c) >= 0xA1 && (c) <= 0xDF)
 
 static int
-detect_coding_sjis (struct detection_state *st, const unsigned char *src,
-                   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 @@ detect_coding_sjis (struct detection_state *st, const unsigned char *src,
 /* Convert Shift-JIS data to internal format. */
 
 static void
-decode_coding_sjis (Lstream *decoding, const unsigned char *src,
-                   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 @@ decode_coding_sjis (Lstream *decoding, const unsigned char *src,
 
   while (n--)
     {
-      c = *src++;
+      unsigned char c = *(unsigned char *)src++;
 
       if (ch)
        {
@@ -3039,10 +3040,9 @@ decode_coding_sjis (Lstream *decoding, const unsigned char *src,
 /* Convert internally-formatted data to Shift-JIS. */
 
 static void
-encode_coding_sjis (Lstream *encoding, const unsigned char *src,
-                   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 @@ encode_coding_sjis (Lstream *encoding, const unsigned char *src,
 
   while (n--)
     {
-      c = *src++;
+      Bufbyte c = *src++;
       if (c == '\n')
        {
          if (eol_type != EOL_LF && eol_type != EOL_AUTODETECT)
@@ -3119,16 +3119,16 @@ Return the corresponding character.
 }
 
 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 @@ Return the corresponding character code in SHIFT-JIS as a cons of two bytes.
 } while (0)
 
 static int
-detect_coding_big5 (struct detection_state *st, const unsigned char *src,
-                   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 @@ detect_coding_big5 (struct detection_state *st, const unsigned char *src,
 /* Convert Big5 data to internal format. */
 
 static void
-decode_coding_big5 (Lstream *decoding, const unsigned char *src,
-                   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 @@ decode_coding_big5 (Lstream *decoding, const unsigned char *src,
 
   while (n--)
     {
-      c = *src++;
+      unsigned char c = *(unsigned char *)src++;
       if (ch)
        {
          /* Previous character was first byte of Big5 char. */
@@ -3319,8 +3315,8 @@ decode_coding_big5 (Lstream *decoding, const unsigned char *src,
 /* Convert internally-formatted data to Big5. */
 
 static void
-encode_coding_big5 (Lstream *encoding, const unsigned char *src,
-                   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 @@ Return the corresponding character.
 }
 
 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 @@ encode_ucs4 (Lisp_Object charset,
 }
 
 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 @@ detect_coding_ucs4 (struct detection_state *st, const unsigned char *src,
 }
 
 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 @@ decode_coding_ucs4 (Lstream *decoding, const unsigned char *src,
 
   while (n--)
     {
-      unsigned char c = *src++;
+      unsigned char c = *(unsigned char *)src++;
       switch (counter)
        {
        case 0:
@@ -3647,8 +3642,8 @@ decode_coding_ucs4 (Lstream *decoding, const unsigned char *src,
 }
 
 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 @@ encode_coding_ucs4 (Lstream *encoding, const unsigned char *src,
                            {
                              /* #### 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 @@ encode_coding_ucs4 (Lstream *encoding, const unsigned char *src,
 /************************************************************************/
 
 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 @@ detect_coding_utf8 (struct detection_state *st, const unsigned char *src,
 }
 
 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 @@ decode_coding_utf8 (Lstream *decoding, const unsigned char *src,
 
   while (n--)
     {
-      unsigned char c = *src++;
+      unsigned char c = *(unsigned char *)src++;
       switch (counter)
        {
        case 0:
@@ -3935,8 +3929,8 @@ encode_utf8 (Lisp_Object charset,
 }
 
 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 @@ parse_iso2022_esc (Lisp_Object codesys, struct iso2022_decoder *iso,
 }
 
 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 @@ detect_coding_iso2022 (struct detection_state *st, const unsigned char *src,
 
   while (n--)
     {
-      int c = *src++;
+      unsigned char c = *(unsigned char *)src++;
       if (c >= 0xA0)
        {
          mask &= ~CODING_CATEGORY_ISO_7_MASK;
@@ -4845,8 +4838,8 @@ ensure_correct_direction (int direction, Lisp_Coding_System *codesys,
 /* Convert ISO2022-format data to internal format. */
 
 static void
-decode_coding_iso2022 (Lstream *decoding, const unsigned char *src,
-                      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 @@ decode_coding_iso2022 (Lstream *decoding, const unsigned char *src,
 
   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 @@ ensure_shift_out (struct encoding_stream *str, unsigned_char_dynarr *dst)
 /* Convert internally-formatted data to ISO2022 format. */
 
 static void
-encode_coding_iso2022 (Lstream *encoding, const unsigned char *src,
-                      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 @@ encode_coding_iso2022 (Lstream *encoding, const unsigned char *src,
    contain all 256 possible byte values and that are not to be
    interpreted as being in any particular decoding. */
 static void
-decode_coding_no_conversion (Lstream *decoding, const unsigned char *src,
-                            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 @@ decode_coding_no_conversion (Lstream *decoding, const unsigned char *src,
 
   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 @@ decode_coding_no_conversion (Lstream *decoding, const unsigned char *src,
 }
 
 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);
index 49f9262..a726938 100644 (file)
@@ -94,6 +94,12 @@ Lisp_Object Vwrite_region_annotations_so_far;
 /* 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 @@ call3_check_string (Lisp_Object fn, Lisp_Object arg0,
 
 \f
 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 @@ Given a Unix syntax file name, returns a string ending in slash.
 }
 
 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);
+    return call2_check_string (handler, Qfile_name_nondirectory, filename);
 
-  beg = XSTRING_DATA (file);
-  end = p = beg + XSTRING_LENGTH (file);
+  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 @@ If FILENAME is a directly usable file itself, return
 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 @@ or passed as second argument to `expand-file-name'.
 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);
+    return call2_check_string (handler, Qfile_name_as_directory, filename);
 
-  buf = (char *) alloca (XSTRING_LENGTH (file) + 10);
+  buf = (char *) alloca (XSTRING_LENGTH (filename) + 10);
   return build_string (file_name_as_directory
-                      (buf, (char *) XSTRING_DATA (file)));
+                      (buf, (char *) XSTRING_DATA (filename)));
 }
 \f
 /*
@@ -588,8 +594,8 @@ directory_file_name (const char *src, char *dst)
 }
 
 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 @@ DEFUN ("expand-file-name", Fexpand_file_name, 1, 2, 0, /*
 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 @@ See also the function `substitute-in-file-name'.
 }
 
 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 @@ DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, 1, 1, 0, /*
 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 @@ If `/~' appears, all of FILENAME through that `/' is discarded.
   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);
+                                     filename);
 
-  nm = XSTRING_DATA (string);
-  endp = nm + XSTRING_LENGTH (string);
+  nm = XSTRING_DATA (filename);
+  endp = nm + XSTRING_LENGTH (filename);
 
   /* If /~ or // appears, discard everything through first slash. */
 
@@ -1496,11 +1501,11 @@ If `/~' appears, all of FILENAME through that `/' is discarded.
       }
 
   if (!substituted)
-    return string;
+    return filename;
 
-  /* If substitution required, recopy the string and do it */
+  /* 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 @@ If `/~' appears, all of FILENAME through that `/' is discarded.
   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 @@ barf_or_query_if_file_exists (Lisp_Object absname, const char *querystring,
 
 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 @@ internal_delete_file (Lisp_Object filename)
 \f
 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 @@ This is what happens in interactive use with M-x.
 
 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 @@ This is the sort of file that holds an ordinary stream of data bytes.
 }
 \f
 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 @@ Return mode bits of FILE, as an integer.
 }
 
 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 @@ Only the 12 low bits of MODE are used.
 
 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 @@ it should be a symbol, and the actual coding system that was used for the
 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 @@ positions), even in Mule. (Fixing this is very difficult.)
   if (!NILP (handler))
     {
       val = call6 (handler, Qinsert_file_contents, filename,
-                  visit, beg, end, replace);
+                  visit, start, end, replace);
       goto handled;
     }
 
@@ -2729,7 +2733,7 @@ positions), even in Mule. (Fixing this is very difficult.)
     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 @@ positions), even in Mule. (Fixing this is very difficult.)
 
 #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 @@ positions), even in Mule. (Fixing this is very difficult.)
       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 @@ positions), even in Mule. (Fixing this is very difficult.)
        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 @@ positions), even in Mule. (Fixing this is very difficult.)
 
   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 @@ positions), even in Mule. (Fixing this is very difficult.)
        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 @@ positions), even in Mule. (Fixing this is very difficult.)
 #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 @@ positions), even in Mule. (Fixing this is very difficult.)
             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 @@ Decrypt STRING using KEY.
 
 \f
 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 @@ This means that the file has not been changed since it was visited or saved.
   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 @@ Non-nil second argument means save only current buffer.
              /* 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 @@ File name in which we write a list of all auto save file names.
 */ );
   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.
index 7a645c2..308565b 100644 (file)
@@ -32,6 +32,7 @@ Boston, MA 02111-1307, USA.  */
 
 Lisp_Object Qask_user_about_supersession_threat;
 Lisp_Object Qask_user_about_lock;
+int inhibit_clash_detection;
 
 #ifdef CLASH_DETECTION
 
@@ -311,10 +312,15 @@ lock_file (Lisp_Object fn)
   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 @@ lock_file (Lisp_Object fn)
   }
 
   /* 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 @@ lock_file (Lisp_Object fn)
   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 @@ syms_of_filelock (void)
   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 */
index 337c581..de0c407 100644 (file)
@@ -212,86 +212,88 @@ extract_float (Lisp_Object num)
 #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 @@ Return the tangent of ARG.
 /* #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 @@ The first arg (the order) is truncated to an integer.
 /* #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 @@ Return the log gamma of ARG.
 
 #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 @@ Return the exponential ARG1 ** ARG2.
 
 #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 @@ Return the cube root of ARG.
 /* #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 @@ Return the hyperbolic tangent of ARG.
 /* 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 @@ This is the same as the exponent of a float.
 
 
 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 @@ With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR.
       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 @@ With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR.
     }
 
 #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));
 }
 \f
 /* Float-rounding functions. */
@@ -868,34 +872,34 @@ Rounds the value toward zero.
 /* #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 @@ DEFUN ("ftruncate", Fftruncate, 1, 1, 0, /*
 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);
 }
 
index 4ce3d15..9a80e8e 100644 (file)
@@ -772,10 +772,8 @@ extern int frame_changed;
     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 delete_frame_internal (struct frame *f, int force,
 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);
index 2953dce..d69bb2d 100644 (file)
@@ -226,7 +226,7 @@ valid_image_instantiator_format_p (Lisp_Object format, Lisp_Object locale)
 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 @@ get_image_conversion_list (Lisp_Object console_type)
 
 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 @@ specifiers will not be affected.
 
 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 @@ find_instantiator_differences (Lisp_Object new, Lisp_Object old)
 
 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 @@ Use `set-glyph-image' on glyphs to register instantiator changes.  */
     {
       if (EQ (elt[len], keyword))
        {
-         elt[len+1] = val;
+         elt[len+1] = value;
          break;
        }
     }
@@ -506,7 +506,7 @@ Use `set-glyph-image' on glyphs to register instantiator changes.  */
 
     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 @@ Return a list of valid image-instance types.
 }
 
 Error_behavior
-decode_error_behavior_flag (Lisp_Object no_error)
+decode_error_behavior_flag (Lisp_Object noerror)
 {
-  if (NILP (no_error))        return ERROR_ME;
-  else if (EQ (no_error, Qt)) return ERROR_ME_NOT;
-  else                        return ERROR_ME_WARN;
+  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 @@ but we currently disallow this. #### We should fix this.)
 
 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))
+       (data, domain, dest_types, noerror))
 {
-  Error_behavior errb = decode_error_behavior_flag (no_error);
+  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 @@ bitmap_to_lisp_data (Lisp_Object name, int *xhot, int *yhot,
 
   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 @@ bitmap_to_lisp_data (Lisp_Object name, int *xhot, int *yhot,
 
       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 @@ are necessary to properly display Unicode characters.
   set_specifier_caching (Vcurrent_display_table,
                         offsetof (struct window, display_table),
                         some_window_value_changed,
-                        0, 0);
+                        0, 0, 0);
 }
 
 void
index e1867af..056cc23 100644 (file)
@@ -729,10 +729,11 @@ struct Lisp_Image_Instance
 #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)
index 7a0e382..d476906 100644 (file)
@@ -289,7 +289,7 @@ popup_selection_callback (Widget widget, LWLIB_ID ignored_id,
     }
 
   /* 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 @@ button_item_to_widget_value (Lisp_Object gui_object_instance,
   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;
index b0068fd..db564bb 100644 (file)
@@ -34,9 +34,9 @@ Boston, MA 02111-1307, USA.  */
   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 @@ Boston, MA 02111-1307, USA.  */
        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 @@ Boston, MA 02111-1307, USA.  */
 #include <config.h>
 #include "lisp.h"
 #include <X11/Xlocale.h>        /* More portable than <locale.h> ? */
+#include <X11/Xlib.h>
 #include "frame.h"
 #include "device.h"
 #include "window.h"
@@ -79,10 +80,6 @@ Boston, MA 02111-1307, USA.  */
 #include "EmacsFrame.h"
 #include "events.h"
 
-#ifdef THIS_IS_X11R6
-#include <X11/IntrinsicP.h>
-#endif
-
 #ifndef XIM_XLIB
 #error  XIM_XLIB is not defined??
 #endif
@@ -122,13 +119,10 @@ static char DefaultXIMStyles[] =
 "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 @@ Initialize_Locale (void)
     }
 }
 
-#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 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
       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 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
     }
   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 @@ XIM_init_device (struct device *d)
       XGetIMValues (xim, XNQueryInputStyle, &DEVICE_X_XIM_STYLES (d), NULL);
       return;
     }
-#endif
+#endif /* HAVE_XREGISTERIMINSTANTIATECALLBACK */
 }
 
 
@@ -407,7 +411,7 @@ XIM_init_frame (struct frame *f)
 
   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);
index 7d4b7fc..1d21663 100644 (file)
@@ -304,19 +304,14 @@ typedef UChar UBufbyte;
 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. */
+   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 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;
+typedef char Extbyte;
 
 /* A byte in a string in binary format: */
-
 typedef char Char_Binary;
 typedef UChar UChar_Binary;
 
@@ -808,24 +803,20 @@ PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail,                       \
                      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:
 
index 03a4f54..4a995ba 100644 (file)
@@ -258,12 +258,13 @@ readchar (Lisp_Object readcharfun)
       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 @@ system that was used for the decoding is stored into it.  It will in
 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 @@ encoding detection or end-of-line detection.
   /* 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 @@ encoding detection or end-of-line detection.
 
       if (fd < 0)
        {
-         if (NILP (no_error))
+         if (NILP (noerror))
            signal_file_error ("Cannot open load file", file);
          else
            {
@@ -1470,22 +1471,21 @@ Execute BUFFER as Lisp code.
 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 @@ point remains at the end of the last character read from the buffer.
 
 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 @@ Note:  Before evaling the region, this function narrows the buffer to it.
 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 @@ static Lisp_Object
 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;
index 6800934..b46adbc 100644 (file)
@@ -273,8 +273,9 @@ INLINE_HEADER Emchar
 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);
index 0811ac0..9e57b2e 100644 (file)
@@ -168,8 +168,8 @@ check_marker_circularities (struct buffer *buf)
 #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 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer,
 
   /* 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 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer,
       return marker;
     }
 
-  CHECK_INT_COERCE_MARKER (pos);
+  CHECK_INT_COERCE_MARKER (position);
   if (NILP (buffer))
     b = current_buffer;
   else
@@ -212,7 +212,7 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer,
        }
     }
 
-  charno = XINT (pos);
+  charno = XINT (position);
   m = XMARKER (marker);
 
   if (restricted_p)
@@ -259,26 +259,32 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer,
 
 
 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 @@ copy_marker_1 (Lisp_Object marker, Lisp_Object type, int noseeum)
 }
 
 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, /*
index 84d147e..34932dd 100644 (file)
@@ -251,7 +251,7 @@ menu_item_descriptor_to_widget_value_1 (Lisp_Object desc,
              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;
index 7641aae..d0d60d7 100644 (file)
@@ -232,7 +232,7 @@ See also 'find-menu-item'.
 }
 
 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 @@ For example:
 
 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 @@ This is a specifier; use `set-specifier' to change it.
                         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
index 723981d..e2366b7 100644 (file)
@@ -381,8 +381,11 @@ size_t sndcnv8S_2mono(void **data,size_t *sz,void **outbuf)
   *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 @@ size_t sndcnv2monounsigned(void **data,size_t *sz,void **outbuf)
   *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 @@ size_t sndcnvULaw_2linear(void **data,size_t *sz,void **outbuf)
 
   *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 @@ size_t sndcnvULaw_2mono(void **data,size_t *sz,void **outbuf)
   *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 @@ size_t sndcnv16swap(void **data,size_t *sz,void **outbuf)
 
   *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;
index fc15f56..afd30d6 100644 (file)
@@ -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,19 +19,16 @@ 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.  */
 
-/* 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 <config.h>
-
-#if 0
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#endif
 #endif
 
+#include <stdio.h>
+
+#ifdef emacs
+
 #include "lisp.h"
 #include "buffer.h"
 #include "mule-charset.h"
@@ -40,35 +37,34 @@ Boston, MA 02111-1307, USA.  */
 
 #else  /* not emacs */
 
-#include <stdio.h>
 #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 @@ Lisp_Object Vccl_program_table;
 
 #define CCL_WriteConstJump     0x08 /* Write constant and jump:
                                        1:A--D--D--R--E--S--S-000XXXXX
-                                       2:const
+                                       2:CONST
                                        ------------------------------
-                                       write (const);
+                                       write (CONST);
                                        IC += ADDRESS;
                                        */
 
 #define CCL_WriteConstReadJump 0x09 /* Write constant, read, and jump:
                                        1:A--D--D--R--E--S--S-rrrXXXXX
-                                       2:const
+                                       2:CONST
                                        3:A--D--D--R--E--S--S-rrrYYYYY
                                        -----------------------------
-                                       write (const);
+                                       write (CONST);
                                        IC += 2;
                                        read (reg[rrr]);
                                        IC += ADDRESS;
@@ -300,10 +296,15 @@ Lisp_Object Vccl_program_table;
                                        */
 
 #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 @@ Lisp_Object Vccl_program_table;
                                          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 @@ Lisp_Object Vccl_program_table;
 #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 @@ Lisp_Object Vccl_program_table;
    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 @@ Lisp_Object Vccl_program_table;
         (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 @@ Lisp_Object Vccl_program_table;
    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, move to the next map set like reaching to the
+   end of the current map set.
 
-   If VALn is lambda, the whole mapping process terminates, and VALm
-   is the result of this mapping.
+   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 @@ Lisp_Object Vccl_program_table;
                                         N:SEPARATOR_z (< 0)
                                      */
 
-#define MAX_MAP_SET_LEVEL 20
+#define MAX_MAP_SET_LEVEL 30
 
 typedef struct
 {
@@ -590,21 +597,45 @@ typedef struct
 
 static tr_stack mapping_stack[MAX_MAP_SET_LEVEL];
 static tr_stack *mapping_stack_pointer;
-#endif
 
-#define PUSH_MAPPING_STACK(restlen, orig)                 \
-{                                                           \
-  mapping_stack_pointer->rest_length = (restlen);         \
-  mapping_stack_pointer->orig_val = (orig);               \
-  mapping_stack_pointer++;                                \
-}
+/* 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 POP_MAPPING_STACK(restlen, orig)                  \
-{                                                           \
-  mapping_stack_pointer--;                                \
-  (restlen) = mapping_stack_pointer->rest_length;         \
-  (orig) = mapping_stack_pointer->orig_val;               \
-}                                                           \
+#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 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 @@ static tr_stack *mapping_stack_pointer;
 #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 @@ struct ccl_prog_stack
 static struct ccl_prog_stack ccl_prog_stack_struct[256];
 
 int
-ccl_driver (struct ccl_program *ccl, const unsigned char *source,
-           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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
   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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
          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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
          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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
          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_driver (struct ccl_program *ccl, const unsigned char *source,
          /* 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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
            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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
            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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
            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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                  }
 
                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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
              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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
 
              break;
 
-#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);
-
+#if 0
+             /* 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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                    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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
 
                    /* 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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
 
                    if (NILP (content))
                      continue;
-                   else if (NUMBERP (content))
+                   else if (INTP (content))
                      {
                        reg[RRR] = i;
                        reg[rrr] = XINT(content);
@@ -1388,14 +1465,18 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                      }
                    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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                  {
                    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--)
-                 {
-                   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;
-                     }
-
-                   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))
-                     {
-                       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 (mapping_stack_pointer <= (mapping_stack + 1))
+                 {
+                   /* 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 (NILP (content))
-                     continue;
-                   else if (NUMBERP (content))
-                     {
-                       op = XINT (content);
-                       reg[RRR] = i;
-                       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);
-                       i += map_set_rest_length;
-                       POP_MAPPING_STACK (map_set_rest_length, reg[rrr]);
-                     }
-                   else if (EQ (content, Qt))
+                   POP_MAPPING_STACK (map_set_rest_length, orig_op);
+                   POP_MAPPING_STACK (map_set_rest_length, reg[rrr]);
+                   switch (op)
                      {
-                       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;
+                       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, 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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                    reg[RRR] = -1;
                    break;
                  }
-               map = XCONS(map)->cdr;
+               map = XCDR (map);
                if (!VECTORP (map))
                  {
                    reg[RRR] = -1;
@@ -1553,28 +1716,29 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                  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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
          break;
 
        default:
-         ccl->status = CCL_STAT_INVALID_CMD;
-         goto ccl_error_handler;
+         CCL_INVALID_CMD;
        }
     }
 
@@ -1595,15 +1758,8 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
          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 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
          break;
 
        case CCL_STAT_QUIT:
-         sprintf(msg, "\nCCL: Quited.");
+         sprintf(msg, "\nCCL: Exited.");
          break;
 
        default:
@@ -1643,143 +1799,220 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source,
   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;
-}
-
-/* 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)
-{
-  int i;
-
-  if (VECTORP (vec))
-    {
-      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->ic = CCL_HEADER_MAIN;
-  for (i = 0; i < 8; i++)
-    ccl->reg[i] = 0;
-  ccl->last_block = 0;
-  ccl->private_state = 0;
-  ccl->status = 0;
-  ccl->stack_idx = 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 embeded in the CCL code into their ID numbers.  */
+   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;
-  Lisp_Object result, contents /*, prop */;
+  int i, veclen, unresolved = 0;
+  Lisp_Object result, contents, val;
 
   result = ccl;
-  veclen = XVECTOR_LENGTH (result);
+  veclen = XVECTOR (result)->size;
 
-  /* Set CCL program's table ID */
   for (i = 0; i < veclen; i++)
     {
-      contents = XVECTOR_DATA (result)[i];
-      if (SYMBOLP (contents))
+      contents = XVECTOR (result)->contents[i];
+      if (INTP (contents))
+       continue;
+      else if (CONSP (contents)
+              && SYMBOLP (XCAR (contents))
+              && SYMBOLP (XCDR (contents)))
        {
-         if (EQ(result, ccl))
+         /* 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);
 
-#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))
+         val = Fget (contents, Qcode_conversion_map_id, Qnil);
+         if (NATNUMP (val))
+           XVECTOR (result)->contents[i] = val;
+         else
            {
-             XVECTOR_DATA (result)[i] = prop;
-             continue;
+             val = Fget (contents, Qccl_program_idx, Qnil);
+             if (NATNUMP (val))
+               XVECTOR (result)->contents[i] = val;
+             else
+               unresolved = 1;
            }
-#endif
+         continue;
        }
+      return Qnil;
     }
 
-  return result;
+  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 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 (! NILP (ccl_prog))
+    {
+      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++)
+    ccl->reg[i] = 0;
+  ccl->last_block = 0;
+  ccl->private_state = 0;
+  ccl->status = 0;
+  ccl->stack_idx = 0;
+  ccl->eol_type = CCL_CODING_EOL_LF;
+  return 0;
+}
 
 #ifdef emacs
 
+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 (VECTORP (object))
+    {
+      val = resolve_symbol_ccl_program (object);
+      return (VECTORP (val) ? Qt : Qnil);
+    }
+  if (!SYMBOLP (object))
+    return Qnil;
+
+  val = Fget (object, Qccl_program_idx, Qnil);
+  return ((! NATNUMP (val)
+          || XINT (val) >= XVECTOR_LENGTH (Vccl_program_table))
+         ? Qnil : Qt);
+}
+
 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 @@ in this case, the execution is slower).
 
 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 R0..R7 are nil, they are initialized to 0.
 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);
+
+  GCPRO2 (status, string);
 
-  setup_ccl_program (&ccl, ccl_prog);
   for (i = 0; i < 8; i++)
     {
       if (NILP (XVECTOR_DATA (status)[i]))
@@ -1839,80 +2061,106 @@ It returns the contents of write buffer as a string,
       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);
+      resolved = resolve_symbol_ccl_program (ccl_prog);
+      if (! NILP (resolved))
+       {
+         ccl_prog = resolved;
+         resolved = Qt;
+       }
     }
 
-  for (i = 0; i < len; i++)
+  for (idx = 0; idx < len; idx++)
     {
-      Lisp_Object slot = XVECTOR_DATA (Vccl_program_table)[i];
+      Lisp_Object slot;
 
-      if (!CONSP (slot))
+      slot = XVECTOR_DATA (Vccl_program_table)[idx];
+      if (!VECTORP (slot))
+       /* This is the first unused slot.  Register NAME here.  */
        break;
 
-      if (EQ (name, XCAR (slot)))
+      if (EQ (name, XVECTOR_DATA (slot)[0]))
        {
-         XCDR (slot) = ccl_prog;
-         return make_int (i);
+         /* Update this slot.  */
+         XVECTOR_DATA (slot)[1] = ccl_prog;
+         XVECTOR_DATA (slot)[2] = resolved;
+         return make_int (idx);
        }
     }
 
-  if (i == len)
+  if (idx == len)
     {
-      Lisp_Object new_table = Fmake_vector (make_int (len * 2), Qnil);
+      /* 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 @@ Return index number of the registered CCL program.
 */
 
 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 @@ Return index number of the registered map.")
       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 @@ vars_of_mule_ccl (void)
   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.
index ea04c9d..1949e90 100644 (file)
@@ -322,26 +322,18 @@ non_ascii_valid_char_p (Emchar ch)
 /*                       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;
 }
 
 \f
@@ -358,26 +350,15 @@ Lstream_get_emchar_1 (Lstream *stream, int ch)
 {
   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 @@ Return a list of the names of all defined charsets.
 }
 
 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 @@ character set.  Recognized properties are:
 
        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 @@ Set the 'ccl-program property of CHARSET to CCL-PROGRAM.
 */
        (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 @@ character s with caron.
 }
 
 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 @@ N defaults to 0 if omitted.
 }
 
 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))
 {
index baccaad..2597b61 100644 (file)
@@ -137,8 +137,8 @@ Optional argument DEVICE specifies the device this object applies to
 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 @@ you drop all pointers to it and allow it to be garbage collected.  When
 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 @@ is deallocated as well.
 
   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 @@ The returned object is a normal, first-class lisp object.  The way you
 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);
index afbbf0d..73f0960 100644 (file)
@@ -509,19 +509,19 @@ write_c_string (const char *str, Lisp_Object stream)
 
 \f
 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 @@ DEFUN ("princ", Fprinc, 1, 2, 0, /*
 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 @@ the output also will be logged to this file.
 }
 
 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;
+    {
+      fclose (termscript);
+      termscript = 0;
+    }
 
-  if (! NILP (file))
+  if (! NILP (filename))
     {
-      file = Fexpand_file_name (file, Qnil);
-      termscript = fopen ((char *) XSTRING_DATA (file), "w");
+      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;
 }
index 3523f6c..0063a6e 100644 (file)
@@ -1407,9 +1407,9 @@ static void
 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 @@ unix_kill_child_process (Lisp_Object proc, int signo,
      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);
index ea34721..307fd6e 100644 (file)
@@ -134,9 +134,9 @@ separate_textual_runs (unsigned char *text_storage,
 #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
        }
index 359f5e2..187cd47 100644 (file)
@@ -924,6 +924,7 @@ tty_redisplay_shutdown (struct console *c)
    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 underline_mode_on;               /* nonzero if in underline mode */
 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 @@ init_tty_for_redisplay (struct device *d, char *terminal_type)
    */
   cm_cost_init (c);
 
+#ifdef NOT_YET
   /*
    * Initialize local flags.
    */
@@ -1226,6 +1227,7 @@ init_tty_for_redisplay (struct device *d, char *terminal_type)
   underline_mode_on = 0;
   alternate_mode_on = 0;
   attributes_on = 0;
+#endif
 
   /*
    * Attempt to initialize the function_key_map to
index ef33687..9a145af 100644 (file)
@@ -286,7 +286,7 @@ init_syntax_once (void)
 #include <alloca.h>
 #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__ */
index 37092a5..1baa76f 100644 (file)
@@ -409,7 +409,7 @@ update_scrollbar_instance (struct window *w, int vertical,
   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 @@ This is a specifier; use `set-specifier' to change it.
                         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 @@ This is a specifier; use `set-specifier' to change it.
                         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 @@ This is a specifier; use `set-specifier' to change it.
                         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 @@ This is a specifier; use `set-specifier' to change it.
                         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 @@ This is a specifier; use `set-specifier' to change it.
                         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 @@ This is a specifier; use `set-specifier' to change it.
                         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 @@ complex_vars_of_scrollbar (void)
   set_specifier_caching (XGLYPH (Vscrollbar_pointer_glyph)->image,
                         offsetof (struct window, scrollbar_pointer),
                         scrollbar_pointer_changed_in_window,
-                        0, 0);
+                        0, 0, 0);
 }
index 7f92765..7738cde 100644 (file)
@@ -932,7 +932,7 @@ skip_chars (struct buffer *buf, int forwardp, int syntaxp,
 }
 
 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 @@ Returns the distance traveled, either zero or positive.
 
 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);
 }
 
 \f
 /* 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 @@ search_command (Lisp_Object string, Lisp_Object bound, Lisp_Object no_error,
 
   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 @@ search_command (Lisp_Object string, Lisp_Object bound, Lisp_Object no_error,
 
   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 @@ wordify (Lisp_Object buffer, Lisp_Object string)
 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 @@ Search backward from point for match for regular expression REGEXP.
 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 @@ Find the longest match in accord with Posix regular expression rules.
 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);
 }
 
 \f
@@ -1801,18 +1866,18 @@ free_created_dynarrs (Lisp_Object cons)
 }
 
 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 @@ In that case, this function creates and returns a new string
 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 @@ and you do not need to specify it.)
   int_dynarr *ul_pos_dynarr = 0;
   int speccount;
 
-  CHECK_STRING (newtext);
+  CHECK_STRING (replacement);
 
   if (! NILP (string))
     {
@@ -1979,10 +2044,10 @@ and you do not need to specify it.)
       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 @@ and you do not need to specify it.)
              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 @@ and you do not need to specify it.)
                  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 @@ and you do not need to specify it.)
 
          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 @@ and you do not need to specify it.)
                    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 @@ and you do not need to specify it.)
      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 @@ restore_match_data (void)
 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)
index 6c1076d..add109b 100644 (file)
@@ -134,13 +134,16 @@ get_local_selection (Lisp_Object selection_symbol, Lisp_Object target_type)
 #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 @@ If we own the named selection, then disown it (make there be no selection).
 }
 
 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 @@ nil is the same as PRIMARY, and t is the same as SECONDARY.)
 }
 
 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 @@ visible from Lisp.
  */
 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 @@ TEXT or COMPOUND_TEXT, it will be decoded as Compound Text.
      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 @@ TEXT or COMPOUND_TEXT, it will be decoded as Compound Text.
         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;
index 8daf22c..eae9c11 100644 (file)
@@ -156,12 +156,13 @@ find_defun_start (struct buffer *buf, Bufpos pos)
 }
 \f
 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 @@ This is the one used for new buffers.
 }
 
 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;
 }
 \f
 /* Convert a letter which signifies a syntax code
@@ -262,25 +262,26 @@ numbered starting at 0.
 }
 
 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 @@ charset_syntax (struct buffer *buf, Lisp_Object charset, int *multi_p_out)
 #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 @@ syntax_match (Lisp_Object table, Emchar ch)
 }
 
 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 @@ find_end_of_comment (struct buffer *buf, Bufpos from, Bufpos stop, int mask)
    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 @@ Optional argument BUFFER defaults to the current buffer.
        }
 
       /* End of comment reached */
-      count--;
+      n--;
     }
 
-  while (count < 0)
+  while (n < 0)
     {
       QUIT;
 
@@ -799,7 +800,7 @@ Optional argument BUFFER defaults to the current buffer.
            }
        }
 
-      count++;
+      n++;
     }
 
   BUF_SET_PT (buf, from);
@@ -809,7 +810,7 @@ Optional argument BUFFER defaults to the current buffer.
 \f
 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 @@ scan_lists (struct buffer *buf, Bufpos from, int count, int depth,
            if (!--depth) goto done;
            if (depth < min_depth)
              {
-               if (no_error)
+               if (noerror)
                  return Qnil;
                error ("Containing expression ends prematurely");
              }
@@ -1074,7 +1075,7 @@ scan_lists (struct buffer *buf, Bufpos from, int count, int depth,
            if (!--depth) goto done2;
            if (depth < min_depth)
              {
-               if (no_error)
+               if (noerror)
                  return Qnil;
                error ("Containing expression ends prematurely");
              }
@@ -1126,7 +1127,7 @@ scan_lists (struct buffer *buf, Bufpos from, int count, int depth,
   return (make_int (from));
 
 lose:
-  if (!no_error)
+  if (!noerror)
     error ("Unbalanced parentheses");
   return Qnil;
 }
@@ -1168,7 +1169,7 @@ of in the current buffer.
 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 @@ signalling an error.
   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 @@ of in the current buffer.
 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 @@ DEFUN ("parse-partial-sexp", Fparse_partial_sexp, 2, 7, 0, /*
 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 @@ If third arg TARGETDEPTH is non-nil, parsing stops if the depth
 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.
index afd72cf..1ac4834 100644 (file)
@@ -3031,7 +3031,7 @@ sys_readdir (DIR *dirp)
                          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);
     }
   }
index 573241a..9d20a82 100644 (file)
@@ -990,11 +990,11 @@ Verify the syntax of entry BUTTON in a toolbar description list.
 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 @@ For the other vector formats (specifying blank areas of the toolbar):
   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 @@ See `default-toolbar' for a description of a valid toolbar instantiator.
   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 @@ displayed even if you provide a value for `bottom-toolbar'.
   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 @@ displayed even if you provide a value for `left-toolbar'.
   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 @@ displayed even if you provide a value for `right-toolbar'.
   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 @@ is not visible, so it is expanded to take up the slack.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ the value in a window domain will not.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ See `default-toolbar-height' for more information.
                         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 @@ visibility specifiers have a fallback value of true.
                         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 @@ See `default-toolbar-visible-p' for more information.
                         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 @@ See `default-toolbar-visible-p' for more information.
                         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 @@ See `default-toolbar-visible-p' for more information.
                         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 @@ See `default-toolbar-visible-p' for more information.
                         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 @@ This is a specifier; use `set-specifier' to change it.
   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)));
 }
index 247bb8d..d752e66 100644 (file)
@@ -275,7 +275,7 @@ Emacs will stop receiving messages that match this pattern.
 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.
index 7f9b551..a39fbc2 100644 (file)
@@ -51,6 +51,9 @@ unexec (char *, char *, void *, void *,       void *)
 #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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
   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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
       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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
   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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
       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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
       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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
       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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
        }
     }
 
-  /* 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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
 
   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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
        }
       
       /* 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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
     }
   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 @@ copy_executable_and_dump_data_section (int a_out, int a_new)
        }
       
       /* 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);
index 6c36431..ad54ccf 100644 (file)
@@ -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.
 
-/* Synched up with: FSF 19.31. */
+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
+
+   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 @@ Boston, MA 02111-1307, USA.  */
  * 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 @@ Boston, MA 02111-1307, USA.  */
  * 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 @@ Boston, MA 02111-1307, USA.  */
  *
  * 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 @@ temacs:
         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 @@ xemacs:
         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 @@ temacs:
 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 @@ xemacs:
 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
 
 
  */
 \f
-/* 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 @@ Filesz      Memsz       Flags       Align
         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 <jackr@sgi.com>, 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:
-
-                         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
-     */
 \f
+#ifndef emacs
+#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
+#include <string.h>
+#else
+#include <config.h>
+extern void fatal (const char *, ...);
+#endif
+
 #include <sys/types.h>
 #include <stdio.h>
 #include <sys/stat.h>
 #include <memory.h>
-#include <string.h>
 #include <errno.h>
 #include <unistd.h>
 #include <fcntl.h>
+#if !defined (__NetBSD__) && !defined (__OpenBSD__)
 #include <elf.h>
-#include <sym.h> /* for HDRR declaration */
+#endif
 #include <sys/mman.h>
-#include <config.h>
-#include "lisp.h"
-
-/* 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 (__sony_news) && defined (_SYSTYPE_SYSV)
+#include <sys/elf_mips.h>
+#include <sym.h>
+#endif /* __sony_news && _SYSTYPE_SYSV */
+#if __sgi
+#include <syms.h> /* for HDRR declaration */
+#endif /* __sgi */
+
+#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 <sys/exec_elf.h>
+
+# 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 <sys/exec_ecoff.h>
+#  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 <sys/exec_elf.h>
+#endif
+
+#if __GNU_LIBRARY__ - 0 >= 6
+# include <link.h>     /* 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 @@ static int
 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 @@ find_section (char *name,
       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 @@ find_section (char *name,
  * .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 @@ unexec (char *new_name,
     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)
+    if (OLD_SECTION_H (old_sbss_index).sh_type == SHT_PROGBITS)
+      old_sbss_index = -1;
 
-  if (old_sbss_index != -1 && (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 @@ unexec (char *new_name,
   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 @@ unexec (char *new_name,
   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 @@ unexec (char *new_name,
 #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)
-       {
-         memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), 
-                 old_file_h->e_shentsize);
-         
-       }
-      else 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)
        {
-         
-         /* 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.  */
-
-      if (NEW_SECTION_H (nn).sh_offset >= new_base_offset)
-       NEW_SECTION_H (nn).sh_offset += 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 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 @@ unexec (char *new_name,
 
          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 @@ unexec (char *new_name,
                }
            }
        }
+#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 @@ unexec (char *new_name,
   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;
 }
index cfa89b4..18ee8e4 100644 (file)
@@ -64,8 +64,8 @@ static int window_pixel_height_to_char_height (struct window *w,
 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 @@ window_pixel_height (struct window* w)
 
 \f
 DEFUN ("windowp", Fwindowp, 1, 1, 0, /*
-Return t if OBJ is a window.
+Return t if OBJECT is a window.
 */
-       (obj))
+       (object))
 {
-  return WINDOWP (obj) ? Qt : Qnil;
+  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))
+       (object))
 {
-  return WINDOWP (obj) && WINDOW_LIVE_P (XWINDOW (obj)) ? Qt : Qnil;
+  return WINDOWP (object) && WINDOW_LIVE_P (XWINDOW (object))
+    ? Qt : Qnil;
 }
 
 DEFUN ("selected-window", Fselected_window, 0, 1, 0, /*
@@ -1597,8 +1598,10 @@ Afterwards the end-trigger value is reset to nil.
 
 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 @@ The frame toolbars, menubars and gutters are considered to be outside of this ar
 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 @@ Note that, when WINDOW is the selected window and its buffer
 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 @@ This is updated by redisplay or by calling `set-window-start'.
 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 @@ mark_window_as_deleted (struct window *w)
 
 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 @@ too.  Therefore, `next-window' can be used to iterate through 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 `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 @@ windows, eventually ending up back at the window you started with.
      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 @@ windows, eventually ending up back at the window you started with.
               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 @@ too.  Therefore, `previous-window' can be used to iterate through
 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 @@ windows, eventually ending up back at the window you started with.
      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 @@ windows, eventually ending up back at the window you started with.
               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 @@ windows, eventually ending up back at the window you started with.
                 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 @@ Return the next window which is vertically after WINDOW.
 }
 
 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 @@ static Lisp_Object
 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 @@ window_loop (enum window_loop type,
   /* 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 @@ window_loop (enum window_loop type,
      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 @@ window_loop (enum window_loop type,
       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 @@ buffer_window_mru (struct window *w)
 \f
 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 @@ Otherwise, all windows are considered.
      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 @@ Otherwise, all windows are considered.
 
 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 @@ value is reasonable when this function is called.
 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;
+  buffer = Fget_buffer (buffer);
+  CHECK_BUFFER (buffer);
 
-  if (!NILP (buffer))
-    {
-      buffer = Fget_buffer (buffer);
-      CHECK_BUFFER (buffer);
-      /* Ignore dedicated windows. */
-      window_loop (DELETE_BUFFER_WINDOWS, buffer, 0, frame, 0, console);
-    }
+  /* 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;
 }
 \f
@@ -3530,16 +3586,16 @@ make_dummy_parent (Lisp_Object window)
 
 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 @@ and put SIZE columns in the first of the pair.
   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 @@ and put SIZE columns in the first of the pair.
 
   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 @@ and put SIZE columns in the first of the pair.
     }
   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 @@ and put SIZE columns in the first of the pair.
 \f
 
 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))
+       (count, horizontalp, window))
 {
-  struct window *w = decode_window (window);
-  CHECK_INT (n);
-  change_window_height (w, XINT (n), !NILP (side), /* inpixels */ 0);
+  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))
+       (count, horizontalp, window))
 {
-  struct window *w = decode_window (window);
-  CHECK_INT (n);
-  change_window_height (w, XINT (n), !NILP (side), /* inpixels */ 1);
+  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))
+       (count, horizontalp, window))
 {
-  CHECK_INT (n);
-  change_window_height (decode_window (window), -XINT (n), !NILP (side),
-                        /* inpixels */ 0);
+  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))
+       (count, horizontalp, window))
 {
-  CHECK_INT (n);
-  change_window_height (decode_window (window), -XINT (n), !NILP (side),
-                        /* inpixels */ 1);
+  CHECK_INT (count);
+  change_window_height (window, -XINT (count), horizontalp, /* inpixels */ 1);
   return Qnil;
 }
 
@@ -3963,11 +4015,12 @@ window_pixheight (Lisp_Object w)
    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 @@ change_window_height (struct window *win, int delta, int widthflag,
 
 \f
 
-/* 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 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
       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 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
 
   /* 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 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
 }
 \f
 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))
+       (count))
 {
-  window_scroll (Fselected_window (Qnil), n, 1, ERROR_ME);
+  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))
+       (count))
 {
-  window_scroll (Fselected_window (Qnil), n, -1, ERROR_ME);
+  window_scroll (Fselected_window (Qnil), count, -1, ERROR_ME);
   return Qnil;
 }
 \f
@@ -4479,9 +4533,9 @@ showing that buffer is used.
  }
 
 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 @@ specifies the window to scroll.
 If `other-window-scroll-buffer' is non-nil, scroll the window
 showing that buffer, popping the buffer up if necessary.
 */
-       (n))
+       (count))
 {
-  window_scroll (Fother_window_for_scrolling (), n, 1, ERROR_ME);
+  window_scroll (Fother_window_for_scrolling (), count, 1, ERROR_ME);
   return Qnil;
 }
 \f
 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)));
+  int n = (NILP (count) ?
+          window_char_width (w, 0) - 2 :
+          XINT (Fprefix_numeric_value (count)));
 
-  return Fset_window_hscroll (window, make_int (w->hscroll + 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)));
+  int n = (NILP (count) ?
+          window_char_width (w, 0) - 2 :
+          XINT (Fprefix_numeric_value (count)));
 
-  return Fset_window_hscroll (window, make_int (w->hscroll - count));
+  return Fset_window_hscroll (window, make_int (w->hscroll - n));
 }
 \f
 DEFUN ("center-to-window-line", Fcenter_to_window_line, 0, 2, "_P", /*
@@ -5050,9 +5104,9 @@ window_config_equal (Lisp_Object conf1, Lisp_Object conf2)
 DEFUN ("window-configuration-p", Fwindow_configuration_p, 1, 1, 0, /*
 Return t if OBJECT is a window-configuration object.
 */
-       (obj))
+       (object))
 {
-  return WINDOW_CONFIGURATIONP (obj) ? Qt : Qnil;
+  return WINDOW_CONFIGURATIONP (object) ? Qt : Qnil;
 }
 
 static int
@@ -5729,8 +5783,9 @@ DEFUN ("current-window-configuration", Fcurrent_window_configuration, 0, 1, 0, /
 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 @@ This is a specifier; use `set-specifier' to change it.
   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 @@ This is a specifier; use `set-specifier' to change it.
                            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 @@ This is a specifier; use `set-specifier' to change it.
                         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 @@ This is a specifier; use `set-specifier' to change it.
                         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 @@ This is a specifier; use `set-specifier' to change it.
                          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 @@ This is a specifier; use `set-specifier' to change it.
   set_specifier_caching (Vvertical_divider_spacing,
                         offsetof (struct window, vertical_divider_spacing),
                         vertical_divider_changed_in_window,
-                        0, 0);
+                        0, 0, 0);
 }
index e435bb2..4accfc3 100644 (file)
@@ -1,3 +1,39 @@
+2000-11-14  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.37 is released.
+
+2000-11-09  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * automated/lisp-test.el: More format tests.
+
+2000-11-10  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * 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 <himi@m17n.org>
+
+       * automated/ccl-tests.el: New file.
+
+2000-10-30  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * automated/lisp-test.el: Add test for format.
+
+2000-10-13  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * automated/byte-compiler-test.el: Add optimization test for
+       byte-after-unbind-ops.
+
+2000-10-13  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * automated/hash-table-test.el: Make new cons cell for
+       equal and not eq object.
+
+2000-10-03  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * automated/lisp-test.el: Add replace-match test.
+
 2000-10-04  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.36 is released.
index 21c110f..11f355a 100644 (file)
 (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)))))
index 8aba946..1c8af88 100644 (file)
     (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)
     )
 
     (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)
     )
 
     (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)
     )
 
index 66c9272..c4d22b1 100644 (file)
 (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.
 ;; 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"))
index 05e3746..78e3f2d 100644 (file)
@@ -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