This commit was generated by cvs2svn to compensate for changes in r1383,
authortomo <tomo>
Tue, 9 May 2000 02:19:49 +0000 (02:19 +0000)
committertomo <tomo>
Tue, 9 May 2000 02:19:49 +0000 (02:19 +0000)
which included commits to RCS files with non-trunk default branches.

161 files changed:
INSTALL
PROBLEMS
etc/TUTORIAL.ja
lib-src/ChangeLog
lib-src/movemail.c
lisp/about.el
lisp/buffer.el
lisp/byte-optimize.el
lisp/etags.el
lisp/font-lock.el
lisp/info.el
lisp/ldap.el
lisp/modeline.el
lisp/msw-faces.el
lisp/package-get.el
lwlib/ChangeLog
lwlib/lwlib-Xaw.c
lwlib/lwlib-Xm.c
lwlib/lwlib.c
lwlib/xlwmenu.c
lwlib/xlwmenu.h
man/ChangeLog
man/cl.texi
man/internals/internals.texi
man/lispref/backups.texi
man/xemacs/files.texi
nt/ChangeLog
nt/README
nt/config.h
src/Makefile.in.in
src/bytecode.c
src/console-tty.c
src/console.c
src/device-msw.c
src/device.c
src/editfns.c
src/eldap.c
src/eldap.h
src/elhash.c
src/eval.c
src/event-msw.c
src/event-stream.c
src/events.c
src/extents.c
src/fileio.c
src/floatfns.c
src/glyphs-msw.c
src/glyphs-msw.h
src/glyphs-widget.c
src/glyphs-x.c
src/gui-msw.c
src/gui-x.c
src/gui.c
src/keymap.c
src/lstream.c
src/m/7300.h
src/m/acorn.h
src/m/alliant-2800.h
src/m/alliant.h
src/m/altos.h
src/m/amdahl.h
src/m/arm.h
src/m/att3b.h
src/m/aviion.h
src/m/celerity.h
src/m/clipper.h
src/m/cnvrgnt.h
src/m/convex.h
src/m/cydra5.h
src/m/delta.h
src/m/delta88k.h
src/m/dpx2.h
src/m/dual.h
src/m/elxsi.h
src/m/ews4800r.h
src/m/gould-np1.h
src/m/gould.h
src/m/hp300bsd.h
src/m/hp800.h
src/m/hp9000s300.h
src/m/i860.h
src/m/ibmps2-aix.h
src/m/ibmrs6000.h
src/m/ibmrt-aix.h
src/m/ibmrt.h
src/m/intel386.h
src/m/iris4d.h
src/m/iris5d.h
src/m/irist.h
src/m/isi-ov.h
src/m/luna88k.h
src/m/m68k.h
src/m/masscomp.h
src/m/mega68.h
src/m/mg1.h
src/m/mips-nec.h
src/m/mips-siemens.h
src/m/mips.h
src/m/next.h
src/m/nh3000.h
src/m/nh4000.h
src/m/ns32000.h
src/m/nu.h
src/m/orion.h
src/m/orion105.h
src/m/pfa50.h
src/m/plexus.h
src/m/pmax.h
src/m/powerpc.h
src/m/pyramid.h
src/m/sequent-ptx.h
src/m/sequent.h
src/m/sgi-challenge.h
src/m/sparc.h
src/m/sps7.h
src/m/stride.h
src/m/sun1.h
src/m/sun2.h
src/m/tad68k.h
src/m/tahoe.h
src/m/targon31.h
src/m/tek4300.h
src/m/tekxd88.h
src/m/template.h
src/m/tower32.h
src/m/tower32v3.h
src/m/ustation.h
src/m/wicat.h
src/m/windowsnt.h
src/m/xps100.h
src/malloc.c
src/marker.c
src/mem-limits.h
src/menubar-msw.c
src/nt.c
src/ntheap.c
src/ntheap.h
src/ntplay.c
src/ntproc.c
src/objects-msw.h
src/objects.c
src/opaque.c
src/process-nt.c
src/process.c
src/ralloc.c
src/rangetab.c
src/realpath.c
src/s/cygwin32.h
src/s/windowsnt.h
src/select-msw.c
src/specifier.c
src/symeval.h
src/sysdep.c
src/toolbar-msw.c
src/toolbar.c
src/tooltalk.c
src/unexnt.c
src/vm-limit.c
src/window.c
tests/ChangeLog
version.sh

diff --git a/INSTALL b/INSTALL
index ce6d91f..d00a221 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -176,13 +176,9 @@ defaults to "-g -O" for gcc and "-g" for all other compilers.
 The `--dynamic' option specifies that configure should try to link
 emacs dynamically rather than statically.
 
-The `--const-is-losing' option is for use if you have trouble
-compiling due to the `const' storage class in C.  This is defined by
-default.  Most users should have no need to change this.
-
 You can build XEmacs for several different machine types from a single
 source directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  Make separate
+supports the `VPATH' variable, such as GNU `make'.  Create separate
 build directories for the different configuration types, and in each
 one, run the XEmacs `configure' script.  `configure' looks for the
 Emacs source code in the directory that `configure' is in.
index db106ae..b5414a5 100644 (file)
--- a/PROBLEMS
+++ b/PROBLEMS
@@ -394,21 +394,22 @@ Richard Cognot <cognot@ensg.u-nancy.fr> writes:
 
 *** On HP-UX, problems with make
 
-Marcus Thiessel <marcus_thiessel@hp.com>
+Marcus Thiessel <marcus@xemacs.org>
 
   Some releases of XEmacs (e.g. 20.4) require GNU make to build
   successfully. You don't need GNU make when building 21.x.
 
 *** On HP-UX 9.05 XEmacs won't compile or coredump during the build.
 
-Marcus Thiessel <marcus_thiessel@hp.com>
+Marcus Thiessel <marcus@xemacs.org>
 
   This might be a sed problem. For your own safety make sure to use
   GNU sed while dumping XEmacs.
 
-*** On HP-UX 11.0 XEmacs causes excessive X11 errors when running.
+*** On HP-UX 11.0 XEmacs causes excessive X11 errors when running. 
+    (also appears on AIX as reported in comp.emacs.xemacs)
 
-Marcus Thiessel <marcus_thiessel@hp.com>
+Marcus Thiessel <marcus@xemacs.org>
 
   Unfortunately, XEmacs releases prior to 21.0 don't work with
   Motif2.1. It will compile but you will get excessive X11 errors like
@@ -424,6 +425,19 @@ Marcus Thiessel <marcus_thiessel@hp.com>
   Make sure /usr/lib/Motif1.2_R6/libXm.sl is a link to
   /usr/lib/Motif1.2_R6/libXm.3.
 
+*** On HP-UX 11.0: Object "" does not have windowed ancestor
+
+Marcus Thiessel <marcus@xemacs.org>
+
+  XEmacs dies without core file and reports:
+
+    Error: Object "" does not have windowed ancestor.
+
+  This is a bug. Please apply the patch PHSS_19964 (check if
+  superseded). The other alternative is to link with Motif1.2_R6 (see
+  previous item).
+
+
 ** SCO OpenServer
 *** Native cc on SCO OpenServer 5 is now OK.  Icc may still throw you
 a curve.  Here is what Robert Lipe <robertl@arnet.com> says:
index e7cfc57..c4da971 100644 (file)
-                      ==============================
-                      \e$BF|K\8l\e(B GNUEMACS(Mule) \e$BF~LgJT\e(B
-                      ==============================
+Copyright (c) 1985, 1996 Free Software Foundation, Inc.
+\e$B;HMQ>r7o$O%U%!%$%k:G8e$r;2>H$N$3$H\e(B
+          \e$B$"$J$?$,8=:_8+$F$$$k$N$O\e(B XEmacs \e$BF~Lg%,%$%I$G$9!#\e(B
 
-\e$BCm0U!'\e(B          \e$B$3$NF~LgJT$O!"!V=,$&$h$j47$l$m!W$r%b%C%H!<$K:n@.$5$l$F$$$^\e(B
-               \e$B$9!#\e(B">>" \e$B$+$i;O$^$k9T$O!"$=$N;~2?$r$9$Y$-$+$r;X<($7$F$$$^$9!#\e(B
+XEmacs \e$B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-!<!J%-!<%H%C%W$K\e(B 
+CTRL \e$B$H$+\e(B CTL \e$B$H=q$$$F$"$k!K$d%a%?%-!<$r;H$$$^$9!#%-!<%\!<%I$K$h$C$F$O!"\e(B
+META \e$B%-!<$O\e(B ALT \e$B$d\e(B EDIT \e$B$H=q$+$l$F$$$?$j!"B>$N$b$N$G$"$C$?$j$7$^$9\e(B 
+\e$B!JNc$($P!"\e(BSun \e$B$N%-!<%\!<%I$G$O!"%9%Z!<%9%P!<$N:8$N%@%$%"%b%s%I%-!<$,\e(B 
+META \e$B$G$9!K!#\e(BMETA \e$B%-!<$,L5$$>l9g$O!"\e(BESC \e$B$rBe$o$j$K;H$&$3$H$,$G$-$^$9!#\e(B
+\e$B$=$3$G!"\e(BMETA \e$B$H$+\e(B CONTROL \e$B$H$+$r=q$/Be$o$j$K!"<!$N$h$&$J5-9f$r;H$&$3$H\e(B
+\e$B$K$7$^$9!#\e(B
 
+ C-<\e$BJ8;z\e(B>   \e$B%3%s%H%m!<%k%-!<$r2!$7$?$^$^!"\e(B<\e$BJ8;z\e(B>\e$B%-!<$r2!$7$^$9!#Nc$($P!"\e(B
+           C-f \e$B$O%3%s%H%m!<%k%-!<$r2!$7$J$,$i\e(B f \e$B$N%-!<$r2!$9$3$H$G$9!#\e(B
 
-     Mule \e$B$N%3%^%s%I$rF~NO$9$k$H$-$K$O!"0lHLE*$K%3%s%H%m!<%k!&%-!<!J%-!<!&\e(B
-\e$B%H%C%W$K!"\e(BCTRL \e$B$"$k$$$O!"\e(BCTL \e$B$H=q$$$F$"$k!K$d%a%?!&%-!<!JIaDL!"%(%9%1!<%W!&\e(B
-\e$B%-!<$r;H$&!K$,;H$o$l$^$9!#$=$3$G!"\e(BCONTROL \e$B$H$+\e(B META \e$B$H$+=q$/Be$o$j$K!"<!$N\e(B
-\e$B$h$&$J5-9f$r;H$&$3$H$K$7$^$9!#\e(B
+ M-<\e$BJ8;z\e(B>   \e$B%a%?%-!<$r2!$7$?$^$^!"\e(B<\e$BJ8;z\e(B>\e$B%-!<$r2!$7$^$9!#$b$7%a%?%-!<$,$J\e(B
+           \e$B$$>l9g$O!"%(%9%1!<%W%-!<$r2!$7$F$+$iN%$7!"$=$l$+$i\e(B<\e$BJ8;z\e(B>\e$B%-!<\e(B
+           \e$B$r2!$7$^$9!#0J9_%(%9%1!<%W%-!<$N$3$H$r\e(B <ESC> \e$B$H=q$-$^$9!#\e(B
 
-C-<\e$BJ8;z\e(B>       \e$B%3%s%H%m!<%k!&%-!<$r2!$7$?$^$^!"\e(B<\e$BJ8;z\e(B>\e$B%-!<$r2!$7$^$9!#Nc$($P!"\e(B
-               C-f  \e$B$O!"%3%s%H%m!<%k!&%-!<$r2!$7$J$,$i\e(B f \e$B$N%-!<$r2!$9$3$H$r\e(B
-               \e$B0UL#$7$^$9!#\e(B
-<<Blank lines inserted here by startup of help-with-tutorial>>
-       >> \e$B$=$l$G$O!"\e(BC-v\e$B!J\e(BView Next Screen; \e$B<!$N2hLL$r8+$k!K$r%?%$%W$7$F\e(B
-          \e$B$_$F2<$5$$!#<!$N2hLL$K?J$`$3$H$,$G$-$^$9!#\e(B
-         \e$B0J9_!"0l2hLL$rFI$_=*$($k$?$S$KF1MM$K$7$F<!$N2hLL$KFI$_?J$s$G\e(B
-         \e$B2<$5$$!#\e(B
+\e$B!*=EMW!*\e(B: XEmacs\e$B$r=*N;$9$k$K$O!"\e(BC-x C-c \e$B$r%?%$%W$7$^$9!#\e(B
 
-ESC <\e$BJ8;z\e(B>     \e$B%(%9%1!<%W!&%-!<$r2!$7$F$+$iN%$7!"$=$l$+$i\e(B<\e$BJ8;z\e(B>\e$B%-!<$r2!$7$^\e(B
-               \e$B$9!#\e(B
+">>" \e$B$G;O$^$k9T$O!"$=$N;~2?$r$9$Y$-$+$r;X<($7$F$$$^$9!#Nc$($P!"\e(B
+<<Middle of page left blank for didactic purposes. Text continues below.>>
+>>  \e$B$G$O\e(B C-v \e$B!J<!$N2hLL$r8+$k!K$r%?%$%W$7$F<!$N2hLL$K?J$s$G2<$5$$!#\e(B
+       \e$B!J$5$"!"$d$C$F$_$^$7$g$&!#%3%s%H%m!<%k%-!<$r2!$7$J$,$i\e(B v \e$B$G$9!K\e(B
+       \e$B0J9_!"0l2hLL$rFI$_=*$($k$?$S$KF1MM$K$7$F<!$N2hLL$KFI$_?J$s$G2<$5$$!#\e(B
 
-\e$BCm0U!'\e(B         <\e$BJ8;z\e(B>\e$B$O!"BgJ8;z$G$b>.J8;z$G$b%3%^%s%I$H$7$F$OF1$80UL#$K$J$j\e(B
-               \e$B$^$9!#%a%?%-!<$,;H$($k$J$i$P\e(B ESC <\e$BJ8;z\e(B> \e$B$NBe$o$j$K\e(B M-<\e$BJ8;z\e(B>
-              (\e$B%a%?%-!<$r2!$7$?$^$^\e(B<\e$BJ8;z\e(B>\e$B%-!<$r2!$9\e(B) \e$B$,;H$($^$9!#\e(B
+\e$BA0$N2hLL$H<!$N2hLL$H$G$O!"I=<($5$l$kFbMF$K2?9T$+$N=E$J$j$,$"$j$^$9!#$3\e(B
+\e$B$l$O!"I=<($5$l$F$$$kFbMF$,O"B3$7$F$$$k$3$H$,$9$0H=$k$h$&$K$9$k$?$a$G$9!#\e(B
 
-\e$B=EMW$G$9!'\e(B     Emacs\e$B$r=*N;$5$;$?$$;~$O!"\e(BC-x C-c \e$B$r%?%$%W$7$^$9!#\e(BEmacs\e$B$r\e(Bcsh
-               \e$B$+$i5/F0$7$F$$$k>l9g!"%5%9%Z%s%I$9$k!J0l;~E*$K;_$a$k\e(B)\e$B$3$H$,\e(B
-               \e$B=PMh$^$9!#\e(BEmacs\e$B$r%5%9%Z%s%I$9$k$K$O!"\e(BC-z\e$B$r%?%$%W$7$^$9!#\e(B
+\e$B$^$:$O!"%U%!%$%k$NCf$r0\F0$7$F9T$/J}K!$rCN$kI,MW$,$"$j$^$9!#\e(BC-v \e$B$K$h$C\e(B
+\e$B$F@h$K?J$`$3$H$O$b$&H=$j$^$7$?!#85$KLa$k$K$O!"\e(BM-v \e$B!J%a%?%-!<$r2!$7$J$,\e(B
+\e$B$i\e(B v\e$B!"$b$7$/$O\e(B <ESC> \e$B$r2!$7$FN%$7$F\e(B v\e$B!K$G$9!#\e(B
 
+>> M-v \e$B$H\e(B C-v \e$B$r;H$C$F!"A08e$K0\F0$9$k$3$H$r2?2s$+;n$7$F2<$5$$!#\e(B
 
-     \e$B$5$F!"$3$l$+$i$O!"0l2hLLJ,FI$_=*$($?$i!"\e(BC-v  \e$B$rF~NO$7$F9T$C$F2<$5$$!#\e(B
 
-     \e$BA0$N2hLL$H<!$N2hLL$H$G$O!"I=<($5$l$kFbMF$K2?9TJ8$+$N=E$J$j$,$"$j$^$9!#\e(B
-\e$B$3$l$O!"I=<($5$l$F$$$kFbMF$,O"B3$7$F$$$k$3$H$,$9$0H=$k$h$&$K$9$k$?$a$G$9!#\e(B
+\e$B!v$3$3$^$G$NMWLs\e(B
+================
 
-
-     \e$B$^$:$O!"%U%!%$%k$NCf$r0\F0$7$F9T$/J}K!$rCN$kI,MW$,$"$j$^$9!#\e(BC-v  \e$B$K$h\e(B
-\e$B$C$F@h$K?J$`$3$H$O$b$&H=$j$^$7$?!#85$KLa$k$K$O!"\e(BESC v \e$B$r%?%$%W$7$^$9!#\e(B
-
-      >> ESC v \e$B$H\e(B C-v  \e$B$r;H$C$F!"A08e$K0\F0$9$k$3$H$r2?2s$+;n$7$F$_$J$5$$!#\e(B
-
-\e$BMWLs\e(B
-====
      \e$B%U%!%$%k$r2hLLKh$K8+$F9T$/$K$O!"<!$N%3%^%s%I$r;H$$$^$9!#\e(B
 
-     C-v     \e$BA0$K0l2hLLJ,?J$`\e(B
-     ESC v   \e$B8e$m$K0l2hLLJ,La$k\e(B
-     C-l     \e$B2hLL$r=q$-D>$9!#$3$N$H$-!"85%+!<%=%k$N$"$C$?9T$,\e(B
-             \e$B2hLL$NCf1{$K$/$k$h$&$K$9$k\e(B
+     C-v     \e$B<!$N2hLL$K?J$`\e(B
+     M-v     \e$BA0$N2hLL$KLa$k\e(B
+     C-l     \e$B2hLL$r=q$-D>$9!#$3$N$H$-!"%+!<%=%k$N$"$k9T$,2hLL$NCf1{$K\e(B
+            \e$B$/$k$h$&$K$9$k!#!J\e(BC-1 \e$B$8$c$J$/$C$F\e(B C-L \e$B$G$9$h!*!K\e(B
 
-       >> \e$B:#%+!<%=%k$,$I$3$K$"$k$+!"$=$N6a$/$K$I$s$J%F%-%9%H$,=q$+$l$F$$$k\e(B
-          \e$B$+$r3P$($J$5$$!#\e(BC-l  \e$B$r%?%$%W$7!"%+!<%=%k$,$I$3$K0\F0$7$?$+!"$=$N\e(B
-          \e$B6a$/$N%F%-%9%H$O$I$&$J$C$?$+$rD4$Y$F$_$J$5$$!#\e(B
+>> \e$B%+!<%=%k$r8+$D$1!"$=$N6a$/$K$I$s$JJ8>O$,=q$+$l$F$$$k$+$r3P$(!"\e(B
+   \e$B$=$l$+$i\e(B C-l \e$B$r%?%$%W$7$F2<$5$$!#\e(B
+   \e$B%+!<%=%k$,$I$3$K0\F0$7$?$+!"$=$N6a$/$N%F%-%9%H$O$I$&$J$C$?$+$rD4$Y\e(B
+   \e$B$F$_$^$7$g$&!#\e(B
 
-\e$B4pK\E*$J%+!<%=%k$N@)8f\e(B
-======================
 
-     \e$B2hLLKh$N0\F0$O$G$-$k$h$&$K$J$j$^$7$?!#:#EY$O!"2hLL$NCf$G!"FCDj$N>l=j$K\e(B
-\e$B0\F0$9$k$?$a$NJ}K!$r21$($^$7$g$&!#$3$l$K$O$$$/$D$+$N$d$jJ}$,$"$j$^$9!#0l$D\e(B
-\e$B$NJ}K!$O!"A0\e(B(previous)\e$B<!\e(B(next)\e$B@h\e(B(forward)\e$B8e\e(B(backward)\e$B$K0\F0$9$k%3%^%s%I$r;H\e(B
-\e$B$&$3$H$G$9!#$3$l$i$N%3%^%s%I$O$=$l$>$l!"\e(BC-p,  C-n, C-f,C-b \e$B$K3d$jEv$F$i$l$F\e(B
-\e$B$*$j!"8=:_$N>l=j$+$i?7$7$$>l=j$K%+!<%=%k$r0\F0$5$;$^$9!#?^$G=q$1$P!"\e(B
+\e$B!v4pK\E*$J%+!<%=%k$N@)8f\e(B
+========================
 
+\e$B2hLLKh$N0\F0$O$G$-$k$h$&$K$J$j$^$7$?!#:#EY$O!"2hLL$NCf$G!"FCDj$N>l=j$K\e(B
+\e$B0\F0$9$k$?$a$NJ}K!$r21$($^$7$g$&!#\e(B
+
+\e$B$3$l$K$O$$$/$D$+$N$d$jJ}$,$"$j$^$9!#0lHV4pK\E*$JJ}K!$O\e(B C-p, C-b, C-f,
+C-n \e$B$r;H$&$3$H$G$9!#$3$l$i$O$=$l$>$l%+!<%=%k$rA0$N9T!"A0$NJ8;z!"<!$NJ8\e(B
+\e$B;z!"<!$N9T$K0\F0$5$;$^$9!#?^$G=q$1$P!"\e(B
 
                                \e$BA0$N9T!$\e(BC-p
                                     :
                                     :
-     \e$B8e$NJ8;z!$\e(BC-b   ....   \e$B8=:_$N%+!<%=%k0LCV\e(B   ....   \e$B@h$NJ8;z!$\e(BC-f
+     \e$BA0$NJ8;z!$\e(BC-b   ....   \e$B8=:_$N%+!<%=%k0LCV\e(B   ....   \e$B<!$NJ8;z!$\e(BC-f
                                     :
                                     :
                                \e$B<!$N9T!$\e(BC-n
 
+>> C-n \e$B$H\e(B C-p \e$B$G%+!<%=%k$r>e?^$N??Cf$N9T$KF0$+$7$F2<$5$$!#$=$l$+$i\e(B C-l 
+   \e$B$r%?%$%W$7$F?^$NA4BN$,2hLLCf1{$K$/$k$h$&$K$7$F$_$^$7$g$&!#\e(B
 
-     \e$B$3$l$i$O!"$=$l$>$l!"\e(BPrevious, Next, Backward, Forward \e$B$NF,J8;z$K$J$C$F\e(B
-\e$B$$$k$N$G!"21$($d$9$$$G$7$g$&!#$3$l$i$O!"4pK\E*$J%+!<%=%k0\F0%3%^%s%I$G$"$j!"\e(B
-\e$B$$$D$G$b;H$&$b$N$G$9!#\e(B
 
-       >> C-n \e$B$r2?2s$+%?%$%W$7!"!J:#!"$"$J$?$,FI$s$G$$$k!K$3$N9T$^$G%+!<%=\e(B
-          \e$B%k$r0\F0$5$;$J$5$$!#\e(B
+\e$B$3$l$i$O$N%3%^%s%I$O$=$l$>$l!"\e(BPrevious, Next, Backward, Forward \e$B$NF,J8\e(B
+\e$B;z$K$J$C$F$$$k$N$G!"21$($d$9$$$G$7$g$&!#$3$l$i$O!"4pK\E*$J%+!<%=%k0\F0\e(B
+\e$B%3%^%s%I$G$"$j!"$$$D$G$b;H$&$b$N$G$9!#:#$3$3$G3P$($F2<$5$$!#\e(B
 
-       >> C-f  \e$B$r;H$C$F9T$NCf$[$I$K0\F0$7!"\e(BC-p  \e$B$G2?9T$+>e$K0\F0$7$F$_$J$5\e(B
-          \e$B$$!#%+!<%=%k$N0LCV$NJQ2=$KCm0U$7$J$5$$!#\e(B
+>> C-n \e$B$r2?2s$+%?%$%W$7!"!J:#!"$"$J$?$,FI$s$G$$$k!K$3$N9T$^$G%+!<%=%k\e(B
+   \e$B$r0\F0$5$;$^$7$g$&!#\e(B
 
-       >> \e$B9T$N@hF,$G\e(B C-b \e$B$r%?%$%W$7$F$_$J$5$$!#%+!<%=%k$O$I$3$K0\F0$7$^$9$+\e(B
-          \e$B!)$5$i$K$b$&>/$7\e(B C-b \e$B$r%?%$%W$7!":#EY$O\e(B C-f  \e$B$G9TKv$NJ}$KLa$j$J$5\e(B
-          \e$B$$!#%+!<%=%k$,9TKv$r1[$($k$H$I$&$J$j$^$9$+!)\e(B
+>> C-f \e$B$r;H$C$F9T$NCf$[$I$K0\F0$7!"\e(BC-p \e$B$G2?9T$+>e$K0\F0$5$;$^$7$g$&!#\e(B
+   \e$B%+!<%=%k$N0LCV$NJQ2=$KCm0U$7$F2<$5$$!#\e(B
 
+\e$B3F9T$N:G8e$K$O!JL\$K$O8+$($J$$!K\e(B Newline \e$BJ8;z$,$"$j$^$9!#$3$l$O<!$N9T\e(B
+\e$B$H$N6h@Z$j$r<($9$?$a$G$9!#%U%!%$%k$N:G8e$b\e(B Newline \e$B$rIU$1$k$Y$-$G$9\e(B
+\e$B!J$b$C$H$b\e(B XEmacs \e$B$O$=$l$r6/@)$O$7$^$;$s$,!K!#\e(B
 
-     \e$B2hLL$N@hF,$dKvHx$r1[$($F%+!<%=%k$r0\F0$5$;$h$&$H$9$k$H!"$=$NJ}8~$K$"$k\e(B
-\e$B%F%-%9%H$,0\F0$7$FMh$F!"%+!<%=%k$O>o$K2hLLFb$K$"$k$h$&$K$5$l$^$9!#\e(B
+>> \e$B9T$N@hF,$G\e(B C-b \e$B$r%?%$%W$7$F$_$^$7$g$&!#%+!<%=%k$OA0$N9T$NKvHx$K0\F0\e(B
+   \e$B$9$k$O$:$G$9!#$3$l$O\e(B C-b \e$B$,A0$N\e(B Newline \e$BJ8;z$r1[$($FLa$C$?$+$i$G$9!#\e(B
 
-       >> C-n \e$B$r;H$C$F!"%+!<%=%k$r2hLL$N2<C<$h$j2<$K0\F0$5$;$F$_$J$5$$!#2?\e(B
-          \e$B$,5/$3$j$^$7$?$+!)%+!<%=%k$N0LCV$O$I$&JQ$j$^$7$?$+!)\e(B
+\e$BF1MM$K\e(B C-f \e$B$O%+!<%=%k$r\e(B Newline \e$BJ8;z$r1[$($F<!$K?J$a$k$3$H$,$G$-$^$9!#\e(B
 
-     \e$B0lJ8;zC10L$N0\F0$G$O$^$I$m$C$3$7$$$H;W$&$J$i!"C18lC10L$G0\F0$9$k$3$H$b\e(B
-\e$B$G$-$^$9!#\e(BESC f \e$B$G0lC18lJ,@h$K?J$_!"\e(BESC b \e$B$G0lC18lJ,A0$KLa$j$^$9!#\e(B
+>> \e$B$5$i$K$b$&>/$7\e(B C-b \e$B$r%?%$%W$7$F%+!<%=%k0\F0$N46$8$rGD$s$G2<$5$$!#\e(B
+   \e$B:#EY$O\e(B C-f \e$B$G9TKv$^$G?J$s$G2<$5$$!#\e(B
+   \e$B$5$i$K$b$&0lEY\e(B C-f \e$B$r%?%$%W$7$F<!$N9T$K?J$s$G2<$5$$!#\e(B
 
-\e$BCm0U!'\e(B           \e$BF|K\8l$K$D$$$F$O!"C18l$N@Z$lL\$rG'<1$9$k$3$H$O$G$-$^$;$s$,!"\e(B
-               \e$B5?;wE*$JJ8@a$rC18l$N@Z$lL\$H$7$F$$$^$9!#\e(B
+\e$B2hLL$N@hF,$dKvHx$r1[$($F%+!<%=%k$r0\F0$5$;$h$&$H$9$k$H!"$=$NJ}8~$K$"$k\e(B
+\e$BJ8>O$,2hLL$NCf$K0\F0$7$FMh$F$^$9!#$3$l$r!V%9%/%m!<%k!W$H8F$S$^$9!#2hLL\e(B
+\e$B$,%9%/%m!<%k$9$k$3$H$K$h$C$F!"%+!<%=%k$r0\F0$5$;$F$b!"%+!<%=%k$O>o$K2h\e(B
+\e$BLLFb$K$"$k$h$&$K$5$l$^$9!#\e(B
 
-       >> ESC f \e$B$d\e(B ESC b \e$B$r2?2s$+%?%$%W$7$F$_$J$5$$!#\e(BC-f \e$B$d\e(B C-b \e$B$HJ;MQ$7$F\e(B
-          \e$B$_$J$5$$!#\e(B
+>> C-n \e$B$r;H$C$F!"%+!<%=%k$r2hLL$N2<C<$h$j2<$K0\F0$5$;$F$_$J$5$$!#2?\e(B
+   \e$B$,5/$3$j$^$7$?$+!)\e(B
 
-     C-f  \e$B$d\e(B C-b \e$B$KBP$9$k!"\e(BESC f \e$B$d\e(B ESC b \e$B$NN`;w@-$KCmL\$7$^$7$g$&!#B?$/$N\e(B
-\e$B>l9g!"\e(BESC  <\e$BJ8;z\e(B>\e$B$OJ8=q4X78$N=hM}$K;H$o$l!"0lJ}\e(BC-<\e$BJ8;z\e(B>\e$B$O$=$l$h$j$b$b$C$H4p\e(B
-\e$BK\E*$JBP>]!JJ8;z$H$+9T$H$+!K$KBP$9$kA`:n$K;H$o$l$^$9!#\e(B
+\e$B0lJ8;zC10L$N0\F0$G$O$^$I$m$C$3$7$$$J$i!"C18lC10L$G0\F0$9$k$3$H$b$G$-$^\e(B
+\e$B$9!#\e(BM-f (<ESC> f) \e$B$G0lC18l@h$X!"\e(BM-b (<ESC> b) \e$B$G0lC18lA0$X0\F0$7$^$9!#\e(B
 
-     C-a \e$B$H\e(B C-e \e$B$bCN$C$F$$$FJXMx$J%3%^%s%I$G$9!#\e(BC-a \e$B$O%+!<%=%k$r9T$N@hF,$K\e(B
-\e$B0\F0$5$;!"\e(BC-e \e$B$O9T$NKvHx$K0\F0$5$;$^$9!#\e(B
+\e$BCm0U!'\e(B   \e$BF|K\8l$K$D$$$F$O!"C18l$N@Z$lL\$rG'<1$9$k$3$H$O$G$-$^$;$s$,!"5?\e(B
+       \e$B;wE*$JJ8@a$rC18l$N@Z$lL\$H$7$F$$$^$9!#\e(B
 
+>> M-f \e$B$d\e(B M-b \e$B$r2?2s$+;n$7$F$_$^$7$g$&!#\e(B
 
-       >> C-a \e$B$r#22s!"$=$l$+$i\e(B C-e \e$B$r#22sF~NO$7$F$_$J$5$$!#$3$l$i$N%3%^%s%I\e(B
-          \e$B$r#22s0J>e7+JV$7$F$b!"%+!<%=%k$O$=$l0J>e0\F0$7$J$$$3$H$KCm0U!#\e(B
+\e$BC18l$NCfDx$K$$$k;~$O!"\e(BM-f \e$B$O$=$NC18l$N=*$o$j$^$G?J$_$^$9!#$b$76uGrJ8;z\e(B
+\e$B$K$$$k;~$K$O\e(B M-f \e$B$O<!$NC18l$N=*$o$j$^$G?J$_$^$9!#\e(BM-b \e$B$bF1MM$G$9!"J}8~\e(B
+\e$B$O5U$G$9$,!#\e(B
 
-     \e$B$"$HFs$D!"4JC1$J%+!<%=%k0\F0%3%^%s%I$,$"$j$^$9!#%U%!%$%k$N@hF,$K0\F0$9\e(B
-\e$B$k\e(B ESC < \e$B$H!"%U%!%$%k$NKvHx$K0\F0$9$k\e(B ESC > \e$B$G$9!#\e(B
+>> M-f \e$B$H\e(B M-b \e$B$r\e(B C-f \e$B$H\e(B C-b \e$B$r8r$($J$,$i?t2s;n$7!"C18l$NCf$KF~$k;~$H!"\e(B
+   \e$BC18l$HC18l$N4V$K$$$k;~$NF0$-$rD4$Y$F2<$5$$!#\e(B
 
-     \e$B%F%-%9%HCf$G%+!<%=%k$NB8:_$9$k0LCV$r!V%]%$%s%H!W$H8F$S$^$9!#8@$$$+$($l\e(B
-\e$B$P!"%+!<%=%k$O!"%F%-%9%H$N$I$3$K%]%$%s%H$,$"$k$+$r2hLL>e$G<($7$F$$$k$N$G$9!#\e(B
+C-f \e$B$H\e(B C-b \e$B$KBP$9$k!"\e(BM-f \e$B$H\e(B M-b \e$B$NN`;w@-$KCmL\$7$^$7$g$&!#B?$/$N>l9g!"\e(B
+\e$B%a%?%-!<$OJ8=q$r9=@.$9$k%f%K%C%H!JC18l!"J8!"CJMn!K$KBP$9$kA`:n$K;H$$!"\e(B
+\e$B%3%s%H%m!<%k%-!<$O$=$l$h$j$b$b$C$H4pK\E*$JBP>]!JJ8;z$H$+9TEy!K$KBP$9$k\e(B
+\e$BA`:n$K;H$$$^$9!#\e(B
 
-     \e$B0J2<$KC1=c$J0\F0A`:n$K$D$$$FMWLs$7$^$9!#$3$N$J$+$K$O!"C18l$d9TC10L$G$N\e(B
-\e$B0\F0%3%^%s%I$b4^$^$l$F$$$^$9!#\e(B
+\e$B$3$NN`;w@-$O9T$HJ8$N4X78$K$b$"$j$^$9!#\e(BC-a \e$B$H\e(B C-e \e$B$O$=$l$>$l9TF,$H9TKv\e(B
+\e$B$K0\F0$7!"\e(BM-a \e$B$H\e(B M-e \e$B$O$=$l$>$lJ8F,$HJ8Kv$K0\F0$7$^$9!#\e(B
 
-     C-f     \e$B0lJ8;z@h$K?J$`\e(B
-     C-b     \e$B0lJ8;z8e$KLa$k\e(B
+>> C-a \e$B$r#22s!"$=$l$+$i\e(B C-e \e$B$r#22s;n$7$^$7$g$&!#\e(B
+   M-a \e$B$r#22s!"$=$l$+$i\e(B M-e \e$B$r#22s;n$7$^$7$g$&!#\e(B
 
-     ESC f   \e$B0lC18l@h$K?J$`\e(B
-     ESC b   \e$B0lC18l8e$KLa$k\e(B
+C-a \e$B$d\e(B C-e \e$B$O7+JV$7$F$b$=$l0J>e0\F0$7$^$;$s$,!"\e(BM-a \e$B$r7+$jJV$9$H$I$s$I\e(B
+\e$B$sA0$NJ8F,$KLa$C$F$$$-$^$9!#$3$NItJ,$G$ON`;w@-$,GK$l$F$$$^$9$,!"$^$"$3\e(B
+\e$B$l$,<+A3$JF0:n$G$O$J$$$G$7$g$&$+!#\e(B
 
-     C-n     \e$B<!$N9T$K0\F0\e(B
-     C-p     \e$BA0$N9T$K0\F0\e(B
+\e$BJ8>OCf$G%+!<%=%k$,$"$k0LCV$r!V%]%$%s%H!W$H8F$S$^$9!#8@$$$+$($l$P!"%+!<\e(B
+\e$B%=%k$O!"J8>O$N$I$3$K%]%$%s%H$,$"$k$+$r2hLL>e$G<($7$F$$$k$N$G$9!#\e(B
 
-     ESC ]   \e$BCJMn$N=*$o$j$K0\F0\e(B
-     ESC [   \e$BCJMn$N@hF,$K0\F0\e(B
+\e$B0J2<$KC1=c$J%+!<%=%k0\F0A`:n$K$D$$$FMWLs$7$^$9!#$3$N$J$+$K$O!"C18l$d9T\e(B
+\e$BC10L$G$N0\F0%3%^%s%I$b4^$^$l$F$$$^$9!#\e(B
 
-     C-a     \e$B9T$N:G=i$K0\F0\e(B
-     C-e     \e$B9T$N:G8e$K0\F0\e(B
+       C-f     \e$B0lJ8;z<!$K?J$`\e(B
+       C-b     \e$B0lJ8;zA0$KLa$k\e(B
 
-     ESC <   \e$B%U%!%$%k$N:G=i$K0\F0\e(B
-     ESC >   \e$B%U%!%$%k$N:G8e$K0\F0\e(B
+       M-f     \e$B0lC18l<!$K?J$`\e(B
+       M-b     \e$B0lC18lA0$KLa$k\e(B
 
-       >> \e$B3F!9$N%3%^%s%I$r;n$7$F$_$J$5$$!#$3$l$i$N%3%^%s%I$O!":G$b$7$P$7$P\e(B
-          \e$B;H$o$l$k$b$N$G$9!#:G8e$NFs$D$G$O!"$3$N>l=j$H$ON%$l$?$H$3$m$K0\F0\e(B
-          \e$B$9$k$N$G!"\e(B C-v  \e$B$d\e(B ESC v \e$B$r;H$C$F$3$3$KLa$C$FMh$k$h$&$K$7$J$5$$!#\e(B
+       C-n     \e$B<!$N9T$K0\F0\e(B
+       C-p     \e$BA0$N9T$K0\F0\e(B
 
-     Emacs\e$B$NB>$N%3%^%s%I$HF1MM$K!"$3$l$i$N%3%^%s%I$K$O!"7+$jJV$7$N2s?t$r;X\e(B
-\e$BDj$9$k0z?t\e(B  \e$B$rM?$($k$3$H$,$G$-$^$9!#$=$N$?$a$K$O!"%3%^%s%I$rF~NO$9$kA0$K!"\e(B
-C-u\e$B$KB3$$$F7+$jJV$92s?t$rF~NO$7$^$9!#\e(B
+       C-a     \e$B9TF,$K0\F0\e(B
+       C-e     \e$B9TKv$K0\F0\e(B
 
-     \e$BNc$($P!"\e(BC-u 8 C-f  \e$B$H$9$k$H!"#8J8;zJ,@h$K0\F0$7$^$9!#\e(B
+>> \e$B$3$l$iA4It$r2?EY$+;n$7$FN}=,$7$^$7$g$&!#\e(B
+   \e$B$I$l$bIQHK$K;H$&%3%^%s%I$G$9!#\e(B
 
-       >> C-n \e$B$"$k$$$O\e(B C-p  \e$B$KE,Ev$J0z?t$r;XDj$7$F!"0l2s$N0\F0$G$J$k$Y$/$3\e(B
-          \e$B$N9T$N6a$/$KMh$k$h$&$K$7$F$_$J$5$$!#\e(B
+\e$B$"$HFs$D!"=EMW$J%+!<%=%k0\F0%3%^%s%I$,$"$j$^$9!#%U%!%$%k$N@hF,$K0\F0$9\e(B
+\e$B$k\e(B M-< \e$B$H!"%U%!%$%k$NKvHx$K0\F0$9$k\e(B M-> \e$B$G$9!#\e(B
 
-     C-v \e$B$d\e(B ESC v \e$B$K$D$$$F$O>/$70c$$$^$9!#$3$N>l9g!";XDj$5$l$??t$N9T$@$12h\e(B
-\e$BLL$r0\F0$9$k$3$H$K$J$j$^$9!#\e(B
+\e$BBgDq$NC<Kv$G$O\e(B "<" \e$B%-!<$O\e(B ","\e$B%-!<!J%3%s%^!K$N>e$K$"$j!"$=$l$r%?%$%W$9\e(B
+\e$B$k$K$O%7%U%H%-!<$r;H$&I,MW$,$"$j$^$9!#$7$?$,$C$F\e(B M-< \e$B$r%?%$%W$9$k$K$O!"\e(B
+\e$B%a%?%-!<$H%7%U%H%-!<$H%3%s%^%-!<$rF1;~$K2!$5$M$P$J$j$^$;$s!#\e(B
 
-       >> C-u 3 C-v  \e$B$HF~NO$7$F$_$J$5$$!#\e(B
+>> M-< \e$B$r;n$7$F!"$3$NF~Lg%,%$%I$N@hF,$K0\F0$7$^$7$g$&!#\e(B
+   \e$B$=$l$+$i!"\e(BC-v \e$B$r2?EY$+;H$C$F$3$3$^$G5"$C$F$-$F$/$@$5$$!#\e(B
 
-     \e$B85$KLa$k$K$O!"\e(BC-u 3 ESC v \e$B$r;H$($P$h$$$N$G$9!#\e(B
+>> M-> \e$B$r;n$7$F!"$3$NF~Lg%,%$%I$NKvHx$K0\F0$7$^$7$g$&!#\e(B
+   \e$B$=$l$+$i!"\e(BM-v \e$B$r2?EY$+;H$C$F$3$3$^$G5"$C$F$-$F$/$@$5$$!#\e(B
 
-\e$BCf;_%3%^%s%I\e(B
-============
+\e$B$b$7C<Kv$KLp0u%-!<$,$"$l$P!"$=$l$r;H$C$F%+!<%=%k$rF0$+$9$3$H$b$G$-$^$9!#\e(B
+\e$B$1$l$I!"<!$N#3$D$NM}M3$+$i\e(B C-b, C-f, C-n, C-p \e$B$r3P$($k$3$H$r4+$a$^$9!#\e(B
+\e$BBh0l$K!"$3$l$i$O$I$s$JC<Kv$G$b;H$($^$9!#BhFs$K!"\e(BXEmacs\e$B$r;H$&$N$,>eC#$7\e(B
+\e$B$F$/$l$P!"$3$l$i$N%3%s%H%m!<%kJ8;z$rBG$DJ}$,!"Lp0u%-!<$rBG$D$h$j$:$C$H\e(B
+\e$BB.$$$3$H$,J,$k$G$7$g$&!J<j$rDL>o$N0LCV$+$iBg$-$/F0$+$5$J$$$G$h$$$N$G!K!#\e(B
+\e$B:G8e$K!"0lEY$3$l$i$N%3%s%H%m!<%kJ8;z$rBG$D=,47$rIU$1$?$i!"$b$C$H?J$s$@\e(B
+\e$B%+!<%=%k0\F0%3%^%s%I$b4JC1$K3P$($k$3$H$,$G$-$^$9!#\e(B
 
-     C-g  \e$B$H$$$&%3%^%s%I$G!"F~NO$rI,MW$H$9$k$h$&$J%3%^%s%I$rCf;_$9$k$3$H$,\e(B
-\e$B$G$-$^$9!#Nc$($P!"0z?t$rF~NO$7$F$$$kESCf$d!"#2$D0J>e$N%-!<F~NO$rI,MW$H$9$k\e(B
-\e$B%3%^%s%I$rF~NO$7$F$$$k:GCf$K!"$=$l$r$d$a$?$/$J$C$?$i!"\e(BC-g  \e$B$r;H$($PNI$$$N$G\e(B
-\e$B$9!#\e(B
+XEmacs\e$B$NBgDq$N%3%^%s%I$K$O?tCM0z?t$rM?$($k$3$H$,$G$-$^$9!#BgDq$N>l9g$3\e(B
+\e$B$N?tCM$G7+$jJV$72s?t$r;X<($9$k$3$H$K$J$j$^$9!#?tCM0z?t$rM?$($k$K$O!"%3\e(B
+\e$B%^%s%I$rF~NO$9$kA0$K\e(B C-u \e$B$KB3$$$F?t;z2?7e$+%?%$%W$7$^$9!#$b$7%a%?%-!<\e(B
+\e$B$,;H$($k$J$i!"%a%?%-!<$r2!$7$J$,$i?t;z$r%?%$%W$9$k$3$H$b$G$-$^$9!#$G$b\e(B
+\e$B$d$O$j\e(B C-u \e$B$r3P$($k$3$H$r4+$a$^$9!#$=$l$O$I$s$JC<Kv$G$b;H$($k$+$i$G$9!#\e(B
 
-       >> C-u 100 \e$B$r%?%$%W$7$F0z?t$r#1#0#0$K@_Dj$7!"\e(BC-g  \e$B$r%?%$%W$7$J$5$$!#\e(B
-          \e$B$=$N$"$H$G\e(B  C-f  \e$B$r%?%$%W$7$F$_$J$5$$!#2?J8;z0\F0$7$^$7$?$+!)$b$7\e(B
-          \e$B4V0c$C$F\e(B ESC \e$B$rF~NO$7$F$7$^$C$?;~$b!"\e(BC-g  \e$B$rF~NO$9$l$P<h$j>C$;$^\e(B
-          \e$B$9!#\e(B
+\e$BNc$($P\e(B C-u 8 C-f \e$B$H%?%$%W$9$k$H#8J8;zJ,@h$K0\F0$7$^$9!#\e(B
 
-\e$B%(%i!<\e(B
-======
+>> \e$BE,Ev$J?tCM0z?t$r\e(B C-n \e$B$"$k$$$O\e(B C-p \e$B$KM?$(!"0l2s$N%3%^%s%I$G$J$k$Y$/\e(B
+   \e$B$3$N9T$N6a$/$KMh$k$h$&$K$7$F$_$^$7$g$&!#\e(B
 
-     \e$B;~$K$O!"\e(BEmacs\e$B$G5v$5$l$F$$$J$$A`:n$r$7$F$7$^$&$3$H$,$"$j$^$9!#Nc$($P!"\e(B
-\e$B%3%^%s%I$NDj5A$5$l$F$$$J$$%3%s%H%m!<%k!&%-!<$rF~NO$7$F$7$^$C$?;~$K$O!"\e(BEmacs
-\e$B$O%Y%k$rLD$i$7!"$5$i$K!"2hLL$N0lHV2<$K!"2?$,0-$+$C$?$+$rI=<($7$^$9!#\e(B
+\e$BBgDq$N%3%^%s%I$O?tCM0z?t$r7+$jJV$72s?t$H2r<a$7$^$9$,!"Cf$K$ONc30$b$"$j\e(B
+\e$B$^$9!#\e(BC-v \e$B$d\e(B M-v \e$B$,$=$&$G$9!#$3$N>l9g!";XDj$5$l$??t$N9T$@$12hLL$r%9%/\e(B
+\e$B%m!<%k$5$;$k$3$H$K$J$j$^$9!#Nc$($P\e(B C-u 4 C-v \e$B$O2hLL$r#49TJ,>e$K%9%/%m!<\e(B
+\e$B%k$5$;$^$9!#\e(B
 
-     Emacs\e$B$N%P!<%8%g%s$K$h$C$F$O!"$3$NF~LgJT$K=q$+$l$F$$$k$3$H$r<B9T$G$-$J\e(B
-\e$B$$>l9g$,$"$jF@$^$9!#$=$NMM$J>l9g$K$O!"%(%i!<%a%C%;!<%8$,I=<($5$l$^$9$+$i!"\e(B
-\e$B2?$+%+!<%=%k0\F0%-!<$r2!$7$F!"$=$N<!$NItJ,$K?J$s$G2<$5$$!#\e(B
+>> C-u 8 C-v \e$B$r;n$7$F$_$^$7$g$&!#\e(B
 
-\e$B%&%#%s%I%&\e(B
-==========
+\e$B2hLL$,>e$K#89T%9%/%m!<%k$7$?$O$:$G$9!#$^$?2hLL$r2<$K%9%/%m!<%k$5$;$k$K$O\e(B
+M-v \e$B$K0z?t$rM?$($l$P$h$$$N$G$9!#\e(B
 
-     Emacs\e$B$O4v$D$b$N%&%#%s%I%&$r;}$D$3$H$H!"$=$N$=$l$>$l$KBP$7$F%F%-%9%H$r\e(B
-\e$BI=<($9$k$3$H$,$G$-$^$9!#%X%k%W$d!"4v$D$+$N%3%^%s%I$+$i$N=PNO$rI=<($9$k$?$a\e(B
-\e$B$K8=$l$?M>J,$J%&%#%s%I%&$r>C$9$?$a$K!"<!$N%3%^%s%I$rCN$kI,MW$,$"$j$^$9!#\e(B
+\e$B$b$7\e(B X \e$B%&%#%s%I%&$r;H$C$F$$$k$N$J$i!"%9%/%m!<%k%P!<$H8F$P$l$k=DD9$N;M\e(B
+\e$B3Q$$%(%j%"$,\e(B XEmacs \e$B$N%&%#%s%I%&$N1&C<$K$"$k$O$:$G$9!#$=$3$r%^%&%9$GA`\e(B
+\e$B:n$7$F2hLL$r%9%/%m!<%k$5$;$k$3$H$b$G$-$^$9!#\e(B
 
-     C-x 1             \e$B%&%#%s%I%&$r#1$D$K$9$k!#\e(B
+>> \e$B%9%/%m!<%k%P!<$NCf$G%^%&%9$N??Cf$N%\%?%s$r2!$7$F$_$^$7$g$&!#%\%?%s\e(B
+   \e$B$r2!$7$?0LCV$G7h$^$kJ8>O$N0LCV$^$G2hLL$,%9%/%m!<%k$7$^$9!#\e(B
 
-     C-x 1 \e$B$O!"B>$N%&%#%s%I%&$r>C$7$F!"%+!<%=%k$N$"$k%&%#%s%I%&$r!"2hLLA4BN\e(B
-\e$B$K9-$2$^$9!#\e(B
+>> \e$B%9%/%m!<%k%P!<$N0lHV>e$+$i#39TL\$[$I$N$H$3$m$K%^%&%9$r0\F0$7$F!":8\e(B
+   \e$B$N%\%?%s$r2?EY$+2!$7$F$_$^$7$g$&!#\e(B
 
-       >> \e$B%+!<%=%k$r$3$N9T$K;}$C$F$-$F!"\e(BC-u 0 C-l \e$B$H%?%$%W$7$^$9!#\e(B
+* X \e$BC<Kv$G$N%+!<%=%k$N%3%s%H%m!<%k\e(B
+----------------------------------
 
-       >> C-h k C-f \e$B$H%?%$%W$7$J$5$$!#?7$7$$%&%#%s%I%&$,\e(B C-f \e$B%3%^%s%I$N%I%-\e(B
-          \e$B%e%a%s%H$rI=<($9$k$?$a$K8=$l$k$HF1;~$K!"$3$N%&%#%s%I%&$,$I$N$h$&\e(B
-          \e$B$K=L$`$+$r4Q;!$7$J$5$$!#\e(B
+X \e$BC<Kv$,$"$k$H!"$*$=$i$/%-!<%Q%C%I$G%+!<%=%k$rA`:n$9$kJ}$,4JC1$@$H46$8\e(B
+\e$B$k$G$7$g$&!#\e(Bleft, right, up, down \e$B$NLp0u%-!<$OM=A[DL$j$NJ}8~$K0\F0$7$"\e(B
+\e$B$9!#$=$l$i!"\e(BC-b, C-f, C-p, C-n \e$B$HA4$/F1$8$h$&$KF0:n$7$^$9$,!"$h$j%?%$\e(B
+\e$B%W$,4JC1$G!"3P$($k$N$b4JC1$G$9!#C18l$4$H$G$N0\F0$K\e(B C-left \e$B$H\e(B C-right
+\e$B$r;H$&$3$H$b$G$-!"2t\e(B \e$B!JNc$($P!"%F%-%9%HJT=8Cf$K$OCJMn!K\e(B \e$B$G0\F0$9$k$?$a\e(B
+\e$B$K\e(BC-up \e$B$H\e(B C-down \e$B$r;H$&$3$H$b$G$-$^$9!#\e(BHOME \e$B!J$b$7$/$O\e(B BEGIN\e$B!K\e(B \e$B$H\e(B END
+\e$B$H=q$+$l$?%-!<$,$"$l$P!"$=$l$>$l9T$N:G=i$H:G8e$K0\F0$7!"\e(BC_home \e$B$H\e(B
+C-end \e$B$O%U%!%$%k$N:G=i$H:G8e$K0\F0$7$^$9!#%-!<%\!<%I$K\e(B PgUp \e$B$H\e(B PgDn \e$B%-!<\e(B
+\e$B$,$"$l$P!"\e(BM-v \e$B$H\e(B C-v \e$B$N$h$&$K!"0lEY$K0l2hLLKh!">e2<$K0\F0$9$k$?$a$K;H\e(B
+\e$B$&$3$H$,$G$-$^$9!#\e(B
 
-       >> C-x 1\e$B$H%?%$%W$7$F!"%I%-%e%a%s%H$N8=$o$l$F$$$?%&%#%s%I%&$r>C$7$J$5\e(B
-          \e$B$$!#\e(B
+\e$B$3$l$iA4$F$N%3%^%s%I$O>e$G@bL@$5$l$F$$$k$h$&$K?tCM0z?t$r<h$k$3$H$,$G$-\e(B
+\e$B$^$9!#$3$l$i$N0z?t$NF~NO$KC;=LO)$r<h$k$3$H$,$G$-$^$9!#\e(BCONTROL \e$B$+\e(B META
+\e$B%-!<$r2!$7$?$^$^?t;z$r%?%$%W$9$k$@$1$G$9!#Nc$($P!"1&$K#1#28l0\F0$9$k$?\e(B
+\e$B$a$K$O!"\e(BC-1 C-2 C-right \e$B$H%?%$%W$7$^$9!#BG80$N4V$K\e(B CONTROL \e$B%-!<$rN%$5\e(B
+\e$B$J$/$F$h$$$N$G!"%?%$%W$OHs>o$K4JC1$G$9!#\e(B
 
-\e$BA^F~$H:o=|\e(B
-==========
 
-     \e$B%F%-%9%H$r%?%$%W$7$?$1$l$P!"C1$K$=$l$r%?%$%W$9$k$@$1$G9=$$$^$;$s!#L\$K\e(B
-\e$B8+$($kJ8;z!J\e(B'A','7','*','\e$B$"\e(B'\e$B$J$I!K$O\e(BEmacs\e$B$K$h$C$F%F%-%9%H$G$"$k$H$_$J$5$l!"\e(B
-\e$B$=$N$^$^A^F~$5$l$^$9!#9T$N=*$o$j$O2~9TJ8;z$GI=$5$l!"$3$l$rF~NO$9$k$K$O\e(B
-<Return> \e$B$r%?%$%W$7$^$9!#\e(B
+\e$B!v\e(B XEmacs \e$B$,%O%s%0$7$?;~!JF0$+$J$/$J$C$?;~!K\e(B
+==========================================
+
+\e$B$b$7\e(B XEmacs \e$B$,%3%^%s%I$KH?1~$7$J$/$J$C$?$i!"\e(BC-g \e$B$r%?%$%W$9$k$3$H$G\e(B
+XEmacs \e$B$r0BA4$K;_$a$k$3$H$,$G$-$^$9!#\e(BC-g \e$B$G$H$F$b;~4V$N$+$+$k%3%^%s%I\e(B
+\e$B$r;_$a$k$3$H$,$G$-$^$9!#\e(B
 
-     \e$BD>A0$KF~NO$7$?J8;z$r:o=|$9$k$K$O!"\e(B<Delete> \e$B$rF~NO$7$^$9!#\e(B<Delete> \e$B$O!"\e(B
-\e$B%-!<%\!<%I$G!V\e(BDelete\e$B!W$H=q$$$F$"$k%-!<$r2!$7$FF~NO$7$^$9!#!V\e(BDelete\e$B!W$N$+$o\e(B
-\e$B$j$K!V\e(BRubout\e$B!W$H=q$$$F$"$k$+$bCN$l$^$;$s!#$h$j0lHLE*$K$O!"\e(B<Delete> \e$B$O!"8=:_\e(B
-\e$B%+!<%=%k$N$"$k0LCV$ND>A0$NJ8;z$r:o=|$7$^$9!#\e(B
+C-g \e$B$O$^$?!"?tCM0z?t$r<h$j;_$a$?$j!"#2$D0J>e$N%-!<F~NO$rI,MW$H$9$k\e(B
+\e$B%3%^%s%I$rF~NO$7$F$$$k:GCf$K$=$l$r<h$j;_$a$?$j$9$k$N$K$b;H$($^$9!#\e(B
 
-       >> \e$BJ8;z$r$$$/$D$+%?%$%W$7!"$=$l$+$i$=$l$i$r\e(B <Delete> \e$B$r;H$C$F:o=|$7\e(B
-          \e$B$J$5$$!#\e(B
+>> C-u 100 \e$B$H%?%$%W$7$F0z?t#1#0#0$r@_Dj$7$F$+$i\e(B C-g \e$B$rBG$C$F$_$^$7$g$&!#\e(B
+   \e$B$=$l$+$i\e(B C-f \e$B$rBG$C$F2<$5$$!#0lJ8;z$7$+?J$^$J$$$O$:$G$9!#$J$<$J$i!"\e(B
+   C-g \e$B$G?tCM0z?t$,%-%c%s%;%k$5$l$?$+$i$G$9!#\e(B
 
-       >> \e$B1&%^!<%8%s$r1[$($k$^$G%F%-%9%H$r%?%$%W$7$J$5$$!#%F%-%9%H$,0l9T$N\e(B
-          \e$BI}0J>e$KD9$/$J$k$H!"$=$N9T$O2hLL$+$i$O$_=P$7$F!V7QB3!W$5$l$^$9!#\e(B
-          \e$B1&C<$K$"$k\e(B'\'\e$B5-9f$O!"$=$N9T$,7QB3$5$l$F$$$k$3$H$rI=$7$F$$$^$9!#\e(B
-          Emacs\e$B$O!"8=:_JT=8Cf$N0LCV$,8+$($k$h$&$K9T$r%9%/%m!<%k$7$^$9!#2hLL\e(B
-          \e$B$N1&$"$k$$$O:8$NC<$K$"$k\e(B'\'\e$B5-9f$O!"$=$NJ}8~$K9T$,$^$@B3$$$F$$$k$3\e(B
-          \e$B$H$rI=$7$F$$$^$9!#\e(B
+\e$B4V0c$C$F\e(B <ESC> \e$B$r%?%$%W$7$F$7$^$C$?;~$b!"\e(BC-g \e$B$G$=$l$r<h$j>C$;$^$9!#\e(B
 
-     \e$B$3$l$O!"J8>O$G@bL@$9$k$h$j<B:]$K$d$C$?J}$,$h$/H=$k$G$7$g$&!#\e(B
 
-       >> \e$B@h$[$IF~NO$7$?!"7QB3$5$l$?9T$N>e$K%+!<%=%k$r$b$C$F$$$-!"\e(BC-d \e$B$G%F\e(B
-          \e$B%-%9%H$r:o=|$7$F!"%F%-%9%H$,0l9T$K<}$^$k$h$&$K$7$F$_$J$5$$!#7QB3\e(B
-          \e$B$rI=$9\e(B'\'\e$B5-9f$O>C$($^$7$?$M!#\e(B
+\e$B!v;HMQIT2D\e(B (disabled) \e$B%3%^%s%I\e(B
+==================================
 
-       >> \e$B%+!<%=%k$r9T$N@hF,$K0\F0$7!"\e(B<Delete> \e$B$rF~NO$7$J$5$$!#$3$l$O$=$N9T\e(B
-          \e$B$ND>A0$N9T6g@Z$j$r:o=|$9$k$N$G!"$=$N9T$,A0$N9T$H$D$J$,$C$F$7$^$$\e(B
-          \e$B$^$9!#$D$J$,$C$?9T$,2hLL$NI}$h$jD9$/$J$k$H!"7QB3$NI=<($,$5$l$k$G\e(B
-          \e$B$7$g$&!#\e(B
+\e$B$$$/$D$+$N%3%^%s%I$O=i?4<T$,4V0c$C$F;H$o$J$$$h$&;HMQIT2D$K$J$C$F$$$^$9!#\e(B
 
-       >> <Return> \e$B$r2!$7$F!"$b$&0lEY9T6g@Z$j$rA^F~$7$J$5$$!#\e(B
+\e$B$b$72?$l$+$N;HMQIT2D%3%^%s%I$r%?%$%W$7$?$i!"$=$l$O$I$&$$$&%3%^%s%I$+$,\e(B
+\e$BI=<($5$l!"K\Ev$K$=$l$r<B9T$7$?$$$N$+$I$&$+?V$M$i$l$^$9!#\e(B
 
-     Emacs\e$B$N$[$H$s$I$N%3%^%s%I$O!"7+$jJV$7$N2s?t$rM?$($k$3$H$,$G$-$^$9!#$3\e(B
-\e$B$N$3$H$O!"J8;z$NA^F~$K$D$$$F$bEv$F$O$^$j$^$9!#\e(B
+\e$B$b$7K\Ev$K<B9T$7$?$$$N$J$i%9%Z!<%9%-!<$r%?%$%W$7$F2<$5$$!#$b$7<B9T$7$?\e(B
+\e$B$/$J$1$l$P\e(B "n" \e$B$H%?%$%W$7$F2<$5$$!#\e(B
 
-       >> C-u 8 * \e$B$HF~NO$7$F$_$J$5$$!#$I$&$J$j$^$7$?$+!#\e(B
+>> `C-x n p' : \e$B$H%?%$%W$7$F$_$^$7$g$&!J$3$l$O;HMQIT2D%3%^%s%I$G$9!K!#\e(B
+   \e$B$=$l$+$i\e(B n \e$B$H%?%$%W$7$^$7$g$&!#\e(B
 
-     \e$BFs$D$N9T$N4V$K6uGr9T$r:n$j$?$$>l9g$K$O!"FsHVL\$N9T$N@hF,$K9T$-!"\e(BC-o \e$B$r\e(B
-\e$BF~NO$7$^$9!#\e(B
 
-       >> \e$BE,Ev$J9T$N@hF,$K9T$-!"$=$3$G\e(B C-o \e$B$rF~NO$7$F$_$J$5$$!#\e(B
+\e$B!v%&%#%s%I%&\e(B
+============
 
-     \e$B$3$l$G!"\e(BEmacs\e$B$G!"%F%-%9%H$rF~NO$7!"$^$?4V0c$$$r=$@5$9$k$b$C$H$b4pK\E*\e(B
-\e$B$JJ}K!$r3X$s$@$3$H$K$J$j$^$9!#J8;z$HF1$8MM$K!"C18l$d9T$b:o=|$9$k$3$H$,$G$-\e(B
-\e$B$^$9!#:o=|A`:n$K$D$$$FMWLs$9$k$H<!$N$h$&$K$J$j$^$9!#\e(B
+XEmacs \e$B$O4v$D$b$N%&%#%s%I%&$K!"$=$l$>$l8DJL$NJ8>O$rI=<($9$k$3$H$,$G$-\e(B
+\e$B$^$9!#\e(BXEmacs \e$B$G;H$o$l$F$$$k!V%&%#%s%I%&!W$O%&%#%s%I%&%7%9%F%`$G$N=E$J$C\e(B
+\e$B$F$$$kJL$N%&%#%s%I%&$K8@5Z$7$F$$$k$N$G$O$J$/!"C10l$N\e(B X \e$B%&%#%s%I%&2<$G\e(B
+\e$B$NJL$NAk$N$3$H$r8@$C$F$$$k$3$H$KCm0U$7$F$/$@$5$$!#!J\e(BXEmacs \e$B$OJ#?t$N\e(B X
+\e$B$N%&%#%s%I%&!"\e(BXEmacs \e$B$NMQ8l$G$O!V%U%l!<%`!W$r;}$D$3$H$b$G$-$^$9!#$3$l\e(B
+\e$B$O8e$[$I@bL@$7$^$9!#!K\e(B
 
-     <Delete>       \e$B%+!<%=%k$ND>A0$NJ8;z$r:o=|\e(B
-     C-d            \e$B%+!<%=%k$N$"$kJ8;z$r:o=|\e(B
+\e$B$3$3$G$O!"J#?t$N%&%#%s%I%&$r;H$&5;=Q$K$O?($i$J$$$[$&$,8-L@$G$7$g$&!#$G\e(B
+\e$B$b!"%X%k%W$dFCDj$N%3%^%s%I$N=PNO$G8=$l$k$+$b$7$l$J$$M>J,$J%&%#%s%I%&$r\e(B
+\e$B>C$7$F!"$I$&$d$C$F85$N0l$D$N%&%#%s%I%&$N>uBV$KLa$k$+$r@bL@$9$k$3$H$OI,\e(B
+\e$BMW$G$7$g$&!#$=$l$O4JC1$G$9!#\e(B
 
-     ESC <Delete>   \e$B%+!<%=%k$ND>A0$NC18l$r:o=|\e(B
-     ESC d          \e$B%+!<%=%k0LCV0J9_$K$"$kC18l$r:o=|\e(B
+       C-x 1   \e$B%&%#%s%I%&$r#1$D$K$9$k!J$D$^$jB>$N%&%#%s%I%&$rA4It>C$9!K\e(B
 
-     C-k            \e$B%+!<%=%k0LCV$+$i9TKv$^$G$r:o=|\e(B
+\e$B$D$^$j\e(B C-x \e$B$rBG$C$F$+$i$5$i$K\e(B 1 \e$B$rBG$D$N$G$9!#$3$N%3%^%s%I$O%+!<%=%k$N\e(B
+\e$B$"$k%&%#%s%I%&$r2hLLA4BN$K9-$2$^$9!#B>$N%&%#%s%I%&$OA4It>C$($^$9!#\e(B
 
-     \e$B2?$+$r:o=|$7$?8e$G!"$=$l$r85$KLa$7$?$/$J$k$3$H$,$"$j$^$9!#\e(BEmacs\e$B$O!"0l\e(B
-\e$BJ8;z$h$j$bBg$-$$C10L$G:o=|$r9T$C$?;~$K$O!":o=|$7$?FbMF$rJ]B8$7$F$*$-$^$9!#\e(B
-\e$B85$KLa$9$K$O!"\e(BC-y \e$B$r;H$$$^$9!#Cm0U$7$?$$$N$O!"\e(BC-y \e$B$r:o=|$r9T$C$?>l=j$@$1$G\e(B
-\e$B$O$J$/!"$I$3$K$G$b=PMh$k$3$H$G$9!#\e(BC-y  \e$B$O!"J]B8$5$l$?%F%-%9%H$r8=:_%+!<%=%k\e(B
-\e$B$N$"$k>l=j$KA^F~$9$k$?$a$N%3%^%s%I$G$9$+$i!"$3$l$r;H$C$F%F%-%9%H$N0\F0$r9T\e(B
-\e$B$&$3$H$,$G$-$^$9!#\e(B
+>> \e$B%+!<%=%k$r$3$N9T$K;}$C$F$-$F!"\e(BC-u 0 C-l \e$B$H%?%$%W$7$F$_$F2<$5$$!#\e(B
 
-     \e$B:o=|$r9T$&%3%^%s%I$K$O!"\e(B"Delete" \e$B%3%^%s%I$H!"\e(B"Kill" \e$B%3%^%s%I$H$,$"$j$^\e(B
-\e$B$9!#\e(B"Kill"  \e$B%3%^%s%I$G$O:o=|$5$l$?$b$N$OJ]B8$5$l$^$9$,!"\e(B"Delete" \e$B%3%^%s%I$G\e(B
-\e$B$OJ]B8$5$l$^$;$s!#$?$@$7!"7+$jJV$72s?t$,M?$($i$l$k$H!"J]B8$5$l$^$9!#\e(B
+\e$B!J\e(BC-l \e$B$,2hLL$r:FIA2h$9$k$3$H$r;W$$=P$7$F$/$@$5$$!#$=$l$K?tCM0z?t$rM?$(\e(B
+\e$B$k$H!"!V2hLL$r:FIA2h$7$F8=:_$N9T$r2hLL$N:G>eIt$+$i$=$N?t$@$1N%$l$?$H$3\e(B
+\e$B$m$K0\F0$7$J$5$$!W$H$$$&0UL#$K$J$j$^$9!#$G$9$+$i!"\e(BC-u 0 C-l \e$B$O!V2hLL$r\e(B
+\e$B:FIA2h$7$F!"8=:_$N9T$r:G>eIt$K$9$k!W$H$$$&0UL#$K$J$j$^$9!#!K\e(B
 
-      >> C-n \e$B$r#22s$[$I%?%$%W$7$F!"2hLL$NE,Ev$J>l=j$K0\F0$7$J$5$$!#$=$7$F!"\e(B
-          C-k \e$B$G!"$=$N9T$r:o=|$7$J$5$$!#\e(B
+>> \e$BB3$$$F\e(B Control-x 2 \e$B$H%?%$%W$7$F2<$5$$!#\e(B
+   \e$B?7$7$$%&%#%s%I%&$,$3$N%P%C%U%!$NFbMF$rI=<($9$k$?$a$K8=$l$k$H$H$b$K!"\e(B
+   \e$B$3$N%&%#%s%I%&$,$I$N$h$&$K=L$`$+$r8+$F2<$5$$!#\e(B
 
-     \e$B0l2sL\$N\e(B C-k \e$B$G$=$N9T$NFbMF$,:o=|$5$l!"$b$&0lEY\e(B C-k \e$B$rF~NO$9$k$H!"$=$N\e(B
-\e$B9T<+?H$,:o=|$5$l$^$9!#$b$7!"\e(BC-k  \e$B$K7+$jJV$72s?t$r;XDj$7$?>l9g$K$O!"$=$N2s?t\e(B
-\e$B$@$1$N9T$,!JFbMF$H9T<+?H$H$,F1;~$K!K:o=|$5$l$^$9!#\e(B
+>> C-x 1 \e$B$H%?%$%W$7$F!"?7$7$$%&%#%s%I%&$,>C$($k$N$r8+$F2<$5$$!#\e(B
 
-     \e$B:#:o=|$5$l$?%F%-%9%H$O!"J]B8$5$l$F$$$k$N$G!"$=$l$r<h$j=P$9$3$H$,$G$-$^\e(B
-\e$B$9!#$=$N$?$a$K$O!"\e(BC-y \e$B$r%?%$%W$7$^$9!#\e(B
 
-       >> C-y \e$B$r;n$7$F$_$J$5$$!#\e(B
+\e$B!vA^F~$H:o=|\e(B
+============
+
+\e$B%F%-%9%H$rF~NO$7$?$1$l$P!"C1$K$=$l$r%?%$%W$7$F2<$5$$!#\e(BXEmacs \e$B$O!"L\$K\e(B
+\e$B8+$($kJ8;z!J\e(BA, 7, * \e$BEy!K$r%F%-%9%H$G$"$k$H$_$J$9$N$G!"$=$l$i$O$=$N$^$^\e(B
+\e$BA^F~$5$l$^$9!#\e(B<Return>\e$B!J2~9T%-!<!K$r%?%$%W$9$l$P2~9TJ8;z$,A^F~$5$l$^$9!#\e(B
 
-     C-k \e$B$r2?EY$bB3$1$F9T$&$H!":o=|$5$l$k%F%-%9%H$O!"$^$H$a$FJ]B8$5$l!"\e(BC-y
-\e$B$G!"$=$NA4$F$,<h$j=P$5$l$^$9!#\e(B
+\e$BD>A0$KF~NO$7$?J8;z$r:o=|$9$k$K$O!"\e(B<Delete> \e$B$r%?%$%W$7$^$9!#\e(B<Delete> \e$B$O!"\e(B
+\e$B%-!<%\!<%I>e$K!V\e(BDel\e$B!W$H=q$$$F$"$k%-!<$G$9!#;~$K$O\e(B <Backspace> \e$B%-!<$b\e(B
+<Delete> \e$B$H$7$FF0:n$7$^$9$,!"$$$D$b$G$O$"$j$^$;$s!#\e(B
 
-       >> C-k \e$B$r2?EY$b%?%$%W$7$F$_$J$5$$!#\e(B
+\e$B$h$j0lHLE*$K$O!"\e(B<Delete> \e$B$O8=:_%+!<%=%k$N$"$k0LCV$ND>A0$NJ8;z$r:o=|$7\e(B
+\e$B$^$9!#\e(B
 
-       >> \e$B%F%-%9%H$r<h$j=P$9$K$O!"\e(BC-y \e$B$G$9!#%+!<%=%k$r?t9T2<$K0\F0$5$;!"$b\e(B
-          \e$B$&0lEY\e(B C-y \e$B$r%?%$%W$7$F$_$J$5$$!#$3$l$G%F%-%9%H$N%3%T!<$,$G$-$k$o\e(B
-          \e$B$1$G$9!#\e(B
+>> \e$BJ8;z$r$$$/$D$+%?%$%W$7!"$=$l$+$i$=$l$i$r\e(B <Delete> \e$B$r;H$C$F:o=|$7\e(B
+   \e$B$F2<$5$$!#$3$N%U%!%$%k$rJQ99$9$k$3$H$r5$$K$9$kI,MW$O$"$j$^$;$s!#%*\e(B
+   \e$B%j%8%J%k$NF~Lg%,%$%I%U%!%$%k$OJQ99$5$l$^$;$s$+$i!#:#8+$F$$$k%U%!%$\e(B
+   \e$B%k$O$"$J$?$N$?$a$N%3%T!<$G$9!#\e(B
 
-     \e$B8=:_2?$+$N%F%-%9%H$,J]B8$5$l$F$$$F!"$5$i$KB>$N%F%-%9%H$r:o=|$9$k$H$I$&\e(B
-\e$B$J$k$G$7$g$&$+!#\e(BC-y \e$B$O!"$b$C$H$b:G6a:o=|$5$l$?$b$N$r<h$j=P$7$^$9!#\e(B
+\e$BJ8>O$N0l9T$,2hLL$K<}$^$i$J$$DxD9$/$J$C$?>l9g!"$=$N9T$O2hLL>e$N<!$N9T$X\e(B
+\e$B$H7QB3!J\e(Bcontinued\e$B!K$5$l$^$9!#2hLL$N1&C<$N\e(B backslash \e$BJ8;z\e(B ("\") \e$B$O!"$=\e(B
+\e$B$N9T$,7QB3$5$l$F$$$k$3$H$rI=$7$F$$$^$9!#\e(B
 
+>> \e$B2hLL$N1&C<$^$GJ8>O$rF~NO$7!"$5$i$KF~NO$rB3$1$F2<$5$$!#\e(B
+   \e$B7QB39T$,$G$-$k$N$,J,$k$G$7$g$&!#\e(B
 
-       >> \e$B9T$r:o=|$7!"%+!<%=%k$r0\F0$5$;!"JL$N9T$r:o=|$7$J$5$$!#\e(BC-y \e$B$r9T$&\e(B
-          \e$B$H!"#2HVL\$N9T$,F@$i$l$^$9!#\e(B
+>> <Delete> \e$B$r;H$C$F2hLL$K<}$^$k$H$3$m$^$G8=:_$N9T$rC;$/$7$F$_$F$/$@$5\e(B
+   \e$B$$!#7QB39T$O>C$($^$9!#\e(B
 
-\e$B<h$j>C$7\e(B(UNDO)
-==============
+\e$B2~9TJ8;z$bB>$NJ8;z$HF1$8$h$&$K:o=|$G$-$^$9!##2$D$N9T$N4V$N2~9TJ8;z$r>C\e(B
+\e$B$9$H$=$l$i$N9T$,9g$o$5$j#1$D$N9T$K$J$j$^$9!#$b$7$=$N9g$o$5$C$?9T$,2hLL\e(B
+\e$B$NI}$h$j$bD9$$>l9g$O!"7QB39T$H$J$C$FI=<($5$l$^$9!#\e(B
+
+>> \e$B%+!<%=%k$r9T$N@hF,$K0\F0$7!"\e(B<Delete> \e$B$r%?%$%W$7$F2<$5$$!#8=:_$N9T$,\e(B
+   \e$B$=$NA0$N9T$H$D$J$,$j$^$9!#\e(B
+
+>> <Return> \e$B$r%?%$%W$7$F!":#:o=|$7$?2~9TJ8;z$r$^$?A^F~$7$F2<$5$$!#\e(B
+
+XEmacs \e$B$N$[$H$s$I$N%3%^%s%I$O!"7+$jJV$7$N2s?t;XDj$G$-$k$3$H$r;W$$=P$7\e(B
+\e$B$F2<$5$$!#$3$l$O!"J8;z$NA^F~$K$D$$$F$bEv$F$O$^$j$^$9!#\e(B
+
+>> C-u 8 * \e$B$H%?%$%W$9$k$H\e(B ******** \e$B$,A^F~$5$l$^$9!#;n$7$F$_$^$7$g$&!#\e(B
+
+\e$B$3$l$G!"\e(BXEmacs \e$B$G%F%-%9%H$rF~NO$7!"$^$?4V0c$$$r=$@5$9$k$b$C$H$b4pK\E*\e(B
+\e$B$JJ}K!$r3X$s$@$3$H$K$J$j$^$9!#J8;z$HF1$8MM$K!"C18l$d9T$b:o=|$9$k$3$H$,\e(B
+\e$B$G$-$^$9!#:o=|A`:n$K$D$$$FMWLs$9$k$H<!$N$h$&$K$J$j$^$9!#\e(B
+
+       <Delete>     \e$B%+!<%=%k$ND>A0$NJ8;z$r:o=|!J\e(Bdelete\e$B!K\e(B
+       C-d          \e$B%+!<%=%k$N$"$kJ8;z$r:o=|!J\e(Bdelete\e$B!K\e(B
+
+       M-<Delete>   \e$B%+!<%=%k$ND>A0$NC18l$r>C5n!J\e(Bkill\e$B!K\e(B
+       M-d          \e$B%+!<%=%k0LCV0J9_$K$"$kC18l$r>C5n!J\e(Bkill\e$B!K\e(B
+
+       C-k          \e$B%+!<%=%k0LCV$+$i9TKv$^$G$r>C5n!J\e(Bkill\e$B!K\e(B
+       M-k          \e$B%+!<%=%k0LCV$+$iJ8Kv$^$G$r>C5n!J\e(Bkill\e$B!K\e(B
+
+<Delete> \e$B$H\e(B C-d \e$B$KBP$9$k\e(B M-<Delete> \e$B$H\e(B M-d \e$B$O!"\e(BC-f \e$B$H\e(B M-f \e$B$G;O$^$C$?N`\e(B
+\e$B;w@-$r$^$?3HD%$7$^$9!#$3$3$G\e(B <Delete> \e$B$O%3%s%H%m!<%kJ8;z$G$O$"$j$^$;$s\e(B
+\e$B$,!"$^$"!"$=$l$O5$$K$7$J$$$G2<$5$$!#\e(BC-k \e$B$H\e(B M-k \e$B$N4X78$O\e(B C-e \e$B$H\e(B M-e \e$B$N\e(B
+\e$B4X78!J9T$HJ8$NBPHf!K$HF1$8$G$9!#\e(B
+
+\e$B0lEY$K#2J8;z0J>e>C$7$?>l9g!"\e(BXEmacs \e$B$O$=$N>C$7$?%F%-%9%H$rJ]B8$7$F$*$$\e(B
+\e$B$F!"$^$?85$KLa$9$3$H$,$G$-$k$h$&$K$7$F$$$^$9!#$3$N!V85$KLa$9!W$H$$$&F0\e(B
+\e$B:n$r:FF~!J\e(Byanking\e$B!K$H8F$S$^$9!#>C$7$?%F%-%9%H$O!"85$HF1$8>l=j$K$G$b85\e(B
+\e$B$H$O0c$&>l=j$K$G$b:FF~$G$-$^$9!#$^$?!"2?EY$b:FF~$7$F%F%-%9%H$N%3%T!<$r\e(B
+\e$BJ#?t:n$k$3$H$b$G$-$^$9!#:FF~$N$?$a$N%3%^%s%I$O\e(B C-y \e$B$G$9!#\e(B
+
+\e$B!V>C5n!J\e(Bkill\e$B!K!W$H!V:o=|!J\e(Bdelete\e$B!K!W$N0c$$$K5$$r$D$1$F2<$5$$!#>C5n$7$?\e(B
+\e$B%F%-%9%H$O:FF~$G$-$^$9$,!":o=|$7$?$b$N$O:FF~$G$-$^$;$s!#0lHL$K!"BgNL$N\e(B
+\e$B%F%-%9%H$r>C$9%3%^%s%I$O$=$N%F%-%9%H$rJ]B8$7$F$*$-$^$9$,!"0lJ8;z$H$+6u\e(B
+\e$BGr9T$d6uGrJ8;z$r:o=|$9$k%3%^%s%I$O:o=|$7$?$b$N$rJ]B8$7$-$^$;$s!#\e(B
+
+>> \e$B6u9T$G$J$$9T$N@hF,$K%+!<%=%k$r0\F0$5$;$F2<$5$$!#\e(B
+   \e$B$=$l$+$i\e(B C-k \e$B$G$=$N9T$N%F%-%9%H$r>C5n$7$F2<$5$$!#\e(B
+>> \e$B$b$&0lEY\e(B C-k \e$B$r%?%$%W$7$F$/$@$5$$!#$=$N9T$KB3$/2~9TJ8;z$,>C$5$l$k$N\e(B
+   \e$B$,J,$j$^$7$?$+!#\e(B
+
+\e$B0l2sL\$N\e(B C-k \e$B$O$=$N9T$N%F%-%9%H$r>C$7!"#22sL\$N\e(B C-k \e$B$O$=$N9T<+?H$r>C$7\e(B
+\e$B$F$=$N@h$N9T$r>e$2$F$-$^$9!#\e(BC-k \e$B$N?tCM0z?t$N07$$$OFC<l$G$9!#0z?tJ,$N9T\e(B
+\e$B!J9T$NFbMF$H9T<+?H!K$r>C$7$^$9!#$3$l$OC1$J$k7+$jJV$7$G$O$"$j$^$;$s!#\e(B
+C-u 2 C-k \e$B$O#2$D$N9T$H$=$l$>$l$KB3$/2~9TJ8;z$r>C$7$^$9$,!"\e(BC-k \e$B$r#2EY%?\e(B
+\e$B%$%W$7$F$b$=$&$O$J$j$^$;$s!#\e(B
+
+\e$B:G8e$K>C5n$7$?%F%-%9%H$r8=:_%+!<%=%k$,$"$k0LCV$K:FF~$9$k$K$O\e(B C-y \e$B$r%?\e(B
+\e$B%$%W$7$^$9!#\e(B
+
+>> \e$B;n$7$F2<$5$$!#\e(BC-y \e$B$r%?%$%W$7$F:G8e$K>C5n$7$?%F%-%9%H$r:FF~$7$^$7$g$&!#\e(B
+
+C-y \e$B$O!"$"$J$?$,L5$/$7$?$b$N$r<h$jLa$9$b$N$@$H9M$($^$7$g$&!#\e(BC-k \e$B$rB3$1\e(B
+\e$B$F<B9T$9$k$H!">C5n$7$?3F9T$OA4It$^$H$a$FJ]B8$5$l$k$N$G!"0l2s$N\e(B C-y \e$B$G\e(B
+\e$B$=$l$i$N9T$,A4It:FF~$5$l$^$9!#\e(B
+
+>> C-k \e$B$r2?EY$+B3$1$F%?%$%W$7$F$_$F2<$5$$!#\e(B
 
-     \e$B$$$D$G$b!"%F%-%9%H$rJQ99$7$?$1$l$I$b!"$=$l$r$b$H$KLa$7$?$$$H$-$O\e(BC-x u
-\e$B$GD>$j$^$9!#IaDL$O4V0c$($?%3%^%s%I$rL58z$K$9$kF/$-$r$7$^$9!#7+$jJV$7$F\e(BUNDO
-\e$B$r9T$J$*$&$H$9$k;~$O!"2?EY$b$=$N%3%^%s%I$r9T$J$($P=PMh$k$h$&$K$J$C$F$$$^$9!#\e(B
+\e$B$5$"!">C5n$7$?%F%-%9%H$r:FF~$7$^$7$g$&!#\e(B
 
-       >> \e$B$3$N9T$r\e(BC-k\e$B$G>C$7$F2<$5$$!#$=$7$F!"\e(BC-x u\e$B$GLa$7$F2<$5$$!#\e(B
+>> C-y \e$B$r%?%$%W$7$F2<$5$$!#<!$K%+!<%=%k$r?t9T2<$K0\F0$5$;!"$^$?\e(B C-y \e$B$r\e(B
+   \e$B%?%$%W$7$F2<$5$$!#$I$&$d$C$F%F%-%9%H$r%3%T!<$9$k$+J,$j$^$7$?$M!#\e(B
 
-     C-_\e$B$O!"\e(BUNDO\e$B$r9T$J$&!"$b$&0l$D$N%3%^%s%I$G$9!#5!G=$O!"\e(BC-x u\e$B$HF1$8$G$9!#\e(B
+\e$B2a5n$K>C5n$7$?%F%-%9%H$r:FF~$7$?$$$N$K!"JL$N%F%-%9%H$r$=$N8e>C5n$7$?;~\e(B
+\e$B$O$I$&$9$l$P$h$$$G$7$g$&!)\e(B C-y \e$B$O:G8e$K>C5n$7$?$b$N$r:FF~$7$^$9!#$G$b\e(B
+\e$B$=$l$G$h$j0JA0$K>C5n$7$?%F%-%9%H$,$J$/$J$k$o$1$G$O$"$j$^$;$s!#$=$&$$$&\e(B
+\e$B%F%-%9%H$O\e(B M-y \e$B$G:FF~$G$-$^$9!#\e(BC-y \e$B$G:G8e$K>C5n$7$?%F%-%9%H$r:FF~$7$?\e(B
+\e$BD>8e$K\e(BM-y \e$B$r%?%$%W$9$k$H!"$=$N:FF~$5$l$?%F%-%9%H$O$=$l0JA0$K>C5n$7$?$b\e(B
+\e$B$N$KJQ99$5$l$^$9!#2?EY$bB3$1$F\e(B M-y \e$B$r%?%$%W$9$k$H!"$5$i$KA0$K>C5n$7$?\e(B
+\e$B%F%-%9%H$r8F$SLa$;$^$9!#K>$_$N%F%-%9%H$K9T$-Ev$C$?$i!"$=$l$O$=$N$^$^$K\e(B
+\e$B$7$FJT=8:n6H$rB3$1$l$P$h$$$N$G$9!#\e(B
 
-     C-_\e$B$d\e(BC-x u\e$B$K\e(BUNDO\e$B$N2s?t$r!"M?$($k$3$H$,=PMh$^$9!#\e(B
+\e$B$"$k2s?t$@$1\e(B M-y \e$B$r7+$jJV$7$?$i!"$^$?:G=i!J$D$^$j:G8e$K>C5n$7$?%F%-%9\e(B
+\e$B%H!K$KLa$j$^$9!#\e(B
 
+>> \e$B0l9T>C5n$7!"JL$N9T$K9T$C$F$=$N9T$r>C5n$7$F2<$5$$!#\e(B
+   \e$B$=$l$+$i\e(B C-y \e$B$G#2HVL\!J:G8e!K$K>C5n$7$?9T$r:FF~$7$F2<$5$$!#\e(B
+   \e$BB3$$$F\e(B M-y \e$B$G$=$N9T$r:G=i$K>C5n$7$?9T$KJQ$($F2<$5$$!#\e(B
+   M-y \e$B$rB3$1$I$&$J$k$+8+$F$_$^$7$g$&!##2HVL\$K>C5n$7$?9T$,La$C$FMh$k\e(B
+   \e$B$^$G\e(B M-y \e$B$r7+$jJV$7!"$5$i$K$b$&2?EY$+\e(B M-y \e$B$r$7$^$7$g$&!#\e(B
+   \e$B$b$7K>$_$J$i\e(B M-y \e$B$K@5$b$7$/$OIi$N?tCM0z?t$rM?$($F$bNI$$$G$7$g$&!#\e(B
 
-\e$B%U%!%$%k\e(B
-========
 
-     \e$B%F%-%9%H$X$NJQ99$r1J5WE*$K$9$k$?$a$K$O!"$=$l$r%U%!%$%k$KJ]B8$7$J$1$l$P\e(B
-\e$B$J$j$^$;$s!#J]B8$5$l$J$$$H!"$[$I$3$7$?JQ99$O!"\e(BEmacs\e$B$r=*N;$9$k$HF1;~$K<:$o$l\e(B
-\e$B$F$7$^$$$^$9!#\e(B
+\e$B!v<h$j>C$7\e(B(UNDO)
+================
 
-     \e$B$$$^8+$F$$$k%U%!%$%k$KBP$7$F!"$"$J$?$NJT=8$r9T$C$?$b$N$r=q$-9~$_$^$9!#\e(B
-\e$B$$$^8+$F$$$k%U%!%$%k$H$O!"4JC1$K$$$($PJT=8$7$F$$$k%U%!%$%k<+BN$N$3$H$G$9!#\e(B
+\e$B$b$7!"J8>O$rJQ99$7$?8e$G$=$NJQ99$O4V0c$$$@$C$?$H;W$C$?$i!"<h$j>C$7\e(B
+\e$B!J\e(Bundo\e$B!K%3%^%s%I\e(B C-x u \e$B$G$=$NJQ99$r<h$j>C$9$3$H$,$G$-$^$9!#\e(B
 
-     \e$B$"$J$?$,%U%!%$%k$r%;!<%V!JJ]B8$9$k!K$9$k$^$G!":#$^$G$NJQ99$OJT=8$7$F$$\e(B
-\e$B$k%U%!%$%k$K=q$-9~$^$l$k;v$O$"$j$^$;$s!#$=$l$O!"$"$J$?$,$=$N$h$&$K9T$$$?$/\e(B
-\e$B$J$$$N$K!"ESCf$^$GJQ99$r2C$($?$b$N$,>!<j$K=q$-9~$^$l$k$h$&$J;v$,$J$$$h$&$K\e(B
+\e$BDL>o!"\e(BC-x u \e$B$O0l$D$N%3%^%s%I$K$h$kJQ99$r<h$j>C$7$^$9!#B3$1$F2?EY$b\e(B C-x
+u \e$B$r9T$($P$=$N$?$S$K0l$DA0$N%3%^%s%I$,<h$j>C$7$K$J$j$^$9!#\e(B
+
+\e$B$?$@$7$3$l$K$ONc30$,Fs$D$"$j$^$9!#$^$:!"J8>O$rJQ99$7$J$$%3%^%s%I$O<h$j\e(B
+\e$B>C$7$K$J$j$^$;$s!#%+!<%=%k0\F0$d%9%/%m!<%k$N%3%^%s%I$,$=$l$KEv$?$j$^$9!#\e(B
+\e$B$=$l$+$i!"%F%-%9%HJ8;z$NA^F~!J<+8JA^F~%3%^%s%I!K$O\e(B 20 \e$B8D0l$^$H$a$G07$o\e(B
+\e$B$l$^$9!#$3$l$O%F%-%9%H$NA^F~$r<h$j>C$9$?$a$N\e(B C-x u \e$B$N2s?t$r8:$i$9$?$a\e(B
 \e$B$G$9!#\e(B
 
-     \e$B%;!<%V$r9T$C$?8e$G$5$(JQ99$7$?$b$N$,4V0c$C$F$$$?;~$N$?$a$K\e(BEmacs\e$B$OL>A0\e(B
-\e$B$rJQ$($F%*%j%8%J%k$N%U%!%$%k$r;D$7$^$9!#\e(B
+>> \e$B$3$N9T$r\e(BC-k\e$B$G>C$7$F2<$5$$!#$=$7$F!"\e(BC-x u \e$B$GLa$7$F2<$5$$!#\e(B
 
-\e$BHw9M\e(B:          \e$B$^$?!"\e(BEmacs\e$B$OITB,$N;vBV$KBP$7!"0lDj$N%?%$%_%s%0$4$H$K<+F0E*\e(B
-               \e$B$KJT=8$7$F$$$k%U%!%$%k$NFbMF$rL>A0$rJQ$($?%U%!%$%k$K%;!<%V$7\e(B
-               \e$B$^$9!#$3$l$K$h$C$F!"K|0l$N>l9g$O9T$C$?$NJQ99$KBP$7:G>.8B$NHo\e(B
-               \e$B32$G:Q$`$h$&$K$J$C$F$$$^$9!#\e(B
+C-_ \e$B$b<h$j>C$7!J\e(Bundo\e$B!K$r9T$J$&%3%^%s%I$G$9!#5!G=$O!"\e(BC-x u \e$B$HF1$8$G$9$,!"\e(B
+\e$BB3$1$F2?EY$b%?%$%W$9$k>l9g$O$h$jJXMx$G$9!#\e(BC-_ \e$B$NLdBj$O!"%-!<%\!<%I$K$h$C\e(B
+\e$B$F$O$I$&$d$C$F%?%$%W$9$k$N$+J,$j$E$i$$;v$G$9!#$@$+$i\e(B C-x u \e$B$,$"$k$N$G\e(B
+\e$B$9!#C<Kv$K$h$C$F$O!"%3%s%H%m!<%k%-!<$r2!$7$?$^$^\e(B / \e$B$r%?%$%W$9$k$H\e(B C-_ 
+\e$B$r%?%$%W$7$?$3$H$K$J$j$^$9!#\e(B
 
-     \e$B2hLL$N2<$NJ}$r8+$k$H!"$3$N$h$&$J46$8$G%b!<%I%i%$%s$,I=<($5$l$F$$$k$H;W\e(B
-\e$B$$$^$9!#\e(B
+C-_ \e$B$d\e(B C-x u \e$B$O?tCM0z?t$r7+$jJV$72s?t$H2r<a$7$^$9!#\e(B
 
 
-(\e$BNc\e(B)  [--]J:--**-Mule: MULE.tut     (Fundamental) ---55%--------------
+\e$B!v%U%!%$%k\e(B
+==========
 
+\e$BJT=8$7$F$$$kJ8>O$r915WE*$JJ*$K$9$k$K$O!"$=$l$r%U%!%$%k$KJ]B8$7$J$1$l$P\e(B
+\e$B$J$j$^$;$s!#$5$b$J$$$H!"\e(BXEmacs \e$B$N=*N;$HF1;~$K$=$l$O$J$/$J$C$F$7$^$$$^\e(B
+\e$B$9!#JT=8$7$?J*$r%U%!%$%k$KF~$l$k$K$O%U%!%$%k$r3+$$$F$+$i$7$^$9!#!J%U%!\e(B
+\e$B%$%k$r\e(B "visit" \e$B$9$k$H$b8@$$$^$9!K!#\e(B
 
-     \e$B$3$N\e(BEmacs\e$B%A%e!<%H%j%"%k$N%3%T!<$O\e(BMULE.tut\e$B$H8F$P$l$F$$$^$9!#%U%!%$%k$r\e(B
-\e$B%U%!%$%s%I!J%U%!%$%k$r8+$D$1$F%P%C%U%!$KFI$_9~$`$3$H!K$9$k$H!"\e(BMULE.tut\e$B$NIt\e(B
-\e$BJ,$KI=<($5$l$^$9!#Nc$($P!"\e(Bnew-file\e$B$H$$$&L>A0$N%U%!%$%k$r%U%!%$%s%I$7$?$J$i\e(B
-\e$B$P!"\e(B"Mule: new-file"\e$B$H$$$&%b!<%I%i%$%s$K$J$k$G$7$g$&!#\e(B
+\e$B%U%!%$%k$r3+$/$H$O!"$=$N%U%!%$%k$NCf?H$r\e(B XEmacs \e$B$G8+$k$3$H$r0UL#$7$^$9!#\e(B
+\e$B?'!9$J0UL#$G!"$=$l$O$"$J$?$,%U%!%$%k<+?H$rJT=8$7$F$$$k$+$NMM$G$9!#$7$+\e(B
+\e$B$7!"\e(BXEmacs \e$B$G9T$&JQ99$O%U%!%$%k$r%;!<%V$9$kKx$O915WE*$J$b$N$H$J$j$^$;\e(B
+\e$B$s!#$3$l$O!"$=$l$rK>$^$J$$$N$K!"ESCf$^$GJQ99$7$?%U%!%$%k$,;D$k$N$rHr$1\e(B
+\e$B$k$?$a$G$9!#%;!<%V$7$?8e$G$5$(!"JQ99$7$?$b$N$,4V0c$C$F$$$?;~$N$?$a$K!"\e(B
+\e$B85$N%U%!%$%k$OL>A0$rJQ$($F;D$5$l$^$9!#\e(B
 
-\e$BCm0U!'\e(B         \e$B%b!<%I%i%$%s$K$D$$$F$O8e$[$I@bL@$7$^$9!#>/$7$*BT$A$r!#\e(B
+\e$B2hLL$N0lHV2<6a$/$K!"\e(B"ISO7--%%-XEmacs: TUTORIAL.ja" \e$B$NMM$JJ8;zNs$G;O$^\e(B
+\e$B$j\e(B "----" \e$B$G=*$C$F$$$k9T$,$"$k$O$:$G$9!#2hLL$N$3$NItJ,$O>o$K8=:_3+$$$F\e(B
+\e$B$$$k%U%!%$%k$NL>A0$,I=<($5$l$F$$$^$9!#:#$O\e(B "TUTORIAL.ja" \e$B$H$$$&L>$N%U%!\e(B
+\e$B%$%k!J$3$l$O\e(B XEmacs \e$BF~Lg%,%$%I$N$"$J$?MQ$N%3%T!<$G$9!K$r3+$$$F$$$^$9!#\e(B
+XEmacs \e$B$G%U%!%$%k$r3+$/$H$=$N%U%!%$%k$NL>A0$,$3$NItJ,$K8=$l$^$9!#\e(B
 
-     \e$B%U%!%$%k$r%U%!%$%s%I$7$?$j!"%;!<%V$7$?$j$9$k%3%^%s%I$O!"$3$l$^$G$N$b$N\e(B
-\e$B$H$O0c$$!"#2$D$NJ8;z$+$i$J$C$F$$$^$9!#\e(BC-x  \e$B$KB3$$$FF~NO$9$kJ8;z$,!"%U%!%$%k\e(B
-\e$B$KBP$7$F9T$&A`:n$rI=$7$^$9!#\e(B
+\e$B%U%!%$%k$r3+$$$?$jJ]B8$7$?$j$9$k%3%^%s%I$O!"#2$D$NJ8;z$+$i@.$k$H$$$&E@\e(B
+\e$B$G:#$^$G3X$s$@B>$N%3%^%s%I$H$O0c$$$^$9!#N>J}$H$b!"\e(BControl-x \e$B$H$$$&J8;z\e(B
+\e$B$G;O$^$j$^$9!#\e(BControl-x \e$B$G;O$^$k%3%^%s%I$O$?$/$5$s$"$j$^$9!#B?$/$O%U%!\e(B
+\e$B%$%k!"%P%C%U%!$d$=$l$i$K4XO"$7$?$b$N$K4X78$7$?$3$H$r$7$^$9!#$3$l$i$N%3\e(B
+\e$B%^%s%I$O#2!"#3!"#4J8;z$G$9!#\e(B
 
-     \e$B$b$&0l$D$3$l$^$G$N$b$N$H0c$&E@$O!"%U%!%$%s%I$N;~!"%U%!%$%kL>$r\e(BEmacs\e$B$K\e(B
-\e$BLd$o$l$^$9!#$3$N$3$H$r!"C<Kv$+$i0z?t$rFI$_9~$s$G$/$k%3%^%s%I$H8@$C$F$$$^$9!#\e(B
+\e$B%U%!%$%k$r3+$/$?$a$N%3%^%s%I$O$3$l$^$G3X$s$@$b$N$H$O0c$$!"%U%!%$%k$NL>\e(B
+\e$BA0$r;XDj$7$J$1$l$P$J$j$^$;$s!#$3$l$r!"%3%^%s%I$,!VC<Kv$+$i0z?t$rFI$_9~\e(B
+\e$B$`!W$H8@$$$^$9!#:#$N>l9g$O0z?t$O%U%!%$%kL>$G$9!#<!$N%3%^%s%I\e(B
 
-\e$BCm0U!'\e(B         \e$B$3$N>l9g$O%U%!%$%kL>$G$9!#\e(B
+       C-x C-f   Find a file
 
-                    C-x C-f   \e$B%U%!%$%k$r8+$D$1$k!J%U%!%$%s%I$9$k!K\e(B
+\e$B$r%?%$%W$9$k$H!"\e(BXEmacs \e$B$O%U%!%$%kL>$rJ9$$$F$-$^$9!#%?%$%W$7$?%U%!%$%k\e(B
+\e$BL>$O2hLL$N:G2<9T$KI=<($5$l$^$9!#$3$N:G2<9T$O!"$3$&$$$&F~NO$N$?$a$K;H$C\e(B
+\e$B$F$$$k;~$O!"%_%K%P%C%U%!$H8F$S$^$9!#DL>o$NJT=8%3%^%s%I$G%U%!%$%kL>$rJT\e(B
+\e$B=8$9$k$3$H$b$G$-$^$9!#\e(B
 
-     Emacs\e$B$O%U%!%$%kL>$rJ9$$$F$-$^$9!#$=$l$O!"2hLL$N2<$N9T$K8=$l$^$9!#%U%!\e(B
-\e$B%$%kL>$r;XDj$7$F$$$kItJ,$O!"%_%K%P%C%U%!$H8F$P$l$k$b$N$G$9!#%_%K%P%C%U%!$O\e(B
-\e$B$3$NMM$J;H$o$lJ}$r$7$^$9!#%U%!%$%kL>$KB3$$$F!"%j%?!<%s%-!<$r2!$9$H!"%_%K%P\e(B
-\e$B%C%U%!$KI=<($5$l$F$$$?FbMF$O$b$&I,MW$G$O$J$/$J$k$N$G>C$($F$7$^$$$^$9!#\e(B
+\e$B%U%!%$%kL>$NF~NOCf!J$"$k$$$O$=$NB>$N%_%K%P%C%U%!F~NOCf!K$K\e(B C-g \e$B$K$h$C\e(B
+\e$B$F%3%^%s%I$r%-%c%s%;%k$G$-$^$9!#\e(B
 
-       >> C-x C-f\e$B$H%?%$%W$7$?8e$K\e(BC-g\e$B$H%?%$%W$7$F2<$5$$!#%_%K%P%C%U%!$NFbMF\e(B
-          \e$B$r<h$j>C$7!"$^$?!"\e(BC-x C-f\e$B%3%^%s%I$b<h$j>C$7$^$9!#$H8@$&Lu$G!"2?$b\e(B
-         \e$B%U%!%$%k$r8+$D$1$k$h$&$J$3$H$O$7$^$;$s!#\e(B
+>> C-x C-f \e$B$r%?%$%W$7$F$+$i\e(B C-g \e$B$r%?%$%W$7$F$_$^$7$g$&!#%_%K%P%C%U%!$,\e(B
+   \e$B<h$j>C$5$l!"$=$l$r;H$C$F$$$?%3%^%s%I\e(B C-x C-f \e$B<+BN$b<h$j>C$5$l$^$9!#\e(B
+   \e$B$@$+$i!"%U%!%$%k$O2?$b3+$+$l$^$;$s!#\e(B
 
-     \e$B:#EY$O%U%!%$%k$r%;!<%V$7$F$_$^$7$g$&!#:#$^$G$NJQ99$rJ]B8$9$k$?$a$K$O<!\e(B
-\e$B$N$h$&$J%3%^%s%I$r;H$$$^$9!#\e(B
+\e$B%U%!%$%kL>$rF~NO$7$?$i!"\e(B<Return>\e$B%-!<$r%?%$%W$7F~NO$r40N;$5$;$^$9!#$=$&\e(B
+\e$B$9$k$H!"\e(BC-x C-f \e$B%3%^%s%I$,Av$j;O$a;XDj$7$?%U%!%$%k$r3+$-$^$9!#%_%K%P%C\e(B
+\e$B%U%!$O\e(B C-x C-f \e$B%3%^%s%I$N=*N;$H$H$b$K>C$($^$9!#\e(B
 
-     C-x C-s   \e$B%U%!%$%k$r%;!<%V$9$k\e(B
+\e$B%U%!%$%k$NFbMF$,2hLL$KI=<($5$l$k$H!"$=$NFbMF$rJQ99$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B2C$($?JQ99$r915WE*$J$b$N$K$7$?$1$l$P!"<!$N%3%^%s%I$r%?%$%W$7$^$9!#\e(B
 
-     Emacs\e$B$NFbMF$O%U%!%$%k$K=q$-=P$5$l$^$9!#%;!<%V$9$k;~!"%*%j%8%J%k$N\e(B
-\e$B%U%!%$%k$O?7$7$$L>A0$r$D$1$i$l$F;D$5$l$F$$$k$N$GFbMF$O<:$o$l$^$;$s!#$=\e(B
-\e$B$N?7$7$$L>A0$O%*%j%8%J%k$N%U%!%$%k$NL>A0$K\e(B'~'\e$B$r$D$1$?$b$N$G$9!#\e(B
+       C-x C-s   Save the file
 
-     \e$B%;!<%V$,=*$o$k$H!"\e(BEmacs\e$B$O%;!<%V$7$?%U%!%$%k$NL>A0$rI=<($7$^$9!#\e(B
+\e$B$3$l$O\e(B XEmacs \e$B$,J];}$7$F$$$kJ8>O$r%U%!%$%k$K%3%T!<$7$^$9!#=i$a$F$3$l$r\e(B
+\e$B<B9T$9$k$H$-$O!"85$N%U%!%$%k$r?7$7$$L>A0$KIU$1BX$($k$N$G!"$=$NFbMF$O<:\e(B
+\e$B$o$l$^$;$s!#$=$N?7$7$$L>A0$O85$N%U%!%$%k$NL>A0$N:G8e$K\e(B'~'\e$B$r$D$1$?$b$N\e(B
+\e$B$G$9!#\e(B
 
-       >> C-x C-s\e$B$H%?%$%W$7$F%A%e!<%H%j%"%k$N%3%T!<$r%;!<%V$7$F2<$5$$!#$=$N\e(B
-          \e$B;~!"2hLL$N2<$NJ}$K\e(B"Wrote ...../MULE.tut"\e$B$HI=<($5$l$^$9!#\e(B
+\e$B%;!<%V$,=*$o$k$H!"%;!<%V$7$?%U%!%$%k$NL>A0$,I=<($5$l$^$9!#3d$HIQHK$K%;!<\e(B
+\e$B%V$7$?J}$,NI$$$G$7$g$&!#%7%9%F%`$,Mn$A$F$b$;$C$+$/$N:n6H$,%Q%"$K$J$i$J\e(B
+\e$B$$$h$&$K!#\e(B
 
-     \e$B?7$7$$%U%!%$%k$r:n$k;~!"$"$?$+$b0JA0$+$i$"$C$?%U%!%$%k$r%U%!%$%s%I$9$k\e(B
-\e$B$h$&$J%U%j$r$7$^$9!#$=$&$7$F!"$=$N%U%!%$%s%I$7$?%U%!%$%k$K%?%$%W$7$F$$$-$^\e(B
-\e$B$9!#\e(B
+>> C-x C-s \e$B$H%?%$%W$7$F$3$NF~Lg%,%$%I$N%3%T!<$r%;!<%V$7$F2<$5$$!#\e(B
+   \e$B2hLL:G2<CJ$K\e(B "Wrote ...TUTORIAL.ja" \e$B$HI=<($5$l$^$9!#\e(B
 
-     \e$B%U%!%$%k$r%;!<%V$7$h$&$H$7$?;~$K=i$a$F!"\e(BEmacs\e$B$O:#$^$GJT=8$7$F$$$?FbMF\e(B
-\e$B$r%U%!%$%k$NCf$K=q$-9~$_$^$9!#\e(B
+\e$BCm0U!'%7%9%F%`$K$h$C$F$O\e(B C-x C-s \e$B$H%?%$%W$9$k$H2hLL$,F0$+$J$/$J$j\e(B 
+XEmacs \e$B$,I=<($7$h$&$H$9$k$b$N$,2?$b2hLL$K=P$J$/$J$j$^$9!#$3$l$O!"%U%m!<\e(B
+\e$B%3%s%H%m!<%k$H8F$P$l$k#O#S$N5!G=$,\e(B C-s \e$B$rB*$(!"\e(BXEmacs \e$B$KEO$5$J$$$h$&$K\e(B
+\e$B$7$F$$$k$N$G$9!#$3$l$r2r=|$9$k$K$O\e(B C-q \e$B$r%?%$%W$7$^$9!#$=$l$+$i\e(B XEmacs 
+\e$B%^%K%e%"%k$N\e(B "Spontaneous Entry to Incremental Search (\e$BCN$i$L4V$K%$%s\e(B
+\e$B%/%j%a%s%?%k%5!<%A$K$J$k\e(B)" \e$B$N@a$rFI$s$G$/$@$5$$!#$3$N$d$C$+$$$J#O#S$N\e(B
+\e$B5!G=$K$I$&BP=h$9$l$PNI$$$+$,:\$C$F$$$^$9!#\e(B
 
+\e$B4{B8$N%U%!%$%k$r3+$-!"FbMF$r8+!"JT=8$9$k$3$H$,$G$-$^$9!#B8:_$7$J$$%U%!\e(B
+\e$B%$%k$r3+$/$3$H$b$G$-$^$9!#\e(BXEmacs \e$B$G?7$7$$%U%!%$%k$r:n$k$K$O<!$N$h$&$K\e(B
+\e$B$7$^$9!#%U%!%$%k$r3+$-$^$9!#:G=i$O6u$C$]$G$9$M!#J8>O$rF~NO$7$F$$$-$^$9!#\e(B
+\e$B%U%!%$%k$r%;!<%V$7$h$&$H$7$?;~$K=i$a$F?7$7$$%U%!%$%k$,:n$i$l!":#$^$GF~\e(B
+\e$BNO$7$?FbMF$,$=$l$K=q$-9~$^$l$^$9!#$=$l0J9_$O!"$"$J$?$O4{B8$N%U%!%$%k\e(B
+\e$B!J$?$C$?:#:n$i$l$?%U%!%$%k!K$rJT=8$7$F$$$k$H;W$C$F2<$5$$!#\e(B
 
-\e$B%P%C%U%!\e(B
-========
 
-     \e$B$b$7!"#2HVL\$N%U%!%$%k$r\e(B C-x C-f \e$B$G<h$j=P$9$H!"#1HVL\$N%U%!%$%k$O\e(BEmacs
-\e$BFbIt$K;D$j$^$9!#\e(BEmacs\e$BFbIt$K$"$k%U%!%$%k$+$i%F%-%9%H$rFI$_9~$s$GJ]B8$7$F$$$k\e(B
-\e$B$b$N$O%P%C%U%!$H8F$P$l$^$9!#%U%!%$%k$N<h$j=P$7$O!"\e(BEmacs\e$BFbIt$K?7$7$$%P%C%U%!\e(B
-\e$B$r:n$j$^$9!#\e(B
+\e$B!v%P%C%U%!\e(B
+==========
 
-     Emacs\e$B$NCf$KJ]B8$7$F$$$k%P%C%U%!$N%j%9%H$r8+$k$K$O!"<!$N$h$&$K%?%$%W$7\e(B
-\e$B$^$9!#\e(B
+\e$B#2$DL\$N%U%!%$%k$r\e(B C-x C-f \e$B$G3+$$$F$b!":G=i$N%U%!%$%k$O\e(B XEmacs \e$BFbIt$K\e(B
+\e$B;D$C$?$^$^$G$9!#$=$C$A$N%U%!%$%k$KLa$k$K$O$b$&0lEY\e(B C-x C-f \e$B$G$=$N%U%!\e(B
+\e$B%$%k$r3+$1$P$h$$$N$G$9!#$3$&$d$C$F!"4v$D$b$N%U%!%$%k$r\e(B XEmacs \e$B$G3+$/$3\e(B
+\e$B$H$,$G$-$^$9!#\e(B
 
-     C-x C-b
+>> "foo" \e$B$H$$$&L>$N%U%!%$%k$r:n$j$^$7$g$&!#\e(BC-x C-f foo <Return> \e$B$G$9!#\e(B
+   \e$B2?$+J8>O$rF~$l!"JT=8$7!"\e(BC-x C-s \e$B$G\e(B "foo" \e$B$r%;!<%V$7$F2<$5$$!#\e(B
+   \e$B:G8e$K\e(B C-x C-f TUTORIAL.ja <Retrun> \e$B$H%?%$%W$7\e(B
+   \e$BF~Lg%,%$%I$KLa$j$^$7$g$&!#\e(B
+   
+XEmacs \e$B$O%U%!%$%k$NFbMF$r%P%C%U%!!J\e(Bbuffer\e$B!K$H8F$P$l$k$b$N$NCf$K3JG<$7\e(B
+\e$B$F$$$^$9!#%U%!%$%k$r3+$/$H?7$7$$%P%C%U%!$,$G$-$^$9!#\e(BXEmacs \e$B$,8=:_;}$C\e(B
+\e$B$F$$$k%P%C%U%!$N%j%9%H$r8+$k$K$O!"<!$N$h$&$K%?%$%W$7$^$9!#\e(B
 
-       >> C-x C-b \e$B$H%?%$%W$7$J$5$$!#$=$l$>$l$N%P%C%U%!$,$I$N$h$&$KL>A0$r;}\e(B
-          \e$B$C$F$$$k$+!"$=$7$F!"$I$N$h$&$J%U%!%$%kL>$r$D$1$F$$$k$N$+4Q;!$7$J\e(B
-          \e$B$5$$!#\e(B
+       C-x C-b   List buffers
 
-     \e$B%P%C%U%!$K$O%U%!%$%k$H0lCW$J$$$b$N$b$"$j$^$9!#$?$H$($P!"\e(B
-"*Buffer List*" \e$B$H$$$&%U%!%$%k$O$"$j$^$;$s!#$3$l$O\e(B C-x C-b \e$B$K$h$C$F:n$i$l\e(B
-\e$B$?%P%C%U%!%j%9%H$KBP$7$F$N%P%C%U%!$G$9!#\e(B
+>> C-x C-b \e$B$r;n$7$F$_$^$7$g$&!#\e(B
 
-     \e$B$"$J$?$,8+$F$$$k\e(BEmacs\e$B%&%#%s%I%&Fb$K$"$k!"$I$s$J%F%-%9%H$G$b!"$$$:$l$+\e(B
-\e$B$N%P%C%U%!Fb$K$"$j$^$9!#\e(B
+\e$B3F%P%C%U%!$,$I$s$JIw$KL>A0$d$=$l$,3+$$$F$$$k%U%!%$%k$KBP$9$k%U%!%$%kL>\e(B
+\e$B$r;}$C$F$$$k$+8+$F2<$5$$!#%U%!%$%k$r3+$$$F$$$J$$%P%C%U%!$b$"$j$^$9!#$?\e(B
+\e$B$H$($P!"\e(B"*Buffer List*" \e$B$H$$$&L>$N%P%C%U%!$O$I$s$J%U%!%$%k$b3+$$$F$$$^\e(B
+\e$B$;$s!#$3$l$O%P%C%U%!$N%j%9%H$rFbMF$H$9$k%P%C%U%!$G!"\e(BC-x C-b \e$B$G:n$i$l$?\e(B
+\e$B$b$N$G$9!#\e(BXEmacs \e$B$N%&%#%s%I%&Fb$K$"$k%F%-%9%H$O$I$l$b!"$$$:$l$+$N%P%C\e(B
+\e$B%U%!$N0lIt$G$9!#\e(B
 
-       >> \e$B%P%C%U%!%j%9%H$r>C$9$?$a\e(B C-x 1 \e$B$H%?%$%W$7$J$5$$!#\e(B
+>> C-x 1 \e$B$H%?%$%W$7$F%P%C%U%!%j%9%H$r>C$7$^$7$g$&!#\e(B
 
-     \e$B$b$7!"$"$k%U%!%$%k$N%F%-%9%H$KJQ99$r9T$J$C$F$+$i!"B>$N%U%!%$%k$r<h$j=P\e(B
-\e$B$7$?$H$7$?$i!":G=i$N%U%!%$%k$O%;!<%V$5$l$F$$$^$;$s!#$=$NJQ99$O\e(BEmacs\e$BFbIt$N%U\e(B
-\e$B%!%$%k$HBP1~$9$k%P%C%U%!$NCf$@$1$K9T$J$o$l$F$$$^$9!#\e(B
+\e$B$"$k%U%!%$%k$NFbMF$K$J$s$i$+$NJQ99$r2C$(!"$=$l$+$iB>$N%U%!%$%k$r3+$$$F\e(B
+\e$B$b!":G=i$N%U%!%$%k$O$^$@%;!<%V$5$l$^$;$s!#JQ99$O\e(B XEmacs \e$B$NFbIt!"$=$N%U%!\e(B
+\e$B%$%k$KBP1~$9$k%P%C%U%!$NCf$K;D$C$?$^$^$G$9!##2HVL\$N%U%!%$%k$N%P%C%U%!\e(B
+\e$B$r:n$C$?$j!"JT=8$7$?$j$7$F$b!":G=i$N%U%!%$%k$N%P%C%U%!$K$O2?$N1F6A$b$"\e(B
+\e$B$j$^$;$s!#$3$l$O$H$F$bLr$KN)$A$^$9$,!":G=i$N%U%!%$%k$N%P%C%U%!$r%;!<%V\e(B
+\e$B$9$k2?$+JXMx$JJ}K!$,I,MW$@$H$$$&$3$H$G$b$"$j$^$9!#\e(B C-x C-s \e$B$G%;!<%V$9\e(B
+\e$B$k$?$a$K\e(B C-x C-f \e$B$G85$N%P%C%U%!$KLa$k$N$O$OLq2p$G$9!#$=$3$G<!$N%3%^%s\e(B
+\e$B%I$r;H$$$^$9!#\e(B
 
-     \e$B#2HVL\$N%U%!%$%k$KBP1~$9$k%P%C%U%!$r:n$C$?$j!"%(%G%#%C%H$7$?$j$7$F$b!"\e(B
-\e$B#1HVL\$N%U%!%$%k$KBP1~$9$k%P%C%U%!$K$O2?$b1F6A$rM?$($^$;$s!#$3$l$O$H$F$b;H\e(B
-\e$B$$0W$/!"$^$?!"#1HVL\$N%U%!%$%k$KBP1~$9$k%P%C%U%!$r<h$C$F$*$/$?$a$KLr$KN)$D\e(B
-\e$BJ}K!$G$9!#\e(B
+     C-x s   \e$B2?$l$+$N%P%C%U%!$r%;!<%V$9$k\e(B
 
-     C-x C-s \e$B$G%P%C%U%!$r%;!<%V$9$k$?$a$K\e(B C-x C-f \e$B$G%P%C%U%!$r@Z$jBX$($k$N\e(B
-\e$B$OLq2p$G$9!#$=$3$G<!$N%3%^%s%I$r;H$$$^$9!#\e(B
+C-x s \e$B$O!"$^$@%;!<%V$7$F$$$J$$JQ99$,$"$k%P%C%U%!$=$l$>$l$K$D$$$F!"$=$l\e(B
+\e$B$r%;!<%V$9$k$+$I$&$+$rJ9$$$F$-$^$9!#\e(B
 
-     C-x s   \e$B8=:_$"$k%P%C%U%!$r%;!<%V$9$k!#\e(B
+>> \e$B0l9T%F%-%9%H$rF~NO$7$F$+$i\e(B C-x s \e$B$H%?%$%W$7$F2<$5$$!#\e(B
+   TUTORIAL.ja \e$B$H$$$&%P%C%U%!$r%;!<%V$9$k$+$I$&$+J9$$$F$/$k$O$:$G$9!#\e(B
+   \e$B!V$O$$!W$HEz$($k$?$a$K\e(B "y" \e$B$H%?%$%W$7$F2<$5$$!#\e(B
 
-     C-x s \e$B$OFbMF$rJQ$($?%P%C%U%!A4$F$r%U%!%$%k$K%;!<%V$7$^$9!#$3$N;~!"$R$H\e(B
-\e$B$D$R$H$D$N\e(B(\e$B%;!<%V$5$l$k$Y$-\e(B)\e$B%P%C%U%!$KBP$7$F!"%;!<%V$9$k$+!"$7$J$$$+$r\e(By\e$B$+\e(Bn
-\e$B$GLd$o$l$^$9!#$3$NI=<($O2hLL$N2<$N9T$KI=<($5$l$^$9!#Nc$($P!"$3$N$h$&$K$G$9!#\e(B
+\e$B!v%a%K%e!<$r;H$&\e(B
+----------------
 
-             Save file  /usr/private/yours/MULE.tut? (y or n)
+\e$B$b$7\e(B X \e$BC<Kv$r;H$C$F$$$l$P!"\e(BXEmacs \e$B$N2hLL$N:G>eIt$K%a%K%e!<%P!<$,$"$k$3\e(B
+\e$B$H$K5$IU$/$G$7$g$&!#$3$N%a%K%e!<%P!<$r;H$C$F!V%U%!%$%k$r3+$/!W$H$$$&$h\e(B
+\e$B$&$J$[$H$s$I$N$h$/;H$&\e(B XEmacs \e$B$N%3%^%s%I$r;HMQ$9$k$3$H$,$G$-$^$9!#FCDj\e(B
+\e$B$N%3%^%s%I$r;HMQ$9$k$?$a$NBG80$r3P$($J$/$F$h$$$N$G!":G=i$O$3$NJ}$,4JC1\e(B
+\e$B$K;W$($k$G$7$g$&!#\e(BXEmacs \e$B$K47$l$F$/$k$K$7$?$,$C$F!"%-!<%\!<%I$N%3%^%s\e(B
+\e$B%I$r;H$&$3$H$,4JC1$K$J$C$F$/$k$G$7$g$&!#BP1~$9$k%-!<%\!<%I%3%^%s%I$,%3\e(B
+\e$B%^%s%I$N<!$K=q$+$l$F$$$k$+$i$G$9!#\e(B
 
+\e$B%a%K%e!<%P!<$K$O%-!<%\!<%I$G40A4$KF1Ey$KBP1~$9$k$b$N$,L5$$9`L\$,B?$/$"\e(B
+\e$B$j$^$9!#Nc$($P!"\e(BBuffers \e$B%a%K%e!<$O:G6a;H$o$l$?=g$KA*Br2DG=$J%P%C%U%!$N\e(B
+\e$B0lMw$rI=<($7$^$9!#C1$K\e(B Buffers \e$B%a%K%e!<$GL>A0$r8+$D$1$FA*Br$9$k$@$1$G\e(B
+\e$B$I$N%P%C%U%!$K$G$b0\F0$G$-$^$9!#\e(B
 
 
-\e$B%3%^%s%I$N3HD%\e(B
-==============
+\e$B!v%^%&%9$r;H$&\e(B
+--------------
+
+X \e$B$N2<$G<B9T$5$l$F$$$k$H$-$O!"\e(BXEmacs \e$B$O40A4$K%^%&%95!G=$H0lBN2=$7$F$$\e(B
+\e$B$^$9!#K>$_$N>l=j$G:8%\%?%s$r%/%j%C%/$9$k$3$H$G%F%-%9%H$N%+!<%=%k$r0\F0\e(B
+\e$B$9$k$3$H$,$G$-!"A*Br$7$?$$%F%-%9%H$r:8%^%&%9%\%?%s$G%I%i%C%0$9$k$3$H$G\e(B
+\e$B%F%-%9%H$rA*Br$9$k$3$H$,$G$-$^$9!#!J$b$7$/$O!"$=$NBe$o$j$K%F%-%9%H$rA*\e(B
+\e$BBr$9$k$?$a$K0lJ}$NC<$G:8%^%&%9%\%?%s$r%/%j%C%/$7!"B>$NC<$K0\F0$7$F\e(B
+Shift \e$B$r2!$7$J$,$i%/%j%C%/$9$k$3$H$,$G$-$^$9!#!K\e(B
+
+\e$BA*Br$7$?%F%-%9%H$r>C5n\e(B \e$B!J\e(Bkill\e$B!K\e(B \e$B$9$k$?$a$K$O!"\e(BC-w \e$B$+!"\e(BEdit \e$B%a%K%e!<$N\e(B
+Cut \e$B9`L\$r;H$($^$9!#$3$l$i$OEy2A$G$O\e(B*\e$BL5$$\e(B*\e$B$3$H$KCm0U$7$F$/$@$5$$\e(B: C-w
+\e$B$O\e(BXEmacs \e$B$NFbIt$N$_$K%F%-%9%H$rJ]B8$7$^$9$,!J>e$G@bL@$7$?\e(B C-k \e$B$H;w$F$$\e(B
+\e$B$^$9!K!"\e(BCut \e$B$O$3$l$H$H$b$K%F%-%9%H$rB>$N%"%W%j%1!<%7%g%s$,;HMQ2DG=$J\e(B X
+\e$B$N%/%j%C%W%\!<%I$K$bF~$l$^$9!#\e(B
 
-     \e$B%(%G%#%?$K$O!"%3%s%H%m!<%k!&%-!<$d%a%?!&%-!<$GF~NO$G$-$k$b$N$h$j$b$:$C\e(B
-\e$B$HB?$/$N%3%^%s%I$,$"$j$^$9!#$3$l$i$r07$&$?$a$K!"3HD%!J\e(BeXtend\e$B!K%3%^%s%I$r\e(B
+X \e$B$N%/%j%C%W%\!<%I$+$i%F%-%9%H$r<hF@$9$k$K$O!"\e(BEdit \e$B%a%K%e!<$N\e(B Paste \e$B9`\e(B
+\e$BL\$r;H$C$F$/$@$5$$!#\e(B
+
+\e$B??Cf$N%^%&%9$N%\%?%s$OIaDL$O2hLL$G8+$($F$$$k$b$N$rA*Br$9$k$?$a$K;H$o$l\e(B
+\e$B$^$9!#Nc$($P!"\e(BInfo\e$B!J%*%s%i%$%s\e(B XEmacs \e$B@bL@J8=q!K$K\e(B C-h i \e$B$+\e(B Help \e$B%a%K%e!<\e(B
+\e$B$r;H$C$FF~$l$P!"%O%$%i%$%H$5$l$?%j%s%/$r??Cf$N%\%?%s$r2!$9$3$H$GDI$&$3\e(B
+\e$B$H$,$G$-$^$9!#F1MM$K!"%U%!%$%kL>$rF~NO$7$F$$$k$H$-$K!JNc$($P!"!V%U%!%$\e(B
+\e$B%k$r3+$/!W$GF~NO$rB%$5$l$?$H$-!K\e(B TAB \e$B$GJd408uJd$rI=<($5$;$k$H!"8uJd$N\e(B
+\e$B0l$D$rA*Br$9$k$?$a$K??Cf$N%\%?%s$G%/%j%C%/$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B1&$N%^%&%9$N%\%?%s$O%]%C%W%"%C%W%a%K%e!<$rI=<($7$^$9$3$N%a%K%e!<$NFbMF\e(B
+\e$B$O:#$N%b!<%I$K0MB8$7!"IaDL$O;HMQ$70W$$$h$&$K#2!"#3$NNI$/;H$o$l$k%3%^%s\e(B
+\e$B%I$r4^$s$G$-$^$9!#\e(B
+
+>> \e$B1&%^%&%9%\%?%s$r2!$7$F$/$@$5$$!#\e(B
+
+\e$B%a%K%e!<$rI=<($5$;B3$1$k$?$a$K$O%\%?%s$r2!$7B3$1$kI,MW$,$"$j$^$9!#\e(B
+
+
+\e$B!v%3%^%s%I$N3HD%\e(B
+================
+
+XEmacs \e$B$K$O!"%3%s%H%m!<%kJ8;z$d%a%?J8;z$K3dEv$i$l$k$h$j$b$:$C$H$:$C$H\e(B
+\e$BB?$/$N%3%^%s%I$,$"$j$^$9!#$3$l$i$r07$&$?$a$K!"3HD%!J\e(BeXtend\e$B!K%3%^%s%I$r\e(B
 \e$B;H$$$^$9!#$=$l$K$O!"0J2<$N#2$D$N<oN`$,$"$j$^$9!#\e(B
 
      C-x     \e$BJ8;z$K$h$k3HD%!#B3$1$F0lJ8;z$rF~NO$7$^$9!#\e(B
      ESC x   \e$BL>A0$K$h$k3HD%!#B3$1$F%3%^%s%I$NL>A0$rF~NO$7$^$9!#\e(B
 
-     \e$B$3$l$i$O0lHL$K!"JXMx$@$1$l$I$b!"$3$l$^$G8+$F$-$?$b$N$[$IIQHK$K$OMQ$$$i\e(B
-\e$B$l$J$$%3%^%s%I$N$?$a$N$b$N$G$9!#\e(BC-x  C-f \e$B!J%U%!%$%s%I!K$d\e(B C-x C-s\e$B!J%;!<%V!K\e(B
-\e$B$O$3$NCg4V$G$9!#B>$K!"\e(BC-x C-c\e$B!J%(%G%#%?$N=*N;!K$b$=$&$G$9!#\e(B
+\e$B$3$l$i$O!"0lHLE*$K$OJXMx$@$1$l$I$b!"$3$l$^$G8+$F$-$?$b$N$[$I$OIQHK$KMQ\e(B
+\e$B$$$i$l$J$$%3%^%s%I$G$9!#\e(BC-x C-f \e$B!J%U%!%$%k$r3+$/!K$d\e(B C-x C-s\e$B!J%U%!%$%k\e(B
+\e$B$r%;!<%V!K$O$3$NCg4V$G$9!#B>$K!"\e(BC-x C-c\e$B!J\e(BXEmacs \e$B$r=*N;!K$b$=$&$G$9!#\e(B
+C-x C-c \e$B$K4X$7$F$O!"$=$l$^$G$K2C$($?JQ99$,L5$/$J$k$N$r?4G[$9$kI,MW$O$"\e(B
+\e$B$j$^$;$s!#\e(BXEmacs \e$B$r=*N;$5$;$kA0$KJQ99$5$l$?3F%U%!%$%k$r%;!<%V$9$k$+$I\e(B
+\e$B$&$+J9$$$F$-$^$9$+$i!#\e(B
 
-     C-z\e$B$O\e(BEmacs\e$B$rH4$1$k$N$KNI$/;H$o$l$kJ}K!$G$9!#\e(BEmacs\e$B$r=*N;$9$k$3$H$J$/!"\e(B
-\e$B0lC6!"\e(Bcsh\e$B$N%l%Y%k$KLa$k$K$O0lHVNI$$J}K!$H8@$($k$G$7$g$&!#\e(BC-z\e$B$r9T$J$o$l$F$b\e(B
-Emacs\e$B$O%9%H%C%W$7$F$$$k$@$1$G!"FbMF$,GK2u$5$l$k$H$$$&$3$H$O$"$j$^$;$s!#\e(B
+C-z \e$B$O!V0l;~E*$K!W\e(B XEmacs \e$B$rH4$1$k%3%^%s%I$G$9!#$^$?F1$8\e(B XEmacs \e$B%;%C%7%g\e(B
+\e$B%s$KLa$k$3$H$,$G$-$^$9!#\e(B
 
-\e$BCm0U\e(B:          \e$B$?$@$7\e(BX-window\e$B$G9T$J$C$F$$$k>l9g!"$b$7$/$O;HMQ$7$F$$$k%7%'%k\e(B
-               \e$B$,\e(Bsh\e$B$N;~$O!"$3$N8B$j$G$O$"$j$^$;$s!#\e(B
+\e$B$=$l$,$G$-$k%7%9%F%`>e$J$i!"\e(BC-z \e$B$O\e(B XEmacs \e$B$r!VCfCG!W$5$;$^$9!#$D$^$j\e(B 
+XEmacs \e$B$r=*N;$9$k$3$H$J$/!"%3%^%s%I%7%'%k$KLa$k$3$H$,$G$-$^$9!#BgJ}$N\e(B
+\e$BI8=`E*$J%7%'%k$J$i!"\e(B`fg' \e$B%3%^%s%I$b$7$/$O\e(B `%emacs' \e$B$K$h$C$F\e(B XEmacs \e$B$r\e(B
+\e$B:F3+$G$-$^$9!#\e(B
 
+\e$B!VCfCG!W5!G=$r<BAu$7$F$$$J$$%7%9%F%`$G$O!"\e(BC-z \e$B$O\e(B XEmacs \e$B$N2<$GAv$k%5%V\e(B
+\e$B%7%'%k$r:n$j!"B>$N%W%m%0%i%`$rAv$i$;$F$+$i$^$?\e(B XEmacs \e$B$KLa$k$3$H$,$G$-\e(B
+\e$B$k$h$&$K$7$^$9!#$3$N>l9gK\Ev$K\e(B XEmacs \e$B$+$iH4$1=P$k$o$1$G$O$"$j$^$;$s$N\e(B
+\e$B$G!"%7%'%k%3%^%s%I$N\e(B `exit' \e$B$,$=$N%5%V%7%'%k$+$i\e(B XEmacs \e$B$KLa$kIaDL$N$d\e(B
+\e$B$jJ}$G$9!#\e(B
 
-     C-x  \e$B%3%^%s%I$O!"$?$/$5$s$"$j$^$9!#$9$G$K3X$s$@$b$N$O0J2<$N$b$N$G$9!#\e(B
+C-x C-c \e$B$O%m%0%"%&%H$7$h$&$H;W$&;~$K;H$&$b$N$G$9!#%a!<%k%D!<%k!J\e(Bmail 
+\e$B%3%^%s%IEy!K$d$=$NB>$NMM!9$J%"%W%j%1!<%7%g%s%W%m%0%i%`$,5/F0$7$?\e(B 
+XEmacs \e$B$+$iH4$1=P$k>l9g$K;H$&$N$b@5$7$$;H$$J}$G$9!#$3$l$i$N%W%m%0%i%`\e(B
+\e$B$O\e(B XEmacs \e$B$NCfCG$K$I$&BP=h$7$FNI$$$+CN$i$J$$$G$7$g$&$+$i!#$7$+$7$J$,$i!"\e(B
+\e$BIaDL$N>l9g$O!"%m%0%"%&%H$7$h$&$7$J$$8B$j$O\e(B XEmacs \e$B$r=*N;$5$;$k$h$j$O\e(B 
+C-z \e$B$GCfCG$5$;$kJ}$,NI$$$G$7$g$&!#\e(B
 
-     C-x C-f   \e$B%U%!%$%k$NJT=8!J\e(BFind\e$B!K\e(B
-     C-x C-s   \e$B%U%!%$%k$NJ]B8!J\e(BSave\e$B!K\e(B
-     C-x C-b   \e$B%P%C%U%!%j%9%H$NI=<(\e(B
-     C-x C-c   \e$B%(%G%#%?$r=*N;$9$k!#%U%!%$%k$NJ]B8$O!"<+F0E*$K$O9T$o$l$^$;\e(B
-               \e$B$s!#$7$+$7!"$b$7%U%!%$%k$,JQ99$5$l$F$$$l$P!"%U%!%$%k$NJ]B8\e(B
-               \e$B$r$9$k$N$+$I$&$+$rJ9$$$F$-$^$9!#J]B8$7$F=*N;$9$kIaDL$NJ}K!\e(B
-               \e$B$O!"\e(BC-x C-s C-x C-c \e$B$H$9$k$3$H$G$9!#\e(B
+C-x \e$B%3%^%s%I$O$?$/$5$s$"$j$^$9!#$3$l$^$G$K!"0J2<$r3X$S$^$7$?!#\e(B
 
-     \e$BL>A0$K$h$k3HD%%3%^%s%I$K$O!"$"$^$j;H$o$l$J$$$b$N$d!"FCDj$N%b!<%I$G$7$+\e(B
-\e$B;H$o$J$$$b$N$J$I$,$"$j$^$9!#Nc$H$7$F!"\e(B"command-apropos" \e$B$r$H$j$"$2$^$9!#$3\e(B
-\e$B$N%3%^%s%I$O%-!<%o!<%I$rF~NO$5$;!"$=$l$K%^%C%A$9$kA4$F$N%3%^%s%I$NL>A0$rI=\e(B
-\e$B<($7$^$9!#\e(BESC x \e$B$H%?%$%W$9$k$H!"%9%/%j!<%s$N2<$K\e(B "M-x" \e$B$,I=<($5$l$^$9!#$3$l\e(B
-\e$B$KBP$7$F!"<B9T$9$k%3%^%s%I$NL>A0!J:#$N>l9g!"\e(B"command-apropos"\e$B!K$rF~NO$7$^$9!#\e(B
-"command-a" \e$B$^$GF~NO$7$?8e%9%Z!<%9$rF~$l$l$P!"8e$NItJ,$O<+F0E*$KJd$o$l$^$9!#\e(B
-\e$B$3$N8e!"%-!<%o!<%I$rJ9$+$l$^$9$+$i!"CN$j$?$$J8;zNs$r%?%$%W$7$^$9!#$J$*!"%-!<\e(B
-\e$B%o!<%I$rF~$l$J$$$H!"A4$F$N%3%^%s%I$,I=<($5$l$^$9!#\e(B
+       C-x C-f   \e$B%U%!%$%k$r3+$/!J\e(BFind\e$B!K\e(B
+       C-x C-s   \e$B%U%!%$%k$N%;!<%V!J\e(BSave\e$B!K\e(B
+       C-x C-b   \e$B%P%C%U%!$N%j%9%H%"%C%W\e(B
+       C-x C-c   XEmacs \e$B$r=*N;\e(B
+       C-x u     \e$B<h$j>C$7\e(B        
 
-       >> ESC x \e$B$r%?%$%W$7!"B3$1$F!"\e(B"command-apropos<Return>" \e$B$"$k$$$O\e(B
-          "command-a<Space><Return>" \e$B$H%?%$%W$7$^$9!#<!$K!"\e(B"kanji<Return>"
-          \e$B$H%?%$%W$7$^$9!#\e(B
+\e$BL>A0$K$h$k3HD%%3%^%s%I$K$O!"$"$^$j;H$o$J$$$b$N$d!"FCDj$N%b!<%I$G$7$+;H\e(B
+\e$B$o$J$$$b$N$,$"$j$^$9!#$?$H$($P\e(B replace-string \e$B$G$9$,!"$3$l$OJ8;zNs$rCV\e(B
+\e$B49$9$k$b$N$G$9!#\e(BM-x \e$B$r%?%$%W$9$k$H!"\e(BXEmacs \e$B$O2hLL$N:G2<9T$K\e(B M-x \e$B$HI=<(\e(B
+\e$B$7F~NO$rB%$9$N$G!"$=$3$K%3%^%s%I$NL>A0!J$3$N>l9g\e(B "replace-string"\e$B!K$r\e(B
+\e$BF~$l$J$1$l$P$J$j$^$;$s!#\e(B"repl s<TAB>" \e$B$H$@$1%?%$%W$9$k$H\e(B XEmacs \e$B$,%3%^\e(B
+\e$B%s%IL>$rJd40$7$F$/$l$^$9!#%3%^%s%IL>$rF~$l$?$i\e(B <Return> \e$B$rBG$C$F2<$5$$!#\e(B
 
-     \e$B8=$l$?!V%&%#%s%I%&!W$r>C$9$K$O!"\e(BC-x 1 \e$B$H%?%$%W$7$^$9!#\e(B
+"Replace string" \e$B%3%^%s%I$K$O0z?t$,Fs$DI,MW$G$9!#$I$NJ8;zNs$r$I$&CV49\e(B
+\e$B$9$k$+$G$9!#3F0z?t$rF~NO$9$k$?$S$K\e(B <Return> \e$B$rBG$C$F2<$5$$!#\e(B
 
-\e$B%b!<%I%i%$%s\e(B
-============
 
-     \e$B$b$7$f$C$/$j$H%3%^%s%I$rBG$C$?$J$i$P!"2hLL$N2<Dl$N%(%3!<%(%j%"$H8F$P$l\e(B
-\e$B$k>l=j$KBG$C$?$b$N$,I=<($5$l$^$9!#%(%3!<%(%j%"$O2hLL$N\e(B1\e$B$P$s2<$N9T$G$9!#$=$N\e(B
-\e$B$9$0>e$N9T$O!"%b!<%I%i%$%s$H8F$P$l$F$$$^$9!#%b!<%I%i%$%s$O$3$s$JIw$KI=<($5\e(B
-\e$B$l$F$$$k$G$7$g$&!#\e(B
+>> \e$B%+!<%=%k$r$3$3$+$i#29T2<$N6u9T$K0\F0$5$;$F2<$5$$!#\e(B
+   M-x repl s<Return>changed<Return>Altered<Return> \e$B$H%?%$%W$7$^$7$g$&!#\e(B
 
- [--]J:--**-Mule: MULE.tut     (Fundamental) ---NN%--------------
+   \e$B$3$N9T$,$I$&JQ$o$k$+\e(B(changed)\e$B8+$^$7$g$&!#$"$J$?$O%+!<%=%k0J9_A4It$N\e(B 
+   c-h-a-n-g-e-d \e$B$H$$$&8l$r\e(B "altered" \e$B$KJQ$($?$N$G$9!#\e(B
 
 
-\e$BCm0U\e(B:           NN%\e$B$N\e(BNN\e$B$O?t;z$,F~$C$F$$$^$9!#$"$J$?$,;H$C$F$$$k\e(BEmacs\e$B$N%b!<\e(B
-               \e$B%I%i%$%s$H0c$&$+$bCN$l$J$$$1$I!"92$F$J$$$h$&$K!#Nc$($P!";~4V\e(B
-               \e$B$d\e(Buptime\e$B$,I=<($5$l$F$$$k$N$O!"\e(Bdisplay-time\e$B$H$$$&5!G=$,F0$$$F\e(B
-               \e$B$$$k$+$i$G$9!#\e(B
+\e$B!v<+F0%;!<%V\e(B
+============
 
-     \e$B$3$N9T$K$h$C$FB?$/$NM-MQ$J>pJs$,F@$i$l$^$9!#\e(B
+\e$B%U%!%$%k$KJQ99$r2C$($F$^$@%;!<%V$7$F$$$J$$>l9g!"$=$l$i$NJQ99$O7W;;5!$,\e(B
+\e$B%/%i%C%7%e$9$k$H<:$o$l$F$7$^$&2DG=@-$,$"$j$^$9!#$=$&$$$&;vBV$rHr$1$k$?\e(B
+\e$B$a!"JT=8Cf$N3F%U%!%$%k$K$D$$$F<+F0%;!<%V%U%!%$%k$,Dj4|E*$K=q$+$l$^$9!#\e(B
+\e$B<+F0%;!<%V%U%!%$%k$OF,$H$*?,$K\e(B # \e$B$,IU$$$F$$$^$9!#Nc$($P\e(B "hello.c" \e$B$H$$\e(B
+\e$B$&%U%!%$%k$N<+F0%;!<%V%U%!%$%k$O\e(B "#hello.c#" \e$B$G$9!#DL>o$NJ}K!$G%U%!%$\e(B
+\e$B%k$r%;!<%V$7$?$H$-$K!"$=$&$$$&<+F0%;!<%V%U%!%$%k$O>C$5$l$^$9!#\e(B
 
+\e$B7W;;5!$,%/%i%C%7%e$7$?>l9g!"<+F0%;!<%V$5$l$?JT=8$r2sI|$5$;$k$3$H$,$G$-\e(B
+\e$B$^$9!#IaDL$K%U%!%$%k!JJT=8$7$F$$$?$b$N$G!"<+F0%;!<%V%U%!%$%k$8$c$"$j$^\e(B
+\e$B$;$s!K$r3+$-!"$=$l$+$i\e(B M-x recover file<Return> \e$B$H%?%$%W$9$k$N$G$9!#3N\e(B
+\e$BG'$r5a$a$F$-$^$9$N$G!"\e(Byes<Return> \e$B$H%?%$%W$7<+F0%;!<%V$5$l$?%G!<%?$r2s\e(B
+\e$BI|$7$^$9!#\e(B
 
-     \e$B:#!"$"$J$?$,8+$F$$$k%U%!%$%kL>$rI=<($7$F$$$^$9!#\e(BNN%\e$B$O8=:_%9%/%j!<%s>e\e(B
-\e$B$K%U%!%$%k$N0lHV>e$+$i2?%Q!<%;%s%HL\$,I=<($5$l$F$$$k$+$r<($7$F$$$^$9!#%U%!\e(B
-\e$B%$%k$N0lHV:G=i$rI=<($7$F$$$k$J$i$P!"\e(B--Top--\e$B$HI=<($5$l$F$^$9!#%U%!%$%k$N0lHV\e(B
-\e$B:G8e$rI=<($7$F$$$k$J$i$P!"\e(B--Bot--\e$B$HI=<($5$l$^$9!#2hLL$NCf$K%U%!%$%k$NA4$F$,\e(B
-\e$BI=<($5$l$F$$$k$J$i$P!"\e(B--All--\e$B$HI=<($5$l$^$9!#\e(B
 
-     \e$B%b!<%I%i%$%s$N>.3g8L$NCf$O!":#$I$s$J%b!<%I$KF~$C$F$$$k$+$r<($7$F$$$^$9!#\e(B
-\e$B8=:_$O!"%G%U%)%k%H$N\e(BFundamental\e$B$KF~$C$F$$$^$9!#$3$l$b%a%8%c!<%b!<%I$N0lNc$G\e(B
-\e$B$9!#\e(B
+\e$B!v%(%3!<%(%j%"\e(B
+==============
 
-     Emacs\e$B$O\e(BLisp mode\e$B$d\e(BText mode\e$B$N$h$&$J$3$H$J$k%W%m%0%i%`8@8l$d%F%-%9%H$K\e(B
-\e$BBP$7$F%(%G%#%C%H$r9T$&$?$a$N4v$D$+$N%a%8%c!<%b!<%I$r;}$C$F$$$^$9!#$I$s$J;~\e(B
-\e$B$G$bI,$:$$$:$l$+$N%a%8%c!<%b!<%I$N>uBV$K$J$C$F$$$^$9!#\e(B
+\e$B$b$7$f$C$/$j$H%3%^%s%I$rBG$C$?$J$i$P!"2hLL$N2<$N%(%3!<%(%j%"$H8F$P$l\e(B
+\e$B$k>l=j$KBG$C$?$b$N$,I=<($5$l$^$9!#%(%3!<%(%j%"$O2hLL$N:G2<9T$G$9!#\e(B
 
-     \e$B$=$l$>$l$N%a%8%c!<%b!<%I$O4v$D$+$N%3%^%s%I$rA4$/0c$&?6$kIq$$$K$7$F$7$^\e(B
-\e$B$$$^$9!#Nc$r>e$2$F$_$^$7$g$&!#%W%m%0%i%`$NCf$K%3%a%s%H$r:n$k%3%^%s%I$,$"$j\e(B
-\e$B$^$9!#%3%a%s%H$r$I$NMM$J7A<0$K$9$k$+$O!"3F%W%m%0%i%`8@8l$K$h$C$F0c$$$^$9$,!"\e(B
-\e$B$=$l$>$l$N%a%8%c!<%b!<%I$O!"$-$A$s$HF~$l$F$/$l$^$9!#\e(B
 
-     \e$B$=$l$>$l$N%a%8%c!<%b!<%I$KF~$k$?$a$N%3%^%s%I$O%b!<%IL>$N3HD%$5$l$?$b$N\e(B
-\e$B$K$J$C$F$$$^$9!#Nc$($P!"\e(BM-x fundamental-mode\e$B$O\e(BFundamental\e$B$KF~$k$?$a$N$b$N$G\e(B
-\e$B$9!#\e(B
+\e$B!v%b!<%I%i%$%s\e(B
+==============
 
-     \e$B$b$7!"1Q8l$r%(%G%#%C%H$9$k$J$i$P!"\e(BText mode\e$B$KF~$j$^$9!#\e(B
+\e$B%(%3!<%(%j%"$N$9$0>e$N9T$O!"%b!<%I%i%$%s$H8F$S$^$9!#%b!<%I%i%$%s$O$3$s$JIw$K8+$($k$G$7$g$&!#\e(B
 
-       >> M-x text-mode <Retuen>\e$B$H%?%$%W$7$J$5$$!#\e(B
+ISO7-----XEmacs: TUTORIAL.ja       (Fundamental)--L670--58%----------------
 
-     \e$B8=:_$N%a%8%c!<%b!<%I$K$D$$$F$N%I%-%e%a%s%H$r8+$?$$;~$O!"\e(BC-h m\e$B$H%?%$%W\e(B
-\e$B$7$^$9!#\e(B
+\e$B$3$N9T$O\e(B XEmacs \e$B$N>uBV5Z$SJT=8Cf$NJ8>O$K$D$$$FM-1W$J>pJs$rM?$($F$/$l$^\e(B
+\e$B$9!#\e(B
 
-       >> C-h m \e$B$r;H$C$F\e(BText mode\e$B$H\e(BFundamental mode\e$B$N0c$$$rD4$Y$J$5$$!#\e(B
+\e$B%U%!%$%kL>$K$D$$$F$O$b$&J,$C$F$$$^$9$M!#$=$l$O$"$J$?$,3+$$$?%U%!%$%k$G\e(B
+\e$B$9!#\e(B-NN%-- \e$B$OJ8>OCf$N8=:_0LCV$r<($7$F$$$^$9!#J8>O$N\e(B NN% \e$B$,2hLL:G>eCJ$h\e(B
+\e$B$jA0$K$"$k$H$$$&$3$H$G$9!#$b$7J8>O$N:G=i$N9T$,2hLL$K$"$k;~$K$O\e(B --00%-- 
+\e$B$NBe$j$K\e(B --Top-- \e$B$HI=<($7$^$9!#$b$7J8>O$N:G8e$N9T$,2hLL$K$"$k;~$K$O\e(B 
+--Bot-- \e$B$HI=<($7$^$9!#$b$72hLL$KA4It<}$^$C$F$7$^$&$h$&$JC;$$J8>O$r8+$F\e(B
+\e$B$$$k$H$-$K$O\e(B --All-- \e$B$HI=<($7$^$9!#\e(B
+
+\e$B3g8L$K0O$^$l$?ItJ,$O$I$&$JJT=8%b!<%I$K$$$k$+$r<($7$^$9!#%G%U%)%k%H$O\e(B 
+"Fundamental" \e$B$H$$$&%b!<%I!"$3$l$,8=:_$N%b!<%I$G$9!#$3$l$O!V%a%8%c!<%b!<\e(B
+\e$B%I!J\e(Bmajor mode\e$B!K!W$N0lNc$G$9!#\e(B
+
+XEmacs \e$B$K$OB?$/$N<oN`$N%a%8%c!<%b!<%I$,$"$j$^$9!#\e(BLisp mode \e$B$d\e(BText mode 
+\e$B$N$h$&$K!"$I$s$J%W%m%0%i%`8@8l$d$I$s$J<oN`$NJ8>O$rJT=8Cf$+$r0UL#$9$k$b\e(B
+\e$B$N$b$"$j$^$9!#$$$D$G$bI,$:$$$:$l$+$N%a%8%c!<%b!<%I$N>uBV$K$J$C$F$$$^$9!#\e(B
+\e$B$I$N%a%8%c!<%b!<%I$K$$$k$N$+$O!"%b!<%I%i%$%s$N8=:_$O\e(B "Fundamental" \e$B$H\e(B
+\e$BI=<($7$F$$$kItJ,$r8+$l$PJ,$j$^$9!#\e(B
+
+\e$B3F%a%8%c!<%b!<%I$O4v$D$+$N%3%^%s%I$K0[$J$k?6$kIq$$$r$5$;$^$9!#Nc$($P!"\e(B
+\e$B%W%m%0%i%`%j%9%HCf$K%3%a%s%H$rF~$l$k$?$a$N%3%^%s%I$,$"$j$^$9!#%3%a%s%H\e(B
+\e$B$N7A<0!J%7%s%?%C%/%9!K$O!"%W%m%0%i%`8@8l$K$h$C$F0[$J$j!"%a%8%c!<%b!<%I\e(B
+\e$B$O!"$=$l$KBP1~$9$k8@8l$K9g$C$?7A<0$G%3%a%s%H$rA^F~$7$^$9!#3F%a%8%c!<%b!<\e(B
+\e$B%I$O3HD%%3%^%s%I$NL>A0$K$J$C$F$$$^$9!#$D$^$j$=$N3HD%%3%^%s%I$r;H$C$F%a\e(B
+\e$B%8%c!<%b!<%I$r@Z$j49$($k$N$G$9!#Nc$($P!"\e(BM-x fundamental-mode \e$B$H$$$&$N\e(B
+\e$B$O\e(B Fundamental \e$B%b!<%I$K@Z$j49$($k$?$a$N%3%^%s%I$G$9!#\e(B
+
+\e$B$b$7!"DL>o$N1Q8l$dF|K\8l$NJ8>O!J$3$N%U%!%$%k$N$h$&$J!K$rJT=8$9$k$N$J$i\e(B
+\e$B$P!"\e(BText mode \e$B$r;H$$$^$7$g$&!#\e(B
+
+>> M-x text-mode <Retuen> \e$B$H%?%$%W$7$F$_$F2<$5$$!#\e(B
+
+\e$B?4G[$7$J$$$G!#$3$l$^$G3X$s$@%3%^%s%I$O$?$$$7$FJQ$o$j$^$;$s$+$i!#$@$1$I!"\e(B
+M-f \e$B$d\e(B M-b \e$B$,%"%]%9%H%m%U%#\e(B "'" \e$B$rC18l$N0lIt$@$H2r<a$9$k$h$&$K$J$C$?$N\e(B
+\e$B$,J,$k$G$7$g$&!#0JA0$N\e(B Fundamental \e$B%b!<%I$G$O\e(B M-f \e$B$d\e(B M-b \e$B$O\e(B "'" \e$B$rC18l\e(B
+\e$B$N6h@Z$j$H8+$J$7$F$$$^$7$?!#\e(B
+
+\e$B%a%8%c!<%b!<%I$O$3$N$h$&$K:3:Y$J0c$$$r@8$_$^$9!#Bg35$N%3%^%s%I$O$I$N%a\e(B
+\e$B%8%c!<%b!<%I$G$bF1$8F/$-$r$7$^$9$,!"<B:]$NF0$-$O>/$7$@$1$3$H$J$k$N$G$9!#\e(B
+
+\e$B8=:_$N%a%8%c!<%b!<%I$K$D$$$F$N@bL@J8$r8+$k$K$O\e(B C-h m \e$B$H%?%$%W$7$^$9!#\e(B
+
+>> C-u C-v \e$B$r0lFsEY$d$C$F$3$N9T$r2hLL$N>e$NJ}$K;}$C$F$$$-$^$7$g$&!#\e(B
+>> C-h m \e$B$H%?%$%W$7!"\e(BText mode \e$B$H\e(B Fundamental mode \e$B$N0c$$$r$_$^$7$g$&!#\e(B
+>> q \e$B$G\e(B Text mode \e$B$N@bL@J8$r2hLL$+$i>C$7$^$7$g$&!#\e(B
+
+\e$B%a%8%c!<%b!<%I$,!V%a%8%c!<!W$H$$$&$+$i$K$O!V%^%$%J!<%b!<%I!W$b$"$j$^$9!#\e(B
+\e$B%^%$%J!<%b!<%I$O%a%8%c!<%b!<%I$NBe$o$j$K$J$k$b$N$G$O$J$/!"$=$l$r$A$g$C\e(B
+\e$B$H$@$1=$@5$9$k$b$N$G$9!#3F%^%$%J!<%b!<%I$O!"%a%8%c!<%b!<%I$dB>$N%^%$%J!<\e(B
+\e$B%b!<%I$K1F6A$rM?$($:$K!"$=$l$@$1$r%*%s%*%U$G$-$^$9!#$D$^$j!"%^%$%J!<%b!<\e(B
+\e$B%I$rA4$/;H$o$J$+$C$?$j!"0l8D$@$1;H$C$?$j!"$$$/$D$+$rF1;~$K;H$C$?$j$G$-\e(B
+\e$B$k$N$G$9!#\e(B
+
+\e$BDL>o$NJ8>O$rJT=8$7$F$$$k;~$K$H$F$bJXMx$J%^%$%J!<%b!<%I$N0l$D$K%*!<%H%U%#\e(B
+\e$B%k!J\e(BAuto Fill\e$B!K%b!<%I$H$$$&$N$,$"$j$^$9!#$3$N%b!<%I$,%*%s$N;~$KJ8>O$r\e(B
+\e$BF~NO$7$F$$$C$F9T$rD9$/$7$9$.$?>l9g!"<+F0E*$KC18l$HC18l$N4V$G9T$,J,3d$5\e(B
+\e$B$l$^$9!JF|K\8l$N>l9g$O$I$NJ8;z$N4V$G$b!K!#\e(B
+
+Auto Fill \e$B%b!<%I$O\e(B M-x auto-fill-mode<Return> \e$B$H$d$l$P%*%s$K$G$-$^$9!#\e(B
+\e$B$=$l$,%*%s$N>uBV$G\e(B M-x auto-fill-mode<Return> \e$B$H$d$l$,%*%U$K$G$-$^$9!#\e(B
+\e$B$3$N%3%^%s%I$O!"%b!<%I$,%*%U$J$i%*%s$K!"%*%s$J$i%*%U$K$9$k$N$G$9!#$3$&\e(B
+\e$B$$$&$N$r!V%b!<%I$r%H%0%k$9$k!W$H8@$$$^$9!#\e(B
+
+>> M-x auto-fill-mode<Return> \e$B$H%?%$%W$7$F!"\e(B "asdf " \e$B$G;O$^$k9T$rF~NO\e(B
+   \e$B$7$F2<$5$$!#9T$,J,3d$5$l$k$^$G2?EY$b\e(B "asdf " \e$B$H%?%$%W$7$^$7$g$&!#%9\e(B
+   \e$B%Z!<%9$rK:$l$:$K!#\e(BAuto Fill \e$B$O%9%Z!<%9$,F~NO$5$l$?;~$N$_F/$-$^$9!#\e(B
+
+\e$B1&%^!<%8%s$ODL>o\e(B 70 \e$BJ8;z!J%+%i%`!K$G$9$,!"\e(BC-x f \e$B%3%^%s%I$G$3$l$rJQ99$9\e(B
+\e$B$k$3$H$,$G$-$^$9!#;XDj$NJ8;z?t$r?tCM0z?t$H$7$FM?$($^$9!#\e(B
+
+>> \e$B?tCM0z?t\e(B 20 \e$B$G\e(B C-x f \e$B$r$d$j$^$7$g$&!#\e(B (C-u 2 0 C-x f)\e$B!#\e(B
+   \e$B$=$l$+$iE,Ev$JJ8>O!J1Q8l!K$rF~NO$7!"\e(B20 \e$BJ8;z$G9T$,J,3d$5$l$k$N$r8+$F\e(B
+   \e$B$_$^$7$g$&!#$=$l$+$i\e(B C-x f \e$B%3%^%s%I$G$^$?%^!<%8%s$r\e(B 70 \e$BJ8;z$KLa$7$F\e(B
+   \e$B2<$5$$!#\e(B
+
+\e$B%Q%i%0%i%U$NESCf$rJQ99$7$F$b\e(B Auto Fill \e$B%b!<%I$O$=$l$r<+F0E*$K%U%#%k$7\e(B
+\e$BD>$7$O$7$^$;$s!#\e(B
+\e$B%Q%i%0%i%U$r%U%#%k$7D>$9$K$O%+!<%=%k$r$=$N%Q%i%0%i%U$NCf$KCV$$$F$+$i\e(B
+M-q \e$B$r%?%$%W$7$^$9!#\e(B
+
+>> \e$B%+!<%=%k$r$3$N9TD>A0$N%Q%i%0%i%U$K0\F0$5$;\e(B M-q \e$B$H%?%$%W$7$F2<$5$$!#\e(B
+
+\e$B!v8!:w\e(B
+======
 
-       >> C-x 1\e$B$G%I%-%e%a%s%H$r2hLL$+$i>C$7$J$5$$!#\e(B
+\e$BJ8>OCf$NFCDj$NJ8;zNs$r!"A08~$-$K$b8e8~$-$K$bC5$9;v$,$G$-$^$9!#J8;zNs$r\e(B
+\e$BC5$9$H$$$&$N$O%+!<%=%k0\F0%3%^%s%I$G$9!#$D$^$j!"<!$K$=$NJ8;zNs$,8=$l$k\e(B
+\e$B>l=j$^$G%+!<%=%k$r0\F0$5$;$k$N$G$9!#\e(B
 
-     \e$B:8C<$N\e(B '[--]' \e$B$O8=:_$N%-!<F~NO$N%b!<%I$r<($7$F$$$^$9!#\e(B[--] \e$B$N;~$K$O\e(B
-\e$B1Q8l%"%k%U%!%Y%C%H$,$=$N$^$^F~NO$G$-$^$9!#F~NO%b!<%I$K$D$$$F$N>\$7$$@bL@$O\e(B
-\e$B!V$?$^$4!W$N%^%K%e%"%k$rD4$Y$F2<$5$$!#\e(B
+XEmacs \e$B$N8!:w%3%^%s%I$OB>$NBg35$N%(%G%#%?$N8!:w%3%^%s%I$H$O0[$j!V%$%s\e(B
+\e$B%/%j%a%s%?%k!W$G$9!#8!:w$9$kJ8;zNs$r%?%$%W$7$F$$$k$=$P$+$i8!:w$,5/$k$N\e(B
+\e$B$G$9!#\e(B
 
-     \e$B$=$N$9$01&$K$O%3!<%IBN7O\e(B (coding-system) \e$B$K4X$9$k%U%i%0$N>uBV$,I=\e(B
-\e$B<($5$l$F$$$^$9!#\e(BMule \e$B$O!"%U%!%$%kF~=PNO!"F~NO!"2hLL=PNO$K$D$$$F!"$=$l$>$lFH\e(B
-\e$BN)$K%3!<%IBN7O$r;XDj$5$;$k$3$H$,=PMh$^$9$,!"DL>o$O%U%!%$%kMQ$N%3!<%IBN7O$N\e(B
-\e$B%K!<%b%K%C%/$N$_I=<($7$F$$$^$9!#\e(B
+\e$B8!:w$r;O$a$k$?$a$N%3%^%s%I$O!"A08~$-$K8!:w$9$k$J$i$P\e(B C-s\e$B!"8e8~$-$J$i\e(B
+C-r \e$B$G$9!#$^$@$G$9!*!*:#$O$^$@;n$5$J$$$G2<$5$$!#\e(B
 
-       >> \e$B%b!<%I%i%$%s>e$K\e(B"J:","S:",\e$B$b$7$/$O\e(B "E:"\e$B$,I=<($5$l$F$$$k$+$I$&$+3N\e(B
-         \e$BG'$7$J$5$$!#\e(B
+C-s \e$B$rBG$D$H\e(B "I-search" \e$B$H$$$&J8;zNs$,%(%3!<%(%j%"$KI=<($5$l$k$N$,8+$(\e(B
+\e$B$k$G$7$g$&!#$3$l$O\e(B XEmacs \e$B$,%$%s%/%j%a%s%?%k8!:w$H$$$&>uBV$K$$$F!"$"$J\e(B
+\e$B$?$,C5$7$?$$J8;zNs$rF~NO$9$k$N$rBT$C$F$$$k$N$G$9!#\e(B<Return> \e$B$rBG$F$P8!\e(B
+\e$B:w$r=*$o$l$^$9!#\e(B
 
-     \e$B:G=i$N0lJ8;z$,%3!<%IBN7O$N%K!<%b%K%C%/!"<!$N\e(B ':' \e$B$,8=:_1Q8l0J30$NJ8;z\e(B
-\e$B!JF|K\8l!"Cf9q8l$J$I!K$b$A$c$s$HI=<($9$k$H$$$&$3$H$r<($7$F$$$^$9!#\e(BJ\e$B$O\e(BJUNET 
-\e$B$G;H$o$l$F$$$k\e(B JIS \e$B%3!<%I!"\e(BS \e$B$O\e(B Shift-JIS\e$B!"\e(BE \e$B$OF|K\8l\e(BEUC \e$B$r<($7$F$$$^$9!#\e(B 
-\e$BB?9q8l$NI=<($NM-L5$O\e(B C-x C-k t \e$B$G\e(B ON/OFF\e$B$N%H%0%k$,$G$-$^$9!#\e(B
+>> \e$B$5$F\e(B C-s \e$B$H%?%$%W$7$F8!:w$r;O$a$^$7$g$&!#$f$C$/$j$H#1J8;z$:$D\e(B
+   "cursor" \e$B$H$$$&C18l$rF~NO$7$^$9!##1J8;zBG$DKh$K%+!<%=%k$,$I$&F0$/$+\e(B
+   \e$B8+$^$7$g$&!#\e(B
+   \e$B$5$"!"\e(B"cursor" \e$B$,#12s8+$D$+$j$^$7$?!#\e(B
+>> \e$B$b$&0lEY\e(B C-s \e$B$HBG$C$F<!$N\e(B "cursor" \e$B$r8+$D$1$^$7$g$&!#\e(B
+>> \e$B:#EY$O\e(B <Delete> \e$B$r#42sBG$C$F!"%+!<%=%k$NF0$-$r8+$F2<$5$$!#\e(B
+>> <Return> \e$B$HBG$C$F8!:w$r=*N;$7$^$7$g$&!#\e(B
 
-     \e$B<!$NNc$O!"0lEYB?9q8lI=<($r\e(BOFF\e$B$7$F$+$i!"$b$&0lEY\e(BON\e$B$r9T$C$F$_$^$9!#\e(B
+\e$B2?$,5/$C$?$+J,$j$^$9$+!)%$%s%/%j%a%s%?%k8!:w$G$O!"JXMx$J$?$a$K%O%$%i%$\e(B
+\e$B%H$r$7!"$"$J$?$,$=$l$^$G$KBG$C$?J8;zNs$,8=$l$k$H$3$m$K9T$3$&$H$7$^$9!#\e(B
+\e$B<!$N\e(B "cursor" \e$B$K9T$/$K$O$b$&0lEY\e(B C-s \e$B$HBG$A$^$9!#$b$7$b$&$=$&$$$&J8;z\e(B
+\e$BNs$,L5$+$C$?$i!"%Y%k$r$J$i$7$F8!:w$,8=:_$O<:GT$7$F$$$k$3$H$rCN$i$;$^$9!#\e(B
+C-g \e$B$rBG$F$P8!:w$r=*$o$l$^$9!#\e(B
 
-       >> C-x C-k t\e$B$r\e(B2\e$BEY9T$$$J$5$$!#\e(B
+\e$BCm0U!'%7%9%F%`$K$h$C$F$O\e(B C-s \e$B$H%?%$%W$9$k$H2hLL$,F0$+$J$/$J$j\e(B XEmacs 
+\e$B$,I=<($7$h$&$H$9$k$b$N$,2?$b2hLL$K=P$J$/$J$j$^$9!#$3$l$O!"%U%m!<%3%s%H\e(B
+\e$B%m!<%k$H8F$P$l$k#O#S$N5!G=$,\e(B C-s \e$B$rB*$(!"\e(BXEmacs \e$B$KEO$5$J$$$h$&$K$7$F$$\e(B
+\e$B$k$N$G$9!#$3$l$r2r=|$9$k$K$O\e(B C-q \e$B$r%?%$%W$7$^$9!#$=$l$+$i\e(B XEmacs \e$B%^%K%e\e(B
+\e$B%"%k$N\e(B "Spontaneous Entry to Incremental Search (\e$BCN$i$L4V$K%$%s%/%j%a\e(B
+\e$B%s%?%k%5!<%A$K$J$k\e(B)" \e$B$N@a$rFI$s$G$/$@$5$$!#$3$N$d$C$+$$$J#O#S$N5!G=$K\e(B
+\e$B$I$&BP=h$9$l$PNI$$$+$,:\$C$F$$$^$9!#\e(B
 
-     \e$BF~NO%b!<%I$,\e(BJIS\e$B%3!<%I$N@_Dj$H$J$C$F$$$k;~!"$b$7$"$J$?$N;H$C$F$$$kC<Kv\e(B
-\e$B$K%a%?!&%-!<$,IU$$$F$$$k$J$i!"%(%9%1!<%W!&%-!<$NBe$o$j$K$=$l$r;H$&$3$H$,=P\e(B
-\e$BMh$^$9!#$=$N;~!"%a%?!&%-!<$N;H$$J}$O%3%s%H%m!<%k!&%-!<$HF1MM$K2!$7$J$,$iJ8\e(B
-\e$B;z$r%?%$%W$7$^$9!#\e(BESC <\e$BJ8;z\e(B>\e$B$b\e(BM-<\e$BJ8;z\e(B>\e$B$bF1$8F/$-$r$7$^$9!#:#$^$G$N@bL@$G\e(BESC
-<\e$BJ8;z\e(B>\e$B$H9T$J$C$F$$$?$H$3$m$,!"\e(BM-<\e$BJ8;z\e(B>\e$B$H$J$j$^$9!#Cm0U$7$J$1$l$P$J$i$J$$$N\e(B
-\e$B$O!"%7%U%H\e(BJIS\e$B$d\e(BEUC\e$B%3!<%I$N;~$O;HMQ$G$-$^$;$s!#\e(B
+\e$B%$%s%/%j%a%s%?%k8!:w$NESCf$G\e(B <Delete> \e$B$rBG$D$H8!:wJ8;zNsCf$N#1HV8e$m$N\e(B
+\e$BJ8;z$,>C$($^$9!#$=$7$F!"%+!<%=%k$O!"A02s$N0LCV$KLa$j$^$9!#$?$H$($P!"\e(B
+"c" \e$B$H%?%$%W$7$F:G=i$N\e(B "c" \e$B$rC5$7$^$9!#$=$l$+$i\e(B "u" \e$B$rBG$D$H:G=i$N\e(B
+"cu" \e$B$N>l=j$K%+!<%=%k$,F0$-$^$9!#$=$3$G\e(B <Delete> \e$B$rBG$D$H\e(B "u" \e$B$r8!:wJ8\e(B
+\e$B;zNs$+$i>C$7$F!"%+!<%9%k$O:G=i$K\e(B "c" \e$B$,8=$l$?>l=j$KLa$j$^$9!#\e(B
 
-     \e$B%3!<%IBN7O$N$N@Z$jBX$($O!"3F!9$N%P%C%U%!$KBP$7$F$N$_M-8z$G$9!#$=$l$>$l\e(B
-\e$B$N!"%3!<%IBN7O;XDj$K$D$$$F$O!"\e(BC-h a coding-system <Return>\e$B$G8+$k$3$H\e(B
-\e$B$,=PMh$^$9!#\e(B
 
-       >> C-h a coding-system <Return>\e$B$G=P$F$/$k%I%-%e%a%s%HCf$N!"\e(B
-         set-display-coding-system, set-file-coding-system,
-         set-process-coding-system \e$B$N@bL@$rFI$_$J$5$$!#\e(B
+C-s \e$B$O!"8=:_$N%+!<%=%k0LCV0J9_$K=P$F$/$k8!:wJ8;zNs$rC5$7;O$a$^$9!#$b$7!"\e(B
+\e$BJ8>O$NA0$NJ}$rC5$7$?$+$C$?$i!"\e(BC-r \e$B$r%?%$%W$7$^$9!#$3$l$^$G$N\e(B C-s \e$B$K$D\e(B
+\e$B$$$F$N@bL@$O$9$Y$F\e(B C-r \e$B$K$bEv$F$O$^$j$^$9!#8!:w$NJ}8~$,H?BP$J$@$1$G$9!#\e(B
 
-\e$B8!:w\e(B
-=====
+\e$B!vJ#?t$N%&%#%s%I%&\e(B
+==================
 
-     \e$BJ8;zNs$r!"%U%!%$%kFb$G!"A0J}Kt$O8eJ}$K!"C5$9;v$,$G$-$^$9!#8!:w$r;O$a$k\e(B
-\e$B%3%^%s%I$O!"%+!<%=%k0LCV0J9_$r8!:w$9$k$J$i$P\e(B  C-s\e$B!"%+!<%=%k0LCV0JA0$J$i$P\e(B
-C-r \e$B$G$9!#\e(BC-s \e$B$r%?%$%W$9$k$H!"%(%3!<%(%j%"$K\e(B "I-search:"\e$B$H$$$&J8;zNs$,%W%m\e(B
-\e$B%s%W%H$H$7$FI=<($5$l$^$9!#\e(BESC\e$B$r2!$9$H!"=*N;$G$-$^$9!#\e(B
+XEmacs \e$B$NAGE($J5!G=$N0l$D$H$7$F!"0l$D$N2hLL$KF1;~$K$$$/$D$b$N%&%#%s%I\e(B
+\e$B%&$rI=<($9$k$3$H$,$G$-$^$9!#\e(B
 
+>> \e$B%+!<%=%k$r$3$N9T$K;}$C$F$-$F\e(B C-u 0 C-l \e$B$H%?%$%W$7$F2<$5$$!#\e(B
 
-       >> C-s\e$B$G8!:w$,;O$^$j$^$9!#$=$l$+$i!"$f$C$/$j$H#1J8;z$:$D\e(B"cursor"\e$B$H$$\e(B
-          \e$B$&C18l$rF~NO$7$^$9!##1J8;zF~NO$9$k$4$H$K!"%+!<%=%k$O!"$I$s$JF0$-\e(B
-          \e$B$r$7$^$9$+\e(B?
+>> \e$B$=$l$+$i\e(B C-x 2 \e$B$H%?%$%W$72hLL$r#2$D$N%&%#%s%I%&$KJ,3d$7$^$7$g$&!#\e(B
+   \e$B$I$A$i$N%&%#%s%I%&$b$3$NF~Lg%,%$%I$rI=<($7$F$$$^$9!#%+!<%=%k$O>e$N\e(B
+   \e$B%&%#%s%I%&$K$"$j$^$9!#\e(B
 
-       >> \e$B$b$&#1EY\e(B C-s \e$B$r%?%$%W$9$k$H!"<!$N\e(B"cursor"\e$B$r8+$D$1$i$l$^$9!#\e(B
+>> C-M-v \e$B$H%?%$%W$72<$N%&%#%s%I%&$r%9%/%m!<%k$5$;$^$7$g$&!#\e(B
+   \e$B!J%a%?%-!<$,$J$$>l9g$O\e(B ESC C-v \e$B$H%?%$%W$7$^$9!#!K\e(B
 
-       >> <Delete>\e$B$r#42sF~NO$7$F!"%+!<%=%k$NF0$-$r8+$J$5$$!#\e(B
+>> C-x o \e$B!J\e(B"o" \e$B$O\e(B "other\e$B!JB>J}!K\e(B" \e$B$r0UL#$7$^$9!K$r%?%$%W$72<$N%&%#%s%I\e(B
+   \e$B%&$K%+!<%=%k$r0\$7$F2<$5$$!#\e(B
+>> \e$B2<$N%&%#%s%I%&$G\e(B C-v \e$B$d\e(B M-v \e$B$r;H$C$F%9%/%m!<%k$5$;$^$7$g$&!#\e(B
+   \e$B$3$3$K=q$$$F$"$k;X<($O>e$N%&%#%s%I%&$GFI$_?J$s$G$/$@$5$$!#\e(B
 
-       >> ESC\e$B$r2!$7$F!"=*N;$7$^$9!#\e(B
+>> \e$B$b$&0lEY\e(B C-x o \e$B$H%?%$%W$7!"%+!<%=%k$r>e$N%&%#%s%I%&$KLa$7$^$9!#\e(B
+   \e$B%+!<%=%k$O>e$N%&%#%s%I%&$N85$"$C$?0LCV$KLa$j$^$9!#\e(B
 
-     \e$BC5$7$?$$J8;zNs$r%?%$%WCf$G$b!"%?%$%W$7$?J8;zItJ,$@$1$G!"8!:w$r;O$a$^$9!#\e(B
-\e$B<!$NJ8;z$rC5$9$K$O!":F$S\e(BC-s\e$B$r%?%$%W$7$^$9!#$b$7!"J8;zNs$,B8:_$7$J$+$C$?$i!"\e(B
-\e$B%a%C%;!<%8$,I=<($5$l$^$9!#\e(BC-g \e$B$G$b=*N;$G$-$^$9!#\e(B
+C-x o \e$B$r;H$C$F%&%#%s%I%&4V$r9T$C$?$jMh$?$j$G$-$^$9!#3F%&%#%s%I%&$O$=$l\e(B
+\e$B<+?H$N%+!<%=%k0LCV$rJ];}$7$F$$$^$9$,!"0lEY$K$O0l$D$N%&%#%s%I%&$@$1$,%+!<\e(B
+\e$B%=%k$rI=<($7$^$9!#DL>o$NJT=8%3%^%s%I$O3'%+!<%=%k$,$"$k%&%#%s%I%&$KBP$7\e(B
+\e$B$FF/$-$^$9!#$=$N%&%#%s%I%&$r\e(B "selected window (\e$BA*BrCf$N%&%#%s%I%&\e(B)" \e$B$H\e(B
+\e$B8F$S$^$9!#\e(B
 
-     \e$B8!:w<B9TCf$K\e(B<Delete>\e$B$rF~NO$9$k$H!"8!:wJ8;zNs$N#1HV8e$m$NJ8;z$,>C$($^$9!#\e(B
-\e$B$=$7$F!"%+!<%=%k$O!"A02s$N0LCV$KLa$j$^$9!#$?$H$($P!"\e(B"cu"\e$B$H%?%$%W$7$F!":G=i\e(B
-\e$B$N\e(B"cu"\e$B$N0LCV$K%+!<%=%k$,F0$$$?$H$7$^$9!#$3$3$G\e(B<Delete>\e$B$rF~NO$9$k$H!"%5!<%A\e(B
-\e$B%i%$%s$N\e(B'u'\e$B$,>C$(!"%+!<%=%k$O!"\e(B'u'\e$B$r%?%$%W$9$kA0$K!"%+!<%=%k$,$"$C$?\e(B'c'\e$B$N0L\e(B
-\e$BCV$K!"0\F0$7$^$9!#\e(B
+C-M-v \e$B%3%^%s%I$O!"0l$D$N%&%#%s%I%&$GJ8>O$rJT=8Cf$KB>$N%&%#%s%I%&$r;2>H\e(B
+\e$B$7$F$$$k;~$KLrN)$A$^$9!#JT=8Cf$N>l=j$K%+!<%=%k$rJ]$C$?$^$^!"\e(BC-M-v \e$B$GB>\e(B
+\e$B$N%&%#%s%I%&$rFI$_?J$a$F9T$/$3$H$,$G$-$^$9!#\e(B
 
-     \e$B8!:w<B9TCf$K!"\e(BC-s \e$B$d\e(B C-r \e$B0J30$N%3%s%H%m!<%kJ8;z$r%?%$%W$9$k$H!"8!:w$O\e(B
-\e$B=*N;$7$^$9!#\e(B
+C-M-v \e$B$O%3%s%H%m!<%k%a%?J8;z$N0lNc$G$9!#%a%?%-!<$,$"$k>l9g$O!"%3%s%H%m!<\e(B
+\e$B%k%-!<$H%a%?%-!<$r2!$7$J$,$i\e(B v \e$B$r%?%$%W$7$^$9!#%3%s%H%m!<%k%-!<$H%a%?\e(B
+\e$B%-!<$O$I$A$i$r@h$K2!$7$F$b9=$$$^$;$s!#$I$A$i$b$=$N8e$K%?%$%W$5$l$kJ8;z\e(B
+\e$B$KBP$9$k=$>~%-!<\e(B (modifier key) \e$B$H$7$FF/$/$+$i$G$9!#\e(B
 
-     C-s \e$B$O!"8=:_$N%+!<%=%k0LCV0J9_$K=P$F$/$k8!:wJ8;zNs$rC5$7$^$9!#$b$7!"A0\e(B
-\e$B$NJ}$rC5$7$?$+$C$?$i!"\e(BC-r  \e$B$r%?%$%W$9$k$3$H$G!"5UJ}8~8!:w$,$G$-$^$9!#\e(BC-s \e$B$H\e(B
-C-r \e$B$O!"8!:w$NJ}8~$,H?BP$J$@$1$G!"A4$FF1$8F/$-$r$7$^$9!#\e(B
+\e$B%a%?%-!<$,L5$$>l9g!"\e(BESC \e$B%-!<$r;H$$$^$9$,!"$3$N>l9g=gHV$,Bg;v$G$9!#$^$:\e(B
+ESC \e$B$r2!$7$F$+$iN%$7$F\e(B CTRL-v \e$B$rBG$A$^$9!#\e(BCTRL-ESC v \e$B$G$OBLL\$G$9!#$3\e(B
+\e$B$l$O\e(BESC \e$B$O$=$l<+BN$,0l$D$NJ8;z$G=$>~%-!<$G$O$J$$$+$i$G$9!#\e(B
 
-\e$B%j%+!<%7%V\e(B \e$B%(%G%#%F%#%s%0\e(B \e$B%l%Y%k\e(B
+>> \e$B>e$N%&%#%s%I%&$G\e(B C-x 1 \e$B$H%?%$%W$72<$N%&%#%s%I%&$r>C$7$^$7$g$&\e(B
 
-     \e$B$H$-$I$-!"!JITK\0U$K!K%j%+!<%7%V\e(B \e$B%(%G%#%F%#%s%0\e(B \e$B%l%Y%k$H8F$P$l$k>uBV$K\e(B
-\e$BF~$k$3$H$,$"$j$^$9!#%a%8%c!<%b!<%I$N>.3g8L\e(B'()'\e$B$N2s$j$rCf3g8L\e(B'[]'\e$B$G0O$s$@$b\e(B
-\e$B$N$,%b!<%I%i%$%s>e$KI=<($5$l$^$9!#Nc$($P!"\e(B(Fundamental)\e$B$HI=<($5$l$kBe$o$j$K\e(B
-[(Fundamental)]\e$B$N$h$&$K$J$j$^$9!#\e(B
+\e$B!J$b$72<$N%&%#%s%I%&$G\e(B C-x 1 \e$B$H%?%$%W$9$k$H>e$N%&%#%s%I%&$,>C$($^$9!#\e(B
+\e$B$3$N%3%^%s%I$O!V8=:_<+J,$,$$$k%&%#%s%I%&$@$1$K$7$J$5$$!W$H$$$&$b$N$@$H\e(B
+\e$B;W$C$F2<$5$$!#!K\e(B
 
-\e$BCm0U\e(B:          \e$B$3$3$G$O%j%+!<%7%V\e(B \e$B%(%G%#%F%#%s%0\e(B \e$B%l%Y%k<+BN$K$D$$$F$O@bL@$7\e(B
-               \e$B$^$;$s!#\e(B
+\e$BF1$8%P%C%U%!$rN>J}$N%&%#%s%I%&$KI=<($9$kI,MW$O$"$j$^$;$s!#0lJ}$N%&%#%s\e(B
+\e$B%I%&$G\e(B C-x C-f \e$B$G%U%!%$%k$r3+$$$F$bB>J}$N%&%#%s%I%&$OJQ2=$7$^$;$s!#3F\e(B
+\e$B%&%#%s%I%&$K$*$$$FJL!9$N%U%!%$%k$r3+$/$3$H$,$G$-$k$N$G$9!#\e(B
 
-     \e$B%j%+!<%7%V\e(B \e$B%(%G%#%F%#%s%0\e(B \e$B%l%Y%k$+$iH4$1$G$k$?$a$K$O!"\e(BM-x top-level
-<Return>\e$B$H%?%$%W$7$^$9!#\e(B
+>> C-x 4 C-f \e$B$H%?%$%W$7B3$1$F2?$+<+J,$N%U%!%$%kL>$rF~NO$7$F2<$5$$!#\e(B
+   <Return> \e$B$GF~NO$r=*$o$i$;$F2<$5$$!#:#;XDj$7$?%U%!%$%k$,2<$N%&%#%s%I\e(B
+   \e$B%&$K8=$l$^$9!#%+!<%=%k$b$=$C$A$K0\$j$^$9!#\e(B
 
-       >> \e$B;n$7$F$_$F2<$5$$!#%9%/%j!<%s$NDl$K\e(B"Back to top level"\e$B$HI=<($5$l$^\e(B
-          \e$B$9!#\e(B
+>> C-x o \e$B$H%?%$%W$7>e$N%&%#%s%I%&$KLa$C$F2<$5$$!#$=$l$+$i\e(B C-x 1 \e$B$G2<$N\e(B
+   \e$B%&%#%s%I%&$r>C$7$^$7$g$&!#\e(B
 
-     \e$BK\Ev$O!"$3$N;n$_$,9T$o$l$?;~$O!"$9$G$K%H%C%W%l%Y%k$K$$$?$N$G$9!#\e(BM-x
-top-level\e$B$O!"2?$b1F6A$rM?$($F$$$^$;$s!#\e(B
 
-     \e$B%j%+!<%7%V\e(B \e$B%(%G%#%F%#%s%0\e(B \e$B%l%Y%k$+$iH4$1=P$k$N$KBP$7$F$O\e(BC-g\e$B$O8z$-$^$;\e(B
-\e$B$s!#\e(B
+\e$B!v:F5"JT=8%l%Y%k\e(B (RECURSIVE EDITING LEVELS)
 
+\e$B;~!9!JITK\0U$K!K:F5"JT=8%l%Y%k$H8F$P$l$k>uBV$KF~$k$3$H$,$"$j$^$9!#%b!<\e(B
+\e$B%I%i%$%s$N%a%8%c!<%b!<%IL>$r0O$`4]3g8L\e(B "()" \e$B$,$5$i$Knl3g8L\e(B "[]" \e$B$G0O$^\e(B
+\e$B$l$^$9!#Nc$($P!"\e(B(Fundamental) \e$B$HI=<($5$l$kBe$o$j$K\e(B [(Fundamental)] \e$B$N\e(B
+\e$B$h$&$K$J$j$^$9!#\e(B
 
-\e$B%X%k%W\e(B
-======
+\e$B:F5"JT=8%l%Y%k$+$iH4$1=P$9$K$O\e(B ESC ESC ESC \e$B$H%?%$%W$7$^$9!#$3$l$OHFMQ\e(B
+\e$B!VH4$1=P$7!W%3%^%s%I$G$9!#M>J,$J%&%#%s%I%&$r>C$7$?$j!"%_%K%P%C%U%!$+$i\e(B
+\e$BH4$1$?$j$9$k$N$K$b;H$($^$9!#\e(B
 
-     Emacs\e$B$K$O!"$?$/$5$s$NLr$KN)$D5!G=$,$"$j!"$3$3$G!"$9$Y$F$r@bL@$9$k$3$H\e(B
-\e$B$O!"IT2DG=$G$9!#$7$+$7!"$^$@CN$i$J$$B?$/$N5!G=$r3X$V$?$a$K$O!"\e(B<HELP>\e$B$H8F$P\e(B
-\e$B$l$k\e(B C-h \e$B$r%?%$%W$9$k$3$H$G!"$?$/$5$s$N>pJs$r<j$KF~$l$k$3$H$,$G$-$^$9!#\e(B
 
-     \e$B;H$$J}$O!"\e(BC-h \e$B$r%?%$%W$7!"B3$$$FI,MW$J%*%W%7%g%s$r#1J8;z%?%$%W$7$^$9!#\e(B
-\e$B$o$+$i$J$1$l$P!"\e(BC-h ?  \e$B$H%?%$%W$9$k$H!"$I$s$J%*%W%7%g%s$,$"$k$N$+I=<($5$l$^\e(B
-\e$B$9!#$b$7!"\e(BC-h \e$B$r%?%$%W$7$F$+$i5$$,JQ$o$C$?$i!"\e(BC-g \e$B$r%?%$%W$9$l$P!"<h$j>C$9\e(B
-\e$B$3$H$,$G$-$^$9!#\e(B
+>> M-x \e$B$H%?%$%W$7%_%K%P%C%U%!$KF~$C$F2<$5$$!#$=$l$+$i\e(B ESC ESC ESC \e$B$H%?\e(B
+   \e$B%$%W$7H4$1=P$7$F$_$^$7$g$&!#\e(B
 
-     \e$B:G$b4pK\E*$J$b$N$O!"\e(BC-h c \e$B$G$9!#$3$l$KB3$$$F%-!<$rF~NO$9$k$H!"$=$N%3%^\e(B
-\e$B%s%I$K$D$$$F$NC;$$@bL@$rI=<($7$^$9!#\e(B
+C-g \e$B$G$O:F5"JT=8%l%Y%k$+$i$OH4$1=P$;$^$;$s!#$3$l$O!"\e(BC-g \e$B$,:F5"JT=8%l%Y\e(B
+\e$B%kFb$G$N%3%^%s%I$d0z?t$r<h$j>C$9$N$K;H$o$l$F$$$k$+$i$G$9!#\e(B
 
-       >> C-h c C-p \e$B$H%?%$%W$7$F$_$J$5$$!#\e(B"C-p runs the command previous-
-          line"\e$B$N$h$&$J%a%C%;!<%8$,I=<($5$l$k$O$:$G$9!#\e(B
 
-     \e$B8+$?$3$H$O$"$k$,!"3P$($F$O$$$J$$%3%^%s%I$b;W$$=P$;$k$N$G$9!#\e(BC-x C-s \e$B$N\e(B
-\e$B$h$&$JJ#?t$G#1$D$N%3%^%s%I$b\e(BC-h c \e$B$N8e$m$KB3$1$i$l$^$9!#\e(B
+\e$B!v$b$C$H$b$C$H%X%k%W\e(B
+====================
 
-     \e$B$b$C$H>\$7$/CN$j$?$+$C$?$i!"\e(Bc \e$B$NBe$o$j$K\e(B k \e$B$r;XDj$7$^$9!#\e(B
+\e$B$3$NF~Lg%,%$%I$G$O\e(B XEmacs \e$B$r;H$$;O$a$k$N$K==J,$J>pJs$rDs6!$7$?$D$b$j$G\e(B
+\e$B$9!#\e(BXEmacs \e$B$K$O$"$^$j$K$bB?$/$N5!G=$,$"$k$N$G!"$3$3$G$9$Y$F$r@bL@$9$k\e(B
+\e$B$N$OL5M}$G$9!#$=$l$G$bLr$KN)$D5!G=$r$b$C$HB?$/3X$S$?$$$H;W$&?M$N$?$a$K\e(B
+\e$B$O!"\e(BXEmacs \e$B$N%3%^%s%I$N@bL@$rFI$`$?$a$N%3%^%s%I$,$"$j$^$9!#$3$l$i$N\e(B
+\e$B!V%X%k%W!W%3%^%s%I$O3'\e(B Control-h \e$BJ8;z!J%X%k%WJ8;z$H8F$S$^$9!K$G;O$^$j\e(B
+\e$B$^$9!#\e(B
+
+\e$B%X%k%W5!G=$r;H$&$K$O!"\e(BC-h \e$B$KB3$$$F$I$s$J<oN`$N%X%k%W$,I,MW$+$r<($9#1J8\e(B
+\e$B;z$r%?%$%W$7$^$9!#$b$7$=$l$9$iJ,$i$J$$>l9g$O\e(B C-h ? \e$B$H%?%$%W$7$^$7$g$&!#\e(B
+\e$B$I$s$J<oN`$N%X%k%W$rDs6!$G$-$k$+$,<($5$l$^$9!#$b$7!"\e(BC-h \e$B$r%?%$%W$7$F$+\e(B
+\e$B$i5$$,JQ$o$C$?$i!"\e(BC-g \e$B$r%?%$%W$7$F<h$j>C$9$3$H$,$G$-$^$9!#\e(B
 
-       >> C-h k C-p \e$B$H%?%$%W$7$F$_$J$5$$!#\e(B
+\e$B!J%5%$%H$K$h$C$F$O\e(B C-h \e$BJ8;z$r:FB+G{$7$^$9!#Am3gE*$J<jCJ$H$7$F$=$s$J$3\e(B
+\e$B$H$r$9$k$Y$-$G$O$"$j$^$;$s!#$=$&$$$&>l9g$O%7%9%F%`4IM}<T$KJ86g$r8@$$$^\e(B
+\e$B$7$g$&!#$^!"$H$b$+$/!"$b$7\e(B C-h \e$B$,2hLL$N2<$NJ}$K%X%k%W$N%a%C%;!<%8$r=P\e(B
+\e$B$5$J$1$l$P!"\e(BM-x help RET \e$B$r;n$7$F$_$F2<$5$$!#!K\e(B
 
-     Emacs\e$B$N%&%#%s%I%&$K!"%3%^%s%I$NL>A0$H5!G=$,I=<($5$l$^$9!#FI$_=*$($?$i!"\e(B
-C-x 1 \e$B$H%?%$%W$9$k$H!"H4$1$i$l$^$9!#\e(B
+\e$B:G$b4pK\E*$J%X%k%W5!G=$O\e(B C-h c \e$B$G$9!#\e(BC-h\e$B!"$=$l$+$i\e(B c\e$B!"$=$7$F%3%^%s%I$N\e(B
+\e$BJ8;z<c$7$/$O$=$N%7!<%1%s%9$r%?%$%W$9$k$H!"$=$N%3%^%s%I$K$D$$$F$NC;$$@b\e(B
+\e$BL@$rI=<($7$^$9!#\e(B
 
-     \e$BB>$K$bLr$KN)$D%*%W%7%g%s$,$"$j$^$9!#\e(B
+>> C-h c Control-p \e$B$H%?%$%W$7$F$_$^$7$g$&!#\e(B
+   \e$B0J2<$N$h$&$J%a%C%;!<%8$,I=<($5$l$k$O$:$G$9!#\e(B
 
-    C-h f      \e$B%U%!%s%/%7%g%sL>$rF~NO$9$k$H!"%U%!%s%/%7%g%s$rI=<($7$^$9!#\e(B
+       C-p runs the command previous-line
 
-       >> C-h f previous-line \e$B$r%?%$%W$7!"\e(B<Return> \e$B$r2!$7$J$5$$!#\e(BC-p \e$B%3%^%s\e(B
-          \e$B%I$r<B9T$9$k%U%!%s%/%7%g%s$K$D$$$F$N>pJs$rI=<($7$^$9!#\e(B
+\e$B$3$l$O!V%U%!%s%/%7%g%s$NL>A0!W$rI=<($7$?$N$G$9!#%U%!%s%/%7%g%sL>$O<g$K\e(B 
+XEmacs \e$B$r%+%9%?%^%$%:$7$?$j3HD%$7$?$j$9$k$N$K;H$o$l$^$9!#$7$+$7!"%U%!\e(B
+\e$B%s%/%7%g%sL>$O$=$N%3%^%s%I$,2?$r$9$k$b$N$J$N$+$,J,$k$h$&$KIU$1$i$l$^$9\e(B
+\e$B$N$G!"4JC1$J@bL@$H$7$F$b$=$N$^$^Lr$KN)$A$^$9!#0lEY3X$s$@%3%^%s%I$K$D$$\e(B
+\e$B$F;W$$=P$9$K$O==J,$G$9!#\e(B
 
-    C-h a      \e$B%-!<%o!<%I$rF~NO$9$k$H!"L>A0$K$=$N%-!<%o!<%I$r4^$`!"A4$F$N%3\e(B
-               \e$B%^%s%I$rI=<($7$^$9!#$3$l$i$N%3%^%s%I$O$9$Y$F\e(BESC x \e$B$G<B9T$G$-\e(B
-               \e$B$^$9!#\e(B
+C-x C-s \e$B$d!J%a%?%-!<$d%"%k%H%-!<$,$J$$>l9g$N!K\e(B <ESC> v \e$B$J$I$NJ#?tJ8;z\e(B
+\e$B$N%3%^%s%I$r\e(B C-h c \e$B$N8e$K%?%$%W$9$k$3$H$b$G$-$^$9!#\e(B
 
-       >> C-h a file \e$B$H%?%$%W$7!"\e(B<Return>\e$B$r2!$7$J$5$$!#L>A0$K\e(B"file"\e$B$H$$$&J8\e(B
-          \e$B;z$r;}$DA4$F$N%3%^%s%I$rI=<($7$^$9!#$^$?!"\e(Bfind-file \e$B$d\e(B write-file
-          \e$B$H$$$&L>$N\e(B C-x C-f \e$B$d\e(B C-x C-w \e$B$N$h$&$J%3%^%s%I$bI=<($5$l$^$9!#\e(B
+\e$B%3%^%s%I$K$D$$$F$b$C$HB?$/$N>pJs$,M_$7$1$l$P\e(B C-h c \e$B$NBe$o$j$K\e(B C-h k \e$B$r\e(B
+\e$B;H$$$^$9!#\e(B
 
-\e$B$*$o$j$K\e(B
-========
+>> C-h k Control-p \e$B$H%?%$%W$7$F$_$^$7$g$&!#\e(B
 
-\e$BK:$l$:$K!'\e(B      \e$B=*N;$9$k$K$O!"\e(BC-x C-c \e$B$H$7$^$9!#\e(B
+XEmacs\e$B$N%&%#%s%I%&$K!"%3%^%s%I$NL>A0$HF1;~$K$=$N5!G=$N@bL@$,I=<($5$l$^\e(B
+\e$B$9!#FI$_=*$($?$i!"\e(Bq \e$B$H%?%$%W$7$F%X%k%W$N%F%-%9%H$r>C$7$^$7$g$&!#\e(B
 
+C-h \e$B$K$OB>$K$bLr$KN)$D%*%W%7%g%s$,$"$j$^$9!#\e(B
 
-     \e$B$3$NF~LgJT$O!"$^$C$?$/$N=i?4<T$K$b$o$+$j$d$9$$$h$&$K$H0U?^$7$F$$$^$9!#\e(B
-\e$B$G$9$+$i!"$b$72?$+$o$+$j$K$/$$E@$,$"$C$?$J$i!"0l?M$G6rCT$r8@$&$N$G$O$J$/!"\e(B
-\e$BJ86g$r$D$1$F2<$5$$!#\e(B
+   C-h f       \e$B%U%!%s%/%7%g%s$N@bL@!#%U%!%s%/%7%g%sL>$rF~NO$7$^$9!#\e(B
 
+>> C-h f previous-line<Return> \e$B$H%?%$%W$7$F$_$^$7$g$&!#\e(B
+   C-p \e$B%3%^%s%I$r<B9T$9$k%U%!%s%/%7%g%s$K$D$$$F$N$9$Y$F$N>pJs$rI=<($7\e(B
+   \e$B$^$9!#\e(B
 
-     \e$B$b$7!"\e(BEMACS \e$B$r2?F|$+$G$b;H$C$F$_$l$P!"$=$l$r$d$a$F$7$^$&$3$H$J$I$G$-$J\e(B
-\e$B$/$J$k$G$7$g$&!#:G=i$O8MOG$&$+$bCN$l$^$;$s!#$7$+$7!"$=$l$O$I$s$J%(%G%#%?$G\e(B
-\e$B$bF1MM$G$9!#\e(BEMACS \e$B$N$h$&$K!"Hs>o$KB?$/$N$3$H$,$G$-$k>l9g$K$OFC$K$=$&$G$7$g\e(B
-\e$B$&!#$=$7$F!"\e(BEMACS \e$B$G$O!"<B:]!"2?$G$b$G$-$k$N$G$9$+$i!#\e(B
+   C-h a       \e$B%O%$%Q!<%"%W%m%]%9!#%-!<%o!<%I$rF~NO$9$k$H!"$=$N%-!<%o!<\e(B
+                \e$B%I$rL>A0$K4^$`A4$F$N4X?t$HJQ?t$r%j%9%H%"%C%W$7$^$9!#\e(B
+                Meta-x \e$B$G5/F0$G$-$k%3%^%s%I$K$O:8B&$K%"%9%?%j%9%/$,IU\e(B
+                \e$B$-$^$9!#\e(B
 
+>> C-h a newline<Return> \e$B$H%?%$%W$7$F$_$F2<$5$$!#\e(B
 
+"newline"\e$B$H$$$&J8;zNs$rL>A0$N0lIt$K;}$DA4$F$N4X?t$HJQ?t$rI=<($7$^$9!#\e(B
+\e$B4X?t$dJQ?t$r$h$j>\$7$/CN$k$?$a$K\e(B <Return> \e$B$+??Cf$N%^%&%9%\%?%s$r2!$7$F\e(B
+\e$B$/$@$5$$!#\e(Bhyper-apropos \e$B$r=*N;$9$k$?$a$K$O\e(B `q' \e$B$rF~NO$7$^$9!#\e(B
 
-\e$B<U<-\e(B
-=====
-     \e$B$3$NJ8=q$O!"\e(BJUNET\e$B$GN.$5$l$?\e(B"\e$BF|K\8l\e(B MicroEMACS (kemacs) \e$BF~LgJT\e(B" \e$B$r\e(BGNUE-
-macs (Nemacs)\e$B$N\e(BTutorial\e$BMQ$K=q$-49$($?$b$N$G$9!#\e(B
 
-     Jonathan Payne \e$B$K$h$k\e(B "JOVE Tutorial" (19 January 86) \e$B$rJQ99$7$?$b$N$G\e(B
-     \e$B$"$j!"$=$l$O$b$H$b$H$O!"\e(BCCA-UNIX\e$B$N\e(BSteve Zimmerman \e$B$K$h$C$FJQ99$5$l$?!"\e(B
-     MIT \e$B$N\e(B "Teach-Emacs" \e$BF~LgJT\e(B (31 October 85) \e$B$r!J$5$i$K!KJQ99$7$?$b$N$G\e(B
-     \e$B$7$?!#\e(B
+\e$B!v$*$o$j$K\e(B
+==========
 
-     Update - February 1986 by Dana Hoggatt.
+\e$BK:$l$J$$$G!*\e(BXEmacs \e$B$r=*N;$9$k$K$O!"\e(BC-x C-c \e$B$G$9!#$^$?\e(B XEmacs \e$B$KLa$C$F\e(B
+\e$BMh$i$l$k$h$&$K0l;~E*$K%7%'%k$KLa$k$@$1$J$i\e(B C-z \e$B$G$9!#!J\e(BX \e$B$G$O!"$3$l$O\e(B
+\e$B8=:_$N\e(B XEmacs \e$B$N%U%l!<%`$r%"%$%3%s2=$7$^$9!#!K\e(B
 
-     Update - December 1986 by Kim Leburg.
+\e$B$3$NF~Lg%,%$%I$O!"$^$C$?$/$N=i?4<T$K$b$o$+$j$d$9$$$h$&$K$H0U?^$7$F$$$^\e(B
+\e$B$9!#$G$9$+$i!"$b$72?$+$o$+$j$K$/$$E@$,$"$C$?$J$i!"<+J,$r@U$a$J$$$GJ86g\e(B
+\e$B$r$D$1$F2<$5$$!#\e(B
 
-     Update/Translate - July 1987 by SANETO Takanori
 
-\e$BFCJL$J<U<-\e(B
-==========
+\e$B!v$3$NK]LuHG$K$D$$$F$N<U<-\e(B
+==========================
+
+\e$B$3$NJ8=q$O\e(B XEmacs Ver.21.2 \e$BIUB0$N1Q8lHG$NF~Lg%,%$%I$rF|K\8l$KK]Lu$7$?\e(B
+\e$B$b$N$G$9!#$=$N:]!"\e(BEmacs \e$BIUB0$NF|K\8l%,%$%I$r85$K=$@5$7$^$7$?!#$=$NF|K\\e(B
+\e$B8l%,%$%I$O!"85$O\e(B SANETO Takanori \e$B;a$,F|K\8l\e(B MicroXEmacs(kemacs) \e$BF~LgJT\e(B
+\e$B$H$7$FK]Lu$5$l!"$=$l$rNkLZM5?.;a\e(B <hironobu@sra.co.jp> \e$B$,\e(BNemacs/Mule \e$BMQ\e(B
+\e$B$KJQ99!"$5$i$K5HEDLP<y;a$,=$@5$5$l$?$b$N$G$9!#$3$l$i$NJ}!9$K?<$/46<U$7\e(B
+\e$B$^$9!#\e(B
 
-     \e$B:G=i$K$3$l$NF|K\8lLu$r:n$i$l$?!"\e(BSANETO Takanori\e$B$5$s!#$3$NJ8>O$O\e(BGMW +
-Wnn  + Nemacs\e$B$r;H$C$F=q$-$^$7$?!#$=$N$h$&$JAG@2$i$7$$%W%m%0%i%`$r:n$C$?J}!9\e(B
-\e$B$X46<U$N0U$rI=$7$?$$$H;W$$$^$9!#K]Lu$H$+!"F~NO$H$+$r?'!9$H<jEA$C$F$/$l$?!"\e(B
-\e$BF#86>M;R$5$s!"$I$&$b$"$j$,$H$&!#\e(B
 
+\e$B!vCx:n8"I=<(\e(B
+============
 
+\e$B$3$3$K85$N1Q8lHG$NCx:n8"I=<($r$=$N$^$^IU$1$^$9!#$3$NK]LuHG$b$3$l$K=>$$\e(B
+\e$B$^$9!#\e(B
 
+This tutorial descends from a long line of Emacs tutorials
+starting with the one written by Stuart Cracraft for the original Emacs.
+Ben Wing updated the tutorial for X Windows.  Martin Buchholz and
+Hrvoje Niksic added more corrections for XEmacs.
 
+This version of the tutorial, like XEmacs, is copyrighted, and comes
+with permission to distribute copies on certain conditions:
 
-\e$B8mLu!"13!"$=$NB>!"$NJ8@U$O!"0J2<$N<T$K$"$j$^$9!#\e(B
+Copyright (c) 1985, 1996 Free Software Foundation
 
-                        \e$BNkLZM5?.\e(B hironobu@sra.co.jp
+   Permission is granted to anyone to make or distribute verbatim copies
+   of this document as received, in any medium, provided that the
+   copyright notice and permission notice are preserved,
+   and that the distributor grants the recipient permission
+   for further redistribution as permitted by this notice.
 
+   Permission is granted to distribute modified versions
+   of this document, or of portions of it,
+   under the above conditions, provided also that they
+   carry prominent notices stating who last altered them.
 
-Update/Add - December 1987 by Hironobu Suzuki
-Update/Add - November 1989 by Ken'ichi Handa
-Update/Add - January  1990 by Shigeki Yoshida
-Update/Add - March    1992 by Kenichi HANDA
+The conditions for copying XEmacs itself are more complex, but in the
+same spirit.  Please read the file COPYING and then do give copies of
+XEmacs to your friends.  Help stamp out software obstructionism
+("ownership") by using, writing, and sharing free software!
index 07877cd..4fd173f 100644 (file)
@@ -1,3 +1,7 @@
+2000-02-21  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.30 is released.
+
 2000-02-16  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.29 is released.
index 941ada9..6fa783e 100644 (file)
@@ -204,7 +204,9 @@ struct option longopts[] =
 #define DEFAULT_LOCKING DOTLOCKING
 #endif
 
+#ifndef DISABLE_DIRECT_ACCESS
 static void lock_dot(char *);
+#endif
 static void unlock_dot(char *);
 static int parse_lock_method(char *);
 static char *unparse_lock_method(int);
@@ -566,6 +568,7 @@ dot_filename(char *filename)
 
 static char *dotlock_filename = NULL;
 
+#ifndef DISABLE_DIRECT_ACCESS
 static void
 lock_dot(char *filename)
 {
@@ -625,6 +628,7 @@ lock_dot(char *filename)
     }
   strcpy(dotlock_filename, filename);
 }
+#endif /* not DISABLE_DIRECT_ACCESS */
 
 static void
 unlock_dot(char *filename)
index 47f7768..ea2061c 100644 (file)
@@ -71,7 +71,7 @@
     (jmiller  "Jeff Miller"       "jmiller@smart.net")
     (juhp     "Jens-Ulrik Holger Petersen" "petersen@kurims.kyoto-u.ac.jp")
     (jwz      "Jamie Zawinski"    "jwz@jwz.org")
-    (kazz     "IENAGA Kazuyuki"   "ienaga@jsys.co.jp")
+    (kazz     "IENAGA Kazuyuki"   "ienaga@xemacs.org")
     (kyle     "Kyle Jones"        "kyle_jones@wonderworks.com")
     (larsi    "Lars Magne Ingebrigtsen" "larsi@gnus.org")
     (marcpa   "Marc Paquette"    "marcpa@CAM.ORG")
index c829284..002ce0d 100644 (file)
@@ -60,11 +60,10 @@ the window-buffer correspondences."
            (set-buffer-major-mode buf))))
     (push-window-configuration)
     (set-buffer buf)
-    (or norecord (record-buffer buf))
     (set-window-buffer (if (eq (selected-window) (minibuffer-window))
                           (next-window (minibuffer-window))
                         (selected-window))
-                      buf)
+                      buf norecord)
     buf))
 
 (defun pop-to-buffer (bufname &optional not-this-window-p on-frame)
index 6c4847e..2ab79db 100644 (file)
                     (byte-compile-log
                      "  all subforms of %s called for effect; deleted" form))
                 (and backwards
+                      ;; Now optimize the rest of the forms. We need the return
+                      ;; values. We already did the car.
+                      (setcdr backwards
+                              (mapcar 'byte-optimize-form (cdr backwards)))
                      (cons fn (nreverse backwards))))
             (cons fn (mapcar 'byte-optimize-form (cdr form)))))
 
   (setq form (byte-optimize-delay-constants-math form 1 '+))
   (if (memq 0 form) (setq form (delq 0 (copy-sequence form))))
   ;;(setq form (byte-optimize-associative-two-args-math form))
+
   (case (length (cdr form))
-    ((0)
+    ((0)                               ; (+)
      (condition-case ()
         (eval form)
        (error form)))
 
-    ;; `add1' and `sub1' are a marginally fewer instructions
-    ;; than `plus' and `minus', so use them when possible.
-    ((2)
-     (cond
-      ((eq (nth 1 form)  1) `(1+ ,(nth 2 form))) ; (+ 1 x)   -->  (1+ x)
-      ((eq (nth 2 form)  1) `(1+ ,(nth 1 form))) ; (+ x 1)   -->  (1+ x)
-      ((eq (nth 1 form) -1) `(1- ,(nth 2 form))) ; (+ -1 x)  -->  (1- x)
-      ((eq (nth 2 form) -1) `(1- ,(nth 1 form))) ; (+ x -1)  -->  (1- x)
-      (t form)))
-
     ;; It is not safe to delete the function entirely
-    ;; (actually, it would be safe if we know the sole arg
+    ;; (actually, it would be safe if we knew the sole arg
     ;; is not a marker).
-    ;; ((null (cdr (cdr form))) (nth 1 form))
-    (t form)))
+    ;; ((1)
+    ;;  (nth 1 form))
+
+    ((2)                               ; (+ x y)
+     (byte-optimize-predicate
+      (cond
+       ;; `add1' and `sub1' are a marginally fewer instructions
+       ;; than `plus' and `minus', so use them when possible.
+       ((eq (nth 1 form)  1) `(1+ ,(nth 2 form))) ; (+ 1 x)   -->  (1+ x)
+       ((eq (nth 2 form)  1) `(1+ ,(nth 1 form))) ; (+ x 1)   -->  (1+ x)
+       ((eq (nth 1 form) -1) `(1- ,(nth 2 form))) ; (+ -1 x)  -->  (1- x)
+       ((eq (nth 2 form) -1) `(1- ,(nth 1 form))) ; (+ x -1)  -->  (1- x)
+       (t form))))
+
+    (t (byte-optimize-predicate form))))
 
 (defun byte-optimize-minus (form)
   ;; Put constants at the end, except the last constant.
   (setq form (byte-optimize-delay-constants-math form 2 '+))
-  ;; Now only first and last element can be a number.
-  (let ((last (car (reverse (nthcdr 3 form)))))
+  ;; Now only first and last element can be an integer.
+  (let ((last (last (nthcdr 3 form))))
     (cond ((eq 0 last)
           ;; (- x y ... 0)  --> (- x y ...)
           (setq form (copy-sequence form))
                (numberp last))
           (setq form (nconc (list '- (- (nth 1 form) last) (nth 2 form))
                             (delq last (copy-sequence (nthcdr 3 form))))))))
-  (setq form
-;;; It is not safe to delete the function entirely
-;;; (actually, it would be safe if we know the sole arg
-;;; is not a marker).
-;;;  (if (eq (nth 2 form) 0)
-;;;      (nth 1 form)                  ; (- x 0)  -->  x
-    (byte-optimize-predicate
-     (if (and (null (cdr (cdr (cdr form))))
-             (eq (nth 1 form) 0))      ; (- 0 x)  -->  (- x)
-        (cons (car form) (cdr (cdr form)))
-       form))
-;;;    )
-    )
-
-  ;; `add1' and `sub1' are a marginally fewer instructions than `plus'
-  ;; and `minus', so use them when possible.
-  (cond ((and (null (nthcdr 3 form))
-             (eq (nth 2 form) 1))
-        (list '1- (nth 1 form)))       ; (- x 1)  -->  (1- x)
-       ((and (null (nthcdr 3 form))
-             (eq (nth 2 form) -1))
-        (list '1+ (nth 1 form)))       ; (- x -1)  -->  (1+ x)
-       (t
-        form))
-  )
+
+  (case (length (cdr form))
+    ((0)                               ; (-)
+     (condition-case ()
+        (eval form)
+       (error form)))
+
+    ;; It is not safe to delete the function entirely
+    ;; (actually, it would be safe if we knew the sole arg
+    ;; is not a marker).
+    ;; ((1)
+    ;;  (nth 1 form)
+
+    ((2)                               ; (+ x y)
+     (byte-optimize-predicate
+      (cond
+       ;; `add1' and `sub1' are a marginally fewer instructions than `plus'
+       ;; and `minus', so use them when possible.
+       ((eq (nth 2 form)  1) `(1- ,(nth 1 form))) ; (- x 1)  --> (1- x)
+       ((eq (nth 2 form) -1) `(1+ ,(nth 1 form))) ; (- x -1) --> (1+ x)
+       ((eq (nth 1 form)  0) `(-  ,(nth 2 form))) ; (- 0 x)  --> (- x)
+       (t form))))
+
+    (t (byte-optimize-predicate form))))
 
 (defun byte-optimize-multiply (form)
   (setq form (byte-optimize-delay-constants-math form 1 '*))
-  ;; If there is a constant in FORM, it is now the last element.
+  ;; If there is a constant integer in FORM, it is now the last element.
   (cond ((null (cdr form)) 1)
 ;;; It is not safe to delete the function entirely
 ;;; (actually, it would be safe if we know the sole arg
 ;;; is not a marker or if it appears in other arithmetic).
 ;;;    ((null (cdr (cdr form))) (nth 1 form))
-       ((let ((last (car (reverse form))))
-          (cond ((eq 0 last)  (cons 'progn (cdr form)))
-                ((eq 1 last)  (delq 1 (copy-sequence form)))
-                ((eq -1 last) (list '- (delq -1 (copy-sequence form))))
-                ((and (eq 2 last)
-                      (memq t (mapcar 'symbolp (cdr form))))
-                 (prog1 (setq form (delq 2 (copy-sequence form)))
-                   (while (not (symbolp (car (setq form (cdr form))))))
-                   (setcar form (list '+ (car form) (car form)))))
-                (form))))))
+       ((let ((last (last form)))
+          (byte-optimize-predicate
+           (cond ((eq 0 last)  (cons 'progn (cdr form)))
+                 ((eq 1 last)  (delq 1 (copy-sequence form)))
+                 ((eq -1 last) (list '- (delq -1 (copy-sequence form))))
+                 ((and (eq 2 last)
+                       (memq t (mapcar 'symbolp (cdr form))))
+                  (prog1 (setq form (delq 2 (copy-sequence form)))
+                    (while (not (symbolp (car (setq form (cdr form))))))
+                    (setcar form (list '+ (car form) (car form)))))
+                 (form)))))))
 
 (defun byte-optimize-divide (form)
   (setq form (byte-optimize-delay-constants-math form 2 '*))
-  (let ((last (car (reverse (cdr (cdr form))))))
+  ;; If there is a constant integer in FORM, it is now the last element.
+  (let ((last (last (cdr (cdr form)))))
     (if (numberp last)
        (cond ((= (length form) 3)
               (if (and (numberp (nth 1 form))
     (cond
 ;;;      ((null (cdr (cdr form)))
 ;;;       (nth 1 form))
-         ((eq (nth 1 form) 0)
-          (append '(progn) (cdr (cdr form)) '(0)))
-         ((eq last -1)
-          (list '- (if (nthcdr 3 form)
-                       (butlast form)
-                     (nth 1 form))))
-         (form))))
+     ((eq (nth 1 form) 0)
+      (append '(progn) (cdr (cdr form)) '(0)))
+     ((eq last -1)
+      (list '- (if (nthcdr 3 form)
+                  (butlast form)
+                (nth 1 form))))
+     (form))))
 
 (defun byte-optimize-logmumble (form)
   (setq form (byte-optimize-delay-constants-math form 1 (car form)))
index cba03e0..f68527b 100644 (file)
@@ -771,7 +771,7 @@ Variables of note:
                       '(find-tag find-tag-other-window tags-loop-continue))))
        (push-tag-mark))
     (if other-window
-       (pop-to-buffer tag-buf)
+       (pop-to-buffer tag-buf t)
       (switch-to-buffer tag-buf))
     (widen)
     (push-mark)
@@ -787,7 +787,7 @@ Variables of note:
 
 ;;;###autoload
 (defun find-tag-other-window (tagname &optional next)
-  "*Find tag whose name contains TAGNAME.
+  "*Find tag whose name contains TAGNAME, in another window.
  Selects the buffer that the tag is contained in in another window
 and puts point at its definition.
  If TAGNAME is a null string, the expression in the buffer
index be8df46..b942db4 100644 (file)
@@ -2339,8 +2339,9 @@ The name is assumed to begin with a capital letter.")
         '("\\<\\(false\\|null\\|true\\)\\>" (1 font-lock-keyword-face))
 
         ;; Class names:
-        (list (concat "\\<class\\>\\s *" java-font-lock-identifier-regexp)
-              1 'font-lock-function-name-face)
+        (list (concat "\\<\\(class\\|interface\\)\\>\\s *"
+                                                                java-font-lock-identifier-regexp)
+              2 'font-lock-function-name-face)
         
         ;; Package declarations:
         (list (concat "\\<\\(package\\|import\\)\\>\\s *"
@@ -2478,7 +2479,7 @@ The name is assumed to begin with a capital letter.")
  
         (list
 
-         ;; Java doc tags
+         ;; Javadoc tags
          '("@\\(author\\|exception\\|throws\\|deprecated\\|param\\|return\\|see\\|since\\|version\\)\\s "
            0 font-lock-keyword-face t)
 
@@ -2487,34 +2488,30 @@ The name is assumed to begin with a capital letter.")
                1 'font-lock-variable-name-face t)
 
          ;; Doc tag - Exception types
-         (list (concat "@exception\\s +"
+         (list (concat "@\\(exception\\|throws\\)\\s +"
                        java-font-lock-identifier-regexp)
-               '(1 (if (equal (char-after (match-end 0)) ?.)
+               '(2 (if (equal (char-after (match-end 0)) ?.)
                        font-lock-reference-face font-lock-type-face) t)
                (list (concat "\\=\\." java-font-lock-identifier-regexp)
                      '(goto-char (match-end 0)) nil
                      '(1 (if (equal (char-after (match-end 0)) ?.)
                              'font-lock-reference-face 'font-lock-type-face) t)))
     
-         ;; Doc tag - Exception types
-         (list (concat "@exception\\s +"
-                       java-font-lock-identifier-regexp)
-               '(1 (if (equal (char-after (match-end 0)) ?.)
-                       font-lock-reference-face font-lock-type-face) t)
-               (list (concat "\\=\\." java-font-lock-identifier-regexp)
-                     '(goto-char (match-end 0)) nil
-                     '(1 (if (equal (char-after (match-end 0)) ?.)
-                             'font-lock-reference-face 'font-lock-type-face) t)))
-
          ;; Doc tag - Cross-references, usually to methods 
          '("@see\\s +\\(\\S *[^][ \t\n\r\f(){},.;:]\\)"
            1 font-lock-function-name-face t)
     
+         ;; Doc tag - docRoot (1.3)
+         '("\\({ *@docRoot *}\\)"
+           0 font-lock-keyword-face t)
+         ;; Doc tag - beaninfo, unofficial but widely used, even by Sun
+         '("\\(@beaninfo\\)"
+           0 font-lock-keyword-face t)
          ;; Doc tag - Links
-         '("{@link\\s +\\([^}]*\\)}"
+         '("{ *@link\\s +\\([^}]+\\)}"
            0 font-lock-keyword-face t)
          ;; Doc tag - Links
-         '("{@link\\s +\\(\\S +\\s +\\S +\\)}"
+         '("{ *@link\\s +\\(\\(\\S +\\)\\|\\(\\S +\\s +\\S +\\)\\) *}"
            1 font-lock-function-name-face t)
     
          )))
index 344adf4..0bcda60 100644 (file)
@@ -413,7 +413,7 @@ nil or `never' never auto-generate a directory listing,
                 (const :tag "if-outdated" if-outdated))
   :group 'info)
 
-(defcustom Info-save-auto-generated-dir nil
+(defcustom Info-save-auto-generated-dir 'never
   "*Whether an auto-generated info directory listing should be saved.
 Possible values are:
 nil or `never', the default, auto-generated info directory 
index a0eaddf..c27747a 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.6 $
+;; Version: $Revision: 1.7.2.7 $
 ;; Keywords: help comm
 
 ;; This file is part of XEmacs
 
 ;;; Code:
 
+(eval-when '(load)
+  (if (not (fboundp 'ldap-open))
+      (error "No LDAP support compiled in this XEmacs")))
+
 (defgroup ldap nil
   "Lightweight Directory Access Protocol"
   :group 'comm)
@@ -145,6 +149,11 @@ Valid properties include:
                                   (integer :tag "(number of records)")))))
 :group 'ldap)
 
+(defcustom ldap-verbose nil
+  "*If non-nil, LDAP operations echo progress messages."
+  :type 'boolean
+  :group 'ldap)
+
 (defcustom ldap-ignore-attribute-codings nil
   "*If non-nil, do not perform any encoding/decoding on LDAP attribute values."
   :type 'boolean
@@ -436,8 +445,17 @@ and the corresponding decoder is then retrieved from
        (cons name (mapcar decoder values))
       attr)))
     
+(defun ldap-search (arg1 &rest args)
+  "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 
+`ldap-search-basic' for the low-level search API.")
 
-(defun ldap-search (filter &optional host attributes attrsonly withdn)
+(defun ldap-search-entries (filter &optional host attributes attrsonly withdn)
   "Perform an LDAP search.
 FILTER is the search filter in RFC1558 syntax, i.e., something that
 looks like \"(cn=John Smith)\".
@@ -459,13 +477,16 @@ entry according to the value of WITHDN."
   (let ((host-plist (cdr (assoc host ldap-host-parameters-alist)))
        ldap
        result)
-    (message "Opening LDAP connection to %s..." host)
+    (if ldap-verbose
+       (message "Opening LDAP connection to %s..." host))
     (setq ldap (ldap-open host host-plist))
-    (message "Searching with LDAP on %s..." host)
-    (setq result (ldap-search-internal ldap filter 
-                                      (plist-get host-plist 'base)
-                                      (plist-get host-plist 'scope)
-                                      attributes attrsonly withdn))
+    (if ldap-verbose
+       (message "Searching with LDAP on %s..." host))
+    (setq result (ldap-search ldap filter 
+                             (plist-get host-plist 'base)
+                             (plist-get host-plist 'scope)
+                             attributes attrsonly withdn
+                             ldap-verbose))
     (ldap-close ldap)
     (if ldap-ignore-attribute-codings
        result
@@ -474,6 +495,120 @@ entry according to the value of WITHDN."
                 (mapcar 'ldap-decode-attribute record)))
              result))))
 
+(defun ldap-add-entries (entries &optional host binddn passwd)
+  "Add entries to an LDAP directory.
+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"
+  (or host
+      (setq host ldap-default-host)
+      (error "No LDAP host specified"))
+  (let ((host-plist (cdr (assoc host ldap-host-parameters-alist)))
+       ldap
+       (i 1))
+    (if (or binddn passwd)
+       (setq host-plist (copy-seq host-plist)))
+    (if binddn
+       (setq host-plist (plist-put host-plist 'binddn binddn)))
+    (if passwd
+       (setq host-plist (plist-put host-plist 'passwd passwd)))
+    (if ldap-verbose
+       (message "Opening LDAP connection to %s..." host))
+    (setq ldap (ldap-open host host-plist))
+    (if ldap-verbose
+       (message "Adding LDAP entries..."))
+    (mapcar (function
+            (lambda (thisentry)
+              (ldap-add ldap (car thisentry) (cdr thisentry))
+              (if ldap-verbose
+                  (message "%d added" i))
+              (setq i (1+ i))))
+           entries)
+    (ldap-close ldap)))
+
+
+(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, 
+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"
+  (or host
+      (setq host ldap-default-host)
+      (error "No LDAP host specified"))
+  (let ((host-plist (cdr (assoc host ldap-host-parameters-alist)))
+       ldap
+       (i 1))
+    (if (or binddn passwd)
+       (setq host-plist (copy-seq host-plist)))
+    (if binddn
+       (setq host-plist (plist-put host-plist 'binddn binddn)))
+    (if passwd
+       (setq host-plist (plist-put host-plist 'passwd passwd)))
+    (if ldap-verbose
+       (message "Opening LDAP connection to %s..." host))
+    (setq ldap (ldap-open host host-plist))
+    (if ldap-verbose
+       (message "Modifying LDAP entries..."))
+    (mapcar (function
+            (lambda (thisentry)
+              (ldap-modify ldap (car thisentry) (cdr thisentry))
+              (if ldap-verbose
+                  (message "%d modified" i))
+              (setq i (1+ i))))
+           entry-mods)
+    (ldap-close ldap)))
+
+
+(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 
+a list of those.
+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"))
+  (let ((host-plist (cdr (assoc host ldap-host-parameters-alist)))
+       ldap)
+    (if (or binddn passwd)
+       (setq host-plist (copy-seq host-plist)))
+    (if binddn
+       (setq host-plist (plist-put host-plist 'binddn binddn)))
+    (if passwd
+       (setq host-plist (plist-put host-plist 'passwd passwd)))
+    (if ldap-verbose
+       (message "Opening LDAP connection to %s..." host))
+    (setq ldap (ldap-open host host-plist))
+    (if (consp dn)
+       (let ((i 1))
+         (if ldap-verbose
+             (message "Deleting LDAP entries..."))
+         (mapcar (function
+                  (lambda (thisdn)
+                    (ldap-delete ldap thisdn)
+                    (if ldap-verbose
+                        (message "%d deleted" i))
+                    (setq i (1+ i))))
+                 dn))
+      (if ldap-verbose
+         (message "Deleting LDAP entry..."))
+      (ldap-delete ldap dn))
+    (ldap-close ldap)))
+
+
 (provide 'ldap)
                
 ;;; ldap.el ends here
index 08886a9..c5e428d 100644 (file)
@@ -79,7 +79,23 @@ a scrollbar for its own text, which then moves in the opposite direction."
                  (set-glyph-image modeline-pointer-glyph "fleur" 'global 'x))
                 (t
                  (set-glyph-image modeline-pointer-glyph "sb_v_double_arrow"
-                                  'global 'x)))))
+                                  'global 'x))))
+        (when (featurep 'mswindows)
+          (cond ((eq val t)
+                 (set-glyph-image modeline-pointer-glyph
+                                  [mswindows-resource :resource-type cursor
+                                                      :resource-id "SizeAll"]
+                                  'global 'mswindows))
+                ((eq val 'scrollbar)
+                 (set-glyph-image modeline-pointer-glyph
+                                  [mswindows-resource :resource-type cursor
+                                                      :resource-id "Normal"]
+                                  'global 'mswindows))
+                (t
+                 (set-glyph-image modeline-pointer-glyph
+                                  [mswindows-resource :resource-type cursor
+                                                      :resource-id "SizeNS"]
+                                  'global 'mswindows)))))
   :group 'modeline)
 
 (defun mouse-drag-modeline (event)
index f4e4125..7c34cc7 100644 (file)
 ;; This file does the magic to parse mswindows font names, and make sure that
 ;; the default and modeline attributes of new frames are specified enough.
 
-;;; Force creation of the default face font so that if it fails we get an
-;;; error now instead of a crash at frame creation.
 (defun mswindows-init-device-faces (device)
-  (unless (face-font-instance 'default device)
-    (error "Can't find a suitable default font")))
-
+  (let ((color-default (device-system-metric device 'color-default))
+       (color-3d-face (device-system-metric device 'color-3d-face)))
+    ; Force creation of the default face font so that if it fails we get
+    ; an error now instead of a crash at frame creation.
+    (unless (face-font-instance 'default device)
+      (error "Can't find a suitable default font"))
+    
+    (if (car color-default)
+       (set-face-foreground 'default (car color-default)) device)
+    (if (cdr color-default)
+       (set-face-background 'default (cdr color-default)) device)
+    (if (car color-3d-face)
+       (set-face-foreground 'gui-element (car color-3d-face)) device)
+    (if (cdr color-3d-face)
+       (set-face-background 'gui-element (cdr color-3d-face)) device)
+    (set-face-font 'gui-element "MS Sans Serif:Regular:8" device)))
 
 (defun mswindows-init-frame-faces (frame)
   )
index b84b4a7..587ea39 100644 (file)
@@ -239,7 +239,7 @@ is the directory on the site in which packages may be found.
 This variable is used to initialize `package-get-remote', the
 variable actually used to specify package download sites."
   :tag "Package download sites"
-  :type '(repeat (list hostname directory))
+  :type '(repeat (list (string :tag "Name") host-name directory))
   :group 'package-get)
 
 (defcustom package-get-remove-copy t
index 3424d79..bf5ee4b 100644 (file)
@@ -1,3 +1,33 @@
+2000-02-21  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.30 is released.
+
+2000-02-21  Andy Piper  <andy@xemacs.org>
+
+       * lwlib.c (merge_widget_value_args): don't delete the args before
+       copying, lw_copy_widget_value_args will do this for us if
+       necessary.
+       (lw_add_widget_value_arg): Allow existing args to be replaced.
+       (free_widget_value_args): Set args to 0 rather than 0xdeadbeef,
+       reference couting works better that way.
+       (lw_copy_widget_value_args): Do the right thing.
+
+       * lwlib-Xm.c (xm_create_progress): Make sensitive as this looks
+       much better.
+       * lwlib-Xaw.c (xaw_create_progress): ditto.
+
+2000-02-12  Jan Vroonhof  <vroonhof@math.ethz.ch>
+
+       * xlwmenu.h (XmUNSPECIFIED_PIXMAP): Define this if we are using Motif
+       compatible resource names.
+
+       * xlwmenu.c (make_shadow_gcs): Always check for XmUNSPECIFIED_PIXMAP
+       even if we are only 'compatible' with the Motif resources.
+
+2000-02-15  Andy Piper  <andy@xemacs.org>
+
+       * xlwgauge.c (GaugeExpose): remove shadows.
+
 2000-02-16  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.29 is released.
index 3ff9460..dd766dc 100644 (file)
@@ -788,7 +788,7 @@ xaw_create_progress (widget_instance *instance)
   int ac = 0;
   Widget scale = 0;
   widget_value* val = instance->info->val;
-
+#if 0          /* This looks too awful, although more correct. */
   if (!val->call_data)
     {
       XtSetArg (al [ac], XtNsensitive, False);         ac++;
@@ -797,6 +797,10 @@ xaw_create_progress (widget_instance *instance)
     {
       XtSetArg (al [ac], XtNsensitive, val->enabled);          ac++;
     }
+#else
+  XtSetArg (al [ac], XtNsensitive, True);              ac++;
+#endif
+
   XtSetArg (al [ac], XtNmappedWhenManaged, FALSE);     ac++;
   XtSetArg (al [ac], XtNorientation, XtorientHorizontal);      ac++;
   XtSetArg (al [ac], XtNhighlightThickness, (Dimension)0);ac++;
index 87008b5..ff1b8ff 100644 (file)
@@ -1646,7 +1646,7 @@ xm_create_progress (widget_instance *instance)
   int ac = 0;
   Widget scale = 0;
   widget_value* val = instance->info->val;
-
+#if 0          /* This looks too awful, although more correct. */
   if (!val->call_data)
     {
       XtSetArg (al [ac], XmNsensitive, False);         ac++;
@@ -1655,6 +1655,9 @@ xm_create_progress (widget_instance *instance)
     {
       XtSetArg (al [ac], XmNsensitive, val->enabled);          ac++;
     }
+#else
+  XtSetArg (al [ac], XmNsensitive, True);              ac++;
+#endif
   XtSetArg (al [ac], XmNalignment, XmALIGNMENT_BEGINNING);     ac++;
   XtSetArg (al [ac], XmNuserData, val->call_data);             ac++;
   XtSetArg (al [ac], XmNmappedWhenManaged, FALSE);     ac++;
index 35be751..27f7a08 100644 (file)
@@ -261,7 +261,6 @@ merge_widget_value_args (widget_value *old, widget_value *new)
     {
       /* #### Do something more sensible here than just copying the
          new values (like actually merging the values). */
-      free_widget_value_args (old);
       lw_copy_widget_value_args (new, old);
       changed = True;
     }
@@ -1365,6 +1364,7 @@ void lw_add_value_args_to_args (widget_value* wv, ArgList addto, int* offset)
 
 void lw_add_widget_value_arg (widget_value* wv, String name, XtArgVal value)
 {
+  int i = 0;
   if (!wv->args)
     {
       wv->args = (widget_args *) malloc (sizeof (widget_args));
@@ -1378,7 +1378,19 @@ void lw_add_widget_value_arg (widget_value* wv, String name, XtArgVal value)
   if (wv->args->nargs > 10)
     return;
 
-  XtSetArg (wv->args->args [wv->args->nargs], name, value);   wv->args->nargs++;
+  /* If the arg is already there then we must replace it. */
+  for (i = 0; i < wv->args->nargs; i++)
+    {
+      if (!strcmp (wv->args->args[i].name, name))
+       {
+         XtSetArg (wv->args->args [i], name, value);
+         break;
+       }
+    }
+  if (i >= wv->args->nargs)
+    {
+      XtSetArg (wv->args->args [wv->args->nargs], name, value);   wv->args->nargs++;
+    }
 }
 
 static void free_widget_value_args (widget_value* wv)
@@ -1397,20 +1409,22 @@ static void free_widget_value_args (widget_value* wv)
 #endif
          free (wv->args->args);
          free (wv->args);
-         wv->args = (widget_args*)0xDEADBEEF;
+         wv->args = 0;
        }
     }
 }
 
 void lw_copy_widget_value_args (widget_value* val, widget_value* copy)
 {
-  if (!val->args)
+  if (val == copy || val->args == copy->args)
+    return;
+
+  if (copy->args)
     {
-      if (copy->args)
-       free_widget_value_args (copy);
-      copy->args = 0;
+      free_widget_value_args (copy);
     }
-  else
+
+  if (val->args)
     {
       copy->args = val->args;
       copy->args->ref_count++;
index c7ef3b4..a35a629 100644 (file)
@@ -2809,30 +2809,22 @@ make_shadow_gcs (XlwMenuWidget mw)
   xgcv.foreground = mw->menu.top_shadow_color;
   xgcv.background = mw->core.background_pixel;
 /*  xgcv.stipple = mw->menu.top_shadow_pixmap; gtb */
-#ifdef NEED_MOTIF
   if (mw->menu.top_shadow_pixmap &&
       mw->menu.top_shadow_pixmap != XmUNSPECIFIED_PIXMAP)
      xgcv.stipple = mw->menu.top_shadow_pixmap;
   else
      xgcv.stipple = 0;
-#else
-  xgcv.stipple = mw->menu.top_shadow_pixmap;
-#endif /* NEED_MOTIF */
   pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0);
   mw->menu.shadow_top_gc =
     XtGetGC((Widget)mw, GCForeground|GCBackground|pm, &xgcv);
 
   xgcv.foreground = mw->menu.bottom_shadow_color;
 /*  xgcv.stipple = mw->menu.bottom_shadow_pixmap; gtb */
-#ifdef NEED_MOTIF
   if (mw->menu.bottom_shadow_pixmap &&
       mw->menu.bottom_shadow_pixmap != XmUNSPECIFIED_PIXMAP)
      xgcv.stipple = mw->menu.bottom_shadow_pixmap;
   else
      xgcv.stipple = 0;
-#else
-  xgcv.stipple = mw->menu.bottom_shadow_pixmap;
-#endif /* NEED_MOTIF */
   pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0);
   mw->menu.shadow_bottom_gc =
     XtGetGC ((Widget)mw, GCForeground|GCBackground|pm, &xgcv);
index 24d9635..2644a2b 100644 (file)
@@ -56,6 +56,7 @@
 # define XmCTopShadowPixmap    "TopShadowPixmap"
 # define XmNbottomShadowPixmap "bottomShadowPixmap"
 # define XmCBottomShadowPixmap "BottomShadowPixmap"
+# define XmUNSPECIFIED_PIXMAP   2
 # define XmRHorizontalDimension        "HorizontalDimension"
 # define XmNspacing            "spacing"
 # define XmCSpacing            "Spacing"
index c548505..142c7d2 100644 (file)
@@ -1,3 +1,23 @@
+2000-02-21  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.30 is released.
+
+2000-02-21  Jonathan Harris  <jhar@tardis.ed.ac.uk>
+
+       * internals/internals.texi: Made texinfmt-friendly.
+
+2000-01-20  Mark Thomas  <mthomas@jprc.com>
+
+       * lispref/backups.texi (Numbered Backups):
+       * xemacs/files.texi (Backup Deletion):
+       Change trim-versions-without-asking to delete-old-versions.
+
+2000-02-19  Martin Buchholz  <martin@xemacs.org>
+
+       * internals/internals.texi (Conversion to and from External Data):
+       Document TO_EXTERNAL_FORMAT and friends.
+       Doc bug fixes.
+
 2000-02-16  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.29 is released.
index a3c3100..27d6d72 100644 (file)
@@ -3218,8 +3218,8 @@ Emacs 19.
 @example
 (declaim (inline foo bar))
 (eval-when (compile load eval) (proclaim '(inline foo bar)))
-(proclaim-inline foo bar)      ; XEmacs only
-(defsubst foo (...) ...)       ; instead of defun; Emacs 19 only
+(proclaim-inline foo bar)   ; XEmacs only
+(defsubst foo (...) ...)    ; instead of defun; Emacs 19 only
 @end example
 
 @strong{Please note:}  This declaration remains in effect after the
@@ -5549,8 +5549,8 @@ referring to the name of a function.  In Emacs Lisp, it works
 just as well to use a regular quote:
 
 @example
-(loop for x in y by #'cddr collect (mapcar #'plusp x))  ; Common Lisp
-(loop for x in y by 'cddr collect (mapcar 'plusp x))    ; Emacs Lisp
+(loop for x in y by #'cddr collect (mapcar #'plusp x)) ; Common Lisp
+(loop for x in y by 'cddr collect (mapcar 'plusp x))   ; Emacs Lisp
 @end example
 
 When @code{#'} introduces a @code{lambda} form, it is best to
index c858f39..f432589 100644 (file)
@@ -138,7 +138,9 @@ This Info file contains v1.0 of the XEmacs Internals Manual.
 * Interface to X Windows::
 * Index::
 
-@detailmenu --- The Detailed Node Listing ---
+@detailmenu
+
+--- The Detailed Node Listing ---
 
 A History of Emacs
 
@@ -189,7 +191,6 @@ Allocation of Objects in XEmacs Lisp
 * Allocation from Frob Blocks::
 * lrecords::
 * Low-level allocation::
-* Pure Space::
 * Cons::
 * Vector::
 * Bit Vector::
@@ -966,7 +967,7 @@ Java, which is inexcusable.
 
 Unfortunately, there is no perfect language.  Static typing allows a
 compiler to catch programmer errors and produce more efficient code, but
-makes programming more tedious and less fun.  For the forseeable future,
+makes programming more tedious and less fun.  For the foreseeable future,
 an Ideal Editing and Programming Environment (and that is what XEmacs
 aspires to) will be programmable in multiple languages: high level ones
 like Lisp for user customization and prototyping, and lower level ones
@@ -1619,25 +1620,17 @@ stuffs a pointer together with a tag, as follows:
  [ 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 ]
  [ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 ]
 
-   <---> ^ <------------------------------------------------------>
-    tag  |       a pointer to a structure, or an integer
-         |
-       mark bit
-@end example
-
-The tag describes the type of the Lisp object.  For integers and chars,
-the lower 28 bits contain the value of the integer or char; for all
-others, the lower 28 bits contain a pointer.  The mark bit is used
-during garbage-collection, and is always 0 when garbage collection is
-not happening. (The way that garbage collection works, basically, is that it
-loops over all places where Lisp objects could exist---this includes
-all global variables in C that contain Lisp objects [including
-@code{Vobarray}, the C equivalent of @code{obarray}; through this, all
-Lisp variables will get marked], plus various other places---and
-recursively scans through the Lisp objects, marking each object it finds
-by setting the mark bit.  Then it goes through the lists of all objects
-allocated, freeing the ones that are not marked and turning off the mark
-bit of the ones that are marked.)
+   <---------------------------------------------------------> <->
+            a pointer to a structure, or an integer            tag
+@end example
+
+A tag of 00 is used for all pointer object types, a tag of 10 is used
+for characters, and the other two tags 01 and 11 are joined together to
+form the integer object type.  This representation gives us 31 bits
+integers, 30 bits characters and pointers are represented directly
+without any bit masking.  This representation, though, assumes that
+pointers to structs are always aligned to multiples of 4, so the lower 2
+bits are always zero.
 
 Lisp objects use the typedef @code{Lisp_Object}, but the actual C type
 used for the Lisp object can vary.  It can be either a simple type
@@ -1654,97 +1647,16 @@ decode Lisp objects when debugging.  The choice of which type to use is
 determined by the preprocessor constant @code{USE_UNION_TYPE} which is
 defined via the @code{--use-union-type} option to @code{configure}.
 
-@cindex record type
-
-Note that there are only eight types that the tag can represent, but
-many more actual types than this.  This is handled by having one of the
-tag types specify a meta-type called a @dfn{record}; for all such
-objects, the first four bytes of the pointed-to structure indicate what
-the actual type is.
-
-Note also that having 28 bits for pointers and integers restricts a lot
-of things to 256 megabytes of memory. (Basically, enough pointers and
-indices and whatnot get stuffed into Lisp objects that the total amount
-of memory used by XEmacs can't grow above 256 megabytes.  In older
-versions of XEmacs and GNU Emacs, the tag was 5 bits wide, allowing for
-32 types, which was more than the actual number of types that existed at
-the time, and no ``record'' type was necessary.  However, this limited
-the editor to 64 megabytes total, which some users who edited large
-files might conceivably exceed.)
-
-Also, note that there is an implicit assumption here that all pointers
-are low enough that the top bits are all zero and can just be chopped
-off.  On standard machines that allocate memory from the bottom up (and
-give each process its own address space), this works fine.  Some
-machines, however, put the data space somewhere else in memory
-(e.g. beginning at 0x80000000).  Those machines cope by defining
-@code{DATA_SEG_BITS} in the corresponding @file{m/} or @file{s/} file to
-the proper mask.  Then, pointers retrieved from Lisp objects are
-automatically OR'ed with this value prior to being used.
-
-A corollary of the previous paragraph is that @strong{(pointers to)
-stack-allocated structures cannot be put into Lisp objects}.  The stack
-is generally located near the top of memory; if you put such a pointer
-into a Lisp object, it will get its top bits chopped off, and you will
-lose.
-
-Actually, there's an alternative representation of a @code{Lisp_Object},
-invented by Kyle Jones, that is used when the
-@code{--use-minimal-tagbits} option to @code{configure} is used.  In
-this case the 2 lower bits are used for the tag bits.  This
-representation assumes that pointers to structs are always aligned to
-multiples of 4, so the lower 2 bits are always zero.
-
-@example
- [ 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 ]
- [ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 ]
-
-   <---------------------------------------------------------> <->
-            a pointer to a structure, or an integer            tag
-@end example
-
-A tag of 00 is used for all pointer object types, a tag of 10 is used
-for characters, and the other two tags 01 and 11 are joined together to
-form the integer object type.  The markbit is moved to part of the
-structure being pointed at (integers and chars do not need to be marked,
-since no memory is allocated).  This representation has these
-advantages:
-
-@enumerate
-@item
-31 bits can be used for Lisp Integers.
-@item
-@emph{Any} pointer can be represented directly, and no bit masking
-operations are necessary.
-@end enumerate
-
-The disadvantages are:
-
-@enumerate
-@item
-An extra level of indirection is needed when accessing the object types
-that were not record types.  So checking whether a Lisp object is a cons
-cell becomes a slower operation.
-@item
-Mark bits can no longer be stored directly in Lisp objects, so another
-place for them must be found.  This means that a cons cell requires more
-memory than merely room for 2 lisp objects, leading to extra memory use.
-@end enumerate
-
 Various macros are used to construct Lisp objects and extract the
 components.  Macros of the form @code{XINT()}, @code{XCHAR()},
-@code{XSTRING()}, @code{XSYMBOL()}, etc. mask out the pointer/integer
-field and cast it to the appropriate type.  All of the macros that
-construct pointers will @code{OR} with @code{DATA_SEG_BITS} if
-necessary.  @code{XINT()} needs to be a bit tricky so that negative
-numbers are properly sign-extended: Usually it does this by shifting the
-number four bits to the left and then four bits to the right.  This
-assumes that the right-shift operator does an arithmetic shift (i.e. it
-leaves the most-significant bit as-is rather than shifting in a zero, so
-that it mimics a divide-by-two even for negative numbers).  Not all
-machines/compilers do this, and on the ones that don't, a more
-complicated definition is selected by defining
-@code{EXPLICIT_SIGN_EXTEND}.
+@code{XSTRING()}, @code{XSYMBOL()}, etc. shift out the tag field if
+needed cast it to the appropriate type.  @code{XINT()} needs to be a bit
+tricky so that negative numbers are properly sign-extended.  Since
+integers are stored left-shifted, if the right-shift operator does an
+arithmetic shift (i.e. it leaves the most-significant bit as-is rather
+than shifting in a zero, so that it mimics a divide-by-two even for
+negative numbers) the shift to remove the tag bit is enough.  This is
+the case on all the systems we support.
 
 Note that when @code{ERROR_CHECK_TYPECHECK} is defined, the extractor
 macros become more complicated---they check the tag bits and/or the
@@ -1844,9 +1756,8 @@ done during the dumping process: If possible, the initialized data
 segment is re-mapped so that it becomes part of the (unmodifiable) code
 segment in the dumped executable.  This allows this memory to be shared
 among multiple running XEmacs processes.  XEmacs is careful to place as
-much constant data as possible into initialized variables (in
-particular, into what's called the @dfn{pure space}---see below) during
-the @file{temacs} phase.
+much constant data as possible into initialized variables during the
+@file{temacs} phase.
 
 @cindex copy-on-write
 @strong{Please note:} This kludge only works on a few systems nowadays,
@@ -2265,19 +2176,22 @@ Without Mule support, an @code{Emchar} is equivalent to an
 The data representing the text in a buffer or string is logically a set
 of @code{Bufbyte}s.
 
-XEmacs does not work with character formats all the time; when reading
-characters from the outside, it decodes them to an internal format, and
-likewise encodes them when writing.  @code{Bufbyte} (in fact
+XEmacs does not work with the same character formats all the time; when
+reading characters from the outside, it decodes them to an internal
+format, and likewise encodes them when writing.  @code{Bufbyte} (in fact
 @code{unsigned char}) is the basic unit of XEmacs internal buffers and
-strings format.
+strings format.  A @code{Bufbyte *} is the type that points at text
+encoded in the variable-width internal encoding.
 
 One character can correspond to one or more @code{Bufbyte}s.  In the
-current implementation, an ASCII character is represented by the same
-@code{Bufbyte}, and extended characters are represented by a sequence of
-@code{Bufbyte}s.
+current Mule implementation, an ASCII character is represented by the
+same @code{Bufbyte}, and other characters are represented by a sequence
+of two or more @code{Bufbyte}s.
 
-Without Mule support, a @code{Bufbyte} is equivalent to an
-@code{Emchar}.
+Without Mule support, there are exactly 256 characters, implicitly
+Latin-1, and each character is represented using one @code{Bufbyte}, and
+there is a one-to-one correspondence between @code{Bufbyte}s and
+@code{Emchar}s.
 
 @item Bufpos
 @itemx Charcount
@@ -2287,8 +2201,8 @@ A @code{Bufpos} represents a character position in a buffer or string.
 A @code{Charcount} represents a number (count) of characters.
 Logically, subtracting two @code{Bufpos} values yields a
 @code{Charcount} value.  Although all of these are @code{typedef}ed to
-@code{int}, we use them in preference to @code{int} to make it clear
-what sort of position is being used.
+@code{EMACS_INT}, we use them in preference to @code{EMACS_INT} to make
+it clear what sort of position is being used.
 
 @code{Bufpos} and @code{Charcount} values are the only ones that are
 ever visible to Lisp.
@@ -2298,7 +2212,7 @@ ever visible to Lisp.
 @cindex Bytind
 @cindex Bytecount
 A @code{Bytind} represents a byte position in a buffer or string.  A
-@code{Bytecount} represents the distance between two positions in bytes.
+@code{Bytecount} represents the distance between two positions, in bytes.
 The relationship between @code{Bytind} and @code{Bytecount} is the same
 as the relationship between @code{Bufpos} and @code{Charcount}.
 
@@ -2325,10 +2239,10 @@ learn about them.
 @table @code
 @item MAX_EMCHAR_LEN
 @cindex MAX_EMCHAR_LEN
-This preprocessor constant is the maximum number of buffer bytes per
-Emacs character, i.e. the byte length of an @code{Emchar}.  It is useful
-when allocating temporary strings to keep a known number of characters.
-For instance:
+This preprocessor constant is the maximum number of buffer bytes to
+represent an Emacs character in the variable width internal encoding.
+It is useful when allocating temporary strings to keep a known number of
+characters.  For instance:
 
 @example
 @group
@@ -2449,107 +2363,135 @@ stuff (such as the infamous \201 characters) leak out.
 
 The interface to conversion between the internal and external
 representations of text are the numerous conversion macros defined in
-@file{buffer.h}.  Before looking at them, we'll look at the external
-formats supported by these macros.
-
-Currently meaningful formats are @code{FORMAT_BINARY},
-@code{FORMAT_FILENAME}, @code{FORMAT_OS}, and @code{FORMAT_CTEXT}.  Here
-is a description of these.
+@file{buffer.h}.  There used to be a fixed set of external formats
+supported by these macros, but now any coding system can be used with
+these macros.  The coding system alias mechanism is used to create the
+following logical coding systems, which replace the fixed external
+formats.  The (dontusethis-set-symbol-value-handler) mechanism was
+enhanced to make this possible (more work on that is needed - like
+remove the @code{dontusethis-} prefix).
 
 @table @code
-@item FORMAT_BINARY
-Binary format.  This is the simplest format and is what we use in the
-absence of a more appropriate format.  This converts according to the
-@code{binary} coding system:
+@item Qbinary
+This is the simplest format and is what we use in the absence of a more
+appropriate format.  This converts according to the @code{binary} coding
+system:
 
 @enumerate a
 @item
-On input, bytes 0--255 are converted into characters 0--255.
+On input, bytes 0--255 are converted into (implicitly Latin-1)
+characters 0--255.  A non-Mule xemacs doesn't really know about
+different character sets and the fonts to display them, so the bytes can
+be treated as text in different 1-byte encodings by simply setting the
+appropriate fonts.  So in a sense, non-Mule xemacs is a multi-lingual
+editor if, for example, different fonts are used to display text in
+different buffers, faces, or windows.  The specifier mechanism gives the
+user complete control over this kind of behavior.
 @item
 On output, characters 0--255 are converted into bytes 0--255 and other
-characters are converted into `X'.
+characters are converted into `~'.
 @end enumerate
 
-@item FORMAT_FILENAME
-Format used for filenames.  In the original Mule, this is user-definable
-with the @code{pathname-coding-system} variable.  For the moment, we
-just use the @code{binary} coding system.
+@item Qfile_name
+Format used for filenames.  This is user-definable via either the
+@code{file-name-coding-system} or @code{pathname-coding-system} (now
+obsolete) variables.
 
-@item FORMAT_OS
+@item Qnative
 Format used for the external Unix environment---@code{argv[]}, stuff
 from @code{getenv()}, stuff from the @file{/etc/passwd} file, etc.
+Currently this is the same as Qfile_name.  The two should be
+distinguished for clarity and possible future separation.
 
-Perhaps should be the same as FORMAT_FILENAME.
-
-@item FORMAT_CTEXT
-Compound--text format.  This is the standard X format used for data
+@item Qctext
+Compound--text format.  This is the standard X11 format used for data
 stored in properties, selections, and the like.  This is an 8-bit
-no-lock-shift ISO2022 coding system.
+no-lock-shift ISO2022 coding system.  This is a real coding system,
+unlike Qfile_name, which is user-definable.
 @end table
 
-The macros to convert between these formats and the internal format, and
-vice versa, follow.
+There are two fundamental macros to convert between external and
+internal format.
+
+@code{TO_INTERNAL_FORMAT} converts external data to internal format, and
+@code{TO_EXTERNAL_FORMAT} converts the other way around.  The arguments
+each of these receives are a source type, a source, a sink type, a sink,
+and a coding system (or a symbol naming a coding system).
+
+A typical call looks like
+@example
+TO_EXTERNAL_FORMAT (LISP_STRING, str, C_STRING_MALLOC, ptr, Qfile_name);
+@end example
+
+which means that the contents of the lisp string @code{str} are written
+to a malloc'ed memory area which will be pointed to by @code{ptr}, after
+the function returns.  The conversion will be done using the
+@code{file-name} coding system, which will be controlled by the user
+indirectly by setting or binding the variable
+@code{file-name-coding-system}.
+
+Some sources and sinks require two C variables to specify.  We use some
+preprocessor magic to allow different source and sink types, and even
+different numbers of arguments to specify different types of sources and
+sinks.
+
+So we can have a call that looks like
+@example
+TO_INTERNAL_FORMAT (DATA, (ptr, len),
+                    MALLOC, (ptr, len),
+                    coding_system);
+@end example
+
+The parenthesized argument pairs are required to make the preprocessor
+magic work.
+
+Here are the different source and sink types:
 
 @table @code
-@item GET_CHARPTR_INT_DATA_ALLOCA
-@itemx GET_CHARPTR_EXT_DATA_ALLOCA
-These two are the most basic conversion macros.
-@code{GET_CHARPTR_INT_DATA_ALLOCA} converts external data to internal
-format, and @code{GET_CHARPTR_EXT_DATA_ALLOCA} converts the other way
-around.  The arguments each of these receives are @var{ptr} (pointer to
-the text in external format), @var{len} (length of texts in bytes),
-@var{fmt} (format of the external text), @var{ptr_out} (lvalue to which
-new text should be copied), and @var{len_out} (lvalue which will be
-assigned the length of the internal text in bytes).  The resulting text
-is stored to a stack-allocated buffer.  If the text doesn't need
-changing, these macros will do nothing, except for setting
-@var{len_out}.
-
-The macros above take many arguments which makes them unwieldy.  For
-this reason, a number of convenience macros are defined with obvious
-functionality, but accepting less arguments.  The general rule is that
-macros with @samp{INT} in their name convert text to internal Emacs
-representation, whereas the @samp{EXT} macros convert to external
-representation.
-
-@item GET_C_CHARPTR_INT_DATA_ALLOCA
-@itemx GET_C_CHARPTR_EXT_DATA_ALLOCA
-As their names imply, these macros work on C char pointers, which are
-zero-terminated, and thus do not need @var{len} or @var{len_out}
-parameters.
-
-@item GET_STRING_EXT_DATA_ALLOCA
-@itemx GET_C_STRING_EXT_DATA_ALLOCA
-These two macros convert a Lisp string into an external representation.
-The difference between them is that @code{GET_STRING_EXT_DATA_ALLOCA}
-stores its output to a generic string, providing @var{len_out}, the
-length of the resulting external string.  On the other hand,
-@code{GET_C_STRING_EXT_DATA_ALLOCA} assumes that the caller will be
-satisfied with output string being zero-terminated.
-
-Note that for Lisp strings only one conversion direction makes sense.
-
-@item GET_C_CHARPTR_EXT_BINARY_DATA_ALLOCA
-@itemx GET_CHARPTR_EXT_BINARY_DATA_ALLOCA
-@itemx GET_STRING_BINARY_DATA_ALLOCA
-@itemx GET_C_STRING_BINARY_DATA_ALLOCA
-@itemx GET_C_CHARPTR_EXT_FILENAME_DATA_ALLOCA
-@itemx ...
-These macros convert internal text to a specific external
-representation, with the external format being encoded into the name of
-the macro.  Note that the @code{GET_STRING_...} and
-@code{GET_C_STRING...}  macros lack the @samp{EXT} tag, because they
-only make sense in that direction.
-
-@item GET_C_CHARPTR_INT_BINARY_DATA_ALLOCA
-@itemx GET_CHARPTR_INT_BINARY_DATA_ALLOCA
-@itemx GET_C_CHARPTR_INT_FILENAME_DATA_ALLOCA
-@itemx ...
-These macros convert external text of a specific format to its internal
-representation, with the external format being incoded into the name of
-the macro.
+@item @code{DATA, (ptr, len),}
+input data is a fixed buffer of size @var{len} at address @var{ptr}
+@item @code{ALLOCA, (ptr, len),}
+output data is placed in an alloca()ed buffer of size @var{len} pointed to by @var{ptr}
+@item @code{MALLOC, (ptr, len),}
+output data is in a malloc()ed buffer of size @var{len} pointed to by @var{ptr}
+@item @code{C_STRING_ALLOCA, ptr,}
+equivalent to @code{ALLOCA (ptr, len_ignored)} on output.
+@item @code{C_STRING_MALLOC, ptr,}
+equivalent to @code{MALLOC (ptr, len_ignored)} on output
+@item @code{C_STRING, ptr,}
+equivalent to @code{DATA, (ptr, strlen (ptr) + 1)} on input
+@item @code{LISP_STRING, string,}
+input or output is a Lisp_Object of type string
+@item @code{LISP_BUFFER, buffer,}
+output is written to @code{(point)} in lisp buffer @var{buffer}
+@item @code{LISP_LSTREAM, lstream,}
+input or output is a Lisp_Object of type lstream
+@item @code{LISP_OPAQUE, object,}
+input or output is a Lisp_Object of type opaque
 @end table
 
+Often, the data is being converted to a '\0'-byte-terminated string,
+which is the format required by many external system C APIs.  For these
+purposes, a source type of @code{C_STRING} or a sink type of
+@code{C_STRING_ALLOCA} or @code{C_STRING_MALLOC} is appropriate.
+Otherwise, we should try to keep XEmacs '\0'-byte-clean, which means
+using (ptr, len) pairs.
+
+The sinks to be specified must be lvalues, unless they are the lisp
+object types @code{LISP_LSTREAM} or @code{LISP_BUFFER}.
+
+For the sink types @code{ALLOCA} and @code{C_STRING_ALLOCA}, the
+resulting text is stored in a stack-allocated buffer, which is
+automatically freed on returning from the function.  However, the sink
+types @code{MALLOC} and @code{C_STRING_MALLOC} return @code{xmalloc()}ed
+memory.  The caller is responsible for freeing this memory using
+@code{xfree()}.
+
+Note that it doesn't make sense for @code{LISP_STRING} to be a source
+for @code{TO_INTERNAL_FORMAT} or a sink for @code{TO_EXTERNAL_FORMAT}.
+You'll get an assertion failure if you try.
+
+
 @node General Guidelines for Writing Mule-Aware Code, An Example of Mule-Aware Code, Conversion to and from External Data, Coding for Mule
 @subsection General Guidelines for Writing Mule-Aware Code
 
@@ -2577,10 +2519,23 @@ XEmacs can crash if unexpected 8bit sequences are copied to its internal
 buffers literally.
 
 This means that when a system function, such as @code{readdir}, returns
-a string, you need to convert it using one of the conversion macros
+a string, you may need to convert it using one of the conversion macros
 described in the previous chapter, before passing it further to Lisp.
-In the case of @code{readdir}, you would use the
-@code{GET_C_CHARPTR_INT_FILENAME_DATA_ALLOCA} macro.
+
+Actually, most of the basic system functions that accept '\0'-terminated
+string arguments, like @code{stat()} and @code{open()}, have been
+@strong{encapsulated} so that they are they @code{always} do internal to
+external conversion themselves.  This means you must pass internally
+encoded data, typically the @code{XSTRING_DATA} of a Lisp_String to
+these functions.  This is actually a design bug, since it unexpectedly
+changes the semantics of the system functions.  A better design would be
+to provide separate versions of these system functions that accepted
+Lisp_Objects which were lisp strings in place of their current
+@code{char *} arguments.
+
+@example
+int stat_lisp (Lisp_Object path, struct stat *buf); /* Implement me */
+@end example
 
 Also note that many internal functions, such as @code{make_string},
 accept Bufbytes, which removes the need for them to convert the data
@@ -2592,10 +2547,9 @@ passed around in internal format.
 @node An Example of Mule-Aware Code,  , General Guidelines for Writing Mule-Aware Code, Coding for Mule
 @subsection An Example of Mule-Aware Code
 
-As an example of Mule-aware code, we shall will analyze the
-@code{string} function, which conses up a Lisp string from the character
-arguments it receives.  Here is the definition, pasted from
-@code{alloc.c}:
+As an example of Mule-aware code, we will analyze the @code{string}
+function, which conses up a Lisp string from the character arguments it
+receives.  Here is the definition, pasted from @code{alloc.c}:
 
 @example
 @group
@@ -2708,7 +2662,7 @@ All @file{.c} files should @code{#include <config.h>} first.  Almost all
 Generated header files should be included using the @code{#include <...>} syntax,
 not the @code{#include "..."} syntax.  The generated headers are:
 
-@file{config.h puresize-adjust.h sheap-adjust.h paths.h Emacs.ad.h}
+@file{config.h sheap-adjust.h paths.h Emacs.ad.h}
 
 The basic rule is that you should assume builds using @code{--srcdir}
 and the @code{#include <...>} syntax needs to be used when the
@@ -2741,6 +2695,27 @@ make check
 @end example
 @end itemize
 
+Here is a checklist of things to do when creating a new lisp object type
+named @var{foo}:
+
+@enumerate
+@item
+create @var{foo}.h
+@item
+create @var{foo}.c
+@item
+add definitions of syms_of_@var{foo}, etc. to @var{foo}.c
+@item
+add declarations of syms_of_@var{foo}, etc. to symsinit.h
+@item
+add calls to syms_of_@var{foo}, etc. to emacs.c(main_1)
+@item
+add definitions of macros like CHECK_FOO and FOOP to @var{foo}.h
+@item
+add the new type index to enum lrecord_type
+@item
+add DEFINE_LRECORD_IMPLEMENTATION call to @var{foo}.c
+@end enumerate
 
 @node A Summary of the Various XEmacs Modules, Allocation of Objects in XEmacs Lisp, Rules When Writing New C Code, Top
 @chapter A Summary of the Various XEmacs Modules
@@ -3039,8 +3014,6 @@ special-purpose argument types requiring definitions not in
 
 @example
 alloc.c
-pure.c
-puresize.h
 @end example
 
 The large module @file{alloc.c} implements all of the basic allocation and
@@ -3066,35 +3039,6 @@ require changes to the generic subsystem code or affect any of the other
 subtypes in the subsystem; this provides a great deal of robustness to
 the XEmacs code.
 
-@cindex pure space
-@file{pure.c} contains the declaration of the @dfn{purespace} array.
-Pure space is a hack used to place some constant Lisp data into the code
-segment of the XEmacs executable, even though the data needs to be
-initialized through function calls.  (See above in section VIII for more
-info about this.)  During startup, certain sorts of data is
-automatically copied into pure space, and other data is copied manually
-in some of the basic Lisp files by calling the function @code{purecopy},
-which copies the object if possible (this only works in temacs, of
-course) and returns the new object.  In particular, while temacs is
-executing, the Lisp reader automatically copies all compiled-function
-objects that it reads into pure space.  Since compiled-function objects
-are large, are never modified, and typically comprise the majority of
-the contents of a compiled-Lisp file, this works well.  While XEmacs is
-running, any attempt to modify an object that resides in pure space
-causes an error.  Objects in pure space are never garbage collected --
-almost all of the time, they're intended to be permanent, and in any
-case you can't write into pure space to set the mark bits.
-
-@file{puresize.h} contains the declaration of the size of the pure space
-array.  This depends on the optional features that are compiled in, any
-extra purespace requested by the user at compile time, and certain other
-factors (e.g. 64-bit machines need more pure space because their Lisp
-objects are larger).  The smallest size that suffices should be used, so
-that there's no wasted space.  If there's not enough pure space, you
-will get an error during the build process, specifying how much more
-pure space is needed.
-
-
 
 @example
 eval.c
@@ -4418,7 +4362,6 @@ Asian-language support, and is not currently used.
 * Allocation from Frob Blocks::
 * lrecords::
 * Low-level allocation::
-* Pure Space::
 * Cons::
 * Vector::
 * Bit Vector::
@@ -4449,10 +4392,10 @@ Some Lisp objects, especially those that are primarily used internally,
 have no corresponding Lisp primitives.  Every Lisp object, though,
 has at least one C primitive for creating it.
 
-  Recall from section (VII) that a Lisp object, as stored in a 32-bit
-or 64-bit word, has a mark bit, a few tag bits, and a ``value'' that
-occupies the remainder of the bits.  We can separate the different
-Lisp object types into four broad categories:
+  Recall from section (VII) that a Lisp object, as stored in a 32-bit or
+64-bit word, has a few tag bits, and a ``value'' that occupies the
+remainder of the bits.  We can separate the different Lisp object types
+into three broad categories:
 
 @itemize @bullet
 @item
@@ -4463,54 +4406,28 @@ for such objects.  Lisp objects of these types do not need to be
 @code{GCPRO}ed.
 @end itemize
 
-  In the remaining three categories, the value is a pointer to a
-structure.
-
-@itemize @bullet
-@item
-@cindex frob block
-(b) Those for whom the tag directly specifies the type.  Recall that
-there are only three tag bits; this means that at most five types can be
-specified this way.  The most commonly-used types are stored in this
-format; this includes conses, strings, vectors, and sometimes symbols.
-With the exception of vectors, objects in this category are allocated in
-@dfn{frob blocks}, i.e. large blocks of memory that are subdivided into
-individual objects.  This saves a lot on malloc overhead, since there
-are typically quite a lot of these objects around, and the objects are
-small.  (A cons, for example, occupies 8 bytes on 32-bit machines---4
-bytes for each of the two objects it contains.) Vectors are individually
-@code{malloc()}ed since they are of variable size.  (It would be
-possible, and desirable, to allocate vectors of certain small sizes out
-of frob blocks, but it isn't currently done.) Strings are handled
-specially: Each string is allocated in two parts, a fixed size structure
-containing a length and a data pointer, and the actual data of the
-string.  The former structure is allocated in frob blocks as usual, and
-the latter data is stored in @dfn{string chars blocks} and is relocated
-during garbage collection to eliminate holes.
-@end itemize
-
   In the remaining two categories, the type is stored in the object
 itself.  The tag for all such objects is the generic @dfn{lrecord}
-(Lisp_Record) tag.  The first four bytes (or eight, for 64-bit machines)
-of the object's structure are a pointer to a structure that describes
-the object's type, which includes method pointers and a pointer to a
-string naming the type.  Note that it's possible to save some space by
-using a one- or two-byte tag, rather than a four- or eight-byte pointer
-to store the type, but it's not clear it's worth making the change.
+(Lisp_Type_Record) tag.  The first bytes of the object's structure are an
+integer (actually a char) characterising the object's type and some
+flags, in particular the mark bit used for garbage collection.  A
+structure describing the type is accessible thru the
+lrecord_implementation_table indexed with said integer.  This structure
+includes the method pointers and a pointer to a string naming the type.
 
 @itemize @bullet
 @item
-(c) Those lrecords that are allocated in frob blocks (see above).  This
+(b) Those lrecords that are allocated in frob blocks (see above).  This
 includes the objects that are most common and relatively small, and
-includes floats, compiled functions, symbols (when not in category (b)),
+includes conses, strings, subrs, floats, compiled functions, symbols,
 extents, events, and markers.  With the cleanup of frob blocks done in
 19.12, it's not terribly hard to add more objects to this category, but
-it's a bit trickier than adding an object type to type (d) (esp. if the
+it's a bit trickier than adding an object type to type (c) (esp. if the
 object needs a finalization method), and is not likely to save much
 space unless the object is small and there are many of them. (In fact,
 if there are very few of them, it might actually waste space.)
 @item
-(d) Those lrecords that are individually @code{malloc()}ed.  These are
+(c) Those lrecords that are individually @code{malloc()}ed.  These are
 called @dfn{lcrecords}.  All other types are in this category.  Adding a
 new type to this category is comparatively easy, and all types added
 since 19.8 (when the current allocation scheme was devised, by Richard
@@ -4519,17 +4436,11 @@ category.
 @end itemize
 
   Note that bit vectors are a bit of a special case.  They are
-simple lrecords as in category (c), but are individually @code{malloc()}ed
+simple lrecords as in category (b), but are individually @code{malloc()}ed
 like vectors.  You can basically view them as exactly like vectors
 except that their type is stored in lrecord fashion rather than
 in directly-tagged fashion.
 
-  Note that FSF Emacs redesigned their object system in 19.29 to follow
-a similar scheme.  However, given RMS's expressed dislike for data
-abstraction, the FSF scheme is not nearly as clean or as easy to
-extend. (FSF calls items of type (c) @code{Lisp_Misc} and items of type
-(d) @code{Lisp_Vectorlike}, with separate tags for each, although
-@code{Lisp_Vectorlike} is also used for vectors.)
 
 @node Garbage Collection, GCPROing, Introduction to Allocation, Allocation of Objects in XEmacs Lisp
 @section Garbage Collection
@@ -4549,61 +4460,11 @@ Traversing all these objects means traversing all frob blocks,
 all vectors (which are chained in one big list), and all
 lcrecords (which are likewise chained).
 
-  Note that, when an object is marked, the mark has to occur
-inside of the object's structure, rather than in the 32-bit
-@code{Lisp_Object} holding the object's pointer; i.e. you can't just
-set the pointer's mark bit.  This is because there may be many
-pointers to the same object.  This means that the method of
-marking an object can differ depending on the type.  The
-different marking methods are approximately as follows:
-
-@enumerate
-@item
-For conses, the mark bit of the car is set.
-@item
-For strings, the mark bit of the string's plist is set.
-@item
-For symbols when not lrecords, the mark bit of the
-symbol's plist is set.
-@item
-For vectors, the length is negated after adding 1.
-@item
-For lrecords, the pointer to the structure describing
-the type is changed (see below).
-@item
-Integers and characters do not need to be marked, since
-no allocation occurs for them.
-@end enumerate
-
-  The details of this are in the @code{mark_object()} function.
-
-  Note that any code that operates during garbage collection has
-to be especially careful because of the fact that some objects
-may be marked and as such may not look like they normally do.
-In particular:
+  Garbage collection can be invoked explicitly by calling
+@code{garbage-collect} but is also called automatically by @code{eval},
+once a certain amount of memory has been allocated since the last
+garbage collection (according to @code{gc-cons-threshold}).
 
-@itemize @bullet
-Some object pointers may have their mark bit set.  This will make
-@code{FOOBARP()} predicates fail.  Use @code{GC_FOOBARP()} to deal with
-this.
-@item
-Even if you clear the mark bit, @code{FOOBARP()} will still fail
-for lrecords because the implementation pointer has been
-changed (see below).  @code{GC_FOOBARP()} will correctly deal with
-this.
-@item
-Vectors have their size field munged, so anything that
-looks at this field will fail.
-@item
-Note that @code{XFOOBAR()} macros @emph{will} work correctly on object
-pointers with their mark bit set, because the logical shift operations
-that remove the tag also remove the mark bit.
-@end itemize
-
-  Finally, note that garbage collection can be invoked explicitly
-by calling @code{garbage-collect} but is also called automatically
-by @code{eval}, once a certain amount of memory has been allocated
-since the last garbage collection (according to @code{gc-cons-threshold}).
 
 @node GCPROing, Garbage Collection - Step by Step, Garbage Collection, Allocation of Objects in XEmacs Lisp
 @section @code{GCPRO}ing
@@ -4616,14 +4477,17 @@ of accessibility are:
 
 @enumerate
 @item
-All objects that have been @code{staticpro()}d.  This is used for
-any global C variables that hold Lisp objects.  A call to
-@code{staticpro()} happens implicitly as a result of any symbols
-declared with @code{defsymbol()} and any variables declared with
-@code{DEFVAR_FOO()}.  You need to explicitly call @code{staticpro()}
-(in the @code{vars_of_foo()} method of a module) for other global
-C variables holding Lisp objects. (This typically includes
-internal lists and such things.)
+All objects that have been @code{staticpro()}d or
+@code{staticpro_nodump()}ed.  This is used for any global C variables
+that hold Lisp objects.  A call to @code{staticpro()} happens implicitly
+as a result of any symbols declared with @code{defsymbol()} and any
+variables declared with @code{DEFVAR_FOO()}.  You need to explicitly
+call @code{staticpro()} (in the @code{vars_of_foo()} method of a module)
+for other global C variables holding Lisp objects. (This typically
+includes internal lists and such things.).  Use
+@code{staticpro_nodump()} only in the rare cases when you do not want
+the pointed variable to be saved at dump time but rather recompute it at
+startup.
 
 Note that @code{obarray} is one of the @code{staticpro()}d things.
 Therefore, all functions and variables get marked through this.
@@ -4822,16 +4686,16 @@ function evaluates calls of elisp functions and works according to
 
 The upshot is that garbage collection can basically occur everywhere
 @code{Feval}, respectively @code{Ffuncall}, is used - either directly or
-through another function. Since calls to these two functions are
-hidden in various other functions, many calls to
-@code{garabge_collect_1} are not obviously foreseeable, and therefore
-unexpected. Instances where they are used that are worth remembering are
-various elisp commands, as 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 pressing Ctrl-g.
+through another function. Since calls to these two functions are hidden
+in various other functions, many calls to @code{garbage_collect_1} are
+not obviously foreseeable, and therefore unexpected. Instances where
+they are used that are worth remembering are various elisp commands, as
+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
+pressing Ctrl-g.
 
 @node garbage_collect_1, mark_object, Invocation, Garbage Collection - Step by Step
 @subsection @code{garbage_collect_1}
@@ -4852,7 +4716,7 @@ Next the correct frame in which to put
 all the output occurring during garbage collecting is determined. In
 order to be able to restore the old display's state after displaying the
 message, some data about the current cursor position has to be
-saved. The variables @code{pre_gc_curser} and @code{cursor_changed} take
+saved. The variables @code{pre_gc_cursor} and @code{cursor_changed} take
 care of that.
 @item
 The state of @code{gc_currently_forbidden} must be restored after
@@ -4995,7 +4859,7 @@ carefully by going over it and removing just the unmarked pairs.
 
 @item
 The function @code{prune_specifiers} checks all listed specifiers held
-in @code{Vall_speficiers} and removes the ones from the lists that are
+in @code{Vall_specifiers} and removes the ones from the lists that are
 unmarked.
 
 @item
@@ -5301,25 +5165,15 @@ more defensive but less efficient and is used for error-checking.)
   [see @file{lrecord.h}]
 
   All lrecords have at the beginning of their structure a @code{struct
-lrecord_header}.  This just contains a pointer to a @code{struct
+lrecord_header}.  This just contains a type number and some flags,
+including the mark bit.  The type number, thru the
+@code{lrecord_implementation_table}, gives access to a @code{struct
 lrecord_implementation}, which is a structure containing method pointers
 and such.  There is one of these for each type, and it is a global,
 constant, statically-declared structure that is declared in the
-@code{DEFINE_LRECORD_IMPLEMENTATION()} macro. (This macro actually
-declares an array of two @code{struct lrecord_implementation}
-structures.  The first one contains all the standard method pointers,
-and is used in all normal circumstances.  During garbage collection,
-however, the lrecord is @dfn{marked} by bumping its implementation
-pointer by one, so that it points to the second structure in the array.
-This structure contains a special indication in it that it's a
-@dfn{marked-object} structure: the finalize method is the special
-function @code{this_marks_a_marked_record()}, and all other methods are
-null pointers.  At the end of garbage collection, all lrecords will
-either be reclaimed or unmarked by decrementing their implementation
-pointers, so this second structure pointer will never remain past
-garbage collection.
-
-  Simple lrecords (of type (c) above) just have a @code{struct
+@code{DEFINE_LRECORD_IMPLEMENTATION()} macro.
+
+  Simple lrecords (of type (b) above) just have a @code{struct
 lrecord_header} at their beginning.  lcrecords, however, actually have a
 @code{struct lcrecord_header}.  This, in turn, has a @code{struct
 lrecord_header} at its beginning, so sanity is preserved; but it also
@@ -5534,7 +5388,7 @@ simply return the object's size in bytes, exactly as you might expect.
 For an example, see the methods for window configurations and opaques.
 @end enumerate
 
-@node Low-level allocation, Pure Space, lrecords, Allocation of Objects in XEmacs Lisp
+@node Low-level allocation, Cons, lrecords, Allocation of Objects in XEmacs Lisp
 @section Low-level allocation
 
   Memory that you want to allocate directly should be allocated using
@@ -5606,12 +5460,7 @@ appropriate times; this keeps statistics on how much memory is
 allocated, so that garbage-collection can be invoked when the
 threshold is reached.
 
-@node Pure Space, Cons, Low-level allocation, Allocation of Objects in XEmacs Lisp
-@section Pure Space
-
-  Not yet documented.
-
-@node Cons, Vector, Pure Space, Allocation of Objects in XEmacs Lisp
+@node Cons, Vector, Low-level allocation, Allocation of Objects in XEmacs Lisp
 @section Cons
 
   Conses are allocated in standard frob blocks.  The only thing to
@@ -5649,13 +5498,8 @@ tag field in bit vector Lisp words is ``lrecord'' rather than
 @node Symbol, Marker, Bit Vector, Allocation of Objects in XEmacs Lisp
 @section Symbol
 
-  Symbols are also allocated in frob blocks.  Note that the code
-exists for symbols to be either lrecords (category (c) above)
-or simple types (category (b) above), and are lrecords by
-default (I think), although there is no good reason for this.
-
-  Note that symbols in the awful horrible obarray structure are
-chained through their @code{next} field.
+  Symbols are also allocated in frob blocks.  Symbols in the awful
+horrible obarray structure are chained through their @code{next} field.
 
 Remember that @code{intern} looks up a symbol in an obarray, creating
 one if necessary.
@@ -6006,12 +5850,17 @@ A bunch of tables needed to reassign properly the global pointers are
 then written.  They are:
 
 @enumerate
-@item the staticpro array
-@item the dumpstruct array
-@item the lrecord_implementation_table array
-@item a vector of all the offsets to the objects in the file that include a
+@item
+the staticpro array
+@item
+the dumpstruct array
+@item
+the lrecord_implementation_table array
+@item
+a vector of all the offsets to the objects in the file that include a
 description (for faster relocation at reload time)
-@item the pdump_wired and pdump_wired_list arrays
+@item
+the pdump_wired and pdump_wired_list arrays
 @end enumerate
 
 For each of the arrays we write both the pointer to the variables and
@@ -6581,13 +6430,13 @@ in the lambda list.
 are converted into an internal form for faster execution.
 
 When a compiled function is executed for the first time by
-@code{funcall_compiled_function()}, or when it is @code{Fpurecopy()}ed
-during the dump phase of building XEmacs, the byte-code instructions are
-converted from a @code{Lisp_String} (which is inefficient to access,
-especially in the presence of MULE) into a @code{Lisp_Opaque} object
-containing an array of unsigned char, which can be directly executed by
-the byte-code interpreter.  At this time the byte code is also analyzed
-for validity and transformed into a more optimized form, so that
+@code{funcall_compiled_function()}, or during the dump phase of building
+XEmacs, the byte-code instructions are converted from a
+@code{Lisp_String} (which is inefficient to access, especially in the
+presence of MULE) into a @code{Lisp_Opaque} object containing an array
+of unsigned char, which can be directly executed by the byte-code
+interpreter.  At this time the byte code is also analyzed for validity
+and transformed into a more optimized form, so that
 @code{execute_optimized_program()} can really fly.
 
 Here are some of the optimizations performed by the internal byte-code
@@ -6602,7 +6451,7 @@ variable are checked for being correct non-constant (i.e. not @code{t},
 @code{nil}, or @code{keywordp}) symbols, so that the byte interpreter
 doesn't have to.
 @item
-The maxiumum number of variable bindings in the byte-code is
+The maximum number of variable bindings in the byte-code is
 pre-computed, so that space on the @code{specpdl} stack can be
 pre-reserved once for the whole function execution.
 @item
@@ -6708,7 +6557,7 @@ All of these are very simple and work as expected, calling
 @code{let} and @code{let*}) using @code{specbind()} to create bindings
 and @code{unbind_to()} to undo the bindings when finished.
 
-Note that, with the exeption of @code{Fprogn}, these functions are
+Note that, with the exception of @code{Fprogn}, these functions are
 typically called in real life only in interpreted code, since the byte
 compiler knows how to convert calls to these functions directly into
 byte code.
@@ -8049,7 +7898,7 @@ Furthermore, there is logically a @dfn{selected console},
 @dfn{selected display}, @dfn{selected frame}, and @dfn{selected window}.
 Each of these objects is distinguished in various ways, such as being the
 default object for various functions that act on objects of that type.
-Note that every containing object rememembers the ``selected'' object
+Note that every containing object remembers the ``selected'' object
 among the objects that it contains: e.g. not only is there a selected
 window, but every frame remembers the last window in it that was
 selected, and changing the selected frame causes the remembered window
@@ -8422,7 +8271,7 @@ Output changes Implemented by @code{redisplay-output.c},
 @code{redisplay-x.c}, @code{redisplay-msw.c} and @code{redisplay-tty.c}
 @end enumerate
 
-Steps 1 and 2 are device-independant and relatively complex.  Step 3 is
+Steps 1 and 2 are device-independent and relatively complex.  Step 3 is
 mostly device-dependent.
 
 Determining the desired display
@@ -8433,7 +8282,7 @@ Display attributes are stored in @code{display_line} structures. Each
 dynarr's of @code{display_line}'s are held by each window representing
 the current display and the desired display.
 
-The @code{display_line} structures are tighly tied to buffers which
+The @code{display_line} structures are tightly tied to buffers which
 presents a problem for redisplay as this connection is bogus for the
 modeline. Hence the @code{display_line} generation routines are
 duplicated for generating the modeline. This means that the modeline
@@ -8766,7 +8615,7 @@ is generally possible to display an image-instance in multiple
 domains. For instance if we create a Pixmap, we can actually display
 this on multiple windows - even though we only need a single Pixmap
 instance to do this. If caching wasn't done then it would be necessary
-to create image-instances for every displayable occurrance of a glyph -
+to create image-instances for every displayable occurrence of a glyph -
 and every usage - and this would be extremely memory and cpu intensive.
 
 Widget-glyphs (a.k.a native widgets) are not cached in this way. This is
@@ -8802,7 +8651,7 @@ tree recursively.
 This has desirable properties such as lw_modify_all_widgets which is
 called from glyphs-x.c and updates all the properties of a widget
 without having to know what the widget is or what toolkit it is from.
-Unfortunately this also has hairy properrties such as making the lwlib
+Unfortunately this also has hairy properties such as making the lwlib
 code quite complex. And of course lwlib has to know at some level what
 the widget is and how to set its properties.
 
index 59aa856..62fc2e8 100644 (file)
@@ -226,7 +226,7 @@ backup version 3 is excess.  The function @code{find-backup-file-name}
 (@pxref{Backup Names}) is responsible for determining which backup
 versions to delete, but does not delete them itself.
 
-@defopt trim-versions-without-asking
+@defopt delete-old-versions
 If this variable is non-@code{nil}, then saving a file deletes excess
 backup versions silently.  Otherwise, it asks the user whether to delete
 them.
index 7ca98a7..7ee4fcf 100644 (file)
@@ -477,8 +477,8 @@ The values are used just after a new backup version is made;
 that newly made backup is included in the count in @code{kept-new-versions}.
 By default, both variables are 2.
 
-@vindex trim-versions-without-asking
-  If @code{trim-versions-without-asking} is non-@code{nil},  excess
+@vindex delete-old-versions
+  If @code{delete-old-versions} is non-@code{nil},  excess
 middle versions are deleted without notification.  If it is @code{nil}, the
 default, you are asked whether the excess middle versions should
 really be deleted.
index 7565951..0ec6b19 100644 (file)
@@ -1,3 +1,18 @@
+2000-02-21  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.30 is released.
+
+2000-02-21  Jonathan Harris  <jhar@tardis.ed.ac.uk>
+
+       * README: Tidy up.
+       Document need for makeinfo program or texinfo package.
+
+       * Xmd.patch: New file, previously in README.
+
+2000-02-17  Martin Buchholz  <martin@xemacs.org>
+
+       * config.h: Delete unused HAVE_LINUX_VERSION_H.
+
 2000-02-16  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.29 is released.
index a6e5c95..67c6889 100644 (file)
--- a/nt/README
+++ b/nt/README
@@ -1,4 +1,4 @@
-            Building and Installing XEmacs on Windows NT
+Building and Installing XEmacs on Windows NT            -*- mode:outline -*-
 
                             David Hobley
                            Marc Paquette
@@ -8,28 +8,61 @@ The port was made much easier by the groundbreaking work of Geoff Voelker
 and others who worked on the GNU Emacs port to NT. Their version is available
 from http://www.cs.washington.edu/homes/voelker/ntemacs.html
 
-To get it working you will need:
 
-1.  You will need Visual C++ V4.0 or later to compile everything. Personally we
-    have tested V4.0, V4.2 and V5.0.
-    Note that Visual C++ assumes a couple of environment variables INCLUDE and
-    LIB to be set which specify the location of the includes and libraries.
-    Your PATH environment variable also needs to include the DevStudio vc\bin
-    and sharedide\bin directories.
+* Required tools and sources
+============================
+
+1.  You will need Visual C++ V4.0 or later to compile everything. Personally
+    we have tested V4.0, V4.2, V5.0 and v6.0.
+
+    Note that Visual C++ assumes that the environment variables INCLUDE and
+    LIB are set to specify the location of the includes and libraries.
+    Your PATH environment variable also needs to include the DevStudio
+    vc\bin and sharedide\bin directories.
+
     Visual C++ V5.0 installs a batch file called vcvars32.bat in
     c:\Program Files\DevStudio\VC\bin\ (or wherever you installed it) that you
     can run before building to set up all of these environment variables.
 
-2.  Grab the latest XEmacs source from ftp.xemacs.org if necessary. All Win32
-    support is in the nt\ subdirectory. You'll also need the xemacs-base
-    package from the binary-packages subdirectory and you'll probably also
-    want at least the edit-utils, text-modes, fsf-compat, cc-mode,
-    prog-modes and xemacs-devel packages.
+2.  Grab the latest XEmacs source from ftp.xemacs.org if necessary.
+
+    You'll also need the xemacs-base package from the binary-packages
+    subdirectory and you'll probably also want at least the edit-utils,
+    text-modes, fsf-compat, cc-mode, prog-modes and xemacs-devel
+    packages.
+
+    You'll also need the texinfo package unless you have a copy of
+    makeinfo.exe on your machine.
+
     Unpack the packages into, say, "c:\Program Files\XEmacs\xemacs-packages".
 
-3.  At this point you can select X or Win32 native GUI support.
+3.  At this point you can choose to build for X and/or for Win32 native GUI.
+    If you only want to build for the Win32 native GUI then skip the next
+    section.
+
+
+** Extra tools and sources required for X
+
+If you want support for X you will also need:
+
+1.  An X server. MI/X is available on the Internet for free; It is 
+    available from: http://www.microimages.com/www/html/freestuf/mixdlfrm.htm
+
+2.  Source for the MIT X11R6.3 libraries, available from: ftp.x.org
+
+3.  You'll need to compile the MIT libraries without multi-thread support.
+    To do this, there is an example Win32.cf and site.def provided which set
+    the relevant flags. You will also need to apply the patch in nt/X11.patch
+    in the xc/lib/X11 directory which will fix the DLL definition file.
+
+    Once compiled and installed, you will need to apply the patch in
+    nt/Xmd.patch. This is messy and better solutions would be appreciated.
+
+4.  Goto step 2 under 'Optional libraries' below.
+
 
-If you want to build for native GUI:
+* Optional libraries
+====================
 
 1.  If you want XPM image and toolbar support grab the latest version of the
     xpm sources (xpm-3.4k.tar.gz at time of writing) and unpack them somewhere.
@@ -63,10 +96,14 @@ If you want to build for native GUI:
     directory.  cd to that directory and build libcompface with 
     'nmake -f compface.mak'.
 
-6.  cd to the nt subdirectory of the xemacs distribution and build xemacs:
+
+* Building
+==========
+
+1.  cd to the nt subdirectory of the xemacs distribution and build xemacs:
     `nmake install -f xemacs.mak`, but read on before hitting Enter.
 
-7.  If you're building with XPM support, add this to the nmake command line:
+2.  If you're building with XPM support, add this to the nmake command line:
        HAVE_XPM=1 XPM_DIR="x:\location\of\your\xpm\sources"
     and similarly for JPEG and TIFF support.
 
@@ -78,77 +115,79 @@ If you want to build for native GUI:
        HAVE_GIF=1
 
     If you're building with X-Face support, add this to the nmake command line:
-    HAVE_XFACE=1 COMPFACE_DIR="x:\location\of\your\compface\sources"
+        HAVE_XFACE=1 COMPFACE_DIR="x:\location\of\your\compface\sources"
+
+    If you're building for X, add this to the nmake command line:
+       HAVE_X=1 X11_DIR=x:\root\directory\of\your\X11\installation
 
-8.  By default, XEmacs will expect to find its packages in the subdirectories
+3.  By default, XEmacs will expect to find its packages in the subdirectories
     "site-packages", "mule-packages" and "xemacs-packages" under the package
     prefix directory "c:\Program Files\XEmacs". If you want it to look for
     these subdirectories elsewhere, add this to the nmake command line:
        PACKAGE_PREFIX="x:\your\package\directory"
     If you change your mind and want to alter the package prefix directory
-    after you've built XEmacs, delete the file .\obj\emacs.obj and rebuild with
-    the new PACKAGE_PREFIX.
+    after you've built XEmacs, delete the file nt\obj\emacs.obj and rebuild
+    with the new PACKAGE_PREFIX setting.
 
-9.  By default, XEmacs will be installed in directories under the directory
-    "c:\Program Files\XEmacs\XEmacs-21.0". If you want to install it elsewhere,
-    add this to the nmake command line:
+4.  By default, XEmacs will be installed in directories under the directory
+    "c:\Program Files\XEmacs\XEmacs-21.2". If you want to install it
+    elsewhere, add this to the nmake command line:
        INSTALL_DIR="x:\your\installation\directory"
 
-10. Now you can press Enter. nmake will build temacs, the DOC file, update the
-    elc's, dump xemacs and install the relevant files in the directories under
-    the installation directory. Unless you set INSTALL_DIR above, the file that
-    you should run to start XEmacs will be installed as 
-    "c:\Program Files\XEmacs\XEmacs-21.0\i386-pc-win32\runemacs.exe". You may
-    want to create a shortcut to that file from your Desktop or Start Menu.
-
-11. The build process always creates debugging and "Source Browser" information
-    in the source tree for use with MS DevStudio. If you actually want to debug
-    XEmacs you should run XEmacs from the source directory instead of from the
-    installation directory. You should probably also build a debug version of
-    XEmacs; to do this start with a clean source tree and add DEBUG_XEMACS=1 to
-    the nmake command line. You probably don't want to install your debug build
-    so you should tell nmake to build the 'all' target instead of the 'install'
-    target.
-
-    To make use of the debugging and "Source Browser" information, create a new
-    "console" project in MS DevStudio and, under Project/Settings, set:
+5.  XEmacs can build its info files more quickly if you have a copy of the
+    makeinfo program. If you have a copy, add this to the nmake command line:
+       MAKEINFO="x:\location\of\makeinfo.exe"
+    If you don't have a copy of makeinfo then you'll need to have installed
+    the XEmacs texinfo package.
+
+6.  Now you can press Enter. nmake will build temacs, the DOC file, update
+    the elc's, dump xemacs and install the relevant files in the directories
+    under the installation directory.
+
+    Unless you set INSTALL_DIR above, the file that you should run to start
+    XEmacs will be installed as
+        "c:\Program Files\XEmacs\XEmacs-21.2\i586-pc-win32\runxemacs.exe".
+    You may want to create a shortcut to that file from your Desktop or
+    Start Menu.
+
+
+* Debugging under MS Developer Studio
+=====================================
+
+The build process always creates debugging and "Source Browser" information
+in the source tree for use with DevStudio. If you actually want to debug
+XEmacs you should probably build a debug version of XEmacs:
+
+1.  Delete the directory nt\obj and it's contents.
+
+2.  Add DEBUG_XEMACS=1 to the nmake command line and rebuild. You probably
+    don't want to install your debug build so you should tell nmake to build
+    the 'all' target instead of the 'install' target.
+
+3.  To make use of the debugging and "Source Browser" information, create a
+    new "console" project in DevStudio and, under Project/Settings, set:
        Debug: executable name = full path of src\xemacs.exe
        Link: output file name = full path of src\temacs.exe
        Browse Info: browse info file name = full path of src\temacs.bsc
     Remember to close the Source Browser file in DevStudio before rebuilding.
 
+4.  Start XEmacs from within DevStudio or by running src\xemacs.exe so that
+    you get a console window which may contain helpful debugging info.
 
-If you want support for X you will need:
+5.  To display the contents of a lisp variable click Debug/QuickWatch, type
+    debug_print(variable) and click Recalculate. The output will appear in
+    the console window.
 
-1.  An X server. MI/X is available on the Internet for free; It is 
-    available from:  http://www.microimages.com/www/html/freestuf/mixdlfrm.htm
-
-2.  The MIT X11R6.3 libraries available from: ftp.x.org
+6.  To view lisp variables in the "Watch" window wrap the variable in one of
+    the helper functions from the file src\console-msw.c. eg type
+    DSTRING(variable) in the "Watch" window to inspect a lisp string.
 
-3.  You'll need to compile the MIT libraries without multi-thread support.
-    To do this, there is an example Win32.cf and site.def provided which
-    set the relevant flags. You will also need to apply the patch in 
-    nt/X11.patch in the xc/lib/X11 directory which will fix the DLL definition
-    file. Once compiled and installed, you will need to apply the following
-    patch to Xmd.h. This is messy and better solutions would be appreciated. 
 
-4.  Goto 2 under 'native GUI' above and add this to the nmake command line:
-       HAVE_X=1 X11_DIR=x:\root\directory\of\your\X11\installation
+* Known Problems
+================
 
---- Xmd.h~     Thu Jun 08 23:20:40 1995
-+++ Xmd.h      Sun Mar 16 13:09:10 1997
-@@ -150,8 +150,9 @@
- typedef CARD16                BITS16;
- typedef CARD8         BYTE;
-+#ifndef WIN32
- typedef CARD8           BOOL;
--
-+#endif
-Known Problems:
-Please look at the TODO list for the current list of problems and people 
-working on them.
+Please look at the PROBLEMS file for known problems and at the TODO list for
+the current list of problems and people working on them.
 
 Any other problems you need clarified, please email us and we will endeavour
 to provide any assistance we can:
index 9a155f0..f751412 100644 (file)
@@ -154,7 +154,6 @@ Boston, MA 02111-1307, USA.  */
 #undef HAVE_UTIME_H
 #undef HAVE_SYS_WAIT_H
 #undef HAVE_LIBGEN_H
-#undef HAVE_LINUX_VERSION_H
 #undef WORDS_BIGENDIAN
 #undef TIME_WITH_SYS_TIME
 
index ba45163..bcc0103 100644 (file)
@@ -326,17 +326,10 @@ release: temacs ${libsrc}DOC $(mo_file) ${other_files}
 #ifdef CANNOT_DUMP
        ln temacs ${PROGNAME}
 #else
-#ifdef HAVE_SHM
-       -if [ -w ${srcdir}/../lisp ]; then \
-         w=`pwd`; cd ${srcdir} && $${w}/temacs -nl -batch -l ${srcdir}/../lisp/inc-vers; \
-       else true; fi
-       -$(DUMPENV) ./temacs -nl -batch -l ${srcdir}/../lisp/loadup.el dump
-#else /* ! defined (HAVE_SHM) */
        -if [ -w ${srcdir}/../lisp ]; then \
          w=`pwd`; cd ${srcdir} && $${w}/temacs -batch -l ${srcdir}/../lisp/inc-vers; \
        else true; fi
        -$(DUMPENV) ./temacs -batch -l ${srcdir}/../lisp/loadup.el dump
-#endif /* ! defined (HAVE_SHM) */
        touch release
 #endif /* ! defined (CANNOT_DUMP) */
 
index fd35a0e..b0ff4e0 100644 (file)
@@ -2410,6 +2410,8 @@ If STACK-DEPTH is incorrect, Emacs may crash.
 void
 syms_of_bytecode (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (compiled_function);
+
   deferror (&Qinvalid_byte_code, "invalid-byte-code",
            "Invalid byte code", Qerror);
   defsymbol (&Qbyte_code, "byte-code");
index c8912fb..9ebfbf3 100644 (file)
@@ -115,7 +115,7 @@ tty_init_console (struct console *con, Lisp_Object props)
 
   tty_con->instream  = make_filedesc_input_stream  (tty_con->infd,  0, -1, 0);
   tty_con->outstream = make_filedesc_output_stream (tty_con->outfd, 0, -1, 0);
-#ifdef MULE
+#ifdef FILE_CODING
   tty_con->instream =
     make_decoding_input_stream (XLSTREAM (tty_con->instream),
                                Fget_coding_system (Vkeyboard_coding_system));
@@ -123,7 +123,7 @@ tty_init_console (struct console *con, Lisp_Object props)
   tty_con->outstream =
     make_encoding_output_stream (XLSTREAM (tty_con->outstream),
                                 Fget_coding_system (Vterminal_coding_system));
-#endif /* MULE */
+#endif /* FILE_CODING */
   tty_con->terminal_type = terminal_type;
   tty_con->controlling_process = controlling_process;
 
index 0c7c2ad..068200e 100644 (file)
@@ -1073,6 +1073,8 @@ The elements of this list correspond to the arguments of
 void
 syms_of_console (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (console);
+
   DEFSUBR (Fvalid_console_type_p);
   DEFSUBR (Fconsole_type_list);
   DEFSUBR (Fcdfw_console);
@@ -1195,20 +1197,16 @@ One argument, the to-be-deleted console.
 }
 
 /* The docstrings for DEFVAR_* are recorded externally by make-docfile.  */
-
-/* Declaring this stuff as const produces 'Cannot reinitialize' messages
-   from SunPro C's fix-and-continue feature (a way neato feature that
-   makes debugging unbelievably more bearable) */
 #define DEFVAR_CONSOLE_LOCAL_1(lname, field_name, forward_type, magicfun) do { \
-  static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C =             \
+  static const struct symbol_value_forward I_hate_C =                          \
   { /* struct symbol_value_forward */                                          \
     { /* struct symbol_value_magic */                                          \
       { /* struct lcrecord_header */                                           \
        { /* struct lrecord_header */                                           \
-         1, /* type - index into lrecord_implementations_table */              \
-         0, /* mark bit */                                                     \
-         0, /* c_readonly bit */                                               \
-         0  /* lisp_readonly bit */                                            \
+         lrecord_type_symbol_value_forward, /* lrecord_type_index */           \
+         1, /* mark bit */                                                     \
+         1, /* c_readonly bit */                                               \
+         1  /* lisp_readonly bit */                                            \
        },                                                                      \
        0, /* next */                                                           \
        0, /* uid  */                                                           \
index 67d08ad..ded93db 100644 (file)
@@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA.  */
 
 #include "console-msw.h"
 #include "console-stream.h"
+#include "objects-msw.h"
 #include "events.h"
 #include "faces.h"
 #include "frame.h"
@@ -68,18 +69,7 @@ Lisp_Object Qinit_pre_mswindows_win, Qinit_post_mswindows_win;
 static Lisp_Object
 build_syscolor_string (int idx)
 {
-  DWORD clr;
-  char buf[16];
-
-  if (idx < 0)
-    return Qnil;
-
-  clr = GetSysColor (idx);
-  sprintf (buf, "#%02X%02X%02X",
-          GetRValue (clr),
-          GetGValue (clr),
-          GetBValue (clr));
-  return build_string (buf);
+  return (idx < 0 ? Qnil : mswindows_color_to_string (GetSysColor (idx)));
 }
 
 static Lisp_Object
@@ -159,7 +149,7 @@ mswindows_init_device (struct device *d, Lisp_Object props)
   wc.lpszMenuName = NULL;
 
   wc.lpszClassName = XEMACS_CLASS;
-  wc.hIconSm = LoadImage (GetModuleHandle (NULL), XEMACS_CLASS,
+  wc.hIconSm = (HICON) LoadImage (GetModuleHandle (NULL), XEMACS_CLASS,
                          IMAGE_ICON, 16, 16, 0);
   RegisterClassEx (&wc);
 
@@ -201,7 +191,10 @@ static void
 mswindows_delete_device (struct device *d)
 {
 #ifdef HAVE_DRAGNDROP
-  DdeNameService (mswindows_dde_mlid, 0L, 0L, DNS_REGISTER);
+  DdeNameService (mswindows_dde_mlid, 0L, 0L, DNS_UNREGISTER);
+  DdeFreeStringHandle (mswindows_dde_mlid, mswindows_dde_item_open);
+  DdeFreeStringHandle (mswindows_dde_mlid, mswindows_dde_topic_system);
+  DdeFreeStringHandle (mswindows_dde_mlid, mswindows_dde_service);
   DdeUninitialize (mswindows_dde_mlid);
 #endif
 
@@ -243,22 +236,22 @@ mswindows_device_system_metrics (struct device *d,
       break;
 
       /*** Colors ***/
-#define FROB(met, index1, index2)                      \
+#define FROB(met, fore, back)                          \
     case DM_##met:                                     \
-      return build_syscolor_cons (index1, index2);
+      return build_syscolor_cons (fore, back);
       
-      FROB (color_default, COLOR_WINDOW, COLOR_WINDOWTEXT);
-      FROB (color_select, COLOR_HIGHLIGHT, COLOR_HIGHLIGHTTEXT);
-      FROB (color_balloon, COLOR_INFOBK, COLOR_INFOTEXT);
-      FROB (color_3d_face, COLOR_3DFACE, COLOR_BTNTEXT);
-      FROB (color_3d_light, COLOR_3DLIGHT, COLOR_3DHILIGHT);
-      FROB (color_3d_dark, COLOR_3DSHADOW, COLOR_3DDKSHADOW);
-      FROB (color_menu, COLOR_MENU, COLOR_MENUTEXT);
-      FROB (color_menu_highlight, COLOR_HIGHLIGHT, COLOR_HIGHLIGHTTEXT);
-      FROB (color_menu_button, COLOR_MENU, COLOR_MENUTEXT);
-      FROB (color_menu_disabled, COLOR_MENU, COLOR_GRAYTEXT);
-      FROB (color_toolbar, COLOR_BTNFACE, COLOR_BTNTEXT);
-      FROB (color_scrollbar, COLOR_SCROLLBAR, COLOR_CAPTIONTEXT);
+      FROB (color_default, COLOR_WINDOWTEXT, COLOR_WINDOW);
+      FROB (color_select, COLOR_HIGHLIGHTTEXT, COLOR_HIGHLIGHT);
+      FROB (color_balloon, COLOR_INFOTEXT, COLOR_INFOBK);
+      FROB (color_3d_face, COLOR_BTNTEXT, COLOR_BTNFACE);
+      FROB (color_3d_light, COLOR_3DHILIGHT, COLOR_3DLIGHT);
+      FROB (color_3d_dark, COLOR_3DDKSHADOW, COLOR_3DSHADOW);
+      FROB (color_menu, COLOR_MENUTEXT, COLOR_MENU);
+      FROB (color_menu_highlight, COLOR_HIGHLIGHTTEXT, COLOR_HIGHLIGHT);
+      FROB (color_menu_button, COLOR_MENUTEXT, COLOR_MENU);
+      FROB (color_menu_disabled, COLOR_GRAYTEXT, COLOR_MENU);
+      FROB (color_toolbar, COLOR_BTNTEXT, COLOR_BTNFACE);
+      FROB (color_scrollbar, COLOR_CAPTIONTEXT, COLOR_SCROLLBAR);
       FROB (color_desktop, -1, COLOR_DESKTOP);
       FROB (color_workspace, -1, COLOR_APPWORKSPACE);
 #undef FROB
@@ -358,7 +351,8 @@ msprinter_init_device (struct device *d, Lisp_Object props)
   if (DEVICE_MSPRINTER_DEVMODE_SIZE(d) <= 0)
     signal_open_printer_error (d);
 
-  DEVICE_MSPRINTER_DEVMODE(d) = xmalloc (DEVICE_MSPRINTER_DEVMODE_SIZE(d));
+  DEVICE_MSPRINTER_DEVMODE(d) =
+    (DEVMODE*) xmalloc (DEVICE_MSPRINTER_DEVMODE_SIZE(d));
   DocumentProperties (NULL, DEVICE_MSPRINTER_HPRINTER(d),
                      printer_name, DEVICE_MSPRINTER_DEVMODE(d),
                      NULL, DM_OUT_BUFFER);
@@ -459,7 +453,7 @@ msprinter_get_devmode_copy (struct device *d)
 
   if (DEVICE_MSPRINTER_DEVMODE_MIRROR(d) == NULL)
     DEVICE_MSPRINTER_DEVMODE_MIRROR(d) = 
-      xmalloc (DEVICE_MSPRINTER_DEVMODE_SIZE(d));
+      (DEVMODE*) xmalloc (DEVICE_MSPRINTER_DEVMODE_SIZE(d));
 
   memcpy (DEVICE_MSPRINTER_DEVMODE_MIRROR(d),
          DEVICE_MSPRINTER_DEVMODE(d),
index 458d617..25aa688 100644 (file)
@@ -1,4 +1,4 @@
- /* Generic device functions.
+/* Generic device functions.
    Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
    Copyright (C) 1994, 1995 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996 Ben Wing
@@ -986,7 +986,7 @@ size-icon-small       Small icon dimensions.
 size-device           Device screen or paper size in pixels.
 size-workspace        Workspace size in pixels. This can be less than or
                       equal to the above. For diplays, this is the area
-                      available to applications less window manager 
+                      available to applications less window manager
                       decorations. For printers, this is the size of
                       printable area.
 offset-workspace      Offset of workspace area from the top left corner
@@ -1244,6 +1244,8 @@ call_critical_lisp_code (struct device *d, Lisp_Object function,
 void
 syms_of_device (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (device);
+
   DEFSUBR (Fvalid_device_class_p);
   DEFSUBR (Fdevice_class_list);
 
index 306315e..61ceb1f 100644 (file)
@@ -779,10 +779,10 @@ value of `user-full-name' is returned.
   /* #### - Stig sez: this should return nil instead of "unknown" when pw==0 */
   /* Ben sez: bad idea because it's likely to break something */
 #ifndef AMPERSAND_FULL_NAME
-  p = ((pw) ? USER_FULL_NAME : "unknown"); /* don't gettext */
+  p = pw ? USER_FULL_NAME : "unknown"; /* don't gettext */
   q = strchr (p, ',');
 #else
-  p = ((pw) ? USER_FULL_NAME : "unknown"); /* don't gettext */
+  p = pw ? USER_FULL_NAME : "unknown"; /* don't gettext */
   q = strchr (p, ',');
 #endif
   tem = ((!NILP (user) && !pw)
@@ -855,12 +855,12 @@ get_home_directory (void)
               */
              if (initial_directory[0] != '\0')
                {
-                 cached_home_directory = initial_directory;
+                 cached_home_directory = (Extbyte*) initial_directory;
                }
              else
                {
                  /* This will probably give the wrong value */
-                 cached_home_directory = getcwd (NULL, 0);
+                 cached_home_directory = (Extbyte*) getcwd (NULL, 0);
                }
 # else
              /*
index 1f8e2c7..99c5d53 100644 (file)
@@ -54,6 +54,9 @@ static Lisp_Object Qbase, Qonelevel, Qsubtree;
 static Lisp_Object Qkrbv41, Qkrbv42;
 /* Deref policy */
 static Lisp_Object Qnever, Qalways, Qfind;
+/* Modification types (Qdelete is defined in general.c) */
+static Lisp_Object Qadd, Qreplace;
+
 \f
 /************************************************************************/
 /*                         Utility Functions                            */
@@ -316,6 +319,9 @@ the LDAP library XEmacs was compiled with: `simple', `krbv41' and `krbv42'.
   if ((err = ldap_set_option (ld, LDAP_OPT_REFERRALS,
                               LDAP_OPT_ON)) != LDAP_SUCCESS)
     signal_ldap_error (ld, NULL, err);
+  if ((err = ldap_set_option (ld, LDAP_OPT_RESTART,
+                              LDAP_OPT_ON)) != LDAP_SUCCESS)
+    signal_ldap_error (ld, NULL, err);
 #else  /* not HAVE_LDAP_SET_OPTION */
   ld->ld_deref = ldap_deref;
   ld->ld_timelimit = ldap_timelimit;
@@ -325,12 +331,11 @@ the LDAP library XEmacs was compiled with: `simple', `krbv41' and `krbv42'.
 #else /* not LDAP_REFERRALS */
   ld->ld_options = 0;
 #endif /* not LDAP_REFERRALS */
+  /* XEmacs uses interrupts (SIGIO,SIGALRM), LDAP calls need to ignore them */
+  ld->ld_options |= LDAP_OPT_RESTART;
 #endif /* not HAVE_LDAP_SET_OPTION */
 
-  /* ldap_bind_s calls select and may be wedged by SIGIO.  */
-  slow_down_interrupts ();
   err = ldap_bind_s (ld, ldap_binddn, ldap_passwd, ldap_auth);
-  speed_up_interrupts ();
   if (err != LDAP_SUCCESS)
     signal_simple_error ("Failed binding to the server",
                          build_string (ldap_err2string (err)));
@@ -368,7 +373,6 @@ struct ldap_unwind_struct
   struct berval **vals;
 };
 
-
 static Lisp_Object
 ldap_search_unwind (Lisp_Object unwind_obj)
 {
@@ -381,7 +385,12 @@ ldap_search_unwind (Lisp_Object unwind_obj)
   return Qnil;
 }
 
-DEFUN ("ldap-search-internal", Fldap_search_internal, 2, 7, 0, /*
+/* The following function is called `ldap-search-basic' instead of      */
+/* plain `ldap-search' to maintain compatibility with the XEmacs 21.1   */
+/* API where `ldap-search' was the name of the high-level search        */
+/* function                                                             */
+
+DEFUN ("ldap-search-basic", Fldap_search_basic, 2, 8, 0, /*
 Perform a search on an open LDAP connection.
 LDAP is an LDAP connection object created with `ldap-open'.
 FILTER is a filter string for the search as described in RFC 1558.
@@ -392,13 +401,14 @@ ATTRS is a list of strings indicating which attributes to retrieve
  for each matching entry. If nil return all available attributes.
 If ATTRSONLY is non-nil then only the attributes are retrieved, not
 the associated values.
-If WITHDN is non-nil each entry in the result will be prepennded with
+If WITHDN is non-nil each entry in the result will be prepended with
 its distinguished name DN.
+If VERBOSE is non-nil progress messages will be 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 WITHDN.
 */
-       (ldap, filter, base, scope, attrs, attrsonly, withdn))
+       (ldap, filter, base, scope, attrs, attrsonly, withdn, verbose))
 {
   /* This function can GC */
 
@@ -496,10 +506,8 @@ entry according to the value of WITHDN.
   /* Build the results list */
   matches = 0;
 
-  /* ldap_result calls select() and can get wedged by EINTR signals */
-  slow_down_interrupts ();
   rc = ldap_result (ld, LDAP_RES_ANY, 0, NULL, &unwind.res);
-  speed_up_interrupts ();
+
   while (rc == LDAP_RES_SEARCH_ENTRY)
     {
       QUIT;
@@ -509,7 +517,8 @@ entry according to the value of WITHDN.
          destroys the current echo area contents, even when invoked
          from Lisp.  It should use echo_area_message() instead, and
          restore the old echo area contents later.  */
-      message ("Parsing ldap results... %d", matches);
+      if (! NILP (verbose))
+        message ("Parsing ldap results... %d", matches);
       entry = Qnil;
       /* Get the DN if required */
       if (! NILP (withdn))
@@ -545,43 +554,242 @@ entry according to the value of WITHDN.
       ldap_msgfree (unwind.res);
       unwind.res = NULL;
 
-      slow_down_interrupts ();
       rc = ldap_result (ld, LDAP_RES_ANY, 0, NULL, &(unwind.res));
-      speed_up_interrupts ();
     }
 
-  if (rc == -1)
-    signal_ldap_error (ld, unwind.res, 0);
-
-  if (rc == 0)
-    signal_ldap_error (ld, NULL, LDAP_TIMELIMIT_EXCEEDED);
-
 #if defined HAVE_LDAP_PARSE_RESULT
   rc2 = ldap_parse_result (ld, unwind.res,
                            &rc,
                            NULL, NULL, NULL, NULL, 0);
   if (rc2 != LDAP_SUCCESS)
     rc = rc2;
-#elif defined HAVE_LDAP_RESULT2ERROR
+#else
+  if (rc == 0)
+    signal_ldap_error (ld, NULL, LDAP_TIMELIMIT_EXCEEDED);
+
+  if (rc == -1)
+    signal_ldap_error (ld, unwind.res, (unwind.res==NULL) ? ld->ld_errno : 0);
+
+#if defined HAVE_LDAP_RESULT2ERROR
   rc = ldap_result2error (ld, unwind.res, 0);
 #endif
-  if ((rc != LDAP_SUCCESS) && (rc != LDAP_SIZELIMIT_EXCEEDED))
+#endif
+
+  if (rc != LDAP_SUCCESS)
     signal_ldap_error (ld, NULL, rc);
 
   ldap_msgfree (unwind.res);
   unwind.res = (LDAPMessage *)NULL;
+
   /* #### See above for calling message().  */
-  message ("Parsing ldap results... done");
+  if (! NILP (verbose))
+    message ("Parsing ldap results... done");
 
   unbind_to (speccount, Qnil);
   UNGCPRO;
   return Fnreverse (result);
 }
 
+DEFUN ("ldap-add", Fldap_add, 3, 3, 0, /*
+Add an entry to an LDAP directory.
+LDAP is an LDAP connection object created with `ldap-open'.
+DN is the distinguished name of the entry to add.
+ENTRY is an entry specification, i.e., a list of cons cells
+containing attribute/value string pairs.
+*/
+       (ldap, dn, entry))
+{
+  LDAP *ld;
+  LDAPMod *ldap_mods, **ldap_mods_ptrs;
+  struct berval *bervals;
+  int rc;
+  int i, j;
+
+  Lisp_Object current, values;
+  struct gcpro gcpro1, gcpro2;
+  GCPRO2 (current, values);
+
+  /* Do all the parameter checking  */
+  CHECK_LIVE_LDAP (ldap);
+  ld = XLDAP (ldap)->ld;
+
+  /* Check the DN */
+  CHECK_STRING (dn);
+
+  /* Check the entry */
+  CHECK_CONS (entry);
+  if (NILP (entry))
+    signal_simple_error ("Cannot add void entry", entry);
+
+  /* Build the ldap_mods array */
+  ldap_mods = alloca_array (LDAPMod, XINT (Flength (entry)));
+  ldap_mods_ptrs = alloca_array (LDAPMod *, 1 + XINT (Flength (entry)));
+  i = 0;
+  EXTERNAL_LIST_LOOP (entry, entry)
+    {
+      current = XCAR (entry);
+      CHECK_CONS (current);
+      CHECK_STRING (XCAR (current));
+      ldap_mods_ptrs[i] = &(ldap_mods[i]);
+      TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (current),
+                         C_STRING_ALLOCA, ldap_mods[i].mod_type,
+                         Qnative);
+      ldap_mods[i].mod_op = LDAP_MOD_ADD | LDAP_MOD_BVALUES;
+      values = XCDR (current);
+      if (CONSP (values))
+        {
+          bervals =
+            alloca_array (struct berval, XINT (Flength (values)));
+          ldap_mods[i].mod_vals.modv_bvals =
+            alloca_array (struct berval *, 1 + XINT (Flength (values)));
+          j = 0;
+          EXTERNAL_LIST_LOOP (values, values)
+            {
+              current = XCAR (values);
+              CHECK_STRING (current);
+              ldap_mods[i].mod_vals.modv_bvals[j] = &(bervals[j]);
+             TO_EXTERNAL_FORMAT (LISP_STRING, current,
+                                 ALLOCA, (bervals[j].bv_val,
+                                          bervals[j].bv_len),
+                                 Qnative);
+              j++;
+            }
+          ldap_mods[i].mod_vals.modv_bvals[j] = NULL;
+        }
+      else
+        {
+          CHECK_STRING (values);
+          bervals = alloca_array (struct berval, 1);
+          ldap_mods[i].mod_vals.modv_bvals = alloca_array (struct berval *, 2);
+          ldap_mods[i].mod_vals.modv_bvals[0] = &(bervals[0]);
+         TO_EXTERNAL_FORMAT (LISP_STRING, values,
+                             ALLOCA, (bervals[0].bv_val,
+                                      bervals[0].bv_len),
+                             Qnative);
+          ldap_mods[i].mod_vals.modv_bvals[1] = NULL;
+        }
+      i++;
+    }
+  ldap_mods_ptrs[i] = NULL;
+  rc = ldap_add_s (ld, (char *) XSTRING_DATA (dn), ldap_mods_ptrs);
+  if (rc != LDAP_SUCCESS)
+    signal_ldap_error (ld, NULL, rc);
+
+  UNGCPRO;
+}
+
+DEFUN ("ldap-modify", Fldap_modify, 3, 3, 0, /*
+Add an entry to an LDAP directory.
+LDAP is an LDAP connection object created with `ldap-open'.
+DN is the distinguished name of the entry to modify.
+MODS is a list of modifications to apply.
+A modification is 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
+*/
+       (ldap, dn, mods))
+{
+  LDAP *ld;
+  LDAPMod *ldap_mods, **ldap_mods_ptrs;
+  struct berval *bervals;
+  int i, j, rc;
+
+  Lisp_Object current, mod_op, values;
+  struct gcpro gcpro1, gcpro2;
+
+  GCPRO2 (current, values);
+
+  /* Do all the parameter checking  */
+  CHECK_LIVE_LDAP (ldap);
+  ld = XLDAP (ldap)->ld;
+
+  /* Check the DN */
+  CHECK_STRING (dn);
+
+  /* Check the entry */
+  CHECK_CONS (mods);
+  if (NILP (mods))
+    return Qnil;
+
+  /* Build the ldap_mods array */
+  ldap_mods = alloca_array (LDAPMod, XINT (Flength (mods)));
+  ldap_mods_ptrs = alloca_array (LDAPMod *, 1 + XINT (Flength (mods)));
+  i = 0;
+  EXTERNAL_LIST_LOOP (mods, mods)
+    {
+      current = XCAR (mods);
+      CHECK_CONS (current);
+      CHECK_SYMBOL (XCAR (current));
+      mod_op = XCAR (current);
+      ldap_mods_ptrs[i] = &(ldap_mods[i]);
+      ldap_mods[i].mod_op = LDAP_MOD_BVALUES;
+      if (EQ (mod_op, Qadd))
+        ldap_mods[i].mod_op |= LDAP_MOD_ADD;
+      else if (EQ (mod_op, Qdelete))
+        ldap_mods[i].mod_op |= LDAP_MOD_DELETE;
+      else if (EQ (mod_op, Qreplace))
+        ldap_mods[i].mod_op |= LDAP_MOD_REPLACE;
+      else
+        signal_simple_error ("Invalid LDAP modification type", mod_op);
+      current = XCDR (current);
+      CHECK_STRING (XCAR (current));
+      TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (current),
+                         C_STRING_ALLOCA, ldap_mods[i].mod_type,
+                         Qnative);
+      values = XCDR (current);
+      bervals = alloca_array (struct berval, XINT (Flength (values)));
+      ldap_mods[i].mod_vals.modv_bvals =
+        alloca_array (struct berval *, 1 + XINT (Flength (values)));
+      j = 0;
+      EXTERNAL_LIST_LOOP (values, values)
+        {
+          current = XCAR (values);
+          CHECK_STRING (current);
+          ldap_mods[i].mod_vals.modv_bvals[j] = &(bervals[j]);
+         TO_EXTERNAL_FORMAT (LISP_STRING, current,
+                             ALLOCA, (bervals[j].bv_val,
+                                      bervals[j].bv_len),
+                             Qnative);
+          j++;
+        }
+      ldap_mods[i].mod_vals.modv_bvals[j] = NULL;
+      i++;
+    }
+  ldap_mods_ptrs[i] = NULL;
+  rc = ldap_modify_s (ld, (char *) XSTRING_DATA (dn), ldap_mods_ptrs);
+  if (rc != LDAP_SUCCESS)
+    signal_ldap_error (ld, NULL, rc);
+
+  UNGCPRO;
+}
+
+
+DEFUN ("ldap-delete", Fldap_delete, 2, 2, 0, /*
+Delete an entry to an LDAP directory.
+LDAP is an LDAP connection object created with `ldap-open'.
+DN is the distinguished name of the entry to delete.
+*/
+       (ldap, dn))
+{
+  LDAP *ld;
+  int rc;
+
+  /* Check parameters */
+  CHECK_LIVE_LDAP (ldap);
+  ld = XLDAP (ldap)->ld;
+  CHECK_STRING (dn);
+
+  rc = ldap_delete_s (ld, (char *) XSTRING_DATA (dn));
+  if (rc != LDAP_SUCCESS)
+    signal_ldap_error (ld, NULL, rc);
+}
 
 void
 syms_of_eldap (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (ldap);
+
   defsymbol (&Qldapp, "ldapp");
   defsymbol (&Qport, "port");
   defsymbol (&Qauth, "auth");
@@ -598,13 +806,18 @@ syms_of_eldap (void)
   defsymbol (&Qnever, "never");
   defsymbol (&Qalways, "always");
   defsymbol (&Qfind, "find");
+  defsymbol (&Qadd, "add");
+  defsymbol (&Qreplace, "replace");
 
   DEFSUBR (Fldapp);
   DEFSUBR (Fldap_host);
   DEFSUBR (Fldap_status);
   DEFSUBR (Fldap_open);
   DEFSUBR (Fldap_close);
-  DEFSUBR (Fldap_search_internal);
+  DEFSUBR (Fldap_search_basic);
+  DEFSUBR (Fldap_add);
+  DEFSUBR (Fldap_modify);
+  DEFSUBR (Fldap_delete);
 }
 
 void
index 5d869c3..0ca47b1 100644 (file)
@@ -62,12 +62,21 @@ Lisp_Object Fldap_status (Lisp_Object ldap);
 Lisp_Object Fldap_open (Lisp_Object host,
                         Lisp_Object ldap_plist);
 Lisp_Object Fldap_close (Lisp_Object ldap);
-Lisp_Object Fldap_search_internal (Lisp_Object ldap,
-                                   Lisp_Object filter,
-                                   Lisp_Object base,
-                                   Lisp_Object scope,
-                                   Lisp_Object attrs,
-                                   Lisp_Object attrsonly,
-                                   Lisp_Object withdn);
+Lisp_Object Fldap_search_basic (Lisp_Object ldap,
+                                Lisp_Object filter,
+                                Lisp_Object base,
+                                Lisp_Object scope,
+                                Lisp_Object attrs,
+                                Lisp_Object attrsonly,
+                                Lisp_Object withdn,
+                                Lisp_Object verbose);
+Lisp_Object Fldap_add (Lisp_Object ldap,
+                       Lisp_Object dn,
+                       Lisp_Object entry);
+Lisp_Object Fldap_modify (Lisp_Object ldap,
+                          Lisp_Object dn,
+                          Lisp_Object entry);
+Lisp_Object Fldap_delete (Lisp_Object ldap,
+                          Lisp_Object dn);
 
 #endif /* INCLUDED_eldap_h_ */
index 251e549..52ba848 100644 (file)
@@ -1425,6 +1425,8 @@ The value is returned as (HIGH . LOW).
 void
 syms_of_elhash (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (hash_table);
+
   DEFSUBR (Fhash_table_p);
   DEFSUBR (Fmake_hash_table);
   DEFSUBR (Fcopy_hash_table);
index 50a7d33..426cda1 100644 (file)
@@ -300,7 +300,7 @@ static const struct lrecord_description subr_description[] = {
 };
 
 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("subr", subr,
-                                    this_one_is_unmarkable, print_subr, 0, 0, 0,
+                                    0, print_subr, 0, 0, 0,
                                     subr_description,
                                     Lisp_Subr);
 \f
@@ -4960,6 +4960,8 @@ warn_when_safe (Lisp_Object class, Lisp_Object level, const char *fmt, ...)
 void
 syms_of_eval (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (subr);
+
   defsymbol (&Qinhibit_quit, "inhibit-quit");
   defsymbol (&Qautoload, "autoload");
   defsymbol (&Qdebug_on_error, "debug-on-error");
index 6d37617..e18c1e6 100644 (file)
@@ -118,9 +118,6 @@ int windows_fd;
 static Lisp_Object mswindows_u_dispatch_event_queue, mswindows_u_dispatch_event_queue_tail;
 static Lisp_Object mswindows_s_dispatch_event_queue, mswindows_s_dispatch_event_queue_tail;
 
-/* For speed: whether there is a WM_PAINT magic message in the system queue */
-static int mswindows_paint_pending = 0;
-
 /* The number of things we can wait on */
 #define MAX_WAITABLE (MAXIMUM_WAIT_OBJECTS - 1)
 
@@ -636,8 +633,8 @@ struct winsock_stream
   SOCKET s;                    /* Socket handle (which is a Win32 handle)   */
   OVERLAPPED ov;               /* Overlapped I/O structure                  */
   void* buffer;                        /* Buffer. Allocated for input stream only   */
-  unsigned int bufsize;                /* Number of bytes last read                 */
-  unsigned int bufpos;         /* Position in buffer for next fetch         */
+  unsigned long bufsize;       /* Number of bytes last read                 */
+  unsigned long bufpos;                /* Position in buffer for next fetch         */
   unsigned int error_p :1;     /* I/O Error seen                            */
   unsigned int eof_p :1;       /* EOF Error seen                            */
   unsigned int pending_p :1;   /* There is a pending I/O operation          */
@@ -1257,12 +1254,8 @@ mswindows_drain_windows_queue ()
             shouldn't have received a paint message for it here. */
          assert (msg.wParam == 0);
 
-         if (!mswindows_paint_pending)
-           {
-             /* Queue a magic event for handling when safe */
-             mswindows_enqueue_magic_event (msg.hwnd, WM_PAINT);
-             mswindows_paint_pending = 1;
-           }
+         /* Queue a magic event for handling when safe */
+         mswindows_enqueue_magic_event (msg.hwnd, WM_PAINT);
 
          /* Don't dispatch. WM_PAINT is always the last message in the
             queue so it's OK to just return. */
@@ -1523,7 +1516,7 @@ mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
          { mswindows_dde_service, mswindows_dde_topic_system }, { 0, 0 } };
 
        if (!(hszItem  || DdeCmpStringHandles (hszItem, mswindows_dde_service)) &&
-           !(hszTopic || DdeCmpStringHandles (hszTopic, mswindows_dde_topic_system)));
+           !(hszTopic || DdeCmpStringHandles (hszTopic, mswindows_dde_topic_system)))
          return (DdeCreateDataHandle (mswindows_dde_mlid, (LPBYTE)pairs,
                                       sizeof (pairs), 0L, 0, uFmt, 0));
       }
@@ -1533,7 +1526,7 @@ mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
       if (!DdeCmpStringHandles (hszTopic, mswindows_dde_topic_system))
        {
          DWORD len = DdeGetData (hdata, NULL, 0, 0);
-         char *cmd = alloca (len+1);
+         LPBYTE cmd = (LPBYTE) alloca (len+1);
          char *end;
          char *filename;
          struct gcpro gcpro1, gcpro2;
@@ -2367,7 +2360,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
       GCPRO3 (emacs_event, l_dndlist, l_item);
 
-      if (!DragQueryPoint ((HANDLE) wParam, &point))
+      if (!DragQueryPoint ((HDROP) wParam, &point))
        point.x = point.y = -1;         /* outside client area */
 
       event->event_type = misc_user_event;
@@ -2379,10 +2372,10 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       event->event.misc.y = point.y;
       event->event.misc.function = Qdragdrop_drop_dispatch;
 
-      filecount = DragQueryFile ((HANDLE) wParam, 0xffffffff, NULL, 0);
+      filecount = DragQueryFile ((HDROP) wParam, 0xffffffff, NULL, 0);
       for (i=0; i<filecount; i++)
        {
-         len = DragQueryFile ((HANDLE) wParam, i, NULL, 0);
+         len = DragQueryFile ((HDROP) wParam, i, NULL, 0);
          /* The URLs that we make here aren't correct according to section
           * 3.10 of rfc1738 because they're missing the //<host>/ part and
           * because they may contain reserved characters. But that's OK. */
@@ -2396,14 +2389,14 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 #else
          filename = (char *)xmalloc (len+6);
          strcpy (filename, "file:");
-         DragQueryFile ((HANDLE) wParam, i, filename+5, len+1);
+         DragQueryFile ((HDROP) wParam, i, filename+5, len+1);
          dostounix_filename (filename+5);
 #endif
          l_item = make_string (filename, strlen (filename));
          l_dndlist = Fcons (l_item, l_dndlist);
          xfree (filename);
        }
-      DragFinish ((HANDLE) wParam);
+      DragFinish ((HDROP) wParam);
 
       event->event.misc.object = Fcons (Qdragdrop_URL, l_dndlist);
       mswindows_enqueue_dispatch_event (emacs_event);
@@ -2725,7 +2718,6 @@ emacs_mswindows_handle_magic_event (Lisp_Event *emacs_event)
 
     case WM_PAINT:
       mswindows_handle_paint (XFRAME (EVENT_CHANNEL (emacs_event)));
-      mswindows_paint_pending = 0;
       break;
 
     case WM_SETFOCUS:
index 5dccba3..8871609 100644 (file)
@@ -4910,6 +4910,9 @@ If FILE is nil, close any open dribble file.
 void
 syms_of_event_stream (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (command_builder);
+  INIT_LRECORD_IMPLEMENTATION (timeout);
+
   defsymbol (&Qdisabled, "disabled");
   defsymbol (&Qcommand_event_p, "command-event-p");
 
index 8d8026d..60002d8 100644 (file)
@@ -2188,6 +2188,8 @@ This is in the form of a property list (alternating keyword/value pairs).
 void
 syms_of_events (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (event);
+
   DEFSUBR (Fcharacter_to_event);
   DEFSUBR (Fevent_to_character);
 
index 686ce82..14bebe2 100644 (file)
@@ -1537,8 +1537,7 @@ extent_endpoint_bytind (EXTENT extent, int endp)
   assert (EXTENT_LIVE_P (extent));
   assert (!extent_detached_p (extent));
   {
-    Memind i = (endp) ? (extent_end (extent)) :
-      (extent_start (extent));
+    Memind i = endp ? extent_end (extent) : extent_start (extent);
     Lisp_Object obj = extent_object (extent);
     return buffer_or_string_memind_to_bytind (obj, i);
   }
@@ -1550,8 +1549,7 @@ extent_endpoint_bufpos (EXTENT extent, int endp)
   assert (EXTENT_LIVE_P (extent));
   assert (!extent_detached_p (extent));
   {
-    Memind i = (endp) ? (extent_end (extent)) :
-      (extent_start (extent));
+    Memind i = endp ? extent_end (extent) : extent_start (extent);
     Lisp_Object obj = extent_object (extent);
     return buffer_or_string_memind_to_bufpos (obj, i);
   }
@@ -6661,6 +6659,10 @@ compute_buffer_extent_usage (struct buffer *b, struct overhead_stats *ovstats)
 void
 syms_of_extents (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (extent);
+  INIT_LRECORD_IMPLEMENTATION (extent_info);
+  INIT_LRECORD_IMPLEMENTATION (extent_auxiliary);
+
   defsymbol (&Qextentp, "extentp");
   defsymbol (&Qextent_live_p, "extent-live-p");
 
index 9d1beca..c300003 100644 (file)
@@ -446,8 +446,8 @@ Given a Unix syntax file name, returns a string ending in slash.
   if (p == beg + 2 && beg[1] == ':')
     {
       /* MAXPATHLEN+1 is guaranteed to be enough space for getdefdir.  */
-      Bufbyte *res = alloca (MAXPATHLEN + 1);
-      if (getdefdir (toupper (*beg) - 'A' + 1, res))
+      Bufbyte *res = (Bufbyte*) alloca (MAXPATHLEN + 1);
+      if (getdefdir (toupper (*beg) - 'A' + 1, (char *)res))
        {
          char *c=((char *) res) + strlen ((char *) res);
          if (!IS_DIRECTORY_SEP (*c))
@@ -845,12 +845,12 @@ See also the function `substitute-in-file-name'.
 #ifdef WINDOWSNT
   /* We will force directory separators to be either all \ or /, so make
      a local copy to modify, even if there ends up being no change. */
-  nm = strcpy (alloca (strlen (nm) + 1), nm);
+  nm = strcpy ((char *)alloca (strlen ((char *)nm) + 1), (char *)nm);
 
   /* Find and remove drive specifier if present; this makes nm absolute
      even if the rest of the name appears to be relative. */
   {
-    Bufbyte *colon = strrchr (nm, ':');
+    Bufbyte *colon = (Bufbyte *) strrchr ((char *)nm, ':');
 
     if (colon)
       /* Only recognize colon as part of drive specifier if there is a
@@ -1256,10 +1256,6 @@ See also the function `substitute-in-file-name'.
   return make_string (target, o - target);
 }
 
-#if 0 /* FSFmacs */
-/* another older version of expand-file-name; */
-#endif
-
 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
@@ -1270,24 +1266,27 @@ No component of the resulting pathname will be a symbolic link, as
 */
        (filename, default_))
 {
-  /* This function can GC.  GC checked 1997.04.06. */
+  /* This function can GC. */
   Lisp_Object expanded_name;
-  Lisp_Object handler;
   struct gcpro gcpro1;
 
   CHECK_STRING (filename);
 
   expanded_name = Fexpand_file_name (filename, default_);
 
+  GCPRO1 (expanded_name);
+
   if (!STRINGP (expanded_name))
     return Qnil;
 
-  GCPRO1 (expanded_name);
-  handler = Ffind_file_name_handler (expanded_name, Qfile_truename);
-  UNGCPRO;
+  {
+    Lisp_Object handler =
+      Ffind_file_name_handler (expanded_name, Qfile_truename);
 
-  if (!NILP (handler))
-    return call2_check_string (handler, Qfile_truename, expanded_name);
+    if (!NILP (handler))
+      RETURN_UNGCPRO
+       (call2_check_string (handler, Qfile_truename, expanded_name));
+  }
 
   {
     char resolved_path[MAXPATHLEN];
@@ -1301,7 +1300,7 @@ No component of the resulting pathname will be a symbolic link, as
     p = path;
     if (elen > MAXPATHLEN)
       goto toolong;
-    
+
     /* Try doing it all at once. */
     /* !! Does realpath() Mule-encapsulate?
        Answer: Nope! So we do it above */
@@ -1312,14 +1311,25 @@ No component of the resulting pathname will be a symbolic link, as
           It claims to return a useful value in the "error" case, but since
           there is no indication provided of how far along the pathname
           the function went before erring, there is no way to use the
-          partial result returned.  What a piece of junk. */
+          partial result returned.  What a piece of junk.
+
+          The above comment refers to historical versions of
+          realpath().  The Unix98 specs state:
+
+          "On successful completion, realpath() returns a
+          pointer to the resolved name. Otherwise, realpath()
+          returns a null pointer and sets errno to indicate the
+          error, and the contents of the buffer pointed to by
+          resolved_name are undefined."
+
+          Since we depend on undocumented semantics of various system realpath()s,
+          we just use our own version in realpath.c. */
        for (;;)
          {
            p = (Extbyte *) memchr (p + 1, '/', elen - (p + 1 - path));
            if (p)
              *p = 0;
 
-           /* memset (resolved_path, 0, sizeof (resolved_path)); */
            if (xrealpath ((char *) path, resolved_path))
              {
                if (p)
@@ -1337,7 +1347,8 @@ No component of the resulting pathname will be a symbolic link, as
                /* "On failure, it returns NULL, sets errno to indicate
                   the error, and places in resolved_path the absolute pathname
                   of the path component which could not be resolved." */
-               if (p)
+
+               if (p)
                  {
                    int plen = elen - (p - path);
 
@@ -1358,17 +1369,20 @@ No component of the resulting pathname will be a symbolic link, as
       }
 
     {
+      Lisp_Object resolved_name;
       int rlen = strlen (resolved_path);
       if (elen > 0 && XSTRING_BYTE (expanded_name, elen - 1) == '/'
           && !(rlen > 0 && resolved_path[rlen - 1] == '/'))
        {
          if (rlen + 1 > countof (resolved_path))
            goto toolong;
-         resolved_path[rlen] = '/';
-         resolved_path[rlen + 1] = 0;
-         rlen = rlen + 1;
+         resolved_path[rlen++] = '/';
+         resolved_path[rlen] = '\0';
        }
-      return make_ext_string ((Bufbyte *) resolved_path, rlen, Qbinary);
+      TO_INTERNAL_FORMAT (DATA, (resolved_path, rlen),
+                         LISP_STRING, resolved_name,
+                         Qfile_name);
+      RETURN_UNGCPRO (resolved_name);
     }
 
   toolong:
@@ -1377,7 +1391,7 @@ No component of the resulting pathname will be a symbolic link, as
   lose:
     report_file_error ("Finding truename", list1 (expanded_name));
   }
-  return Qnil; /* suppress compiler warning */
+  RETURN_UNGCPRO (Qnil);
 }
 
 \f
@@ -1874,8 +1888,8 @@ Delete a directory.  One argument, a file name or directory name string.
 }
 
 DEFUN ("delete-file", Fdelete_file, 1, 1, "fDelete file: ", /*
-Delete specified file.  One argument, a file name string.
-If file has multiple names, it continues to exist with the other names.
+Delete the file named FILENAME (a string).
+If FILENAME has multiple names, it continues to exist with the other names.
 */
        (filename))
 {
@@ -3221,8 +3235,8 @@ to the value of CODESYS.  If this is nil, no code conversion occurs.
   if (desc < 0)
     {
       desc = open ((char *) XSTRING_DATA (fn),
-                   (O_WRONLY | O_TRUNC | O_CREAT | OPEN_BINARY),
-                  ((auto_saving) ? auto_save_mode_bits : CREAT_MODE));
+                   O_WRONLY | O_TRUNC | O_CREAT | OPEN_BINARY,
+                  auto_saving ? auto_save_mode_bits : CREAT_MODE);
     }
 
   if (desc < 0)
index a6711fc..337c581 100644 (file)
@@ -988,6 +988,7 @@ init_floatfns_very_early (void)
 void
 syms_of_floatfns (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (float);
 
   /* Trig functions.  */
 
index 8111a47..25c037f 100644 (file)
@@ -298,7 +298,7 @@ init_image_instance_from_dibitmap (Lisp_Image_Instance *ii,
   struct device *d = XDEVICE (device);
   struct frame *f;
   void* bmp_buf=0;
-  int type = 0;
+  enum image_instance_type type;
   HBITMAP bitmap;
   HDC hdc;
 
@@ -458,13 +458,12 @@ mswindows_initialize_image_instance_mask (Lisp_Image_Instance* image,
   HBITMAP mask;
   HGDIOBJ old = NULL;
   HDC hcdc = FRAME_MSWINDOWS_CDC (f);
-  unsigned char* dibits;
-  BITMAPINFO* bmp_info =
-    xmalloc_and_zero (sizeof(BITMAPINFO) + sizeof(RGBQUAD));
+  unsigned char *dibits, *and_bits;
+  BITMAPINFO *bmp_info =
+    (BITMAPINFO*) xmalloc_and_zero (sizeof(BITMAPINFO) + sizeof(RGBQUAD));
   int i, j;
   int height = IMAGE_INSTANCE_PIXMAP_HEIGHT (image);
 
-  void* and_bits;
   int maskbpline = BPLINE ((IMAGE_INSTANCE_PIXMAP_WIDTH (image)+7)/8);
   int bpline = BPLINE (IMAGE_INSTANCE_PIXMAP_WIDTH (image) * 3);
 
@@ -492,7 +491,7 @@ mswindows_initialize_image_instance_mask (Lisp_Image_Instance* image,
   if (!(mask = CreateDIBSection (hcdc,
                                 bmp_info,
                                 DIB_RGB_COLORS,
-                                &and_bits,
+                                (void**)&and_bits,
                                 0,0)))
     {
       xfree (bmp_info);
@@ -513,7 +512,7 @@ mswindows_initialize_image_instance_mask (Lisp_Image_Instance* image,
   bmp_info->bmiHeader.biClrImportant = 0;
   bmp_info->bmiHeader.biSizeImage = height * bpline;
 
-  dibits = xmalloc_and_zero (bpline * height);
+  dibits = (unsigned char*) xmalloc_and_zero (bpline * height);
   if (GetDIBits (hcdc,
                 IMAGE_INSTANCE_MSWINDOWS_BITMAP (image),
                 0,
@@ -528,20 +527,20 @@ mswindows_initialize_image_instance_mask (Lisp_Image_Instance* image,
 
   /* now set the colored bits in the mask and transparent ones to
      black in the original */
-  for(i=0; i<IMAGE_INSTANCE_PIXMAP_WIDTH (image); i++)
+  for (i=0; i<IMAGE_INSTANCE_PIXMAP_WIDTH (image); i++)
     {
-      for(j=0; j<height; j++)
+      for (j=0; j<height; j++)
        {
          unsigned char* idx = &dibits[j * bpline + i * 3];
 
-         if( RGB (idx[2], idx[1], idx[0]) == transparent_color )
+         if (RGB (idx[2], idx[1], idx[0]) == transparent_color)
            {
              idx[0] = idx[1] = idx[2] = 0;
-             set_mono_pixel( and_bits, maskbpline, height, i, j, TRUE );
+             set_mono_pixel (and_bits, maskbpline, height, i, j, TRUE);
            }
          else
            {
-             set_mono_pixel( and_bits, maskbpline, height, i, j, FALSE );
+             set_mono_pixel (and_bits, maskbpline, height, i, j, FALSE);
             }
        }
     }
@@ -1222,7 +1221,7 @@ mswindows_resource_instantiate (Lisp_Object image_instance, Lisp_Object instanti
   LPCTSTR resid=0;
   HINSTANCE hinst = NULL;
   ICONINFO iconinfo;
-  int iitype=0;
+  enum image_instance_type iitype;
   char* fname=0;
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
 
@@ -1304,17 +1303,17 @@ mswindows_resource_instantiate (Lisp_Object image_instance, Lisp_Object instanti
      bitmap and mask */
   if (type != IMAGE_BITMAP)
     {
-      GetIconInfo (himage, &iconinfo);
+      GetIconInfo ((HICON)himage, &iconinfo);
       IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = iconinfo.hbmColor;
       IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = iconinfo.hbmMask;
       XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), iconinfo.xHotspot);
       XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), iconinfo.yHotspot);
-      IMAGE_INSTANCE_MSWINDOWS_ICON (ii) = himage;
+      IMAGE_INSTANCE_MSWINDOWS_ICON (ii) = (HICON) himage;
     }
   else
     {
       IMAGE_INSTANCE_MSWINDOWS_ICON (ii) = NULL;
-      IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = himage;
+      IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = (HBITMAP) himage;
       IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = NULL;
       XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), 0);
       XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), 0);
@@ -1476,11 +1475,9 @@ static int NextInt ( FILE *fstream )
  * its arguments won't have been touched.  This routine should look as much
  * like the Xlib routine XReadBitmapfile as possible.
  */
-int read_bitmap_data (fstream, width, height, datap, x_hot, y_hot)
-    FILE *fstream;                     /* handle on file  */
-    unsigned int *width, *height;      /* RETURNED */
-    unsigned char **datap;             /* RETURNED */
-    int *x_hot, *y_hot;                        /* RETURNED */
+int read_bitmap_data (FILE* fstream, unsigned int *width,
+                     unsigned int *height, unsigned char **datap,
+                     int *x_hot, int *y_hot)
 {
     unsigned char *data = NULL;                /* working variable */
     char line[MAX_SIZE];               /* input line from file */
@@ -1640,8 +1637,8 @@ xbm_create_bitmap_from_data (HDC hdc, char *data,
   void *bmp_buf = 0;
   unsigned char *new_data, *new_offset;
   int i, j;
-  BITMAPINFO* bmp_info =
-    xmalloc_and_zero (sizeof(BITMAPINFO) + sizeof(RGBQUAD));
+  BITMAPINFO *bmp_info =
+    (BITMAPINFO*) xmalloc_and_zero (sizeof(BITMAPINFO) + sizeof(RGBQUAD));
   HBITMAP bitmap;
 
   if (!bmp_info)
@@ -2509,7 +2506,9 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
 static void
 mswindows_button_update (Lisp_Object image_instance)
 {
+  /* This function can GC if IN_REDISPLAY is false. */
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+
   /* buttons checked or otherwise */
   if (gui_item_selected_p (IMAGE_INSTANCE_WIDGET_ITEM (ii)))
     SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
@@ -2723,7 +2722,7 @@ mswindows_tab_control_update (Lisp_Object image_instance)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
 
-  if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii));
+  if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii))
     {
       HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
       int i = 0;
@@ -2771,7 +2770,7 @@ mswindows_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instant
                             int dest_mask, Lisp_Object domain)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  HANDLE wnd;
+  HWND wnd;
   Lisp_Object rest;
   Lisp_Object data = Fplist_get (find_keyword_in_vector (instantiator, Q_properties),
                                 Q_items, Qnil);
@@ -2825,12 +2824,12 @@ static Lisp_Object
 mswindows_widget_property (Lisp_Object image_instance, Lisp_Object prop)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  HANDLE wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
+  HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* get the text from a control */
   if (EQ (prop, Q_text))
     {
       Extcount len = SendMessage (wnd, WM_GETTEXTLENGTH, 0, 0);
-      Extbyte* buf =alloca (len+1);
+      Extbyte *buf = (Extbyte*) alloca (len+1);
 
       SendMessage (wnd, WM_GETTEXT, (WPARAM)len+1, (LPARAM) buf);
       return build_ext_string (buf, Qnative);
@@ -2843,7 +2842,7 @@ static Lisp_Object
 mswindows_button_property (Lisp_Object image_instance, Lisp_Object prop)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  HANDLE wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
+  HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* check the state of a button */
   if (EQ (prop, Q_selected))
     {
@@ -2860,13 +2859,13 @@ static Lisp_Object
 mswindows_combo_box_property (Lisp_Object image_instance, Lisp_Object prop)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  HANDLE wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
+  HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* get the text from a control */
   if (EQ (prop, Q_text))
     {
       long item = SendMessage (wnd, CB_GETCURSEL, 0, 0);
       Extcount len = SendMessage (wnd, CB_GETLBTEXTLEN, (WPARAM)item, 0);
-      Extbyte* buf = alloca (len+1);
+      Extbyte* buf = (Extbyte*) alloca (len+1);
       SendMessage (wnd, CB_GETLBTEXT, (WPARAM)item, (LPARAM)buf);
       return build_ext_string (buf, Qnative);
     }
index f9a10f0..dbfd85e 100644 (file)
@@ -48,7 +48,7 @@ struct mswindows_image_instance_data
 #define IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES(i) \
      (MSWINDOWS_IMAGE_INSTANCE_DATA (i)->bitmaps)
 #define IMAGE_INSTANCE_MSWINDOWS_MASK(i) \
-     (HBITMAP)(IMAGE_INSTANCE_PIXMAP_MASK (i))
+     (*(HBITMAP*)&(IMAGE_INSTANCE_PIXMAP_MASK (i)))            /* Make it lvalue */
 #define IMAGE_INSTANCE_MSWINDOWS_ICON(i) \
      (MSWINDOWS_IMAGE_INSTANCE_DATA (i)->icon)
 
index 41d1498..ab50d29 100644 (file)
@@ -335,7 +335,7 @@ update_widget (Lisp_Object widget)
   Lisp_Image_Instance* ii = XIMAGE_INSTANCE (widget);
   struct image_instantiator_methods* meths;
 
-  if (!IMAGE_INSTANCE_TYPE (ii) == IMAGE_WIDGET)
+  if (IMAGE_INSTANCE_TYPE (ii) != IMAGE_WIDGET)
     return;
 
   /* Device generic methods. We must update the widget's size as it
@@ -715,7 +715,7 @@ tab_control_query_geometry (Lisp_Object image_instance,
                            enum image_instance_geometry disp, Lisp_Object domain)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  Lisp_Object items = IMAGE_INSTANCE_WIDGET_ITEMS (ii);
+  Lisp_Object items = XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
   Lisp_Object rest;
   unsigned int tw = 0, th = 0;
 
@@ -726,7 +726,7 @@ tab_control_query_geometry (Lisp_Object image_instance,
       query_string_geometry (XGUI_ITEM (XCAR (rest))->name,
                             IMAGE_INSTANCE_WIDGET_FACE (ii),
                             &w, &h, 0, domain);
-      tw += 2 * WIDGET_BORDER_WIDTH; /* some bias */
+      tw += 5 * WIDGET_BORDER_WIDTH; /* some bias */
       tw += w;
       th = max (th, h + 2 * WIDGET_BORDER_HEIGHT);
     }
index d0f76da..e56a5c4 100644 (file)
@@ -2180,41 +2180,33 @@ x_update_subwindow (Lisp_Image_Instance *p)
 static void
 x_update_widget (Lisp_Image_Instance *p)
 {
+  /* This function can GC if IN_REDISPLAY is false. */
 #ifdef HAVE_WIDGETS
   widget_value* wv = 0;
-  Boolean deep_p = False;
-  /* Possibly update the size. */
-  if (IMAGE_INSTANCE_SIZE_CHANGED (p))
-    {
-      Arg al[2];
-
-      assert (IMAGE_INSTANCE_X_WIDGET_ID (p) &&
-             IMAGE_INSTANCE_X_CLIPWIDGET (p)) ;
-
-      if ( !XtIsManaged(IMAGE_INSTANCE_X_WIDGET_ID (p))
-          ||
-          IMAGE_INSTANCE_X_WIDGET_ID (p)->core.being_destroyed )
-       {
-         Lisp_Object sw;
-         XSETIMAGE_INSTANCE (sw, p);
-         signal_simple_error ("XEmacs bug: subwindow is deleted", sw);
-       }
 
-      XtSetArg (al [0], XtNwidth, (Dimension)IMAGE_INSTANCE_WIDTH (p));
-      XtSetArg (al [1], XtNheight, (Dimension)IMAGE_INSTANCE_HEIGHT (p));
-      XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (p), al, 2);
-    }
-
-  /* First get the items if they have changed since this is a structural change. */
+  /* First get the items if they have changed since this is a
+     structural change. As such it will nuke all added values so we
+     need to update most other things after the items have changed.*/
   if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
     {
       wv = gui_items_to_widget_values
        (IMAGE_INSTANCE_WIDGET_ITEMS (p));
-      deep_p = True;
+      wv->change = STRUCTURAL_CHANGE;
+      /* now modify the widget */
+      lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p),
+                            wv, True);
+      free_widget_value_tree (wv);
     }
 
+  /* Now do non structural updates. */
+  wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (p));
+
   /* Possibly update the colors and font */
-  if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p))
+  if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p) 
+      ||
+      XFRAME (IMAGE_INSTANCE_SUBWINDOW_FRAME (p))->faces_changed
+      ||
+      IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
     {
       update_widget_face (wv, p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p));
     }
@@ -2230,10 +2222,31 @@ x_update_widget (Lisp_Image_Instance *p)
       wv->value = str;
     }
 
+  /* Possibly update the size. */
+  if (IMAGE_INSTANCE_SIZE_CHANGED (p)
+      ||
+      IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
+    {
+      assert (IMAGE_INSTANCE_X_WIDGET_ID (p) &&
+             IMAGE_INSTANCE_X_CLIPWIDGET (p)) ;
+
+      if (IMAGE_INSTANCE_X_WIDGET_ID (p)->core.being_destroyed
+         || !XtIsManaged(IMAGE_INSTANCE_X_WIDGET_ID (p)))
+       {
+         Lisp_Object sw;
+         XSETIMAGE_INSTANCE (sw, p);
+         signal_simple_error ("XEmacs bug: subwindow is deleted", sw);
+       }
+
+      lw_add_widget_value_arg (wv, XtNwidth,
+                              (Dimension)IMAGE_INSTANCE_WIDTH (p));
+      lw_add_widget_value_arg (wv, XtNheight,
+                              (Dimension)IMAGE_INSTANCE_HEIGHT (p));
+    }
+
   /* now modify the widget */
   lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p),
-                        wv, deep_p);
-  free_widget_value_tree (wv);
+                        wv, False);
 #endif
 }
 
@@ -2432,9 +2445,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 
   lw_add_widget_value_arg (clip_wv, XtNresize, False);
   lw_add_widget_value_arg (clip_wv, XtNwidth,
-                          (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii));
+                          (Dimension)IMAGE_INSTANCE_WIDTH (ii));
   lw_add_widget_value_arg (clip_wv, XtNheight,
-                          (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii));
+                          (Dimension)IMAGE_INSTANCE_HEIGHT (ii));
   clip_wv->enabled = True;
 
   clip_wv->name = xstrdup ("clip-window");
@@ -2470,9 +2483,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   /* we cannot allow widgets to resize themselves */
   lw_add_widget_value_arg (wv, XtNresize, False);
   lw_add_widget_value_arg (wv, XtNwidth,
-                          (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii));
+                          (Dimension)IMAGE_INSTANCE_WIDTH (ii));
   lw_add_widget_value_arg (wv, XtNheight,
-                          (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii));
+                          (Dimension)IMAGE_INSTANCE_HEIGHT (ii));
   /* update the font. */
   update_widget_face (wv, ii, domain);
 
@@ -2671,14 +2684,17 @@ x_tab_control_update (Lisp_Object image_instance)
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
 
   /* Possibly update the face. */
-  if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (ii))
+  if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (ii) 
+      ||
+      XFRAME (IMAGE_INSTANCE_SUBWINDOW_FRAME (ii))->faces_changed
+      ||
+      IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii))
     {
       widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
       update_tab_widget_face (wv, ii,
                              IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
 
       lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True);
-      free_widget_value_tree (wv);
     }
 }
 
index 029d616..07b4a79 100644 (file)
@@ -92,9 +92,6 @@ otherwise it is an integer representing a ShowWindow flag:
 
   CHECK_STRING (document);
 
-  /* Just get the filename if we were given it. */
-  document = Ffile_name_nondirectory (document);
-
   if (NILP (current_dir))
     current_dir = current_buffer->directory;
 
@@ -118,7 +115,11 @@ otherwise it is an integer representing a ShowWindow flag:
       TO_EXTERNAL_FORMAT (LISP_STRING, document,
                          C_STRING_ALLOCA, f,
                          Qfile_name);
+#ifdef __CYGWIN32__
+      CYGWIN_WIN32_PATH (f, doc);
+#else
       doc = f;
+#endif
     }
 
   UNGCPRO;
index 58fb4f3..467c3ab 100644 (file)
@@ -619,6 +619,8 @@ sanity_check_lwlib (void)
 void
 syms_of_gui_x (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (popup_data);
+
   defsymbol (&Qmenu_no_selection_hook, "menu-no-selection-hook");
 }
 
index d00df80..00012a6 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -625,6 +625,8 @@ DEFINE_LRECORD_IMPLEMENTATION ("gui-item", gui_item,
 void
 syms_of_gui (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (gui_item);
+
   defkeyword (&Q_active,   ":active");
   defkeyword (&Q_suffix,   ":suffix");
   defkeyword (&Q_keys,     ":keys");
index 49a9fec..046c5e8 100644 (file)
@@ -1069,7 +1069,7 @@ get_keyelt (Lisp_Object object, int accept_default)
          if (!INTP (XCDR (idx)))
            return Qnil;
          indirection.keysym = XCAR (idx);
-         indirection.modifiers = XINT (XCDR (idx));
+         indirection.modifiers = (unsigned char) XINT (XCDR (idx));
        }
       else if (SYMBOLP (idx))
        {
@@ -4204,6 +4204,8 @@ describe_map (Lisp_Object keymap, Lisp_Object elt_prefix,
 void
 syms_of_keymap (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (keymap);
+
   defsymbol (&Qminor_mode_map_alist, "minor-mode-map-alist");
 
   defsymbol (&Qkeymapp, "keymapp");
index ed9849c..801a0c1 100644 (file)
@@ -1705,5 +1705,7 @@ reinit_vars_of_lstream (void)
 void
 vars_of_lstream (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (lstream);
+
   reinit_vars_of_lstream ();
 }
index cd77e07..911016d 100644 (file)
@@ -25,10 +25,6 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="usg5-2-2"  */
 
-/* XINT must explicitly sign-extend */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    vax, m68000, ns16000 are the ones defined so far.  */
index efd8664..52dd45d 100644 (file)
@@ -20,19 +20,6 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: FSF 19.31. */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-#undef WORD_MACHINE
-
-/* Define how to take a char and sign-extend into an int.
-   On machines where char is signed, this is a no-op.  */
-
-/* ARM note - The RISCiX Norcroft C Compiler has ALL
-   non-32-bit types as unsigned */
-
-#define SIGN_EXTEND_CHAR(c) (((int)(c) << 24) >> 24)
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    Ones defined so far include vax, m68000, ns16000, pyramid,
@@ -40,14 +27,6 @@ Boston, MA 02111-1307, USA.  */
 
 /* ARM note - this is done by the Norcroft compiler - symbol is `__arm' */
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 #ifdef LDAV_SYMBOL
 #undef LDAV_SYMBOL
 #endif
index f366ea5..f19db5d 100644 (file)
@@ -24,11 +24,6 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="bsd4-3"  */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-#undef WORD_MACHINE
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    vax, m68000, ns16000, pyramid, orion, tahoe and APOLLO
@@ -39,15 +34,6 @@ Boston, MA 02111-1307, USA.  */
 #define sun                    /* Use X support for Sun keyboard stuff. */
 #define C_OPTIMIZE_SWITCH "-Og"        /* No concurrent code allowed here. */
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-/* On Alliants, bitfields are unsigned. */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Concentrix uses a different kernel symbol for load average. */
 
 #undef  LDAV_SYMBOL            /* Undo definition in s-bsd4-2.h */
index f0d2a2f..06921ef 100644 (file)
@@ -27,11 +27,6 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="bsd4-2"  */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-#undef WORD_MACHINE
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    vax, m68000, ns16000, pyramid, orion, tahoe and APOLLO
@@ -39,15 +34,6 @@ Boston, MA 02111-1307, USA.  */
 
 #define ALLIANT
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-/* On Alliants, bitfields are unsigned. */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* No load average information available for Alliants. */
 
 #undef LOAD_AVE_TYPE
index 40759cf..b4cb895 100644 (file)
@@ -24,8 +24,6 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="usg5-2"  */
 
-#define EXPLICIT_SIGN_EXTEND
-
 #define LIB_STANDARD "-lc"
 
 #ifdef __GNUC__
index 8abe5b9..4810c1e 100644 (file)
@@ -32,11 +32,6 @@ This file works with the Amdahl uts native C compiler. The 5.2u370
 compiler is so brain damaged that it is not even worth trying to use it.
 */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-#define WORD_MACHINE /* not actually used anywhere yet! */
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    vax, m68000, ns16000, pyramid, orion, tahoe and APOLLO
@@ -46,14 +41,6 @@ compiler is so brain damaged that it is not even worth trying to use it.
 /* However for clarity define amdahl_uts */
 #define amdahl_uts
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Data type of load average, as read out of kmem.  */
 
 /* #define LOAD_AVE_TYPE long*/
index 2bf2940..fe9b01b 100644 (file)
@@ -20,11 +20,6 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: FSF 19.31. */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-#undef WORD_MACHINE
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    Ones defined so far include vax, m68000, ns16000, pyramid,
@@ -93,10 +88,6 @@ Boston, MA 02111-1307, USA.  */
 #endif /* USG */
 
 
-#ifdef USG5_4
-#define DATA_SEG_BITS 0x08000000
-#endif
-
 #ifdef MSDOS
 #define NO_REMAP
 #endif
@@ -116,17 +107,6 @@ Boston, MA 02111-1307, USA.  */
 #define SEGMENT_MASK ((SEGMENT_SIZE)-1)
 #endif
 
-#if 0
-#ifdef __GNUC__
-/* GCC's alloca() is semi-broken.  See lisp.h.
-
-   This brokenness has been confirmed under both Linux and NetBSD.
-   It may also exist on non-Intel architectures. */
-#define BROKEN_ALLOCA_IN_FUNCTION_CALLS
-#endif
-#endif
-
-
 /* XEmacs change: John Hughes <john@AtlanTech.COM> says using vfork
    under i386-unknown-sysv4.2 makes C-g sometimes cause a SIGSEGV
    in TTY mode; the problem goes away if you use fork */
index 67c3056..896a6cc 100644 (file)
@@ -26,23 +26,10 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="usg5-2-2"  */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-/* #define WORD_MACHINE */
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically */
 #define ATT3B
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Data type of load average, as read out of kmem.  */
 /* #define LOAD_AVE_TYPE long */
 
index 3bb033b..b3cc63a 100644 (file)
@@ -20,18 +20,6 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: FSF 19.31. */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-#define WORD_MACHINE
-
-/* Define DATA_SEG_BITS if pointers need to be corrected with
-   a segment field.  */
-
-#ifdef FIX_ADDRESS
-#define DATA_SEG_BITS 0xef000000
-#endif
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    Ones defined so far include vax, m68000, ns16000, pyramid,
@@ -41,14 +29,6 @@ Boston, MA 02111-1307, USA.  */
 /*#define m88k*/
 /*#endif*/
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Data type of load average, as read out of kmem.  */
 
 /* #define LOAD_AVE_TYPE long */
index 2b6ea5e..e4dfb82 100644 (file)
@@ -24,10 +24,6 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="bsd4-2"  */
 
-/* XINT must explicitly sign extend */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* celerity preprocessor defines "accel", however the following is clearer */
 #define celerity
 
index 975945f..f18bc99 100644 (file)
@@ -20,11 +20,6 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: FSF 19.31. */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-/* #define WORD_MACHINE */
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically */
 
@@ -34,14 +29,6 @@ Boston, MA 02111-1307, USA.  */
 
 #define DOT_GLOBAL_START
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-/* #define EXPLICIT_SIGN_EXTEND */
-
 /* USG systems I know of running on Vaxes do not actually
    support the load average, so disable it for them.  */
 
index 5a9e42c..2427a4f 100644 (file)
@@ -20,24 +20,11 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: FSF 19.31. */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-/* #define WORD_MACHINE */
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically.  */
 
 #define m68000
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Data type of load average, as read out of kmem.
    These are commented out since it is not supported by this machine.  */
 
index dda929b..a618993 100644 (file)
@@ -24,11 +24,6 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="bsd4-3"  */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-/* #define WORD_MACHINE */
-  
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically.  */
 #ifndef convex  /* The compiler doesn't always do this.  */
@@ -91,9 +86,6 @@ Boston, MA 02111-1307, USA.  */
 
 /* #define NO_REMAP */
 \f
-/* Addresses on the Convex have the high bit set.  */
-#define DATA_SEG_BITS (1 << (INTBITS-1))
-
 /* Right shift is logical shift.
    And the usual way of handling such machines, which involves
    copying the number into sign_extend_temp, does not work
index 5d3623e..887770b 100644 (file)
@@ -24,24 +24,11 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="usg5-3"  */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-#undef WORD_MACHINE
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    Ones defined so far include vax, m68000, ns16000, pyramid,
    orion, tahoe, APOLLO and many others */
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Data type of load average, as read out of kmem.  */
 
 #define LOAD_AVE_TYPE long
@@ -75,11 +62,6 @@ Boston, MA 02111-1307, USA.  */
 #define C_ALLOCA
 #undef HAVE_ALLOCA
 
-/* The data segment in this machine always starts at address 0x10000000.
-   An address of data cannot be stored correctly in a Lisp object;
-   we always lose the high bits.  We must tell XPNTR to add them back.  */
-
-#define DATA_SEG_BITS 0x20000000
 #define DATA_START    0x20000000
 
 /* Define NO_REMAP if memory segmentation makes it not work well
index eb58f9c..27078f5 100644 (file)
@@ -26,11 +26,6 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="usg5-3"  */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-/* #define WORD_MACHINE */
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    Ones defined so far include vax, m68000, ns16000, pyramid,
@@ -39,14 +34,6 @@ Boston, MA 02111-1307, USA.  */
 #define m68000
 #define MOTOROLA_DELTA
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Data type of load average, as read out of kmem.  */
 
 /* #define LOAD_AVE_TYPE long */
index bd559b5..7177af1 100644 (file)
@@ -24,11 +24,6 @@ Boston, MA 02111-1307, USA.  */
    operating system this machine is likely to run.
    USUAL-OPSYS="usg5-3"  */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-/* #define WORD_MACHINE */
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    Ones defined so far include vax, m68000, ns16000, pyramid,
@@ -42,14 +37,6 @@ Boston, MA 02111-1307, USA.  */
    does not define it automatically.  */
 
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-/* #define EXPLICIT_SIGN_EXTEND */
-
 /* Data type of load average, as read out of kmem.  */
 /* No load average on Motorola machines. */
 /* #define LOAD_AVE_TYPE double */
index 899819b..c19f6ee 100644 (file)
@@ -33,11 +33,6 @@ Boston, MA 02111-1307, USA.  */
 /* #define ncl_el      /* DPX/2 210,220 etc */
 /* #define ncl_mr 1    /* DPX/2 320,340 (and 360,380 ?) */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-/* #define WORD_MACHINE /**/
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    Ones defined so far include vax, m68000, ns16000, pyramid,
@@ -45,14 +40,6 @@ Boston, MA 02111-1307, USA.  */
 
 /* /bin/cc on ncl_el and ncl_mr define m68k and mc68000 */
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Data type of load average, as read out of kmem.  */
 
 #define LOAD_AVE_TYPE long
index 88a26f8..60b0add 100644 (file)
@@ -36,10 +36,6 @@ Dual running Uniplus (-machine=dual -opsystem=unipl5-2)
 NOTE-END */
 
 
-/* XINT must explicitly sign-extend */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    vax, m68000, ns16000 are the ones defined so far.  */
index 9b18a41..e62c338 100644 (file)
@@ -28,11 +28,6 @@ Boston, MA 02111-1307, USA.  */
 /* This file was modified by Matt Crawford <matt@tank.uchicago.edu>
    to work under Elxsi's 12.0 release of BSD unix. */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-/*#define WORD_MACHINE */
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    vax, m68000, ns16000, pyramid, orion, tahoe and APOLLO
@@ -42,15 +37,6 @@ Boston, MA 02111-1307, USA.  */
 #define elxsi
 #endif
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
-
 /* Name of kernel load average variable */
 
 #undef LDAV_SYMBOL
index 35c6d97..a649ec4 100644 (file)
@@ -20,16 +20,6 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: Mule 2.0.  Not in FSF. */
 
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts.  */
-
-#undef WORD_MACHINE
-
-/* Define how to take a char and sign-extend into an int.
-   On machines where char is signed, this is a no-op.  */
-
-#define SIGN_EXTEND_CHAR(c) ((signed char)(c))
-
 /* Now define a symbol for the cpu type, if your compiler
    does not define it automatically:
    Ones defined so far include vax, m68000, ns16000, pyramid,
@@ -38,14 +28,6 @@ Boston, MA 02111-1307, USA.  */
 #      define mips
 #endif
 
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
-   the bit field into an int.  In other words, if bit fields
-   are always unsigned.
-
-   If you use NO_UNION_TYPE, this flag does not matter.  */
-
-#define EXPLICIT_SIGN_EXTEND
-
 /* Data type of load average, as read out of kmem.  */
 
 #define LOAD_AVE_TYPE long
index 763f16e..155aa61 100644 (file)
 #define C_DEBUG_SWITCH "-g"
 #define LIBS_DEBUG "-lg"
 
-
-/* The data segment in this machine always starts at address 0x1000000 = 16M.
-   An address of data cannot be stored correctly in a Lisp object;
-   we always lose the high bits.  We must tell XPNTR to add them back.  */
-
-#define DATA_SEG_BITS 0x1000000
 #define DATA_START    0x1000000
 
 /* The text segment always starts at 0.
index