#!/bin/sh
#### Patch script - GNU Emacs - version 19.21 to 19.22

#### This file contains patches to turn version 19.21 of GNU Emacs into
#### 19.22.  To apply them, cd to the top of the Emacs source tree, and
#### then type 'sh <this file>'.

#### After you apply the patches, you should run Emacs (an earlier 19 will do)
#### and type M-x byte-recompile-directory RET lisp RET
#### to recompile the changed Emacs Lisp files.
#### Then you can build the new Emacs version.

#### Also compile the new file lisp/icomplete.el.
#### Use M-x byte-compile-file RET <filename> RET to compile
#### file <filename>.  You need to do it once for each of these new files.

#### We don't include patches for Info files since you can
#### regenerate them from the Texinfo files that we do include.
#### To update the changed info files, do
#### (cd man; makeinfo emacs.texi; makeinfo vip.texi; makeinfo info.texi
####  makeinfo gnus.texi)

### Patchmaker's checklist:
### - update version numbers in comments and version.el tweak
### - diff -u ls -R listings, and decide on rm's and mv's.
### - apply rm's and mv's, and then do a diff -cprP --exclude=\*.elc 
###   to generate the body.
### - insert the body just before the line saying `end-of-emacs-patch-kit'.

if [ -d lisp ] ; then
  true
else
  if [ -d emacs-19.21/lisp ] ; then
    cd emacs-19.21
  else
    (echo "$0: In order to apply this patch, the current directory"
     echo "must be the top of the Emacs distribution tree.") >&2
    exit 1
  fi
fi

### We can't patch version.el, because it contains some random dump
### number.  So we'll be a little more relaxed about this edit.
sed < lisp/version.el > $$ \
  -e 's/defconst emacs-version "[^"]*"/defconst emacs-version "19.22.0"/'
mv lisp/version.el lisp/version.el~
mv $$ lisp/version.el

### Put moves and renames here.
(cd src/m; mv tekXD88.h tekxd88.h)

patch -p1 << \end-of-emacs-patch-kit
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/ChangeLog emacs-19.22/ChangeLog
*** emacs-19.21/ChangeLog	Tue Nov 16 04:20:00 1993
--- emacs-19.22/ChangeLog	Sat Nov 27 04:41:39 1993
***************
*** 1,2 ****
--- 1,27 ----
+ Sat Nov 27 04:14:28 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.22 released.
+ 
+ 	* Makefile.in (do-install): Use umask 022 in copying etc and lisp dirs.
+ 
+ Thu Nov 25 16:46:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* make-dist: When breaking links, use cp -p.
+ 	Copy install.sh into distribution.
+ 	* install.sh: New file.
+ 
+ Sun Nov 21 04:01:46 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* configure.in (i[34]86-ncr-sysv*): New specific alternative.
+ 
+ Sat Nov 20 01:03:10 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* configure.in (version): When --run-in-place, exclude 
+ 	${datadir}/emacs/site-lisp from locallisppath.
+ 
+ Thu Nov 18 00:56:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* configure.in: Delete jumk.c before writing it.
+ 
  Tue Nov 16 00:56:51 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/Makefile.in emacs-19.22/Makefile.in
*** emacs-19.21/Makefile.in	Tue Nov 16 00:56:49 1993
--- emacs-19.22/Makefile.in	Sat Nov 27 04:19:22 1993
***************
*** 269,273 ****
  	   && [ `(cd $${dir} && /bin/pwd)` != `(cd $${dest} && /bin/pwd)` ] \
  	   && (echo "Copying $${dir}..." ; \
! 	       (cd $${dir}; tar -cf - . )|(cd $${dest};umask 0; tar -xvf - ); \
  	       for subdir in `find $${dest} -type d ! -name RCS -print` ; do \
  		 rm -rf $${subdir}/RCS ; \
--- 269,273 ----
  	   && [ `(cd $${dir} && /bin/pwd)` != `(cd $${dest} && /bin/pwd)` ] \
  	   && (echo "Copying $${dir}..." ; \
! 	       (cd $${dir}; tar -cf - . )|(cd $${dest};umask 022; tar -xvf - ); \
  	       for subdir in `find $${dest} -type d ! -name RCS -print` ; do \
  		 rm -rf $${subdir}/RCS ; \
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/PROBLEMS emacs-19.22/PROBLEMS
*** emacs-19.21/PROBLEMS	Tue Nov 16 07:13:06 1993
--- emacs-19.22/PROBLEMS	Thu Nov 25 16:49:34 1993
***************
*** 123,126 ****
--- 123,128 ----
  * Emacs fails to understand most Internet host names, even though
  the names work properly with other programs on the same system.
+ * Emacs won't work with X-windows if the value of DISPLAY is HOSTNAME:0.
+ * GNUs can't make contact with the specified host for nntp.
  
  This typically happens on Suns and other systems that use shared
***************
*** 135,138 ****
--- 137,159 ----
  installed in the shared library, and then relink Emacs.
  
+ On SunOS 4.1, simply define HAVE_RES_INIT.
+ 
+ If you have already installed the name resolver in the file libresolv.a,
+ then you need to compile Emacs to use that library.  The easiest way to
+ do this is to add to config.h a definition of LIBS_SYSTEM, LIBS_MACHINE
+ or LIB_STANDARD which uses -lresolv.  Watch out!  If you redefine a macro
+ that is already in use in your configuration to supply some other libraries,
+ be careful not to lose the others.
+ 
+ Thus, you could start by adding this to config.h:
+ 
+ #define LIBS_SYSTEM -lresolv
+ 
+ Then if this gives you an error for redefining a macro, and you see that
+ the s- file defines LIBS_SYSTEM as -lfoo -lbar, you could change config.h
+ again to say this:
+ 
+ #define LIBS_SYSTEM -lresolv -lfoo -lbar
+ 
  * On a Sun running SunOS 4.1.1, you get this error message from GNU ld:
  
***************
*** 417,456 ****
  	chmod 2755 movemail
  
- * Emacs won't work with X-windows if the value of DISPLAY is HOSTNAME:0.
- * GNUs can't make contact with the specified host for nntp.
- 
- Some people have found that Emacs was unable to connect to the local
- host by name, as in DISPLAY=prep:0 if you are running on prep, but
- could handle DISPLAY=unix:0.  Here is what tale@rpi.edu said:
- 
-       Seems as
-     though gethostbyname was bombing somewhere along the way.  Well, we
-     had just upgrade from SunOS 3.5 (which X11 was built under) to SunOS
-     4.0.1.  Any new X applications which tried to be built with the pre
-     OS-upgrade libraries had the same problems which Emacs was having.
-     Missing /etc/resolv.conf for a little while (when one of the libraries
-     was built?) also might have had a hand in it.
- 
-     The result of all of this (with some speculation) was that we rebuilt
-     X and then rebuilt Emacs with the new libraries.  Works as it should
-     now.  Hoorah.
- 
- If you have already installed the name resolver in the file libresolv.a,
- then you need to compile Emacs to use that library.  The easiest way to
- do this is to add to config.h a definition of LIBS_SYSTEM, LIBS_MACHINE
- or LIB_STANDARD which uses -lresolv.  Watch out!  If you redefine a macro
- that is already in use in your configuration to supply some other libraries,
- be careful not to lose the others.
- 
- Thus, you could start by adding this to config.h:
- 
- #define LIBS_SYSTEM -lresolv
- 
- Then if this gives you an error for redefining a macro, and you see that
- the s- file defines LIBS_SYSTEM as -lfoo -lbar, you could change config.h
- again to say this:
- 
- #define LIBS_SYSTEM -lresolv -lfoo -lbar
- 
  * Emacs spontaneously displays "I-search: " at the bottom of the screen.
  
--- 438,441 ----
***************
*** 508,511 ****
--- 493,503 ----
  (enable-flow-control-on "vt200" "vt300" "vt101" "vt131")
  
+ If the situation is only temporary and you don't expect it to
+ be the case the next time you use emacs (e.g. you're visiting
+ someplace where C-s and C-q have taken over, but expect to
+ be back to a safe part of the world in a few hours), you can
+ just type M-x enable-flow-control at the beginning of your
+ emacs session.
+ 
  An even more drastic measure is to make Emacs use flow control.  To do
  this, evaluate the Lisp expression (set-input-mode nil t META).  (The
***************
*** 561,564 ****
--- 553,566 ----
  around this is to start another shell before starting rlogin, and
  issue the stty command to disable flow control from that shell.
+ 
+ If none of these methods work, the best solution is to type
+ M-x enable-flow-control at the beginning of your emacs session, or
+ if you expect the problem to continue, add a line such as the
+ following to your .emacs (on the host running rlogind):
+ 
+ (enable-flow-control-on "vt200" "vt300" "vt101" "vt131")
+ 
+ See the entry about spontaneous display of I-search (above) for more
+ info.
  
  * Screen is updated wrong, but only on one kind of terminal.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/README emacs-19.22/README
*** emacs-19.21/README	Tue Nov 16 07:10:49 1993
--- emacs-19.22/README	Sat Nov 27 14:04:54 1993
***************
*** 1,3 ****
! This directory tree holds version 19.21 of GNU Emacs, the extensible,
  customizable, self-documenting real-time display editor.
  
--- 1,3 ----
! This directory tree holds version 19.22 of GNU Emacs, the extensible,
  customizable, self-documenting real-time display editor.
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/configure emacs-19.22/configure
*** emacs-19.21/configure	Tue Nov 16 07:13:08 1993
--- emacs-19.22/configure	Mon Nov 22 22:01:03 1993
***************
*** 697,700 ****
--- 697,705 ----
    ;;
  
+   ## Unspecified sysv on an ncr machine defaults to svr4.
+   i[34]86-ncr-sysv* )
+     machine=intel386 opsys=usg5-4
+   ;;
+ 
    ## Intel 860
    i860-*-sysvr4* )
***************
*** 973,977 ****
  
  
! trap 'rm -fr conftest* core; exit 1' 1 3 15
  
  # NLS nuisances.
--- 978,983 ----
  
  
! trap 'rm -fr conftest* confdefs* core; exit 1' 1 3 15
! trap 'rm -f confdefs*' 0
  
  # NLS nuisances.
***************
*** 981,986 ****
  if test "${LANG+set}"   = 'set' ; then LANG=C;   export LANG;   fi
  
! rm -f conftest*
! compile='${CC-cc} $CFLAGS $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1'
  
  # A filename unique to this package, relative to the directory that
--- 987,994 ----
  if test "${LANG+set}"   = 'set' ; then LANG=C;   export LANG;   fi
  
! rm -f conftest* confdefs.h
! # AIX cpp loses on an empty file, so make sure it contains at least a newline.
! echo > confdefs.h
! compile='${CC-cc} $CFLAGS conftest.c -o conftest $LIBS >/dev/null 2>&1'
  
  # A filename unique to this package, relative to the directory that
***************
*** 1015,1018 ****
--- 1023,1027 ----
  esac
  
+ 
  # Save the original args to write them into config.status later.
  configure_args="$*"
***************
*** 1041,1045 ****
  fi
  test -z "$CC" && CC="cc"
! test -n "$CC" -a -n "$verbose" && echo "	setting CC to $CC"
  
  # Find out if we are using GNU C, under whatever name.
--- 1050,1054 ----
  fi
  test -z "$CC" && CC="cc"
! test -n "$CC" && test -n "$verbose" && echo "	setting CC to $CC"
  
  # Find out if we are using GNU C, under whatever name.
***************
*** 1079,1089 ****
    CPP="${CC-cc} -E"
    cat > conftest.c <<EOF
  #include <stdio.h>
  Syntax Error
  EOF
! err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
    :
  else
    CPP=/lib/cpp
  fi
--- 1088,1100 ----
    CPP="${CC-cc} -E"
    cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <stdio.h>
  Syntax Error
  EOF
! err=`eval "($CPP conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
    :
  else
+   rm -rf conftest*
    CPP=/lib/cpp
  fi
***************
*** 1128,1132 ****
    IFS="$saveifs"
  fi
! INSTALL=${INSTALL-cp}
  test -n "$verbose" && echo "	setting INSTALL to $INSTALL"
  INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'}
--- 1139,1152 ----
    IFS="$saveifs"
  fi
! if test -z "$INSTALL"; then
!   if test -f ${srcdir}/install.sh; then
!     # We want the top-level source directory, not the subdir's srcdir,
!     # so expand srcdir now rather than in the Makefile.
!     INSTALL="${srcdir}/install.sh -c"
!   else
!     echo "warning: ${srcdir}/install.sh not found; using cp"
!     INSTALL=cp
!   fi
! fi
  test -n "$verbose" && echo "	setting INSTALL to $INSTALL"
  INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'}
***************
*** 1152,1156 ****
  fi
  
! test -n "$YACC" -a -n "$verbose" && echo "	setting YACC to $YACC"
  
  test -n "$YACC" && break
--- 1172,1176 ----
  fi
  
! test -n "$YACC" && test -n "$verbose" && echo "	setting YACC to $YACC"
  
  test -n "$YACC" && break
***************
*** 1165,1176 ****
  echo checking for ${hdr}
  cat > conftest.c <<EOF
  #include <${hdr}>
  EOF
! err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
    
  {
  test -n "$verbose" && \
  echo "	defining ${trhdr}"
  DEFS="$DEFS -D${trhdr}=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}${trhdr}\${SEDdB}${trhdr}\${SEDdC}1\${SEDdD}
--- 1185,1199 ----
  echo checking for ${hdr}
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <${hdr}>
  EOF
! err=`eval "($CPP conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
  echo "	defining ${trhdr}"
+ echo "#define" ${trhdr} 1 >> confdefs.h
  DEFS="$DEFS -D${trhdr}=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}${trhdr}\${SEDdB}${trhdr}\${SEDdC}1\${SEDdD}
***************
*** 1180,1183 ****
--- 1203,1207 ----
  }
  
+ 
  fi
  rm -f conftest*
***************
*** 1186,1189 ****
--- 1210,1214 ----
  echo checking for ANSI C header files
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <stdlib.h>
  #include <stdarg.h>
***************
*** 1191,1202 ****
  #include <float.h>
  EOF
! err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
    # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
! echo '#include <string.h>' > conftest.c
! eval "$CPP \$DEFS conftest.c > conftest.out 2>&1"
  if egrep "memchr" conftest.out >/dev/null 2>&1; then
    # SGI's /bin/cc from Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
  cat > conftest.c <<EOF
  #include <ctype.h>
  #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
--- 1216,1231 ----
  #include <float.h>
  EOF
! err=`eval "($CPP conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
+   rm -rf conftest*
    # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
! echo '#include "confdefs.h"
! #include <string.h>' > conftest.c
! eval "$CPP conftest.c > conftest.out 2>&1"
  if egrep "memchr" conftest.out >/dev/null 2>&1; then
+   rm -rf conftest*
    # SGI's /bin/cc from Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <ctype.h>
  #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
***************
*** 1214,1217 ****
--- 1243,1247 ----
  test -n "$verbose" && \
  echo "	defining STDC_HEADERS"
+ echo "#define" STDC_HEADERS 1 >> confdefs.h
  DEFS="$DEFS -DSTDC_HEADERS=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}STDC_HEADERS\${SEDdB}STDC_HEADERS\${SEDdC}1\${SEDdD}
***************
*** 1221,1229 ****
  }
  
  fi
! rm -f conftest*
  fi
  rm -f conftest*
  
  fi
  rm -f conftest*
--- 1251,1262 ----
  }
  
+ 
  fi
! rm -fr conftest*
! 
  fi
  rm -f conftest*
  
+ 
  fi
  rm -f conftest*
***************
*** 1231,1234 ****
--- 1264,1268 ----
  echo checking for whether time.h and sys/time.h may both be included
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/time.h>
***************
*** 1238,1245 ****
--- 1272,1281 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
  echo "	defining TIME_WITH_SYS_TIME"
+ echo "#define" TIME_WITH_SYS_TIME 1 >> confdefs.h
  DEFS="$DEFS -DTIME_WITH_SYS_TIME=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}TIME_WITH_SYS_TIME\${SEDdB}TIME_WITH_SYS_TIME\${SEDdC}1\${SEDdD}
***************
*** 1249,1252 ****
--- 1285,1289 ----
  }
  
+ 
  fi
  rm -f conftest*
***************
*** 1255,1258 ****
--- 1292,1296 ----
  echo checking for return type of signal handlers
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <sys/types.h>
  #include <signal.h>
***************
*** 1265,1272 ****
  EOF
  if eval $compile; then
    
  {
  test -n "$verbose" && \
! echo "	defining RETSIGTYPE to be void"
  DEFS="$DEFS -DRETSIGTYPE=void"
  SEDDEFS="${SEDDEFS}\${SEDdA}RETSIGTYPE\${SEDdB}RETSIGTYPE\${SEDdC}void\${SEDdD}
--- 1303,1312 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
! echo "	defining" RETSIGTYPE to be void
! echo "#define" RETSIGTYPE void >> confdefs.h
  DEFS="$DEFS -DRETSIGTYPE=void"
  SEDDEFS="${SEDDEFS}\${SEDdA}RETSIGTYPE\${SEDdB}RETSIGTYPE\${SEDdC}void\${SEDdD}
***************
*** 1276,1284 ****
  }
  
  else
    
  {
  test -n "$verbose" && \
! echo "	defining RETSIGTYPE to be int"
  DEFS="$DEFS -DRETSIGTYPE=int"
  SEDDEFS="${SEDDEFS}\${SEDdA}RETSIGTYPE\${SEDdB}RETSIGTYPE\${SEDdC}int\${SEDdD}
--- 1316,1327 ----
  }
  
+ 
  else
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
! echo "	defining" RETSIGTYPE to be int
! echo "#define" RETSIGTYPE int >> confdefs.h
  DEFS="$DEFS -DRETSIGTYPE=int"
  SEDDEFS="${SEDDEFS}\${SEDdA}RETSIGTYPE\${SEDdB}RETSIGTYPE\${SEDdC}int\${SEDdD}
***************
*** 1295,1310 ****
  echo checking for struct tm in time.h
  cat > conftest.c <<EOF
  #include <sys/types.h>
  #include <time.h>
  int main() { exit(0); }
! int t() { struct tm *tp; }
  EOF
  if eval $compile; then
    :
  else
    
  {
  test -n "$verbose" && \
  echo "	defining TM_IN_SYS_TIME"
  DEFS="$DEFS -DTM_IN_SYS_TIME=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}TM_IN_SYS_TIME\${SEDdB}TM_IN_SYS_TIME\${SEDdC}1\${SEDdD}
--- 1338,1356 ----
  echo checking for struct tm in time.h
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <sys/types.h>
  #include <time.h>
  int main() { exit(0); }
! int t() { struct tm *tp; tp->tm_sec; }
  EOF
  if eval $compile; then
    :
  else
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
  echo "	defining TM_IN_SYS_TIME"
+ echo "#define" TM_IN_SYS_TIME 1 >> confdefs.h
  DEFS="$DEFS -DTM_IN_SYS_TIME=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}TM_IN_SYS_TIME\${SEDdB}TM_IN_SYS_TIME\${SEDdC}1\${SEDdD}
***************
*** 1329,1332 ****
--- 1375,1379 ----
  echo checking for tm_zone in struct tm
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  $decl
  int main() { exit(0); }
***************
*** 1334,1341 ****
--- 1381,1390 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
  echo "	defining HAVE_TM_ZONE"
+ echo "#define" HAVE_TM_ZONE 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_TM_ZONE=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_TM_ZONE\${SEDdB}HAVE_TM_ZONE\${SEDdC}1\${SEDdD}
***************
*** 1345,1349 ****
--- 1394,1400 ----
  }
  
+ 
  else
+   rm -rf conftest*
    no_tm_zone=1
  fi
***************
*** 1353,1356 ****
--- 1404,1408 ----
  echo checking for tzname
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <time.h>
  #ifndef tzname /* For SGI.  */
***************
*** 1361,1368 ****
--- 1413,1422 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
  echo "	defining HAVE_TZNAME"
+ echo "#define" HAVE_TZNAME 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_TZNAME=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_TZNAME\${SEDdB}HAVE_TZNAME\${SEDdC}1\${SEDdD}
***************
*** 1372,1375 ****
--- 1426,1430 ----
  }
  
+ 
  fi
  rm -f conftest*
***************
*** 1412,1418 ****
    struct s { int j; const int *ap[3]; };
    struct s *b; b->j = 5;
  }'
! echo checking for working const
  cat > conftest.c <<EOF
  
  int main() { exit(0); }
--- 1467,1477 ----
    struct s { int j; const int *ap[3]; };
    struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+   const int foo = 10;
  }'
! echo checking for lack of working const
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  
  int main() { exit(0); }
***************
*** 1422,1429 ****
    :
  else
    
  {
  test -n "$verbose" && \
! echo "	defining const to be empty"
  DEFS="$DEFS -Dconst="
  SEDDEFS="${SEDDEFS}\${SEDdA}const\${SEDdB}const\${SEDdC}\${SEDdD}
--- 1481,1490 ----
    :
  else
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
! echo "	defining" const to be empty
! echo "#define" const  >> confdefs.h
  DEFS="$DEFS -Dconst="
  SEDDEFS="${SEDDEFS}\${SEDdA}const\${SEDdB}const\${SEDdC}\${SEDdD}
***************
*** 1438,1462 ****
  
  echo checking for long file names
! lost=false
  # Test for long file names in all the places we know might matter:
  #      .		the current directory, where building will happen
  #      /tmp		where it might want to write temporary files
  #      /usr/tmp		likewise
! #      $prefix		where we will be installing things
! #      $exec_prefix	likewise
! for dir in . /tmp /usr/tmp $prefix $exec_prefix ; do
!   test -w $dir || { echo \
! warning: cannot write $dir to see if it supports long file names
! 		    continue; }
    (echo 1 > $dir/conftest9012345) 2>/dev/null
    (echo 2 > $dir/conftest9012346) 2>/dev/null
    val=`cat $dir/conftest9012345 2>/dev/null`
!   test -f $dir/conftest9012345 && test "$val" = 1 || lost=true
    rm -f $dir/conftest9012345 $dir/conftest9012346 2> /dev/null
  done
! $lost || 
  {
  test -n "$verbose" && \
  echo "	defining HAVE_LONG_FILE_NAMES"
  DEFS="$DEFS -DHAVE_LONG_FILE_NAMES=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_LONG_FILE_NAMES\${SEDdB}HAVE_LONG_FILE_NAMES\${SEDdC}1\${SEDdD}
--- 1499,1525 ----
  
  echo checking for long file names
! some_dir_failed=false
  # Test for long file names in all the places we know might matter:
  #      .		the current directory, where building will happen
  #      /tmp		where it might want to write temporary files
+ #      /var/tmp		likewise
  #      /usr/tmp		likewise
! #      $prefix/lib	where we will be installing things
! #      $exec_prefix/lib	likewise
! # eval it to expand exec_prefix.
! for dir in `eval echo . /tmp /var/tmp /usr/tmp $prefix/lib $exec_prefix/lib` ; do
!   test -d $dir || continue
!   test -w $dir || continue # It's less confusing to not echo anything here.
    (echo 1 > $dir/conftest9012345) 2>/dev/null
    (echo 2 > $dir/conftest9012346) 2>/dev/null
    val=`cat $dir/conftest9012345 2>/dev/null`
!   test -f $dir/conftest9012345 && test "$val" = 1 || some_dir_failed=true
    rm -f $dir/conftest9012345 $dir/conftest9012346 2> /dev/null
  done
! $some_dir_failed || 
  {
  test -n "$verbose" && \
  echo "	defining HAVE_LONG_FILE_NAMES"
+ echo "#define" HAVE_LONG_FILE_NAMES 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_LONG_FILE_NAMES=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_LONG_FILE_NAMES\${SEDdB}HAVE_LONG_FILE_NAMES\${SEDdC}1\${SEDdD}
***************
*** 1522,1542 ****
        
        # If we find X, set shell vars x_includes and x_libraries to the paths.
  echo checking for X include and library files with xmkmf
  rm -fr conftestdir
  if mkdir conftestdir; then
    cd conftestdir
!   cat > Imakefile <<\EOF
  acfindx:
! 	@echo "temp_includes=$(INCROOT); temp_libraries=$(USRLIBDIR)"
  EOF
    if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
!     eval `make acfindx`
!     case "$temp_includes" in
  	/usr/include) ;;
! 	*) x_includes="$temp_includes" ;;
      esac
!     case "$temp_libraries" in
  	/usr/lib | /lib) ;;
! 	*) x_libraries="$temp_libraries" ;;
      esac
    fi
--- 1585,1612 ----
        
        # If we find X, set shell vars x_includes and x_libraries to the paths.
+ no_x=true
  echo checking for X include and library files with xmkmf
  rm -fr conftestdir
  if mkdir conftestdir; then
    cd conftestdir
!   cat > Imakefile <<'EOF'
  acfindx:
! 	@echo 'im_incroot="$(INCROOT)"; im_usrlibdir="$(USRLIBDIR)"; im_libdir="$(LIBDIR)"'
  EOF
    if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
!     no_x=
!     # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
!     eval `make acfindx | grep -v make`
!     # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
!     if test ! -f $im_usrlibdir/libX11.a && test -f $im_libdir/libX11.a; then
!       im_usrlibdir=$im_libdir
!     fi
!     case "$im_incroot" in
  	/usr/include) ;;
! 	*) x_includes="$im_incroot" ;;
      esac
!     case "$im_usrlibdir" in
  	/usr/lib | /lib) ;;
! 	*) x_libraries="$im_usrlibdir" ;;
      esac
    fi
***************
*** 1545,1548 ****
--- 1615,1713 ----
  fi
  
+ if test -z "$im_usrlibdir"; then
+ echo checking for X include and library files directly
+ if test ".$x_direct_test_library" = . ; then
+    x_direct_test_library=Xt
+ fi
+ cat > conftest.c <<EOF
+ #include "confdefs.h"
+ #include <X11/Intrinsic.h>
+ EOF
+ err=`eval "($CPP conftest.c >/dev/null) 2>&1"`
+ if test -z "$err"; then
+   rm -rf conftest*
+   no_x=
+ 
+ else
+   rm -rf conftest*
+   for dir in \
+     /usr/local/include \
+     /usr/unsupported/include \
+     /usr/x386/include \
+     /usr/local/x11r5/include \
+     /usr/include/X11R6 \
+     /usr/include/X11R5 \
+     /usr/include/X11R4 \
+     /usr/X11R6/include \
+     /usr/X11R5/include \
+     /usr/X11/include \
+     /usr/openwin/include \
+     /usr/openwin/share/include \
+     /usr/lpp/Xamples/include \
+     /usr/athena/include \
+     ; \
+   do
+     if test -r $dir/X11/Intrinsic.h; then
+       x_includes=$dir; no_x=
+       break
+     fi
+   done
+ fi
+ rm -f conftest*
+ 
+ # Check for the libraries.  First see if replacing the `include' by
+ # `lib' works.
+ LIBS_save="${LIBS}"
+ LIBS="${LIBS} -l"$x_direct_test_library""
+ have_lib=""
+ echo checking for -l"$x_direct_test_library"
+ cat > conftest.c <<EOF
+ #include "confdefs.h"
+ 
+ int main() { exit(0); }
+ int t() { main(); }
+ EOF
+ if eval $compile; then
+   rm -rf conftest*
+   have_lib="1"
+ 
+ fi
+ rm -f conftest*
+ LIBS="${LIBS_save}"
+ if test -n "${have_lib}"; then
+    :; no_x=
+ else
+    :; for dir in `echo "$x_includes" | sed s/include/lib/` \
+   /usr/local/lib \
+   /usr/unsupported/lib \
+   /usr/x386/lib \
+   /usr/local/x11r5/lib \
+   /usr/lib/X11 \
+   /usr/lib/X11R6 \
+   /usr/lib/X11R5 \
+   /usr/lib/X11R4 \
+   /usr/X11R6/lib \
+   /usr/X11R5/lib \
+   /usr/X11R4/lib \
+   /usr/X11/lib \
+   /usr/openwin/lib \
+   /usr/lpp/Xamples/lib \
+   /usr/athena/lib \
+   ; \
+ do
+   for extension in a so sl; do
+     if test -r $dir/libXt.$extension; then
+       x_libraries=$dir; no_x=
+       break 2
+     fi
+   done
+ done
+ fi
+ 
+ fi
+ if test -n "$verbose"; then
+   test -n "$x_includes" && echo "	found X11 headers in $x_includes"
+   test -n "$x_libraries" && echo "	found X11 libraries in $x_libraries"
+ fi
        
      fi
***************
*** 1692,1695 ****
--- 1857,1861 ----
  echo checking for -ldnet
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  
  int main() { exit(0); }
***************
*** 1697,1701 ****
--- 1863,1869 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    have_lib="1"
+ 
  fi
  rm -f conftest*
***************
*** 1706,1709 ****
--- 1874,1878 ----
  test -n "$verbose" && \
  echo "	defining HAVE_LIBDNET"
+ echo "#define" HAVE_LIBDNET 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_LIBDNET=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_LIBDNET\${SEDdB}HAVE_LIBDNET\${SEDdC}1\${SEDdD}
***************
*** 1722,1725 ****
--- 1891,1895 ----
  echo checking for -lXbsd
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  
  int main() { exit(0); }
***************
*** 1727,1731 ****
--- 1897,1903 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    have_lib="1"
+ 
  fi
  rm -f conftest*
***************
*** 1752,1755 ****
--- 1924,1928 ----
  echo checking for ${func}
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <ctype.h>
  int main() { exit(0); }
***************
*** 1767,1773 ****
--- 1940,1948 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    {
  test -n "$verbose" && \
  echo "	defining ${trfunc}"
+ echo "#define" ${trfunc} 1 >> confdefs.h
  DEFS="$DEFS -D${trfunc}=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}${trfunc}\${SEDdB}${trfunc}\${SEDdC}1\${SEDdD}
***************
*** 1777,1780 ****
--- 1952,1956 ----
  }
  
+ 
  fi
  rm -f conftest*
***************
*** 1787,1790 ****
--- 1963,1967 ----
  echo checking for working alloca.h
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <alloca.h>
  int main() { exit(0); }
***************
*** 1792,1799 ****
--- 1969,1978 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    
  {
  test -n "$verbose" && \
  echo "	defining HAVE_ALLOCA_H"
+ echo "#define" HAVE_ALLOCA_H 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_ALLOCA_H=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_ALLOCA_H\${SEDdB}HAVE_ALLOCA_H\${SEDdC}1\${SEDdD}
***************
*** 1803,1806 ****
--- 1982,1986 ----
  }
  
+ 
  fi
  rm -f conftest*
***************
*** 1822,1825 ****
--- 2002,2006 ----
  echo checking for alloca
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  $decl
  int main() { exit(0); }
***************
*** 1829,1834 ****
--- 2010,2017 ----
    :
  else
+   rm -rf conftest*
    alloca_missing=1
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  
  #if defined(CRAY) && ! defined(CRAY2)
***************
*** 1839,1846 ****
  
  EOF
! eval "$CPP \$DEFS conftest.c > conftest.out 2>&1"
  if egrep "winnitude" conftest.out >/dev/null 2>&1; then
    echo checking for _getb67
  cat > conftest.c <<EOF
  #include <ctype.h>
  int main() { exit(0); }
--- 2022,2031 ----
  
  EOF
! eval "$CPP conftest.c > conftest.out 2>&1"
  if egrep "winnitude" conftest.out >/dev/null 2>&1; then
+   rm -rf conftest*
    echo checking for _getb67
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <ctype.h>
  int main() { exit(0); }
***************
*** 1858,1864 ****
  EOF
  if eval $compile; then
    {
  test -n "$verbose" && \
! echo "	defining CRAY_STACKSEG_END to be _getb67"
  DEFS="$DEFS -DCRAY_STACKSEG_END=_getb67"
  SEDDEFS="${SEDDEFS}\${SEDdA}CRAY_STACKSEG_END\${SEDdB}CRAY_STACKSEG_END\${SEDdC}_getb67\${SEDdD}
--- 2043,2051 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    {
  test -n "$verbose" && \
! echo "	defining" CRAY_STACKSEG_END to be _getb67
! echo "#define" CRAY_STACKSEG_END _getb67 >> confdefs.h
  DEFS="$DEFS -DCRAY_STACKSEG_END=_getb67"
  SEDDEFS="${SEDDEFS}\${SEDdA}CRAY_STACKSEG_END\${SEDdB}CRAY_STACKSEG_END\${SEDdC}_getb67\${SEDdD}
***************
*** 1868,1874 ****
--- 2055,2064 ----
  }
  
+ 
  else
+   rm -rf conftest*
    echo checking for GETB67
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <ctype.h>
  int main() { exit(0); }
***************
*** 1886,1892 ****
  EOF
  if eval $compile; then
    {
  test -n "$verbose" && \
! echo "	defining CRAY_STACKSEG_END to be GETB67"
  DEFS="$DEFS -DCRAY_STACKSEG_END=GETB67"
  SEDDEFS="${SEDDEFS}\${SEDdA}CRAY_STACKSEG_END\${SEDdB}CRAY_STACKSEG_END\${SEDdC}GETB67\${SEDdD}
--- 2076,2084 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    {
  test -n "$verbose" && \
! echo "	defining" CRAY_STACKSEG_END to be GETB67
! echo "#define" CRAY_STACKSEG_END GETB67 >> confdefs.h
  DEFS="$DEFS -DCRAY_STACKSEG_END=GETB67"
  SEDDEFS="${SEDDEFS}\${SEDdA}CRAY_STACKSEG_END\${SEDdB}CRAY_STACKSEG_END\${SEDdC}GETB67\${SEDdD}
***************
*** 1896,1902 ****
--- 2088,2097 ----
  }
  
+ 
  else
+   rm -rf conftest*
    echo checking for getb67
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <ctype.h>
  int main() { exit(0); }
***************
*** 1914,1920 ****
  EOF
  if eval $compile; then
    {
  test -n "$verbose" && \
! echo "	defining CRAY_STACKSEG_END to be getb67"
  DEFS="$DEFS -DCRAY_STACKSEG_END=getb67"
  SEDDEFS="${SEDDEFS}\${SEDdA}CRAY_STACKSEG_END\${SEDdB}CRAY_STACKSEG_END\${SEDdC}getb67\${SEDdD}
--- 2109,2117 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    {
  test -n "$verbose" && \
! echo "	defining" CRAY_STACKSEG_END to be getb67
! echo "#define" CRAY_STACKSEG_END getb67 >> confdefs.h
  DEFS="$DEFS -DCRAY_STACKSEG_END=getb67"
  SEDDEFS="${SEDDEFS}\${SEDdA}CRAY_STACKSEG_END\${SEDdB}CRAY_STACKSEG_END\${SEDdC}getb67\${SEDdD}
***************
*** 1924,1927 ****
--- 2121,2125 ----
  }
  
+ 
  fi
  rm -f conftest*
***************
*** 1933,1936 ****
--- 2131,2135 ----
  rm -f conftest*
  
+ 
  fi
  rm -f conftest*
***************
*** 1946,1949 ****
--- 2145,2160 ----
    # use ar to extract alloca.o from them instead of compiling alloca.c.
    ALLOCA=alloca.o
+   
+ {
+ test -n "$verbose" && \
+ echo "	defining C_ALLOCA"
+ echo "#define" C_ALLOCA 1 >> confdefs.h
+ DEFS="$DEFS -DC_ALLOCA=1"
+ SEDDEFS="${SEDDEFS}\${SEDdA}C_ALLOCA\${SEDdB}C_ALLOCA\${SEDdC}1\${SEDdD}
+ \${SEDuA}C_ALLOCA\${SEDuB}C_ALLOCA\${SEDuC}1\${SEDuD}
+ \${SEDeA}C_ALLOCA\${SEDeB}C_ALLOCA\${SEDeC}1\${SEDeD}
+ "
+ }
+ 
  
    echo 'checking stack direction for C alloca'
***************
*** 1951,1954 ****
--- 2162,2166 ----
  # If we cannot run a trivial program, we must be cross compiling.
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  main(){exit(0);}
  EOF
***************
*** 1959,1963 ****
    cross_compiling=1
  fi
! rm -f conftest*
  
  if test -n "$cross_compiling"
--- 2171,2175 ----
    cross_compiling=1
  fi
! rm -fr conftest*
  
  if test -n "$cross_compiling"
***************
*** 1966,1970 ****
  {
  test -n "$verbose" && \
! echo "	defining STACK_DIRECTION to be 0"
  DEFS="$DEFS -DSTACK_DIRECTION=0"
  SEDDEFS="${SEDDEFS}\${SEDdA}STACK_DIRECTION\${SEDdB}STACK_DIRECTION\${SEDdC}0\${SEDdD}
--- 2178,2183 ----
  {
  test -n "$verbose" && \
! echo "	defining" STACK_DIRECTION to be 0
! echo "#define" STACK_DIRECTION 0 >> confdefs.h
  DEFS="$DEFS -DSTACK_DIRECTION=0"
  SEDDEFS="${SEDDEFS}\${SEDdA}STACK_DIRECTION\${SEDdB}STACK_DIRECTION\${SEDdC}0\${SEDdD}
***************
*** 1976,1979 ****
--- 2189,2193 ----
  else
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  find_stack_direction ()
  {
***************
*** 1998,2002 ****
  {
  test -n "$verbose" && \
! echo "	defining STACK_DIRECTION to be 1"
  DEFS="$DEFS -DSTACK_DIRECTION=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}STACK_DIRECTION\${SEDdB}STACK_DIRECTION\${SEDdC}1\${SEDdD}
--- 2212,2217 ----
  {
  test -n "$verbose" && \
! echo "	defining" STACK_DIRECTION to be 1
! echo "#define" STACK_DIRECTION 1 >> confdefs.h
  DEFS="$DEFS -DSTACK_DIRECTION=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}STACK_DIRECTION\${SEDdB}STACK_DIRECTION\${SEDdC}1\${SEDdD}
***************
*** 2006,2014 ****
  }
  
  else
    
  {
  test -n "$verbose" && \
! echo "	defining STACK_DIRECTION to be -1"
  DEFS="$DEFS -DSTACK_DIRECTION=-1"
  SEDDEFS="${SEDDEFS}\${SEDdA}STACK_DIRECTION\${SEDdB}STACK_DIRECTION\${SEDdC}-1\${SEDdD}
--- 2221,2231 ----
  }
  
+ 
  else
    
  {
  test -n "$verbose" && \
! echo "	defining" STACK_DIRECTION to be -1
! echo "#define" STACK_DIRECTION -1 >> confdefs.h
  DEFS="$DEFS -DSTACK_DIRECTION=-1"
  SEDDEFS="${SEDDEFS}\${SEDdA}STACK_DIRECTION\${SEDdB}STACK_DIRECTION\${SEDdC}-1\${SEDdD}
***************
*** 2020,2024 ****
  fi
  fi
! rm -f conftest*
  fi
  
--- 2237,2241 ----
  fi
  fi
! rm -fr conftest*
  fi
  
***************
*** 2030,2033 ****
--- 2247,2251 ----
  echo checking for -lm
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  
  int main() { exit(0); }
***************
*** 2035,2039 ****
--- 2253,2259 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    have_lib="1"
+ 
  fi
  rm -f conftest*
***************
*** 2044,2047 ****
--- 2264,2268 ----
  test -n "$verbose" && \
  echo "	defining HAVE_LIBM"
+ echo "#define" HAVE_LIBM 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_LIBM=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_LIBM\${SEDdB}HAVE_LIBM\${SEDdC}1\${SEDdD}
***************
*** 2059,2062 ****
--- 2280,2284 ----
  echo checking for ${func}
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <ctype.h>
  int main() { exit(0); }
***************
*** 2074,2080 ****
--- 2296,2304 ----
  EOF
  if eval $compile; then
+   rm -rf conftest*
    {
  test -n "$verbose" && \
  echo "	defining ${trfunc}"
+ echo "#define" ${trfunc} 1 >> confdefs.h
  DEFS="$DEFS -D${trfunc}=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}${trfunc}\${SEDdB}${trfunc}\${SEDdC}1\${SEDdD}
***************
*** 2084,2087 ****
--- 2308,2312 ----
  }
  
+ 
  fi
  rm -f conftest*
***************
*** 2092,2095 ****
--- 2317,2321 ----
  echo checking for socket
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <ctype.h>
  int main() { exit(0); }
***************
*** 2109,2112 ****
--- 2335,2339 ----
    :
  else
+   rm -rf conftest*
    ok_so_far=
  fi
***************
*** 2116,2125 ****
    echo checking for netinet/in.h
  cat > conftest.c <<EOF
  #include <netinet/in.h>
  EOF
! err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
    :
  else
    ok_so_far=
  fi
--- 2343,2354 ----
    echo checking for netinet/in.h
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <netinet/in.h>
  EOF
! err=`eval "($CPP conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
    :
  else
+   rm -rf conftest*
    ok_so_far=
  fi
***************
*** 2130,2139 ****
    echo checking for arpa/inet.h
  cat > conftest.c <<EOF
  #include <arpa/inet.h>
  EOF
! err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
    :
  else
    ok_so_far=
  fi
--- 2359,2370 ----
    echo checking for arpa/inet.h
  cat > conftest.c <<EOF
+ #include "confdefs.h"
  #include <arpa/inet.h>
  EOF
! err=`eval "($CPP conftest.c >/dev/null) 2>&1"`
  if test -z "$err"; then
    :
  else
+   rm -rf conftest*
    ok_so_far=
  fi
***************
*** 2146,2149 ****
--- 2377,2381 ----
  test -n "$verbose" && \
  echo "	defining HAVE_INET_SOCKETS"
+ echo "#define" HAVE_INET_SOCKETS 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_INET_SOCKETS=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_INET_SOCKETS\${SEDdB}HAVE_INET_SOCKETS\${SEDdC}1\${SEDdD}
***************
*** 2170,2173 ****
--- 2402,2406 ----
  test -n "$verbose" && \
  echo "	defining HAVE_AIX_SMT_EXP"
+ echo "#define" HAVE_AIX_SMT_EXP 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_AIX_SMT_EXP=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_AIX_SMT_EXP\${SEDdB}HAVE_AIX_SMT_EXP\${SEDdC}1\${SEDdD}
***************
*** 2210,2214 ****
  {
  test -n "$verbose" && \
! echo "	defining config_machfile to be "\"${machfile}\"""
  DEFS="$DEFS -Dconfig_machfile="\"${machfile}\"""
  SEDDEFS="${SEDDEFS}\${SEDdA}config_machfile\${SEDdB}config_machfile\${SEDdC}"\"${machfile}\""\${SEDdD}
--- 2443,2448 ----
  {
  test -n "$verbose" && \
! echo "	defining" config_machfile to be "\"${machfile}\""
! echo "#define" config_machfile "\"${machfile}\"" >> confdefs.h
  DEFS="$DEFS -Dconfig_machfile="\"${machfile}\"""
  SEDDEFS="${SEDDEFS}\${SEDdA}config_machfile\${SEDdB}config_machfile\${SEDdC}"\"${machfile}\""\${SEDdD}
***************
*** 2221,2225 ****
  {
  test -n "$verbose" && \
! echo "	defining config_opsysfile to be "\"${opsysfile}\"""
  DEFS="$DEFS -Dconfig_opsysfile="\"${opsysfile}\"""
  SEDDEFS="${SEDDEFS}\${SEDdA}config_opsysfile\${SEDdB}config_opsysfile\${SEDdC}"\"${opsysfile}\""\${SEDdD}
--- 2455,2460 ----
  {
  test -n "$verbose" && \
! echo "	defining" config_opsysfile to be "\"${opsysfile}\""
! echo "#define" config_opsysfile "\"${opsysfile}\"" >> confdefs.h
  DEFS="$DEFS -Dconfig_opsysfile="\"${opsysfile}\"""
  SEDDEFS="${SEDDEFS}\${SEDdA}config_opsysfile\${SEDdB}config_opsysfile\${SEDdC}"\"${opsysfile}\""\${SEDdD}
***************
*** 2232,2236 ****
  {
  test -n "$verbose" && \
! echo "	defining LD_SWITCH_X_SITE to be ${LD_SWITCH_X_SITE}"
  DEFS="$DEFS -DLD_SWITCH_X_SITE=${LD_SWITCH_X_SITE}"
  SEDDEFS="${SEDDEFS}\${SEDdA}LD_SWITCH_X_SITE\${SEDdB}LD_SWITCH_X_SITE\${SEDdC}${LD_SWITCH_X_SITE}\${SEDdD}
--- 2467,2472 ----
  {
  test -n "$verbose" && \
! echo "	defining" LD_SWITCH_X_SITE to be ${LD_SWITCH_X_SITE}
! echo "#define" LD_SWITCH_X_SITE ${LD_SWITCH_X_SITE} >> confdefs.h
  DEFS="$DEFS -DLD_SWITCH_X_SITE=${LD_SWITCH_X_SITE}"
  SEDDEFS="${SEDDEFS}\${SEDdA}LD_SWITCH_X_SITE\${SEDdB}LD_SWITCH_X_SITE\${SEDdC}${LD_SWITCH_X_SITE}\${SEDdD}
***************
*** 2243,2247 ****
  {
  test -n "$verbose" && \
! echo "	defining C_SWITCH_X_SITE to be ${C_SWITCH_X_SITE}"
  DEFS="$DEFS -DC_SWITCH_X_SITE=${C_SWITCH_X_SITE}"
  SEDDEFS="${SEDDEFS}\${SEDdA}C_SWITCH_X_SITE\${SEDdB}C_SWITCH_X_SITE\${SEDdC}${C_SWITCH_X_SITE}\${SEDdD}
--- 2479,2484 ----
  {
  test -n "$verbose" && \
! echo "	defining" C_SWITCH_X_SITE to be ${C_SWITCH_X_SITE}
! echo "#define" C_SWITCH_X_SITE ${C_SWITCH_X_SITE} >> confdefs.h
  DEFS="$DEFS -DC_SWITCH_X_SITE=${C_SWITCH_X_SITE}"
  SEDDEFS="${SEDDEFS}\${SEDdA}C_SWITCH_X_SITE\${SEDdB}C_SWITCH_X_SITE\${SEDdC}${C_SWITCH_X_SITE}\${SEDdD}
***************
*** 2254,2258 ****
  {
  test -n "$verbose" && \
! echo "	defining UNEXEC_SRC to be ${UNEXEC_SRC}"
  DEFS="$DEFS -DUNEXEC_SRC=${UNEXEC_SRC}"
  SEDDEFS="${SEDDEFS}\${SEDdA}UNEXEC_SRC\${SEDdB}UNEXEC_SRC\${SEDdC}${UNEXEC_SRC}\${SEDdD}
--- 2491,2496 ----
  {
  test -n "$verbose" && \
! echo "	defining" UNEXEC_SRC to be ${UNEXEC_SRC}
! echo "#define" UNEXEC_SRC ${UNEXEC_SRC} >> confdefs.h
  DEFS="$DEFS -DUNEXEC_SRC=${UNEXEC_SRC}"
  SEDDEFS="${SEDDEFS}\${SEDdA}UNEXEC_SRC\${SEDdB}UNEXEC_SRC\${SEDdC}${UNEXEC_SRC}\${SEDdD}
***************
*** 2269,2272 ****
--- 2507,2511 ----
  test -n "$verbose" && \
  echo "	defining HAVE_X_WINDOWS"
+ echo "#define" HAVE_X_WINDOWS 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_X_WINDOWS=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_X_WINDOWS\${SEDdB}HAVE_X_WINDOWS\${SEDdC}1\${SEDdD}
***************
*** 2282,2285 ****
--- 2521,2525 ----
  test -n "$verbose" && \
  echo "	defining HAVE_X11"
+ echo "#define" HAVE_X11 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_X11=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_X11\${SEDdB}HAVE_X11\${SEDdC}1\${SEDdD}
***************
*** 2295,2298 ****
--- 2535,2539 ----
  test -n "$verbose" && \
  echo "	defining HAVE_XFREE386"
+ echo "#define" HAVE_XFREE386 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_XFREE386=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_XFREE386\${SEDdB}HAVE_XFREE386\${SEDdC}1\${SEDdD}
***************
*** 2308,2311 ****
--- 2549,2553 ----
  test -n "$verbose" && \
  echo "	defining HAVE_X_MENU"
+ echo "#define" HAVE_X_MENU 1 >> confdefs.h
  DEFS="$DEFS -DHAVE_X_MENU=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_X_MENU\${SEDdB}HAVE_X_MENU\${SEDdC}1\${SEDdD}
***************
*** 2321,2324 ****
--- 2563,2567 ----
  test -n "$verbose" && \
  echo "	defining GNU_MALLOC"
+ echo "#define" GNU_MALLOC 1 >> confdefs.h
  DEFS="$DEFS -DGNU_MALLOC=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}GNU_MALLOC\${SEDdB}GNU_MALLOC\${SEDdC}1\${SEDdD}
***************
*** 2334,2337 ****
--- 2577,2581 ----
  test -n "$verbose" && \
  echo "	defining REL_ALLOC"
+ echo "#define" REL_ALLOC 1 >> confdefs.h
  DEFS="$DEFS -DREL_ALLOC=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}REL_ALLOC\${SEDdB}REL_ALLOC\${SEDdC}1\${SEDdD}
***************
*** 2347,2350 ****
--- 2591,2595 ----
  test -n "$verbose" && \
  echo "	defining LISP_FLOAT_TYPE"
+ echo "#define" LISP_FLOAT_TYPE 1 >> confdefs.h
  DEFS="$DEFS -DLISP_FLOAT_TYPE=1"
  SEDDEFS="${SEDDEFS}\${SEDdA}LISP_FLOAT_TYPE\${SEDdB}LISP_FLOAT_TYPE\${SEDdC}1\${SEDdD}
***************
*** 2366,2370 ****
  if [ "$run_in_place" = "1" ]; then
     lispdir='${srcdir}/lisp'
!    locallisppath='${srcdir}/site-lisp:${datadir}/emacs/site-lisp'
     etcdir='${srcdir}/etc'
     lockdir='${srcdir}/lock'
--- 2611,2615 ----
  if [ "$run_in_place" = "1" ]; then
     lispdir='${srcdir}/lisp'
!    locallisppath='${srcdir}/site-lisp'
     etcdir='${srcdir}/etc'
     lockdir='${srcdir}/lock'
***************
*** 2427,2430 ****
--- 2672,2676 ----
    exec_prefix=`echo "${exec_prefix}" | sed 's,\([^/]\)/*$,\1,'`
  
+ # Set default prefixes.
  if test -n "$prefix"; then
    test -z "$exec_prefix" && exec_prefix='${prefix}'
***************
*** 2435,2438 ****
--- 2681,2685 ----
  s%^exec_prefix\\([ 	]*\\)=\\([ 	]*\\).*$%exec_prefix\\1=\\2$exec_prefix%"
  fi
+ # Quote sed substitution magic chars in DEFS.
  cat >conftest.def <<EOF
  $DEFS
***************
*** 2441,2444 ****
--- 2688,2692 ----
  DEFS=`sed "$escape_ampersand_and_backslash" <conftest.def`
  rm -f conftest.def
+ # Substitute for predefined variables.
  
  trap 'rm -f config.status; exit 1' 1 3 15
***************
*** 2458,2463 ****
    case "\$arg" in
      -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo running /bin/sh $0 $configure_args
!     exec /bin/sh $0 $configure_args ;;
      *) echo "Usage: config.status --recheck" 2>&1; exit 1 ;;
    esac
--- 2706,2711 ----
    case "\$arg" in
      -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo running \${CONFIG_SHELL-/bin/sh} $0 $configure_args
!     exec \${CONFIG_SHELL-/bin/sh} $0 $configure_args ;;
      *) echo "Usage: config.status --recheck" 2>&1; exit 1 ;;
    esac
***************
*** 2499,2502 ****
--- 2747,2751 ----
  exec_prefix='$exec_prefix'
  prsub='$prsub'
+ extrasub='$extrasub'
  EOF
  cat >> config.status <<\EOF
***************
*** 2504,2511 ****
  top_srcdir=$srcdir
  
! # Allow make-time overrides of the generated file list.
! test -n "$gen_files" || gen_files="Makefile lib-src/Makefile oldXMenu/Makefile src/Makefile.in"
! 
! for file in .. $gen_files; do if [ "x$file" != "x.." ]; then
    srcdir=$top_srcdir
    # Remove last slash and all that follows it.  Not all systems have dirname.
--- 2753,2758 ----
  top_srcdir=$srcdir
  
! CONFIG_FILES=${CONFIG_FILES-"Makefile lib-src/Makefile oldXMenu/Makefile src/Makefile.in"}
! for file in .. ${CONFIG_FILES}; do if test "x$file" != x..; then
    srcdir=$top_srcdir
    # Remove last slash and all that follows it.  Not all systems have dirname.
***************
*** 2513,2523 ****
    if test "$dir" != "$file"; then
      test "$top_srcdir" != . && srcdir=$top_srcdir/$dir
!     test ! -d $dir && mkdir $dir
    fi
!   echo creating $file
!   rm -f $file
!   echo "# Generated automatically from `echo $file|sed 's|.*/||'`.in by configure." > $file
    sed -e "
  $prsub
  s%@CC@%$CC%g
  s%@LN_S@%$LN_S%g
--- 2760,2775 ----
    if test "$dir" != "$file"; then
      test "$top_srcdir" != . && srcdir=$top_srcdir/$dir
!     test ! -d "$dir" && mkdir "$dir"
    fi
!   echo creating "$file"
!   rm -f "$file"
!   comment_str="Generated automatically from `echo $file|sed 's|.*/||'`.in by configure."
!   case "$file" in
!     *.c | *.h | *.C | *.cc | *.m )  echo "/* $comment_str */" > "$file" ;;
!     * )          echo "# $comment_str"     > "$file" ;;
!   esac
    sed -e "
  $prsub
+ $extrasub
  s%@CC@%$CC%g
  s%@LN_S@%$LN_S%g
***************
*** 2553,2558 ****
  s%@DEFS@%-DHAVE_CONFIG_H%" $top_srcdir/${file}.in >> $file
  fi; done
! test -n "$gen_config" || gen_config=src/config.h
! echo creating $gen_config
  # These sed commands are put into SEDDEFS when defining a macro.
  # They are broken into pieces to make the sed script easier to manage.
--- 2805,2813 ----
  s%@DEFS@%-DHAVE_CONFIG_H%" $top_srcdir/${file}.in >> $file
  fi; done
! 
! CONFIG_HEADERS=${CONFIG_HEADERS-"src/config.h"}
! for file in .. ${CONFIG_HEADERS}; do if test "x$file" != x..; then
! echo creating $file
! 
  # These sed commands are put into SEDDEFS when defining a macro.
  # They are broken into pieces to make the sed script easier to manage.
***************
*** 2560,2579 ****
  # is the cpp macro being defined and VALUE is the value it is being given.
  # Each defining turns into a single global substitution command.
  #
  # SEDd sets the value in "#define NAME VALUE" lines.
! SEDdA='s@^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
! SEDdB='\([ 	][ 	]*\)[^ 	]*@\1#\2'
  SEDdC='\3'
! SEDdD='@g'
  # SEDu turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
! SEDuA='s@^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
! SEDuB='\([ 	]\)@\1#\2define\3'
  SEDuC=' '
! SEDuD='\4@g'
  # SEDe turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
! SEDeA='s@^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
! SEDeB='$@\1#\2define\3'
  SEDeC=' '
! SEDeD='@g'
  rm -f conftest.sed
  EOF
--- 2815,2836 ----
  # is the cpp macro being defined and VALUE is the value it is being given.
  # Each defining turns into a single global substitution command.
+ # Hopefully no one uses "!" as a variable value.
+ # Other candidates for the sed separators, like , and @, do get used.
  #
  # SEDd sets the value in "#define NAME VALUE" lines.
! SEDdA='s!^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
! SEDdB='\([ 	][ 	]*\)[^ 	]*!\1#\2'
  SEDdC='\3'
! SEDdD='!g'
  # SEDu turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
! SEDuA='s!^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
! SEDuB='\([ 	]\)!\1#\2define\3'
  SEDuC=' '
! SEDuD='\4!g'
  # SEDe turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
! SEDeA='s!^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
! SEDeB='$!\1#\2define\3'
  SEDeC=' '
! SEDeD='!g'
  rm -f conftest.sed
  EOF
***************
*** 2584,2595 ****
  EOF
  
- # Maximum number of lines to put in a single here document.
- maxshlines=9
- 
  # Break up $SEDDEFS (now in conftest.sh) because some shells have a limit
  # on the size of here documents.
  
  while :
  do
    lines=`grep -c . conftest.sh`
    if test -z "$lines" || test "$lines" -eq 0; then break; fi
--- 2841,2853 ----
  EOF
  
  # Break up $SEDDEFS (now in conftest.sh) because some shells have a limit
  # on the size of here documents.
  
+ # Maximum number of lines to put in a single here document.
+ maxshlines=9
+ 
  while :
  do
+   # wc gives bogus results for an empty file on some systems.
    lines=`grep -c . conftest.sh`
    if test -z "$lines" || test "$lines" -eq 0; then break; fi
***************
*** 2618,2622 ****
  # Break up the sed commands because old seds have small limits.
  maxsedlines=20
! cp $top_srcdir/$gen_config.in conftest.h1
  while :
  do
--- 2876,2880 ----
  # Break up the sed commands because old seds have small limits.
  maxsedlines=20
! cp $top_srcdir/$file.in conftest.h1
  while :
  do
***************
*** 2632,2645 ****
  done
  rm -f conftest.sed conftest.h
! echo "/* $gen_config.  Generated automatically by configure.  */" > conftest.h
  cat conftest.h1 >> conftest.h
  rm -f conftest.h1
! if cmp -s $gen_config conftest.h 2>/dev/null; then
    # The file exists and we would not be changing it.
    rm -f conftest.h
  else
!   rm -f $gen_config
!   mv conftest.h $gen_config
  fi
  
  
--- 2890,2906 ----
  done
  rm -f conftest.sed conftest.h
! echo "/* $file.  Generated automatically by configure.  */" > conftest.h
  cat conftest.h1 >> conftest.h
  rm -f conftest.h1
! if cmp -s $file conftest.h 2>/dev/null; then
    # The file exists and we would not be changing it.
+   echo "$file is unchanged"
    rm -f conftest.h
  else
!   rm -f $file
!   mv conftest.h $file
  fi
+ fi; done
+ 
  
  
***************
*** 2647,2651 ****
  EOF
  chmod +x config.status
! test -n "$no_create" || ./config.status
   
  # Build src/Makefile from ${srcdir}/src/Makefile.in.  This must be done
--- 2908,2912 ----
  EOF
  chmod +x config.status
! ${CONFIG_SHELL-/bin/sh} config.status
   
  # Build src/Makefile from ${srcdir}/src/Makefile.in.  This must be done
***************
*** 2665,2668 ****
--- 2926,2930 ----
    topsrcdir='"${topsrcdir}"';
  ( cd ./src;
+   rm -f junk.c;
    sed -e '\''s/^# Generated.*//'\'' -e '\''s%/\*\*/#.*%%'\'' < Makefile.in > junk.c;
    eval `echo ${CPP} -I. -I${topsrcdir}/src ${CPPFLAGS} junk.c \>junk.cpp`;
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/configure.in emacs-19.22/configure.in
*** emacs-19.21/configure.in	Tue Nov 16 07:13:09 1993
--- emacs-19.22/configure.in	Sun Nov 21 04:01:42 1993
***************
*** 705,708 ****
--- 705,713 ----
    ;;
  
+   ## Unspecified sysv on an ncr machine defaults to svr4.
+   i[34]86-ncr-sysv* )
+     machine=intel386 opsys=usg5-4
+   ;;
+ 
    ## Intel 860
    i860-*-sysvr4* )
***************
*** 1337,1341 ****
  if [ "$run_in_place" = "1" ]; then
     lispdir='${srcdir}/lisp'
!    locallisppath='${srcdir}/site-lisp:${datadir}/emacs/site-lisp'
     etcdir='${srcdir}/etc'
     lockdir='${srcdir}/lock'
--- 1342,1346 ----
  if [ "$run_in_place" = "1" ]; then
     lispdir='${srcdir}/lisp'
!    locallisppath='${srcdir}/site-lisp'
     etcdir='${srcdir}/etc'
     lockdir='${srcdir}/lock'
***************
*** 1415,1418 ****
--- 1420,1424 ----
    topsrcdir='"${topsrcdir}"';
  ( cd ./src;
+   rm -f junk.c;
    sed -e '\''s/^# Generated.*//'\'' -e '\''s%/\*\*/#.*%%'\'' < Makefile.in > junk.c;
    eval `echo ${CPP} -I. -I${topsrcdir}/src ${CPPFLAGS} junk.c \>junk.cpp`;
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/etc/ChangeLog emacs-19.22/etc/ChangeLog
*** emacs-19.21/etc/ChangeLog	Tue Nov 16 06:14:29 1993
--- emacs-19.22/etc/ChangeLog	Sat Nov 27 04:42:41 1993
***************
*** 1,2 ****
--- 1,6 ----
+ Sat Nov 27 04:42:36 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.22 released.
+ 
  Tue Nov 16 06:14:24 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/etc/FTP emacs-19.22/etc/FTP
*** emacs-19.21/etc/FTP	Tue Nov 16 07:27:26 1993
--- emacs-19.22/etc/FTP	Fri Nov 19 22:06:57 1993
***************
*** 141,156 ****
  col.hp.com:/mirrors/gnu, ftp.cs.columbia.edu:/archives/gnu/prep,
  ftp.cs.widener.edu, itstd.sri.com, a.cs.uiuc.edu, uxc.cso.uiuc.edu,
! scam.berkeley.edu, jaguar.utah.edu, gatekeeper.dec.com:/pub/gnu,
! archive.cis.ohio-state.edu, and ftp.uu.net:/archive/systems/gnu).  And
! these foreign sites: ftp.cs.ubc.ca:/mirror2/gnu (Canada, daily full
! mirror, ran by ftp-admin@cs.ubc.ca), archie.au:/gnu (Australia
! (archie.oz or archie.oz.au for ACSnet)),
! ftp.technion.ac.il:/pub/unsupported/gnu (Israel, daily full mirror,
! ran by ftp-admin), ftp.sun.ac.za:/pub/gnu (South Africa),
! ftp.informatik.tu-muenchen.de, ftp.informatik.rwth-aachen.de or
! germany.eu.net (mirror ran by archive-admin@germany.eu.net) (Germany),
! isy.liu.se, ftp.stacken.kth.se or ftp.luth.se:/pub/unix/gnu (Sweden),
  hp4nl.nluug.nl (Netherlands), ftp.win.tue.nl (Netherlands, Internet
! Address 131.155.70.100), nic.funet.fi:/pub/gnu (Finland 128.214.6.100,
  ran by gnu-adm), ftp.denet.dk (Denmark), ugle.unit.no (Norway
  129.241.1.97), ftp.eunet.ch or nic.switch.ch:/mirror/gnu
--- 141,157 ----
  col.hp.com:/mirrors/gnu, ftp.cs.columbia.edu:/archives/gnu/prep,
  ftp.cs.widener.edu, itstd.sri.com, a.cs.uiuc.edu, uxc.cso.uiuc.edu,
! scam.berkeley.edu, jaguar.utah.edu, ftp.hawaii.edu:/mirrors/gnu,
! gatekeeper.dec.com:/pub/gnu, archive.cis.ohio-state.edu, and
! ftp.uu.net:/archive/systems/gnu.  And these foreign sites:
! ftp.cs.ubc.ca:/mirror2/gnu (Canada, daily full mirror, ran by
! ftp-admin@cs.ubc.ca), archie.au:/gnu (Australia (archie.oz or
! archie.oz.au for ACSnet)), ftp.technion.ac.il:/pub/unsupported/gnu
! (Israel, daily full mirror, ran by ftp-admin), ftp.sun.ac.za:/pub/gnu
! (South Africa), ftp.informatik.tu-muenchen.de,
! ftp.informatik.rwth-aachen.de or germany.eu.net (mirror ran by
! archive-admin@germany.eu.net) (Germany), isy.liu.se,
! ftp.stacken.kth.se or ftp.luth.se:/pub/unix/gnu (Sweden),
  hp4nl.nluug.nl (Netherlands), ftp.win.tue.nl (Netherlands, Internet
! Address 131.155.70.100), ftp.funet.fi:/pub/gnu (Finland 128.214.6.100,
  ran by gnu-adm), ftp.denet.dk (Denmark), ugle.unit.no (Norway
  129.241.1.97), ftp.eunet.ch or nic.switch.ch:/mirror/gnu
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/etc/JOKES emacs-19.22/etc/JOKES
*** emacs-19.21/etc/JOKES	Tue Nov 16 07:27:28 1993
--- emacs-19.22/etc/JOKES	Wed Nov 17 19:54:47 1993
***************
*** 625,628 ****
--- 625,634 ----
  
  
+ From: elvis@gnu.ai.mit.edu
+ To: emacs-19-bugs@gnu.ai.mit.edu
+ Subject: missing from etc/emacs.names
+ Date: Thu, 20 May 93 02:21:27 edt
+ 
+ 
  Elvis
  Masterminds
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/etc/MACHINES emacs-19.22/etc/MACHINES
*** emacs-19.21/etc/MACHINES	Tue Nov 16 07:27:32 1993
--- emacs-19.22/etc/MACHINES	Sat Nov 27 06:57:37 1993
***************
*** 194,198 ****
  DECstation (mips-dec-ultrix or mips-dec-osf)
  
!   Emacs runs under Ultrix and OSF/1 as of 19.7.
    
    If you are not using DECnet, then remove the definition of
--- 194,198 ----
  DECstation (mips-dec-ultrix or mips-dec-osf)
  
!   19.22 is believed to work on Ultrix 4.2.
    
    If you are not using DECnet, then remove the definition of
***************
*** 413,418 ****
  IBM RT/PC (romp-ibm-bsd or romp-ibm-aix)
  
-   18.52 worked on both operating systems.
    Use romp-ibm-bsd for the 4.2-like system and romp-ibm-aix for AIX.
  
    On BSD, if you have trouble, try compiling with a different compiler.
--- 413,418 ----
  IBM RT/PC (romp-ibm-bsd or romp-ibm-aix)
  
    Use romp-ibm-bsd for the 4.2-like system and romp-ibm-aix for AIX.
+   19.22 is reported to work under bsd.  We don't know about AIX.
  
    On BSD, if you have trouble, try compiling with a different compiler.
***************
*** 524,542 ****
    Note that the 3030 is the same as the Iris 2500 Turbo.
  
! Iris 4D (mips-sgi-irix3.3 or mips-sgi-irix4.0)
  
!   18.58 is known to work on Silicon Graphics 4D series machines
!   with IRIX 3.3 or IRIX 4.0.  Version 19 should support the
!   ANSI C compiler version 3.10.
! 
!   Compiling Emacs using the system's compiler with -O
!   does not work in Irix 4.0.5; don't use -O (or use GCC).
! 
!   Most irix3.3 systems do not have an ANSI C compiler, but a few do.
!   If you are using the ANSI C compiler, you may need to add
!       #define C_SWITCH_MACHINE -cckr
!   to config.h.
  
!   There is a bug in IRIX that can sometimes leave ptys owned by root
    with a permission of 622.  This causes malfunctions in use of
    subprocesses of Emacs.  Irix versions 4.0 and later with GNU Emacs
--- 524,542 ----
    Note that the 3030 is the same as the Iris 2500 Turbo.
  
! Iris 4D (mips-sgi-irix[45].*)
  
!   19.22 is known to work on all Silicon Graphics machines running
!   IRIX 4.0.5 or IRIX 5.1.  Emacs 18.58 works with IRIX 3.3.
! 
!   Compiling with GCC on IRIX 5 is said to fail, perhaps because GCC
!   produces something src/unexelfsgi.c doesn't understand.
! 
!   Compiling with -O using IRIX compilers prior to 3.10.1 may not work.
!   Don't use -O or use GCC instead.
  
!   Most IRIX 3.3 systems do not have an ANSI C compiler, but a few do.
!   Compile Emacs 18 with the -cckr switch on these machines.
! 
!   There is a bug in IRIX 3.3 that can sometimes leave ptys owned by root
    with a permission of 622.  This causes malfunctions in use of
    subprocesses of Emacs.  Irix versions 4.0 and later with GNU Emacs
***************
*** 727,731 ****
  			       sparc-sun-solaris2.*)
  
!   Emacs runs on Sparcs and Sun 3's, as of version 19.7.
  
    It's important to include the SunOS version number in the
--- 727,734 ----
  			       sparc-sun-solaris2.*)
  
!   19.22 is believed to work on Sparcs and Sun 3's.  Some people report
!   that Emacs crashes immediately on startup when used with a non-X
!   terminal, but we think this is due to compiling with GCC and failing
!   to use GCC's "fixed" system header files.
  
    It's important to include the SunOS version number in the
***************
*** 738,741 ****
--- 741,751 ----
    and `i386' for Sun Roadrunners.  i386 calls for Sunos4.0.
  
+   Some people report crashes on SunOS 4.1.3 if SYSTEM_MALLOC is defined.
+   Others have reported that Emacs works if SYSTEM_MALLOC is defined, and not
+   if it is undefined.  So far we do not know why results vary in this way.
+   The sources are set up so that SYSTEM_MALLOC is defined; if that crashes,
+   or if you want the benefit of the relocating memory allocator, you can
+   try enabling the #undef SYSTEM_MALLOC in src/s/sunos4-1-3.h.
+ 
    On Solaris 2, you need to install patch 100947-02 to fix a system bug.
    Presumably this patch comes from Sun.  You must alter the definition of
***************
*** 751,754 ****
--- 761,768 ----
    rather than an Emacs bug.
  
+   On Solaris 2.2 with SUNWspro 2.0.1, src/Makefile gets bad data--
+   spurious spaces.  This is probably the fault of CPP.  No workaround yet
+   except to compile with GCC instead.
+ 
    On Solaris, if linking gives the error that `bss_end' and `main'
    are undefined, it may mean that the C preprocessor did the wrong
***************
*** 1051,1055 ****
  
  Local variables:
! mode: text
  fill-prefix: "  "
  End:
--- 1065,1069 ----
  
  Local variables:
! mode: indented-text
  fill-prefix: "  "
  End:
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/etc/NEWS emacs-19.22/etc/NEWS
*** emacs-19.21/etc/NEWS	Tue Nov 16 01:35:11 1993
--- emacs-19.22/etc/NEWS	Sat Nov 27 13:43:11 1993
***************
*** 1,3 ****
! GNU Emacs NEWS -- history of user-visible changes.  9 Oct 1993
  Copyright (C) 1993 Free Software Foundation, Inc.
  See the end for copying conditions.
--- 1,3 ----
! GNU Emacs NEWS -- history of user-visible changes.  27 Nov 1993
  Copyright (C) 1993 Free Software Foundation, Inc.
  See the end for copying conditions.
***************
*** 6,9 ****
--- 6,71 ----
  For older news, see the file ONEWS.  For Lisp changes in Emacs 19,
  see the file LNEWS.
+ 
+ Changes in 19.22.
+ 
+ * The mouse click M-mouse-2 now inserts the current secondary
+ selection (from Emacs or any other X client) where you click.
+ It does not move point.
+ This command is called mouse-yank-secondary.
+ 
+ mouse-kill-secondary no longer has a key binding by default.
+ Clicking M-mouse-3 (mouse-secondary-save-then-kill) twice
+ may be a convenient enough way of killing the secondary selection.
+ Or perhaps there should be a keyboard binding for killing the
+ secondary selection.  Any suggestions?
+ 
+ * New packages:
+ 
+ ** `icomplete' provides character-by-character information
+ about what you could complete if you type TAB.
+ 
+ ** `avoid' moves the mouse away from point so that it doesn't hide
+ your typing.
+ 
+ ** `shadowfile' helps you update files that are supposed to be stored
+ identically in different places (perhaps on different machines).
+ 
+ * C-h p now knows about four additional keywords: data, faces, mouse,
+ and matching.
+ 
+ * The key for starting an inferior Lisp process, in Lisp mode,
+ is now C-c C-z instead of C-c C-l.
+ 
+ * When the VC commands ask whether to save the buffer, if you say no,
+ they signal an error.  This is so that you won't operate on the wrong
+ data.
+ 
+ * ISO Accents mode now supports `"s' as a way of typing German sharp s.
+ 
+ * By default, comint buffers (including Shell mode and debuggers)
+ no longer try to scroll to keep the cursor on the bottom line.
+ This feature was added in 19.21 but did not work smoothly enough.
+ 
+ * Emacs now handles the window manager "delete window" operation.
+ 
+ * Display of buffers with text properties is much faster now.
+ 
+ * The feature previously announced whereby `insert' does not inherit
+ text properties from surrounding text was not fully implemented
+ before; but now it is.  use `insert-and-inherit' if you wish to
+ inherit sticky properties from the surrounding text.
+ 
+ * The functions next-property-change, previous-property-change,
+ next-single-property-change, and previous-single-property-change
+ now take one additional optional argument LIMIT that is a position at
+ which to stop scanning.  If scan ends without finding the property
+ change sought, these functions return the specified limit.
+ 
+ The value returned by previous-single-property-change and
+ previous-property-change, when they do find a change, is now one
+ greater than what it used to be.  It is the position between the two
+ characters whose properties differ, which is one greater than the
+ position of the first character found (while scanning back) with
+ different properties.
  
  User editing changes in version 19.21.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/install.sh emacs-19.22/install.sh
*** emacs-19.21/install.sh
--- emacs-19.22/install.sh	Sat Nov 27 14:04:53 1993
***************
*** 0 ****
--- 1,119 ----
+ #!/bin/sh
+ 
+ #
+ # install - install a program, script, or datafile
+ # This comes from X11R5; it is not part of GNU.
+ #
+ # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
+ #
+ # This script is compatible with the BSD install script, but was written
+ # from scratch.
+ #
+ 
+ 
+ # set DOITPROG to echo to test this script
+ 
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
+ doit="${DOITPROG-}"
+ 
+ 
+ # put in absolute paths if you don't have them in your path; or use env. vars.
+ 
+ mvprog="${MVPROG-mv}"
+ cpprog="${CPPROG-cp}"
+ chmodprog="${CHMODPROG-chmod}"
+ chownprog="${CHOWNPROG-chown}"
+ chgrpprog="${CHGRPPROG-chgrp}"
+ stripprog="${STRIPPROG-strip}"
+ rmprog="${RMPROG-rm}"
+ 
+ instcmd="$mvprog"
+ chmodcmd=""
+ chowncmd=""
+ chgrpcmd=""
+ stripcmd=""
+ rmcmd="$rmprog -f"
+ mvcmd="$mvprog"
+ src=""
+ dst=""
+ 
+ while [ x"$1" != x ]; do
+     case $1 in
+ 	-c) instcmd="$cpprog"
+ 	    shift
+ 	    continue;;
+ 
+ 	-m) chmodcmd="$chmodprog $2"
+ 	    shift
+ 	    shift
+ 	    continue;;
+ 
+ 	-o) chowncmd="$chownprog $2"
+ 	    shift
+ 	    shift
+ 	    continue;;
+ 
+ 	-g) chgrpcmd="$chgrpprog $2"
+ 	    shift
+ 	    shift
+ 	    continue;;
+ 
+ 	-s) stripcmd="$stripprog"
+ 	    shift
+ 	    continue;;
+ 
+ 	*)  if [ x"$src" = x ]
+ 	    then
+ 		src=$1
+ 	    else
+ 		dst=$1
+ 	    fi
+ 	    shift
+ 	    continue;;
+     esac
+ done
+ 
+ if [ x"$src" = x ]
+ then
+ 	echo "install:  no input file specified"
+ 	exit 1
+ fi
+ 
+ if [ x"$dst" = x ]
+ then
+ 	echo "install:  no destination specified"
+ 	exit 1
+ fi
+ 
+ 
+ # If destination is a directory, append the input filename; if your system
+ # does not like double slashes in filenames, you may need to add some logic
+ 
+ if [ -d $dst ]
+ then
+ 	dst="$dst"/`basename $src`
+ fi
+ 
+ # Make a temp file name in the proper directory.
+ 
+ dstdir=`dirname $dst`
+ dsttmp=$dstdir/#inst.$$#
+ 
+ # Move or copy the file name to the temp name
+ 
+ $doit $instcmd $src $dsttmp
+ 
+ # and set any options; do chmod last to preserve setuid bits
+ 
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi
+ 
+ # Now rename the file to the real destination.
+ 
+ $doit $rmcmd $dst
+ $doit $mvcmd $dsttmp $dst
+ 
+ 
+ exit 0
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lib-src/ChangeLog emacs-19.22/lib-src/ChangeLog
*** emacs-19.21/lib-src/ChangeLog	Tue Nov 16 04:22:34 1993
--- emacs-19.22/lib-src/ChangeLog	Sat Nov 27 04:41:54 1993
***************
*** 1,2 ****
--- 1,14 ----
+ Sat Nov 27 04:41:49 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.22 released.
+ 
+ Fri Nov 26 06:08:35 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Makefile.in (mostlyclean): Make it distinct from clean.
+ 
+ Wed Nov 24 07:24:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Makefile.in (${archlibdir}): Don't do chown or chgrp.
+ 
  Tue Nov 16 03:23:28 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lib-src/Makefile.in emacs-19.22/lib-src/Makefile.in
*** emacs-19.21/lib-src/Makefile.in	Tue Nov 16 04:22:10 1993
--- emacs-19.22/lib-src/Makefile.in	Fri Nov 26 06:08:32 1993
***************
*** 126,136 ****
  	  done ; \
  	fi
- 	@echo
- 	@echo "Changing the owner and group of Emacs's utility programs to \`bin'."
- 	@echo "(You may ignore errors here if you don't care about this.)"
- 	-for file in ${UTILITIES} ${SCRIPTS} ; do \
- 	  chgrp bin ${archlibdir}/$${file} ; \
- 	  chown bin ${archlibdir}/$${file} ; \
- 	done
  
  # We don't need to install `wakeup' explicitly, because it will be copied when
--- 126,129 ----
***************
*** 159,164 ****
  	 rm -f ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS})
  
! clean mostlyclean:
! 	-rm -f ${INSTALLABLES} ${UTILITIES} core *.o
  
  distclean: clean
--- 152,160 ----
  	 rm -f ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS})
  
! mostlyclean:
! 	-rm -f core *.o
! 
! clean: mostlyclean
! 	-rm -f ${INSTALLABLES} ${UTILITIES}
  
  distclean: clean
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/ChangeLog emacs-19.22/lisp/ChangeLog
*** emacs-19.21/lisp/ChangeLog	Tue Nov 16 05:47:19 1993
--- emacs-19.22/lisp/ChangeLog	Sat Nov 27 13:42:18 1993
***************
*** 1,2 ****
--- 1,219 ----
+ Sat Nov 27 02:51:34 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.22 released.
+ 
+ 	* vc.el (vc-buffer-sync): Signal error if user says no.
+ 
+ 	* vc-hooks.el (vc-mode-line): Make buffer read-only for root
+ 	if file is locked.
+ 
+ 	* mouse.el (mouse-set-font): Update nonstandard faces that are supposed
+ 	to use a modification of the frame's font.
+ 
+ Fri Nov 26 15:41:51 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* rmail.el (rmail-variables): Abbreviate truename for comparison.
+ 
+ Thu Nov 25 01:51:27 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* faces.el (make-face-unitalic, make-face-unbold, make-face-bold)
+ 	(make-face-bold-italic, make-face-italic): If frame is t,
+ 	do the special handling only if face-font is a list.
+ 
+ 	* etags.el (tags-add-tables): New variable.
+ 	(visit-tags-table-buffer): Use it.
+ 	(default-tags-table-function): No longer user var, no longer autoload.
+ 
+ 	* ange-ftp.el (ange-ftp-binary-file-name-regexp):
+ 	Accept .tgz and .taz files.
+ 
+ 	* tpu-edt.el (tpu-revision): Variable deleted.
+ 
+ Wed Nov 24 15:08:12 1993  Rob Riepel  (riepel@Snowflake.Stanford.edu)
+ 
+         * tpu-edt.el (tpu-quoted-insert): New function.
+         (tpu-reset-control-keys): Remove C-f mapping.
+         Insert (in file) fsets for free/bound cursor, scroll
+         margins, key mappings for same.
+ 
+         * tpu-extras.el: Remove free/bound cursor and scroll
+         margin fsets and key mappings.  Add autoload cookies.
+ 
+         * tpu-doc.el: Add sample test for tpu-set-scroll-margins.
+ 
+ Wed Nov 24 00:03:32 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* comint.el (comint-send-input): Don't call comint-arguments
+ 	to set HISTORY, even if comint-input-autoexpand is not `history'.
+ 	When comint-input-autoexpand is `history', undo part of prev change:
+ 	do put INPUT back in the buffer in place of expanded hist.
+ 
+ 	* tabify.el: Add a provide.
+ 
+ 	* vc.el (vc-next-action): Doc fix.
+ 	(vc-checkout-carefully): New variable.
+ 	(vc-next-action-on-file): Obey vc-checkout-carefully.
+ 
+ 	* vc-hooks.el (vc-make-backup-files): Doc fix.
+ 	(vc-rcs-status): Use colon, not dash, in the string LOCKS.
+ 
+ 	* rmailsort.el (rmail-sort-messages): In summary buf, go to rmail buf.
+ 
+ 	* subr.el (walk-windows): If start at minibuf window, do return to it.
+ 
+ 	* comint.el (comint-send-input): Don't call comint-arguments while
+ 	computing the value for history.
+ 	(comint-delim-arg): Treat quoted delim chars as non-delims.
+ 
+ Tue Nov 23 01:23:38 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* simple.el (count-lines): In selective-display case,
+ 	adjust value if end is not at bol.
+ 
+ 	* isearch.el (isearch-other-meta-char): Correct the test for a split-up
+ 	mode line or scroll bar mouse event.
+ 
+ 	* icomplete.el: New file.
+ 
+ 	* info.el (Info-follow-reference): Correct one-off error in
+ 	comparing start-point.
+ 
+ 	* dired-aux.el (dired-diff): Require diff.
+ 
+ 	* telnet.el (telnet-rsh-program): New variable.
+ 	(rsh): Use it.
+ 	(telnet-count): Now buffer-local.
+ 
+ 	* finder.el (finder-known-keywords): Add data, faces, mouse, matching.
+ 
+ 	* edebug.el: Delete periods from error messages.
+ 	(edebug-functionp): Recognize compiled functions.
+ 	(edebug-display): Supply missing parens in let.
+ 
+ 	* simple.el (repeat-complex-command): Undo Oct 2 change.
+ 
+ 	* c-mode.el (c-indent-region): Don't goto-char sexpend if it's nil.
+ 	As first thing, advance to a nonblank line.
+ 
+ 	* view.el (View-scroll-lines-forward):
+ 	Allow scrolling backward at the end of the buffer.
+ 
+ 	* comint.el (comint-preinput-scroll-to-bottom): If SCROLL is `this',
+ 	don't bother with walk-windows; just hack the selected window.
+ 
+ 	* avoid.el: New file.
+ 	* shadowfile.el: New file.
+ 
+ Mon Nov 22 11:07:43 1993  Morten Welinder  (terra@tyr.diku.dk)
+ 
+ 	* add-log.el (add-change-log-entry): put buffer in change-log-mode.
+ 	(find-change-log): correct calculation of file one directory out.
+ 
+ Mon Nov 22 01:32:59 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* dired.el (dired-goto-file): Don't try matching one line twice.
+ 
+ 	* rmailsum.el (rmail-summary-wipe): If rmail buffer is not visible,
+ 	switch to it in this window.
+ 	(rmail-summary-mode): Doc fix.
+ 
+ 	* dired.el (dired-readin-insert): Expand default-directory and dirname
+ 	before comparing them.
+ 	(dired-internal-noselect): Set default-directory to abbreviated name.
+ 
+ 	* mouse.el (mouse-save-then-kill-delete-region):
+ 	Call undo-boundary at the beginning and at the end.
+ 
+ 	* gnuspost.el (gnus-inews-do-fcc): If gnus-author-copy-saver
+ 	is rmail-output, call rmail-output the proper way.
+ 
+ 	* man.el (Man-specified-section-option): New variable.
+ 	(Man-translate-references): Use that variable.
+ 
+ Sun Nov 21 01:11:19 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* mouse.el (mouse-start-end): Use MODE mod 3.
+ 	(mouse-save-then-kill): Test mouse-selection-click-count mod 3.
+ 	(mouse-drag-secondary, mouse-secondary-save-then-kill): Likewise.
+ 
+ 	* inf-lisp.el (inferior-lisp-proc): Clean up error message.
+ 
+ 	* iso-acc.el (iso-accents-enable): New variable.
+ 	(key-translation-map): Enable an accent only if in iso-accents-enable.
+ 
+ 	* lisp-mode.el (lisp-eval-defun): Renamed from lisp-send-defun.
+ 	(lisp-mode-map): Use new name lisp-eval-defun.
+ 	Move run-lisp to C-x C-z.
+ 
+ 	* sendmail.el (mail-yank-original):
+ 	Delete windows on selected frame only.
+ 
+ 	* mouse.el (mouse-kill-secondary): Do the kill in proper buffer.
+ 	Give error if in the wrong buffer.
+ 	(mouse-secondary-save-then-kill): Give error if click is not in
+ 	the buffer already used for secondary selection.
+ 	Don't switch windows; always temporarily switch buffers.
+ 
+ 	* mail-utils.el (mail-fetch-field): Exclude trailing whitespace.
+ 	Delete duplicate (goto-char (point-min)).
+ 
+ 	* faces.el (x-resolve-font-name): Undo previous change.
+ 
+ 	* info.el (Info-edit): Use proper map in substitute-command-keys.
+ 
+ Sat Nov 20 00:49:20 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* tex-mode.el (tex-send-command): Wait for output first,
+ 	if text has not changed since previous tex-send-command.
+ 	(tex-send-command-modified-tick): New buffer-local variable.
+ 
+ 	* texinfo.el (texinfo-tex-region): Use tex-send-command to do commands.
+ 	(texinfo-tex-buffer, texinfo-texindex, texinfo-tex-print): Likewise.
+ 	(texinfo-delete-from-print-queue, texinfo-quit-job): Likewise.
+ 
+ 	* tex-mode.el (tex-start-shell): Don't use -v option.
+ 	(tex-send-command): Insert text in the buffer, then use
+ 	comint-send-input to send it.
+ 
+ 	* etags.el (tags-complete-tag): Bind enable-recursive-minibuffers to t.
+ 
+ Fri Nov 19 18:36:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* startup.el (command-line): Set init-file-had-error to t or nil.
+ 	(command-line-1): Inhibit startup message if init-file-had-error.
+ 
+ Fri Nov 19 17:13:32 1993  Robert J. Chassell  (bob@geech.gnu.ai.mit.edu)
+ 
+         * texinfmt.el (texinfo-if-set, texinfo-if-clear): Act
+           appropriately when flat neither set nor cleared.
+ 
+ Fri Nov 19 10:57:31 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* gnuspost.el (gnus-inews-do-fcc): Use gnus-output-to-rmail
+ 	if file is an rmail file.  Pass extra args to rmail-output.
+ 
+ 	* simple.el (eval-expression): Don't bind minibuffer-history-sexp-flag.
+ 	(edit-and-eval-command): Likewise.
+ 
+ 	* ange-ftp.el (ange-ftp-parse-dired-listing): Skip extra blank line
+ 	after the "total" line.
+ 
+ 	* hexl.el (hexlify-buffer): Add autoload cookie.
+ 
+ Thu Nov 18 00:24:34 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* iso-acc.el (iso-accents-list): Fix entries for 'y and ~c.
+ 	(iso-accents-list): Add "s.
+ 
+ Wed Nov 17 08:11:03 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* comint.el (comint-scroll-show-maximum-output): Make default nil.
+ 
+ 	* gnus.el (gnus-summary-save-in-mail): Use rmail-output
+ 	if the file is not an Rmail file.
+ 
+ 	* font-lock.el (font-lock-hack-keywords):
+ 	Handle next-single-property-change returning nil.
+ 
  Tue Nov 16 01:14:29 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/add-log.el emacs-19.22/lisp/add-log.el
*** emacs-19.21/lisp/add-log.el	Tue Nov 16 01:14:57 1993
--- emacs-19.22/lisp/add-log.el	Tue Nov 23 20:53:16 1993
***************
*** 104,108 ****
  				       parent-dir))))
  	;; Move up to the parent dir and try again.
! 	(setq file1 (expand-file-name (change-log-name) parent-dir)))
        ;; If we found a change log in a parent, use that.
        (if (or (get-file-buffer file1) (file-exists-p file1))
--- 104,110 ----
  				       parent-dir))))
  	;; Move up to the parent dir and try again.
! 	(setq file1 (expand-file-name 
! 		     (file-name-nondirectory (change-log-name))
! 	     parent-dir)))
        ;; If we found a change log in a parent, use that.
        (if (or (get-file-buffer file1) (file-exists-p file1))
***************
*** 151,154 ****
--- 153,158 ----
  	(find-file-other-window file-name)
        (find-file file-name))
+     (or (eq major-mode 'change-log-mode)
+ 	(change-log-mode))
      (undo-boundary)
      (goto-char (point-min))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/advice.el emacs-19.22/lisp/advice.el
*** emacs-19.21/lisp/advice.el	Tue Nov 16 07:13:49 1993
--- emacs-19.22/lisp/advice.el	Tue Nov 23 15:11:47 1993
***************
*** 6,10 ****
  ;; Created: 12 Dec 1992
  ;; Version: advice.el,v 2.1 1993/05/26 00:07:58 hans Exp
! ;; Keywords: advice, function hooks
  
  ;; This file is part of GNU Emacs.
--- 6,10 ----
  ;; Created: 12 Dec 1992
  ;; Version: advice.el,v 2.1 1993/05/26 00:07:58 hans Exp
! ;; Keywords: extensions, lisp, tools
  
  ;; This file is part of GNU Emacs.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/ange-ftp.el emacs-19.22/lisp/ange-ftp.el
*** emacs-19.21/lisp/ange-ftp.el	Tue Nov 16 07:13:53 1993
--- emacs-19.22/lisp/ange-ftp.el	Thu Nov 25 01:52:03 1993
***************
*** 708,712 ****
    (concat "\\.[zZ]$\\|\\.lzh$\\|\\.arc$\\|\\.zip$\\|\\.zoo$\\|\\.tar$\\|"
  	  "\\.dvi$\\|\\.ps$\\|\\.elc$\\|TAGS$\\|\\.gif$\\|"
! 	  "\\.EXE\\(;[0-9]+\\)?$\\|\\.[zZ]-part-..$\\|\\.gz$")
    "*If a file matches this regexp then it is transferred in binary mode.")
  
--- 708,713 ----
    (concat "\\.[zZ]$\\|\\.lzh$\\|\\.arc$\\|\\.zip$\\|\\.zoo$\\|\\.tar$\\|"
  	  "\\.dvi$\\|\\.ps$\\|\\.elc$\\|TAGS$\\|\\.gif$\\|"
! 	  "\\.EXE\\(;[0-9]+\\)?$\\|\\.[zZ]-part-..$\\|\\.gz$\\|"
! 	  "\\.taz$\\|\\.tgz$")
    "*If a file matches this regexp then it is transferred in binary mode.")
  
***************
*** 857,861 ****
  ;;;; ------------------------------------------------------------
  
! (defconst ange-ftp-version "$Revision: 1.35 $")
  
  (defvar ange-ftp-data-buffer-name " *ftp data*"
--- 858,862 ----
  ;;;; ------------------------------------------------------------
  
! (defconst ange-ftp-version "$Revision: 1.37 $")
  
  (defvar ange-ftp-data-buffer-name " *ftp data*"
***************
*** 2438,2441 ****
--- 2439,2444 ----
       ((looking-at "^total [0-9]+$")
        (forward-line 1)
+       ;; Some systems put in a blank line here.
+       (if (eolp) (forward-line 1))
        (ange-ftp-ls-parser))
       ((looking-at "[^\n]+\\( not found\\|: Not a directory\\)\n\\'")
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/avoid.el emacs-19.22/lisp/avoid.el
*** emacs-19.21/lisp/avoid.el
--- emacs-19.22/lisp/avoid.el	Tue Nov 23 18:54:27 1993
***************
*** 0 ****
--- 1,234 ----
+ ;;; avoid.el -- make mouse pointer stay out of the way of editing.
+ 
+ ;;; Copyright (C) 1993 Free Software Foundation, Inc.
+ 
+ ;; Author: Boris Goldowsky <boris@cs.rochester.edu>
+ ;; Keywords: mouse
+ ;; Version: 1.10
+ 
+ ;; This file is part of GNU Emacs.
+ 
+ ;; GNU Emacs is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 2, or (at your option)
+ ;; any later version.
+ 
+ ;; GNU Emacs is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;; GNU General Public License for more details.
+ 
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with GNU Emacs; see the file COPYING.  If not, write to
+ ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ 
+ ;;; Commentary:
+ ;;;
+ ;;; For those who are annoyed by the mouse pointer obscuring text,
+ ;;; this mode moves the mouse pointer - either just a little out of
+ ;;; the way, or all the way to the corner of the frame. 
+ ;;; To use, load or evaluate this file and type M-x mouse-avoidance-mode .
+ ;;; To set up permanently, put this file on your load-path and put the
+ ;;; following in your .emacs: 
+ ;;;
+ ;;; (cond (window-system
+ ;;;        (require 'avoid)
+ ;;;        (mouse-avoidance-mode 'cat-and-mouse)))
+ ;;;
+ ;;; The 'animate can be 'jump or 'banish or 'protean if you prefer.
+ ;;;
+ ;;; For added silliness, make the animatee animate...
+ ;;; put something similar to the following into your .emacs:
+ ;;;
+ ;;; (cond (window-system
+ ;;;       (setq x-pointer-shape 
+ ;;;	     (eval (nth (random 4)
+ ;;;			'(x-pointer-man x-pointer-spider
+ ;;;			  x-pointer-gobbler x-pointer-gumby))))
+ ;;;       (set-mouse-color (cdr (assoc 'mouse-color (frame-parameters))))))
+ ;;;
+ ;;; For completely random pointer shape, replace the setq above with:
+ ;;; (setq x-pointer-shape (mouse-avoidance-random-shape))
+ ;;; 
+ ;;; Bugs & Warnings:
+ ;;;
+ ;;; - THIS CODE IS FOR USE WITH FSF EMACS 19.21 or later.
+ ;;;   It can cause earlier versions of emacs to crash, due to a bug in the
+ ;;;   mouse code. 
+ ;;;
+ ;;; - Using this code does slow emacs down.  "banish" mode shouldn't
+ ;;;   ever be too bad though, and on my workstation even "animate" doesn't
+ ;;;   seem to have a noticable effect.
+ ;;;
+ ;;; - There are some situations where it doesn't do what you expect,
+ ;;;   notably when there are long wrapped lines in the buffer.  Since
+ ;;;   there is no low-level command for finding point's position
+ ;;;   on the screen, it can fail to move the pointer when on such a line.
+ 
+ ;;; Credits:
+ ;;; This code was helped by all those who contributed suggestions, fixes, and 
+ ;;; additions:
+ ;;; Joe Harrington (and his advisor), for the original inspiration
+ ;;; Ken Manheimer, for dreaming up the Protean mode
+ ;;; Richard Stallman, for the awful cat-and-mouse pun, among other things
+ ;;; Mike Williams, Denis Howe, Bill Benedetto, Chris Moore, Don Morris,
+ ;;; Simon Marshall, and M.S. Ashton, for their feedback.
+ ;;;
+ ;;; Code:
+ 
+ (provide 'avoid)
+ 
+ (defvar mouse-avoidance-mode nil
+   "Value is t or a symbol if the mouse pointer should avoid the cursor.
+ See function mouse-avoidance-mode for possible values.  Changing this
+ variable is NOT the recommended way to change modes; use the function 
+ instead.")
+ 
+ (defvar mouse-avoidance-nudge-dist 4
+   "*Average distance that mouse will be moved when approached by cursor.
+ Only applies in mode-avoidance-modes `animate' and `jump'.")
+ 
+ (defvar mouse-avoidance-nudge-var 3
+   "*Variability of mouse-avoidance-nudge-dist (which see).")
+ 
+ (defvar mouse-avoidance-animation-delay .01
+   "Delay between animation steps, in seconds.")
+ 
+ (defvar mouse-avoidance-threshhold 5
+   "*Mouse-pointer's flight distance.
+ If the cursor gets closer than this, the mouse pointer will move away.
+ Only applies in mouse-avoidance-modes `animate' and `jump'.")
+ 
+ ;; Internal variables for mouse-avoidance-random-shape
+ (defvar mouse-avoidance-pointer-shapes nil)
+ (defvar mouse-avoidance-n-pointer-shapes 0)
+ 
+ ;;; Functions:
+ 
+ (defun mouse-avoidance-too-close-p ()
+   ;;  Return t if mouse pointer and point cursor are too close.
+   ;; Acceptable distance is defined by mouse-avoidance-threshhold.
+   (let ((mouse (mouse-position)))
+     (and (car (cdr mouse))
+ 	 (< (abs (- (car (cdr mouse)) (current-column)))
+ 	    mouse-avoidance-threshhold)
+ 	 (< (abs (- (cdr (cdr mouse)) 
+ 		    (+ (car (cdr (window-edges)))
+ 		       (count-lines (window-start) (point)))))
+ 	    mouse-avoidance-threshhold))))
+ 
+ (defun mouse-avoidance-banish-mouse ()
+   ;; Put the mouse pointer in the upper-right corner of the current frame.
+   (set-mouse-position (selected-frame) (1- (frame-width)) 0))
+ 
+ (defun mouse-avoidance-nudge-mouse () 
+   ;; Push the mouse a little way away, possibly animating the move
+   (let* ((cur (mouse-position))
+ 	 (deltax (* (+ mouse-avoidance-nudge-dist 
+ 		       (random mouse-avoidance-nudge-var))
+ 		    (if (zerop (random 2)) 1 -1)))
+ 	 (deltay (* (+ mouse-avoidance-nudge-dist
+ 		       (random mouse-avoidance-nudge-var))
+ 		    (if (zerop (random 2)) 1 -1))))
+     (if (or (eq mouse-avoidance-mode 'animate) 
+ 	    (eq mouse-avoidance-mode 'proteus))
+ 	(let ((i 0.0)
+ 	      (color (cdr (assoc 'mouse-color (frame-parameters)))))
+ 	  (while (<= i 1)
+ 	    (set-mouse-position 
+ 	     (car cur) 
+ 	     (mod (+ (car (cdr cur)) (round (* i deltax))) (window-width))
+ 	     (mod (+ (cdr (cdr cur)) (round (* i deltay))) (window-height)))
+ 	    (setq i (+ i (/ 1.0 mouse-avoidance-nudge-dist)))
+ 	    (if (eq mouse-avoidance-mode 'proteus)
+ 		(progn
+ 		  (setq x-pointer-shape (mouse-avoidance-random-shape))
+ 		  (set-mouse-color color)))
+ 	    (sit-for mouse-avoidance-animation-delay)))
+       (set-mouse-position 
+        (car cur)
+        (mod (+ (car (cdr cur)) deltax) (window-width))
+        (mod (+ (cdr (cdr cur)) deltay) (window-height))))))
+ 
+ (defun mouse-avoidance-random-shape ()
+   "Return a random cursor shape.
+ This assumes that any variable whose name begins with x-pointer- and
+ has an integer value is a valid cursor shape.  You might want to
+ redefine this function to suit your own tastes."
+   (if (null mouse-avoidance-pointer-shapes)
+       (progn
+ 	(setq mouse-avoidance-pointer-shapes
+ 	      (mapcar '(lambda (x) (symbol-value (intern x)))
+ 		      (all-completions "x-pointer-" obarray
+ 				       '(lambda (x) 
+ 					  (and (boundp x)
+ 					       (integerp (symbol-value x)))))))
+ 	(setq mouse-avoidance-n-pointer-shapes 
+ 	      (length mouse-avoidance-pointer-shapes))))
+   (nth (random mouse-avoidance-n-pointer-shapes)
+        mouse-avoidance-pointer-shapes))
+ 
+ (defun mouse-avoidance-simple-hook ()
+   (if (and (mouse-avoidance-keyboard-command (this-command-keys)))
+       (mouse-avoidance-banish-mouse)))
+ 
+ (defun mouse-avoidance-fancy-hook ()
+   (if (and (mouse-avoidance-keyboard-command (this-command-keys))
+ 	   (mouse-avoidance-too-close-p))
+       (mouse-avoidance-nudge-mouse)))
+ 
+ (defun mouse-avoidance-keyboard-command (key)
+   "Return t if the KEYSEQENCE is composed of keyboard events only.
+ Returns nil if there are any lists in the key sequence."
+   (cond ((null key) nil)		; Null event seems to be
+ 					; returned occasionally.
+ 	((not (vectorp key)) t)		; Strings are keyboard events.
+ 	((catch 'done
+ 	   (let ((i 0)
+ 		 (l (length key)))
+ 	     (while (< i l)
+ 	       (if (listp (aref key i))
+ 		   (throw 'done nil))
+ 	       (setq i (1+ i))))
+ 	   t))))
+ 
+ (defun mouse-avoidance-mode (&optional mode)
+   "Set cursor avoidance mode to MODE.
+ MODE should be one of the symbols `banish', `jump', `animate',
+ `cat-and-mouse', or `none'.  `Animate' is the same as `cat-and-mouse'.
+ If MODE is nil, toggle mouse avoidance.  Positive numbers and
+ symbols other than the above are treated as equivalent to `banish';
+ negative numbers and `-' are equivalent to `none'."
+   (interactive
+    (list (intern (completing-read
+ 		  "Select cursor avoidance technique (SPACE for list): "
+ 		  '(("banish") ("jump") ("animate") ("cat-and-mouse") 
+ 		    ("proteus") ("none"))
+ 		  nil t))))
+   (if (eq mode 'cat-and-mouse)
+       (setq mode 'animate))
+   (setq post-command-hook
+ 	(delete 'mouse-avoidance-simple-hook (append post-command-hook nil)))
+   (setq post-command-hook
+ 	(delete 'mouse-avoidance-fancy-hook (append post-command-hook nil)))
+   (cond	((eq mode 'none)
+ 	 (setq mouse-avoidance-mode nil))
+ 	((or (eq mode 'jump)
+ 	     (eq mode 'animate)
+ 	     (eq mode 'proteus))
+ 	 (add-hook 'post-command-hook 'mouse-avoidance-fancy-hook)
+ 	 (setq mouse-avoidance-mode mode))
+ 	((or (eq mode 'banish) 
+ 	     (eq mode t)
+ 	     (and (null mode) (null mouse-avoidance-mode))
+ 	     (and mode (> (prefix-numeric-value mode) 0)))
+ 	 (add-hook 'post-command-hook 'mouse-avoidance-simple-hook)
+ 	 (setq mouse-avoidance-mode 'banish))
+ 	(t (setq mouse-avoidance-mode nil))))
+ 
+ (or (assq 'mouse-avoidance-mode minor-mode-alist)
+     (setq minor-mode-alist (cons '(mouse-avoidance-mode " Avoid")
+ 				 minor-mode-alist)))
+ 
+ ;;; End of avoid.el
+ 
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/c-mode.el emacs-19.22/lisp/c-mode.el
*** emacs-19.21/lisp/c-mode.el	Tue Nov 16 07:14:10 1993
--- emacs-19.22/lisp/c-mode.el	Tue Nov 23 06:19:50 1993
***************
*** 1192,1195 ****
--- 1192,1198 ----
    (save-excursion
      (goto-char start)
+     ;; Advance to first nonblank line.
+     (skip-chars-forward " \t\n")
+     (beginning-of-line)
      (let ((endmark (copy-marker end))
  	  (c-tab-always-indent t))
***************
*** 1212,1220 ****
  		       (goto-char nextline)))
  	      (skip-chars-forward " \t\n"))
! 	    ;; Make sure the sexp we found really starts on the
! 	    ;; current line and extends past it.
! 	    (goto-char sexpend)
! 	    (backward-sexp 1)
! 	    (setq sexpbeg (point)))
  	  ;; If that sexp ends within the region,
  	  ;; indent it all at once, fast.
--- 1215,1225 ----
  		       (goto-char nextline)))
  	      (skip-chars-forward " \t\n"))
! 	    (if sexpend
! 		(progn
! 		  ;; Make sure the sexp we found really starts on the
! 		  ;; current line and extends past it.
! 		  (goto-char sexpend)
! 		  (backward-sexp 1)
! 		  (setq sexpbeg (point)))))
  	  ;; If that sexp ends within the region,
  	  ;; indent it all at once, fast.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/comint.el emacs-19.22/lisp/comint.el
*** emacs-19.21/lisp/comint.el	Tue Nov 16 04:27:13 1993
--- emacs-19.22/lisp/comint.el	Wed Nov 24 23:13:17 1993
***************
*** 203,207 ****
  `comint-postoutput-scroll-to-bottom'.  This variable is buffer-local.")
  
! (defvar comint-scroll-show-maximum-output t
    "*Controls how interpreter output causes window to scroll.
  If non-nil, then show the maximum output when the window is scrolled.
--- 203,207 ----
  `comint-postoutput-scroll-to-bottom'.  This variable is buffer-local.")
  
! (defvar comint-scroll-show-maximum-output nil
    "*Controls how interpreter output causes window to scroll.
  If non-nil, then show the maximum output when the window is scrolled.
***************
*** 984,990 ****
  	  (string-match "[\"\'\`]" arg))
        (list arg)
!     (let ((not-delim (format "[^%s]+" (mapconcat
! 				       (function (lambda (d) (regexp-quote d)))
! 				       comint-delimiter-argument-list "")))
  	  (delim-str (mapconcat (function (lambda (d)
  					    (concat (regexp-quote d) "+")))
--- 984,996 ----
  	  (string-match "[\"\'\`]" arg))
        (list arg)
!     (let ((not-delim (concat
! 		      (format "\\([^%s]" (mapconcat
! 					(function (lambda (d) (regexp-quote d)))
! 					comint-delimiter-argument-list ""))
! 		      "\\|"
! 		      (mapconcat (function (lambda (d)
! 					     (concat "\\\\" (regexp-quote d))))
! 				 comint-delimiter-argument-list "\\|")
! 		      "\\)+"))
  	  (delim-str (mapconcat (function (lambda (d)
  					    (concat (regexp-quote d) "+")))
***************
*** 1076,1080 ****
  			(buffer-substring pmark (point))))
  	       (history (if (not (eq comint-input-autoexpand 'history))
! 			    (comint-arguments input 0 nil)
  			  ;; This is messy 'cos ultimately the original
  			  ;; functions used do insertion, rather than return
--- 1082,1086 ----
  			(buffer-substring pmark (point))))
  	       (history (if (not (eq comint-input-autoexpand 'history))
! 			    input
  			  ;; This is messy 'cos ultimately the original
  			  ;; functions used do insertion, rather than return
***************
*** 1084,1088 ****
  			    (delete-region pmark (point))
  			    (insert input)
! 			    (comint-arguments copy 0 nil)))))
            (if comint-process-echoes
                (delete-region pmark (point))
--- 1090,1094 ----
  			    (delete-region pmark (point))
  			    (insert input)
! 			    copy))))
            (if comint-process-echoes
                (delete-region pmark (point))
***************
*** 1173,1186 ****
  	(if (and process (< (point) (process-mark process))
  		 scroll (not (window-minibuffer-p selected)))
! 	    (walk-windows
! 	     (function (lambda (window)
! 	       (if (and (eq (window-buffer window) current)
! 			(or (eq scroll t) (eq scroll 'all)
! 			    (and (eq scroll 'this) (eq selected window))))
! 		   (progn
! 		     (select-window window)
! 		     (goto-char (point-max))
! 		     (select-window selected)))))
! 	     'not-minibuf t)))))
  
  (defun comint-postoutput-scroll-to-bottom (string)
--- 1179,1194 ----
  	(if (and process (< (point) (process-mark process))
  		 scroll (not (window-minibuffer-p selected)))
! 	    (if (eq scroll 'this)
! 		(goto-char (point-max))
! 	      (walk-windows
! 	       (function (lambda (window)
! 		 (if (and (eq (window-buffer window) current)
! 			  (or (eq scroll t) (eq scroll 'all)
! 			      (and (eq scroll 'this) (eq selected window))))
! 		     (progn
! 		       (select-window window)
! 		       (goto-char (point-max))
! 		       (select-window selected)))))
! 	       'not-minibuf t))))))
  
  (defun comint-postoutput-scroll-to-bottom (string)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/cplus-md1.el emacs-19.22/lisp/cplus-md1.el
*** emacs-19.21/lisp/cplus-md1.el	Tue Nov 16 07:14:33 1993
--- emacs-19.22/lisp/cplus-md1.el	Tue Nov 23 14:29:30 1993
***************
*** 8,12 ****
  ;; Version:         2.353
  ;; Last Modified:   1993/06/23 13:58:52
! ;; Keywords: C++ C editing major-mode
  
  ;; Copyright (C) 1992, 1993 Free Software Foundation, Inc.
--- 8,12 ----
  ;; Version:         2.353
  ;; Last Modified:   1993/06/23 13:58:52
! ;; Keywords: languages
  
  ;; Copyright (C) 1992, 1993 Free Software Foundation, Inc.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/dired-aux.el emacs-19.22/lisp/dired-aux.el
*** emacs-19.21/lisp/dired-aux.el	Tue Nov 16 07:14:42 1993
--- emacs-19.22/lisp/dired-aux.el	Tue Nov 23 17:43:37 1993
***************
*** 51,54 ****
--- 51,55 ----
  		      (save-excursion (goto-char (mark t))
  				      (dired-get-filename t t)))))
+      (require 'diff)
       (list (read-file-name (format "Diff %s with: %s"
  				   (dired-get-filename t)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/dired.el emacs-19.22/lisp/dired.el
*** emacs-19.21/lisp/dired.el	Tue Nov 16 07:14:43 1993
--- emacs-19.22/lisp/dired.el	Mon Nov 22 19:11:28 1993
***************
*** 399,405 ****
  	    (dired-sort-other switches))	; this calls dired-revert
        ;; Else a new buffer
!       (setq default-directory (if (file-directory-p dirname)
! 				  dirname
! 				(file-name-directory dirname)))
        (or switches (setq switches dired-listing-switches))
        (dired-mode dirname switches)
--- 399,407 ----
  	    (dired-sort-other switches))	; this calls dired-revert
        ;; Else a new buffer
!       (setq default-directory
! 	    (abbreviate-file-name
! 	     (if (file-directory-p dirname)
! 		 dirname
! 	       (file-name-directory dirname))))
        (or switches (setq switches dired-listing-switches))
        (dired-mode dirname switches)
***************
*** 490,494 ****
  	(setq dirname (car dir-or-list))
        (setq dirname dir-or-list))
!     (if (and (equal default-directory dirname)
  	     (not (consp dir-or-list)))
  	;; If we are reading a whole single directory...
--- 492,498 ----
  	(setq dirname (car dir-or-list))
        (setq dirname dir-or-list))
!     ;; Expand before comparing in case one or both have been abbreviated.
!     (if (and (equal (expand-file-name default-directory)
! 		    (expand-file-name dirname))
  	     (not (consp dir-or-list)))
  	;; If we are reading a whole single directory...
***************
*** 1415,1419 ****
  		    ;; ;; line (e.g. "-" would match somewhere in the
  		    ;; permission bits).
! 		  (setq found (dired-move-to-filename)))))))
      (and found
  	 ;; return value of point (i.e., FOUND):
--- 1419,1426 ----
  		    ;; ;; line (e.g. "-" would match somewhere in the
  		    ;; permission bits).
! 		  (setq found (dired-move-to-filename))
! 		;; If this isn't the right line, move forward to avoid
! 		;; trying this line again.
! 		(forward-line 1))))))
      (and found
  	 ;; return value of point (i.e., FOUND):
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/edebug.el emacs-19.22/lisp/edebug.el
*** emacs-19.21/lisp/edebug.el	Tue Nov 16 07:14:52 1993
--- emacs-19.22/lisp/edebug.el	Tue Nov 23 03:42:50 1993
***************
*** 266,270 ****
      (down-list 1)
      (if (not (memq (read (current-buffer)) '(defun defmacro)))
! 	(error "Not in defun or defmacro."))
      (read (current-buffer))))
  
--- 266,270 ----
      (down-list 1)
      (if (not (memq (read (current-buffer)) '(defun defmacro)))
! 	(error "Not in defun or defmacro"))
      (read (current-buffer))))
  
***************
*** 328,331 ****
--- 328,332 ----
      (setq object (symbol-function object)))
    (if (or (subrp object)
+ 	  (byte-code-function-p object)
  	  (and (listp object)
  	       (eq (car object) 'lambda)
***************
*** 1323,1328 ****
  	)
      (if (not (buffer-name edebug-buffer))
! 	(let (debug-on-error nil)
! 	  (error "Buffer defining %s not found." edebug-func)))
      
        ;; Save windows now before we modify them.
--- 1324,1329 ----
  	)
      (if (not (buffer-name edebug-buffer))
! 	(let ((debug-on-error nil))
! 	  (error "Buffer defining %s not found" edebug-func)))
      
        ;; Save windows now before we modify them.
***************
*** 1660,1664 ****
    (interactive)
    (if (not edebug-active)
!       (error "edebug is not active."))
    (edebug-pop-to-buffer edebug-buffer)
    (goto-char edebug-point)  ; from edebug
--- 1661,1665 ----
    (interactive)
    (if (not edebug-active)
!       (error "edebug is not active"))
    (edebug-pop-to-buffer edebug-buffer)
    (goto-char edebug-point)  ; from edebug
***************
*** 1669,1673 ****
    (interactive)
    (if (not edebug-active)
!       (error "edebug is not active."))
    (setq edebug-inside-windows (edebug-current-window-configuration))
    (edebug-set-window-configuration edebug-outside-windows)
--- 1670,1674 ----
    (interactive)
    (if (not edebug-active)
!       (error "edebug is not active"))
    (setq edebug-inside-windows (edebug-current-window-configuration))
    (edebug-set-window-configuration edebug-outside-windows)
***************
*** 1681,1685 ****
    (interactive)
    (if (not edebug-active)
!       (error "edebug is not active."))
    (save-excursion
      ;; If the buffer's currently displayed, avoid the set-window-configuration.
--- 1682,1686 ----
    (interactive)
    (if (not edebug-active)
!       (error "edebug is not active"))
    (save-excursion
      ;; If the buffer's currently displayed, avoid the set-window-configuration.
***************
*** 1807,1811 ****
  	  (or (get def-name 'edebug)
  	      (error
! 	       "%s must first be evaluated with edebug-defun." def-name)))
  	 ;; pull out parts of edebug-data.
  	 (edebug-func-mark (car edebug-data))
--- 1808,1812 ----
  	  (or (get def-name 'edebug)
  	      (error
! 	       "%s must first be evaluated with edebug-defun" def-name)))
  	 ;; pull out parts of edebug-data.
  	 (edebug-func-mark (car edebug-data))
***************
*** 2036,2040 ****
    (interactive)
    (if (not (eq 'enter edebug-arg-mode))
!       (error "You must be in front of a function or macro call."))
    (let* ((func (car edebug-exp))
  	 (func-marker (get func 'edebug)))
--- 2037,2041 ----
    (interactive)
    (if (not (eq 'enter edebug-arg-mode))
!       (error "You must be in front of a function or macro call"))
    (let* ((func (car edebug-exp))
  	 (func-marker (get func 'edebug)))
***************
*** 2048,2052 ****
        ;; its already been evaluated for edebug
        nil)
!      (t (error "You must first evaluate %s in a buffer." func))))
    (exit-recursive-edit))
  
--- 2049,2053 ----
        ;; its already been evaluated for edebug
        nil)
!      (t (error "You must first evaluate %s in a buffer" func))))
    (exit-recursive-edit))
  
***************
*** 2106,2110 ****
  	  (message "Initial mode for %s is now: %s"
  		   this-function mode))
!       (error "Key must map to one of the mode changing commands.")
        )))
  
--- 2107,2111 ----
  	  (message "Initial mode for %s is now: %s"
  		   this-function mode))
!       (error "Key must map to one of the mode changing commands")
        )))
  
***************
*** 2128,2132 ****
    "Evaluate EXPR in the outside environment."
    (if (not edebug-active)
!       (error "edebug is not active."))
    (edebug-outside-excursion
     (eval expr)))
--- 2129,2133 ----
    "Evaluate EXPR in the outside environment."
    (if (not edebug-active)
!       (error "edebug is not active"))
    (edebug-outside-excursion
     (eval expr)))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/etags.el emacs-19.22/lisp/etags.el
*** emacs-19.21/lisp/etags.el	Tue Nov 16 07:14:59 1993
--- emacs-19.22/lisp/etags.el	Thu Nov 25 03:09:41 1993
***************
*** 43,46 ****
--- 43,51 ----
  Use the `etags' program to make a tags table file.")
  
+ (defvar tags-add-tables nil
+   "*Non-nil means always add a new tags table to the current list.
+ This eliminates the need to ask the user whether to add a new tags table
+ to the current list (as opposed to starting a new list).")
+ 
  (defvar tags-table-list-pointer nil
    "Pointer into `tags-table-list' where the current state of searching is.
***************
*** 74,81 ****
  Otherwise, `find-tag-default' is used.")
  
- ;;;###autoload
  (defvar default-tags-table-function nil
!   "*If non-nil, a function of no arguments to choose a default tags file
! for a particular buffer.")
  
  (defvar tags-location-stack nil
--- 79,86 ----
  Otherwise, `find-tag-default' is used.")
  
  (defvar default-tags-table-function nil
!   "If non-nil, a function to choose a default tags file for a buffer.
! This function receives no arguments and should return the default
! tags table file to use for the current buffer.")
  
  (defvar tags-location-stack nil
***************
*** 479,489 ****
  			;; Not found in any existing set.
  			(if (and tags-table-list
! 				 (y-or-n-p (concat "Add " tags-file-name
! 						   " to current list"
! 						   " of tags tables? ")))
  			    ;; Add it to the current list.
  			    (setq tags-table-list (cons tags-file-name
  							tags-table-list))
  			  ;; Make a fresh list, and store the old one.
  			  (or (memq tags-table-list tags-table-set-list)
  			      (setq tags-table-set-list
--- 484,495 ----
  			;; Not found in any existing set.
  			(if (and tags-table-list
! 				 (or tags-add-tables
! 				     (y-or-n-p (concat "Add to current list"
! 						       " of tags tables? "))))
  			    ;; Add it to the current list.
  			    (setq tags-table-list (cons tags-file-name
  							tags-table-list))
  			  ;; Make a fresh list, and store the old one.
+ 			  (message "Starting a new list of tags tables")
  			  (or (memq tags-table-list tags-table-set-list)
  			      (setq tags-table-set-list
***************
*** 563,567 ****
  (defun tags-complete-tag (string predicate what)
    (save-excursion
!     (visit-tags-table-buffer)
      (if (eq what t)
  	(all-completions string (tags-completion-table) predicate)
--- 569,575 ----
  (defun tags-complete-tag (string predicate what)
    (save-excursion
!     ;; If we need to ask for the tag table, allow that.
!     (let ((enable-recursive-minibuffers t))
!       (visit-tags-table-buffer))
      (if (eq what t)
  	(all-completions string (tags-completion-table) predicate)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/faces.el emacs-19.22/lisp/faces.el
*** emacs-19.21/lisp/faces.el	Tue Nov 16 07:15:00 1993
--- emacs-19.22/lisp/faces.el	Thu Nov 25 21:14:46 1993
***************
*** 440,443 ****
--- 440,444 ----
         (setq frame nil))
    (if pattern
+       ;; Note that x-list-fonts has code to handle a face with nil as its font.
        (let ((fonts (x-list-fonts pattern face frame)))
  	(or fonts
***************
*** 504,508 ****
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face bold: ")))
!   (if (eq frame t)
        (set-face-font face (if (memq 'italic (face-font face t))
  			      '(bold italic) '(bold))
--- 505,509 ----
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face bold: ")))
!   (if (and (eq frame t) (listp (face-font face t)))
        (set-face-font face (if (memq 'italic (face-font face t))
  			      '(bold italic) '(bold))
***************
*** 541,545 ****
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face italic: ")))
!   (if (eq frame t)
        (set-face-font face (if (memq 'bold (face-font face t))
  			      '(bold italic) '(italic))
--- 542,546 ----
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face italic: ")))
!   (if (and (eq frame t) (listp (face-font face t)))
        (set-face-font face (if (memq 'bold (face-font face t))
  			      '(bold italic) '(italic))
***************
*** 578,582 ****
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face bold-italic: ")))
!   (if (eq frame t)
        (set-face-font face '(bold italic) t)
      (let ((ofont (face-font face frame))
--- 579,583 ----
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face bold-italic: ")))
!   (if (and (eq frame t) (listp (face-font face t)))
        (set-face-font face '(bold italic) t)
      (let ((ofont (face-font face frame))
***************
*** 630,634 ****
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face non-bold: ")))
!   (if (eq frame t)
        (set-face-font face (if (memq 'italic (face-font face t))
  			      '(italic) nil)
--- 631,635 ----
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face non-bold: ")))
!   (if (and (eq frame t) (listp (face-font face t)))
        (set-face-font face (if (memq 'italic (face-font face t))
  			      '(italic) nil)
***************
*** 662,666 ****
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face non-italic: ")))
!   (if (eq frame t)
        (set-face-font face (if (memq 'bold (face-font face t))
  			      '(bold) nil)
--- 663,667 ----
  If NOERROR is non-nil, return nil on failure."
    (interactive (list (read-face-name "Make which face non-italic: ")))
!   (if (and (eq frame t) (listp (face-font face t)))
        (set-face-font face (if (memq 'bold (face-font face t))
  			      '(bold) nil)
***************
*** 892,904 ****
        (while rest
  	(setcdr (car rest) (copy-sequence (cdr (car rest))))
! 	(if (listp (face-font (cdr (car rest))))
! 	    (let ((bold (memq 'bold (face-font (cdr (car rest)))))
! 		  (italic (memq 'italic (face-font (cdr (car rest))))))
! 	      (if (and bold italic)
! 		  (make-face-bold-italic (car (car rest)) frame)
! 		(if bold
! 		    (make-face-bold (car (car rest)) frame)
! 		  (if italic
! 		      (make-face-italic (car (car rest)) frame))))))
  	(make-face-x-resource-internal (cdr (car rest)) frame t)
  	(setq rest (cdr rest)))
--- 893,907 ----
        (while rest
  	(setcdr (car rest) (copy-sequence (cdr (car rest))))
! 	(condition-case nil
! 	    (if (listp (face-font (cdr (car rest))))
! 		(let ((bold (memq 'bold (face-font (cdr (car rest)))))
! 		      (italic (memq 'italic (face-font (cdr (car rest))))))
! 		  (if (and bold italic)
! 		      (make-face-bold-italic (car (car rest)) frame)
! 		    (if bold
! 			(make-face-bold (car (car rest)) frame)
! 		      (if italic
! 			  (make-face-italic (car (car rest)) frame))))))
! 	  (error nil))
  	(make-face-x-resource-internal (cdr (car rest)) frame t)
  	(setq rest (cdr rest)))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/finder-inf.el emacs-19.22/lisp/finder-inf.el
*** emacs-19.21/lisp/finder-inf.el	Tue Nov 16 07:15:08 1993
--- emacs-19.22/lisp/finder-inf.el	Tue Nov 23 15:19:15 1993
***************
*** 10,13 ****
--- 10,16 ----
          "abbrev mode commands for Emacs"
          (abbrev))
+     ("abbrevlist.el"
+         "list one abbrev table alphabetically ordered."
+         (abbrev))
      ("ada.el"
          "Ada editing support package in GNUlisp.  v1.0"
***************
*** 18,22 ****
      ("advice.el"
          "advice mechanism for Emacs Lisp functions"
!         (advice  function hooks))
      ("allout.el"
          nil
--- 21,25 ----
      ("advice.el"
          "advice mechanism for Emacs Lisp functions"
!         (extensions  lisp  tools))
      ("allout.el"
          nil
***************
*** 46,49 ****
--- 49,55 ----
          "maintain autoloads in loaddefs.el."
          (maint))
+     ("avoid.el"
+         nil
+         (mouse))
      ("awk-mode.el"
          "AWK code editing commands for Emacs"
***************
*** 94,97 ****
--- 100,106 ----
          "code to extend the character set and support case tables."
          (i18n))
+     ("cdl.el"
+         nil
+         (data))
      ("chistory.el"
          "list command history"
***************
*** 144,148 ****
      ("cplus-md1.el"
          "major mode for editing C++ (and C) code"
!         (c++ c editing major-mode))
      ("cust-print.el"
          "handles print-level and print-circle."
--- 153,157 ----
      ("cplus-md1.el"
          "major mode for editing C++ (and C) code"
!         (languages))
      ("cust-print.el"
          "handles print-level and print-circle."
***************
*** 312,316 ****
      ("hexl.el"
          "edit a file in a hex dump format using the hexl filter."
!         (non-text))
      ("hideif.el"
          "hides selected code within ifdef."
--- 321,325 ----
      ("hexl.el"
          "edit a file in a hex dump format using the hexl filter."
!         (data))
      ("hideif.el"
          "hides selected code within ifdef."
***************
*** 346,349 ****
--- 355,361 ----
          "incremental search minor mode."
          nil)
+     ("iso-acc.el"
+         nil
+         (i18n))
      ("iso-ascii.el"
          "set up char tables for ISO 8859/1 on ASCII terminals."
***************
*** 358,361 ****
--- 370,376 ----
          "set up case-conversion and syntax tables for ISO 8859/1"
          (i18n))
+     ("iso-transl.el"
+         "keyboard input definitions for ISO 8859/1."
+         (i18n))
      ("ispell.el"
          "this is the GNU EMACS interface to GNU ISPELL version 4."
***************
*** 450,454 ****
      ("menu-bar.el"
          "define a default menu bar."
!         (internals))
      ("metamail.el"
          "Metamail interface for GNU Emacs"
--- 465,469 ----
      ("menu-bar.el"
          "define a default menu bar."
!         (internal))
      ("metamail.el"
          "Metamail interface for GNU Emacs"
***************
*** 478,481 ****
--- 493,499 ----
          "Modula-2 editing support package"
          (languages))
+     ("mouse-sel.el"
+         "Multi-click selection support for Emacs 19"
+         (mouse))
      ("mouse.el"
          "window system-independent mouse support."
***************
*** 506,510 ****
          nil)
      ("page-ext.el"
!         "page handling commands"
          nil)
      ("page.el"
--- 524,528 ----
          nil)
      ("page-ext.el"
!         "extended page handling commands"
          nil)
      ("page.el"
***************
*** 517,520 ****
--- 535,541 ----
          "highlight matching paren."
          (languages  faces))
+     ("pascal.el"
+         nil
+         (languages))
      ("paths.el"
          "define pathnames for use by various Emacs commands."
***************
*** 526,529 ****
--- 547,553 ----
          "\"Picture mode\" -- editing using quarter-plane screen model."
          nil)
+     ("pp.el"
+         nil
+         nil)
      ("profile.el"
          "generate run time measurements of Emacs Lisp functions"
***************
*** 541,544 ****
--- 565,571 ----
          "look up references in bibliography files."
          (bib))
+     ("regi.el"
+         "REGular expression Interpreting engine"
+         (     extensions  matching))
      ("register.el"
          "register commands for Emacs."
***************
*** 549,553 ****
      ("reporter.el"
          "customizable bug reporting of lisp programs"
!         (bug reports lisp))
      ("reposition.el"
          "center a Lisp function or comment on the screen"
--- 576,580 ----
      ("reporter.el"
          "customizable bug reporting of lisp programs"
!         (tools  mail  lisp  extensions))
      ("reposition.el"
          "center a Lisp function or comment on the screen"
***************
*** 598,604 ****
          "automatically save place in files."
          (bookmarks  placeholders))
-     ("sc-elec.el"
-         nil
-         nil)
      ("sc.el"
          nil
--- 625,628 ----
***************
*** 625,628 ****
--- 649,655 ----
          "SGML-editing mode"
          (wp))
+     ("shadowfile.el"
+         nil
+         nil)
      ("shell.el"
          "specialized comint.el for running the shell."
***************
*** 658,661 ****
--- 685,697 ----
          "basic lisp subroutines for Emacs"
          nil)
+     ("sun-curs.el"
+         "cursor definitions for Sun windows"
+         (hardware))
+     ("sun-fns.el"
+         "subroutines of Mouse handling for Sun windows"
+         (hardware))
+     ("supercite.el"
+         "minor mode for citing mail and news replies"
+         (mail  news))
      ("swedish.el"
          "miscellaneous functions for dealing with Swedish."
***************
*** 694,697 ****
--- 730,736 ----
          "text mode, and its idiosyncratic commands."
          nil)
+     ("thingatpt.el"
+         "Get the `thing' at point"
+         (extensions  matching  mouse))
      ("time-stamp.el"
          "Maintain last change time stamps in files edited by Emacs"
***************
*** 708,721 ****
      ("tpu-doc.el"
          "Documentation for TPU-edt"
!         (tpu-edt))
      ("tpu-edt.el"
          "Emacs emulating TPU emulating EDT"
!         (edt emulations))
      ("tpu-extras.el"
          "Scroll margins and free cursor mode for TPU-edt"
!         (tpu-edt))
      ("tpu-mapper.el"
          nil
!         (tpu-edt))
      ("tq.el"
          "utility to maintain a transaction queue"
--- 747,760 ----
      ("tpu-doc.el"
          "Documentation for TPU-edt"
!         (emulations))
      ("tpu-edt.el"
          "Emacs emulating TPU emulating EDT"
!         (emulations))
      ("tpu-extras.el"
          "Scroll margins and free cursor mode for TPU-edt"
!         (emulations))
      ("tpu-mapper.el"
          nil
!         (emulations))
      ("tq.el"
          "utility to maintain a transaction queue"
***************
*** 723,727 ****
      ("trace.el"
          "tracing facility for Emacs Lisp functions"
!         (tracing  debugging))
      ("two-column.el"
          "minor mode for editing of two-column text"
--- 762,766 ----
      ("trace.el"
          "tracing facility for Emacs Lisp functions"
!         (tools  lisp))
      ("two-column.el"
          "minor mode for editing of two-column text"
***************
*** 780,784 ****
      ("vt-control.el"
          "Common VTxxx control functions"
!         (vt100))
      ("vt100-led.el"
          "functions for LED control on VT-100 terminals & clones."
--- 819,823 ----
      ("vt-control.el"
          "Common VTxxx control functions"
!         (terminals))
      ("vt100-led.el"
          "functions for LED control on VT-100 terminals & clones."
***************
*** 795,799 ****
      ("xscheme.el"
          "run Scheme under Emacs"
!         (languages lisp))
      ("yow.el"
          "quote random zippyisms"
--- 834,838 ----
      ("xscheme.el"
          "run Scheme under Emacs"
!         (languages  lisp))
      ("yow.el"
          "quote random zippyisms"
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/finder.el emacs-19.22/lisp/finder.el
*** emacs-19.21/lisp/finder.el	Tue Nov 16 07:15:09 1993
--- emacs-19.22/lisp/finder.el	Tue Nov 23 14:36:06 1993
***************
*** 48,58 ****
    '(
      (abbrev	. "abbreviation handling, typing shortcuts, macros")
!     (bib	. "code related to the bib(1) bibliography processor")
      (c		. "C and C++ language support")
      (calendar	. "calendar and time management support")
      (comm	. "communications, networking, remote access to files")
      (docs	. "support for Emacs documentation")
      (emulations	. "emulations of other editors")
      (extensions	. "Emacs Lisp language extensions")
      (games	. "games, jokes and amusements")
      (hardware	. "support for interfacing with exotic hardware")
--- 48,60 ----
    '(
      (abbrev	. "abbreviation handling, typing shortcuts, macros")
!     (bib	. "code related to the `bib' bibliography processor")
      (c		. "C and C++ language support")
      (calendar	. "calendar and time management support")
      (comm	. "communications, networking, remote access to files")
+     (data	. "support editing files of data")
      (docs	. "support for Emacs documentation")
      (emulations	. "emulations of other editors")
      (extensions	. "Emacs Lisp language extensions")
+     (faces	. "support for multiple fonts")
      (games	. "games, jokes and amusements")
      (hardware	. "support for interfacing with exotic hardware")
***************
*** 65,68 ****
--- 67,72 ----
      (maint	. "maintenance aids for the Emacs development group")
      (mail	. "modes for electronic-mail handling")
+     (matching	. "various sorts of searching and matching")
+     (mouse	. "mouse support")
      (news	. "support for netnews reading and posting")
      (processes	. "process, subshell, compilation, and job control support")
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/font-lock.el emacs-19.22/lisp/font-lock.el
*** emacs-19.21/lisp/font-lock.el	Tue Nov 16 07:15:12 1993
--- emacs-19.22/lisp/font-lock.el	Wed Nov 17 08:10:17 1993
***************
*** 311,315 ****
  		    (while (not (eobp))
  		      (let ((next (next-single-property-change (point) 'face)))
! 			(if (> next (point-max))
  			    (setq next (point-max)))
  			(if (not (get-text-property (point) 'face))
--- 311,315 ----
  		    (while (not (eobp))
  		      (let ((next (next-single-property-change (point) 'face)))
! 			(if (or (null next) (> next (point-max)))
  			    (setq next (point-max)))
  			(if (not (get-text-property (point) 'face))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/fortran.el emacs-19.22/lisp/fortran.el
*** emacs-19.21/lisp/fortran.el	Tue Nov 16 07:15:16 1993
--- emacs-19.22/lisp/fortran.el	Thu Nov 18 04:49:38 1993
***************
*** 5,9 ****
  ;; Author: Michael D. Prange <prange@erl.mit.edu>
  ;; Maintainer: bug-fortran-mode@erl.mit.edu
! ;; Version 1.30.2 (June 1, 1993)
  ;; Keywords: languages
  
--- 5,9 ----
  ;; Author: Michael D. Prange <prange@erl.mit.edu>
  ;; Maintainer: bug-fortran-mode@erl.mit.edu
! ;; Version 1.30.3 (November 16, 1993)
  ;; Keywords: languages
  
***************
*** 47,51 ****
  ;;; Bugs to bug-fortran-mode@erl.mit.edu
  
! (defconst fortran-mode-version "version 1.30.2")
  
  ;;; Code:
--- 47,51 ----
  ;;; Bugs to bug-fortran-mode@erl.mit.edu
  
! (defconst fortran-mode-version "version 1.30.3")
  
  ;;; Code:
***************
*** 808,812 ****
  		((looking-at "\\(otherwise\\|else[ \t]*where\\)\\b")
  		 (setq icol (+ icol fortran-if-indent)))
! 		((looking-at "where.*(.*)[ \t]*\n")
  		 (setq icol (+ icol fortran-if-indent)))
  		((looking-at "do\\b")
--- 808,812 ----
  		((looking-at "\\(otherwise\\|else[ \t]*where\\)\\b")
  		 (setq icol (+ icol fortran-if-indent)))
! 		((looking-at "where[ \t]*(.*)[ \t]*\n")
  		 (setq icol (+ icol fortran-if-indent)))
  		((looking-at "do\\b")
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/gnus.el emacs-19.22/lisp/gnus.el
*** emacs-19.21/lisp/gnus.el	Tue Nov 16 05:47:45 1993
--- emacs-19.22/lisp/gnus.el	Wed Nov 17 08:42:01 1993
***************
*** 3,7 ****
  
  ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
! ;; Version: $Header: /home/fsf/rms/e19/lisp/RCS/gnus.el,v 1.29 1993/11/16 10:47:27 rms Exp $
  ;; Keywords: news
  
--- 3,7 ----
  
  ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
! ;; Version: $Header: /home/fsf/rms/e19/lisp/RCS/gnus.el,v 1.30 1993/11/17 13:41:50 rms Exp $
  ;; Keywords: news
  
***************
*** 3832,3836 ****
  	  (if (and (file-readable-p filename) (rmail-file-p filename))
  	      (gnus-output-to-rmail filename)
! 	    (gnus-output-to-file filename))
  	  ;; Remember the directory name to save articles.
  	  (setq gnus-newsgroup-last-mail filename)
--- 3832,3836 ----
  	  (if (and (file-readable-p filename) (rmail-file-p filename))
  	      (gnus-output-to-rmail filename)
! 	    (rmail-output filename 1 t t))
  	  ;; Remember the directory name to save articles.
  	  (setq gnus-newsgroup-last-mail filename)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/gnuspost.el emacs-19.22/lisp/gnuspost.el
*** emacs-19.21/lisp/gnuspost.el	Tue Nov 16 07:15:19 1993
--- emacs-19.22/lisp/gnuspost.el	Mon Nov 22 01:44:14 1993
***************
*** 4,8 ****
  
  ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
! ;; Version: $Header: /home/fsf/rms/e19/lisp/RCS/gnuspost.el,v 1.14 1993/07/20 04:25:04 rms Exp $
  ;; Keywords: news
  
--- 4,8 ----
  
  ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
! ;; Version: $Header: /home/fsf/rms/e19/lisp/RCS/gnuspost.el,v 1.16 1993/11/22 06:44:12 rms Exp $
  ;; Keywords: news
  
***************
*** 592,596 ****
  		 ;; Suggested by hyoko@flab.fujitsu.junet.
  		 ;; Save article in Unix mail format by default.
! 		 (funcall (or gnus-author-copy-saver 'rmail-output) fcc-file)
  		 ))
  	  )
--- 592,601 ----
  		 ;; Suggested by hyoko@flab.fujitsu.junet.
  		 ;; Save article in Unix mail format by default.
! 		 (if (and gnus-author-copy-saver
! 			  (not (eq gnus-author-copy-saver 'rmail-output)))
! 		     (funcall gnus-author-copy-saver fcc-file)
! 		   (if (and (file-readable-p fcc-file) (rmail-file-p fcc-file))
! 		       (gnus-output-to-rmail fcc-file)
! 		     (rmail-output fcc-file 1 t t)))
  		 ))
  	  )
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/hexl.el emacs-19.22/lisp/hexl.el
*** emacs-19.21/lisp/hexl.el	Tue Nov 16 07:15:27 1993
--- emacs-19.22/lisp/hexl.el	Tue Nov 23 14:36:45 1993
***************
*** 4,8 ****
  
  ;; Author: Keith Gabryelski <ag@wheaties.ai.mit.edu>
! ;; Keywords: non-text
  
  ;; This file is part of GNU Emacs.
--- 4,9 ----
  
  ;; Author: Keith Gabryelski <ag@wheaties.ai.mit.edu>
! ;; Maintainer: FSF
! ;; Keywords: data
  
  ;; This file is part of GNU Emacs.
***************
*** 495,498 ****
--- 496,500 ----
  ;00000000: 0011 2233 4455 6677 8899 aabb ccdd eeff  0123456789ABCDEF
  
+ ;;;###autoload
  (defun hexlify-buffer ()
    "Convert a binary buffer to hexl format"
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/icomplete.el emacs-19.22/lisp/icomplete.el
*** emacs-19.21/lisp/icomplete.el
--- emacs-19.22/lisp/icomplete.el	Tue Nov 23 19:36:25 1993
***************
*** 0 ****
--- 1,244 ----
+ ;;; icomplete.el - minibuffer completion incremental feedback
+ ;;; This package is in the publid domain.
+ 
+ ;;; Author: Ken Manheimer <klm@nist.gov>
+ ;;; Maintainer: Ken Manheimer <klm@nist.gov>
+ ;;; Version: icomplete.el,v 3.2 1993/11/19 18:42:52 klm Exp klm
+ ;;; Created: Mar 1993 klm@nist.gov - first release to usenet
+ ;;; Keywords: help, abbrev
+ 
+ ;;; Commentary:
+ 
+ ;;; Loading this package implements a more finely-grained completion
+ ;;; feedback scheme, indicating, within the minibuffer, the
+ ;;; prospective minibuffer completion candidates, as you type.  See
+ ;;; the documentation string for 'icomplete-prompt' for a specific
+ ;;; description of icompletion.
+ 
+ ;;; This will not work on Emacs 18 versions - there may be a version
+ ;;; for v18 in the elisp archives, at archive.cis.ohio-state.edu, in
+ ;;; /pub/gnu/emacs/elisp-archive.
+ 
+ ;;; Code:
+ 
+ ;;;_ + Provide
+ (provide 'icomplete)
+ 
+ ;;;_ + User Customization variables
+ ;;;_  = icomplete-inhibit
+ (defvar icomplete-inhibit nil
+   "*Set this variable to t at any time to inhibit icomplete.")
+ 
+ ;;;_ + Setup
+ ;;;_  - Internal Variables
+ ;;;_   = icomplete-eoinput 1
+ (defvar icomplete-eoinput 1
+   "Point where minibuffer input ends and completion info begins.")
+ (make-variable-buffer-local 'icomplete-eoinput)
+ ;;;_  > icomplete-prime-session ()
+ (defun icomplete-prime-session ()
+ 
+   "Prep emacs v 19 for icompletion.  For emacs v19.18 and later revs,
+ icomplete is installed in 'minibuffer-setup-hook'.  Global pre- and
+ post-command-hook functions are used in v19.17 and earlier revs."
+ 
+       (let* ((v19-rev (and (string-match "^19\\.\\([0-9]+\\)" emacs-version)
+ 		       (string-to-int (substring emacs-version
+ 						 (match-beginning 1)
+ 						 (match-end 1))))))
+ 
+ 	(cond ((and v19-rev		; emacs v 19, some rev,
+ 		    (> v19-rev 17))
+ 	       ;; Post v19rev17, has minibuffer-setup-hook, use it:
+ 	       (add-hook 'minibuffer-setup-hook 'icomplete-prime-minibuffer))
+ 	      (v19-rev
+ 	       ;; v19rev17 and prior (including lucid): use global
+ 	       ;; pre- and post-command-hooks, instead:
+ 	       (add-hook 'pre-command-hook 'icomplete-pre-command-hook 'append)
+ 	       (add-hook 'post-command-hook
+ 			 'icomplete-post-command-hook 'append))
+ 	      ((format "icomplete: non v19 emacs, %s - %s"
+ 		       emacs-version "try elisp-archive icomplete")))))
+ ;;;_  > icomplete-prime-minibuffer ()
+ (defun icomplete-prime-minibuffer ()
+ 
+   "Prep emacs, v 19.18 or later, for icomplete.  \(icomplete-prime-
+ session establishes global hooks, instead, in emacs 19 versions 19.17
+ and prior.\)  Run via minibuffer-setup-hook \(emacs 19.18 or later\),
+ adds icomplete pre- and post-command hooks to do icomplete display
+ management."
+ 
+   ;; We append the hooks because preliminary version of blink-paren
+   ;; post-command-hook i have interferes with proper operation of
+   ;; minibuffer quit.
+   (make-local-variable 'pre-command-hook)
+   (make-local-variable 'post-command-hook)
+   (add-hook 'pre-command-hook 'icomplete-pre-command-hook)
+   (add-hook 'post-command-hook 'icomplete-post-command-hook))
+ ;;;_  > icomplete-window-minibuffer-p ()
+ (defmacro icomplete-window-minibuffer-p ()
+ 
+   "Returns non-nil if current window is a minibuffer window.
+ Trivially equates to '(window-minibuffer-p nil)', with the nil
+ provided in case the argument is not optional in Lucid emacs (which
+ some net correspondance seems to indicate)."
+ 
+   '(window-minibuffer-p nil))
+ 
+ ;;;_ + Completion
+ ;;;_  - Completion feedback hooks
+ ;;;_   > icomplete-pre-command-hook ()
+ (defun icomplete-pre-command-hook ()
+   "Cleanup completions exhibit before user's new input (or whatever) is dealt
+ with."
+   (if (and (icomplete-window-minibuffer-p)
+ 	   (not (symbolp minibuffer-completion-table))
+ 	   (not icomplete-inhibit))
+       (if (and (boundp 'icomplete-eoinput)
+ 	       icomplete-eoinput)
+ 	  (if (> icomplete-eoinput (point-max))
+ 	      ;; Oops, got rug pulled out from under us - reinit:
+ 	      (setq icomplete-eoinput (point-max))
+ 	    (let ((buffer-undo-list buffer-undo-list ))	; prevent entry
+ 	      (delete-region icomplete-eoinput (point-max))))
+ 	(make-local-variable 'icomplete-eoinput)
+ 	(setq icomplete-eoinput 1))))
+ ;;;_   > icomplete-post-command-hook ()
+ (defun icomplete-post-command-hook ()
+   "Exhibit completions, leaving icomplete-eoinput with position where user
+ input leaves off and exhibit begins, so icomplete-pre-command-hook can
+ subsequently cleanup."
+   (if (and (icomplete-window-minibuffer-p)	; ... in a minibuffer.
+ 	   (not icomplete-inhibit)	; ... not specifically inhibited.
+ 	   ;(sit-for 0)			; ... redisplay and if there's input
+ 					; waiting, then don't icomplete
+ 					; (stigs suggestion) (too jumpy!)
+ 	   ;; Inhibit for file-name and other custom-func completions:
+ 	   (not (symbolp minibuffer-completion-table))
+ 	   )
+       (let ((buffer-undo-list buffer-undo-list ))	; prevent entry
+ 	(icomplete-exhibit))))
+ ;;;_   > icomplete-window-setup-hook ()
+ (defun icomplete-window-setup-hook ()
+   "Exhibit completions, leaving icomplete-eoinput with position where user
+ input leaves off and exhibit begins, so icomplete-pre-command-hook can
+ subsequently cleanup."
+   (if (and (icomplete-window-minibuffer-p)	; ... in a minibuffer.
+ 	   )
+       (message "ic ws doing")(sit-for 1)))
+ ;;;_   > icomplete-exhibit ()
+ (defun icomplete-exhibit ()
+   "Exhibit completions, leaving icomplete-eoinput with position where user
+ input leaves off and exhibit begins, so icomplete-pre-command-hook can
+ subsequently cleanup."
+   (if (not (symbolp minibuffer-completion-table))
+       (let ((contents (buffer-substring (point-min)(point-max)))
+ 	    (buffer-undo-list t))
+ 	(save-excursion
+ 	  (goto-char (point-max))
+                                         ; Register the end of input, so we
+                                         ; know where the extra stuff
+                                         ; (match-status info) begins:
+ 	  (if (not (boundp 'icomplete-eoinput))
+ 	      ;; In case it got wiped out by major mode business:
+ 	      (make-local-variable 'icomplete-eoinput))
+ 	  (setq icomplete-eoinput (point))
+                                         ; Insert the match-status information:
+ 	  (if (> (point-max) 1)
+ 	      (insert-string
+ 		(icomplete-prompt contents
+ 				  minibuffer-completion-table
+ 				  minibuffer-completion-predicate
+ 				  (not
+ 				   minibuffer-completion-confirm))))))))
+ 
+ ;;;_  - Completion feedback producer
+ ;;;_   > icomplete-prompt (name candidates predicate require-match)
+ (defun icomplete-prompt (name candidates predicate require-match)
+   "Identify prospective candidates for minibuffer completion.
+ 
+ The display is updated with each minibuffer keystroke when icomplete
+ is enabled \(by loading the 'icomplete' elisp package\) and doing
+ minibuffer completion.
+ 
+ Prospective completion suffixes (if any) are displayed, bracketed by
+ one of \(), \[], or \{} pairs.  The choice of brackets is as follows:
+ 
+   \(...) - a single prospect is identified and matching is enforced,
+   \[...] - a single prospect is identified but matching is optional, or
+   \{...} - multiple prospects, separated by commas, are indicated, and
+           further input is required to distingish a single one.
+ 
+ The displays for disambiguous matches have \" [Matched]\" appended
+ \(whether complete or not), or \" \[No matches]\", if no eligible
+ matches exist."
+ 
+   (let ((comps (all-completions name candidates predicate))
+                                         ; "-determined" - only one candidate
+         (open-bracket-determined (if require-match "(" "["))
+         (close-bracket-determined (if require-match ")" "]"))
+                                         ;"-prospects" - more than one candidate
+         (open-bracket-prospects "{")
+         (close-bracket-prospects "}")
+         )
+     (cond ((null comps) (format " %sNo matches%s"
+                                 open-bracket-determined
+                                 close-bracket-determined))
+           ((null (cdr comps))           ;one match
+            (concat (if (and (> (length (car comps))
+                                (length name)))
+                        (concat open-bracket-determined
+                                (substring (car comps) (length name))
+                                close-bracket-determined)
+                      "")
+                    " [Matched]"))
+           (t                            ;multiple matches
+            (let* ((most (try-completion name candidates predicate))
+                   (most-len (length most))
+                   most-is-exact
+                   (alternatives
+                    (apply
+                     'concat
+                     (cdr (apply 'append
+                                 (mapcar '(lambda (com)
+                                            (if (= (length com) most-len)
+                                                ;; Most is one exact match,
+                                                ;; note that and leave out
+                                                ;; for later indication:
+                                                (progn
+                                                  (setq most-is-exact t)
+                                                  ())
+                                              (list ","
+                                                    (substring com
+                                                               most-len))))
+                                         comps))))))
+              (concat (and (> most-len (length name))
+                           (concat open-bracket-determined
+                                   (substring most (length name))
+                                   close-bracket-determined))
+                      open-bracket-prospects
+                      (if most-is-exact
+                          (concat "," alternatives)
+                        alternatives)
+                      close-bracket-prospects))))))
+ 
+ ;;;_ + Initialization
+ (icomplete-prime-session)
+ 
+ ;;;_* Local emacs vars.
+ '(
+ Local variables:
+ eval: (save-excursion
+         (if (not (condition-case err (outline-mode t)
+                    (wrong-number-of-arguments nil)))
+             (progn
+               (message
+                "Allout outline-mode not loaded, not adjusting buffer exposure")
+               (sit-for 1))
+           (message "Adjusting '%s' visibility" (buffer-name))
+           (outline-lead-with-comment-string ";;;_")
+           (goto-char 0)
+           (outline-exposure -1 0)))
+ End:)
+ 
+ ;;; icomplete.el ends here
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/inf-lisp.el emacs-19.22/lisp/inf-lisp.el
*** emacs-19.21/lisp/inf-lisp.el	Tue Nov 16 07:15:35 1993
--- emacs-19.22/lisp/inf-lisp.el	Sun Nov 21 19:36:33 1993
***************
*** 575,579 ****
  				    inferior-lisp-buffer))))
      (or proc
! 	(error "No current process. See variable inferior-lisp-buffer"))))
  
  
--- 575,579 ----
  				    inferior-lisp-buffer))))
      (or proc
! 	(error "No Lisp subprocess; see variable `inferior-lisp-buffer'"))))
  
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/info.el emacs-19.22/lisp/info.el
*** emacs-19.21/lisp/info.el	Tue Nov 16 01:52:02 1993
--- emacs-19.22/lisp/info.el	Tue Nov 23 19:19:26 1993
***************
*** 729,733 ****
  	 ;; See if this one should be the default.
  	 (and (null default)
! 	      (< (match-beginning 0) start-point)
  	      (<= start-point (point))
  	      (setq default t))
--- 729,733 ----
  	 ;; See if this one should be the default.
  	 (and (null default)
! 	      (<= (match-beginning 0) start-point)
  	      (<= start-point (point))
  	      (setq default t))
***************
*** 1376,1380 ****
    (set-buffer-modified-p (buffer-modified-p))
    (message (substitute-command-keys
! 	     "Editing: Type \\<Info-mode-map>\\[Info-cease-edit] to return to info")))
  
  (defun Info-cease-edit ()
--- 1376,1380 ----
    (set-buffer-modified-p (buffer-modified-p))
    (message (substitute-command-keys
! 	     "Editing: Type \\<Info-edit-map>\\[Info-cease-edit] to return to info")))
  
  (defun Info-cease-edit ()
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/isearch.el emacs-19.22/lisp/isearch.el
*** emacs-19.21/lisp/isearch.el	Tue Nov 16 07:15:36 1993
--- emacs-19.22/lisp/isearch.el	Fri Nov 26 17:20:37 1993
***************
*** 5,9 ****
  ;; Author: Daniel LaLiberte <liberte@cs.uiuc.edu>
  
! ;; |$Date: 1993/10/24 04:05:22 $|$Revision: 1.52 $
  
  ;; This file is part of GNU Emacs.
--- 5,9 ----
  ;; Author: Daniel LaLiberte <liberte@cs.uiuc.edu>
  
! ;; |$Date: 1993/11/26 22:20:23 $|$Revision: 1.55 $
  
  ;; This file is part of GNU Emacs.
***************
*** 1002,1006 ****
  		(symbolp (aref key 0))
  		(listp (aref key 1))
! 		(consp (posn-point (event-start (aref key 1))))
  		(setq index 1))
  	   ;; If we got a mouse click, maybe it was read with the buffer
--- 1002,1008 ----
  		(symbolp (aref key 0))
  		(listp (aref key 1))
! 		;; These events now have a symbol; they used to have a list.
! 		;; Accept either one.  Other events have a number here.
! 		(not (numberp (posn-point (event-start (aref key 1)))))
  		(setq index 1))
  	   ;; If we got a mouse click, maybe it was read with the buffer
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/iso-acc.el emacs-19.22/lisp/iso-acc.el
*** emacs-19.21/lisp/iso-acc.el	Tue Nov 16 01:33:35 1993
--- emacs-19.22/lisp/iso-acc.el	Sun Nov 21 17:53:53 1993
***************
*** 56,59 ****
--- 56,62 ----
  ;; Function `iso-accents-mode' can be used to enable the iso accents
  ;; minor mode, or disable it.
+ 
+ ;; If you want only some of these characters to serve as accents,
+ ;; set iso-accents-enable to the list of characters that should be special.
  
  ;;; Code:
***************
*** 73,77 ****
      ((?' ?o) ?\363)
      ((?' ?u) ?\372)
!     ((?' ?Y) ?\375)
      ((?' ?') ?\264)
      ((?' ? ) ?')
--- 76,80 ----
      ((?' ?o) ?\363)
      ((?' ?u) ?\372)
!     ((?' ?y) ?\375)
      ((?' ?') ?\264)
      ((?' ? ) ?')
***************
*** 109,112 ****
--- 112,116 ----
      ((?\" ?i) ?\357)
      ((?\" ?o) ?\366)
+     ((?\" ?s) ?\337)
      ((?\" ?u) ?\374)
      ((?\" ?y) ?\377)
***************
*** 119,123 ****
      ((?\~ ?O) ?\325)
      ((?\~ ?a) ?\343)
!     ((?\~ ?c) ?\307)
      ((?\~ ?d) ?\360)
      ((?\~ ?n) ?\361)
--- 123,127 ----
      ((?\~ ?O) ?\325)
      ((?\~ ?a) ?\343)
!     ((?\~ ?c) ?\347)
      ((?\~ ?d) ?\360)
      ((?\~ ?n) ?\361)
***************
*** 181,193 ****
        (vector first-char))))
  
  (or key-translation-map (setq key-translation-map (make-sparse-keymap)))
  ;; For sequences starting with an accent character,
  ;; use a function that tests iso-accents-minor-mode.
! (define-key key-translation-map "'"  'iso-accents-accent-key)
! (define-key key-translation-map "`"  'iso-accents-accent-key)
! (define-key key-translation-map "^"  'iso-accents-accent-key)
! (define-key key-translation-map "\"" 'iso-accents-accent-key)
! (define-key key-translation-map "~" 'iso-accents-accent-key)
! (define-key key-translation-map "/" 'iso-accents-accent-key)
  
  ;; It is a matter of taste if you want the minor mode indicated
--- 185,209 ----
        (vector first-char))))
  
+ (defvar iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/)
+   "*List of accent keys that become prefixes in ISO Accents mode.
+ The default is (?' ?` ?^ ?\" ?~ ?/), which contains all the supported
+ accent keys.  For certain languages, you might want to remove some of
+ those characters that are not actually used.")
+ 
  (or key-translation-map (setq key-translation-map (make-sparse-keymap)))
  ;; For sequences starting with an accent character,
  ;; use a function that tests iso-accents-minor-mode.
! (if (memq ?' iso-accents-enable)
!     (define-key key-translation-map "'"  'iso-accents-accent-key))
! (if (memq ?` iso-accents-enable)
!     (define-key key-translation-map "`"  'iso-accents-accent-key))
! (if (memq ?^ iso-accents-enable)
!     (define-key key-translation-map "^"  'iso-accents-accent-key))
! (if (memq ?\" iso-accents-enable)
!     (define-key key-translation-map "\"" 'iso-accents-accent-key))
! (if (memq ?~ iso-accents-enable)
!     (define-key key-translation-map "~" 'iso-accents-accent-key))
! (if (memq ?/ iso-accents-enable)
!     (define-key key-translation-map "/" 'iso-accents-accent-key))
  
  ;; It is a matter of taste if you want the minor mode indicated
***************
*** 207,215 ****
  letter key so that it inserts an ISO accented letter.
  
  Special combinations: ~c gives a c with cedilla,
  ~d gives a d with dash.
  ~< and ~> give guillemets.
  
! With an argument, a positive argument enables ISO-accents mode, 
  and a negative argument disables it."
  
--- 223,238 ----
  letter key so that it inserts an ISO accented letter.
  
+ The variable `iso-accents-enable' specifies the list of characters to
+ enable as accents.  If you don't need all of them, remove the ones you
+ don't need from that list.
+ 
  Special combinations: ~c gives a c with cedilla,
  ~d gives a d with dash.
+ \"s gives German sharp s.
+ /a gives a with ring.
+ /e gives an a-e ligature.
  ~< and ~> give guillemets.
  
! With an argument, a positive argument enables ISO Accents mode, 
  and a negative argument disables it."
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/lisp-mode.el emacs-19.22/lisp/lisp-mode.el
*** emacs-19.21/lisp/lisp-mode.el	Tue Nov 16 07:15:46 1993
--- emacs-19.22/lisp/lisp-mode.el	Sun Nov 21 19:40:49 1993
***************
*** 152,157 ****
    (setq lisp-mode-map
  	(nconc (make-sparse-keymap) shared-lisp-mode-map))
!   (define-key lisp-mode-map "\e\C-x" 'lisp-send-defun)
!   (define-key lisp-mode-map "\C-c\C-l" 'run-lisp))
  
  (defun lisp-mode ()
--- 152,157 ----
    (setq lisp-mode-map
  	(nconc (make-sparse-keymap) shared-lisp-mode-map))
!   (define-key lisp-mode-map "\e\C-x" 'lisp-eval-defun)
!   (define-key lisp-mode-map "\C-c\C-z" 'run-lisp))
  
  (defun lisp-mode ()
***************
*** 176,180 ****
  
  ;; This will do unless shell.el is loaded.
! (defun lisp-send-defun nil
    "Send the current defun to the Lisp process made by \\[run-lisp]."
    (interactive)
--- 176,180 ----
  
  ;; This will do unless shell.el is loaded.
! (defun lisp-eval-defun nil
    "Send the current defun to the Lisp process made by \\[run-lisp]."
    (interactive)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/loaddefs.el emacs-19.22/lisp/loaddefs.el
*** emacs-19.21/lisp/loaddefs.el	Tue Nov 16 08:26:38 1993
--- emacs-19.22/lisp/loaddefs.el	Fri Nov 26 18:54:52 1993
***************
*** 2888,2892 ****
  ;;;***
  
! ;;;### (autoloads (xdb dbx sdb gdb) "gud" "gud.el" (11365 54337))
  ;;; Generated autoloads from gud.el
  
--- 2888,2892 ----
  ;;;***
  
! ;;;### (autoloads (perldb xdb dbx sdb gdb) "gud" "gud.el" (11436 59090))
  ;;; Generated autoloads from gud.el
  
***************
*** 2914,2917 ****
--- 2914,2922 ----
  directories if your program contains sources from more than one directory." t nil)
  
+ (autoload (quote perldb) "gud" "\
+ Run perldb on program FILE in buffer *gud-FILE*.
+ The directory containing FILE becomes the initial working directory
+ and source-file directory for your debugger." t nil)
+ 
  ;;;***
  
***************
*** 2935,2939 ****
  ;;;***
  
! ;;;### (autoloads (hexl-find-file hexl-mode) "hexl" "hexl.el" (11319 6522))
  ;;; Generated autoloads from hexl.el
  
--- 2940,2944 ----
  ;;;***
  
! ;;;### (autoloads (hexlify-buffer hexl-find-file hexl-mode) "hexl" "hexl.el" (11500 60646))
  ;;; Generated autoloads from hexl.el
  
***************
*** 3013,3016 ****
--- 3018,3024 ----
  Edit file FILENAME in hexl-mode.
  Switch to a buffer visiting file FILENAME, creating one in none exists." t nil)
+ 
+ (autoload (quote hexlify-buffer) "hexl" "\
+ Convert a binary buffer to hexl format" t nil)
  
  ;;;***
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/mail-utils.el emacs-19.22/lisp/mail-utils.el
*** emacs-19.21/lisp/mail-utils.el	Tue Nov 16 07:15:59 1993
--- emacs-19.22/lisp/mail-utils.el	Sun Nov 21 05:04:07 1993
***************
*** 162,166 ****
      (let ((case-fold-search t)
  	  (name (concat "^" (regexp-quote field-name) "[ \t]*:[ \t]*")))
-       (goto-char (point-min))
        (if all
  	  (let ((value ""))
--- 162,165 ----
***************
*** 169,175 ****
  		(while (progn (forward-line 1)
  			      (looking-at "[ \t]")))
  		(setq value (concat value
  				    (if (string= value "") "" ", ")
! 				    (buffer-substring opoint (1- (point)))))))
  	    (and (not (string= value "")) value))
  	(if (re-search-forward name nil t)
--- 168,178 ----
  		(while (progn (forward-line 1)
  			      (looking-at "[ \t]")))
+ 		;; Back up over newline, then trailing spaces or tabs
+ 		(forward-char -1)
+ 		(while (member (preceding-char) '(?  ?\t))
+ 		  (forward-char -1))
  		(setq value (concat value
  				    (if (string= value "") "" ", ")
! 				    (buffer-substring opoint (point))))))
  	    (and (not (string= value "")) value))
  	(if (re-search-forward name nil t)
***************
*** 179,183 ****
  		(while (progn (forward-line 1)
  			      (looking-at "[ \t]")))
! 		(buffer-substring opoint (1- (point))))))))))
  
  ;; Parse a list of tokens separated by commas.
--- 182,190 ----
  		(while (progn (forward-line 1)
  			      (looking-at "[ \t]")))
! 		;; Back up over newline, then trailing spaces or tabs
! 		(forward-char -1)
! 		(while (member (preceding-char) '(?  ?\t))
! 		  (forward-char -1))
! 		(buffer-substring opoint (point)))))))))
  
  ;; Parse a list of tokens separated by commas.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/man.el emacs-19.22/lisp/man.el
*** emacs-19.21/lisp/man.el	Tue Nov 16 07:16:05 1993
--- emacs-19.22/lisp/man.el	Mon Nov 22 01:32:40 1993
***************
*** 210,213 ****
--- 210,221 ----
    "*Switches passed to the man command, as a single string.")
  
+ ;; Would someone like to provide a good test for being on Solaris?
+ ;; We could give it its own value of system-type, but that has drawbacks;
+ ;; it would require changes in lots of places that test system-type.
+ (defvar Man-specified-section-option ""
+   "*Option that indicates a specified a manual section name.
+ On most Unix systems, no option is needed for this.
+ On Solaris, you need to set this to \"-s \".")
+ 
  ;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ;; end user variables
***************
*** 315,319 ****
  			      s2)
  		    slist nil))))
! 	(concat section " " word))
      ref))
  
--- 323,327 ----
  			      s2)
  		    slist nil))))
! 	(concat Man-specified-section-option section " " word))
      ref))
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/menu-bar.el emacs-19.22/lisp/menu-bar.el
*** emacs-19.21/lisp/menu-bar.el	Tue Nov 16 07:16:08 1993
--- emacs-19.22/lisp/menu-bar.el	Tue Nov 23 14:24:17 1993
***************
*** 2,6 ****
  
  ;; Author: RMS
! ;; Keywords: internals
  
  ;; Copyright (C) 1993 Free Software Foundation, Inc.
--- 2,6 ----
  
  ;; Author: RMS
! ;; Keywords: internal
  
  ;; Copyright (C) 1993 Free Software Foundation, Inc.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/mouse.el emacs-19.22/lisp/mouse.el
*** emacs-19.21/lisp/mouse.el	Tue Nov 16 07:16:19 1993
--- emacs-19.22/lisp/mouse.el	Sat Nov 27 02:51:26 1993
***************
*** 282,285 ****
--- 282,286 ----
          (setq start end
                end temp)))
+   (setq mode (mod mode 3))
    (cond ((= mode 0)
  	 (list start end))
***************
*** 379,382 ****
--- 380,386 ----
  
  (defun mouse-save-then-kill-delete-region (beg end)
+   ;; We must make our own undo boundaries
+   ;; because they happen automatically only for the current buffer.
+   (undo-boundary)
    (if (or (= beg end) (eq buffer-undo-list t))
        ;; If we have no undo list in this buffer,
***************
*** 394,397 ****
--- 398,403 ----
        ;; but don't record it.
        (setq buffer-undo-list t)
+       (if (/= (length (car kill-ring)) (- (max end beg) (min end beg)))
+ 	  (error "Lossage in mouse-save-then-kill-delete-region"))
        (delete-region beg end))
      (let ((tail buffer-undo-list))
***************
*** 402,406 ****
        ;; Replace it with an entry for the entire deleted text.
        (and tail
! 	   (setcar tail (cons (car kill-ring) (min beg end)))))))
  
  (defun mouse-save-then-kill (click)
--- 408,413 ----
        ;; Replace it with an entry for the entire deleted text.
        (and tail
! 	   (setcar tail (cons (car kill-ring) (min beg end))))))
!   (undo-boundary))
  
  (defun mouse-save-then-kill (click)
***************
*** 420,424 ****
  	;; prevent setting this-command to kill-region.
  	(this-command this-command))
!     (if (> mouse-selection-click-count 0)
  	(if (not (and (eq last-command 'mouse-save-then-kill)
  		      (equal click-posn
--- 427,431 ----
  	;; prevent setting this-command to kill-region.
  	(this-command this-command))
!     (if (> (mod mouse-selection-click-count 3) 0)
  	(if (not (and (eq last-command 'mouse-save-then-kill)
  		      (equal click-posn
***************
*** 491,495 ****
  (global-set-key [M-down-mouse-1] 'mouse-drag-secondary)
  (global-set-key [M-mouse-3] 'mouse-secondary-save-then-kill)
! (global-set-key [M-mouse-2] 'mouse-kill-secondary)
  
  ;; An overlay which records the current secondary selection
--- 498,502 ----
  (global-set-key [M-down-mouse-1] 'mouse-drag-secondary)
  (global-set-key [M-mouse-3] 'mouse-secondary-save-then-kill)
! (global-set-key [M-mouse-2] 'mouse-yank-secondary)
  
  ;; An overlay which records the current secondary selection
***************
*** 558,562 ****
  		(make-overlay (point) (point))))
        (overlay-put mouse-secondary-overlay 'face 'secondary-selection)
!       (if (> click-count 0)
  	  ;; Double or triple press: make an initial selection
  	  ;; of one word or line.
--- 565,569 ----
  		(make-overlay (point) (point))))
        (overlay-put mouse-secondary-overlay 'face 'secondary-selection)
!       (if (> (mod click-count 3) 0)
  	  ;; Double or triple press: make an initial selection
  	  ;; of one word or line.
***************
*** 630,646 ****
  		(save-window-excursion
  		  (delete-overlay mouse-secondary-overlay)
  		  (select-window start-window)
  		  (save-excursion
  		    (goto-char mouse-secondary-start)
  		    (sit-for 1)))
! 	      (kill-ring-save (overlay-start mouse-secondary-overlay)
! 			      (overlay-end mouse-secondary-overlay))))))))
  
! (defun mouse-kill-secondary ()
!   "Kill the text in the secondary selection."
!   (interactive "*")
!   (kill-region (overlay-start mouse-secondary-overlay)
! 	       (overlay-end mouse-secondary-overlay))
    (delete-overlay mouse-secondary-overlay)
    (setq mouse-secondary-overlay nil))
  
--- 637,679 ----
  		(save-window-excursion
  		  (delete-overlay mouse-secondary-overlay)
+ 		  (x-set-selection 'SECONDARY nil)
  		  (select-window start-window)
  		  (save-excursion
  		    (goto-char mouse-secondary-start)
  		    (sit-for 1)))
! 	      (x-set-selection
! 	       'SECONDARY
! 	       (buffer-substring (overlay-start mouse-secondary-overlay)
! 				 (overlay-end mouse-secondary-overlay)))))))))
  
! (defun mouse-yank-secondary (click)
!   "Insert the last stretch of killed text at the position clicked on.
! Prefix arguments are interpreted as with \\[yank]."
!   (interactive "e")
!   (save-excursion
!     (set-buffer (window-buffer (posn-window (event-start click))))
!     (goto-char (posn-point (event-start click)))
!     (insert (x-get-selection 'SECONDARY))))
! 
! (defun mouse-kill-secondary (click)
!   "Kill the text in the secondary selection.
! This is intended more as a keyboard command than as a mouse command
! but it can work as either one.
! 
! The current buffer (in case of keyboard use), or the buffer clicked on,
! must be the one that the secondary selection is in.  This requirement
! is to prevent accidents."
!   (interactive "e")
!   (or (eq (overlay-buffer mouse-secondary-overlay)
! 	  (if (listp click)
! 	      (window-buffer (posn-window (event-start click)))
! 	    (current-buffer)))
!       (error "Select or click on the buffer where the secondary selection is"))
!   (save-excursion
!     (set-buffer (overlay-buffer mouse-secondary-overlay))
!     (kill-region (overlay-start mouse-secondary-overlay)
! 		 (overlay-end mouse-secondary-overlay)))
    (delete-overlay mouse-secondary-overlay)
+   (x-set-selection 'SECONDARY nil)
    (setq mouse-secondary-overlay nil))
  
***************
*** 662,747 ****
  	;; prevent setting this-command to kill-region.
  	(this-command this-command))
!     (if (> mouse-selection-click-count 0)
! 	(if (not (and (eq last-command 'mouse-secondary-save-then-kill)
! 		      (equal click-posn
! 			     (car (cdr-safe (cdr-safe mouse-save-then-kill-posn))))))
! 	    ;; Find both ends of the object selected by this click.
! 	    (let* ((range
! 		    (mouse-start-end click-posn click-posn
! 				     mouse-selection-click-count)))
! 	      ;; Move whichever end is closer to the click.
! 	      ;; That's what xterm does, and it seems reasonable.
! 	      (if (< (abs (- click-posn (overlay-start mouse-secondary-overlay)))
! 		     (abs (- click-posn (overlay-end mouse-secondary-overlay))))
! 		  (move-overlay mouse-secondary-overlay (car range)
! 				(overlay-end mouse-secondary-overlay))
  		  (move-overlay mouse-secondary-overlay
  				(overlay-start mouse-secondary-overlay)
  				(nth 1 range)))
! 	      ;; We have already put the old region in the kill ring.
! 	      ;; Replace it with the extended region.
! 	      ;; (It would be annoying to make a separate entry.)
! 	      (setcar kill-ring (buffer-substring
! 				 (overlay-start mouse-secondary-overlay)
! 				 (overlay-end mouse-secondary-overlay)))
! 	      (if interprogram-cut-function
! 		  (funcall interprogram-cut-function (car kill-ring)))
! 	      ;; Arrange for a repeated mouse-3 to kill this region.
! 	      (setq mouse-save-then-kill-posn
! 		    (list (car kill-ring) (point) click-posn)))
! 	  ;; If we click this button again without moving it,
! 	  ;; that time kill.
! 	  (progn
! 	    (mouse-save-then-kill-delete-region
! 	     (overlay-start mouse-secondary-overlay)
! 	     (overlay-end mouse-secondary-overlay))
! 	    (setq mouse-save-then-kill-posn nil)
! 	    (setq mouse-selection-click-count 0)
! 	    (delete-overlay mouse-secondary-overlay)))
!       (if (and (eq last-command 'mouse-secondary-save-then-kill)
! 	       mouse-save-then-kill-posn
! 	       (eq (car mouse-save-then-kill-posn) (car kill-ring))
! 	       (equal (cdr mouse-save-then-kill-posn) (list (point) click-posn)))
! 	  ;; If this is the second time we've called
! 	  ;; mouse-secondary-save-then-kill, delete the text from the buffer.
! 	  (progn
! 	    (mouse-save-then-kill-delete-region
! 	     (overlay-start mouse-secondary-overlay)
! 	     (overlay-end mouse-secondary-overlay))
! 	    (setq mouse-save-then-kill-posn nil)
! 	    (delete-overlay mouse-secondary-overlay))
! 	(if (overlay-start mouse-secondary-overlay)
! 	    ;; We have a selection, so adjust it.
  	    (progn
! 	      (select-window (posn-window posn))
! 	      (if (numberp click-posn)
! 		  (progn
! 		    ;; Move whichever end of the region is closer to the click.
! 		    ;; That is what xterm does, and it seems reasonable.
! 		    (if (< (abs (- click-posn (overlay-start mouse-secondary-overlay)))
! 			   (abs (- click-posn (overlay-end mouse-secondary-overlay))))
! 			(move-overlay mouse-secondary-overlay click-posn
! 				      (overlay-end mouse-secondary-overlay))
  			(move-overlay mouse-secondary-overlay
  				      (overlay-start mouse-secondary-overlay)
  				      click-posn))
! 		    (setq deactivate-mark nil)))
! 	      (setcar kill-ring (buffer-substring
! 				 (overlay-start mouse-secondary-overlay)
! 				 (overlay-end mouse-secondary-overlay)))
! 	      (if interprogram-cut-function
! 		  (funcall interprogram-cut-function (car kill-ring))))
! 	  (if mouse-secondary-start
! 	      ;; All we have is one end of a selection,
! 	      ;; so put the other end here.
! 	      (let ((start (+ 0 mouse-secondary-start)))
! 		(set-buffer (window-buffer (posn-window (event-start click))))
! 		(kill-ring-save start click-posn)
! 		(if mouse-secondary-overlay
! 		    (move-overlay mouse-secondary-overlay start click-posn)
! 		  (setq mouse-secondary-overlay (make-overlay start click-posn)))
! 		(overlay-put mouse-secondary-overlay 'face 'secondary-selection))))
! 	(setq mouse-save-then-kill-posn
! 	      (list (car kill-ring) (point) click-posn))))))
  
  (defun mouse-buffer-menu (event)
--- 695,791 ----
  	;; prevent setting this-command to kill-region.
  	(this-command this-command))
!     (or (eq (window-buffer (posn-window posn))
! 	    (or (and mouse-secondary-overlay
! 		     (overlay-buffer mouse-secondary-overlay))
! 		(if mouse-secondary-start
! 		    (marker-buffer mouse-secondary-start))))
! 	(error "Wrong buffer"))
!     (save-excursion
!       (set-buffer (window-buffer (posn-window posn)))
!       (if (> (mod mouse-selection-click-count 3) 0)
! 	  (if (not (and (eq last-command 'mouse-secondary-save-then-kill)
! 			(equal click-posn
! 			       (car (cdr-safe (cdr-safe mouse-save-then-kill-posn))))))
! 	      ;; Find both ends of the object selected by this click.
! 	      (let* ((range
! 		      (mouse-start-end click-posn click-posn
! 				       mouse-selection-click-count)))
! 		;; Move whichever end is closer to the click.
! 		;; That's what xterm does, and it seems reasonable.
! 		(if (< (abs (- click-posn (overlay-start mouse-secondary-overlay)))
! 		       (abs (- click-posn (overlay-end mouse-secondary-overlay))))
! 		    (move-overlay mouse-secondary-overlay (car range)
! 				  (overlay-end mouse-secondary-overlay))
  		  (move-overlay mouse-secondary-overlay
  				(overlay-start mouse-secondary-overlay)
  				(nth 1 range)))
! 		;; We have already put the old region in the kill ring.
! 		;; Replace it with the extended region.
! 		;; (It would be annoying to make a separate entry.)
! 		(setcar kill-ring (buffer-substring
! 				   (overlay-start mouse-secondary-overlay)
! 				   (overlay-end mouse-secondary-overlay)))
! 		(if interprogram-cut-function
! 		    (funcall interprogram-cut-function (car kill-ring)))
! 		;; Arrange for a repeated mouse-3 to kill this region.
! 		(setq mouse-save-then-kill-posn
! 		      (list (car kill-ring) (point) click-posn)))
! 	    ;; If we click this button again without moving it,
! 	    ;; that time kill.
  	    (progn
! 	      (mouse-save-then-kill-delete-region
! 	       (overlay-start mouse-secondary-overlay)
! 	       (overlay-end mouse-secondary-overlay))
! 	      (setq mouse-save-then-kill-posn nil)
! 	      (setq mouse-selection-click-count 0)
! 	      (delete-overlay mouse-secondary-overlay)))
! 	(if (and (eq last-command 'mouse-secondary-save-then-kill)
! 		 mouse-save-then-kill-posn
! 		 (eq (car mouse-save-then-kill-posn) (car kill-ring))
! 		 (equal (cdr mouse-save-then-kill-posn) (list (point) click-posn)))
! 	    ;; If this is the second time we've called
! 	    ;; mouse-secondary-save-then-kill, delete the text from the buffer.
! 	    (progn
! 	      (mouse-save-then-kill-delete-region
! 	       (overlay-start mouse-secondary-overlay)
! 	       (overlay-end mouse-secondary-overlay))
! 	      (setq mouse-save-then-kill-posn nil)
! 	      (delete-overlay mouse-secondary-overlay))
! 	  (if (overlay-start mouse-secondary-overlay)
! 	      ;; We have a selection, so adjust it.
! 	      (progn
! 		(if (numberp click-posn)
! 		    (progn
! 		      ;; Move whichever end of the region is closer to the click.
! 		      ;; That is what xterm does, and it seems reasonable.
! 		      (if (< (abs (- click-posn (overlay-start mouse-secondary-overlay)))
! 			     (abs (- click-posn (overlay-end mouse-secondary-overlay))))
! 			  (move-overlay mouse-secondary-overlay click-posn
! 					(overlay-end mouse-secondary-overlay))
  			(move-overlay mouse-secondary-overlay
  				      (overlay-start mouse-secondary-overlay)
  				      click-posn))
! 		      (setq deactivate-mark nil)))
! 		(setcar kill-ring (buffer-substring
! 				   (overlay-start mouse-secondary-overlay)
! 				   (overlay-end mouse-secondary-overlay)))
! 		(if interprogram-cut-function
! 		    (funcall interprogram-cut-function (car kill-ring))))
! 	    (if mouse-secondary-start
! 		;; All we have is one end of a selection,
! 		;; so put the other end here.
! 		(let ((start (+ 0 mouse-secondary-start)))
! 		  (kill-ring-save start click-posn)
! 		  (if mouse-secondary-overlay
! 		      (move-overlay mouse-secondary-overlay start click-posn)
! 		    (setq mouse-secondary-overlay (make-overlay start click-posn)))
! 		  (overlay-put mouse-secondary-overlay 'face 'secondary-selection))))
! 	  (setq mouse-save-then-kill-posn
! 		(list (car kill-ring) (point) click-posn))))
!       (x-set-selection 'SECONDARY
! 		       (if (overlay-buffer mouse-secondary-overlay)
! 			   (buffer-substring
! 			    (overlay-start mouse-secondary-overlay)
! 			    (overlay-end mouse-secondary-overlay)))))))
  
  (defun mouse-buffer-menu (event)
***************
*** 1236,1240 ****
  	     (make-face-italic 'italic (selected-frame) t)
  	     (set-face-font 'bold-italic nil (selected-frame))
! 	     (make-face-bold-italic 'bold-italic (selected-frame) t))))
  
  ;;; Bindings for mouse commands.
--- 1280,1301 ----
  	     (make-face-italic 'italic (selected-frame) t)
  	     (set-face-font 'bold-italic nil (selected-frame))
! 	     (make-face-bold-italic 'bold-italic (selected-frame) t)
! 	     ;; Update any nonstandard faces whose definition is
! 	     ;; "a bold/italic/bold&italic version of the frame's font".
! 	     (let ((rest global-face-data))
! 	       (while rest
! 		 (condition-case nil
! 		     (if (listp (face-font (cdr (car rest))))
! 			 (let ((bold (memq 'bold (face-font (cdr (car rest)))))
! 			       (italic (memq 'italic (face-font (cdr (car rest))))))
! 			   (if (and bold italic)
! 			       (make-face-bold-italic (car (car rest)) (selected-frame))
! 			     (if bold
! 				 (make-face-bold (car (car rest)) (selected-frame))
! 			       (if italic
! 				   (make-face-italic (car (car rest)) (selected-frame)))))))
! 		   (error nil))
! 		 (setq rest (cdr rest))))
! 	     )))
  
  ;;; Bindings for mouse commands.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/regi.el emacs-19.22/lisp/regi.el
*** emacs-19.21/lisp/regi.el	Tue Nov 16 07:16:39 1993
--- emacs-19.22/lisp/regi.el	Tue Nov 23 14:33:11 1993
***************
*** 6,10 ****
  ;; Version:       1.8
  ;; Last Modified: 1993/06/01 21:33:00
! ;; Keywords:      regular expression regexp matching text
  
  ;; Copyright (C) 1993 Barry A. Warsaw
--- 6,10 ----
  ;; Version:       1.8
  ;; Last Modified: 1993/06/01 21:33:00
! ;; Keywords:      extensions, matching
  
  ;; Copyright (C) 1993 Barry A. Warsaw
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/reporter.el emacs-19.22/lisp/reporter.el
*** emacs-19.21/lisp/reporter.el	Tue Nov 16 07:16:41 1993
--- emacs-19.22/lisp/reporter.el	Tue Nov 23 15:10:34 1993
***************
*** 6,10 ****
  ;; Version:         1.23
  ;; Last Modified:   1993/09/02 20:28:36
! ;; Keywords: bug reports lisp
  
  ;; Copyright (C) 1993 Free Software Foundation, Inc.
--- 6,10 ----
  ;; Version:         1.23
  ;; Last Modified:   1993/09/02 20:28:36
! ;; Keywords: tools, mail, lisp, extensions
  
  ;; Copyright (C) 1993 Free Software Foundation, Inc.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/rmail.el emacs-19.22/lisp/rmail.el
*** emacs-19.21/lisp/rmail.el	Tue Nov 16 03:42:33 1993
--- emacs-19.22/lisp/rmail.el	Fri Nov 26 15:41:37 1993
***************
*** 564,568 ****
    (and (null rmail-inbox-list)
         (or (equal buffer-file-name (expand-file-name rmail-file-name))
! 	   (equal buffer-file-truename (file-truename rmail-file-name)))
         (setq rmail-inbox-list
  	     (or rmail-primary-inbox-list
--- 564,569 ----
    (and (null rmail-inbox-list)
         (or (equal buffer-file-name (expand-file-name rmail-file-name))
! 	   (equal buffer-file-truename
! 		  (abbreviate-file-name (file-truename rmail-file-name))))
         (setq rmail-inbox-list
  	     (or rmail-primary-inbox-list
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/rmailsort.el emacs-19.22/lisp/rmailsort.el
*** emacs-19.21/lisp/rmailsort.el	Tue Nov 16 07:16:51 1993
--- emacs-19.22/lisp/rmailsort.el	Wed Nov 24 03:08:58 1993
***************
*** 4,8 ****
  
  ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
! ;; Version: $Header: /home/fsf/rms/e19/lisp/RCS/rmailsort.el,v 1.15 1993/06/22 05:55:41 rms Exp $
  ;; Keywords: mail
  
--- 4,8 ----
  
  ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
! ;; Version: $Header: /home/fsf/rms/e19/lisp/RCS/rmailsort.el,v 1.16 1993/11/24 08:08:56 rms Exp $
  ;; Keywords: mail
  
***************
*** 116,179 ****
  If 1st argument REVERSE is non-nil, sort them in reverse order.
  2nd argument KEYFUN is called with a message number, and should return a key."
!   (let ((buffer-read-only nil)
! 	(predicate nil)			;< or string-lessp
! 	(sort-lists nil))
!     (message "Finding sort keys...")
!     (widen)
!     (let ((msgnum 1))
!       (while (>= rmail-total-messages msgnum)
! 	(setq sort-lists
! 	      (cons (list (funcall keyfun msgnum) ;Make sorting key
! 			  (eq rmail-current-message msgnum) ;True if current
! 			  (aref rmail-message-vector msgnum)
! 			  (aref rmail-message-vector (1+ msgnum)))
! 		    sort-lists))
! 	(if (zerop (% msgnum 10))
! 	    (message "Finding sort keys...%d" msgnum))
! 	(setq msgnum (1+ msgnum))))
!     (or reverse (setq sort-lists (nreverse sort-lists)))
!     ;; Decide predicate: < or string-lessp
!     (if (numberp (car (car sort-lists))) ;Is a key numeric?
! 	(setq predicate (function <))
!       (setq predicate (function string-lessp)))
!     (setq sort-lists
! 	  (sort sort-lists
! 		(function
! 		 (lambda (a b)
! 		   (funcall predicate (car a) (car b))))))
!     (if reverse (setq sort-lists (nreverse sort-lists)))
!     ;; Now we enter critical region.  So, keyboard quit is disabled.
!     (message "Reordering messages...")
!     (let ((inhibit-quit t)		;Inhibit quit
! 	  (current-message nil)
! 	  (msgnum 1)
! 	  (msginfo nil))
!       ;; There's little hope that we can easily undo after that.
!       (buffer-flush-undo (current-buffer))
!       (goto-char (rmail-msgbeg 1))
!       ;; To force update of all markers.
!       (insert-before-markers ?Z)
!       (backward-char 1)
!       ;; Now reorder messages.
!       (while sort-lists
! 	(setq msginfo (car sort-lists))
! 	;; Swap two messages.
! 	(insert-buffer-substring
! 	 (current-buffer) (nth 2 msginfo) (nth 3 msginfo))
! 	(delete-region  (nth 2 msginfo) (nth 3 msginfo))
! 	;; Is current message?
! 	(if (nth 1 msginfo)
! 	    (setq current-message msgnum))
! 	(setq sort-lists (cdr sort-lists))
! 	(if (zerop (% msgnum 10))
! 	    (message "Reordering messages...%d" msgnum))
! 	(setq msgnum (1+ msgnum)))
!       ;; Delete the garbage inserted before.
!       (delete-char 1)
!       (setq quit-flag nil)
!       (buffer-enable-undo)
!       (rmail-set-message-counters)
!       (rmail-show-message current-message))
!     ))
  
  (defun rmail-fetch-field (msg field)
--- 116,182 ----
  If 1st argument REVERSE is non-nil, sort them in reverse order.
  2nd argument KEYFUN is called with a message number, and should return a key."
!   (save-excursion
!     ;; If we are in a summary buffer, operate on the Rmail buffer.
!     (if (eq major-mode 'rmail-summary-mode)
! 	(set-buffer rmail-buffer))
!     (let ((buffer-read-only nil)
! 	  (predicate nil)			;< or string-lessp
! 	  (sort-lists nil))
!       (message "Finding sort keys...")
!       (widen)
!       (let ((msgnum 1))
! 	(while (>= rmail-total-messages msgnum)
! 	  (setq sort-lists
! 		(cons (list (funcall keyfun msgnum) ;Make sorting key
! 			    (eq rmail-current-message msgnum) ;True if current
! 			    (aref rmail-message-vector msgnum)
! 			    (aref rmail-message-vector (1+ msgnum)))
! 		      sort-lists))
! 	  (if (zerop (% msgnum 10))
! 	      (message "Finding sort keys...%d" msgnum))
! 	  (setq msgnum (1+ msgnum))))
!       (or reverse (setq sort-lists (nreverse sort-lists)))
!       ;; Decide predicate: < or string-lessp
!       (if (numberp (car (car sort-lists))) ;Is a key numeric?
! 	  (setq predicate (function <))
! 	(setq predicate (function string-lessp)))
!       (setq sort-lists
! 	    (sort sort-lists
! 		  (function
! 		   (lambda (a b)
! 		     (funcall predicate (car a) (car b))))))
!       (if reverse (setq sort-lists (nreverse sort-lists)))
!       ;; Now we enter critical region.  So, keyboard quit is disabled.
!       (message "Reordering messages...")
!       (let ((inhibit-quit t)		;Inhibit quit
! 	    (current-message nil)
! 	    (msgnum 1)
! 	    (msginfo nil))
! 	;; There's little hope that we can easily undo after that.
! 	(buffer-flush-undo (current-buffer))
! 	(goto-char (rmail-msgbeg 1))
! 	;; To force update of all markers.
! 	(insert-before-markers ?Z)
! 	(backward-char 1)
! 	;; Now reorder messages.
! 	(while sort-lists
! 	  (setq msginfo (car sort-lists))
! 	  ;; Swap two messages.
! 	  (insert-buffer-substring
! 	   (current-buffer) (nth 2 msginfo) (nth 3 msginfo))
! 	  (delete-region  (nth 2 msginfo) (nth 3 msginfo))
! 	  ;; Is current message?
! 	  (if (nth 1 msginfo)
! 	      (setq current-message msgnum))
! 	  (setq sort-lists (cdr sort-lists))
! 	  (if (zerop (% msgnum 10))
! 	      (message "Reordering messages...%d" msgnum))
! 	  (setq msgnum (1+ msgnum)))
! 	;; Delete the garbage inserted before.
! 	(delete-char 1)
! 	(setq quit-flag nil)
! 	(buffer-enable-undo)
! 	(rmail-set-message-counters)
! 	(rmail-show-message current-message)))))
  
  (defun rmail-fetch-field (msg field)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/rmailsum.el emacs-19.22/lisp/rmailsum.el
*** emacs-19.21/lisp/rmailsum.el	Tue Nov 16 07:16:51 1993
--- emacs-19.22/lisp/rmailsum.el	Tue Nov 23 02:10:09 1993
***************
*** 486,492 ****
  
  All normal editing commands are turned off.
! Instead, all of the Rmail Mode commands are available, plus:
  
! \\[rmail-summary-undelete-many]	Undelete all or prefix arg deleted messages."
    (interactive)
    (kill-all-local-variables)
--- 486,505 ----
  
  All normal editing commands are turned off.
! Instead, nearly all the Rmail mode commands are available,
! though many of them move only among the messages in the summary.
  
! These additional commands exist:
! 
! \\[rmail-summary-undelete-many]	Undelete all or prefix arg deleted messages.
! \\[rmail-summary-wipe] Delete the summary and go to the Rmail buffer.
! 
! Commands for sorting the summary:
! 
! \\[rmail-summary-sort-by-date] Sort by date.
! \\[rmail-summary-sort-by-subject] Sort by subject.
! \\[rmail-summary-sort-by-author] Sort by author.
! \\[rmail-summary-sort-by-recipient] Sort by recipient.
! \\[rmail-summary-sort-by-correspondent] Sort by correspondent.
! \\[rmail-summary-sort-by-lines] Sort by lines."
    (interactive)
    (kill-all-local-variables)
***************
*** 766,777 ****
    (interactive)
    (save-excursion (set-buffer rmail-buffer) (setq rmail-summary-buffer nil))
!   (let ((rmail-wind (get-buffer-window rmail-buffer)))
      (kill-buffer (current-buffer))
      ;; Delete window if not only one.
      (if (not (eq (selected-window) (next-window nil 'no-minibuf)))
  	(delete-window))
!     ;; Switch to the rmail buffer in this window.
!       ;; Select the window with rmail in it, then delete this window.
!     (and rmail-wind (select-window rmail-wind))))
  
  (defun rmail-summary-expunge ()
--- 779,789 ----
    (interactive)
    (save-excursion (set-buffer rmail-buffer) (setq rmail-summary-buffer nil))
!   (let ((local-rmail-buffer rmail-buffer))
      (kill-buffer (current-buffer))
      ;; Delete window if not only one.
      (if (not (eq (selected-window) (next-window nil 'no-minibuf)))
  	(delete-window))
!     ;; Switch windows to the rmail buffer, or switch to it in this window.
!     (pop-to-buffer local-rmail-buffer)))
  
  (defun rmail-summary-expunge ()
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/sendmail.el emacs-19.22/lisp/sendmail.el
*** emacs-19.21/lisp/sendmail.el	Tue Nov 16 07:16:59 1993
--- emacs-19.22/lisp/sendmail.el	Sun Nov 21 17:17:27 1993
***************
*** 671,675 ****
    (if mail-reply-buffer
        (let ((start (point)))
! 	(delete-windows-on mail-reply-buffer)
  	(insert-buffer mail-reply-buffer)
  	(if (consp arg)
--- 671,678 ----
    (if mail-reply-buffer
        (let ((start (point)))
! 	;; If the original message is in another window in the same frame,
! 	;; delete that window to save screen space.
! 	;; t means don't alter other frames.
! 	(delete-windows-on mail-reply-buffer t)
  	(insert-buffer mail-reply-buffer)
  	(if (consp arg)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/shadowfile.el emacs-19.22/lisp/shadowfile.el
*** emacs-19.21/lisp/shadowfile.el
--- emacs-19.22/lisp/shadowfile.el	Tue Nov 23 01:17:28 1993
***************
*** 0 ****
--- 1,830 ----
+ ;;; shadowfile.el -- automatic file copying for Emacs 19
+ 
+ ;;; Author: Boris Goldowsky <boris@cs.rochester.edu>
+ ;;; Keywords: comm
+ 
+ ;;; Copyright (c) 1993 Free Software Foundation
+ ;;;
+ ;;; This program is free software; you can redistribute it and/or modify
+ ;;; it under the terms of the GNU General Public License as published by
+ ;;; the Free Software Foundation; either version 2, or (at your option)
+ ;;; any later version.
+ ;;;
+ ;;; This program is distributed in the hope that it will be useful,
+ ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;;; GNU General Public License for more details.
+ ;;;
+ ;;; A copy of the GNU General Public License can be obtained from this
+ ;;; program's author or from the Free Software Foundation, Inc., 675
+ ;;; Mass Ave, Cambridge, MA 02139, USA.
+ 
+ ;;; LCD Archive Entry:
+ ;;; shadowfile|Boris Goldowsky|boris@cs.rochester.edu|
+ ;;; Helps you keep identical copies of files in multiple places.|
+ ;;; $Date: 1993/11/23 06:17:27 $ |$Revision: 1.1 $|~/misc/shadowfile.el.Z|
+ 
+ ;;; Commentary:
+ ;;;
+ ;;;  This package helps you to keep identical copies of files in more than one
+ ;;;  place - possibly on different machines.  When you save a file, it checks
+ ;;;  whether it is on the list of files with "shadows", and if so, it tries to
+ ;;;  copy it when you exit emacs (or use the shadow-copy-files command).
+ 
+ ;;; Installation & Use:
+ ;;;
+ ;;;      Put (require 'shadowfile) in your .emacs; add clusters (if necessary)
+ ;;;  and file groups with shadow-define-cluster, shadow-define-literal-group,
+ ;;;  and shadow-define-regexp-group (see the documentation for these functions
+ ;;;  for information on how and when to use them).  After doing this once,
+ ;;;  everything should be automatic.
+ ;;;      The lists of clusters and shadows are saved in a file called
+ ;;;  .shadows, so that they can be remembered from one emacs session to
+ ;;;  another, even (as much as possible) if the emacs session terminates
+ ;;;  abnormally.  The files needing to be copied are stored in .shadow_todo; if
+ ;;;  a file cannot be copied for any reason, it will stay on the list to be
+ ;;;  tried again next time.  The .shadows file should itself have shadows on
+ ;;;  all your accounts so that the information in it is consistent everywhere,
+ ;;;  but .shadow_todo is local information and should have no shadows.
+ ;;;     If you do not want to copy a particular file, you can answer "no"
+ ;;;  and be asked again next time you hit C-x 4 s or exit emacs.  If you do not
+ ;;;  want to be asked again, use shadow-cancel, and you will not be asked until
+ ;;;  you change the file and save it again.  If you do not want to shadow
+ ;;;  that file ever again, you can edit it out of the .shadows buffer.
+ ;;;  Anytime you edit the .shadows buffer, you must type M-x shadow-read-files
+ ;;;  to load in the new information, or your changes will be overwritten!
+ 
+ ;;; Bugs & Warnings:
+ ;;;
+ ;;;  - It is bad to have two emacses both running shadowfile at the same
+ ;;;  time.  It tries to detect this condition, but is not always successful.
+ ;;;
+ ;;;  - You have to be careful not to edit a file in two locations
+ ;;;  before shadowfile has had a chance to copy it; otherwise
+ ;;;  "updating shadows" will overwrite one of the changed versions.
+ ;;;
+ ;;;  - It ought to check modification times of both files to make sure
+ ;;;  it is doing the right thing.  This will have to wait until
+ ;;;  file-newer-than-file-p works between machines.
+ ;;;
+ ;;;  - It will not make directories for you, it just fails to copy files
+ ;;;  that belong in non-existent directories.
+ ;;;
+ ;;;  Please report any bugs to me (boris@cs.rochester.edu).  Also let me know
+ ;;;  if you have suggestions or would like to be informed of updates.
+ 
+ ;;; Code:
+ 
+ (provide 'shadowfile)
+ (require 'ange-ftp)
+ 
+ (setq find-file-visit-truename t)	; makes life easier with symbolic links
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Variables
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ (defvar shadow-noquery nil
+   "*If nonnil, always copy shadow files without asking.")
+ 
+ (defvar shadow-inhibit-message nil
+   "*If nonnil, do not display a message when a file needs copying.")
+ 
+ (defvar shadow-inhibit-overload nil
+   "If nonnil, shadowfile won't redefine C-x C-c.
+ Normally it overloads the function `save-buffers-kill-emacs' to check
+ for files have been changed and need to be copied to other systems.")
+ 
+ (defvar shadow-info-file nil
+   "File to keep shadow information in.  
+ The shadow-info-file should be shadowed to all your accounts to
+ ensure consistency.  Default: ~/.shadows")
+ 
+ (defvar shadow-todo-file nil
+   "File to store the list of uncopied shadows in.
+ This means that if a remote system is down, or for any reason you cannot or
+ decide not to copy your shadow files at the end of one emacs session, it will
+ remember and ask you again in your next emacs session.
+ This file must NOT be shadowed to any other system, it is host-specific.
+ Default: ~/.shadow_todo")
+ 
+ ;;; The following two variables should in most cases initialize themselves
+ ;;; correctly.  They are provided as variables in case the defaults are wrong
+ ;;; on your machine \(and for efficiency).
+ 
+ (defvar shadow-system-name (system-name)
+   "The complete hostname of this machine.")
+ 
+ (defvar shadow-homedir nil
+   "Your home directory on this machine.")
+ 
+ ;;;
+ ;;; Internal variables whose values are stored in the info and todo files:
+ ;;;
+ 
+ (defvar shadow-clusters nil
+   "List of host clusters \(see shadow-define-cluster).")
+ 
+ (defvar shadow-literal-groups nil
+   "List of files that are shared between hosts.
+ This list contains shadow structures with literal filenames, created by
+ shadow-define-group.")
+ 
+ (defvar shadow-regexp-groups nil
+   "List of file types that are shared between hosts.
+ This list contains shadow structures with regexps matching filenames, 
+ created by shadow-define-regexp-group.")
+ 
+ ;;;
+ ;;; Other internal variables:
+ ;;;
+ 
+ (defvar shadow-files-to-copy nil)	; List of files that need to
+ 					; be copied to remote hosts.
+ 
+ (defvar shadow-hashtable nil)		; for speed
+ 
+ (defvar shadow-info-buffer nil)		; buf visiting shadow-info-file
+ (defvar shadow-todo-buffer nil)		; buf visiting shadow-todo-file
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Syntactic sugar; General list and string manipulation
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ (defmacro shadow-when (condition &rest body)
+   ;; From cl.el
+   "(shadow-when CONDITION . BODY) => evaluate BODY if CONDITION is true."
+   (` (if (not (, condition))  ()  (,@ body))))
+   
+ (defun shadow-union (a b)
+   "Add members of list A to list B
+ if they are not equal to items already in B."
+   (if (null a)
+       b
+     (if (member (car a) b)
+ 	(shadow-union (cdr a) b)
+       (shadow-union (cdr a) (cons (car a) b)))))
+ 
+ (defun shadow-find (func list)
+   "If FUNC applied to some element of LIST is nonnil, 
+ return the first such element."
+   (while (and list (not (funcall func (car list))))
+     (setq list (cdr list)))
+   (car list))
+ 
+ (defun shadow-remove-if (func list)
+   "Remove elements satisfying FUNC from LIST.
+ Nondestructive; actually returns a copy of the list with the elements removed."
+   (if list
+       (if (funcall func (car list))
+ 	  (shadow-remove-if func (cdr list))
+ 	(cons (car list) (shadow-remove-if func (cdr list))))
+     nil))
+ 
+ (defun shadow-join (strings sep)
+   "Concatenate elements of the list of STRINGS with SEP between each."
+   (cond ((null strings) "")
+ 	((null (cdr strings)) (car strings))
+ 	((concat (car strings) " " (shadow-join (cdr strings) sep)))))
+ 
+ (defun shadow-regexp-superquote (string)
+   "Like regexp-quote, but includes the ^ and $ 
+ to make sure regexp matches nothing but STRING."
+   (concat "^" (regexp-quote string) "$"))
+ 
+ (defun shadow-suffix (prefix string)
+   "If PREFIX begins STRING, return the rest.
+ Return value is nonnil if PREFIX and STRING are string= up to the length of
+ PREFIX."
+   (let ((lp (length prefix))
+ 	(ls (length string)))
+     (if (and (>= ls lp)
+ 	     (string= prefix (substring string 0 lp)))
+ 	(substring string lp))))
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Clusters and sites
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ ;;; I use the term `site' to refer to a string which may be the name of a
+ ;;; cluster or a literal hostname.  All user-level commands should accept
+ ;;; either.
+ 
+ (defun shadow-make-cluster (name primary regexp)
+   "Creates a shadow cluster 
+ called NAME, using the PRIMARY hostname, REGEXP matching all hosts in the
+ cluster.  The variable shadow-clusters associates the names of clusters to
+ these structures. 
+    This function is for program use: to create clusters interactively, use
+ shadow-define-cluster instead."
+   (list name primary regexp))
+ 
+ (defmacro shadow-cluster-name (cluster)
+   "Return the name of the CLUSTER."
+   (list 'elt cluster 0))
+ 
+ (defmacro shadow-cluster-primary (cluster)
+   "Return the primary hostname of a CLUSTER."
+   (list 'elt cluster 1))
+ 
+ (defmacro shadow-cluster-regexp (cluster)
+   "Return the regexp matching hosts in a CLUSTER."
+   (list 'elt cluster 2))
+ 
+ (defun shadow-set-cluster (name primary regexp)
+   "Put cluster NAME on the list of clusters,
+ replacing old definition if any.  PRIMARY and REGEXP are the
+ information defining the cluster.  For interactive use, call
+ shadow-define-cluster instead."
+   (let ((rest (shadow-remove-if
+ 	       (function (lambda (x) (equal name (car x))))
+ 	       shadow-clusters)))
+     (setq shadow-clusters 
+ 	  (cons (shadow-make-cluster name primary regexp)
+ 		rest))))
+ 
+ (defmacro shadow-get-cluster (name)
+   "Return cluster named NAME, or nil."
+   (list 'assoc name 'shadow-clusters))
+ 
+ (defun shadow-site-primary (site)
+   "If SITE is a cluster, return primary host, otherwise return SITE."
+   (let ((c (shadow-get-cluster site)))
+     (if c
+ 	(shadow-cluster-primary c)
+       site)))
+ 
+ ;;; SITES
+ 
+ (defun shadow-site-cluster (site)
+   "Given a SITE \(hostname or cluster name), return the cluster
+ that it is in, or nil."
+   (or (assoc site shadow-clusters)
+       (shadow-find
+        (function (lambda (x)
+ 		   (string-match (shadow-cluster-regexp x)
+ 				 site)))
+        shadow-clusters)))
+ 
+ (defun shadow-read-site ()
+   "Read a cluster name or hostname from the minibuffer."
+   (let ((ans (completing-read "Host or cluster name [RET when done]: "
+ 			      shadow-clusters)))
+     (if (equal "" ans)
+ 	nil
+       ans)))
+ 
+ (defun shadow-site-match (site1 site2)
+   "Nonnil iff SITE1 is or includes SITE2.  
+ Each may be a host or cluster name; if they are clusters, regexp of site1 will
+ be matched against the primary of site2."
+   (or (string-equal site1 site2) ; quick check
+       (let* ((cluster1 (shadow-get-cluster site1))
+ 	     (primary2 (shadow-site-primary site2)))
+ 	(if cluster1
+ 	    (string-match (shadow-cluster-regexp cluster1) primary2)
+ 	  (string-equal site1 primary2)))))
+ 
+ (defun shadow-get-user (site)
+   "Returns the default username for a site."
+   (ange-ftp-get-user (shadow-site-primary site)))
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Filename manipulation
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ (defun shadow-parse-fullpath (fullpath)
+   "Parse PATH into \(site user path) list,
+ or leave it alone if it already is one.  Returns nil if the argument is not a
+ full ange-ftp pathname."
+   (if (listp fullpath)
+       fullpath
+     (ange-ftp-ftp-name fullpath)))
+ 
+ (defun shadow-parse-path (path)
+   "Parse any PATH into \(site user path) list.
+ Argument can be a simple path, full ange-ftp path, or already a hup list."
+   (or (shadow-parse-fullpath path)
+       (list shadow-system-name
+ 	    (user-login-name)
+ 	    path)))
+ 
+ (defsubst shadow-make-fullpath (host user path)
+   "Make an ange-ftp style fullpath out of HOST, USER (optional), and PATH.
+ This is probably not as general as it ought to be."
+   (concat "/" 
+ 	  (if user (concat user "@"))
+ 	  host ":"
+ 	  path))
+ 
+ (defun shadow-replace-path-component (fullpath newpath)
+   "Return FULLPATH with the pathname component changed to NEWPATH."
+   (let ((hup (shadow-parse-fullpath fullpath)))
+     (shadow-make-fullpath (nth 0 hup) (nth 1 hup) newpath)))
+ 
+ (defun shadow-local-file (file)
+   "If FILENAME is at this site,
+ remove /user@host part.  If refers to a different system or a different user on
+ this system, return nil."
+   (let ((hup (shadow-parse-fullpath file)))
+     (cond ((null hup) file)
+ 	  ((and (shadow-site-match (nth 0 hup) shadow-system-name)
+ 		(string-equal (nth 1 hup) (user-login-name)))
+ 	   (nth 2 hup))
+ 	  (t nil))))
+ 
+ (defun shadow-expand-cluster-in-file-name (file)
+   "If hostname part of FILE is a cluster, expand it
+ into the cluster's primary hostname.  Will return the pathname bare if it is
+ a local file."
+   (let ((hup (shadow-parse-path file))
+ 	cluster)
+     (cond ((null hup) file)
+ 	  ((shadow-local-file hup))
+ 	  ((shadow-make-fullpath (shadow-site-primary (nth 0 hup))
+ 				 (nth 1 hup)
+ 				 (nth 2 hup))))))
+ 
+ (defun shadow-expand-file-name (file &optional default)
+   "Expand file name and get file's true name."
+   (file-truename (expand-file-name file default)))
+ 
+ (defun shadow-contract-file-name (file)
+   "Simplify FILENAME
+ by replacing (when possible) home directory with ~, and hostname with cluster
+ name that includes it.  Filename should be absolute and true."
+   (let* ((hup (shadow-parse-path file))
+ 	 (homedir (if (shadow-local-file hup)
+ 		      shadow-homedir
+ 		    (file-name-as-directory
+ 		     (nth 2 (shadow-parse-fullpath 
+ 			     (expand-file-name
+ 			      (shadow-make-fullpath
+ 			       (nth 0 hup) (nth 1 hup) "~")))))))
+ 	 (suffix (shadow-suffix homedir (nth 2 hup)))
+ 	 (cluster (shadow-site-cluster (nth 0 hup))))
+     (shadow-make-fullpath
+      (if cluster
+ 	 (shadow-cluster-name cluster)
+        (nth 0 hup))
+      (nth 1 hup)
+      (if suffix 
+ 	 (concat "~/" suffix)
+        (nth 2 hup)))))
+ 
+ (defun shadow-same-site (pattern file)
+   "True if the site of PATTERN and of FILE are on the same site.
+ If usernames are supplied, they must also match exactly.  PATTERN and FILE may
+ be lists of host, user, path, or ange-ftp pathnames.  FILE may also be just a
+ local filename."
+   (let ((pattern-sup (shadow-parse-fullpath pattern))
+ 	(file-sup    (shadow-parse-path file)))
+     (and
+      (shadow-site-match (nth 0 pattern-sup) (nth 0 file-sup))
+      (or (null (nth 1 pattern-sup))
+ 	 (string-equal (nth 1 pattern-sup) (nth 1 file-sup))))))
+ 
+ (defun shadow-file-match (pattern file &optional regexp)
+  "Returns t if PATTERN matches FILE.
+ If REGEXP is supplied and nonnil, the pathname part of the pattern is a regular
+ expression, otherwise it must match exactly.  The sites and usernames must
+ match---see shadow-same-site.  The pattern must be in full ange-ftp format, but
+ the file can be any valid filename.  This function does not do any filename
+ expansion or contraction, you must do that yourself first."
+  (let* ((pattern-sup (shadow-parse-fullpath pattern))
+ 	(file-sup (shadow-parse-path file)))
+    (and (shadow-same-site pattern-sup file-sup)
+ 	(if regexp 
+ 	    (string-match (nth 2 pattern-sup) (nth 2 file-sup))
+ 	  (string-equal (nth 2 pattern-sup) (nth 2 file-sup))))))
+  
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; User-level Commands
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ (defun shadow-define-cluster (name)
+   "Edit \(or create) the definition of a cluster.
+ This is a group of hosts that share directories, so that copying to or from
+ one of them is sufficient to update the file on all of them.  Clusters are
+ defined by a name, the network address of a primary host \(the one we copy
+ files to), and a regular expression that matches the hostnames of all the sites
+ in the cluster."
+   (interactive (list (completing-read "Cluster name: " shadow-clusters () ())))
+   (let* ((old (shadow-get-cluster name))
+ 	 (primary (read-string "Primary host: "
+ 			       (if old (shadow-cluster-primary old) 
+ 				 name)))
+ 	 (regexp   (let (try-regexp)
+ 		     (while (not
+ 			     (string-match 
+ 			      (setq try-regexp
+ 				    (read-string 
+ 				     "Regexp matching all host names: "
+ 				     (if old (shadow-cluster-regexp old)
+ 				       (shadow-regexp-superquote primary))))
+ 			      primary))
+ 		       (message "Regexp doesn't include the primary host!")
+ 		       (sit-for 2))
+ 		     try-regexp))
+ ;	 (username (read-no-blanks-input 
+ ;		    (format "Username [default: %s]: " 
+ ;			    (shadow-get-user primary))
+ ;		    (if old (or (shadow-cluster-username old) "")
+ ;		      (user-login-name))))
+ 	 )
+ ;    (if (string-equal "" username) (setq username nil))
+     (shadow-set-cluster name primary regexp)))
+ 
+ (defun shadow-define-literal-group ()
+   "Declare a single file to be shared between sites.
+ It may have different filenames on each site.  When this file is edited, the
+ new version will be copied to each of the other locations.  Sites can be
+ specific hostnames, or names of clusters \(see shadow-define-cluster)."
+   (interactive)
+   (let* ((hup (shadow-parse-fullpath 
+ 	       (shadow-contract-file-name (buffer-file-name))))
+ 	 (path (nth 2 hup))
+ 	 user site group)
+     (while (setq site (shadow-read-site))
+       (setq user (read-string (format "Username [default %s]: "
+ 				      (shadow-get-user site)))
+ 	    path (read-string "Filename: " path))
+       (setq group (cons (shadow-make-fullpath site 
+ 					      (if (string-equal "" user)
+ 						  (shadow-get-user site)
+ 						user)
+ 					      path)
+ 			group)))
+     (setq shadow-literal-groups (cons group shadow-literal-groups)))
+   (shadow-write-info-file))
+ 
+ (defun shadow-define-regexp-group ()
+   "Make each of a group of files be shared between hosts.
+ Prompts for regular expression; files matching this are shared between a list
+ of sites, which are also prompted for. The filenames must be identical on all
+ hosts \(if they aren't, use shadow-define-group instead of this function).
+ Each site can be either a hostname or the name of a cluster \(see
+ shadow-define-cluster)."
+   (interactive)
+   (let ((regexp (read-string 
+ 		 "Filename regexp: " 
+ 		 (if (buffer-file-name)
+ 		     (shadow-regexp-superquote
+ 		      (nth 2
+ 			   (shadow-parse-path
+ 			    (shadow-contract-file-name
+ 			     (buffer-file-name))))))))
+ 	site sites usernames)
+     (while (setq site (shadow-read-site))
+       (setq sites (cons site sites))
+       (setq usernames 
+ 	    (cons (read-string (format "Username for %s: " site)
+ 			       (shadow-get-user site))
+ 		  usernames)))
+     (setq shadow-regexp-groups 
+ 	  (cons (shadow-make-group regexp sites usernames)
+ 		shadow-regexp-groups))
+     (shadow-write-info-file)))
+     
+ (defun shadow-shadows ()
+   ;; Mostly for debugging.
+   "Interactive function to display shadows of a buffer."
+   (interactive)
+   (let ((msg (shadow-join (mapcar (function cdr)
+ 				  (shadow-shadows-of (buffer-file-name)))
+ 			  " ")))
+     (message (if (zerop (length msg)) 
+ 		 "No shadows."
+ 	       msg))))
+ 
+ (defun shadow-copy-files (&optional arg)
+   "Copy all pending shadow files.
+ With prefix argument, copy all pending files without query.
+ Pending copies are stored in variable shadow-files-to-copy, and in
+ shadow-todo-file if necessary.  This function is invoked by
+ shadow-save-buffers-kill-emacs, so it is not usually necessary to
+ call it manually."
+   (interactive "P")
+   (if (and (not shadow-files-to-copy) (interactive-p))
+       (message "No files need to be shadowed.")
+     (save-excursion
+       (map-y-or-n-p (function
+ 		     (lambda (pair)
+ 		       (or arg 
+ 			   (format "Copy shadow file %s? " (cdr pair)))))
+ 		    (function shadow-copy-file)
+ 		    shadow-files-to-copy
+ 		    '("shadow" "shadows" "copy"))
+       (shadow-write-todo-file t))))
+ 
+ (defun shadow-cancel ()
+   "Cancel the instruction to copy some files.
+ Prompts for which copy operations to cancel.  You will not be asked to copy
+ them again, unless you make more changes to the files.  To cancel a shadow
+ permanently, remove the group from shadow-literal-groups or
+ shadow-regexp-groups."
+   (interactive)
+   (map-y-or-n-p (function (lambda (pair)
+ 			    (format "Cancel copying %s to %s? " 
+ 				    (car pair) (cdr pair))))
+ 		(function (lambda (pair) 
+ 			    (shadow-remove-from-todo pair)))
+ 		shadow-files-to-copy
+ 		'("shadow" "shadows" "cancel copy"))
+   (message (format "There are %d shadows to be updated." 
+ 		   (length shadow-files-to-copy)))
+   (shadow-write-todo-file))
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Internal functions
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ (defun shadow-make-group (regexp sites usernames)
+   "Makes a description of a file group---
+ actually a list of regexp ange-ftp file names---from REGEXP \(name of file to
+ be shadowed), list of SITES, and corresponding list of USERNAMES for each
+ site."
+   (if sites
+       (cons (shadow-make-fullpath (car sites) (car usernames) regexp)
+ 	    (shadow-make-group regexp (cdr sites) (cdr usernames)))
+     nil))
+ 
+ (defun shadow-copy-file (s)
+   "Copy one shadow file."
+   (let* ((buffer 
+ 	  (cond ((get-file-buffer (car s)))
+ 		((not (file-readable-p (car s)))
+ 		 (if (y-or-n-p
+ 		      (format "Cannot find file %s--cancel copy request?"
+ 			      (car s)))
+ 		     (shadow-remove-from-todo s))
+ 		 nil)
+ 		((y-or-n-p 
+ 		  (format "No buffer for %s -- update shadow anyway?"
+ 			  (car s)))
+ 		 (find-file-noselect (car s)))))
+ 	 (to (shadow-expand-cluster-in-file-name (cdr s))))
+     (shadow-when buffer
+       (set-buffer buffer)
+       (save-restriction
+ 	(widen)
+ 	(condition-case i 
+ 	    (progn
+ 	      (write-region (point-min) (point-max) to)
+ 	      (shadow-remove-from-todo s))
+ 	  (error (message (format "Shadow %s not updated!" 
+ 				  (cdr s)))))))))
+ 
+ (defun shadow-shadows-of (file)
+   "Returns copy operations needed to update FILE.
+ Filename should have clusters expanded, but otherwise can have any format.  
+ Return value is a list of dotted pairs like \(from . to), where from
+ and to are absolute file names."
+   (or (symbol-value (intern-soft file shadow-hashtable))
+       (let* ((absolute-file (shadow-expand-file-name
+ 			     (or (shadow-local-file file) file)
+ 			     shadow-homedir))
+ 	     (canonical-file (shadow-contract-file-name absolute-file))
+ 	     (shadows 
+ 	      (mapcar (function (lambda (shadow)
+ 				  (cons absolute-file shadow)))
+ 		      (append
+ 		       (shadow-shadows-of-1
+ 			canonical-file shadow-literal-groups nil)
+ 		       (shadow-shadows-of-1
+ 			canonical-file shadow-regexp-groups t)))))
+ 	(set (intern file shadow-hashtable) shadows))))
+ 
+ (defun shadow-shadows-of-1 (file groups regexp)
+   "Return list of FILE's shadows in GROUPS, 
+ which are considered as regular expressions if third arg REGEXP is true."
+   (if groups
+       (let ((nonmatching
+ 	     (shadow-remove-if 
+ 	      (function (lambda (x) (shadow-file-match x file regexp)))
+ 	      (car groups))))
+ 	(append (cond ((equal nonmatching (car groups)) nil)
+ 		      (regexp 
+ 		       (let ((realpath (nth 2 (shadow-parse-fullpath file))))
+ 			 (mapcar 
+ 			  (function 
+ 			   (lambda (x) 
+ 			     (shadow-replace-path-component x realpath)))
+ 			  nonmatching)))
+ 		      (t nonmatching))
+ 		(shadow-shadows-of-1 file (cdr groups) regexp)))))
+ 
+ (defun shadow-add-to-todo ()
+   "If current buffer has shadows, add them to the list
+ of files needing to be copied."
+   (let ((shadows (shadow-shadows-of 
+ 		  (shadow-expand-file-name 
+ 		   (buffer-file-name (current-buffer))))))
+     (shadow-when shadows
+       (setq shadow-files-to-copy
+ 	    (shadow-union shadows shadow-files-to-copy))
+       (shadow-when (not shadow-inhibit-message)
+ 	(message (substitute-command-keys
+ 		  "Use \\[shadow-copy-files] to update shadows."))
+ 	(sit-for 1))
+       (shadow-write-todo-file)))
+   nil)     ; Return nil for write-file-hooks
+ 
+ (defun shadow-remove-from-todo (pair)
+   "Remove PAIR from shadow-files-to-copy.
+ PAIR must be (eq to) one of the elements of that list."
+   (setq shadow-files-to-copy 
+ 	(shadow-remove-if (function (lambda (s) (eq s pair)))
+ 			  shadow-files-to-copy)))
+ 
+ (defun shadow-read-files ()
+   "Visits and loads shadow-info-file and shadow-todo-file,
+ thus restoring shadowfile's state from your last emacs session.
+ Returns t unless files were locked; then returns nil."
+   (interactive)
+   (if (or (stringp (file-locked-p shadow-info-file))
+ 	  (stringp (file-locked-p shadow-todo-file)))
+       (progn
+ 	(message "Shadowfile is running in another emacs; can't have two.")
+ 	(beep)
+ 	(sit-for 3)
+ 	nil)
+     (save-excursion
+       (shadow-when shadow-info-file
+ 	(set-buffer (setq shadow-info-buffer
+ 			  (find-file-noselect shadow-info-file)))
+ 	(shadow-when (and (not (buffer-modified-p))
+ 			  (file-newer-than-file-p (make-auto-save-file-name)
+ 						  shadow-info-file))
+ 	  (erase-buffer)
+ 	  (message "Data recovered from %s." 
+ 		   (car (insert-file-contents (make-auto-save-file-name))))
+ 	  (sit-for 1))
+ 	(eval-current-buffer))
+       (shadow-when shadow-todo-file
+ 	(set-buffer (setq shadow-todo-buffer 
+ 			  (find-file-noselect shadow-todo-file)))
+ 	(shadow-when (and (not (buffer-modified-p))
+ 			  (file-newer-than-file-p (make-auto-save-file-name)
+ 						  shadow-todo-file))
+ 	  (erase-buffer)
+ 	  (message "Data recovered from %s." 
+ 		   (car (insert-file-contents (make-auto-save-file-name))))
+ 	  (sit-for 1))
+ 	(eval-current-buffer nil))
+       (shadow-invalidate-hashtable))
+     t))
+ 
+ (defun shadow-write-info-file ()
+   "Write out information to shadow-info-file.
+ Also clears shadow-hashtable, since when there are new shadows defined, the old
+ hashtable info is invalid."
+   (shadow-invalidate-hashtable)
+   (if shadow-info-file
+       (save-excursion
+ 	(if (not shadow-info-buffer)
+ 	    (setq shadow-info-buffer (find-file-noselect shadow-info-file)))
+ 	(set-buffer shadow-info-buffer)
+ 	(delete-region (point-min) (point-max))
+ 	(shadow-insert-var 'shadow-clusters)
+ 	(shadow-insert-var 'shadow-literal-groups)
+ 	(shadow-insert-var 'shadow-regexp-groups))))
+ 
+ (defun shadow-write-todo-file (&optional save)
+   "Write out information to shadow-todo-file.  
+ With nonnil argument also saves the buffer."
+   (save-excursion
+     (if (not shadow-todo-buffer)
+ 	(setq shadow-todo-buffer (find-file-noselect shadow-todo-file)))
+     (set-buffer shadow-todo-buffer)
+     (delete-region (point-min) (point-max))
+     (shadow-insert-var 'shadow-files-to-copy)
+     (if save (shadow-save-todo-file))))
+ 
+ (defun shadow-save-todo-file ()
+   (if (and shadow-todo-buffer (buffer-modified-p shadow-todo-buffer))
+       (save-excursion
+ 	(set-buffer shadow-todo-buffer)
+ 	(condition-case nil		; have to continue even in case of 
+ 	    (basic-save-buffer)		; error, otherwise kill-emacs might
+ 	  (error			; not work!
+ 	   (message "WARNING: Can't save shadow todo file; it is locked!")
+ 	   (sit-for 1))))))
+ 
+ (defun shadow-invalidate-hashtable ()
+   (setq shadow-hashtable (make-vector 37 0)))
+ 
+ (defun shadow-insert-var (variable)
+   "Prettily insert a setq command for VARIABLE.
+ which, when later evaluated, will restore it to its current setting.
+ SYMBOL must be the name of a variable whose value is a list."
+   (let ((standard-output (current-buffer)))
+     (insert (format "(setq %s" variable))
+     (cond ((consp (eval variable))
+ 	   (insert "\n  '(") 
+ 	   (prin1 (car (eval variable)))
+ 	   (let ((rest (cdr (eval variable))))
+ 	     (while rest
+ 	       (insert "\n    ")
+ 	       (prin1 (car rest))
+ 	       (setq rest (cdr rest)))
+ 	     (insert "))\n\n")))
+ 	  (t (insert " ")
+ 	     (prin1 (eval variable))
+ 	     (insert ")\n\n")))))
+ 
+ (defun shadow-save-buffers-kill-emacs (&optional arg)
+   "Offer to save each buffer and copy shadows, then kill this Emacs process.
+ With prefix arg, silently save all file-visiting buffers, then kill.
+ 
+ Extended by shadowfile to automatically save `shadow-todo-file' and
+ look for files that have been changed and need to be copied to other systems."
+   ;; This function is necessary because we need to get control and save
+   ;; the todo file /after/ saving other files, but /before/ the warning
+   ;; message about unsaved buffers (because it can get modified by the
+   ;; action of saving other buffers).  `kill-emacs-hook' is no good
+   ;; because it is not called at the correct time, and also because it is
+   ;; called when the terminal is disconnected and we cannot ask whether
+   ;; to copy files.
+   (interactive "P")
+   (shadow-save-todo-file)
+   (save-some-buffers arg t)
+   (shadow-copy-files)
+   (shadow-save-todo-file)
+   (and (or (not (memq t (mapcar (function
+ 				 (lambda (buf) (and (buffer-file-name buf)
+ 						    (buffer-modified-p buf))))
+ 				(buffer-list))))
+ 	   (yes-or-no-p "Modified buffers exist; exit anyway? "))
+        (or (not (fboundp 'process-list))
+ 	   ;; process-list is not defined on VMS.
+ 	   (let ((processes (process-list))
+ 		 active)
+ 	     (while processes
+ 	       (and (memq (process-status (car processes)) '(run stop open))
+ 		    (let ((val (process-kill-without-query (car processes))))
+ 		      (process-kill-without-query (car processes) val)
+ 		      val)
+ 		    (setq active t))
+ 	       (setq processes (cdr processes)))
+ 	     (or (not active)
+ 		 (yes-or-no-p "Active processes exist; kill them and exit anyway? "))))
+        (kill-emacs)))
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Lucid Emacs compatibility (may not be complete)
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ (shadow-when (not (fboundp 'file-truename))
+   (require 'symlink-fix)
+   (defun shadow-expand-file-name (file &optional default)
+     (symlink-expand-file-name file default)))
+ 
+ (shadow-when (not (fboundp 'ange-ftp-ftp-name))
+   (require 'ange-ftp)
+   (defun shadow-parse-fullpath (fullpath)
+     (if (listp fullpath)
+ 	fullpath
+       (ange-ftp-ftp-path fullpath))))
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Hook us up
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ ;;; File shadowing is activated at load time, unless this this file is
+ ;;; being preloaded, in which case it is added to after-init-hook.
+ ;;; Thanks to Richard Caley for this scheme.
+ 
+ (defun shadow-initialize ()
+   (if (null shadow-homedir)
+       (setq shadow-homedir
+ 	    (file-name-as-directory (shadow-expand-file-name "~"))))
+   (if (null shadow-info-file)
+       (setq shadow-info-file 
+ 	    (shadow-expand-file-name "~/.shadows")))
+   (if (null shadow-todo-file)
+       (setq shadow-todo-file 
+ 	    (shadow-expand-file-name "~/.shadow_todo")))
+   (if (not (shadow-read-files))
+       (progn
+ 	(message "Shadowfile information files not found - aborting")
+ 	(beep)
+ 	(sit-for 3))
+     (shadow-when (and (not shadow-inhibit-overload)
+ 		      (not (fboundp 'shadow-orig-save-buffers-kill-emacs)))
+       (fset 'shadow-orig-save-buffers-kill-emacs 
+ 	    (symbol-function 'save-buffers-kill-emacs))
+       (fset 'save-buffers-kill-emacs
+ 	    (symbol-function 'shadow-save-buffers-kill-emacs)))
+     (add-hook 'write-file-hooks 'shadow-add-to-todo)
+     (define-key ctl-x-4-map "s" 'shadow-copy-files)))
+ 
+ (if noninteractive
+     (add-hook 'after-init-hook 'shadow-initialize)
+   (shadow-initialize))
+ 
+ ;;;Local Variables:
+ ;;;eval:(put 'shadow-when 'lisp-indent-hook 1)
+ ;;;End:
+ 
+ ;;; shadowfile.el ends here
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/shell.el emacs-19.22/lisp/shell.el
*** emacs-19.21/lisp/shell.el	Tue Nov 16 07:17:02 1993
--- emacs-19.22/lisp/shell.el	Wed Nov 24 21:34:09 1993
***************
*** 53,66 ****
  ;; Some suggestions for your .emacs file.
  ;;
! ;; ; If shell lives in some non-standard directory, you must tell emacs
! ;; ; where to get it. This may or may not be necessary.
! ;; (setq load-path (cons (expand-file-name "~jones/lib/emacs") load-path))
! ;;
! ;; ; Autoload shell from file shell.el
! ;; (autoload 'shell "shell"
! ;;           "Run an inferior shell process."
! ;;           t)
! ;;
! ;; ; Define C-c t to run my favorite command in shell mode:
  ;; (setq shell-mode-hook
  ;;       '((lambda () 
--- 53,57 ----
  ;; Some suggestions for your .emacs file.
  ;;
! ;; ;; Define C-c t to run my favorite command in shell mode:
  ;; (setq shell-mode-hook
  ;;       '((lambda () 
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/simple.el emacs-19.22/lisp/simple.el
*** emacs-19.21/lisp/simple.el	Tue Nov 16 07:17:03 1993
--- emacs-19.22/lisp/simple.el	Wed Nov 24 22:38:41 1993
***************
*** 333,337 ****
  	      (while (re-search-forward "[\n\C-m]" nil t 1)
  		(setq done (+ 1 done)))
! 	      done)
  	  (- (buffer-size) (forward-line (buffer-size))))))))
  
--- 333,341 ----
  	      (while (re-search-forward "[\n\C-m]" nil t 1)
  		(setq done (+ 1 done)))
! 	      (goto-char (point-max))
! 	      (if (and (/= start end)
! 		       (not (bolp)))
! 		  (1+ done)
! 		done))
  	  (- (buffer-size) (forward-line (buffer-size))))))))
  
***************
*** 384,391 ****
  Value is also consed on to front of the variable `values'."
    (interactive
!    (let* ((minibuffer-history-sexp-flag t))
!      (list (read-from-minibuffer "Eval: "
! 				 nil read-expression-map t
! 				 'read-expression-history))))
    (setq values (cons (eval expression) values))
    (prin1 (car values) t))
--- 388,394 ----
  Value is also consed on to front of the variable `values'."
    (interactive
!    (list (read-from-minibuffer "Eval: "
! 			       nil read-expression-map t
! 			       'read-expression-history)))
    (setq values (cons (eval expression) values))
    (prin1 (car values) t))
***************
*** 395,403 ****
  COMMAND is a Lisp expression.  Let user edit that expression in
  the minibuffer, then read and evaluate the result."
!   (let* ((minibuffer-history-sexp-flag t)
! 	 (command (read-from-minibuffer prompt
! 					(prin1-to-string command)
! 					read-expression-map t
! 					'(command-history . 1))))
      (eval command)))
  
--- 398,405 ----
  COMMAND is a Lisp expression.  Let user edit that expression in
  the minibuffer, then read and evaluate the result."
!   (let ((command (read-from-minibuffer prompt
! 				       (prin1-to-string command)
! 				       read-expression-map t
! 				       '(command-history . 1))))
      (eval command)))
  
***************
*** 423,438 ****
  		 (cons 'command-history arg)))
  
! ;;;  read-from-minibuffer handles the adding of what is read to the history
! ;;;  variable.
! ;;;
! ;;;	  ;; If command was added to command-history as a string,
! ;;;	  ;; get rid of that.  We want only evallable expressions there.
! ;;;	  (if (stringp (car command-history))
! ;;;	      (setq command-history (cdr command-history)))
! ;;;
! ;;;	  ;; If command to be redone does not match front of history,
! ;;;	  ;; add it to the history.
! ;;;	  (or (equal newcmd (car command-history))
! ;;;	      (setq command-history (cons newcmd command-history)))
  	  (eval newcmd))
        (ding))))
--- 425,437 ----
  		 (cons 'command-history arg)))
  
! 	  ;; If command was added to command-history as a string,
! 	  ;; get rid of that.  We want only evallable expressions there.
! 	  (if (stringp (car command-history))
! 	      (setq command-history (cdr command-history)))
! 
! 	  ;; If command to be redone does not match front of history,
! 	  ;; add it to the history.
! 	  (or (equal newcmd (car command-history))
! 	      (setq command-history (cons newcmd command-history)))
  	  (eval newcmd))
        (ding))))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/startup.el emacs-19.22/lisp/startup.el
*** emacs-19.21/lisp/startup.el	Tue Nov 16 07:17:09 1993
--- emacs-19.22/lisp/startup.el	Fri Nov 19 18:36:39 1993
***************
*** 130,133 ****
--- 130,135 ----
  (defvar init-file-debug nil)
  
+ (defvar init-file-had-error nil)
+ 
  (defun normal-top-level ()
    (if command-line-processed
***************
*** 272,280 ****
  	(funcall inner)
        (condition-case error
! 	  (funcall inner)
  	(error (message "Error in init file: %s%s%s"
  			(get (car error) 'error-message)
  			(if (cdr error) ": ")
! 			(mapconcat 'prin1-to-string (cdr error) ", "))))))
  
    (run-hooks 'after-init-hook)
--- 274,285 ----
  	(funcall inner)
        (condition-case error
! 	  (progn
! 	    (funcall inner)
! 	    (setq init-file-had-error nil))
  	(error (message "Error in init file: %s%s%s"
  			(get (car error) 'error-message)
  			(if (cdr error) ": ")
! 			(mapconcat 'prin1-to-string (cdr error) ", "))
! 	       (setq init-file-had-error t)))))
  
    (run-hooks 'after-init-hook)
***************
*** 305,309 ****
  
  (defun command-line-1 (command-line-args-left)
!   (or noninteractive (input-pending-p)
        (message (if (eq (key-binding "\C-h\C-p") 'describe-project)
  		   "For information about the GNU Project and its goals, type C-h C-p."
--- 310,314 ----
  
  (defun command-line-1 (command-line-args-left)
!   (or noninteractive (input-pending-p) init-file-had-error
        (message (if (eq (key-binding "\C-h\C-p") 'describe-project)
  		   "For information about the GNU Project and its goals, type C-h C-p."
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/subr.el emacs-19.22/lisp/subr.el
*** emacs-19.21/lisp/subr.el	Tue Nov 16 03:44:11 1993
--- emacs-19.22/lisp/subr.el	Wed Nov 24 01:45:36 1993
***************
*** 76,79 ****
--- 76,82 ----
  frame uses, even if it is on another frame.
  If ALL-FRAMES is neither nil nor t, stick strictly to the selected frame."
+   ;; If we start from the minibuffer window, don't fail to come back to it.
+   (if (window-minibuffer-p (selected-window))
+       (setq minibuf t))
    (let* ((walk-windows-start (selected-window))
  	 (walk-windows-current walk-windows-start))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/supercite.el emacs-19.22/lisp/supercite.el
*** emacs-19.21/lisp/supercite.el	Tue Nov 16 07:17:12 1993
--- emacs-19.22/lisp/supercite.el	Tue Nov 23 14:38:57 1993
***************
*** 6,10 ****
  ;; Version:       3.1
  ;; Last Modified: 1993/09/22 18:58:46
! ;; Keywords: citation attribution mail news article reply followup
  
  ;; supercite.el revision: 3.54
--- 6,10 ----
  ;; Version:       3.1
  ;; Last Modified: 1993/09/22 18:58:46
! ;; Keywords: mail, news
  
  ;; supercite.el revision: 3.54
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/tabify.el emacs-19.22/lisp/tabify.el
*** emacs-19.21/lisp/tabify.el	Tue Nov 16 07:17:14 1993
--- emacs-19.22/lisp/tabify.el	Wed Nov 24 22:59:18 1993
***************
*** 66,68 ****
--- 66,70 ----
  	  (indent-to column))))))
  
+ (provide 'tabify)
+ 
  ;;; tabify.el ends here
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/telnet.el emacs-19.22/lisp/telnet.el
*** emacs-19.21/lisp/telnet.el	Tue Nov 16 07:17:16 1993
--- emacs-19.22/lisp/telnet.el	Tue Nov 23 16:51:14 1993
***************
*** 61,67 ****
  
  (defvar telnet-count 0
!   "Number of output strings read from the telnet process
! while looking for the initial password.")
  
  (defvar telnet-initial-count -50
    "Initial value of `telnet-count'.  Should be set to the negative of the
--- 61,72 ----
  
  (defvar telnet-count 0
!   "Number of output strings from telnet process while looking for password.")
! (make-variable-buffer-local 'telnet-count)
  
+ (defvar telnet-rsh-program
+   (if (memq system-type '(hpux usg-unix-v)) 
+       "remsh" "rsh")
+   "Program to run for opening a remote shell.")
+ 
  (defvar telnet-initial-count -50
    "Initial value of `telnet-count'.  Should be set to the negative of the
***************
*** 216,220 ****
    (require 'shell)
    (let ((name (concat host "-rsh" )))
!     (switch-to-buffer (make-comint name "rsh" nil host))
      (set-process-filter (get-process name) 'telnet-initial-filter)
      (telnet-mode)
--- 221,225 ----
    (require 'shell)
    (let ((name (concat host "-rsh" )))
!     (switch-to-buffer (make-comint name telnet-rsh-program nil host))
      (set-process-filter (get-process name) 'telnet-initial-filter)
      (telnet-mode)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/tex-mode.el emacs-19.22/lisp/tex-mode.el
*** emacs-19.21/lisp/tex-mode.el	Tue Nov 16 07:17:19 1993
--- emacs-19.22/lisp/tex-mode.el	Sat Nov 20 17:21:24 1993
***************
*** 764,768 ****
        "tex-shell"
        (or tex-shell-file-name (getenv "ESHELL") (getenv "SHELL") "/bin/sh")
!       nil "-v"))
      (let ((proc (get-process "tex-shell")))
        (set-process-sentinel proc 'tex-shell-sentinel)
--- 764,768 ----
        "tex-shell"
        (or tex-shell-file-name (getenv "ESHELL") (getenv "SHELL") "/bin/sh")
!       nil))
      (let ((proc (get-process "tex-shell")))
        (set-process-sentinel proc 'tex-shell-sentinel)
***************
*** 792,797 ****
        (setq default-directory directory))))
  
  (defun tex-send-command (command &optional file background)
!   "Send COMMAND to tex-shell, substituting optional FILE for *.
  Do this in background if optional BACKGROUND is t.  If COMMAND has no *,
  FILE will be appended, preceded by a blank, to COMMAND.  If FILE is nil, no
--- 792,800 ----
        (setq default-directory directory))))
  
+ (defvar tex-send-command-modified-tick 0)
+ (make-variable-buffer-local 'tex-send-command-modified-tick)
+ 
  (defun tex-send-command (command &optional file background)
!   "Send COMMAND to TeX shell process, substituting optional FILE for *.
  Do this in background if optional BACKGROUND is t.  If COMMAND has no *,
  FILE will be appended, preceded by a blank, to COMMAND.  If FILE is nil, no
***************
*** 800,812 ****
    (save-excursion
      (let* ((cmd (eval command))
             (star (string-match "\\*" cmd))
!            (front (substring cmd 0 star))
!            (back (if star (substring cmd (1+ star)) "")))
!       (comint-proc-query (get-process "tex-shell")
!                          (concat
!                           (if file (if star (concat front file back)
!                                      (concat cmd " " file))
!                             cmd)
!                           (if background "&\n" "\n"))))))
  
  (defun tex-delete-last-temp-files ()
--- 803,825 ----
    (save-excursion
      (let* ((cmd (eval command))
+ 	   (proc (get-process "tex-shell"))
             (star (string-match "\\*" cmd))
! 	   (string
! 	    (concat
! 	     (if file
! 		 (if star (concat (substring cmd 0 star)
! 				  file (substring cmd (1+ star)))
! 		   (concat cmd " " file))
! 	       cmd)
! 	     (if background "&" ""))))
!       ;; If text is unchanged since previous tex-send-command,
!       ;; we haven't got any output.  So wait for output now.
!       (if (= (buffer-modified-tick) tex-send-command-modified-tick)
! 	  (accept-process-output proc))
!       (set-buffer (process-buffer proc))
!       (goto-char (process-mark proc))
!       (insert string)
!       (comint-send-input)
!       (setq tex-send-command-modified-tick (buffer-modified-tick)))))
  
  (defun tex-delete-last-temp-files ()
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/texinfmt.el emacs-19.22/lisp/texinfmt.el
*** emacs-19.21/lisp/texinfmt.el	Tue Nov 16 07:17:22 1993
--- emacs-19.22/lisp/texinfmt.el	Fri Nov 19 17:19:14 1993
***************
*** 25,29 ****
  ;;; Emacs lisp functions to convert Texinfo files to Info files.
  
! (defvar texinfmt-version "2.31 of 10 November 1993")
  
  ;;; Variable definitions
--- 25,29 ----
  ;;; Emacs lisp functions to convert Texinfo files to Info files.
  
! (defvar texinfmt-version "2.32 of 19 November 1993")
  
  ;;; Variable definitions
***************
*** 2826,2830 ****
       ((eq (get (car (read-from-string arg)) 'texinfo-whether-setp)
            nil)
!       (error  "@ifset flag `%s' is not defined by @set or @clear." arg)))))
  
  (put 'ifclear 'texinfo-end 'texinfo-discard-command)
--- 2826,2832 ----
       ((eq (get (car (read-from-string arg)) 'texinfo-whether-setp)
            nil)
!       ;; In this case flag is neither set nor cleared.  
!       ;; Act as if set, i.e. do nothing.
!       ()))))
  
  (put 'ifclear 'texinfo-end 'texinfo-discard-command)
***************
*** 2846,2850 ****
       ((eq (get (car (read-from-string arg)) 'texinfo-whether-setp)
            nil)
!       (error  "@ifclear flag `%s' is not defined by @clear or @set." arg)))))
  
  
--- 2848,2854 ----
       ((eq (get (car (read-from-string arg)) 'texinfo-whether-setp)
            nil)
!       ;; In this case flag is neither set nor cleared.  
!       ;; Act as if clear, i.e. do nothing.
!       ()))))
  
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/texinfo.el emacs-19.22/lisp/texinfo.el
*** emacs-19.21/lisp/texinfo.el	Tue Nov 16 07:17:23 1993
--- emacs-19.22/lisp/texinfo.el	Sat Nov 20 17:05:26 1993
***************
*** 674,681 ****
      
      (tex-set-buffer-directory "*tex-shell*" zap-directory)
!     (send-string "tex-shell" (concat tex-shell-cd-command " "
!                                      zap-directory "\n"))
!     (send-string "tex-shell" (concat texinfo-tex-command " "
!                                      tex-out-file "\n")))
    (tex-recenter-output-buffer 0))
  
--- 674,679 ----
      
      (tex-set-buffer-directory "*tex-shell*" zap-directory)
!     (tex-send-command tex-shell-cd-command zap-directory)
!     (tex-send-command texinfo-tex-command tex-out-file))
    (tex-recenter-output-buffer 0))
  
***************
*** 697,706 ****
    (setq tex-zap-file buffer-file-name)
  
!   (send-string "tex-shell"
! 	       (concat tex-shell-cd-command 
! 		       " " (file-name-directory tex-zap-file) "\n"))
  
!   (send-string "tex-shell"
! 	       (concat texinfo-texi2dvi-command " " tex-zap-file "\n"))
  
    (tex-recenter-output-buffer 0))
--- 695,701 ----
    (setq tex-zap-file buffer-file-name)
  
!   (tex-send-command tex-shell-cd-command (file-name-directory tex-zap-file))
  
!   (tex-send-command texinfo-texi2dvi-command tex-zap-file)
  
    (tex-recenter-output-buffer 0))
***************
*** 712,718 ****
    (interactive)
    (require 'tex-mode)
!   (send-string "tex-shell"
! 	       (concat texinfo-texindex-command
!                        " " tex-zap-file ".??" "\n"))
    (tex-recenter-output-buffer nil))
  
--- 707,711 ----
    (interactive)
    (require 'tex-mode)
!   (tex-send-command texinfo-texindex-command (concat tex-zap-file ".??"))
    (tex-recenter-output-buffer nil))
  
***************
*** 722,728 ****
    (interactive)
    (require 'tex-mode)
!   (send-string "tex-shell"
! 	       (concat tex-dvi-print-command
!                        " " tex-zap-file ".dvi" "\n"))
    (tex-recenter-output-buffer nil))
  
--- 715,719 ----
    (interactive)
    (require 'tex-mode)
!   (tex-send-command tex-dvi-print-command (concat tex-zap-file ".dvi"))
    (tex-recenter-output-buffer nil))
  
***************
*** 732,740 ****
    (if (not (get-process "tex-shell"))
        (error "No TeX shell running"))
!   (save-excursion
!     (set-buffer (get-buffer "*tex-shell*"))
!     (goto-char (point-max))
!     (insert "x")
!     (comint-send-input)))
  
  (defun texinfo-delete-from-print-queue (job-number)
--- 723,727 ----
    (if (not (get-process "tex-shell"))
        (error "No TeX shell running"))
!   (tex-send-command "x"))
  
  (defun texinfo-delete-from-print-queue (job-number)
***************
*** 747,755 ****
        (tex-kill-job)
      (tex-start-shell))
!   (send-string "tex-shell"
!                (concat 
!                 texinfo-delete-from-print-queue-command
!                 " "
!                 job-number"\n"))
    (tex-recenter-output-buffer nil))
  
--- 734,738 ----
        (tex-kill-job)
      (tex-start-shell))
!   (tex-send-command texinfo-delete-from-print-queue-command job-number)
    (tex-recenter-output-buffer nil))
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/thingatpt.el emacs-19.22/lisp/thingatpt.el
*** emacs-19.21/lisp/thingatpt.el	Tue Nov 16 07:17:25 1993
--- emacs-19.22/lisp/thingatpt.el	Tue Nov 23 14:33:59 1993
***************
*** 4,10 ****
  
  ;; Author: Mike Williams <mikew@gopher.dosli.govt.nz>
! ;; Keywords: extensions
  ;; Created: Thu Mar 28 13:48:23 1991
! ;; Version: $Revision: 1.1 $
  
  ;; This file is part of GNU Emacs.
--- 4,10 ----
  
  ;; Author: Mike Williams <mikew@gopher.dosli.govt.nz>
! ;; Keywords: extensions, matching, mouse
  ;; Created: Thu Mar 28 13:48:23 1991
! ;; Version: $Revision: 1.2 $
  
  ;; This file is part of GNU Emacs.
***************
*** 51,58 ****
  ;;=== Version =============================================================
  
! (defconst thing@pt-version (substring "$Revision: 1.1 $" 11 -2)
    "The revision number of thing@pt (as string).  The complete RCS id is:
  
!   $Id: thingatpt.el,v 1.1 1993/11/08 14:27:42 rms Exp $")
  
  ;;=== Basic movement ======================================================
--- 51,58 ----
  ;;=== Version =============================================================
  
! (defconst thing@pt-version (substring "$Revision: 1.2 $" 11 -2)
    "The revision number of thing@pt (as string).  The complete RCS id is:
  
!   $Id: thingatpt.el,v 1.2 1993/11/23 19:33:55 rms Exp $")
  
  ;;=== Basic movement ======================================================
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/time-stamp.el emacs-19.22/lisp/time-stamp.el
*** emacs-19.21/lisp/time-stamp.el	Tue Nov 16 07:17:26 1993
--- emacs-19.22/lisp/time-stamp.el	Fri Nov 19 19:42:48 1993
***************
*** 3,7 ****
  
  ;; Maintainer: Stephen Gildea <gildea@lcs.mit.edu>
! ;; Time-stamp: <93/06/20 17:36:04 gildea>
  ;; Keywords: tools
  
--- 3,7 ----
  
  ;; Maintainer: Stephen Gildea <gildea@lcs.mit.edu>
! ;; Time-stamp: <93/09/24 16:02:25 gildea>
  ;; Keywords: tools
  
***************
*** 34,41 ****
  ;;; To activate automatic time stamping, add this code to your .emacs file:
  ;;;
- ;;; (autoload 'time-stamp "time-stamp" "Update the time stamp in a buffer." t)
  ;;; (if (not (memq 'time-stamp write-file-hooks))
  ;;;     (setq write-file-hooks
  ;;;           (cons 'time-stamp write-file-hooks)))
  
  ;;; Change Log:
--- 34,43 ----
  ;;; To activate automatic time stamping, add this code to your .emacs file:
  ;;;
  ;;; (if (not (memq 'time-stamp write-file-hooks))
  ;;;     (setq write-file-hooks
  ;;;           (cons 'time-stamp write-file-hooks)))
+ ;;;
+ ;;; In Emacs 18 you will also need
+ ;;; (autoload 'time-stamp "time-stamp" "Update the time stamp in a buffer." t)
  
  ;;; Change Log:
***************
*** 163,167 ****
  
  ;;; Could generate most of a message-id with
! ;;; '(yymmdd "" hhmm "@" mail-host-name)
  
  (defun time-stamp-mail-host-name ()
--- 165,169 ----
  
  ;;; Could generate most of a message-id with
! ;;; '(time-stamp-yymmdd "" time-stamp-hhmm "@" mail-host-name)
  
  (defun time-stamp-mail-host-name ()
***************
*** 271,272 ****
--- 273,276 ----
  
  ;;; time-stamp.el ends here
+ 
+ 
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/tpu-doc.el emacs-19.22/lisp/tpu-doc.el
*** emacs-19.21/lisp/tpu-doc.el	Tue Nov 16 07:17:30 1993
--- emacs-19.22/lisp/tpu-doc.el	Fri Nov 26 01:35:02 1993
***************
*** 5,9 ****
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Keywords: tpu-edt
  
  ;; This file is part of GNU Emacs.
--- 5,9 ----
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Keywords: emulations
  
  ;; This file is part of GNU Emacs.
***************
*** 23,27 ****
  ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
! (defconst tpu-doc-revision "$Revision: 1.4 $"
    "TPU-edt documentation revision number.")
  
--- 23,27 ----
  ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
! (defconst tpu-doc-revision "$Revision: 1.6 $"
    "TPU-edt documentation revision number.")
  
***************
*** 299,303 ****
  
  ;; Uncomment this line to set scroll margins 10% (top) and 15% (bottom).
! ;(tpu-set-scroll-margins "10%" "15%")
  
  ;; Load the vtxxx terminal control functions, but don't complain if
--- 299,303 ----
  
  ;; Uncomment this line to set scroll margins 10% (top) and 15% (bottom).
! ;(and (fboundp 'tpu-set-scroll-margins) (tpu-set-scroll-margins "10%" "15%"))
  
  ;; Load the vtxxx terminal control functions, but don't complain if
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/tpu-edt.el emacs-19.22/lisp/tpu-edt.el
*** emacs-19.21/lisp/tpu-edt.el	Tue Nov 16 07:17:31 1993
--- emacs-19.22/lisp/tpu-edt.el	Fri Nov 26 01:31:28 1993
***************
*** 5,10 ****
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Version: 3.1
! ;; Keywords: edt emulations
  
  ;; This file is part of GNU Emacs.
--- 5,10 ----
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Version: 3.2
! ;; Keywords: emulations
  
  ;; This file is part of GNU Emacs.
***************
*** 30,35 ****
  ;;;  Revision and Version Information
  ;;;
! (defconst tpu-version "3.1" "TPU-edt version number.")
! (defconst tpu-revision "$Revision: 1.4 $" "Revision number of TPU-edt.")
  
  
--- 30,34 ----
  ;;;  Revision and Version Information
  ;;;
! (defconst tpu-version "3.2" "TPU-edt version number.")
  
  
***************
*** 478,482 ****
--- 477,489 ----
    (insert (if num num 0)))
  
+ (defun tpu-quoted-insert (num)
+   "Read next input character and insert it.
+ This is useful for inserting control characters."
+   (interactive "*p")
+   (let ((char (read-char)) )
+     (if overwrite-mode (delete-char num))
+     (insert-char char num)))
  
+ 
  ;;;
  ;;;  TPU line-mode commands
***************
*** 562,565 ****
--- 569,582 ----
  (fset 'HELP 'tpu-help)
  
+ (fset 'set\ cursor\ free 'tpu-set-cursor-free)
+ (fset 'SET\ CURSOR\ FREE 'tpu-set-cursor-free)
+ 
+ (fset 'set\ cursor\ bound 'tpu-set-cursor-bound)
+ (fset 'SET\ CURSOR\ BOUND 'tpu-set-cursor-bound)
+ 
+ (fset 'set\ scroll\ margins 'tpu-set-scroll-margins)
+ (fset 'SET\ SCROLL\ MARGINS 'tpu-set-scroll-margins)
+ 
+ 
  ;; Around emacs version 18.57, function line-move was renamed to
  ;; next-line-internal.  If we're running under an older emacs,
***************
*** 1799,1803 ****
  (define-key GOLD-map "D" 'shell-command)                      ; D
  (define-key GOLD-map "E" 'tpu-exit)                           ; E
! (define-key GOLD-map "F" 'nil)                                ; F
  (define-key GOLD-map "G" 'tpu-get)                            ; G
  (define-key GOLD-map "H" 'nil)                                ; H
--- 1816,1820 ----
  (define-key GOLD-map "D" 'shell-command)                      ; D
  (define-key GOLD-map "E" 'tpu-exit)                           ; E
! (define-key GOLD-map "F" 'tpu-set-cursor-free)                ; F
  (define-key GOLD-map "G" 'tpu-get)                            ; G
  (define-key GOLD-map "H" 'nil)                                ; H
***************
*** 1830,1834 ****
  (define-key GOLD-map "d" 'shell-command)                      ; d
  (define-key GOLD-map "e" 'tpu-exit)                           ; e
! (define-key GOLD-map "f" 'nil)                                ; f
  (define-key GOLD-map "g" 'tpu-get)                            ; g
  (define-key GOLD-map "h" 'nil)                                ; h
--- 1847,1851 ----
  (define-key GOLD-map "d" 'shell-command)                      ; d
  (define-key GOLD-map "e" 'tpu-exit)                           ; e
! (define-key GOLD-map "f" 'tpu-set-cursor-free)                ; f
  (define-key GOLD-map "g" 'tpu-get)                            ; g
  (define-key GOLD-map "h" 'nil)                                ; h
***************
*** 1950,1954 ****
  (define-key global-map "\C-b" 'repeat-complex-command)        ; ^B
  (define-key global-map "\C-e" 'tpu-current-end-of-line)       ; ^E
- (define-key global-map "\C-f" 'set-visited-file-name)         ; ^F
  (define-key global-map "\C-h" 'tpu-next-beginning-of-line)    ; ^H (BS)
  (define-key global-map "\C-j" 'tpu-delete-previous-word)      ; ^J (LF)
--- 1967,1970 ----
***************
*** 1957,1961 ****
  (define-key global-map "\C-r" 'recenter)                      ; ^R
  (define-key global-map "\C-u" 'tpu-delete-to-bol)             ; ^U
! (define-key global-map "\C-v" 'quoted-insert)                 ; ^V
  (define-key global-map "\C-w" 'redraw-display)                ; ^W
  (define-key global-map "\C-z" 'tpu-exit)                      ; ^Z
--- 1973,1977 ----
  (define-key global-map "\C-r" 'recenter)                      ; ^R
  (define-key global-map "\C-u" 'tpu-delete-to-bol)             ; ^U
! (define-key global-map "\C-v" 'tpu-quoted-insert)             ; ^V
  (define-key global-map "\C-w" 'redraw-display)                ; ^W
  (define-key global-map "\C-z" 'tpu-exit)                      ; ^Z
***************
*** 1980,1984 ****
   	     (define-key global-map "\C-b" (lookup-key map "\C-b"))     ; ^B
   	     (define-key global-map "\C-e" (lookup-key map "\C-e"))     ; ^E
-  	     (define-key global-map "\C-f" (lookup-key map "\C-f"))     ; ^F
  	     (define-key global-map "\C-h" (lookup-key map "\C-h"))     ; ^H (BS)
  	     (define-key global-map "\C-j" (lookup-key map "\C-j"))     ; ^J (LF)
--- 1996,1999 ----
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/tpu-extras.el emacs-19.22/lisp/tpu-extras.el
*** emacs-19.21/lisp/tpu-extras.el	Tue Nov 16 07:17:32 1993
--- emacs-19.22/lisp/tpu-extras.el	Fri Nov 26 01:33:47 1993
***************
*** 5,9 ****
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Keywords: tpu-edt
  
  ;; This file is part of GNU Emacs.
--- 5,9 ----
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Keywords: emulations
  
  ;; This file is part of GNU Emacs.
***************
*** 105,109 ****
  ;;;  Revision Information
  
! (defconst tpu-extras-revision "$Revision: 1.4 $"
    "Revision number of the TPU-edt extras.")
  
--- 105,109 ----
  ;;;  Revision Information
  
! (defconst tpu-extras-revision "$Revision: 1.6 $"
    "Revision number of the TPU-edt extras.")
  
***************
*** 429,432 ****
--- 429,433 ----
  ;;;  Function to set scroll margins
  
+ ;;;###autoload
  (defun tpu-set-scroll-margins (top bottom)
    "Set scroll margins."
***************
*** 453,462 ****
  		tpu-top-scroll-margin tpu-bottom-scroll-margin)))
  
- (fset 'set\ scroll\ margins 'tpu-set-scroll-margins)
- (fset 'SET\ SCROLL\ MARGINS 'tpu-set-scroll-margins)
  
- 
  ;;;  Functions to set cursor bound or free
  
  (defun tpu-set-cursor-free nil
    "Allow the cursor to move freely about the screen."
--- 454,461 ----
  		tpu-top-scroll-margin tpu-bottom-scroll-margin)))
  
  
  ;;;  Functions to set cursor bound or free
  
+ ;;;###autoload
  (defun tpu-set-cursor-free nil
    "Allow the cursor to move freely about the screen."
***************
*** 468,471 ****
--- 467,471 ----
    (message "The cursor will now move freely about the screen."))
  
+ ;;;###autoload
  (defun tpu-set-cursor-bound nil
    "Constrain the cursor to the flow of the text."
***************
*** 477,491 ****
  			     GOLD-map)
    (message "The cursor is now bound to the flow of your text."))
- 
- (fset 'set\ cursor\ bound 'tpu-set-cursor-bound)
- (fset 'SET\ CURSOR\ BOUND 'tpu-set-cursor-bound)
- (fset 'set\ cursor\ free 'tpu-set-cursor-free)
- (fset 'SET\ CURSOR\ FREE 'tpu-set-cursor-free)
- 
- 
- ;;;  Keypad Mapping
- 
- (define-key GOLD-map "F" 'tpu-set-cursor-free)			; F
- (define-key GOLD-map "f" 'tpu-set-cursor-free)			; f
  
  ;;; tpu-extras.el ends here
--- 477,480 ----
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/tpu-mapper.el emacs-19.22/lisp/tpu-mapper.el
*** emacs-19.21/lisp/tpu-mapper.el	Tue Nov 16 07:17:32 1993
--- emacs-19.22/lisp/tpu-mapper.el	Tue Nov 23 14:30:46 1993
***************
*** 5,9 ****
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Keywords: tpu-edt
  
  ;; This file is part of GNU Emacs.
--- 5,9 ----
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Keywords: emulations
  
  ;; This file is part of GNU Emacs.
***************
*** 70,74 ****
  ;;;  Revision Information
  ;;;
! (defconst tpu-mapper-revision "$Revision: 1.4 $"
      "Revision number of TPU-edt x-windows emacs key mapper.")
  
--- 70,74 ----
  ;;;  Revision Information
  ;;;
! (defconst tpu-mapper-revision "$Revision: 1.5 $"
      "Revision number of TPU-edt x-windows emacs key mapper.")
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/trace.el emacs-19.22/lisp/trace.el
*** emacs-19.21/lisp/trace.el	Tue Nov 16 07:17:34 1993
--- emacs-19.22/lisp/trace.el	Tue Nov 23 15:12:21 1993
***************
*** 6,10 ****
  ;; Created: 15 Dec 1992
  ;; Version: trace.el,v 2.0 1993/05/18 00:41:16 hans Exp
! ;; Keywords: tracing, debugging
  
  ;; This file is part of GNU Emacs.
--- 6,10 ----
  ;; Created: 15 Dec 1992
  ;; Version: trace.el,v 2.0 1993/05/18 00:41:16 hans Exp
! ;; Keywords: tools, lisp
  
  ;; This file is part of GNU Emacs.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/vc-hooks.el emacs-19.22/lisp/vc-hooks.el
*** emacs-19.21/lisp/vc-hooks.el	Tue Nov 16 07:17:41 1993
--- emacs-19.22/lisp/vc-hooks.el	Sat Nov 27 06:17:36 1993
***************
*** 36,41 ****
  
  (defvar vc-make-backup-files nil
!   "*If non-nil, backups of registered files are made according to
! the make-backup-files variable.  Otherwise, prevents backups being made.")
  
  (defvar vc-rcs-status t
--- 36,41 ----
  
  (defvar vc-make-backup-files nil
!   "*If non-nil, backups of registered files are made as with other files.
! If nil (the default), for files covered by version control don't get backups.")
  
  (defvar vc-rcs-status t
***************
*** 148,151 ****
--- 148,158 ----
  		       (if (and vc-rcs-status (eq vc-type 'RCS))
  			   (vc-rcs-status file)))))
+     ;; Even root shouldn't modify a registered file without locking it first.
+     (and vc-type
+ 	 (not buffer-read-only)
+ 	 (zerop (user-uid))
+ 	 (require 'vc)
+ 	 (not (string-equal (user-login-name) (vc-locking-user file)))
+ 	 (setq buffer-read-only t))
      ;; force update of mode line
      (set-buffer-modified-p (buffer-modified-p))
***************
*** 217,221 ****
  			(goto-char (point-min))
  			(while (re-search-forward lock-pattern nil t)
! 			  (replace-match (if (eobp) "" "-") t t))
  			(buffer-string)))
  		     (status
--- 224,228 ----
  			(goto-char (point-min))
  			(while (re-search-forward lock-pattern nil t)
! 			  (replace-match (if (eobp) "" ":") t t))
  			(buffer-string)))
  		     (status
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/vc.el emacs-19.22/lisp/vc.el
*** emacs-19.21/lisp/vc.el	Tue Nov 16 07:17:43 1993
--- emacs-19.22/lisp/vc.el	Sat Nov 27 06:33:16 1993
***************
*** 119,122 ****
--- 119,128 ----
  is sensitive to blank lines.")
  
+ ;; Default is to be extra careful for super-user.
+ (defvar vc-checkout-carefully (= (user-uid) 0)
+   "*Non-nil means be extra-careful in checkout.
+ Verify that the file really is not locked
+ and that its contents match what the master file says.")
+ 
  ;; Variables the user doesn't need to know about.
  (defvar vc-log-entry-mode nil)
***************
*** 328,337 ****
  (defun vc-buffer-sync ()
    ;; Make sure the current buffer and its working file are in sync
!   (if (and (buffer-modified-p)
! 	   (or
! 	    vc-suppress-confirm
! 	    (y-or-n-p (format "%s has been modified.  Write it out? "
! 			      (buffer-name)))))
!       (save-buffer)))
  
  (defun vc-workfile-unchanged-p (file)
--- 334,343 ----
  (defun vc-buffer-sync ()
    ;; Make sure the current buffer and its working file are in sync
!   (if (buffer-modified-p)
!       (progn
! 	(or vc-suppress-confirm
! 	    (y-or-n-p (format "Buffer %s modified; save it? " (buffer-name)))
! 	    (error "Aborted"))
! 	(save-buffer))))
  
  (defun vc-workfile-unchanged-p (file)
***************
*** 366,370 ****
       ;; if there is no lock on the file, assert one and get it
       ((not (setq owner (vc-locking-user file)))
!       (vc-checkout-writable-buffer file))
  
       ;; a checked-out version exists, but the user may not own the lock
--- 372,395 ----
       ;; if there is no lock on the file, assert one and get it
       ((not (setq owner (vc-locking-user file)))
!       (if (and vc-checkout-carefully
! 	       (not (vc-workfile-unchanged-p file))
! 	       (not (zerop (vc-backend-diff file nil))))
! 	  (if (save-window-excursion
! 		(pop-to-buffer "*vc*")
! 		(goto-char (point-min))
! 		(insert-string (format "Changes to %s since last lock:\n\n"
! 				       file))
! 		(not (beep))
! 		(yes-or-no-p
! 		      (concat "File has unlocked changes, "
! 		       "claim lock retaining changes? ")))
! 	      (progn (vc-backend-steal file)
! 		     (vc-mode-line file))
! 	    (if (not (yes-or-no-p "Revert to checked-in version, instead? "))
! 		(error "Checkout aborted.")
! 	      (vc-revert-buffer1 t t)
! 	      (vc-checkout-writable-buffer file))
! 	    )
! 	(vc-checkout-writable-buffer file)))
  
       ;; a checked-out version exists, but the user may not own the lock
***************
*** 442,446 ****
  each one.  The log message will be used as a comment for any register
  or checkin operations, but ignored when doing checkouts.  Attempted
! lock steals will raise an error."
    (interactive "P")
    (catch 'nogo
--- 467,473 ----
  each one.  The log message will be used as a comment for any register
  or checkin operations, but ignored when doing checkouts.  Attempted
! lock steals will raise an error.
! 
!    For checkin, a prefix argument lets you specify the version number to use."
    (interactive "P")
    (catch 'nogo
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/version.el emacs-19.22/lisp/version.el
*** emacs-19.21/lisp/version.el	Tue Nov 16 07:17:43 1993
--- emacs-19.22/lisp/version.el	Sat Nov 27 04:40:41 1993
***************
*** 26,30 ****
  ;; The following line is modified automatically
  ;; by loading inc-version.el, each time a new Emacs is dumped.
! (defconst emacs-version "19.21.0" "\
  Version numbers of this version of Emacs.")
  
--- 26,30 ----
  ;; The following line is modified automatically
  ;; by loading inc-version.el, each time a new Emacs is dumped.
! (defconst emacs-version "19.22.0" "\
  Version numbers of this version of Emacs.")
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/view.el emacs-19.22/lisp/view.el
*** emacs-19.21/lisp/view.el	Tue Nov 16 07:17:45 1993
--- emacs-19.22/lisp/view.el	Tue Nov 23 03:30:05 1993
***************
*** 333,337 ****
  Arg is number of lines to scroll."
    (interactive "P")
!   (if (pos-visible-in-window-p (point-max))
        (view-exit)
      (setq lines
--- 333,340 ----
  Arg is number of lines to scroll."
    (interactive "P")
!   (if (and (pos-visible-in-window-p (point-max))
! 	   ;; Allow scrolling backward at the end of the buffer.
! 	   (or (null lines)
! 	       (> lines 0)))
        (view-exit)
      (setq lines
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/vt-control.el emacs-19.22/lisp/vt-control.el
*** emacs-19.21/lisp/vt-control.el	Tue Nov 16 07:17:52 1993
--- emacs-19.22/lisp/vt-control.el	Tue Nov 23 14:31:20 1993
***************
*** 5,9 ****
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Keywords: vt100
  
  ;; This file is part of GNU Emacs.
--- 5,9 ----
  ;; Author: Rob Riepel <riepel@networking.stanford.edu>
  ;; Maintainer: Rob Riepel <riepel@networking.stanford.edu>
! ;; Keywords: terminals
  
  ;; This file is part of GNU Emacs.
***************
*** 53,57 ****
  ;;;  Revision Information
  
! (defconst vt-revision "$Revision: 1.3 $"
    "Revision number of vt-control.")
  
--- 53,57 ----
  ;;;  Revision Information
  
! (defconst vt-revision "$Revision: 1.4 $"
    "Revision number of vt-control.")
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/lisp/xscheme.el emacs-19.22/lisp/xscheme.el
*** emacs-19.21/lisp/xscheme.el	Tue Nov 16 07:17:57 1993
--- emacs-19.22/lisp/xscheme.el	Tue Nov 23 14:31:43 1993
***************
*** 4,8 ****
  
  ;; Maintainer: FSF
! ;; Keywords: languages lisp
  
  ;; This file is part of GNU Emacs.
--- 4,8 ----
  
  ;; Maintainer: FSF
! ;; Keywords: languages, lisp
  
  ;; This file is part of GNU Emacs.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/make-dist emacs-19.22/make-dist
*** emacs-19.21/make-dist	Mon Nov 15 17:56:58 1993
--- emacs-19.22/make-dist	Thu Nov 25 23:04:48 1993
***************
*** 77,80 ****
--- 77,90 ----
  fi
  
+ ### Make sure we don't already have a directory  emacs-${version}.
+ 
+ emacsname="emacs-${version}${new_extension}"
+ 
+ if [ -d ${emacsname} ]
+ then
+   echo Directory "${emacsname}" already exists >&2
+   exit 1
+ fi
+ 
  ### Make sure the subdirectory is available.
  tempparent="make-dist.tmp.$$"
***************
*** 109,114 ****
  
  echo "Creating staging directory: \`${tempparent}'"
  mkdir ${tempparent}
- emacsname="emacs-${version}${new_extension}"
  tempdir="${tempparent}/${emacsname}"
  
--- 119,124 ----
  
  echo "Creating staging directory: \`${tempparent}'"
+ 
  mkdir ${tempparent}
  tempdir="${tempparent}/${emacsname}"
  
***************
*** 130,136 ****
  ln ChangeLog Makefile.in build-ins.in configure configure.in ${tempdir}
  ln make-dist vpath.sed ${tempdir}
! ### Copy config.guess and config.sub; they're cross-filesystem symlinks.
  cp config.sub ${tempdir}
  cp config.guess ${tempdir}
  
  echo "Updating version number in README."
--- 140,147 ----
  ln ChangeLog Makefile.in build-ins.in configure configure.in ${tempdir}
  ln make-dist vpath.sed ${tempdir}
! ### Copy these files; they're cross-filesystem symlinks.
  cp config.sub ${tempdir}
  cp config.guess ${tempdir}
+ cp install.sh ${tempdir}
  
  echo "Updating version number in README."
***************
*** 302,306 ****
  echo "Breaking intra-tree links."
  find ${tempdir} ! -type d -links +2 \
!   -exec cp {} $$ \; -exec rm -f {} \; -exec mv $$ {} \;
  
  if [ "${newer}" ]; then
--- 313,317 ----
  echo "Breaking intra-tree links."
  find ${tempdir} ! -type d -links +2 \
!   -exec cp -p {} $$ \; -exec rm -f {} \; -exec mv $$ {} \;
  
  if [ "${newer}" ]; then
***************
*** 338,341 ****
--- 349,355 ----
  if [ "${clean_up}" = yes ]; then
    echo "Cleaning up the staging directory."
+   rm -rf ${tempparent}
+ else
+   (cd ${tempparent}; mv ${emacsname} ..)
    rm -rf ${tempparent}
  fi
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/man/ChangeLog emacs-19.22/man/ChangeLog
*** emacs-19.21/man/ChangeLog	Tue Nov 16 06:15:08 1993
--- emacs-19.22/man/ChangeLog	Sat Nov 27 04:43:14 1993
***************
*** 1,2 ****
--- 1,10 ----
+ Sat Nov 27 04:43:10 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.22 released.
+ 
+ Thu Nov 18 01:19:29 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Makefile (TEXINDEX_OBJS): Delete spurious period.
+ 
  Tue Nov 16 06:14:59 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/man/Makefile emacs-19.22/man/Makefile
*** emacs-19.21/man/Makefile	Tue Nov 16 00:41:01 1993
--- emacs-19.22/man/Makefile	Thu Nov 18 01:19:26 1993
***************
*** 3,7 ****
  
  MAKEINFO = makeinfo
! TEXINDEX_OBJS = texindex.o ../.lib-src/getopt.o ../lib-src/getopt.o
  INFO_TARGETS = ../info/emacs ../info/cl.info ../info/forms ../info/vip \
  	       ../info/gnus ../info/sc ../info/info
--- 3,7 ----
  
  MAKEINFO = makeinfo
! TEXINDEX_OBJS = texindex.o ../lib-src/getopt.o ../lib-src/getopt.o
  INFO_TARGETS = ../info/emacs ../info/cl.info ../info/forms ../info/vip \
  	       ../info/gnus ../info/sc ../info/info
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/man/building.texi emacs-19.22/man/building.texi
*** emacs-19.21/man/building.texi	Tue Nov 16 07:29:43 1993
--- emacs-19.22/man/building.texi	Mon Nov 22 14:55:04 1993
***************
*** 663,676 ****
  
  @findex lisp-mode
!   For the source files of programs to run in external Lisps, use Lisp mode.
! This mode can be selected with @kbd{M-x lisp-mode}, and is used automatically
! for files whose names end in @file{.l} or @file{.lisp}, as most Lisp
! systems usually expect.
  
  @kindex C-M-x @r{(Lisp mode)}
! @findex lisp-send-defun
    When you edit a function in a Lisp program you are running, the easiest
  way to send the changed definition to the inferior Lisp process is the key
! @kbd{C-M-x}.  In Lisp mode, this runs the function @code{lisp-send-defun},
  which finds the defun around or following point and sends it as input to
  the Lisp process.  (Emacs can send input to any inferior process regardless
--- 663,676 ----
  
  @findex lisp-mode
!   For the source files of programs to run in external Lisps, use Lisp
! mode.  This mode can be selected with @kbd{M-x lisp-mode}, and is used
! automatically for files whose names end in @file{.l}, @file{.lsp}, or
! @file{.lisp}, as most Lisp systems usually expect.
  
  @kindex C-M-x @r{(Lisp mode)}
! @findex lisp-eval-defun
    When you edit a function in a Lisp program you are running, the easiest
  way to send the changed definition to the inferior Lisp process is the key
! @kbd{C-M-x}.  In Lisp mode, this runs the function @code{lisp-eval-defun},
  which finds the defun around or following point and sends it as input to
  the Lisp process.  (Emacs can send input to any inferior process regardless
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/man/emacs.texi emacs-19.22/man/emacs.texi
*** emacs-19.21/man/emacs.texi	Tue Nov 16 07:29:51 1993
--- emacs-19.22/man/emacs.texi	Sat Nov 27 14:01:15 1993
***************
*** 65,69 ****
  @center @titlefont{GNU Emacs Manual}
  @sp 4
! @center Ninth Edition, Emacs version 19.21
  @sp 1
  @center for Unix Users
--- 65,69 ----
  @center @titlefont{GNU Emacs Manual}
  @sp 4
! @center Ninth Edition, Emacs version 19.22
  @sp 1
  @center for Unix Users
***************
*** 111,122 ****
  @ifinfo
  @node Top, Distrib,, (DIR)
  
- The Emacs Editor
- ****************
- 
  Emacs is the extensible, customizable, self-documenting real-time
  display editor.  This Info file describes how to edit with Emacs
  and some of how to customize it, but not how to extend it.  It
! corresponds to GNU Emacs version 19.21.
  
  @end ifinfo
--- 111,120 ----
  @ifinfo
  @node Top, Distrib,, (DIR)
+ @top The Emacs Editor
  
  Emacs is the extensible, customizable, self-documenting real-time
  display editor.  This Info file describes how to edit with Emacs
  and some of how to customize it, but not how to extend it.  It
! corresponds to GNU Emacs version 19.22.
  
  @end ifinfo
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/man/info.texi emacs-19.22/man/info.texi
*** emacs-19.21/man/info.texi	Tue Nov 16 07:30:06 1993
--- emacs-19.22/man/info.texi	Wed Nov 24 14:40:47 1993
***************
*** 72,76 ****
  @end titlepage
  
! @paragraphindent asis
  @ifinfo
  @node Top, Getting Started, (dir), (dir)
--- 72,76 ----
  @end titlepage
  
! @paragraphindent 3
  @ifinfo
  @node Top, Getting Started, (dir), (dir)
***************
*** 80,84 ****
  
  To learn how to use Info, type the command @kbd{h}.  It brings you
! to a programmed instruction sequence.
  
  @c Need to make sure that `Info-help' goes to the right node, 
--- 80,85 ----
  
  To learn how to use Info, type the command @kbd{h}.  It brings you
! to a programmed instruction sequence.  If at any time you are ready to
! stop using Info, type @samp{q}.
  
  @c Need to make sure that `Info-help' goes to the right node, 
***************
*** 174,219 ****
  see what they do.  At the end are instructions of what you should do
  next.
! 
! This is line 17 @*
! This is line 18 @*
! This is line 19 @*
! This is line 20 @*
! This is line 21 @*
! This is line 22 @*
! This is line 23 @*
! This is line 24 @*
! This is line 25 @*
! This is line 26 @*
! This is line 27 @*
! This is line 28 @*
! This is line 29 @*
! This is line 30 @*
! This is line 31 @*
! This is line 32 @*
! This is line 33 @*
! This is line 34 @*
! This is line 35 @*
! This is line 36 @*
! This is line 37 @*
! This is line 38 @*
! This is line 39 @*
! This is line 40 @*
! This is line 41 @*
! This is line 42 @*
! This is line 43 @*
! This is line 44 @*
! This is line 45 @*
! This is line 46 @*
! This is line 47 @*
! This is line 48 @*
! This is line 49 @*
! This is line 50 @*
! This is line 51 @*
! This is line 52 @*
! This is line 53 @*
! This is line 54 @*
! This is line 55 @*
! This is line 56 @*
! 
  If you have managed to get here, go back to the beginning with
  Delete, and come back here again, then you understand Space and
--- 175,220 ----
  see what they do.  At the end are instructions of what you should do
  next.
! @format
! This is line 17
! This is line 18
! This is line 19
! This is line 20
! This is line 21
! This is line 22
! This is line 23
! This is line 24
! This is line 25
! This is line 26
! This is line 27
! This is line 28
! This is line 29
! This is line 30
! This is line 31
! This is line 32
! This is line 33
! This is line 34
! This is line 35
! This is line 36
! This is line 37
! This is line 38
! This is line 39
! This is line 40
! This is line 41
! This is line 42
! This is line 43
! This is line 44
! This is line 45
! This is line 46
! This is line 47
! This is line 48
! This is line 49
! This is line 50
! This is line 51
! This is line 52
! This is line 53
! This is line 54
! This is line 55
! This is line 56
! @end format
  If you have managed to get here, go back to the beginning with
  Delete, and come back here again, then you understand Space and
***************
*** 244,249 ****
--- 245,252 ----
    Now it is time to move on to the @samp{Next} node, named @samp{Help-P}.
  
+ @format
  >> Type @samp{n} to move there.  Type just one character;
     do not type the quotes and do not type a @key{RET} afterward.
+ @end format
  
  @samp{>>} in the margin means it is really time to try a command.
***************
*** 258,264 ****
--- 261,269 ----
  node, @samp{Help-^L}.
  
+ @format
  >> But do not do that yet.  First, try the @kbd{p} command, which takes
     you to the @samp{Previous} node.  When you get there, you can do an
     @kbd{n} again to return here.
+ @end format
  
    This all probably seems insultingly simple so far, but @emph{do not} be
***************
*** 267,271 ****
--- 272,278 ----
  you may make Info skip past an important warning that was coming up.
  
+ @format
  >> Now do an @kbd{n} to get to the node @samp{Help-^L} and learn more.
+ @end format
  
  @node Help-^L, Help-M, Help-P, Getting Started
***************
*** 288,292 ****
--- 295,301 ----
  (there is not anything above the top until you have typed some spaces).
  
+ @format
  >> Now try typing a Space (afterward, type a Delete to return here).
+ @end format
  
    When you type the space, the two lines that were at the bottom of
***************
*** 304,317 ****
  type an @key{L} or @kbd{l}).
  
  >> Type @kbd{C-l} now.
  
    To move back to the beginning of the node you are on, you can type
  a lot of Deletes.  You can also type simply @kbd{b} for beginning.
  >> Try that now.  (We have put in enough verbiage to push this past
  the first screenful, but screens are so big nowadays that perhaps it
  isn't enough.  You may need to shrink your Emacs or Info window.)
  Then come back, with Spaces.
  
!   If your screen is very tall, all of this node might fit at once.
  In that case, "b" won't do anything.  Sorry; what can we do?
  
--- 313,330 ----
  type an @key{L} or @kbd{l}).
  
+ @format
  >> Type @kbd{C-l} now.
+ @end format
  
    To move back to the beginning of the node you are on, you can type
  a lot of Deletes.  You can also type simply @kbd{b} for beginning.
+ @format
  >> Try that now.  (We have put in enough verbiage to push this past
  the first screenful, but screens are so big nowadays that perhaps it
  isn't enough.  You may need to shrink your Emacs or Info window.)
  Then come back, with Spaces.
+ @end format
  
! If your screen is very tall, all of this node might fit at once.
  In that case, "b" won't do anything.  Sorry; what can we do?
  
***************
*** 321,325 ****
--- 334,340 ----
  finished looking at the list, make it go away by typing a @key{SPC}.
  
+ @format
  >> Type a @key{?} now.  After it finishes, type a @key{SPC}.
+ @end format
  
    (If you are using the standalone Info reader, type `l' to return here.)
***************
*** 330,334 ****
--- 345,351 ----
  the same size screen, it would be impossible to warn you anyway.
  
+ @format
  >> Now type @kbd{n} to see the description of the @kbd{m} command.
+ @end format
  
  @node Help-M, Help-Adv, Help-^L, Getting Started
***************
*** 384,387 ****
--- 401,405 ----
  both @samp{Foo}.
  
+ @format
  >> Now use Spaces to find the menu in this node, then come back to
     the front with a @kbd{b} and some Spaces.  As you see, a menu is
***************
*** 389,392 ****
--- 407,411 ----
     by looking at it, then the node does not have a menu and the
     @kbd{m} command is not available.
+ @end format
  
    The command to go to one of the subnodes is @kbd{m}---but @emph{do
***************
*** 444,448 ****
--- 463,469 ----
  
  
+ @format
  >>  Now type just an @kbd{m} and see what happens:
+ @end format
  
    Now you are ``inside'' an @kbd{m} command.  Commands cannot be used
***************
*** 451,454 ****
--- 472,476 ----
    You can change your mind about doing the @kbd{m} by typing Control-g.
  
+ @format
  >> Try that now;  notice the bottom line clear.
  
***************
*** 456,471 ****
--- 478,498 ----
  
  >> Now type @samp{BAR} item name.  Do not type Return yet.
+ @end format
  
    While you are typing the item name, you can use the Delete key to
  cancel one character at a time if you make a mistake.
  
+ @format
  >> Type one to cancel the @samp{R}.  You could type another @samp{R} to
     replace it.  You do not have to, since @samp{BA} is a valid abbreviation.
  
  >> Now you are ready to go.  Type a @key{RET}.
+ @end format
  
    After visiting Help-FOO, you should return here.
  
+ @format
  >> Type @kbd{n} to see more commands.
+ @end format
  
  @c If a menu appears at the end of this node, remove it.
***************
*** 496,500 ****
--- 523,529 ----
  some @key{SPC}s.
  
+ @format
  >> Now type @kbd{u} to move back up to @samp{Help-M}.
+ @end format
  
  @node Help-Adv, Help-Q, Help-M, Getting Started
***************
*** 516,521 ****
--- 545,552 ----
  the @kbd{m} and get you back to @samp{Help-M}.
  
+ @format
  >> Try typing three @kbd{l}'s, pausing in between to see what each
      @kbd{l} does.
+ @end format
  
  Then follow directions again and you will end up back here.
***************
*** 531,536 ****
--- 562,569 ----
  to all the nodes that exist.
  
+ @format
  >> Try doing a @samp{d}, then do an @kbd{l} to return here (yes,
     @emph{do} return).
+ @end format
  
    Sometimes, in Info documentation, you will see a cross reference.
***************
*** 548,552 ****
--- 581,587 ----
  all the cross reference names in the current node by typing a Tab.
  
+ @format
  >> Type @samp{f}, followed by @samp{Cross}, and a @key{RET}.
+ @end format
  
    To get a list of all the cross references in the current node, you can
***************
*** 556,563 ****
--- 591,600 ----
  to cancel the @samp{f}.
  
+ @format
  >> Type "f?" to get a list of the cross references in this node.  Then
     type a @kbd{Control-g} and see how the @samp{f} gives up.
  
  >> Now type @kbd{n} to see the last node of the course.
+ @end format
  
  @c If a menu appears at the end of this node, remove it.
***************
*** 577,581 ****
--- 614,620 ----
  way to get back there.
  
+ @format
  >> Type @kbd{l} to return to the node where the cross reference was.
+ @end format
  
  @node Help-Q,  , Help-Adv, Getting Started
***************
*** 592,598 ****
--- 631,639 ----
  manner.
  
+ @format
  >> Type @samp{d} to go to the Info directory node; then type
     @samp{mInfo} and Return, to get to the node about Info and
     see what other help is available.
+ @end format
  
  @node Advanced Info, Create an Info File, Getting Started, Top
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/man/texinfo.tex emacs-19.22/man/texinfo.tex
*** emacs-19.21/man/texinfo.tex	Tue Nov 16 07:12:56 1993
--- emacs-19.22/man/texinfo.tex	Sat Nov 27 14:07:24 1993
***************
*** 23,27 ****
  %what you give them.   Help stamp out software-hoarding!
  
! \def\texinfoversion{2.115}
  \message{Loading texinfo package [Version \texinfoversion]:}
  
--- 23,27 ----
  %what you give them.   Help stamp out software-hoarding!
  
! \def\texinfoversion{2.118}
  \message{Loading texinfo package [Version \texinfoversion]:}
  
***************
*** 461,465 ****
  % @dots{}  output some dots
  
! \def\dots{$\ldots$}
  
  % @page    forces the start of a new page
--- 461,465 ----
  % @dots{}  output some dots
  
! \def\dots{.$\,$.$\,$.\:}
  
  % @page    forces the start of a new page
***************
*** 1986,1990 ****
  % Like \dotfill except takes at least 1 em.
  \def\indexdotfill{\cleaders
!   \hbox{$\mathsurround=0pt \mkern1.5mu . \mkern1.5mu$}\hskip 1em plus 1fill}
  
  \def\primary #1{\line{#1\hfil}}
--- 1986,1990 ----
  % Like \dotfill except takes at least 1 em.
  \def\indexdotfill{\cleaders
!   \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
  
  \def\primary #1{\line{#1\hfil}}
***************
*** 3282,3286 ****
  % Note that groups don't affect changes in \hyphenchar.
  \functionparens
! \code{#1}%
  \interlinepenalty=10000
  \advance\rightskip by 0pt plus 1fil
--- 3282,3286 ----
  % Note that groups don't affect changes in \hyphenchar.
  \functionparens
! \tclose{#1}% avoid \code because of side effects on active chars
  \interlinepenalty=10000
  \advance\rightskip by 0pt plus 1fil
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/man/vip.texi emacs-19.22/man/vip.texi
*** emacs-19.21/man/vip.texi	Tue Nov 16 07:30:25 1993
--- emacs-19.22/man/vip.texi	Tue Nov 23 15:34:49 1993
***************
*** 66,72 ****
  @ifinfo
  @node Top, Survey,, (DIR)
! 
! VIP
! ***
  
  VIP is a Vi emulating package written in Emacs Lisp.  VIP implements most
--- 66,70 ----
  @ifinfo
  @node Top, Survey,, (DIR)
! @top VIP
  
  VIP is a Vi emulating package written in Emacs Lisp.  VIP implements most
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/oldXMenu/Activate.c emacs-19.22/oldXMenu/Activate.c
*** emacs-19.21/oldXMenu/Activate.c	Tue Nov 16 07:26:46 1993
--- emacs-19.22/oldXMenu/Activate.c	Fri Nov 26 02:23:42 1993
***************
*** 355,358 ****
--- 355,372 ----
  		}
  		if (event_xmp->active) event_xmp->activated = True;
+ #if 1
+ 		/*
+ 		 * i suspect the we don't get an EXPOSE event when backing
+ 		 * store is enabled; the menu windows content is probably
+ 		 * not drawn in when it should be in that case.
+ 		 * in that case, this is probably an ugly fix!
+ 		 * i hope someone more familiar with this code would
+ 		 * take it from here.  -- caveh@eng.sun.com.
+ 		 */
+ 		XSetWindowBackground(display,
+ 				     event_xmp->window, 
+ 				     menu->bkgnd_color);
+ 		_XMRefreshPane(display, menu, event_xmp);
+ #endif
  		cur_p = event_xmp;
  	    }
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/oldXMenu/ChangeLog emacs-19.22/oldXMenu/ChangeLog
*** emacs-19.21/oldXMenu/ChangeLog	Tue Nov 16 06:14:42 1993
--- emacs-19.22/oldXMenu/ChangeLog	Sat Nov 27 04:42:12 1993
***************
*** 1,2 ****
--- 1,11 ----
+ Sat Nov 27 04:42:08 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.22 released.
+ 
+ Fri Nov 26 02:34:08 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Activate.c (XMenuActivate):
+ 	Call XSetWindowBackground and _XMRefreshPane.
+ 
  Tue Nov 16 06:14:38 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/ChangeLog emacs-19.22/src/ChangeLog
*** emacs-19.21/src/ChangeLog	Tue Nov 16 12:21:42 1993
--- emacs-19.22/src/ChangeLog	Sat Nov 27 04:41:26 1993
***************
*** 1,2 ****
--- 1,251 ----
+ Sat Nov 27 04:41:22 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.22 released.
+ 
+ Fri Nov 26 05:38:17 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* process.c (deactivate_process) [SVR4_PTYS]:
+ 	If subtty is not nil, close it.
+ 
+ 	* keyboard.c (kbd_buffer_get_event): For delete-window-event,
+ 	do count iconified frames.
+ 
+ 	* xfns.c (x_window): Call XSetWMProtocols.
+ 
+ 	* keyboard.c (kbd_buffer_get_event): If user destroys the last frame,
+ 	exit before calling Fdelete_frame.
+ 
+ 	* s/irix5-0.h (SYSTEM_TYPE): Make it "irix".
+ 
+ 	* sysdep.c (closedir): Test BROKEN_CLOSEDIR, not INTERRUPTIBLE_CLOSE.
+ 
+ Thu Nov 25 00:39:17 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* keyboard.c (read_avail_input): Undo Nov 18 change.
+ 
+ 	* lread.c (readevalloop): Get error if buffer being eval'd is killed.
+ 
+ 	* s/irix3-3.h (SETPGRP_RELEASES_CTTY): Defined.
+ 	* s/irix5-0.h (IRIX5, SETPGRP_RELEASES_CTTY): Defined.
+ 	* process.c (create_process): Do setpgrp for USG regardless of IRIX.
+ 	(process_send_signal) [IRIX5]: For SIGTSTP, use VSUSP, not VSWTCH.
+ 	* callproc.c (child_setup): Test SETPGRP_RELEASES_CTTY, not IRIX.
+ 	(init_callproc): Fix previous change.
+ 
+ 	* s/sunos4-1-3.h [!SYSTEM_MALLOC] (MEMMOVE_MISSING): Defined.
+ 
+ 	* keyboard.c (quit_throw_to_read_char):
+ 	Look at internal_last_event_frame only if MULTI_FRAME.
+ 
+ 	* m/ibmrt.h (HAVE_FTIME): Deleted (autoconf does it).
+ 
+ 	* m/hp9000s800.h (bcopy, bzero, bcmp): If HAVE_BCOPY, don't #define.
+ 
+ 	* s/sco4.h (LIBS_SYSTEM): Always define this one way or another.
+ 	Include -lPW in it.
+ 
+ 	* intervals.c (merge_properties_sticky): Declared.
+ 
+ 	* regex.c (MAX, MIN): Undef before defining.
+ 
+ 	* frame.c (Fhandle_switch_frame, Fredirect_frame_focus): Declared.
+ 
+ 	* m/delta.h (HAVE_RANDOM, HAVE_XSCREENNUMBEROFSCREEN, BROKEN_FIONREAD):
+ 	Add definitions.
+ 	(LIB_X11_LIB, LIBX11_SYSTEM): Add override definitions.
+ 	(USG_SHARED_LIBRARIES): Add #undef.
+ 
+ 	* sysdep.c (init_baud_rate): Avoid referring to sg uninitialized.
+ 
+ Wed Nov 24 03:01:23 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* emacs.c (main) [AIX]: Don't handle signals 23, SIGAIO, SIGPTY.
+ 
+ 	* indent.c (Fmove_to_column): Increments for control characters
+ 	were too low by 1.
+ 
+ 	* process.c (Fdelete_process): Fix paren error.
+ 
+ 	* sysdep.c (closedir): Pass on the value from sys_closedir.
+ 	Do use this definition, if INTERRUPTIBLE_CLOSE.
+ 
+ Tue Nov 23 00:09:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* s/sco4.h (LIBX11_SYSTEM): Override the definition.
+ 
+ 	* xterm.c (XTread_socket): Really handle Xatom_wm_window_moved events.
+ 
+ 	* s/irix5-0.h (SIGNALS_VIA_CHARACTERS): Defined.
+ 
+ 	* fileio.c (Finsert_file_contents): Don't call signal_after_change
+ 	if we did not call prepare_to_modify_buffer.
+ 
+ 	* editfns.c (make_buffer_string): Don't copy intervals
+ 	if we don't really have any properties.
+ 
+ 	* lisp.h: Declare Fnext_single_property_change
+ 	and Fnext_property_change.
+ 
+ 	* s/sco4.h (HAVE_GETTIMEOFDAY): Define only if HAVE_SOCKETS.
+ 	Fix up conditionals changed recently.
+ 
+ 	* editfns.c (Finsert_buffer_substring):
+ 	Pass graft_intervals_into_buffer the current buffer.
+ 
+ 	* intervals.c (graft_intervals_into_buffer): New arg LENGTH.
+ 	If source has no intervals, set dest properties to nil.
+ 	* editfns.c (Finsert_buffer_substring): Pass new arg.
+ 	* insdel.c (insert_from_string): Likewise.
+ 
+ 	* callproc.c (init_callproc): Maybe add ../lib-src to exec-path
+ 	and maybe store it in exec-directory.
+ 	Mabe put ../etc into data-directory.
+ 	(init_callproc_1): Part of init_callproc is split out.
+ 	* emacs.c (main): Call init_callproc and init_callproc_1.
+ 
+ Mon Nov 22 10:01:51 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* editfns.c (Fsubst_char_in_region): Call modify_region only if
+ 	a change has to be made.  Call signal_after_change just once, at end.
+ 
+ 	* lread.c (OBARRAY_SIZE): Increase from 509.
+ 
+ 	* xrdb.c (search_magic_path): Fix colon-colon case.
+ 
+ 	* textprop.c (Ftext_property_not_all):
+ 	For trivial yes, return start, not Qt.
+ 
+ 	* xselect.c (Fx_disown_selection_internal): When making the fake
+ 	event for x_handle_selection_clear, use SELECTION_EVENT_... macros.
+ 
+ Sun Nov 21 14:06:21 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* s/sunos4-1-3.h (HAVE_TERMIOS, BSD_TERMIOS): Deleted.
+ 
+ 	* systty.h (EMACS_GET_TTY_PGRP, EMACS_SET_TTY_PGRP):
+ 	If HAVE_TERMIOS and BSD_TERMIOS, don't use tc[sg]etpgrp.
+ 
+ 	* xfns.c (x_set_frame_parameters): Call check_frame_size
+ 	before Fset_frame_size and Fset_frame_position.
+ 
+ 	* termhooks.h (delete_window_event): New event kind.
+ 	* xterm.c (XTread_socket): Generate delete_window_event's.
+ 	* keyboard.c (kbd_buffer_get_event): Handle delete_window_event's.
+ 
+ 	* s/sco4.h [HAVE_SOCKETS] (HAVE_XSCREENNUMBEROFSCREEN): Defined.
+ 
+ 	* keymap.c: Doc fix.
+ 
+ 	* window.c (window_loop, case DELETE_BUFFER_WINDOWS):
+ 	Select a new buffer only if w is selected window.
+ 
+ 	* hftctl.c: Include config.h.  Include sys/signal.h before config.h.
+ 	(sav_alrm): Use SIGTYPE.
+ 	(FUNC): Typedef deleted.
+ 
+ 	* Makefile.in.in (hftctl.o): New rule.
+ 
+ 	* process.c (wait_reading_process_input):
+ 	Use -1 to mean wait_channel is empty.
+ 	Start process loop with descriptor 0 if keyboard_descriptor is not 0.
+ 	(make_process): Initialize descriptors to -1.
+ 	(Fdelete_process): -1 means empty, in infd.
+ 	(deactivate_process): Likewise.
+ 	(process_send_signal): Likewise.
+ 	(kill_buffer_processes): Likewise.
+ 	(sigchld_handler): Likewise.
+ 	(status_notify): Likewise.
+ 	(close_process_descs): Likewise.
+ 	(create_process): Likewise.
+ 	(Fopen_network_stream): Likewise.
+ 	(send_process): Likewise.
+ 	(Fprocess_send_eof): Likewise.  Use XINT when closing outfd.
+ 	(Fset_process_filter): Use XINT to get infd value.
+ 	(wait_reading_process_input): Likewise.
+ 
+ 	* process.c (wait_reading_process_input): When bypassing select,
+ 	clear Available.
+ 
+ 	* sysdep.c (getwd): If getcwd returns 0, we return 0.
+ 	(getwd for VMS): Likewise.
+ 
+ Sat Nov 20 00:52:53 1993  Paul Reilly  (pmr@legacy.pajato.com)
+ 
+ 	*  s/dgux.h (PTY_ITERATION, PTY_NAME_SPRINTF, PTY_TTY_NAME_SPRINTF): 
+ 	Defined (copied from usg5-4.h).
+ 	(FIRST_PTY_LETTER): Deleted.
+ 
+ Sat Nov 20 00:16:59 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* frame.c (Fmake_frame_visible): Doc fix.
+ 
+ 	* textprop.c (Ftext_property_not_all): Swap t and nil values in
+ 	the case where there are no intervals.
+ 	(Fprevious_single_property_change, Fprevious_property_change)
+ 	Extra arg LIMIT.  Return value was off by 1.
+ 	(Fnext_single_property_change, Fnext_property_change): 
+ 	Extra arg LIMIT.
+ 	(Fnext_single_property_change): Require at least 2 args.
+ 	* indent.c (compute_motion):
+ 	Pass new arg to Fnext_single_property_change.
+ 	* xfaces.c (compute_char_face): Accept new arg LIMIT.
+ 	Pass Fnext_single_property_change its new arg LIMIT.
+ 	* xdisp.c (display_text_line): Pass new arg to compute_char_face
+ 	and to Fnext_single_property_change.
+ 	* dispnew.c (direct_output_for_insert):
+ 	Pass new arg to compute_char_face.
+ 
+ 	* keyboard.c (follow_key): When downcasing, downcase just the
+ 	basic part of the character, and preserve the modifier bits.
+ 
+ Fri Nov 19 22:49:05 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* keyboard.c (read_key_sequence): If we get a quit, and current buffer
+ 	has changed, replay it to get proper keymap.
+ 	(quit_throw_to_read_char): Switch frames to the frame the quit was in.
+ 
+ Fri Nov 19 20:42:06 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)
+ 
+ 	* buffer.c (Frename_buffer): When the current buffer is already
+ 	named NAME, don't short-circuit and just return unless UNIQUE is
+ 	nil.  This makes passing UNIQUE=t equivalent to (rename-buffer
+ 	(generate-new-buffer-name NAME)).  This is useful way to rename
+ 	the buffer automatically so you can create another with the
+ 	original name.
+ 
+ Fri Nov 19 12:43:47 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* keyboard.c (quit_throw_to_read_char): Select the frame
+ 	which the quit char was typed in.
+ 
+ 	* s/linux.h (HAVE_UNISTD_H): No need to define here.
+ 
+ 	* buffer.c (Flist_buffers): Always return a value.
+ 
+ 	* minibuf.c (read_minibuf): History list always gets strings,
+ 	not Lisp objects made by read.
+ 
+ Thu Nov 18 01:04:39 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* keyboard.c (read_avail_input): Don't set nread to -1
+ 	if we loop around in the loop that calls read.
+ 
+ 	* sysdep.c (read_input_waiting): read_socket_hook
+ 	delivers events, not characters.  Make buf smaller
+ 	in the case where we actually call read itself.
+ 
+ 	* ralloc.c (r_alloc_init): Explicitly use real_morecore
+ 	to allocate the entire incomplete page.
+ 
+ 	* frame.c (Fmake_frame_visible): Use FRAME_SAMPLE_VISIBILITY.
+ 
+ 	* s/dgux.h (FIRST_PTY_LETTER): Defined.
+ 
+ Wed Nov 17 06:01:02 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* keymap.c (Fkey_binding): Doc fix.
+ 
+ 	* cmds.c (keys_of_cmds): Make 0377 self-inserting.
+ 
  Tue Nov 16 00:34:22 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/Makefile.in.in emacs-19.22/src/Makefile.in.in
*** emacs-19.21/src/Makefile.in.in	Tue Nov 16 03:38:33 1993
--- emacs-19.22/src/Makefile.in.in	Sun Nov 21 17:20:41 1993
***************
*** 739,742 ****
--- 739,743 ----
  xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h) 
  xrdb.o : xrdb.c $(config_h)
+ hftctl.o : hftctl.c $(config_h)
  
  /* The files of Lisp proper */
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/buffer.c emacs-19.22/src/buffer.c
*** emacs-19.21/src/buffer.c	Tue Nov 16 02:09:15 1993
--- emacs-19.22/src/buffer.c	Fri Nov 19 20:39:22 1993
***************
*** 561,565 ****
    CHECK_STRING (name, 0);
    tem = Fget_buffer (name);
!   if (XBUFFER (tem) == current_buffer)
      return current_buffer->name;
    if (!NILP (tem))
--- 561,569 ----
    CHECK_STRING (name, 0);
    tem = Fget_buffer (name);
!   /* Don't short-circuit if UNIQUE is t.  That is a useful way to rename
!      the buffer automatically so you can create another with the original name.
!      It makes UNIQUE equivalent to
!      (rename-buffer (generate-new-buffer-name NAME)).  */
!   if (NILP (unique) && XBUFFER (tem) == current_buffer)
      return current_buffer->name;
    if (!NILP (tem))
***************
*** 1142,1148 ****
    Lisp_Object desired_point;
  
!   desired_point =
!     internal_with_output_to_temp_buffer ("*Buffer List*",
! 					 list_buffers_1, files);
  
    if (NUMBERP (desired_point))
--- 1146,1152 ----
    Lisp_Object desired_point;
  
!   desired_point
!     = internal_with_output_to_temp_buffer ("*Buffer List*",
! 					   list_buffers_1, files);
  
    if (NUMBERP (desired_point))
***************
*** 1154,1157 ****
--- 1158,1162 ----
        return unbind_to (count, Qnil);
      }
+   return Qnil;
  }
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/callproc.c emacs-19.22/src/callproc.c
*** emacs-19.21/src/callproc.c	Tue Nov 16 07:24:09 1993
--- emacs-19.22/src/callproc.c	Thu Nov 25 16:27:23 1993
***************
*** 82,85 ****
--- 82,87 ----
     this is exit code of synchronous subprocess.  */
  int synch_process_retcode;
+ 
+ extern Lisp_Object Vdoc_file_name;
  
  #ifndef VMS  /* VMS version is in vmsproc.c.  */
***************
*** 523,533 ****
    close (err);
  
! #if !defined (IRIX)
! #if defined (USG)
    setpgrp ();			/* No arguments but equivalent in this case */
  #else
    setpgrp (pid, pid);
  #endif /* USG */
- #endif /* IRIX */
    setpgrp_of_tty (pid);
  
--- 525,535 ----
    close (err);
  
! #ifdef USG
! #ifndef SETPGRP_RELEASES_CTTY
    setpgrp ();			/* No arguments but equivalent in this case */
+ #endif
  #else
    setpgrp (pid, pid);
  #endif /* USG */
    setpgrp_of_tty (pid);
  
***************
*** 637,652 ****
  #endif /* not VMS */
  
! init_callproc ()
! {
!   register char * sh;
!   Lisp_Object tempdir;
  
!   {
!     char *data_dir = egetenv ("EMACSDATA");
      
!     Vdata_directory =
!       Ffile_name_as_directory
! 	(build_string (data_dir ? data_dir : PATH_DATA));
!   }
  
    /* Check the EMACSPATH environment variable, defaulting to the
--- 639,651 ----
  #endif /* not VMS */
  
! /* This is run before init_cmdargs.  */
  
! init_callproc_1 ()
! {
!   char *data_dir = egetenv ("EMACSDATA");
      
!   Vdata_directory
!     = Ffile_name_as_directory (build_string (data_dir ? data_dir
! 					     : PATH_DATA));
  
    /* Check the EMACSPATH environment variable, defaulting to the
***************
*** 655,658 ****
--- 654,695 ----
    Vexec_directory = Ffile_name_as_directory (Fcar (Vexec_path));
    Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
+ }
+ 
+ /* This is run after init_cmdargs, so that Vinvocation_directory is valid.  */
+ 
+ init_callproc ()
+ {
+   char *data_dir = egetenv ("EMACSDATA");
+     
+   register char * sh;
+   Lisp_Object tempdir;
+ 
+   if (initialized && !NILP (Vinvocation_directory))
+     {
+       /* Add to the path the ../lib-src dir of the Emacs executable,
+ 	 if that dir exists.  */
+       Lisp_Object tem, tem1;
+       tem = Fexpand_file_name (build_string ("../lib-src"),
+ 			       Vinvocation_directory);
+       tem1 = Ffile_exists_p (tem);
+       if (!NILP (tem1) && NILP (Fmember (tem, Vexec_path)))
+ 	{
+ 	  Vexec_path = nconc2 (Vexec_path, Fcons (tem, Qnil));
+ 	  Vexec_directory = Ffile_name_as_directory (tem);
+ 
+ 	  /* If we use ../lib-src, maybe use ../etc as well.
+ 	     Do so if ../etc exists and has our DOC-... file in it.  */
+ 	  if (data_dir == 0)
+ 	    {
+ 	      Lisp_Object tem, tem2, tem3;
+ 	      tem = Fexpand_file_name (build_string ("../etc"),
+ 				       Vinvocation_directory);
+ 	      tem2 = Fexpand_file_name (Vdoc_file_name, tem);
+ 	      tem3 = Ffile_exists_p (tem2);
+ 	      if (!NILP (tem3))
+ 		Vdata_directory = Ffile_name_as_directory (tem);
+ 	    }
+ 	}
+     }
  
    tempdir = Fdirectory_file_name (Vexec_directory);
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/cmds.c emacs-19.22/src/cmds.c
*** emacs-19.21/src/cmds.c	Tue Nov 16 07:24:12 1993
--- emacs-19.22/src/cmds.c	Wed Nov 17 06:00:44 1993
***************
*** 390,394 ****
    for (n = 040; n < 0177; n++)
      initial_define_key (global_map, n, "self-insert-command");
!   for (n = 0240; n < 0377; n++)
      initial_define_key (global_map, n, "self-insert-command");
  
--- 390,394 ----
    for (n = 040; n < 0177; n++)
      initial_define_key (global_map, n, "self-insert-command");
!   for (n = 0240; n < 0400; n++)
      initial_define_key (global_map, n, "self-insert-command");
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/dispnew.c emacs-19.22/src/dispnew.c
*** emacs-19.21/src/dispnew.c	Tue Nov 16 07:24:16 1993
--- emacs-19.22/src/dispnew.c	Sat Nov 20 01:42:24 1993
***************
*** 892,896 ****
  #ifdef HAVE_X_WINDOWS
      int dummy;
!     int face = compute_char_face (frame, w, point - 1, -1, -1, &dummy);
  #else
      int face = 0;
--- 892,896 ----
  #ifdef HAVE_X_WINDOWS
      int dummy;
!     int face = compute_char_face (frame, w, point - 1, -1, -1, &dummy, point);
  #else
      int face = 0;
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/editfns.c emacs-19.22/src/editfns.c
*** emacs-19.21/src/editfns.c	Tue Nov 16 07:24:17 1993
--- emacs-19.22/src/editfns.c	Tue Nov 23 04:56:09 1993
***************
*** 891,895 ****
       int start, end;
  {
!   Lisp_Object result;
  
    if (start < GPT && GPT < end)
--- 891,895 ----
       int start, end;
  {
!   Lisp_Object result, tem;
  
    if (start < GPT && GPT < end)
***************
*** 899,904 ****
    bcopy (&FETCH_CHAR (start), XSTRING (result)->data, end - start);
  
!   /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
!   copy_intervals_to_string (result, current_buffer, start, end - start);
  
    return result;
--- 899,908 ----
    bcopy (&FETCH_CHAR (start), XSTRING (result)->data, end - start);
  
!   tem = Fnext_property_change (make_number (start), Qnil, make_number (end));
! 
! #ifdef USE_TEXT_PROPERTIES
!   if (XINT (tem) != end)
!     copy_intervals_to_string (result, current_buffer, start, end - start);
! #endif
  
    return result;
***************
*** 992,996 ****
    /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
    graft_intervals_into_buffer (copy_intervals (bp->intervals, start, len),
! 			       opoint, bp, 0);
  
    return Qnil;
--- 996,1000 ----
    /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
    graft_intervals_into_buffer (copy_intervals (bp->intervals, start, len),
! 			       opoint, len, current_buffer, 0);
  
    return Qnil;
***************
*** 1128,1131 ****
--- 1132,1136 ----
  {
    register int pos, stop, look;
+   int changed = 0;
  
    validate_region (&start, &end);
***************
*** 1137,1141 ****
    look = XINT (fromchar);
  
-   modify_region (current_buffer, pos, stop);
    if (! NILP (noundo))
      {
--- 1142,1145 ----
***************
*** 1150,1161 ****
        if (FETCH_CHAR (pos) == look)
  	{
  	  if (NILP (noundo))
  	    record_change (pos, 1);
  	  FETCH_CHAR (pos) = XINT (tochar);
- 	  if (NILP (noundo))
- 	    signal_after_change (pos, 1, 1);
  	}
        pos++;
      }
  
    return Qnil;
--- 1154,1173 ----
        if (FETCH_CHAR (pos) == look)
  	{
+ 	  if (! changed)
+ 	    {
+ 	      modify_region (current_buffer, XINT (start), stop);
+ 	      changed = 1;
+ 	    }
+ 
  	  if (NILP (noundo))
  	    record_change (pos, 1);
  	  FETCH_CHAR (pos) = XINT (tochar);
  	}
        pos++;
      }
+ 
+   if (changed)
+     signal_after_change (XINT (start),
+ 			 stop - XINT (start), stop - XINT (start));
  
    return Qnil;
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/emacs.c emacs-19.22/src/emacs.c
*** emacs-19.21/src/emacs.c	Tue Nov 16 05:16:17 1993
--- emacs-19.22/src/emacs.c	Thu Nov 25 00:44:44 1993
***************
*** 453,462 ****
        signal (21, fatal_error_signal);
        signal (22, fatal_error_signal);
-       signal (23, fatal_error_signal);
        signal (24, fatal_error_signal);
  #ifdef SIGIO
        signal (SIGAIO, fatal_error_signal);
        signal (SIGPTY, fatal_error_signal);
  #endif
  #ifndef _I386
        signal (SIGIOINT, fatal_error_signal);
--- 453,464 ----
        signal (21, fatal_error_signal);
        signal (22, fatal_error_signal);
        signal (24, fatal_error_signal);
+ #if 0 /* mvn@library.ucla.edu says these are SIGIO on AIX 3.2.4.  */
+       signal (23, fatal_error_signal);
  #ifdef SIGIO
        signal (SIGAIO, fatal_error_signal);
        signal (SIGPTY, fatal_error_signal);
  #endif
+ #endif
  #ifndef _I386
        signal (SIGIOINT, fatal_error_signal);
***************
*** 498,503 ****
    init_buffer ();	/* Init default directory of main buffer */
  
!   init_callproc ();	/* Must precede init_cmdargs and init_sys_modes.  */
    init_cmdargs (argc, argv, skip_args);	/* Must precede init_lread.  */
    init_lread ();
  
--- 500,506 ----
    init_buffer ();	/* Init default directory of main buffer */
  
!   init_callproc_1 ();	/* Must precede init_cmdargs and init_sys_modes.  */
    init_cmdargs (argc, argv, skip_args);	/* Must precede init_lread.  */
+   init_callproc ();	/* Must follow init_cmdargs but not init_sys_modes.  */
    init_lread ();
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/fileio.c emacs-19.22/src/fileio.c
*** emacs-19.21/src/fileio.c	Tue Nov 16 07:24:20 1993
--- emacs-19.22/src/fileio.c	Tue Nov 23 05:08:39 1993
***************
*** 2559,2563 ****
      }
  
!   signal_after_change (point, 0, inserted);
    
    if (inserted > 0)
--- 2559,2564 ----
      }
  
!   if (NILP (visit) && total > 0)
!     signal_after_change (point, 0, inserted);
    
    if (inserted > 0)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/frame.c emacs-19.22/src/frame.c
*** emacs-19.21/src/frame.c	Tue Nov 16 07:24:24 1993
--- emacs-19.22/src/frame.c	Thu Nov 25 02:41:48 1993
***************
*** 89,92 ****
--- 89,94 ----
  extern Lisp_Object Vminibuffer_list;
  extern Lisp_Object get_minibuffer ();
+ extern Lisp_Object Fhandle_switch_frame ();
+ extern Lisp_Object Fredirect_frame_focus ();
  
  DEFUN ("framep", Fframep, Sframep, 1, 1, 0,
***************
*** 838,842 ****
         0, 1, "",
    "Make the frame FRAME visible (assuming it is an X-window).\n\
- Also raises the frame so that nothing obscures it.\n\
  If omitted, FRAME defaults to the currently selected frame.")
    (frame)
--- 840,843 ----
***************
*** 851,855 ****
  #ifdef HAVE_X_WINDOWS
    if (FRAME_X_P (XFRAME (frame)))
!     x_make_frame_visible (XFRAME (frame));
  #endif
  
--- 852,859 ----
  #ifdef HAVE_X_WINDOWS
    if (FRAME_X_P (XFRAME (frame)))
!     {
!       FRAME_SAMPLE_VISIBILITY (XFRAME (frame));
!       x_make_frame_visible (XFRAME (frame));
!     }
  #endif
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/gmalloc.c emacs-19.22/src/gmalloc.c
*** emacs-19.21/src/gmalloc.c	Tue Nov 16 03:09:25 1993
--- emacs-19.22/src/gmalloc.c	Wed Nov 17 08:03:11 1993
***************
*** 1156,1160 ****
  extern __ptr_t __sbrk __P ((int increment));
  #else
! #ifdef HPUX8
  #include <unistd.h>
  #endif
--- 1156,1160 ----
  extern __ptr_t __sbrk __P ((int increment));
  #else
! #if defined (HPUX8) || defined (HAVE_UNISTD_H)
  #include <unistd.h>
  #endif
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/hftctl.c emacs-19.22/src/hftctl.c
*** emacs-19.21/src/hftctl.c	Tue Nov 16 07:24:26 1993
--- emacs-19.22/src/hftctl.c	Sun Nov 21 17:19:12 1993
***************
*** 56,59 ****
--- 56,62 ----
  #include <sys/tty.h>
  /* #include <sys/pty.h> */
+ 
+ #include <config.h>
+ 
  #define REMOTE 0x01
  
***************
*** 63,68 ****
  /*************** LOCAL DEFINES **********************************/
  
- typedef int    (*FUNC)();     /* pointer to a function        */
- 
  #define QDEV   ((HFQPDEVCH<<8)|HFQPDEVCL)
  #define QLOC   ((HFQLOCCH<<8)|HFQLOCCL)
--- 66,69 ----
***************
*** 85,89 ****
  static jmp_buf          hftenv;
  static int              is_ack_vtd;
! static FUNC             sav_alrm;
  static struct hfctlreq  req =
  			{ 0x1b,'[','x',0,0,0,21,HFCTLREQCH,HFCTLREQCL};
--- 86,90 ----
  static jmp_buf          hftenv;
  static int              is_ack_vtd;
! static SIGTYPE             (*sav_alrm) ();
  static struct hfctlreq  req =
  			{ 0x1b,'[','x',0,0,0,21,HFCTLREQCH,HFCTLREQCL};
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/indent.c emacs-19.22/src/indent.c
*** emacs-19.21/src/indent.c	Tue Nov 16 07:24:27 1993
--- emacs-19.22/src/indent.c	Wed Nov 24 18:38:27 1993
***************
*** 334,340 ****
  	col += XVECTOR (DISP_CHAR_VECTOR (dp, c))->size;
        else if (ctl_arrow && (c < 040 || c == 0177))
!         col++;
        else if (c < 040 || c >= 0177)
!         col += 3;
        else
  	col++;
--- 334,340 ----
  	col += XVECTOR (DISP_CHAR_VECTOR (dp, c))->size;
        else if (ctl_arrow && (c < 040 || c == 0177))
!         col += 2;
        else if (c < 040 || c >= 0177)
!         col += 4;
        else
  	col++;
***************
*** 461,483 ****
  	 the next property change */
        while (pos == next_invisible && pos < to)
!       {
! 	XFASTINT (position) = pos;
! 	prop = Fget_text_property (position,
! 				   Qinvisible,
! 				   Fcurrent_buffer ());
!         {
! 	  Lisp_Object end;
! 
! 	  end = Fnext_single_property_change (position,
! 					      Qinvisible,
! 					      Fcurrent_buffer ());
! 	  if (INTEGERP (end))
! 	    next_invisible = XINT (end);
! 	  else
! 	    next_invisible = to;
! 	  if (! NILP (prop))
! 	    pos = next_invisible;
!         }
!       }
        if (pos >= to)
  	break;
--- 461,485 ----
  	 the next property change */
        while (pos == next_invisible && pos < to)
! 	{
! 	  XFASTINT (position) = pos;
! 	  prop = Fget_text_property (position,
! 				     Qinvisible,
! 				     Fcurrent_buffer ());
! 	  {
! 	    Lisp_Object end, limit;
! 
! 	    /* This is just an estimate to give reasonable
! 	       performance; nothing should go wrong if it is too small.  */
! 	    XFASTINT (limit) = pos + 100;
! 	    end = Fnext_single_property_change (position, Qinvisible,
! 						Fcurrent_buffer (), limit);
! 	    if (INTEGERP (end))
! 	      next_invisible = XINT (end);
! 	    else
! 	      next_invisible = to;
! 	    if (! NILP (prop))
! 	      pos = next_invisible;
! 	  }
! 	}
        if (pos >= to)
  	break;
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/insdel.c emacs-19.22/src/insdel.c
*** emacs-19.21/src/insdel.c	Tue Nov 16 07:24:28 1993
--- emacs-19.22/src/insdel.c	Thu Nov 25 01:26:40 1993
***************
*** 367,371 ****
  
    /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
!   graft_intervals_into_buffer (XSTRING (string)->intervals, point,
  			       current_buffer, inherit);
  
--- 367,371 ----
  
    /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
!   graft_intervals_into_buffer (XSTRING (string)->intervals, point, length,
  			       current_buffer, inherit);
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/intervals.c emacs-19.22/src/intervals.c
*** emacs-19.21/src/intervals.c	Tue Nov 16 07:24:29 1993
--- emacs-19.22/src/intervals.c	Thu Nov 25 02:47:00 1993
***************
*** 50,53 ****
--- 50,55 ----
  /* Factor for weight-balancing interval trees.  */
  Lisp_Object interval_balance_threshold;
+ 
+ Lisp_Object merge_properties_sticky ();
  
  /* Utility functions for intervals.  */
***************
*** 1222,1225 ****
--- 1224,1228 ----
  
  /* Insert the intervals of SOURCE into BUFFER at POSITION.
+    LENGTH is the length of the text in SOURCE.
  
     This is used in insdel.c when inserting Lisp_Strings into the
***************
*** 1229,1233 ****
     shared.
  
!    If the inserted text had no intervals associated, this function
     simply returns -- offset_intervals should handle placing the
     text in the correct interval, depending on the sticky bits.
--- 1232,1237 ----
     shared.
  
!    If the inserted text had no intervals associated, and we don't
!    want to inherit the surrounding text's properties, this function
     simply returns -- offset_intervals should handle placing the
     text in the correct interval, depending on the sticky bits.
***************
*** 1254,1260 ****
  
  void
! graft_intervals_into_buffer (source, position, buffer, inherit)
       INTERVAL source;
!      int position;
       struct buffer *buffer;
       int inherit;
--- 1258,1264 ----
  
  void
! graft_intervals_into_buffer (source, position, length, buffer, inherit)
       INTERVAL source;
!      int position, length;
       struct buffer *buffer;
       int inherit;
***************
*** 1267,1271 ****
       interval it was inserted into.  */
    if (NULL_INTERVAL_P (source))
!     return;
  
    if (NULL_INTERVAL_P (tree))
--- 1271,1285 ----
       interval it was inserted into.  */
    if (NULL_INTERVAL_P (source))
!     {
!       Lisp_Object buf;
!       if (!inherit)
! 	{
! 	  XSET (buf, Lisp_Buffer, buffer);
! 	  Fset_text_properties (make_number (position),
! 				make_number (position + length),
! 				Qnil, buf);
! 	}
!       return;
!     }
  
    if (NULL_INTERVAL_P (tree))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/keyboard.c emacs-19.22/src/keyboard.c
*** emacs-19.21/src/keyboard.c	Mon Nov 15 07:28:14 1993
--- emacs-19.22/src/keyboard.c	Fri Nov 26 17:21:55 1993
***************
*** 1940,1943 ****
--- 1940,1968 ----
  #endif
  	}
+ #ifdef HAVE_X11
+       else if (event->kind == delete_window_event)
+ 	{
+ 	  Lisp_Object tail, frame;
+ 	  struct frame *f;
+ 	
+ 	  /* If the user destroys the only frame, Emacs should exit.
+ 	     Count visible frames and iconified frames.  */
+ 	  for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr)
+ 	    {
+ 	      frame = XCONS (tail)->car;
+ 	      if (XTYPE (frame) != Lisp_Frame || EQ (frame, event->frame_or_window))
+ 		continue;
+ 	      f = XFRAME (frame);
+ 	      if (FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f))
+ 		break;
+ 	    }
+ 
+ 	  if (! CONSP (tail))
+ 	    kill (getpid (), SIGHUP);
+ 
+ 	  Fdelete_frame (event->frame_or_window, Qt);
+ 	  kbd_fetch_ptr = event + 1;
+ 	}
+ #endif
        /* Just discard these, by returning nil.
  	 (They shouldn't be found in the buffer,
***************
*** 3069,3072 ****
--- 3094,3099 ----
  	    kill (SIGHUP, 0);
  #endif
+ 	  /* This code is wrong, but at least it gets the right results.
+ 	     Fix it for 19.23.  */
  	  /* Retry the read if it is interrupted.  */
  	  if (nread >= 0
***************
*** 3657,3661 ****
  	XSETINT (key, XINT (key) & ~shift_modifier);
        else
! 	XSETINT (key, DOWNCASE (XINT (key)));
  
        first_binding = nmaps;
--- 3684,3689 ----
  	XSETINT (key, XINT (key) & ~shift_modifier);
        else
! 	XSETINT (key, (DOWNCASE (XINT (key) & 0x3ffff)
! 		       | (XINT (key) & ~0x3ffff)));
  
        first_binding = nmaps;
***************
*** 3788,3791 ****
--- 3816,3821 ----
  #endif
  
+   struct buffer *starting_buffer;
+ 
    int junk;
  
***************
*** 3836,3839 ****
--- 3866,3871 ----
   replay_sequence:
  
+   starting_buffer = current_buffer;
+ 
    /* Build our list of keymaps.
       If we recognize a function key and replace its escape sequence in
***************
*** 3865,3871 ****
        break;
  
!   /* We jump here when a function key substitution has forced us to
!      reprocess the current key sequence.  keybuf[0..mock_input] is the
!      sequence we want to reread.  */
    t = 0;
  
--- 3897,3901 ----
        break;
  
!   /* Start from the beginning in keybuf.  */
    t = 0;
  
***************
*** 3956,3959 ****
--- 3986,4000 ----
  	    }
  	  
+ 	  /* If we have a quit that was typed in another frame, and
+ 	     quit_throw_to_read_char switched buffers,
+ 	     replay to get the right keymap.  */
+ 	  if (EQ (key, quit_char) && current_buffer != starting_buffer)
+ 	    {
+ 	      keybuf[t++] = key;
+ 	      mock_input = t;
+ 	      Vquit_flag = Qnil;
+ 	      goto replay_sequence;
+ 	    }
+ 	    
  	  Vquit_flag = Qnil;
  	}
***************
*** 4991,4994 ****
--- 5032,5039 ----
    if (poll_suppress_count == 0)
      abort ();
+ #endif
+ #ifdef MULTI_FRAME
+   if (XFRAME (internal_last_event_frame) != selected_frame)
+     Fhandle_switch_frame (make_lispy_switch_frame (internal_last_event_frame));
  #endif
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/keymap.c emacs-19.22/src/keymap.c
*** emacs-19.21/src/keymap.c	Tue Nov 16 07:24:30 1993
--- emacs-19.22/src/keymap.c	Sun Nov 21 17:42:39 1993
***************
*** 508,511 ****
--- 508,513 ----
  KEYMAP is a keymap.  KEY is a string or a vector of symbols and characters\n\
  meaning a sequence of keystrokes and events.\n\
+ Non-ASCII characters with codes above 127 (such as ISO Latin-1)\n\
+ can be included if you use a vector.\n\
  DEF is anything that can be a key's definition:\n\
   nil (means key is undefined in this keymap),\n\
***************
*** 809,814 ****
  Normally, `key-binding' ignores bindings for t, which act as default\n\
  bindings, used when nothing else in the keymap applies; this makes it\n\
! useable as a general function for probing keymaps.  However, if the\n\
! third optional argument ACCEPT-DEFAULT is non-nil, `key-binding' will\n\
  recognize the default bindings, just as `read-key-sequence' does.")
    (key, accept_default)
--- 811,816 ----
  Normally, `key-binding' ignores bindings for t, which act as default\n\
  bindings, used when nothing else in the keymap applies; this makes it\n\
! usable as a general function for probing keymaps.  However, if the\n\
! optional second argument ACCEPT-DEFAULT is non-nil, `key-binding' does\n\
  recognize the default bindings, just as `read-key-sequence' does.")
    (key, accept_default)
***************
*** 914,917 ****
--- 916,921 ----
  COMMAND is a symbol naming an interactively-callable function.\n\
  KEY is a key sequence (a string or vector of characters or event types).\n\
+ Non-ASCII characters with codes above 127 (such as ISO Latin-1)\n\
+ can be included if you use a vector.\n\
  Note that if KEY has a local binding in the current buffer\n\
  that local binding will continue to shadow any global binding.")
***************
*** 932,935 ****
--- 936,941 ----
  COMMAND is a symbol naming an interactively-callable function.\n\
  KEY is a key sequence (a string or vector of characters or event types).\n\
+ Non-ASCII characters with codes above 127 (such as ISO Latin-1)\n\
+ can be included if you use a vector.\n\
  The binding goes in the current buffer's local map,\n\
  which is shared with other buffers in the same major mode.")
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/lisp.h emacs-19.22/src/lisp.h
*** emacs-19.21/src/lisp.h	Tue Nov 16 07:25:37 1993
--- emacs-19.22/src/lisp.h	Tue Nov 23 04:56:56 1993
***************
*** 1307,1310 ****
--- 1307,1312 ----
  extern Lisp_Object Qmodification_hooks;
  extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
+ extern Lisp_Object Fnext_property_change ();
+ extern Lisp_Object Fnext_single_property_change ();
  
  /* Nonzero means Emacs has already been initialized.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/lread.c emacs-19.22/src/lread.c
*** emacs-19.21/src/lread.c	Tue Nov 16 07:24:32 1993
--- emacs-19.22/src/lread.c	Thu Nov 25 18:37:41 1993
***************
*** 619,623 ****
--- 619,629 ----
    int count = specpdl_ptr - specpdl;
    struct gcpro gcpro1;
+   struct buffer *b = 0;
  
+   if (BUFFERP (readcharfun))
+     b = XBUFFER (readcharfun);
+   else if (MARKERP (readcharfun))
+     b = XMARKER (readcharfun)->buffer;
+ 
    specbind (Qstandard_input, readcharfun);
    specbind (Qcurrent_load_list, Qnil);
***************
*** 629,632 ****
--- 635,641 ----
    while (1)
      {
+       if (b != 0 && NILP (b->name))
+ 	error ("Reading from killed buffer");
+ 
        instream = stream;
        c = READCHAR;
***************
*** 1611,1615 ****
  }
  
! #define OBARRAY_SIZE 509
  
  void
--- 1620,1624 ----
  }
  
! #define OBARRAY_SIZE 1511
  
  void
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/m/delta.h emacs-19.22/src/m/delta.h
*** emacs-19.21/src/m/delta.h	Tue Nov 16 07:22:13 1993
--- emacs-19.22/src/m/delta.h	Sat Nov 27 14:37:23 1993
***************
*** 136,139 ****
--- 136,159 ----
  #define CLASH_DETECTION
  
+ /* configure fails to find these two.  */
+ 
+ #define HAVE_RANDOM
+ #define HAVE_XSCREENNUMBEROFSCREEN
+ 
+ /* pearce@ll.mit.edu says this is needed.  */
+ 
+ #define BROKEN_FIONREAD
+ 
+ /* No shared X library.  */
+ 
+ #undef LIB_X11_LIB
+ #define LIB_X11_LIB -lX11
+ 
+ /* We have no 'pt' library as usg5-3.h expects.  */
+ #undef LIBX11_SYSTEM
+ #define LIBX11_SYSTEM -lnls -lnsl_s
+ 
+ #undef USG_SHARED_LIBRARIES
+ 
  /* Machine specific stuff */
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/m/hp9000s800.h emacs-19.22/src/m/hp9000s800.h
*** emacs-19.21/src/m/hp9000s800.h	Tue Nov 16 07:22:20 1993
--- emacs-19.22/src/m/hp9000s800.h	Thu Nov 25 06:43:41 1993
***************
*** 175,182 ****
--- 175,186 ----
  
  /* Define the BSTRING functions in terms of the sysV functions. */
+ /* On HPUX 8.05, including types.h can include strings.h
+    which declares these as functions.  Hence the #ifndef.  */
  
+ #ifndef HAVE_BCOPY
  #define bcopy(a,b,s)	memcpy (b,a,s)
  #define bzero(a,s)	memset (a,0,s)
  #define bcmp		memcmp
+ #endif
  
  /* On USG systems these have different names. */
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/m/ibmrt.h emacs-19.22/src/m/ibmrt.h
*** emacs-19.21/src/m/ibmrt.h	Tue Nov 16 07:22:25 1993
--- emacs-19.22/src/m/ibmrt.h	Thu Nov 25 06:48:24 1993
***************
*** 136,142 ****
  #define NO_REMAP
  
- /* rocky@watson.ibm.com says this is needed.  */
- #define HAVE_FTIME
- 
  /* Use the bitmap files that come with Emacs.  */
  #define EMACS_BITMAP_FILES
--- 136,139 ----
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/m/iris4d.h emacs-19.22/src/m/iris4d.h
*** emacs-19.21/src/m/iris4d.h	Tue Nov 16 07:22:26 1993
--- emacs-19.22/src/m/iris4d.h	Thu Nov 25 16:29:48 1993
***************
*** 1,3 ****
! /* machine description file for Iris-4D machines.  Use with s/iris[45]-*.h.
     Copyright (C) 1987 Free Software Foundation, Inc.
  
--- 1,3 ----
! /* machine description file for Iris-4D machines.  Use with s/irix[45]-*.h.
     Copyright (C) 1987 Free Software Foundation, Inc.
  
***************
*** 146,153 ****
     in which crt1.o and crt1.n should be used.  */
  #define HAVE_CRTN
- 
- /* When you *do* link with -lbsd, you *still* get System V getpgrp, unless:
-    you define _BSD_COMPAT, -or- you call `BSDgetpgrp' explicitly.
-    Emacs does the latter.  */
  
  #ifndef USG5_4
--- 146,149 ----
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/m/tek4300.h emacs-19.22/src/m/tek4300.h
*** emacs-19.21/src/m/tek4300.h	Tue Nov 16 07:23:00 1993
--- emacs-19.22/src/m/tek4300.h	Thu Nov 25 06:49:06 1993
***************
*** 104,105 ****
--- 104,108 ----
  
  #define C_DEBUG_SWITCH
+ 
+ /* eirik@elf.ithaca.ny.us said this was needed in 19.22.  */
+ #define NO_MODE_T
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/minibuf.c emacs-19.22/src/minibuf.c
*** emacs-19.21/src/minibuf.c	Tue Nov 16 07:24:35 1993
--- emacs-19.22/src/minibuf.c	Fri Nov 19 12:40:57 1993
***************
*** 260,267 ****
    last_minibuf_string = val;
  
-   /* If Lisp form desired instead of string, parse it. */
-   if (expflag)
-     val = Fread (val);
- 
    /* Add the value to the appropriate history list.  */
    if (XTYPE (Vminibuffer_history_variable) == Lisp_Symbol
--- 260,263 ----
***************
*** 269,281 ****
      {
        /* If the caller wanted to save the value read on a history list,
! 	 then do so if the value is not already the front of the list. */
!       Lisp_Object histval = Fsymbol_value (Vminibuffer_history_variable);
  
        /* The value of the history variable must be a cons or nil.  Other
! 	 values are unacceptable.  We silenty ignore these values. */
        if (NILP (histval)
! 	  || (CONSP (histval) && NILP (Fequal (val, Fcar (histval)))))
! 	Fset (Vminibuffer_history_variable, Fcons (val, histval));
      }
  
    unbind_to (count, Qnil);	/* The appropriate frame will get selected
--- 265,284 ----
      {
        /* If the caller wanted to save the value read on a history list,
! 	 then do so if the value is not already the front of the list.  */
!       Lisp_Object histval;
!       histval = Fsymbol_value (Vminibuffer_history_variable);
  
        /* The value of the history variable must be a cons or nil.  Other
! 	 values are unacceptable.  We silently ignore these values.  */
        if (NILP (histval)
! 	  || (CONSP (histval)
! 	      && NILP (Fequal (last_minibuf_string, Fcar (histval)))))
! 	Fset (Vminibuffer_history_variable,
! 	      Fcons (last_minibuf_string, histval));
      }
+ 
+   /* If Lisp form desired instead of string, parse it. */
+   if (expflag)
+     val = Fread (val);
  
    unbind_to (count, Qnil);	/* The appropriate frame will get selected
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/process.c emacs-19.22/src/process.c
*** emacs-19.21/src/process.c	Tue Nov 16 07:24:39 1993
--- emacs-19.22/src/process.c	Fri Nov 26 20:40:10 1993
***************
*** 436,441 ****
  
    p = XPROCESS (val);
!   XFASTINT (p->infd) = 0;
!   XFASTINT (p->outfd) = 0;
    XFASTINT (p->pid) = 0;
    XFASTINT (p->tick) = 0;
--- 436,441 ----
  
    p = XPROCESS (val);
!   XSET (p->infd, Lisp_Int, -1);
!   XSET (p->outfd, Lisp_Int, -1);
    XFASTINT (p->pid) = 0;
    XFASTINT (p->tick) = 0;
***************
*** 558,562 ****
        XSETINT (XPROCESS (proc)->tick, ++process_tick);
      }
!   else if (XFASTINT (XPROCESS (proc)->infd))
      {
        Fkill_process (proc, Qnil);
--- 558,562 ----
        XSETINT (XPROCESS (proc)->tick, ++process_tick);
      }
!   else if (XINT (XPROCESS (proc)->infd) >= 0)
      {
        Fkill_process (proc, Qnil);
***************
*** 703,709 ****
    CHECK_PROCESS (proc, 0);
    if (EQ (filter, Qt))
!     FD_CLR (XPROCESS (proc)->infd, &input_wait_mask);
    else if (EQ (XPROCESS (proc)->filter, Qt))
!     FD_SET (XPROCESS (proc)->infd, &input_wait_mask);
    XPROCESS (proc)->filter = filter;
    return filter;
--- 703,709 ----
    CHECK_PROCESS (proc, 0);
    if (EQ (filter, Qt))
!     FD_CLR (XINT (XPROCESS (proc)->infd), &input_wait_mask);
    else if (EQ (XPROCESS (proc)->filter, Qt))
!     FD_SET (XINT (XPROCESS (proc)->infd), &input_wait_mask);
    XPROCESS (proc)->filter = filter;
    return filter;
***************
*** 1167,1172 ****
       As a result, child_setup will close Emacs's side of the pipes.  */
    chan_process[inchannel] = process;
!   XFASTINT (XPROCESS (process)->infd) = inchannel;
!   XFASTINT (XPROCESS (process)->outfd) = outchannel;
    /* Record the tty descriptor used in the subprocess.  */
    if (forkin < 0)
--- 1167,1172 ----
       As a result, child_setup will close Emacs's side of the pipes.  */
    chan_process[inchannel] = process;
!   XSET (XPROCESS (process)->infd, Lisp_Int, inchannel);
!   XSET (XPROCESS (process)->outfd, Lisp_Int, outchannel);
    /* Record the tty descriptor used in the subprocess.  */
    if (forkin < 0)
***************
*** 1232,1236 ****
  #endif
  #else /* not HAVE_SETSID */
! #if defined (USG) && !defined (IRIX)
  	/* It's very important to call setpgrp() here and no time
  	   afterwards.  Otherwise, we lose our controlling tty which
--- 1232,1236 ----
  #endif
  #else /* not HAVE_SETSID */
! #ifdef USG
  	/* It's very important to call setpgrp() here and no time
  	   afterwards.  Otherwise, we lose our controlling tty which
***************
*** 1490,1495 ****
    XPROCESS (proc)->command = Qnil;
    XPROCESS (proc)->pid = Qnil;
!   XFASTINT (XPROCESS (proc)->infd) = s;
!   XFASTINT (XPROCESS (proc)->outfd) = outch;
    XPROCESS (proc)->status = Qrun;
    FD_SET (inch, &input_wait_mask);
--- 1490,1495 ----
    XPROCESS (proc)->command = Qnil;
    XPROCESS (proc)->pid = Qnil;
!   XSET (XPROCESS (proc)->infd, Lisp_Int, s);
!   XSET (XPROCESS (proc)->outfd, Lisp_Int, outch);
    XPROCESS (proc)->status = Qrun;
    FD_SET (inch, &input_wait_mask);
***************
*** 1506,1513 ****
    register struct Lisp_Process *p = XPROCESS (proc);
  
!   inchannel = XFASTINT (p->infd);
!   outchannel = XFASTINT (p->outfd);
  
!   if (inchannel)
      {
        /* Beware SIGCHLD hereabouts. */
--- 1506,1513 ----
    register struct Lisp_Process *p = XPROCESS (proc);
  
!   inchannel = XINT (p->infd);
!   outchannel = XINT (p->outfd);
  
!   if (inchannel >= 0)
      {
        /* Beware SIGCHLD hereabouts. */
***************
*** 1523,1532 ****
  #else
        close (inchannel);
!       if (outchannel && outchannel != inchannel)
   	close (outchannel);
  #endif
  
!       XFASTINT (p->infd) = 0;
!       XFASTINT (p->outfd) = 0;
        chan_process[inchannel] = Qnil;
        FD_CLR (inchannel, &input_wait_mask);
--- 1523,1536 ----
  #else
        close (inchannel);
!       if (outchannel >= 0 && outchannel != inchannel)
   	close (outchannel);
+ #ifdef SYSV4_PTYS
+       if (!NILP (p->subtty))
+         close (XINT (p->subtty));
  #endif
+ #endif
  
!       XSET (p->infd, Lisp_Int, -1);
!       XSET (p->outfd, Lisp_Int, -1);
        chan_process[inchannel] = Qnil;
        FD_CLR (inchannel, &input_wait_mask);
***************
*** 1547,1555 ****
        if (!NILP (process))
  	{
! 	  int in = XFASTINT (XPROCESS (process)->infd);
! 	  int out = XFASTINT (XPROCESS (process)->outfd);
! 	  if (in)
  	    close (in);
! 	  if (out && in != out)
  	    close (out);
  	}
--- 1551,1559 ----
        if (!NILP (process))
  	{
! 	  int in = XINT (XPROCESS (process)->infd);
! 	  int out = XINT (XPROCESS (process)->outfd);
! 	  if (in >= 0)
  	    close (in);
! 	  if (out >= 0 && in != out)
  	    close (out);
  	}
***************
*** 1673,1677 ****
    EMACS_TIME timeout, end_time, garbage;
    SELECT_TYPE Atemp;
!   int wait_channel = 0;
    struct Lisp_Process *wait_proc = 0;
    int got_some_input = 0;
--- 1677,1681 ----
    EMACS_TIME timeout, end_time, garbage;
    SELECT_TYPE Atemp;
!   int wait_channel = -1;
    struct Lisp_Process *wait_proc = 0;
    int got_some_input = 0;
***************
*** 1685,1689 ****
      {
        wait_proc = XPROCESS (read_kbd);
!       wait_channel = XFASTINT (wait_proc->infd);
        XFASTINT (read_kbd) = 0;
      }
--- 1689,1693 ----
      {
        wait_proc = XPROCESS (read_kbd);
!       wait_channel = XINT (wait_proc->infd);
        XFASTINT (read_kbd) = 0;
      }
***************
*** 1795,1799 ****
  
        if (XINT (read_kbd) && detect_input_pending ())
! 	nfds = 0;
        else
  	nfds = select (MAXDESC, &Available, 0, 0, &timeout);
--- 1799,1806 ----
  
        if (XINT (read_kbd) && detect_input_pending ())
! 	{
! 	  nfds = 0;
! 	  FD_ZERO (&Available);
! 	}
        else
  	nfds = select (MAXDESC, &Available, 0, 0, &timeout);
***************
*** 1896,1901 ****
  	do_pending_window_change ();
  
!       /* Check for data from a process or a command channel */
!       for (channel = FIRST_PROC_DESC; channel < MAXDESC; channel++)
  	{
  	  if (FD_ISSET (channel, &Available))
--- 1903,1911 ----
  	do_pending_window_change ();
  
!       /* Check for data from a process.  */
!       /* Really FIRST_PROC_DESC should be 0 on Unix,
! 	 but this is safer in the short run.  */
!       for (channel = keyboard_descriptor == 0 ? FIRST_PROC_DESC : 0;
! 	   channel < MAXDESC; channel++)
  	{
  	  if (FD_ISSET (channel, &Available))
***************
*** 1908,1912 ****
  	      if (wait_channel == channel)
  		{
! 		  wait_channel = 0;
  		  time_limit = -1;
  		  got_some_input = 1;
--- 1918,1922 ----
  	      if (wait_channel == channel)
  		{
! 		  wait_channel = -1;
  		  time_limit = -1;
  		  got_some_input = 1;
***************
*** 2206,2210 ****
  	  this = 500;
  	old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
! 	rv = write (XFASTINT (XPROCESS (proc)->outfd), buf, this);
  	signal (SIGPIPE, old_sigpipe);
  	if (rv < 0)
--- 2216,2220 ----
  	  this = 500;
  	old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
! 	rv = write (XINT (XPROCESS (proc)->outfd), buf, this);
  	signal (SIGPIPE, old_sigpipe);
  	if (rv < 0)
***************
*** 2332,2336 ****
      error ("Process %s is not a subprocess",
  	   XSTRING (p->name)->data);
!   if (!XFASTINT (p->infd))
      error ("Process %s is not active",
  	   XSTRING (p->name)->data);
--- 2342,2346 ----
      error ("Process %s is not a subprocess",
  	   XSTRING (p->name)->data);
!   if (XINT (p->infd) < 0)
      error ("Process %s is not active",
  	   XSTRING (p->name)->data);
***************
*** 2354,2369 ****
  	{
  	case SIGINT:
! 	  tcgetattr (XFASTINT (p->infd), &t);
  	  send_process (proc, &t.c_cc[VINTR], 1);
  	  return;
  
  	case SIGQUIT:
! 	  tcgetattr (XFASTINT (p->infd), &t);
    	  send_process (proc, &t.c_cc[VQUIT], 1);
    	  return;
  
    	case SIGTSTP:
! 	  tcgetattr (XFASTINT (p->infd), &t);
! #ifdef VSWTCH
    	  send_process (proc, &t.c_cc[VSWTCH], 1);
  #else
--- 2364,2379 ----
  	{
  	case SIGINT:
! 	  tcgetattr (XINT (p->infd), &t);
  	  send_process (proc, &t.c_cc[VINTR], 1);
  	  return;
  
  	case SIGQUIT:
! 	  tcgetattr (XINT (p->infd), &t);
    	  send_process (proc, &t.c_cc[VQUIT], 1);
    	  return;
  
    	case SIGTSTP:
! 	  tcgetattr (XINT (p->infd), &t);
! #if defined (VSWTCH) && !defined (IRIX5)
    	  send_process (proc, &t.c_cc[VSWTCH], 1);
  #else
***************
*** 2385,2398 ****
  	{
  	case SIGINT:
! 	  ioctl (XFASTINT (p->infd), TIOCGETC, &c);
  	  send_process (proc, &c.t_intrc, 1);
  	  return;
  	case SIGQUIT:
! 	  ioctl (XFASTINT (p->infd), TIOCGETC, &c);
  	  send_process (proc, &c.t_quitc, 1);
  	  return;
  #ifdef SIGTSTP
  	case SIGTSTP:
! 	  ioctl (XFASTINT (p->infd), TIOCGLTC, &lc);
  	  send_process (proc, &lc.t_suspc, 1);
  	  return;
--- 2395,2408 ----
  	{
  	case SIGINT:
! 	  ioctl (XINT (p->infd), TIOCGETC, &c);
  	  send_process (proc, &c.t_intrc, 1);
  	  return;
  	case SIGQUIT:
! 	  ioctl (XINT (p->infd), TIOCGETC, &c);
  	  send_process (proc, &c.t_quitc, 1);
  	  return;
  #ifdef SIGTSTP
  	case SIGTSTP:
! 	  ioctl (XINT (p->infd), TIOCGLTC, &lc);
  	  send_process (proc, &lc.t_suspc, 1);
  	  return;
***************
*** 2409,2422 ****
  	{
  	case SIGINT:
! 	  ioctl (XFASTINT (p->infd), TCGETA, &t);
  	  send_process (proc, &t.c_cc[VINTR], 1);
  	  return;
  	case SIGQUIT:
! 	  ioctl (XFASTINT (p->infd), TCGETA, &t);
  	  send_process (proc, &t.c_cc[VQUIT], 1);
  	  return;
  #ifdef SIGTSTP
  	case SIGTSTP:
! 	  ioctl (XFASTINT (p->infd), TCGETA, &t);
  	  send_process (proc, &t.c_cc[VSWTCH], 1);
  	  return;
--- 2419,2432 ----
  	{
  	case SIGINT:
! 	  ioctl (XINT (p->infd), TCGETA, &t);
  	  send_process (proc, &t.c_cc[VINTR], 1);
  	  return;
  	case SIGQUIT:
! 	  ioctl (XINT (p->infd), TCGETA, &t);
  	  send_process (proc, &t.c_cc[VQUIT], 1);
  	  return;
  #ifdef SIGTSTP
  	case SIGTSTP:
! 	  ioctl (XINT (p->infd), TCGETA, &t);
  	  send_process (proc, &t.c_cc[VSWTCH], 1);
  	  return;
***************
*** 2446,2450 ****
  	  err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
  	else
! 	  err = ioctl (XFASTINT (p->infd), TIOCGPGRP, &gid);
  
  #ifdef pfa
--- 2456,2460 ----
  	  err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
  	else
! 	  err = ioctl (XINT (p->infd), TIOCGPGRP, &gid);
  
  #ifdef pfa
***************
*** 2493,2497 ****
        whoosh:
  #endif
!       flush_pending_output (XFASTINT (p->infd));
        break;
      }
--- 2503,2507 ----
        whoosh:
  #endif
!       flush_pending_output (XINT (p->infd));
        break;
      }
***************
*** 2509,2513 ****
  #ifdef TIOCSIGSEND
    if (!NILP (current_group))
!     ioctl (XFASTINT (p->infd), TIOCSIGSEND, signo);
    else
      {
--- 2519,2523 ----
  #ifdef TIOCSIGSEND
    if (!NILP (current_group))
!     ioctl (XINT (p->infd), TIOCSIGSEND, signo);
    else
      {
***************
*** 2619,2623 ****
    {
      char buf[1];
!     write (XFASTINT (XPROCESS (proc)->outfd), buf, 0);
    }
  #else /* did not do TOICREMOTE */
--- 2629,2633 ----
    {
      char buf[1];
!     write (XINT (XPROCESS (proc)->outfd), buf, 0);
    }
  #else /* did not do TOICREMOTE */
***************
*** 2629,2634 ****
    else
      {
!       close (XPROCESS (proc)->outfd);
!       XFASTINT (XPROCESS (proc)->outfd) = open (NULL_DEVICE, O_WRONLY);
      }
  #endif /* VMS */
--- 2639,2644 ----
    else
      {
!       close (XINT (XPROCESS (proc)->outfd));
!       XSET (XPROCESS (proc)->outfd, Lisp_Int, open (NULL_DEVICE, O_WRONLY));
      }
  #endif /* VMS */
***************
*** 2654,2658 ****
  	  if (NETCONN_P (proc))
  	    deactivate_process (proc);
! 	  else if (XFASTINT (XPROCESS (proc)->infd))
  	    process_send_signal (proc, SIGHUP, Qnil, 1);
  	}
--- 2664,2668 ----
  	  if (NETCONN_P (proc))
  	    deactivate_process (proc);
! 	  else if (XINT (XPROCESS (proc)->infd) >= 0)
  	    process_send_signal (proc, SIGHUP, Qnil, 1);
  	}
***************
*** 2769,2774 ****
  	  /* If process has terminated, stop waiting for its output.  */
  	  if (WIFSIGNALED (w) || WIFEXITED (w))
! 	    if (XFASTINT (p->infd))
! 	      FD_CLR (XFASTINT (p->infd), &input_wait_mask);
  
  	  /* Tell wait_reading_process_input that it needs to wake up and
--- 2779,2784 ----
  	  /* If process has terminated, stop waiting for its output.  */
  	  if (WIFSIGNALED (w) || WIFEXITED (w))
! 	    if (XINT (p->infd) >= 0)
! 	      FD_CLR (XINT (p->infd), &input_wait_mask);
  
  	  /* Tell wait_reading_process_input that it needs to wake up and
***************
*** 2876,2882 ****
  
  	  /* If process is still active, read any output that remains.  */
! 	  if (XFASTINT (p->infd))
  	    while (! EQ (p->filter, Qt)
! 		   && read_process_output (proc, XFASTINT (p->infd)) > 0);
  
  	  buffer = p->buffer;
--- 2886,2892 ----
  
  	  /* If process is still active, read any output that remains.  */
! 	  if (XINT (p->infd) >= 0)
  	    while (! EQ (p->filter, Qt)
! 		   && read_process_output (proc, XINT (p->infd)) > 0);
  
  	  buffer = p->buffer;
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/ralloc.c emacs-19.22/src/ralloc.c
*** emacs-19.21/src/ralloc.c	Tue Nov 16 07:24:40 1993
--- emacs-19.22/src/ralloc.c	Thu Nov 18 04:23:35 1993
***************
*** 507,513 ****
--- 507,525 ----
  
    page_break_value = (POINTER) ROUNDUP (break_value);
+ 
+   /* The extra call to real_morecore guarantees that the end of the
+      address space is a multiple of page_size, even if page_size is
+      not really the page size of the system running the binary in
+      which page_size is stored.  This allows a binary to be built on a
+      system with one page size and run on a system with a smaller page
+      size. */
+   (*real_morecore) (page_break_value - break_value);
+ 
    /* Clear the rest of the last page; this memory is in our address space
       even though it is after the sbrk value.  */
+   /* Doubly true, with the additional call that explicitly adds the
+      rest of that page to the address space.  */
    bzero (break_value, (page_break_value - break_value));
+   virtual_break_value = break_value = page_break_value;
    use_relocatable_buffers = 1;
  }
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/regex.c emacs-19.22/src/regex.c
*** emacs-19.21/src/regex.c	Tue Nov 16 07:24:42 1993
--- emacs-19.22/src/regex.c	Thu Nov 25 02:43:49 1993
***************
*** 244,247 ****
--- 244,249 ----
  #define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
  
+ #undef MAX
+ #undef MIN
  #define MAX(a, b) ((a) > (b) ? (a) : (b))
  #define MIN(a, b) ((a) < (b) ? (a) : (b))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/s/dgux.h emacs-19.22/src/s/dgux.h
*** emacs-19.21/src/s/dgux.h	Tue Nov 16 07:23:19 1993
--- emacs-19.22/src/s/dgux.h	Sun Nov 21 04:04:15 1993
***************
*** 344,347 ****
--- 344,387 ----
  #else /* not COFF */
  
+ /* Pseudo-terminal support under SVR4 only loops to deal with errors. */
+ 
+ #define PTY_ITERATION for (i = 0; i < 1; i++)
+ 
+ /* This sets the name of the master side of the PTY. */
+ 
+ #define PTY_NAME_SPRINTF strcpy (pty_name, "/dev/ptmx");
+ 
+ /* This sets the name of the slave side of the PTY.  On SysVr4,
+    grantpt(3) forks a subprocess, so keep sigchld_handler() from
+    intercepting that death.  If any child but grantpt's should die
+    within, it should be caught after sigrelse(2). */
+ 
+ #define PTY_TTY_NAME_SPRINTF			\
+   {						\
+     char *ptsname(), *ptyname;			\
+ 						\
+     sigblock(sigmask(SIGCLD));				\
+     if (grantpt(fd) == -1)			\
+       fatal("could not grant slave pty");	\
+     sigunblock(sigmask(SIGCLD));				\
+     if (unlockpt(fd) == -1)			\
+       fatal("could not unlock slave pty");	\
+     if (!(ptyname = ptsname(fd)))		\
+       fatal ("could not enable slave pty");	\
+     strncpy(pty_name, ptyname, sizeof(pty_name)); \
+     pty_name[sizeof(pty_name) - 1] = 0;		\
+   }
+ 
+ /* Push various streams modules onto a PTY channel. */
+ 
+ #define SETUP_SLAVE_PTY \
+   if (ioctl (xforkin, I_PUSH, "ptem") == -1)	\
+     fatal ("ioctl I_PUSH ptem", errno);		\
+   if (ioctl (xforkin, I_PUSH, "ldterm") == -1)	\
+     fatal ("ioctl I_PUSH ldterm", errno);	\
+   if (ioctl (xforkin, I_PUSH, "ttcompat") == -1) \
+     fatal ("ioctl I_PUSH ttcompat", errno);
+ 
+ 
  #define C_COMPILER \
    TARGET_BINARY_INTERFACE=m88kdguxelf gcc -traditional
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/s/irix3-3.h emacs-19.22/src/s/irix3-3.h
*** emacs-19.21/src/s/irix3-3.h	Tue Nov 16 07:23:25 1993
--- emacs-19.22/src/s/irix3-3.h	Thu Nov 25 16:40:00 1993
***************
*** 184,185 ****
--- 184,189 ----
  
  #define NEED_SIOCTL
+ 
+ /* This affects child_setup.  */
+ 
+ #define SETPGRP_RELEASES_CTTY
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/s/irix5-0.h emacs-19.22/src/s/irix5-0.h
*** emacs-19.21/src/s/irix5-0.h	Tue Nov 16 07:23:28 1993
--- emacs-19.22/src/s/irix5-0.h	Fri Nov 26 14:51:25 1993
***************
*** 1,4 ****
--- 1,8 ----
  #include "usg5-4.h"
  
+ #define IRIX5
+ 
+ #define SETPGRP_RELEASES_CTTY
+ 
  #ifdef LIBS_SYSTEM
  #undef LIBS_SYSTEM
***************
*** 12,16 ****
  #undef SYSTEM_TYPE
  #endif
! #define SYSTEM_TYPE "silicon-graphics-unix"
  
  #ifdef SETUP_SLAVE_PTY
--- 16,20 ----
  #undef SYSTEM_TYPE
  #endif
! #define SYSTEM_TYPE "irix"
  
  #ifdef SETUP_SLAVE_PTY
***************
*** 18,21 ****
--- 22,28 ----
  #endif
  
+ /* thomas@mathematik.uni-bremen.de says this is needed.  */
+ /* Make process_send_signal work by "typing" a signal character on the pty.  */
+ #define SIGNALS_VIA_CHARACTERS
  
  /* Define HAVE_ALLOCA to say that the system provides a properly
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/s/linux.h emacs-19.22/src/s/linux.h
*** emacs-19.21/src/s/linux.h	Tue Nov 16 07:23:26 1993
--- emacs-19.22/src/s/linux.h	Fri Nov 19 13:25:28 1993
***************
*** 177,184 ****
  /* This is needed for sysdep.c */
  
- #define HAVE_UNISTD_H	      /* for getpagesize.h */
  #define NO_SIOCTL_H           /* don't have sioctl.h */
  
  #if 0 /* autoconf should take care of this.  */
  #define HAVE_RANDOM           /* is builtin */
  #endif
--- 177,184 ----
  /* This is needed for sysdep.c */
  
  #define NO_SIOCTL_H           /* don't have sioctl.h */
  
  #if 0 /* autoconf should take care of this.  */
+ #define HAVE_UNISTD_H	      /* for getpagesize.h */
  #define HAVE_RANDOM           /* is builtin */
  #endif
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/s/sco4.h emacs-19.22/src/s/sco4.h
*** emacs-19.21/src/s/sco4.h	Mon Nov 15 07:27:46 1993
--- emacs-19.22/src/s/sco4.h	Thu Nov 25 03:17:06 1993
***************
*** 70,73 ****
--- 70,78 ----
  #endif
  
+ /* This is safe since we already assumed HAVE_SOCKET
+    if using X windows.  */
+ #undef LIBX11_SYSTEM
+ #define LIBX11_SYSTEM -lpt -lnls -lnsl_s -lc_s -lsocket
+ 
  #ifdef HAVE_INET_SOCKETS /* This comes from autoconf.  */
  #define HAVE_SOCKETS
***************
*** 75,79 ****
  
  #ifdef HAVE_SOCKETS
! #define LIBS_SYSTEM -lsocket
  
  /* SCO has gettimeofday in socket library */
--- 80,84 ----
  
  #ifdef HAVE_SOCKETS
! #define LIBS_SYSTEM -lsocket -lPW
  
  /* SCO has gettimeofday in socket library */
***************
*** 84,87 ****
--- 89,103 ----
  #define HAVE_GETTIMEOFDAY
  #endif
+ #endif
+ 
+ /* This enables configure to tell that we have alloca.  */
+ #ifndef LIBS_SYSTEM
+ #define LIBS_SYSTEM -lPW
+ #endif
+ 
+ #ifdef HAVE_X11R5
+ /* configure can't get this right linking fails unless -lsocket is used.  */
+ #undef HAVE_XSCREENNUMBEROFSCREEN
+ #define HAVE_XSCREENNUMBEROFSCREEN
  #endif
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/s/sunos4-1-3.h emacs-19.22/src/s/sunos4-1-3.h
*** emacs-19.21/src/s/sunos4-1-3.h	Tue Nov 16 07:23:37 1993
--- emacs-19.22/src/s/sunos4-1-3.h	Thu Nov 25 15:59:07 1993
***************
*** 8,11 ****
--- 8,14 ----
  #endif
  
+ #if 0 /* This causes failure in process_send_signal (tcgetattr loses)
+ 	 and may also cause hanging at Emacs startup when parent
+ 	 is not a job control shell.  */
  /* murray@chemical-eng.edinburgh.ac.uk says this works, and avoids
     the problem of spurious ^M in subprocess output.  */
***************
*** 13,14 ****
--- 16,23 ----
  /* This enables some #undefs in systty.h.  */
  #define BSD_TERMIOS
+ #endif
+ 
+ /* barrie@calvin.demon.co.uk says memmove is missing.  */
+ #ifndef SYSTEM_MALLOC
+ #define MEMMOVE_MISSING
+ #endif
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/sysdep.c emacs-19.22/src/sysdep.c
*** emacs-19.21/src/sysdep.c	Tue Nov 16 07:24:48 1993
--- emacs-19.22/src/sysdep.c	Fri Nov 26 05:39:10 1993
***************
*** 236,240 ****
    ioctl (input_fd, TIOCSTI, &c);
  #else /* no TIOCSTI */
!   error ("Cannot stuff terminal input characters in this version of Unix.");
  #endif /* no TIOCSTI */
  }
--- 236,240 ----
    ioctl (input_fd, TIOCSTI, &c);
  #else /* no TIOCSTI */
!   error ("Cannot stuff terminal input characters in this version of Unix");
  #endif /* no TIOCSTI */
  }
***************
*** 258,262 ****
        struct termios sg;
  
!       sg.c_cflag = (sg.c_cflag & ~CBAUD) | B9600;
        tcgetattr (input_fd, &sg);
        ospeed = cfgetospeed (&sg);
--- 258,262 ----
        struct termios sg;
  
!       sg.c_cflag = B9600;
        tcgetattr (input_fd, &sg);
        ospeed = cfgetospeed (&sg);
***************
*** 265,269 ****
        struct termio sg;
  
!       sg.c_cflag = (sg.c_cflag & ~CBAUD) | B9600;
  #ifdef HAVE_TCATTR
        tcgetattr (input_fd, &sg);
--- 265,269 ----
        struct termio sg;
  
!       sg.c_cflag = B9600;
  #ifdef HAVE_TCATTR
        tcgetattr (input_fd, &sg);
***************
*** 2094,2098 ****
  read_input_waiting ()
  {
-   char buf[256 * BUFFER_SIZE_FACTOR];
    struct input_event e;
    int nread, i;
--- 2094,2097 ----
***************
*** 2101,2136 ****
    if (read_socket_hook)
      {
        read_alarm_should_throw = 0;
        if (! setjmp (read_alarm_throw))
! 	nread = (*read_socket_hook) (0, buf, 256 * BUFFER_SIZE_FACTOR, 1, 0);
        else
  	nread = -1;
      }
    else
!     nread = read (fileno (stdin), buf, 1);
  
!   /* Scan the chars for C-g and store them in kbd_buffer.  */
!   e.kind = ascii_keystroke;
!   e.frame_or_window = selected_frame;
!   e.modifiers = 0;
!   for (i = 0; i < nread; i++)
!     {
!       /* Convert chars > 0177 to meta events if desired.
! 	 We do this under the same conditions that read_avail_input does.  */
!       if (read_socket_hook == 0)
  	{
! 	  /* If the user says she has a meta key, then believe her. */
! 	  if (meta_key == 1 && (buf[i] & 0x80))
! 	    e.modifiers = meta_modifier;
! 	  if (meta_key != 2)
! 	    buf[i] &= ~0x80;
! 	}
  
!       XSET (e.code, Lisp_Int, buf[i]);
!       kbd_buffer_store_event (&e);
!       /* Don't look at input that follows a C-g too closely.
! 	 This reduces lossage due to autorepeat on C-g.  */
!       if (buf[i] == quit_char)
! 	break;
      }
  }
--- 2100,2151 ----
    if (read_socket_hook)
      {
+       struct input_event buf[256];
+ 
        read_alarm_should_throw = 0;
        if (! setjmp (read_alarm_throw))
! 	nread = (*read_socket_hook) (0, buf, 256, 1, 0);
        else
  	nread = -1;
+ 
+       /* Scan the chars for C-g and store them in kbd_buffer.  */
+       for (i = 0; i < nread; i++)
+ 	{
+ 	  kbd_buffer_store_event (&buf[i]);
+ 	  /* Don't look at input that follows a C-g too closely.
+ 	     This reduces lossage due to autorepeat on C-g.  */
+ 	  if (buf[i].kind == ascii_keystroke
+ 	      && XINT(buf[i].code) == quit_char)
+ 	    break;
+ 	}
      }
    else
!     {
!       char buf[3];
!       nread = read (fileno (stdin), buf, 1);
  
!       /* Scan the chars for C-g and store them in kbd_buffer.  */
!       e.kind = ascii_keystroke;
!       e.frame_or_window = selected_frame;
!       e.modifiers = 0;
!       for (i = 0; i < nread; i++)
  	{
! 	  /* Convert chars > 0177 to meta events if desired.
! 	     We do this under the same conditions that read_avail_input does.  */
! 	  if (read_socket_hook == 0)
! 	    {
! 	      /* If the user says she has a meta key, then believe her. */
! 	      if (meta_key == 1 && (buf[i] & 0x80))
! 		e.modifiers = meta_modifier;
! 	      if (meta_key != 2)
! 		buf[i] &= ~0x80;
! 	    }
  
! 	  XSET (e.code, Lisp_Int, buf[i]);
! 	  kbd_buffer_store_event (&e);
! 	  /* Don't look at input that follows a C-g too closely.
! 	     This reduces lossage due to autorepeat on C-g.  */
! 	  if (buf[i] == quit_char)
! 	    break;
! 	}
      }
  }
***************
*** 2735,2738 ****
--- 2750,2755 ----
    BLOCK_INPUT;			/* getcwd uses malloc */
    spath = npath = getcwd ((char *) 0, MAXPATHLEN);
+   if (spath == 0)
+     return spath;
    /* On Altos 3068, getcwd can return @hostname/dir, so discard
       up to first slash.  Should be harmless on other systems.  */
***************
*** 2973,2983 ****
  #include <dirent.h>
  
! #ifndef HAVE_CLOSEDIR
  int
  closedir (dirp)
       register DIR *dirp;              /* stream from opendir */
  {
!   sys_close (dirp->dd_fd);
  
    /* Some systems (like Solaris) allocate the buffer and the DIR all
       in one block.  Why in the world are we freeing this ourselves
--- 2990,3003 ----
  #include <dirent.h>
  
! #if defined(BROKEN_CLOSEDIR) || !defined(HAVE_CLOSEDIR)
! 
  int
  closedir (dirp)
       register DIR *dirp;              /* stream from opendir */
  {
!   int rtnval;
  
+   rtnval = sys_close (dirp->dd_fd);
+ 
    /* Some systems (like Solaris) allocate the buffer and the DIR all
       in one block.  Why in the world are we freeing this ourselves
***************
*** 2987,2992 ****
  #endif
    xfree ((char *) dirp);
  }
! #endif /* not HAVE_CLOSEDIR */
  #endif /* SYSV_SYSTEM_DIR */
  
--- 3007,3014 ----
  #endif
    xfree ((char *) dirp);
+ 
+   return rtnval;
  }
! #endif /* BROKEN_CLOSEDIR or not HAVE_CLOSEDIR */
  #endif /* SYSV_SYSTEM_DIR */
  
***************
*** 3614,3618 ****
       char *pathname;
  {
!   char *ptr;
    extern char *getcwd ();
  
--- 3636,3640 ----
       char *pathname;
  {
!   char *ptr, *val;
    extern char *getcwd ();
  
***************
*** 3620,3624 ****
  
    ptr = xmalloc (MAXPATHLEN);
!   getcwd (ptr, MAXPATHLEN);
    strcpy (pathname, ptr);
    xfree (ptr);
--- 3642,3651 ----
  
    ptr = xmalloc (MAXPATHLEN);
!   val = getcwd (ptr, MAXPATHLEN);
!   if (val == 0)
!     {
!       xfree (ptr);
!       return val;
!     }
    strcpy (pathname, ptr);
    xfree (ptr);
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/systty.h emacs-19.22/src/systty.h
*** emacs-19.21/src/systty.h	Tue Nov 16 07:25:51 1993
--- emacs-19.22/src/systty.h	Sun Nov 21 23:59:17 1993
***************
*** 274,278 ****
  #ifdef EMACS_HAVE_TTY_PGRP
  
! #ifdef HAVE_TERMIOS
  
  #define EMACS_GET_TTY_PGRP(fd, pgid) (*(pgid) = tcgetpgrp ((fd)))
--- 274,278 ----
  #ifdef EMACS_HAVE_TTY_PGRP
  
! #if defined (HAVE_TERMIOS) && ! defined (BSD_TERMIOS)
  
  #define EMACS_GET_TTY_PGRP(fd, pgid) (*(pgid) = tcgetpgrp ((fd)))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/termhooks.h emacs-19.22/src/termhooks.h
*** emacs-19.21/src/termhooks.h	Tue Nov 16 07:25:55 1993
--- emacs-19.22/src/termhooks.h	Sun Nov 21 21:58:48 1993
***************
*** 242,246 ****
    selection_request_event,	/* Another X client wants a selection from us.
  				   See `struct selection_event'.  */
!   selection_clear_event		/* Another X client cleared our selection.  */
  };
  
--- 242,247 ----
    selection_request_event,	/* Another X client wants a selection from us.
  				   See `struct selection_event'.  */
!   selection_clear_event,	/* Another X client cleared our selection.  */
!   delete_window_event		/* An X client said "delete this window".  */
  };
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/textprop.c emacs-19.22/src/textprop.c
*** emacs-19.21/src/textprop.c	Tue Nov 16 07:24:51 1993
--- emacs-19.22/src/textprop.c	Mon Nov 22 14:46:52 1993
***************
*** 521,525 ****
  
  DEFUN ("next-property-change", Fnext_property_change,
!        Snext_property_change, 1, 2, 0,
    "Return the position of next property change.\n\
  Scans characters forward from POS in OBJECT till it finds\n\
--- 521,525 ----
  
  DEFUN ("next-property-change", Fnext_property_change,
!        Snext_property_change, 1, 3, 0,
    "Return the position of next property change.\n\
  Scans characters forward from POS in OBJECT till it finds\n\
***************
*** 527,533 ****
  The optional second argument OBJECT is the string or buffer to scan.\n\
  Return nil if the property is constant all the way to the end of OBJECT.\n\
! If the value is non-nil, it is a position greater than POS, never equal.")
!   (pos, object)
!      Lisp_Object pos, object;
  {
    register INTERVAL i, next;
--- 527,535 ----
  The optional second argument OBJECT is the string or buffer to scan.\n\
  Return nil if the property is constant all the way to the end of OBJECT.\n\
! If the value is non-nil, it is a position greater than POS, never equal.\n\n\
! If the optional third argument LIMIT is non-nil, don't search\n\
! past position LIMIT; return LIMIT if nothing is found before LIMIT.")
!   (pos, object, limit)
!      Lisp_Object pos, object, limit;
  {
    register INTERVAL i, next;
***************
*** 538,549 ****
    i = validate_interval_range (object, &pos, &pos, soft);
    if (NULL_INTERVAL_P (i))
!     return Qnil;
  
    next = next_interval (i);
!   while (! NULL_INTERVAL_P (next) && intervals_equal (i, next))
      next = next_interval (next);
  
    if (NULL_INTERVAL_P (next))
!     return Qnil;
  
    return next->position - (XTYPE (object) == Lisp_String);
--- 540,554 ----
    i = validate_interval_range (object, &pos, &pos, soft);
    if (NULL_INTERVAL_P (i))
!     return limit;
  
    next = next_interval (i);
!   while (! NULL_INTERVAL_P (next) && intervals_equal (i, next)
! 	 && (NILP (limit) || next->position < XFASTINT (limit)))
      next = next_interval (next);
  
    if (NULL_INTERVAL_P (next))
!     return limit;
!   if (! NILP (limit) && !(next->position < XFASTINT (limit)))
!     return limit;
  
    return next->position - (XTYPE (object) == Lisp_String);
***************
*** 583,587 ****
  
  DEFUN ("next-single-property-change", Fnext_single_property_change,
!        Snext_single_property_change, 1, 3, 0,
    "Return the position of next property change for a specific property.\n\
  Scans characters forward from POS till it finds\n\
--- 588,592 ----
  
  DEFUN ("next-single-property-change", Fnext_single_property_change,
!        Snext_single_property_change, 2, 4, 0,
    "Return the position of next property change for a specific property.\n\
  Scans characters forward from POS till it finds\n\
***************
*** 590,596 ****
  The property values are compared with `eq'.\n\
  Return nil if the property is constant all the way to the end of OBJECT.\n\
! If the value is non-nil, it is a position greater than POS, never equal.")
!   (pos, prop, object)
!      Lisp_Object pos, prop, object;
  {
    register INTERVAL i, next;
--- 595,603 ----
  The property values are compared with `eq'.\n\
  Return nil if the property is constant all the way to the end of OBJECT.\n\
! If the value is non-nil, it is a position greater than POS, never equal.\n\n\
! If the optional fourth argument LIMIT is non-nil, don't search\n\
! past position LIMIT; fail if nothing is found before LIMIT.")
!   (pos, prop, object, limit)
!      Lisp_Object pos, prop, object, limit;
  {
    register INTERVAL i, next;
***************
*** 602,615 ****
    i = validate_interval_range (object, &pos, &pos, soft);
    if (NULL_INTERVAL_P (i))
!     return Qnil;
  
    here_val = textget (i->plist, prop);
    next = next_interval (i);
    while (! NULL_INTERVAL_P (next) 
! 	 && EQ (here_val, textget (next->plist, prop)))
      next = next_interval (next);
  
    if (NULL_INTERVAL_P (next))
!     return Qnil;
  
    return next->position - (XTYPE (object) == Lisp_String);
--- 609,625 ----
    i = validate_interval_range (object, &pos, &pos, soft);
    if (NULL_INTERVAL_P (i))
!     return limit;
  
    here_val = textget (i->plist, prop);
    next = next_interval (i);
    while (! NULL_INTERVAL_P (next) 
! 	 && EQ (here_val, textget (next->plist, prop))
! 	 && (NILP (limit) || next->position < XFASTINT (limit)))
      next = next_interval (next);
  
    if (NULL_INTERVAL_P (next))
!     return limit;
!   if (! NILP (limit) && !(next->position < XFASTINT (limit)))
!     return limit;
  
    return next->position - (XTYPE (object) == Lisp_String);
***************
*** 617,621 ****
  
  DEFUN ("previous-property-change", Fprevious_property_change,
!        Sprevious_property_change, 1, 2, 0,
    "Return the position of previous property change.\n\
  Scans characters backwards from POS in OBJECT till it finds\n\
--- 627,631 ----
  
  DEFUN ("previous-property-change", Fprevious_property_change,
!        Sprevious_property_change, 1, 3, 0,
    "Return the position of previous property change.\n\
  Scans characters backwards from POS in OBJECT till it finds\n\
***************
*** 623,629 ****
  The optional second argument OBJECT is the string or buffer to scan.\n\
  Return nil if the property is constant all the way to the start of OBJECT.\n\
! If the value is non-nil, it is a position less than POS, never equal.")
!   (pos, object)
!      Lisp_Object pos, object;
  {
    register INTERVAL i, previous;
--- 633,641 ----
  The optional second argument OBJECT is the string or buffer to scan.\n\
  Return nil if the property is constant all the way to the start of OBJECT.\n\
! If the value is non-nil, it is a position less than POS, never equal.\n\n\
! If the optional third argument LIMIT is non-nil, don't search\n\
! back past position LIMIT; fail if nothing is found before LIMIT.")
!   (pos, object, limit)
!      Lisp_Object pos, object, limit;
  {
    register INTERVAL i, previous;
***************
*** 634,651 ****
    i = validate_interval_range (object, &pos, &pos, soft);
    if (NULL_INTERVAL_P (i))
!     return Qnil;
  
    previous = previous_interval (i);
!   while (! NULL_INTERVAL_P (previous) && intervals_equal (previous, i))
      previous = previous_interval (previous);
    if (NULL_INTERVAL_P (previous))
!     return Qnil;
  
!   return (previous->position + LENGTH (previous) - 1
  	  - (XTYPE (object) == Lisp_String));
  }
  
  DEFUN ("previous-single-property-change", Fprevious_single_property_change,
!        Sprevious_single_property_change, 2, 3, 0,
    "Return the position of previous property change for a specific property.\n\
  Scans characters backward from POS till it finds\n\
--- 646,668 ----
    i = validate_interval_range (object, &pos, &pos, soft);
    if (NULL_INTERVAL_P (i))
!     return limit;
  
    previous = previous_interval (i);
!   while (! NULL_INTERVAL_P (previous) && intervals_equal (previous, i)
! 	 && (NILP (limit)
! 	     || previous->position + LENGTH (previous) > XFASTINT (limit)))
      previous = previous_interval (previous);
    if (NULL_INTERVAL_P (previous))
!     return limit;
!   if (!NILP (limit)
!       && !(previous->position + LENGTH (previous) > XFASTINT (limit)))
!     return limit;
  
!   return (previous->position + LENGTH (previous)
  	  - (XTYPE (object) == Lisp_String));
  }
  
  DEFUN ("previous-single-property-change", Fprevious_single_property_change,
!        Sprevious_single_property_change, 2, 4, 0,
    "Return the position of previous property change for a specific property.\n\
  Scans characters backward from POS till it finds\n\
***************
*** 654,660 ****
  The property values are compared with `eq'.\n\
  Return nil if the property is constant all the way to the start of OBJECT.\n\
! If the value is non-nil, it is a position less than POS, never equal.")
!      (pos, prop, object)
!      Lisp_Object pos, prop, object;
  {
    register INTERVAL i, previous;
--- 671,679 ----
  The property values are compared with `eq'.\n\
  Return nil if the property is constant all the way to the start of OBJECT.\n\
! If the value is non-nil, it is a position less than POS, never equal.\n\n\
! If the optional fourth argument LIMIT is non-nil, don't search\n\
! back past position LIMIT; fail if nothing is found before LIMIT.")
!      (pos, prop, object, limit)
!      Lisp_Object pos, prop, object, limit;
  {
    register INTERVAL i, previous;
***************
*** 666,680 ****
    i = validate_interval_range (object, &pos, &pos, soft);
    if (NULL_INTERVAL_P (i))
!     return Qnil;
  
    here_val = textget (i->plist, prop);
    previous = previous_interval (i);
    while (! NULL_INTERVAL_P (previous)
! 	 && EQ (here_val, textget (previous->plist, prop)))
      previous = previous_interval (previous);
    if (NULL_INTERVAL_P (previous))
!     return Qnil;
  
!   return (previous->position + LENGTH (previous) - 1
  	  - (XTYPE (object) == Lisp_String));
  }
--- 685,704 ----
    i = validate_interval_range (object, &pos, &pos, soft);
    if (NULL_INTERVAL_P (i))
!     return limit;
  
    here_val = textget (i->plist, prop);
    previous = previous_interval (i);
    while (! NULL_INTERVAL_P (previous)
! 	 && EQ (here_val, textget (previous->plist, prop))
! 	 && (NILP (limit)
! 	     || previous->position + LENGTH (previous) > XFASTINT (limit)))
      previous = previous_interval (previous);
    if (NULL_INTERVAL_P (previous))
!     return limit;
!   if (!NILP (limit)
!       && !(previous->position + LENGTH (previous) > XFASTINT (limit)))
!     return limit;
  
!   return (previous->position + LENGTH (previous)
  	  - (XTYPE (object) == Lisp_String));
  }
***************
*** 987,991 ****
    i = validate_interval_range (object, &start, &end, soft);
    if (NULL_INTERVAL_P (i))
!     return (NILP (value) || EQ (start, end)) ? Qt : Qnil;
    s = XINT (start);
    e = XINT (end);
--- 1011,1015 ----
    i = validate_interval_range (object, &start, &end, soft);
    if (NULL_INTERVAL_P (i))
!     return (NILP (value) || EQ (start, end)) ? Qnil : start;
    s = XINT (start);
    e = XINT (end);
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/window.c emacs-19.22/src/window.c
*** emacs-19.21/src/window.c	Tue Nov 16 07:25:12 1993
--- emacs-19.22/src/window.c	Sun Nov 21 17:12:24 1993
***************
*** 1213,1217 ****
  			= Fget_buffer_create (build_string ("*scratch*"));
  		    Fset_window_buffer (w, new_buffer);
! 		    Fset_buffer (XWINDOW (w)->buffer);
  		  }
  		else
--- 1213,1218 ----
  			= Fget_buffer_create (build_string ("*scratch*"));
  		    Fset_window_buffer (w, new_buffer);
! 		    if (EQ (w, selected_window))
! 		      Fset_buffer (XWINDOW (w)->buffer);
  		  }
  		else
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/xdisp.c emacs-19.22/src/xdisp.c
*** emacs-19.21/src/xdisp.c	Tue Nov 16 07:25:09 1993
--- emacs-19.22/src/xdisp.c	Sat Nov 20 03:16:24 1993
***************
*** 1731,1735 ****
    /* The next location where the `invisible' property changes */
    int next_invisible;
-   Lisp_Object prop, position, endpos;
  #endif
    
--- 1731,1734 ----
***************
*** 1816,1841 ****
  	     the next property change */
  	  while (pos == next_invisible && pos < end)
- 	  {
- 	    XFASTINT (position) = pos;
- 	    prop = Fget_text_property (position,
- 				       Qinvisible,
- 				       Fcurrent_buffer ());
- 	    endpos = Fnext_single_property_change (position,
- 						   Qinvisible,
- 						   Fcurrent_buffer ());
- 	    if (INTEGERP (endpos))
- 	      next_invisible = XINT (endpos);
- 	    else
- 	      next_invisible = end;
- 	    if (! NILP (prop))
  	    {
! 	      if (pos < point && next_invisible >= point)
! 	      {
! 		cursor_vpos = vpos;
! 		cursor_hpos = p1 - startp;
! 	      }
! 	      pos = next_invisible;
  	    }
- 	  }
  	  if (pos >= end)
  	    break;
--- 1815,1843 ----
  	     the next property change */
  	  while (pos == next_invisible && pos < end)
  	    {
! 	      Lisp_Object position, limit, endpos, prop;
! 	      XFASTINT (position) = pos;
! 	      prop = Fget_text_property (position, Qinvisible,
! 					 Fcurrent_buffer ());
! 	      /* This is just an estimate to give reasonable
! 		 performance; nothing should go wrong if it is too small.  */
! 	      XFASTINT (limit) = pos + 50;
! 	      endpos
! 		= Fnext_single_property_change (position, Qinvisible,
! 						Fcurrent_buffer (), limit);
! 	      if (INTEGERP (endpos))
! 		next_invisible = XINT (endpos);
! 	      else
! 		next_invisible = end;
! 	      if (! NILP (prop))
! 		{
! 		  if (pos < point && next_invisible >= point)
! 		    {
! 		      cursor_vpos = vpos;
! 		      cursor_hpos = p1 - startp;
! 		    }
! 		  pos = next_invisible;
! 		}
  	    }
  	  if (pos >= end)
  	    break;
***************
*** 1849,1853 ****
  	    current_face = compute_char_face (f, w, pos,
  					      region_beg, region_end,
! 					      &next_face_change);
  #endif
  
--- 1851,1855 ----
  	    current_face = compute_char_face (f, w, pos,
  					      region_beg, region_end,
! 					      &next_face_change, pos + 50);
  #endif
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/xfaces.c emacs-19.22/src/xfaces.c
*** emacs-19.21/src/xfaces.c	Tue Nov 16 07:25:13 1993
--- emacs-19.22/src/xfaces.c	Sat Nov 20 01:36:07 1993
***************
*** 725,732 ****
     the current buffer.
  
!    REGION_BEG, REGION_END delimit the region, so it can be highlighted.  */
  
  int
! compute_char_face (f, w, pos, region_beg, region_end, endptr)
       struct frame *f;
       struct window *w;
--- 725,735 ----
     the current buffer.
  
!    REGION_BEG, REGION_END delimit the region, so it can be highlighted.
  
+    LIMIT is a position not to scan beyond.  That is to limit
+    the time this function can take.  */
+ 
  int
! compute_char_face (f, w, pos, region_beg, region_end, endptr, limit)
       struct frame *f;
       struct window *w;
***************
*** 734,737 ****
--- 737,741 ----
       int region_beg, region_end;
       int *endptr;
+      int limit;
  {
    struct face face;
***************
*** 758,764 ****
    prop = Fget_text_property (position, Qface, w->buffer);
    {
!     Lisp_Object end;
  
!     end = Fnext_single_property_change (position, Qface, w->buffer);
      if (INTEGERP (end))
        endpos = XINT (end);
--- 762,769 ----
    prop = Fget_text_property (position, Qface, w->buffer);
    {
!     Lisp_Object limit1, end;
  
!     XFASTINT (limit1) = (limit < endpos ? limit : endpos);
!     end = Fnext_single_property_change (position, Qface, w->buffer, limit1);
      if (INTEGERP (end))
        endpos = XINT (end);
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/xfns.c emacs-19.22/src/xfns.c
*** emacs-19.21/src/xfns.c	Tue Nov 16 07:25:14 1993
--- emacs-19.22/src/xfns.c	Fri Nov 26 16:35:47 1993
***************
*** 420,423 ****
--- 420,425 ----
      Lisp_Object frame;
  
+     check_frame_size (f, &height, &width);
+ 
      XSET (frame, Lisp_Frame, f);
  
***************
*** 1573,1576 ****
--- 1575,1580 ----
    f->display.x->wm_hints.flags |= InputHint;
    XSetWMHints (x_current_display, FRAME_X_WINDOW (f), &f->display.x->wm_hints);
+   XSetWMProtocols (x_current_display, FRAME_X_WINDOW (f),
+ 		   &Xatom_wm_delete_window, 1);
  
    /* x_set_name normally ignores requests to set the name if the
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/xrdb.c emacs-19.22/src/xrdb.c
*** emacs-19.21/src/xrdb.c	Tue Nov 16 07:25:17 1993
--- emacs-19.22/src/xrdb.c	Mon Nov 22 22:22:26 1993
***************
*** 349,353 ****
  	    return path;
  
! 	  s = p + 1;
  	  continue;
  	}
--- 349,354 ----
  	    return path;
  
! 	  /* Skip the first colon.  */
! 	  p++;
  	  continue;
  	}
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/xselect.c emacs-19.22/src/xselect.c
*** emacs-19.21/src/xselect.c	Tue Nov 16 07:25:18 1993
--- emacs-19.22/src/xselect.c	Mon Nov 22 10:05:47 1993
***************
*** 1662,1668 ****
       doesn't.  So we synthesize one; this means we might get two, but
       that's ok, because the second one won't have any effect.  */
!   event.display = display;
!   event.selection = selection_atom;
!   event.time = timestamp;
    x_handle_selection_clear (&event);
  
--- 1662,1668 ----
       doesn't.  So we synthesize one; this means we might get two, but
       that's ok, because the second one won't have any effect.  */
!   SELECTION_EVENT_DISPLAY (&event) = display;
!   SELECTION_EVENT_SELECTION (&event) = selection_atom;
!   SELECTION_EVENT_TIME (&event) = timestamp;
    x_handle_selection_clear (&event);
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.21/src/xterm.c emacs-19.22/src/xterm.c
*** emacs-19.21/src/xterm.c	Tue Nov 16 07:25:20 1993
--- emacs-19.22/src/xterm.c	Tue Nov 23 18:37:47 1993
***************
*** 2693,2699 ****
  
  		    if (f)
! 		      if (numchars > 0)
! 			{
! 			}
  		  }
  	      }
--- 2693,2707 ----
  
  		    if (f)
! 		      {
! 			if (numchars == 0)
! 			  abort ();
! 
! 			bufp->kind = delete_window_event;
! 			XSET (bufp->frame_or_window, Lisp_Frame, f);
! 			bufp++;
! 
! 			count += 1;
! 			numchars -= 1;
! 		      }
  		  }
  	      }
***************
*** 2704,2710 ****
  	      {
  		int new_x, new_y;
! 
  		new_x = event.xclient.data.s[0];
  		new_y = event.xclient.data.s[1];
  	      }
  	  }
--- 2712,2725 ----
  	      {
  		int new_x, new_y;
! 		struct frame *f = x_window_to_frame (event.xclient.window);
! 		
  		new_x = event.xclient.data.s[0];
  		new_y = event.xclient.data.s[1];
+ 
+ 		if (f)
+ 		  {
+ 		    f->display.x->left_pos = new_x;
+ 		    f->display.x->top_pos = new_y;
+ 		  }
  	      }
  	  }
***************
*** 4327,4331 ****
--- 4342,4348 ----
       struct frame *f;
  {
+ #if 0  /* This proves to be unpleasant.  */
    x_raise_frame (f);
+ #endif
  #if 0
    /* I don't think that the ICCCM allows programs to do things like this
end-of-emacs-patch-kit
