Integrate local changes to CVS; remove files no longer part of the CVS
authortholo <tholo@openbsd.org>
Mon, 6 May 1996 22:50:09 +0000 (22:50 +0000)
committertholo <tholo@openbsd.org>
Mon, 6 May 1996 22:50:09 +0000 (22:50 +0000)
distribution

48 files changed:
gnu/usr.bin/cvs/Makefile.in
gnu/usr.bin/cvs/configure
gnu/usr.bin/cvs/configure.in
gnu/usr.bin/cvs/contrib/pcl-cvs/.cvsignore [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/ChangeLog [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/INSTALL [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/Makefile.in [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/NEWS [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/README [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-lucid.el [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-lucid.elc [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-startup.el [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.aux [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.el [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.elc [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info-1 [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info-2 [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.ps [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.texinfo [deleted file]
gnu/usr.bin/cvs/contrib/pcl-cvs/texinfo.tex [deleted file]
gnu/usr.bin/cvs/cvsinit.sh [deleted file]
gnu/usr.bin/cvs/examples/.cvsignore [deleted file]
gnu/usr.bin/cvs/examples/ChangeLog [deleted file]
gnu/usr.bin/cvs/examples/Makefile.in [deleted file]
gnu/usr.bin/cvs/examples/checkoutlist [deleted file]
gnu/usr.bin/cvs/examples/commitinfo [deleted file]
gnu/usr.bin/cvs/examples/cvswrappers [deleted file]
gnu/usr.bin/cvs/examples/editinfo [deleted file]
gnu/usr.bin/cvs/examples/loginfo [deleted file]
gnu/usr.bin/cvs/examples/modules [deleted file]
gnu/usr.bin/cvs/examples/notify [deleted file]
gnu/usr.bin/cvs/examples/rcsinfo [deleted file]
gnu/usr.bin/cvs/examples/rcstemplate [deleted file]
gnu/usr.bin/cvs/examples/taginfo [deleted file]
gnu/usr.bin/cvs/examples/unwrap [deleted file]
gnu/usr.bin/cvs/examples/wrap [deleted file]
gnu/usr.bin/cvs/lib/getdate.c
gnu/usr.bin/cvs/man/cvsinit.8 [deleted file]
gnu/usr.bin/cvs/src/commit.c
gnu/usr.bin/cvs/src/cvs.h
gnu/usr.bin/cvs/src/ignore.c
gnu/usr.bin/cvs/src/lock.c
gnu/usr.bin/cvs/src/main.c
gnu/usr.bin/cvs/src/patch.c
gnu/usr.bin/cvs/src/server.c
gnu/usr.bin/cvs/src/update.c
gnu/usr.bin/cvs/windows-NT/alloca.h [deleted file]

index 1a6b83b..a66311c 100644 (file)
@@ -93,19 +93,17 @@ DISTFILES = \
        BUGS MINOR-BUGS FAQ HACKING \
        ChangeLog NEWS ChangeLog.zoo \
        configure configure.in stamp-h.in config.h.in Makefile.in acconfig.h \
-       cvs-format.el mkinstalldirs install-sh cvsinit.sh \
+       cvs-format.el mkinstalldirs install-sh \
        cvsnt.mak \
        .cvsignore
 
-PROGS = cvsinit
-
 ### Subdirectories to run make in for the primary targets.
 # Unix source subdirs, where we'll want to run lint and etags:
 USOURCE_SUBDIRS = lib src
 # Documentation directories; special handling
 INSTALL_MAN=man
 # All other subdirs:
-SUBDIRS = ${USOURCE_SUBDIRS} ${INSTALL_MAN} doc contrib examples windows-NT os2 macintosh
+SUBDIRS = ${USOURCE_SUBDIRS} ${INSTALL_MAN} doc contrib tools windows-NT os2 macintosh
 # Only make TAGS/tags files in these directories, in this order
 #    [Why in this order?  If we didn't have to stick to this order, we
 #    could make "TSUBDIRS = ${USOURCE_SUBDIRS}".  -Karl]
@@ -124,19 +122,7 @@ all install uninstall: config.h Makefile all-local
 install: all install-local install-info
 
 .PHONY: all-local
-all-local: $(PROGS)
-
-cvsinit: cvsinit.sh
-       echo > .fname \
-         cvs-`sed < $(srcdir)/src/version.c \
-                   -e '/version_string/!d' \
-                   -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
-                   -e q`
-       sed -e 's,xLIBDIRx,$(libdir)/cvs,g' \
-           -e "s,xVERSIONx,`cat .fname`,g" $(srcdir)/cvsinit.sh > $@-t
-       rm -f .fname
-       mv $@-t $@
-       chmod a+x $@
+all-local:
 
 .PHONY: info dvi clean-info install-info
 info dvi clean-info install-info:
@@ -144,10 +130,7 @@ info dvi clean-info install-info:
 
 .PHONY: install-local
 install-local: all-local
-       @for prog in $(PROGS); do \
-         echo Installing $$prog in $(bindir); \
-         $(INSTALL) $$prog $(bindir)/$$prog ; \
-       done
+       @: nothing to do locally
 
 .PHONY: tags
 tags:
@@ -186,7 +169,7 @@ realclean: realclean-local
 
 .PHONY: mostlyclean-local
 mostlyclean-local:
-       rm -f *~ $(PROGS)
+       rm -f *~
 
 .PHONY: clean-local
 clean-local: mostlyclean-local
@@ -265,10 +248,12 @@ config.status: configure
 
 config.h: stamp-h
 
-# The ./config.status --recheck line is to update config.status with
-# any new #defines from config.h.in.
+# This used to do a ./config.status --recheck, to update config.status with
+# any new #defines from config.h.in.  The problem was that the rule itself
+# depends on config.status, so that the --recheck would get run several
+# times, which is bad if the user was trying to specify CFLAGS manually.
+# It was a big pain in the neck.
 stamp-h: config.h.in config.status
-       ./config.status --recheck
        CONFIG_FILES=$@ CONFIG_HEADERS=config.h ./config.status
 
 #config.h.in: stamp-h.in
index 9b115c2..3025eef 100644 (file)
@@ -1,8 +1,8 @@
 #! /bin/sh
 
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.7 
-# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+# Generated automatically using autoconf version 2.9 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
@@ -332,7 +332,7 @@ EOF
     verbose=yes ;;
 
   -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.7"
+    echo "configure generated by autoconf version 2.9"
     exit 0 ;;
 
   -with-* | --with-*)
@@ -497,12 +497,9 @@ fi
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='echo $CPP $CPPFLAGS 1>&5;
-$CPP $CPPFLAGS'
-ac_compile='echo ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5;
-${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5'
-ac_link='echo ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5;
-${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5'
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
 
 if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
@@ -537,7 +534,6 @@ else
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$ac_cv_prog_CC" && ac_cv_prog_CC="cc"
 fi
 fi
 CC="$ac_cv_prog_CC"
@@ -547,6 +543,55 @@ else
   echo "$ac_t""no" 1>&6
 fi
 
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  ac_prog_rejected=no
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
@@ -557,7 +602,7 @@ else
   yes;
 #endif
 EOF
-if ${CC-cc} -E conftest.c 2>&5 | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -610,12 +655,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 614 "configure"
+#line 659 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
-eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:665: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -624,12 +670,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 628 "configure"
+#line 674 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
-eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:680: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -651,7 +698,7 @@ echo "$ac_t""$CPP" 1>&6
 
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
 cat > conftest.$ac_ext <<EOF
-#line 655 "configure"
+#line 702 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -678,11 +725,12 @@ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 682 "configure"
+#line 729 "configure"
 #include "confdefs.h"
 #include <minix/config.h>
 EOF
-eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -788,11 +836,11 @@ else
   ac_cv_c_cross=yes
 else
 cat > conftest.$ac_ext <<EOF
-#line 792 "configure"
+#line 840 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-eval $ac_link
+{ (eval echo configure:844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
 if test -s conftest && (./conftest; exit) 2>/dev/null; then
   ac_cv_c_cross=no
 else
@@ -811,7 +859,7 @@ if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 815 "configure"
+#line 863 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -861,7 +909,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if eval $ac_compile; then
+if { (eval echo configure:913: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -887,7 +935,7 @@ else
   if test "$GCC" = yes; then
   # GCC predefines this symbol on systems where it applies.
 cat > conftest.$ac_ext <<EOF
-#line 891 "configure"
+#line 939 "configure"
 #include "confdefs.h"
 #ifdef __CHAR_UNSIGNED__
   yes
@@ -909,7 +957,7 @@ if test "$cross_compiling" = yes; then
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
 cat > conftest.$ac_ext <<EOF
-#line 913 "configure"
+#line 961 "configure"
 #include "confdefs.h"
 /* volatile prevents gcc2 from optimizing the test away on sparcs.  */
 #if !defined(__STDC__) || __STDC__ != 1
@@ -919,7 +967,7 @@ main() {
   volatile char c = 255; exit(c < 0);
 }
 EOF
-eval $ac_link
+{ (eval echo configure:971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
 if test -s conftest && (./conftest; exit) 2>/dev/null; then
   ac_cv_c_char_unsigned=yes
 else
@@ -945,7 +993,7 @@ else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 949 "configure"
+#line 997 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -953,7 +1001,7 @@ int t() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if eval $ac_compile; then
+if { (eval echo configure:1005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 fi
@@ -1238,14 +1286,15 @@ if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1242 "configure"
+#line 1290 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
 #include <string.h>
 #include <float.h>
 EOF
-eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1298: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1260,7 +1309,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1264 "configure"
+#line 1313 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -1278,7 +1327,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1282 "configure"
+#line 1331 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1299,7 +1348,7 @@ if test "$cross_compiling" = yes; then
   :
 else
 cat > conftest.$ac_ext <<EOF
-#line 1303 "configure"
+#line 1352 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1310,7 +1359,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-eval $ac_link
+{ (eval echo configure:1363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
 if test -s conftest && (./conftest; exit) 2>/dev/null; then
   :
 else
@@ -1339,11 +1388,12 @@ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1343 "configure"
+#line 1392 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
-eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1397: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1372,7 +1422,7 @@ if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1376 "configure"
+#line 1426 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -1389,7 +1439,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if eval $ac_compile; then
+if { (eval echo configure:1443: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -1413,7 +1463,7 @@ if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1417 "configure"
+#line 1467 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -1468,7 +1518,7 @@ if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1472 "configure"
+#line 1522 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -1478,7 +1528,7 @@ int t() {
 struct tm *tp;
 ; return 0; }
 EOF
-if eval $ac_compile; then
+if { (eval echo configure:1532: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -1506,7 +1556,7 @@ if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1510 "configure"
+#line 1560 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -1515,7 +1565,7 @@ int t() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if eval $ac_compile; then
+if { (eval echo configure:1569: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -1539,22 +1589,24 @@ done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for -ldir""... $ac_c" 1>&6
-ac_lib_var=`echo dir | tr '.-/+' '___p'`
+ac_lib_var=`echo dir_opendir | tr '.-/+' '___p'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1550 "configure"
+#line 1600 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char opendir();
 
 int main() { return 0; }
 int t() {
 opendir()
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:1610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1574,22 +1626,24 @@ fi
 
 else
 echo $ac_n "checking for -lx""... $ac_c" 1>&6
-ac_lib_var=`echo x | tr '.-/+' '___p'`
+ac_lib_var=`echo x_opendir | tr '.-/+' '___p'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1585 "configure"
+#line 1637 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char opendir();
 
 int main() { return 0; }
 int t() {
 opendir()
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:1647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1614,7 +1668,7 @@ if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1618 "configure"
+#line 1672 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -1632,7 +1686,7 @@ int t() {
 int i;
 ; return 0; }
 EOF
-if eval $ac_compile; then
+if { (eval echo configure:1690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -1654,7 +1708,7 @@ if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1658 "configure"
+#line 1712 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -1687,7 +1741,7 @@ if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1691 "configure"
+#line 1745 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1718,7 +1772,7 @@ if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1722 "configure"
+#line 1776 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1749,7 +1803,7 @@ if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1753 "configure"
+#line 1807 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1782,7 +1836,7 @@ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1786 "configure"
+#line 1840 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1804,7 +1858,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:1862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -1824,14 +1878,14 @@ fi
 
 done
 
-for ac_func in fchmod fsync ftime mkfifo putenv setvbuf vfork vprintf ftruncate timezone getpagesize fchdir sigaction sigprocmask sigvec sigsetmask sigblock
+for ac_func in fchmod fsync ftime mkfifo putenv setvbuf vfork vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1835 "configure"
+#line 1889 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1853,7 +1907,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:1911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -1880,7 +1934,7 @@ if eval "test \"`echo '$''{'ac_cv_func_re_exec'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1884 "configure"
+#line 1938 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char re_exec(); below.  */
@@ -1902,7 +1956,7 @@ re_exec();
 
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:1960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_func_re_exec=yes"
 else
@@ -1930,7 +1984,7 @@ if test "$cross_compiling" = yes; then
   ac_cv_func_utime_null=no
 else
 cat > conftest.$ac_ext <<EOF
-#line 1934 "configure"
+#line 1988 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -1941,7 +1995,7 @@ exit(!(stat ("conftestdata", &s) == 0 && utime("conftestdata", (long *)0) == 0
 && t.st_mtime - s.st_mtime < 120));
 }
 EOF
-eval $ac_link
+{ (eval echo configure:1999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
 if test -s conftest && (./conftest; exit) 2>/dev/null; then
   ac_cv_func_utime_null=yes
 else
@@ -2005,19 +2059,19 @@ else
   ccvs_cv_sys_working_fnmatch=no
 else
 cat > conftest.$ac_ext <<EOF
-#line 2009 "configure"
+#line 2063 "configure"
 #include "confdefs.h"
 
 #include <fnmatch.h>
 int
 main ()
 {
-  exit ((fnmatch ("a", "a", FNM_FILE_NAME) == 0
-        && fnmatch ("a", "b", FNM_FILE_NAME) == FNM_NOMATCH)
+  exit ((fnmatch ("a", "a", FNM_PATHNAME) == 0
+        && fnmatch ("a", "b", FNM_PATHNAME) == FNM_NOMATCH)
        ? 0 : 1);
 }
 EOF
-eval $ac_link
+{ (eval echo configure:2075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
 if test -s conftest && (./conftest; exit) 2>/dev/null; then
   ccvs_cv_sys_working_fnmatch=yes
 else
@@ -2050,7 +2104,7 @@ else
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
 cat > conftest.$ac_ext <<EOF
-#line 2054 "configure"
+#line 2108 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -2061,7 +2115,7 @@ main()
   exit(0);
 }
 EOF
-eval $ac_link
+{ (eval echo configure:2119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
 if test -s conftest && (./conftest; exit) 2>/dev/null; then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -2084,7 +2138,7 @@ else
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
 cat > conftest.$ac_ext <<EOF
-#line 2088 "configure"
+#line 2142 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -2095,7 +2149,7 @@ main()
   exit(0);
 }
 EOF
-eval $ac_link
+{ (eval echo configure:2153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
 if test -s conftest && (./conftest; exit) 2>/dev/null; then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -2114,7 +2168,7 @@ EOF
 krb_h=
 echo $ac_n "checking for krb.h""... $ac_c" 1>&6
 cat > conftest.$ac_ext <<EOF
-#line 2118 "configure"
+#line 2172 "configure"
 #include "confdefs.h"
 #include <krb.h>
 int main() { return 0; }
@@ -2122,7 +2176,7 @@ int t() {
 int i;
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   krb_h=yes krb_incdir=
 else
@@ -2131,7 +2185,7 @@ else
      hold_cflags=$CFLAGS
      CFLAGS="$CFLAGS -I$KRB4/include"
      cat > conftest.$ac_ext <<EOF
-#line 2135 "configure"
+#line 2189 "configure"
 #include "confdefs.h"
 #include <krb.h>
 int main() { return 0; }
@@ -2139,7 +2193,7 @@ int t() {
 int i;
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   krb_h=yes krb_incdir=$KRB4/include
 fi
@@ -2152,7 +2206,7 @@ rm -f conftest*
 
 if test -z "$krb_h"; then
   cat > conftest.$ac_ext <<EOF
-#line 2156 "configure"
+#line 2210 "configure"
 #include "confdefs.h"
 #include <krb.h>
 int main() { return 0; }
@@ -2160,7 +2214,7 @@ int t() {
 int i;
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   krb_h=yes krb_incdir=
 else
@@ -2169,7 +2223,7 @@ else
        hold_cflags=$CFLAGS
        CFLAGS="$CFLAGS -I$KRB4/include/kerberosIV"
        cat > conftest.$ac_ext <<EOF
-#line 2173 "configure"
+#line 2227 "configure"
 #include "confdefs.h"
 #include <krb.h>
 int main() { return 0; }
@@ -2177,7 +2231,7 @@ int t() {
 int i;
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   krb_h=yes krb_incdir=$KRB4/include/kerberosIV
 fi
@@ -2194,22 +2248,24 @@ echo "$ac_t""$krb_h" 1>&6
 if test -n "$krb_h"; then
   krb_lib=
   echo $ac_n "checking for -lkrb""... $ac_c" 1>&6
-ac_lib_var=`echo krb | tr '.-/+' '___p'`
+ac_lib_var=`echo krb_printf | tr '.-/+' '___p'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lkrb  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2205 "configure"
+#line 2259 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char printf();
 
 int main() { return 0; }
 int t() {
-main()
+printf()
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2238,22 +2294,24 @@ EOF
     test -n "${krb_libdir}" && LIBS="${LIBS} -L${krb_libdir}"
     LIBS="${LIBS} -lkrb"
     echo $ac_n "checking for -ldes""... $ac_c" 1>&6
-ac_lib_var=`echo des | tr '.-/+' '___p'`
+ac_lib_var=`echo des_printf | tr '.-/+' '___p'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-ldes  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2249 "configure"
+#line 2305 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char printf();
 
 int main() { return 0; }
 int t() {
-main()
+printf()
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2284,7 +2342,7 @@ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2288 "configure"
+#line 2346 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2306,7 +2364,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2339,7 +2397,7 @@ if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2343 "configure"
+#line 2401 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -2361,7 +2419,7 @@ connect();
 
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -2379,22 +2437,24 @@ else
 case "$LIBS" in
 *-lnsl*) ;;
 *) echo $ac_n "checking for -lnsl_s""... $ac_c" 1>&6
-ac_lib_var=`echo nsl_s | tr '.-/+' '___p'`
+ac_lib_var=`echo nsl_s_printf | tr '.-/+' '___p'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl_s  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2390 "configure"
+#line 2448 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char printf();
 
 int main() { return 0; }
 int t() {
-main()
+printf()
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2422,22 +2482,24 @@ esac
 case "$LIBS" in
 *-lnsl*) ;;
 *) echo $ac_n "checking for -lnsl""... $ac_c" 1>&6
-ac_lib_var=`echo nsl | tr '.-/+' '___p'`
+ac_lib_var=`echo nsl_printf | tr '.-/+' '___p'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2433 "configure"
+#line 2493 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char printf();
 
 int main() { return 0; }
 int t() {
-main()
+printf()
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2465,22 +2527,24 @@ esac
 case "$LIBS" in
 *-lsocket*) ;;
 *) echo $ac_n "checking for -lsocket""... $ac_c" 1>&6
-ac_lib_var=`echo socket | tr '.-/+' '___p'`
+ac_lib_var=`echo socket_connect | tr '.-/+' '___p'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2476 "configure"
+#line 2538 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char connect();
 
 int main() { return 0; }
 int t() {
 connect()
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2508,22 +2572,24 @@ esac
 case "$LIBS" in
 *-linet*) ;;
 *) echo $ac_n "checking for -linet""... $ac_c" 1>&6
-ac_lib_var=`echo inet | tr '.-/+' '___p'`
+ac_lib_var=`echo inet_connect | tr '.-/+' '___p'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-linet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2519 "configure"
+#line 2583 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char connect();
 
 int main() { return 0; }
 int t() {
 connect()
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2556,7 +2622,7 @@ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2560 "configure"
+#line 2626 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2578,7 +2644,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2608,7 +2674,7 @@ if eval "test \"`echo '$''{'ac_cv_func_gethostname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2612 "configure"
+#line 2678 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostname(); below.  */
@@ -2630,7 +2696,7 @@ gethostname();
 
 ; return 0; }
 EOF
-if eval $ac_link; then
+if { (eval echo configure:2700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_func_gethostname=yes"
 else
@@ -2659,11 +2725,155 @@ cat >> confdefs.h <<\EOF
 #define SERVER_SUPPORT 1
 EOF
 
-# As far as I know this works on all machines which use configure (i.e. unix)
-cat >> confdefs.h <<\EOF
+# Define AUTH_SERVER_SUPPORT only if we could locate the crypt() function
+unset ac_cv_func_crypt
+echo $ac_n "checking for crypt""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_func_crypt'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2736 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char crypt(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+char crypt();
+
+int main() { return 0; }
+int t() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_crypt) || defined (__stub___crypt)
+choke me
+#else
+crypt();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  rm -rf conftest*
+  eval "ac_cv_func_crypt=yes"
+else
+  rm -rf conftest*
+  eval "ac_cv_func_crypt=no"
+fi
+rm -f conftest*
+
+fi
+if eval "test \"`echo '$ac_cv_func_'crypt`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+case "$LIBS" in
+*-lcrypt*) ;;
+*) echo $ac_n "checking for -lcrypt""... $ac_c" 1>&6
+ac_lib_var=`echo crypt_crypt | tr '.-/+' '___p'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcrypt  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2783 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+char crypt();
+
+int main() { return 0; }
+int t() {
+crypt()
+; return 0; }
+EOF
+if { (eval echo configure:2793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo crypt | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lcrypt $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+esac
+unset ac_cv_func_crypt
+for ac_func in crypt
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2826 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+char $ac_func();
+
+int main() { return 0; }
+int t() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+
+fi
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+fi
+
+  if test "$ac_cv_func_crypt" = yes; then
+  cat >> confdefs.h <<\EOF
 #define AUTH_SERVER_SUPPORT 1
 EOF
 
+  fi
 fi
 
 test -f src/options.h && (
@@ -2749,7 +2959,7 @@ do
     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.7"
+    echo "$CONFIG_STATUS generated by autoconf version 2.9"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
@@ -2761,9 +2971,9 @@ ac_given_srcdir=$srcdir
 ac_given_INSTALL="$INSTALL"
 
 trap 'rm -fr `echo "Makefile lib/Makefile src/Makefile doc/Makefile \
-         man/Makefile contrib/Makefile contrib/pcl-cvs/Makefile \
-         examples/Makefile windows-NT/Makefile os2/Makefile \
-         macintosh/Makefile stamp-h config.h src/options.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+         man/Makefile tools/Makefile tools/pcl-cvs/Makefile \
+         contrib/Makefile contrib/elib/Makefile \
+         windows-NT/Makefile os2/Makefile macintosh/Makefile stamp-h config.h src/options.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
 EOF
 cat >> $CONFIG_STATUS <<EOF
 
@@ -2812,9 +3022,9 @@ EOF
 cat >> $CONFIG_STATUS <<EOF
 
 CONFIG_FILES=\${CONFIG_FILES-"Makefile lib/Makefile src/Makefile doc/Makefile \
-         man/Makefile contrib/Makefile contrib/pcl-cvs/Makefile \
-         examples/Makefile windows-NT/Makefile os2/Makefile \
-         macintosh/Makefile stamp-h"}
+         man/Makefile tools/Makefile tools/pcl-cvs/Makefile \
+         contrib/Makefile contrib/elib/Makefile \
+         windows-NT/Makefile os2/Makefile macintosh/Makefile stamp-h"}
 EOF
 cat >> $CONFIG_STATUS <<\EOF
 for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
@@ -2913,7 +3123,7 @@ rm -f conftest.vals
 cat > conftest.hdr <<\EOF
 s/[\\&%]/\\&/g
 s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) \(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
 s%ac_d%ac_u%gp
 s%ac_u%ac_e%gp
 EOF
index 246c92f..554a401 100644 (file)
@@ -50,7 +50,7 @@ AC_TYPE_MODE_T
 AC_TYPE_SIZE_T
 AC_TYPE_PID_T
 AC_REPLACE_FUNCS(getwd mkdir rename strdup strstr dup2 strerror valloc waitpid memmove vasprintf strtoul)
-AC_CHECK_FUNCS(fchmod fsync ftime mkfifo putenv setvbuf vfork vprintf ftruncate timezone getpagesize fchdir sigaction sigprocmask sigvec sigsetmask sigblock)
+AC_CHECK_FUNCS(fchmod fsync ftime mkfifo putenv setvbuf vfork vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock)
 AC_CHECK_FUNC(re_exec, :, LIBOBJS="$LIBOBJS regex.o")
 AC_FUNC_UTIME_NULL
 AC_SYS_LONG_FILE_NAMES
@@ -62,8 +62,8 @@ AC_CACHE_VAL(ccvs_cv_sys_working_fnmatch,
 int
 main ()
 {
-  exit ((fnmatch ("a", "a", FNM_FILE_NAME) == 0
-        && fnmatch ("a", "b", FNM_FILE_NAME) == FNM_NOMATCH)
+  exit ((fnmatch ("a", "a", FNM_PATHNAME) == 0
+        && fnmatch ("a", "b", FNM_PATHNAME) == FNM_NOMATCH)
        ? 0 : 1);
 }],
 ccvs_cv_sys_working_fnmatch=yes,
@@ -116,7 +116,7 @@ AC_MSG_RESULT($krb_h)
 
 if test -n "$krb_h"; then
   krb_lib=
-  AC_CHECK_LIB(krb,main,[krb_lib=yes krb_libdir=],
+  AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=],
     [if test "$cross_compiling" != yes && test -r $KRB4/lib/libkrb.a; then
        krb_lib=yes krb_libdir=$KRB4/lib
      fi])
@@ -124,7 +124,7 @@ if test -n "$krb_h"; then
     AC_DEFINE(HAVE_KERBEROS)
     test -n "${krb_libdir}" && LIBS="${LIBS} -L${krb_libdir}"
     LIBS="${LIBS} -lkrb"
-    AC_CHECK_LIB(des,main,[LIBS="${LIBS} -ldes"])
+    AC_CHECK_LIB(des,printf,[LIBS="${LIBS} -ldes"])
     if test -n "$krb_incdir"; then
       includeopt="${includeopt} -I$krb_incdir"
       AC_SUBST(includeopt)
@@ -141,11 +141,11 @@ unset ac_cv_func_connect
 AC_CHECK_FUNC(connect, :, 
 [case "$LIBS" in
 *-lnsl*) ;;
-*) AC_CHECK_LIB(nsl_s, main) ;;
+*) AC_CHECK_LIB(nsl_s, printf) ;;
 esac
 case "$LIBS" in
 *-lnsl*) ;;
-*) AC_CHECK_LIB(nsl, main) ;;
+*) AC_CHECK_LIB(nsl, printf) ;;
 esac
 case "$LIBS" in
 *-lsocket*) ;;
@@ -164,8 +164,18 @@ AC_CHECK_FUNC(gethostname, :, LIBOBJS="$LIBOBJS hostname.o")
 if test "$ac_cv_func_connect" = yes; then
 AC_DEFINE(CLIENT_SUPPORT)
 AC_DEFINE(SERVER_SUPPORT)
-# As far as I know this works on all machines which use configure (i.e. unix)
-AC_DEFINE(AUTH_SERVER_SUPPORT)
+# Define AUTH_SERVER_SUPPORT only if we could locate the crypt() function
+unset ac_cv_func_crypt
+AC_CHECK_FUNC(crypt, :,
+[case "$LIBS" in
+*-lcrypt*) ;;
+*) AC_CHECK_LIB(crypt, crypt) ;;
+esac
+unset ac_cv_func_crypt
+AC_CHECK_FUNCS(crypt)])
+  if test "$ac_cv_func_crypt" = yes; then
+  AC_DEFINE(AUTH_SERVER_SUPPORT)
+  fi
 fi
 
 test -f src/options.h && (
@@ -176,6 +186,6 @@ test -f src/options.h && (
 )
 
 AC_OUTPUT(Makefile lib/Makefile src/Makefile doc/Makefile \
-         man/Makefile contrib/Makefile contrib/pcl-cvs/Makefile \
-         examples/Makefile windows-NT/Makefile os2/Makefile \
-         macintosh/Makefile stamp-h)
+         man/Makefile tools/Makefile tools/pcl-cvs/Makefile \
+         contrib/Makefile contrib/elib/Makefile \
+         windows-NT/Makefile os2/Makefile macintosh/Makefile stamp-h)
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/.cvsignore b/gnu/usr.bin/cvs/contrib/pcl-cvs/.cvsignore
deleted file mode 100644 (file)
index d8c4f2a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Makefile
-pcl-cvs.info*
-pcl-cvs.aux
-pcl-cvs.cp
-pcl-cvs.cps
-pcl-cvs.dvi
-pcl-cvs.fn
-pcl-cvs.fns
-pcl-cvs.ky
-pcl-cvs.kys
-pcl-cvs.log
-pcl-cvs.pg
-pcl-cvs.pgs
-pcl-cvs.toc
-pcl-cvs.tp
-pcl-cvs.tps
-pcl-cvs.vr
-pcl-cvs.vrs
-pcl-cvs.ps
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/ChangeLog b/gnu/usr.bin/cvs/contrib/pcl-cvs/ChangeLog
deleted file mode 100644 (file)
index 82261b0..0000000
+++ /dev/null
@@ -1,861 +0,0 @@
-Fri Feb  9 14:29:07 1996  Jim Blandy  <jimb@totoro.cyclic.com>
-
-       * Makefile.in (mostlyclean clean realclean): Remove 'realclean'
-       from this target list; it's already defined later in the file.
-
-Tue Jan 23 13:02:24 1996  Greg A. Woods  <woods@most.weird.com>
-
-       * pcl-cvs.el (pcl-cvs-bugs-address): change the default address
-       as suggested by Per Cederqvist.
-       * pcl-cvs.el: removed comments refering to Signum, etc.
-
-Sun Jan 21 12:51:12 1996  Greg A. Woods  <woods@most.weird.com>
-
-       * pcl-cvs.el (cvs-parse-stderr): fix typo (missing '\') that was
-       causing occasional un-reported, un-traced, failures that simply
-       said something like "RE missing '\(' or '\\('" -- hopefully this
-       is the last such bug!
-
-Tue Jan 16 13:57:16 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>
-
-       * Makefile.in: Rename "dist" target back to "dist-dir".  The
-       latter is what actually gets used.
-       (pcl-cvs.dvi): Restore srcdir to pcl-cvs.texinfo.  Fix typo
-       (pcl-cvs.texifo -> pcl-cvs.texinfo).
-       (TEXINDEX,TEX,SET_TEXINPUTS): New variables.
-       (.el.elc): Copy .el file to build dir so .elc file gets put there.
-       (dist-dir): Fix typo (cvs.info -> pcl-cvs.info).
-       * cookie.el: New file, copied from elib 1.0.
-       * README: Remove note about requiring elib; it claimed that CVS
-       contained a copy of elib, but it lied.
-       * pcl-cvs.el: Change (require 'cookie) to (load "cookie.el").
-       * pcl-cvs-lucid.el: Change (require 'pcl-cvs) to (load "pcl-cvs.el").
-
-Fri Jan 12 10:32:14 1996  Greg A. Woods  <woods@most.weird.com>
-
-       * pcl-cvs.elc, pcl-cvs-lucid.elc: removed
-
-       * pcl-cvs.el: run through the spell checker...
-       - noted some free variables in comments
-       (cvs-inhibit-copyright-message): move this above
-       cvs-startup-message to keep the compiler quiet
-
-       * compile-all.el: removed (use make for dependency checking!)
-
-       * Makefile.in: tweak various comments and echo messages...
-       (elcfiles): removed this target.
-       (.SUFFIXES, .el.elc): added support for elisp files.
-       (CORE): new macro -- list of files all .elc depend on [still empty]
-       (BATCHFLAGS): new macro -- flags to pass to emacs
-       (OBJDIR_DISTFILES): added ELCFILES to be shipped in distribution
-
-       * README: fix the RCS Id.
-
-       * INSTALL: re-copy formatted makeinfo output from pcl-cvs.info,
-       just to keep everything in proper synchronisation.
-
-       * pcl-cvs.texinfo (Pcl-cvs installation): update to match Karl's
-       new wording from INSTALL.
-
-Wed Jan 10 22:04:35 1996  Karl Fogel  <kfogel@floss.red-bean.com>
-
-        * INSTALL: make first item read a little more smoothly.
-
-        * README: note that pcl-cvs has been tested under 19.30.
-
-Wed Jan 10 17:59:00 1996  Greg A. Woods  <woods@most.weird.com>
-
-       * ChangeLog.woods: these are changes integrated in from my
-       own pcl-cvs repository module, and based on the original PCL-CVS
-       Version 1.05 release.  They include most, if not all, of the
-       changes from the Cygnus and Cyclic CVS contrib versions of
-       PCL-CVS (i.e. the changes noted below).
-
-Sat Dec 30 15:01:45 1995  Karl Fogel  <kfogel@floss.cyclic.com>
-
-        * pcl-cvs.el (cvs-changelog-ours-p): check that
-        `add-log-full-name' and `add-log-mailing-address' are non-nil, in
-        addition to checking that they are boundp.
-        
-Thu Dec 21 16:45:48 1995  Karl Fogel  <kfogel@occs.cs.oberlin.edu>
-
-        * pcl-cvs.el (cvs-parse-stderr): ignore kerberos connection
-        failure, since CVS will automatically try rsh next.  I think this
-        is okay because if a person needs to know that kerberos failed,
-        then chances are the rsh failed too, and *that* error message will
-        clue them in that something's afoot.
-
-Wed Nov 22 11:01:50 1995  Joshua Cowan <jcowan@hermit.reslife.okstate.edu>
-
-        * pcl-cvs.el (cvs-changelog-ours-p): use `user-full-name' if
-        `add-log-full-name' unbound, as not every uses the stuff in
-        add-log.el.  Same with `add-log-mailing-address'.
-        (cvs-changelog-entries): change to `change-log-mode' unless
-        already in it.
-
-Sun Jul  9 20:57:11 1995  Karl Fogel  <kfogel@floss.cyclic.com>
-
-        * "/bin/rmdir" as default, not "/usr/local/bin/rmdir".
-
-Fri Jun 16 15:24:34 1995  Jim Kingdon  (kingdon@cyclic.com)
-
-       * pcl-cvs.elc, pcl-cvs-lucid.elc: Added.
-
-       * Makefile.in: Rename from Makefile and set srcdir.
-
-Thu May 18 17:10:27 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-        Automatically guess CVS log entries from ChangeLog contents.
-       * pcl-cvs.el (cvs-mode-changelog-commit): New command.
-       (cvs-changelog-full-paragraphs): New variable.
-       (cvs-changelog-name, cvs-narrow-changelog,
-       cvs-changelog-paragraph, cvs-changelog-subparagraph,
-       cvs-changelog-entry, cvs-changelog-ours-p, cvs-relative-path,
-       cvs-changelog-entries, cvs-changelog-insert-entries, cvs-union,
-       cvs-insert-changelog-entries, cvs-edit-delete-common-indentation):
-       New functions.
-       (cvs-mode-map): Bind 'C' to cvs-mode-changelog-commit.
-       (cvs-mode): Mention cvs-mode-changelog-commit in docstring.
-
-        Give the info files names ending in ".info".
-       * Makefile (INFOFILES, install_info): Change pcl-cvs to
-       pcl-cvs.info.
-       (pcl-cvs.info): Target renamed from pcl-cvs.
-       (DISTFILES): pcl-cvs removed; we handle the info files explicitly
-       in the dist-dir target.
-       (dist-dir): Depend on pcl-cvs.info.  Distribute pcl-cvs.info*.
-       * pcl-cvs.texinfo: Change @setfilename appropriately.
-       * INSTALL: Updated.
-       * .cvsignore: Correctly ignore the info files.
-
-       * README: Note that pcl-cvs has been tested under 19.28, and that
-       the "cookie" naming conflict was resolved in 19.11.
-
-       * Makefile (pcl-cvs-lucid.elc): Changed this target from
-       pcl-cvs-lucid.el.  That's a source file, for goodness' sake!
-
-Tue May  9 13:56:50 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-       * Change references to "Cygnus's remote CVS" to "Cyclic CVS".
-
-Wed May  3 13:55:27 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-       * pcl-cvs.el (cvs-parse-stderr): Handle colons after both
-       "rcsmerge" and "warning".
-
-Fri Apr 28 22:38:14 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-        * Makefile (ELFILES): Include pcl-cvs-startup.el.
-       (info, pcl-cvs): Call makeinfo appropriately for modern versions.
-       (pcl-cvs.aux): List dependency on pcl-cvs.texinfo.
-       (pcl-cvs.ps): New target.
-       (DVIPS): New variable.
-       (dist-dir): Renamed from dist, updated to accept DISTDIR value
-       passed from parent.
-       (DISTFILES): New varible.
-       (pcl-cvs.elc, pcl-cvs-lucid.elc): Add targets to elcfiles target.
-
-Tue Apr 25 21:33:49 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-       * pcl-cvs.el: (cvs-parse-stderr): Recognize "conflicts" as well as
-       "overlaps" before "during merge."
-
-Thu Feb 16 12:17:20 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-       * pcl-cvs.el (cvs-parse-stderr): Recognize "conflicts found in..."
-       messages attributed to "cvs server", as well as "cvs update".
-
-Sat Feb  4 01:47:01 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-       * pcl-cvs.el: Deal with the 'P' action, produced by remote CVS.
-       (cvs-parse-stdout): Treat 'P' like 'U' --- file is updated.
-
-Tue Jan 31 23:31:39 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-       * pcl-cvs.el (cvs-cvsroot-required): New variable.
-       (cvs-do-update): If cvs-cvsroot-required is not set, don't complain if
-       CVSROOT and cvs-cvsroot are both unset.
-
-Sun Jan 22 21:22:22 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-       * pcl-cvs.el (cvs-parse-stderr):
-       Some changes for Cygnus's Remote CVS.  Treat
-       messages like "cvs server: Updating DIRECTORY" as we treat those like
-       "cvs update: Updating DIRECTORY".  Ignore other messages starting with
-       "cvs server".
-
-       * pcl-cvs.el (cvs-parse-stderr): Re-indent.
-
-       * .cvsignore: Add ignore list for Texinfo litter.
-
-       * Makefile (lispdir): Set appropriately for totoro.
-       * pcl-cvs.el (cvs-program, cvs-diff-program, cvs-rmdir-program): Same.
-
-Tue Jun  1 00:00:03 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * Release 1.05. (This release was promised before the end of May,
-       but I didn't quite make it.  No, I didn't fake the date above).
-
-Mon May 31 01:32:25 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * Removed the elib sub-directory. Users must now get the Elib
-       library separately.
-       * pcl-cvs.texinfo: Document it.
-
-       * pcl-cvs-lucid.el: A new version, supplied by Jamie Zawinsky,
-       added.
-
-       * pcl-cvs Id 68: Transform RCS keywords
-       * Makefile (pcl-cvs-$(VER)): Remove the $ signs in most files in
-       the distribution.
-
-       * pcl-cvs Id 76: Extra " in cvs-mode-add.
-       * pcl-cvs.el (cvs-mode-add): Don't add the extra level of quotes
-       around the log message, since it doesn't work with CVS.
-
-       * pcl-cvs Id 56: '-d <CVSROOT>' support in pcl-cvs
-       * pcl-cvs.el (cvs-change-cvsroot): New function.
-
-       * pcl-cvs Id 77: *cvs* isn't cleared properly
-       * pcl-cvs.el (cvs-do-update): Always erase the *cvs* buffer and
-       re-create the collection.
-
-       * pcl-cvs.el (cvs-do-update): Set mode-line-process in the *cvs*
-       buffer.
-       * pcl-cvs.el (cvs-mode): Reset mode-line-process.
-
-       * pcl-cvs Id 59: sort .cvsignore alphabetically!
-       * pcl-cvs.el (cvs-sort-ignore-file): New variable.
-       * pcl-cvs.el (cvs-mode-ignore): Use it.
-       * pcl-cvs.texinfo: Document it.
-
-       * pcl-cvs Id 75: Require final newline.
-       * pcl-cvs.el (cvs-commit-buffer-require-final-newline): New
-       variable.
-       * pcl-cvs.el (cvs-edit-done): Use it.
-       * pcl-cvs.texinfo: Document it.
-
-       * pcl-cvs Id 72: make clean deletes lucid-emacs.el
-       * dist-makefile (ELCFILES): Fixed a typo.
-
-       * pcl-cvs Id 46: "cvs remove f" "touch f" "cvs update f" -> parse err.
-       * pcl-cvs.el (cvs-fileinfo->type): New type: REM-EXIST.
-       * pcl-cvs.el (cvs-shadow-entry-p): A REMOVED that follows a
-       REM-EXIST is a shadow.
-       * pcl-cvs.el (cvs-parse-stderr): Recognize the "should be removed
-       and is still there" message.
-       * pcl-cvs.el (cvs-pp): Recognize REM-EXIST.
-       * pcl-cvs.el (cvs-mode-undo-local-changes): Recognize and complain
-       about REM-EXIST.  Defensive test added: complain about unknown types.
-
-       * pcl-cvs.el (cvs-mode-add): Add an extra level of quotes around
-       the log message. This is apparently needed by RCVS. <This change
-       has been removed. --ceder>.
-
-       * pcl-cvs.el (cvs-parse-stderr): Ignore output from RCVS.
-
-Tue Apr 27 00:48:40 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * pcl-cvs.el (cvs-startup-message): Now a defconst instead of a
-       defvar.
-       * pcl-cvs.el (cvs-mode-commit): Add a defvar for it.
-
-       * dist-makefile (EMACS): Use $(EMACS) instead of hard-coding 'emacs'.
-
-Sat Apr 17 12:47:10 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * Release 1.04.
-
-       * pcl-cvs.texinfo: Updated the Contributors node.
-
-       * pcl-cvs Id 58: Lucid GNU Emacs support
-       * pcl-cvs-lucid.el: New file, contributed by the people at Lucid.
-       * pcl-cvs.el: Autoload pcl-cvs-lucid if running in an Lucid GNU
-       Emacs.
-       * compile-all.el: (files-to-compile): Add pcl-cvs-lucid.
-       * dist-makefile (ELFILES, ELCFILES): Dito.
-
-       * pcl-cvs Id 55: cvs-diff-backup swaps old and new version.
-       * pcl-cvs.el (cvs-diff-backup-extractor): Old version should be
-       first.
-       * pcl-cvs.el (cvs-mode-diff-backup): Call cvs-backup-diffable
-       correctly.
-
-       * pcl-cvs Id 64: elib substitute
-       * dist-makefile (install): Warn about Elib.
-       * pcl-cvs.texinfo: Talk about Elib.
-
-       * pcl-cvs Id 50: Committing the *commit* buffer twice.
-       * pcl-cvs.el (cvs-edit-done): Report an error if cvs-commit-list
-       is empty, and empty it when the commit is done.
-
-       * pcl-cvs Id 56: '-d <CVSROOT>' support.
-       * pcl-cvs.el (cvs-cvsroot): New variable.
-       * pcl-cvs.el (cvs-do-update, all callers of cvs-execute-list): Use
-       it everywhere CVS is called, to override CVSROOT.
-       * pcl-cvs.texinfo (Customization): Document it.
-
-Thu Apr  1 00:34:55 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * pcl-cvs.el (cvs-retrieve-revision-to-tmpfile): Exit status nil
-         from call-process means everything was successful in some Emacs
-         versions.
-
-       * pcl-cvs.el (cvs-mode-map): Bind "q" to bury-buffer.
-       * pcl-cvs.texinfo: Document it.
-
-Thu Mar 11 00:05:03 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * Release 1.03-Emerge (not released).
-
-       * Makefile (pcl-cvs-$(VER)): Don't includ elib-dll-debug.el in the
-         distribution. (It's included as elib/dll-debug.el).
-
-       * pcl-cvs.el (cvs-mode): Document the "e" key (cvs-mode-emerge).
-
-Tue Mar  9 00:02:57 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * pcl-cvs.texinfo (Emerge): New node.
-
-       * pcl-cvs.el (cvs-kill-buffer-visiting): New function.
-
-       * pcl-cvs.el (cvs-mode-emerge): Handle Conflict and Merged files.
-
-       * pcl-cvs.el (cvs-retrieve-revision-to-tmpfile): Handle any revision.
-
-       * pcl-cvs.el (cvs-fileinfo-*): Store base-revision instead of
-         backup-file.
-
-       * pcl-cvs.el (cvs-backup-diffable): The file is only diffable if
-         the backup file is readable.
-
-       * pcl-cvs.el (cvs-mode-map): Bind "e" to cvs-mode-emerge instead
-         of cvs-mode-find-file (which is anyhow bound to "f").
-
-Mon Mar  8 23:06:52 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * pcl-cvs.el (cvs-mode-emerge): New function. Currently only
-         handles emerge of Modified files.
-
-       * pcl-cvs.el (cvs-retrieve-revision-to-tmpfile): New function.
-
-Sun Jan 24 20:07:18 1993  Per Cederqvist  (ceder@lysator.liu.se)
-
-       * elib-dll-debug.el: Moved to elib.
-
-Mon Jan 18 00:35:59 1993  Per Cederqvist  (ceder@mauritz)
-
-       * pcl-cvs.el (cvs-do-update): Added a probably unnecessary sit-for.
-
-       * Release 1.03-Elib-0.05.1 (not released).
-
-        * Elib 0.05 compatibility:
-       * elib-dll-debug.el, pcl-cvs-buffer.el, test-dll.el: Fix the
-         require strings.
-       * pcl-cvs.el (cvs-pp): Insert the string.
-
-       * Release 1.03-Elib-0.05 (not released).
-
-       * elib: New directory, containing the parts of elib that are
-         required for pcl-cvs. Changes to the files in that directory
-         that are present in Elib are documented in the ChangeLog of
-         Elib, not here.
-       * Makefile (pcl-cvs-$(VER)): Copy the new dir to the distribution.
-       * dist-makefile (ELFILES, ELCFILES): Don't include the Elib files.
-
-Fri Jan  8 02:43:49 1993  Per Cederqvist  (ceder@konrad)
-
-       * pcl-cvs.el (cvs-mode-map): Bind "e" to cvs-mode-find-file, like
-       in dired.
-
-Sun Jan  3 23:25:13 1993  Per Cederqvist  (ceder@konrad)
-
-       * elib-dll.el, elib-node.el, cookie.el: Moved to the elib package.
-         Pcl-cvs now requires elib.
-
-Tue Dec 29 22:06:57 1992  Per Cederqvist  (ceder@konrad)
-
-       * pcl-cvs.el: Tracked the latest (last?) rename of all functions
-         in cookie.el.
-
-Thu Sep 24 00:29:16 1992  Per Cederqvist  (ceder@robert)
-
-       * pcl-cvs.texinfo (Archives): This version is not distributed with
-       CVS 1.3, so don't claim that it is.
-
-Fri Aug 21 15:17:08 1992  Per Cederqvist  (ceder@maskros)
-
-       * pcl-cvs.el (cvs-parse-stderr): Fixed two "(set head" that should
-       be "(setq head".
-
-Thu Aug 20 05:53:58 1992  Per Cederqvist  (ceder@robin)
-
-       * cookie.el: Changes to this file is documented in the ChangeLog
-         of elib in the future.
-
-Tue Aug 18 03:30:28 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el: Don't use cookie-last-tin (which no longer exists).
-
-       * cookie.el: Use prefix cookie:: for internal functions.
-
-       * cookie.el: (cookie:enter-after, cookie:enter-before,
-       cookie:nth-cookie): Implemented.
-       * cookie.el: No longer define (impl).
-
-       * cookie.el: More renames:
-         cookie:next-cookie     -> cookie:goto-next-tin
-         cookie:previous-cookie -> cookie:goto-previous-tin
-         tin-next               -> cookie:next-tin
-         tin-previous           -> cookie:previous-tin
-         tin-nth                -> cookie:nth-tin
-         tin-delete             -> cookie:delete-tin
-         cookie:collect         -> cookie:collect-cookies
-         cookie:tin-collect     -> cookie:collect-tins
-         (new)                  -> cookie:tin-collect-cookies
-         (new)                  -> cookie:tin-collect-tins
-         cookie:refresh         -> cookie:refresh-all
-         tin-invalidate-tins    -> cookie:invalidate-tins
-
-Mon Aug 17 01:39:49 1992  Per Cederqvist  (ceder@robin)
-
-       * cookie.el (cookie:set-buffer-bind-dll-let*): New macro. Used in
-       many places instead of cookie:set-buffer-bind-dll.
-       * cookie.el (cookie:set-buffer-bind-dll): Renamed the macro
-       cookie:set-buffer to this.
-
-       * pcl-cvs.el (cvs-use-temp-buffer): Set default-directory.
-
-Sun Aug 16 20:51:30 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-add-sub): Fixed call to cvs-add-file-update-buffer.
-
-Sat Aug  8 20:28:21 1992  Per Cederqvist  (ceder@robin)
-
-       * Release 1.03-Cookie-II (not released).
-
-       * pcl-cvs.el (cvs-mode-diff-cvs): Don't care about the exit status
-       from ``cvs diff''.
-
-       * pcl-cvs.el (cvs-mode): Document cvs-mode-undo-local-changes.
-       * pcl-cvs.el (cvs-diffable): New function.
-
-       * pcl-cvs.el: Use the new cookie package.
-       * pcl-cvs.el (cvs-cookie-handle): New variable.
-       * pcl-cvs.el (cvs-do-update): User the new cookie:create
-       interface, and cookie:clear if the buffer already existed. Make
-       the buffer read-only.
-       * pcl-cvs.el (cvs-mode-next-line, cvs-mode-previous-line): New
-       functions (used instead of cookie:next-cookie and
-       cookie:previous-cookie).
-
-       * cookie.el: Major redesign. The handle that is passed to all
-       cookie functions is now a new datatype, and not the buffer that
-       the cookies resides in. This way it is possible to have more than
-       one set of cookies in a buffer. Things that used to be
-       buffer-local variables are now fields in the handle data type.
-       cookie-last-tin is no longer available.
-       * cookie.el (cookie:create): The buffer is not cleared, nor set to
-       be read-only.
-       * cookie.el (cookie:next-cookie, cookie:previous-cookie): Since
-       the first argument is now a handle and not a buffer, these can no
-       longer be called interactively. You have to write a small wrapper
-       about them.
-       * cookie.el (cookie:buffer): New function.
-
-Tue Aug  4 03:02:25 1992  Per Cederqvist  (ceder@robert)
-
-       * pcl-cvs.texinfo (Bugs): Renamed "Reporting bugs and ideas" to
-       "Bugs" and added a table of known bugs/FAQ:s.
-
-Mon Aug  3 00:19:39 1992  Per Cederqvist  (ceder@robert)
-
-       * pcl-cvs.el, pcl-cvs.texinfo: Big Renaming Time!
-         The commands that operate in the *cvs* buffer:
-             cvs-add-change-log-entry-other-window  -> cvs-mode-add-change-log-entry-other-window
-              cvs-mark-all-files        -> cvs-mode-mark-all-files
-             cvs-revert-updated-buffers -> cvs-mode-revert-updated-buffers
-             cvs-undo-local-changes     -> cvs-mode-undo-local-changes
-             cvs-unmark-up              -> cvs-mode-unmark-up
-             cvs-acknowledge            -> cvs-mode-acknowledge
-             cvs-unmark-all-files       -> cvs-mode-unmark-all-files
-             cvs-add                    -> cvs-mode-add
-             cvs-diff-backup            -> cvs-mode-diff-backup
-             cvs-commit                 -> cvs-mode-commit
-             cvs-diff-cvs               -> cvs-mode-diff-cvs
-             cvs-find-file              -> cvs-mode-find-file
-             cvs-update-no-prompt       -> cvs-mode-update-no-prompt
-             cvs-ignore                 -> cvs-mode-ignore
-             cvs-log                    -> cvs-mode-log
-             cvs-mark                   -> cvs-mode-mark
-             cvs-find-file-other-window -> cvs-mode-find-file-other-window
-             cvs-remove-file            -> cvs-mode-remove-file
-             cvs-status                 -> cvs-mode-status
-             cvs-remove-handled         -> cvs-mode-remove-handled
-             cvs-unmark                 -> cvs-mode-unmark
-
-       * pcl-cvs.el (cvs-cvs-diff-flags): Variable deleted.
-       * pcl-cvs.el (cvs-diff-cvs): Use cvs-diff-flags instead.
-       * pcl-cvs.texinfo (Customization): Update the doc.
-
-       * pcl-cvs.el (cvs-diff-cvs): Handle exit status 0 (no diffs), 1
-       (diffs) and other (error).
-       * pcl-cvs.el (cvs-execute-list): Add support for this kind of
-       thing.
-
-       * Revert buffers for committed files:
-       * pcl-cvs.el (cvs-auto-revert-after-commit): New variable.
-       * pcl-cvs.texinfo (Committing changes, Customization): Document
-       it.
-       * pcl-cvs.el (cvs-after-commit-function): New function.
-
-       * pcl-cvs.el (cvs-execute-list): Return the exit status or nil.
-       * pcl-cvs.el (cvs-edit-done, cvs-diff-cvs, cvs-remove-file,
-       cvs-undo-local-changes, cvs-add, cvs-status, cvs-log): Use the
-       exit status to generate an error message.
-
-
-       * pcl-cvs.el (cvs-do-update): It should be "cvs -n update -l", not
-       "cvs -l update -n". Put the -n and/or -l in the message that is
-       displayed in the *cvs* buffer during the update.
-
-Sat Aug  1 00:55:49 1992  Per Cederqvist  (ceder@robert)
-
-       * cookie.el (cookie-sort): New function.
-
-       * cookie.el (cookie-clear): Rewritten. No longer clears all local
-       variables.
-
-Tue Jul 28 17:21:17 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-parse-stderr): Try to handle the output from RCS
-       when it is compiled without DIFF3_BIN and a conflict occurs.
-
-       * pcl-cvs.texinfo (Getting Started): Fixed typo.
-
-       * pcl-cvs-startup.el (cvs-update-other-window): Make the autoload
-       be interactive.
-
-Mon Jul 27 19:36:40 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-revert-updated-buffers, cvs-revert-fileinfo):
-       New functions.
-       * pcl-cvs.texinfo (Reverting your buffers): Document it.
-
-       * pcl-cvs.el (cvs-fileinfo->full-path): New function.
-       * pcl-cvs.el (cvs-full-path): Use it.
-
-       * cookie.el (cookie-map, cookie-map-reverse): Better doc-
-       string. Removed the unused local variable 'result'.
-
-       * compile-all.el: Renamed elib-files to files-to-compare.
-       * compile-all.el (compile-pcl-cvs): Bind load-path in a let
-       statement instead of globally.
-
-Thu Jul 23 19:02:41 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-do-update): Check that CVSROOT is set.
-       * pcl-cvs.el (cvs-diff-cvs): Check that cvs-cvs-diff-flags is a
-       list.
-       * pcl-cvs.el (cvs-diff-backup): Check that cvs-diff-flags is a
-       list.
-
-Tue Jul 21 11:27:39 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-parse-error): Make the *cvs* buffer writeable
-       before trying to write the email message. Require sendmail before
-       trying to switch to mail-mode.
-
-       * pcl-cvs.el (cvs-do-update): Check that cvs-program exists.
-
-       * pcl-cvs.el (cvs-skip-line): Fixed bracketing error.
-
-Mon Jul 20 10:31:51 1992  Per Cederqvist  (ceder@robin)
-
-       * Release 1.03.
-
-       * pcl-cvs.el, cookie.el: Indentation fixes.
-
-       * Makefile (pcl-cvs-$(VER)): Include NEWS in the distribution.
-
-       * pcl-cvs.el (cvs-rm-program): Deleted.
-       * pcl-cvs.el (cvs-rmdir-program, cvs-lock-file): New variables.
-
-       * Handle lock files in a nicer way:
-       * pcl-cvs.el (cvs-update-filter, cvs-delete-lock,
-       cvs-lock-file-p): New functions.
-       * pcl-cvs.el (cvs-do-update, cvs-sentinel): Redirect stdout to the
-       temporary file, not stderr. Use cvs-update-filter.
-       * pcl-cvs.el (cvs-parse-update): New arguments.
-       * pcl-cvs.el (cvs-parse-buffer): Renamed to cvs-parse-update.
-       * pcl-cvs.el (cvs-stderr-file): Renamed to cvs-stdout-file.
-       * pcl-cvs.texinfo (Miscellaneous commands, Updating the
-       directory): Document cvs-delete-lock.
-
-       * pcl-cvs.el (cvs-mode): Don't reset buffer-read-only.
-
-       * pcl-cvs.el (cvs-find-file-other-window): Don't save-some-buffers.
-
-Thu Jul 16 00:19:58 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el, test-cookie-el: Use the new names from cookie.el.
-
-       * cookie.el: Big Renaming Time!
-         External functions:
-             cookie-next             ->  tin-next
-             cookie-previous         ->  tin-previous
-             cookie-nth              ->  tin-nth
-             cookie-delete           ->  tin-delete
-             cookie-filter-tins      ->  tin-filter
-             cookie-get-selection    ->  tin-get-selection
-             cookie-start-marker     ->  tin-start-marker
-             cookie-end-marker       ->  tin-end-marker
-             cookie-invalidate-tins  ->  tin-invalidate-tins
-             cookie-collect-tins     ->  tin-collect
-             cookie-collect-cookies  ->  cookie-collect
-         Internal functions:
-             cookie-create-tin            ->  cookie-create-wrapper
-             cookie-tin-start-marker      ->  cookie-wrapper-start-marker
-             cookie-tin-cookie-safe       ->  cookie-wrapper-cookie-safe
-             cookie-tin-cookie            ->  cookie-wrapper-cookie
-             set-cookie-tin-start-marker  ->  cookie-wrapper-set-start-marker
-             set-cookie-tin-cookie        ->  cookie-wrapper-set-cookie
-             cookie-tin-p                 ->  cookie-wrapper-p
-             cookie-create-tin-and-insert ->  cookie-create-wrapper-and-insert
-
-       * pcl-cvs.el (cvs-find-file, cvs-find-file-other-window): Signal
-       an appropriate error message if the *cvs* buffer is empty.
-
-       * cookie.el (cookie-create): Make the buffer read-only.
-       * cookie.el (cookie-create-tin-and-insert, cookie-refresh,
-       cookie-delete-tin-internal, cookie-refresh-tin): Bind
-       buffer-read-only to nil while changing the contents of 
-       the buffer.
-
-       * pcl-cvs.el (cvs-byte-compile-files): New function.
-       * pcl-cvs.texinfo (Miscellaneous commands): Document it.
-
-       * pcl-cvs.el (cvs-diff-ignore-marks): New variable.
-       * pcl-cvs.el (cvs-diff-cvs, cvs-diff-backup): Don't consider
-       marked files to be selected if a prefix argument is given XOR the
-       variable cvs-diff-ignore-marks is non-nil.
-       * pcl-cvs.el (cvs-get-marked): New optional argument `ignore-marks'.
-       * pcl-cvs.texinfo (Customization, Viewing differences): Document
-       this behaviour.
-
-       * pcl-cvs.el (cvs-undo-local-changes): New function.
-       * pcl-cvs.texinfo (Undoing changes): Document
-       cvs-undo-local-changes.
-       * pcl-cvs.el (cvs-mode-map): cvs-unmark-all-files moved from "U"
-       to "ESC DEL".  cvs-undo-local-changes bound to "U".
-       * pcl-cvs.texinfo (Marking files): Document ESC DEL.
-
-       * pcl-cvs.el (cvs-skip-line): New arguments. All callers updated.
-       Now calls cvs-parse-error if a parse error occurs.
-       * pcl-cvs.el (cvs-parse-error): New function that creates a bug
-       report.
-       * pcl-cvs.el (cvs-parse-stderr, cvs-parse-stdout): New arguments.
-       The only caller (cvs-parse-buffer) updated. Call cvs-parse-error
-       in case of parse error.
-
-       * pcl-cvs.el (pcl-cvs-version): New variable.
-
-       * cookie.el (cookie-create): Kill all local variables in the buffer.
-
-Fri Jul 10 11:17:40 1992  Per Cederqvist  (ceder@robin)
-
-       * Release 1.03beta1.
-
-Thu Jul  9 03:12:00 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-update-running): New variable.
-       * pcl-cvs.el (cvs-do-update): Use it instead of the previous local
-       variable cvs-process (that no longer exists).  Make sure that only
-       one `cvs update' runs at any given moment.
-       * pcl-cvs.el (cvs-sentinel): Reset cvs-update-running when the
-       update process exits.
-
-       * pcl-cvs.el (cvs-update): Switch to the *cvs* buffer.
-       * pcl-cvs.el (cvs-update-other-window): New function.
-       * pcl-cvs-startup.el (cvs-update-other-window): Added a autoload
-       for it.
-       * pcl-cvs.el (cvs-do-update): Don't pop up any buffer in a window
-       - let cvs-update or cvs-update-other-window handle that.  Also
-       don't kill the *cvs* buffer, but rather insert a "Running cvs..."
-       message into it.
-       * pcl-cvs.el (cvs-parse-buffer): Don't change the window
-       configuration.
-
-       * pcl-cvs.el (cvs-create-fileinfo, cvs-pp, cvs-fileninfo->type):
-       New type for a fileinfo: MESSAGE.
-
-       * pcl-cvs.el (cvs-cvs-buffer): Deleted the variable. Use
-       cvs-buffer-name instead. (I no longer have any plans to allow more
-       than one cvs update to run at the same time - things only get
-       confusing). Changed all places where cvs-cvs-buffer was used.
-
-       * pcl-cvs.el: Take care of update programs (the -u option in the
-       modules file):
-       * pcl-cvs.el (cvs-update-prog-output-skip-regexp): New variable.
-       * pcl-cvs.el (cvs-parse-stdout): Skip output from the update
-       program (using cvs-update-prog-output-skip-regexp).
-       * pcl-cvs.texinfo (Future enhancements): Document that the
-       solution is not as good as it should be.
-       * pcl-cvs.texinfo (Customization): Document the variable.
-
-Wed Jul  8 20:29:44 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-do-update): Check that this-dir really exists
-       and is a directory, and that this-dir/CVS exists and is a
-       directory.
-
-Tue Jul  7 01:02:24 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.texinfo (Customization): Document TMPDIR.
-
-       * This chunk of modifications should make it possible to run
-       pcl-cvs on hosts that do not line-buffer stdout (such as
-       DECstation).  They work by diverting stdout and stderr from 
-       `cvs update' and later sorting them together.
-       * pcl-cvs.el (cvs-parse-stderr): Don't fail to parse conflict
-       data.
-        * pcl-cvs.el (cvs-remove-stdout-shadows, cvs-shadow-entry-p): New
-       functions.
-       * pcl-cvs.el (cvs-parse-buffer): Use it.
-       * pcl-cvs.el (cvs-remove-empty-directories): New function.
-       * pcl-cvs.el (cvs-remove-handled, cvs-parse-buffer): Use it.
-       * pcl-cvs.el (cvs-get-current-dir): New argument ROOT-DIR. All
-       calls to cvs-get-current-dir updated.
-       * pcl-cvs.el (cvs-do-update): Allocate a tmp file. Use cvs-shell
-       (typically /bin/sh) to redirect stderr from CVS to the tmp file.
-       * pcl-cvs.el (cvs-sentinel): Handle the tmp file. Remove it when
-       it is parsed.
-       * pcl-cvs.el (cvs-parse-buffer): New argument STDERR-BUFFER. All
-       calls to cvs-parse-buffer updated. Rewritten to handle the
-       separation of stderr and stdout.
-       * pcl-cvs.el (cvs-shell, cvs-stderr-file): New variables.
-       * pcl-cvs.el (cvs-compare-fileinfos, cvs-parse-stderr,
-       cvs-parse-stdout): New functions.
-
-       * pcl-cvs.el (cvs-parse-buffer): Some modifications for output
-       from RCS 5.6.
-
-Tue Apr  7 09:11:27 1992  Per Cederqvist  (ceder@leopold)
-
-       * Release 1.02.
-
-       * pcl-cvs.el (cvs-diff-backup, cvs-edit-done, cvs-status): Call
-       save-some-buffers.
-
-       * pcl-cvs.el (cvs-diff-backup-extractor): Fixed syntax error.
-
-       * Makefile, README, compile-all.el, dist-makefile, pcl-cvs.el,
-       pcl-cvs.texinfo (XXRELEASEXX): A magic string that is substituted
-       for the current release number when a distribution is made.
-       (Release 1.01 says that it is release 1.00).
-
-       * pcl-cvs.el (cvs-find-file): Added missing pair of parenthesis.
-
-Mon Mar 30 14:25:26 1992  Per Cederqvist  (ceder@leopold)
-
-       * Release 1.01.
-
-       * pcl-cvs.el (cvs-parse-buffer): The message when waiting for a
-       lock has been changed.
-
-Sun Mar 29 05:29:57 1992  Per Cederqvist  (ceder@leopold)
-
-       * Release 1.00.
-
-       * pcl-cvs.el (cvs-do-update, cvs-sentinel, cvs-parse-buffer):
-       Major rewrite of buffer and window selection and handling.  
-       The *cvs* buffer is now killed whenever a new "cvs update" is
-       initiated.  The -update buffer is replaced with the *cvs* 
-       buffer when the update is completed.
-
-Sat Mar 28 21:03:05 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-delete-unused-temporary-buffers): Fixed it.
-
-       * pcl-cvs.el (cvs-auto-remove-handled): New variable.
-       * pcl-cvs.el (cvs-edit-done): Use it.
-       * pcl-cvs.texinfo (Customization, Removing handled entries):
-       Document it.
-
-       * pcl-cvs.el (cvs-mode): Turn of the undo feature.  It really
-       isn't useful in a cookie buffer...
-
-       * pcl-cvs.el (cvs-edit-done): Committing a file now looks more
-       like diffing a file.  The window handling is better.
-       * pcl-cvs.el (cvs-use-temp-buffer): The &optional switch is no
-       longer needed.
-
-Mon Mar 23 00:20:33 1992  Per Cederqvist  (ceder@robin)
-
-       * Release 0.97.
-
-       * pcl-cvs.el (default-directory): Make sure it always ends in a
-       slash. fileinfo->dir does NOT end in a slash, and I had forgotten
-       to call file-name-as-directory in various places.
-
-       * pcl-cvs.el (cvs-diff-backup-extractor): Signal an error if a
-       fileinfo without backup file is given.
-
-       * pcl-cvs.el (cvs-mode): Added documentation.
-
-       * pcl-cvs.el (cvs-execute-list): Fix the order of files in the
-       same directory.
-
-       * pcl-cvs.el (cvs-log-flags, cvs-status-flags): New variables.
-       * pcl-cvs.el (cvs-log, cvs-status): Use them.
-       * pcl-cvs.texinfo (Customization): Document them.
-
-       * pcl-cvs.el (cvs-diff-backup): Filter non-backup-diffable files
-       at an earlier stage, like cvs-commit does.
-
-       * pcl-cvs.el (cvs-diff-flags): New variable.
-       * pcl-cvs.el (cvs-diff-backup): Use it.
-       * pcl-cvs.texinfo (Customization): Document it.
-
-       * pcl-cvs.el (cvs-execute-single-file-list): Remove &rest before
-       last argument.  No callers needed updating.
-
-       * pcl-cvs.el (cvs-execute-list): Remove the &rest before the last
-       argument (constant-args).  Update all callers of cvs-execute-list
-       to use the new calling convention.
-       * pcl-cvs.el (cvs-cvs-diff-flags): Now a list of strings instead
-       of a string.
-       * pcl-cvs.texinfo (Customization): Document the change to
-       cvs-cvs-diff-flags.
-
-       * Release 0.96.
-
-       * pcl-cvs.el (cvs-cvs-diff-flags): New variable.
-       * pcl-cvs.el (cvs-diff-cvs): Use it.
-       * pcl-cvs.texinfo (Customization, Viewing differences): Document it.
-
-       * pcl-cvs.el (cvs-use-temp-buffe): Don't switch to the temporary
-       buffer.  Use display-buffer and set-buffer instead.  This way
-       cvs-log, cvs-status, cvs-diff-cvs and friends don't select the
-       temporary buffer. The cursor will remain in the *cvs* buffer.
-
-Sun Mar 22 21:50:18 1992  Per Cederqvist  (ceder@robin)
-
-       * pcl-cvs.el (cvs-find-file, cvs-find-file-other-window): Don't
-       prompt when reading in a directory in dired.
-
-       * Makefile (pcl-cvs-$(VER)): Include pcl-cvs-startup.el in the
-       distribution.
-
-       * dist-makefile (pcl-cvs.dvi): Don't fail even if texindex does
-       not exist.
-
-       * pcl-cvs.texinfo (@setchapternewpage): Changed from 'off' to 'on'.
-       * pcl-cvs.texinfo (Variable index): Joined into function index.
-       * pcl-cvs.texinfo (Key index): add a description about the key.
-       * pcl-cvs.texinfo: Many other small changes.
-
-Wed Mar 18 01:58:38 1992  Per Cederqvist  (ceder@leopold)
-
-       * Use GNU General Public License version 2.
-
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/INSTALL b/gnu/usr.bin/cvs/contrib/pcl-cvs/INSTALL
deleted file mode 100644 (file)
index 2edbaf5..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-This text is copied from the TeXinfo manual for pcl-cvs.
-
-Installation of the pcl-cvs program
-===================================
-
-  1. Possibly edit the file `Makefile' to reflect the situation at your
-     site.  We say "possibly" because the version of pcl-cvs included
-     with CVS uses a configuration mechanism integrated with the overall
-     mechanisms used by the CVS build and install procedures.  Thus the
-     file `Makefile' will be generated automatically from the file
-     `Makefile.in', and it should not be necessary to edit it further.
-
-     If you do have to edit the `Makefile', the only things you have to
-     change is the definition of `lispdir' and `infodir'.  The elisp
-     files will be copied to `lispdir', and the info file(s) to
-     `infodir'.
-
-  2. Configure pcl-cvs.el
-
-     There are a couple of pathnames that you have to check to make
-     sure that they match your system.  They appear early in the file
-     `pcl-cvs.el'.
-
-     *NOTE:*  If your system is running emacs 18.57 or earlier you MUST
-     uncomment the line that says:
-          (setq delete-exited-processes nil)
-
-     Setting `delete-exited-processes' to `nil' works around a bug in
-     emacs that causes it to dump core.  The bug was fixed in emacs
-     18.58.
-
-  3. Release 1.05 and later of pcl-cvs requires parts of the Elib
-     library, version 1.0 or later.  Elib is available via anonymous
-     ftp from prep.ai.mit.edu in `pub/gnu/elib-1.0.tar.gz', and from a
-     lot of other sites that mirror prep.  Get Elib, and install it,
-     before proceeding.
-
-     *NOTE:* The version of pcl-cvs included with CVS includes a copy
-     of Elib in the sub-directory `elib' under the `contrib/pcl-cvs'
-     directory.
-
-  4. Type `make install' in the source directory.  This will
-     byte-compile all `.el' files and copy the `*.elc' files into the
-     directory you specified in step 1.
-
-     If you want to install the `*.el' files too, you can type `make
-     install-el' to do so.
-
-     If you only want to create the compiled elisp files, but don't
-     want to install them, you can type `make' without parameters.
-
-  5. Edit the file `default.el' in your emacs lisp directory (usually
-     `/usr/gnu/lib/emacs/site-lisp' or something similar) and enter the
-     contents of the file `pcl-cvs-startup.el' into it.  It contains a
-     couple of `auto-load's that facilitates the use of pcl-cvs.
-
-
-Installation of the on-line manual.
-===================================
-
-  1. Create the info file(s) `pcl-cvs.info*' from `pcl-cvs.texinfo' by
-     typing `make info'.  If you don't have the program `makeinfo' you
-     can get it by anonymous ftp from e.g. `prep.ai.mit.edu' as
-     `pub/gnu/texinfo-3.7.tar.gz' (there might be a newer version there
-     when you read this).
-
-  2. Install the info file(s) `pcl-cvs.info*' into your standard `info'
-     directory.  You should be able to do this by typing `make
-     install-info'.
-
-  3. Edit the file `dir' in the `info' directory and enter one line to
-     contain a pointer to the info file(s) `pcl-cvs.info*'.  The line
-     can, for instance, look like this:
-
-          * Pcl-cvs: (pcl-cvs).           An Emacs front-end to CVS.
-
-How to make typeset documentation from pcl-cvs.texinfo
-======================================================
-
-   If you have TeX installed at your site, you can make a typeset manual
-from `pcl-cvs.texinfo'.
-
-  1. Run TeX by typing ``make pcl-cvs.dvi''.  You will not get the
-     indices unless you have the `texindex' program.
-
-  2. Convert the resulting device independent file `pcl-cvs.dvi' to a
-     form which your printer can output and print it.  If you have a
-     postscript printer there is a program, `dvi2ps', which does.  There
-     is also a program which comes together with TeX, `dvips', which
-     you can use.
-
-
--- 
-#ident "@(#)cvs/contrib/pcl-cvs:$Name:  $Id$"
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/Makefile.in b/gnu/usr.bin/cvs/contrib/pcl-cvs/Makefile.in
deleted file mode 100644 (file)
index e8ea97a..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-#
-#ident "@(#)original: dist-makefile,v 1.19 1993/05/31 22:43:45 ceder Exp "
-#
-#ident "@(#)elisp/pcl-cvs:$Name:  $:$Id: Makefile.in,v 1.1.1.3 1996/04/27 19:42:55 tholo Exp $"
-#
-# Makefile for pcl-cvs release 1.05-CVS-$Name:  $.
-# Copyright (C) 1992, 1993  Per Cederqvist
-#
-# 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 of the License, 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.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-SHELL = /bin/sh
-
-#### Start of system configuration section. ####
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-# Where to put the system-wide supplementary files
-libdir = $(prefix)/lib
-
-# Where to put the Info files
-infodir = $(prefix)/info
-
-# Where to put the manual pages.
-mandir = $(prefix)/man
-
-# Used to batch-byte-compile files.
-EMACS = emacs
-# compile with noninteractive and relatively clean environment
-BATCHFLAGS = -batch -n -q
-
-# This is the directory in which the ELCFILES will be installed.
-lispdir = $(libdir)/emacs/site-lisp
-
-#### End of system configuration section. ####
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-
-# Just in case...
-SHELL = /bin/sh
-@SET_MAKE@
-
-DISTFILES = \
-       .cvsignore ChangeLog INSTALL Makefile.in NEWS README \
-       ${ELFILES} \
-       pcl-cvs.texinfo texinfo.tex
-
-OBJDIR_DISTFILES = $(ELCFILES) pcl-cvs.aux pcl-cvs.ps
-
-# files that contain key macro definitions.  almost everything
-# depends on them because the byte-compiler inlines macro
-# expansions.  everything also depends on the byte compiler
-# options file since this might do odd things like turn off
-# certain compiler optimizations.
-CORE = 
-
-ELFILES = pcl-cvs.el pcl-cvs-lucid.el pcl-cvs-startup.el
-ELCFILES = pcl-cvs.elc pcl-cvs-lucid.elc
-INFOFILES = pcl-cvs.info*
-TEXTMPS = pcl-cvs.aux pcl-cvs.log pcl-cvs.toc pcl-cvs.dvi pcl-cvs.cp \
-       pcl-cvs.fn pcl-cvs.vr pcl-cvs.tp pcl-cvs.ky pcl-cvs.pg \
-       pcl-cvs.cps pcl-cvs.fns pcl-cvs.kys pcl-cvs.pgs pcl-cvs.tps \
-       pcl-cvs.vrs
-
-# Use cp if you don't have install.
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-MAKEINFO = makeinfo
-
-SET_TEXINPUTS = TEXINPUTS=.:$(srcdir):$$TEXINPUTS
-
-# Don Knuth's TeX formatter
-TEX = tex
-
-# auxiliary program for sorting Texinfo indices
-TEXINDEX = texindex
-
-DVIPS = dvips
-DVIPSFLAGS = 
-
-# CYGNUS LOCAL: install does not depend on info
-all: $(ELCFILES) # info
-.PHONY:        all
-
-.SUFFIXES:     .el .elc
-# We copy the .el file to the build dir--is there a cleaner way to get
-# emacs to compile the .el file from srcdir and put the .elc in the build dir?
-# (that is also why we have separate rules for pcl-cvs.elc and 
-# pcl-cvs-lucid.elc rather than just using a .el.elc rule).
-pcl-cvs.elc: pcl-cvs.el
-       @echo "You can probably ignore free variable and unknown function warnings..."
-       if test -f pcl-cvs.el; then \
-         : OK, we are building in srcdir ; \
-       else \
-         ln $(srcdir)/pcl-cvs.el . ; \
-       fi
-       $(EMACS) $(BATCHFLAGS) -f batch-byte-compile pcl-cvs.el
-pcl-cvs-lucid.elc: pcl-cvs-lucid.el
-       @echo "You can probably ignore free variable and unknown function warnings..."
-       if test -f pcl-cvs-lucid.el; then \
-         : OK, we are building in srcdir ; \
-       else \
-         ln $(srcdir)/pcl-cvs-lucid.el . ; \
-       fi
-       $(EMACS) $(BATCHFLAGS) -f batch-byte-compile pcl-cvs-lucid.el
-
-check installcheck:
-       @echo "$@ not supported in this makefile..."
-.PHONY:        check installcheck
-
-# CYGNUS LOCAL: install does not depend on install-info
-install: install-elc # install-info install-el
-
-install-el: $(ELFILES)
-       for i in $(ELFILES) ; do \
-         $(INSTALL_DATA) $$i $(lispdir)/$$i ; \
-       done
-
-install-elc: $(ELCFILES)
-       for i in $(ELCFILES) ; do \
-         $(INSTALL_DATA) $$i $(lispdir)/$$i ; \
-       done
-
-install-info: info
-       test -f pcl-cvs.info || cd $(srcdir); \
-       for i in *.info* ; do \
-         $(INSTALL_DATA) $$i $(infodir)/$$i ; \
-       done
-
-.PHONY:        install install-el install-elc install-info
-
-# mkinstalldirs isn't supported for CVS yet....
-installdirs: $(top_srcdir)/mkinstalldirs
-       $(SHELL) $(top_srcdir)/mkinstalldirs $(lispdir) $(infodir)
-.PHONY:        installdirs
-
-uninstall:
-       @echo "$@ not yet supported in this makefile..."
-.PHONY:        uninstall
-
-info: pcl-cvs.info
-.PHONY:        info
-
-pcl-cvs.info: pcl-cvs.texinfo
-       $(MAKEINFO) ${srcdir}/pcl-cvs.texinfo -o pcl-cvs.info
-
-dvi: pcl-cvs.dvi
-.PHONY:        dvi
-
-# this mess seems to be necessary to make the index right...
-pcl-cvs.dvi pcl-cvs.aux: pcl-cvs.texinfo
-       $(SET_TEXINPUTS) $(TEX) $(srcdir)/pcl-cvs.texinfo
-       $(SET_TEXINPUTS) $(TEX) $(srcdir)/pcl-cvs.texinfo
-       -$(TEXINDEX) pcl-cvs.cp pcl-cvs.fn pcl-cvs.vr pcl-cvs.tp pcl-cvs.ky \
-               pcl-cvs.pg
-       $(SET_TEXINPUTS) $(TEX) $(srcdir)/pcl-cvs.texinfo
-
-pcl-cvs.ps: pcl-cvs.dvi
-       $(DVIPS) $(DVIPSFLAGS) pcl-cvs.dvi -o pcl-cvs.ps
-
-mostlyclean clean:
-       rm -f *~ core $(ELCFILES) $(INFOFILES) $(TEXTMPS)
-.PHONY: mostlyclean clean
-
-distclean: clean
-       rm -f Makefile tags TAGS
-.PHONY: distclean
-
-realclean maintainer-clean: distclean
-       rm -f pcl-cvs.info* pcl-cvs.ps
-.PHONY: realclean maintainer-clean
-
-# you can't use ctags for lisp...
-tags TAGS:
-       etags *.el
-.PHONY: tags
-
-ls:
-       @echo $(DISTFILES)
-.PHONY: ls
-
-dist-dir: ${OBJDIR_DISTFILES} ${DISTFILES} pcl-cvs.info
-       mkdir ${DISTDIR}
-       for i in ${DISTFILES}; do \
-         ln $(srcdir)/$${i} ${DISTDIR}; \
-       done
-       ln ${OBJDIR_DISTFILES} ${DISTDIR}
-       if [ -f pcl-cvs.info-1 ]; \
-         then ln -f pcl-cvs.info-* ${DISTDIR}; \
-         else : Pacify Ultrix sh; \
-       fi
-.PHONY: dist-dir
-
-subdir = contrib/pcl-cvs
-Makefile: ../../config.status Makefile.in
-       cd ../.. && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status
-
-# CYGNUS LOCAL: don't depend on auto-re-config
-#../config.status: ../configure
-#      cd .. ; $(SHELL) config.status --recheck
-
-# CYGNUS LOCAL: don't depend on auto-re-config
-#../configure: ../configure.in
-#      cd $(top_srcdir) ; autoconf
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/NEWS b/gnu/usr.bin/cvs/contrib/pcl-cvs/NEWS
deleted file mode 100644 (file)
index d206908..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-This is the NEWS file for pcl-cvs, an Emacs elisp front-end to CVS.
-
-User-visible changes in the un-official CVS release of pcl-cvs
-from the official 1.05 release to 1.05-CVS-$Name:  $:
-
-* Support for using ChangeLog files, including hooks to automatically
-  guess CVS log entries from ChangeLog contents.
-
-* Support for client/server CVS (versions 1.5 through 1.7 and newer).
-
-* New commands for tagging files and directory trees (still needs to
-  be made to run in the background).
-
-* Better support for recognizing and handling unknown directories.
-
-* An attempt at new ediff and emerge interfaces (still needs work!),
-  including attempts to make vendor-branch merging work.
-
-* In a possibly misguided attempt to make it easier to see the effects
-  of changes that affect several files, diff output is now stored in a
-  uniqe buffer for each file.
-
-* Some commands now have default flags (cvs-*-flags).
-
-* Proper quoting of command line arguments displayed in *cvs-tmp*.
-
-* More hacking with getting CVSROOT right, though probably all
-  pointless, since CVS should do the right thing all the time.
-
-* Elib is back, at least in the CVS distribution.
-
-* Lots of minor bug fixes, tweaks, cleanup, re-indentation, etc.
-
-* Some minor tweaks, fixes, re-indentation, etc., in the
-  documentation.
-
-
-User-visible changes in pcl-cvs from 1.04 to 1.05:
-
-* Elib is no longer distributed with pcl-cvs.  You must get Elib
-  separately, for instance from ftp.lysator.liu.se in pub/emacs.
-
-* The Lucid Emacs support works again.
-
-* A new function, cvs-change-cvsroot, can be used to interactively
-  switch between CVS repositories.
-
-* The mode line in the *cvs* buffer now indicates when a "cvs update"
-  is running.
-
-* The .cvsignore file is automatically sorted alphabetically (to
-  reduce the risk of conflicts when two people add different files
-  simultaneously). This behaviour can be turned off with
-  cvs-sort-ignore-file.
-
-* A trailing newline is always added in commit log messages.  This
-  behaviour can be turned off with
-  cvs-commit-buffer-require-final-newline.
-
-* This version of pcl-cvs should work together with RCVS.  I have not
-  tested this myself, though.
-
-* Plus some bug fixes.  (Note that the version of cookie.el that is
-  distributed with pcl-cvs 1.04 contains errors that affects pcl-cvs.
-  You should get Elib 0.07).
-
-
-User-visible changes in pcl-cvs from 1.03 to 1.04:
-
-* Support for Emerge.  Hitting "e" on a file that is Modified, Merged
-  or in Conflict will start Emerge, an interactive file merger written
-  in Emacs Lisp.  This requires Emerge version 4.  Emerge is not
-  included in this package.  If you can't find it anywhere else, you
-  can get in from ftp.lysator.liu.se in pub/emacs.  This package makes
-  it a lot easier to resolve conflicts.
-
-* Emacs will now automatically revert your buffers when the CVS
-  commands pcl-cvs issues causes the file to change.  This automatic
-  revert never occurs if the buffer contents did not agree with the
-  file prior to the command.
-
-* If you are running Lucid GNU Emacs, you will get some fonts and
-  mouse support.  This was contributed from people at Lucid.
-
-* The variable cvs-cvsroot can be used to select the location if the
-  repository.  You no longer need to exit Emacs, setenv CVSROOT, and
-  start a new Emacs if you work with multiple repositories.
-
-* The "q" key can be used to hide the *cvs* buffer.
-
-* The name of the commands in the *cvs* have changed. If it was called
-  cvs-foo, it will now be called cvs-mode-foo.  See the ChangeLog
-  entry from Tue Aug  4 03:02:25 1992 for a complete list of changes.
-
-* The variable cvs-cvs-diff-flags is no longer used.  Instead,
-  cvs-diff-flags is always used.
-
-* Plus a lot of bug fixes.
-
-
-User-visible changes in pcl-cvs from 1.02 to 1.03:
-
-* Output from CVS to stdout and stderr is separated and parsed
-  independently.  In that way pcl-cvs should work regardless of
-  whether stdout is buffered or line-buffered.  Pcl-cvs should now
-  work with CVS 1.3 without modifications on hosts such as
-  DECstations.
-
-* Pcl-cvs now fully supports RCS version 5.6 as well as 5.5.
-
-* New functions:
-
-    + cvs-undo-local-changes ("U") - Undo all your modifications
-                                    to a file and get the newest
-                                    version from the repository.
-    + cvs-update-other-window     - Similar to cvs-update.
-    + cvs-byte-compile-files       - Byte compile the selected files.
-
-* cvs-update now displays the *cvs* buffer, which initially contains a
-  small message ("Running `cvs update' in /foo/bar/gazonk/...") until
-  the update is ready.  The *cvs* buffer no longer pops up when the
-  update is ready.  It often failed to pop up, due to race conditions
-  that are very hard to solve (and I doubt that they were at all
-  solvable).
-
-* cvs-unmark-all-files is moved from "U" to "ESC DEL" to be
-  "compatible" with dired.
-
-* cvs-diff ("d") and cvs-diff-backup ("b") can be configured to work
-  on only the file the cursor is positioned on, and ignore any marked
-  files.  A prefix argument toggles this.
-
-* Only one `cvs update' can be run at a time.  (It was previously
-  possible to start more than one simultaneously, but pcl-cvs could
-  not really handle more than one.)
-
-* Some rudimentary support for programs that CVS runs at update (due
-  to the -u switch in the modules file).
-
-* Pcl-cvs now automatically generates a bug report if it can't parse
-  the output from CVS.
-
-* The *cvs* buffer is read-only.
-
-* Pcl-cvs now creates temporary files in $TMPDIR if that environment
-  variable is set (otherwise it uses /tmp).
-
----End of file NEWS---
-#ident "@(#)cvs/contrib/pcl-cvs:$Name:  $:$Id: NEWS,v 1.1.1.2 1996/01/30 00:19:06 tholo Exp $"
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/README b/gnu/usr.bin/cvs/contrib/pcl-cvs/README
deleted file mode 100644 (file)
index 20c11f0..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-This is the readme file for pcl-cvs, release 1.05-CVS-$Name:  $.
-
-Pcl-cvs is a front-end to CVS versions 1.5 through 1.7.  It integrates
-the most frequently used CVS commands into an emacs interface.
-
-There may be some configuration that needs to be done in pcl-cvs.el to
-get it to work.  See the instructions in the file INSTALL.
-
-Full documentation is in Texinfo format in the file pcl-cvs.texinfo.  To
-browse this document online, or in the emacs info mode, you will need to
-process this file with the makeinfo program, which can also be found on
-prep.ai.mit.edu in pub/gnu.
-
-If you have been using a previous version of pcl-cvs (for instance the
-official 1.05 release, or any previous releases) you should read through
-the file NEWS to see what has changed.
-
-This release has been tested under, Emacs 19.28 and Emacs 19.30.
-
-Per Cederqvist
-(updated by Jim Blandy, Greg A. Woods, Karl Fogel)
-
--- 
-#OrigId        "@(#) Id: README,v 1.14 1993/05/31 22:43:36 ceder Exp "
-#ident "@(#)cvs/contrib/pcl-cvs:$Name:  $:$Id: README,v 1.1.1.2 1996/01/30 00:19:08 tholo Exp $"
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-lucid.el b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-lucid.el
deleted file mode 100644 (file)
index 8695f67..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-;;; Mouse and font support for PCL-CVS 1.3 running in Lucid GNU Emacs
-;; @(#) Id: pcl-cvs-lucid.el,v 1.2 1993/05/31 19:37:34 ceder Exp 
-;; Copyright (C) 1992-1993 Free Software Foundation, Inc.
-
-;; 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.
-
-
-;; This simply adds a menu of the common CVS commands to the menubar and to
-;; the right mouse button.  Clicking right moves point, and then pops up a
-;; menu from which commands can be executed.
-;; 
-;; This could stand to be a lot more clever: for example, the "Commit Changes"
-;; command should only be active on files for which there is something to
-;; commit.  Also, some indication of which files the command applies to
-;; (especially in the presence of multiple marked files) would be nice.
-;;
-;; Middle-click runs find-file.
-
-
-;(require 'pcl-cvs)
-(load "pcl-cvs.el")
-
-(defvar cvs-menu
-  '("CVS"
-    ["Find File"                       cvs-mode-find-file              t]
-    ["Find File Other Window"          cvs-mode-find-file-other-window t]
-    ["Interactively Merge (emerge)"    cvs-mode-emerge                 t]
-    ["Diff against Repository"         cvs-mode-diff-cvs               t]
-    ["Diff against Backup Version"     cvs-mode-diff-backup            t]
-    "----"
-    ["Commit Changes to Repository"    cvs-mode-commit                 t]
-    ["Revert File from Repository"     cvs-mode-undo-local-changes     t]
-    ["Add File to Repository"          cvs-mode-add                    t]
-    ["Remove File from Repository"     cvs-mode-remove-file            t]
-    ["Ignore File"                     cvs-mode-ignore                 t]
-    ["Hide File"                       cvs-mode-acknowledge            t]
-    ["Hide Handled Files"              cvs-mode-remove-handled         t]
-    "----"
-    ["Add ChangeLog Entry"     cvs-mode-add-change-log-entry-other-window t]
-    ["Show CVS Log"                    cvs-mode-log                    t]
-    ["Show CVS Status"                 cvs-mode-status                 t]
-    "----"
-    ["Mark File"                       cvs-mode-mark                   t]
-    ["Unmark File"                     cvs-mode-unmark                 t]
-    ["Mark All Files"                  cvs-mode-mark-all-files         t]
-    ["Unmark All Files"                        cvs-mode-unmark-all-files       t]
-    "----"
-    ["Quit"                            bury-buffer                     t]
-    ))
-
-(defun cvs-menu (e)
-  (interactive "e")
-  (mouse-set-point e)
-  (beginning-of-line)
-  (or (looking-at "^[* ] ") (error "No CVS file line here"))
-  (popup-menu cvs-menu))
-
-(defun cvs-mouse-find-file (e)
-  (interactive "e")
-  (mouse-set-point e)
-  (beginning-of-line)
-  (or (looking-at "^[* ] ") (error "No CVS file line here"))
-  (cvs-mode-find-file (point)))
-
-(define-key cvs-mode-map 'button3 'cvs-menu)
-(define-key cvs-mode-map 'button2 'cvs-mouse-find-file)
-
-(make-face 'cvs-header-face)
-(make-face 'cvs-filename-face)
-(make-face 'cvs-status-face)
-
-(or (face-differs-from-default-p 'cvs-header-face)
-    (copy-face 'italic 'cvs-header-face))
-
-(or (face-differs-from-default-p 'cvs-filename-face)
-    (copy-face 'bold 'cvs-filename-face))
-
-(or (face-differs-from-default-p 'cvs-status-face)
-    (copy-face 'bold-italic 'cvs-status-face))
-
-
-(defun pcl-mode-motion-highlight-line (event)
-  (if (save-excursion
-       (let* ((window (event-window event))
-              (buffer (and window (window-buffer window)))
-              (point (and buffer (event-point event))))
-         (and point
-              (progn
-                (set-buffer buffer)
-                (goto-char point)
-                (beginning-of-line)
-                (looking-at "^[* ] ")))))
-      (mode-motion-highlight-line event)))
-
-(defconst pcl-cvs-font-lock-keywords
-  '(("^In directory \\(.+\\)$" 1 cvs-header-face)
-    ("^[* ] \\w+ +\\(ci\\)" 1 cvs-status-face)
-    ("^[* ] \\(Conflict\\|Merged\\)" 1 cvs-status-face)
-    ("^[* ] \\w+ +\\(ci +\\)?\\(.+\\)$" 2 cvs-filename-face)
-    )
-  "Patterns to highlight in the *cvs* buffer.")
-
-(defun pcl-cvs-fontify ()
-  ;;
-  ;; set up line highlighting
-  (require 'mode-motion)
-  (setq mode-motion-hook 'pcl-mode-motion-highlight-line)
-  ;;
-  ;; set up menubar
-  (if (and current-menubar (not (assoc "CVS" current-menubar)))
-      (progn
-       (set-buffer-menubar (copy-sequence current-menubar))
-       (add-menu nil "CVS" (cdr cvs-menu))))
-  ;;
-  ;; fontify mousable lines
-  (set (make-local-variable 'font-lock-keywords) pcl-cvs-font-lock-keywords)
-  (font-lock-mode 1)
-  )
-
-(add-hook 'cvs-mode-hook 'pcl-cvs-fontify)
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-lucid.elc b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-lucid.elc
deleted file mode 100644 (file)
index 0d6baab..0000000
Binary files a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-lucid.elc and /dev/null differ
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-startup.el b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs-startup.el
deleted file mode 100644 (file)
index 7e0ed35..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;;;#ident "@(#)OrigId: pcl-cvs-startup.el,v 1.4 1993/05/31 18:40:33 ceder Exp "
-;;;
-;;;#ident "@(#)cvs/contrib/pcl-cvs:$Name:  $:$Id: pcl-cvs-startup.el,v 1.1.1.2 1996/01/30 00:19:13 tholo Exp $"
-;;;
-(autoload 'cvs-update "pcl-cvs"
-         "Run a 'cvs update' in the current working directory. Feed the
-output to a *cvs* buffer and run cvs-mode on it.
-If optional prefix argument LOCAL is non-nil, 'cvs update -l' is run."
-         t)
-
-(autoload 'cvs-update-other-window "pcl-cvs"
-         "Run a 'cvs update' in the current working directory. Feed the
-output to a *cvs* buffer, display it in the other window, and run
-cvs-mode on it.
-
-If optional prefix argument LOCAL is non-nil, 'cvs update -l' is run."
-         t)
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.aux b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.aux
deleted file mode 100644 (file)
index 2ecac17..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-'xrdef {Installation-title}{Installation}
-'xrdef {Installation-pg}{1}
-'xrdef {Installation-snt}{Chapter'tie1}
-'xrdef {Pcl-cvs installation-title}{Installation of the pcl-cvs program}
-'xrdef {Pcl-cvs installation-pg}{1}
-'xrdef {Pcl-cvs installation-snt}{Section'tie1.1}
-'xrdef {On-line manual installation-title}{Installation of the on-line manual.}
-'xrdef {On-line manual installation-pg}{2}
-'xrdef {On-line manual installation-snt}{Section'tie1.2}
-'xrdef {Typeset manual installation-title}{How to make typeset documentation from pcl-cvs.texinfo}
-'xrdef {Typeset manual installation-pg}{2}
-'xrdef {Typeset manual installation-snt}{Section'tie1.3}
-'xrdef {About pcl-cvs-title}{About pcl-cvs}
-'xrdef {About pcl-cvs-pg}{3}
-'xrdef {About pcl-cvs-snt}{Chapter'tie2}
-'xrdef {Contributors-title}{Contributors to pcl-cvs}
-'xrdef {Contributors-pg}{3}
-'xrdef {Contributors-snt}{Section'tie2.1}
-'xrdef {Archives-title}{Where can I get pcl-cvs?}
-'xrdef {Archives-pg}{4}
-'xrdef {Archives-snt}{Section'tie2.2}
-'xrdef {Getting started-title}{Getting started}
-'xrdef {Getting started-pg}{5}
-'xrdef {Getting started-snt}{Chapter'tie3}
-'xrdef {Buffer contents-title}{Buffer contents}
-'xrdef {Buffer contents-pg}{7}
-'xrdef {Buffer contents-snt}{Chapter'tie4}
-'xrdef {File status-title}{File status}
-'xrdef {File status-pg}{7}
-'xrdef {File status-snt}{Section'tie4.1}
-'xrdef {Selected files-title}{Selected files}
-'xrdef {Selected files-pg}{8}
-'xrdef {Selected files-snt}{Section'tie4.2}
-'xrdef {Commands-title}{Commands}
-'xrdef {Commands-pg}{10}
-'xrdef {Commands-snt}{Chapter'tie5}
-'xrdef {Updating the directory-title}{Updating the directory}
-'xrdef {Updating the directory-pg}{10}
-'xrdef {Updating the directory-snt}{Section'tie5.1}
-'xrdef {Movement commands-title}{Movement Commands}
-'xrdef {Movement commands-pg}{10}
-'xrdef {Movement commands-snt}{Section'tie5.2}
-'xrdef {Marking files-title}{Marking files}
-'xrdef {Marking files-pg}{11}
-'xrdef {Marking files-snt}{Section'tie5.3}
-'xrdef {Committing changes-title}{Committing changes}
-'xrdef {Committing changes-pg}{11}
-'xrdef {Committing changes-snt}{Section'tie5.4}
-'xrdef {Editing files-title}{Editing files}
-'xrdef {Editing files-pg}{12}
-'xrdef {Editing files-snt}{Section'tie5.5}
-'xrdef {Getting info about files-title}{Getting info about files}
-'xrdef {Getting info about files-pg}{12}
-'xrdef {Getting info about files-snt}{Section'tie5.6}
-'xrdef {Adding and removing files-title}{Adding and removing files}
-'xrdef {Adding and removing files-pg}{13}
-'xrdef {Adding and removing files-snt}{Section'tie5.7}
-'xrdef {Undoing changes-title}{Undoing changes}
-'xrdef {Undoing changes-pg}{13}
-'xrdef {Undoing changes-snt}{Section'tie5.8}
-'xrdef {Removing handled entries-title}{Removing handled entries}
-'xrdef {Removing handled entries-pg}{14}
-'xrdef {Removing handled entries-snt}{Section'tie5.9}
-'xrdef {Ignoring files-title}{Ignoring files}
-'xrdef {Ignoring files-pg}{14}
-'xrdef {Ignoring files-snt}{Section'tie5.10}
-'xrdef {Viewing differences-title}{Viewing differences}
-'xrdef {Viewing differences-pg}{14}
-'xrdef {Viewing differences-snt}{Section'tie5.11}
-'xrdef {Invoking Ediff-title}{Running ediff}
-'xrdef {Invoking Ediff-pg}{15}
-'xrdef {Invoking Ediff-snt}{Section'tie5.12}
-'xrdef {Invoking Emerge-title}{Running emerge}
-'xrdef {Invoking Emerge-pg}{15}
-'xrdef {Invoking Emerge-snt}{Section'tie5.13}
-'xrdef {Reverting your buffers-title}{Reverting your buffers}
-'xrdef {Reverting your buffers-pg}{16}
-'xrdef {Reverting your buffers-snt}{Section'tie5.14}
-'xrdef {Miscellaneous commands-title}{Miscellaneous commands}
-'xrdef {Miscellaneous commands-pg}{16}
-'xrdef {Miscellaneous commands-snt}{Section'tie5.15}
-'xrdef {Customization-title}{Customization}
-'xrdef {Customization-pg}{18}
-'xrdef {Customization-snt}{Chapter'tie6}
-'xrdef {Future enhancements-title}{Future enhancements}
-'xrdef {Future enhancements-pg}{20}
-'xrdef {Future enhancements-snt}{Chapter'tie7}
-'xrdef {Bugs-title}{Bugs (known and unknown)}
-'xrdef {Bugs-pg}{22}
-'xrdef {Bugs-snt}{Chapter'tie8}
-'xrdef {COPYING-title}{GNU GENERAL PUBLIC LICENSE}
-'xrdef {COPYING-pg}{23}
-'xrdef {COPYING-snt}{Appendix'tie'char65{}}
-'xrdef {Function and Variable Index-title}{Function and Variable Index}
-'xrdef {Function and Variable Index-pg}{24}
-'xrdef {Function and Variable Index-snt}{}
-'xrdef {Concept Index-title}{Concept Index}
-'xrdef {Concept Index-pg}{25}
-'xrdef {Concept Index-snt}{}
-'xrdef {Key Index-title}{Key Index}
-'xrdef {Key Index-pg}{27}
-'xrdef {Key Index-snt}{}
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.el b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.el
deleted file mode 100644 (file)
index 7705f08..0000000
+++ /dev/null
@@ -1,3444 +0,0 @@
-;;;
-;;;#ident "@(#)OrigId: pcl-cvs.el,v 1.93 1993/05/31 22:44:00 ceder Exp "
-;;;
-;;;#ident "@(#)cvs/contrib/pcl-cvs:$Name:  $:$Id: pcl-cvs.el,v 1.1.1.2 1996/01/30 00:19:09 tholo Exp $"
-;;;
-;;; pcl-cvs.el -- A Front-end to CVS 1.3 or later.
-;;; Release 1.05-CVS-$Name:  $.
-;;; Copyright (C) 1991, 1992, 1993  Per Cederqvist
-
-;;; 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 of the License, 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.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program; if not, write to the Free Software
-;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;;; See below for installation instructions.
-
-;;; There is an TeXinfo file that describes this package.  You should read it
-;;; to get the most from this package.
-
-;;; Mail questions and bug reports regarding this version (as included in
-;;; CVS-1.7 or newer) to the pcl-cvs support team at <pcl-cvs@cyclic.com>.
-
-;;; Don't try to use this with CVS 1.2 or earlier.  It won't work.  Get CVS 1.7
-;;; or newer.  Use the version of RCS best suited for the version of CVS you're
-;;; using.
-
-; (require 'cookie)                    ; from ELIB-1.0
-(load "cookie.el")
-(require 'add-log)                     ; for all the ChangeLog goodies
-
-(provide 'pcl-cvs)
-
-;;; -------------------------------------------------------
-;;;        START OF THINGS TO CHECK WHEN INSTALLING
-
-;; also use $GNU here, since may folks might install CVS as a GNU package
-;;
-(defvar local-path (cond
-                     ((getenv "LOCAL")
-                      (getenv "LOCAL"))
-                     ((getenv "GNU")
-                      (getenv "GNU"))
-                     (t
-                      "/usr/local"))
-  "*Path prefix for most locally installed things.")
-
-;; this isn't likely to be right all the time....
-;;
-(defvar local-gnu-path (cond
-                     ((getenv "GNU")
-                      (getenv "GNU"))
-                     (t
-                      "/usr/local"))   ; or "/usr/gnu"?
-  "*Path prefix for locally installed GNU software.")
-
-(defvar cvs-program (concat local-path "/bin/cvs")
-  "*Full path to the cvs executable.")
-
-;; SunOS-4.1.1_U1 has "diff.c 1.12 88/08/04 SMI; from UCB 4.6 86/04/03"
-;;
-(defvar cvs-diff-program (concat local-gnu-path "/bin/diff")
-  "*Full path to the best diff program you've got.
-NOTE:  there are some nasty bugs in the context diff variants of some vendor
-versions, such as the one in SunOS-4.1.1_U1")
-
-(defvar cvs-rmdir-program "/bin/rmdir"
-  "*Full path to the rmdir program.  Typically /bin/rmdir.")
-
-(defvar cvs-shell "/bin/sh"
-  "*Full path to a shell that can do redirection on stdout.")
-
-;;; Options to control various features:
-
-(defvar cvs-changelog-full-paragraphs t
-  "If non-nil, include full ChangeLog paragraphs in the CVS log.
-This may be set in the ``local variables'' section of a ChangeLog, to
-indicate the policy for that ChangeLog.
-
-A ChangeLog paragraph is a bunch of log text containing no blank lines;
-a paragraph usually describes a set of changes with a single purpose,
-but perhaps spanning several functions in several files.  Changes in
-different paragraphs are unrelated.
-
-You could argue that the CVS log entry for a file should contain the
-full ChangeLog paragraph mentioning the change to the file, even though
-it may mention other files, because that gives you the full context you
-need to understand the change.  This is the behaviour you get when this
-variable is set to t.
-
-On the other hand, you could argue that the CVS log entry for a change
-should contain only the text for the changes which occurred in that
-file, because the CVS log is per-file.  This is the behaviour you get
-when this variable is set to nil.")
-
-(defvar cvs-cvsroot-required nil
-  "*Specifies whether CVS needs to be told where the repository is.
-
-In CVS 1.3, if your CVSROOT environment variable is not set, and you
-do not set the `cvs-cvsroot' lisp variable, CVS will have no idea
-where to find the repository, and refuse to run.  CVS 1.4 and later
-store the repository path with the working directories, so most
-operations don't need to be told where the repository is.
-
-If you work with multiple repositories with CVS 1.4, it's probably
-advisable to leave your CVSROOT environment variable unset, set this
-variable to nil, and let CVS figure out where the repository is for
-itself.")
-
-(defvar cvs-cvsroot nil
-  "*Specifies where the (current) cvs master repository is.
-Overrides the $CVSROOT variable by sending \" -d dir\" to all cvs commands.
-This switch is useful if you have multiple CVS repositories, and are not using
-a modern version of CVS that stores the current repository in CVS/Root.")
-
-;; Uncomment the following line if you are running on 18.57 or earlier.
-;(setq delete-exited-processes nil)
-;; Emacs version 18.57 and earlier is likely to crash if
-;; delete-exited-processes is t, since the sentinel uses lots of
-;; memory, and 18.57 forgets to GCPROT a variable if
-;; delete-exited-processes is t.
-
-;;;         END OF THINGS TO CHECK WHEN INSTALLING
-;;; --------------------------------------------------------
-
-(defconst pcl-cvs-version "1.05-CVS-$Name:  $"
-  "A string denoting the current release version of pcl-cvs.")
-
-;; You are NOT allowed to disable this message by default.  However, you
-;; are encouraged to inform your users that by adding
-;;     (setq cvs-inhibit-copyright-message t)
-;; to their .emacs they can get rid of it.  Just don't add that line
-;; to your default.el!
-(defvar cvs-inhibit-copyright-message nil
-  "*Non-nil means don't display a Copyright message in the ``*cvs*'' buffer.")
-
-(defconst cvs-startup-message
-  (if cvs-inhibit-copyright-message
-      "PCL-CVS release 1.05-CVS-$Name:  $"
-    "PCL-CVS release 1.05 from CVS release $Name:  $.
-Copyright (C) 1992, 1993 Per Cederqvist
-Pcl-cvs comes with absolutely no warranty; for details consult the manual.
-This is free software, and you are welcome to redistribute it under certain
-conditions; again, consult the TeXinfo manual for details.")
-  "*Startup message for CVS.")
-
-(defconst pcl-cvs-bugs-address "pcl-cvs-auto-bugs@cyclic.com"
-  "The destination address used for the default bug report form.")
-
-(defvar cvs-stdout-file nil
-  "Name of the file that holds the output that CVS sends to stdout.
-This variable is buffer local.")
-
-(defvar cvs-lock-file nil
-  "Full path to a lock file that CVS is waiting for (or was waiting for).")
-
-(defvar cvs-bakprefix ".#"
-  "The prefix that CVS prepends to files when rcsmerge'ing.")
-
-(defvar cvs-erase-input-buffer nil
-  "*Non-nil if input buffers should be cleared before asking for new info.")
-
-(defvar cvs-auto-remove-handled nil
-  "*Non-nil if cvs-mode-remove-handled should be called automatically.
-If this is set to any non-nil value, entries that do not need to be checked in
-will be removed from the *cvs* buffer after every cvs-mode-commit command.")
-
-(defvar cvs-auto-remove-handled-directories nil
-  "*Non-nil if cvs-mode-remove-handled and cvs-update should automatically
-remove empty directories.
-If this is set to any non-nil value, directories that do not contain any files
-to be checked in will be removed from the *cvs* buffer.")
-
-(defvar cvs-sort-ignore-file t
-  "*Non-nil if cvs-mode-ignore should sort the .cvsignore automatically.")
-
-(defvar cvs-auto-revert-after-commit t
-  "*Non-nil if committed buffers should be automatically reverted.")
-
-(defconst cvs-cursor-column 14
-  "Column to position cursor in in cvs-mode.
-Column 0 is left-most column.")
-
-(defvar cvs-mode-map nil
-  "Keymap for the cvs mode.")
-
-(defvar cvs-edit-mode-map nil
-  "Keymap for the cvs edit mode (used when editing cvs log messages).")
-
-(defvar cvs-buffer-name "*cvs*"
-  "Name of the cvs buffer.")
-
-(defvar cvs-commit-prompt-buffer "*cvs-commit-message*"
-  "Name of buffer in which the user is prompted for a log message when
-committing files.")
-
-(defvar cvs-commit-buffer-require-final-newline t
-  "*t says silently put a newline at the end of commit log messages.
-Non-nil but not t says ask user whether to add a newline in each such case.
-nil means don't add newlines.")
-
-(defvar cvs-temp-buffer-name "*cvs-tmp*"
-  "*Name of the cvs temporary buffer.
-Output from cvs is placed here by synchronous commands.")
-
-(defvar cvs-diff-ignore-marks nil
-  "*Non-nil if cvs-diff and cvs-mode-diff-backup should ignore any marked files.
-Normally they run diff on the files that are marked (with cvs-mode-mark),
-or the file under the cursor if no files are marked.  If this variable
-is set to a non-nil value they will always run diff on the file on the
-current line.")
-
-;;; (setq cvs-status-flags '("-v"))
-(defvar cvs-status-flags '("-v")
-  "*List of flags to pass to ``cvs status''.  Default is \"-v\".")
-
-;;; (setq cvs-log-flags nil)
-(defvar cvs-log-flags nil
-  "*List of flags to pass to ``cvs log''.  Default is none.")
-
-;;; (setq cvs-tag-flags nil)
-(defvar cvs-tag-flags nil
-  "*List of extra flags to pass to ``cvs tag''.  Default is none.")
-
-;;; (setq cvs-rtag-flags nil)
-(defvar cvs-rtag-flags nil
-  "*List of extra flags to pass to ``cvs rtag''.  Default is none.")
-
-;;; (setq cvs-diff-flags '("-u"))
-(defvar cvs-diff-flags '("-u")
-  "*List of flags to use as flags to pass to ``diff'' and ``cvs diff''.
-Used by cvs-mode-diff-cvs and cvs-mode-diff-backup.  Default is \"-u\".
-
-Set this to \"-u\" to get a Unidiff format, or \"-c\" to get context diffs.")
-
-;;; (setq cvs-update-optional-flags nil)
-(defvar cvs-update-optional-flags nil
-  "*List of strings to use as optional flags to pass to ``cvs update''.  Used
-by cvs-do-update, called by cvs-update, cvs-update-other-window,
-cvs-mode-update-no-prompt, and cvs-examine.  Default is none.
-
-For example set this to \"-j VENDOR_PREV_RELEASE -j VENDOR_TOP_RELEASE\" to
-perform an update after a new vendor release has been imported.
-
-To restrict the update to the current working directory, set this to \"-l\".")
-
-(defvar cvs-update-prog-output-skip-regexp "$"
-  "*A regexp that matches the end of the output from all cvs update programs.
-That is, output from any programs that are run by CVS (by the flag -u in the
-`modules' file - see cvs(5)) when `cvs update' is performed should terminate
-with a line that this regexp matches.  It is enough that some part of the line
-is matched.
-
-The default (a single $) fits programs without output.")
-
-;;; --------------------------------------------------------
-;;; The variables below are used internally by pcl-cvs.  You should
-;;; never change them.
-
-(defvar cvs-buffers-to-delete nil
-  "List of temporary buffers that should be discarded as soon as possible.
-Due to a bug in emacs 18.57 the sentinel can't discard them reliably.")
-
-(defvar cvs-update-running nil
-  "This is set to nil when no process is running, and to
-the process when a cvs update process is running.")
-
-(defvar cvs-cookie-handle nil
-  "Handle for the cookie structure that is displayed in the *cvs* buffer.")
-
-(defvar cvs-commit-list nil
-  "Used internally by pcl-cvs.")
-
-;;; The cvs data structure:
-;;;
-;;; When the `cvs update' is ready we parse the output.  Every file
-;;; that is affected in some way is added as a cookie of fileinfo
-;;; (as defined below).
-;;;
-
-;;; cvs-fileinfo
-
-;;; Constructor:
-
-(defun cvs-create-fileinfo (type
-                           dir
-                           file-name
-                           full-log)
-  "Create a fileinfo from all parameters.
-Arguments:  TYPE DIR FILE-NAME FULL-LOG.
-A fileinfo is a vector with the following fields:
-
-[0]  handled         True if this file doesn't require further action.
-[1]  marked          t/nil
-[2]  type            One of
-                       UPDATED    - file copied from repository
-                       PATCHED    - file update with patch from repository
-                       MODIFIED   - modified by you, unchanged in
-                                    repository
-                       ADDED      - added by you, not yet committed
-                       REMOVED    - removed by you, not yet committed
-                       CVS-REMOVED- removed, since file no longer exists
-                                    in the repository.
-                       MERGED     - successful merge
-                       CONFLICT   - conflict when merging (if pcl-cvs did it)
-                       REM-CONFLICT-removed in repository, but altered
-                                    locally.
-                       MOD-CONFLICT-removed locally, changed in repository.
-                        REM-EXIST  - removed locally, but still exists.
-                       DIRCHANGE  - A change of directory.
-                       UNKNOWN    - An unknown file.
-                       UNKNOWN-DIR- An unknown directory.
-                       MOVE-AWAY  - A file that is in the way.
-                       REPOS-MISSING- The directory has vanished from the
-                                      repository.
-                        MESSAGE    - This is a special fileinfo that is used
-                                      to display a text that should be in
-                                       full-log.
-[3]  dir             Directory the file resides in.  Should not end with slash.
-[4]  file-name       The file name.
-[5]  backup-file      The name of a backup file created during a merge.
-                        Only valid for MERGED and CONFLICT files.
-[6]  base-revision    The revision that the working file was based on.
-                        Only valid for MERGED and CONFLICT files.
-[7]  head-revision    The revision that the newly merged changes came from
-                        Only valid for MERGED and CONFLICT files.
-[8]  backup-revision  The revision of the cvs backup file (original working rev.)
-                        Only valid for MERGED and CONFLICT files.
-[9]  cvs-diff-buffer  A buffer that contains a 'cvs diff file'.
-[10] vendor-diff-buffer  A buffer that contains a 'diff base-file head-file'.
-[11] backup-diff-buffer  A buffer that contains a 'diff file backup-file'.
-[12] full-log        The output from cvs, unparsed.
-[13] mod-time        Modification time of file used for *-diff-buffer."
-
-  (cons
-   'CVS-FILEINFO
-   (vector nil nil type dir file-name nil nil nil nil nil nil nil full-log nil nil)))
-
-;;; Selectors:
-
-(defun cvs-fileinfo->handled (cvs-fileinfo)
-  "Get the  `handled' field from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 0))
-
-(defun cvs-fileinfo->marked (cvs-fileinfo)
-  "Check if CVS-FILEINFO is marked."
-  (elt (cdr cvs-fileinfo) 1))
-
-(defun cvs-fileinfo->type (cvs-fileinfo)
-  "Get type from CVS-FILEINFO.
-Type is one of UPDATED, PATCHED, MODIFIED, ADDED, REMOVED, CVS-REMOVED, MERGED,
-CONFLICT, REM-CONFLICT, MOD-CONFLICT, REM-EXIST, DIRCHANGE, UNKNOWN,
-UNKNOWN-DIR, MOVE-AWAY, REPOS-MISSING or MESSAGE."
-  (elt (cdr cvs-fileinfo) 2))
-
-(defun cvs-fileinfo->dir (cvs-fileinfo)
-  "Get dir from CVS-FILEINFO.
-The directory name does not end with a slash."
-  (elt (cdr cvs-fileinfo) 3))
-
-(defun cvs-fileinfo->file-name (cvs-fileinfo)
-  "Get file-name from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 4))
-
-(defun cvs-fileinfo->backup-file (cvs-fileinfo)
-  "Get backup-file from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 5))
-
-(defun cvs-fileinfo->base-revision (cvs-fileinfo)
-  "Get the base revision from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 6))
-
-(defun cvs-fileinfo->head-revision (cvs-fileinfo)
-  "Get the head revision from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 7))
-
-(defun cvs-fileinfo->backup-revision (cvs-fileinfo)
-  "Get the backup revision from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 8))
-
-(defun cvs-fileinfo->cvs-diff-buffer (cvs-fileinfo)
-  "Get cvs-diff-buffer from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 9))
-
-(defun cvs-fileinfo->vendor-diff-buffer (cvs-fileinfo)
-  "Get backup-diff-buffer from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 10))
-
-(defun cvs-fileinfo->backup-diff-buffer (cvs-fileinfo)
-  "Get backup-diff-buffer from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 11))
-
-(defun cvs-fileinfo->full-log (cvs-fileinfo)
-  "Get full-log from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 12))
-
-(defun cvs-fileinfo->mod-time (cvs-fileinfo)
-  "Get mod-time from CVS-FILEINFO."
-  (elt (cdr cvs-fileinfo) 13))
-
-;;; Modifiers:
-
-(defun cvs-set-fileinfo->handled (cvs-fileinfo newval)
-  "Set handled in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 0 newval))
-
-(defun cvs-set-fileinfo->marked (cvs-fileinfo newval)
-  "Set marked in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 1 newval))
-
-(defun cvs-set-fileinfo->type (cvs-fileinfo newval)
-  "Set type in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 2 newval))
-
-(defun cvs-set-fileinfo->dir (cvs-fileinfo newval)
-  "Set dir in CVS-FILEINFO to NEWVAL.
-The directory should now end with a slash."
-  (aset (cdr cvs-fileinfo) 3 newval))
-
-(defun cvs-set-fileinfo->file-name (cvs-fileinfo newval)
-  "Set file-name in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 4 newval))
-
-(defun cvs-set-fileinfo->backup-file (cvs-fileinfo newval)
-  "Set backup-file in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 5 newval))
-
-(defun cvs-set-fileinfo->base-revision (cvs-fileinfo newval)
-  "Set base-revision in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 6 newval))
-
-(defun cvs-set-fileinfo->head-revision (cvs-fileinfo newval)
-  "Set head-revision in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 7 newval))
-
-(defun cvs-set-fileinfo->backup-revision (cvs-fileinfo newval)
-  "Set backup-revision in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 8 newval))
-
-(defun cvs-set-fileinfo->cvs-diff-buffer (cvs-fileinfo newval)
-  "Set cvs-diff-buffer in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 9 newval))
-
-(defun cvs-set-fileinfo->vendor-diff-buffer (cvs-fileinfo newval)
-  "Set vendor-diff-buffer in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 10 newval))
-
-(defun cvs-set-fileinfo->backup-diff-buffer (cvs-fileinfo newval)
-  "Set backup-diff-buffer in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 11 newval))
-
-(defun cvs-set-fileinfo->full-log (cvs-fileinfo newval)
-  "Set full-log in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 12 newval))
-
-(defun cvs-set-fileinfo->mod-time (cvs-fileinfo newval)
-  "Set full-log in CVS-FILEINFO to NEWVAL."
-  (aset (cdr cvs-fileinfo) 13 newval))
-
-;;; Predicate:
-
-(defun cvs-fileinfo-p (object)
-  "Return t if OBJECT is a cvs-fileinfo."
-  (eq (car-safe object) 'CVS-FILEINFO))
-
-;;;; End of types.
-
-;;----------
-(defun cvs-use-temp-buffer ()
-  "Display a temporary buffer in another window and select it.
-The selected window will not be changed.  The temporary buffer will
-be erased and writable."
-
-  (let ((dir default-directory))
-    (display-buffer (get-buffer-create cvs-temp-buffer-name))
-    (set-buffer cvs-temp-buffer-name)
-    (setq buffer-read-only nil)
-    (setq default-directory dir)
-    (erase-buffer)))
-
-;;----------
-(defun cvs-examine (directory &optional local)
-  "Run a 'cvs -n update' in the current working directory.
-That is, check what needs to be done, but don't change the disc.
-Feed the output to a *cvs* buffer and run cvs-mode on it.
-If optional prefix argument LOCAL is non-nil, 'cvs update -l' is run.
-WARNING:  this doesn't work very well yet...."
-
-  ;; TODO:  this should do everything cvs-update does...
-  ;; for example, for CONFLICT files, it should setup fileinfo appropriately
-
-  (interactive (list (read-file-name "CVS Update (directory): "
-                                    nil default-directory nil)
-                    current-prefix-arg))
-  (cvs-do-update directory local 'noupdate))
-
-;;----------
-(defun cvs-update (directory &optional local)
-  "Run a 'cvs update' in the current working directory.  Feed the
-output to a *cvs* buffer and run cvs-mode on it.
-If optional prefix argument LOCAL is non-nil, 'cvs update -l' is run."
-
-  (interactive (list (read-file-name "CVS Update (directory): "
-                                    nil default-directory nil)
-                    current-prefix-arg))
-  (cvs-do-update directory local nil)
-  (switch-to-buffer cvs-buffer-name))
-
-;;----------
-(defun cvs-update-other-window (directory &optional local)
-  "Run a 'cvs update' in the current working directory.  Feed the
-output to a *cvs* buffer, display it in the other window, and run
-cvs-mode on it.
-
-If optional prefix argument LOCAL is non-nil, 'cvs update -l' is run."
-
-  (interactive (list (read-file-name "CVS Update other window (directory): "
-                                    nil default-directory nil)
-                    current-prefix-arg))
-  (cvs-do-update directory local nil)
-  (switch-to-buffer-other-window cvs-buffer-name))
-
-;;----------
-(defun cvs-filter (predicate list &rest extra-args)
-  "Apply PREDICATE to each element on LIST.
-Args:  PREDICATE LIST &rest EXTRA-ARGS.
-
-Return a new list consisting of those elements that PREDICATE
-returns non-nil for.
-
-If more than two arguments are given the remaining args are
-passed to PREDICATE."
-
-  ;; Avoid recursion - this should work for LONG lists also!
-  (let* ((head (cons 'dummy-header nil))
-        (tail head))
-    (while list
-      (if (apply predicate (car list) extra-args)
-         (setq tail (setcdr tail (list (car list)))))
-      (setq list (cdr list)))
-    (cdr head)))
-
-;;----------
-(defun cvs-mode-update-no-prompt ()
-  "Run cvs update in current directory."
-
-  (interactive)
-  (cvs-do-update default-directory nil nil))
-
-;;----------
-(defun cvs-do-update (directory local dont-change-disc)
-  "Do a 'cvs update' in DIRECTORY.
-Args:  DIRECTORY LOCAL DONT-CHANGE-DISC.
-
-If LOCAL is non-nil 'cvs update -l' is executed.
-If DONT-CHANGE-DISC is non-nil 'cvs -n update' is executed.
-Both LOCAL and DONT-CHANGE-DISC may be non-nil simultaneously.
-
-*Note*:  DONT-CHANGE-DISC does not yet work.  The parser gets confused."
-
-  (save-some-buffers)
-  ;; Ensure that it is safe to do an update.  If not, ask user
-  ;; for confirmation.
-  (if (and (boundp 'cvs-cookie-handle) (collection-buffer cvs-cookie-handle))
-      (if (collection-collect-tin
-          cvs-cookie-handle
-          '(lambda (cookie) (eq (cvs-fileinfo->type cookie) 'CONFLICT)))
-         (if (not
-              (yes-or-no-p
-               "Only update if conflicts have been resolved.  Continue? "))
-             (error "Update aborted by user request."))))
-  (if (not (file-exists-p cvs-program))
-      (error "%s: file not found (check setting of cvs-program)"
-            cvs-program))
-  (let* ((this-dir (file-name-as-directory (expand-file-name directory)))
-        (update-buffer (generate-new-buffer
-                        (concat " " (file-name-nondirectory
-                                     (substring this-dir 0 -1))
-                                "-update")))
-        (temp-name (make-temp-name
-                    (concat (file-name-as-directory
-                             (or (getenv "TMPDIR") "/tmp"))
-                            "pcl-cvs.")))
-        (args nil))
-
-    ;; Check that this-dir exists and is a directory that is under CVS contr.
-
-    (if (not (file-directory-p this-dir))
-       (error "%s is not a directory." this-dir))
-    (if (not (file-directory-p (concat this-dir "CVS")))
-       (error "%s does not contain CVS controlled files." this-dir))
-    (if (file-readable-p (concat this-dir "CVS/Root"))
-       (save-excursion         ; read CVS/Root into cvs-cvsroot
-         (find-file (concat this-dir "CVS/Root"))
-         (goto-char (point-min))
-         (setq cvs-cvsroot (buffer-substring (point)
-                                             (progn (end-of-line) (point))))
-         (if (not cvs-cvsroot)
-             (error "Invalid contents of %sCVS/Root" this-dir))
-         (kill-buffer (current-buffer)))
-      (if (and cvs-cvsroot-required
-              (not (or (getenv "CVSROOT") cvs-cvsroot)))
-         (error "Both cvs-cvsroot and environment variable CVSROOT are unset, and no CVS/Root.")))
-
-    ;; Check that at most one `cvs update' is run at any time.
-
-    (if (and cvs-update-running (process-status cvs-update-running)
-            (or (eq (process-status cvs-update-running) 'run)
-                (eq (process-status cvs-update-running) 'stop)))
-       (error "Can't run two `cvs update' simultaneously."))
-
-    (if (not (listp cvs-update-optional-flags))
-       (error "cvs-update-optional-flags should be set using cvs-set-update-optional-flags"))
-
-    ;; Generate "-d /master -n update -l".
-    (setq args (concat (if cvs-cvsroot (concat " -d " cvs-cvsroot))
-                      (if dont-change-disc " -n ")
-                      " update "
-                      (if local " -l ")
-                      (if cvs-update-optional-flags
-                          (mapconcat 'identity
-                                     (copy-sequence cvs-update-optional-flags)
-                                     " "))))
-
-    ;; Set up the buffer that receives the stderr output from "cvs update".
-    (set-buffer update-buffer)
-    (setq default-directory this-dir)
-    (make-local-variable 'cvs-stdout-file)
-    (setq cvs-stdout-file temp-name)
-
-    (setq cvs-update-running
-         (let ((process-connection-type nil)) ; Use a pipe, not a pty.
-           (start-process "cvs" update-buffer cvs-shell "-c"
-                          (concat cvs-program " " args " > " temp-name))))
-
-    (setq mode-line-process
-         (concat ": "
-                 (symbol-name (process-status cvs-update-running))))
-    (set-buffer-modified-p (buffer-modified-p))        ; Update the mode line.
-    (set-process-sentinel cvs-update-running 'cvs-sentinel)
-    (set-process-filter cvs-update-running 'cvs-update-filter)
-    (set-marker (process-mark cvs-update-running) (point-min))
-
-    (save-excursion
-      (set-buffer (get-buffer-create cvs-buffer-name))
-      (setq buffer-read-only nil)
-      (erase-buffer)
-      (cvs-mode))
-      
-    (setq cvs-cookie-handle
-         (collection-create
-          cvs-buffer-name 'cvs-pp
-          cvs-startup-message          ;See comment above cvs-startup-message.
-          "---------- End -----"))
-
-    (cookie-enter-first
-     cvs-cookie-handle
-     (cvs-create-fileinfo
-      'MESSAGE nil nil (concat "\n    Running `cvs " args "' in " this-dir
-                              "...\n")))
-
-    (save-excursion
-      (set-buffer cvs-buffer-name)
-      (setq mode-line-process
-           (concat ": "
-                   (symbol-name (process-status cvs-update-running))))
-      (set-buffer-modified-p (buffer-modified-p))      ; Update the mode line.
-      (setq buffer-read-only t))
-
-    ;; Work around a bug in emacs 18.57 and earlier.
-    (setq cvs-buffers-to-delete
-         (cvs-delete-unused-temporary-buffers cvs-buffers-to-delete)))
-
-  ;; The following line is said to improve display updates on some
-  ;; emacses.  It shouldn't be needed, but it does no harm.
-  (sit-for 0))
-
-;;----------
-(defun cvs-delete-unused-temporary-buffers (list)
-  "Delete all buffers on LIST that is not visible.
-Return a list of all buffers that still is alive."
-
-  (cond
-   ((null list) nil)
-   ((get-buffer-window (car list))
-    (cons (car list)
-         (cvs-delete-unused-temporary-buffers (cdr list))))
-   (t
-    (kill-buffer (car list))
-    (cvs-delete-unused-temporary-buffers (cdr list)))))
-
-;;----------
-(put 'cvs-mode 'mode-class 'special)
-
-;;----------
-(defun cvs-mode ()
-  "\\<cvs-mode-map>Mode used for pcl-cvs, a front-end to CVS.
-
-To get to the \"*cvs*\" buffer you should use ``\\[execute-extended-command] cvs-update''.
-
-Full documentation is in the Texinfo file.  Here are the most useful commands:
-
-\\[cvs-mode-previous-line] Move up.                    \\[cvs-mode-next-line] Move down.
-\\[cvs-mode-commit]   Commit file.                \\[cvs-mode-update-no-prompt]   Re-update directory.
-\\[cvs-mode-mark]   Mark file/dir.              \\[cvs-mode-unmark]   Unmark file/dir.
-\\[cvs-mode-mark-all-files]   Mark all files.             \\[cvs-mode-unmark-all-files]   Unmark all files.
-\\[cvs-mode-find-file]   Edit file/run Dired.        \\[cvs-mode-find-file-other-window]   Find file or run Dired in other window.
-\\[cvs-mode-ignore]   Add file to ./.cvsignore.   \\[cvs-mode-add-change-log-entry-other-window]   Write ChangeLog in other window.
-\\[cvs-mode-add]   Add to repository.          \\[cvs-mode-remove-file]   Remove file.
-\\[cvs-mode-diff-cvs]   Diff with base revision.    \\[cvs-mode-diff-backup]   Diff backup file.
-\\[cvs-mode-ediff]   Ediff base rev & backup.    \\[cvs-mode-diff-vendor]   Show merge from vendor branch.
-\\[cvs-mode-emerge]   Emerge base rev & backup.   \\[cvs-mode-diff-backup]   Diff backup file.
-\\[cvs-mode-acknowledge] Delete line from buffer.    \\[cvs-mode-remove-handled]   Remove processed entries.   
-\\[cvs-mode-log]   Run ``cvs log''.            \\[cvs-mode-status]   Run ``cvs status''.
-\\[cvs-mode-tag]   Run ``cvs tag''.            \\[cvs-mode-rtag]   Run ``cvs rtag''.
-\\[cvs-mode-changelog-commit]   Like \\[cvs-mode-commit], but get default log text from ChangeLog.
-\\[cvs-mode-undo-local-changes]   Revert the last checked in version - discard your changes to the file.
-
-Entry to this mode runs cvs-mode-hook.
-This description is updated for release 1.05-CVS-$Name:  $ of pcl-cvs.
-
-All bindings:
-\\{cvs-mode-map}"
-
-  (interactive)
-  (setq major-mode 'cvs-mode)
-  (setq mode-name "CVS")
-  (setq mode-line-process nil)
-;; for older v18 emacs
-;;(buffer-flush-undo (current-buffer))
-  (buffer-disable-undo (current-buffer))
-  (make-local-variable 'goal-column)
-  (setq goal-column cvs-cursor-column)
-  (use-local-map cvs-mode-map)
-  (run-hooks 'cvs-mode-hook))
-
-;;----------
-(defun cvs-sentinel (proc msg)
-  "Sentinel for the cvs update process.
-This is responsible for parsing the output from the cvs update when
-it is finished."
-
-  (cond
-   ((null (buffer-name (process-buffer proc)))
-    ;; buffer killed
-    (set-process-buffer proc nil))
-   ((memq (process-status proc) '(signal exit))
-    (let* ((obuf (current-buffer))
-          (omax (point-max))
-          (opoint (point)))
-      ;; save-excursion isn't the right thing if
-      ;;  process-buffer is current-buffer
-      (unwind-protect
-         (progn
-           (set-buffer (process-buffer proc))
-           (setq mode-line-process
-                 (concat ": "
-                         (symbol-name (process-status proc))))
-           (let* ((out-file cvs-stdout-file)
-                  (stdout-buffer (find-file-noselect out-file)))
-             (save-excursion
-               (set-buffer stdout-buffer)
-               (rename-buffer (concat " "
-                                      (file-name-nondirectory out-file)) t))
-             (cvs-parse-update stdout-buffer (process-buffer proc))
-             (setq cvs-buffers-to-delete
-                   (cons (process-buffer proc)
-                         (cons stdout-buffer
-                               cvs-buffers-to-delete)))
-             (delete-file out-file)))
-       (set-buffer-modified-p (buffer-modified-p))
-       (setq cvs-update-running nil))
-      (if (equal obuf (process-buffer proc))
-         nil
-       (set-buffer (process-buffer proc))
-       (if (< opoint omax)
-           (goto-char opoint))
-       (set-buffer obuf))))))
-
-;;----------
-(defun cvs-update-filter (proc string)
-  "Filter function for pcl-cvs.
-This function gets the output that CVS sends to stderr.  It inserts it
-into (process-buffer proc) but it also checks if CVS is waiting for a
-lock file.  If so, it inserts a message cookie in the *cvs* buffer."
-
-  (let ((old-buffer (current-buffer))
-       (data (match-data)))
-    (unwind-protect
-       (progn
-         (set-buffer (process-buffer proc))
-         (save-excursion
-           ;; Insert the text, moving the process-marker.
-           (goto-char (process-mark proc))
-           (insert string)
-           (set-marker (process-mark proc) (point))
-           ;; Delete any old lock message
-           (if (tin-nth cvs-cookie-handle 1)
-               (tin-delete cvs-cookie-handle
-                           (tin-nth cvs-cookie-handle 1)))
-           ;; Check if CVS is waiting for a lock.
-           (beginning-of-line 0)       ;Move to beginning of last
-                                       ;complete line.
-           (cond
-            ((looking-at
-              "^cvs \\(update\\|server\\): \\[..:..:..\\] waiting for \\(.*\\)lock in \\(.*\\)$")
-             (setq cvs-lock-file (buffer-substring (match-beginning 3)
-                                                   (match-end 3)))
-             (cookie-enter-last
-              cvs-cookie-handle
-              (cvs-create-fileinfo
-               'MESSAGE nil nil
-               (concat "\tWaiting for "
-                       (buffer-substring (match-beginning 2)
-                                         (match-end 2))
-                       "lock in " cvs-lock-file
-                       ".\n\t (type M-x cvs-delete-lock to delete it)")))))))
-      (store-match-data data)
-      (set-buffer old-buffer))))
-
-;;----------
-(defun cvs-delete-lock ()
-  "Delete the lock file that CVS is waiting for.
-Note that this can be dangerous.  You should only do this
-if you are convinced that the process that created the lock is dead."
-
-  (interactive)
-  (cond
-   ((not (or (file-exists-p
-             (concat (file-name-as-directory cvs-lock-file) "#cvs.lock"))
-            (cvs-filter (function cvs-lock-file-p)
-                        (directory-files cvs-lock-file))))
-    (error "No lock files found."))
-   ((yes-or-no-p (concat "Really delete locks in " cvs-lock-file "? "))
-    ;; Re-read the directory -- the locks might have disappeared.
-    (let ((locks (cvs-filter (function cvs-lock-file-p)
-                            (directory-files cvs-lock-file))))
-      (while locks
-       (delete-file (concat (file-name-as-directory cvs-lock-file)
-                            (car locks)))
-       (setq locks (cdr locks)))
-      (cvs-remove-directory
-       (concat (file-name-as-directory cvs-lock-file) "#cvs.lock"))))))
-
-;;----------
-(defun cvs-remove-directory (dir)
-  "Remove a directory."
-
-  (if (file-directory-p dir)
-      (call-process cvs-rmdir-program nil nil nil dir)
-    (error "Not a directory: %s" dir))
-  (if (file-exists-p dir)
-      (error "Could not remove directory %s" dir)))
-
-;;----------
-(defun cvs-lock-file-p (file)
-  "Return true if FILE looks like a CVS lock file."
-
-  (or
-   (string-match "^#cvs.tfl.[0-9]+$" file)
-   (string-match "^#cvs.rfl.[0-9]+$" file)
-   (string-match "^#cvs.wfl.[0-9]+$" file)))
-
-;;----------
-(defun cvs-quote-multiword-string (str)
-  "Return STR surrounded in single quotes if it contains whitespace."
-  (cond ((string-match "[ \t\n]" str)
-        (concat "'" str "'"))
-       (t
-        str)))
-
-;;----------
-;; this should be in subr.el or some similar place....
-(defun parse-string (str &optional regexp)
-  "Explode the string STR into a list of words ala strtok(3).  Optional REGEXP
-defines regexp matching word separator, which defaults to \"[ \\t\\n]+\"."
-  (let (str-list                       ; new list
-       str-token                       ; "index" of next token
-       (str-start 0)                   ; "index" of current token
-       (str-sep (if regexp
-                    regexp
-                  "[ \t\n]+")))
-    (while (setq str-token (string-match str-sep str str-start))
-      (setq str-list
-           (nconc str-list
-                  (list (substring str str-start str-token))))
-      (setq str-start (match-end 0)))
-    ;; tag on the remainder as the final item
-    (if (not (>= str-start (length str)))
-       (setq str-list
-             (nconc str-list
-                    (list (substring str str-start)))))
-    str-list))
-
-;;----------
-(defun cvs-make-list (str)
-  "Return list of words made from the string STR."
-  (cond ((string-match "[ \t\n]+" str)
-        (let ((new-str (parse-string str "[ \t\n]+")))
-          ;; this is ugly, but assume if the first element is empty, there are
-          ;; no more elements.
-          (cond ((string= (car new-str) "")
-                 nil)
-                (t
-                 new-str))))
-       ((string= str "")
-        nil)
-       (t
-        (list str))))
-
-;;----------
-(defun cvs-skip-line (stdout stderr regexp &optional arg)
-  "Like forward-line, but check that the skipped line matches REGEXP.
-Args:  STDOUT STDERR REGEXP &optional ARG.
-
-If it doesn't match REGEXP a bug report is generated and displayed.
-STDOUT and STDERR is only used to do that.
-
-If optional ARG, a number, is given the ARGth parenthesized expression
-in the REGEXP is returned as a string.
-Point should be in column 1 when this function is called."
-
-  (cond
-   ((looking-at regexp)
-    (forward-line 1)
-    (if arg
-       (buffer-substring (match-beginning arg)
-                         (match-end arg))))
-   (t
-    (cvs-parse-error stdout
-                    stderr
-                    (if (eq (current-buffer) stdout)
-                        'STDOUT
-                      'STDERR)
-                    (point)
-                    regexp))))
-
-;;----------
-(defun cvs-get-current-dir (root-dir dirname)
-  "Return current working directory, suitable for cvs-parse-update.
-Args:  ROOT-DIR DIRNAME.
-
-Concatenates ROOT-DIR and DIRNAME to form an absolute path."
-
-  (if (string= "." dirname)
-      (substring root-dir 0 -1)
-    (concat root-dir dirname)))
-
-;;----------
-(defun cvs-compare-fileinfos (a b)
-  "Compare fileinfo A with fileinfo B and return t if A is `less'."
-
-  (cond
-   ;; Sort acording to directories.
-   ((string< (cvs-fileinfo->dir a) (cvs-fileinfo->dir b)) t)
-   ((not (string= (cvs-fileinfo->dir a) (cvs-fileinfo->dir b))) nil)
-   ;; The DIRCHANGE entry is always first within the directory.
-   ((and (eq (cvs-fileinfo->type a) 'DIRCHANGE)
-        (not (eq (cvs-fileinfo->type b) 'DIRCHANGE))) t)
-   ((and (eq (cvs-fileinfo->type b) 'DIRCHANGE)
-        (not (eq (cvs-fileinfo->type a) 'DIRCHANGE))) nil)
-   ;; All files are sorted by file name.
-   ((string< (cvs-fileinfo->file-name a) (cvs-fileinfo->file-name b)))))
-
-;;----------
-(defun cvs-parse-error (stdout-buffer stderr-buffer err-buf pos &optional indicator)
-  "Handle a parse error when parsing the output from cvs.
-Args:  STDOUT-BUFFER STDERR-BUFFER ERR-BUF POS &optional INDICATOR.
-
-ERR-BUF should be 'STDOUT or 'STDERR."
-
-  (setq pos (1- pos))
-  (set-buffer cvs-buffer-name)
-  (setq buffer-read-only nil)
-  (erase-buffer)
-  (insert "To: " pcl-cvs-bugs-address "\n")
-  (insert "Subject: pcl-cvs release" pcl-cvs-version " parse error.\n")
-  (insert (concat mail-header-separator "\n"))
-  (insert "This bug report is automatically generated by pcl-cvs\n")
-  (insert "because it doesn't understand some output from CVS.  Below\n")
-  (insert "is detailed information about the error.  Please send\n")
-  (insert "this, together with any information you think might be\n")
-  (insert "useful for me to fix the bug, to the address above.  But\n")
-  (insert "please check the \"known problems\" section of the\n")
-  (insert "documentation first.  Note that this buffer contains\n")
-  (insert "information that you might consider confidential.  You\n")
-  (insert "are encouraged to read through it before sending it.\n")
-  (insert "\n")
-  (insert "Press C-c C-c to send this email.\n\n")
-  (insert "Please state the version of these programs you are using:\n\n")
-  (insert "RCS:  \ndiff: \n\n")
-
-  (let* ((stdout (save-excursion (set-buffer stdout-buffer) (buffer-string)))
-        (stderr (save-excursion (set-buffer stderr-buffer) (buffer-string)))
-        (errstr (if (eq err-buf 'STDOUT) stdout stderr))
-        (errline-end (string-match "\n" errstr pos))
-        (errline (substring errstr pos errline-end)))
-    (insert (format "Offending line (%d chars): >" (- errline-end pos)))
-    (insert errline)
-    (insert "<\n")
-    (insert "Sent to " (symbol-name err-buf) " at pos " (format "%d\n" pos))
-    (if indicator
-       (insert "Optional args: \"" indicator "\".\n"))
-    (insert "\nEmacs-version: " (emacs-version) "\n")
-    (insert "Pcl-cvs Version: "
-           "@(#)OrigId: pcl-cvs.el,v 1.93 1993/05/31 22:44:00 ceder Exp\n")
-    (insert "CVS Version: "
-           "@(#)cvs/contrib/pcl-cvs:$Name:  $:$Id: pcl-cvs.el,v 1.1.1.2 1996/01/30 00:19:09 tholo Exp $\n\n")
-    (insert (format "--- Contents of stdout buffer (%d chars) ---\n"
-                   (length stdout)))
-    (insert stdout)
-    (insert "--- End of stdout buffer ---\n")
-    (insert (format "--- Contents of stderr buffer (%d chars) ---\n"
-                   (length stderr)))
-    (insert stderr)
-    (insert "--- End of stderr buffer ---\n")
-    (insert "\nEnd of bug report.\n")
-    (require 'sendmail)
-    (mail-mode)
-    (error "CVS parse error - please report this bug.")))
-      
-;;----------
-(defun cvs-parse-update (stdout-buffer stderr-buffer)
-  "Parse the output from `cvs update'.
-
-Args:  STDOUT-BUFFER STDERR-BUFFER.
-
-This functions parses the from `cvs update' (which should be
-separated in its stdout- and stderr-components) and prints a
-pretty representation of it in the *cvs* buffer.
-
-Signals an error if unexpected output was detected in the buffer."
-
-  (let* ((head (cons 'dummy nil))
-        (tail (cvs-parse-stderr stdout-buffer stderr-buffer
-                                head default-directory))
-        (root-dir default-directory))
-    (cvs-parse-stdout stdout-buffer stderr-buffer tail root-dir)
-    (setq head (sort (cdr head) (function cvs-compare-fileinfos)))
-    (collection-clear cvs-cookie-handle)
-    (collection-append-cookies cvs-cookie-handle head)
-    (cvs-remove-stdout-shadows)
-    (if cvs-auto-remove-handled-directories
-       (cvs-remove-empty-directories))
-    (set-buffer cvs-buffer-name)
-    (cvs-mode)
-    (goto-char (point-min))
-    (tin-goto-previous cvs-cookie-handle (point-min) 1)
-    (setq default-directory root-dir)))
-
-;;----------
-(defun cvs-remove-stdout-shadows ()
-  "Remove entries in the *cvs* buffer that comes from both stdout and stderr.
-If there is two entries for a single file the second one should be
-deleted.  (Remember that sort uses a stable sort algorithm, so one can
-be sure that the stderr entry is always first)."
-
-  (collection-filter-tins cvs-cookie-handle
-                         (function
-                          (lambda (tin)
-                            (not (cvs-shadow-entry-p tin))))))
-
-;;----------
-(defun cvs-shadow-entry-p (tin)
-  "Return non-nil if TIN is a shadow entry.
-Args:  TIN.
-
-A TIN is a shadow entry if the previous tin contains the same file."
-
-  (let* ((previous-tin (tin-previous cvs-cookie-handle tin))
-        (curr (tin-cookie cvs-cookie-handle tin))
-        (prev (and previous-tin
-                   (tin-cookie cvs-cookie-handle previous-tin))))
-    (and
-     prev curr
-     (string= (cvs-fileinfo->file-name prev)
-             (cvs-fileinfo->file-name curr))
-     (string= (cvs-fileinfo->dir prev)
-             (cvs-fileinfo->dir curr))
-     (or
-      (and (eq (cvs-fileinfo->type prev) 'CONFLICT)
-          (eq (cvs-fileinfo->type curr) 'CONFLICT))
-      (and (eq (cvs-fileinfo->type prev) 'MERGED)
-          (eq (cvs-fileinfo->type curr) 'MODIFIED))
-      (and (eq (cvs-fileinfo->type prev) 'REM-EXIST)
-          (eq (cvs-fileinfo->type curr) 'REMOVED))))))
-
-;;----------
-(defun cvs-find-backup-file (filename &optional dirname)
-  "Look for a backup file for FILENAME, optionally in directory DIRNAME, and if
-there is one, return the name of the first file found as a string."
-
-  (if (eq dirname nil)
-      (setq dirname default-directory))
-  (car (directory-files dirname nil (concat "^\\" cvs-bakprefix filename
-                                           "\\."))))
-
-;;----------
-(defun cvs-find-backup-revision (filename)
-  "Take FILENAME as the name of a cvs backup file and return the revision of
-that file as a string."
-
-    (substring filename
-              (+ 1 (string-match "\\.\\([0-9.]+\\)$" filename))))
-
-;;----------
-(defun cvs-parse-stderr (stdout-buffer stderr-buffer head dir)
-  "Parse the output from CVS that is written to stderr.
-Args:  STDOUT-BUFFER STDERR-BUFFER HEAD DIR
-
-STDOUT-BUFFER holds the output that cvs sent to stdout.  It is only
-used to create a bug report in case there is a parse error.
-STDERR-BUFFER is the buffer that holds the output to parse.
-HEAD is a cons-cell, the head of the list that is built.
-DIR is the directory the `cvs update' was run in.
-
-This function returns the last cons-cell in the list that is built."
-
-  (save-window-excursion
-    (set-buffer stderr-buffer)
-    (goto-char (point-min))
-    (let ((current-dir dir)
-         (root-dir dir))
-
-      (while (< (point) (point-max))
-       (cond
-
-        ;; CVS is descending a subdirectory.
-
-        ((looking-at
-          "^cvs \\(server\\|update\\): Updating \\(.*\\)$")
-         (setq current-dir
-               (cvs-get-current-dir
-                root-dir
-                (buffer-substring (match-beginning 2) (match-end 2))))
-         (setcdr head (list (cvs-create-fileinfo
-                             'DIRCHANGE
-                             current-dir
-                             "."       ; the old version had nil here???
-                             (buffer-substring (match-beginning 0)
-                                               (match-end 0)))))
-         (setq head (cdr head))
-         (forward-line 1))
-
-        ;; File removed, since it is removed (by third party) in repository.
-       
-        ((or (looking-at
-              "^cvs \\(update\\|server\\): warning: \\(.*\\) is not (any longer) pertinent")
-             (looking-at
-              "^cvs \\(update\\|server\\): \\(.*\\) is no longer in the repository"))
-
-         (setcdr head (list (cvs-create-fileinfo
-                             'CVS-REMOVED
-                             current-dir
-                             (file-name-nondirectory
-                              (buffer-substring (match-beginning 2)
-                                                (match-end 2)))
-                             (buffer-substring (match-beginning 0)
-                                               (match-end 0)))))
-         (setq head (cdr head))
-         (forward-line 1))
-
-        ;; File removed by you, but recreated by cvs.  Ignored.  Will say
-        ;; "Updated" on the next line.
-
-        ((looking-at
-          "^cvs \\(update\\|server\\): warning: .* was lost$")
-         (forward-line 1))
-
-        ;; File unknown for some reason.
-        ;; FIXME:  is it really a good idea to add this as unknown here?
-
-        ((looking-at
-          "cvs \\(update\\|server\\): nothing known about \\(.*\\)$")
-         (let ((filename (buffer-substring (match-beginning 2)
-                                           (match-end 2))))
-           (if (file-directory-p filename)
-               (setcdr head (list (cvs-create-fileinfo
-                                   'UNKNOWN-DIR
-                                   current-dir
-                                   "."
-                                   (buffer-substring (match-beginning 0)
-                                                     (match-end 0)))))
-             (setcdr head (list (cvs-create-fileinfo
-                                 'UNKNOWN
-                                 current-dir
-                                 (file-name-nondirectory filename)
-                                 (buffer-substring (match-beginning 0)
-                                                   (match-end 0)))))))
-         (setq head (cdr head))
-         (forward-line 1))
-
-        ;; A file that has been created by you, but added to the cvs
-        ;; repository by another.
-
-        ((looking-at
-          "^cvs \\(update\\|server\\): move away \\(.*\\); it is in the way$")
-         (setcdr head (list (cvs-create-fileinfo
-                             'MOVE-AWAY
-                             current-dir
-                             (file-name-nondirectory
-                              (buffer-substring (match-beginning 2)
-                                                (match-end 2)))
-                             (buffer-substring (match-beginning 0)
-                                               (match-end 0)))))
-         (setq head (cdr head))
-         (forward-line 1))
-
-        ;; Cvs waits for a lock.  Ignore.
-
-        ((looking-at
-          "^cvs \\(update\\|server\\): \\[..:..:..\\] waiting for .*lock in ")
-         (forward-line 1))
-
-        ;; File removed in repository, but edited by you.
-
-        ((looking-at
-          "^cvs \\(update\\|server\\): conflict: \\(.*\\) is modified but no longer in the repository$")
-         (setcdr head (list
-                       (cvs-create-fileinfo
-                        'REM-CONFLICT
-                        current-dir
-                        (file-name-nondirectory
-                         (buffer-substring (match-beginning 2)
-                                           (match-end 2)))
-                        (buffer-substring (match-beginning 0)
-                                          (match-end 0)))))
-         (setq head (cdr head))
-         (forward-line 1))
-
-        ;; File removed in repository, but edited by someone else.
-
-        ((looking-at
-          "^cvs \\(update\\|server\\): conflict: removed \\(.*\\) was modified by second party")
-         (setcdr head
-                 (list
-                  (cvs-create-fileinfo
-                   'MOD-CONFLICT
-                   current-dir
-                   (buffer-substring (match-beginning 1)
-                                     (match-end 1))
-                   (buffer-substring (match-beginning 0)
-                                     (match-end 0)))))
-         (setq head (cdr head))
-         (forward-line 1))
-
-        ;; File removed in repository, but not in local directory.
-
-        ((looking-at
-          "^cvs \\(update\\|server\\): \\(.*\\) should be removed and is still there")
-         (setcdr head
-                 (list
-                  (cvs-create-fileinfo
-                   'REM-EXIST
-                   current-dir
-                   (buffer-substring (match-beginning 2)
-                                     (match-end 2))
-                   (buffer-substring (match-beginning 0)
-                                     (match-end 0)))))
-         (setq head (cdr head))
-         (forward-line 1))
-
-        ;; Error searching for repository
-
-        ((looking-at
-          "^cvs \\(update\\|server\\): in directory ")
-         (let ((start (point)))
-           (forward-line 1)
-           (cvs-skip-line stdout-buffer stderr-buffer
-                          (regexp-quote "cvs [update aborted]: there is no repository "))
-           (setcdr head (list (cvs-create-fileinfo
-                               'REPOS-MISSING
-                               current-dir
-                               nil
-                               (buffer-substring start (point)))))
-           (setq head (cdr head))))
-
-        ;; Silly warning from attempted conflict resolution.  Ignored.
-        ;; FIXME:  Should it be?
-        ;; eg.:  "cvs update: cannot find revision APC-web-update in file .cvsignore"
-        ;;
-        ((looking-at
-          "^cvs \\(update\\|server\\): cannot find revision \\(.*\\) in file \\(.*\\)$")
-         (forward-line 1)
-         (message "%s" (buffer-substring (match-beginning 0) (match-end 0))))
-
-        ;; CVS has decided to merge someone elses changes into this document.
-        ;; About to start an rcsmerge operation...
-        ;;
-        ((looking-at
-          "^RCS file: ")
-
-         ;; skip the "RCS file:" line...
-         (forward-line 1)
-
-         (let ((complex-start (point))
-               base-revision           ; the first revision retrieved to merge from
-               head-revision           ; the second revision retrieved to merge from
-               filename                ; the name of the file being merged
-               backup-file             ; the name of the backup of the working file
-               backup-revision)        ; the revision of the original working file
-
-           (setq base-revision
-                 (cvs-skip-line stdout-buffer stderr-buffer
-                                "^retrieving revision \\(.*\\)$"
-                                1))
-           (setq head-revision
-                 (cvs-skip-line stdout-buffer stderr-buffer
-                                "^retrieving revision \\(.*\\)$"
-                                1))
-           (setq filename
-                 (cvs-skip-line stdout-buffer stderr-buffer
-                                "^Merging differences between [0-9.]+ and [0-9.]+ into \\(.*\\)$"
-                                1))
-           (setq backup-file
-                 (cvs-find-backup-file filename current-dir))
-           (setq backup-revision
-                 (cvs-find-backup-revision backup-file))
-
-            ;; Was there a conflict during the merge?
-
-           (cond
-
-            ;;;; From CVS-1.3 & RCS-5.6.0.1 with GNU-Diffutils-2.5:
-            ;;;; "cvs update -j OLD-REV -j NEW-REV ."
-            ;;
-            ;; RCS file: /big/web-CVS/apc/cmd/Main/logout.sh,v
-            ;; retrieving revision 1.1.1.1
-            ;; retrieving revision 1.1.1.2
-            ;; Merging differences between 1.1.1.1 and 1.1.1.2 into logout.sh
-            ;; rcsmerge warning: overlaps during merge
-
-            ((looking-at
-              ;; Allow both RCS 5.5 and 5.6.  (5.6 prints "rcs" and " warning").
-              "^\\(rcs\\)?merge[:]*\\( warning\\)?: \\((overlaps\\|conflicts\\) during merge$")
-
-             ;; Yes, this is a conflict.
-             (cvs-skip-line stdout-buffer stderr-buffer
-                            "^\\(rcs\\)?merge[:]*\\( warning\\)?: \\(overlaps\\|conflicts\\) during merge$")
-
-             ;; this line doesn't seem to appear in all cases -- perhaps only
-             ;; in "-j A -j B" usage, in which case this indicates ????
-             (cvs-skip-line stdout-buffer stderr-buffer
-                            "^cvs \\(update\\|server\\): conflicts found in ")
-
-             (let ((fileinfo
-                    (cvs-create-fileinfo
-                     'CONFLICT current-dir
-                     filename
-                     (buffer-substring complex-start (point)))))
-
-               ;; squirrel away info about the files that were retrieved for merging
-               (cvs-set-fileinfo->base-revision fileinfo base-revision)
-               (cvs-set-fileinfo->head-revision fileinfo head-revision)
-               (cvs-set-fileinfo->backup-revision fileinfo backup-revision)
-               (cvs-set-fileinfo->backup-file fileinfo backup-file)
-
-               (setcdr head (list fileinfo))
-               (setq head (cdr head))))
-
-            ;; Was it a conflict, and was RCS compiled without DIFF3_BIN, in
-            ;; which case this is a failed conflict resolution?
-
-            ((looking-at
-              ;; Allow both RCS 5.5 and 5.6.  (5.6 prints "rcs" and " warning").
-              "^\\(rcs\\)?merge\\( warning\\)?: overlaps or other problems during merge$")
-
-             (cvs-skip-line stdout-buffer stderr-buffer
-                            "^\\(rcs\\)?merge\\( warning\\)?: overlaps or other problems during merge$")
-             (cvs-skip-line stdout-buffer stderr-buffer
-                            "^cvs update: could not merge ")
-             (cvs-skip-line stdout-buffer stderr-buffer
-                            "^cvs update: restoring .* from backup file ")
-             (let ((fileinfo
-                    (cvs-create-fileinfo
-                     'CONFLICT current-dir
-                     filename
-                     (buffer-substring complex-start (point)))))
-               (setcdr head (list fileinfo))
-               (setq head (cdr head))))           
-
-            ;; Not a conflict; it must be a succesful merge.
-
-            (t
-             (let ((fileinfo
-                    (cvs-create-fileinfo
-                     'MERGED current-dir
-                     filename
-                     (buffer-substring complex-start (point)))))
-               (cvs-set-fileinfo->base-revision fileinfo base-revision)
-               (cvs-set-fileinfo->head-revision fileinfo head-revision)
-               (cvs-set-fileinfo->backup-revision fileinfo backup-revision)
-               (cvs-set-fileinfo->backup-file fileinfo backup-file)
-               (setcdr head (list fileinfo))
-               (setq head (cdr head)))))))
-
-        ;; Error messages from CVS (incomplete)
-
-        ((looking-at
-          "^cvs \\(update\\|server\\): \\(invalid option .*\\)$")
-         (error "Interface problem with CVS: %s"
-                (buffer-substring (match-beginning 2) (match-end 2))))
-
-        ;; network errors
-
-        ;; Kerberos connection attempted but failed.  This is not
-         ;; really an error, as CVS will automatically fall back to
-         ;; rsh.  Plus it tries kerberos, if available, even when rsh
-         ;; is what you really wanted.
-
-        ((looking-at
-          "^cvs update: kerberos connect:.*$")
-         (forward-line 1)
-         (message "Remote CVS: %s"
-                  (buffer-substring (match-beginning 0) (match-end 0))))
-
-         ;; And when kerberos *does* fail, cvs prints out some stuff
-         ;; as it tries rsh.  Ignore that stuff too.
-
-        ((looking-at
-          "^cvs update: trying to start server using rsh$")
-         (forward-line 1))
-
-        ((looking-at
-          "^\\([^:]*\\) Connection timed out")
-         (error "Remote CVS: %s"
-                  (buffer-substring (match-beginning 0) (match-end 0))))
-
-        ((looking-at
-          "^Permission denied.")
-         (error "Remote CVS: %s"
-                (buffer-substring (match-beginning 0) (match-end 0))))
-
-        ((looking-at
-          "^cvs \\[update aborted\\]: premature end of file from server")
-         (error "Remote CVS: %s"
-                (buffer-substring (match-beginning 0) (match-end 0))))
-
-        ;; Empty line.  Probably inserted by mistake by user (or developer :-)
-        ;; Ignore.
-
-        ((looking-at
-          "^$")
-         (forward-line 1))
-
-        ;; top-level parser (cond) default clause
-
-        (t
-         (cvs-skip-line stdout-buffer stderr-buffer
-                        "^UN-MATCHABLE-OUTPUT"))))))
-
-  ;; cause this function to return the head of the parser output list
-  head)
-
-;;----------
-(defun cvs-parse-stdout (stdout-buffer stderr-buffer head root-dir)
-  "Parse the output from CVS that is written to stderr.
-Args:  STDOUT-BUFFER STDERR-BUFFER HEAD ROOT-DIR
-
-STDOUT-BUFFER is the buffer that holds the output to parse.
-STDERR-BUFFER holds the output that cvs sent to stderr.  It is only
-used to create a bug report in case there is a parse error.
-
-HEAD is a cons-cell, the head of the list that is built.
-ROOT-DIR is the directory the `cvs update' was run in.
-
-This function doesn't return anything particular."
-
-  (save-window-excursion
-    (set-buffer stdout-buffer)
-    (goto-char (point-min))
-    (while (< (point) (point-max))
-      (cond
-
-       ;; M:  The file is modified by the user, and untouched in the repository.
-       ;; A:  The file is "cvs add"ed, but not "cvs ci"ed.
-       ;; R:  The file is "cvs remove"ed, but not "cvs ci"ed.
-       ;; C:  Conflict (only useful if a join was done and stderr has info...)
-       ;; U:  The file is copied from the repository.
-       ;; ?:  Unknown file or directory.
-
-       ((looking-at
-        "^\\([MARCUP?]\\) \\(.*\\)$")
-       (let*
-           ((c (char-after (match-beginning 1)))
-            (full-path (concat (file-name-as-directory root-dir)
-                               (buffer-substring (match-beginning 2)
-                                                 (match-end 2))))
-            (isdir (file-directory-p full-path))
-            (fileinfo (cvs-create-fileinfo
-                       (cond ((eq c ?M) 'MODIFIED)
-                             ((eq c ?A) 'ADDED)
-                             ((eq c ?R) 'REMOVED)
-                             ((eq c ?C) 'CONFLICT)
-                             ((eq c ?U) 'UPDATED)
-                             ((eq c ?P) 'PATCHED)
-                             ((eq c ??) (if isdir
-                                            'UNKNOWN-DIR
-                                          'UNKNOWN)))
-                       (substring (file-name-directory full-path) 0 -1)
-                       (file-name-nondirectory full-path)
-                       (buffer-substring (match-beginning 0) (match-end 0)))))
-         ;; Updated and Patched files require no further action.
-         (if (memq c '(?U ?P))
-             (cvs-set-fileinfo->handled fileinfo t))
-
-         ;; Link this last on the list.
-         (setcdr head (list fileinfo))
-         (setq head (cdr head))
-         (forward-line 1)))
-
-       ;; Executing a program because of the -u option in modules.
-       ((looking-at
-        "^cvs \\(update\\|server\\): Executing")
-       ;; Skip by any output the program may generate to stdout.
-       ;; Note that pcl-cvs will get seriously confused if the
-       ;; program prints anything to stderr.
-       (re-search-forward cvs-update-prog-output-skip-regexp)
-       (forward-line 1))
-
-       (t
-       (cvs-parse-error stdout-buffer stderr-buffer 'STDOUT (point)
-                        "cvs-parse-stdout"))))))
-
-;;----------
-(defun cvs-pp (fileinfo)
-  "Pretty print FILEINFO.  Insert a printed representation in current buffer.
-For use by the cookie package."
-
-  (let ((a (cvs-fileinfo->type fileinfo))
-        (s (if (cvs-fileinfo->marked fileinfo)
-               "*" " "))
-        (f (cvs-fileinfo->file-name fileinfo))
-        (ci (if (cvs-fileinfo->handled fileinfo)
-                "  " "ci")))
-    (insert
-     (cond
-      ((eq a 'UPDATED)
-       (format "%s Updated     %s" s f))
-      ((eq a 'PATCHED)
-       (format "%s Patched     %s" s f))
-      ((eq a 'MODIFIED)
-       (format "%s Modified %s %s" s ci f))
-      ((eq a 'MERGED)
-       (format "%s Merged   %s %s" s ci f))
-      ((eq a 'CONFLICT)
-       (format "%s Conflict    %s" s f))
-      ((eq a 'ADDED)
-       (format "%s Added    %s %s" s ci f))
-      ((eq a 'REMOVED)
-       (format "%s Removed  %s %s" s ci f))
-      ((eq a 'UNKNOWN)
-       (format "%s Unknown     %s" s f))
-      ((eq a 'UNKNOWN-DIR)
-       (format "%s Unknown dir %s" s f))
-      ((eq a 'CVS-REMOVED)
-       (format "%s Removed from repository:  %s" s f))
-      ((eq a 'REM-CONFLICT)
-       (format "%s Conflict: Removed from repository, changed by you: %s" s f))
-      ((eq a 'MOD-CONFLICT)
-       (format "%s Conflict: Removed by you, changed in repository: %s" s f))
-      ((eq a 'REM-EXIST)
-       (format "%s Conflict: Removed by you, but still exists: %s" s f))
-      ((eq a 'DIRCHANGE)
-       (format "\nIn directory %s:" (cvs-fileinfo->dir fileinfo)))
-      ((eq a 'MOVE-AWAY)
-       (format "%s Move away %s - it is in the way" s f))
-      ((eq a 'REPOS-MISSING)
-       (format "  This repository directory is missing!  Remove this directory manually."))
-      ((eq a 'MESSAGE)
-       (cvs-fileinfo->full-log fileinfo))
-      (t
-       (format "%s Internal error!  %s" s f))))))
-
-
-;;; You can define your own keymap in .emacs.  pcl-cvs.el won't overwrite it.
-
-(if cvs-mode-map
-    nil
-  (setq cvs-mode-map (make-keymap))
-  (suppress-keymap cvs-mode-map)
-  (define-prefix-command 'cvs-mode-map-control-c-prefix)
-  (define-key cvs-mode-map "\C-?"      'cvs-mode-unmark-up)
-  (define-key cvs-mode-map "\C-k"      'cvs-mode-acknowledge)
-  (define-key cvs-mode-map "\C-n"      'cvs-mode-next-line)
-  (define-key cvs-mode-map "\C-p"      'cvs-mode-previous-line)
-  ;; ^C- keys are used to set various flags to control CVS features
-  (define-key cvs-mode-map "\C-c"      'cvs-mode-map-control-c-prefix)
-  (define-key cvs-mode-map "\C-cc"     'cvs-change-cvsroot)
-  (define-key cvs-mode-map "\C-cd"     'cvs-set-diff-flags)
-  (define-key cvs-mode-map "\C-cl"     'cvs-set-log-flags)
-  (define-key cvs-mode-map "\C-cs"     'cvs-set-status-flags)
-  (define-key cvs-mode-map "\C-cu"     'cvs-set-update-optional-flags)
-  ;; M- keys are usually those that operate on modules
-  (define-key cvs-mode-map "\M-\C-?"   'cvs-mode-unmark-all-files)
-  (define-key cvs-mode-map "\M-C"      'cvs-mode-rcs2log) ; i.e. "Create a ChangeLog"
-  (define-key cvs-mode-map "\M-a"      'cvs-mode-admin)
-  (define-key cvs-mode-map "\M-c"      'cvs-mode-checkout)
-  (define-key cvs-mode-map "\M-o"      'cvs-mode-checkout-other-window)
-  (define-key cvs-mode-map "\M-p"      'cvs-mode-rdiff) ; i.e. "create a Patch"
-  (define-key cvs-mode-map "\M-r"      'cvs-mode-release)
-  (define-key cvs-mode-map "\M-t"      'cvs-mode-rtag)
-  ;; keys that operate on files
-  (define-key cvs-mode-map " " 'cvs-mode-next-line)
-  (define-key cvs-mode-map "?" 'describe-mode)
-  (define-key cvs-mode-map "A" 'cvs-mode-add-change-log-entry-other-window)
-  (define-key cvs-mode-map "B" 'cvs-mode-byte-compile-files)
-  (define-key cvs-mode-map "C"  'cvs-mode-changelog-commit)
-  (define-key cvs-mode-map "E" 'cvs-mode-emerge)
-  (define-key cvs-mode-map "G" 'cvs-update)
-  (define-key cvs-mode-map "M" 'cvs-mode-mark-all-files)
-  (define-key cvs-mode-map "Q" 'cvs-examine)
-  (define-key cvs-mode-map "R" 'cvs-mode-revert-updated-buffers)
-  (define-key cvs-mode-map "U" 'cvs-mode-undo-local-changes)
-  (define-key cvs-mode-map "a" 'cvs-mode-add)
-  (define-key cvs-mode-map "b" 'cvs-mode-diff-backup)
-  (define-key cvs-mode-map "c" 'cvs-mode-commit)
-  (define-key cvs-mode-map "d" 'cvs-mode-diff-cvs)
-  (define-key cvs-mode-map "e" 'cvs-mode-ediff)
-  (define-key cvs-mode-map "f" 'cvs-mode-find-file)
-  (define-key cvs-mode-map "g" 'cvs-mode-update-no-prompt)
-  (define-key cvs-mode-map "i" 'cvs-mode-ignore)
-  (define-key cvs-mode-map "l" 'cvs-mode-log)
-  (define-key cvs-mode-map "m" 'cvs-mode-mark)
-  (define-key cvs-mode-map "n" 'cvs-mode-next-line)
-  (define-key cvs-mode-map "o" 'cvs-mode-find-file-other-window)
-  (define-key cvs-mode-map "p" 'cvs-mode-previous-line)
-  (define-key cvs-mode-map "q" 'bury-buffer)
-  (define-key cvs-mode-map "r" 'cvs-mode-remove-file)
-  (define-key cvs-mode-map "s" 'cvs-mode-status)
-  (define-key cvs-mode-map "t" 'cvs-mode-tag)
-  (define-key cvs-mode-map "u" 'cvs-mode-unmark)
-  (define-key cvs-mode-map "v" 'cvs-mode-diff-vendor)
-  (define-key cvs-mode-map "x" 'cvs-mode-remove-handled))
-
-;;----------
-(defun cvs-get-marked (&optional ignore-marks ignore-contents)
-  "Return a list of all selected tins.
-Args:  &optional IGNORE-MARKS IGNORE-CONTENTS.
-
-If there are any marked tins, and IGNORE-MARKS is nil, return them.  Otherwise,
-if the cursor selects a directory, return all files in it, unless there are
-none, in which case just return the directory; or unless IGNORE-CONTENTS is not
-nil, in which case also just return the directory.  Otherwise return (a list
-containing) the file the cursor points to, or an empty list if it doesn't point
-to a file at all."
-
-  (cond
-   ;; Any marked cookies?
-   ((and (not ignore-marks)
-        (collection-collect-tin cvs-cookie-handle 'cvs-fileinfo->marked)))
-   ;; Nope.
-   ((and (not ignore-contents)
-        (let ((sel (tin-locate cvs-cookie-handle (point))))
-          (cond
-           ;; If a directory is selected, all it members are returned.
-           ((and sel (eq (cvs-fileinfo->type (tin-cookie cvs-cookie-handle
-                                                         sel))
-                         'DIRCHANGE))
-            (let ((retsel
-                   (collection-collect-tin cvs-cookie-handle
-                                           'cvs-dir-member-p
-                                           (cvs-fileinfo->dir (tin-cookie
-                                                               cvs-cookie-handle sel)))))
-              (if retsel
-                  retsel
-                (list sel))))
-           (t
-            (list sel))))))
-   (t
-    (list (tin-locate cvs-cookie-handle (point))))))
-
-;;----------
-(defun cvs-dir-member-p (fileinfo dir)
-  "Return true if FILEINFO represents a file in directory DIR."
-
-  (and (not (eq (cvs-fileinfo->type fileinfo) 'DIRCHANGE))
-       (string= (cvs-fileinfo->dir fileinfo) dir)))
-
-;;----------
-(defun cvs-dir-empty-p (tin)
-  "Return non-nil if TIN is a directory that is empty.
-Args:  CVS-BUF TIN."
-
-  (and (eq (cvs-fileinfo->type (tin-cookie cvs-cookie-handle tin)) 'DIRCHANGE)
-       (or (not (tin-next cvs-cookie-handle tin))
-          (eq (cvs-fileinfo->type
-               (tin-cookie cvs-cookie-handle
-                                   (tin-next cvs-cookie-handle tin)))
-              'DIRCHANGE))))
-
-;;----------
-(defun cvs-mode-revert-updated-buffers ()
-  "Revert any buffers that are UPDATED, PATCHED, MERGED or CONFLICT."
-
-  (interactive)
-  (cookie-map (function cvs-revert-fileinfo) cvs-cookie-handle))
-
-;;----------
-(defun cvs-revert-fileinfo (fileinfo)
-  "Revert the buffer that holds the file in FILEINFO if it has changed,
-and if the type is UPDATED, PATCHED, MERGED or CONFLICT."
-
-  (let* ((type (cvs-fileinfo->type fileinfo))
-        (file (cvs-fileinfo->full-path fileinfo))
-        (buffer (get-file-buffer file)))
-    ;; For a revert to happen...
-    (cond
-     ((and
-       ;; ...the type must be one that justifies a revert...
-       (or (eq type 'UPDATED)
-          (eq type 'PATCHED)
-          (eq type 'MERGED)
-          (eq type 'CONFLICT))
-       ;; ...and the user must be editing the file...
-       buffer)
-      (save-excursion
-       (set-buffer buffer)
-       (cond
-        ((buffer-modified-p)
-         (error "%s: edited since last cvs-update."
-                (buffer-file-name)))
-        ;; Go ahead and revert the file.
-        (t (revert-buffer 'dont-use-auto-save-file 'dont-ask))))))))
-
-;;----------
-(defun cvs-mode-remove-handled ()
-  "Remove all lines that are handled.
-Empty directories are removed."
-
-  (interactive)
-  ;; Pass one:  remove files that are handled.
-  (collection-filter-cookies cvs-cookie-handle
-                            (function
-                             (lambda (fileinfo)
-                               (not (cvs-fileinfo->handled fileinfo)))))
-  ;; Pass two:  remove empty directories.
-  (if cvs-auto-remove-handled-directories
-      (cvs-remove-empty-directories)))
-
-;;----------
-(defun cvs-remove-empty-directories ()
-  "Remove empty directories in the *cvs* buffer."
-
-  (collection-filter-tins cvs-cookie-handle
-                         (function
-                          (lambda (tin)
-                            (not (cvs-dir-empty-p tin))))))
-
-;;----------
-(defun cvs-mode-mark (pos)
-  "Mark a fileinfo.
-Args:  POS.
-
-If the fileinfo is a directory, all the contents of that directory are marked
-instead.  A directory can never be marked.  POS is a buffer position."
-
-  (interactive "d")
-  (let* ((tin (tin-locate cvs-cookie-handle pos))
-        (sel (tin-cookie cvs-cookie-handle tin)))
-    (cond
-     ;; Does POS point to a directory?  If so, mark all files in that directory.
-     ((eq (cvs-fileinfo->type sel) 'DIRCHANGE)
-      (cookie-map
-       (function (lambda (f dir)
-                  (cond
-                   ((cvs-dir-member-p f dir)
-                    (cvs-set-fileinfo->marked f t)
-                    t))))              ; Tell cookie to redisplay this cookie.
-       cvs-cookie-handle
-       (cvs-fileinfo->dir sel)))
-     (t
-      (cvs-set-fileinfo->marked sel t)
-      (tin-invalidate cvs-cookie-handle tin)
-      (tin-goto-next cvs-cookie-handle pos 1)))))
-  
-;;----------
-(defun cvs-committable (tin)
-  "Check if the TIN is committable.
-It is committable if it
-   a) is not handled and
-   b) is either MODIFIED, ADDED, REMOVED, MERGED or CONFLICT."
-
-  (let* ((fileinfo (tin-cookie cvs-cookie-handle tin))
-        (type (cvs-fileinfo->type fileinfo)))
-    (and (not (cvs-fileinfo->handled fileinfo))
-        (or (eq type 'MODIFIED)
-            (eq type 'ADDED)
-            (eq type 'REMOVED)
-            (eq type 'MERGED)
-            (eq type 'CONFLICT)))))
-
-;;----------
-(defun cvs-mode-commit ()
-  "Check in all marked files, or the current file.
-The user will be asked for a log message in a buffer.
-If cvs-erase-input-buffer is non-nil that buffer will be erased.
-Otherwise mark and point will be set around the entire contents of the
-buffer so that it is easy to kill the contents of the buffer with \\[kill-region]."
-
-  (interactive)
-  (let* ((cvs-buf (current-buffer))
-        (marked (cvs-filter (function cvs-committable)
-                            (cvs-get-marked))))
-    (if (null marked)
-       (error "Nothing to commit!")
-      (pop-to-buffer (get-buffer-create cvs-commit-prompt-buffer))
-      (goto-char (point-min))
-
-      (if cvs-erase-input-buffer
-         (erase-buffer)
-       (push-mark (point-max)))
-      (cvs-edit-mode)
-      (make-local-variable 'cvs-commit-list)
-      (setq cvs-commit-list marked)
-      (message "Press C-c C-c when you are done editing."))))
-
-;;----------
-(defun cvs-edit-done ()
-  "Commit the files to the repository."
-
-  (interactive)
-  (if (null cvs-commit-list)
-      (error "You have already committed the files"))
-  (if (and (> (point-max) 1)
-          (/= (char-after (1- (point-max))) ?\n)
-          (or (eq cvs-commit-buffer-require-final-newline t)
-              (and cvs-commit-buffer-require-final-newline
-                   (yes-or-no-p
-                    (format "Buffer %s does not end in newline.  Add one? "
-                            (buffer-name))))))
-      (save-excursion
-       (goto-char (point-max))
-       (insert ?\n)))
-  (save-some-buffers)
-  (let ((cc-list cvs-commit-list)
-       (cc-buffer (get-buffer cvs-buffer-name))
-       (msg-buffer (current-buffer))
-       (msg (buffer-substring (point-min) (point-max))))
-    (pop-to-buffer cc-buffer)
-    (bury-buffer msg-buffer)
-    (cvs-use-temp-buffer)
-    (message "Committing...")
-    (if (cvs-execute-list cc-list cvs-program
-                         (if cvs-cvsroot
-                             (list "-d" cvs-cvsroot "commit" "-m" msg)
-                           (list "commit" "-m" msg))
-                         "Committing %s...")
-       (error "Something went wrong.  Check the %s buffer carefully."
-              cvs-temp-buffer-name))
-    ;; FIXME: don't do any of this if the commit fails.
-    (let ((ccl cc-list))
-      (while ccl
-       (cvs-after-commit-function (tin-cookie cvs-cookie-handle (car ccl)))
-       (setq ccl (cdr ccl))))
-    (apply 'tin-invalidate cvs-cookie-handle cc-list)
-    (set-buffer msg-buffer)
-    (setq cvs-commit-list nil)
-    (set-buffer cc-buffer)
-    (if cvs-auto-remove-handled
-       (cvs-mode-remove-handled)))
-  
-  (message "Committing... Done."))
-
-;;----------
-(defun cvs-after-commit-function (fileinfo)
-  "Do everything that needs to be done when FILEINFO has been committed.
-The fileinfo->handle is set, and if the buffer is present it is reverted."
-
-  (cvs-set-fileinfo->handled fileinfo t)
-  (if cvs-auto-revert-after-commit
-      (let* ((file (cvs-fileinfo->full-path fileinfo))
-            (buffer (get-file-buffer file)))
-       ;; For a revert to happen...
-       (if buffer
-           ;; ...the user must be editing the file...
-           (save-excursion
-             (set-buffer buffer)
-             (if (not (buffer-modified-p))
-                 ;; ...but it must be unmodified.
-                 (revert-buffer 'dont-use-auto-save-file 'dont-ask)))))))
-
-;;----------
-(defun cvs-execute-list (tin-list program constant-args &optional message-fmt)
-  "Run PROGRAM on all elements on TIN-LIST.
-Args:  TIN-LIST PROGRAM CONSTANT-ARGS.
-
-The PROGRAM will be called with pwd set to the directory the files reside
-in.  CONSTANT-ARGS should be a list of strings.  The arguments given to the
-program will be CONSTANT-ARGS followed by all the files (from TIN-LIST) that
-resides in that directory.  If the files in TIN-LIST resides in different
-directories the PROGRAM will be run once for each directory (if all files in
-the same directory appears after each other).
-
-Any output from PROGRAM will be inserted in the current buffer.
-
-This function return nil if all went well, or the numerical exit status or a
-signal name as a string.  Note that PROGRAM might be called several times.  This
-will return non-nil if something goes wrong, but there is no way to know which
-process that failed.
-
-If MESSAGE-FMT is not nil, then message is called to display progress with
-MESSAGE-FMT as the string.  MESSAGE-FMT should contain one %s for the arg-list
-being passed to PROGRAM."
-
-  ;; FIXME:  something seems wrong with the error checking here....
-
-  (let ((exitstatus nil))
-    (while tin-list
-      (let ((current-dir (cvs-fileinfo->dir (tin-cookie cvs-cookie-handle
-                                                       (car tin-list))))
-           arg-list
-           arg-str)
-
-       ;; Collect all marked files in this directory.
-
-       (while (and tin-list
-                   (string= current-dir
-                            (cvs-fileinfo->dir (tin-cookie cvs-cookie-handle
-                                                           (car tin-list)))))
-         (setq arg-list
-               (cons (cvs-fileinfo->file-name
-                      (tin-cookie cvs-cookie-handle (car tin-list)))
-                     arg-list))
-         (setq tin-list (cdr tin-list)))
-
-       (setq arg-list (nreverse arg-list))
-
-       ;; Execute the command on all the files that were collected.
-
-       (if message-fmt
-           (message message-fmt
-                    (mapconcat 'cvs-quote-multiword-string
-                               arg-list
-                               " ")))
-       (setq default-directory (file-name-as-directory current-dir))
-       (insert (format "=== cd %s\n" default-directory))
-       (insert (format "=== %s %s\n\n"
-                       program
-                       (mapconcat 'cvs-quote-multiword-string
-                                  (nconc (copy-sequence constant-args)
-                                         arg-list)
-                                  " ")))
-       (let ((res (apply 'call-process program nil t t
-                         (nconc (copy-sequence constant-args) arg-list))))
-         ;; Remember the first, or highest, exitstatus.
-         (if (and (not (and (integerp res) (zerop res)))
-                  (or (null exitstatus)
-                      (and (integerp exitstatus) (= 1 exitstatus))))
-             (setq exitstatus res)))
-       (goto-char (point-max))
-       (if message-fmt
-           (message message-fmt
-                    (mapconcat 'cvs-quote-multiword-string
-                               (nconc (copy-sequence arg-list) '("Done."))
-                               " ")))
-       exitstatus))))
-
-;;----------
-;;;; +++ not currently used!
-(defun cvs-execute-single-file-list (tin-list extractor program constant-args
-                                             &optional cleanup message-fmt)
-  "Run PROGRAM on all elements on TIN-LIST.
-Args:  TIN-LIST EXTRACTOR PROGRAM CONSTANT-ARGS &optional CLEANUP.
-
-The PROGRAM will be called with pwd set to the directory the files
-reside in.  CONSTANT-ARGS is a list of strings to pass as arguments to
-PROGRAM.  The arguments given to the program will be CONSTANT-ARGS
-followed by the list that EXTRACTOR returns.
-
-EXTRACTOR will be called once for each file on TIN-LIST.  It is given
-one argument, the cvs-fileinfo.  It can return t, which means ignore
-this file, or a list of arguments to send to the program.
-
-If CLEANUP is not nil, the filenames returned by EXTRACTOR are deleted.
-
-If MESSAGE-FMT is not nil, then message is called to display progress with
-MESSAGE-FMT as the string.  MESSAGE-FMT should contain one %s for the arg-list
-being passed to PROGRAM."
-
-    (while tin-list
-      (let ((current-dir (file-name-as-directory
-                         (cvs-fileinfo->dir
-                          (tin-cookie cvs-cookie-handle
-                                      (car tin-list)))))
-           (arg-list
-            (funcall extractor
-                     (tin-cookie cvs-cookie-handle (car tin-list)))))
-
-       ;; Execute the command unless extractor returned t.
-
-       (if (eq arg-list t)
-           nil
-         (setq default-directory current-dir)
-         (insert (format "=== cd %s\n" default-directory))
-         (insert (format "=== %s %s\n\n"
-                         program
-                         (mapconcat 'cvs-quote-multiword-string
-                                    (nconc (copy-sequence constant-args)
-                                           arg-list)
-                                    " ")))
-         (if message-fmt
-             (message message-fmt (mapconcat 'cvs-quote-multiword-string
-                                             arg-list
-                                             " ")))
-         (apply 'call-process program nil t t
-                (nconc (copy-sequence constant-args) arg-list))
-         (goto-char (point-max))
-         (if message-fmt
-             (message message-fmt (mapconcat 'cvs-quote-multiword-string
-                                             (nconc arg-list '("Done."))
-                                             " ")))
-         (if cleanup
-             (while arg-list
-;;;;           (kill-buffer ?????)
-               (delete-file (car arg-list))
-               (setq arg-list (cdr arg-list))))))
-      (setq tin-list (cdr tin-list))))
-
-;;----------
-(defun cvs-edit-mode ()
-  "\\<cvs-edit-mode-map>Mode for editing cvs log messages.
-Commands:
-\\[cvs-edit-done] checks in the file when you are ready.
-This mode is based on fundamental mode."
-
-  (interactive)
-  (use-local-map cvs-edit-mode-map)
-  (setq major-mode 'cvs-edit-mode)
-  (setq mode-name "CVS Log")
-  (auto-fill-mode 1))
-
-;;----------
-(if cvs-edit-mode-map
-    nil
-  (setq cvs-edit-mode-map (make-sparse-keymap))
-  (define-prefix-command 'cvs-edit-mode-control-c-prefix)
-  (define-key cvs-edit-mode-map "\C-c" 'cvs-edit-mode-control-c-prefix)
-  (define-key cvs-edit-mode-map "\C-c\C-c" 'cvs-edit-done))
-
-;;----------
-(defun cvs-diffable (tins)
-  "Return a list of all tins on TINS that it makes sense to run
-``cvs diff'' on."
-
-  ;; +++ There is an unnecessary (nreverse) here.  Get the list the
-  ;; other way around instead!
-  (let ((result nil))
-    (while tins
-      (let ((type (cvs-fileinfo->type
-                  (tin-cookie cvs-cookie-handle (car tins)))))
-       (if (or (eq type 'MODIFIED)
-               (eq type 'UPDATED)
-               (eq type 'PATCHED)
-               (eq type 'MERGED)
-               (eq type 'CONFLICT)
-               (eq type 'REMOVED)      ;+++Does this line make sense?
-               (eq type 'ADDED))       ;+++Does this line make sense?
-           (setq result (cons (car tins) result)))
-       (setq tins (cdr tins))))
-    (nreverse result)))
-         
-;;----------
-(defun cvs-mode-diff-cvs (&optional ignore-marks)
-  "Diff the selected files against the head revisions in the repository.
-
-If the variable cvs-diff-ignore-marks is non-nil any marked files will not be
-considered to be selected.  An optional prefix argument will invert the
-influence from cvs-diff-ignore-marks.
-
-The flags in the variable cvs-diff-flags will be passed to ``cvs diff''.
-
-The resulting diffs are placed in the cvs-fileinfo->cvs-diff-buffer."
-
-  (interactive "P")
-  (if (not (listp cvs-diff-flags))
-      (error "cvs-diff-flags should be set using cvs-set-diff-flags."))
-  (save-some-buffers)
-  (message "cvsdiffing...")
-  (let ((marked-file-list (cvs-diffable
-                (cvs-get-marked
-                 (or (and ignore-marks (not cvs-diff-ignore-marks))
-                     (and (not ignore-marks) cvs-diff-ignore-marks))))))
-    (while marked-file-list
-      (let ((fileinfo-to-diff (tin-cookie cvs-cookie-handle
-                                         (car marked-file-list)))
-           (local-def-directory (file-name-as-directory
-                                 (cvs-fileinfo->dir
-                                  (tin-cookie cvs-cookie-handle
-                                              (car marked-file-list))))))
-       (message "cvsdiffing %s..."
-                (cvs-fileinfo->file-name fileinfo-to-diff))
-
-       ;; FIXME:  this seems messy to test and set buffer name at this point....
-       (if (not (cvs-fileinfo->cvs-diff-buffer fileinfo-to-diff))
-           (cvs-set-fileinfo->cvs-diff-buffer fileinfo-to-diff
-                                              (concat "*cvs-diff-"
-                                                      (cvs-fileinfo->file-name
-                                                       fileinfo-to-diff)
-                                                      "-in-"
-                                                      local-def-directory
-                                                      "*")))
-       (display-buffer (get-buffer-create
-                        (cvs-fileinfo->cvs-diff-buffer fileinfo-to-diff)))
-       (set-buffer (cvs-fileinfo->cvs-diff-buffer fileinfo-to-diff))
-       (setq buffer-read-only nil)
-       (setq default-directory local-def-directory)
-       (erase-buffer)
-       (insert (format "=== cd %s\n" default-directory))
-       (insert (format "=== cvs %s\n\n"
-                       (mapconcat 'cvs-quote-multiword-string
-                                  (nconc (if cvs-cvsroot
-                                             (list "-d" cvs-cvsroot "diff")
-                                           '("diff"))
-                                         (copy-sequence cvs-diff-flags)
-                                         (list (cvs-fileinfo->file-name
-                                                fileinfo-to-diff)))
-                                  " ")))
-       (if (apply 'call-process cvs-program nil t t
-                  (nconc (if cvs-cvsroot
-                             (list "-d" cvs-cvsroot "diff")
-                           '("diff"))
-                         (copy-sequence cvs-diff-flags)
-                         (list (cvs-fileinfo->file-name fileinfo-to-diff))))
-           (message "cvsdiffing %s... Done."
-                    (cvs-fileinfo->file-name fileinfo-to-diff))
-         (message "cvsdiffing %s... No differences found."
-                  (cvs-fileinfo->file-name fileinfo-to-diff)))
-       (goto-char (point-max))
-       (setq marked-file-list (cdr marked-file-list)))))
-  (message "cvsdiffing... Done."))
-
-;;----------
-(defun cvs-mode-diff-backup (&optional ignore-marks)
-  "Diff the files against the backup file.
-This command can be used on files that are marked with \"Merged\"
-or \"Conflict\" in the *cvs* buffer.
-
-If the variable cvs-diff-ignore-marks is non-nil any marked files will
-not be considered to be selected.  An optional prefix argument will
-invert the influence from cvs-diff-ignore-marks.
-
-The flags in cvs-diff-flags will be passed to ``diff''.
-
-The resulting diffs are placed in the cvs-fileinfo->backup-diff-buffer."
-
-  (interactive "P")
-  (if (not (listp cvs-diff-flags))
-      (error "cvs-diff-flags should be set using cvs-set-diff-flags."))
-  (save-some-buffers)
-  (let ((marked-file-list (cvs-filter
-                          (function cvs-backup-diffable)
-                          (cvs-get-marked
-                           (or
-                            (and ignore-marks (not cvs-diff-ignore-marks))
-                            (and (not ignore-marks) cvs-diff-ignore-marks))))))
-    (if (null marked-file-list)
-       (error "No ``Conflict'' or ``Merged'' file selected!"))
-    (message "backup diff...")
-    (while marked-file-list
-      (let ((fileinfo-to-diff (tin-cookie cvs-cookie-handle
-                                         (car marked-file-list)))
-           (local-def-directory (file-name-as-directory
-                                 (cvs-fileinfo->dir
-                                  (tin-cookie cvs-cookie-handle
-                                              (car marked-file-list)))))
-           (backup-temp-files (cvs-diff-backup-extractor
-                               (tin-cookie cvs-cookie-handle
-                                           (car marked-file-list)))))
-       (message "backup diff %s..."
-                (cvs-fileinfo->file-name fileinfo-to-diff))
-
-       ;; FIXME:  this seems messy to test and set buffer name at this point....
-       (if (not (cvs-fileinfo->backup-diff-buffer fileinfo-to-diff))
-           (cvs-set-fileinfo->backup-diff-buffer fileinfo-to-diff
-                                                 (concat "*cvs-diff-"
-                                                         (cvs-fileinfo->backup-file
-                                                          fileinfo-to-diff)
-                                                         "-to-"
-                                                         (cvs-fileinfo->file-name
-                                                          fileinfo-to-diff)
-                                                         "-in"
-                                                         local-def-directory
-                                                         "*")))
-       (display-buffer (get-buffer-create
-                        (cvs-fileinfo->backup-diff-buffer fileinfo-to-diff)))
-       (set-buffer (cvs-fileinfo->backup-diff-buffer fileinfo-to-diff))
-       (setq buffer-read-only nil)
-       (setq default-directory local-def-directory)
-       (erase-buffer)
-       (insert (format "=== cd %s\n" default-directory))
-       (insert (format "=== %s %s\n\n"
-                       cvs-diff-program
-                       (mapconcat 'cvs-quote-multiword-string
-                                  (nconc (copy-sequence cvs-diff-flags)
-                                         backup-temp-files)
-                                  " ")))
-       (apply 'call-process cvs-diff-program nil t t
-              (nconc (copy-sequence cvs-diff-flags) backup-temp-files))
-       (goto-char (point-max))
-       (message "backup diff %s... Done."
-                (cvs-fileinfo->file-name fileinfo-to-diff))
-       (setq marked-file-list (cdr marked-file-list)))))
-  (message "backup diff... Done."))
-
-;;----------
-(defun cvs-mode-diff-vendor (&optional ignore-marks)
-  "Diff the revisions merged into the current file.  I.e. show what changes
-were merged in.
-
-This command can be used on files that are marked with \"Merged\"
-or \"Conflict\" in the *cvs* buffer.
-
-If the variable cvs-diff-ignore-marks is non-nil any marked files will
-not be considered to be selected.  An optional prefix argument will
-invert the influence from cvs-diff-ignore-marks.
-
-The flags in cvs-diff-flags will be passed to ``diff''.
-
-The resulting diffs are placed in the cvs-fileinfo->vendor-diff-buffer."
-
-  (interactive "P")
-  (if (not (listp cvs-diff-flags))
-      (error "cvs-diff-flags should be set using cvs-set-diff-flags."))
-  (save-some-buffers)
-  (let ((marked-file-list (cvs-filter
-                          (function cvs-vendor-diffable)
-                          (cvs-get-marked
-                           (or
-                            (and ignore-marks (not cvs-diff-ignore-marks))
-                            (and (not ignore-marks) cvs-diff-ignore-marks))))))
-    (if (null marked-file-list)
-       (error "No ``Conflict'' or ``Merged'' file selected!"))
-    (message "vendor diff...")
-    (while marked-file-list
-      (let ((fileinfo-to-diff (tin-cookie cvs-cookie-handle
-                                         (car marked-file-list)))
-           (local-def-directory (file-name-as-directory
-                                 (cvs-fileinfo->dir
-                                  (tin-cookie cvs-cookie-handle
-                                              (car marked-file-list)))))
-           (vendor-temp-files (cvs-diff-vendor-extractor
-                               (tin-cookie cvs-cookie-handle
-                                           (car marked-file-list)))))
-       (message "vendor diff %s..."
-                    (cvs-fileinfo->file-name fileinfo-to-diff))
-       (if (not (cvs-fileinfo->vendor-diff-buffer fileinfo-to-diff))
-           (cvs-set-fileinfo->vendor-diff-buffer fileinfo-to-diff
-                                                 (concat "*cvs-diff-"
-                                                         (cvs-fileinfo->file-name
-                                                          fileinfo-to-diff)
-                                                         "-of-"
-                                                         (cvs-fileinfo->base-revision
-                                                          fileinfo-to-diff)
-                                                         "-to-"
-                                                         (cvs-fileinfo->head-revision
-                                                          fileinfo-to-diff)
-                                                         "-in-"
-                                                         local-def-directory
-                                                         "*")))
-       (display-buffer (get-buffer-create
-                        (cvs-fileinfo->vendor-diff-buffer fileinfo-to-diff)))
-       (set-buffer (cvs-fileinfo->vendor-diff-buffer fileinfo-to-diff))
-       (setq buffer-read-only nil)
-       (setq default-directory local-def-directory)
-       (erase-buffer)
-       (insert (format "=== cd %s\n" default-directory))
-       (insert (format "=== %s %s\n\n"
-                       cvs-diff-program
-                       (mapconcat 'cvs-quote-multiword-string
-                                  (nconc (copy-sequence cvs-diff-flags)
-                                         vendor-temp-files)
-                                  " ")))
-       (apply 'call-process cvs-diff-program nil t t
-              (nconc (copy-sequence cvs-diff-flags) vendor-temp-files))
-       (goto-char (point-max))
-       (message "vendor diff %s... Done."
-                    (cvs-fileinfo->file-name fileinfo-to-diff))
-       (while vendor-temp-files
-         (cvs-kill-buffer-visiting (car vendor-temp-files))
-         (delete-file (car vendor-temp-files))
-         (setq vendor-temp-files (cdr vendor-temp-files)))
-       (setq marked-file-list (cdr marked-file-list)))))
-  (message "vendor diff... Done."))
-
-;;----------
-(defun cvs-backup-diffable (tin)
-  "Check if the TIN is backup-diffable.
-It must have a backup file to be diffable."
-
-  (file-readable-p
-   (cvs-fileinfo->backup-file (tin-cookie cvs-cookie-handle tin))))
-
-;;----------
-(defun cvs-vendor-diffable (tin)
-  "Check if the TIN is vendor-diffable.
-It must have head and base revision info to be diffable."
-
-  (and
-   (cvs-fileinfo->base-revision (tin-cookie cvs-cookie-handle tin))
-   (cvs-fileinfo->head-revision (tin-cookie cvs-cookie-handle tin))))
-
-;;----------
-(defun cvs-diff-backup-extractor (fileinfo)
-  "Return the filename and the name of the backup file as a list.
-Signal an error if there is no backup file."
-
-  (if (not (file-readable-p (cvs-fileinfo->backup-file fileinfo)))
-      (error "%s has no backup file."
-            (concat
-             (file-name-as-directory (cvs-fileinfo->dir fileinfo))
-             (cvs-fileinfo->file-name fileinfo))))
-  (list        (cvs-fileinfo->backup-file fileinfo)
-        (cvs-fileinfo->file-name fileinfo)))
-
-;;----------
-(defun cvs-diff-vendor-extractor (fileinfo)
-  "Retrieve and return the filenames of the vendor branch revisions as a list.
-Signal an error if there is no info for the vendor revisions."
-
-  (list (cvs-retrieve-revision-to-tmpfile fileinfo
-                                         (cvs-fileinfo->base-revision
-                                          fileinfo))
-       (cvs-retrieve-revision-to-tmpfile fileinfo
-                                         (cvs-fileinfo->head-revision
-                                          fileinfo))))
-
-;;----------
-(defun cvs-mode-find-file-other-window (pos)
-  "Select a buffer containing the file in another window.
-Args:  POS."
-
-  (interactive "d")
-  (let ((tin (tin-locate cvs-cookie-handle pos)))
-    (if tin
-       (let ((type (cvs-fileinfo->type (tin-cookie cvs-cookie-handle tin))))
-         (cond
-          ((or (eq type 'REMOVED)
-               (eq type 'CVS-REMOVED))
-           (error "Can't visit a removed file."))
-          ((eq type 'DIRCHANGE)
-           (let ((obuf (current-buffer))
-                 (odir default-directory))
-             (setq default-directory
-                   (file-name-as-directory
-                    (cvs-fileinfo->dir
-                     (tin-cookie cvs-cookie-handle tin))))
-             (dired-other-window default-directory)
-             (set-buffer obuf)
-             (setq default-directory odir)))
-          (t
-           (find-file-other-window (cvs-full-path tin)))))
-      (error "There is no file to find."))))
-
-;;----------
-(defun cvs-fileinfo->full-path (fileinfo)
-  "Return the full path for the file that is described in FILEINFO."
-
-  (concat
-   (file-name-as-directory
-    (cvs-fileinfo->dir fileinfo))
-   (cvs-fileinfo->file-name fileinfo)))
-
-;;----------
-(defun cvs-full-path (tin)
-  "Return the full path for the file that is described in TIN."
-
-  (cvs-fileinfo->full-path (tin-cookie cvs-cookie-handle tin)))
-
-;;----------
-(defun cvs-mode-find-file (pos)
-  "Select a buffer containing the file in another window.
-Args:  POS."
-
-  (interactive "d")
-  (let* ((cvs-buf (current-buffer))
-        (tin (tin-locate cvs-cookie-handle pos)))
-    (if tin
-       (let* ((fileinfo (tin-cookie cvs-cookie-handle tin))
-              (type (cvs-fileinfo->type fileinfo)))
-         (cond
-          ((or (eq type 'REMOVED)
-               (eq type 'CVS-REMOVED))
-           (error "Can't visit a removed file."))
-          ((eq type 'DIRCHANGE)
-           (let ((odir default-directory))
-             (setq default-directory
-                   (file-name-as-directory (cvs-fileinfo->dir fileinfo)))
-             (dired default-directory)
-             (set-buffer cvs-buf)
-             (setq default-directory odir))) 
-          (t
-           (find-file (cvs-full-path tin)))))
-      (error "There is no file to find."))))
-
-;;----------
-(defun cvs-mode-mark-all-files ()
-  "Mark all files.
-Directories are not marked."
-
-  (interactive)
-  (cookie-map (function (lambda (cookie)
-                         (cond
-                          ((not (eq (cvs-fileinfo->type cookie) 'DIRCHANGE))
-                           (cvs-set-fileinfo->marked cookie t)
-                           t))))
-             cvs-cookie-handle))
-
-;;----------
-(defun cvs-mode-unmark (pos)
-  "Unmark a fileinfo.
-Args:  POS."
-
-  (interactive "d")
-  (let* ((tin (tin-locate cvs-cookie-handle pos))
-        (sel (tin-cookie cvs-cookie-handle tin)))
-    (cond
-     ((eq (cvs-fileinfo->type sel) 'DIRCHANGE)
-      (cookie-map
-       (function (lambda (f dir)
-                  (cond
-                   ((cvs-dir-member-p f dir)
-                    (cvs-set-fileinfo->marked f nil)
-                    t))))
-       cvs-cookie-handle
-       (cvs-fileinfo->dir sel)))
-     (t
-      (cvs-set-fileinfo->marked sel nil)
-      (tin-invalidate cvs-cookie-handle tin)
-      (tin-goto-next cvs-cookie-handle pos 1)))))
-
-;;----------
-(defun cvs-mode-unmark-all-files ()
-  "Unmark all files.
-Directories are also unmarked, but that doesn't matter, since
-they should always be unmarked."
-
-  (interactive)
-  (cookie-map (function (lambda (cookie)
-                         (cvs-set-fileinfo->marked cookie nil)
-                         t))
-             cvs-cookie-handle))
-
-;;----------
-(defun cvs-do-removal (tins)
-  "Remove files.
-Args:  TINS.
-
-TINS is a list of tins that the user wants to delete.  The files are deleted.
-If the type of the tin is 'UNKNOWN or 'UNKNOWN-DIR the tin is removed from the
-buffer.  If it is anything else the file is added to a list that should be `cvs
-remove'd and the tin is changed to be of type 'REMOVED.
-
-Returns a list of tins files that should be `cvs remove'd."
-
-  (cvs-use-temp-buffer)
-  (mapcar 'cvs-insert-full-path tins)
-  (cond
-   ((and tins (yes-or-no-p (format "Delete %d files? " (length tins))))
-    (let (files-to-remove)
-      (while tins
-       (let* ((tin (car tins))
-              (fileinfo (tin-cookie cvs-cookie-handle tin))
-              (filepath (cvs-full-path tin))
-              (type (cvs-fileinfo->type fileinfo)))
-         (if (or (eq type 'REMOVED)
-                 (eq type 'CVS-REMOVED))
-             nil
-           ;; if it doesn't exist, as a file or directory, ignore it
-           (cond ((file-directory-p filepath)
-                  (call-process cvs-rmdir-program nil nil nil filepath))
-                 ((file-exists-p filepath)
-                  (delete-file filepath)))
-           (if (or (eq type 'UNKNOWN)
-                    (eq type 'UNKNOWN-DIR)
-                    (eq type 'MOVE-AWAY))
-               (tin-delete cvs-cookie-handle tin)
-             (setq files-to-remove (cons tin files-to-remove))
-             (cvs-set-fileinfo->type fileinfo 'REMOVED)
-             (cvs-set-fileinfo->handled fileinfo nil)
-             (tin-invalidate cvs-cookie-handle tin))))
-       (setq tins (cdr tins)))
-      files-to-remove))
-   (t nil)))
-
-;;----------
-(defun cvs-mode-remove-file ()
-  "Remove all marked files."
-
-  (interactive)
-  (let ((files-to-remove (cvs-do-removal (cvs-get-marked))))
-    (if (null files-to-remove)
-       nil
-      (cvs-use-temp-buffer)
-      (message "removing from repository...")
-      (if (cvs-execute-list files-to-remove cvs-program
-                           (if cvs-cvsroot
-                               (list "-d" cvs-cvsroot "remove")
-                             '("remove"))
-                           "removing %s from repository...")
-         (error "CVS exited with non-zero exit status.")
-       (message "removing from repository... Done.")))))
-
-;;----------
-(defun cvs-mode-undo-local-changes ()
-  "Undo local changes to all marked files.
-The file is removed and `cvs update FILE' is run."
-
-  (interactive)
-  (let ((tins-to-undo (cvs-get-marked)))
-    (cvs-use-temp-buffer)
-    (mapcar 'cvs-insert-full-path tins-to-undo)
-    (cond
-     ((and tins-to-undo (yes-or-no-p (format "Undo changes to %d files? "
-                                            (length tins-to-undo))))
-      (let (files-to-update)
-       (while tins-to-undo
-         (let* ((tin (car tins-to-undo))
-                (fileinfo (tin-cookie cvs-cookie-handle tin))
-                (type (cvs-fileinfo->type fileinfo)))
-           (cond
-            ((or
-              (eq type 'UPDATED)
-              (eq type 'PATCHED)
-              (eq type 'MODIFIED)
-              (eq type 'MERGED)
-              (eq type 'CONFLICT)
-              (eq type 'CVS-REMOVED)
-              (eq type 'REM-CONFLICT)
-              (eq type 'MOVE-AWAY)
-              (eq type 'REMOVED))
-             (if (not (eq type 'REMOVED))
-                 (delete-file (cvs-full-path tin)))
-             (setq files-to-update (cons tin files-to-update))
-             (cvs-set-fileinfo->type fileinfo 'UPDATED)
-             (cvs-set-fileinfo->handled fileinfo t)
-             (tin-invalidate cvs-cookie-handle tin))
-
-            ((eq type 'MOD-CONFLICT)
-             (error "Use cvs-mode-add instead on %s."
-                    (cvs-fileinfo->file-name fileinfo)))
-
-            ((eq type 'REM-CONFLICT)
-             (error "Can't deal with a file you have removed and recreated."))
-
-            ((eq type 'DIRCHANGE)
-             (error "Undo on directories not supported (yet)."))
-
-            ((eq type 'ADDED)
-             (error "There is no old revision to get for %s"
-                    (cvs-fileinfo->file-name fileinfo)))
-            (t (error "cvs-mode-undo-local-changes: can't handle an %s"
-                      type)))
-
-           (setq tins-to-undo (cdr tins-to-undo))))
-       (cvs-use-temp-buffer)
-       (message "Re-getting files from repository...")
-       (if (cvs-execute-list files-to-update cvs-program
-                             (if cvs-cvsroot
-                                 (list "-d" cvs-cvsroot "update")
-                               '("update"))
-                             "Re-getting %s from repository...")
-           (error "CVS exited with non-zero exit status.")
-         (message "Re-getting files from repository... Done.")))))))
-
-;;----------
-(defun cvs-mode-acknowledge ()
-  "Remove all marked files from the buffer."
-
-  (interactive)
-  (mapcar (function (lambda (tin)
-                     (tin-delete cvs-cookie-handle tin)))
-         (cvs-get-marked)))
-
-;;----------
-(defun cvs-mode-unmark-up (pos)
-  "Unmark the file on the previous line.
-Takes one argument POS, a buffer position."
-
-  (interactive "d")
-  (let ((tin (tin-goto-previous cvs-cookie-handle pos 1)))
-    (cond
-     (tin
-      (cvs-set-fileinfo->marked (tin-cookie cvs-cookie-handle tin)
-                               nil)
-      (tin-invalidate cvs-cookie-handle tin)))))
-
-;;----------
-(defun cvs-mode-previous-line (arg)
-  "Go to the previous line.
-If a prefix argument is given, move by that many lines."
-
-  (interactive "p")
-  (tin-goto-previous cvs-cookie-handle (point) arg))
-
-;;----------
-(defun cvs-mode-next-line (arg)
-  "Go to the next line.
-If a prefix argument is given, move by that many lines."
-
-  (interactive "p")
-  (tin-goto-next cvs-cookie-handle (point) arg))
-
-;;----------
-(defun cvs-add-file-update-buffer (tin)
-  "Sub-function to cvs-mode-add.  Internal use only.  Update the display.  Return
-non-nil if `cvs add' should be called on this file.
-Args:  TIN.
-
-Returns 'DIR, 'ADD, 'ADD-DIR, or 'RESURRECT."
-
-  (let ((fileinfo (tin-cookie cvs-cookie-handle tin)))
-    (cond
-     ((eq (cvs-fileinfo->type fileinfo) 'UNKNOWN-DIR)
-      (cvs-set-fileinfo->full-log fileinfo "new directory added with cvs-mode-add")
-      'ADD-DIR)
-     ((eq (cvs-fileinfo->type fileinfo) 'UNKNOWN)
-      (cvs-set-fileinfo->type fileinfo 'ADDED)
-      (cvs-set-fileinfo->full-log fileinfo "new file added with cvs-mode-add")
-      (tin-invalidate cvs-cookie-handle tin)
-      'ADD)
-     ((eq (cvs-fileinfo->type fileinfo) 'REMOVED)
-      (cvs-set-fileinfo->type fileinfo 'UPDATED)
-      (cvs-set-fileinfo->full-log fileinfo "file resurrected with cvs-mode-add")
-      (cvs-set-fileinfo->handled fileinfo t)
-      (tin-invalidate cvs-cookie-handle tin)
-      'RESURRECT))))
-
-;;----------
-(defun cvs-add-sub (cvs-buf candidates)
-  "Internal use only.
-Args:  CVS-BUF CANDIDATES.
-
-CANDIDATES is a list of tins.  Updates the CVS-BUF and returns a list of lists.
-The first list is unknown tins that shall be `cvs add -m msg'ed.
-The second list is unknown directory tins that shall be `cvs add -m msg'ed.
-The third list is removed files that shall be `cvs add'ed (resurrected)."
-
-  (let (add add-dir resurrect)
-    (while candidates
-      (let ((type (cvs-add-file-update-buffer (car candidates))))
-       (cond ((eq type 'ADD)
-              (setq add (cons (car candidates) add)))
-             ((eq type 'ADD-DIR)
-              (setq add-dir (cons (car candidates) add-dir)))
-             ((eq type 'RESURRECT)
-              (setq resurrect (cons (car candidates) resurrect)))))
-      (setq candidates (cdr candidates)))
-    (list add add-dir resurrect)))
-
-;;----------
-(defun cvs-mode-add ()
-  "Add marked files to the cvs repository."
-
-  (interactive)
-  (let* ((buf (current-buffer))
-        (marked (cvs-get-marked))
-        (result (cvs-add-sub buf marked))
-        (added (car result))
-        (newdirs (car (cdr result)))
-        (resurrect (car (cdr (cdr result))))
-        (msg (if (or added newdirs)
-                 (read-from-minibuffer "Enter description: "))))
-
-    (if (or resurrect (or added newdirs))
-       (cvs-use-temp-buffer))
-
-    (cond (resurrect
-          (message "Resurrecting files from repository...")
-          (if (cvs-execute-list resurrect
-                                cvs-program
-                                (if cvs-cvsroot
-                                    (list "-d" cvs-cvsroot "add")
-                                  '("add"))
-                                "Resurrecting %s from repository...")
-              (error "CVS exited with non-zero exit status.")
-            (message "Resurrecting files from repository... Done."))))
-
-    (cond (added
-          (message "Adding new files to repository...")
-          (if (cvs-execute-list added
-                                cvs-program
-                                (if cvs-cvsroot
-                                    (list "-d" cvs-cvsroot "add" "-m" msg)
-                                  (list "add" "-m" msg))
-                                "Adding %s to repository...")
-              (error "CVS exited with non-zero exit status.")
-            (message "Adding new files to repository... Done."))))
-
-    (cond (newdirs
-          (message "Adding new directories to repository...")
-          (if (cvs-execute-list newdirs
-                                cvs-program
-                                (if cvs-cvsroot
-                                    (list "-d" cvs-cvsroot "add" "-m" msg)
-                                  (list "add" "-m" msg))
-                                "Adding %s to repository...")
-              (error "CVS exited with non-zero exit status.")
-            (while newdirs
-              (let* ((tin (car newdirs))
-                     (fileinfo (tin-cookie cvs-cookie-handle tin))
-                     (newdir (cvs-fileinfo->file-name fileinfo)))
-                (cvs-set-fileinfo->dir fileinfo
-                                       (concat (cvs-fileinfo->dir fileinfo)
-                                               "/"
-                                               newdir))
-                (cvs-set-fileinfo->type fileinfo 'DIRCHANGE)
-                (cvs-set-fileinfo->file-name fileinfo ".")
-                (tin-invalidate cvs-cookie-handle tin)
-                (setq newdirs (cdr newdirs))))
-            ;; FIXME: this should really run cvs-update-no-prompt on the
-            ;; subdir and insert everthing in the current list.
-            (message "You must re-update to visit the new directories."))))))
-
-;;----------
-(defun cvs-mode-ignore ()
-  "Arrange so that CVS ignores the selected files and directories.
-This command ignores files/dirs that are flagged as `Unknown'."
-
-  (interactive)
-  (mapcar (function (lambda (tin)
-                     (let* ((fileinfo (tin-cookie cvs-cookie-handle tin))
-                            (type (cvs-fileinfo->type fileinfo)))
-                       (cond ((or (eq type 'UNKNOWN)
-                                  (eq type 'UNKNOWN-DIR))
-                              (cvs-append-to-ignore fileinfo)
-                              (tin-delete cvs-cookie-handle tin))))))
-         (cvs-get-marked)))
-
-;;----------
-(defun cvs-append-to-ignore (fileinfo)
-  "Append the file in fileinfo to the .cvsignore file"
-
-  (save-window-excursion
-    (set-buffer (find-file-noselect (concat (file-name-as-directory
-                                            (cvs-fileinfo->dir fileinfo))
-                                           ".cvsignore")))
-    (goto-char (point-max))
-    (if (not (zerop (current-column)))
-       (insert "\n"))
-    (insert (cvs-fileinfo->file-name fileinfo) "\n")
-    (if cvs-sort-ignore-file
-       (sort-lines nil (point-min) (point-max)))
-    (save-buffer)))
-
-;;----------
-(defun cvs-mode-status ()
-  "Show cvs status for all marked files."
-
-  (interactive)
-  (save-some-buffers)
-  (if (not (listp cvs-status-flags))
-      (error "cvs-status-flags should be set using cvs-set-status-flags."))
-  (let ((marked (cvs-get-marked nil t)))
-    (cvs-use-temp-buffer)
-    (message "Running cvs status ...")
-    (if (cvs-execute-list marked
-                         cvs-program
-                         (append (if cvs-cvsroot (list "-d" cvs-cvsroot))
-                                 (list "-Q" "status")
-                                 cvs-status-flags)
-                         "Running cvs -Q status %s...")
-       (error "CVS exited with non-zero exit status.")
-      (message "Running cvs -Q status ... Done."))))
-
-;;----------
-(defun cvs-mode-log ()
-  "Display the cvs log of all selected files."
-
-  (interactive)
-  (if (not (listp cvs-log-flags))
-      (error "cvs-log-flags should be set using cvs-set-log-flags."))
-  (let ((marked (cvs-get-marked nil t)))
-    (cvs-use-temp-buffer)
-    (message "Running cvs log ...")
-    (if (cvs-execute-list marked
-                         cvs-program
-                         (append (if cvs-cvsroot (list "-d" cvs-cvsroot))
-                                 (list "log")
-                                 cvs-log-flags)
-                         "Running cvs log %s...")
-       (error "CVS exited with non-zero exit status.")
-      (message "Running cvs log ... Done."))))
-
-;;----------
-(defun cvs-mode-tag ()
-  "Run 'cvs tag' on all selected files."
-
-  (interactive)
-  (if (not (listp cvs-tag-flags))
-      (error "cvs-tag-flags should be set using cvs-set-tag-flags."))
-  (let ((marked (cvs-get-marked nil t))
-       (tag-args (cvs-make-list (read-string "Tag name (and flags): "))))
-    (cvs-use-temp-buffer)
-    (message "Running cvs tag ...")
-    (if (cvs-execute-list marked
-                         cvs-program
-                         (append (if cvs-cvsroot (list "-d" cvs-cvsroot))
-                                 (list "tag")
-                                 cvs-tag-flags
-                                 tag-args)
-                         "Running cvs tag %s...")
-       (error "CVS exited with non-zero exit status.")
-      (message "Running cvs tag ... Done."))))
-
-;;----------
-(defun cvs-mode-rtag ()
-  "Run 'cvs rtag' on all selected files."
-
-  (interactive)
-  (if (not (listp cvs-rtag-flags))
-      (error "cvs-rtag-flags should be set using cvs-set-rtag-flags."))
-  (let ((marked (cvs-get-marked nil t))
-       ;; FIXME:  should give selection from the modules file
-       (module-name (read-string "Module name: "))
-       ;; FIXME:  should also ask for an existing tag *or* date
-       (rtag-args (cvs-make-list (read-string "Tag name (and flags): "))))
-    (cvs-use-temp-buffer)
-    (message "Running cvs rtag ...")
-    (if (cvs-execute-list marked
-                         cvs-program
-                         (append (if cvs-cvsroot (list "-d" cvs-cvsroot)) 
-                                 (list "rtag")
-                                 cvs-rtag-flags
-                                 rtag-args
-                                 (list module-name))
-                         "Running cvs rtag %s...")
-       (error "CVS rtag exited with non-zero exit status.")
-      (message "Running cvs rtag ... Done."))))
-
-;;----------
-(defun cvs-mode-byte-compile-files ()
-  "Run byte-compile-file on all selected files that end in '.el'."
-
-  (interactive)
-  (let ((marked (cvs-get-marked)))
-    (while marked
-      (let ((filename (cvs-full-path (car marked))))
-       (if (string-match "\\.el$" filename)
-           (byte-compile-file filename)))
-      (setq marked (cdr marked)))))
-
-;;----------
-(defun cvs-insert-full-path (tin)
-  "Insert full path to the file described in TIN in the current buffer."
-
-  (insert (format "%s\n" (cvs-full-path tin))))
-
-;;----------
-(defun cvs-mode-add-change-log-entry-other-window (pos)
-  "Add a ChangeLog entry in the ChangeLog of the current directory.
-Args:  POS."
-
-  (interactive "d")
-  (let* ((cvs-buf (current-buffer))
-        (odir default-directory)
-        (obfname buffer-file-name)
-        (tin (tin-locate cvs-cookie-handle pos))
-        (fileinfo (tin-cookie cvs-cookie-handle tin))
-        (fname (cvs-fileinfo->file-name fileinfo))
-        (dname (file-name-as-directory (cvs-fileinfo->dir fileinfo))))
-    (setq change-log-default-name nil) ; this rarely correct in 19.28
-    (setq buffer-file-name (cond (fname
-                                  fname)
-                                 (t
-                                  nil)))
-    (setq default-directory (cond (dname
-                                   dname)
-                                  (t
-                                   odir)))
-    (add-change-log-entry-other-window)
-    (set-buffer cvs-buf)
-    (setq default-directory odir)
-    (setq buffer-file-name obfname)))
-
-;;----------
-(defun print-cvs-tin (foo)
-  "Debug utility."
-
-  (let ((cookie (tin-cookie cvs-cookie-handle foo))
-       (stream (get-buffer-create "pcl-cvs-debug")))
-    (princ "==============\n" stream)
-    (princ (cvs-fileinfo->file-name cookie) stream)
-    (princ "\n" stream)
-    (princ (cvs-fileinfo->dir cookie) stream)
-    (princ "\n" stream)
-    (princ (cvs-fileinfo->full-log cookie) stream)
-    (princ "\n" stream)
-    (princ (cvs-fileinfo->marked cookie) stream)
-    (princ "\n" stream)))
-
-;;----------
-;; NOTE: the variable cvs-emerge-tmp-head-file will be "free" when compiling
-(defun cvs-mode-emerge (pos)
-  "Emerge appropriate revisions of the selected file.
-Args:  POS."
-
-  (interactive "d")
-  (let* ((cvs-buf (current-buffer))
-        (tin (tin-locate cvs-cookie-handle pos)))
-    (if (boundp 'cvs-emerge-tmp-head-file)
-       (error "There can only be one emerge session active at a time."))
-    (if tin
-       (let* ((fileinfo (tin-cookie cvs-cookie-handle tin))
-              (type (cvs-fileinfo->type fileinfo)))
-         (cond
-          ((eq type 'MODIFIED)         ; merge repository head rev. with working file
-           (require 'emerge)
-           (setq cvs-emerge-tmp-head-file ; trick to prevent multiple runs
-                 (cvs-retrieve-revision-to-tmpfile fileinfo))
-           (unwind-protect
-               (if (not (emerge-files
-                         t                                             ; arg
-                         (cvs-fileinfo->full-path fileinfo)            ; file-A
-                         ;; this is an un-avoidable compiler reference to a free variable
-                         cvs-emerge-tmp-head-file                      ; file-B
-                         (cvs-fileinfo->full-path fileinfo)            ; file-out
-                         nil                                           ; start-hooks
-                         '(lambda ()                                   ; quit-hooks
-                            (delete-file cvs-emerge-tmp-head-file)
-                            (makunbound 'cvs-emerge-tmp-head-file))))
-                   (error "Emerge session failed"))))
-
-          ;; re-do the same merge rcsmerge supposedly just did....
-          ((or (eq type 'MERGED)
-               (eq type 'CONFLICT))    ; merge backup-working=A, head=B, base=ancestor
-           (require 'emerge)
-           (setq cvs-emerge-tmp-head-file ; trick to prevent multiple runs
-                 (cvs-retrieve-revision-to-tmpfile fileinfo
-                                                   (cvs-fileinfo->head-revision
-                                                    fileinfo)))
-           (let ((cvs-emerge-tmp-backup-working-file
-                  (cvs-fileinfo->backup-file fileinfo))
-                 (cvs-emerge-tmp-ancestor-file
-                  (cvs-retrieve-revision-to-tmpfile fileinfo
-                                                    (cvs-fileinfo->base-revision
-                                                     fileinfo))))
-             (unwind-protect
-                 (if (not (emerge-files-with-ancestor
-                           t                                           ; arg
-                           cvs-emerge-tmp-backup-working-file          ; file-A
-                           ;; this is an un-avoidable compiler reference to a free variable
-                           cvs-emerge-tmp-head-file                    ; file-B
-                           cvs-emerge-tmp-ancestor-file                ; file-ancestor
-                           (cvs-fileinfo->full-path fileinfo)          ; file-out
-                           nil                                         ; start-hooks
-                           '(lambda ()                                 ; quit-hooks
-                              (delete-file cvs-emerge-tmp-backup-file)
-                              (delete-file cvs-emerge-tmp-ancestor-file)
-                              (delete-file cvs-emerge-tmp-head-file)
-                              (makunbound 'cvs-emerge-tmp-head-file))))
-                     (error "Emerge session failed")))))
-          (t
-           (error "Can only e-merge \"Modified\", \"Merged\" or \"Conflict\" files"))))
-      (error "There is no file to e-merge."))))
-
-;;----------
-;; NOTE: the variable ediff-version may be "free" when compiling
-(defun cvs-mode-ediff (pos)
-  "Ediff appropriate revisions of the selected file.
-Args:  POS."
-
-  (interactive "d")
-  (if (boundp 'cvs-ediff-tmp-head-file)
-      (error "There can only be one ediff session active at a time."))
-  (require 'ediff)
-  (if (and (boundp 'ediff-version)
-          (>= (string-to-number ediff-version) 2.0)) ; FIXME real number?
-      (run-ediff-from-cvs-buffer pos)
-    (cvs-old-ediff-interface pos)))
-
-(defun cvs-old-ediff-interface (pos)
-  "Emerge like interface for older ediffs.
-Args:  POS"
-
-  (let* ((cvs-buf (current-buffer))
-        (tin (tin-locate cvs-cookie-handle pos)))
-    (if tin
-       (let* ((fileinfo (tin-cookie cvs-cookie-handle tin))
-              (type (cvs-fileinfo->type fileinfo)))
-         (cond
-          ((eq type 'MODIFIED)         ; diff repository head rev. with working file
-           ;; should this be inside the unwind-protect, and should the
-           ;; makeunbound be an unwindform?
-           (setq cvs-ediff-tmp-head-file ; trick to prevent multiple runs
-                 (cvs-retrieve-revision-to-tmpfile fileinfo))
-           (unwind-protect
-               (if (not (ediff-files   ; check correct ordering of args
-                         (cvs-fileinfo->full-path fileinfo)            ; file-A
-                         ;; this is an un-avoidable compiler reference to a free variable
-                         cvs-ediff-tmp-head-file                       ; file-B
-                         '(lambda ()                                   ; startup-hooks
-                            (make-local-hook 'ediff-cleanup-hooks)
-                            (add-hook 'ediff-cleanup-hooks
-                                      '(lambda ()
-                                         (ediff-janitor)
-                                         (delete-file cvs-ediff-tmp-head-file)
-                                         (makunbound 'cvs-ediff-tmp-head-file))
-                                      nil t))))
-                   (error "Ediff session failed"))))
-
-          ;; look at the merge rcsmerge supposedly just did....
-          ((or (eq type 'MERGED)
-               (eq type 'CONFLICT))    ; diff backup-working=A, head=B, base=ancestor
-           (if (not (boundp 'ediff-version))
-               (error "ediff version way too old for 3-way diff"))
-           (if (<= (string-to-number ediff-version) 1.9) ; FIXME real number?
-               (error "ediff version %s too old for 3-way diff" ediff-version))
-           (setq cvs-ediff-tmp-head-file ; trick to prevent multiple runs
-                 (cvs-retrieve-revision-to-tmpfile fileinfo
-                                                   (cvs-fileinfo->head-revision
-                                                    fileinfo)))
-           (let ((cvs-ediff-tmp-backup-working-file
-                  (cvs-fileinfo->backup-file fileinfo))
-                 (cvs-ediff-tmp-ancestor-file
-                  (cvs-retrieve-revision-to-tmpfile fileinfo
-                                                    (cvs-fileinfo->base-revision
-                                                     fileinfo))))
-             (unwind-protect
-                 (if (not (ediff-files3 ; check correct ordering of args
-                           cvs-ediff-tmp-backup-working-file           ; file-A
-                           ;; this is an un-avoidable compiler reference to a free variable
-                           cvs-ediff-tmp-head-file                     ; file-B
-                           cvs-ediff-tmp-ancestor-file                 ; file-ancestor
-                           '(lambda ()                                 ; start-hooks
-                              (make-local-hook 'ediff-cleanup-hooks)
-                              (add-hook 'ediff-cleanup-hooks
-                                        '(lambda ()
-                                           (ediff-janitor)
-                                           (delete-file cvs-ediff-tmp-backup-file)
-                                           (delete-file cvs-ediff-tmp-ancestor-file)
-                                           (delete-file cvs-ediff-tmp-head-file)
-                                           (makunbound 'cvs-ediff-tmp-head-file))
-                                        nil t))))
-                     (error "Ediff session failed")))))
-
-          ((not (or (eq type 'UNKNOWN)
-                    (eq type 'UNKNOWN-DIR))) ; i.e. UPDATED or PATCHED ????
-           ;; this should really diff the current working file with the previous
-           ;; rev. on the current branch (i.e. not the head, since that's what
-           ;; the current file should be)
-           (setq cvs-ediff-tmp-head-file ; trick to prevent multiple runs
-                 (cvs-retrieve-revision-to-tmpfile fileinfo
-                                                   (read-string "Rev #/tag to diff against: "
-                                                                (cvs-fileinfo->head-revision
-                                                                 fileinfo))))
-           (unwind-protect
-               (if (not (ediff-files   ; check correct ordering of args
-                         (cvs-fileinfo->full-path fileinfo)            ; file-A
-                         ;; this is an un-avoidable compiler reference to a free variable
-                         cvs-ediff-tmp-head-file                       ; file-B
-                         '(lambda ()                                   ; startup-hooks
-                            (make-local-hook 'ediff-cleanup-hooks)
-                            (add-hook 'ediff-cleanup-hooks
-                                      '(lambda ()
-                                         (ediff-janitor)
-                                         (delete-file cvs-ediff-tmp-head-file)
-                                         (makunbound 'cvs-ediff-tmp-head-file))
-                                      nil t))))
-                   (error "Ediff session failed"))))
-          (t
-           (error "Can not ediff \"Unknown\" files"))))
-      (error "There is no file to ediff."))))
-
-;;----------
-(defun cvs-retrieve-revision-to-tmpfile (fileinfo &optional revision)
-  "Retrieve the latest revision of the file in FILEINFO to a temporary file.
-If second optional argument REVISION is given, retrieve that revision instead."
-
-  (let
-      ((temp-name (make-temp-name
-                  (concat (file-name-as-directory
-                           (or (getenv "TMPDIR") "/tmp"))
-                          "pcl-cvs." revision))))
-    (cvs-kill-buffer-visiting temp-name)
-    (if (and revision
-            (stringp revision)
-            (not (string= revision "")))
-       (message "Retrieving revision %s..." revision)
-      (message "Retrieving latest revision..."))
-    (let ((res (call-process cvs-shell nil nil nil "-c"
-                            (concat cvs-program " update -p "
-                                    (if (and revision
-                                             (stringp revision)
-                                             (not (string= revision "")))
-                                        (concat "-r " revision " ")
-                                      "")
-                                    (cvs-fileinfo->full-path fileinfo)
-                                    " > " temp-name))))
-      (if (and res (not (and (integerp res) (zerop res))))
-         (error "Something went wrong retrieving revision %s: %s"
-                revision res))
-
-      (if revision
-         (message "Retrieving revision %s... Done." revision)
-       (message "Retrieving latest revision... Done."))
-      (save-excursion
-       (set-buffer (find-file-noselect temp-name))
-       (rename-buffer (concat " " (file-name-nondirectory temp-name)) t))
-      temp-name)))
-
-;;----------
-(defun cvs-kill-buffer-visiting (filename)
-  "If there is any buffer visiting FILENAME, kill it (without confirmation)."
-
-  (let ((l (buffer-list)))
-    (while l
-      (if (string= (buffer-file-name (car l)) filename)
-         (kill-buffer (car l)))
-      (setq l (cdr l)))))
-
-;;----------
-(defun cvs-change-cvsroot ()
-  "Ask for a new cvsroot."
-
-  (interactive)
-  (cvs-set-cvsroot (read-file-name "New CVSROOT: " cvs-cvsroot)))
-
-;;----------
-(defun cvs-set-cvsroot (newroot)
-  "Change the cvsroot."
-
-  (if (or (file-directory-p (expand-file-name "CVSROOT" newroot))
-         (y-or-n-p (concat "Warning:  no CVSROOT found inside repository."
-                           " Change cvs-cvsroot anyhow?")))
-      (setq cvs-cvsroot newroot)))
-
-;;----------
-(defun cvs-set-diff-flags ()
-  "Ask for new setting of cvs-diff-flags."
-
-  (interactive)
-  (let ((old-value (mapconcat 'identity
-                             (copy-sequence cvs-diff-flags) " ")))
-    (setq cvs-diff-flags
-         (cvs-make-list (read-string "Diff flags: " old-value)))))
-
-;;----------
-(defun cvs-set-update-optional-flags ()
-  "Ask for new setting of cvs-update-optional-flags."
-  
-  (interactive)
-  (let ((old-value (mapconcat 'identity
-                             (copy-sequence cvs-update-optional-flags) " ")))
-    (setq cvs-update-optional-flags
-         (cvs-make-list (read-string "Update optional flags: " old-value)))))
-
-;;----------
-(defun cvs-set-status-flags ()
-  "Ask for new setting of cvs-status-flags."
-
-  (interactive)
-  (let ((old-value (mapconcat 'identity
-                             (copy-sequence cvs-status-flags) " ")))
-    (setq cvs-status-flags
-         (cvs-make-list (read-string "Status flags: " old-value)))))
-
-;;----------
-(defun cvs-set-log-flags ()
-  "Ask for new setting of cvs-log-flags."
-
-  (interactive)
-  (let ((old-value (mapconcat 'identity
-                             (copy-sequence cvs-log-flags) " ")))
-    (setq cvs-log-flags
-         (cvs-make-list (read-string "Log flags: " old-value)))))
-
-;;----------
-(defun cvs-set-tag-flags ()
-  "Ask for new setting of cvs-tag-flags."
-
-  (interactive)
-  (let ((old-value (mapconcat 'identity
-                             (copy-sequence cvs-tag-flags) " ")))
-    (setq cvs-tag-flags
-         (cvs-make-list (read-string "Tag flags: " old-value)))))
-
-;;----------
-(defun cvs-set-rtag-flags ()
-  "Ask for new setting of cvs-rtag-flags."
-
-  (interactive)
-  (let ((old-value (mapconcat 'identity
-                             (copy-sequence cvs-rtag-flags) " ")))
-    (setq cvs-rtag-flags
-         (cvs-make-list (read-string "Rtag flags: " old-value)))))
-
-;;----------
-(if (string-match "Lucid" emacs-version)
-    (progn
-      (autoload 'pcl-cvs-fontify "pcl-cvs-lucid")
-      (add-hook 'cvs-mode-hook 'pcl-cvs-fontify)))
-
-(defun cvs-changelog-name (directory)
-  "Return the name of the ChangeLog file that handles DIRECTORY.
-This is in DIRECTORY or one of its parents.
-Signal an error if we can't find an appropriate ChangeLog file."
-  (let ((dir (file-name-as-directory directory))
-        file)
-    (while (and dir
-                (not (file-exists-p 
-                      (setq file (expand-file-name "ChangeLog" dir)))))
-      (let ((last dir))
-        (setq dir (file-name-directory (directory-file-name dir)))
-        (if (equal last dir)
-            (setq dir nil))))
-    (or dir
-        (error "Can't find ChangeLog for %s" directory))
-    file))
-
-(defun cvs-narrow-changelog ()
-  "Narrow to the top page of the current buffer, a ChangeLog file.
-Actually, the narrowed region doesn't include the date line.
-A \"page\" in a ChangeLog file is the area between two dates."
-  (or (eq major-mode 'change-log-mode)
-      (error "cvs-narrow-changelog: current buffer isn't a ChangeLog"))
-
-  (goto-char (point-min))
-
-  ;; Skip date line and subsequent blank lines.
-  (forward-line 1)
-  (if (looking-at "[ \t\n]*\n")
-      (goto-char (match-end 0)))
-
-  (let ((start (point)))
-    (forward-page 1)
-    (narrow-to-region start (point))
-    (goto-char (point-min))))
-
-(defun cvs-changelog-paragraph ()
-  "Return the bounds of the ChangeLog paragraph containing point.
-If we are between paragraphs, return the previous paragraph."
-  (save-excursion
-    (beginning-of-line)
-    (if (looking-at "^[ \t]*$")
-        (skip-chars-backward " \t\n" (point-min)))
-    (list (progn
-            (if (re-search-backward "^[ \t]*\n" nil 'or-to-limit)
-                (goto-char (match-end 0)))
-            (point))
-          (if (re-search-forward "^[ \t\n]*$" nil t)
-              (match-beginning 0)
-            (point)))))
-
-(defun cvs-changelog-subparagraph ()
-  "Return the bounds of the ChangeLog subparagraph containing point.
-A subparagraph is a block of non-blank lines beginning with an asterisk.
-If we are between sub-paragraphs, return the previous subparagraph."
-  (save-excursion
-    (end-of-line)
-    (if (search-backward "*" nil t)
-        (list (progn (beginning-of-line) (point))
-              (progn 
-                (forward-line 1)
-                (if (re-search-forward "^[ \t]*[\n*]" nil t)
-                    (match-beginning 0)
-                  (point-max))))
-      (list (point) (point)))))
-
-(defun cvs-changelog-entry ()
-  "Return the bounds of the ChangeLog entry containing point.
-The variable `cvs-changelog-full-paragraphs' decides whether an
-\"entry\" is a paragraph or a subparagraph; see its documentation string
-for more details."
-  (if cvs-changelog-full-paragraphs
-      (cvs-changelog-paragraph)
-    (cvs-changelog-subparagraph)))
-
-;; NOTE: the variable user-full-name may be "free" when compiling
-(defun cvs-changelog-ours-p ()
-  "See if ChangeLog entry at point is for the current user, today.
-Return non-nil iff it is."
-  ;; Code adapted from add-change-log-entry.
-  (looking-at (concat (regexp-quote (substring (current-time-string)
-                                               0 10))
-                      ".* "
-                      (regexp-quote (substring (current-time-string) -4))
-                      "[ \t]+"
-                     (regexp-quote (if (and (boundp 'add-log-full-name)
-                                             add-log-full-name)
-                                        add-log-full-name
-                                      user-full-name))
-                      "  <"
-                     (regexp-quote (if (and (boundp 'add-log-mailing-address)
-                                            add-log-mailing-address)
-                                       add-log-mailing-address
-                                     user-mail-address)))))
-
-(defun cvs-relative-path (base child)
-  "Return a directory path relative to BASE for CHILD.
-If CHILD doesn't seem to be in a subdirectory of BASE, just return 
-the full path to CHILD."
-  (let ((base (file-name-as-directory (expand-file-name base)))
-        (child (expand-file-name child)))
-    (or (string= base (substring child 0 (length base)))
-        (error "cvs-relative-path: %s isn't in %s" child base))
-    (substring child (length base))))
-
-(defun cvs-changelog-entries (file)
-  "Return the ChangeLog entries for FILE, and the ChangeLog they came from.
-The return value looks like this:
-  (LOGBUFFER (ENTRYSTART . ENTRYEND) ...)
-where LOGBUFFER is the name of the ChangeLog buffer, and each
-\(ENTRYSTART . ENTRYEND\) pair is a buffer region."
-  (save-excursion
-    (set-buffer (find-file-noselect
-                 (cvs-changelog-name
-                  (file-name-directory
-                   (expand-file-name file)))))
-    (or (eq major-mode 'change-log-mode)
-       (change-log-mode))
-    (goto-char (point-min))
-    (if (looking-at "[ \t\n]*\n")
-        (goto-char (match-end 0)))
-    (if (not (cvs-changelog-ours-p))
-        (list (current-buffer))
-      (save-restriction
-        (cvs-narrow-changelog)
-        (goto-char (point-min))
-
-        ;; Search for the name of FILE relative to the ChangeLog.  If that
-        ;; doesn't occur anywhere, they're not using full relative
-        ;; filenames in the ChangeLog, so just look for FILE; we'll accept
-        ;; some false positives.
-        (let ((pattern (cvs-relative-path
-                        (file-name-directory buffer-file-name) file)))
-          (if (or (string= pattern "")
-                  (not (save-excursion
-                         (search-forward pattern nil t))))
-              (setq pattern file))
-
-          (let (texts)
-            (while (search-forward pattern nil t)
-              (let ((entry (cvs-changelog-entry)))
-                (setq texts (cons entry texts))
-                (goto-char (elt entry 1))))
-
-            (cons (current-buffer) texts)))))))
-
-(defun cvs-changelog-insert-entries (buffer regions)
-  "Insert those regions in BUFFER specified in REGIONS.
-Sort REGIONS front-to-back first."
-  (let ((regions (sort regions 'car-less-than-car))
-        (last))
-    (while regions
-      (if (and last (< last (car (car regions))))
-          (newline))
-      (setq last (elt (car regions) 1))
-      (apply 'insert-buffer-substring buffer (car regions))
-      (setq regions (cdr regions)))))
-
-(defun cvs-union (set1 set2)
-  "Return the union of SET1 and SET2, according to `equal'."
-  (while set2
-    (or (member (car set2) set1)
-        (setq set1 (cons (car set2) set1)))
-    (setq set2 (cdr set2)))
-  set1)
-
-(defun cvs-insert-changelog-entries (files)
-  "Given a list of files FILES, insert the ChangeLog entries for them."
-  (let ((buffer-entries nil))
-
-    ;; Add each buffer to buffer-entries, and associate it with the list
-    ;; of entries we want from that file.
-    (while files
-      (let* ((entries (cvs-changelog-entries (car files)))
-             (pair (assq (car entries) buffer-entries)))
-        (if pair
-            (setcdr pair (cvs-union (cdr pair) (cdr entries)))
-          (setq buffer-entries (cons entries buffer-entries))))
-      (setq files (cdr files)))
-
-    ;; Now map over each buffer in buffer-entries, sort the entries for
-    ;; each buffer, and extract them as strings.
-    (while buffer-entries
-      (cvs-changelog-insert-entries (car (car buffer-entries))
-                                    (cdr (car buffer-entries)))
-      (if (and (cdr buffer-entries) (cdr (car buffer-entries)))
-          (newline))
-      (setq buffer-entries (cdr buffer-entries)))))
-
-(defun cvs-edit-delete-common-indentation ()
-  "Unindent the current buffer rigidly until at least one line is flush left."
-  (save-excursion
-    (let ((common 100000))
-      (goto-char (point-min))
-      (while (< (point) (point-max))
-        (if (not (looking-at "^[ \t]*$"))
-            (setq common (min common (current-indentation))))
-        (forward-line 1))
-      (indent-rigidly (point-min) (point-max) (- common)))))
-
-(defun cvs-mode-changelog-commit ()
-  "Check in all marked files, or the current file.
-Ask the user for a log message in a buffer.
-
-This is just like `\\[cvs-mode-commit]', except that it tries to provide
-appropriate default log messages by looking at the ChangeLog.  The
-idea is to write your ChangeLog entries first, and then use this
-command to commit your changes.
-
-To select default log text, we:
-- find the ChangeLog entries for the files to be checked in,
-- verify that the top entry in the ChangeLog is on the current date
-  and by the current user; if not, we don't provide any default text,
-- search the ChangeLog entry for paragraphs containing the names of
-  the files we're checking in, and finally
-- use those paragraphs as the log text."
-
-  (interactive)
-
-  (let* ((cvs-buf (current-buffer))
-         (marked (cvs-filter (function cvs-committable)
-                             (cvs-get-marked))))
-    (if (null marked)
-        (error "Nothing to commit!")
-      (pop-to-buffer (get-buffer-create cvs-commit-prompt-buffer))
-      (goto-char (point-min))
-
-      (erase-buffer)
-      (cvs-insert-changelog-entries
-       (mapcar (lambda (tin)
-                 (let ((cookie (tin-cookie cvs-cookie-handle tin)))
-                   (expand-file-name 
-                    (cvs-fileinfo->file-name cookie)
-                    (cvs-fileinfo->dir cookie))))
-               marked))
-      (cvs-edit-delete-common-indentation)
-
-      (cvs-edit-mode)
-      (make-local-variable 'cvs-commit-list)
-      (setq cvs-commit-list marked)
-      (message "Press C-c C-c when you are done editing."))))
-
-;;;; end of file pcl-cvs.el
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.elc b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.elc
deleted file mode 100644 (file)
index 3bd7638..0000000
Binary files a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.elc and /dev/null differ
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info
deleted file mode 100644 (file)
index bbf572f..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-This is Info file pcl-cvs.info, produced by Makeinfo-1.55 from the
-input file ./pcl-cvs.texinfo.
-
-   Copyright (C) 1992 Per Cederqvist
-
-   Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-   Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
-   Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public
-License" and this permission notice may be included in translations
-approved by the Free Software Foundation instead of in the original
-English.
-
-\1f
-Indirect:
-pcl-cvs.info-1: 1013
-pcl-cvs.info-2: 50562
-\1f
-Tag Table:
-(Indirect)
-Node: Top\7f1013
-Node: Copying\7f3575
-Node: Installation\7f22813
-Node: Pcl-cvs installation\7f23608
-Node: On-line manual installation\7f25673
-Node: Typeset manual installation\7f26696
-Node: About pcl-cvs\7f27439
-Node: Contributors\7f27813
-Node: Archives\7f29121
-Node: Getting started\7f29705
-Node: Buffer contents\7f32146
-Node: File status\7f32700
-Node: Selected files\7f35730
-Node: Commands\7f36403
-Node: Updating the directory\7f37619
-Node: Movement commands\7f39282
-Node: Marking files\7f39873
-Node: Committing changes\7f40735
-Node: Editing files\7f42206
-Node: Getting info about files\7f43056
-Node: Adding and removing files\7f43541
-Node: Undoing changes\7f44897
-Node: Removing handled entries\7f45362
-Node: Ignoring files\7f46285
-Node: Viewing differences\7f46820
-Node: Emerge\7f48134
-Node: Reverting your buffers\7f49113
-Node: Miscellaneous commands\7f49815
-Node: Customization\7f50562
-Node: Future enhancements\7f54248
-Node: Bugs\7f58449
-Node: Function and Variable Index\7f60235
-Node: Concept Index\7f63033
-Node: Key Index\7f69634
-\1f
-End Tag Table
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info-1 b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info-1
deleted file mode 100644 (file)
index 300b1a6..0000000
+++ /dev/null
@@ -1,1195 +0,0 @@
-This is Info file pcl-cvs.info, produced by Makeinfo-1.55 from the
-input file ./pcl-cvs.texinfo.
-
-   Copyright (C) 1992 Per Cederqvist
-
-   Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-   Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
-   Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public
-License" and this permission notice may be included in translations
-approved by the Free Software Foundation instead of in the original
-English.
-
-\1f
-File: pcl-cvs.info,  Node: Top,  Next: Copying,  Prev: (dir),  Up: (dir)
-
-   This info manual describes pcl-cvs which is a GNU Emacs front-end
-to CVS.  It works with CVS version 1.3.  This manual is updated to
-release 1.05 of pcl-cvs.
-
-* Menu:
-
-* Copying::                     GNU General Public License
-* Installation::                How to install pcl-cvs on your system.
-* About pcl-cvs::               Authors and ftp sites.
-
-* Getting started::             An introduction with a walk-through example.
-* Buffer contents::             An explanation of the buffer contents.
-* Commands::                    All commands, grouped by type.
-
-* Customization::               How you can tailor pcl-cvs to suit your needs.
-* Future enhancements::         Future enhancements of pcl-cvs.
-* Bugs::                        Bugs (known and unknown).
-* Function and Variable Index::  List of functions and variables.
-* Concept Index::               List of concepts.
-* Key Index::                   List of keystrokes.
-
- -- The Detailed Node Listing --
-
-Installation
-
-* Pcl-cvs installation::        How to install pcl-cvs on your system.
-* On-line manual installation::  How to install the on-line manual.
-* Typeset manual installation::  How to create typeset documentation
-                                 about pcl-cvs.
-
-About pcl-cvs
-
-* Contributors::                Contributors to pcl-cvs.
-* Archives::                    Where can I get a copy of Pcl-Cvs?
-
-Buffer contents
-
-* File status::                 The meaning of the second field.
-* Selected files::              How selection works.
-
-Commands
-
-* Updating the directory::      Commands to update the local directory
-* Movement commands::           How to move up and down in the buffer
-* Marking files::               How to mark files that other commands
-                                will later operate on.
-* Committing changes::          Checking in your modifications to the
-                                CVS repository.
-* Editing files::               Loading files into Emacs.
-* Getting info about files::    Display the log and status of files.
-* Adding and removing files::   Adding and removing files
-* Undoing changes::             Undoing changes
-* Removing handled entries::    Uninteresting lines can easily be removed.
-* Ignoring files::              Telling CVS to ignore generated files.
-* Viewing differences::         Commands to `diff' different versions.
-* Emerge::
-* Reverting your buffers::      Reverting your buffers
-* Miscellaneous commands::      Miscellaneous commands
-
-\1f
-File: pcl-cvs.info,  Node: Copying,  Next: Installation,  Prev: Top,  Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
-                        Version 2, June 1991
-
-     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     675 Mass Ave, Cambridge, MA 02139, USA
-     
-     Everyone is permitted to copy and distribute verbatim copies
-     of this license document, but changing it is not allowed.
-
-Preamble
-========
-
-   The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-   When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-   To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the software, or if you modify it.
-
-   For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-   We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to
-copy, distribute and/or modify the software.
-
-   Also, for each author's protection and ours, we want to make
-certain that everyone understands that there is no warranty for this
-free software.  If the software is modified by someone else and
-passed on, we want its recipients to know that what they have is not
-the original, so that any problems introduced by others will not
-reflect on the original authors' reputations.
-
-   Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at
-all.
-
-   The precise terms and conditions for copying, distribution and
-modification follow.
-
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  1. This License applies to any program or other work which contains
-     a notice placed by the copyright holder saying it may be
-     distributed under the terms of this General Public License.  The
-     "Program", below, refers to any such program or work, and a
-     "work based on the Program" means either the Program or any
-     derivative work under copyright law: that is to say, a work
-     containing the Program or a portion of it, either verbatim or
-     with modifications and/or translated into another language.
-     (Hereinafter, translation is included without limitation in the
-     term "modification".)  Each licensee is addressed as "you".
-
-     Activities other than copying, distribution and modification are
-     not covered by this License; they are outside its scope.  The
-     act of running the Program is not restricted, and the output
-     from the Program is covered only if its contents constitute a
-     work based on the Program (independent of having been made by
-     running the Program).  Whether that is true depends on what the
-     Program does.
-
-  2. You may copy and distribute verbatim copies of the Program's
-     source code as you receive it, in any medium, provided that you
-     conspicuously and appropriately publish on each copy an
-     appropriate copyright notice and disclaimer of warranty; keep
-     intact all the notices that refer to this License and to the
-     absence of any warranty; and give any other recipients of the
-     Program a copy of this License along with the Program.
-
-     You may charge a fee for the physical act of transferring a
-     copy, and you may at your option offer warranty protection in
-     exchange for a fee.
-
-  3. You may modify your copy or copies of the Program or any portion
-     of it, thus forming a work based on the Program, and copy and
-     distribute such modifications or work under the terms of Section
-     1 above, provided that you also meet all of these conditions:
-
-       a. You must cause the modified files to carry prominent notices
-          stating that you changed the files and the date of any
-          change.
-
-       b. You must cause any work that you distribute or publish,
-          that in whole or in part contains or is derived from the
-          Program or any part thereof, to be licensed as a whole at
-          no charge to all third parties under the terms of this
-          License.
-
-       c. If the modified program normally reads commands
-          interactively when run, you must cause it, when started
-          running for such interactive use in the most ordinary way,
-          to print or display an announcement including an
-          appropriate copyright notice and a notice that there is no
-          warranty (or else, saying that you provide a warranty) and
-          that users may redistribute the program under these
-          conditions, and telling the user how to view a copy of this
-          License.  (Exception: if the Program itself is interactive
-          but does not normally print such an announcement, your work
-          based on the Program is not required to print an
-          announcement.)
-
-     These requirements apply to the modified work as a whole.  If
-     identifiable sections of that work are not derived from the
-     Program, and can be reasonably considered independent and
-     separate works in themselves, then this License, and its terms,
-     do not apply to those sections when you distribute them as
-     separate works.  But when you distribute the same sections as
-     part of a whole which is a work based on the Program, the
-     distribution of the whole must be on the terms of this License,
-     whose permissions for other licensees extend to the entire
-     whole, and thus to each and every part regardless of who wrote
-     it.
-
-     Thus, it is not the intent of this section to claim rights or
-     contest your rights to work written entirely by you; rather, the
-     intent is to exercise the right to control the distribution of
-     derivative or collective works based on the Program.
-
-     In addition, mere aggregation of another work not based on the
-     Program with the Program (or with a work based on the Program)
-     on a volume of a storage or distribution medium does not bring
-     the other work under the scope of this License.
-
-  4. You may copy and distribute the Program (or a work based on it,
-     under Section 2) in object code or executable form under the
-     terms of Sections 1 and 2 above provided that you also do one of
-     the following:
-
-       a. Accompany it with the complete corresponding
-          machine-readable source code, which must be distributed
-          under the terms of Sections 1 and 2 above on a medium
-          customarily used for software interchange; or,
-
-       b. Accompany it with a written offer, valid for at least three
-          years, to give any third party, for a charge no more than
-          your cost of physically performing source distribution, a
-          complete machine-readable copy of the corresponding source
-          code, to be distributed under the terms of Sections 1 and 2
-          above on a medium customarily used for software
-          interchange; or,
-
-       c. Accompany it with the information you received as to the
-          offer to distribute corresponding source code.  (This
-          alternative is allowed only for noncommercial distribution
-          and only if you received the program in object code or
-          executable form with such an offer, in accord with
-          Subsection b above.)
-
-     The source code for a work means the preferred form of the work
-     for making modifications to it.  For an executable work,
-     complete source code means all the source code for all modules
-     it contains, plus any associated interface definition files,
-     plus the scripts used to control compilation and installation of
-     the executable.  However, as a special exception, the source
-     code distributed need not include anything that is normally
-     distributed (in either source or binary form) with the major
-     components (compiler, kernel, and so on) of the operating system
-     on which the executable runs, unless that component itself
-     accompanies the executable.
-
-     If distribution of executable or object code is made by offering
-     access to copy from a designated place, then offering equivalent
-     access to copy the source code from the same place counts as
-     distribution of the source code, even though third parties are
-     not compelled to copy the source along with the object code.
-
-  5. You may not copy, modify, sublicense, or distribute the Program
-     except as expressly provided under this License.  Any attempt
-     otherwise to copy, modify, sublicense or distribute the Program
-     is void, and will automatically terminate your rights under this
-     License.  However, parties who have received copies, or rights,
-     from you under this License will not have their licenses
-     terminated so long as such parties remain in full compliance.
-
-  6. You are not required to accept this License, since you have not
-     signed it.  However, nothing else grants you permission to
-     modify or distribute the Program or its derivative works.  These
-     actions are prohibited by law if you do not accept this License.
-     Therefore, by modifying or distributing the Program (or any
-     work based on the Program), you indicate your acceptance of this
-     License to do so, and all its terms and conditions for copying,
-     distributing or modifying the Program or works based on it.
-
-  7. Each time you redistribute the Program (or any work based on the
-     Program), the recipient automatically receives a license from the
-     original licensor to copy, distribute or modify the Program
-     subject to these terms and conditions.  You may not impose any
-     further restrictions on the recipients' exercise of the rights
-     granted herein.  You are not responsible for enforcing
-     compliance by third parties to this License.
-
-  8. If, as a consequence of a court judgment or allegation of patent
-     infringement or for any other reason (not limited to patent
-     issues), conditions are imposed on you (whether by court order,
-     agreement or otherwise) that contradict the conditions of this
-     License, they do not excuse you from the conditions of this
-     License.  If you cannot distribute so as to satisfy
-     simultaneously your obligations under this License and any other
-     pertinent obligations, then as a consequence you may not
-     distribute the Program at all.  For example, if a patent license
-     would not permit royalty-free redistribution of the Program by
-     all those who receive copies directly or indirectly through you,
-     then the only way you could satisfy both it and this License
-     would be to refrain entirely from distribution of the Program.
-
-     If any portion of this section is held invalid or unenforceable
-     under any particular circumstance, the balance of the section is
-     intended to apply and the section as a whole is intended to
-     apply in other circumstances.
-
-     It is not the purpose of this section to induce you to infringe
-     any patents or other property right claims or to contest
-     validity of any such claims; this section has the sole purpose
-     of protecting the integrity of the free software distribution
-     system, which is implemented by public license practices.  Many
-     people have made generous contributions to the wide range of
-     software distributed through that system in reliance on
-     consistent application of that system; it is up to the
-     author/donor to decide if he or she is willing to distribute
-     software through any other system and a licensee cannot impose
-     that choice.
-
-     This section is intended to make thoroughly clear what is
-     believed to be a consequence of the rest of this License.
-
-  9. If the distribution and/or use of the Program is restricted in
-     certain countries either by patents or by copyrighted
-     interfaces, the original copyright holder who places the Program
-     under this License may add an explicit geographical distribution
-     limitation excluding those countries, so that distribution is
-     permitted only in or among countries not thus excluded.  In such
-     case, this License incorporates the limitation as if written in
-     the body of this License.
-
- 10. The Free Software Foundation may publish revised and/or new
-     versions of the General Public License from time to time.  Such
-     new versions will be similar in spirit to the present version,
-     but may differ in detail to address new problems or concerns.
-
-     Each version is given a distinguishing version number.  If the
-     Program specifies a version number of this License which applies
-     to it and "any later version", you have the option of following
-     the terms and conditions either of that version or of any later
-     version published by the Free Software Foundation.  If the
-     Program does not specify a version number of this License, you
-     may choose any version ever published by the Free Software
-     Foundation.
-
- 11. If you wish to incorporate parts of the Program into other free
-     programs whose distribution conditions are different, write to
-     the author to ask for permission.  For software which is
-     copyrighted by the Free Software Foundation, write to the Free
-     Software Foundation; we sometimes make exceptions for this.  Our
-     decision will be guided by the two goals of preserving the free
-     status of all derivatives of our free software and of promoting
-     the sharing and reuse of software generally.
-
-                               NO WARRANTY
-
- 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
-     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
-     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-     HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
-     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-     AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
-     QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
-     SERVICING, REPAIR OR CORRECTION.
-
- 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
-     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
-     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
-     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS
-     OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-     YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH
-     ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
-     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-Appendix: How to Apply These Terms to Your New Programs
-=======================================================
-
-   If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
-   To do so, attach the following notices to the program.  It is
-safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
-
-     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
-     Copyright (C) 19YY  NAME OF AUTHOR
-     
-     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 of the License, 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.
-     
-     You should have received a copy of the GNU General Public License
-     along with this program; if not, write to the Free Software
-     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-   Also add information on how to contact you by electronic and paper
-mail.
-
-   If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
-     Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
-     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-     This is free software, and you are welcome to redistribute it
-     under certain conditions; type `show c' for details.
-
-   The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than `show w' and
-`show c'; they could even be mouse-clicks or menu items--whatever
-suits your program.
-
-   You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the
-program, if necessary.  Here is a sample; alter the names:
-
-     Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-     `Gnomovision' (which makes passes at compilers) written by James Hacker.
-     
-     SIGNATURE OF TY COON, 1 April 1989
-     Ty Coon, President of Vice
-
-   This General Public License does not permit incorporating your
-program into proprietary programs.  If your program is a subroutine
-library, you may consider it more useful to permit linking
-proprietary applications with the library.  If this is what you want
-to do, use the GNU Library General Public License instead of this
-License.
-
-\1f
-File: pcl-cvs.info,  Node: Installation,  Next: About pcl-cvs,  Prev: Copying,  Up: Top
-
-Installation
-************
-
-   This section describes the installation of pcl-cvs, the GNU Emacs
-CVS front-end.  You should install not only the elisp files
-themselves, but also the on-line documentation so that your users
-will know how to use it.  You can create typeset documentation from
-the file `pcl-cvs.texinfo' as well as an on-line info file.  The
-following steps are also described in the file `INSTALL' in the source
-directory.
-
-* Menu:
-
-* Pcl-cvs installation::        How to install pcl-cvs on your system.
-* On-line manual installation::  How to install the on-line manual.
-* Typeset manual installation::  How to create typeset documentation
-                                 about pcl-cvs.
-
-\1f
-File: pcl-cvs.info,  Node: Pcl-cvs installation,  Next: On-line manual installation,  Prev: Installation,  Up: Installation
-
-Installation of the pcl-cvs program
-===================================
-
-  1. Edit the file `Makefile' to reflect the situation at your site.
-     The only things you have to change is the definition of `lispdir'
-     and `infodir'.  The elisp files will be copied to `lispdir', and
-     the info file to `infodir'.
-
-  2. Configure pcl-cvs.el
-
-     There are a couple of paths that you have to check to make sure
-     that they match you system.  They appear early in the file
-     pcl-cvs.el.
-
-     *NOTE:*  If your system is running emacs 18.57 or earlier you
-     MUST uncomment the line that says:
-
-          (setq delete-exited-processes nil)
-
-     Setting `delete-exited-processes' to `nil' works around a bug in
-     emacs that causes it to dump core.  The bug was fixed in emacs
-     18.58.
-
-  3. Release 1.05 and later of pcl-cvs requires parts of the Elib
-     library, version 0.07 or later.  Elib is available via anonymous
-     ftp from prep.ai.mit.edu in `pub/gnu/elib-0.07.tar.z', and from
-     a lot of other sites that mirrors prep.  Get Elib, and install
-     it, before proceeding.
-
-  4. Type `make install' in the source directory.  This will
-     byte-compile all `.el' files and copy both the `.el' and the
-     `.elc' into the directory you specified in step 1.
-
-     If you don't want to install the `.el' files but only the `.elc'
-     files (the byte-compiled files), you can type ``make
-     install_elc'' instead of ``make install''.
-
-     If you only want to create the compiled elisp files, but don't
-     want to install them, you can type `make elcfiles' instead.
-     This is what happens if you only type `make' without parameters.
-
-  5. Edit the file `default.el' in your emacs lisp directory (usually
-     `/usr/gnu/emacs/lisp' or something similar) and enter the
-     contents of the file `pcl-cvs-startup.el' into it.  It contains
-     a couple of `auto-load's that facilitates the use of pcl-cvs.
-
-
-\1f
-File: pcl-cvs.info,  Node: On-line manual installation,  Next: Typeset manual installation,  Prev: Pcl-cvs installation,  Up: Installation
-
-Installation of the on-line manual.
-===================================
-
-  1. Create the info file `pcl-cvs' from `pcl-cvs.texinfo' by typing
-     `make info'.  If you don't have the program `makeinfo' you can
-     get it by anonymous ftp from e.g. `ftp.gnu.ai.mit.edu' as
-     `pub/gnu/texinfo-2.14.tar.Z' (there might be a newer version
-     there when you read this), or you could use the preformatted
-     info file `pcl-cvs.info' that is included in the distribution
-     (type `cp pcl-cvs.info pcl-cvs').
-
-  2. Move the info file `pcl-cvs' to your standard info directory.
-     This might be called something like `/usr/gnu/emacs/info'.
-
-  3. Edit the file `dir' in the info directory and enter one line to
-     contain a pointer to the info file `pcl-cvs'.  The line can, for
-     instance, look like this:
-
-          * Pcl-cvs: (pcl-cvs).       An Emacs front-end to CVS.
-
-\1f
-File: pcl-cvs.info,  Node: Typeset manual installation,  Prev: On-line manual installation,  Up: Installation
-
-How to make typeset documentation from pcl-cvs.texinfo
-======================================================
-
-   If you have TeX installed at your site, you can make a typeset
-manual from `pcl-cvs.texinfo'.
-
-  1. Run TeX by typing ``make pcl-cvs.dvi''.  You will not get the
-     indices unless you have the `texindex' program.
-
-  2. Convert the resulting device independent file `pcl-cvs.dvi' to a
-     form which your printer can output and print it.  If you have a
-     postscript printer there is a program, `dvi2ps', which does.
-     There is also a program which comes together with TeX, `dvips',
-     which you can use.
-
-
-\1f
-File: pcl-cvs.info,  Node: About pcl-cvs,  Next: Getting started,  Prev: Installation,  Up: Top
-
-About pcl-cvs
-*************
-
-   Pcl-cvs is a front-end to CVS version 1.3.  It integrates the most
-frequently used CVS commands into emacs.
-
-* Menu:
-
-* Contributors::                Contributors to pcl-cvs.
-* Archives::                    Where can I get a copy of Pcl-Cvs?
-
-\1f
-File: pcl-cvs.info,  Node: Contributors,  Next: Archives,  Prev: About pcl-cvs,  Up: About pcl-cvs
-
-Contributors to pcl-cvs
-=======================
-
-   Contributions to the package are welcome.  I have limited time to
-work on this project, but I will gladly add any code that you
-contribute to me to this package (*note Bugs::.).
-
-   The following persons have made contributions to pcl-cvs.
-
-   * Brian Berliner wrote CVS, together with some other contributors.
-     Without his work on CVS this package would be useless...
-
-   * Per Cederqvist wrote most of the otherwise unattributed
-     functions in pcl-cvs as well as all documentation.
-
-   * Inge Wallin (`inge@lysator.liu.se') wrote the skeleton to
-     `pcl-cvs.texinfo', and gave useful comments on it.  He also wrote
-     the files `elib-node.el' and `compile-all.el'.  The file
-     `cookie.el' was inspired by Inge.
-
-   * Linus Tolke (`linus@lysator.liu.se') contributed useful comments
-     on both the functionality and the documentation.
-
-   * Jamie Zawinski (`jwz@lucid.com') contributed `pcl-cvs-lucid.el'.
-
-   * Leif Lonnblad contributed RCVS support.
-
-   Apart from these, a lot of people have send me suggestions, ideas,
-requests, bug reports and encouragement.  Thanks a lot!  Without your
-there would be no new releases of pcl-cvs.
-
-\1f
-File: pcl-cvs.info,  Node: Archives,  Prev: Contributors,  Up: About pcl-cvs
-
-Where can I get pcl-cvs?
-========================
-
-   The latest release of pcl-cvs can be fetched via anonymous ftp from
-`ftp.lysator.liu.se', (IP no. 130.236.254.1) in the directory
-`pub/emacs'.  If you don't live in Scandinavia you should probably
-check with archie to see if there is a site closer to you that
-archives pcl-cvs.
-
-   New releases will be announced to appropriate newsgroups.  If you
-send your email address to me I will add you to my list of people to
-mail when I make a new release.
-
-\1f
-File: pcl-cvs.info,  Node: Getting started,  Next: Buffer contents,  Prev: About pcl-cvs,  Up: Top
-
-Getting started
-***************
-
-   This document assumes that you know what CVS is, and that you at
-least knows the fundamental concepts of CVS.  If that is not the case
-you should read the man page for CVS.
-
-   Pcl-cvs is only useful once you have checked out a module.  So
-before you invoke it you must have a copy of a module somewhere in
-the file system.
-
-   You invoke pcl-cvs by typing `M-x cvs-update RET'.  If your emacs
-responds with `[No match]' your system administrator has not
-installed pcl-cvs properly.  Try `M-x load-library RET pcl-cvs RET'.
-If that also fails - talk to your root.  If it succeeds you might put
-this line in your `.emacs' file so that you don't have to type the
-`load-library' command every time you wish to use pcl-cvs:
-
-     (autoload 'cvs-update "pcl-cvs" nil t)
-
-   The function `cvs-update' will ask for a directory.  The command
-`cvs update' will be run in that directory.  (It should contain files
-that have been checked out from a CVS archive.)  The output from
-`cvs' will be parsed and presented in a table in a buffer called
-`*cvs*'.  It might look something like this:
-
-     PCL-CVS release 1.05.
-     
-     In directory /users/ceder/FOO/test:
-       Updated     bar
-       Updated     file.txt
-       Modified ci namechange
-       Updated     newer
-     
-     In directory /users/ceder/FOO/test/sub:
-       Modified ci ChangeLog
-     ---------- End -----
-
-   In this example the three files (`bar', `file.txt' and `newer')
-that are marked with `Updated' have been copied from the CVS
-repository to `/users/ceder/FOO/test/' since someone else have
-checked in newer versions of them.  Two files (`namechange' and
-`sub/ChangeLog') have been modified locally, and needs to be checked
-in.
-
-   You can move the cursor up and down in the buffer with `C-n' and
-`C-p' or `n' and `p'.  If you press `c' on one of the `Modified'
-files that file will be checked in to the CVS repository. *Note
-Committing changes::.  You can press `x' to get rid of the
-"uninteresting" files that have only been `Updated' (and don't
-require any further action from you).
-
-   You can also easily get a `diff' between your modified file and the
-base version that you started from, and you can get the output from
-`cvs log' and `cvs status' on the listed files simply by pressing a
-key (*note Getting info about files::.).
-
-\1f
-File: pcl-cvs.info,  Node: Buffer contents,  Next: Commands,  Prev: Getting started,  Up: Top
-
-Buffer contents
-***************
-
-   The display contains four columns.  They contain, from left to
-right:
-
-   * An asterisk when the file is "marked" (*note Selected files::.).
-
-   * The status of the file.  See *Note File status::, for more
-     information.
-
-   * A "need to be checked in"-marker (`ci').
-
-   * The file name.
-
-* Menu:
-
-* File status::                 The meaning of the second field.
-* Selected files::              How selection works.
-
-\1f
-File: pcl-cvs.info,  Node: File status,  Next: Selected files,  Prev: Buffer contents,  Up: Buffer contents
-
-File status
-===========
-
-   The `file status' field can have the following values:
-
-`Updated'
-     The file was brought up to date with respect to the repository.
-     This is done for any file that exists in the repository but not
-     in your source, and for files that you haven't changed but are
-     not the most recent versions available in the repository.
-
-`Modified'
-     The file is modified in  your  working  directory, and there was
-     no modification to the same file in the repository.
-
-`Merged'
-     The file is modified in your working directory, and there were
-     modifications in the repository as well as in your copy, but
-     they were merged successfully, without conflict, in your working
-     directory.
-
-`Conflict'
-     A conflict was detected while trying to merge your changes to
-     FILE with changes from the source repository.  FILE (the copy in
-     your working directory) is now the output of the `rcsmerge'
-     command on the two versions; an unmodified copy of your file is
-     also in your working directory, with the name `.#FILE.VERSION',
-     where VERSION is the RCS revision that your modified file started
-     from.  *Note Viewing differences::, for more details.
-
-`Added'
-     The file has been added by you, but it still needs to be checked
-     in to the repository.
-
-`Removed'
-     The file has been removed by you, but it needs to be checked in
-     to the repository.  You can resurrect it by typing `a' (*note
-     Adding and removing files::.).
-
-`Unknown'
-     A file that was detected in your directory, but that neither
-     appears in the repository, nor is present on the list of files
-     that CVS should ignore.
-
-   There are also a few special cases, that rarely occur, which have
-longer strings in the fields:
-
-`Removed from repository'
-     The file has been removed from your directory since someone has
-     removed it from the repository.  (It is still present in the
-     Attic directory, so no permanent loss has occurred).  This,
-     unlike the other entries in this table, is not an error
-     condition.
-
-`Removed from repository, changed by you'
-     You have modified a file that someone have removed from the
-     repository.  You can correct this situation by removing the file
-     manually (see *note Adding and removing files::.).
-
-`Removed by you, changed in repository'
-     You have removed a file, and before you committed the removal
-     someone committed a change to that file.  You could use `a' to
-     resurrect the file (see *note Adding and removing files::.).
-
-`Move away FILE - it is in the way'
-     For some reason CVS does not like the file FILE.  Rename or
-     remove it.
-
-`This repository is missing! Remove this dir manually.'
-     It is impossible to remove a directory in the CVS repository in
-     a clean way.  Someone have tried to remove one, and CVS gets
-     confused.  Remove your copy of the directory.
-
-\1f
-File: pcl-cvs.info,  Node: Selected files,  Prev: File status,  Up: Buffer contents
-
-Selected files
-==============
-
-   Many of the commands works on the current set of "selected" files.
-
-   * If there are any files that are marked they constitute the set of
-     selected files.
-
-   * Otherwise, if the cursor points to a file, that file is the
-     selected file.
-
-   * Otherwise, if the cursor points to a directory, all the files in
-     that directory that appears in the buffer are the selected files.
-
-   This scheme might seem a little complicated, but once one get used
-to it, it is quite powerful.
-
-   *Note Marking files:: tells how you mark and unmark files.
-
-\1f
-File: pcl-cvs.info,  Node: Commands,  Next: Customization,  Prev: Buffer contents,  Up: Top
-
-Commands
-********
-
-   The nodes in this menu contains explanations about all the
-commands that you can use in pcl-cvs.  They are grouped together by
-type.
-
-* Menu:
-
-* Updating the directory::      Commands to update the local directory
-* Movement commands::           How to move up and down in the buffer
-* Marking files::               How to mark files that other commands
-                                will later operate on.
-* Committing changes::          Checking in your modifications to the
-                                CVS repository.
-* Editing files::               Loading files into Emacs.
-* Getting info about files::    Display the log and status of files.
-* Adding and removing files::   Adding and removing files
-* Undoing changes::             Undoing changes
-* Removing handled entries::    Uninteresting lines can easily be removed.
-* Ignoring files::              Telling CVS to ignore generated files.
-* Viewing differences::         Commands to `diff' different versions.
-* Emerge::
-* Reverting your buffers::      Reverting your buffers
-* Miscellaneous commands::      Miscellaneous commands
-
-\1f
-File: pcl-cvs.info,  Node: Updating the directory,  Next: Movement commands,  Prev: Commands,  Up: Commands
-
-Updating the directory
-======================
-
-`M-x cvs-update'
-     Run a `cvs update' command.  You will be asked for the directory
-     in which the `cvs update' will be run.  The output will be
-     parsed by pcl-cvs, and the result printed in the `*cvs*' buffer
-     (see *note Buffer contents::. for a description of the contents).
-
-     By default, `cvs-update' will descend recursively into
-     subdirectories.  You can avoid that behavior by giving a prefix
-     argument to it (e.g., by typing `C-u M-x cvs-update RET').
-
-     All other commands in pcl-cvs requires that you have a `*cvs*'
-     buffer.  This is the command that you use to get one.
-
-     CVS uses lock files in the repository to ensure the integrity of
-     the data files in the repository.  They might be left behind
-     i.e. if a workstation crashes in the middle of a CVS operation.
-     CVS outputs a message when it is waiting for a lock file to go
-     away.  Pcl-cvs will show the same message in the *cvs* buffer,
-     together with instructions for deleting the lock files.  You
-     should normally not have to delete them manually -- just wait a
-     little while and the problem should fix itself.  But if the lock
-     files doesn't disappear you can delete them with `M-x
-     cvs-delete-lock RET'.
-
-`g'
-     This will run `cvs update' again.  It will always use the same
-     buffer that was used with the previous `cvs update'.  Give a
-     prefix argument to avoid descending into subdirectories.  This
-     runs the command `cvs-mode-update-no-prompt'.
-
-\1f
-File: pcl-cvs.info,  Node: Movement commands,  Next: Marking files,  Prev: Updating the directory,  Up: Commands
-
-Movement Commands
-=================
-
-   You can use most normal Emacs commands to move forward and
-backward in the buffer.  Some keys are rebound to functions that take
-advantage of the fact that the buffer is a pcl-cvs buffer:
-
-`SPC'
-`C-n'
-`n'
-     These keys move the cursor one file forward, towards the end of
-     the buffer (`cookie-next-cookie').
-
-`C-p'
-`p'
-     These keys move one file backward, towards the beginning of the
-     buffer (`cookie-previous-cookie').
-
-\1f
-File: pcl-cvs.info,  Node: Marking files,  Next: Committing changes,  Prev: Movement commands,  Up: Commands
-
-Marking files
-=============
-
-   Pcl-cvs works on a set of "selected files" (*note Selected
-files::.).  You can mark and unmark files with these commands:
-
-`m'
-     This marks the file that the cursor is positioned on.  If the
-     cursor is positioned on a directory all files in that directory
-     will be marked.  (`cvs-mode-mark').
-
-`u'
-     Unmark the file that the cursor is positioned on. If the cursor
-     is on a directory, all files in that directory will be unmarked.
-     (`cvs-mode-unmark').
-
-`M'
-     Mark *all* files in the buffer (`cvs-mode-mark-all-files').
-
-`ESC DEL'
-     Unmark *all* files (`cvs-mode-unmark-all-files').
-
-`DEL'
-     Unmark the file on the previous line, and move point to that line
-     (`cvs-mode-unmark-up').
-
-\1f
-File: pcl-cvs.info,  Node: Committing changes,  Next: Editing files,  Prev: Marking files,  Up: Commands
-
-Committing changes
-==================
-
-`c'
-     All files that have a "need to be checked in"-marker (*note
-     Buffer contents::.) can be checked in with the `c' command.  It
-     checks in all selected files (*note Selected files::.) (except
-     those who lack the "ci"-marker - they are ignored).  Pressing
-     `c' causes `cvs-mode-commit' to be run.
-
-     When you press `c' you will get a buffer called
-     `*cvs-commit-message*'.  Enter the log message for the file(s) in
-     it.  When you are ready you should press `C-c C-c' to actually
-     commit the files (using `cvs-edit-done').
-
-     Normally the `*cvs-commit-message*' buffer will retain the log
-     message from the previous commit, but if the variable
-     `cvs-erase-input-buffer' is set to a non-`nil' value the buffer
-     will be erased.  Point and mark will always be located around the
-     entire buffer so that you can easily erase it with `C-w'
-     (`kill-region').
-
-     If you are editing the files in your emacs an automatic
-     `revert-buffer' will be performed.  (If the file contains `$Id: pcl-cvs.info-1,v 1.1.1.1 1995/12/19 09:21:41 deraadt Exp $'
-     keywords `cvs commit' will write a new file with the new values
-     substituted.  The auto-revert makes sure that you get them into
-     your buffer). The revert will not occur if you have modified
-     your buffer, or if `cvs-auto-revert-after-commit' is set to
-     `nil'.
-
-\1f
-File: pcl-cvs.info,  Node: Editing files,  Next: Getting info about files,  Prev: Committing changes,  Up: Commands
-
-Editing files
-=============
-
-   There are currently three commands that can be used to find a file
-(that is, load it into a buffer and start editing it there).  These
-commands work on the line that the cursor is situated at.  They
-ignore any marked files.
-
-`f'
-     Find the file that the cursor points to.  Run `dired' (*note
-     Dired: (Emacs)Dired.) if the cursor points to a directory
-     (`cvs-mode-find-file').
-
-`o'
-     Like `f', but use another window
-     (`cvs-mode-find-file-other-window').
-
-`A'
-     Invoke `add-change-log-entry-other-window' to edit a `ChangeLog'
-     file.  The `ChangeLog' will be found in the directory of the
-     file the cursor points to.
-     (`cvs-mode-add-change-log-entry-other-window').
-
-\1f
-File: pcl-cvs.info,  Node: Getting info about files,  Next: Adding and removing files,  Prev: Editing files,  Up: Commands
-
-Getting info about files
-========================
-
-   Both of the following commands can be customized.  *Note
-Customization::.
-
-`l'
-     Run `cvs log' on all selected files, and show the result in a
-     temporary buffer (`cvs-mode-log').
-
-`s'
-     Run `cvs status' on all selected files, and show the result in a
-     temporary buffer (`cvs-mode-status').
-
-\1f
-File: pcl-cvs.info,  Node: Adding and removing files,  Next: Undoing changes,  Prev: Getting info about files,  Up: Commands
-
-Adding and removing files
-=========================
-
-   The following commands are available to make it easy to add and
-remove files from the CVS repository.
-
-`a'
-     Add all selected files.  This command can be used on `Unknown'
-     files (see *note File status::.).  The status of the file will
-     change to `Added', and you will have to use `c'
-     (`cvs-mode-commit', see *note Committing changes::.) to really
-     add the file to the repository.
-
-     This command can also be used on `Removed' files (before you
-     commit them) to resurrect them.
-
-     Selected files that are neither `Unknown' nor `Removed' will be
-     ignored by this command.
-
-     The command that is run is `cvs-mode-add'.
-
-`r'
-     This command removes the selected files (after prompting for
-     confirmation).  The files are `rm'ed from your directory and
-     (unless the status was `Unknown'; *note File status::.) they will
-     also be `cvs remove'd.  If the files were `Unknown' they will
-     disappear from the buffer.  Otherwise their status will change to
-     `Removed', and you must use `c' (`cvs-mode-commit', *note
-     Committing changes::.) to commit the removal.
-
-     The command that is run is `cvs-mode-remove-file'.
-
-\1f
-File: pcl-cvs.info,  Node: Undoing changes,  Next: Removing handled entries,  Prev: Adding and removing files,  Up: Commands
-
-Undoing changes
-===============
-
-`U'
-     If you have modified a file, and for some reason decide that you
-     don't want to keep the changes, you can undo them with this
-     command.  It works by removing your working copy of the file and
-     then getting the latest version from the repository
-     (`cvs-mode-undo-local-changes'.
-
-\1f
-File: pcl-cvs.info,  Node: Removing handled entries,  Next: Ignoring files,  Prev: Undoing changes,  Up: Commands
-
-Removing handled entries
-========================
-
-`x'
-     This command allows you to remove all entries that you have
-     processed.  More specifically, the lines for `Updated' files
-     (*note File status::. and files that have been checked in (*note
-     Committing changes::.) are removed from the buffer.  If a
-     directory becomes empty the heading for that directory is also
-     removed.  This makes it easier to get an overview of what needs
-     to be done.
-
-     The command is called `cvs-mode-remove-handled'.  If
-     `cvs-auto-remove-handled' is set to non-`nil' this will
-     automatically be performed after every commit.
-
-`C-k'
-     This command can be used for lines that
-     `cvs-mode-remove-handled' would not delete, but that you want to
-     delete (`cvs-mode-acknowledge').
-
-\1f
-File: pcl-cvs.info,  Node: Ignoring files,  Next: Viewing differences,  Prev: Removing handled entries,  Up: Commands
-
-Ignoring files
-==============
-
-`i'
-     Arrange so that CVS will ignore the selected files.  The file
-     names are added to the `.cvsignore' file in the corresponding
-     directory.  If the `.cvsignore' doesn't exist it will be created.
-
-     The `.cvsignore' file should normally be added to the repository,
-     but you could ignore it also if you like it better that way.
-
-     This runs `cvs-mode-ignore'.
-
-\1f
-File: pcl-cvs.info,  Node: Viewing differences,  Next: Emerge,  Prev: Ignoring files,  Up: Commands
-
-Viewing differences
-===================
-
-`d'
-     Display a `cvs diff' between the selected files and the RCS
-     version that they are based on.  *Note Customization:: describes
-     how you can send flags to `cvs diff'.  If CVS-DIFF-IGNORE-MARKS
-     is set to a non-`nil' value or if a prefix argument is given
-     (but not both) any marked files will not be considered to be
-     selected.  (`cvs-mode-diff-cvs').
-
-`b'
-     If CVS finds a conflict while merging two versions of a file
-     (during a `cvs update', *note Updating the directory::.) it will
-     save the original file in a file called `.#FILE.VERSION' where
-     FILE is the name of the file, and VERSION is the RCS version
-     number that your file was based on.
-
-     With the `b' command you can run a `diff' on the files
-     `.#FILE.VERSION' and `FILE'.  You can get a context- or Unidiff
-     by setting `cvs-diff-flags' - *note Customization::..  This
-     command only works on files that have status `Conflict' or
-     `Merged'.
-
-     If CVS-DIFF-IGNORE-MARKS is set to a non-`nil' value or if a
-     prefix argument is given (but not both) any marked files will
-     not be considered to be selected.  (`cvs-mode-diff-backup').
-
-\1f
-File: pcl-cvs.info,  Node: Emerge,  Next: Reverting your buffers,  Prev: Viewing differences,  Up: Commands
-
-Running emerge
-==============
-
-`e'
-     Invoke `emerge' on one file.  This command works slightly
-     different depending on the file status.
-
-    `Modified'
-          Run `emerge-files' with your working file as file A, and
-          the latest revision in the repository as file B.
-
-    `Merged'
-    `Conflict'
-          Run `emerge-files-with-ancestor' with your working file (as
-          it was prior to your invocation of `cvs-update') as file A,
-          the latest revision in the repository as file B, and the
-          revision that you based your local modifications on as
-          ancestor.
-
-     *Note:* CVS has already performed a merge.  The resulting file is
-     not used in any way if you use this command.  If you use the `q'
-     command inside `emerge' (to successfully terminate the merge) the
-     file that CVS created will be overwritten.
-
-\1f
-File: pcl-cvs.info,  Node: Reverting your buffers,  Next: Miscellaneous commands,  Prev: Emerge,  Up: Commands
-
-Reverting your buffers
-======================
-
-`R'
-     If you are editing (or just viewing) a file in a buffer, and
-     that file is changed by CVS during a `cvs-update', all you have
-     to do is type `R' in the *cvs* buffer to read in the new
-     versions of the files.
-
-     All files that are `Updated', `Merged' or in `Conflict' are
-     reverted from the disk.  Any other files are ignored.  Only files
-     that you were already editing are read.
-
-     An error is signalled if you have modified the buffer since it
-     was last changed. (`cvs-mode-revert-updated-buffers').
-
-\1f
-File: pcl-cvs.info,  Node: Miscellaneous commands,  Prev: Reverting your buffers,  Up: Commands
-
-Miscellaneous commands
-======================
-
-`M-x cvs-byte-compile-files'
-     Byte compile all selected files that end in .el.
-
-`M-x cvs-delete-lock'
-     This command can be used in any buffer, and deletes the lock
-     files that the *cvs* buffer informs you about.  You should
-     normally never have to use this command since CVS tries very
-     carefully to always remove the lock files itself.
-
-     You can only use this command when a message in the *cvs* buffer
-     tells you so.  You should wait a while before using this command
-     in case someone else is running a cvs command.
-
-`q'
-     Bury the *cvs* buffer. (`bury-buffer').
-
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info-2 b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info-2
deleted file mode 100644 (file)
index ef28caa..0000000
+++ /dev/null
@@ -1,449 +0,0 @@
-This is Info file pcl-cvs.info, produced by Makeinfo-1.55 from the
-input file ./pcl-cvs.texinfo.
-
-   Copyright (C) 1992 Per Cederqvist
-
-   Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-   Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
-   Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public
-License" and this permission notice may be included in translations
-approved by the Free Software Foundation instead of in the original
-English.
-
-\1f
-File: pcl-cvs.info,  Node: Customization,  Next: Future enhancements,  Prev: Commands,  Up: Top
-
-Customization
-*************
-
-   If you have an idea about any customization that would be handy but
-isn't present in this list, please tell me!  *Note Bugs:: for info on
-how to reach me.
-
-`cvs-erase-input-buffer'
-     If set to anything else than `nil' the edit buffer will be erased
-     before you write the log message (*note Committing changes::.).
-
-`cvs-inhibit-copyright-message'
-     The copyright message that is displayed on startup can be
-     annoying after a while.  Set this variable to `t' if you want to
-     get rid of it.  (But don't set this to `t' in the system
-     defaults file - new users should see this message at least once).
-
-`cvs-diff-flags'
-     A list of strings to pass as arguments to the `cvs diff' and
-     `diff' programs.  This is used by `cvs-mode-diff-cvs' and
-     `cvs-mode-diff-backup' (key `b', *note Viewing differences::.).
-     If you prefer the Unidiff format you could add this line to your
-     `.emacs' file:
-
-          (setq cvs-diff-flags '("-u"))
-
-`cvs-diff-ignore-marks'
-     If this variable is non-`nil' or if a prefix argument is given
-     (but not both) to `cvs-mode-diff-cvs' or `cvs-mode-diff-backup'
-     marked files are not considered selected.
-
-`cvs-log-flags'
-     List of strings to send to `cvs log'.  Used by `cvs-mode-log'
-     (key `l', *note Getting info about files::.).
-
-`cvs-status-flags'
-     List of strings to send to `cvs status'.  Used by
-     `cvs-mode-status' (key `s', *note Getting info about files::.).
-
-`cvs-auto-remove-handled'
-     If this variable is set to any non-`nil' value
-     `cvs-mode-remove-handled' will be called every time you check in
-     files, after the check-in is ready.  *Note Removing handled
-     entries::.
-
-`cvs-auto-revert-after-commit'
-     If this variable is set to any non-`nil' value any buffers you
-     have that visit a file that is committed will be automatically
-     reverted.  This variable is default `t'. *Note Committing
-     changes::.
-
-`cvs-update-prog-output-skip-regexp'
-     The `-u' flag in the `modules' file can be used to run a command
-     whenever a `cvs update' is performed (see cvs(5)).  This regexp
-     is used to search for the last line in that output.  It is
-     normally set to `"$"'.  That setting is only correct if the
-     command outputs nothing.  Note that pcl-cvs will get very
-     confused if the command outputs *anything* to `stderr'.
-
-`cvs-cvsroot'
-     This variable can be set to override `CVSROOT'.  It should be a
-     string. If it is set then everytime a cvs command is run it will
-     be called as `cvs -d CVS-CVSROOT...'  This can be useful if your
-     site has several repositories.
-
-`TMPDIR'
-     Pcl-cvs uses this *environment variable* to decide where to put
-     the temporary files it needs.  It defaults to `/tmp' if it is
-     not set.
-
-`cvs-commit-buffer-require-final-newline'
-     When you enter a log message in the `*cvs-commit-message*' buffer
-     pcl-cvs will normally automatically insert a trailing newline,
-     unless there already is one.  This behavior can be controlled via
-     `cvs-commit-buffer-require-final-newline'.  If it is `t' (the
-     default behavior), a newline will always be appended.  If it is
-     `nil', newlines will never be appended.  Any other value causes
-     pcl-cvs to ask the user whenever there is no trailing newline in
-     the commit message buffer.
-
-`cvs-sort-ignore-file'
-     If this variable is set to any non-`nil' value the `.cvsignore'
-     will always be sorted whenever you use `cvs-mode-ignore' to add
-     a file to it.  This option is on by default.
-
-\1f
-File: pcl-cvs.info,  Node: Future enhancements,  Next: Bugs,  Prev: Customization,  Up: Top
-
-Future enhancements
-*******************
-
-   Pcl-cvs is still under development and needs a number of
-enhancements to be called complete.  Below is my current wish-list
-for future releases of pcl-cvs.  Please, let me know which of these
-features you want most.  They are listed below in approximately the
-order that I currently think I will implement them in.
-
-   * Rewritten parser code.  There are many situations where pcl-cvs
-     will fail to recognize the output from CVS.  The situation could
-     be greatly increased.
-
-   * `cvs-status'.  This will run `cvs status' in a directory and
-     produce a buffer that looks pretty much like the current *cvs*
-     buffer.  That buffer will include information for all
-     version-controlled files.  (There will be a simple keystroke to
-     remove all "uninteresting" files, that is, files that are
-     "Up-to-date").  In this new buffer you will be able to update a
-     file, commit a file, et c.  The big win with this is that you
-     will be able to watch the differences between your current
-     working file and the head revision in the repository before you
-     update the file, and you can then choose to update it or let it
-     wait for a while longer.
-
-   * Log mode.  When this mode is finished you will be able to move
-     around (using `n' and `p') between the revisions of a file, mark
-     two of them, and run a diff between them.  You will be able to
-     hide branches (similar to the way you can hide sub-paragraphs in
-     outline-mode) and do merges between revisions.  Other ideas
-     about this are welcome.
-
-   * The current model for marks in the *cvs* buffer seems to be
-     confusing.  I am considering to use the VM model instead, where
-     marks are normally inactive.  To activate the mark, you issue a
-     command like `cvs-mode-next-command-uses-marks'.  I might
-     implement a flag so that you can use either version.  Feedback
-     on this before I start coding it is very welcome.
-
-   * It should be possible to run commands such as `cvs log', `cvs
-     status' and `cvs commit' directly from a buffer containing a
-     file, instead of having to `cvs-update'.  If the directory
-     contains many files the `cvs-update' can take quite some time,
-     especially on a slow machine.  I planed to put these kind of
-     commands on the prefix `C-c C-v', but that turned out to be used
-     by for instance c++-mode.  If you have any suggestions for a
-     better prefix key, please let me know.
-
-   * Increased robustness.  For instance, you can not currently press
-     `C-g' when you are entering the description of a file that you
-     are adding without confusing pcl-cvs.
-
-   * Support for multiple active *cvs* buffers.
-
-   * Dired support.  I have an experimental `dired-cvs.el' that works
-     together with CVS 1.2.  Unfortunately I wrote it on top of a
-     non-standard `dired.el', so it must be rewritten.
-
-   * An ability to send user-supplied options to all the cvs commands.
-
-   * Pcl-cvs is not at all clever about what it should do when `cvs
-     update' runs a program (due to the `-u' option in the `modules'
-     file -- see `cvs(5)').  The current release uses a regexp to
-     search for the end.  At the very least that regexp should be
-     configured for different modules.  Tell me if you have any idea
-     about what is the right thing to do.  In a perfect world the
-     program should also be allowed to print to `stderr' without
-     causing pcl-cvs to crash.
-
-   If you miss something in this wish-list, let me know!  I don't
-promise that I will write it, but I will at least try to coordinate
-the efforts of making a good Emacs front end to CVS.  See *Note
-Bugs:: for information about how to reach me.
-
-   So far, I have written most of pcl-cvs in my all-to-rare spare
-time. If you want pcl-cvs to be developed faster you can write a
-contract with Signum Support to do the extension.  You can reach
-Signum Support by email to `info@signum.se' or via mail to Signum
-Support AB, Box 2044, S-580 02 Linkoping, Sweden. Phone: +46 (0) 13 -
-21 46 00. Fax: +46 (0) 13 - 21 47 00.
-
-\1f
-File: pcl-cvs.info,  Node: Bugs,  Next: Function and Variable Index,  Prev: Future enhancements,  Up: Top
-
-Bugs (known and unknown)
-************************
-
-   If you find a bug or misfeature, don't hesitate to tell me!  Send
-email to `ceder@lysator.liu.se'.
-
-   If you have ideas for improvements, or if you have written some
-extensions to this package, I would like to hear from you.  I hope
-that you find this package useful!
-
-   Below is a partial list of currently known problems with pcl-cvs
-version 1.05.
-
-Commit causes Emacs to hang
-     Emacs waits for the `cvs commit' command to finish before you can
-     do anything.  If you start a background job from the loginfo
-     file you must take care that it closes `stdout' and `stderr' if
-     you do not want to wait for it.  (You do that with
-     `background-command &>- 2&>- &' if you are starting
-     `background-command' from a `/bin/sh' shell script).
-
-     Your emacs will also hang if there was a lock file in the
-     repository.  In this case you can type `C-g' to get control over
-     your emacs again.
-
-Name clash in Emacs 19
-     This is really a bug in Elib or the Emacs 19 distribution.  Both
-     Elib and Emacs 19.6 through at least 19.10 contains a file named
-     `cookie.el'.  One of the files will have to be renamed, and we
-     are currently negotiating about which of the files to rename.
-
-Commands while cvs-update is running
-     It is possible to type commands in the *cvs* buffer while the
-     update is running, but error messages is all that you will get.
-     The error messages should be better.
-
-Unexpected output from CVS
-     Unexpected output from CVS confuses pcl-cvs.  It will currently
-     create a bug report that you can mail to me.  It should do
-     something more civilized.
-
-\1f
-File: pcl-cvs.info,  Node: Function and Variable Index,  Next: Concept Index,  Prev: Bugs,  Up: Top
-
-Function and Variable Index
-***************************
-
-* Menu:
-
-* bury-buffer:                          Miscellaneous commands.
-* cookie-next-cookie:                   Movement commands.
-* cookie-previous-cookie:               Movement commands.
-* cvs-auto-remove-handled (variable):   Customization.
-* cvs-auto-revert-after-commit (variable): Customization.
-* cvs-auto-revert-after-commit (variable): Committing changes.
-* cvs-byte-compile-files:               Miscellaneous commands.
-* cvs-commit-buffer-require-final-newline (variable): Customization.
-* cvs-cvsroot (variable):               Customization.
-* cvs-delete-lock:                      Updating the directory.
-* cvs-diff-flags (variable):            Customization.
-* cvs-diff-ignore-marks (variable):     Customization.
-* cvs-diff-ignore-marks (variable):     Viewing differences.
-* cvs-erase-input-buffer (variable):    Customization.
-* cvs-erase-input-buffer (variable):    Committing changes.
-* cvs-inhibit-copyright-message (variable): Customization.
-* cvs-log-flags (variable):             Customization.
-* cvs-mode-acknowledge:                 Removing handled entries.
-* cvs-mode-add:                         Adding and removing files.
-* cvs-mode-add-change-log-entry-other-window: Editing files.
-* cvs-mode-commit:                      Committing changes.
-* cvs-mode-diff-backup:                 Viewing differences.
-* cvs-mode-diff-cvs:                    Viewing differences.
-* cvs-mode-emerge:                      Emerge.
-* cvs-mode-find-file:                   Editing files.
-* cvs-mode-find-file-other-window:      Editing files.
-* cvs-mode-ignore:                      Removing handled entries.
-* cvs-mode-log:                         Getting info about files.
-* cvs-mode-mark:                        Marking files.
-* cvs-mode-mark-all-files:              Marking files.
-* cvs-mode-remove-file:                 Adding and removing files.
-* cvs-mode-remove-handled:              Removing handled entries.
-* cvs-mode-revert-updated-buffers:      Reverting your buffers.
-* cvs-mode-status:                      Getting info about files.
-* cvs-mode-undo-local-changes:          Undoing changes.
-* cvs-mode-unmark:                      Marking files.
-* cvs-mode-unmark-all-files:            Marking files.
-* cvs-mode-unmark-up:                   Marking files.
-* cvs-mode-update-no-prompt:            Updating the directory.
-* cvs-sort-ignore-file (variable):      Customization.
-* cvs-status-flags (variable):          Customization.
-* cvs-update:                           Updating the directory.
-* cvs-update-prog-output-skip-regexp (variable): Customization.
-* TMPDIR (environment variable):        Customization.
-
-\1f
-File: pcl-cvs.info,  Node: Concept Index,  Next: Key Index,  Prev: Function and Variable Index,  Up: Top
-
-Concept Index
-*************
-
-* Menu:
-
-* -u option in modules file:            Customization.
-* .cvsignore file, sorting:             Customization.
-* About pcl-cvs:                        About pcl-cvs.
-* Active files:                         Selected files.
-* Added (file status):                  File status.
-* Adding files:                         Adding and removing files.
-* Archives:                             Archives.
-* Author, how to reach:                 Bugs.
-* Authors:                              Contributors.
-* Automatically inserting newline:      Customization.
-* Automatically remove handled files:   Customization.
-* Automatically sorting .cvsignore:     Customization.
-* Buffer contents:                      Buffer contents.
-* Bugs, how to report them:             Bugs.
-* Bugs, known:                          Bugs.
-* Byte compilation:                     Miscellaneous commands.
-* Ci:                                   Committing changes.
-* Commit buffer:                        Committing changes.
-* Commit message, inserting newline:    Customization.
-* Committing changes:                   Committing changes.
-* Conflict (file status):               File status.
-* Conflicts, how to resolve them:       Viewing differences.
-* Conflicts, resolving:                 Emerge.
-* Context diff, how to get:             Customization.
-* Contributors:                         Contributors.
-* Copyright message, getting rid of it: Customization.
-* Customization:                        Customization.
-* Deleting files:                       Adding and removing files.
-* Diff:                                 Viewing differences.
-* Dired:                                Editing files.
-* Edit buffer:                          Committing changes.
-* Editing files:                        Editing files.
-* Email archives:                       Archives.
-* Email to the author:                  Bugs.
-* Emerge:                               Emerge.
-* Enhancements:                         Future enhancements.
-* Erasing commit message:               Committing changes.
-* Erasing the input buffer:             Customization.
-* Example run:                          Getting started.
-* Expunging uninteresting entries:      Removing handled entries.
-* FAQ:                                  Bugs.
-* File selection:                       Selected files.
-* File status:                          File status.
-* Finding files:                        Editing files.
-* Flush changes:                        Undoing changes.
-* Ftp-sites:                            Archives.
-* Generating a typeset manual:          Typeset manual installation.
-* Generating the on-line manual:        On-line manual installation.
-* Getting pcl-cvs:                      Archives.
-* Getting rid of lock files:            Miscellaneous commands.
-* Getting rid of the Copyright message.: Customization.
-* Getting rid of uninteresting lines:   Removing handled entries.
-* Getting status:                       Getting info about files.
-* Getting the *cvs* buffer:             Updating the directory.
-* Handled lines, removing them:         Removing handled entries.
-* Info-file (how to generate):          On-line manual installation.
-* Inhibiting the Copyright message.:    Customization.
-* Installation:                         Installation.
-* Installation of elisp files:          Pcl-cvs installation.
-* Installation of on-line manual:       On-line manual installation.
-* Installation of typeset manual:       Typeset manual installation.
-* Introduction:                         Getting started.
-* Invoking dired:                       Editing files.
-* Invoking emerge:                      Emerge.
-* Known bugs:                           Bugs.
-* Loading files:                        Editing files.
-* Lock files:                           Miscellaneous commands.
-* Log (RCS/cvs command):                Getting info about files.
-* Manual installation (on-line):        On-line manual installation.
-* Manual installation (typeset):        Typeset manual installation.
-* Marked files:                         Selected files.
-* Marking files:                        Marking files.
-* Merged (file status):                 File status.
-* Modified (file status):               File status.
-* Modules file (-u option):             Customization.
-* Move away FILE - it is in the way (file status): File status.
-* Movement Commands:                    Movement commands.
-* On-line manual (how to generate):     On-line manual installation.
-* Printing a manual:                    Typeset manual installation.
-* Problems, list of common:             Bugs.
-* Putting files under CVS control:      Adding and removing files.
-* Recompiling elisp files:              Miscellaneous commands.
-* Removed (file status):                File status.
-* Removed by you, changed in repository (file status): File status.
-* Removed from repository (file status): File status.
-* Removed from repository, changed by you (file status): File status.
-* Removing files:                       Adding and removing files.
-* Removing uninteresting (processed) lines: Removing handled entries.
-* Reporting bugs and ideas:             Bugs.
-* Require final newline:                Customization.
-* Resolving conflicts:                  Emerge.
-* Resurrecting files:                   Adding and removing files.
-* Reverting buffers:                    Reverting your buffers.
-* Reverting buffers after commit:       Committing changes.
-* Reverting buffers after commit:       Customization.
-* Selected files:                       Selected files.
-* Selecting files (commands to mark files): Marking files.
-* Sites:                                Archives.
-* Sorting the .cvsignore file:          Customization.
-* Status (cvs command):                 Getting info about files.
-* Syncing buffers:                      Reverting your buffers.
-* TeX - generating a typeset manual:    Typeset manual installation.
-* This repository is missing!... (file status): File status.
-* Undo changes:                         Undoing changes.
-* Unidiff, how to get:                  Customization.
-* Uninteresting entries, getting rid of them: Removing handled entries.
-* Unknown (file status):                File status.
-* Update program (-u option in modules file): Customization.
-* Updated (file status):                File status.
-* Variables, list of all:               Customization.
-* Viewing differences:                  Viewing differences.
-
-\1f
-File: pcl-cvs.info,  Node: Key Index,  Prev: Concept Index,  Up: Top
-
-Key Index
-*********
-
-* Menu:
-
-* a - add a file:                       Adding and removing files.
-* A - add ChangeLog entry:              Editing files.
-* b - diff backup file:                 Viewing differences.
-* c - commit files:                     Committing changes.
-* C-k - remove selected entries:        Removing handled entries.
-* C-n - Move down one file:             Movement commands.
-* C-p - Move up one file:               Movement commands.
-* d - run cvs diff:                     Viewing differences.
-* DEL - unmark previous file:           Marking files.
-* e - invoke emerge:                    Emerge.
-* ESC DEL - unmark all files:           Marking files.
-* f - find file or directory:           Editing files.
-* g - Rerun cvs update:                 Updating the directory.
-* l - run cvs log:                      Getting info about files.
-* m - marking a file:                   Marking files.
-* M - marking all files:                Marking files.
-* n - Move down one file:               Movement commands.
-* o - find file in other window:        Editing files.
-* p - Move up on file:                  Movement commands.
-* q - bury the *cvs* buffer:            Miscellaneous commands.
-* r - remove a file:                    Adding and removing files.
-* R - revert buffers:                   Reverting your buffers.
-* s - run cvs status:                   Getting info about files.
-* SPC - Move down one file:             Movement commands.
-* U - undo changes:                     Undoing changes.
-* u - unmark a file:                    Marking files.
-* x - remove processed entries:         Removing handled entries.
-
-
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.ps b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.ps
deleted file mode 100644 (file)
index eb92557..0000000
+++ /dev/null
@@ -1,2918 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvipsk 5.58a Copyright 1986, 1994 Radical Eye Software
-%%Title: pcl-cvs.dvi
-%%Pages: 32
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 596 842
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSCommandLine: dvips pcl-cvs.dvi -o pcl-cvs.ps
-%DVIPSParameters: dpi=300, compressed, comments removed
-%DVIPSSource:  TeX output 1996.02.26:1613
-%%BeginProcSet: texc.pro
-/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
-/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
-mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
-ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
-isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
-hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
-TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
-forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
-/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
-/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
-/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
-string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
-end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
-/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
-N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
-length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
-128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
-get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
-dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
-/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
-/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
-0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
-setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
-.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
-/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
-gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
-add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
-/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
-dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
-adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
-idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
-putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
-adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
-{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
-adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
-chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
-}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
-length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
-cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
-0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
-add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
-/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
-known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
-/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
-65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
-0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
-{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
-getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
-ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
-RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
-false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
-round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
-rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
-{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
-B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
-4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
-p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
-a}B /bos{/SS save N}B /eos{SS restore}B end
-%%EndProcSet
-TeXDict begin 39158280 55380996 1000 300 300 (pcl-cvs.dvi)
-@start /Fa 1 47 df<127012F8A212F012E005057B840E>46 D
-E /Fb 1 47 df<1238127C12FCA212F8127006067A8512>46 D E
-/Fc 51 123 df<90381FC1F090387037189038C03E3C3801807C000313783907003800A9
-B612C03907003800B2143C397FE1FFC01E2380A21C>11 D<132013401380EA01005A1206
-1204120CA25AA25AA312701260A312E0AE1260A312701230A37EA27EA2120412067E7EEA
-0080134013200B327CA413>40 D<7E12407E7E12187E12041206A27EA2EA0180A313C012
-00A313E0AE13C0A312011380A3EA0300A21206A21204120C5A12105A5A5A0B327DA413>
-I<EAFFF8A20D02808B10>45 D<EA01F0EA071CEA0C06487E00381380A2387001C0A400F0
-13E0AE007013C0A3EA780300381380A2381C0700EA0C06EA071CEA01F013227EA018>48
-D<13801203120F12F31203B3A9EA07C0EAFFFE0F217CA018>I<EA03F0EA0C1CEA100700
-201380384003C0A2008013E012F0EAF801A3EA2003120014C0A2EB07801400130E5B1318
-5B5B5B485A90C7FC000213205A5A00181360481340383FFFC05AB5FC13217EA018>I<EA
-03F8EA0C1EEA100F38200780004013C0127813031307123800001380A214005B130C1338
-EA03F0EA001C130FEB0780A2EB03C0A214E01220127012F8A200F013C01240EB07801220
-38100F00EA0C1CEA03F013227EA018>I<1303A25BA25B1317A213271367134713871201
-13071202120612041208A212101220A2124012C0B512F838000700A7EB0F80EB7FF01521
-7FA018>I<00101380381E0700EA1FFF5B13F8EA17E00010C7FCA6EA11F8EA120CEA1C07
-381803801210380001C0A214E0A4127012F0A200E013C01280EA4003148038200700EA10
-06EA0C1CEA03F013227EA018>I<137EEA01C138030080380601C0EA0C03121C38180180
-0038C7FCA212781270A2EAF0F8EAF30CEAF4067F00F81380EB01C012F014E0A51270A300
-3813C0A238180380001C1300EA0C06EA070CEA01F013227EA018>I<12401260387FFFE0
-14C0A23840008038C0010012801302A2485A5BA25B5BA21360134013C0A21201A25B1203
-A41207A76CC7FC13237DA118>I<EA01F8EA060EEA0803381001801220386000C0A31270
-A238780180003E1300EA3F02EA1FC4EA0FF812036C7EEA067EEA083F38100F80383007C0
-EA6003EB00E05A1460A40060134014C06C138038180300EA0E0EEA03F013227EA018>I<
-497EA3497EA3EB05E0A2EB09F01308A2EB1078A3497EA3497EA2EBC01F497EA248B51280
-EB0007A20002EB03C0A348EB01E0A348EB00F0121C003EEB01F839FF800FFF20237EA225
->65 D<B512F8380F800E0007EB0780EC03C015E0140115F0A515E01403EC07C0EC0F80EC
-3E00EBFFFE9038800780EC03C0EC01E015F0140015F8A6EC01F0A2EC03E0EC07C0000FEB
-0F00B512FC1D227EA123>I<903807E0109038381830EBE0063901C0017039038000F048
-C7FC000E1470121E001C1430123CA2007C14101278A200F81400A812781510127C123CA2
-001C1420121E000E14407E6C6C13803901C001003800E002EB381CEB07E01C247DA223>
-I<B612C0380F80070007130114001540A215601520A314201500A3146014E013FF138014
-601420A315081400A21510A31530A2157015E0000F1303B6FC1D227EA121>69
-D<B612C0380F80070007130114001540A215601520A314201500A3146014E013FF138014
-601420A491C7FCA9487EEAFFFE1B227EA120>I<903807F00890383C0C18EBE0023901C0
-01B839038000F848C71278481438121E15185AA2007C14081278A200F81400A7EC1FFF00
-78EB00F81578127C123CA27EA27E7E6C6C13B86C7E3900E0031890383C0C08903807F000
-20247DA226>I<EAFFFCEA0FC0EA0780B3ACEA0FC0EAFFFC0E227EA112>73
-D<D8FFFCEBFF80D80FC0EB7C006C48133015205D5D4AC7FC14025C5C5C5C5C5CEB81C0EB
-83E01385EB88F01390EBA078EBC03C13808080A26E7E8114036E7EA26E7E81486C7F3AFF
-FC07FF8021227EA126>75 D<EAFFFCEA1F806CC7FCB3A21401A41403A214021406A2141E
-48137EB512FE18227DA11E>I<39FF8007FF3907C000F81570D805E01320EA04F0A21378
-137C133C7F131F7FEB0780A2EB03C0EB01E0A2EB00F014F81478143C143E141E140FA2EC
-07A0EC03E0A21401A21400000E1460121FD8FFE0132020227EA125>78
-D<B512F0380F803C0007130FEC078015C0140315E0A615C014071580EC0F00143CEBFFF0
-0180C7FCAE487EEAFFFC1B227EA121>80 D<B512E0380F803C0007130E6E7E81140381A5
-5D14075D020EC7FC143CEBFFE0EB80708080141E140E140FA481A3168015C014073A0FC0
-03C10039FFFC01E2C8127C21237EA124>82 D<3803F020380C0C60EA1802383001E0EA70
-000060136012E0A21420A36C1300A21278127FEA3FF0EA1FFE6C7E0003138038003FC0EB
-07E01301EB00F0A214707EA46C1360A26C13C07E38C8018038C60700EA81FC14247DA21B
->I<39FFFC07FF390FC000F86C4813701520B3A5000314407FA2000114806C7E90386001
-00EB3006EB1C08EB03F020237EA125>85 D<D8FFF0EB7FC0D81F80EB1F006CC7120C7F00
-071408A26C6C5BA36C6C5BA26D136000001440A201785BA2137CD93C01C7FCA2EB1E02A3
-6D5AA2148CEB0788A2EB03D0A214F06D5AA26D5AA322237FA125>I<EA1FE0EA3038EA78
-0C130EEA30071200A313FFEA07C7EA1E07123C1278127000F01308A3130FEA7817383C23
-90380FC1E015157E9418>97 D<120E12FE121E120EAB131FEB61C0EB8060380F0030000E
-1338143C141C141EA7141C143C1438000F1370380C8060EB41C038083F0017237FA21B>
-I<EA01FEEA0703380C0780121C383803000078C7FC127012F0A712700078134012386C13
-80380C0100EA0706EA01F812157E9416>I<14E0130F13011300ABEA01F8EA0704EA0C02
-EA1C01EA38001278127012F0A7127012781238EA1801EA0C0238070CF03801F0FE17237E
-A21B>I<EA01FCEA0707380C0380381C01C01238007813E0EA700012F0B5FC00F0C7FCA5
-12700078132012386C13406C138038070300EA00FC13157F9416>I<14703803F198380E
-1E18EA1C0E38380700A200781380A400381300A2EA1C0EEA1E1CEA33F00020C7FCA21230
-1238EA3FFE381FFFC06C13E0383000F0481330481318A400601330A2003813E0380E0380
-3803FE0015217F9518>103 D<120E12FE121E120EABEB1F80EB60C0EB80E0380F0070A2
-120EAF38FFE7FF18237FA21B>I<121C121E123E121E121CC7FCA8120E127E121E120EB1
-EAFFC00A227FA10E>I<120E12FE121E120EABEB03FCEB01F014C01480EB02005B5B5B13
-3813F8EA0F1CEA0E1E130E7F1480EB03C0130114E0EB00F014F838FFE3FE17237FA21A>
-107 D<120E12FE121E120EB3ADEAFFE00B237FA20E>I<390E1FC07F3AFE60E183803A1E
-807201C03A0F003C00E0A2000E1338AF3AFFE3FF8FFE27157F942A>I<380E1F8038FE60
-C0381E80E0380F0070A2120EAF38FFE7FF18157F941B>I<EA01FCEA0707380C01803818
-00C0003813E0481370A200F01378A700701370007813F0003813E0381C01C0380E038038
-070700EA01FC15157F9418>I<EA0E1F38FE61C0380E8060380F0070000E1338143CA214
-1EA7143CA21438000F1370380E80E0EB41C0EB3F0090C7FCA9EAFFE0171F7F941B>I<EA
-0E3CEAFE46EA1E8FEA0F0F13061300120EAD120FEAFFF010157F9413>114
-D<EA0F88EA3078EA601812C01308A212E0EAF000127FEA3FE0EA0FF0EA01F8EA003CEA80
-1C130CA212C01308EAE018EAD030EA8FC00E157E9413>I<1202A41206A3120E121E123E
-EAFFFCEA0E00AB1304A6EA07081203EA01F00E1F7F9E13>I<000E137038FE07F0EA1E00
-000E1370AD14F0A238060170380382783800FC7F18157F941B>I<38FF80FE381E007814
-30000E1320A26C1340A2EB80C000031380A23801C100A2EA00E2A31374A21338A3131017
-157F941A>I<39FF8FF87F393E01E03C001CEBC01814E0000E1410EB0260147000071420
-EB04301438D803841340EB8818141CD801C81380EBD00C140E3900F00F00497EA2EB6006
-EB400220157F9423>I<38FF83FE381F00F0000E13C06C1380EB8100EA0383EA01C2EA00
-E41378A21338133C134E138FEA0187EB0380380201C0000413E0EA0C00383E01F038FF03
-FE17157F941A>I<38FF80FE381E00781430000E1320A26C1340A2EB80C000031380A238
-01C100A2EA00E2A31374A21338A31310A25BA35B12F05B12F10043C7FC123C171F7F941A
->I<383FFFC038380380EA300700201300EA600EEA401C133C1338C65A5B12015B380380
-40EA07005A000E13C04813805AEA7801EA7007B5FC12157F9416>I
-E /Fe 66 123 df<EBFE7C380381C6380603CE000E1384001C1380A6B512F0381C0380AE
-38FF8FF0171A809916>11 D<13FEEA038138060180EA0E03381C010090C7FCA5B51280EA
-1C03AE38FF8FF0141A809915>I<EBFF80EA0383EA0603120E121CA6B5FCEA1C03AE38FF
-9FF0141A809915>I<126012F0A61260AA12201200A4126012F0A21260041A7D990B>33
-D<1380EA010012025A120C120812185AA35AA412E0AA1260A47EA37E1208120C12047E7E
-EA008009267D9B0F>40 D<7E12407E7E12181208120C7EA37EA41380AA1300A41206A35A
-1208121812105A5A5A09267E9B0F>I<1203A4EAE31CEA7338EA1FE0EA0780A2EA1FE0EA
-7338EAE31CEA0300A40E107E9B13>I<126012F0A212701210A31220A21240A2040B7D83
-0B>44 D<EAFFC0A20A0280880D>I<126012F0A2126004047D830B>I<1304130C1318A313
-30A31360A313C0A3EA0180A3EA0300A31206A35AA35AA35AA35AA35AA20E257E9B13>I<
-EA07E0EA1C38EA381CEA300CEA700EEA6006A2EAE007AAEA6006A2EA700EEA300CEA381C
-EA1C38EA07E010187F9713>I<12035AB4FC1207B3A2EA7FF80D187D9713>I<EA0F80EA10
-60EA2030EA4038EA803CEAC01C12E01240EA003C1338A21370136013C0EA018013001202
-EA040412081210EA3008EA3FF8127F12FF0E187E9713>I<EA07E0EA1838EA201CEA601E
-EA700EEA201E1200131CA213381370EA07E0EA0038131C130E130FA212E0A212C0EA400E
-EA601CEA1838EA07E010187F9713>I<1318A21338137813F813B8EA01381202A2120412
-08121812101220124012C0B5FCEA0038A6EA03FF10187F9713>I<EA3018EA3FF013E013
-80EA2000A5EA2FC0EA3060EA2030EA00381318131CA2124012E0A2EA8018EA40381330EA
-30E0EA0F800E187E9713>I<EA01F8EA0704EA0C06EA180E123013001270126012E0EAE3
-E0EAE418EAE80CEAF00EEAE0061307A31260A2EA7006EA300EEA180CEA0C38EA07E01018
-7F9713>I<1240EA7FFF13FEA2EA4004EA80081310A2EA00201340A21380120113005AA2
-5A1206A2120EA5120410197E9813>I<EA07E0EA1818EA300CEA20061260A21270EA780C
-EA3E18EA1F30EA07C0EA03E0EA0CF8EA307CEA601E130FEAC0071303A3EA6002EA2004EA
-1818EA07E010187F9713>I<130CA3131EA2132F1327A2EB4380A3EB81C0A200017F1300
-A248B47E38020070A2487FA3487FA2003C131EB4EBFFC01A1A7F991D>65
-D<B51280380E00E014701438143CA514781470EB01E0380FFFC0380E00F01478143C141C
-141EA4141C143C147814F0B512C0171A7F991B>I<EB3F023801C0C63803002E000E131E
-48130E14065A007813021270A200F01300A600701302A21278003813047E14087E000313
-303801C0C038003F00171A7E991C>I<B57E380E00E01470808080A280A21580A81500A2
-5C140E5CA2147814E0B51280191A7F991D>I<B512F8380E003814181408140C1404A3EB
-0100A35BEA0FFFEA0E037FA3EB0002A314061404A2140C143CB512FC171A7F991A>I<B5
-12F8380E003814181408140C1404A3EB0100A35BEA0FFFEA0E037FA390C7FCA8EAFFE016
-1A7F9919>I<EB3F023801C0C63803002E000E131E48130E14065A007813021270A200F0
-90C7FCA5903801FFC03970000E00A2127812387EA27E000313163801C06638003F821A1A
-7E991E>I<39FFE1FFC0390E001C00AB380FFFFC380E001CAC39FFE1FFC01A1A7F991D>I<
-EAFF80EA1C00B3A6EAFF80091A7E990E>I<39FFE01FC0390E000F00140C14085C5C5C49
-5A0102C7FC5B130C131C132E1347EB8380EA0F03380E01C06D7EA2147080A280141E141F
-39FFE07FC01A1A7F991E>75 D<EAFFE0000EC7FCB01408A3141814101430147014F0B5FC
-151A7F9918>I<B414FF000F14F0A2390B800170A23809C002A33808E004A2EB7008A3EB
-3810A3EB1C20A2EB0E40A3EB0780A2EB0300121C39FF8307FF201A7F9923>I<137F3801
-C1C038070070000E7F487F003C131E0038130E0078130F00707F00F01480A80078EB0F00
-A20038130E003C131E001C131C6C5B6C5B3801C1C0D8007FC7FC191A7E991E>79
-D<B51280380E01E0EB007014781438143CA4143814781470EB01E0380FFF80000EC7FCAB
-EAFFE0161A7F991A>I<137F3801C1C038070070000E7F487F003C131E0038130E007813
-0F00707F00F01480A80070140000785B0038130E383C1C1E381C221C380E4138000713F0
-3801E1C039007F8080EB00C0A214E1EC7F00A2143E141C19217E991E>I<B5FC380E01C0
-EB0070147880A55C1470EB01C0D80FFFC7FC380E0380EB00C0801470A31478A31540143C
-EC1C8039FFE00F001A1A7F991C>I<EA0FC2EA1836EA200EEA600612C01302A3EAE00012
-70127EEA3FE0EA1FF8EA03FCEA007E130E130713031280A3EAC0021306EAE004EAD818EA
-87E0101A7E9915>I<007FB5FC38701C0700401301A200C0148000801300A300001400B1
-3803FFE0191A7F991C>I<39FFE07FC0390E000E001404B200065B12076C5B6C6C5A3800
-E0C0013FC7FC1A1A7F991D>I<39FF801FC0391C00070014066C1304A36C5BA26C6C5AA3
-6C6C5AA26C6C5AA3EB7080A213790139C7FCA2131EA3130CA21A1A7F991D>I<39FFC0FF
-80390F003C0014106C5BEA03806D5A00015BEA00E101F1C7FC137A133E131C131EA21317
-EB27801343EB41C0EB81E0EA010048137000021378481338000C7F001E133EB4EB7FC01A
-1A7F991D>88 D<EA1FC0EA38707FEA101C1200A2EA03FCEA1E1C1238127012E01480A213
-3CEA705F381F8F0011107F8F13>97 D<12FC121CA913FCEA1D07381E0380381C01C01300
-14E0A6EB01C01480381E0300EA1906EA10F8131A809915>I<EA07F8EA1C1C1238EA7008
-13005AA612701304EA3808EA1C18EA07E00E107F8F11>I<133F1307A9EA03E7EA0C17EA
-180F487E127012E0A6126012706C5AEA1C373807C7E0131A7F9915>I<EA07C0EA1C30EA
-30181270EA600C12E0EAFFFCEAE000A41260EA7004EA3808EA1C18EA07E00E107F8F11>
-I<EA01F0EA0718EA0E38EA1C101300A6EAFFC0EA1C00AEEAFF800D1A80990C>I<EA0FCF
-3818718038303000EA7038A4EA30306C5AEA2FC00060C7FCA21270EA3FF013FC6C7EEA60
-0FEAC003A4EA6006EA381CEA07E011187F8F13>I<12FC121CA9137CEA1D87381E0380A2
-121CAB38FF9FF0141A809915>I<1218123CA212181200A612FC121CAE12FF081A80990A>
-I<12FC121CA9EB1FC0EB0F00130C5B13205B13E0121DEA1E70EA1C7813387F131E7F1480
-38FF9FE0131A809914>107 D<12FC121CB3A6EAFF80091A80990A>I<38FC7C1F391D8E63
-80391E0781C0A2001C1301AB39FF9FE7F81D107F8F20>I<EAFC7CEA1D87381E0380A212
-1CAB38FF9FF01410808F15>I<EA07E0EA1C38EA300CEA700EEA6006EAE007A6EA6006EA
-700EEA381CEA1C38EA07E010107F8F13>I<EAFCFCEA1D07381E0380381C01C0A2EB00E0
-A6EB01C01480381E0300EA1D06EA1CF890C7FCA6B47E1317808F15>I<EA03E1EA0C13EA
-180BEA300FEA700712E0A61270A26C5AEA1C37EA07C7EA0007A6EB3FE013177F8F14>I<
-EAFC78EA1D9CEA1E1C1308EA1C00ABEAFF800E10808F0F>I<EA1F20EA60E0EA402012C0
-A2EAF000127FEA3FC0EA1FE0EA00F0EA8070133012C01320EAF040EA8F800C107F8F0F>
-I<1208A41218A21238EAFFC0EA3800A81320A41218EA1C40EA07800B177F960F>I<38FC
-1F80EA1C03AB1307120CEA0E0B3803F3F01410808F15>I<38FF0F80383C0700EA1C0613
-04A26C5AA26C5AA3EA03A0A2EA01C0A36C5A11107F8F14>I<39FE7F1F8039381C070000
-3C1306381C0C04130E380E16081317A238072310149013A33803C1A014E0380180C0A319
-107F8F1C>I<38FE3F80383C1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E
-1208EA181CEA381E38FC3FC012107F8F14>I<38FF0F80383C0700EA1C061304A26C5AA2
-6C5AA3EA03A0A2EA01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I<EAFFF8
-EAE07012C0EA80E0EA81C0A2EA0380EA0700A2EA0E04121CA2EA380812701338EAFFF80E
-107F8F11>I E /Ff 4 109 df<EB0FE0EB3810EBE038EA01C0143038038000A5381FFFF0
-380700E0A6380E01C0A6381C0380A238FF8FF0151A809915>12 D<1270A212F012600404
-7D830B>46 D<EA03F0EA0618EA1C0C1238EA300E1270EA7FFEEAE000A412601304EA3008
-EA1830EA0FC00F107E8F11>101 D<EA07C01201A4EA0380A6EA0700A6120EA65AA2EAFF
-800A1A80990A>108 D E /Fg 38 122 df<1202120F121E127C12F012600806799614>
-39 D<EA0380A3EA638CEAF39EEA7FFCEA3FF8EA0FE0A2EA3FF8EA7FFCEAF39EEA638CEA
-0380A30F107E9214>42 D<EAFFFEA30F037E8C14>45 D<EA01C0487EA21360A2EA0770A4
-EA0630EA0E38A4487EEA1FFCA2EA1C1CA2487EA238FE3F80A211177F9614>65
-D<3801F180EA07FFEA0E1FEA1C071238EA7003A348C7FCA738700380A338380700121CEA
-0E0EEA07FCEA01F011177F9614>67 D<EAFFE013F8EA383C7F130E7FA3EB0380A8EB0700
-A2130E131E5BEAFFF813E011177F9614>I<B5FCA2EA3807A490C7FCA21338A2EA3FF8A2
-EA3838A290C7FCA3EB0380A4B5FCA211177F9614>I<B4FCA21238AF1307A4B5FCA21017
-7E9614>76 D<38FC1F80A2007C1300EA7637A4EA7777A2EA7367A313E7EA71C7A2EA7007
-A638F80F80A211177F9614>I<EAFFF013FCEA381E130E1307A5130E131EEA3FFC13F0EA
-3800A812FEA210177F9614>80 D<EAFFE013F8EA383C131C7FA45B133CEA3FF85BEA3838
-7FA51480EB1DC0A238FE0F80EB070012177F9614>82 D<EA0FCCEA1FFCEA307CEA603CEA
-E01CA313001270127EEA3FE0EA0FF0EA01F8EA001C131E130E126012E0A2EAF01CEAF838
-EAFFF0EAC7E00F177E9614>I<38FE0FE0A238380380B0381C0700A2EA0E0EEA07FCEA01
-F01317809614>85 D<124012F01278123E120F120608067C9614>96
-D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C1C127012E0A3EA707C383FFF
-80EA0F8F11107E8F14>I<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C1380EB01C0A6
-EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I<EA03F8EA0FFEEA1C0EEA3804EA
-7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<137EA2130EA5
-EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEFC0EA07CF12177F
-9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE00012601270EA38
-0EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA038EEA07041300A3EA7FFE12FF
-EA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA383B38301800EA701CA3EA3018
-EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA700F38E00380A438700700EA3C1E
-EA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1DFEEA1F86EA1E07121CAA38FF8F
-E0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A20D187C9714>I<12
-FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C131C7F38FF1F
-80A21117809614>107 D<EAFF80A21203B3EAFFFEA20F177E9614>I<EAFB8EEAFFDF383C
-F380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78EAFDFEEA1F86EA1E07121CAA38
-FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6EA701CEA783CEA3C
-78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C1380EB01C0A6EB03
-80001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218808F14>I<EA03E7EA0FF7EA1C
-1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7EA0007A6EB3FE0A213187F8F14
->I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EAFFF0A211107F8F14>I<EA0FD8EA
-3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA001CEA600612E012F0EAF81CEAFFF8
-EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E00A8130EA3131CEA07F8EA01F00F
-157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03E71310808F14>I<38FE3F80A2383C
-1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38FE3F80A238700700EA
-380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>I<EA7E3FA2EA1E3CEA0E
-78EA07705B12036C5A12037FEA0770EA0E781338487E38FE3F80A211107F8F14>I<38FE
-3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25BA3485A12730077C7FC
-127E123C11187F8F14>I E /Fh 30 122 df<903803F07C90381E0DC69038380F0FEB70
-1E01E0130EEC0C003801C01CA548485A007FB512C03903803800A448485AA6000E5BA648
-485A001E7F38FF8FFC20207E9F1B>11 D<EB03E0EB1C181338EB703C13E014383801C000
-A5485A387FFFF038038070A4380700E0A6380E01C0A6381C0380001E13C038FF0FF01620
-7E9F19>I<EAFFF0A20C027E8A0F>45 D<0007B512FC3900F8007C0178131C150C5B1504
-A414043901E00800A31438EBFFF8EBE0383803C010A4EC00081510485AA21520A2156015
-C0380F00011407B612801E1F7E9E1F>69 D<0007B512F83900F800780178133815185B15
-08A53901E00800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D
-1F7E9E1E>I<3807FF803800F8001378A25BA6485AA6485AA6485AA648C7FC7FEAFFF011
-1F7E9E10>73 D<3807FFE0D800FCC7FC1378A25BA6485AA6485AA41580EC0100EA0780A2
-5C14021406140E380F001E147CB512FC191F7E9E1C>76 D<D807F8EB7FC0D8007CEB1F00
-150C015E1304019E5B138FA2EB8780A2EB83C0D801035BEB01E0A2EB00F0A2147800025C
-143CA2141EA2140F485CEC07C0A21403A21401000C5C001E1300B47E221F7E9E22>78
-D<EB01FCEB0E0790383801C090387000E0484813F048481378485A153C48C7FC5A001E14
-3E123E123C127CA448147CA3157815F81278EC01F0007C14E01403003C14C0001CEB0780
-001EEB0F006C131E380780383801C0E038007F801F217C9F23>I<3807FFFE3900F80780
-90387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00EBFFF03803C038
-80141E140EA2140F48485AA51502D80F001304EB800F39FFF00788C7EA01F01F207E9E21
->82 D<EB1F82EB7066EBC01E3801800EEA030048130C00061304120EA3000F1300A27FEA
-07F013FF6C13C06C13E038003FF0EB03F813001478143CA200401338A314300060137014
-6000F013C038E8018038C60300EA81FC17217E9F19>I<39FFF001FE391F8000F86CC712
-601540A215807F0007EB0100A214021406EBC00400035BA25CA26C6C5AA25CA26D5A1200
-01F1C7FC13F2A213FC137C1378A21370A213201F207A9E22>86 D<EA07F8EA0C0CEA1E06
-1307121C1200A313FFEA07C7EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F
-878014147D9317>97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB
-00E05A14F0A5387001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<
-13FEEA0383380E0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07
-E011147D9314>I<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C
-00383801C0127812F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F
-19>I<13F8EA070EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA70
-02EA3004EA1C18EA07E011147D9314>I<140EEB3E11EBE1A33801C1C2380381E0EA0780
-1301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C014E0381800F0
-4813305A5AA3006013606C13C0381C0700EA07FC181F809417>103
-D<13E0120712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A538
-0E01C0A6381C0380001E13C038FF8FF014207E9F19>I<13C0EA01E01203A2EA01C0C7FC
-A6EA0380121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C>I<13E0120712
-011200A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338137C131C120E
-7FA2130F7F1480EA1C03381E07C038FF8FF016207E9F18>107 D<13E0120712011200A2
-EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>I<390387C07C391F98
-61863907A072073903C03403EB80380007EB7807EB0070A5000EEBE00EA64848485A001E
-EBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A03803C0601380000713
-E01300A5380E01C0A6381C0380001E13C038FF8FF014147E9319>I<13FCEA0387380E01
-80381C00C04813E0A24813F012F0A438E001E0A214C0130300F0138038700700EA380E6C
-5AEA07E014147D9317>I<EA038E381FB380EA07C71203EB8300EA078090C7FCA5120EA6
-5A121EEAFFC011147E9312>114 D<EA01F9EA0607EA080312181301EA3802EA3C00121F
-13F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010147F9312>
-I<1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C
-7C9B12>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075BA25BEA03
-9013A013E05B5B120190C7FC15147C9318>118 D<390FF83F803901E00E00EBC00C1408
-13E000005B143014205C13705CA20171C7FC1339133A133E133C133813181310A25BA25B
-EA70C0EAF08000F1C8FC12E61278191D809318>121 D E /Fi 1
-59 df<127012F8A3127005057C840D>58 D E /Fj 8 117 df<1238127C12FEA3127C12
-381200A61238127C12FEA3127C123807147D930D>58 D<B6FCA2380FC01F808080158014
-01A2EBC181A2EC8000A213C313FFA213C313C1A215C0A2EBC000EC0180A31403A21407EC
-3F00B6FCA21A1F7E9E1E>69 D<39FFC007FEA2390FE000607FEA0DF8A2EA0CFC137EA27F
-EB1F80EB0FC0A2EB07E0EB03F014F81301EB00FC147EA2143FEC1FE0140FA214071403A2
-14011400D8FFC01360A21F1F7E9E24>78 D<EB3FE0EBFFF83803F07E3807C01F390F800F
-80001F14C0393F0007E0A24814F0007E1303A200FE14F8A9007E14F0A2007F13076C14E0
-A2391F800FC0390FC01F803907E03F003803F07E3800FFF8EB3FE01D1F7E9E22>I<007F
-B512C0A2387C1F830070138100601380A200E014E000C01460A400001400B13807FFFEA2
-1B1E7E9D20>84 D<EA03F8EA0FFEEA1F0F383E0780123C007C13C0A212FCB5FCA200FCC7
-FCA3127CA26C13C0A2381F03803807FF00EA01FC12147F9315>101
-D<EA01F8EA0FFF381F0F80383E07C0387C03E0A300FC13F0A7007C13E0A2383E07C0381F
-0F80380FFF00EA03FC14147F9317>111 D<1203A45AA25AA2123FEAFFF8A2EA1F00AA13
-0CA5EA0F98EA07F0EA03E00E1D7F9C12>116 D E /Fk 64 123 df<903901FF81FE010F
-EBEFFF903A7F81FF8F80D9FE01EB1FC03901F803FE000314FCEA07F0EE0F80020190C7FC
-A7B712F0A32707F001FCC7FCB3A33A7FFF1FFFE0A32A2A7FA927>11
-D<49B4FC011F13C090387F81E0EBFC013901F807F01203EA07F0A4EC01C091C8FCA3EC3F
-F8B6FCA33807F003B3A33A7FFF3FFF80A3212A7FA925>I<1306130C13181338137013E0
-1201EA03C0A2EA0780A2120F13005AA2123EA3127EA3127CA212FCAE127CA2127EA3123E
-A37EA27E13801207A2EA03C0A2EA01E01200137013381318130C13060F3C7AAC1A>40
-D<12C012607E12387E7E120FEA0780A2EA03C0A213E0120113F0A2EA00F8A313FCA3137C
-A2137EAE137CA213FCA313F8A3EA01F0A213E0120313C0A2EA0780A2EA0F00120E5A5A12
-305A5A0F3C7CAC1A>I<B51280A611067F9016>45 D<121C127FA2EAFF80A3EA7F00A212
-1C09097B8813>I<EB3F803801FFF03807E0FC380FC07E48487E497E481480003E130F00
-7E14C0A400FE14E0AF007E14C0A46CEB1F80A26C14006D5A380FC07E6C6C5A3801FFF038
-003F801B277DA622>48 D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277B
-A622>I<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0
-140FA2127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E49
-13E013705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F
-803803FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C49
-5AEB07F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F48
-1480007CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C5B
-A2EB03BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0
-B612F8A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C
-14C091C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0
-A21218127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B
-277DA622>I<EB07F8EB3FFE90B5FC3901FC07803903F00FC03807C01FEA0F80121F1300
-48EB0F8091C7FC127EA3EAFE02EB1FF0EB3FFCEB603EEB801F00FF14809038000FC0A248
-14E0A4127EA4123E003F14C07EEC1F80D80F8013003807E07E6CB45A6C5B38003FC01B27
-7DA622>I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5CC648
-5AA2495A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297CA822
->I<EB3FC03801FFF04813FC3807C07E48C67E001E7FEC0F80123EA2123F138001C01300
-EBF01F381FFC1E6D5A380FFFF86C13E06C7F6C13FC8000077FD80F0F1380D81E0713C0EA
-3E01397C007FE0141F48130F14071403A315C0127C007EEB07806CEB0F00381FC03F380F
-FFFC00035B38007FC01B277DA622>I<EB7F803801FFF000077F380FC0FC381F803E4848
-7E007E1480A2140F00FE14C0A315E0A5007E131FA26C133F6C132F380F80CF3807FF8F00
-01130FEA0008010013C0A3EC1F80123E127FEC3F00143E147E007E5B383E03F8381FFFE0
-6C1380D801FEC7FC1B277DA622>I<48B4FC000F13E0381E03F0383801F8387800FC00FC
-13FE7EA3127C003813FCEA0001EB03F8EB07E0EB0FC01480EB1E00A25B1338A25BA790C7
-FCA5137013F8487E487EA36C5A6C5A1370172A7CA920>63 D<EC0780A24A7EA34A7EA24A
-7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F1480A249486C7EA24980010E133FA2
-496D7EA2013FB57EA39039700007F8A201F080491303000181491301A2000381D8FFFE01
-3F13FCA32E297EA833>65 D<B612F815FF16C03A03F8001FE0ED0FF0ED07F8150316FCA2
-1501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EAFE00EDFFC09039F8000FF0ED03F8
-ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1FF8B712E016C0EDFE0028297DA830
->I<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848
-147F4848143F4848141F485A160F485A1607127FA290C9FC5AA97E7F1607123FA26C7E16
-0E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF007C0011FB512800107EBFE00
-9038007FF028297CA831>I<B612FCEDFF8016E03A03FC001FF8ED03FCED00FE167FEE3F
-80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0A217C0161FEE3F80EE7F005EED03
-FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0A33903FC001FED07F01501A21500
-1670A3913801C0781638A302031300A2140F90B5FCA3EBFC0F1403A20201130EA3161C91
-C7FCA3163C1638167816F815011503151FB712F0A327297EA82C>I<B712C0A33903FC00
-3FED0FE015031501A21500A316F0913801C070A316001403A2140F90B5FCA3EBFC0F1403
-A21401A491C8FCA9B512FCA324297EA82A>I<91387FE003903907FFFC07011FEBFF0F90
-397FF00F9F9039FF0001FFD801FC7F484880484880484880485A82485A82127FA290CAFC
-5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E6C7E6CB45B90387FF007011F
-B5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F00FB5FCA3D803FCC7EA3FC0AF
-90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I<B512F0A33803FC00B3B1B512
-F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F00161E5E5E16E0ED03C04B5A4BC7
-FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFDE79038FFC3FCEC83FE9038FE01
-FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F80B539F00FFFFEA32F297EA835
->75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A21507A2150FA2151F157F913801
-FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D0003EFE000A2D9BF8014EFA2D9
-9FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8130EA2D981FC131CA3D980FE13
-38A2027F1370A291383F80E0A391381FC1C0A291380FE380A2913807F700A3EC03FEA26E
-5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8FFFCEC7FFF7F7F00036DEB01C0
-80EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF01801380147F15C0EC3FE0EC1FF0EC0FF8
-EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF1150F16F9ED07FDED03FF8181167F
-A2163F161F160F1607D8FFFE14031601A230297EA835>I<ECFFC0010F13FC90383F807F
-9039FE001FC0D801F8EB07E048486D7E48486D7E000F8148486D7EA24848147FA2007F16
-8090C8123FA34816C0AA6C16806D147FA2003F1600A26C6C14FEA26C6C495A6C6C495A6C
-6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC010013C02A297CA833>I<B612
-F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA716FC150316F8ED07F0ED3FE0
-90B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I<ECFFC0010F13FC90383FC0FF90
-39FE001FC048486D7ED803F0EB03F000078148486D7E48486D7EA24848147FA2007F1680
-A290C8123FA24816C0AA6C16806D147FA2003F1600A26C6C14FE143E3A0FE07F81FC0007
-9038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC090263FC07FC7FC90380FFFFC01
-004913C0EC003C811601ED1F8316FF6F1380A21700816F5A6F5A6F5A2A357CA833>I<B6
-12E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E4B5A1507ED0FE0ED3FC090B5
-00FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA21503923801FC1CB538F000FE
-EE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E0000F13F8381F80FD383F001F00
-3E1307481303A200FC1301A214007EA26C140013C0EA7FFCEBFFE06C13F86C13FE800007
-14806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A46C14E0A26C13076C14C0
-B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825>I<007FB71280A39039807F
-807FD87C00140F00781507A20070150300F016C0A2481501A5C791C7FCB3A490B612C0A3
-2A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA0001ED07007F0000150E137F6D
-143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7FC2F297EA834>I<B500F0EB7F
-FFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B017F140E80013F5CA26E133C01
-1F14386E1378010F14708001075CA26D6C485AA2ECFE0301015CECFF076D91C7FC1587EC
-7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230297FA833>I<B53CE07FFFE01F
-FFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13016C604B138002801503017F
-5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E17F09126F01C0F131E010F16
-1C033C13F8902707F838075BA2037813FC902703FC70035BA2913AFEE001FEF001015E02
-FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E141EA242297FA845>I<3B7F
-FFF01FFFE0A3000190C7EAF0006C6D485A02C05B017F13036D6C485AD91FF090C7FC5D90
-380FF81E6D6C5A1538903803FE786D6C5A5D6D5B147F6E7EA26E7E81143F81EC7BFEECF3
-FFEB01E102C07F01036D7EEB078049486C7E010E6D7E131E496D7E01386D7E498001F013
-0348486D7EB5013F13FCA32E297EA833>I<3803FF80000F13F0381F01FC383F80FE147F
-801580EA1F00C7FCA4EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E13DF39
-3F839FFC381FFE0F3803FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038EFFF8090
-38FE07E09038F803F09038F001F89038E000FCA2157EA2157FA8157EA315FCA29038F001
-F89038F803F090389C0FE090380FFF80390E01FC00202A7EA925>I<EB3FF03801FFFC38
-03F03E380FC07FEA1F80EA3F00A248133E007E90C7FCA212FEA7127EA2127F6CEB038013
-80001FEB0700380FE00E3803F83C3801FFF838003FC0191B7E9A1E>I<EC7FF0A31407AC
-EB3F873801FFF73807F03F380FC00F381F8007EA3F00A2127EA312FEA8127EA27EA2381F
-800F380FC01F3907E07FFF3801FFE738007F87202A7EA925>I<EB3FC03801FFF03803E0
-7C380F803E001F7F130048EB0F80127E15C0A200FE1307A2B6FCA248C8FCA3127EA2127F
-6CEB01C07E390F8003803907C007003803F01E3800FFFCEB3FE01A1B7E9A1F>I<EB07F8
-EB3FFCEB7E3E3801FC7FEA03F813F01207143E1400A7B512C0A33807F000B3A3387FFF80
-A3182A7EA915>I<9038FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003EEB3E10
-007EEB3F00A6003E133E003F137E6C137C380FC1F8380BFFE00018138090C8FC1238A212
-3C383FFFF814FF6C14C06C14E06C14F0121F383C0007007CEB01F8481300A4007CEB01F0
-A2003FEB07E0390FC01F806CB5120038007FF01E287E9A22>I<EAFFE0A3120FAC147E90
-38E1FF809038E30FC001E413E0EBE80701F813F013F0A213E0B039FFFE3FFFA3202A7DA9
-25>I<EA0780EA0FC0EA1FE0123FA3121FEA0FC0EA0780C7FCA7EAFFE0A3120FB3A3EAFF
-FEA30F2B7EAA12>I<EAFFE0A3120FACEC1FFCA3EC0780EC0F00141E5C5C14E0EBE3C013
-E7EBEFE0EBFFF08013F3EBE1FCEBC0FE147FA2EC3F80EC1FC0EC0FE0A2EC07F039FFFC1F
-FFA3202A7FA923>107 D<EAFFE0A3120FB3B2EAFFFEA30F2A7EA912>I<26FFC07FEB1FC0
-903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039C803F20001D801FE7F01D05B
-A201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1FF809038C30FC0D8
-0FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA3201B7D9A25>I<EB3FE03801FF
-FC3803F07E390FC01F80391F800FC0393F0007E0A2007EEB03F0A300FE14F8A8007E14F0
-A26CEB07E0A2391F800FC0390FC01F803907F07F003801FFFC38003FE01D1B7E9A22>I<
-38FFE1FE9038EFFF809038FE0FE0390FF803F09038F001F801E013FC140015FEA2157FA8
-157E15FEA215FC140101F013F89038F807F09038FC0FE09038EFFF809038E1FC0001E0C7
-FCA9EAFFFEA320277E9A25>I<38FFC1F0EBC7FCEBC63E380FCC7F13D813D0A2EBF03EEB
-E000B0B5FCA3181B7F9A1B>114 D<3803FE30380FFFF0EA3E03EA7800127000F01370A2
-7E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FCEB07FC130000E0137C143C
-7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B>I<13E0A41201A31203A212
-07120F381FFFE0B5FCA2380FE000AD1470A73807F0E0000313C03801FF8038007F001426
-7FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067FF3801FFC738007F87
-201B7D9A25>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0A2EBFC0300011480
-EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A
-23>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB0380A201F8EBF00700031600EC
-0FF801FC5C0001150EEC1FFC2600FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A
-16F0ECE01F011F5CA26D486C5AA2EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907
-F003803803F8079038FC0F003801FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F49
-7EEB3CFEEB38FFEB787F9038F03F803901E01FC0D803C013E0EB800F39FFF03FFFA3201B
-7F9A23>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE
-070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA213070038
-90C7FCEA7C0FEAFE0E131E131C5BEA74F0EA3FE0EA0F8020277F9A23>I<003FB5FCA2EB
-00FEEA3C01383803FC007813F8EB07F0EA700F14E0EB1FC0EA003F1480EB7F005B5B3801
-FC07120313F8EA07F0000F130F13E0381FC00E003F131E387F803EEB00FEB5FCA2181B7E
-9A1E>I E /Fl 68 123 df<127012F8B012701200A5127012F8A31270051C779B18>33
-D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5
-12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18>
-I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F
-6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F
-F8EA07E0EA01C0A3120011247D9F18>I<EA01C0EA07E0487EEA0E70487EA4EB73F813F3
-13E3380FC1C0EBC38013831303381F0700EA3F87EA7B8EEA71CEEAE1FC12E0137CEB7870
-A2EA70FE387FFFE0EA3FC7380F03C0151C7F9B18>38 D<EA03801207EA0F00123E5A12F0
-5A0907779B18>I<137013F0EA01E0EA03C0EA0780EA0F00121E121C5AA25AA45AA81270
-A47EA27E121E7EEA0780EA03C0EA01F0120013700C24799F18>I<126012F012787E7E7E
-EA07801203EA01C0A2EA00E0A41370A813E0A4EA01C0A2EA03801207EA0F00121E5A5A5A
-12600C247C9F18>I<EA01C0A4EA41C138F1C780EAFDDF387FFF00EA1FFCEA07F0A2EA1F
-FCEA7FFF38FDDF80EAF1C73841C100EA01C0A411147D9718>I<136013F0A7387FFFC0B5
-12E0A26C13C03800F000A7136013147E9718>I<121C123E127E127F123F121F1207120E
-121E127C12F81260080C788518>I<387FFFC0B512E0A26C13C013047E8F18>I<12301278
-12FCA2127812300606778518>I<1303EB0780A2130F14005B131EA2133E133C137C1378
-A213F85B12015B12035BA212075B120F90C7FCA25A121E123E123CA2127C127812F85AA2
-126011247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C0738380380007813C0EA7001A238
-E000E0A9EAF001007013C0A2EA780300381380381C0700EA1F1FEA0FFE6C5AEA01F0131C
-7E9B18>I<EA01801203A21207120F123F12FF12FB12431203B0EA7FFCEAFFFEEA7FFC0F
-1C7B9B18>I<EA03F0EA0FFEEA3FFF387C0F80387003C0EAE00138F000E0A21260C7FCA2
-EB01C0A21303EB0780EB0F00131E5B5B5B485AEA07C0485A381E00E05AEA7FFFB5FC7E13
-1C7E9B18>I<EA07F8EA1FFE487E38780780EB03C0130112301200EB0380A2EB0F00EA03
-FF5B7F38000780EB03C01301EB00E0A312F0A2EB01C01303387C0780383FFF006C5AEA03
-F8131C7E9B18>I<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C0780383003C0EA0001
-EB00E0A2126012F0A238E001C0EA7003387C0F80383FFF00EA1FFCEA03F0131C7E9B18>
-53 D<12E0B512E0A214C038E00380EB0700C65A131E131C5BA25B13F05BA2485AA3485A
-A448C7FCA7131D7E9C18>55 D<1230127812FCA2127812301200A81230127812FCA21278
-12300614779318>58 D<126012F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB
-07E0A2EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>
-62 D<137CEA01FEEA07FF380F8780381E03C0EA3C1DEA387F3870FFE0EA71E313C112E1
-EAE380A638E1C1C0127113E33870FF8038387F00EA3C1C381E00E0EA0F833807FFC00001
-138038007E00131C7E9B18>64 D<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5
-380FFF80A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>I<EBF8E0EA
-03FEEA07FFEA0F07EA1E03EA3C01EA38005AA214005AA8127014E0A27E123C381E01C0EA
-0F073807FF803803FE00EA00F8131C7E9B18>67 D<EA7FF8EAFFFE6C7E381C0F80EB03C0
-A2EB01E01300A214F01470A814F014E0A2130114C01303EB0F80387FFF00485AEA7FF814
-1C7F9B18>I<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA21438A5
-B512F8A3151C7F9B18>I<B512F8A3381C0038A41400A21307A3EA1FFFA3EA1C07A390C7
-FCA7EAFFC0A3151C7F9B18>I<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A2
-90C7FC5AA5EB0FF0131F130F387001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01
-F1141C7E9B18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>
-73 D<EAFFC0A3001CC7FCB114E0A5B5FCA3131C7E9B18>76 D<38FC01F8EAFE03A2383B
-06E0A4138EA2EA398CA213DCA3EA38D8A213F81370A21300A638FE03F8A3151C7F9B18>
-I<387E07F038FF0FF8387F07F0381D81C0A313C1121CA213E1A313611371A213311339A3
-1319A2131D130DA3EA7F07EAFF87EA7F03151C7F9B18>I<EA0FFE383FFF804813C0EA78
-03EA700100F013E0EAE000B0EAF001007013C0EA7C07EA7FFF6C1380380FFE00131C7E9B
-18>I<EAFFFEEBFF8014C0EA1C03EB01E013001470A514E01301EB03C0EA1FFF1480EBFE
-00001CC7FCA8B47EA3141C7F9B18>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A313
-031480130F381FFF005BA2EA1C0F7FEB0380A5149CA3387F01F8EAFF81387F00F0161C7F
-9B18>82 D<3803F1C0EA1FFF5AEA7C0FEA7003EAE001A390C7FC12701278123FEA1FF0EA
-07FEC67EEB0F80EB03C01301EB00E0A2126012E0130100F013C038F80780B5FCEBFE00EA
-E7F8131C7E9B18>I<387FFFF8B5FCA238E07038A400001300B2EA07FFA3151C7F9B18>I<
-38FF83FEA3381C0070B36C13E0EA0F01380783C03803FF806C1300EA007C171C809B18>
-I<38FE03F8EAFF07EAFE03383C01E0001C13C0A3EA1E03000E1380A438070700A4EA038E
-A4EA018C13DCA3EA00D813F8A21370151C7F9B18>I<EAFFF8A3EAE000B3ACEAFFF8A30D
-24779F18>91 D<EAFFF8A3EA0038B3ACEAFFF8A30D247F9F18>93
-D<EA0FF0EA1FFC487EEA3C0FEA180738000380A213FF1207121FEA7F03127812E0A3EAF0
-07EA780F383FFFF8EA1FFDEA07F015147E9318>97 D<127E12FE127E120EA5133EEBFF80
-000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E13803806
-3E00151C809B18>I<EA01FEEA07FF001F1380EA3E073838030048C7FCA25AA61270EB01
-C01238EA3E03381FFF8000071300EA01FC12147D9318>I<EB1F80133F131F1303A5EA03
-E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA3C1F381FFFF038
-0FFBF83803E3F0151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F38380780EA7003A238E0
-01C0A2B5FCA300E0C7FC1270EB01C01238EA3E07381FFF8000071300EA01F812147D9318
->I<EB1F80EB7FC0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801C000AEEA7FFFA3
-131C7F9B18>I<3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA1FFC
-5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0EA7E
-03381FFFC06C13803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF80000F13
-C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC171C809B18>I<EA0380EA07C0
-A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<1338137CA313381300
-A4EA0FFCA3EA001CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C18>I<127E12FE
-127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB038014
-C0387FC7F812FF127F151C7F9B18>I<EAFFC0A31201B3A4B51280A3111C7D9B18>I<38F9
-C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>
-I<EA7E3E38FEFF80007F13C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC17
-14809318>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A238E000E0A5EAF0010070
-13C0EA7803383C0780EA3E0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF8000
-7F13C0380FC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E
-0090C7FCA7EA7FC0487E6C5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA380FEA
-7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8
-EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EA
-FFFC7F5B14147E9318>I<EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA
-03FEEA001F38600780EAE003A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E12
-03A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818
->I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC17148093
-18>I<387F8FF000FF13F8007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA
-01DCA3EA00F8A2137015147F9318>I<38FF07F8138F1307383800E0A4381C01C0137113
-F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F13
-8F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E
-1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01
-C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B
-1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB0780
-38000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512F0A314147F9318>I
-E /Fm 52 123 df<91393FFC07F80103B5EA3FFE903A0FF807FF0F903B3FC003FC1F8090
-3B7F0007F83FC001FE130F000115F05B0003EE1F80EF060094C7FCA8B812F0A32803FC00
-0FF0C7FCB3A8267FFFE1B512C0A332327FB12F>11 D<14C01301EB0380EB0700130E5B13
-3C5B13F85B1201485AA2485AA2120F5B121FA290C7FC5AA35AA2127EA412FEAE127EA412
-7FA27EA37E7FA2120F7F1207A26C7EA26C7E12007F13787F131C7F7FEB0380EB01C01300
-124878B51F>40 D<124012E012707E7E7E120F6C7E7F12037F6C7EA26C7EA27F137C137E
-A2133E133FA31480A2131FA414C0AE1480A4133FA21400A3133E137EA2137C13FC5BA248
-5AA2485A5B12075B48C7FC120E5A5A5A5A124012487CB51F>I<B512F8A715077F921B>
-45 D<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A31C2E7AAD
-28>49 D<EB3FE03801FFFE0007EBFF80D80F8013C0391E003FE00038EB1FF0007CEB0FF8
-007EEB07FCB4FC018013FEA21403A2EA7F00003E1307C7FC15FCA2EC0FF8A215F0EC1FE0
-15C0EC3F80EC7F00147E14F8495A495A495A49C7FC011E130E5B133849131E49131C485A
-48C7123C48B512FC5A5A5A4814F8B6FCA31F2E7CAD28>I<EB1FF890B5FC000314C03907
-E01FF0390F0007F8D81F807FEA3FC06E7EA4EA1F80380F0007C75BA25D4A5A4A5AEC3F80
-02FFC7FCEB3FF8ECFF809038001FE06E7E6E7E6E7E816E7EA21680A3121C123E127FEAFF
-801600A24A5AEA7F00007E495A003C5C391FC01FF06CB512C0000391C7FC38003FF8212E
-7DAD28>I<157015F0140114031407140FA2141F143F147714F714E7EB01C7EB0387EB07
-07130F130E131C1338137013F013E0EA01C0EA0380EA07005A120E5A5A5A5AB712E0A3C7
-380FF000A9010FB512E0A3232E7EAD28>I<000C1430390FC007F090B512E015C0158015
-005C14F85C1480000EC8FCA8EB1FF0EBFFFE390FE03F809038000FC0000EEB07E0000C14
-F0C713F8140315FCA215FEA21218123E127F5AA215FCA25A0078EB07F815F06CEB0FE06C
-EB1FC0390FC07F806CB51200000113FC38003FE01F2E7CAD28>I<14FF010713E0011F7F
-90387F80F89038FE003CD801F8137C484813FE00071301EA0FE0A2EA1FC0003F6D5A1578
-92C7FC485AA338FF83FC90388FFF8090389C0FC09038B003F06E7E01E07F01C07F140081
-A2491480A4127FA4003F15007F121F5D000F495AEA07E06C6C485A3901FC0FE06CB55A01
-3F90C7FCEB0FFC212E7DAD28>I<1238123E003FB612C0A316804815005D5D5D0078C712
-3800705C5D00F0495A48495A4AC7FCA2C7120E5C5C1478147014F0495AA213035C1307A2
-130FA2131F5CA2133FA4137FA86DC8FC131E22307CAF28>I<EB0FFC90387FFF8048B512
-E03903F00FF03907C003F84848C67E48C7FC157E5AA37F7F01F05B01FC5B381FFE019038
-FF81F06CEBE3C06CEBFF806C49C7FC6C7F6C14C0013F7F90B57ED803E37FD807C17F390F
-807FFE391F001FFF003E7F007E01031380140048147F153F151FA316007E127E153E6C5C
-D81FC05B390FF007F00003B55AC61480D91FF8C7FC212E7DAD28>I<1578A215FCA34A7E
-A24A7EA24A7FA34A7FEC0E7F021E7FEC1C3FA202387F151F02787FEC700FA202E07F1507
-010180ECC003A249486C7EA201078191C7FC498191B6FCA24981011CC7123F013C810138
-141FA24981160F01F081491407A2484881486C1403B549B512FCA336317DB03D>65
-D<B712C016FC16FFD801FEC77FEE7FE0707E161F707EA2831607A4160FA25FA24C5A4C5A
-4C5A4B485ADB1FFEC7FC90B65AEEFF8049C7EA3FE0EE0FF0EE07FCA2707E83821880A718
-005E5F16074C5A4C5AEEFFF0B812C094C7FC16F831317DB039>I<913A03FF800180023F
-EBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9FF807F4848C8127F
-4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7FCA212FFA9127FA2
-7FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C6C6C6C1478D93FC0
-5CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F80203138031317CB03A>I<
-B812F0A3C6903880003FEE07F816031600A21778A21738A3171C1507A31700A25D5D5D91
-B5FCA3EC803F818181A21707A392C7120EA4171EA2173CA2177C17FC16011607163FB812
-F8A330317EB035>69 D<B812E0A3C6903880007FEE0FF016031601A21600A21770A31738
-A21507A21700A35D5D5D91B5FCA3EC803F818181A592C8FCACB612C0A32D317EB033>I<
-DA03FF1303027FEBF00749B5EAFC0F01079038007E1FD91FF0EB0FBFD97FC0EB03FF4948
-7F4848C87E485A0007824848815B001F82A2484881A2127FA24992C7FC12FFAA0307B512
-F8127F7FDB00011300123FA26C7EA2120F7F6C7E12036C7E6C6C7E6D6C5BD91FF8497ED9
-07FFEB3E3F01019038FFFC1F6D6CEBF00F0203EB800335317CB03F>I<B61280A3C6EB80
-00B3B3A7B61280A319317EB01E>73 D<B6D88003B5FCA3C60180C7EA1F80051EC7FC5F5F
-5FEE01C0EE07804CC8FC161E5E5E16E0ED03C04B5A4BC9FC151E153E157F5D02837F0287
-7F91388F7FE0EC9E3F9138BC1FF002F07F4A6C7EECC0074A6C7E826F7F81707E83163F70
-7E707E831607707E83707F8284B6D8801FEBFF80A339317EB03F>75
-D<B67EA3000190C9FCB3A9EE0380A416071700A25EA35E5E5E5E4B5A150FB7FCA329317D
-B030>I<B56C49B512C08080C66D90390003E0006E6E5AEBEFFC13E780EBE3FF01E17F01
-E07F6E7E143F816E7E6E7E6E7E14036E7E16806E13C0ED7FE0ED3FF0151F16F8ED0FFCED
-07FEED03FF6F13818117C1EE7FE1EE3FF1EE1FF9EE0FFD160717FF828282177F173FA217
-1F170F486C1507B500E014031701A23A317EB03F>78 D<B712E016FEEEFF80C6D9800013
-E0EE3FF0EE0FF8EE07FCA2EE03FEA217FFA717FEA2EE07FC17F8160FEE3FE0EEFFC091B6
-120016F80280C8FCB3A2B67EA330317EB037>80 D<B77E16F816FEC690398003FF809238
-007FE0EE1FF0707EA283160783A65F160F5F4C5A4C5A4C5ADB03FFC8FC91B512F816E091
-388007F8ED01FC6F7E167F83707EA283A583A4F0038017F8161F1900706C5AB6398003FE
-0E933801FFFC9338001FF039317EB03C>82 D<90391FF8018090B51203000314C73907F0
-07EF390F8000FF48C7127F003E141F150F5A150712FCA215037EA26C91C7FC13C0EA7FF0
-EBFF806C13F8ECFF806C14F06C806C806C14FFC6FC013F1480010114C0D9001F13E01401
-EC003FED1FF0150F1507126000E01403A316E07EA26CEC07C07EB4EC0F8001C0EB1F00D8
-FBFC13FE00F1B512F8D8E03F5BD8C003138024317CB02D>I<007FB8FCA39039C00FF801
-D87E00EC003F007C82007882A200708200F01780A3481603A5C792C7FCB3AA017FB6FCA3
-31307DAF38>I<B6D88003B51280A3C60180C73807C000715AB3AE137F4DC7FC80013F15
-0EA26D6C5C6D6C5C6D6C5C6D6C495A903A00FF801FC0023FB55A020F49C8FC020013E039
-317EB03E>I<B500FC91B5FCA3000390C8EA03C06C17806E14076C170080017F150EA26E
-141E013F151C6E143C011F153880010F5D8001075DA26E130101035D6E13036D5D15806D
-4AC7FCA26F5A027F130EEDE01E023F131CEDF03C021F133815F8020F5BA2EDFCF002075B
-15FF6E5BA26E5BA26E90C8FCA3157EA2153CA238317EB03D>I<EBFFF0000313FF390F80
-3F809038C00FE0486C6C7EA26E7ED80FC07FEA0780C7FCA414FF131FEBFFE33803FC03EA
-0FF0EA1FC0123FEA7F80A2EAFF00A31407A2387F800D393FC01DFE3A1FE078FFF03907FF
-E07FC6EB803F24207E9F27>97 D<EA01F812FFA3120F1207ADEC3FE0ECFFFC9038FBE07F
-9039FF001F8049EB0FC04914E049EB07F016F8A2ED03FCA316FEA816FCA3ED07F8A216F0
-6DEB0FE06D14C001E7EB3F809039C3C0FE00903880FFF89038003FC027327EB12D>I<EB
-0FFF017F13C03901FC01F03803F0033907E007F8120FEA1FC0003FEB03F0EC01E04848C7
-FCA312FFA8127FA36C6C131CA2001F14386C7E000714703903F001E03901FC07C039007F
-FF00EB0FF81E207D9F24>I<ED0FC0EC07FFA3EC007F153FADEB07F8EB3FFF9038FE07BF
-3903F801FF3907E0007F120F4848133F123FA2485AA312FFA8127FA36C7EA2121F6C6C13
-7F000714FF2603F00313E03A01FC0F3FFE38007FFEEB0FF027327DB12D>I<EB0FFC9038
-7FFF803901FC0FC03903F003E03907E001F0000F14F8391FC000FC003F14FEA24848137E
-157FA212FFA290B6FCA20180C7FCA4127FA36C6C1307121F150E6C7E6C6C131C6C6C1378
-3900FE03E090383FFFC0903807FE0020207E9F25>I<EB01FE90380FFF8090381FC3C090
-387F07E09038FE0FF0120113FC1203EC07E0EC018091C7FCA8B512FCA3D803FCC7FCB3A8
-387FFFF0A31C327EB119>I<90391FF007C09039FFFE3FE03A01F83F79F03907E00FC300
-0F14E19039C007E0E0001FECF000A2003F80A5001F5CA2000F5CEBE00F00075C2603F83F
-C7FC3806FFFE380E1FF090C9FC121EA2121F7F90B57E6C14F015FC6C806C801680000F15
-C0003FC7127F007EEC1FE0007C140F00FC1407A4007EEC0FC0003E1580003F141FD80FC0
-EB7E003907F803FC0001B512F0D8001F90C7FC242F7E9F28>I<EA01F812FFA3120F1207
-ADEC07F8EC3FFEEC783F02C013809039F9801FC0EBFB0001FE14E05BA35BB3B500C3B5FC
-A328327DB12D>I<EA03C0487E487E487EA46C5A6C5A6C5AC8FCA9EA01F8127FA31207B3
-A7B51280A311337DB217>I<EA01F812FFA3120F1207ADEDFFF8A3ED3F00153C5D5DEC03
-C04A5A4AC7FC141E147814FCEBF9FE13FB90B5FC496C7E01FC7FEBF83F496C7E6E7E816E
-7E14036E7E6E7E1680157F16C0B53881FFFEA327327EB12B>107
-D<EA01F812FFA3120F1207B3B3A6B512C0A312327DB117>I<2703F007F8EB1FE000FFD9
-3FFEEBFFF8913A783F01E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602
-F8148001FC5CA3495CB3B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFE
-EC783F02C013803A0FF1801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F
-2D>I<EB07FC90387FFFC03901FC07F03903F001F848486C7E4848137E001F147F003F15
-8049133F007F15C0A300FF15E0A8007F15C0A36C6CEB7F80A2001F15006C6C13FE00075C
-3903F803F83901FE0FF039007FFFC0D907FCC7FC23207E9F28>I<3901F83FE000FFEBFF
-FC9038FBE07F9039FF003F80D807FEEB1FC049EB0FE04914F0ED07F8A216FC1503A216FE
-A816FC1507A216F8A2ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC3F
-C091C8FCABB512C0A3272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF30F
-F0EA07F6A29038FC07E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114
-D<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90C7FCB47E13FC387FFFC0
-6C13F0806C7F00077F00017FEA003F01001380143F0060131F00E0130FA27E15007E6C13
-1E6C131C38FF807838F3FFF038C07F8019207D9F20>I<131CA5133CA3137CA213FC1201
-12031207381FFFFEB5FCA2D803FCC7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB
-07F0192E7FAD1F>I<D801F8EB07E000FFEB03FFA3000FEB003F0007141FB3153FA20003
-147FA26C6CEBDFF03A00FE039FFF90387FFF1FEB0FFC28207D9F2D>I<B5EB1FFCA3D80F
-F8EB03C0000715806D1307000315007F0001140E7F6C5CA2EC803C017F1338ECC078013F
-1370ECE0F0011F5B14F1010F5B14F9903807FB80A214FF6D90C7FCA26D5AA26D5AA21478
-A226207E9F2B>I<B53A1FFFE03FF8A33C0FF000FE0007806D150300076EEB0700816D5D
-00039138FF800EA26C6C486D5A15DF01FF153C6C9039038FE038A2D97F876D5A150702C7
-14F0D93FCF6D5AECCE03D91FFEEBF9C09138FC01FD16FF010F5D4A7EA26D486DC7FCA201
-03147E4A133EA26D48131C35207E9F3A>I<3A7FFF807FFCA33A03FC000F006C6C131E6C
-6C5BEC803890387FC078013F5B90381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E
-81815B903803DFE09038078FF08190380F07FC90381E03FEEB3C01496C7E4914804848EB
-7FC00003EC3FE026FFFC01B5FCA328207F9F2B>I<B5EB1FFCA3D80FF8EB03C000071580
-6D1307000315007F0001140E7F6C5CA2EC803C017F1338ECC078013F1370ECE0F0011F5B
-14F1010F5B14F9903807FB80A214FF6D90C7FCA26D5AA26D5AA21478A21470A214F05C13
-01007C5BEAFE035C49C8FC5BEAFC1EEA787CEA3FF0EA0FC0262E7E9F2B>I<003FB512F8
-A29038800FF0393E001FE0003C133F003814C00078EB7F8014FFD8700113005C1303495A
-00005B130F495A5C495A137F9038FF801C14005A485A5B0007143C485A49133848481378
-003F14F8EBC001387F8007B6FCA21E207E9F24>I E /Fn 3 16 df<B612C0A21A027C8B
-23>0 D<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C0000615
-60481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C1530A2
-6C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7FC28
-2B7EA02D>13 D<EA03F0EA0FFC487E487E481380A2B512C0A66C1380A26C13006C5A6C5A
-EA03F012127E9317>15 D E /Fo 83 125 df<90381F83E09038F06E303901C078783803
-80F8903800F03048EB7000A7B612803907007000B2383FE3FF1D20809F1B>11
-D<133FEBE0C0EA01C0380381E0EA0701A290C7FCA6B512E0EA0700B2383FC3FC1620809F
-19>I<EB3FE013E0EA01C1EA0381EA0700A8B5FCEA0700B2383FE7FC1620809F19>I<1270
-12F8A71270AA1220A51200A5127012F8A3127005217CA00D>33 D<EA7038EAF87CEAFC7E
-A2EA743AEA0402A3EA0804A2EA1008A2EA2010EA40200F0E7F9F17>I<1340A2EA03F0EA
-0C4EEA10413820408012600040134038C041C01343A238E04180EB40001270127CEA3FC0
-EA1FF86C7EEA03FEEA007FEB4F801343EB41C0A2EAF040A312801480EA404100201300EA
-3042EA0C4CEA03F0EA0040A312257EA117>36 D<127012F812FCA212741204A31208A212
-10A212201240060E7C9F0D>39 D<13401380EA01005A12061204120C5AA212381230A212
-701260A412E0AC1260A412701230A212381218A27E120412067E7EEA008013400A2E7BA1
-12>I<7E12407E12307E1208120C7EA212077EA213801201A413C0AC1380A412031300A2
-5A1206A25A120812185A12205A5A0A2E7EA112>I<EA0180A5EAE187EA718EEA399CEA0F
-F0EA03C0A2EA0FF0EA399CEA718EEAE187EA0180A510147DA117>I<127012F012F8A212
-781208A31210A31220A21240050E7C840D>44 D<EAFFF0A20C02808A0F>I<127012F8A3
-127005057C840D>I<144014C0EB0180A3EB0300A31306A25BA35BA35BA25BA35BA3485A
-A348C7FCA21206A35AA35AA25AA35AA35AA2122D7EA117>I<EA03F0EA0E1C487EEA1806
-EA380738700380A400F013C0AD00701380A3EA780700381300EA1806EA1C0E6C5AEA03F0
-121F7E9D17>I<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C9D17>I<EA03F0EA0C
-1CEA100E487E00401380128000F013C0EAF803A3EA200712001480A2EB0F00130E5B5B5B
-13605B485A48C7FC000613405A5A00101380EA3FFF5AB5FC121E7E9D17>I<EA03F0EA0C
-1CEA100EEA200F007813801307A2EA380F12001400A2131E131C1370EA07F0EA003C130E
-130FEB0780A214C0122012F8A300F013801240EB0F00EA200EEA183CEA07F0121F7E9D17
->I<1306A2130EA2131E132EA2134E138EA2EA010E1202A212041208A212101220A21240
-12C0B512F038000E00A7EBFFE0141E7F9D17>I<EA1803EA1FFE5B5B13E00010C7FCA6EA
-11F0EA161CEA180EEA10071480EA0003A214C0A3127012F0A200E013801240EB0700EA20
-066C5AEA0838EA07E0121F7E9D17>I<137CEA0182EA0701380E0380EA0C071218383803
-0090C7FC12781270A2EAF1F0EAF21CEAF406EAF807EB0380A200F013C0A51270A2148012
-38EB07001218EA0C0E6C5AEA01F0121F7E9D17>I<1240387FFFE014C0A2384000803880
-0100A21302485AA25B5BA25BA21360A213E05B1201A41203A76C5A131F7E9D17>I<EA03
-F0EA0C0CEA1006EA3003382001801260A3127038780300123EEA3F06EA1FC8EA0FF0EA03
-F8487EEA0C7EEA103F38300F80EA6007EB01C012C01300A31480EA600100201300EA1002
-EA0C0CEA03F0121F7E9D17>I<EA03F0EA0E18487E487E13071270EB038012F0A214C0A5
-EA7007A21238EA180BEA0E13EA03E338000380A3EB07001230EA7806130EEA700CEA2018
-EA1070EA0FC0121F7E9D17>I<127012F8A312701200AA127012F8A3127005147C930D>I<
-127012F8A312701200AA127012F012F8A212781208A31210A31220A21240051D7C930D>
-I<EA0FE0EA103CEA601EEA400EEAE00F12F0A21260EA001E131C13381370136013C01380
-A2EA0100A6C7FCA5EA0380EA07C0A3EA038010207E9F15>63 D<5B497EA3497EA3EB09E0
-A3EB10F0A3EB2078A3497EA2EBC03EEB801EA248B5FCEB000FA20002EB0780A348EB03C0
-A2120C001E14E039FF801FFE1F207F9F22>65 D<B512E0380F0078141EA2801580A51500
-5C141E147CEBFFF0EB007C141FEC0F80EC07C0140315E0A515C014071580EC0F00143EB5
-12F01B1F7E9E20>I<90380FE0109038381C309038E002703803C00139078000F048C712
-70121E15305A1510127C127800F81400A91278007C1410123CA26C1420A27E6C6C13406C
-6C13803900E00300EB380CEB0FF01C217E9F21>I<B512F83807801EEC0780EC03C0EC01
-E0EC00F015701578A2153CA3153EA8153CA2157C1578A215F0EC01E0EC03C0EC0780EC1E
-00B512F81F1F7F9E23>I<B61280380F000F14031401140015C01540A314401500A214C0
-130113FF130113001440A3EC0020A31540A315C01401EC0380140FB6FC1B1F7E9E1F>I<
-B61280380780071401A2140015C01540A4EC2000A3146014E013FF138014601420A391C7
-FCA87FEAFFFE1A1F7F9E1E>I<90380FE0109038381C309038E002703803C00139078000
-F048C71270121E15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA2
-7EA27E6C7E3903C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07F
-F8390F000780AD90B5FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFF
-F00C1F7E9E10>I<3807FFC038003E00131EB3A3122012F8A3EAF01CEA403CEA6038EA10
-70EA0FC012207F9E17>I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7
-FC5B497E130FEB13C0EB21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F0
-39FFF01FFE1F1F7E9E23>I<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147C
-B512FC171F7E9E1C>I<B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323
-A26D1343A36D1383A290380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8
-FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378
-A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401
-123E38FF80001D1F7E9E22>I<EB1FE0EB70383801C00E48487E39070003804814C0001E
-EB01E048EB00F0A2007C14F8A20078147800F8147CA900781478007C14F8A2003C14F000
-3E1301001E14E06CEB03C06C148039038007003801E01E38007038EB1FE01E217E9F23>
-I<B512E0380F007C141E80EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEA
-FFF01A1F7E9E1F>I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01
-C0EB0070A280143CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>
-82 D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA
-3FF86CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8
-018038C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200
-C0143000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0
-EC0080B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FF
-F003FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002
-A213F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3B
-FFF07FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C0
-00035DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C146001
-3C144090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>
-I<397FF81FF8390FE007C03907C0030000031302EBE0063801F00400005BEBF818EB7810
-6D5AEB3E60EB1E406D5AA213076D7E497E1305EB08F0EB18F8EB1078EB207CEB603EEB40
-1EEB801F3901000F801407000214C000061303001FEB07E039FFC01FFE1F1F7F9E22>I<
-39FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C
-06EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>I<387FFF
-FE387E003C127800701378006013F814F0384001E0130314C0EB07801200EB0F00131EA2
-5B137C13785B1201EBE002EA03C0A2EA0780000F13061300001E1304003E130C123C4813
-3C14FCB5FC171F7E9E1C>I<12FFA212C0B3B3A512FFA2082D7CA10D>I<EA0804EA1008EA
-2010A2EA4020A2EA8040A3EAB85CEAFC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203
-B3B3A512FFA2082D80A10D>I<120812101220A21240A21280A312B812FCA2127C123806
-0E7D9F0D>96 D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA1E0E12381278
-00F01310A3131E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87
-381E0180EB00C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA
-107C15207E9F19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800
-381380A2381C0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA
-0C03EA180112381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19
->I<EA03F0EA0E1C487E487EA21270EB038012F0A2B5FC00F0C7FCA31270A26C1380A238
-1C0100EA0706EA01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA
-0E00B2EA7FE01020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E
-6C5AEA1E38EA33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330
-A4006013606C13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D
-03001E1380A2121CAE38FF8FF014207E9F19>I<1218123C127C123C1218C7FCA6121C12
-FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3
-A31260EAF06013C0EA6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB06
-0013045B5B5B136013E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014
-207E9F18>I<121C12FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D03
-9038391E01E01CA2001C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D0300
-1E1380A2121CAE38FF8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000
-E0A200F013F0A6007013E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA
-1C7CEAFD87381E018014C0381C00E014F014701478A6147014F014E0381E01C0EB038038
-1D8700EA1C7C90C7FCA8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA3801
-1278127012F0A6127012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F93
-18>I<EA1CF0EAFD18EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA60
-18EAC008A3EAE000127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEA
-D818EA87E00F147F9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA0708
-1203EA01F00E1C7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F01414
-7E9319>I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A2
-13E4EA00E8A21370A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020
-000E1440A214C0D80704138014E0A239038861001471A23801D032143A143E3800E01CA2
-EB6018EB40081E147F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01
-C813D8EA00F01370137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE
-07FC16147F9318>I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2
-EA01C4A213E4EA00E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>
-I<EA7FFFEA700E1260EA401C133813781370EA00E0120113C0EA038012071301120E121E
-EA1C03EA3802EA7006130EEAFFFE10147F9314>I<B812F02C01808C2D>124
-D E /Fp 25 119 df<120FEA3F80EA7FC013E0EAFFF0A213F8A2127FA2123FEA0F381200
-A31370A313E0A2120113C0EA0380A2EA0700120E5A5A12100D1D79BB1B>39
-D<B61280A819087F9620>45 D<DB1FFE14600203B500E013E0021FECF801027FECFE0390
-3B01FFFC00FF07010701C0EB1FCF4990C7EA07FFD91FFC1401D93FF0804948157F494815
-3F4849151F4890C9120F5A48481607A248481603A2485A1801A2127FA24993C7FCA212FF
-AB127FA27FF001E0123FA36C7EF003C06C7EA26C6CEE07807E6C6DED0F006C6D5D6D6C15
-3E6D6C5DD91FFC5D6DB4EC03F06D01C0EB0FE0010101FCEB7F806D6CB6C7FC021F14FC02
-0314E09126001FFEC8FC3B3D7BBB46>67 D<B912F0A43A007FF000019338003FF8170F17
-07170317011700A21878A4043C137C183CA4047C1300A216FC1501150791B5FCA4ECF007
-15011500167CA2043C130FA3181EA293C7FCA2183EA2183CA2187CA218FC1701EF03F817
-07170F173FEE03FFB9FC18F0A3383B7CBA40>69 D<B912C0A43A007FF000079338007FE0
-173F170F1707A21703A21701A418F0EE7800A41800A216F8A21501150791B5FCA4ECF007
-15011500A21678A693C8FCAEB612FEA4343B7CBA3D>I<DB1FFC14C00203B5EAC001021F
-ECF003027FECFC07903B01FFFC00FE0F010701C0EB1F9F4948C7EA07FFD93FF880494814
-004948157F485B4A153F4890C9121F485A000F170F5B001F1707A2485A1803A2127FA249
-93C8FCA212FFAA041FB61280127FA27FDC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F
-806C7F6D6C5CEB3FFCD90FFF5C6D01C0EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF8
-030203ECE0009126001FFEC9FC413D7BBB4C>I<D903FF1303011FEBE00790B5EAFC0F48
-6E5A4848C66C5AD807F0EB1FFF484813074848130148487FA248C87E82A24881A36D80A2
-7FA201F091C7FCEA7FFCEBFF806C13F8ECFFC06C14FC15FF6C15C06C15F06C81C6816D80
-131F010380D9001F14801401DA000F13C015031500EE7FE0A20070153F12F0161FA37E17
-C0A27EEE3F807E6C160001C05C6D14FE01FC495A3AFDFFC00FF8D8F87FB55AD8F01F14C0
-D8E00391C7FC39C0003FF82B3D7BBB36>83 D<B600F80107B512E0A426007FF0C83807E0
-00725AB3B3A3013F4C5AA280011F4CC7FCA26D6C151E0107163E6E5D6D6C5D6D6D130190
-26007FE0EB0FE0DA3FFCEB7FC0020FB65A02034AC8FCDA007F13F003071380433C7DBA4A
->85 D<B600E091B512F0A4C601F0C83801F80061017F5F6E1503013F5F6E1507011F5F80
-180F010F94C7FC6E5D6D161E6F143E6D163C816D5E8118F86D5E6F1301027F5D6F130302
-3F5D811707021F5D6F130F020F92C8FC6F5B6E141E16806E5C16C0177C6E1478EEE0F86E
-5C16F1037F5B16F916FB033F5B16FF6F5BA26F90C9FCA26F5AA36F5AA26F5AA26F5A443B
-7EBA49>I<EB3FFE48B512E0000714F8390FE007FC9038F001FE486C6C7E6F7E82153F6C
-48806C5A6C5AC8FCA491B5FC131F90387FF83F3803FF803807FC00EA0FF0485A123F485A
-A2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F0FFFE03807FFFE0001497E39003FE000
-2B267DA52F>97 D<903801FFF0010F13FE013FEBFF809039FF801FC03901FE003F4848EB
-7FE0485A485A121F4848EB3FC0ED1F80007FEC0F004990C7FCA212FFAA127F7FA2123F6D
-14F0121F6C6CEB01E012076C6CEB03C06CB4EB0F806C9038C03F0090383FFFFE010F13F8
-010113C024267DA52B>99 D<EE3F80ED3FFFA4150181B0ECFF80010F13F0013F13FC9038
-FFC03F3901FE000F4848130348487F48487F121F485AA2127F5BA312FFA9127FA36C7EA2
-121F6C6C5B6C6C5B00035CD801FE011F13C02700FF807E13FE90387FFFF8010F13E00101
-13002F3C7DBB36>I<49B47E010F13F0017F13FC9038FF81FE3A03FE007F80D807F8133F
-4848EB1FC0ED0FE0485A003F15F01507485A16F8A212FFA290B6FCA301C0C8FCA4127FA3
-6C7E1678121F7F000F15F06C6C13016C6CEB03E06C6CEB0FC03A00FFC07F8090393FFFFE
-00010F13F8010013C025267DA52C>I<13FE12FFA412071203B0EDFF80020313F0020F7F
-91381E03FC91383801FE02607F4A7E01FF15805C91C7FCA35BB3A4B5D8F83F13FEA42F3C
-7CBB36>104 D<EA01E0EA03F8487E487EA2121FA2120FA26C5A6C5AEA01E0C8FCAB13FE
-127FA412071203B3AAB512F0A4143D7DBC1A>I<13FE12FFA412071203B3B3AEB512F8A4
-153C7DBB1A>108 D<D801FCD97FC0EB0FF800FF902603FFF8EB7FFF020F6D48B57E913C
-1F03FE03E07FC0913C3800FF07001FE0000749028E80000301C0D97F98130F01FD03F880
-4A5C01FFC75BA3495DB3A4B5D8F81FB50003B512E0A44B267CA552>I<D801FCEBFF8000
-FF010313F0020F7F91381E03FC91383801FE000701607F0003497E01FD15805C01FFC7FC
-A35BB3A4B5D8F83F13FEA42F267CA536>I<903801FFC0010F13F8017F13FFD9FF807F3A
-03FE003FE0D807F8EB0FF048486D7EA248486D7E003F81A248486D7EA400FF1680A9007F
-1600A36C6C495AA2001F5D6D1307000F5D6C6C495AD803FEEB3FE03A00FF80FF806DB5C7
-FC010F13F8010113C029267DA530>I<9038FE01FF00FF011F13F0027F13FC9138FC07FE
-9039FFF001FF00079039C0007F806C90C7EA3FC04915E0EE1FF017F8160F17FCA2160717
-FEA917FC160FA317F8EE1FF0A26DEC3FE06EEB7FC06EEBFF806E4813009039FEFC07FE91
-387FFFF8021F13E0DA03FEC7FC91C9FCADB512F8A42F377DA536>I<3901FC03F000FFEB
-0FFC4AB4FC91383C3F80EC707F00079038E0FFC000035BEBFD80A201FFEB7F809138003F
-00151E92C7FC5BB3A3B512FCA422267DA528>114 D<90383FF0383903FFFE7848EBFFF8
-381FC00F383F0003003E13005A157812FCA27E6C140013C013FC387FFFF06C13FEECFF80
-6C14C06C14E0000314F0C614F8011F13FCEB007FEC07FE0070130100F01300157E7EA27E
-157C6C14FC6C14F890388001F09038F00FE000F9B512C0D8F07F130038C01FF81F267DA5
-26>I<130FA55BA45BA25BA25B5A5A5A001FEBFFF0B6FCA3000190C7FCB3153CA86C1478
-1480017F13F090383FC1E090381FFFC06D1380903801FE001E377EB626>I<01FEEC3F80
-00FFEC3FFFA400071401000380B3A45DA25D120115066C6C4913C090267F807813FE6DB4
-5A6D5B010313802F267CA536>I<B500F0EBFFFCA4D803FEC7EA1F806D15006C151E806C
-5DA26E137C017F14786E13F8013F5CECF001011F5CECF803010F5CA2ECFC0701075CECFE
-0F010391C7FC6E5A6D131E15BE6D13BC15FC6E5AA36E5AA26E5AA26E5AA26E5A2E267EA5
-33>I E end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 300dpi
-TeXDict begin
-%%PaperSize: a4
-%%BeginPaperSize: a4
-a4
-%%EndPaperSize
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 700 942 a Fp(Us)r(er's)33 b(Guid)n(e)933 1067
-y(t)o(o)161 1191 y(p)s(cl-cvs)g(-)g(t)l(h)m(e)f(Em)n(acs)f(F)-8
-b(ron)m(t-En)m(d)31 b(t)o(o)h(CVS)703 1378 y Fo(rele)q(as)q(e)16
-b(1.05-CVS-$Nam)o(e:)i($)827 1627 y(P)o(er)d(Ce)q(d)o(erqvi)q(st)721
-1876 y(last)g(up)q(d)o(a)o(t)o(e)q(d)h(20)f(No)o(v)f(1995)p
-eop
-%%Page: 2 2
-2 1 bop 0 1814 a Fo(Co)o(p)o(yr)q(igh)o(t)226 1813 y(c)213
-1814 y Fn(\015)16 b Fo(1992)e(P)o(er)h(Ce)q(d)o(erqvi)q(st)0
-1951 y(P)o(ermi)q(s)q(s)q(ion)e(i)q(s)g(gran)o(t)o(e)q(d)f(t)o(o)h(m)o
-(ak)o(e)f(an)o(d)h(di)q(str)q(ibu)o(t)o(e)h(v)o(erba)o(t)o(im)f(co)o
-(pie)q(s)h(of)f(t)n(hi)q(s)g(m)o(an)n(ual)g(pro)o(vid)o(e)q(d)i(t)n(h)o
-(e)e(co)o(p)o(yr)q(igh)o(t)0 2014 y(not)o(ice)i(an)o(d)g(t)n(hi)q(s)h
-(p)q(ermi)q(s)q(s)q(ion)f(not)o(ice)g(are)g(pre)q(s)q(erv)o(e)q(d)h(on)
-f(all)h(co)o(pie)q(s.)0 2151 y(P)o(ermi)q(s)q(s)q(ion)e(i)q(s)h(gran)o
-(t)o(e)q(d)f(t)o(o)g(co)o(p)o(y)h(an)o(d)f(di)q(str)q(ibu)o(t)o(e)i(mo)
-q(di\014e)q(d)g(v)o(ers)q(ions)f(of)g(t)n(hi)q(s)f(m)o(an)n(ual)i(u)o
-(n)o(d)o(er)g(t)n(h)o(e)e(con)o(dit)o(ions)0 2213 y(for)21
-b(v)o(erba)o(t)o(im)g(co)o(p)o(yin)o(g,)j(pro)o(vid)o(e)q(d)f(also)f(t)
-n(h)o(a)o(t)e(t)n(h)o(e)i(s)q(ect)o(ion)g(en)o(t)o(it)n(le)q(d)h(\\GNU)
-e(Gen)o(eral)h(Pu)n(b)o(lic)i(Licens)q(e")f(i)q(s)0 2275
-y(includ)o(e)q(d)16 b(exact)n(ly)d(as)f(in)h(t)n(h)o(e)g(or)q(igin)o
-(al,)g(an)o(d)f(pro)o(vid)o(e)q(d)i(t)n(h)o(a)o(t)e(t)n(h)o(e)g(en)o(t)
-o(ire)h(re)q(sul)o(t)o(in)o(g)h(d)o(er)q(iv)o(e)q(d)g(w)o(or)o(k)e(i)q
-(s)h(di)q(str)q(ibu)o(t)o(e)q(d)0 2337 y(u)o(n)o(d)o(er)j(t)n(h)o(e)g
-(t)o(erms)e(of)h(a)g(p)q(ermi)q(s)q(s)q(ion)g(not)o(ice)g(id)o(en)o(t)o
-(ical)i(t)o(o)e(t)n(hi)q(s)g(on)o(e.)0 2474 y(P)o(ermi)q(s)q(s)q(ion)20
-b(i)q(s)h(gran)o(t)o(e)q(d)e(t)o(o)h(co)o(p)o(y)g(an)o(d)h(di)q(str)q
-(ibu)o(t)o(e)g(transla)o(t)o(ions)f(of)g(t)n(hi)q(s)g(m)o(an)n(ual)h
-(in)o(t)o(o)g(anot)n(h)o(er)f(lan)o(guage,)0 2537 y(u)o(n)o(d)o(er)g(t)
-n(h)o(e)e(a)o(b)q(o)o(v)o(e)g(con)o(dit)o(ions)h(for)e(mo)q(di\014e)q
-(d)j(v)o(ers)q(ions,)f(except)g(t)n(h)o(a)o(t)e(t)n(h)o(e)i(s)q(ect)o
-(ion)f(en)o(t)o(it)n(le)q(d)i(\\GNU)e(Gen)o(eral)0 2599
-y(Pu)n(b)o(lic)i(Licens)q(e")e(an)o(d)g(t)n(hi)q(s)g(p)q(ermi)q(s)q(s)q
-(ion)f(not)o(ice)h(m)o(ay)f(b)q(e)g(includ)o(e)q(d)k(in)e(transla)o(t)o
-(ions)e(ap)o(pro)o(v)o(e)q(d)g(b)o(y)g(t)n(h)o(e)h(F)l(ree)0
-2661 y(Soft)o(w)o(are)c(F)l(ou)o(n)o(d)o(a)o(t)o(ion)h(inst)o(e)q(ad)g
-(of)g(in)h(t)n(h)o(e)f(or)q(igin)o(al)h(En)o(gli)q(sh.)p
-eop
-%%Page: 1 3
-1 2 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(1:)20 b(Inst)o(alla)o(t)o(ion)
-1475 b(1)0 183 y Fm(1)41 b(Inst)n(alla)n(t)n(ion)62 383
-y Fo(Thi)q(s)18 b(s)q(ect)o(ion)f(d)o(e)q(scr)q(ib)q(e)q(s)i(t)n(h)o(e)
-e(inst)o(alla)o(t)o(ion)h(of)e(p)q(cl-cvs,)j(t)n(h)o(e)e(GNU)g(Em)o
-(acs)g(CVS)h(f)q(ron)o(t-en)o(d.)25 b(Y)l(ou)17 b(sh)o(ould)0
-446 y(inst)o(all)e(not)f(only)g(t)n(h)o(e)g(eli)q(sp)i(\014le)q(s)f(t)n
-(h)o(ems)q(elv)o(e)q(s,)f(bu)o(t)h(also)f(t)n(h)o(e)g(on-lin)o(e)h(do)q
-(cu)o(m)o(en)o(t)o(a)o(t)o(ion)f(so)g(t)n(h)o(a)o(t)f(y)o(our)g(us)q
-(ers)h(will)0 508 y(kno)o(w)f(h)o(o)o(w)g(t)o(o)h(us)q(e)g(it.)19
-b(Y)l(ou)14 b(can)g(cre)q(a)o(t)o(e)f(t)o(yp)q(e)q(s)q(et)g(do)q(cu)o
-(m)o(en)o(t)o(a)o(t)o(ion)h(f)q(rom)e(t)n(h)o(e)i(\014le)h(`)p
-Fl(pcl-cvs.texinfo)p Fo(')c(as)i(w)o(ell)0 570 y(as)19
-b(an)g(on-lin)o(e)i(info)e(\014le.)33 b(Th)o(e)19 b(fo)o(llo)o(win)o(g)
-i(st)o(ep)q(s)d(are)h(also)g(d)o(e)q(scr)q(ib)q(e)q(d)i(in)f(t)n(h)o(e)
-f(\014le)h(`)p Fl(INSTALL)p Fo(')e(in)i(t)n(h)o(e)f(source)0
-632 y(direct)o(ory)l(.)0 880 y Fk(1.1)33 b(Inst)n(alla)n(t)n(ion)17
-b(of)d(t)m(h)n(e)i(p)r(cl-cvs)g(program)25 1020 y Fo(1.)29
-b(P)o(o)q(s)q(s)q(ib)o(ly)13 b(e)q(dit)g(t)n(h)o(e)g(\014le)h(`)p
-Fl(Makefile)p Fo(')c(t)o(o)j(re\015ect)g(t)n(h)o(e)f(s)q(it)o(ua)o(t)o
-(ion)g(a)o(t)g(y)o(our)h(s)q(it)o(e.)18 b(W)l(e)13 b(say)f
-Fl(")p Fo(p)q(o)q(s)q(s)q(ib)o(ly)p Fl(")h Fo(b)q(eca)n(us)q(e)90
-1082 y(t)n(h)o(e)k(v)o(ers)q(ion)f(of)g(p)q(cl-cvs)j(includ)o(e)q(d)g
-(wit)n(h)e(CVS)g(us)q(e)q(s)g(a)f(con\014gura)o(t)o(ion)h(m)o(ec)o(h)o
-(ani)q(sm)f(in)o(t)o(egra)o(t)o(e)q(d)g(wit)n(h)h(t)n(h)o(e)90
-1144 y(o)o(v)o(erall)e(m)o(ec)o(h)o(ani)q(sms)e(us)q(e)q(d)i(b)o(y)f(t)
-n(h)o(e)h(CVS)f(build)i(an)o(d)e(inst)o(all)i(pro)q(ce)q(d)o(ure)q(s.)k
-(Th)n(us)15 b(t)n(h)o(e)f(\014le)h Fl(Makefile)e Fo(will)90
-1207 y(b)q(e)j(gen)o(era)o(t)o(e)q(d)g(a)n(u)o(t)o(om)o(a)o(t)o(ically)
-h(f)q(rom)f(t)n(h)o(e)g(\014le)h Fl(Makefile.in)p Fo(,)e(an)o(d)h(it)h
-(sh)o(ould)g(not)f(b)q(e)g(n)o(ece)q(s)q(sary)g(t)o(o)g(e)q(dit)90
-1269 y(it)f(furt)n(h)o(er.)90 1346 y(If)i(y)o(ou)g(do)g(h)o(a)o(v)o(e)g
-(t)o(o)g(e)q(dit)h(t)n(h)o(e)f(`)p Fl(Makefile)p Fo(',)e(t)n(h)o(e)j
-(only)f(t)n(hin)o(gs)h(y)o(ou)f(h)o(a)o(v)o(e)g(t)o(o)g(c)o(h)o(an)o
-(ge)g(i)q(s)g(t)n(h)o(e)g(d)o(e\014nit)o(ion)i(of)90
-1409 y Fl(lispdir)11 b Fo(an)o(d)h Fl(infodir)p Fo(.)18
-b(Th)o(e)11 b(eli)q(sp)j(\014le)q(s)f(will)g(b)q(e)f(co)o(pie)q(d)h(t)o
-(o)f Fl(lispdir)p Fo(,)f(an)o(d)h(t)n(h)o(e)g(info)g(\014le\(s\))h(t)o
-(o)e Fl(infodir)p Fo(.)25 1486 y(2.)29 b(Con\014gure)15
-b(p)q(cl-cvs.el)90 1563 y(Th)o(ere)j(are)g(a)g(coup)o(le)i(of)e(pa)o(t)
-n(hn)o(am)o(e)q(s)g(t)n(h)o(a)o(t)g(y)o(ou)g(h)o(a)o(v)o(e)f(t)o(o)h(c)
-o(h)o(ec)o(k)h(t)o(o)f(m)o(ak)o(e)f(sure)i(t)n(h)o(a)o(t)e(t)n(h)o(ey)h
-(m)o(a)o(t)o(c)o(h)f(y)o(our)90 1626 y(syst)o(em.)i(Th)o(ey)c(ap)o(p)q
-(e)q(ar)f(e)q(arly)h(in)h(t)n(h)o(e)g(\014le)g(`)p Fl(pcl-cvs.el)p
-Fo('.)90 1703 y Fj(NOTE:)f Fo(If)i(y)o(our)g(syst)o(em)f(i)q(s)h(ru)o
-(nnin)o(g)h(em)o(acs)f(18.57)e(or)h(e)q(arlier)i(y)o(ou)e(MUST)g(u)o
-(ncomm)o(en)o(t)h(t)n(h)o(e)g(lin)o(e)h(t)n(h)o(a)o(t)90
-1765 y(says:)210 1832 y Fl(\(setq)23 b(delete-exited-processes)e(nil\))
-90 1910 y Fo(Set)n(t)o(in)o(g)13 b Fl(delete-exited-processes)d
-Fo(t)o(o)i Fl(nil)g Fo(w)o(or)o(ks)g(arou)o(n)o(d)g(a)g(bug)h(in)g(em)o
-(acs)g(t)n(h)o(a)o(t)e(ca)n(us)q(e)q(s)i(it)g(t)o(o)f(d)o(u)o(mp)90
-1972 y(core.)20 b(Th)o(e)15 b(bug)g(w)o(as)g(\014xe)q(d)h(in)g(em)o
-(acs)f(18.58.)25 2049 y(3.)29 b(Rele)q(as)q(e)16 b(1.05)e(an)o(d)i(la)o
-(t)o(er)f(of)g(p)q(cl-cvs)h(require)q(s)h(part)o(s)e(of)g(t)n(h)o(e)g
-(Elib)i(library)l(,)f(v)o(ers)q(ion)g(1.0)e(or)h(la)o(t)o(er.)20
-b(Elib)d(i)q(s)90 2111 y(a)o(v)m(aila)o(b)o(le)g(via)e(anon)o(ymous)f
-(ft)o(p)g(f)q(rom)g(prep.ai.mit.e)q(d)o(u)h(in)h(`)p
-Fl(pub/gnu/elib-1.0.tar)o(.gz)p Fo(',)11 b(an)o(d)k(f)q(rom)e(a)90
-2174 y(lot)i(of)g(ot)n(h)o(er)g(s)q(it)o(e)q(s)g(t)n(h)o(a)o(t)f
-(mirror)h(prep.)20 b(Get)15 b(Elib,)h(an)o(d)f(inst)o(all)i(it,)e(b)q
-(efore)g(pro)q(cee)q(din)o(g.)90 2251 y Fj(NOTE:)f Fo(Th)o(e)i(v)o(ers)
-q(ion)f(of)h(p)q(cl-cvs)h(includ)o(e)q(d)h(wit)n(h)e(CVS)g(includ)o(e)q
-(s)i(a)e(co)o(p)o(y)f(of)g(Elib)i(in)f(t)n(h)o(e)g(su)n(b-direct)o(ory)
-90 2313 y(`)p Fl(elib)p Fo(')e(u)o(n)o(d)o(er)i(t)n(h)o(e)f(`)p
-Fl(contrib/pcl-cvs)p Fo(')e(direct)o(ory)l(.)25 2391
-y(4.)29 b(T)o(yp)q(e)13 b(`)p Fl(make)h(install)p Fo(')e(in)i(t)n(h)o
-(e)f(source)h(direct)o(ory)l(.)20 b(Thi)q(s)13 b(will)i(b)o(yt)o
-(e-compile)g(all)f(`)p Fl(.el)p Fo(')e(\014le)q(s)j(an)o(d)e(co)o(p)o
-(y)g(t)n(h)o(e)90 2453 y(`)p Fl(*.elc)p Fo(')h(\014le)q(s)i(in)o(t)o(o)
-g(t)n(h)o(e)f(direct)o(ory)g(y)o(ou)g(sp)q(eci\014e)q(d)i(in)f(st)o(ep)
-f(1.)90 2530 y(If)g(y)o(ou)g(w)o(an)o(t)f(t)o(o)h(inst)o(all)i(t)n(h)o
-(e)e(`)p Fl(*.el)p Fo(')f(\014le)q(s)i(t)o(o)q(o,)f(y)o(ou)g(can)g(t)o
-(yp)q(e)f(`)p Fl(make)h(install-el)p Fo(')e(t)o(o)i(do)g(so.)90
-2608 y(If)f(y)o(ou)f(only)h(w)o(an)o(t)e(t)o(o)h(cre)q(a)o(t)o(e)f(t)n
-(h)o(e)i(compile)q(d)h(eli)q(sp)g(\014le)q(s,)g(bu)o(t)f(don't)e(w)o
-(an)o(t)h(t)o(o)g(inst)o(all)i(t)n(h)o(em,)e(y)o(ou)g(can)h(t)o(yp)q(e)
-90 2670 y(`)p Fl(make)p Fo(')g(wit)n(h)o(ou)o(t)h(param)o(et)o(ers.)p
-eop
-%%Page: 2 4
-2 3 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(1:)20 b(Inst)o(alla)o(t)o(ion)
-1475 b(2)25 183 y(5.)29 b(Edit)11 b(t)n(h)o(e)f(\014le)h(`)p
-Fl(default.el)p Fo(')d(in)j(y)o(our)e(em)o(acs)h(li)q(sp)i(direct)o
-(ory)e(\(usually)h(`)p Fl(/usr/gnu/lib/emacs/site-lis)o(p)p
-Fo(')p 2005 195 21 46 v 90 246 a(or)k(som)o(et)n(hin)o(g)i(s)q
-(imilar\))f(an)o(d)g(en)o(t)o(er)g(t)n(h)o(e)g(con)o(t)o(en)o(t)o(s)f
-(of)g(t)n(h)o(e)h(\014le)h(`)p Fl(pcl-cvs-startup.el)p
-Fo(')c(in)o(t)o(o)j(it.)23 b(It)16 b(con-)90 308 y(t)o(ains)f(a)g(coup)
-o(le)i(of)e Fl(auto-load)p Fo(s)f(t)n(h)o(a)o(t)g(f)q(acilit)o(a)o(t)o
-(e)q(s)h(t)n(h)o(e)g(us)q(e)g(of)g(p)q(cl-cvs.)0 532
-y Fk(1.2)33 b(Inst)n(alla)n(t)n(ion)17 b(of)d(t)m(h)n(e)i(on-lin)n(e)h
-(m)n(an)m(ual.)25 669 y Fo(1.)29 b(Cre)q(a)o(t)o(e)e(t)n(h)o(e)h(info)h
-(\014le\(s\))g(`)p Fl(pcl-cvs.info*)p Fo(')d(f)q(rom)h(`)p
-Fl(pcl-cvs.texinfo)p Fo(')f(b)o(y)i(t)o(ypin)o(g)h(`)p
-Fl(make)14 b(info)p Fo('.)90 731 y(If)27 b(y)o(ou)g(don't)g(h)o(a)o(v)o
-(e)f(t)n(h)o(e)h(program)f(`)p Fl(makeinfo)p Fo(')g(y)o(ou)h(can)g(get)
-g(it)g(b)o(y)g(anon)o(ymous)g(ft)o(p)g(f)q(rom)f(e.g.)90
-793 y(`)p Fl(prep.ai.mit.edu)p Fo(')13 b(as)i(`)p Fl
-(pub/gnu/texinfo-3.7.t)o(ar.gz)p Fo(')d(\(t)n(h)o(ere)j(migh)o(t)g(b)q
-(e)h(a)f(n)o(ew)o(er)g(v)o(ers)q(ion)h(t)n(h)o(ere)90
-856 y(wh)o(en)f(y)o(ou)g(re)q(ad)g(t)n(hi)q(s\).)25 930
-y(2.)29 b(Inst)o(all)14 b(t)n(h)o(e)g(info)g(\014le\(s\))f(`)p
-Fl(pcl-cvs.info*)p Fo(')e(in)o(t)o(o)j(y)o(our)f(st)o(an)o(d)o(ard)f(`)
-p Fl(info)p Fo(')h(direct)o(ory)l(.)20 b(Y)l(ou)13 b(sh)o(ould)i(b)q(e)
-e(a)o(b)o(le)90 993 y(t)o(o)i(do)g(t)n(hi)q(s)g(b)o(y)h(t)o(ypin)o(g)f
-(`)p Fl(make)g(install-info)p Fo('.)25 1067 y(3.)29 b(Edit)19
-b(t)n(h)o(e)g(\014le)g(`)p Fl(dir)p Fo(')f(in)h(t)n(h)o(e)g(`)p
-Fl(info)p Fo(')e(direct)o(ory)i(an)o(d)g(en)o(t)o(er)f(on)o(e)h(lin)o
-(e)h(t)o(o)e(con)o(t)o(ain)g(a)h(p)q(oin)o(t)o(er)g(t)o(o)f(t)n(h)o(e)h
-(info)90 1130 y(\014le\(s\))d(`)p Fl(pcl-cvs.info*)p
-Fo('.)h(Th)o(e)e(lin)o(e)i(can,)e(for)f(inst)o(ance,)i(lo)q(ok)f(lik)o
-(e)h(t)n(hi)q(s:)210 1194 y Fl(*)24 b(Pcl-cvs:)e(\(pcl-cvs\).)262
-b(An)23 b(Emacs)g(front-end)g(to)h(CVS.)0 1418 y Fk(1.3)33
-b(Ho)n(w)14 b(t)o(o)h(m)n(ak)n(e)g(t)n(yp)q(e)r(s)q(et)h(do)r(cu)o(m)n
-(en)n(t)n(a)n(t)n(ion)g(f)q(rom)f(p)r(cl-cvs.t)n(exinfo)62
-1555 y Fo(If)f(y)o(ou)f(h)o(a)o(v)o(e)f(T)316 1565 y(E)342
-1555 y(X)h(inst)o(alle)q(d)i(a)o(t)d(y)o(our)h(s)q(it)o(e,)g(y)o(ou)g
-(can)g(m)o(ak)o(e)g(a)g(t)o(yp)q(e)q(s)q(et)f(m)o(an)n(ual)i(f)q(rom)e
-(`)p Fl(pcl-cvs.texinfo)p Fo('.)25 1692 y(1.)29 b(R)m(u)o(n)21
-b(T)215 1702 y(E)240 1692 y(X)e(b)o(y)g(t)o(ypin)o(g)h(\\)p
-Fl(make)14 b(pcl-cvs.dvi)p Fo(''.)29 b(Y)l(ou)20 b(will)g(not)f(get)g
-(t)n(h)o(e)g(in)o(dice)q(s)i(u)o(nle)q(s)q(s)f(y)o(ou)f(h)o(a)o(v)o(e)f
-(t)n(h)o(e)90 1754 y Fl(texindex)c Fo(program.)25 1829
-y(2.)29 b(Con)o(v)o(ert)15 b(t)n(h)o(e)h(re)q(sul)o(t)o(in)o(g)h(d)o
-(evice)h(in)o(d)o(ep)q(en)o(d)o(en)o(t)f(\014le)g(`)p
-Fl(pcl-cvs.dvi)p Fo(')c(t)o(o)j(a)f(form)g(whic)o(h)i(y)o(our)e(pr)q
-(in)o(t)o(er)h(can)90 1891 y(ou)o(t)o(pu)o(t)h(an)o(d)f(pr)q(in)o(t)g
-(it.)24 b(If)17 b(y)o(ou)f(h)o(a)o(v)o(e)f(a)h(p)q(o)q(st)o(scr)q(ipt)h
-(pr)q(in)o(t)o(er)f(t)n(h)o(ere)g(i)q(s)h(a)f(program,)f
-Fl(dvi2ps)p Fo(,)g(whic)o(h)i(do)q(e)q(s.)90 1954 y(Th)o(ere)e(i)q(s)h
-(also)f(a)g(program)f(whic)o(h)i(com)o(e)q(s)f(t)o(oget)n(h)o(er)g(wit)
-n(h)g(T)1144 1963 y(E)1170 1954 y(X,)g Fl(dvips)p Fo(,)f(whic)o(h)h(y)o
-(ou)g(can)h(us)q(e.)p eop
-%%Page: 3 5
-3 4 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(2:)20 b(A)m(b)q(ou)o(t)c(p)q
-(cl-cvs)1424 b(3)0 183 y Fm(2)41 b(A)l(b)r(ou)o(t)15
-b(p)r(cl-cvs)62 390 y Fo(Pcl-cvs)i(i)q(s)f(a)f(f)q(ron)o(t-en)o(d)g(t)o
-(o)g(CVS)h(v)o(ers)q(ions)f(1.5)g(t)n(hrough)g(1.7)g(an)o(d)g(n)o(ew)o
-(er;)g(an)o(d)h(p)q(o)q(s)q(s)q(ib)o(ly)g(v)o(er)q(i)q(son)f(1.3)g(an)o
-(d)0 452 y(1.4A2.)k(It)c(in)o(t)o(egra)o(t)o(e)q(s)f(t)n(h)o(e)h(mo)q
-(st)f(f)q(requen)o(t)n(ly)i(us)q(e)q(d)g(CVS)f(comm)o(an)o(ds)g(in)o(t)
-o(o)g(an)g(em)o(acs)g(in)o(t)o(erf)q(ace.)0 713 y Fk(2.1)33
-b(Con)n(tr)q(ibu)o(t)o(ors)16 b(t)o(o)f(p)r(cl-cvs)62
-854 y Fo(Con)o(tr)q(ibu)o(t)o(ions)j(t)o(o)g(t)n(h)o(e)g(pac)o(kage)f
-(are)h(w)o(elcom)o(e.)29 b(I)18 b(h)o(a)o(v)o(e)f(limit)o(e)q(d)j(t)o
-(im)o(e)e(t)o(o)g(w)o(or)o(k)f(on)h(t)n(hi)q(s)g(pro)s(ject,)g(bu)o(t)h
-(I)0 916 y(will)c(gladly)g(add)f(an)o(y)g(co)q(d)o(e)g(t)n(h)o(a)o(t)f
-(y)o(ou)h(con)o(tr)q(ibu)o(t)o(e)f(t)o(o)h(m)o(e)g(t)o(o)f(t)n(hi)q(s)h
-(pac)o(kage)f(\(s)q(ee)h(Ch)o(apt)o(er)f(8)h([Bugs],)f(page)g(22\).)62
-1057 y(Th)o(e)i(fo)o(llo)o(win)o(g)i(p)q(ersons)e(h)o(a)o(v)o(e)g(m)o
-(ad)o(e)g(con)o(tr)q(ibu)o(t)o(ions)h(t)o(o)f(p)q(cl-cvs.)37
-1198 y Fn(\017)30 b Fo(Br)q(ian)17 b(Berlin)o(er)h(wrot)o(e)d(CVS,)h(t)
-o(oget)n(h)o(er)h(wit)n(h)f(som)o(e)g(ot)n(h)o(er)g(con)o(tr)q(ibu)o(t)
-o(ors.)24 b(Wit)n(h)o(ou)o(t)17 b(hi)q(s)g(w)o(or)o(k)e(on)i(CVS)90
-1260 y(t)n(hi)q(s)e(pac)o(kage)g(w)o(ould)g(b)q(e)h(us)q(ele)q(s)q(s)p
-Fi(:)8 b(:)g(:)37 1339 y Fn(\017)30 b Fo(P)o(er)20 b(Ce)q(d)o(erqvi)q
-(st)h(wrot)o(e)e(mo)q(st)g(of)h(t)n(h)o(e)g(ot)n(h)o(erwi)q(s)q(e)g(u)o
-(n)o(a)o(t)n(tr)q(ibu)o(t)o(e)q(d)h(fu)o(nct)o(ions)g(in)g(p)q(cl-cvs)g
-(as)f(w)o(ell)h(as)f(all)90 1401 y(do)q(cu)o(m)o(en)o(t)o(a)o(t)o(ion.)
-37 1480 y Fn(\017)30 b Fo(In)o(ge)14 b(W)l(allin)h(\(`)p
-Fl(inge@lysator.liu.se)o Fo('\))10 b(wrot)o(e)i(t)n(h)o(e)h(sk)o(elet)o
-(on)g(t)o(o)g(`)p Fl(pcl-cvs.texinfo)p Fo(',)d(an)o(d)j(ga)o(v)o(e)g
-(us)q(e-)90 1542 y(ful)19 b(comm)o(en)o(t)o(s)e(on)h(it.)28
-b(He)18 b(also)g(wrot)o(e)f(t)n(h)o(e)g(\014le)q(s)j(`)p
-Fl(elib-node.el)p Fo(')15 b(an)o(d)j(`)p Fl(compile-all.el)p
-Fo('.)25 b(Th)o(e)18 b(\014le)90 1604 y(`)p Fl(cookie.el)p
-Fo(')13 b(w)o(as)i(inspire)q(d)i(b)o(y)e(In)o(ge.)37
-1683 y Fn(\017)30 b Fo(Lin)n(us)15 b(T)l(o)o(lk)o(e)f(\(`)p
-Fl(linus@lysator.liu.se)p Fo(')o(\))c(con)o(tr)q(ibu)o(t)o(e)q(d)k(us)q
-(eful)h(comm)o(en)o(t)o(s)d(on)i(b)q(ot)n(h)f(t)n(h)o(e)h(fu)o(nct)o
-(ion)o(alit)o(y)90 1745 y(an)o(d)h(t)n(h)o(e)g(do)q(cu)o(m)o(en)o(t)o
-(a)o(t)o(ion.)37 1824 y Fn(\017)30 b Fo(Jamie)16 b(Zawinski)g(\(`)p
-Fl(jwz@lucid.com)p Fo('\))c(con)o(tr)q(ibu)o(t)o(e)q(d)k(`)p
-Fl(pcl-cvs-lucid.el)p Fo('.)37 1903 y Fn(\017)30 b Fo(Le)q(if)13
-b(Lonn)n(b)o(lad)g(con)o(tr)q(ibu)o(t)o(e)q(d)f(R)o(CVS)g(sup)o(p)q
-(ort.)19 b(\(Since)12 b(sup)q(erce)q(d)o(e)q(d)i(b)o(y)d(t)n(h)o(e)h(n)
-o(ew)f(remot)o(e)g(CVS)h(sup)o(p)q(ort.\))37 1981 y Fn(\017)30
-b Fo(Jim)20 b(Blan)o(dy)g(\(`)p Fl(jimb@cyclic.com)p
-Fo('\))c(con)o(tr)q(ibu)o(t)o(e)q(d)k(h)o(o)q(oks)f(t)o(o)g(a)n(u)o(t)o
-(om)o(a)o(t)o(ically)h(gue)q(s)q(s)f(CVS)g(log)h(en)o(tr)q(ie)q(s)90
-2044 y(f)q(rom)13 b(Ch)o(an)o(geLog)h(con)o(t)o(en)o(t)o(s;)f(an)o(d)h
-(init)o(ial)i(sup)o(p)q(ort)e(of)g(t)n(h)o(e)f(n)o(ew)h(Cygn)n(us)h(/)e
-(Cyclic)i(remot)o(e)f(CVS;)f(as)h(w)o(ell)90 2106 y(as)h(v)m(ar)q(ious)
-g(su)o(n)o(dry)h(bug)f(\014xe)q(s)h(an)o(d)f(cle)q(an)n(up)q(s.)37
-2185 y Fn(\017)30 b Fo(Jim)16 b(Kin)o(gdon)i(\(`)p Fl
-(kingdon@cyclic.com)p Fo(')o(\))12 b(con)o(tr)q(ibu)o(t)o(e)q(d)17
-b(lot)o(s)f(of)f(\014xe)q(s)h(t)o(o)g(t)n(h)o(e)f(build)j(an)o(d)d
-(inst)o(all)i(pro)q(ce-)90 2247 y(d)o(ure.)37 2326 y
-Fn(\017)30 b Fo(Greg)17 b(A.)h(W)l(o)q(o)q(ds)g(\(`)p
-Fl(woods@planix.com)p Fo(')o(\))d(con)o(tr)q(ibu)o(t)o(e)q(d)j(co)q(d)o
-(e)h(t)o(o)f(imp)o(lem)o(en)o(t)h(t)n(h)o(e)f(us)q(e)g(of)f(p)q
-(er-\014le)j(di\013)90 2388 y(bu\013ers;)14 b(an)o(d)h(v)o(en)o(dor)f
-(join)g(di\013s)h(wit)n(h)g(em)o(erge)f(an)o(d)g(e)q(di\013;)h(as)f(w)o
-(ell)h(as)f(v)m(ar)q(ious)h(an)f(su)o(n)o(dry)h(bug)f(\014xe)q(s)h(an)o
-(d)90 2450 y(cle)q(an)n(up)q(s.)62 2608 y(A)m(part)k(f)q(rom)f(t)n(h)o
-(e)q(s)q(e,)i(a)f(lot)g(of)g(p)q(eo)o(p)o(le)h(h)o(a)o(v)o(e)e(s)q(en)o
-(d)i(m)o(e)e(sugge)q(st)o(ions,)i(id)o(e)q(as,)g(reque)q(st)o(s,)h(bug)
-e(rep)q(ort)o(s)g(an)o(d)0 2670 y(encouragem)o(en)o(t.)g(Th)o(anks)c(a)
-g(lot!)20 b(Wit)n(h)o(ou)o(t)15 b(y)o(our)g(t)n(h)o(ere)g(w)o(ould)h(b)
-q(e)f(no)g(n)o(ew)g(rele)q(as)q(e)q(s)h(of)f(p)q(cl-cvs.)p
-eop
-%%Page: 4 6
-4 5 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(2:)20 b(A)m(b)q(ou)o(t)c(p)q
-(cl-cvs)1424 b(4)0 183 y Fk(2.2)33 b(Wh)n(ere)16 b(can)f(I)g(get)g(p)r
-(cl-cvs?)62 320 y Fo(Th)o(e)g(curren)o(t)g(rele)q(as)q(e)h(of)e(p)q
-(cl-cvs)j(i)q(s)e(includ)o(e)q(d)k(in)d(CVS-1.7.)62 457
-y(Th)o(e)j(a)n(u)o(t)n(h)o(or's)f(rele)q(as)q(e)g(of)g(p)q(cl-cvs)i
-(can)f(b)q(e)f(fet)o(c)o(h)o(e)q(d)h(via)f(anon)o(ymous)g(ft)o(p)g(f)q
-(rom)g Fl(ftp.lysator.liu.se)p Fo(,)0 519 y(\(IP)h(no.)32
-b(130.236.254.)o(1\))16 b(in)k(t)n(h)o(e)f(direct)o(ory)h
-Fl(pub/emacs)p Fo(.)31 b(If)19 b(y)o(ou)g(don't)g(liv)o(e)h(in)g(Scan)o
-(din)o(a)o(via)g(y)o(ou)f(sh)o(ould)0 582 y(proba)o(b)o(ly)d(c)o(h)o
-(ec)o(k)f(wit)n(h)h(arc)o(hie)g(t)o(o)e(s)q(ee)i(if)g(t)n(h)o(ere)f(i)q
-(s)g(a)g(s)q(it)o(e)g(clo)q(s)q(er)g(t)o(o)g(y)o(ou)g(t)n(h)o(a)o(t)f
-(arc)o(hiv)o(e)q(s)i(p)q(cl-cvs.)62 719 y(New)h(rele)q(as)q(e)q(s)g
-(will)h(b)q(e)f(annou)o(nce)q(d)i(t)o(o)d(ap)o(pro)o(pr)q(ia)o(t)o(e)g
-(n)o(ewsgroup)q(s.)23 b(If)17 b(y)o(ou)g(s)q(en)o(d)g(y)o(our)f(em)o
-(ail)i(addre)q(s)q(s)e(t)o(o)0 781 y(m)o(e)f(I)h(will)g(add)g(y)o(ou)f
-(t)o(o)g(m)o(y)f(li)q(st)i(of)f(p)q(eo)o(p)o(le)h(t)o(o)f(m)o(ail)h(wh)
-o(en)f(I)h(m)o(ak)o(e)f(a)f(n)o(ew)i(rele)q(as)q(e.)p
-eop
-%%Page: 5 7
-5 6 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(3:)20 b(Get)n(t)o(in)o(g)15
-b(st)o(art)o(e)q(d)1395 b(5)0 183 y Fm(3)41 b(Get)m(t)n(in)o(g)15
-b(st)n(art)n(e)r(d)62 410 y Fo(Thi)q(s)d(do)q(cu)o(m)o(en)o(t)g(as)q
-(su)o(m)o(e)q(s)f(t)n(h)o(a)o(t)g(y)o(ou)g(kno)o(w)g(wh)o(a)o(t)f(CVS)i
-(i)q(s,)g(an)o(d)g(t)n(h)o(a)o(t)e(y)o(ou)h(a)o(t)g(le)q(ast)g(kno)o
-(ws)g(t)n(h)o(e)h(fu)o(n)o(d)o(am)o(en)o(t)o(al)0 472
-y(concept)o(s)k(of)f(CVS.)g(If)g(t)n(h)o(a)o(t)f(i)q(s)i(not)f(t)n(h)o
-(e)g(cas)q(e)g(y)o(ou)g(sh)o(ould)h(re)q(ad)e(t)n(h)o(e)i(m)o(an)e
-(page)i(for)e(CVS.)62 617 y(Pcl-cvs)19 b(i)q(s)f(only)g(us)q(eful)h
-(once)f(y)o(ou)f(h)o(a)o(v)o(e)g(c)o(h)o(ec)o(k)o(e)q(d)h(ou)o(t)g(a)f
-(mo)q(d)o(ule.)28 b(So)18 b(b)q(efore)f(y)o(ou)g(in)o(v)o(ok)o(e)h(it)g
-(y)o(ou)f(m)n(ust)0 679 y(h)o(a)o(v)o(e)e(a)f(co)o(p)o(y)h(of)g(a)g(mo)
-q(d)o(ule)h(som)o(ewh)o(ere)f(in)h(t)n(h)o(e)f(\014le)h(syst)o(em.)62
-824 y(Y)l(ou)i(in)o(v)o(ok)o(e)f(p)q(cl-cvs)i(b)o(y)e(t)o(ypin)o(g)g
-Fl(M-x)e(cvs-update)f(RET)p Fo(.)25 b(If)18 b(y)o(our)e(em)o(acs)h(re)q
-(sp)q(on)o(ds)h(wit)n(h)g(`)p Fl([No)c(match])p Fo(')0
-887 y(y)o(our)g(syst)o(em)g(admini)q(stra)o(t)o(or)g(h)o(as)h(not)f
-(inst)o(alle)q(d)i(p)q(cl-cvs)h(pro)o(p)q(erly)l(.)j(T)l(ry)14
-b Fl(M-x)h(load-library)e(RET)i(pcl-cvs)0 949 y(RET)p
-Fo(.)k(If)c(t)n(h)o(a)o(t)e(also)h(f)q(ails)h(-)f(t)o(alk)g(t)o(o)g(y)o
-(our)g(ro)q(ot.)19 b(If)14 b(it)h(su)o(ccee)q(ds)g(y)o(ou)f(migh)o(t)g
-(pu)o(t)h(t)n(hi)q(s)g(lin)o(e)g(in)g(y)o(our)f(`)p Fl(.emacs)p
-Fo(')f(\014le)0 1011 y(so)i(t)n(h)o(a)o(t)f(y)o(ou)h(don't)g(h)o(a)o(v)
-o(e)f(t)o(o)h(t)o(yp)q(e)g(t)n(h)o(e)g(`)p Fl(load-library)p
-Fo(')e(comm)o(an)o(d)h(ev)o(ery)i(t)o(im)o(e)f(y)o(ou)f(wi)q(sh)i(t)o
-(o)f(us)q(e)g(p)q(cl-cvs:)120 1146 y Fl(\(autoload)23
-b('cvs-update)f("pcl-cvs")h(nil)g(t\))62 1291 y Fo(Th)o(e)c(fu)o(nct)o
-(ion)g Fl(cvs-update)e Fo(will)j(ask)e(for)g(a)g(direct)o(ory)l(.)30
-b(Th)o(e)18 b(comm)o(an)o(d)g(`)p Fl(cvs)d(update)p Fo(')i(will)j(b)q
-(e)e(ru)o(n)h(in)0 1353 y(t)n(h)o(a)o(t)12 b(direct)o(ory)l(.)20
-b(\(It)13 b(sh)o(ould)h(con)o(t)o(ain)f(\014le)q(s)h(t)n(h)o(a)o(t)e(h)
-o(a)o(v)o(e)g(b)q(een)i(c)o(h)o(ec)o(k)o(e)q(d)f(ou)o(t)g(f)q(rom)f(a)h
-(CVS)g(arc)o(hiv)o(e.\))19 b(Th)o(e)13 b(ou)o(t)o(pu)o(t)0
-1415 y(f)q(rom)f Fl(cvs)h Fo(will)h(b)q(e)f(pars)q(e)q(d)h(an)o(d)f
-(pre)q(s)q(en)o(t)o(e)q(d)g(in)h(a)f(t)o(a)o(b)o(le)g(in)h(a)f
-(bu\013er)g(calle)q(d)i(`)p Fl(*cvs*)p Fo('.)i(It)c(migh)o(t)g(lo)q(ok)
-h(som)o(et)n(hin)o(g)0 1478 y(lik)o(e)i(t)n(hi)q(s:)120
-1612 y Fl(PCL-CVS)23 b(release)g(1.05-CVS-$Name:  $.)120
-1716 y(In)24 b(directory)e(/users/ceder/FOO/test:)168
-1768 y(Updated)118 b(bar)168 1820 y(Updated)g(file.txt)168
-1872 y(Modified)22 b(ci)i(namechange)168 1923 y(Updated)118
-b(newer)120 2027 y(In)24 b(directory)e(/users/ceder/FOO/test/sub:)168
-2079 y(Modified)g(ci)i(ChangeLog)120 2131 y(----------)e(End)i(-----)62
-2276 y Fo(In)19 b(t)n(hi)q(s)e(examp)o(le)j(t)n(h)o(e)d(t)o(w)o(o)g
-(\014le)q(s)h(\(`)p Fl(bar)p Fo(',)f(`)p Fl(file.txt)p
-Fo(',)f(an)o(d)i(`)p Fl(newer)p Fo('\))e(t)n(h)o(a)o(t)g(are)i(m)o(ar)o
-(k)o(e)q(d)g(wit)n(h)g(`)p Fl(Updated)p Fo(')0 2338 y(h)o(a)o(v)o(e)d
-(b)q(een)h(co)o(pie)q(d)h(f)q(rom)d(t)n(h)o(e)i(CVS)g(rep)q(o)q(s)q(it)
-o(ory)f(t)o(o)g(`)p Fl(/users/ceder/FOO/test/)p Fo(')d(s)q(ince)k(som)o
-(eon)o(e)f(els)q(e)i(h)o(a)o(v)o(e)0 2401 y(c)o(h)o(ec)o(k)o(e)q(d)23
-b(in)g(n)o(ew)o(er)g(v)o(ers)q(ions)g(of)f(t)n(h)o(em.)42
-b(Tw)o(o)21 b(\014le)q(s)j(\(`)p Fl(namechange)p Fo(')c(an)o(d)j(`)p
-Fl(sub/ChangeLog)p Fo('\))d(h)o(a)o(v)o(e)h(b)q(een)0
-2463 y(mo)q(di\014e)q(d)c(lo)q(cally)l(,)g(an)o(d)e(n)o(ee)q(ds)h(t)o
-(o)f(b)q(e)g(c)o(h)o(ec)o(k)o(e)q(d)h(in.)62 2608 y(Y)l(ou)g(can)h(mo)o
-(v)o(e)e(t)n(h)o(e)h(cursor)f(up)i(an)o(d)f(do)o(wn)f(in)i(t)n(h)o(e)f
-(bu\013er)g(wit)n(h)g Fl(C-n)g Fo(an)o(d)g Fl(C-p)f Fo(or)h
-Fl(n)f Fo(an)o(d)h Fl(p)p Fo(.)22 b(If)17 b(y)o(ou)e(pre)q(s)q(s)0
-2670 y Fl(c)h Fo(on)g(on)o(e)g(of)f(t)n(h)o(e)h(`)p Fl(Modified)p
-Fo(')e(\014le)q(s)k(t)n(h)o(a)o(t)d(\014le)i(will)g(b)q(e)f(c)o(h)o(ec)
-o(k)o(e)q(d)h(in)g(t)o(o)f(t)n(h)o(e)f(CVS)i(rep)q(o)q(s)q(it)o(ory)l
-(.)22 b(See)16 b(Sect)o(ion)h(5.4)p eop
-%%Page: 6 8
-6 7 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(3:)20 b(Get)n(t)o(in)o(g)15
-b(st)o(art)o(e)q(d)1395 b(6)0 183 y([Commit)n(t)o(in)o(g)18
-b(c)o(h)o(an)o(ge)q(s],)g(page)g(11.)28 b(Y)l(ou)19 b(can)f(pre)q(s)q
-(s)g Fl(x)g Fo(t)o(o)g(get)f(r)q(id)i(of)f(t)n(h)o(e)g
-Fl(")p Fo(u)o(nin)o(t)o(ere)q(st)o(in)o(g)p Fl(")h Fo(\014le)q(s)h(t)n
-(h)o(a)o(t)d(h)o(a)o(v)o(e)0 246 y(only)f(b)q(een)f(`)p
-Fl(Updated)p Fo(')f(\(an)o(d)h(don't)f(require)i(an)o(y)f(furt)n(h)o
-(er)g(act)o(ion)g(f)q(rom)g(y)o(ou\).)62 382 y(Y)l(ou)f(can)f(also)g(e)
-q(as)q(ily)h(get)f(a)g(`)p Fl(diff)p Fo(')f(b)q(et)o(w)o(een)h(y)o(our)
-f(mo)q(di\014e)q(d)j(\014le)g(an)o(d)e(t)n(h)o(e)g(bas)q(e)g(v)o(ers)q
-(ion)h(t)n(h)o(a)o(t)e(y)o(ou)h(st)o(art)o(e)q(d)0 445
-y(f)q(rom,)19 b(an)o(d)g(y)o(ou)g(can)g(get)g(t)n(h)o(e)g(ou)o(t)o(pu)o
-(t)h(f)q(rom)e(`)p Fl(cvs)c(log)p Fo(')k(an)o(d)h(`)p
-Fl(cvs)c(status)p Fo(')j(on)h(t)n(h)o(e)g(li)q(st)o(e)q(d)h(\014le)q(s)
-g(s)q(imp)o(ly)h(b)o(y)0 507 y(pre)q(s)q(s)q(in)o(g)16
-b(a)f(k)o(ey)g(\(s)q(ee)g(Sect)o(ion)g(5.6)g([Get)n(t)o(in)o(g)g(info)g
-(a)o(b)q(ou)o(t)h(\014le)q(s],)f(page)g(12\).)p eop
-%%Page: 7 9
-7 8 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(4:)20 b(Bu\013er)15
-b(con)o(t)o(en)o(t)o(s)1397 b(7)0 183 y Fm(4)41 b(Bu\013er)15
-b(con)n(t)n(en)n(t)o(s)62 379 y Fo(Th)o(e)g(di)q(sp)o(lay)i(con)o(t)o
-(ains)e(four)g(co)o(lu)o(mns.)21 b(Th)o(ey)16 b(con)o(t)o(ain,)e(f)q
-(rom)g(left)i(t)o(o)f(r)q(igh)o(t:)37 518 y Fn(\017)30
-b Fo(An)15 b(ast)o(er)q(i)q(sk)g(wh)o(en)g(t)n(h)o(e)g(\014le)i(i)q(s)e
-Fh(m)o(ar)o(k)o(e)q(d)i Fo(\(s)q(ee)e(Sect)o(ion)h(4.2)e([Select)o(e)q
-(d)j(\014le)q(s],)e(page)g(8\).)37 595 y Fn(\017)30 b
-Fo(Th)o(e)15 b(st)o(a)o(t)o(us)f(of)h(t)n(h)o(e)g(\014le.)21
-b(See)16 b(See)f(Sect)o(ion)h(4.1)e([File)i(st)o(a)o(t)o(us],)d(page)i
-(7,)g(for)g(more)f(inform)o(a)o(t)o(ion.)37 672 y Fn(\017)30
-b Fo(A)15 b Fl(")p Fo(n)o(ee)q(d)h(t)o(o)f(b)q(e)g(c)o(h)o(ec)o(k)o(e)q
-(d)h(in)p Fl(")p Fo(-m)o(ar)o(k)o(er)g(\(`)p Fl(ci)p
-Fo('\).)37 748 y Fn(\017)30 b Fo(Th)o(e)15 b(\014le)h(n)o(am)o(e.)0
-989 y Fk(4.1)33 b(File)16 b(st)n(a)n(t)n(us)62 1128 y
-Fo(Th)o(e)f(`)p Fl(file)g(status)p Fo(')f(\014eld)i(can)f(h)o(a)o(v)o
-(e)g(t)n(h)o(e)g(fo)o(llo)o(win)o(g)i(v)m(alue)q(s:)0
-1281 y(`)p Fl(Updated)p Fo(')46 b(Th)o(e)18 b(\014le)h(w)o(as)e(brough)
-o(t)h(up)h(t)o(o)e(d)o(a)o(t)o(e)h(wit)n(h)h(re)q(sp)q(ect)f(t)o(o)g(t)
-n(h)o(e)g(rep)q(o)q(s)q(it)o(ory)l(.)28 b(Thi)q(s)18
-b(i)q(s)h(don)o(e)f(for)f(an)o(y)240 1344 y(\014le)h(t)n(h)o(a)o(t)e
-(exi)q(st)o(s)h(in)h(t)n(h)o(e)f(rep)q(o)q(s)q(it)o(ory)f(bu)o(t)i(not)
-e(in)i(y)o(our)e(source,)h(an)o(d)g(for)f(\014le)q(s)j(t)n(h)o(a)o(t)c
-(y)o(ou)i(h)o(a)o(v)o(en't)240 1406 y(c)o(h)o(an)o(ge)q(d)f(bu)o(t)g
-(are)e(not)h(t)n(h)o(e)g(mo)q(st)f(recen)o(t)h(v)o(ers)q(ions)h(a)o(v)m
-(aila)o(b)o(le)h(in)f(t)n(h)o(e)f(rep)q(o)q(s)q(it)o(ory)l(.)0
-1497 y(`)p Fl(Patched)p Fo(')46 b(Th)o(e)14 b(\014le)i(w)o(as)e(brough)
-o(t)f(up)i(t)o(o)g(d)o(a)o(t)o(e)f(wit)n(h)h(re)q(sp)q(ect)f(t)o(o)g(a)
-h(remot)o(e)e(rep)q(o)q(s)q(it)o(ory)h(b)o(y)h(w)o(ay)e(of)h(fet)o(c)o
-(hin)o(g)240 1559 y(an)o(d)g(ap)o(p)o(lyin)o(g)i(a)e(pa)o(t)o(c)o(h)f
-(t)o(o)h(t)n(h)o(e)g(\014le)h(in)g(y)o(our)f(source.)19
-b(Thi)q(s)c(i)q(s)f(don)o(e)g(for)g(an)o(y)g(\014le)h(t)n(h)o(a)o(t)e
-(exi)q(st)o(s)h(in)h(a)240 1621 y(remot)o(e)g(rep)q(o)q(s)q(it)o(ory)g
-(an)o(d)h(in)g(y)o(our)g(source;)f(of)h(whic)o(h)g(y)o(ou)g(h)o(a)o(v)o
-(en't)e(c)o(h)o(an)o(ge)q(d)j(lo)q(cally)g(bu)o(t)f(i)q(s)g(not)240
-1684 y(t)n(h)o(e)f(mo)q(st)f(recen)o(t)h(v)o(ers)q(ion)h(a)o(v)m(aila)o
-(b)o(le)h(in)f(t)n(h)o(e)f(remot)o(e)f(rep)q(o)q(s)q(it)o(ory)l(.)0
-1775 y(`)p Fl(Modified)p Fo(')240 1837 y(Th)o(e)19 b(\014le)h(i)q(s)g
-(mo)q(di\014e)q(d)h(in)f(y)o(our)f(w)o(or)o(kin)o(g)g(direct)o(ory)l(,)
-i(an)o(d)e(t)n(h)o(ere)g(w)o(as)g(no)g(mo)q(di\014ca)o(t)o(ion)h(t)o(o)
-f(t)n(h)o(e)240 1899 y(sam)o(e)c(\014le)h(in)g(t)n(h)o(e)f(rep)q(o)q(s)
-q(it)o(ory)l(.)0 1990 y(`)p Fl(Merged)p Fo(')70 b(Th)o(e)22
-b(\014le)h(i)q(s)e(mo)q(di\014e)q(d)j(in)e(y)o(our)g(w)o(or)o(kin)o(g)g
-(direct)o(ory)l(,)i(an)o(d)d(t)n(h)o(ere)h(w)o(ere)g(mo)q(di\014ca)o(t)
-o(ions)g(in)h(t)n(h)o(e)240 2052 y(rep)q(o)q(s)q(it)o(ory)15
-b(as)f(w)o(ell)j(as)d(in)i(y)o(our)f(co)o(p)o(y)l(,)f(bu)o(t)i(t)n(h)o
-(ey)f(w)o(ere)g(m)o(erge)q(d)h(su)o(cce)q(s)q(sfully)l(,)g(wit)n(h)o
-(ou)o(t)g(con\015ict,)240 2115 y(in)g(y)o(our)f(w)o(or)o(kin)o(g)g
-(direct)o(ory)l(.)0 2205 y(`)p Fl(Conflict)p Fo(')240
-2268 y(A)i(con\015ict)h(w)o(as)f(d)o(et)o(ect)o(e)q(d)h(while)g(tryin)o
-(g)g(t)o(o)f(m)o(erge)g(y)o(our)g(c)o(h)o(an)o(ge)q(s)h(t)o(o)f
-Fh(\014le)k Fo(wit)n(h)c(c)o(h)o(an)o(ge)q(s)h(f)q(rom)240
-2330 y(t)n(h)o(e)h(source)f(rep)q(o)q(s)q(it)o(ory)l(.)30
-b Fh(\014le)22 b Fo(\(t)n(h)o(e)d(co)o(p)o(y)f(in)h(y)o(our)g(w)o(or)o
-(kin)o(g)g(direct)o(ory\))g(i)q(s)f(no)o(w)h(t)n(h)o(e)f(ou)o(t)o(pu)o
-(t)h(of)240 2392 y(t)n(h)o(e)e(`)p Fl(rcsmerge)p Fo(')f(comm)o(an)o(d)h
-(on)g(t)n(h)o(e)h(t)o(w)o(o)e(v)o(ers)q(ions;)i(an)g(u)o(nmo)q(di\014e)
-q(d)i(co)o(p)o(y)d(of)g(y)o(our)g(\014le)h(i)q(s)g(also)240
-2455 y(in)j(y)o(our)f(w)o(or)o(kin)o(g)h(direct)o(ory)l(,)h(wit)n(h)f
-(t)n(h)o(e)f(n)o(am)o(e)g(`)p Fl(.#)p Fh(\014le)p Fl(.)p
-Fh(v)o(ers)q(ion)p Fo(',)i(wh)o(ere)e Fh(v)o(ers)q(ion)h
-Fo(i)q(s)f(t)n(h)o(e)h(R)o(CS)240 2517 y(revi)q(s)q(ion)e(t)n(h)o(a)o
-(t)f(y)o(our)h(mo)q(di\014e)q(d)h(\014le)g(st)o(art)o(e)q(d)e(f)q(rom.)
-30 b(See)20 b(Sect)o(ion)f(5.11)f([Viewin)o(g)i(di\013erence)q(s],)240
-2579 y(page)15 b(14,)f(for)h(more)g(d)o(et)o(ails.)0
-2670 y(`)p Fl(Added)p Fo(')94 b(Th)o(e)15 b(\014le)h(h)o(as)f(b)q(een)h
-(add)o(e)q(d)g(b)o(y)f(y)o(ou,)g(bu)o(t)h(it)f(st)o(ill)i(n)o(ee)q(ds)f
-(t)o(o)e(b)q(e)i(c)o(h)o(ec)o(k)o(e)q(d)f(in)h(t)o(o)f(t)n(h)o(e)g(rep)
-q(o)q(s)q(it)o(ory)l(.)p eop
-%%Page: 8 10
-8 9 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(4:)20 b(Bu\013er)15
-b(con)o(t)o(en)o(t)o(s)1397 b(8)0 183 y(`)p Fl(Removed)p
-Fo(')46 b(Th)o(e)14 b(\014le)i(h)o(as)e(b)q(een)h(remo)o(v)o(e)q(d)f(b)
-o(y)h(y)o(ou,)f(bu)o(t)h(it)f(n)o(ee)q(ds)i(t)o(o)e(b)q(e)g(c)o(h)o(ec)
-o(k)o(e)q(d)h(in)h(t)o(o)e(t)n(h)o(e)g(rep)q(o)q(s)q(it)o(ory)l(.)20
-b(Y)l(ou)240 246 y(can)15 b(re)q(surrect)h(it)f(b)o(y)g(t)o(ypin)o(g)h
-Fl(a)f Fo(\(s)q(ee)g(Sect)o(ion)h(5.7)e([Addin)o(g)i(an)o(d)g(remo)o
-(vin)o(g)f(\014le)q(s],)h(page)f(13\).)0 334 y(`)p Fl(Unknown)p
-Fo(')46 b(A)18 b(\014le)g(t)n(h)o(a)o(t)f(w)o(as)g(d)o(et)o(ect)o(e)q
-(d)h(in)h(y)o(our)e(direct)o(ory)l(,)h(bu)o(t)h(t)n(h)o(a)o(t)d(n)o(e)q
-(it)n(h)o(er)j(ap)o(p)q(e)q(ars)e(in)h(t)n(h)o(e)g(rep)q(o)q(s)q(it)o
-(ory)l(,)240 396 y(nor)d(i)q(s)g(pre)q(s)q(en)o(t)h(on)f(t)n(h)o(e)g
-(li)q(st)h(of)e(\014le)q(s)j(t)n(h)o(a)o(t)d(CVS)h(sh)o(ould)h(ignore.)
-62 547 y(Th)o(ere)g(are)f(also)g(a)g(few)g(sp)q(ecial)h(cas)q(e)q(s,)f
-(t)n(h)o(a)o(t)f(rarely)h(o)q(ccur,)h(whic)o(h)f(h)o(a)o(v)o(e)g(lon)o
-(ger)h(str)q(in)o(gs)f(in)h(t)n(h)o(e)f(\014elds:)0 698
-y(`)p Fl(Removed)f(from)g(repository)p Fo(')240 760 y(Th)o(e)h(\014le)i
-(h)o(as)e(b)q(een)h(remo)o(v)o(e)q(d)f(f)q(rom)g(y)o(our)g(direct)o
-(ory)h(s)q(ince)g(som)o(eon)o(e)f(h)o(as)g(remo)o(v)o(e)q(d)h(it)f(f)q
-(rom)g(t)n(h)o(e)240 823 y(rep)q(o)q(s)q(it)o(ory)l(.)k(\(It)12
-b(i)q(s)g(st)o(ill)i(pre)q(s)q(en)o(t)f(in)g(t)n(h)o(e)f(A)o(t)n(t)o
-(ic)g(direct)o(ory)l(,)i(so)e(no)g(p)q(erm)o(an)o(en)o(t)g(lo)q(s)q(s)g
-(h)o(as)g(o)q(ccurre)q(d\).)240 885 y(Thi)q(s,)j(u)o(nlik)o(e)i(t)n(h)o
-(e)e(ot)n(h)o(er)g(en)o(tr)q(ie)q(s)h(in)g(t)n(hi)q(s)f(t)o(a)o(b)o
-(le,)g(i)q(s)h(not)e(an)i(error)e(con)o(dit)o(ion.)0
-974 y(`)p Fl(Removed)g(from)g(repository,)g(changed)g(by)h(you)p
-Fo(')240 1036 y(Y)l(ou)21 b(h)o(a)o(v)o(e)f(mo)q(di\014e)q(d)i(a)e
-(\014le)i(t)n(h)o(a)o(t)e(som)o(eon)o(e)g(h)o(a)o(v)o(e)g(remo)o(v)o(e)
-q(d)g(f)q(rom)g(t)n(h)o(e)g(rep)q(o)q(s)q(it)o(ory)l(.)36
-b(Y)l(ou)21 b(can)240 1098 y(correct)d(t)n(hi)q(s)g(s)q(it)o(ua)o(t)o
-(ion)g(b)o(y)g(remo)o(vin)o(g)g(t)n(h)o(e)h(\014le)g(m)o(an)n(ually)g
-(\(s)q(ee)f(s)q(ee)h(Sect)o(ion)f(5.7)g([Addin)o(g)h(an)o(d)240
-1160 y(remo)o(vin)o(g)c(\014le)q(s],)h(page)f(13\).)0
-1249 y(`)p Fl(Removed)f(by)h(you,)f(changed)g(in)h(repository)p
-Fo(')240 1311 y(Y)l(ou)g(h)o(a)o(v)o(e)g(remo)o(v)o(e)q(d)g(a)g
-(\014le,)h(an)o(d)f(b)q(efore)g(y)o(ou)g(commit)n(t)o(e)q(d)h(t)n(h)o
-(e)f(remo)o(v)m(al)g(som)o(eon)o(e)g(commit)n(t)o(e)q(d)g(a)240
-1374 y(c)o(h)o(an)o(ge)j(t)o(o)f(t)n(h)o(a)o(t)f(\014le.)27
-b(Y)l(ou)18 b(could)g(us)q(e)g Fl(a)f Fo(t)o(o)g(re)q(surrect)h(t)n(h)o
-(e)f(\014le)i(\(s)q(ee)e(s)q(ee)g(Sect)o(ion)h(5.7)f([Addin)o(g)240
-1436 y(an)o(d)e(remo)o(vin)o(g)h(\014le)q(s],)f(page)g(13\).)0
-1524 y(`)p Fl(Move)f(away)h Fh(\014le)k Fl(-)c(it)g(is)f(in)h(the)g
-(way)p Fo(')240 1587 y(F)l(or)g(som)o(e)f(re)q(ason)g(CVS)i(do)q(e)q(s)
-f(not)g(lik)o(e)h(t)n(h)o(e)f(\014le)h Fh(\014le)p Fo(.)21
-b(Ren)o(am)o(e)16 b(or)f(remo)o(v)o(e)f(it.)0 1675 y(`)p
-Fl(This)g(repository)g(is)h(missing!)f(Remove)g(this)h(dir)g(manually.)
-p Fo(')240 1738 y(It)h(i)q(s)g(imp)q(o)q(s)q(s)q(ib)o(le)h(t)o(o)f
-(remo)o(v)o(e)f(a)h(direct)o(ory)h(in)f(t)n(h)o(e)g(CVS)g(rep)q(o)q(s)q
-(it)o(ory)g(in)h(a)e(cle)q(an)i(w)o(ay)l(.)k(Som)o(eon)o(e)240
-1800 y(h)o(a)o(v)o(e)15 b(tr)q(ie)q(d)g(t)o(o)g(remo)o(v)o(e)g(on)o(e,)
-f(an)o(d)h(CVS)h(get)o(s)f(confus)q(e)q(d.)21 b(Remo)o(v)o(e)15
-b(y)o(our)f(co)o(p)o(y)h(of)g(t)n(h)o(e)g(direct)o(ory)l(.)0
-2031 y Fk(4.2)33 b(Select)n(e)r(d)15 b(\014le)r(s)62
-2168 y Fo(Man)o(y)g(of)g(t)n(h)o(e)g(comm)o(an)o(ds)f(w)o(or)o(ks)h(on)
-g(t)n(h)o(e)g(curren)o(t)g(s)q(et)g(of)g Fh(s)q(elect)o(e)q(d)j
-Fo(\014le)q(s.)37 2306 y Fn(\017)30 b Fo(If)15 b(t)n(h)o(ere)h(are)f
-(an)o(y)g(\014le)q(s)h(t)n(h)o(a)o(t)e(are)h(m)o(ar)o(k)o(e)q(d)g(t)n
-(h)o(ey)g(const)o(it)o(u)o(t)o(e)h(t)n(h)o(e)f(s)q(et)f(of)h(s)q(elect)
-o(e)q(d)i(\014le)q(s.)37 2381 y Fn(\017)30 b Fo(Ot)n(h)o(erwi)q(s)q(e,)
-15 b(if)h(t)n(h)o(e)f(cursor)g(p)q(oin)o(t)o(s)h(t)o(o)f(a)g(\014le,)h
-(t)n(h)o(a)o(t)e(\014le)i(i)q(s)f(t)n(h)o(e)g(s)q(elect)o(e)q(d)i
-(\014le.)37 2457 y Fn(\017)30 b Fo(Ot)n(h)o(erwi)q(s)q(e,)16
-b(if)f(t)n(h)o(e)h(cursor)f(p)q(oin)o(t)o(s)h(t)o(o)g(a)f(direct)o(ory)
-l(,)h(all)g(t)n(h)o(e)f(\014le)q(s)i(in)f(t)n(h)o(a)o(t)f(direct)o(ory)
-h(t)n(h)o(a)o(t)e(ap)o(p)q(e)q(ars)h(in)h(t)n(h)o(e)90
-2519 y(bu\013er)f(are)g(t)n(h)o(e)g(s)q(elect)o(e)q(d)i(\014le)q(s.)62
-2670 y(Thi)q(s)f(sc)o(h)o(em)o(e)f(migh)o(t)g(s)q(eem)g(a)g(lit)n(t)n
-(le)i(comp)o(lica)o(t)o(e)q(d,)f(bu)o(t)g(once)f(on)o(e)g(get)g(us)q(e)
-q(d)h(t)o(o)f(it,)g(it)g(i)q(s)h(quit)o(e)f(p)q(o)o(w)o(erful.)p
-eop
-%%Page: 9 11
-9 10 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(4:)20 b(Bu\013er)15
-b(con)o(t)o(en)o(t)o(s)1397 b(9)62 183 y(See)16 b(Sect)o(ion)g(5.3)e
-([Mar)o(kin)o(g)i(\014le)q(s],)f(page)g(11)g(t)o(ells)h(h)o(o)o(w)e(y)o
-(ou)h(m)o(ar)o(k)g(an)o(d)g(u)o(nm)o(ar)o(k)h(\014le)q(s.)p
-eop
-%%Page: 10 12
-10 11 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(5:)20 b(Comm)o(an)o(ds)1454
-b(10)0 183 y Fm(5)41 b(Comm)n(an)n(ds)62 386 y Fo(Thi)q(s)16
-b(c)o(h)o(apt)o(er)e(d)o(e)q(scr)q(ib)q(e)q(s)j(all)f(t)n(h)o(e)f(comm)
-o(an)o(ds)g(t)n(h)o(a)o(t)f(y)o(ou)h(can)g(us)q(e)h(in)g(p)q(cl-cvs.)0
-640 y Fk(5.1)33 b(Up)r(d)o(a)n(t)n(in)o(g)16 b(t)m(h)n(e)g(direct)o
-(ory)0 796 y Fl(M-x)f(cvs-update)240 858 y Fo(R)m(u)o(n)k(a)f(`)p
-Fl(cvs)c(update)p Fo(')i(comm)o(an)o(d.)27 b(Y)l(ou)18
-b(will)h(b)q(e)e(ask)o(e)q(d)h(for)f(t)n(h)o(e)h(direct)o(ory)g(in)g
-(whic)o(h)g(t)n(h)o(e)g(`)p Fl(cvs)240 921 y(update)p
-Fo(')f(will)i(b)q(e)f(ru)o(n.)28 b(Th)o(e)18 b(ou)o(t)o(pu)o(t)h(will)g
-(b)q(e)f(pars)q(e)q(d)g(b)o(y)g(p)q(cl-cvs,)i(an)o(d)d(t)n(h)o(e)h(re)q
-(sul)o(t)h(pr)q(in)o(t)o(e)q(d)f(in)240 983 y(t)n(h)o(e)e(`)p
-Fl(*cvs*)p Fo(')f(bu\013er)i(\(s)q(ee)f(s)q(ee)g(Ch)o(apt)o(er)g(4)g
-([Bu\013er)g(con)o(t)o(en)o(t)o(s],)f(page)i(7)f(for)f(a)h(d)o(e)q(scr)
-q(ipt)o(ion)i(of)e(t)n(h)o(e)240 1045 y(con)o(t)o(en)o(t)o(s\).)240
-1123 y(By)i(d)o(ef)q(a)n(ul)o(t,)i(`)p Fl(cvs-update)p
-Fo(')c(will)j(d)o(e)q(scen)o(d)h(recurs)q(iv)o(ely)f(in)o(t)o(o)f(su)n
-(b)q(direct)o(or)q(ie)q(s.)31 b(Y)l(ou)18 b(can)g(a)o(v)o(oid)240
-1185 y(t)n(h)o(a)o(t)f(b)q(e)o(h)o(a)o(vior)h(b)o(y)h(givin)o(g)g(a)f
-(pre\014x)h(argu)o(m)o(en)o(t)f(t)o(o)g(it)g(\(e.g.,)g(b)o(y)g(t)o
-(ypin)o(g)h Fl(C-u)c(M-x)f(cvs-update)240 1248 y(RET)p
-Fo(\).)240 1326 y(All)21 b(ot)n(h)o(er)f(comm)o(an)o(ds)g(in)h(p)q
-(cl-cvs)h(require)q(s)f(t)n(h)o(a)o(t)e(y)o(ou)h(h)o(a)o(v)o(e)g(a)f(`)
-p Fl(*cvs*)p Fo(')g(bu\013er.)35 b(Thi)q(s)21 b(i)q(s)f(t)n(h)o(e)240
-1388 y(comm)o(an)o(d)15 b(t)n(h)o(a)o(t)f(y)o(ou)h(us)q(e)g(t)o(o)g
-(get)g(on)o(e.)240 1466 y(CVS)21 b(us)q(e)q(s)g(lo)q(c)o(k)g(\014le)q
-(s)h(in)f(t)n(h)o(e)f(rep)q(o)q(s)q(it)o(ory)g(t)o(o)h(ensure)g(t)n(h)o
-(e)f(in)o(t)o(egr)q(it)o(y)g(of)g(t)n(h)o(e)h(d)o(a)o(t)o(a)f(\014le)q
-(s)i(in)f(t)n(h)o(e)240 1528 y(rep)q(o)q(s)q(it)o(ory)l(.)k(Th)o(ey)17
-b(migh)o(t)g(b)q(e)g(left)h(b)q(e)o(hin)o(d)g(i.e.)26
-b(if)17 b(a)g(w)o(or)o(kst)o(a)o(t)o(ion)f(crash)o(e)q(s)h(in)h(t)n(h)o
-(e)f(middle)i(of)d(a)240 1590 y(CVS)h(o)o(p)q(era)o(t)o(ion.)25
-b(CVS)17 b(ou)o(t)o(pu)o(t)o(s)h(a)e(m)o(e)q(s)q(sage)g(wh)o(en)i(it)f
-(i)q(s)g(w)o(ait)o(in)o(g)g(for)g(a)f(lo)q(c)o(k)i(\014le)g(t)o(o)f(go)
-f(aw)o(ay)l(.)240 1653 y(Pcl-cvs)i(will)g(sh)o(o)o(w)f(t)n(h)o(e)f(sam)
-o(e)h(m)o(e)q(s)q(sage)f(in)h(t)n(h)o(e)g(*cvs*)f(bu\013er,)h(t)o(oget)
-n(h)o(er)g(wit)n(h)g(instru)o(ct)o(ions)h(for)240 1715
-y(d)o(elet)o(in)o(g)g(t)n(h)o(e)f(lo)q(c)o(k)g(\014le)q(s.)25
-b(Y)l(ou)17 b(sh)o(ould)h(norm)o(ally)f(not)f(h)o(a)o(v)o(e)g(t)o(o)g
-(d)o(elet)o(e)i(t)n(h)o(em)e(m)o(an)n(ually)i(|)f(just)240
-1777 y(w)o(ait)10 b(a)h(lit)n(t)n(le)h(while)h(an)o(d)d(t)n(h)o(e)h
-(prob)o(lem)h(sh)o(ould)g(\014x)e(it)o(s)q(elf.)20 b(Bu)o(t)11
-b(if)h(t)n(h)o(e)e(lo)q(c)o(k)h(\014le)q(s)h(do)q(e)q(sn't)f(di)q(sap)o
-(p)q(e)q(ar)240 1840 y(y)o(ou)k(can)g(d)o(elet)o(e)h(t)n(h)o(em)f(wit)n
-(h)h Fl(M-x)f(cvs-delete-lock)e(RET)p Fo(.)0 1933 y Fl(g)216
-b Fo(Thi)q(s)14 b(will)h(ru)o(n)f(`)p Fl(cvs)g(update)p
-Fo(')e(again.)20 b(It)13 b(will)i(alw)o(ays)e(us)q(e)h(t)n(h)o(e)f(sam)
-o(e)g(bu\013er)g(t)n(h)o(a)o(t)g(w)o(as)f(us)q(e)q(d)j(wit)n(h)240
-1996 y(t)n(h)o(e)i(previous)g(`)p Fl(cvs)d(update)p Fo('.)23
-b(Giv)o(e)17 b(a)f(pre\014x)i(argu)o(m)o(en)o(t)d(t)o(o)i(a)o(v)o(oid)f
-(d)o(e)q(scen)o(din)o(g)j(in)o(t)o(o)e(su)n(b)q(direc-)240
-2058 y(t)o(or)q(ie)q(s.)j(Thi)q(s)c(ru)o(ns)f(t)n(h)o(e)g(comm)o(an)o
-(d)g(`)p Fl(cvs-mode-update-no-prompt)o Fo('.)0 2152
-y Fl(G)216 b Fo(Thi)q(s)18 b(will)h(ru)o(n)f(`)p Fl(cvs)d(update)p
-Fo(')h(an)o(d)h(prompt)g(for)g(a)h(n)o(ew)f(direct)o(ory)h(t)o(o)g(up)q
-(d)o(a)o(t)o(e.)27 b(Thi)q(s)18 b(ru)o(ns)g(t)n(h)o(e)240
-2214 y(comm)o(an)o(d)d(`)p Fl(cvs-update)p Fo('.)0 2467
-y Fk(5.2)33 b(Mo)n(v)n(em)n(en)n(t)15 b(Comm)n(an)n(ds)62
-2608 y Fo(Y)l(ou)g(can)g(us)q(e)f(mo)q(st)f(norm)o(al)i(Em)o(acs)f
-(comm)o(an)o(ds)g(t)o(o)g(mo)o(v)o(e)g(forw)o(ard)f(an)o(d)h(bac)o(kw)o
-(ard)g(in)h(t)n(h)o(e)f(bu\013er.)20 b(Som)o(e)0 2670
-y(k)o(eys)15 b(are)g(re)o(b)q(ou)o(n)o(d)h(t)o(o)f(fu)o(nct)o(ions)h(t)
-n(h)o(a)o(t)f(t)o(ak)o(e)f(adv)m(an)o(t)o(age)g(of)h(t)n(h)o(e)g(f)q
-(act)f(t)n(h)o(a)o(t)g(t)n(h)o(e)i(bu\013er)f(i)q(s)g(a)g(p)q(cl-cvs)i
-(bu\013er:)p eop
-%%Page: 11 13
-11 12 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(5:)20 b(Comm)o(an)o(ds)1454
-b(11)0 183 y Fl(SPC)0 246 y(C-n)0 308 y(n)216 b Fo(Th)o(e)q(s)q(e)18
-b(k)o(eys)g(mo)o(v)o(e)g(t)n(h)o(e)g(cursor)g(on)o(e)g(\014le)h(forw)o
-(ard,)e(t)o(o)o(w)o(ards)g(t)n(h)o(e)h(en)o(d)h(of)f(t)n(h)o(e)g
-(bu\013er)g(\()p Fl(cookie-)240 370 y(next-cookie)p Fo(\).)0
-453 y Fl(C-p)0 516 y(p)216 b Fo(Th)o(e)q(s)q(e)23 b(k)o(eys)g(mo)o(v)o
-(e)f(on)o(e)h(\014le)h(bac)o(kw)o(ard,)g(t)o(o)o(w)o(ards)e(t)n(h)o(e)h
-(b)q(eginnin)o(g)i(of)d(t)n(h)o(e)h(bu\013er)g(\()p Fl(cookie-)240
-578 y(previous-cookie)p Fo(\).)0 795 y Fk(5.3)33 b(Mar)o(kin)o(g)16
-b(\014le)r(s)62 932 y Fo(Pcl-cvs)i(w)o(or)o(ks)e(on)g(a)h(s)q(et)f(of)g
-Fh(s)q(elect)o(e)q(d)i(\014le)q(s)h Fo(\(s)q(ee)e(Sect)o(ion)g(4.2)f
-([Select)o(e)q(d)h(\014le)q(s],)h(page)e(8\).)24 b(Y)l(ou)17
-b(can)f(m)o(ar)o(k)0 994 y(an)o(d)f(u)o(nm)o(ar)o(k)h(\014le)q(s)g(wit)
-n(h)g(t)n(h)o(e)q(s)q(e)f(comm)o(an)o(ds:)0 1141 y Fl(m)216
-b Fo(Thi)q(s)19 b(m)o(ar)o(ks)f(t)n(h)o(e)h(\014le)h(t)n(h)o(a)o(t)d(t)
-n(h)o(e)i(cursor)f(i)q(s)h(p)q(o)q(s)q(it)o(ion)o(e)q(d)g(on.)31
-b(If)19 b(t)n(h)o(e)f(cursor)h(i)q(s)g(p)q(o)q(s)q(it)o(ion)o(e)q(d)g
-(on)f(a)240 1204 y(direct)o(ory)e(all)g(\014le)q(s)g(in)g(t)n(h)o(a)o
-(t)f(direct)o(ory)g(will)i(b)q(e)e(m)o(ar)o(k)o(e)q(d.)21
-b(\()p Fl(cvs-mode-mark)p Fo(\).)0 1287 y Fl(u)216 b
-Fo(Unm)o(ar)o(k)14 b(t)n(h)o(e)h(\014le)g(t)n(h)o(a)o(t)f(t)n(h)o(e)g
-(cursor)g(i)q(s)h(p)q(o)q(s)q(it)o(ion)o(e)q(d)g(on.)k(If)c(t)n(h)o(e)f
-(cursor)g(i)q(s)h(on)f(a)g(direct)o(ory)l(,)h(all)h(\014le)q(s)240
-1349 y(in)g(t)n(h)o(a)o(t)e(direct)o(ory)i(will)h(b)q(e)e(u)o(nm)o(ar)o
-(k)o(e)q(d.)21 b(\()p Fl(cvs-mode-unmark)p Fo(\).)0 1433
-y Fl(M)216 b Fo(Mar)o(k)15 b Fh(all)j Fo(\014le)q(s)e(in)g(t)n(h)o(e)f
-(bu\013er)h(\()p Fl(cvs-mode-mark-all-fil)o(es)p Fo(\).)0
-1516 y Fl(ESC)f(DEL)81 b Fo(Unm)o(ar)o(k)15 b Fh(all)j
-Fo(\014le)q(s)f(\()p Fl(cvs-mode-unmark-all-f)o(iles)p
-Fo(\).)0 1600 y Fl(DEL)168 b Fo(Unm)o(ar)o(k)16 b(t)n(h)o(e)g(\014le)i
-(on)e(t)n(h)o(e)g(previous)h(lin)o(e,)h(an)o(d)e(mo)o(v)o(e)f(p)q(oin)o
-(t)i(t)o(o)f(t)n(h)o(a)o(t)f(lin)o(e)j(\()p Fl(cvs-mode-unmark-)240
-1662 y(up)p Fo(\).)0 1879 y Fk(5.4)33 b(Commit)m(t)n(in)o(g)16
-b(c)n(h)n(an)o(ge)r(s)0 2026 y Fl(c)216 b Fo(All)18 b(\014le)q(s)g(t)n
-(h)o(a)o(t)e(h)o(a)o(v)o(e)g(a)h Fl(")p Fo(n)o(ee)q(d)g(t)o(o)g(b)q(e)g
-(c)o(h)o(ec)o(k)o(e)q(d)g(in)p Fl(")p Fo(-m)o(ar)o(k)o(er)h(\(s)q(ee)e
-(Ch)o(apt)o(er)g(4)h([Bu\013er)f(con)o(t)o(en)o(t)o(s],)240
-2088 y(page)21 b(7\))f(can)h(b)q(e)g(c)o(h)o(ec)o(k)o(e)q(d)g(in)h(wit)
-n(h)f(t)n(h)o(e)g Fl(c)g Fo(comm)o(an)o(d.)36 b(It)21
-b(c)o(h)o(ec)o(ks)g(in)g(all)h(s)q(elect)o(e)q(d)g(\014le)q(s)g(\(s)q
-(ee)240 2151 y(Sect)o(ion)c(4.2)e([Select)o(e)q(d)j(\014le)q(s],)f
-(page)f(8\))g(\(except)h(t)n(h)o(o)q(s)q(e)e(wh)o(o)h(lac)o(k)h(t)n(h)o
-(e)f Fl(")p Fo(ci)p Fl(")p Fo(-m)o(ar)o(k)o(er)h(-)f(t)n(h)o(ey)g(are)
-240 2213 y(ignore)q(d\).)j(Pre)q(s)q(s)q(in)o(g)c Fl(c)f
-Fo(ca)n(us)q(e)q(s)h Fl(cvs-mode-commit)d Fo(t)o(o)i(b)q(e)g(ru)o(n.)
-240 2286 y(Wh)o(en)g(y)o(ou)g(pre)q(s)q(s)g Fl(c)g Fo(y)o(ou)g(will)h
-(get)f(a)g(bu\013er)g(calle)q(d)i(`)p Fl(*cvs-commit-message*)p
-Fo('.)f(En)o(t)o(er)f(t)n(h)o(e)g(log)240 2348 y(m)o(e)q(s)q(sage)f
-(for)h(t)n(h)o(e)g(\014le\(s\))g(in)h(it.)k(Wh)o(en)15
-b(y)o(ou)g(are)g(re)q(ady)f(y)o(ou)h(sh)o(ould)h(pre)q(s)q(s)f
-Fl(C-c)g(C-c)g Fo(t)o(o)f(act)o(ually)240 2410 y(commit)h(t)n(h)o(e)g
-(\014le)q(s)i(\(us)q(in)o(g)e Fl(cvs-edit-done)p Fo(\).)240
-2483 y(Norm)o(ally)f(t)n(h)o(e)g(`)p Fl(*cvs-commit-message*)p
-Fo(')d(bu\013er)j(will)i(ret)o(ain)e(t)n(h)o(e)g(log)g(m)o(e)q(s)q
-(sage)f(f)q(rom)g(t)n(h)o(e)h(pre-)240 2545 y(vious)j(commit,)g(bu)o(t)
-g(if)g(t)n(h)o(e)g(v)m(ar)q(ia)o(b)o(le)h Fl(cvs-erase-input-buffer)13
-b Fo(i)q(s)k(s)q(et)f(t)o(o)h(a)f(non-)p Fl(nil)h Fo(v)m(alue)240
-2608 y(t)n(h)o(e)12 b(bu\013er)g(will)i(b)q(e)e(eras)q(e)q(d.)19
-b(P)o(oin)o(t)11 b(an)o(d)h(m)o(ar)o(k)g(will)i(alw)o(ays)d(b)q(e)h(lo)
-q(ca)o(t)o(e)q(d)h(arou)o(n)o(d)f(t)n(h)o(e)g(en)o(t)o(ire)g(bu\013er)
-240 2670 y(so)j(t)n(h)o(a)o(t)f(y)o(ou)h(can)g(e)q(as)q(ily)h(eras)q(e)
-f(it)g(wit)n(h)h Fl(C-w)f Fo(\(`)p Fl(kill-region)p Fo('\).)p
-eop
-%%Page: 12 14
-12 13 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(5:)20 b(Comm)o(an)o(ds)1454
-b(12)240 183 y(If)26 b(y)o(ou)g(are)g(e)q(dit)o(in)o(g)h(t)n(h)o(e)f
-(\014le)q(s)i(in)f(y)o(our)e(em)o(acs)h(an)g(a)n(u)o(t)o(om)o(a)o(t)o
-(ic)g(`)p Fl(revert-buffer)p Fo(')d(will)28 b(b)q(e)240
-246 y(p)q(erform)o(e)q(d.)40 b(\(If)22 b(t)n(h)o(e)f(\014le)i(con)o(t)o
-(ains)f(`)p Fl($Id: pcl-cvs.ps,v 1.1.1.2 1996/04/27 20:02:48 tholo Exp $)p Fo(')e(k)o(eyw)o(ords)h(`)p Fl(cvs)15
-b(commit)p Fo(')21 b(will)i(wr)q(it)o(e)e(a)h(n)o(ew)g(\014le)240
-308 y(wit)n(h)k(t)n(h)o(e)f(n)o(ew)g(v)m(alue)q(s)i(su)n(b)q(st)o(it)o
-(u)o(t)o(e)q(d.)51 b(Th)o(e)25 b(a)n(u)o(t)o(o-rev)o(ert)g(m)o(ak)o(e)q
-(s)g(sure)h(t)n(h)o(a)o(t)e(y)o(ou)h(get)g(t)n(h)o(em)240
-370 y(in)o(t)o(o)c(y)o(our)e(bu\013er\).)36 b(Th)o(e)20
-b(rev)o(ert)g(will)i(not)e(o)q(ccur)h(if)g(y)o(ou)f(h)o(a)o(v)o(e)f(mo)
-q(di\014e)q(d)j(y)o(our)e(bu\013er,)i(or)d(if)240 432
-y(`)p Fl(cvs-auto-revert-after-c)o(ommit)p Fo(')12 b(i)q(s)j(s)q(et)g
-(t)o(o)g(`)p Fl(nil)p Fo('.)0 521 y Fl(C)216 b Fo(Thi)q(s)15
-b(i)q(s)g(just)g(lik)o(e)h(`)p Fl(cvs-mode-commit)p Fo(',)c(except)j(t)
-n(h)o(a)o(t)f(it)i(tr)q(ie)q(s)f(t)o(o)f(pro)o(vid)o(e)i(ap)o(pro)o(pr)
-q(ia)o(t)o(e)e(d)o(ef)q(a)n(ul)o(t)240 583 y(log)k(m)o(e)q(s)q(sage)q
-(s)g(b)o(y)g(lo)q(okin)o(g)i(a)o(t)e(t)n(h)o(e)g(`)p
-Fl(ChangeLog)p Fo('s)e(in)k(t)n(h)o(e)e(curren)o(t)g(direct)o(ory)l(.)
-30 b(Th)o(e)19 b(id)o(e)q(a)g(i)q(s)f(t)o(o)240 645 y(wr)q(it)o(e)11
-b(y)o(our)g(Ch)o(an)o(geLog)h(en)o(tr)q(ie)q(s)f(\014rst,)h(an)o(d)g(t)
-n(h)o(en)f(us)q(e)h(t)n(hi)q(s)g(comm)o(an)o(d)f(t)o(o)g(commit)h(y)o
-(our)f(c)o(h)o(an)o(ge)q(s.)240 707 y(Pre)q(s)q(s)q(in)o(g)k
-Fl(C)g Fo(ca)n(us)q(e)q(s)h Fl(cvs-mode-changelog-commit)c
-Fo(t)o(o)j(b)q(e)g(ru)o(n.)240 783 y(T)l(o)g(s)q(elect)h(d)o(ef)q(a)n
-(ul)o(t)g(log)f(t)o(ext,)f(p)q(cl-cvs:)265 858 y Fn(\000)30
-b Fo(\014n)o(ds)16 b(t)n(h)o(e)f(Ch)o(an)o(geLogs)g(for)f(t)n(h)o(e)h
-(\014le)q(s)i(t)o(o)e(b)q(e)g(c)o(h)o(ec)o(k)o(e)q(d)h(in;)265
-933 y Fn(\000)30 b Fo(v)o(er)q(i\014e)q(s)22 b(t)n(h)o(a)o(t)d(t)n(h)o
-(e)i(t)o(o)o(p)g(en)o(try)f(in)i(t)n(h)o(e)e(Ch)o(an)o(geLog)h(i)q(s)g
-(on)g(t)n(h)o(e)f(curren)o(t)h(d)o(a)o(t)o(e)g(an)o(d)f(b)o(y)h(t)n(h)o
-(e)330 996 y(curren)o(t)15 b(us)q(er;)g(if)h(not,)e(no)h(d)o(ef)q(a)n
-(ul)o(t)i(t)o(ext)d(i)q(s)h(pro)o(vid)o(e)q(d;)265 1071
-y Fn(\000)30 b Fo(s)q(e)q(arc)o(h)14 b(t)n(h)o(e)g(Ch)o(an)o(geLog)h
-(en)o(try)f(for)g(paragraphs)f(con)o(t)o(ainin)o(g)i(t)n(h)o(e)g(n)o
-(am)o(e)q(s)f(of)g(t)n(h)o(e)h(\014le)q(s)h(w)o(e're)330
-1133 y(c)o(h)o(ec)o(kin)o(g)g(in;)g(an)o(d)f(\014n)o(ally)265
-1209 y Fn(\000)30 b Fo(us)q(e)q(s)11 b(t)n(h)o(o)q(s)q(e)e(paragraphs)h
-(as)g(t)n(h)o(e)g(d)o(ef)q(a)n(ul)o(t)i(log)e(t)o(ext)g(in)h(t)n(h)o(e)
-f(`)p Fl(*cvs-commit-message*)p Fo(')d(bu\013er.)240
-1297 y(Y)l(ou)15 b(can)h(t)n(h)o(en)f(commit)g(t)n(h)o(e)g(`)p
-Fl(ChangeLog)p Fo(')f(\014le)i(once)f(p)q(er)h(d)o(ay)f(wit)n(h)o(ou)o
-(t)h(an)o(y)f(log)g(m)o(e)q(s)q(sage.)0 1527 y Fk(5.5)33
-b(Edit)n(in)o(g)17 b(\014le)r(s)62 1664 y Fo(Th)o(ere)e(are)g(curren)o
-(t)n(ly)g(t)n(hree)g(comm)o(an)o(ds)f(t)n(h)o(a)o(t)g(can)h(b)q(e)g(us)
-q(e)q(d)g(t)o(o)g(\014n)o(d)g(a)f(\014le)i(\(t)n(h)o(a)o(t)e(i)q(s,)g
-(load)h(it)g(in)o(t)o(o)g(a)g(bu\013er)0 1726 y(an)o(d)h(st)o(art)f(e)q
-(dit)o(in)o(g)j(it)f(t)n(h)o(ere\).)23 b(Th)o(e)q(s)q(e)16
-b(comm)o(an)o(ds)g(w)o(or)o(k)g(on)g(t)n(h)o(e)g(lin)o(e)i(t)n(h)o(a)o
-(t)d(t)n(h)o(e)h(cursor)g(i)q(s)h(s)q(it)o(ua)o(t)o(e)q(d)f(a)o(t.)22
-b(Th)o(ey)0 1789 y(ignore)15 b(an)o(y)g(m)o(ar)o(k)o(e)q(d)h(\014le)q
-(s.)0 1939 y Fl(f)216 b Fo(Fin)o(d)17 b(t)n(h)o(e)g(\014le)g(t)n(h)o(a)
-o(t)f(t)n(h)o(e)g(cursor)g(p)q(oin)o(t)o(s)i(t)o(o.)23
-b(R)m(u)o(n)c(`)p Fl(dired)p Fo(')c(if)i(t)n(h)o(e)f(cursor)h(p)q(oin)o
-(t)o(s)g(t)o(o)f(a)g(direct)o(ory)240 2002 y(\()p Fl
-(cvs-mode-find-file)p Fo(\).)0 2090 y Fl(o)216 b Fo(Lik)o(e)16
-b Fl(f)p Fo(,)f(bu)o(t)g(us)q(e)h(anot)n(h)o(er)f(win)o(do)o(w)g(\()p
-Fl(cvs-mode-find-file-othe)o(r-windo)o(w)p Fo(\).)0 2178
-y Fl(A)216 b Fo(In)o(v)o(ok)o(e)29 b(`)p Fl(add-change-log-entry-other)
-o(-window)p Fo(')d(t)o(o)j(e)q(dit)i(a)e(`)p Fl(ChangeLog)p
-Fo(')f(\014le.)64 b(Th)o(e)240 2241 y(`)p Fl(ChangeLog)p
-Fo(')21 b(will)k(b)q(e)e(fou)o(n)o(d)h(in)g(t)n(h)o(e)f(direct)o(ory)h
-(of)e(t)n(h)o(e)h(\014le)i(t)n(h)o(e)e(cursor)g(p)q(oin)o(t)o(s)g(t)o
-(o.)44 b(\()p Fl(cvs-)240 2303 y(mode-add-change-log-entry-)o(other-w)o
-(indow)p Fo(\))o(.)0 2532 y Fk(5.6)33 b(Get)m(t)n(in)o(g)16
-b(info)f(a)n(b)r(ou)o(t)h(\014le)r(s)62 2670 y Fo(Bot)n(h)f(of)g(t)n(h)
-o(e)g(fo)o(llo)o(win)o(g)i(comm)o(an)o(ds)e(can)g(b)q(e)g(cust)o(omize)
-q(d.)22 b(See)16 b(Ch)o(apt)o(er)e(6)h([Cust)o(omiza)o(t)o(ion],)f
-(page)h(18.)p eop
-%%Page: 13 15
-13 14 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(5:)20 b(Comm)o(an)o(ds)1454
-b(13)0 183 y Fl(l)216 b Fo(R)m(u)o(n)21 b(`)p Fl(cvs)14
-b(log)p Fo(')19 b(on)g(all)h(s)q(elect)o(e)q(d)g(\014le)q(s,)h(an)o(d)e
-(sh)o(o)o(w)g(t)n(h)o(e)g(re)q(sul)o(t)h(in)g(a)f(t)o(emp)q(orary)f
-(bu\013er)i(\()p Fl(cvs-)240 246 y(mode-log)p Fo(\).)0
-345 y Fl(s)216 b Fo(R)m(u)o(n)16 b(`)p Fl(cvs)e(status)p
-Fo(')f(on)h(all)h(s)q(elect)o(e)q(d)h(\014le)q(s,)f(an)o(d)f(sh)o(o)o
-(w)f(t)n(h)o(e)h(re)q(sul)o(t)i(in)f(a)e(t)o(emp)q(orary)h(bu\013er)g
-(\()p Fl(cvs-)240 407 y(mode-status)p Fo(\).)0 685 y
-Fk(5.7)33 b(Addin)o(g)16 b(an)n(d)g(remo)n(vin)o(g)g(\014le)r(s)62
-828 y Fo(Th)o(e)i(fo)o(llo)o(win)o(g)i(comm)o(an)o(ds)e(are)g(a)o(v)m
-(aila)o(b)o(le)i(t)o(o)e(m)o(ak)o(e)g(it)g(e)q(asy)g(t)o(o)g(add)g(an)o
-(d)g(remo)o(v)o(e)g(\014le)q(s)h(f)q(rom)f(t)n(h)o(e)g(CVS)0
-890 y(rep)q(o)q(s)q(it)o(ory)l(.)0 1051 y Fl(a)216 b
-Fo(Add)13 b(all)h(s)q(elect)o(e)q(d)f(\014le)q(s.)20
-b(Thi)q(s)13 b(comm)o(an)o(d)f(can)h(b)q(e)f(us)q(e)q(d)i(on)e(`)p
-Fl(Unknown)p Fo(')f(\014le)q(s)j(\(s)q(ee)e(s)q(ee)h(Sect)o(ion)g(4.1)
-240 1114 y([File)i(st)o(a)o(t)o(us],)d(page)i(7\).)19
-b(Th)o(e)c(st)o(a)o(t)o(us)d(of)i(t)n(h)o(e)g(\014le)i(will)g(c)o(h)o
-(an)o(ge)e(t)o(o)g(`)p Fl(Added)p Fo(',)f(an)o(d)h(y)o(ou)g(will)i(h)o
-(a)o(v)o(e)d(t)o(o)240 1176 y(us)q(e)g Fl(c)g Fo(\(`)p
-Fl(cvs-mode-commit)p Fo(',)d(s)q(ee)k(s)q(ee)f(Sect)o(ion)h(5.4)e
-([Commit)n(t)o(in)o(g)h(c)o(h)o(an)o(ge)q(s],)g(page)g(11\))g(t)o(o)g
-(re)q(ally)240 1238 y(add)i(t)n(h)o(e)h(\014le)g(t)o(o)f(t)n(h)o(e)g
-(rep)q(o)q(s)q(it)o(ory)l(.)240 1319 y(Thi)q(s)10 b(comm)o(an)o(d)g
-(can)h(also)f(b)q(e)g(us)q(e)q(d)h(on)f(`)p Fl(Removed)p
-Fo(')f(\014le)q(s)i(\(b)q(efore)f(y)o(ou)g(commit)g(t)n(h)o(em\))g(t)o
-(o)g(re)q(surrect)240 1381 y(t)n(h)o(em.)240 1462 y(Select)o(e)q(d)k
-(\014le)q(s)f(t)n(h)o(a)o(t)e(are)h(n)o(e)q(it)n(h)o(er)h(`)p
-Fl(Unknown)p Fo(')e(nor)h(`)p Fl(Removed)p Fo(')e(will)k(b)q(e)e
-(ignore)q(d)h(b)o(y)f(t)n(hi)q(s)h(comm)o(an)o(d.)240
-1543 y(Th)o(e)i(comm)o(an)o(d)g(t)n(h)o(a)o(t)f(i)q(s)h(ru)o(n)h(i)q(s)
-g Fl(cvs-mode-add)p Fo(.)0 1642 y Fl(r)216 b Fo(Thi)q(s)16
-b(comm)o(an)o(d)f(remo)o(v)o(e)q(s)h(t)n(h)o(e)f(s)q(elect)o(e)q(d)i
-(\014le)q(s)g(\(aft)o(er)e(prompt)o(in)o(g)h(for)f(con\014rm)o(a)o(t)o
-(ion\).)21 b(Th)o(e)16 b(\014le)q(s)240 1704 y(are)j(`)p
-Fl(rm)p Fo('e)q(d)f(f)q(rom)g(y)o(our)h(direct)o(ory)g(an)o(d)g(\(u)o
-(nle)q(s)q(s)h(t)n(h)o(e)f(st)o(a)o(t)o(us)e(w)o(as)i(`)p
-Fl(Unknown)p Fo(';)f(s)q(ee)h(Sect)o(ion)h(4.1)240 1766
-y([File)e(st)o(a)o(t)o(us],)d(page)i(7\))f(t)n(h)o(ey)h(will)i(also)e
-(b)q(e)g(`)p Fl(cvs)d(remove)p Fo('d.)24 b(If)18 b(t)n(h)o(e)f(\014le)q
-(s)h(w)o(ere)f(`)p Fl(Unknown)p Fo(')e(t)n(h)o(ey)240
-1829 y(will)21 b(di)q(sap)o(p)q(e)q(ar)d(f)q(rom)g(t)n(h)o(e)h
-(bu\013er.)32 b(Ot)n(h)o(erwi)q(s)q(e)19 b(t)n(h)o(e)q(ir)h(st)o(a)o(t)
-o(us)d(will)k(c)o(h)o(an)o(ge)e(t)o(o)g(`)p Fl(Removed)p
-Fo(',)f(an)o(d)240 1891 y(y)o(ou)13 b(m)n(ust)g(us)q(e)h
-Fl(c)f Fo(\(`)p Fl(cvs-mode-commit)p Fo(',)d(s)q(ee)k(Sect)o(ion)g(5.4)
-e([Commit)n(t)o(in)o(g)h(c)o(h)o(an)o(ge)q(s],)h(page)f(11\))f(t)o(o)
-240 1953 y(commit)j(t)n(h)o(e)g(remo)o(v)m(al.)240 2034
-y(Th)o(e)g(comm)o(an)o(d)g(t)n(h)o(a)o(t)f(i)q(s)h(ru)o(n)h(i)q(s)g
-Fl(cvs-mode-remove-file)p Fo(.)0 2312 y Fk(5.8)33 b(Un)n(doin)o(g)16
-b(c)n(h)n(an)o(ge)r(s)0 2473 y Fl(U)216 b Fo(If)15 b(y)o(ou)f(h)o(a)o
-(v)o(e)g(mo)q(di\014e)q(d)i(a)e(\014le,)h(an)o(d)f(for)g(som)o(e)g(re)q
-(ason)g(d)o(ecid)o(e)i(t)n(h)o(a)o(t)e(y)o(ou)g(don't)g(w)o(an)o(t)f(t)
-o(o)h(k)o(eep)h(t)n(h)o(e)240 2535 y(c)o(h)o(an)o(ge)q(s,)i(y)o(ou)g
-(can)g(u)o(n)o(do)h(t)n(h)o(em)f(wit)n(h)g(t)n(hi)q(s)g(comm)o(an)o(d.)
-25 b(It)17 b(w)o(or)o(ks)g(b)o(y)g(remo)o(vin)o(g)g(y)o(our)g(w)o(or)o
-(kin)o(g)240 2598 y(co)o(p)o(y)12 b(of)g(t)n(h)o(e)g(\014le)i(an)o(d)e
-(t)n(h)o(en)g(get)n(t)o(in)o(g)h(t)n(h)o(e)f(la)o(t)o(e)q(st)g(v)o(ers)
-q(ion)h(f)q(rom)e(t)n(h)o(e)h(rep)q(o)q(s)q(it)o(ory)g(\()p
-Fl(cvs-mode-undo-)240 2660 y(local-changes)p Fo(.)p eop
-%%Page: 14 16
-14 15 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(5:)20 b(Comm)o(an)o(ds)1454
-b(14)0 183 y Fk(5.9)33 b(Remo)n(vin)o(g)16 b(h)n(an)n(dle)r(d)g(en)n
-(tr)q(ie)r(s)0 329 y Fl(x)216 b Fo(Thi)q(s)15 b(comm)o(an)o(d)f(allo)o
-(ws)h(y)o(ou)g(t)o(o)f(remo)o(v)o(e)g(all)i(en)o(tr)q(ie)q(s)f(t)n(h)o
-(a)o(t)f(y)o(ou)g(h)o(a)o(v)o(e)g(pro)q(ce)q(s)q(s)q(e)q(d.)21
-b(More)14 b(sp)q(eci\014-)240 391 y(cally)l(,)g(t)n(h)o(e)e(lin)o(e)q
-(s)i(for)e(`)p Fl(Updated)p Fo(')f(\014le)q(s)j(\(s)q(ee)e(Sect)o(ion)h
-(4.1)f([File)h(st)o(a)o(t)o(us],)e(page)h(7)g(an)o(d)g(\014le)q(s)i(t)n
-(h)o(a)o(t)e(h)o(a)o(v)o(e)240 454 y(b)q(een)j(c)o(h)o(ec)o(k)o(e)q(d)g
-(in)h(\(s)q(ee)e(Sect)o(ion)i(5.4)d([Commit)n(t)o(in)o(g)i(c)o(h)o(an)o
-(ge)q(s],)f(page)h(11\))f(are)g(remo)o(v)o(e)q(d)g(f)q(rom)g(t)n(h)o(e)
-240 516 y(bu\013er.)30 b(If)19 b(a)f(direct)o(ory)h(b)q(ecom)o(e)q(s)g
-(empt)o(y)f(t)n(h)o(e)h(h)o(e)q(adin)o(g)g(for)f(t)n(h)o(a)o(t)f
-(direct)o(ory)i(i)q(s)g(also)g(remo)o(v)o(e)q(d.)240
-578 y(Thi)q(s)c(m)o(ak)o(e)q(s)g(it)h(e)q(as)q(ier)f(t)o(o)g(get)f(an)h
-(o)o(v)o(erview)h(of)e(wh)o(a)o(t)h(n)o(ee)q(ds)h(t)o(o)f(b)q(e)g(don)o
-(e.)240 650 y(Th)o(e)e(comm)o(an)o(d)g(i)q(s)h(calle)q(d)h
-Fl(cvs-mode-remove-handled)p Fo(.)i(If)c(`)p Fl
-(cvs-auto-remove-handled)p Fo(')d(i)q(s)240 712 y(s)q(et)15
-b(t)o(o)g(non-)p Fl(nil)g Fo(t)n(hi)q(s)g(will)i(a)n(u)o(t)o(om)o(a)o
-(t)o(ically)f(b)q(e)f(p)q(erform)o(e)q(d)g(aft)o(er)g(ev)o(ery)g
-(commit.)0 792 y Fl(C-k)168 b Fo(Thi)q(s)11 b(comm)o(an)o(d)g(can)g(b)q
-(e)g(us)q(e)q(d)g(for)g(lin)o(e)q(s)h(t)n(h)o(a)o(t)e(`)p
-Fl(cvs-mode-remove-handled)p Fo(')d(w)o(ould)12 b(not)e(d)o(elet)o(e,)
-240 854 y(bu)o(t)16 b(t)n(h)o(a)o(t)e(y)o(ou)h(w)o(an)o(t)f(t)o(o)h(d)o
-(elet)o(e)h(\()p Fl(cvs-mode-acknowledge)p Fo(\).)0 1064
-y Fk(5.10)32 b(Ignor)q(in)o(g)16 b(\014le)r(s)0 1210
-y Fl(i)216 b Fo(Arran)o(ge)19 b(so)g(t)n(h)o(a)o(t)g(CVS)g(will)i
-(ignore)f(t)n(h)o(e)f(s)q(elect)o(e)q(d)i(\014le)q(s.)33
-b(Th)o(e)20 b(\014le)g(n)o(am)o(e)q(s)f(are)g(add)o(e)q(d)i(t)o(o)e(t)n
-(h)o(e)240 1273 y(`)p Fl(.cvsignore)p Fo(')d(\014le)j(in)f(t)n(h)o(e)g
-(corre)q(sp)q(on)o(din)o(g)h(direct)o(ory)l(.)29 b(If)18
-b(t)n(h)o(e)g(`)p Fl(.cvsignore)p Fo(')d(do)q(e)q(sn't)j(exi)q(st)g(it)
-240 1335 y(will)f(b)q(e)e(cre)q(a)o(t)o(e)q(d.)240 1406
-y(Th)o(e)e(`)p Fl(.cvsignore)p Fo(')e(\014le)j(sh)o(ould)g(norm)o(ally)
-f(b)q(e)g(add)o(e)q(d)h(t)o(o)f(t)n(h)o(e)g(rep)q(o)q(s)q(it)o(ory)l(,)
-g(bu)o(t)g(y)o(ou)g(could)h(ignore)240 1468 y(it)h(also)h(if)f(y)o(ou)g
-(lik)o(e)h(it)g(b)q(et)n(t)o(er)f(t)n(h)o(a)o(t)f(w)o(ay)l(.)240
-1540 y(Thi)q(s)h(ru)o(ns)h Fl(cvs-mode-ignore)p Fo(.)0
-1750 y Fk(5.11)32 b(Viewin)o(g)16 b(di\013erence)r(s)0
-1896 y Fl(d)216 b Fo(Di)q(sp)o(lay)14 b(a)e(`)p Fl(cvs)j(diff)p
-Fo(')c(b)q(et)o(w)o(een)i(t)n(h)o(e)f(s)q(elect)o(e)q(d)i(\014le)q(s)g
-(an)o(d)f(t)n(h)o(e)g(R)o(CS)g(v)o(ers)q(ion)g(t)n(h)o(a)o(t)e(t)n(h)o
-(ey)i(are)f(bas)q(e)q(d)240 1958 y(on.)25 b(See)17 b(Ch)o(apt)o(er)f(6)
-h([Cust)o(omiza)o(t)o(ion],)f(page)h(18)f(d)o(e)q(scr)q(ib)q(e)q(s)i(h)
-o(o)o(w)e(y)o(ou)h(can)g(s)q(en)o(d)g(\015ags)f(t)o(o)h(`)p
-Fl(cvs)240 2020 y(diff)p Fo('.)h(If)c Fh(cvs-di\013-ignore-m)o(ar)o(ks)
-j Fo(i)q(s)c(s)q(et)h(t)o(o)f(a)g(non-)p Fl(nil)h Fo(v)m(alue)h(or)e
-(if)h(a)f(pre\014x)h(argu)o(m)o(en)o(t)f(i)q(s)g(giv)o(en)240
-2083 y(\(bu)o(t)f(not)f(b)q(ot)n(h\))h(an)o(y)g(m)o(ar)o(k)o(e)q(d)g
-(\014le)q(s)h(will)g(not)f(b)q(e)f(cons)q(id)o(ere)q(d)j(t)o(o)e(b)q(e)
-f(s)q(elect)o(e)q(d.)20 b(\()p Fl(cvs-mode-diff-)240
-2145 y(cvs)p Fo(\).)0 2225 y Fl(b)216 b Fo(If)15 b(CVS)h(\014n)o(ds)f
-(a)g(con\015ict)h(while)g(m)o(ergin)o(g)g(t)o(w)o(o)e(v)o(ers)q(ions)h
-(of)g(a)f(\014le)j(\(d)o(ur)q(in)o(g)e(a)g(`)p Fl(cvs)f(update)p
-Fo(',)g(s)q(ee)240 2287 y(Sect)o(ion)g(5.1)e([Up)q(d)o(a)o(t)o(in)o(g)i
-(t)n(h)o(e)g(direct)o(ory],)f(page)g(10\))g(it)g(will)i(sa)o(v)o(e)e(t)
-n(h)o(e)g(or)q(igin)o(al)h(\014le)h(in)f(a)f(\014le)h(calle)q(d)240
-2350 y(`)p Fl(.#)p Fh(FILE)p Fl(.)p Fh(VERSION)5 b Fo(')19
-b(wh)o(ere)g Fh(FILE)i Fo(i)q(s)e(t)n(h)o(e)f(n)o(am)o(e)g(of)g(t)n(h)o
-(e)h(\014le,)h(an)o(d)e Fh(VERSION)25 b Fo(i)q(s)18 b(t)n(h)o(e)h(R)o
-(CS)240 2412 y(v)o(ers)q(ion)c(n)n(u)o(m)n(b)q(er)h(t)n(h)o(a)o(t)e(y)o
-(our)h(\014le)h(w)o(as)f(bas)q(e)q(d)g(on.)240 2483 y(Wit)n(h)d(t)n(h)o
-(e)g Fl(b)g Fo(comm)o(an)o(d)f(y)o(ou)h(can)g(ru)o(n)g(a)g(`)p
-Fl(diff)p Fo(')f(on)h(t)n(h)o(e)f(\014le)q(s)j(`)p Fl(.#)p
-Fh(FILE)p Fl(.)p Fh(VERSION)5 b Fo(')12 b(an)o(d)g(`)p
-Fh(FILE)s Fo('.)240 2545 y(Y)l(ou)18 b(can)f(get)g(a)h(con)o(t)o(ext-)e
-(or)h(Unidi\013)i(b)o(y)e(s)q(et)n(t)o(in)o(g)h(`)p Fl(cvs-diff-flags)p
-Fo(')d(-)j(s)q(ee)f(Ch)o(apt)o(er)g(6)g([Cus-)240 2608
-y(t)o(omiza)o(t)o(ion],)c(page)h(18.)19 b(Thi)q(s)14
-b(comm)o(an)o(d)f(only)h(w)o(or)o(ks)g(on)f(\014le)q(s)i(t)n(h)o(a)o(t)
-e(h)o(a)o(v)o(e)g(st)o(a)o(t)o(us)g(`)p Fl(Conflict)p
-Fo(')e(or)240 2670 y(`)p Fl(Merged)p Fo('.)p eop
-%%Page: 15 17
-15 16 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(5:)20 b(Comm)o(an)o(ds)1454
-b(15)240 183 y(If)11 b Fh(cvs-di\013-ignore-m)o(ar)o(ks)k
-Fo(i)q(s)c(s)q(et)g(t)o(o)g(a)g(non-)p Fl(nil)g Fo(v)m(alue)h(or)f(if)h
-(a)f(pre\014x)g(argu)o(m)o(en)o(t)g(i)q(s)g(giv)o(en)h(\(bu)o(t)f(not)
-240 246 y(b)q(ot)n(h\))h(an)o(y)f(m)o(ar)o(k)o(e)q(d)h(\014le)q(s)i
-(will)f(not)f(b)q(e)g(cons)q(id)o(ere)q(d)h(t)o(o)f(b)q(e)g(s)q(elect)o
-(e)q(d.)20 b(\()p Fl(cvs-mode-diff-backup)p Fo(\))o(.)0
-490 y Fk(5.12)32 b(R)l(u)o(nnin)o(g)18 b(e)r(di\013)0
-644 y Fl(e)216 b Fo(Thi)q(s)15 b(comm)o(an)o(d)f(w)o(or)o(ks)h(sligh)o
-(t)n(ly)h(di\013eren)o(t)f(d)o(ep)q(en)o(din)o(g)h(on)f(t)n(h)o(e)g(v)o
-(ers)q(ion)g(of)f(`)p Fl(ediff)p Fo(')f(an)o(d)i(t)n(h)o(e)g(\014le)240
-707 y(st)o(a)o(t)o(us.)240 784 y(Wit)n(h)10 b(mo)q(d)o(er)q(n)h(v)o
-(ers)q(ions)f(of)g(`)p Fl(ediff)p Fo(',)f(t)n(hi)q(s)i(comm)o(an)o(d)e
-(in)o(v)o(ok)o(e)q(s)i(`)p Fl(run-ediff-from-cvs-b)o(uffer)p
-Fo(')p 1955 792 21 41 v 240 846 a(on)k(on)o(e)g(\014le.)240
-923 y Fj(Not)o(e:)26 b Fo(Wh)o(en)19 b(t)n(h)o(e)g(\014le)h(st)o(a)o(t)
-o(us)e(i)q(s)h(`)p Fl(Merged)p Fo(')e(or)i(`)p Fl(Conflict)p
-Fo(',)e(CVS)i(h)o(as)g(alre)q(ady)g(p)q(erform)o(e)q(d)f(a)240
-985 y(m)o(erge.)h(Th)o(e)12 b(re)q(sul)o(t)o(in)o(g)i(\014le)g(i)q(s)f
-(not)f(us)q(e)q(d)h(in)g(an)o(y)g(w)o(ay)e(if)i(y)o(ou)f(us)q(e)h(t)n
-(hi)q(s)g(comm)o(an)o(d.)18 b(If)13 b(y)o(ou)f(us)q(e)h(t)n(h)o(e)240
-1047 y Fl(q)g Fo(comm)o(an)o(d)g(ins)q(id)o(e)i(`)p Fl(ediff)p
-Fo(')d(\(t)o(o)h(su)o(cce)q(s)q(sfully)i(t)o(ermin)o(a)o(t)o(e)e(a)g(m)
-o(erge\))g(t)n(h)o(e)g(\014le)i(t)n(h)o(a)o(t)d(CVS)i(cre)q(a)o(t)o(e)q
-(d)240 1110 y(will)j(b)q(e)e(o)o(v)o(erwr)q(it)n(t)o(en.)240
-1187 y(Old)o(er)d(v)o(ers)q(ions)e(of)g(`)p Fl(ediff)p
-Fo(')e(us)q(e)j(an)f(in)o(t)o(erf)q(ace)g(s)q(imilar)h(t)o(o)e(`)p
-Fl(emerge)p Fo('.)17 b(Th)o(e)10 b(fu)o(nct)o(ion)h(`)p
-Fl(cvs-old-ediff-interface)p Fo(')p 2271 1197 21 42 v
-240 1249 a(i)q(s)f(in)o(v)o(ok)o(e)q(d)h(if)g(t)n(h)o(e)f(v)o(ers)q
-(ion)g(of)g(`)p Fl(ediff)p Fo(')e(y)o(ou)i(h)o(a)o(v)o(e)g(do)q(e)q
-(sn't)f(sup)o(p)q(ort)h(`)p Fl(run-ediff-from-cvs-buffer)o
-Fo('.)p 2034 1258 21 41 v 240 1311 a(Th)o(e)q(s)q(e)15
-b(o)o(ld)o(er)i(v)o(ers)q(ions)e(do)h(not)e(sup)o(p)q(ort)h(m)o(ergin)o
-(g)h(of)f(revi)q(s)q(ions.)240 1403 y(`)p Fl(Modified)p
-Fo(')480 1465 y(R)m(u)o(n)h(`)p Fl(ediff-files)p Fo(')c(wit)n(h)j(y)o
-(our)f(w)o(or)o(kin)o(g)h(\014le)h(as)e(\014le)h(A,)g(an)o(d)f(t)n(h)o
-(e)g(la)o(t)o(e)q(st)h(revi)q(s)q(ion)480 1527 y(in)h(t)n(h)o(e)f(rep)q
-(o)q(s)q(it)o(ory)g(as)g(\014le)h(B.)240 1619 y(`)p Fl(Merged)p
-Fo(')240 1681 y(`)p Fl(Conflict)p Fo(')480 1744 y(R)m(u)o(n)f(`)p
-Fl(ediff-files3)p Fo(')c(wit)n(h)j(y)o(our)f(w)o(or)o(kin)o(g)h(\014le)
-h(\(as)e(it)g(w)o(as)g(pr)q(ior)g(t)o(o)h(y)o(our)f(in)o(v)o(o)q(ca-)
-480 1806 y(t)o(ion)j(of)g(`)p Fl(cvs-update)p Fo('\))e(as)i(\014le)h
-(A,)f(t)n(h)o(e)g(la)o(t)o(e)q(st)g(revi)q(s)q(ion)g(in)h(t)n(h)o(e)f
-(rep)q(o)q(s)q(it)o(ory)g(as)g(\014le)480 1868 y(B,)e(an)o(d)g(t)n(h)o
-(e)f(revi)q(s)q(ion)i(t)n(h)o(a)o(t)e(y)o(ou)g(bas)q(e)q(d)i(y)o(our)e
-(lo)q(cal)i(mo)q(di\014ca)o(t)o(ions)g(on)f(as)f(ance)q(st)o(or.)240
-1960 y(`)p Fl(Updated)p Fo(')240 2022 y(`)p Fl(Patched)p
-Fo(')46 b(R)m(u)o(n)15 b(`)p Fl(ediff-files)p Fo(')d(wit)n(h)i(y)o(our)
-f(w)o(or)o(kin)o(g)h(\014le)h(as)e(\014le)i(A,)e(an)o(d)h(a)f(giv)o(en)
-h(revi)q(s)q(ion)g(in)480 2084 y(t)n(h)o(e)g(rep)q(o)q(s)q(it)o(ory)g
-(as)g(\014le)h(B.)g(Y)l(ou)f(are)g(prompt)o(e)q(d)h(for)e(t)n(h)o(e)i
-(revi)q(s)q(ion)f(t)o(o)g(e)q(di\013)i(against,)480 2147
-y(an)o(d)d(y)o(ou)h(m)o(ay)f(sp)q(ecify)h(e)q(it)n(h)o(er)g(a)g(t)o(ag)
-e(n)o(am)o(e)h(or)g(a)g(n)n(u)o(m)o(er)q(ical)i(revi)q(s)q(ion)f(n)n(u)
-o(m)n(b)q(er)g(\(s)q(ee)480 2209 y(Sect)o(ion)i(5.6)e([Get)n(t)o(in)o
-(g)h(info)h(a)o(b)q(ou)o(t)f(\014le)q(s],)h(page)f(12\).)0
-2454 y Fk(5.13)32 b(R)l(u)o(nnin)o(g)18 b(em)n(erge)0
-2608 y Fl(E)216 b Fo(In)o(v)o(ok)o(e)17 b(`)p Fl(emerge)p
-Fo(')f(on)i(on)o(e)f(\014le.)28 b(Thi)q(s)18 b(comm)o(an)o(d)f(w)o(or)o
-(ks)g(sligh)o(t)n(ly)i(di\013eren)o(t)f(d)o(ep)q(en)o(din)o(g)i(on)d(t)
-n(h)o(e)240 2670 y(\014le)f(st)o(a)o(t)o(us.)p eop
-%%Page: 16 18
-16 17 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(5:)20 b(Comm)o(an)o(ds)1454
-b(16)240 183 y(`)p Fl(Modified)p Fo(')480 246 y(R)m(u)o(n)14
-b(`)p Fl(emerge-files)p Fo(')c(wit)n(h)j(y)o(our)f(w)o(or)o(kin)o(g)h
-(\014le)h(as)e(\014le)h(A,)g(an)o(d)f(t)n(h)o(e)g(la)o(t)o(e)q(st)h
-(revi)q(s)q(ion)480 308 y(in)j(t)n(h)o(e)f(rep)q(o)q(s)q(it)o(ory)g(as)
-g(\014le)h(B.)240 396 y(`)p Fl(Merged)p Fo(')240 458
-y(`)p Fl(Conflict)p Fo(')480 520 y(R)m(u)o(n)d(`)p Fl
-(emerge-files-with-an)o(cestor)p Fo(')7 b(wit)n(h)k(y)o(our)g(w)o(or)o
-(kin)o(g)g(\014le)h(\(as)e(it)h(w)o(as)f(pr)q(ior)480
-582 y(t)o(o)21 b(y)o(our)g(in)o(v)o(o)q(ca)o(t)o(ion)g(of)g(`)p
-Fl(cvs-update)p Fo('\))e(as)i(\014le)i(A,)e(t)n(h)o(e)g(la)o(t)o(e)q
-(st)g(revi)q(s)q(ion)h(in)g(t)n(h)o(e)480 645 y(rep)q(o)q(s)q(it)o(ory)
-11 b(as)f(\014le)j(B,)e(an)o(d)g(t)n(h)o(e)g(revi)q(s)q(ion)h(t)n(h)o
-(a)o(t)e(y)o(ou)h(bas)q(e)q(d)g(y)o(our)g(lo)q(cal)h(mo)q(di\014ca)o(t)
-o(ions)480 707 y(on)j(as)g(ance)q(st)o(or.)240 795 y
-Fj(Not)o(e:)26 b Fo(Wh)o(en)19 b(t)n(h)o(e)g(\014le)h(st)o(a)o(t)o(us)e
-(i)q(s)h(`)p Fl(Merged)p Fo(')e(or)i(`)p Fl(Conflict)p
-Fo(',)e(CVS)i(h)o(as)g(alre)q(ady)g(p)q(erform)o(e)q(d)f(a)240
-857 y(m)o(erge.)24 b(Th)o(e)17 b(re)q(sul)o(t)o(in)o(g)h(\014le)g(i)q
-(s)e(not)h(us)q(e)q(d)g(in)h(an)o(y)e(w)o(ay)g(if)h(y)o(ou)f(us)q(e)h
-(t)n(hi)q(s)g(comm)o(an)o(d.)24 b(If)16 b(y)o(ou)h(us)q(e)240
-919 y(t)n(h)o(e)e Fl(q)g Fo(comm)o(an)o(d)g(ins)q(id)o(e)i(`)p
-Fl(emerge)p Fo(')c(\(t)o(o)i(su)o(cce)q(s)q(sfully)h(t)o(ermin)o(a)o(t)
-o(e)f(t)n(h)o(e)g(m)o(erge\))f(t)n(h)o(e)h(\014le)i(t)n(h)o(a)o(t)d
-(CVS)240 981 y(cre)q(a)o(t)o(e)q(d)h(will)h(b)q(e)g(o)o(v)o(erwr)q(it)n
-(t)o(en.)0 1208 y Fk(5.14)32 b(Rev)n(ert)n(in)o(g)17
-b(y)n(our)f(bu\013ers)0 1358 y Fl(R)216 b Fo(If)17 b(y)o(ou)g(are)f(e)q
-(dit)o(in)o(g)j(\(or)d(just)g(viewin)o(g\))i(a)f(\014le)h(in)g(a)e
-(bu\013er,)h(an)o(d)g(t)n(h)o(a)o(t)f(\014le)i(i)q(s)f(c)o(h)o(an)o(ge)
-q(d)g(b)o(y)g(CVS)240 1420 y(d)o(ur)q(in)o(g)h(a)e(`)p
-Fl(cvs-update)p Fo(',)f(all)i(y)o(ou)g(h)o(a)o(v)o(e)f(t)o(o)g(do)h(i)q
-(s)g(t)o(yp)q(e)f Fl(R)h Fo(in)h(t)n(h)o(e)e(*cvs*)h(bu\013er)g(t)o(o)f
-(re)q(ad)g(in)i(t)n(h)o(e)240 1483 y(n)o(ew)d(v)o(ers)q(ions)g(of)g(t)n
-(h)o(e)g(\014le)q(s.)240 1558 y(All)h(\014le)q(s)h(t)n(h)o(a)o(t)d(are)
-g(`)p Fl(Updated)p Fo(',)f(`)p Fl(Merged)p Fo(')h(or)g(in)i(`)p
-Fl(Conflict)p Fo(')d(are)i(rev)o(ert)o(e)q(d)g(f)q(rom)f(t)n(h)o(e)h
-(di)q(sk.)20 b(An)o(y)240 1620 y(ot)n(h)o(er)15 b(\014le)q(s)h(are)f
-(ignore)q(d.)21 b(Only)16 b(\014le)q(s)h(t)n(h)o(a)o(t)d(y)o(ou)h(w)o
-(ere)g(alre)q(ady)g(e)q(dit)o(in)o(g)i(are)e(re)q(ad.)240
-1695 y(An)i(error)g(i)q(s)g(s)q(ign)o(alle)q(d)h(if)g(y)o(ou)e(h)o(a)o
-(v)o(e)h(mo)q(di\014e)q(d)h(t)n(h)o(e)f(bu\013er)g(s)q(ince)h(it)f(w)o
-(as)f(last)h(c)o(h)o(an)o(ge)q(d.)26 b(\()p Fl(cvs-)240
-1757 y(mode-revert-updated-buffer)o(s)p Fo(\).)0 1984
-y Fk(5.15)32 b(Mi)q(scellan)n(eous)15 b(comm)n(an)n(ds)0
-2134 y Fl(M-x)g(cvs-byte-compile-files)240 2196 y Fo(Byt)o(e)g(compile)
-i(all)f(s)q(elect)o(e)q(d)g(\014le)q(s)g(t)n(h)o(a)o(t)f(en)o(d)g(in)h
-(.el.)0 2284 y Fl(M-x)f(cvs-delete-lock)240 2346 y Fo(Thi)q(s)e(comm)o
-(an)o(d)g(can)g(b)q(e)f(us)q(e)q(d)i(in)g(an)o(y)e(bu\013er,)h(an)o(d)g
-(d)o(elet)o(e)q(s)h(t)n(h)o(e)f(lo)q(c)o(k)h(\014le)q(s)g(t)n(h)o(a)o
-(t)e(t)n(h)o(e)g(*cvs*)h(bu\013er)240 2408 y(informs)18
-b(y)o(ou)f(a)o(b)q(ou)o(t.)26 b(Y)l(ou)18 b(sh)o(ould)h(norm)o(ally)f
-(n)o(ev)o(er)f(h)o(a)o(v)o(e)g(t)o(o)g(us)q(e)h(t)n(hi)q(s)g(comm)o(an)
-o(d)f(s)q(ince)h(CVS)240 2470 y(tr)q(ie)q(s)d(v)o(ery)g(carefully)i(t)o
-(o)e(alw)o(ays)g(remo)o(v)o(e)f(t)n(h)o(e)h(lo)q(c)o(k)h(\014le)q(s)g
-(it)o(s)q(elf.)240 2545 y(Y)l(ou)g(can)h(only)f(us)q(e)h(t)n(hi)q(s)f
-(comm)o(an)o(d)g(wh)o(en)g(a)g(m)o(e)q(s)q(sage)f(in)i(t)n(h)o(e)g
-(*cvs*)e(bu\013er)i(t)o(ells)f(y)o(ou)g(so.)23 b(Y)l(ou)240
-2608 y(sh)o(ould)18 b(w)o(ait)f(a)g(while)i(b)q(efore)e(us)q(in)o(g)h
-(t)n(hi)q(s)g(comm)o(an)o(d)f(in)h(cas)q(e)f(som)o(eon)o(e)g(els)q(e)h
-(i)q(s)g(ru)o(nnin)o(g)h(a)e(cvs)240 2670 y(comm)o(an)o(d.)p
-eop
-%%Page: 17 19
-17 18 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(5:)20 b(Comm)o(an)o(ds)1454
-b(17)0 183 y Fl(q)216 b Fo(Bury)15 b(t)n(h)o(e)h(*cvs*)e(bu\013er.)20
-b(\()p Fl(bury-buffer)p Fo(\).)p eop
-%%Page: 18 20
-18 19 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(6:)20 b(Cust)o(omiza)o(t)o(ion)
-1390 b(18)0 183 y Fm(6)41 b(Cust)o(omiza)n(t)n(ion)62
-394 y Fo(If)16 b(y)o(ou)g(h)o(a)o(v)o(e)f(an)h(id)o(e)q(a)g(a)o(b)q(ou)
-o(t)g(an)o(y)f(cust)o(omiza)o(t)o(ion)h(t)n(h)o(a)o(t)f(w)o(ould)h(b)q
-(e)g(h)o(an)o(dy)g(bu)o(t)g(i)q(sn't)f(pre)q(s)q(en)o(t)h(in)h(t)n(hi)q
-(s)f(li)q(st,)0 456 y(p)o(le)q(as)q(e)g(t)o(ell)g(m)o(e!)k(See)15
-b(Ch)o(apt)o(er)g(8)g([Bugs],)f(page)h(22)g(for)f(info)i(on)f(h)o(o)o
-(w)g(t)o(o)f(re)q(ac)o(h)h(m)o(e.)0 616 y(`)p Fl
-(cvs-erase-input-buffer)p Fo(')240 678 y(If)h(s)q(et)g(t)o(o)g(an)o(yt)
-n(hin)o(g)h(els)q(e)g(t)n(h)o(an)f Fl(nil)g Fo(t)n(h)o(e)g(e)q(dit)h
-(bu\013er)g(will)g(b)q(e)g(eras)q(e)q(d)f(b)q(efore)g(y)o(ou)g(wr)q(it)
-o(e)g(t)n(h)o(e)g(log)240 740 y(m)o(e)q(s)q(sage)e(\(s)q(ee)h(Sect)o
-(ion)h(5.4)e([Commit)n(t)o(in)o(g)h(c)o(h)o(an)o(ge)q(s],)g(page)g
-(11\).)0 837 y(`)p Fl(cvs-inhibit-copyright-m)o(essage)p
-Fo(')240 899 y(Th)o(e)g(co)o(p)o(yr)q(igh)o(t)f(m)o(e)q(s)q(sage)g(t)n
-(h)o(a)o(t)g(i)q(s)i(di)q(sp)o(lay)o(e)q(d)h(on)e(st)o(art)o(up)f(can)h
-(b)q(e)g(anno)o(yin)o(g)h(aft)o(er)e(a)h(while.)21 b(Set)240
-961 y(t)n(hi)q(s)16 b(v)m(ar)q(ia)o(b)o(le)h(t)o(o)e(`)p
-Fl(t)p Fo(')g(if)h(y)o(ou)g(w)o(an)o(t)e(t)o(o)i(get)f(r)q(id)h(of)f
-(it.)22 b(\(Bu)o(t)16 b(don't)f(s)q(et)g(t)n(hi)q(s)h(t)o(o)g(`)p
-Fl(t)p Fo(')e(in)j(t)n(h)o(e)f(syst)o(em)240 1024 y(d)o(ef)q(a)n(ul)o
-(t)o(s)h(\014le)f(-)f(n)o(ew)g(us)q(ers)h(sh)o(ould)g(s)q(ee)f(t)n(hi)q
-(s)h(m)o(e)q(s)q(sage)e(a)o(t)g(le)q(ast)h(once\).)0
-1120 y(`)p Fl(cvs-diff-flags)p Fo(')240 1183 y(A)i(li)q(st)g(of)g(str)q
-(in)o(gs)f(t)o(o)h(pas)q(s)f(as)g(argu)o(m)o(en)o(t)o(s)h(t)o(o)f(t)n
-(h)o(e)h(`)p Fl(cvs)d(diff)p Fo(')i(an)o(d)h(`)p Fl(diff)p
-Fo(')e(programs.)24 b(Thi)q(s)17 b(i)q(s)240 1245 y(us)q(e)q(d)i(b)o(y)
-f(`)p Fl(cvs-mode-diff-cvs)p Fo(')c(an)o(d)k(`)p Fl
-(cvs-mode-diff-backup)p Fo(')d(\(k)o(ey)i Fl(b)p Fo(,)h(s)q(ee)h(Sect)o
-(ion)f(5.11)240 1307 y([Viewin)o(g)d(di\013erence)q(s],)h(page)e(14\).)
-k(If)d(y)o(ou)e(prefer)i(t)n(h)o(e)f(Unidi\013)h(form)o(a)o(t)e(y)o(ou)
-h(could)h(add)f(t)n(hi)q(s)h(lin)o(e)240 1370 y(t)o(o)g(y)o(our)g(`)p
-Fl(.emacs)p Fo(')e(\014le:)360 1439 y Fl(\(setq)23 b(cvs-diff-flags)f
-('\("-u"\)\))0 1536 y Fo(`)p Fl(cvs-diff-ignore-marks)p
-Fo(')240 1598 y(If)10 b(t)n(hi)q(s)h(v)m(ar)q(ia)o(b)o(le)g(i)q(s)g
-(non-)p Fl(nil)f Fo(or)f(if)i(a)f(pre\014x)g(argu)o(m)o(en)o(t)g(i)q(s)
-g(giv)o(en)h(\(bu)o(t)f(not)g(b)q(ot)n(h\))g(t)o(o)g(`)p
-Fl(cvs-mode-diff-cvs)p Fo(')p 2105 1609 21 46 v 240 1660
-a(or)15 b(`)p Fl(cvs-mode-diff-backup)p Fo(')c(m)o(ar)o(k)o(e)q(d)16
-b(\014le)q(s)g(are)f(not)g(cons)q(id)o(ere)q(d)i(s)q(elect)o(e)q(d.)0
-1757 y(`)p Fl(cvs-log-flags)p Fo(')240 1819 y(Li)q(st)h(of)g(str)q(in)o
-(gs)f(t)o(o)h(s)q(en)o(d)g(t)o(o)g(`)p Fl(cvs)c(log)p
-Fo('.)27 b(Us)q(e)q(d)18 b(b)o(y)g(`)p Fl(cvs-mode-log)p
-Fo(')d(\(k)o(ey)j Fl(l)p Fo(,)g(s)q(ee)f(Sect)o(ion)i(5.6)240
-1881 y([Get)n(t)o(in)o(g)c(info)h(a)o(b)q(ou)o(t)f(\014le)q(s],)g(page)
-h(12\).)0 1978 y(`)p Fl(cvs-status-flags)p Fo(')240 2040
-y(Li)q(st)i(of)f(str)q(in)o(gs)g(t)o(o)h(s)q(en)o(d)f(t)o(o)g(`)p
-Fl(cvs)e(status)p Fo('.)25 b(Us)q(e)q(d)18 b(b)o(y)g(`)p
-Fl(cvs-mode-status)p Fo(')c(\(k)o(ey)j Fl(s)p Fo(,)h(s)q(ee)f(Sec-)240
-2103 y(t)o(ion)e(5.6)f([Get)n(t)o(in)o(g)h(info)h(a)o(b)q(ou)o(t)f
-(\014le)q(s],)h(page)f(12\).)0 2200 y(`)p Fl(cvs-auto-remove-handled)o
-Fo(')240 2262 y(If)h(t)n(hi)q(s)g(v)m(ar)q(ia)o(b)o(le)h(i)q(s)e(s)q
-(et)h(t)o(o)f(an)o(y)g(non-)p Fl(nil)h Fo(v)m(alue)h(`)p
-Fl(cvs-mode-remove-hand)o(led)p Fo(')12 b(will)17 b(b)q(e)f(calle)q(d)
-240 2324 y(ev)o(ery)j(t)o(im)o(e)g(y)o(ou)f(c)o(h)o(ec)o(k)h(in)h
-(\014le)q(s,)h(aft)o(er)d(t)n(h)o(e)h(c)o(h)o(ec)o(k-in)h(i)q(s)f(re)q
-(ady)l(.)30 b(See)20 b(Sect)o(ion)f(5.9)f([Remo)o(vin)o(g)240
-2386 y(h)o(an)o(dle)q(d)e(en)o(tr)q(ie)q(s],)f(page)g(14.)0
-2483 y(`)p Fl(cvs-auto-revert-after-c)o(ommit)p Fo(')240
-2545 y(If)f(t)n(hi)q(s)g(v)m(ar)q(ia)o(b)o(le)h(i)q(s)f(s)q(et)g(t)o(o)
-f(an)o(y)h(non-`)p Fl(nil)p Fo(')f(v)m(alue)i(an)o(y)e(bu\013ers)h(y)o
-(ou)g(h)o(a)o(v)o(e)f(t)n(h)o(a)o(t)g(vi)q(s)q(it)h(a)f(\014le)i(t)n(h)
-o(a)o(t)e(i)q(s)240 2608 y(commit)n(t)o(e)q(d)j(will)i(b)q(e)e(a)n(u)o
-(t)o(om)o(a)o(t)o(ically)h(rev)o(ert)o(e)q(d.)22 b(Thi)q(s)16
-b(v)m(ar)q(ia)o(b)o(le)i(i)q(s)e(d)o(ef)q(a)n(ul)o(t)h(`)p
-Fl(t)p Fo('.)22 b(See)16 b(Sect)o(ion)h(5.4)240 2670
-y([Commit)n(t)o(in)o(g)e(c)o(h)o(an)o(ge)q(s],)g(page)g(11.)p
-eop
-%%Page: 19 21
-19 20 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(6:)20 b(Cust)o(omiza)o(t)o(ion)
-1390 b(19)0 183 y(`)p Fl(cvs-update-prog-output-)o(skip-reg)o(exp)p
-Fo(')240 246 y(Th)o(e)20 b(`)p Fl(-u)p Fo(')g(\015ag)g(in)h(t)n(h)o(e)g
-(`)p Fl(modules)p Fo(')e(\014le)i(can)g(b)q(e)f(us)q(e)q(d)h(t)o(o)g
-(ru)o(n)g(a)f(comm)o(an)o(d)g(wh)o(en)o(ev)o(er)h(a)f(`)p
-Fl(cvs)240 308 y(update)p Fo(')12 b(i)q(s)h(p)q(erform)o(e)q(d)g(\(s)q
-(ee)g(cvs\(5\)\).)18 b(Thi)q(s)c(regexp)f(i)q(s)g(us)q(e)q(d)h(t)o(o)f
-(s)q(e)q(arc)o(h)f(for)h(t)n(h)o(e)g(last)g(lin)o(e)i(in)f(t)n(h)o(a)o
-(t)240 370 y(ou)o(t)o(pu)o(t.)20 b(It)14 b(i)q(s)f(norm)o(ally)h(s)q
-(et)g(t)o(o)f(`)p Fl("$")p Fo('.)18 b(Th)o(a)o(t)13 b(s)q(et)n(t)o(in)o
-(g)g(i)q(s)h(only)g(correct)f(if)h(t)n(h)o(e)g(comm)o(an)o(d)f(ou)o(t)o
-(pu)o(t)o(s)240 432 y(not)n(hin)o(g.)22 b(Not)o(e)15
-b(t)n(h)o(a)o(t)g(p)q(cl-cvs)i(will)h(get)d(v)o(ery)h(confus)q(e)q(d)g
-(if)g(t)n(h)o(e)g(comm)o(an)o(d)f(ou)o(t)o(pu)o(t)o(s)i
-Fh(an)o(yt)n(hin)o(g)j Fo(t)o(o)240 495 y(`)p Fl(stderr)p
-Fo('.)0 582 y(`)p Fl(cvs-cvsroot)p Fo(')240 644 y(Thi)q(s)d(v)m(ar)q
-(ia)o(b)o(le)h(can)f(b)q(e)g(s)q(et)f(t)o(o)h(o)o(v)o(err)q(id)o(e)g(`)
-p Fl(CVSROOT)p Fo('.)23 b(It)17 b(sh)o(ould)g(b)q(e)g(a)g(str)q(in)o
-(g.)24 b(If)17 b(it)g(i)q(s)g(s)q(et)g(t)n(h)o(en)240
-706 y(ev)o(eryt)o(im)o(e)c(a)h(cvs)f(comm)o(an)o(d)g(i)q(s)h(ru)o(n)g
-(it)g(will)h(b)q(e)f(calle)q(d)h(as)e(`)p Fl(cvs)i(-d)g
-Fh(cvs-cvsro)q(ot)q Fi(:)8 b(:)g(:)m Fo(')13 b(Thi)q(s)h(can)g(b)q(e)
-240 769 y(us)q(eful)i(if)g(y)o(our)f(s)q(it)o(e)f(h)o(as)h(s)q(ev)o
-(eral)h(rep)q(o)q(s)q(it)o(or)q(ie)q(s.)0 856 y(`)p Fl(TMPDIR)p
-Fo(')70 b(Pcl-cvs)21 b(us)q(e)q(s)e(t)n(hi)q(s)h Fh(en)o(vironm)o(en)o
-(t)g(v)m(ar)q(ia)o(b)o(le)j Fo(t)o(o)c(d)o(ecid)o(e)j(wh)o(ere)e(t)o(o)
-f(pu)o(t)h(t)n(h)o(e)f(t)o(emp)q(orary)g(\014le)q(s)i(it)240
-918 y(n)o(ee)q(ds.)g(It)15 b(d)o(ef)q(a)n(ul)o(t)o(s)i(t)o(o)e(`)p
-Fl(/tmp)p Fo(')e(if)j(it)f(i)q(s)h(not)f(s)q(et.)0 1005
-y(`)p Fl(cvs-commit-buffer-requi)o(re-final)o(-newlin)o(e)p
-Fo(')240 1067 y(Wh)o(en)g(y)o(ou)g(en)o(t)o(er)f(a)h(log)g(m)o(e)q(s)q
-(sage)f(in)i(t)n(h)o(e)f(`)p Fl(*cvs-commit-message*)p
-Fo(')d(bu\013er)j(p)q(cl-cvs)h(will)h(nor-)240 1130 y(m)o(ally)d(a)n(u)
-o(t)o(om)o(a)o(t)o(ically)g(ins)q(ert)g(a)f(trailin)o(g)i(n)o(ewlin)o
-(e,)g(u)o(nle)q(s)q(s)f(t)n(h)o(ere)g(alre)q(ady)f(i)q(s)g(on)o(e.)20
-b(Thi)q(s)13 b(b)q(e)o(h)o(a)o(vior)240 1192 y(can)j(b)q(e)h(con)o(tro)
-o(lle)q(d)g(via)g(`)p Fl(cvs-commit-buffer-requ)o(ire-fin)o(al-newli)o
-(ne)p Fo('.)j(If)c(it)h(i)q(s)f(`)p Fl(t)p Fo(')f(\(t)n(h)o(e)240
-1254 y(d)o(ef)q(a)n(ul)o(t)h(b)q(e)o(h)o(a)o(vior\),)e(a)h(n)o(ewlin)o
-(e)i(will)f(alw)o(ays)f(b)q(e)g(ap)o(p)q(en)o(d)o(e)q(d.)21
-b(If)15 b(it)h(i)q(s)f(`)p Fl(nil)p Fo(',)e(n)o(ewlin)o(e)q(s)k(will)g
-(n)o(ev)o(er)240 1316 y(b)q(e)k(ap)o(p)q(en)o(d)o(e)q(d.)38
-b(An)o(y)22 b(ot)n(h)o(er)e(v)m(alue)j(ca)n(us)q(e)q(s)e(p)q(cl-cvs)i
-(t)o(o)e(ask)f(t)n(h)o(e)h(us)q(er)h(wh)o(en)o(ev)o(er)f(t)n(h)o(ere)g
-(i)q(s)g(no)240 1379 y(trailin)o(g)c(n)o(ewlin)o(e)f(in)g(t)n(h)o(e)f
-(commit)h(m)o(e)q(s)q(sage)e(bu\013er.)0 1466 y(`)p Fl
-(cvs-sort-ignore-file)p Fo(')240 1528 y(If)20 b(t)n(hi)q(s)g(v)m(ar)q
-(ia)o(b)o(le)h(i)q(s)e(s)q(et)g(t)o(o)h(an)o(y)f(non-`)p
-Fl(nil)p Fo(')g(v)m(alue)i(t)n(h)o(e)e(`)p Fl(.cvsignore)p
-Fo(')f(will)j(alw)o(ays)e(b)q(e)g(sort)o(e)q(d)240 1590
-y(wh)o(en)o(ev)o(er)c(y)o(ou)g(us)q(e)h(`)p Fl(cvs-mode-ignore)p
-Fo(')c(t)o(o)j(add)g(a)g(\014le)h(t)o(o)f(it.)20 b(Thi)q(s)c(o)o(pt)o
-(ion)f(i)q(s)g(on)g(b)o(y)g(d)o(ef)q(a)n(ul)o(t.)p eop
-%%Page: 20 22
-20 21 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(7:)20 b(F)l(u)o(t)o(ure)15
-b(enh)o(ancem)o(en)o(t)o(s)1257 b(20)0 183 y Fm(7)41
-b(F)-7 b(u)o(t)n(ure)14 b(enh)n(ancem)n(en)n(t)o(s)62
-369 y Fo(Pcl-cvs)k(i)q(s)f(st)o(ill)i(u)o(n)o(d)o(er)f(d)o(ev)o(elo)o
-(pm)o(en)o(t)f(an)o(d)g(n)o(ee)q(ds)h(a)e(n)n(u)o(m)n(b)q(er)i(of)e
-(enh)o(ancem)o(en)o(t)o(s)i(t)o(o)f(b)q(e)g(calle)q(d)h(comp)o(let)o
-(e.)0 431 y(Belo)o(w)h(i)q(s)h(m)o(y)e(curren)o(t)h(wi)q(sh-li)q(st)h
-(for)f(fu)o(t)o(ure)g(rele)q(as)q(e)q(s)g(of)g(p)q(cl-cvs.)33
-b(Ple)q(as)q(e,)19 b(let)h(m)o(e)f(kno)o(w)f(whic)o(h)i(of)f(t)n(h)o(e)
-q(s)q(e)0 493 y(fe)q(a)o(t)o(ure)q(s)c(y)o(ou)h(w)o(an)o(t)f(mo)q(st.)
-21 b(Th)o(ey)16 b(are)g(li)q(st)o(e)q(d)h(b)q(elo)o(w)f(in)h(ap)o(pro)o
-(xim)o(a)o(t)o(ely)f(t)n(h)o(e)g(ord)o(er)g(t)n(h)o(a)o(t)f(I)i(curren)
-o(t)n(ly)g(t)n(hink)g(I)0 556 y(will)g(imp)o(lem)o(en)o(t)f(t)n(h)o(em)
-f(in.)37 693 y Fn(\017)30 b Fo(Rewr)q(it)n(t)o(en)12
-b(pars)q(er)f(co)q(d)o(e.)20 b(Th)o(ere)12 b(are)f(m)o(an)o(y)g(s)q(it)
-o(ua)o(t)o(ions)g(wh)o(ere)h(p)q(cl-cvs)h(will)g(f)q(ail)f(t)o(o)f
-(recognize)i(t)n(h)o(e)e(ou)o(t)o(pu)o(t)90 755 y(f)q(rom)j(CVS.)h(Th)o
-(e)g(s)q(it)o(ua)o(t)o(ion)g(could)h(b)q(e)f(gre)q(a)o(t)n(ly)g(incre)q
-(as)q(e)q(d.)37 829 y Fn(\017)30 b Fo(`)p Fl(cvs-status)p
-Fo('.)17 b(Thi)q(s)d(will)h(ru)o(n)g(`)p Fl(cvs)f(status)p
-Fo(')f(in)h(a)g(direct)o(ory)g(an)o(d)f(pro)q(d)o(u)o(ce)i(a)e
-(bu\013er)h(t)n(h)o(a)o(t)e(lo)q(oks)i(pret)n(t)o(y)90
-892 y(m)n(u)o(c)o(h)d(lik)o(e)g(t)n(h)o(e)g(curren)o(t)f(*cvs*)g
-(bu\013er.)19 b(Th)o(a)o(t)9 b(bu\013er)i(will)h(includ)o(e)i(inform)o
-(a)o(t)o(ion)c(for)g(all)h(v)o(ers)q(ion-con)o(tro)o(lle)q(d)90
-954 y(\014le)q(s.)21 b(\(Th)o(ere)13 b(will)i(b)q(e)f(a)f(s)q(imp)o(le)
-i(k)o(eystrok)o(e)e(t)o(o)g(remo)o(v)o(e)g(all)h Fl(")p
-Fo(u)o(nin)o(t)o(ere)q(st)o(in)o(g)p Fl(")h Fo(\014le)q(s,)g(t)n(h)o(a)
-o(t)d(i)q(s,)i(\014le)q(s)h(t)n(h)o(a)o(t)d(are)90 1016
-y Fl(")p Fo(Up-t)o(o-d)o(a)o(t)o(e)p Fl(")p Fo(\).)19
-b(In)c(t)n(hi)q(s)f(n)o(ew)g(bu\013er)g(y)o(ou)g(will)i(b)q(e)e(a)o(b)o
-(le)h(t)o(o)f(up)q(d)o(a)o(t)o(e)g(a)g(\014le,)h(commit)f(a)g(\014le,)h
-(et)f(c.)19 b(Th)o(e)14 b(big)90 1078 y(win)g(wit)n(h)g(t)n(hi)q(s)g(i)
-q(s)f(t)n(h)o(a)o(t)g(y)o(ou)g(will)i(b)q(e)e(a)o(b)o(le)i(t)o(o)e(w)o
-(a)o(t)o(c)o(h)f(t)n(h)o(e)i(di\013erence)q(s)h(b)q(et)o(w)o(een)e(y)o
-(our)g(curren)o(t)g(w)o(or)o(kin)o(g)h(\014le)90 1141
-y(an)o(d)h(t)n(h)o(e)h(h)o(e)q(ad)f(revi)q(s)q(ion)g(in)i(t)n(h)o(e)e
-(rep)q(o)q(s)q(it)o(ory)g(b)q(efore)g(y)o(ou)g(up)q(d)o(a)o(t)o(e)h(t)n
-(h)o(e)f(\014le,)h(an)o(d)f(y)o(ou)g(can)h(t)n(h)o(en)g(c)o(h)o(o)q(o)q
-(s)q(e)e(t)o(o)90 1203 y(up)q(d)o(a)o(t)o(e)i(it)f(or)g(let)g(it)h(w)o
-(ait)f(for)f(a)h(while)i(lon)o(ger.)37 1277 y Fn(\017)30
-b Fo(Log)12 b(mo)q(d)o(e.)19 b(Wh)o(en)13 b(t)n(hi)q(s)f(mo)q(d)o(e)g
-(i)q(s)h(\014ni)q(sh)o(e)q(d)g(y)o(ou)f(will)i(b)q(e)e(a)o(b)o(le)h(t)o
-(o)f(mo)o(v)o(e)f(arou)o(n)o(d)h(\(us)q(in)o(g)h Fl(n)f
-Fo(an)o(d)g Fl(p)p Fo(\))f(b)q(et)o(w)o(een)90 1340 y(t)n(h)o(e)19
-b(revi)q(s)q(ions)g(of)f(a)g(\014le,)j(m)o(ar)o(k)d(t)o(w)o(o)f(of)i(t)
-n(h)o(em,)g(an)o(d)f(ru)o(n)i(a)e(di\013)h(b)q(et)o(w)o(een)f(t)n(h)o
-(em.)30 b(Y)l(ou)19 b(will)i(b)q(e)e(a)o(b)o(le)g(t)o(o)90
-1402 y(hid)o(e)c(branc)o(h)o(e)q(s)e(\(s)q(imilar)h(t)o(o)f(t)n(h)o(e)g
-(w)o(ay)f(y)o(ou)h(can)g(hid)o(e)i(su)n(b-paragraphs)e(in)h(ou)o(t)n
-(lin)o(e-mo)q(d)o(e\))h(an)o(d)e(do)g(m)o(erge)q(s)90
-1464 y(b)q(et)o(w)o(een)i(revi)q(s)q(ions.)20 b(Ot)n(h)o(er)c(id)o(e)q
-(as)f(a)o(b)q(ou)o(t)g(t)n(hi)q(s)h(are)f(w)o(elcom)o(e.)37
-1539 y Fn(\017)30 b Fo(Th)o(e)17 b(curren)o(t)h(mo)q(d)o(el)g(for)f(m)o
-(ar)o(ks)g(in)i(t)n(h)o(e)e(*cvs*)g(bu\013er)h(s)q(eems)f(t)o(o)g(b)q
-(e)h(confus)q(in)o(g.)27 b(I)18 b(am)f(cons)q(id)o(er)q(in)o(g)i(t)o(o)
-90 1601 y(us)q(e)14 b(t)n(h)o(e)g(VM)f(mo)q(d)o(el)i(inst)o(e)q(ad,)e
-(wh)o(ere)h(m)o(ar)o(ks)f(are)h(norm)o(ally)g(in)o(act)o(iv)o(e.)20
-b(T)l(o)13 b(act)o(iv)m(a)o(t)o(e)h(t)n(h)o(e)f(m)o(ar)o(k,)h(y)o(ou)f
-(i)q(s)q(sue)90 1663 y(a)g(comm)o(an)o(d)h(lik)o(e)h(`)p
-Fl(cvs-mode-next-comman)o(d-uses-)o(marks)p Fo(')o(.)i(I)d(migh)o(t)f
-(imp)o(lem)o(en)o(t)i(a)f(\015ag)f(so)h(t)n(h)o(a)o(t)e(y)o(ou)90
-1725 y(can)j(us)q(e)h(e)q(it)n(h)o(er)g(v)o(ers)q(ion.)k(F)l(ee)q(dbac)
-o(k)c(on)f(t)n(hi)q(s)g(b)q(efore)g(I)h(st)o(art)e(co)q(din)o(g)i(it)g
-(i)q(s)f(v)o(ery)g(w)o(elcom)o(e.)37 1800 y Fn(\017)30
-b Fo(It)23 b(sh)o(ould)h(b)q(e)e(p)q(o)q(s)q(s)q(ib)o(le)i(t)o(o)f(ru)o
-(n)g(comm)o(an)o(ds)f(su)o(c)o(h)h(as)f(`)p Fl(cvs)15
-b(log)p Fo(',)23 b(`)p Fl(cvs)15 b(status)p Fo(')21 b(an)o(d)i(`)p
-Fl(cvs)14 b(commit)p Fo(')90 1862 y(direct)n(ly)21 b(f)q(rom)e(a)h
-(bu\013er)g(con)o(t)o(ainin)o(g)g(a)g(\014le,)h(inst)o(e)q(ad)f(of)f(h)
-o(a)o(vin)o(g)h(t)o(o)g(`)p Fl(cvs-update)p Fo('.)32
-b(If)20 b(t)n(h)o(e)f(direct)o(ory)90 1924 y(con)o(t)o(ains)d(m)o(an)o
-(y)g(\014le)q(s)h(t)n(h)o(e)f(`)p Fl(cvs-update)p Fo(')e(can)i(t)o(ak)o
-(e)g(quit)o(e)g(som)o(e)g(t)o(im)o(e,)g(e)q(sp)q(ecially)i(on)e(a)g
-(slo)o(w)g(m)o(ac)o(hin)o(e.)90 1987 y(I)f(p)o(lan)o(e)q(d)i(t)o(o)d
-(pu)o(t)h(t)n(h)o(e)q(s)q(e)g(kin)o(d)h(of)e(comm)o(an)o(ds)g(on)h(t)n
-(h)o(e)g(pre\014x)g Fl(C-c)g(C-v)p Fo(,)f(bu)o(t)h(t)n(h)o(a)o(t)f(t)o
-(ur)q(n)o(e)q(d)g(ou)o(t)h(t)o(o)f(b)q(e)h(us)q(e)q(d)90
-2049 y(b)o(y)j(for)g(inst)o(ance)h(c)p Fl(++)p Fo(-mo)q(d)o(e.)29
-b(If)19 b(y)o(ou)e(h)o(a)o(v)o(e)h(an)o(y)g(sugge)q(st)o(ions)g(for)g
-(a)f(b)q(et)n(t)o(er)h(pre\014x)h(k)o(ey)l(,)g(p)o(le)q(as)q(e)g(let)f
-(m)o(e)90 2111 y(kno)o(w.)37 2186 y Fn(\017)30 b Fo(Incre)q(as)q(e)q(d)
-15 b(robustn)o(e)q(s)q(s.)k(F)l(or)13 b(inst)o(ance,)i(y)o(ou)f(can)g
-(not)g(curren)o(t)n(ly)g(pre)q(s)q(s)g Fl(C-g)g Fo(wh)o(en)g(y)o(ou)g
-(are)g(en)o(t)o(er)q(in)o(g)g(t)n(h)o(e)90 2248 y(d)o(e)q(scr)q(ipt)o
-(ion)j(of)d(a)h(\014le)h(t)n(h)o(a)o(t)f(y)o(ou)f(are)h(addin)o(g)i
-(wit)n(h)o(ou)o(t)e(confus)q(in)o(g)h(p)q(cl-cvs.)37
-2322 y Fn(\017)30 b Fo(Sup)o(p)q(ort)15 b(for)g(m)n(ul)o(t)o(ip)o(le)j
-(act)o(iv)o(e)d(*cvs*)g(bu\013ers.)37 2397 y Fn(\017)30
-b Fo(Dire)q(d)21 b(sup)o(p)q(ort.)36 b(I)21 b(h)o(a)o(v)o(e)f(an)h(exp)
-q(er)q(im)o(en)o(t)o(al)g(`)p Fl(dired-cvs.el)p Fo(')d(t)n(h)o(a)o(t)h
-(w)o(or)o(ks)h(t)o(oget)n(h)o(er)h(wit)n(h)g(CVS)f(1.2.)90
-2459 y(Unfort)o(u)o(n)o(a)o(t)o(ely)15 b(I)g(wrot)o(e)g(it)g(on)g(t)o
-(o)o(p)g(of)g(a)g(non-st)o(an)o(d)o(ard)g(`)p Fl(dired.el)p
-Fo(',)e(so)i(it)g(m)n(ust)g(b)q(e)g(rewr)q(it)n(t)o(en.)37
-2533 y Fn(\017)30 b Fo(An)15 b(a)o(bilit)o(y)i(t)o(o)e(s)q(en)o(d)g(us)
-q(er-sup)o(p)o(lie)q(d)j(o)o(pt)o(ions)d(t)o(o)g(all)h(t)n(h)o(e)f(cvs)
-h(comm)o(an)o(ds.)37 2608 y Fn(\017)30 b Fo(Pcl-cvs)19
-b(i)q(s)f(not)f(a)o(t)h(all)g(clev)o(er)h(a)o(b)q(ou)o(t)f(wh)o(a)o(t)f
-(it)h(sh)o(ould)h(do)f(wh)o(en)g(`)p Fl(cvs)c(update)p
-Fo(')j(ru)o(ns)i(a)e(program)g(\(d)o(ue)90 2670 y(t)o(o)f(t)n(h)o(e)g
-(`)p Fl(-u)p Fo(')f(o)o(pt)o(ion)h(in)h(t)n(h)o(e)g(`)p
-Fl(modules)p Fo(')d(\014le)j(|)g(s)q(ee)g(`)p Fl(cvs\(5\))p
-Fo('\).)k(Th)o(e)16 b(curren)o(t)g(rele)q(as)q(e)g(us)q(e)q(s)h(a)f
-(regexp)g(t)o(o)p eop
-%%Page: 21 23
-21 22 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(7:)20 b(F)l(u)o(t)o(ure)15
-b(enh)o(ancem)o(en)o(t)o(s)1257 b(21)90 183 y(s)q(e)q(arc)o(h)17
-b(for)f(t)n(h)o(e)h(en)o(d.)27 b(A)o(t)17 b(t)n(h)o(e)g(v)o(ery)g(le)q
-(ast)g(t)n(h)o(a)o(t)g(regexp)g(sh)o(ould)h(b)q(e)g(con\014gure)q(d)g
-(for)f(di\013eren)o(t)g(mo)q(d)o(ule)q(s.)90 246 y(T)l(ell)d(m)o(e)e
-(if)h(y)o(ou)g(h)o(a)o(v)o(e)f(an)o(y)g(id)o(e)q(a)h(a)o(b)q(ou)o(t)f
-(wh)o(a)o(t)g(i)q(s)h(t)n(h)o(e)f(r)q(igh)o(t)g(t)n(hin)o(g)i(t)o(o)e
-(do.)19 b(In)13 b(a)g(p)q(erfect)f(w)o(orld)h(t)n(h)o(e)f(program)90
-308 y(sh)o(ould)k(also)f(b)q(e)h(allo)o(w)o(e)q(d)f(t)o(o)g(pr)q(in)o
-(t)g(t)o(o)g(`)p Fl(stderr)p Fo(')f(wit)n(h)o(ou)o(t)i(ca)n(us)q(in)o
-(g)g(p)q(cl-cvs)g(t)o(o)f(crash.)62 457 y(If)e(y)o(ou)e(mi)q(s)q(s)h
-(som)o(et)n(hin)o(g)g(in)h(t)n(hi)q(s)f(wi)q(sh-li)q(st,)i(let)e(m)o(e)
-g(kno)o(w!)18 b(I)13 b(don't)e(promi)q(s)q(e)h(t)n(h)o(a)o(t)f(I)i
-(will)g(wr)q(it)o(e)f(it,)g(bu)o(t)h(I)f(will)0 519 y(a)o(t)i(le)q(ast)
-h(try)f(t)o(o)g(co)q(ordin)o(a)o(t)o(e)h(t)n(h)o(e)g(e\013ort)o(s)f(of)
-g(m)o(akin)o(g)i(a)e(go)q(o)q(d)h(Em)o(acs)f(f)q(ron)o(t)g(en)o(d)h(t)o
-(o)g(CVS.)f(See)i(See)f(Ch)o(apt)o(er)f(8)0 582 y([Bugs],)g(page)h(22)g
-(for)f(inform)o(a)o(t)o(ion)h(a)o(b)q(ou)o(t)g(h)o(o)o(w)g(t)o(o)g(re)q
-(ac)o(h)g(m)o(e.)62 719 y(So)j(f)q(ar,)g(I)h(h)o(a)o(v)o(e)e(wr)q(it)n
-(t)o(en)h(mo)q(st)f(of)h(p)q(cl-cvs)i(in)f(m)o(y)e(all-t)o(o-rare)i
-(spare)f(t)o(im)o(e.)29 b(If)18 b(y)o(ou)g(w)o(an)o(t)f(p)q(cl-cvs)j(t)
-o(o)e(b)q(e)0 781 y(d)o(ev)o(elo)o(p)q(e)q(d)d(f)q(ast)o(er)e(y)o(ou)h
-(can)g(wr)q(it)o(e)g(a)g(con)o(tract)f(wit)n(h)h(Sign)n(u)o(m)i(Sup)o
-(p)q(ort)e(t)o(o)g(do)g(t)n(h)o(e)g(ext)o(ens)q(ion.)20
-b(Y)l(ou)14 b(can)h(re)q(ac)o(h)0 843 y(Sign)n(u)o(m)f(Sup)o(p)q(ort)f
-(b)o(y)g(em)o(ail)h(t)o(o)f(`)p Fl(info@signum.se)p Fo(')d(or)i(via)i
-(m)o(ail)f(t)o(o)g(Sign)n(u)o(m)h(Sup)o(p)q(ort)f(AB,)g(Bo)o(x)g(2044,)
-e(S-580)0 906 y(02)k(Link)o(o)o(pin)o(g,)h(Sw)o(e)q(d)o(en.)21
-b(Ph)o(on)o(e:)f Fl(+)p Fo(46)14 b(\(0\))h(13)f(-)i(21)e(46)h(00.)k(F)l
-(ax:)h Fl(+)p Fo(46)14 b(\(0\))g(13)h(-)g(21)g(47)f(00.)p
-eop
-%%Page: 22 24
-22 23 bop 0 -58 a Fo(Ch)o(apt)o(er)14 b(8:)20 b(Bugs)15
-b(\(kno)o(wn)g(an)o(d)g(u)o(nkno)o(wn\))1117 b(22)0 183
-y Fm(8)41 b(Bugs)15 b(\(kno)n(wn)g(an)n(d)g(u)o(nkno)n(wn\))62
-370 y Fo(If)d(y)o(ou)f(\014n)o(d)h(a)f(bug)g(or)g(mi)q(sfe)q(a)o(t)o
-(ure,)g(don't)f(h)o(e)q(s)q(it)o(a)o(t)o(e)h(t)o(o)g(t)o(ell)h(m)o(e!)
-19 b(Sen)o(d)12 b(em)o(ail)g(t)o(o)f(`)p Fl(ceder@lysator.liu.se)p
-Fo(')o(.)62 507 y(If)19 b(y)o(ou)f(h)o(a)o(v)o(e)f(id)o(e)q(as)i(for)f
-(impro)o(v)o(em)o(en)o(t)o(s,)g(or)g(if)h(y)o(ou)e(h)o(a)o(v)o(e)h(wr)q
-(it)n(t)o(en)g(som)o(e)g(ext)o(ens)q(ions)g(t)o(o)g(t)n(hi)q(s)h(pac)o
-(kage,)f(I)0 569 y(w)o(ould)e(lik)o(e)g(t)o(o)f(h)o(e)q(ar)f(f)q(rom)g
-(y)o(ou.)20 b(I)c(h)o(o)o(p)q(e)e(t)n(h)o(a)o(t)h(y)o(ou)f(\014n)o(d)i
-(t)n(hi)q(s)f(pac)o(kage)g(us)q(eful!)62 706 y(Belo)o(w)h(i)q(s)f(a)g
-(part)o(ial)g(li)q(st)h(of)f(curren)o(t)n(ly)g(kno)o(wn)g(prob)o(lems)i
-(wit)n(h)e(p)q(cl-cvs)i(v)o(ers)q(ion)f(1.05.)0 856 y(Commit)f(ca)n(us)
-q(e)q(s)h(Em)o(acs)e(t)o(o)h(h)o(an)o(g)240 918 y(Em)o(acs)d(w)o(ait)o
-(s)g(for)g(t)n(h)o(e)h(`)p Fl(cvs)h(commit)p Fo(')d(comm)o(an)o(d)h(t)o
-(o)g(\014ni)q(sh)i(b)q(efore)e(y)o(ou)g(can)h(do)f(an)o(yt)n(hin)o(g.)
-20 b(If)12 b(y)o(ou)240 980 y(st)o(art)j(a)g(bac)o(kgrou)o(n)o(d)h(job)
-g(f)q(rom)f(t)n(h)o(e)h(loginfo)g(\014le)h(y)o(ou)f(m)n(ust)g(t)o(ak)o
-(e)e(care)i(t)n(h)o(a)o(t)f(it)h(clo)q(s)q(e)q(s)h(`)p
-Fl(stdout)p Fo(')240 1043 y(an)o(d)12 b(`)p Fl(stderr)p
-Fo(')f(if)h(y)o(ou)g(do)g(not)g(w)o(an)o(t)f(t)o(o)h(w)o(ait)g(for)g
-(it.)19 b(\(Y)l(ou)12 b(do)g(t)n(h)o(a)o(t)f(wit)n(h)i(`)p
-Fl(background-command)240 1105 y(&>-)i(2&>-)f(&)p Fo(')h(if)h(y)o(ou)f
-(are)f(st)o(art)o(in)o(g)h(`)p Fl(background-command)p
-Fo(')d(f)q(rom)i(a)h(`)p Fl(/bin/sh)p Fo(')e(sh)o(ell)k(scr)q(ipt\).)
-240 1180 y(Y)l(our)d(em)o(acs)g(will)h(also)f(h)o(an)o(g)g(if)h(t)n(h)o
-(ere)f(w)o(as)f(a)g(lo)q(c)o(k)i(\014le)g(in)g(t)n(h)o(e)f(rep)q(o)q(s)
-q(it)o(ory)l(.)19 b(In)14 b(t)n(hi)q(s)g(cas)q(e)g(y)o(ou)g(can)240
-1242 y(t)o(yp)q(e)h Fl(C-g)f Fo(t)o(o)h(get)g(con)o(tro)o(l)g(o)o(v)o
-(er)g(y)o(our)g(em)o(acs)g(again.)0 1329 y(Nam)o(e)g(clash)h(in)g(Em)o
-(acs)e(19)240 1391 y(Thi)q(s)k(i)q(s)f(re)q(ally)h(a)f(bug)g(in)h(Elib)
-h(or)e(t)n(h)o(e)g(Em)o(acs)g(19)g(di)q(str)q(ibu)o(t)o(ion.)27
-b(Bot)n(h)17 b(Elib)i(an)o(d)e(Em)o(acs)g(19.6)240 1453
-y(t)n(hrough)f(a)o(t)f(le)q(ast)g(19.10)f(con)o(t)o(ains)i(a)g(\014le)g
-(n)o(am)o(e)q(d)g(`)p Fl(cookie.el)p Fo('.)k(On)o(e)c(of)g(t)n(h)o(e)g
-(\014le)q(s)h(will)g(h)o(a)o(v)o(e)e(t)o(o)240 1516 y(b)q(e)g(ren)o(am)
-o(e)q(d,)g(an)o(d)g(w)o(e)g(are)g(curren)o(t)n(ly)h(n)o(egot)o(ia)o(t)o
-(in)o(g)f(a)o(b)q(ou)o(t)g(whic)o(h)h(of)e(t)n(h)o(e)i(\014le)q(s)g(t)o
-(o)f(ren)o(am)o(e.)0 1603 y(Comm)o(an)o(ds)f(while)j(cvs-up)q(d)o(a)o
-(t)o(e)f(i)q(s)f(ru)o(nnin)o(g)240 1665 y(It)j(i)q(s)g(p)q(o)q(s)q(s)q
-(ib)o(le)h(t)o(o)f(t)o(yp)q(e)g(comm)o(an)o(ds)f(in)i(t)n(h)o(e)f
-(*cvs*)g(bu\013er)g(while)h(t)n(h)o(e)f(up)q(d)o(a)o(t)o(e)h(i)q(s)f
-(ru)o(nnin)o(g,)i(bu)o(t)240 1727 y(error)15 b(m)o(e)q(s)q(sage)q(s)f
-(i)q(s)h(all)i(t)n(h)o(a)o(t)d(y)o(ou)h(will)i(get.)i(Th)o(e)c(error)g
-(m)o(e)q(s)q(sage)q(s)f(sh)o(ould)i(b)q(e)g(b)q(et)n(t)o(er.)0
-1815 y(Un)o(exp)q(ect)o(e)q(d)g(ou)o(t)o(pu)o(t)g(f)q(rom)e(CVS)240
-1877 y(Un)o(exp)q(ect)o(e)q(d)19 b(ou)o(t)o(pu)o(t)g(f)q(rom)e(CVS)h
-(confus)q(e)q(s)h(p)q(cl-cvs.)30 b(It)18 b(will)i(curren)o(t)n(ly)f
-(cre)q(a)o(t)o(e)e(a)h(bug)g(rep)q(ort)240 1939 y(t)n(h)o(a)o(t)c(y)o
-(ou)h(can)g(m)o(ail)h(t)o(o)f(m)o(e.)20 b(It)15 b(sh)o(ould)h(do)f(som)
-o(et)n(hin)o(g)h(more)f(civilize)q(d.)p eop
-%%Page: 23 25
-23 24 bop 0 -58 a Fo(A)m(p)o(p)q(en)o(dix)17 b(A:)e(GNU)g(GENERAL)g
-(PUBLIC)h(LICENSE)891 b(23)0 183 y Fm(A)l(p)n(p)q(en)n(dix)12
-b(A)41 b(GNU)15 b(GENERAL)i(PUBLIC)f(LICENSE)p eop
-%%Page: 24 26
-24 25 bop 0 -58 a Fo(F)l(u)o(nct)o(ion)16 b(an)o(d)f(V)l(ar)q(ia)o(b)o
-(le)i(In)o(d)o(ex)1343 b(24)0 183 y Fm(F)-7 b(u)o(nct)n(ion)14
-b(an)n(d)h(V)-7 b(ar)q(ia)n(b)o(le)15 b(In)n(d)o(ex)0
-416 y Fk(B)0 482 y Fg(bury-buffe)o(r)t Ff(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
-b Fe(16)0 590 y Fk(C)0 656 y Fg(cookie-nex)o(t-)o(coo)o(ki)o(e)t
-Ff(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)16
-b Fe(10)0 715 y Fg(cookie-pre)o(vi)o(ous)o(-c)o(ook)o(ie)7
-b Ff(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fe(10)0 773
-y(cvs-a)o(u)o(t)o(o-remo)o(v)o(e-h)o(an)o(dle)q(d)d(\(v)n(ar)q(ia)o
-(ble\))7 b Ff(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)19 b Fe(18)0 831 y(cvs-a)o(u)o(t)o(o-rev)o(ert-aft)o
-(er-commit)c(\(v)n(ar)q(ia)o(ble\))s Ff(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)16 b Fe(11,)d(18)0 889 y Fg(cvs-byte-c)o(om)o(pil)o(e-)o
-(fil)o(es)7 b Ff(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b
-Fe(16)0 947 y(cvs-commit-bu\013er-require)q(-\014n)o(al)q(-n)o(ewli)q
-(n)o(e)c(\(v)n(ar)q(ia)o(ble\))7 b Ff(.)g(.)f(.)20 b
-Fe(18)0 1005 y(cvs-cvsro)q(ot)14 b(\(v)n(ar)q(ia)o(ble\))9
-b Ff(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21
-b Fe(18)0 1063 y Fg(cvs-delete)o(-l)o(ock)6 b Ff(.)t(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fe(10)0
-1121 y(cvs-di\013-\015ags)15 b(\(v)n(ar)q(ia)o(ble\))7
-b Ff(.)g(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b
-Fe(18)0 1180 y(cvs-di\013-ignore-m)o(arks)c(\(v)n(ar)q(ia)o(ble\))8
-b Ff(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-21 b Fe(14,)13 b(18)0 1238 y(cvs-eras)q(e-inpu)o(t-bu\013e)q(r)i(\(v)n
-(ar)q(ia)o(ble\))d Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)22 b Fe(11,)13 b(18)0 1296 y(cvs-inhibit-co)o(pyr)q
-(ight-m)o(e)q(ssage)j(\(v)n(ar)q(ia)o(ble\))9 b Ff(.)f(.)e(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(18)0 1354 y(cvs-log-\015ags)15
-b(\(v)n(ar)q(ia)o(ble\))c Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)22 b Fe(18)0 1412 y Fg(cvs-mode-a)o(ck)o(now)o(le)o(dge)6
-b Ff(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Fe(14)0
-1470 y Fg(cvs-mode-a)o(dd)8 b Ff(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Fe(13)0 1528
-y Fg(cvs-mode-a)o(dd)o(-ch)o(an)o(ge-)o(log)o(-e)o(ntr)o(y-)o(oth)o(er)
-o(-wi)o(ndo)o(w)7 b Ff(.)s(.)f(.)20 b Fe(12)0 1586 y
-Fg(cvs-mode-c)o(ha)o(nge)o(lo)o(g-c)o(omm)o(it)r Ff(.)t(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)16 b Fe(11)0 1644 y Fg(cvs-mode-c)o(om)o(mit)6
-b Ff(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20
-b Fe(11)0 1703 y Fg(cvs-mode-d)o(if)o(f-b)o(ac)o(kup)6
-b Ff(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Fe(14)0
-1761 y Fg(cvs-mode-d)o(if)o(f-c)o(vs)t Ff(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(14)0 1819 y Fg(cvs-mode-e)o(di)o
-(ff)8 b Ff(.)s(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)21 b Fe(15)0 1877 y Fg(cvs-mode-e)o(me)o(rge)6
-b Ff(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20
-b Fe(15)1015 416 y Fg(cvs-mode-fi)o(nd)o(-fi)o(le)s Ff(.)s(.)6
-b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(12)1015
-474 y Fg(cvs-mode-fi)o(nd)o(-fi)o(le-)o(ot)o(her)o(-w)o(ind)o(ow)t
-Ff(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17
-b Fe(12)1015 532 y Fg(cvs-mode-ig)o(no)o(re)7 b Ff(.)s(.)f(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Fe(14)1015
-590 y Fg(cvs-mode-lo)o(g)8 b Ff(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25 b Fe(12)1015 648
-y Fg(cvs-mode-ma)o(rk)6 b Ff(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fe(11)1015 706 y
-Fg(cvs-mode-ma)o(rk)o(-al)o(l-f)o(il)o(es)5 b Ff(.)s(.)i(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)19 b Fe(11)1015 764 y Fg(cvs-mode-re)o(mo)o(ve-)o(fil)o(e)6
-b Ff(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(13)1015
-823 y Fg(cvs-mode-re)o(mo)o(ve-)o(han)o(dl)o(ed)5 b Ff(.)s(.)i(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)19 b Fe(14)1015 881 y Fg(cvs-mode-re)o(ve)o(rt-)o(upd)o(at)
-o(ed-)o(bu)o(ffe)o(rs)t Ff(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)17 b Fe(16)1015 939 y Fg(cvs-mode-st)o(at)o(us)7
-b Ff(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Fe(12)1015 997 y Fg(cvs-mode-un)o(do)o(-lo)o(cal)o(-c)o(han)o(ge)o(s)
-9 b Ff(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)22 b Fe(13)1015 1055 y Fg(cvs-mode-un)o(ma)o(rk)7
-b Ff(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Fe(11)1015 1113 y Fg(cvs-mode-un)o(ma)o(rk-)o(all)o(-f)o(ile)o(s)s
-Ff(.)s(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)16 b Fe(11)1015 1171 y Fg(cvs-mode-un)o(ma)o
-(rk-)o(up)s Ff(.)s(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
-b Fe(11)1015 1229 y Fg(cvs-mode-up)o(da)o(te-)o(no-)o(pr)o(omp)o(t)s
-Ff(.)s(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)16 b Fe(10)1015 1287 y Fg(cvs-old-edi)o(ff)o
-(-in)o(ter)o(fa)o(ce)5 b Ff(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Fe(15)1015 1346 y(cvs-sort-ignore-\014le)d(\(v)n(ar)q(ia)o(ble\))8
-b Ff(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(18)1015 1404 y(cvs-st)o(a)o(t)o
-(us-\015ags)15 b(\(v)n(ar)q(ia)o(ble\))d Ff(.)6 b(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)24 b Fe(18)1015 1462 y Fg(cvs-update)5 b Ff(.)s(.)h(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Fe(10)1015 1520 y(cvs-up)q(d)o(a)o(t)o(e-prog-out)o(put-ski)q
-(p-regex)q(p)d(\(v)n(ar)q(ia)o(ble\))11 b Ff(.)6 b(.)g(.)g(.)g(.)h(.)23
-b Fe(18)1015 1632 y Fk(R)1015 1698 y Fg(run-ediff-f)o(ro)o(m-c)o(vs-)o
-(bu)o(ffe)o(r)s Ff(.)s(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)16 b Fe(15)1015
-1810 y Fk(T)1015 1877 y Fe(TMPDIR)e(\(en)o(vironm)o(en)o(t)g(v)n(ar)q
-(ia)o(ble\))6 b Ff(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)19 b Fe(18)p eop
-%%Page: 25 27
-25 26 bop 0 -58 a Fo(Concept)15 b(In)o(d)o(ex)1618 b(25)0
-183 y Fm(Concept)16 b(In)n(d)o(ex)0 437 y Fk(-)0 503
-y Fe(-u)d(o)o(pt)o(ion)h(in)g(mo)q(d)o(ule)q(s)h(\014le)c
-Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(18)0
-616 y Fk(.)0 682 y Fe(.cvs)q(ignore)14 b(\014le,)g(sort)o(in)o(g)6
-b Ff(.)h(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Fe(18)0 795 y Fk(A)0 861 y Fe(A)n(b)q(ou)o(t)14 b(p)q(cl-cvs)5
-b Ff(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)18 b Fe(3)0 920 y(Act)o(iv)o(e)13
-b(\014le)q(s)s Ff(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(8)0
-978 y(Add)o(e)q(d)e(\(\014le)g(st)o(a)o(t)o(us\))8 b
-Ff(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)20
-b Fe(7)0 1036 y(Addin)o(g)15 b(\014le)q(s)s Ff(.)8 b(.)e(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)16
-b Fe(13)0 1094 y(Arc)o(hiv)o(e)q(s)7 b Ff(.)g(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)19 b Fe(4)0 1152 y(A)n(u)o(t)n(h)o(or,)14 b(h)o(o)o(w)f(t)o(o)g
-(reac)o(h)s Ff(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)16
-b Fe(22)0 1210 y(A)n(u)o(t)n(h)o(ors)5 b Ff(.)j(.)e(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)17 b Fe(3)0 1268 y(A)n(u)o(t)o(om)o(a)o(t)o(ically)f(ins)q
-(ert)o(in)o(g)g(n)o(ewlin)o(e)c Ff(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Fe(18)0
-1326 y(A)n(u)o(t)o(om)o(a)o(t)o(ically)16 b(remo)o(v)o(e)e(h)o(an)o
-(dle)q(d)h(\014le)q(s)7 b Ff(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)19 b Fe(18)0 1385 y(A)n(u)o(t)o(om)o(a)o(t)o
-(ically)d(sort)o(in)o(g)f(.cvs)q(ignore)5 b Ff(.)i(.)f(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18
-b Fe(18)0 1497 y Fk(B)0 1564 y Fe(Bu\013er)c(con)o(t)o(en)o(ts)s
-Ff(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)16 b Fe(7)0 1622 y(Bugs,)d(h)o(o)o(w)g(t)o(o)h(rep)q
-(ort)f(t)n(h)o(em)7 b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)20
-b Fe(22)0 1680 y(Bugs,)13 b(kno)o(wn)t Ff(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17
-b Fe(22)0 1738 y(Byt)o(e)c(compila)o(t)o(ion)t Ff(.)c(.)d(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b
-Fe(16)0 1851 y Fk(C)0 1917 y Fe(Ci)7 b Ff(.)g(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)20 b Fe(11)0 1975 y(Commit)13
-b(bu\013er)6 b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)18 b Fe(11)0 2033 y(Commit)13
-b(m)o(e)q(ssage,)h(ins)q(ert)o(in)o(g)i(n)o(ewlin)o(e)5
-b Ff(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-18 b Fe(18)0 2091 y(Commit)o(t)o(in)o(g)c(c)o(h)o(an)o(ge)q(s)e
-Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
-b Fe(11)0 2149 y(Con\015ict)14 b(\(\014le)g(st)o(a)o(t)o(us\))6
-b Ff(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18
-b Fe(7)0 2208 y(Con\015icts,)13 b(h)o(o)o(w)g(t)o(o)h(re)q(solv)o(e)f
-(t)n(h)o(em)t Ff(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 b Fe(14)0 2266
-y(Con\015icts,)c(re)q(solvin)o(g)t Ff(.)c(.)d(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)16 b Fe(15)0 2324 y(Con)o(t)o(ext)d
-(di\013,)h(h)o(o)o(w)f(t)o(o)g(get)5 b Ff(.)i(.)f(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)18 b Fe(18)0 2382 y(Con)o(tr)q(ibu)o(t)o(ors)6
-b Ff(.)i(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)18 b Fe(3)0 2440 y(Co)o(p)o(yr)q(igh)o(t)c(m)o
-(e)q(ssage,)g(get)o(t)o(in)o(g)g(r)q(id)f(of)g(it)e Ff(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23
-b Fe(18)0 2498 y(Cust)o(omiza)o(t)o(ion)9 b Ff(.)f(.)f(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Fe(18)0 2611 y Fk(D)0 2677 y Fe(Delet)o(in)o(g)15 b(\014le)q(s)s
-Ff(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)16 b Fe(13)1015 437 y(Di\013)t Ff(.)8
-b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 b
-Fe(14)1015 495 y(Dire)q(d)5 b Ff(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)18 b Fe(12)1015 609 y Fk(E)1015 676 y Fe(Edi\013)7
-b Ff(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fe(14,)13 b(15)1015
-734 y(Edit)h(bu\013er)s Ff(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)16
-b Fe(11)1015 792 y(Edit)o(in)o(g)g(\014le)q(s)d Ff(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)25 b Fe(12)1015 850 y(Em)o(ail)15 b(arc)o(hiv)o(e)q(s)7
-b Ff(.)h(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)20 b Fe(4)1015 908 y(Em)o(ail)15 b(t)o(o)e(t)n(h)o(e)h
-(a)o(u)o(t)n(h)o(or)8 b Ff(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)21 b Fe(22)1015 966 y(Em)o(erge)6 b Ff(.)i(.)e(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)20 b Fe(15)1015 1024 y(Enh)o(ancem)o(en)o(ts)9
-b Ff(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)22 b Fe(20)1015 1083 y(Eras)q(in)o(g)15 b(commit)f(m)o(e)q
-(ssage)8 b Ff(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Fe(11)1015 1141 y(Eras)q(in)o(g)15 b(t)n(h)o(e)e(inpu)o(t)i(bu\013er)
-5 b Ff(.)i(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(18)1015
-1199 y(Example)d(ru)o(n)5 b Ff(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b
-Fe(5)1015 1257 y(Expu)o(n)o(gi)q(n)o(g)e(u)o(nin)o(t)o(ere)q(st)o(ing)g
-(en)o(tr)q(ie)q(s)7 b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)20 b Fe(14)1015 1371
-y Fk(F)1015 1438 y Fe(F)l(A)o(Q)t Ff(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)18 b Fe(22)1015 1496 y(File)d(s)q(elect)o(ion)s
-Ff(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)16 b Fe(8)1015 1554 y(File)f(st)o(a)o(t)o(us)9
-b Ff(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(7)1015 1612 y(Fin)o(din)o(g)16
-b(\014le)q(s)9 b Ff(.)e(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(12)1015 1670
-y(Flush)15 b(c)o(h)o(an)o(ge)q(s)e Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25 b Fe(13)1015
-1728 y(Ft)o(p-s)q(it)o(e)q(s)5 b Ff(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18
-b Fe(4)1015 1843 y Fk(G)1015 1909 y Fe(Gen)o(era)o(t)o(in)o(g)e(a)d(t)o
-(yp)q(e)q(s)q(et)g(m)o(an)n(ual)8 b Ff(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Fe(2)1015 1967 y(Gen)o(era)o(t)o(in)o(g)16 b(t)n(h)o(e)d(on-lin)o(e)i
-(m)o(an)n(ual)6 b Ff(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(2)1015
-2025 y(Get)o(t)o(in)o(g)c(p)q(cl-cvs)s Ff(.)7 b(.)f(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16
-b Fe(4)1015 2083 y(Get)o(t)o(in)o(g)f(r)q(id)e(of)g(lo)q(c)o(k)h
-(\014le)q(s)s Ff(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
-b Fe(16)1015 2141 y(Get)o(t)o(in)o(g)e(r)q(id)e(of)g(t)n(h)o(e)g(Co)o
-(p)o(yr)q(igh)o(t)h(m)o(e)q(ssage.)c Ff(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(18)1015 2200 y(Get)o(t)o(in)o(g)15
-b(r)q(id)e(of)g(u)o(nin)o(t)o(ere)q(st)o(in)o(g)j(lin)o(e)q(s)9
-b Ff(.)g(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)22 b Fe(14)1015 2258 y(Get)o(t)o(in)o(g)15 b(st)o(a)o(t)o(us)c
-Ff(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)24 b Fe(12)1015 2316 y(Get)o(t)o(in)o(g)15
-b(t)n(h)o(e)e(*cvs*)h(bu\013er)t Ff(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)18 b Fe(10)1015 2430 y Fk(H)1015 2497 y Fe(Han)o(dle)q(d)d(lin)
-o(e)q(s,)f(remo)o(vin)o(g)h(t)n(h)o(em)7 b Ff(.)g(.)f(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)20
-b Fe(14)1015 2611 y Fk(I)1015 2677 y Fe(Info-\014le)14
-b(\(h)o(o)o(w)f(t)o(o)h(gen)o(era)o(t)o(e\))7 b Ff(.)f(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)20 b Fe(2)p eop
-%%Page: 26 28
-26 27 bop 0 -58 a Fo(Concept)15 b(In)o(d)o(ex)1618 b(26)0
-183 y Fe(Inhibit)o(ing)16 b(t)n(h)o(e)d(Co)o(p)o(yr)q(igh)o(t)h(m)o(e)q
-(ssage.)8 b Ff(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)21 b Fe(18)0 241 y(Inst)o(alla)o(t)o(ion)13
-b Ff(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(1)0 299 y(Inst)o(alla)o(t)o(ion)16
-b(of)d(eli)q(sp)h(\014le)q(s)8 b Ff(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)20 b Fe(1)0 358 y(Inst)o(alla)o(t)o(ion)c(of)d(on-lin)o(e)h(m)o
-(an)n(ual)t Ff(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(2)0 416
-y(Inst)o(alla)o(t)o(ion)f(of)d(t)o(yp)q(e)q(s)q(et)g(m)o(an)n(ual)8
-b Ff(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)20 b Fe(2)0 474 y(In)o(tro)q(d)o(u)o(ct)o(ion)
-11 b Ff(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(5)0 532 y(In)o(v)o(okin)o(g)15
-b(dire)q(d)8 b Ff(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)20 b Fe(12)0 590 y(In)o(v)o(okin)o(g)15
-b(e)q(di\013)9 b Ff(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)22 b Fe(14,)13 b(15)0 648 y(In)o(v)o(okin)o(g)i(em)o(erge)
-10 b Ff(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)22 b Fe(15)0 781 y Fk(K)0 847 y Fe(Kno)o(wn)13 b(bugs)8
-b Ff(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)21 b Fe(22)0 980 y Fk(L)0 1047 y Fe(Loadin)o(g)15
-b(\014le)q(s)6 b Ff(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Fe(12)0 1105 y(Lo)q(c)o(k)13
-b(\014le)q(s)7 b Ff(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fe(16)0
-1163 y(Log)13 b(\(R)o(CS/cvs)h(comm)o(an)o(d\))d Ff(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(12)0 1296 y Fk(M)0
-1362 y Fe(Man)n(ual)15 b(inst)o(alla)o(t)o(i)q(on)h(\(on-lin)o(e\))c
-Ff(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(2)0 1420 y(Man)n(ual)15
-b(inst)o(alla)o(t)o(i)q(on)h(\(t)o(yp)q(e)q(s)q(et\))6
-b Ff(.)f(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Fe(2)0 1478 y(Mark)o(e)q(d)13
-b(\014le)q(s)f Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(8)0 1537
-y(Markin)o(g)15 b(\014le)q(s)d Ff(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fe(11)0
-1595 y(M)o(erge)q(d)14 b(\(\014le)g(st)o(a)o(t)o(us\))9
-b Ff(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21
-b Fe(7)0 1653 y(Mo)q(di\014e)q(d)15 b(\(\014le)f(st)o(a)o(t)o(us\))6
-b Ff(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Fe(7)0 1711 y(Mo)q(d)o(ule)q(s)c(\014le)f(\(-u)f(o)o(pt)o(ion\))7
-b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fe(18)0
-1769 y(Mo)o(v)o(e)13 b(aw)o(ay)h Ff(\014le)h Fe(-)e(it)g(i)q(s)h(in)f
-(t)n(h)o(e)h(w)o(ay)f(\(\014le)h(st)o(a)o(t)o(us\))5
-b Ff(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(7)0 1827
-y(Mo)o(v)o(em)o(en)o(t)c(Comm)o(an)o(ds)e Ff(.)6 b(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)24 b Fe(10)0 1960 y Fk(O)0 2026 y
-Fe(On-lin)o(e)14 b(m)o(an)n(ual)h(\(h)o(o)o(w)f(t)o(o)f(gen)o(era)o(t)o
-(e\))f Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)23 b Fe(2)0 2159 y Fk(P)0 2226 y Fe(P)o(a)o(t)o(c)o(h)o
-(e)q(d)14 b(\(\014le)g(st)o(a)o(t)o(us\))5 b Ff(.)h(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(7)0 2284
-y(Pr)q(in)o(t)o(in)o(g)d(a)e(m)o(an)n(ual)t Ff(.)8 b(.)e(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(2)0
-2342 y(Problems,)d(li)q(st)f(of)g(common)8 b Ff(.)f(.)f(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)21 b Fe(22)0 2400 y(Pu)o(t)o(t)o(in)o(g)15 b(\014le)q(s)f(u)o
-(n)o(d)o(er)h(CVS)d(con)o(trol)f Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Fe(13)1015
-183 y Fk(R)1015 250 y Fe(Recompiling)16 b(eli)q(sp)e(\014le)q(s)e
-Ff(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b
-Fe(16)1015 308 y(Remo)o(v)o(e)q(d)14 b(\(\014le)g(st)o(a)o(t)o(us\))s
-Ff(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16
-b Fe(7)1015 366 y(Remo)o(v)o(e)q(d)e(b)o(y)f(y)o(ou,)g(c)o(h)o(an)o(ge)
-q(d)h(in)f(rep)q(os)q(it)o(ory)i(\(\014le)e(st)o(a)o(t)o(us\))5
-b Ff(.)i(.)18 b Fe(7)1015 424 y(Remo)o(v)o(e)q(d)c(f)q(rom)f(rep)q(os)q
-(it)o(ory)i(\(\014le)f(st)o(a)o(t)o(us\))e Ff(.)6 b(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)24 b Fe(7)1015 482
-y(Remo)o(v)o(e)q(d)14 b(f)q(rom)f(rep)q(os)q(it)o(ory)m(,)h(c)o(h)o(an)
-o(ge)q(d)h(b)o(y)f(y)o(ou)f(\(\014le)h(st)o(a)o(t)o(us\))1099
-540 y Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19
-b Fe(7)1015 598 y(Remo)o(vin)o(g)d(\014le)q(s)7 b Ff(.)g(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
-b Fe(13)1015 656 y(Remo)o(vin)o(g)c(u)o(nin)o(t)o(ere)q(st)o(in)o(g)g
-(\(pro)q(ce)q(ss)q(e)q(d\))f(lin)o(e)q(s)6 b Ff(.)i(.)e(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)19 b Fe(14)1015 715 y(Rep)q(ort)o(in)o(g)d(bugs)e
-(an)o(d)f(id)o(eas)f Ff(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23
-b Fe(22)1015 773 y(Require)15 b(\014n)o(al)f(n)o(ewlin)o(e)5
-b Ff(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18
-b Fe(18)1015 831 y(Re)q(solvin)o(g)e(con\015icts)8 b
-Ff(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Fe(15)1015 889 y(Re)q(surrect)o(in)o(g)16 b(\014le)q(s)11
-b Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-23 b Fe(13)1015 947 y(Rev)o(ert)o(in)o(g)16 b(bu\013ers)c
-Ff(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)24
-b Fe(16)1015 1005 y(Rev)o(ert)o(in)o(g)16 b(bu\013ers)e(aft)o(er)f
-(commit)f Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)24 b Fe(11,)13 b(18)1015 1113 y Fk(S)1015
-1180 y Fe(Select)o(e)q(d)i(\014le)q(s)6 b Ff(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Fe(8)1015 1238 y(Select)o(in)o(g)d(\014le)q(s)e(\(comm)o(an)o(ds)g(t)
-o(o)g(m)o(ark)e(\014le)q(s\))d Ff(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)22 b Fe(11)1015 1296 y(Sit)o(e)q(s)5 b Ff(.)j(.)e(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Fe(4)1015 1354 y(Sort)o(in)o(g)d
-(t)n(h)o(e)f(.cvs)q(ignore)g(\014le)d Ff(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)24 b Fe(18)1015 1412 y(St)o(a)o(t)o(us)14 b(\(cvs)f(comm)o(an)o(d\))
-g Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25
-b Fe(12)1015 1470 y(Syncin)o(g)16 b(bu\013ers)11 b Ff(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-23 b Fe(16)1015 1578 y Fk(T)1015 1644 y Fe(T)m(eX)13
-b(-)f(gen)o(era)o(t)o(in)o(g)k(a)d(t)o(yp)q(e)q(s)q(et)g(m)o(an)n(ual)f
-Ff(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)23 b Fe(2)1015 1703 y(Thi)q(s)14 b(rep)q(os)q(it)o(ory)h(i)q(s)e
-(mi)q(ss)q(in)o(g!)66 b(\(\014le)14 b(st)o(a)o(t)o(us\))d
-Ff(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)24 b Fe(7)1015
-1810 y Fk(U)1015 1877 y Fe(Un)o(do)14 b(c)o(h)o(an)o(ge)q(s)5
-b Ff(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)18 b Fe(13)1015 1935 y(Unidi\013,)d(h)o(o)o(w)e(t)o(o)h
-(get)5 b Ff(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-19 b Fe(18)1015 1993 y(Unin)o(t)o(ere)q(st)o(in)o(g)d(en)o(tr)q(ie)q
-(s,)d(get)o(t)o(in)o(g)i(r)q(id)e(of)g(t)n(h)o(em)7 b
-Ff(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Fe(14)1015
-2051 y(Unkno)o(wn)14 b(\(\014le)g(st)o(a)o(t)o(us\))9
-b Ff(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22
-b Fe(7)1015 2109 y(Up)q(d)o(a)o(t)o(e)14 b(program)g(\(-u)f(o)o(pt)o
-(ion)h(in)g(mo)q(d)o(ule)q(s)h(\014le\))5 b Ff(.)i(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)18 b Fe(18)1015 2167 y(Up)q(d)o(a)o(t)o(e)q(d)d(\(\014le)f
-(st)o(a)o(t)o(us\))8 b Ff(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)21 b Fe(7)1015 2275 y Fk(V)1015 2342 y Fe(V)m(ar)q(ia)o
-(ble)q(s,)14 b(li)q(st)g(of)f(all)8 b Ff(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(18)1015 2400 y(Viewin)o(g)15
-b(di\013erence)q(s)5 b Ff(.)j(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-18 b Fe(14,)13 b(15)p eop
-%%Page: 27 29
-27 28 bop 0 -58 a Fo(K)o(ey)15 b(In)o(d)o(ex)1704 b(27)0
-183 y Fm(K)n(ey)14 b(In)n(d)o(ex)0 430 y Fk(A)0 496 y
-Fg(a)e(-)h(add)e(a)i(file)5 b Ff(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(13)0 554
-y Fg(A)12 b(-)h(add)e(ChangeLog)f(entry)f Ff(.)d(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)24 b Fe(12)0 679 y Fk(B)0 745 y Fg(b)12 b(-)h(diff)e(backup)g
-(file)6 b Ff(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Fe(14)0 870 y Fk(C)0 936 y Fg(c)12 b(-)h(commit)d(files)e
-Ff(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Fe(11)0 994 y Fg(C)12 b(-)h(commit)d(files)h(with)g(ChangeLog)f
-(message)c Ff(.)s(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b
-Fe(11)0 1052 y Fg(C-k)12 b(-)g(remove)f(selected)e(entries)s
-Ff(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)16 b Fe(14)0 1110 y Fg(C-n)c(-)g(Move)f(down)h(one)f(file)t
-Ff(.)5 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Fe(10)0 1169
-y Fg(C-p)12 b(-)g(Move)f(up)h(one)g(file)7 b Ff(.)e(.)h(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)20 b Fe(10)0 1293 y Fk(D)0 1359 y Fg(d)12
-b(-)h(run)e(`cvs)19 b(diff')5 b Ff(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)18 b Fe(14)0 1418 y Fg(DEL)12 b(-)g(unmark)f
-(previous)e(file)e Ff(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fe(11)0
-1542 y Fk(E)0 1609 y Fg(e)12 b(-)h(invoke)d(`ediff')5
-b Ff(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18
-b Fe(15)0 1667 y Fg(E)12 b(-)h(invoke)d(`emerge')t Ff(.)s(.)c(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(15)0 1725
-y Fg(ESC)12 b(DEL)f(-)i(unmark)d(all)i(files)c Ff(.)e(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-23 b Fe(11)0 1849 y Fk(F)0 1916 y Fg(f)12 b(-)h(find)e(file)g(or)h
-(directory)7 b Ff(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Fe(12)0 2040
-y Fk(G)0 2107 y Fg(g)12 b(-)h(Rerun)e(`cvs)18 b(update')9
-b Ff(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21 b Fe(10)0
-2231 y Fk(I)0 2298 y Fg(i)12 b(-)h(ignoring)d(files)5
-b Ff(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18
-b Fe(14)1015 430 y Fk(L)1015 496 y Fg(l)13 b(-)f(run)g(`cvs)18
-b(log')7 b Ff(.)t(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)20 b Fe(12)1015 604 y Fk(M)1015 670 y Fg(m)13 b(-)f(marking)e(a)j
-(file)c Ff(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22
-b Fe(11)1015 729 y Fg(M)13 b(-)f(marking)e(all)i(files)5
-b Ff(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b
-Fe(11)1015 836 y Fk(N)1015 903 y Fg(n)13 b(-)f(Move)g(down)f(one)g
-(file)c Ff(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20
-b Fe(10)1015 1011 y Fk(O)1015 1077 y Fg(o)13 b(-)f(find)g(file)f(in)h
-(other)f(window)c Ff(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 b Fe(12)1015 1185 y Fk(P)1015
-1252 y Fg(p)13 b(-)f(Move)g(up)g(on)g(file)d Ff(.)d(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)24 b Fe(10)1015 1359 y Fk(Q)1015
-1426 y Fg(q)13 b(-)f(bury)g(the)f(*cvs*)g(buffer)s Ff(.)t(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)16 b Fe(16)1015 1534 y Fk(R)1015
-1600 y Fg(r)d(-)f(remove)f(a)h(file)d Ff(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fe(13)1015 1658 y
-Fg(R)13 b(-)f(revert)f(buffers)5 b Ff(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(16)1015 1766 y Fk(S)1015
-1833 y Fg(s)13 b(-)f(run)g(`cvs)18 b(status')9 b Ff(.)d(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)25 b Fe(12)1015 1891 y Fg(SPC)12
-b(-)h(Move)e(down)g(one)h(file)t Ff(.)5 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-18 b Fe(10)1015 1999 y Fk(U)1015 2065 y Fg(U)13 b(-)f(undo)g(changes)c
-Ff(.)s(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21
-b Fe(13)1015 2123 y Fg(u)13 b(-)f(unmark)f(a)h(file)d
-Ff(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
-b Fe(11)1015 2231 y Fk(X)1015 2298 y Fg(x)13 b(-)f(remove)f(processed)e
-(entries)c Ff(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(14)p eop
-%%Page: -1 30
--1 29 bop 1937 -58 a Fo(i)0 183 y Fm(Sh)n(ort)16 b(Con)n(t)n(en)n(t)o
-(s)0 299 y Fc(1)78 b(Inst)o(alla)o(t)o(ion)11 b Fb(.)f(.)g(.)f(.)h(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)
-h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)f(.)h(.)g(.)g(.)28 b Fc(1)0 366 y(2)78 b(A)m(b)q(ou)o(t)18
-b(p)q(cl-cvs)11 b Fb(.)f(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f
-(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)28
-b Fc(3)0 432 y(3)78 b(Get)n(t)o(in)o(g)17 b(st)o(art)o(e)q(d)11
-b Fb(.)f(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)28 b Fc(5)0 499 y(4)78
-b(Bu\013er)17 b(con)o(t)o(en)o(t)o(s)12 b Fb(.)d(.)h(.)f(.)h(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)
-29 b Fc(7)0 565 y(5)78 b(Comm)o(an)o(ds)13 b Fb(.)d(.)g(.)g(.)g(.)g(.)f
-(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)30 b Fc(10)0 632 y(6)78 b(Cust)o(omiza)o(t)o(ion)7
-b Fb(.)j(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fc(18)0 698 y(7)78
-b(F)l(u)o(t)o(ure)16 b(enh)o(ancem)o(en)o(t)o(s)6 b Fb(.)h(.)j(.)g(.)g
-(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Fc(20)0 764 y(8)78 b(Bugs)17 b(\(kno)o(wn)f(an)o(d)h(u)o(nkno)o(wn\))
-e Fb(.)10 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)30
-b Fc(22)0 831 y(A)m(p)o(p)q(en)o(dix)14 b(A)50 b(GNU)15
-b(GENERAL)i(PUBLIC)f(LICENSE)6 b Fb(.)k(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)22 b Fc(23)0 897 y(F)l(u)o(nct)o(ion)16
-b(an)o(d)g(V)l(ar)q(ia)o(b)o(le)g(In)o(d)o(ex)7 b Fb(.)i(.)h(.)g(.)g(.)
-g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23
-b Fc(24)0 964 y(Concept)16 b(In)o(d)o(ex)f Fb(.)9 b(.)h(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g
-(.)g(.)g(.)g(.)31 b Fc(25)0 1030 y(K)o(ey)15 b(In)o(d)o(ex)5
-b Fb(.)10 b(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Fc(27)p eop
-%%Page: -2 31
--2 30 bop 1925 -58 a Fo(ii)0 183 y Fm(T)-7 b(a)n(b)o(le)15
-b(of)g(Con)n(t)n(en)n(t)o(s)0 358 y Fk(1)67 b(Inst)n(alla)n(t)n(ion)18
-b Fb(.)10 b(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)37 b Fk(1)149 435 y Fo(1.1)45
-b(Inst)o(alla)o(t)o(ion)16 b(of)f(t)n(h)o(e)g(p)q(cl-cvs)i(program)8
-b Fa(.)e(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23
-b Fo(1)149 498 y(1.2)45 b(Inst)o(alla)o(t)o(ion)16 b(of)f(t)n(h)o(e)g
-(on-lin)o(e)h(m)o(an)n(ual.)5 b Fa(.)j(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)19 b Fo(2)149 560 y(1.3)45 b(Ho)o(w)15
-b(t)o(o)f(m)o(ak)o(e)h(t)o(yp)q(e)q(s)q(et)g(do)q(cu)o(m)o(en)o(t)o(a)o
-(t)o(ion)g(f)q(rom)f(p)q(cl-cvs.t)o(exinfo)9 b Fa(.)g(.)f(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)24 b Fo(2)0 684 y Fk(2)67 b(A)l(b)r(ou)o(t)23
-b(p)r(cl-cvs)c Fb(.)10 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)40 b Fk(3)149 762 y Fo(2.1)45
-b(Con)o(tr)q(ibu)o(t)o(ors)15 b(t)o(o)g(p)q(cl-cvs)f
-Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fo(3)149 825 y(2.2)45
-b(Wh)o(ere)15 b(can)h(I)f(get)g(p)q(cl-cvs?)7 b Fa(.)i(.)f(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
-b Fo(4)0 949 y Fk(3)67 b(Get)m(t)n(in)o(g)23 b(st)n(art)n(e)r(d)12
-b Fb(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)33 b Fk(5)0 1089 y(4)67 b(Bu\013er)23 b(con)n(t)n(en)n(t)o
-(s)12 b Fb(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)34 b Fk(7)149 1167 y Fo(4.1)45 b(File)16
-b(st)o(a)o(t)o(us)10 b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fo(7)149 1229 y(4.2)45
-b(Select)o(e)q(d)17 b(\014le)q(s)8 b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)22 b Fo(8)0 1354 y Fk(5)67
-b(Comm)n(an)n(ds)14 b Fb(.)c(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)37 b Fk(10)149
-1432 y Fo(5.1)45 b(Up)q(d)o(a)o(t)o(in)o(g)16 b(t)n(h)o(e)f(direct)o
-(ory)6 b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 b Fo(10)149 1494 y(5.2)45
-b(Mo)o(v)o(em)o(en)o(t)14 b(Comm)o(an)o(ds)d Fa(.)c(.)g(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)26
-b Fo(10)149 1556 y(5.3)45 b(Mar)o(kin)o(g)16 b(\014le)q(s)5
-b Fa(.)k(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)20
-b Fo(11)149 1618 y(5.4)45 b(Commit)n(t)o(in)o(g)15 b(c)o(h)o(an)o(ge)q
-(s)8 b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fo(11)149
-1681 y(5.5)45 b(Edit)o(in)o(g)16 b(\014le)q(s)5 b Fa(.)k(.)e(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)20 b Fo(12)149
-1743 y(5.6)45 b(Get)n(t)o(in)o(g)15 b(info)h(a)o(b)q(ou)o(t)f(\014le)q
-(s)f Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)28 b Fo(12)149 1805 y(5.7)45
-b(Addin)o(g)17 b(an)o(d)e(remo)o(vin)o(g)g(\014le)q(s)g
-Fa(.)8 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)29 b Fo(13)149 1868 y(5.8)45 b(Un)o(doin)o(g)16
-b(c)o(h)o(an)o(ge)q(s)11 b Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)26 b Fo(13)149 1930 y(5.9)45 b(Remo)o(vin)o(g)16 b(h)o(an)o(dle)q(d)
-h(en)o(tr)q(ie)q(s)6 b Fa(.)h(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fo(14)149 1992
-y(5.10)45 b(Ignor)q(in)o(g)16 b(\014le)q(s)5 b Fa(.)j(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)20 b Fo(14)149 2054
-y(5.11)45 b(Viewin)o(g)17 b(di\013erence)q(s)7 b Fa(.)i(.)e(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)22 b Fo(14)149 2117 y(5.12)45 b(R)m(u)o(nnin)o(g)18
-b(e)q(di\013)11 b Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-26 b Fo(15)149 2179 y(5.13)45 b(R)m(u)o(nnin)o(g)18 b(em)o(erge)6
-b Fa(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 b Fo(15)149
-2241 y(5.14)45 b(Rev)o(ert)o(in)o(g)16 b(y)o(our)e(bu\013ers)9
-b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)24 b Fo(16)149 2303 y(5.15)45
-b(Mi)q(scellan)o(eous)16 b(comm)o(an)o(ds)5 b Fa(.)i(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)20
-b Fo(16)0 2428 y Fk(6)67 b(Cust)o(omiza)n(t)n(ion)8 b
-Fb(.)j(.)f(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-f(.)h(.)31 b Fk(18)0 2568 y(7)67 b(F)-6 b(u)o(t)n(ure)24
-b(enh)n(ancem)n(en)n(t)o(s)6 b Fb(.)k(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)
-g(.)g(.)g(.)28 b Fk(20)p eop
-%%Page: -3 32
--3 31 bop 1912 -58 a Fo(iii)0 45 y Fk(8)67 b(Bugs)22
-b(\(kno)n(wn)h(an)n(d)g(u)o(nkno)n(wn\))16 b Fb(.)10
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)f(.)h(.)g(.)38 b Fk(22)0 185 y(A)l(p)n(p)q(en)n(dix)25
-b(A)67 b(GNU)22 b(GENERAL)g(PUBLIC)g(LICENSE)141 247
-y Fb(.)10 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f
-(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)29
-b Fk(23)0 387 y(F)-6 b(u)o(nct)n(ion)25 b(an)n(d)e(V)-6
-b(ar)q(ia)n(b)o(le)24 b(In)n(d)o(ex)7 b Fb(.)j(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)
-g(.)29 b Fk(24)0 527 y(Concept)22 b(In)n(d)o(ex)13 b
-Fb(.)e(.)f(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
-g(.)g(.)g(.)g(.)g(.)35 b Fk(25)0 667 y(K)n(ey)22 b(In)n(d)o(ex)6
-b Fb(.)12 b(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)29 b Fk(27)p
-eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.texinfo b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.texinfo
deleted file mode 100644 (file)
index 6f865f0..0000000
+++ /dev/null
@@ -1,1565 +0,0 @@
-\input texinfo  @c -*-texinfo-*-
-
-@comment OrigId: pcl-cvs.texinfo,v 1.45 1993/05/31 22:38:15 ceder Exp 
-@comment @@(#)cvs/contrib/pcl-cvs:$Name:  $:$Id: pcl-cvs.texinfo,v 1.1.1.2 1996/01/30 00:19:14 tholo Exp $
-
-@comment Documentation for the GNU Emacs CVS mode.
-@comment Copyright (C) 1992 Per Cederqvist
-
-@comment This file is part of the pcl-cvs distribution.
-
-@comment Pcl-cvs is free software; you can redistribute it and/or modify
-@comment it under the terms of the GNU General Public License as published by
-@comment the Free Software Foundation; either version 1, or (at your option)
-@comment any later version.
-
-@comment Pcl-cvs is distributed in the hope that it will be useful,
-@comment but WITHOUT ANY WARRANTY; without even the implied warranty of
-@comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-@comment GNU General Public License for more details.
-
-@comment You should have received a copy of the GNU General Public License
-@comment along with pcl-cvs; see the file COPYING.  If not, write to
-@comment the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-@setfilename pcl-cvs.info
-@settitle Pcl-cvs - The Emacs Front-End to CVS
-@setchapternewpage on
-     
-@ifinfo
-Copyright @copyright{} 1992 Per Cederqvist
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-section entitled ``GNU General Public License'' is included exactly as
-in the original, and provided that the entire resulting derived work is
-distributed under the terms of a permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU General Public License'' and
-this permission notice may be included in translations approved by the
-Free Software Foundation instead of in the original English.
-@end ifinfo
-
-@synindex vr fn     
-@comment The titlepage section does not appear in the Info file.
-@titlepage
-@sp 4
-@comment The title is printed in a large font.
-@center @titlefont{User's Guide}
-@sp
-@center @titlefont{to}
-@sp
-@center @titlefont{pcl-cvs - the Emacs Front-End to CVS}
-@sp 2
-@center release 1.05-CVS-$Name:  $
-@comment -release-
-@sp 3
-@center Per Cederqvist
-@sp 3
-@center last updated 20 Nov 1995
-@comment -date-
-
-@comment  The following two commands start the copyright page
-@comment  for the printed manual.  This will not appear in the Info file.
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1992 Per Cederqvist
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-section entitled ``GNU General Public License'' is included exactly as
-in the original, and provided that the entire resulting derived work is
-distributed under the terms of a permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU General Public License'' and
-this permission notice may be included in translations approved by the
-Free Software Foundation instead of in the original English.
-@end titlepage
-
-@comment ================================================================
-@comment                   The real text starts here
-@comment ================================================================
-
-@node    Top, Installation, (dir), (dir)
-@comment node-name, next, previous, up
-
-
-@ifinfo
-This info manual describes pcl-cvs which is a GNU Emacs front-end to
-CVS.  It works with CVS versions 1.5 through 1.7 and newer, and possibly
-CVS-1.3 and CVS-1.4A2.  This manual is updated to release
-1.05-CVS-$Name:  $ of pcl-cvs.
-@end ifinfo
-@comment -release-
-
-@menu
-* Installation::                How to install pcl-cvs on your system.
-* About pcl-cvs::               Authors and ftp sites.
-
-* Getting started::             An introduction with a walk-through example.
-* Buffer contents::             An explanation of the buffer contents.
-* Commands::                    All commands, grouped by type.
-
-* Customization::               How you can tailor pcl-cvs to suit your needs.
-* Future enhancements::         Future enhancements of pcl-cvs.
-* Bugs::                        Bugs (known and unknown).
-* COPYING::                     GNU General Public License
-* Function and Variable Index::  List of functions and variables.
-* Concept Index::               List of concepts.
-* Key Index::                   List of keystrokes.
-
- --- The Detailed Node Listing ---
-
-Installation
-
-* Pcl-cvs installation::        How to install pcl-cvs on your system.
-* On-line manual installation::  How to install the on-line manual.
-* Typeset manual installation::  How to create typeset documentation 
-                                 about pcl-cvs.
-
-About pcl-cvs
-
-* Contributors::                Contributors to pcl-cvs.
-* Archives::                    Where can I get a copy of Pcl-Cvs?
-
-Buffer contents
-
-* File status::                 The meaning of the second field.
-* Selected files::              How selection works.
-
-Commands
-
-* Updating the directory::      Commands to update the local directory
-* Movement commands::           How to move up and down in the buffer
-* Marking files::               How to mark files that other commands
-                                will later operate on.
-* Committing changes::          Checking in your modifications to the
-                                CVS repository.
-* Editing files::               Loading files into Emacs.
-* Getting info about files::    Display the log and status of files.
-* Adding and removing files::   Adding and removing files
-* Undoing changes::             Undoing changes
-* Removing handled entries::    Uninteresting lines can easily be removed.
-* Ignoring files::              Telling CVS to ignore generated files.
-* Viewing differences::         Commands to @samp{diff} different versions.
-* Invoking Ediff::              Running @samp{ediff} from @samp{*cvs*} buffer.
-* Invoking Emerge::             Running @samp{emerge} from @samp{*cvs*} buffer.
-* Reverting your buffers::      Reverting your buffers
-* Miscellaneous commands::      Miscellaneous commands
-@end menu
-
-
-@node   Installation, About pcl-cvs, Top, Top
-@comment  node-name, next, previous, up
-
-@chapter Installation
-@cindex Installation
-
-This section describes the installation of pcl-cvs, the GNU Emacs CVS
-front-end.  You should install not only the elisp files themselves, but
-also the on-line documentation so that your users will know how to use
-it.  You can create typeset documentation from the file
-@file{pcl-cvs.texinfo} as well as an on-line info file.  The following
-steps are also described in the file @file{INSTALL} in the source
-directory.
-
-@menu
-* Pcl-cvs installation::        How to install pcl-cvs on your system.
-* On-line manual installation::  How to install the on-line manual.
-* Typeset manual installation::  How to create typeset documentation 
-                                 about pcl-cvs.
-@end menu
-
-
-@node     Pcl-cvs installation, On-line manual installation, Installation, Installation
-@comment  node-name,  next,  previous,  up
-@section Installation of the pcl-cvs program
-@cindex Installation of elisp files
-
-@enumerate
-@item
-Possibly edit the file @file{Makefile} to reflect the situation at your
-site.  We say "possibly" because the version of pcl-cvs included with
-CVS uses a configuration mechanism integrated with the overall
-mechanisms used by the CVS build and install procedures.  Thus the file
-@code{Makefile} will be generated automatically from the file
-@code{Makefile.in}, and it should not be necessary to edit it further.
-
-If you do have to edit the @file{Makefile}, the only things you have to
-change is the definition of @code{lispdir} and @code{infodir}.  The
-elisp files will be copied to @code{lispdir}, and the info file(s) to
-@code{infodir}.
-
-@item
-Configure pcl-cvs.el
-
-There are a couple of pathnames that you have to check to make sure that
-they match your system.  They appear early in the file
-@samp{pcl-cvs.el}.
-
-@strong{NOTE:}  If your system is running emacs 18.57 or earlier you MUST
-uncomment the line that says:
-@example
-(setq delete-exited-processes nil)
-@end example
-
-Setting @code{delete-exited-processes} to @code{nil} works around a bug
-in emacs that causes it to dump core.  The bug was fixed in emacs
-18.58.@refill
-
-@item
-Release 1.05 and later of pcl-cvs requires parts of the Elib library,
-version 1.0 or later.  Elib is available via anonymous ftp from
-prep.ai.mit.edu in @file{pub/gnu/elib-1.0.tar.gz}, and from a lot of
-other sites that mirror prep.  Get Elib, and install it, before
-proceeding.
-
-@strong{NOTE:} The version of pcl-cvs included with CVS includes a copy
-of Elib in the sub-directory @file{elib} under the
-@file{contrib/pcl-cvs} directory.
-
-@item
-Type @samp{make install} in the source directory.  This will
-byte-compile all @file{.el} files and copy the @file{*.elc} files into
-the directory you specified in step 1.
-
-If you want to install the @file{*.el} files too, you can type
-@samp{make install-el} to do so.
-
-If you only want to create the compiled elisp files, but don't want to
-install them, you can type @samp{make} without parameters.
-
-@item
-Edit the file @file{default.el} in your emacs lisp directory (usually
-@file{/usr/gnu/lib/emacs/site-lisp} or something similar) and enter the
-contents of the file @file{pcl-cvs-startup.el} into it.  It contains a
-couple of @code{auto-load}s that facilitates the use of pcl-cvs.
-
-@end enumerate
-
-
-@node On-line manual installation, Typeset manual installation, Pcl-cvs installation, Installation
-@comment  node-name,  next,  previous,  up
-
-@section Installation of the on-line manual.
-@cindex Manual installation (on-line)
-@cindex Installation of on-line manual
-@cindex Generating the on-line manual
-@cindex On-line manual (how to generate)
-@cindex Info-file (how to generate)
-
-@enumerate
-@item
-Create the info file(s) @file{pcl-cvs.info*} from @file{pcl-cvs.texinfo}
-by typing @samp{make info}.  If you don't have the program
-@samp{makeinfo} you can get it by anonymous ftp from
-e.g. @samp{prep.ai.mit.edu} as @file{pub/gnu/texinfo-3.7.tar.gz} (there
-might be a newer version there when you read this).@refill
-
-@item
-Install the info file(s) @file{pcl-cvs.info*} into your standard
-@file{info} directory.  You should be able to do this by typing
-@samp{make install-info}.@refill
-
-@item
-Edit the file @file{dir} in the @file{info} directory and enter one line
-to contain a pointer to the info file(s) @file{pcl-cvs.info*}.  The line
-can, for instance, look like this:@refill
-
-@example
-* Pcl-cvs: (pcl-cvs).           An Emacs front-end to CVS.
-@end example
-@end enumerate
-
-
-@node Typeset manual installation,  , On-line manual installation, Installation
-@comment  node-name,  next,  previous,  up
-
-@section How to make typeset documentation from pcl-cvs.texinfo
-@cindex Manual installation (typeset)
-@cindex Installation of typeset manual
-@cindex Printing a manual
-@cindex TeX - generating a typeset manual
-@cindex Generating a typeset manual
-
-If you have @TeX{} installed at your site, you can make a typeset manual
-from @file{pcl-cvs.texinfo}.
-
-@enumerate
-@item
-Run @TeX{} by typing `@samp{make pcl-cvs.dvi}'.  You will not get the
-indices unless you have the @code{texindex} program.
-
-@item
-Convert the resulting device independent file @file{pcl-cvs.dvi} to a
-form which your printer can output and print it.  If you have a
-postscript printer there is a program, @code{dvi2ps}, which does.  There
-is also a program which comes together with @TeX{}, @code{dvips}, which
-you can use.
-
-@end enumerate
-
-
-@node     About pcl-cvs, Getting started, Installation, Top
-@comment  node-name,     next, previous, up
-
-@chapter About pcl-cvs
-@cindex About pcl-cvs
-
-Pcl-cvs is a front-end to CVS versions 1.5 through 1.7 and newer; and
-possibly verison 1.3 and 1.4A2.  It integrates the most frequently used
-CVS commands into an emacs interface.
-
-@menu
-* Contributors::                Contributors to pcl-cvs.
-* Archives::                    Where can I get a copy of Pcl-Cvs?
-@end menu
-
-
-@node     Contributors, Archives, About pcl-cvs, About pcl-cvs
-@comment  node-name,  next,  previous,  up
-
-@section Contributors to pcl-cvs
-@cindex Contributors
-@cindex Authors
-
-Contributions to the package are welcome.  I have limited time to work
-on this project, but I will gladly add any code that you contribute to
-me to this package (@pxref{Bugs}).
-
-The following persons have made contributions to pcl-cvs.
-
-@itemize @bullet
-@item
-Brian Berliner wrote CVS, together with some other contributors.
-Without his work on CVS this package would be useless@dots{}
-
-@item
-Per Cederqvist wrote most of the otherwise unattributed functions in
-pcl-cvs as well as all documentation.
-
-@item
-Inge Wallin (@samp{inge@@lysator.liu.se}) wrote the skeleton to
-@file{pcl-cvs.texinfo}, and gave useful comments on it.  He also wrote
-the files @file{elib-node.el} and @file{compile-all.el}.  The file
-@file{cookie.el} was inspired by Inge.@refill
-
-@item
-Linus Tolke (@samp{linus@@lysator.liu.se}) contributed useful comments
-on both the functionality and the documentation.@refill
-
-@item
-Jamie Zawinski (@samp{jwz@@lucid.com}) contributed
-@file{pcl-cvs-lucid.el}.
-
-@item
-Leif Lonnblad contributed RCVS support.  (Since superceded by the new
-remote CVS support.)
-
-@item
-Jim Blandy (@samp{jimb@@cyclic.com}) contributed hooks to automatically
-guess CVS log entries from ChangeLog contents; and initial support of
-the new Cygnus / Cyclic remote CVS; as well as various sundry bug fixes
-and cleanups.
-
-@item
-Jim Kingdon (@samp{kingdon@@cyclic.com}) contributed lots of fixes to
-the build and install procedure.
-
-@item
-Greg A. Woods (@samp{woods@@planix.com}) contributed code to implement
-the use of per-file diff buffers; and vendor join diffs with emerge and
-ediff; as well as various an sundry bug fixes and cleanups.
-@end itemize
-
-Apart from these, a lot of people have send me suggestions, ideas,
-requests, bug reports and encouragement.  Thanks a lot!  Without your
-there would be no new releases of pcl-cvs.
-
-
-@node     Archives,  , Contributors, About pcl-cvs
-@comment  node-name,  next,  previous,  up
-
-@section Where can I get pcl-cvs?
-@cindex Sites
-@cindex Archives
-@cindex Ftp-sites
-@cindex Getting pcl-cvs
-@cindex Email archives
-
-The current release of pcl-cvs is included in CVS-1.7.
-
-The author's release of pcl-cvs can be fetched via anonymous ftp from
-@code{ftp.lysator.liu.se}, (IP no. 130.236.254.1) in the directory
-@code{pub/emacs}.  If you don't live in Scandinavia you should probably
-check with archie to see if there is a site closer to you that archives
-pcl-cvs.
-
-New releases will be announced to appropriate newsgroups.  If you send
-your email address to me I will add you to my list of people to mail
-when I make a new release.
-
-
-@node Getting started, Buffer contents, About pcl-cvs, Top
-@comment  node-name,  next,  previous,  up
-
-@chapter Getting started
-@cindex Introduction
-@cindex Example run
-
-This document assumes that you know what CVS is, and that you at least
-knows the fundamental concepts of CVS.  If that is not the case you
-should read the man page for CVS.
-
-Pcl-cvs is only useful once you have checked out a module.  So before
-you invoke it you must have a copy of a module somewhere in the file
-system.
-
-You invoke pcl-cvs by typing @kbd{M-x cvs-update RET}.  If your emacs
-responds with @samp{[No match]} your system administrator has not
-installed pcl-cvs properly.  Try @kbd{M-x load-library RET pcl-cvs RET}.
-If that also fails - talk to your root.  If it succeeds you might put
-this line in your @file{.emacs} file so that you don't have to type the
-@samp{load-library} command every time you wish to use pcl-cvs:
-
-@example
-(autoload 'cvs-update "pcl-cvs" nil t)
-@end example
-
-The function @code{cvs-update} will ask for a directory.  The command
-@samp{cvs update} will be run in that directory.  (It should contain
-files that have been checked out from a CVS archive.)  The output from
-@code{cvs} will be parsed and presented in a table in a buffer called
-@samp{*cvs*}.  It might look something like this:
-
-@example
-PCL-CVS release 1.05-CVS-$Name:  $.
-@comment -release-
-
-In directory /users/ceder/FOO/test:
-  Updated     bar
-  Updated     file.txt
-  Modified ci namechange
-  Updated     newer
-
-In directory /users/ceder/FOO/test/sub:
-  Modified ci ChangeLog
----------- End -----
-@end example
-
-In this example the two files (@file{bar}, @file{file.txt}, and
-@file{newer}) that are marked with @samp{Updated} have been copied from
-the CVS repository to @file{/users/ceder/FOO/test/} since someone else
-have checked in newer versions of them.  Two files (@file{namechange}
-and @file{sub/ChangeLog}) have been modified locally, and needs to be
-checked in.
-
-You can move the cursor up and down in the buffer with @kbd{C-n} and
-@kbd{C-p} or @kbd{n} and @kbd{p}.  If you press @kbd{c} on one of the
-@samp{Modified} files that file will be checked in to the CVS
-repository.  @xref{Committing changes}.  You can press @kbd{x} to get rid
-of the "uninteresting" files that have only been @samp{Updated} (and
-don't require any further action from you).@refill
-
-You can also easily get a @samp{diff} between your modified file and the
-base version that you started from, and you can get the output from
-@samp{cvs log} and @samp{cvs status} on the listed files simply by
-pressing a key (@pxref{Getting info about files}).
-
-
-@node Buffer contents, Commands, Getting started, Top
-@comment  node-name,  next,  previous,  up
-
-@chapter Buffer contents
-@cindex Buffer contents
-
-The display contains four columns.  They contain, from left to right:
-
-@itemize @bullet
-@item
-An asterisk when the file is @dfn{marked} (@pxref{Selected
-files}).@refill
-@item
-The status of the file.  See @xref{File status}, for more
-information.@refill
-@item
-A "need to be checked in"-marker (@samp{ci}).
-@item
-The file name.
-@end itemize
-
-@menu
-* File status::                 The meaning of the second field.
-* Selected files::              How selection works.
-@end menu
-
-
-@node File status, Selected files, Buffer contents, Buffer contents
-@comment  node-name,  next,  previous,  up
-
-@section File status
-@cindex File status
-@cindex Updated (file status)
-@cindex Patched (file status)
-@cindex Modified (file status)
-@cindex Merged (file status)
-@cindex Conflict (file status)
-@cindex Added (file status)
-@cindex Removed (file status)
-@cindex Unknown (file status)
-@cindex Removed from repository (file status)
-@cindex Removed from repository, changed by you (file status)
-@cindex Removed by you, changed in repository (file status)
-@cindex Move away @var{file} - it is in the way (file status)
-@cindex This repository is missing!@dots{} (file status)
-
-The @samp{file status} field can have the following values:
-
-@table @samp
-
-@item Updated
-The file was brought up to date with respect to the repository.  This is
-done for any file that exists in the repository but not in your source,
-and for files that you haven't changed but are not the most recent
-versions available in the repository.@refill
-
-@item Patched
-The file was brought up to date with respect to a remote repository by
-way of fetching and applying a patch to the file in your source.  This
-is done for any file that exists in a remote repository and in your
-source; of which you haven't changed locally but is not the most recent
-version available in the remote repository.@refill
-
-@item Modified
-The file is modified in  your  working  directory, and there was no
-modification to the same file in the repository.@refill
-
-@item Merged
-The file is modified in your working directory, and there were
-modifications in the repository as well as in your copy, but they were
-merged successfully, without conflict, in your working directory.@refill
-
-@item Conflict
-A conflict was detected while trying to merge your changes to @var{file}
-with changes from the source repository.  @var{file} (the copy in your
-working directory) is now the output of the @samp{rcsmerge} command on
-the two versions; an unmodified copy of your file is also in your
-working directory, with the name @file{.#@var{file}.@var{version}},
-where @var{version} is the RCS revision that your modified file started
-from.  @xref{Viewing differences}, for more details.@refill
-
-@item Added
-The file has been added by you, but it still needs to be checked in to
-the repository.@refill
-
-@item Removed
-The file has been removed by you, but it needs to be checked in to the
-repository.  You can resurrect it by typing @kbd{a} (@pxref{Adding and
-removing files}).@refill
-
-@item Unknown
-A file that was detected in your directory, but that neither appears in
-the repository, nor is present on the list of files that CVS should
-ignore.@refill
-
-@end table
-
-There are also a few special cases, that rarely occur, which have longer
-strings in the fields:
-
-@table @samp
-@item Removed from repository
-The file has been removed from your directory since someone has removed
-it from the repository.  (It is still present in the Attic directory, so
-no permanent loss has occurred).  This, unlike the other entries in this
-table, is not an error condition.@refill
-
-@item Removed from repository, changed by you
-You have modified a file that someone have removed from the repository.
-You can correct this situation by removing the file manually (see
-@pxref{Adding and removing files}).@refill
-
-@item Removed by you, changed in repository
-You have removed a file, and before you committed the removal someone
-committed a change to that file.  You could use @kbd{a} to resurrect the
-file (see @pxref{Adding and removing files}).@refill
-
-@item Move away @var{file} - it is in the way
-For some reason CVS does not like the file @var{file}.  Rename or remove
-it.@refill
-
-@item This repository is missing!  Remove this dir manually.
-It is impossible to remove a directory in the CVS repository in a clean
-way.  Someone have tried to remove one, and CVS gets confused.  Remove
-your copy of the directory.@refill
-@end table
-
-
-@node Selected files,  , File status, Buffer contents
-@comment  node-name,  next,  previous,  up
-
-@section Selected files
-@cindex Selected files
-@cindex Marked files
-@cindex File selection
-@cindex Active files
-
-Many of the commands works on the current set of @dfn{selected} files.
-
-@itemize @bullet
-@item
-If there are any files that are marked they constitute the set of
-selected files.@refill
-@item
-Otherwise, if the cursor points to a file, that file is the selected
-file.@refill
-@item
-Otherwise, if the cursor points to a directory, all the files in that
-directory that appears in the buffer are the selected files.
-@end itemize
-
-This scheme might seem a little complicated, but once one get used to
-it, it is quite powerful.
-
-@xref{Marking files} tells how you mark and unmark files.
-
-
-@node Commands, Customization, Buffer contents, Top
-@comment  node-name,  next,  previous,  up
-
-@chapter Commands
-
-@iftex
-This chapter describes all the commands that you can use in pcl-cvs.
-@end iftex
-@ifinfo
-The nodes in this menu contains explanations about all the commands that
-you can use in pcl-cvs.  They are grouped together by type.
-@end ifinfo
-
-@menu
-* Updating the directory::      Commands to update the local directory
-* Movement commands::           How to move up and down in the buffer
-* Marking files::               How to mark files that other commands
-                                will later operate on.
-* Committing changes::          Checking in your modifications to the
-                                CVS repository.
-* Editing files::               Loading files into Emacs.
-* Getting info about files::    Display the log and status of files.
-* Adding and removing files::   Adding and removing files
-* Undoing changes::             Undoing changes
-* Removing handled entries::    Uninteresting lines can easily be removed.
-* Ignoring files::              Telling CVS to ignore generated files.
-* Viewing differences::         Commands to @samp{diff} different versions.
-* Invoking Ediff::              Running @samp{ediff} from @samp{*cvs*} buffer.
-* Invoking Emerge::             Running @samp{emerge} from @samp{*cvs*} buffer.
-* Reverting your buffers::      Reverting your buffers
-* Miscellaneous commands::      Miscellaneous commands
-@end menu
-
-
-@node Updating the directory, Movement commands, Commands, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Updating the directory
-@findex cvs-update
-@findex cvs-mode-update-no-prompt
-@findex cvs-delete-lock
-@cindex Getting the *cvs* buffer
-@kindex g - Rerun @samp{cvs update}
-
-
-@table @kbd
-
-@item M-x cvs-update
-Run a @samp{cvs update} command.  You will be asked for the directory in
-which the @samp{cvs update} will be run.  The output will be parsed by
-pcl-cvs, and the result printed in the @samp{*cvs*} buffer (see
-@pxref{Buffer contents} for a description of the contents).@refill
-
-By default, @samp{cvs-update} will descend recursively into
-subdirectories.  You can avoid that behavior by giving a prefix
-argument to it (e.g., by typing @kbd{C-u M-x cvs-update RET}).@refill
-
-All other commands in pcl-cvs requires that you have a @samp{*cvs*}
-buffer.  This is the command that you use to get one.@refill
-
-CVS uses lock files in the repository to ensure the integrity of the
-data files in the repository.  They might be left behind i.e. if a
-workstation crashes in the middle of a CVS operation.  CVS outputs a
-message when it is waiting for a lock file to go away.  Pcl-cvs will
-show the same message in the *cvs* buffer, together with instructions
-for deleting the lock files.  You should normally not have to delete
-them manually --- just wait a little while and the problem should fix
-itself.  But if the lock files doesn't disappear you can delete them
-with @kbd{M-x cvs-delete-lock RET}.@refill
-
-@item g
-This will run @samp{cvs update} again.  It will always use the same
-buffer that was used with the previous @samp{cvs update}.  Give a prefix
-argument to avoid descending into subdirectories.  This runs the command
-@samp{cvs-mode-update-no-prompt}.@refill
-
-@item G
-This will run @samp{cvs update} and prompt for a new directory to
-update.  This runs the command @samp{cvs-update}.@refill
-
-@end table
-
-
-@node Movement commands, Marking files, Updating the directory, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Movement Commands
-@cindex Movement Commands
-@findex cookie-next-cookie
-@findex cookie-previous-cookie
-@kindex SPC - Move down one file
-@kindex C-n - Move down one file
-@kindex n - Move down one file
-@kindex C-p - Move up one file
-@kindex p - Move up on file
-
-You can use most normal Emacs commands to move forward and backward in
-the buffer.  Some keys are rebound to functions that take advantage of
-the fact that the buffer is a pcl-cvs buffer:
-
-
-@table @kbd
-@item SPC
-@itemx C-n
-@itemx n
-These keys move the cursor one file forward, towards the end of the
-buffer (@code{cookie-next-cookie}).
-
-@item C-p
-@itemx p
-These keys move one file backward, towards the beginning of the buffer
-(@code{cookie-previous-cookie}).
-@end table
-
-
-@node Marking files, Committing changes, Movement commands, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Marking files
-@cindex Selecting files (commands to mark files)
-@cindex Marking files
-@kindex m - marking a file
-@kindex M - marking all files
-@kindex u - unmark a file
-@kindex ESC DEL - unmark all files
-@kindex DEL - unmark previous file
-@findex cvs-mode-mark
-@findex cvs-mode-unmark
-@findex cvs-mode-mark-all-files
-@findex cvs-mode-unmark-all-files
-@findex cvs-mode-unmark-up
-
-Pcl-cvs works on a set of @dfn{selected files} (@pxref{Selected files}).
-You can mark and unmark files with these commands:
-
-@table @kbd
-@item m
-This marks the file that the cursor is positioned on.  If the cursor is
-positioned on a directory all files in that directory will be marked.
-(@code{cvs-mode-mark}).
-
-@item u
-Unmark the file that the cursor is positioned on.  If the cursor is on a
-directory, all files in that directory will be unmarked.
-(@code{cvs-mode-unmark}).@refill
-
-@item M
-Mark @emph{all} files in the buffer (@code{cvs-mode-mark-all-files}).
-
-@item @key{ESC} @key{DEL}
-Unmark @emph{all} files (@code{cvs-mode-unmark-all-files}).
-
-@item @key{DEL}
-Unmark the file on the previous line, and move point to that line
-(@code{cvs-mode-unmark-up}).
-@end table
-
-
-@node Committing changes, Editing files, Marking files, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Committing changes
-@cindex Committing changes
-@cindex Ci
-@findex cvs-mode-commit
-@findex cvs-mode-changelog-commit
-@kindex c - commit files
-@kindex C - commit files with ChangeLog message
-@vindex cvs-erase-input-buffer (variable)
-@vindex cvs-auto-revert-after-commit (variable)
-@cindex Commit buffer
-@cindex Edit buffer
-@cindex Erasing commit message
-@cindex Reverting buffers after commit
-
-@table @kbd
-
-@item c
-All files that have a "need to be checked in"-marker (@pxref{Buffer
-contents}) can be checked in with the @kbd{c} command.  It checks in all
-selected files (@pxref{Selected files}) (except those who lack the
-"ci"-marker - they are ignored).  Pressing @kbd{c} causes
-@code{cvs-mode-commit} to be run.@refill
-
-When you press @kbd{c} you will get a buffer called
-@samp{*cvs-commit-message*}.  Enter the log message for the file(s) in
-it.  When you are ready you should press @kbd{C-c C-c} to actually
-commit the files (using @code{cvs-edit-done}).
-
-Normally the @samp{*cvs-commit-message*} buffer will retain the log
-message from the previous commit, but if the variable
-@code{cvs-erase-input-buffer} is set to a non-@code{nil} value the
-buffer will be erased.  Point and mark will always be located around the
-entire buffer so that you can easily erase it with @kbd{C-w}
-(@samp{kill-region}).@refill
-
-If you are editing the files in your emacs an automatic
-@samp{revert-buffer} will be performed.  (If the file contains
-@samp{$@asis{Id}$} keywords @samp{cvs commit} will write a new file with
-the new values substituted.  The auto-revert makes sure that you get
-them into your buffer).  The revert will not occur if you have modified
-your buffer, or if @samp{cvs-auto-revert-after-commit} is set to
-@samp{nil}.@refill
-
-@item C
-This is just like @samp{cvs-mode-commit}, except that it tries to
-provide appropriate default log messages by looking at the
-@samp{ChangeLog}s in the current directory.  The idea is to write your
-ChangeLog entries first, and then use this command to commit your
-changes.  Pressing @kbd{C} causes @code{cvs-mode-changelog-commit} to be
-run.@refill
-
-To select default log text, pcl-cvs:
-@itemize @minus
-@item
-finds the ChangeLogs for the files to be checked in;
-@item
-verifies that the top entry in the ChangeLog is on the current date and
-by the current user; if not, no default text is provided;
-@item
-search the ChangeLog entry for paragraphs containing the names of the
-files we're checking in; and finally
-@item
-uses those paragraphs as the default log text in the
-@samp{*cvs-commit-message*} buffer.
-@end itemize
-
-You can then commit the @samp{ChangeLog} file once per day without any
-log message.@refill
-
-@end table
-
-
-@node Editing files, Getting info about files, Committing changes, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Editing files
-@cindex Editing files
-@cindex Finding files
-@cindex Loading files
-@cindex Dired
-@cindex Invoking dired
-@findex cvs-mode-find-file
-@findex cvs-mode-find-file-other-window
-@findex cvs-mode-add-change-log-entry-other-window
-@kindex f - find file or directory
-@kindex o - find file in other window
-@kindex A - add ChangeLog entry
-
-There are currently three commands that can be used to find a file (that
-is, load it into a buffer and start editing it there).  These commands
-work on the line that the cursor is situated at.  They ignore any marked
-files.
-
-@table @kbd
-@item f
-Find the file that the cursor points to.  Run @samp{dired}
-@ifinfo
-(@pxref{Dired,,,Emacs})
-@end ifinfo
-if the cursor points to a directory (@code{cvs-mode-find-file}).@refill
-
-@item o
-Like @kbd{f}, but use another window
-(@code{cvs-mode-find-file-other-window}).@refill
-
-@item A
-Invoke @samp{add-change-log-entry-other-window} to edit a
-@samp{ChangeLog} file.  The @samp{ChangeLog} will be found in the
-directory of the file the cursor points to.
-(@code{cvs-mode-add-change-log-entry-other-window}).@refill
-@end table
-
-
-@node Getting info about files, Adding and removing files, Editing files, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Getting info about files
-@cindex Status (cvs command)
-@cindex Log (RCS/cvs command)
-@cindex Getting status
-@kindex l - run @samp{cvs log}
-@kindex s - run @samp{cvs status}
-@findex cvs-mode-log
-@findex cvs-mode-status
-
-Both of the following commands can be customized.
-@xref{Customization}.@refill
-
-@table @kbd
-@item l
-Run @samp{cvs log} on all selected files, and show the result in a
-temporary buffer (@code{cvs-mode-log}).
-
-@item s
-Run @samp{cvs status} on all selected files, and show the result in a
-temporary buffer (@code{cvs-mode-status}).
-@end table
-
-
-@node Adding and removing files, Undoing changes, Getting info about files, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Adding and removing files
-@cindex Adding files
-@cindex Removing files
-@cindex Resurrecting files
-@cindex Deleting files
-@cindex Putting files under CVS control
-@kindex a - add a file
-@kindex r - remove a file
-@findex cvs-mode-add
-@findex cvs-mode-remove-file
-
-The following commands are available to make it easy to add and remove
-files from the CVS repository.
-
-@table @kbd
-@item a
-Add all selected files.  This command can be used on @samp{Unknown}
-files (see @pxref{File status}).  The status of the file will change to
-@samp{Added}, and you will have to use @kbd{c} (@samp{cvs-mode-commit}, see
-@pxref{Committing changes}) to really add the file to the
-repository.@refill
-
-This command can also be used on @samp{Removed} files (before you commit
-them) to resurrect them.
-
-Selected files that are neither @samp{Unknown} nor @samp{Removed} will
-be ignored by this command.
-
-The command that is run is @code{cvs-mode-add}.
-
-@item r
-This command removes the selected files (after prompting for
-confirmation).  The files are @samp{rm}ed from your directory and
-(unless the status was @samp{Unknown}; @pxref{File status}) they will
-also be @samp{cvs remove}d.  If the files were @samp{Unknown} they will
-disappear from the buffer.  Otherwise their status will change to
-@samp{Removed}, and you must use @kbd{c} (@samp{cvs-mode-commit},
-@pxref{Committing changes}) to commit the removal.@refill
-
-The command that is run is @code{cvs-mode-remove-file}.
-@end table
-
-
-@node Undoing changes, Removing handled entries, Adding and removing files, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Undoing changes
-@cindex Undo changes
-@cindex Flush changes
-@kindex U - undo changes
-@findex cvs-mode-undo-local-changes
-
-@table @kbd
-@item U
-If you have modified a file, and for some reason decide that you don't
-want to keep the changes, you can undo them with this command.  It works
-by removing your working copy of the file and then getting the latest
-version from the repository (@code{cvs-mode-undo-local-changes}.
-@end table
-
-
-@node Removing handled entries, Ignoring files, Undoing changes, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Removing handled entries
-@cindex Expunging uninteresting entries
-@cindex Uninteresting entries, getting rid of them
-@cindex Getting rid of uninteresting lines
-@cindex Removing uninteresting (processed) lines
-@cindex Handled lines, removing them
-@kindex x - remove processed entries
-@kindex C-k - remove selected entries
-@findex cvs-mode-remove-handled
-@findex cvs-mode-acknowledge
-
-@table @kbd
-@item x
-This command allows you to remove all entries that you have processed.
-More specifically, the lines for @samp{Updated} files (@pxref{File
-status} and files that have been checked in (@pxref{Committing changes})
-are removed from the buffer.  If a directory becomes empty the heading
-for that directory is also removed.  This makes it easier to get an
-overview of what needs to be done.
-
-The command is called @code{cvs-mode-remove-handled}.  If
-@samp{cvs-auto-remove-handled} is set to non-@code{nil} this will
-automatically be performed after every commit.@refill
-
-@item C-k
-This command can be used for lines that @samp{cvs-mode-remove-handled} would
-not delete, but that you want to delete (@code{cvs-mode-acknowledge}).
-@end table
-
-
-@node Ignoring files, Viewing differences, Removing handled entries, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Ignoring files
-@kindex i - ignoring files
-@findex cvs-mode-ignore
-
-@table @kbd
-@item i
-Arrange so that CVS will ignore the selected files.  The file names are
-added to the @file{.cvsignore} file in the corresponding directory.  If
-the @file{.cvsignore} doesn't exist it will be created.
-
-The @file{.cvsignore} file should normally be added to the repository,
-but you could ignore it also if you like it better that way.
-
-This runs @code{cvs-mode-ignore}.
-@end table
-
-
-@node Viewing differences, Invoking Ediff, Ignoring files, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Viewing differences
-@cindex Diff
-@cindex Ediff
-@cindex Invoking ediff
-@cindex Conflicts, how to resolve them
-@cindex Viewing differences
-@kindex d - run @samp{cvs diff}
-@kindex b - diff backup file
-@findex cvs-mode-diff-cvs
-@findex cvs-mode-diff-backup
-@vindex cvs-diff-ignore-marks (variable)
-
-@table @kbd
-@item d
-Display a @samp{cvs diff} between the selected files and the RCS version
-that they are based on.  @xref{Customization} describes how you can send
-flags to @samp{cvs diff}.  If @var{cvs-diff-ignore-marks} is set to a
-non-@code{nil} value or if a prefix argument is given (but not both) any
-marked files will not be considered to be selected.
-(@code{cvs-mode-diff-cvs}).@refill
-
-@item b
-If CVS finds a conflict while merging two versions of a file (during a
-@samp{cvs update}, @pxref{Updating the directory}) it will save the
-original file in a file called @file{.#@var{FILE}.@var{VERSION}} where
-@var{FILE} is the name of the file, and @var{VERSION} is the RCS version
-number that your file was based on.@refill
-
-With the @kbd{b} command you can run a @samp{diff} on the files
-@file{.#@var{FILE}.@var{VERSION}} and @file{@var{FILE}}.  You can get a
-context- or Unidiff by setting @samp{cvs-diff-flags} -
-@pxref{Customization}.  This command only works on files that have
-status @samp{Conflict} or @samp{Merged}.@refill
-
-If @var{cvs-diff-ignore-marks} is set to a non-@code{nil} value or if a
-prefix argument is given (but not both) any marked files will not be
-considered to be selected.  (@code{cvs-mode-diff-backup}).@refill
-@end table
-
-
-@node Invoking Ediff, Invoking Emerge, Viewing differences, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Running ediff
-@cindex Ediff
-@cindex Invoking ediff
-@cindex Viewing differences
-@cindex Conflicts, resolving
-@cindex Resolving conflicts
-@kindex e - invoke @samp{ediff}
-@findex cvs-mode-ediff
-@findex run-ediff-from-cvs-buffer
-@findex cvs-old-ediff-interface
-
-@table @kbd
-@item e
-This command works
-slightly different depending on the version of @samp{ediff} and the file
-status.@refill
-
-With modern versions of @samp{ediff}, this command invokes
-@samp{run-ediff-from-cvs-buffer} on one file.@refill
-
-@strong{Note:}  When the file status is @samp{Merged} or @samp{Conflict},
-CVS has already performed a merge.  The resulting file is not used in
-any way if you use this command.  If you use the @kbd{q} command inside
-@samp{ediff} (to successfully terminate a merge) the file that CVS
-created will be overwritten.@refill
-
-Older versions of @samp{ediff} use an interface similar to
-@samp{emerge}.  The function @samp{cvs-old-ediff-interface} is invoked
-if the version of @samp{ediff} you have doesn't support
-@samp{run-ediff-from-cvs-buffer}.  These older versions do not support
-merging of revisions.@refill
-
-@table @asis
-@item @samp{Modified}
-Run @samp{ediff-files} with your working file as file A, and the latest
-revision in the repository as file B.
-
-@item @samp{Merged}
-@itemx @samp{Conflict}
-Run @samp{ediff-files3} with your working file (as it was prior to your
-invocation of @samp{cvs-update}) as file A, the latest revision in the
-repository as file B, and the revision that you based your local
-modifications on as ancestor.
-
-@item @samp{Updated}
-@itemx @samp{Patched}
-Run @samp{ediff-files} with your working file as file A, and a given
-revision in the repository as file B.  You are prompted for the revision
-to ediff against, and you may specify either a tag name or a numerical
-revision number (@pxref{Getting info about files}).
-@end table
-
-@end table
-
-@node Invoking Emerge, Reverting your buffers, Invoking Ediff, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Running emerge
-@cindex Emerge
-@cindex Ediff
-@cindex Viewing differences
-@cindex Invoking emerge
-@cindex Conflicts, resolving
-@cindex Resolving conflicts
-@kindex E - invoke @samp{emerge}
-@findex cvs-mode-emerge
-
-@table @kbd
-@item E
-Invoke @samp{emerge} on one file.  This command works slightly different
-depending on the file status.
-
-@table @asis
-@item @samp{Modified}
-Run @samp{emerge-files} with your working file as file A, and the latest
-revision in the repository as file B.
-
-@item @samp{Merged}
-@itemx @samp{Conflict}
-Run @samp{emerge-files-with-ancestor} with your working file (as it was
-prior to your invocation of @samp{cvs-update}) as file A, the latest
-revision in the repository as file B, and the revision that you based
-your local modifications on as ancestor.
-@end table
-
-@strong{Note:}  When the file status is @samp{Merged} or @samp{Conflict},
-CVS has already performed a merge.  The resulting file is not used in
-any way if you use this command.  If you use the @kbd{q} command inside
-@samp{emerge} (to successfully terminate the merge) the file that CVS
-created will be overwritten.
-
-@end table
-
-
-@node Reverting your buffers, Miscellaneous commands, Invoking Emerge, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Reverting your buffers
-@findex cvs-mode-revert-updated-buffers
-@kindex R - revert buffers
-@cindex Syncing buffers
-@cindex Reverting buffers
-
-@table @kbd
-@item R
-If you are editing (or just viewing) a file in a buffer, and that file
-is changed by CVS during a @samp{cvs-update}, all you have to do is type
-@kbd{R} in the *cvs* buffer to read in the new versions of the
-files.@refill
-
-All files that are @samp{Updated}, @samp{Merged} or in @samp{Conflict}
-are reverted from the disk.  Any other files are ignored.  Only files
-that you were already editing are read.@refill
-
-An error is signalled if you have modified the buffer since it was last
-changed.  (@code{cvs-mode-revert-updated-buffers}).@refill
-@end table
-
-
-@node Miscellaneous commands,  , Reverting your buffers, Commands
-@comment  node-name,  next,  previous,  up
-
-@section Miscellaneous commands
-@findex cvs-byte-compile-files
-@cindex Recompiling elisp files
-@cindex Byte compilation
-@cindex Getting rid of lock files
-@cindex Lock files
-@kindex q - bury the *cvs* buffer
-@findex bury-buffer
-
-@table @kbd
-@item M-x cvs-byte-compile-files
-Byte compile all selected files that end in .el.
-
-@item M-x cvs-delete-lock
-This command can be used in any buffer, and deletes the lock files that
-the *cvs* buffer informs you about.  You should normally never have to
-use this command since CVS tries very carefully to always remove the
-lock files itself.
-
-You can only use this command when a message in the *cvs* buffer tells
-you so.  You should wait a while before using this command in case
-someone else is running a cvs command.
-
-@item q
-Bury the *cvs* buffer.  (@code{bury-buffer}).
-
-@end table
-
-
-@node Customization, Future enhancements, Commands, Top
-@comment  node-name,  next,  previous,  up
-
-@chapter Customization
-@vindex cvs-erase-input-buffer (variable)
-@vindex cvs-inhibit-copyright-message (variable)
-@vindex cvs-diff-flags (variable)
-@vindex cvs-diff-ignore-marks (variable)
-@vindex cvs-log-flags (variable)
-@vindex cvs-status-flags (variable)
-@vindex cvs-auto-remove-handled (variable)
-@vindex cvs-update-prog-output-skip-regexp (variable)
-@vindex cvs-cvsroot (variable)
-@vindex TMPDIR (environment variable)
-@vindex cvs-auto-revert-after-commit (variable)
-@vindex cvs-commit-buffer-require-final-newline (variable)
-@vindex cvs-sort-ignore-file (variable)
-@cindex Inhibiting the Copyright message.
-@cindex Copyright message, getting rid of it
-@cindex Getting rid of the Copyright message.
-@cindex Customization
-@cindex Variables, list of all
-@cindex Erasing the input buffer
-@cindex Context diff, how to get
-@cindex Unidiff, how to get
-@cindex Automatically remove handled files
-@cindex -u option in modules file
-@cindex Modules file (-u option)
-@cindex Update program (-u option in modules file)
-@cindex Reverting buffers after commit
-@cindex Require final newline
-@cindex Automatically inserting newline
-@cindex Commit message, inserting newline
-@cindex Sorting the .cvsignore file
-@cindex .cvsignore file, sorting
-@cindex Automatically sorting .cvsignore
-
-If you have an idea about any customization that would be handy but
-isn't present in this list, please tell me!  @xref{Bugs} for info on how
-to reach me.@refill
-
-@table @samp
-@item cvs-erase-input-buffer
-If set to anything else than @code{nil} the edit buffer will be erased
-before you write the log message (@pxref{Committing changes}).
-
-@item cvs-inhibit-copyright-message
-The copyright message that is displayed on startup can be annoying after
-a while.  Set this variable to @samp{t} if you want to get rid of it.
-(But don't set this to @samp{t} in the system defaults file - new users
-should see this message at least once).
-
-@item cvs-diff-flags
-A list of strings to pass as arguments to the @samp{cvs diff} and
-@samp{diff} programs.  This is used by @samp{cvs-mode-diff-cvs} and
-@samp{cvs-mode-diff-backup} (key @kbd{b}, @pxref{Viewing differences}).  If
-you prefer the Unidiff format you could add this line to your
-@file{.emacs} file:@refill
-
-@example
-(setq cvs-diff-flags '("-u"))
-@end example
-
-@item cvs-diff-ignore-marks
-If this variable is non-@code{nil} or if a prefix argument is given (but
-not both) to @samp{cvs-mode-diff-cvs} or @samp{cvs-mode-diff-backup}
-marked files are not considered selected.
-
-@item cvs-log-flags
-List of strings to send to @samp{cvs log}.  Used by @samp{cvs-mode-log}
-(key @kbd{l}, @pxref{Getting info about files}).
-
-@item cvs-status-flags
-List of strings to send to @samp{cvs status}.  Used by @samp{cvs-mode-status}
-(key @kbd{s}, @pxref{Getting info about files}).
-
-@item cvs-auto-remove-handled
-If this variable is set to any non-@code{nil} value
-@samp{cvs-mode-remove-handled} will be called every time you check in
-files, after the check-in is ready.  @xref{Removing handled
-entries}.@refill
-
-@item cvs-auto-revert-after-commit
-If this variable is set to any non-@samp{nil} value any buffers you have
-that visit a file that is committed will be automatically reverted.
-This variable is default @samp{t}.  @xref{Committing changes}.@refill
-
-@item cvs-update-prog-output-skip-regexp
-The @samp{-u} flag in the @file{modules} file can be used to run a command
-whenever a @samp{cvs update} is performed (see cvs(5)).  This regexp
-is used to search for the last line in that output.  It is normally set
-to @samp{"$"}.  That setting is only correct if the command outputs
-nothing.  Note that pcl-cvs will get very confused if the command
-outputs @emph{anything} to @samp{stderr}.
-
-@item cvs-cvsroot
-This variable can be set to override @samp{CVSROOT}.  It should be a
-string.  If it is set then everytime a cvs command is run it will be
-called as @samp{cvs -d @var{cvs-cvsroot}@dots{}}  This can be useful if
-your site has several repositories.
-
-@item TMPDIR
-Pcl-cvs uses this @emph{environment variable} to decide where to put the
-temporary files it needs.  It defaults to @file{/tmp} if it is not set.
-
-@item cvs-commit-buffer-require-final-newline
-When you enter a log message in the @samp{*cvs-commit-message*} buffer
-pcl-cvs will normally automatically insert a trailing newline, unless
-there already is one.  This behavior can be controlled via
-@samp{cvs-commit-buffer-require-final-newline}.  If it is @samp{t} (the
-default behavior), a newline will always be appended.  If it is
-@samp{nil}, newlines will never be appended.  Any other value causes
-pcl-cvs to ask the user whenever there is no trailing newline in the
-commit message buffer.
-
-@item cvs-sort-ignore-file
-If this variable is set to any non-@samp{nil} value the
-@file{.cvsignore} will always be sorted whenever you use
-@samp{cvs-mode-ignore} to add a file to it.  This option is on by
-default.
-
-@end table
-
-
-@node     Future enhancements, Bugs, Customization, Top
-@comment  node-name,  next,  previous,  up
-
-@chapter Future enhancements
-@cindex Enhancements
-
-Pcl-cvs is still under development and needs a number of enhancements to
-be called complete.  Below is my current wish-list for future releases
-of pcl-cvs.  Please, let me know which of these features you want most.
-They are listed below in approximately the order that I currently think
-I will implement them in.
-
-@itemize @bullet
-@item
-Rewritten parser code.  There are many situations where pcl-cvs will
-fail to recognize the output from CVS.  The situation could be greatly
-increased.
-
-@item
-@samp{cvs-status}.  This will run @samp{cvs status} in a directory and
-produce a buffer that looks pretty much like the current *cvs* buffer.
-That buffer will include information for all version-controlled files.
-(There will be a simple keystroke to remove all "uninteresting" files,
-that is, files that are "Up-to-date").  In this new buffer you will be
-able to update a file, commit a file, et c.  The big win with this is
-that you will be able to watch the differences between your current
-working file and the head revision in the repository before you update
-the file, and you can then choose to update it or let it wait for a
-while longer.
-
-@item
-Log mode.  When this mode is finished you will be able to move around
-(using @kbd{n} and @kbd{p}) between the revisions of a file, mark two of
-them, and run a diff between them.  You will be able to hide branches
-(similar to the way you can hide sub-paragraphs in outline-mode) and do
-merges between revisions.  Other ideas about this are welcome.
-
-@item
-The current model for marks in the *cvs* buffer seems to be confusing.
-I am considering to use the VM model instead, where marks are normally
-inactive.  To activate the mark, you issue a command like
-@samp{cvs-mode-next-command-uses-marks}.  I might implement a flag so
-that you can use either version.  Feedback on this before I start coding
-it is very welcome.
-
-@item
-It should be possible to run commands such as @samp{cvs log}, @samp{cvs
-status} and @samp{cvs commit} directly from a buffer containing a file,
-instead of having to @samp{cvs-update}.  If the directory contains many
-files the @samp{cvs-update} can take quite some time, especially on a
-slow machine.  I planed to put these kind of commands on the prefix
-@kbd{C-c C-v}, but that turned out to be used by for instance c++-mode.
-If you have any suggestions for a better prefix key, please let me know.
-
-@item
-Increased robustness.  For instance, you can not currently press
-@kbd{C-g} when you are entering the description of a file that you are
-adding without confusing pcl-cvs.
-
-@item
-Support for multiple active *cvs* buffers.
-
-@item
-Dired support.  I have an experimental @file{dired-cvs.el} that works
-together with CVS 1.2.  Unfortunately I wrote it on top of a
-non-standard @file{dired.el}, so it must be rewritten.@refill
-
-@item
-An ability to send user-supplied options to all the cvs commands.
-
-@item
-Pcl-cvs is not at all clever about what it should do when @samp{cvs
-update} runs a program (due to the @samp{-u} option in the
-@file{modules} file --- see @samp{cvs(5)}).  The current release uses a
-regexp to search for the end.  At the very least that regexp should be
-configured for different modules.  Tell me if you have any idea about
-what is the right thing to do.  In a perfect world the program should
-also be allowed to print to @samp{stderr} without causing pcl-cvs to
-crash.
-@end itemize
-
-
-If you miss something in this wish-list, let me know!  I don't promise
-that I will write it, but I will at least try to coordinate the efforts
-of making a good Emacs front end to CVS.  See @xref{Bugs} for
-information about how to reach me.@refill
-
-So far, I have written most of pcl-cvs in my all-to-rare spare time.  If
-you want pcl-cvs to be developed faster you can write a contract with
-Signum Support to do the extension.  You can reach Signum Support by
-email to @samp{info@@signum.se} or via mail to Signum Support AB, Box
-2044, S-580 02 Linkoping, Sweden.  Phone:  +46 (0) 13 - 21 46 00.  Fax:
-+46 (0) 13 - 21 47 00.
-
-
-@node   Bugs, COPYING, Future enhancements, Top
-@comment  node-name,  next,  previous,  up
-
-@chapter Bugs (known and unknown)
-@cindex Reporting bugs and ideas
-@cindex Bugs, how to report them
-@cindex Author, how to reach
-@cindex Email to the author
-@cindex Known bugs
-@cindex Bugs, known
-@cindex FAQ
-@cindex Problems, list of common
-
-If you find a bug or misfeature, don't hesitate to tell me!  Send email
-to @samp{ceder@@lysator.liu.se}.
-
-If you have ideas for improvements, or if you have written some
-extensions to this package, I would like to hear from you.  I hope that
-you find this package useful!
-
-Below is a partial list of currently known problems with pcl-cvs version
-1.05.
-
-@table @asis
-@item Commit causes Emacs to hang
-Emacs waits for the @samp{cvs commit} command to finish before you can
-do anything.  If you start a background job from the loginfo file you
-must take care that it closes @samp{stdout} and @samp{stderr} if you do
-not want to wait for it.  (You do that with @samp{background-command &>-
-2&>- &} if you are starting @samp{background-command} from a
-@samp{/bin/sh} shell script).
-
-Your emacs will also hang if there was a lock file in the repository.
-In this case you can type @kbd{C-g} to get control over your emacs
-again.
-
-@item Name clash in Emacs 19
-This is really a bug in Elib or the Emacs 19 distribution.  Both Elib and
-Emacs 19.6 through at least 19.10 contains a file named
-@file{cookie.el}.  One of the files will have to be renamed, and we are
-currently negotiating about which of the files to rename.
-
-@item Commands while cvs-update is running
-It is possible to type commands in the *cvs* buffer while the update is
-running, but error messages is all that you will get.  The error
-messages should be better.
-
-@item Unexpected output from CVS
-Unexpected output from CVS confuses pcl-cvs.  It will currently create a
-bug report that you can mail to me.  It should do something more
-civilized.
-@end table
-
-
-@node COPYING, Function and Variable Index, Bugs, Top
-@comment node-name, next, previous,  up
-
-@appendix GNU GENERAL PUBLIC LICENSE
-@c @include gpl.texinfo
-
-
-@node Function and Variable Index, Concept Index, COPYING, Top
-@comment    node-name,          next,       previous,  up
-
-@unnumbered Function and Variable Index
-
-@printindex fn
-
-
-@node     Concept Index, Key Index, Function and Variable Index, Top
-@comment      node-name, next,        previous,  up
-
-@unnumbered Concept Index
-
-@printindex cp
-
-
-@node     Key Index,  , Concept Index, Top
-@comment      node-name, next,        previous,  up
-
-@unnumbered Key Index
-
-@printindex ky
-
-@summarycontents
-@contents
-@bye
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/texinfo.tex b/gnu/usr.bin/cvs/contrib/pcl-cvs/texinfo.tex
deleted file mode 100644 (file)
index de11a7f..0000000
+++ /dev/null
@@ -1,4381 +0,0 @@
-%% TeX macros to handle texinfo files
-
-%   Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 1994 Free Software Foundation, Inc.
-
-%This texinfo.tex file 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 texinfo.tex file 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 this texinfo.tex file; see the file COPYING.  If not, write
-%to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
-%USA.
-
-
-%In other words, you are welcome to use, share and improve this program.
-%You are forbidden to forbid anyone else to use, share and improve
-%what you give them.   Help stamp out software-hoarding!
-
-% This automatically updates the version number based on RCS.
-\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$fixed-revision: 2.137 $
-\message{Loading texinfo package [Version \texinfoversion]:}
-
-% Print the version number if in a .fmt file.
-\everyjob{\message{[Texinfo version \texinfoversion]}\message{}}
-
-% Save some parts of plain tex whose names we will redefine.
-
-\let\ptextilde=\~
-\let\ptexlbrace=\{
-\let\ptexrbrace=\}
-\let\ptexdots=\dots
-\let\ptexdot=\.
-\let\ptexstar=\*
-\let\ptexend=\end
-\let\ptexbullet=\bullet
-\let\ptexb=\b
-\let\ptexc=\c
-\let\ptexi=\i
-\let\ptext=\t
-\let\ptexl=\l
-\let\ptexL=\L
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- \gdef\tie{\leavevmode\penalty\@M\ }
-}
-\let\~ = \tie                  % And make it available as @~.
-
-\message{Basics,}
-\chardef\other=12
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Set up fixed words for English.
-\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
-\def\putwordInfo{Info}%
-\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
-\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
-\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
-\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
-\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
-\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
-\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
-\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
-\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen \bindingoffset  \bindingoffset=0pt
-\newdimen \normaloffset   \normaloffset=\hoffset
-\newdimen\pagewidth \newdimen\pageheight
-\pagewidth=\hsize \pageheight=\vsize
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal.  We don't just call \tracingall here,
-% since that produces some useless output on the terminal.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\def\loggingall{\tracingcommands2 \tracingstats2
-   \tracingpages1 \tracingoutput1 \tracinglostchars1
-   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
-   \showboxbreadth\maxdimen\showboxdepth\maxdimen
-}%
-
-%---------------------Begin change-----------------------
-%
-%%%% For @cropmarks command.
-% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\cornerlong \newdimen\cornerthick
-\newdimen \topandbottommargin
-\newdimen \outerhsize \newdimen \outervsize
-\cornerlong=1pc\cornerthick=.3pt       % These set size of cropmarks
-\outerhsize=7in
-%\outervsize=9.5in
-% Alternative @smallbook page size is 9.25in
-\outervsize=9.25in
-\topandbottommargin=.75in
-%
-%---------------------End change-----------------------
-
-% \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions itself, but you have to call it yourself.
-\chardef\PAGE=255  \output={\onepageout{\pagecontents\PAGE}}
-\def\onepageout#1{\hoffset=\normaloffset
-\ifodd\pageno  \advance\hoffset by \bindingoffset
-\else \advance\hoffset by -\bindingoffset\fi
-{\escapechar=`\\\relax % makes sure backslash is used in output files.
-\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}%
-{\let\hsize=\pagewidth \makefootline}}}%
-\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-
-%%%% For @cropmarks command %%%%
-
-% Here is a modification of the main output routine for Near East Publications
-% This provides right-angle cropmarks at all four corners.
-% The contents of the page are centerlined into the cropmarks,
-% and any desired binding offset is added as an \hskip on either
-% site of the centerlined box.  (P. A. MacKay, 12 November, 1986)
-%
-\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
-{\escapechar=`\\\relax % makes sure backslash is used in output files.
-                \shipout
-                \vbox to \outervsize{\hsize=\outerhsize
-                 \vbox{\line{\ewtop\hfill\ewtop}}
-                 \nointerlineskip
-                 \line{\vbox{\moveleft\cornerthick\nstop}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nstop}}
-                 \vskip \topandbottommargin
-                 \centerline{\ifodd\pageno\hskip\bindingoffset\fi
-                       \vbox{
-                       {\let\hsize=\pagewidth \makeheadline}
-                       \pagebody{#1}
-                       {\let\hsize=\pagewidth \makefootline}}
-                       \ifodd\pageno\else\hskip\bindingoffset\fi}
-                \vskip \topandbottommargin plus1fill minus1fill
-                 \boxmaxdepth\cornerthick
-                 \line{\vbox{\moveleft\cornerthick\nsbot}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nsbot}}
-                 \nointerlineskip
-                 \vbox{\line{\ewbot\hfill\ewbot}}
-       }}
-  \advancepageno
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-%
-% Do @cropmarks to get crop marks
-\def\cropmarks{\let\onepageout=\croppageout }
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, juha@viisa.uucp (Juha Takala)
-\ifvoid\margin\else % marginal info is present
-  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-%
-% Here are the rules for the cropmarks.  Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
-  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
-  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1.  The argument is the rest of
-% the input line (except we remove a trailing comment).  #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg#1{%
-  \let\next = #1%
-  \begingroup
-    \obeylines
-    \futurelet\temp\parseargx
-}
-
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse.  Otherwise, we're done.
-\def\parseargx{%
-  % \obeyedspace is defined far below, after the definition of \sepspaces.
-  \ifx\obeyedspace\temp
-    \expandafter\parseargdiscardspace
-  \else
-    \expandafter\parseargline
-  \fi
-}
-
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
-{\obeylines %
-  \gdef\parseargline#1^^M{%
-    \endgroup % End of the group started in \parsearg.
-    %
-    % First remove any @c comment, then any @comment.
-    % Result of each macro is put in \toks0.
-    \argremovec #1\c\relax %
-    \expandafter\argremovecomment \the\toks0 \comment\relax %
-    %
-    % Call the caller's macro, saved as \next in \parsearg.
-    \expandafter\next\expandafter{\the\toks0}%
-  }%
-}
-
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us.  The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
-
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
-%    @end itemize  @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'.  Here we remove all active spaces from #1, and assign the
-% result to \toks0.
-%
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands.  (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.)  But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
-  \begingroup
-    \ignoreactivespaces
-    \edef\temp{#1}%
-    \global\toks0 = \expandafter{\temp}%
-  \endgroup
-}
-
-% Change the active space to expand to nothing.
-%
-\begingroup
-  \obeyspaces
-  \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment.  Type Return to continue.}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
-
-% @begin foo  is the same as @foo, for now.
-\newhelp\EMsimple{Type <Return> to continue.}
-
-\outer\def\begin{\parsearg\beginxxx}
-
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
-
-% @end foo executes the definition of \Efoo.
-%
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
-  \removeactivespaces{#1}%
-  \edef\endthing{\the\toks0}%
-  %
-  \expandafter\ifx\csname E\endthing\endcsname\relax
-    \expandafter\ifx\csname \endthing\endcsname\relax
-      % There's no \foo, i.e., no ``environment'' foo.
-      \errhelp = \EMsimple
-      \errmessage{Undefined command `@end \endthing'}%
-    \else
-      \unmatchedenderror\endthing
-    \fi
-  \else
-    % Everything's ok; the right environment has been started.
-    \csname E\endthing\endcsname
-  \fi
-}
-
-% There is an environment #1, but it hasn't been started.  Give an error.
-%
-\def\unmatchedenderror#1{%
-  \errhelp = \EMsimple
-  \errmessage{This `@end #1' doesn't have a matching `@#1'}%
-}
-
-% Define the control sequence \E#1 to give an unmatched @end error.
-%
-\def\defineunmatchedend#1{%
-  \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-}
-
-
-% Single-spacing is done by various environments (specifically, in
-% \nonfillstart and \quotations).
-\newskip\singlespaceskip \singlespaceskip = 12.5pt
-\def\singlespace{%
-  % Why was this kern here?  It messes up equalizing space above and below
-  % environments.  --karl, 6may93
-  %{\advance \baselineskip by -\singlespaceskip
-  %\kern \baselineskip}%
-  \setleading \singlespaceskip
-}
-
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt \char '100}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-
-\def\mylbrace {{\tt \char '173}}
-\def\myrbrace {{\tt \char '175}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
-
-% @enddots{} is an end-of-sentence ellipsis.
-\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
-
-% @! is an end-of-sentence bang.
-\gdef\!{!\spacefactor=3000 }
-
-% @? is an end-of-sentence query.
-\gdef\?{?\spacefactor=3000 }
-
-% @w prevents a word break.  Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line.  According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0).  If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-\def\group{\begingroup
-  \ifnum\catcode13=\active \else
-    \errhelp = \groupinvalidhelp
-    \errmessage{@group invalid in context where filling is enabled}%
-  \fi
-  %
-  % The \vtop we start below produces a box with normal height and large
-  % depth; thus, TeX puts \baselineskip glue before it, and (when the
-  % next line of text is done) \lineskip glue after it.  (See p.82 of
-  % the TeXbook.)  Thus, space below is not quite equal to space
-  % above.  But it's pretty close.
-  \def\Egroup{%
-    \egroup           % End the \vtop.
-    \endgroup         % End the \group.
-  }%
-  %
-  \vtop\bgroup
-    % We have to put a strut on the last line in case the @group is in
-    % the midst of an example, rather than completely enclosing it.
-    % Otherwise, the interline space between the last line of the group
-    % and the first line afterwards is too small.  But we can't put the
-    % strut in \Egroup, since there it would be on a line by itself.
-    % Hence this just inserts a strut at the beginning of each line.
-    \everypar = {\strut}%
-    %
-    % Since we have a strut on every line, we don't need any of TeX's
-    % normal interline spacing.
-    \offinterlineskip
-    %
-    % OK, but now we have to do something about blank
-    % lines in the input in @example-like environments, which normally
-    % just turn into \lisppar, which will insert no space now that we've
-    % turned off the interline space.  Simplest is to make them be an
-    % empty paragraph.
-    \ifx\par\lisppar
-      \edef\par{\leavevmode \par}%
-      %
-      % Reset ^^M's definition to new definition of \par.
-      \obeylines
-    \fi
-    %
-    % Do @comment since we are called inside an environment such as
-    % @example, where each end-of-line in the input causes an
-    % end-of-line in the output.  We don't want the end-of-line after
-    % the `@group' to put extra space in the output.  Since @group
-    % should appear on a line by itself (according to the Texinfo
-    % manual), we don't worry about eating any user text.
-    \comment
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil  \mil=0.001in
-
-\def\need{\parsearg\needx}
-
-% Old definition--didn't work.
-%\def\needx #1{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000
-%\prevdepth=-1000pt
-%}}
-
-\def\needx#1{%
-  % Go into vertical mode, so we don't make a big box in the middle of a
-  % paragraph.
-  \par
-  %
-  % Don't add any leading before our big empty box, but allow a page
-  % break, since the best break might be right here.
-  \allowbreak
-  \nointerlineskip
-  \vtop to #1\mil{\vfil}%
-  %
-  % TeX does not even consider page breaks if a penalty added to the
-  % main vertical list is 10000 or more.  But in order to see if the
-  % empty box we just added fits on the page, we must make it consider
-  % page breaks.  On the other hand, we don't want to actually break the
-  % page after the empty box.  So we use a penalty of 9999.
-  %
-  % There is an extremely small chance that TeX will actually break the
-  % page at this \penalty, if there are no other feasible breakpoints in
-  % sight.  (If the user is using lots of big @group commands, which
-  % almost-but-not-quite fill up a page, TeX will have a hard time doing
-  % good page breaking, for example.)  However, I could not construct an
-  % example where a page broke at this \penalty; if it happens in a real
-  % document, then we can reconsider our strategy.
-  \penalty9999
-  %
-  % Back up by the size of the box, whether we did a page break or not.
-  \kern -#1\mil
-  %
-  % Do not allow a page break right after this kern.
-  \nobreak
-}
-
-% @br   forces paragraph break
-
-\let\br = \par
-
-% @dots{}  output some dots
-
-\def\dots{$\ldots$}
-
-% @page    forces the start of a new page
-
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
-
-% This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
-
-%\hbox{{\rm#1}}\hfil\break}}
-
-% @include file    insert text of that file as input.
-
-\def\include{\parsearg\includezzz}
-%Use \input\thisfile to avoid blank after \input, which may be an active
-%char (in which case the blank would become the \input argument).
-%The grouping keeps the value of \thisfile correct even when @include
-%is nested.
-\def\includezzz #1{\begingroup
-\def\thisfile{#1}\input\thisfile
-\endgroup}
-
-\def\thisfile{}
-
-% @center line   outputs that line, centered
-
-\def\center{\parsearg\centerzzz}
-\def\centerzzz #1{{\advance\hsize by -\leftskip
-\advance\hsize by -\rightskip
-\centerline{#1}}}
-
-% @sp n   outputs n lines of vertical space
-
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\par \vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore  is another way to write a comment
-
-\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
-\parsearg \commentxxx}
-
-\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
-
-\let\c=\comment
-
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
-\let\chapter=\relax
-\let\unnumbered=\relax
-\let\top=\relax
-\let\unnumberedsec=\relax
-\let\unnumberedsection=\relax
-\let\unnumberedsubsec=\relax
-\let\unnumberedsubsection=\relax
-\let\unnumberedsubsubsec=\relax
-\let\unnumberedsubsubsection=\relax
-\let\section=\relax
-\let\subsec=\relax
-\let\subsubsec=\relax
-\let\subsection=\relax
-\let\subsubsection=\relax
-\let\appendix=\relax
-\let\appendixsec=\relax
-\let\appendixsection=\relax
-\let\appendixsubsec=\relax
-\let\appendixsubsection=\relax
-\let\appendixsubsubsec=\relax
-\let\appendixsubsubsection=\relax
-\let\contents=\relax
-\let\smallbook=\relax
-\let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-\def\ignoremorecommands{%
-  \let\defcv = \relax
-  \let\deffn = \relax
-  \let\deffnx = \relax
-  \let\defindex = \relax
-  \let\defivar = \relax
-  \let\defmac = \relax
-  \let\defmethod = \relax
-  \let\defop = \relax
-  \let\defopt = \relax
-  \let\defspec = \relax
-  \let\deftp = \relax
-  \let\deftypefn = \relax
-  \let\deftypefun = \relax
-  \let\deftypevar = \relax
-  \let\deftypevr = \relax
-  \let\defun = \relax
-  \let\defvar = \relax
-  \let\defvr = \relax
-  \let\ref = \relax
-  \let\xref = \relax
-  \let\printindex = \relax
-  \let\pxref = \relax
-  \let\settitle = \relax
-  \let\include = \relax
-  \let\lowersections = \relax
-  \let\down = \relax
-  \let\raisesections = \relax
-  \let\up = \relax
-  \let\set = \relax
-  \let\clear = \relax
-  \let\item = \relax
-  \let\message = \relax
-}
-
-% Ignore @ignore ... @end ignore.
-%
-\def\ignore{\doignore{ignore}}
-
-% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.
-%
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\html{\doignore{html}}
-\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-
-% Ignore text until a line `@end #1'.
-%
-\def\doignore#1{\begingroup
-  % Don't complain about control sequences we have declared \outer.
-  \ignoresections
-  %
-  % Define a command to swallow text until we reach `@end #1'.
-  \long\def\doignoretext##1\end #1{\enddoignore}%
-  %
-  % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \catcode32 = 10
-  %
-  % And now expand that command.
-  \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
-  \ifwarnedobs\relax\else
-  % We need to warn folks that they may have trouble with TeX 3.0.
-  % This uses \immediate\write16 rather than \message to get newlines.
-    \immediate\write16{}
-    \immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
-    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-    \immediate\write16{If you are running another version of TeX, relax.}
-    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-    \immediate\write16{  Then upgrade your TeX installation if you can.}
-    \immediate\write16{If you are stuck with version 3.0, run the}
-    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
-    \immediate\write16{  to use a workaround.}
-    \immediate\write16{}
-    \warnedobstrue
-    \fi
-}
-
-% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
-  \obstexwarn
-  % We must actually expand the ignored text to look for the @end
-  % command, so that nested ignore constructs work.  Thus, we put the
-  % text into a \vbox and then do nothing with the result.  To minimize
-  % the change of memory overflow, we follow the approach outlined on
-  % page 401 of the TeXbook: make the current font be a dummy font.
-  %
-  \setbox0 = \vbox\bgroup
-    % Don't complain about control sequences we have declared \outer.
-    \ignoresections
-    %
-    % Define `@end #1' to end the box, which will in turn undefine the
-    % @end command again.
-    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-    %
-    % We are going to be parsing Texinfo commands.  Most cause no
-    % trouble when they are used incorrectly, but some commands do
-    % complicated argument parsing or otherwise get confused, so we
-    % undefine them.
-    %
-    % We can't do anything about stray @-signs, unfortunately;
-    % they'll produce `undefined control sequence' errors.
-    \ignoremorecommands
-    %
-    % Set the current font to be \nullfont, a TeX primitive, and define
-    % all the font commands to also use \nullfont.  We don't use
-    % dummy.tfm, as suggested in the TeXbook, because not all sites
-    % might have that installed.  Therefore, math mode will still
-    % produce output, but that should be an extremely small amount of
-    % stuff compared to the main input.
-    %
-    \nullfont
-    \let\tenrm = \nullfont  \let\tenit = \nullfont  \let\tensl = \nullfont
-    \let\tenbf = \nullfont  \let\tentt = \nullfont  \let\smallcaps = \nullfont
-    \let\tensf = \nullfont
-    % Similarly for index fonts (mostly for their use in
-    % smallexample)
-    \let\indrm = \nullfont  \let\indit = \nullfont  \let\indsl = \nullfont
-    \let\indbf = \nullfont  \let\indtt = \nullfont  \let\indsc = \nullfont
-    \let\indsf = \nullfont
-    %
-    % Don't complain when characters are missing from the fonts.
-    \tracinglostchars = 0
-    %
-    % Don't bother to do space factor calculations.
-    \frenchspacing
-    %
-    % Don't report underfull hboxes.
-    \hbadness = 10000
-    %
-    % Do minimal line-breaking.
-    \pretolerance = 10000
-    %
-    % Do not execute instructions in @tex
-    \def\tex{\doignore{tex}}
-}
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it.
-%
-\def\set{\parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
-  \def\temp{#2}%
-  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-  \fi
-}
-\def\setzzz#1#2 \endsetzzz{\expandafter\xdef\csname SET#1\endcsname{#2}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-
-% @value{foo} gets the text saved in variable foo.
-%
-\def\value#1{\expandafter
-               \ifx\csname SET#1\endcsname\relax
-                       {\{No value for ``#1''\}}
-               \else \csname SET#1\endcsname \fi}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\ifsetxxx}
-\def\ifsetxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifsetfail
-  \else
-    \expandafter\ifsetsucceed
-  \fi
-}
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
-
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-\def\ifclear{\parsearg\ifclearxxx}
-\def\ifclearxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifclearsucceed
-  \else
-    \expandafter\ifclearfail
-  \fi
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex always succeeds; we read the text following, through @end
-% iftex).  But `@end iftex' should be valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\defineunmatchedend{iftex}
-
-% We can't just want to start a group at @iftex (for example) and end it
-% at @end iftex, since then @set commands inside the conditional have no
-% effect (they'd get reverted at the end of the group).  So we must
-% define \Eiftex to redefine itself to be its previous value.  (We can't
-% just define it to fail again with an ``unmatched end'' error, since
-% the @ifset might be nested.)
-%
-\def\conditionalsucceed#1{%
-  \edef\temp{%
-    % Remember the current value of \E#1.
-    \let\nece{prevE#1} = \nece{E#1}%
-    %
-    % At the `@end #1', redefine \E#1 to be its previous value.
-    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-  }%
-  \temp
-}
-
-% We need to expand lots of \csname's, but we don't want to expand the
-% control sequences after we've constructed them.
-%
-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-
-% @asis just yields its argument.  Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math means output in math mode.
-% We don't use $'s directly in the definition of \math because control
-% sequences like \math are expanded when the toc file is written.  Then,
-% we read the toc file back, the $'s will be normal characters (as they
-% should be, according to the definition of Texinfo).  So we must use a
-% control sequence to switch into and out of math mode.
-%
-% This isn't quite enough for @math to work properly in indices, but it
-% seems unlikely it will ever be needed there.
-%
-\let\implicitmath = $
-\def\math#1{\implicitmath #1\implicitmath}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
-
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
-
-\def\donoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\setref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\unnumbnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\appendixnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\let\refill=\relax
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
-   \readauxfile
-   \opencontents
-   \openindices
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-   \comment % Ignore the actual filename.
-}
-
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
-  node \samp{\ignorespaces#1{}}}
-
-\message{fonts,}
-
-% Font-change commands.
-
-% Texinfo supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
-\newfam\sffam
-\def\sf{\fam=\sffam \tensf}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-%% Try out Computer Modern fonts at \magstephalf
-\let\mainmagstep=\magstephalf
-
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-\def\setfont#1#2{\font#1=\fontprefix#2}
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\undefined
-\def\fontprefix{cm}
-\fi
-
-\ifx\bigger\relax
-\let\mainmagstep=\magstep1
-\setfont\textrm{r12}
-\setfont\texttt{tt12}
-\else
-\setfont\textrm{r10 scaled \mainmagstep}
-\setfont\texttt{tt10 scaled \mainmagstep}
-\fi
-% Instead of cmb10, you many want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10.
-\setfont\textbf{b10 scaled \mainmagstep}
-\setfont\textit{ti10 scaled \mainmagstep}
-\setfont\textsl{sl10 scaled \mainmagstep}
-\setfont\textsf{ss10 scaled \mainmagstep}
-\setfont\textsc{csc10 scaled \mainmagstep}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-
-% A few fonts for @defun, etc.
-\setfont\defbf{bx10 scaled \magstep1} %was 1314
-\setfont\deftt{tt10 scaled \magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-% Fonts for indices and small examples.
-% We actually use the slanted font rather than the italic,
-% because texinfo normally uses the slanted fonts for that.
-% Do not make many font distinctions in general in the index, since they
-% aren't very useful.
-\setfont\ninett{tt9}
-\setfont\indrm{r9}
-\setfont\indit{sl9}
-\let\indsl=\indit
-\let\indtt=\ninett
-\let\indsf=\indrm
-\let\indbf=\indrm
-\let\indsc=\indrm
-\font\indi=cmmi9
-\font\indsy=cmsy9
-
-% Fonts for headings
-\setfont\chaprm{bx12 scaled \magstep2}
-\setfont\chapit{ti12 scaled \magstep2}
-\setfont\chapsl{sl12 scaled \magstep2}
-\setfont\chaptt{tt12 scaled \magstep2}
-\setfont\chapsf{ss12 scaled \magstep2}
-\let\chapbf=\chaprm
-\setfont\chapsc{csc10 scaled\magstep3}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-
-\setfont\secrm{bx12 scaled \magstep1}
-\setfont\secit{ti12 scaled \magstep1}
-\setfont\secsl{sl12 scaled \magstep1}
-\setfont\sectt{tt12 scaled \magstep1}
-\setfont\secsf{ss12 scaled \magstep1}
-\setfont\secbf{bx12 scaled \magstep1}
-\setfont\secsc{csc10 scaled\magstep2}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-
-% \setfont\ssecrm{bx10 scaled \magstep1}    % This size an font looked bad.
-% \setfont\ssecit{cmti10 scaled \magstep1}    % The letters were too crowded.
-% \setfont\ssecsl{sl10 scaled \magstep1}
-% \setfont\ssectt{tt10 scaled \magstep1}
-% \setfont\ssecsf{ss10 scaled \magstep1}
-
-%\setfont\ssecrm{b10 scaled 1315}      % Note the use of cmb rather than cmbx.
-%\setfont\ssecit{ti10 scaled 1315}     % Also, the size is a little larger than
-%\setfont\ssecsl{sl10 scaled 1315}     % being scaled magstep1.
-%\setfont\ssectt{tt10 scaled 1315}
-%\setfont\ssecsf{ss10 scaled 1315}
-
-%\let\ssecbf=\ssecrm
-
-\setfont\ssecrm{bx12 scaled \magstephalf}
-\setfont\ssecit{ti12 scaled \magstephalf}
-\setfont\ssecsl{sl12 scaled \magstephalf}
-\setfont\ssectt{tt12 scaled \magstephalf}
-\setfont\ssecsf{ss12 scaled \magstephalf}
-\setfont\ssecbf{bx12 scaled \magstephalf}
-\setfont\ssecsc{csc10 scaled \magstep1}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled \magstep1
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
-
-% Fonts for title page:
-\setfont\titlerm{bx12 scaled \magstep3}
-\let\authorrm = \secrm
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families.  Since
-% texinfo doesn't allow for producing subscripts and superscripts, we
-% don't bother to reset \scriptfont and \scriptscriptfont (which would
-% also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
-  \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
-  \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
-  \textfont\ttfam = \tentt \textfont\sffam = \tensf
-}
-
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE.  We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current.  Plain TeX does, for example,
-% \def\bf{\fam=\bffam \tenbf}  By redefining \tenbf, we obviate the need
-% to redefine \bf itself.
-\def\textfonts{%
-  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
-  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
-  \resetmathfonts}
-\def\chapfonts{%
-  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
-  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
-  \resetmathfonts}
-\def\secfonts{%
-  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
-  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
-  \resetmathfonts}
-\def\subsecfonts{%
-  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
-  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
-  \resetmathfonts}
-\def\indexfonts{%
-  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
-  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy
-  \resetmathfonts}
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\textfonts
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Fonts for short table of contents.
-\setfont\shortcontrm{r12}
-\setfont\shortcontbf{bx12}
-\setfont\shortcontsl{sl12}
-
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
-
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
-\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
-
-\let\i=\smartitalic
-\let\var=\smartitalic
-\let\dfn=\smartitalic
-\let\emph=\smartitalic
-\let\cite=\smartitalic
-
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph.  Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-\def\t#1{%
-  {\tt \nohyphenation \rawbackslash \frenchspacing #1}%
-  \null
-}
-\let\ttfont = \t
-%\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null}
-\def\samp #1{`\tclose{#1}'\null}
-\def\key #1{{\tt \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-\let\file=\samp
-
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
-\def\tclose#1{%
-  {%
-    % Change normal interword space to be same as for the current font.
-    \spaceskip = \fontdimen2\font
-    %
-    % Switch to typewriter.
-    \tt
-    %
-    % But `\ ' produces the large typewriter interword space.
-    \def\ {{\spaceskip = 0pt{} }}%
-    %
-    % Turn off hyphenation.
-    \nohyphenation
-    %
-    \rawbackslash
-    \frenchspacing
-    #1%
-  }%
-  \null
-}
-
-% We *must* turn on hyphenation at `-' and `_' in \code.
-% Otherwise, it is too hard to avoid overful hboxes
-% in the Emacs manual, the Library manual, etc.
-
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate an a dash.
-%  -- rms.
-{
-\catcode`\-=\active
-\catcode`\_=\active
-\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
-% The following is used by \doprintindex to insure that long function names
-% wrap around.  It is necessary for - and _ to be active before the index is
-% read from the file, as \entry parses the arguments long before \code is
-% ever called.  -- mycroft
-\global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}
-}
-\def\realdash{-}
-\def\realunder{_}
-\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\normalunderscore\discretionary{}{}{}}
-\def\codex #1{\tclose{#1}\endgroup}
-
-%\let\exp=\tclose  %Was temporary
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else\tclose{\look}\fi
-\else\tclose{\look}\fi}
-
-% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of
-% @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-\def\l#1{{\li #1}\null}                %
-
-\def\r#1{{\rm #1}}             % roman font
-% Use of \lowercase was suggested.
-\def\sc#1{{\smallcaps#1}}      % smallcaps font
-\def\ii#1{{\it #1}}            % italic font
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page.  Must do @settitle before @titlepage.
-\def\titlefont#1{{\titlerm #1}}
-
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-       \endgroup\page\hbox{}\page}
-
-\def\titlepage{\begingroup \parindent=0pt \textfonts
-   \let\subtitlerm=\tenrm
-% I deinstalled the following change because \cmr12 is undefined.
-% This change was not in the ChangeLog anyway.  --rms.
-%   \let\subtitlerm=\cmr12
-   \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
-   %
-   \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
-   %
-   % Leave some space at the very top of the page.
-   \vglue\titlepagetopglue
-   %
-   % Now you can print the title using @title.
-   \def\title{\parsearg\titlezzz}%
-   \def\titlezzz##1{\leftline{\titlefont{##1}}
-                   % print a rule at the page bottom also.
-                   \finishedtitlepagefalse
-                   \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
-   % No rule at page bottom unless we print one at the top with @title.
-   \finishedtitlepagetrue
-   %
-   % Now you can put text using @subtitle.
-   \def\subtitle{\parsearg\subtitlezzz}%
-   \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
-   %
-   % @author should come last, but may come many times.
-   \def\author{\parsearg\authorzzz}%
-   \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
-      {\authorfont \leftline{##1}}}%
-   %
-   % Most title ``pages'' are actually two pages long, with space
-   % at the top of the second.  We don't want the ragged left on the second.
-   \let\oldpage = \page
-   \def\page{%
-      \iffinishedtitlepage\else
-        \finishtitlepage
-      \fi
-      \oldpage
-      \let\page = \oldpage
-      \hbox{}}%
-%   \def\page{\oldpage \hbox{}}
-}
-
-\def\Etitlepage{%
-   \iffinishedtitlepage\else
-      \finishtitlepage
-   \fi
-   % It is important to do the page break before ending the group,
-   % because the headline and footline are only empty inside the group.
-   % If we use the new definition of \page, we always get a blank page
-   % after the title page, which we certainly don't want.
-   \oldpage
-   \endgroup
-   \HEADINGSon
-}
-
-\def\finishtitlepage{%
-   \vskip4pt \hrule height 2pt width \hsize
-   \vskip\titlepagebottomglue
-   \finishedtitlepagetrue
-}
-
-%%% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks \evenheadline    % Token sequence for heading line of even pages
-\newtoks \oddheadline     % Token sequence for heading line of odd pages
-\newtoks \evenfootline    % Token sequence for footing line of even pages
-\newtoks \oddfootline     % Token sequence for footing line of odd pages
-
-% Now make Tex use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
-                            \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
-                            \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what  @headings on  does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
-
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
-\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish}
-\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-%
-}% unbind the catcode of @.
-
-% @headings double     turns headings on for double-sided printing.
-% @headings single     turns headings on for single-sided printing.
-% @headings off                turns them off.
-% @headings on         same as @headings double, retained for compatibility.
-% @headings after      turns on double-sided headings after this page.
-% @headings doubleafter        turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\HEADINGSoff{
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{
-%\pagealignmacro
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-}
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{
-%\pagealignmacro
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-}
-
-% Subroutines used in generating headings
-% Produces Day Month Year style of output.
-\def\today{\number\day\space
-\ifcase\month\or
-January\or February\or March\or April\or May\or June\or
-July\or August\or September\or October\or November\or December\fi
-\space\number\year}
-
-% Use this if you want the Month Day, Year style of output.
-%\def\today{\ifcase\month\or
-%January\or February\or March\or April\or May\or June\or
-%July\or August\or September\or October\or November\or December\fi
-%\space\number\day, \number\year}
-
-% @settitle line...  specifies the title of the document, for headings
-% It generates no output of its own
-
-\def\thistitle{No Title}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
-
-\message{tables,}
-
-% @tabs -- simple alignment
-
-% These don't work.  For one thing, \+ is defined as outer.
-% So these macros cannot even be defined.
-
-%\def\tabs{\parsearg\tabszzz}
-%\def\tabszzz #1{\settabs\+#1\cr}
-%\def\tabline{\parsearg\tablinezzz}
-%\def\tablinezzz #1{\+#1\cr}
-%\def\&{&}
-
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent  \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin  \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
-                 \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
-                 \itemzzz {#1}}
-
-\def\itemzzz #1{\begingroup %
-  \advance\hsize by -\rightskip
-  \advance\hsize by -\tableindent
-  \setbox0=\hbox{\itemfont{#1}}%
-  \itemindex{#1}%
-  \nobreak % This prevents a break before @itemx.
-  %
-  % Be sure we are not still in the middle of a paragraph.
-  %{\parskip = 0in
-  %\par
-  %}%
-  %
-  % If the item text does not fit in the space we have, put it on a line
-  % by itself, and do not allow a page break either before or after that
-  % line.  We do not start a paragraph here because then if the next
-  % command is, e.g., @kindex, the whatsit would get put into the
-  % horizontal list on a line by itself, resulting in extra blank space.
-  \ifdim \wd0>\itemmax
-    %
-    % Make this a paragraph so we get the \parskip glue and wrapping,
-    % but leave it ragged-right.
-    \begingroup
-      \advance\leftskip by-\tableindent
-      \advance\hsize by\tableindent
-      \advance\rightskip by0pt plus1fil
-      \leavevmode\unhbox0\par
-    \endgroup
-    %
-    % We're going to be starting a paragraph, but we don't want the
-    % \parskip glue -- logically it's part of the @item we just started.
-    \nobreak \vskip-\parskip
-    %
-    % Stop a page break at the \parskip glue coming up.  Unfortunately
-    % we can't prevent a possible page break at the following
-    % \baselineskip glue.
-    \nobreak
-    \endgroup
-    \itemxneedsnegativevskipfalse
-  \else
-    % The item text fits into the space.  Start a paragraph, so that the
-    % following text (if any) will end up on the same line.  Since that
-    % text will be indented by \tableindent, we make the item text be in
-    % a zero-width box.
-    \noindent
-    \rlap{\hskip -\tableindent\box0}\ignorespaces%
-    \endgroup%
-    \itemxneedsnegativevskiptrue%
-  \fi
-}
-
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-%% Contains a kludge to get @end[description] to work
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1        \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1        \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1        \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Neccessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
-}
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\def\itemize{\parsearg\itemizezzz}
-
-\def\itemizezzz #1{%
-  \begingroup % ended by the @end itemsize
-  \itemizey {#1}{\Eitemize}
-}
-
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
-
-% Set sfcode to normal for the chars that usually have another value.
-% These are `.?!:;,'
-\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
-  \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list.  No
-% argument is the same as `1'.
-%
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
-  \begingroup % ended by the @end enumerate
-  %
-  % If we were given no argument, pretend we were given `1'.
-  \def\thearg{#1}%
-  \ifx\thearg\empty \def\thearg{1}\fi
-  %
-  % Detect if the argument is a single token.  If so, it might be a
-  % letter.  Otherwise, the only valid thing it can be is a number.
-  % (We will always have one token, because of the test we just made.
-  % This is a good thing, since \splitoff doesn't work given nothing at
-  % all -- the first parameter is undelimited.)
-  \expandafter\splitoff\thearg\endmark
-  \ifx\rest\empty
-    % Only one token in the argument.  It could still be anything.
-    % A ``lowercase letter'' is one whose \lccode is nonzero.
-    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
-    %   not equal to itself.
-    % Otherwise, we assume it's a number.
-    %
-    % We need the \relax at the end of the \ifnum lines to stop TeX from
-    % continuing to look for a <number>.
-    %
-    \ifnum\lccode\expandafter`\thearg=0\relax
-      \numericenumerate % a number (we hope)
-    \else
-      % It's a letter.
-      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
-        \lowercaseenumerate % lowercase letter
-      \else
-        \uppercaseenumerate % uppercase letter
-      \fi
-    \fi
-  \else
-    % Multiple tokens in the argument.  We hope it's a number.
-    \numericenumerate
-  \fi
-}
-
-% An @enumerate whose labels are integers.  The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
-  \itemno = \thearg
-  \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more lowercase letters in @enumerate; get a bigger
-                  alphabet}%
-    \fi
-    \char\lccode\itemno
-  }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more uppercase letters in @enumerate; get a bigger
-                  alphabet}
-    \fi
-    \char\uccode\itemno
-  }%
-}
-
-% Call itemizey, adding a period to the first argument and supplying the
-% common last two arguments.  Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
-  \advance\itemno by -1
-  \itemizey{#1.}\Eenumerate\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{\in hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94
-%
-% @multitable ... @endmultitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble. Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize: 
-%   @multitable @percentofhsize .2 .3 .5
-%   @item ...
-%
-%   Numbers following @percentofhsize are the percent of the total
-%   current hsize to be used for each column. You may use as many
-%   columns as desired.
-
-% Or use a template:
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item ...
-%   using the widest term desired in each column.
-
-
-% Each new table line starts with @item, each subsequent new column 
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab, @multicolumn or @endmulticolumn do not need to be on their
-% own lines, but it will not hurt if they are.
-
-% Sample multitable:
-
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item first col stuff @tab second col stuff @tab third col
-%   @item 
-%   first col stuff 
-%   @tab 
-%   second col stuff 
-%   @tab 
-%   third col 
-%   @item first col stuff @tab second col stuff 
-%   @tab Many paragraphs of text may be used in any column.
-%     
-%         They will wrap at the width determined by the template.
-%   @item@tab@tab This will be in third column.
-%   @endmultitable
-
-% Default dimensions may be reset by user.
-% @intableparskip will set vertical space between paragraphs in table.
-% @intableparindent will set paragraph indent in table.
-% @spacebetweencols will set horizontal space to be left between columns.
-% @spacebetweenlines will set vertical space to be left between lines.
-
-%%%%
-% Dimensions 
-
-\newdimen\intableparskip
-\newdimen\intableparindent
-\newdimen\spacebetweencols
-\newdimen\spacebetweenlines
-\intableparskip=0pt
-\intableparindent=6pt
-\spacebetweencols=12pt
-\spacebetweenlines=12pt
-
-%%%%
-% Macros used to set up halign preamble:
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\percentofhsize\relax
-\def\xpercentofhsize{\percentofhsize}
-\newif\ifsetpercent
-
-\newcount\colcount
-\def\setuptable#1{\def\firstarg{#1}%
-\ifx\firstarg\xendsetuptable\let\go\relax%
-\else
-  \ifx\firstarg\xpercentofhsize\global\setpercenttrue%
-  \else
-    \ifsetpercent
-       \if#1.\else%
-       \global\advance\colcount by1 %
-       \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
-       \fi
-    \else
-       \global\advance\colcount by1
-       \setbox0=\hbox{#1}%
-       \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-    \fi%
-  \fi%
-  \let\go\setuptable%
-\fi\go}
-%%%%
-% multitable syntax
-\def\tab{&}
-
-%%%%
-% @multitable ... @endmultitable definitions:
-
-\def\multitable#1\item{\bgroup
-\let\item\cr
-\tolerance=9500
-\hbadness=9500
-\parskip=\intableparskip
-\parindent=\intableparindent
-\overfullrule=0pt
-\global\colcount=0\relax%
-\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
- % To parse everything between @multitable and @item :
-\def\one{#1}\expandafter\setuptable\one\endsetuptable
- % Need to reset this to 0 after \setuptable.
-\global\colcount=0\relax% 
- %
- % This preamble sets up a generic column definition, which will
- % be used as many times as user calls for columns.
- % \vtop will set a single line and will also let text wrap and 
- % continue for many paragraphs if desired.
-\halign\bgroup&\global\advance\colcount by 1\relax%
-\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
- % In order to keep entries from bumping into each other
- % we will add a \leftskip of \spacebetweencols to all columns after
- % the first one.
- %  If a template has been used, we will add \spacebetweencols 
- % to the width of each template entry.
- %  If user has set preamble in terms of percent of \hsize
- % we will use that dimension as the width of the column, and
- % the \leftskip will keep entries from bumping into each other.
- % Table will start at left margin and final column will justify at
- % right margin.
-\ifnum\colcount=1
-\else
-  \ifsetpercent
-  \else
-   % If user has <not> set preamble in terms of percent of \hsize
-   % we will advance \hsize by \spacebetweencols 
-  \advance\hsize by \spacebetweencols
-  \fi
- % In either case we will make \leftskip=\spacebetweencols:
-\leftskip=\spacebetweencols
-\fi
-\noindent##}\cr%
- % \everycr will reset column counter, \colcount, at the end of
- % each line. Every column  entry will cause \colcount to advance by one. 
- % The table preamble
- % looks at the current \colcount to find the correct column width.
-\global\everycr{\noalign{\nointerlineskip\vskip\spacebetweenlines
-\filbreak%% keeps underfull box messages off when table breaks over pages.
-\global\colcount=0\relax}}}
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that        accumulates this index.  The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-
-\def\newindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1        % Open the file
-\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
-\noexpand\doindex {#1}}
-}
-
-% @defindex foo  ==  \newindex{foo}
-
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-
-\def\newcodeindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1        % Open the file
-\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
-\noexpand\docodeindex {#1}}
-}
-
-\def\defcodeindex{\parsearg\newcodeindex}
-
-% @synindex foo bar    makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-\def\synindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
-\noexpand\doindex {#2}}%
-}
-
-% @syncodeindex foo bar   similar, but put all entries made for index foo
-% inside @code.
-\def\syncodeindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
-\noexpand\docodeindex {#2}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-%  and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-\def\indexdummies{%
-% Take care of the plain tex accent commands.
-\def\"{\realbackslash "}%
-\def\`{\realbackslash `}%
-\def\'{\realbackslash '}%
-\def\^{\realbackslash ^}%
-\def\~{\realbackslash ~}%
-\def\={\realbackslash =}%
-\def\b{\realbackslash b}%
-\def\c{\realbackslash c}%
-\def\d{\realbackslash d}%
-\def\u{\realbackslash u}%
-\def\v{\realbackslash v}%
-\def\H{\realbackslash H}%
-% Take care of the plain tex special European modified letters.
-\def\oe{\realbackslash oe}%
-\def\ae{\realbackslash ae}%
-\def\aa{\realbackslash aa}%
-\def\OE{\realbackslash OE}%
-\def\AE{\realbackslash AE}%
-\def\AA{\realbackslash AA}%
-\def\o{\realbackslash o}%
-\def\O{\realbackslash O}%
-\def\l{\realbackslash l}%
-\def\L{\realbackslash L}%
-\def\ss{\realbackslash ss}%
-% Take care of texinfo commands likely to appear in an index entry.
-\def\_{{\realbackslash _}}%
-\def\w{\realbackslash w }%
-\def\bf{\realbackslash bf }%
-\def\rm{\realbackslash rm }%
-\def\sl{\realbackslash sl }%
-\def\sf{\realbackslash sf}%
-\def\tt{\realbackslash tt}%
-\def\gtr{\realbackslash gtr}%
-\def\less{\realbackslash less}%
-\def\hat{\realbackslash hat}%
-\def\char{\realbackslash char}%
-\def\TeX{\realbackslash TeX}%
-\def\dots{\realbackslash dots }%
-\def\copyright{\realbackslash copyright }%
-\def\tclose##1{\realbackslash tclose {##1}}%
-\def\code##1{\realbackslash code {##1}}%
-\def\samp##1{\realbackslash samp {##1}}%
-\def\t##1{\realbackslash r {##1}}%
-\def\r##1{\realbackslash r {##1}}%
-\def\i##1{\realbackslash i {##1}}%
-\def\b##1{\realbackslash b {##1}}%
-\def\cite##1{\realbackslash cite {##1}}%
-\def\key##1{\realbackslash key {##1}}%
-\def\file##1{\realbackslash file {##1}}%
-\def\var##1{\realbackslash var {##1}}%
-\def\kbd##1{\realbackslash kbd {##1}}%
-\def\dfn##1{\realbackslash dfn {##1}}%
-\def\emph##1{\realbackslash emph {##1}}%
-}
-
-% \indexnofonts no-ops all font-change commands.
-% This is used when outputting the strings to sort the index by.
-\def\indexdummyfont#1{#1}
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
-
-\def\indexnofonts{%
-% Just ignore accents.
-\let\"=\indexdummyfont
-\let\`=\indexdummyfont
-\let\'=\indexdummyfont
-\let\^=\indexdummyfont
-\let\~=\indexdummyfont
-\let\==\indexdummyfont
-\let\b=\indexdummyfont
-\let\c=\indexdummyfont
-\let\d=\indexdummyfont
-\let\u=\indexdummyfont
-\let\v=\indexdummyfont
-\let\H=\indexdummyfont
-% Take care of the plain tex special European modified letters.
-\def\oe{oe}%
-\def\ae{ae}%
-\def\aa{aa}%
-\def\OE{OE}%
-\def\AE{AE}%
-\def\AA{AA}%
-\def\o{o}%
-\def\O{O}%
-\def\l{l}%
-\def\L{L}%
-\def\ss{ss}%
-\let\w=\indexdummyfont
-\let\t=\indexdummyfont
-\let\r=\indexdummyfont
-\let\i=\indexdummyfont
-\let\b=\indexdummyfont
-\let\emph=\indexdummyfont
-\let\strong=\indexdummyfont
-\let\cite=\indexdummyfont
-\let\sc=\indexdummyfont
-%Don't no-op \tt, since it isn't a user-level command
-% and is used in the definitions of the active chars like <, >, |...
-%\let\tt=\indexdummyfont
-\let\tclose=\indexdummyfont
-\let\code=\indexdummyfont
-\let\file=\indexdummyfont
-\let\samp=\indexdummyfont
-\let\kbd=\indexdummyfont
-\let\key=\indexdummyfont
-\let\var=\indexdummyfont
-\let\TeX=\indexdummytex
-\let\dots=\indexdummydots
-}
-
-% To define \realbackslash, we must make \ not be an escape.
-% We must first make another character (@) an escape
-% so we do not become unable to do a definition.
-
-{\catcode`\@=0 \catcode`\\=\other
-@gdef@realbackslash{\}}
-
-\let\indexbackslash=0  %overridden during \printindex.
-
-\let\SETmarginindex=\relax %initialize!
-% workhorse for all \fooindexes
-% #1 is name of index, #2 is stuff to put there
-\def\doind #1#2{%
-% Put the index entry in the margin if desired.
-\ifx\SETmarginindex\relax\else%
-\insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-\fi%
-{\count10=\lastpenalty %
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\escapechar=`\\%
-{\let\folio=0% Expand all macros now EXCEPT \folio
-\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
-% so it will be output as is; and it will print as backslash in the indx.
-%
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2}%
-}%
-% Now produce the complete index entry.  We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}}}%
-\temp }%
-}\penalty\count10}}
-
-\def\dosubind #1#2#3{%
-{\count10=\lastpenalty %
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\escapechar=`\\%
-{\let\folio=0%
-\def\rawbackslashxx{\indexbackslash}%
-%
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2 #3}%
-}%
-% Now produce the complete index entry.  We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
-\temp }%
-}\penalty\count10}}
-
-% The index entry written in the file actually looks like
-%  \entry {sortstring}{page}{topic}
-% or
-%  \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-%  \initial {c}
-%     before the first topic whose initial is c
-%  \entry {topic}{pagelist}
-%     for a topic that is used without subtopics
-%  \primary {topic}
-%     for the beginning of a topic that is used with subtopics
-%  \secondary {subtopic}{pagelist}
-%     for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% This is what you call to cause a particular index to get printed.
-% Write
-% @unnumbered Function Index
-% @printindex fn
-
-\def\printindex{\parsearg\doprintindex}
-
-\def\doprintindex#1{%
-  \tex
-  \dobreak \chapheadingskip {10000}
-  \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
-  \catcode`\$=\other
-  \catcode`\~=\other
-  \indexbreaks
-  %
-  % The following don't help, since the chars were translated
-  % when the raw index was written, and their fonts were discarded
-  % due to \indexnofonts.
-  %\catcode`\"=\active
-  %\catcode`\^=\active
-  %\catcode`\_=\active
-  %\catcode`\|=\active
-  %\catcode`\<=\active
-  %\catcode`\>=\active
-  % %
-  \def\indexbackslash{\rawbackslashxx}
-  \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt
-  \begindoublecolumns
-  %
-  % See if the index file exists and is nonempty.
-  \openin 1 \jobname.#1s
-  \ifeof 1
-    % \enddoublecolumns gets confused if there is no text in the index,
-    % and it loses the chapter title and the aux file entries for the
-    % index.  The easiest way to prevent this problem is to make sure
-    % there is some text.
-    (Index is nonexistent)
-    \else
-    %
-    % If the index file exists but is empty, then \openin leaves \ifeof
-    % false.  We have to make TeX try to read something from the file, so
-    % it can discover if there is anything in it.
-    \read 1 to \temp
-    \ifeof 1
-      (Index is empty)
-    \else
-      \input \jobname.#1s
-    \fi
-  \fi
-  \closein 1
-  \enddoublecolumns
-  \Etex
-}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-% Same as \bigskipamount except no shrink.
-% \balancecolumns gets confused if there is any shrink.
-\newskip\initialskipamount \initialskipamount 12pt plus4pt
-
-\def\initial #1{%
-{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-\ifdim\lastskip<\initialskipamount
-\removelastskip \penalty-200 \vskip \initialskipamount\fi
-\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
-
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin.  It is used for index and table of contents
-% entries.  The paragraph is indented by \leftskip.
-%
-\def\entry #1#2{\begingroup
-  %
-  % Start a new paragraph if necessary, so our assignments below can't
-  % affect previous text.
-  \par
-  %
-  % Do not fill out the last line with white space.
-  \parfillskip = 0in
-  %
-  % No extra space above this paragraph.
-  \parskip = 0in
-  %
-  % Do not prefer a separate line ending with a hyphen to fewer lines.
-  \finalhyphendemerits = 0
-  %
-  % \hangindent is only relevant when the entry text and page number
-  % don't both fit on one line.  In that case, bob suggests starting the
-  % dots pretty far over on the line.  Unfortunately, a large
-  % indentation looks wrong when the entry text itself is broken across
-  % lines.  So we use a small indentation and put up with long leaders.
-  %
-  % \hangafter is reset to 1 (which is the value we want) at the start
-  % of each paragraph, so we need not do anything with that.
-  \hangindent=2em
-  %
-  % When the entry text needs to be broken, just fill out the first line
-  % with blank space.
-  \rightskip = 0pt plus1fil
-  %
-  % Start a ``paragraph'' for the index entry so the line breaking
-  % parameters we've set above will have an effect.
-  \noindent
-  %
-  % Insert the text of the index entry.  TeX will do line-breaking on it.
-  #1%
-  % The following is kluged to not output a line of dots in the index if
-  % there are no page numbers.  The next person who breaks this will be
-  % cursed by a Unix daemon.
-  \def\tempa{{\rm }}%
-  \def\tempb{#2}%
-  \edef\tempc{\tempa}%
-  \edef\tempd{\tempb}%
-  \ifx\tempc\tempd\ \else%
-    %
-    % If we must, put the page number on a line of its own, and fill out
-    % this line with blank space.  (The \hfil is overwhelmed with the
-    % fill leaders glue in \indexdotfill if the page number does fit.)
-    \hfil\penalty50
-    \null\nobreak\indexdotfill % Have leaders before the page number.
-    %
-    % The `\ ' here is removed by the implicit \unskip that TeX does as
-    % part of (the primitive) \par.  Without it, a spurious underfull
-    % \hbox ensues.
-    \ #2% The page number ends the paragraph.
-  \fi%
-  \par
-\endgroup}
-
-% 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}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-
-\def\secondary #1#2{
-{\parfillskip=0in \parskip=0in
-\hangindent =1in \hangafter=1
-\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
-}}
-
-%% Define two-column mode, which is used in indexes.
-%% Adapted from the TeXbook, page 416.
-\catcode `\@=11
-
-\newbox\partialpage
-
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup
-  % Grab any single-column material above us.
-  \output = {\global\setbox\partialpage
-    =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%
-  \eject
-  %
-  % Now switch to the double-column output routine.
-  \output={\doublecolumnout}%
-  %
-  % Change the page size parameters.  We could do this once outside this
-  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
-  % format, but then we repeat the same computation.  Repeating a couple
-  % of assignments once per index is clearly meaningless for the
-  % execution time, so we may as well do it once.
-  %
-  % First we halve the line length, less a little for the gutter between
-  % the columns.  We compute the gutter based on the line length, so it
-  % changes automatically with the paper format.  The magic constant
-  % below is chosen so that the gutter has the same value (well, +- <
-  % 1pt) as it did when we hard-coded it.
-  %
-  % We put the result in a separate register, \doublecolumhsize, so we
-  % can restore it in \pagesofar, after \hsize itself has (potentially)
-  % been clobbered.
-  %
-  \doublecolumnhsize = \hsize
-    \advance\doublecolumnhsize by -.04154\hsize
-    \divide\doublecolumnhsize by 2
-  \hsize = \doublecolumnhsize
-  %
-  % Double the \vsize as well.  (We don't need a separate register here,
-  % since nobody clobbers \vsize.)
-  \vsize = 2\vsize
-  \doublecolumnpagegoal
-}
-
-\def\enddoublecolumns{\eject \endgroup \pagegoal=\vsize \unvbox\partialpage}
-
-\def\doublecolumnsplit{\splittopskip=\topskip \splitmaxdepth=\maxdepth
-  \global\dimen@=\pageheight \global\advance\dimen@ by-\ht\partialpage
-  \global\setbox1=\vsplit255 to\dimen@ \global\setbox0=\vbox{\unvbox1}
-  \global\setbox3=\vsplit255 to\dimen@ \global\setbox2=\vbox{\unvbox3}
-  \ifdim\ht0>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi
-  \ifdim\ht2>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi
-}
-\def\doublecolumnpagegoal{%
-  \dimen@=\vsize \advance\dimen@ by-2\ht\partialpage \global\pagegoal=\dimen@
-}
-\def\pagesofar{\unvbox\partialpage %
-  \hsize=\doublecolumnhsize % have to restore this since output routine
-  \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
-\def\doublecolumnout{%
-  \setbox5=\copy255
-  {\vbadness=10000 \doublecolumnsplit}
-  \ifvbox255
-    \setbox0=\vtop to\dimen@{\unvbox0}
-    \setbox2=\vtop to\dimen@{\unvbox2}
-    \onepageout\pagesofar \unvbox255 \penalty\outputpenalty
-  \else
-    \setbox0=\vbox{\unvbox5}
-    \ifvbox0
-      \dimen@=\ht0 \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
-      \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdepth
-      {\vbadness=10000
-       \loop \global\setbox5=\copy0
-          \setbox1=\vsplit5 to\dimen@
-          \setbox3=\vsplit5 to\dimen@
-          \ifvbox5 \global\advance\dimen@ by1pt \repeat
-        \setbox0=\vbox to\dimen@{\unvbox1}
-        \setbox2=\vbox to\dimen@{\unvbox3}
-        \global\setbox\partialpage=\vbox{\pagesofar}
-        \doublecolumnpagegoal
-      }
-    \fi
-  \fi
-}
-
-\catcode `\@=\other
-\message{sectioning,}
-% Define chapters, sections, etc.
-
-\newcount \chapno
-\newcount \secno        \secno=0
-\newcount \subsecno     \subsecno=0
-\newcount \subsubsecno  \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount \appendixno  \appendixno = `\@
-\def\appendixletter{\char\the\appendixno}
-
-\newwrite \contentsfile
-% This is called from \setfilename.
-\def\opencontents{\openout \contentsfile = \jobname.toc}
-
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it.  @section does likewise
-
-\def\thischapter{} \def\thissection{}
-\def\seccheck#1{\if \pageno<0 %
-\errmessage{@#1 not allowed after generating table of contents}\fi
-%
-}
-
-\def\chapternofonts{%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\def\result{\realbackslash result}
-\def\equiv{\realbackslash equiv}
-\def\expansion{\realbackslash expansion}
-\def\print{\realbackslash print}
-\def\TeX{\realbackslash TeX}
-\def\dots{\realbackslash dots}
-\def\copyright{\realbackslash copyright}
-\def\tt{\realbackslash tt}
-\def\bf{\realbackslash bf }
-\def\w{\realbackslash w}
-\def\less{\realbackslash less}
-\def\gtr{\realbackslash gtr}
-\def\hat{\realbackslash hat}
-\def\char{\realbackslash char}
-\def\tclose##1{\realbackslash tclose {##1}}
-\def\code##1{\realbackslash code {##1}}
-\def\samp##1{\realbackslash samp {##1}}
-\def\r##1{\realbackslash r {##1}}
-\def\b##1{\realbackslash b {##1}}
-\def\key##1{\realbackslash key {##1}}
-\def\file##1{\realbackslash file {##1}}
-\def\kbd##1{\realbackslash kbd {##1}}
-% These are redefined because @smartitalic wouldn't work inside xdef.
-\def\i##1{\realbackslash i {##1}}
-\def\cite##1{\realbackslash cite {##1}}
-\def\var##1{\realbackslash var {##1}}
-\def\emph##1{\realbackslash emph {##1}}
-\def\dfn##1{\realbackslash dfn {##1}}
-}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% Choose a numbered-heading macro
-% #1 is heading level if unmodified by @raisesections or @lowersections
-% #2 is text for heading
-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \chapterzzz{#2}
-\or
-  \seczzz{#2}
-\or
-  \numberedsubseczzz{#2}
-\or
-  \numberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \chapterzzz{#2}
-  \else
-    \numberedsubsubseczzz{#2}
-  \fi
-\fi
-}
-
-% like \numhead, but chooses appendix heading levels
-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \appendixzzz{#2}
-\or
-  \appendixsectionzzz{#2}
-\or
-  \appendixsubseczzz{#2}
-\or
-  \appendixsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \appendixzzz{#2}
-  \else
-    \appendixsubsubseczzz{#2}
-  \fi
-\fi
-}
-
-% like \numhead, but chooses numberless heading levels
-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \unnumberedzzz{#2}
-\or
-  \unnumberedseczzz{#2}
-\or
-  \unnumberedsubseczzz{#2}
-\or
-  \unnumberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \unnumberedzzz{#2}
-  \else
-    \unnumberedsubsubseczzz{#2}
-  \fi
-\fi
-}
-
-
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{\seccheck{chapter}%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
-\chapmacro {#1}{\the\chapno}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-% We don't substitute the actual chapter name into \thischapter
-% because we don't want its macros evaluated now.
-\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-{\chapternofonts%
-\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\donoderef %
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-}}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{\seccheck{appendix}%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
-\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-{\chapternofonts%
-\edef\temp{{\realbackslash chapentry
-  {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\appendixnoderef %
-\global\let\section = \appendixsec
-\global\let\subsection = \appendixsubsec
-\global\let\subsubsection = \appendixsubsubsec
-}}
-
-\outer\def\top{\parsearg\unnumberedyyy}
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{\seccheck{unnumbered}%
-\secno=0 \subsecno=0 \subsubsecno=0
-%
-% This used to be simply \message{#1}, but TeX fully expands the
-% argument to \message.  Therefore, if #1 contained @-commands, TeX
-% expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
-% expanded @cite (which turns out to cause errors because \cite is meant
-% to be executed, not expanded).
-%
-% Anyway, we don't want the fully-expanded definition of @cite to appear
-% as a result of the \message, we just want `@cite' itself.  We use
-% \the<toks register> to achieve this: TeX expands \the<toks> only once,
-% simply yielding the contents of the <toks register>.
-\toks0 = {#1}\message{(\the\toks0)}%
-%
-\unnumbchapmacro {#1}%
-\gdef\thischapter{#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\unnumbnoderef %
-\global\let\section = \unnumberedsec
-\global\let\subsection = \unnumberedsubsec
-\global\let\subsubsection = \unnumberedsubsubsec
-}}
-
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{\seccheck{section}%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash secentry %
-{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
-
-\outer\def\appenixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{\seccheck{appendixsection}%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash secentry %
-{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
-\plainsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{\seccheck{subsection}%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsecentry %
-{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
-
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsecentry %
-{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
-\plainsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsubsecentry %
-  {#1}
-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
-  {\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
-
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
-  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsubsecentry{#1}%
-  {\appendixletter}
-  {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
-\plainsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
-
-% These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
-\def\infotop{\parsearg\unnumberedzzz}
-\def\infounnumbered{\parsearg\unnumberedzzz}
-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-
-\def\infoappendix{\parsearg\appendixzzz}
-\def\infoappendixsec{\parsearg\appendixseczzz}
-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
-
-\def\infochapter{\parsearg\chapterzzz}
-\def\infosection{\parsearg\sectionzzz}
-\def\infosubsection{\parsearg\subsectionzzz}
-\def\infosubsubsection{\parsearg\subsubsectionzzz}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-% NOTE on use of \vbox for chapter headings, section headings, and
-% such:
-%      1) We use \vbox rather than the earlier \line to permit
-%         overlong headings to fold.
-%      2) \hyphenpenalty is set to 10000 because hyphenation in a
-%         heading is obnoxious; this forbids it.
-%       3) Likewise, headings look best if no \parindent is used, and
-%          if justification is not attempted.  Hence \raggedright.
-
-
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
-{\advance\chapheadingskip by 10pt \chapbreak }%
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                  \parindent=0pt\raggedright
-                  \rm #1\hfill}}\bigskip \par\penalty 200}
-
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                  \parindent=0pt\raggedright
-                  \rm #1\hfill}}\bigskip \par\penalty 200}
-
-\def\heading{\parsearg\secheadingi}
-
-\def\subheading{\parsearg\subsecheadingi}
-
-\def\subsubheading{\parsearg\subsubsecheadingi}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-%%% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
-%%% Define plain chapter starts, and page on/off switching for it
-% Parameter controlling skip before chapter headings (if needed)
-
-\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt
-
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain}
-
-\def\chfplain #1#2{%
-  \pchapsepmacro
-  {%
-    \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                     \parindent=0pt\raggedright
-                     \rm #2\enspace #1}%
-  }%
-  \bigskip
-  \penalty5000
-}
-
-\def\unnchfplain #1{%
-\pchapsepmacro %
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                  \parindent=0pt\raggedright
-                  \rm #1\hfill}}\bigskip \par\penalty 10000 %
-}
-\CHAPFplain % The default
-
-\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                       \parindent=0pt\raggedright
-                       \rm #1\hfill}}\bigskip \par\penalty 10000 %
-}
-
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen}
-
-% Parameter controlling skip before section headings.
-
-\newskip \subsecheadingskip  \subsecheadingskip = 17pt plus 8pt minus 4pt
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-
-\newskip \secheadingskip  \secheadingskip = 21pt plus 8pt minus 4pt
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-
-% @paragraphindent  is defined for the Info formatting commands only.
-\let\paragraphindent=\comment
-
-% Section fonts are the base font at magstep2, which produces
-% a size a bit more than 14 points in the default situation.
-
-\def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}}
-\def\plainsecheading #1{\secheadingi {#1}}
-\def\secheadingi #1{{\advance \secheadingskip by \parskip %
-\secheadingbreak}%
-{\secfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                 \parindent=0pt\raggedright
-                 \rm #1\hfill}}%
-\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
-
-
-% Subsection fonts are the base font at magstep1,
-% which produces a size of 12 points.
-
-\def\subsecheading #1#2#3#4{\subsecheadingi {#2.#3.#4\enspace #1}}
-\def\subsecheadingi #1{{\advance \subsecheadingskip by \parskip %
-\subsecheadingbreak}%
-{\subsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                     \parindent=0pt\raggedright
-                     \rm #1\hfill}}%
-\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
-
-\def\subsubsecfonts{\subsecfonts} % Maybe this should change:
-                                 % Perhaps make sssec fonts scaled
-                                 % magstep half
-\def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}}
-\def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip %
-\subsecheadingbreak}%
-{\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                       \parindent=0pt\raggedright
-                       \rm #1\hfill}}%
-\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}
-
-
-\message{toc printing,}
-
-% Finish up the main text and prepare to read what we've written
-% to \contentsfile.
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\def\startcontents#1{%
-   \pagealignmacro
-   \immediate\closeout \contentsfile
-   \ifnum \pageno>0
-      \pageno = -1             % Request roman numbered pages.
-   \fi
-   % Don't need to put `Contents' or `Short Contents' in the headline.
-   % It is abundantly clear what they are.
-   \unnumbchapmacro{#1}\def\thischapter{}%
-   \begingroup                 % Set up to handle contents files properly.
-      \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
-      \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
-      \raggedbottom             % Worry more about breakpoints than the bottom.
-      \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-}
-
-
-% Normal (long) toc.
-\outer\def\contents{%
-   \startcontents{\putwordTableofContents}%
-      \input \jobname.toc
-   \endgroup
-   \vfill \eject
-}
-
-% And just the chapters.
-\outer\def\summarycontents{%
-   \startcontents{\putwordShortContents}%
-      %
-      \let\chapentry = \shortchapentry
-      \let\unnumbchapentry = \shortunnumberedentry
-      % We want a true roman here for the page numbers.
-      \secfonts
-      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
-      \rm
-      \advance\baselineskip by 1pt % Open it up a little.
-      \def\secentry ##1##2##3##4{}
-      \def\unnumbsecentry ##1##2{}
-      \def\subsecentry ##1##2##3##4##5{}
-      \def\unnumbsubsecentry ##1##2{}
-      \def\subsubsecentry ##1##2##3##4##5##6{}
-      \def\unnumbsubsubsecentry ##1##2{}
-      \input \jobname.toc
-   \endgroup
-   \vfill \eject
-}
-\let\shortcontents = \summarycontents
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Chapter-level things, for both the long and short contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-
-% See comments in \dochapentry re vbox and related settings
-\def\shortchapentry#1#2#3{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
-}
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-\setbox0 = \hbox{\shortcontrm \putwordAppendix }
-\newdimen\shortappendixwidth \shortappendixwidth = \wd0
-
-\def\shortchaplabel#1{%
-  % We typeset #1 in a box of constant width, regardless of the text of
-  % #1, so the chapter titles will come out aligned.
-  \setbox0 = \hbox{#1}%
-  \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
-  %
-  % This space should be plenty, since a single number is .5em, and the
-  % widest letter (M) is 1em, at least in the Computer Modern fonts.
-  % (This space doesn't include the extra space that gets added after
-  % the label; that gets put in in \shortchapentry above.)
-  \advance\dimen0 by 1.1em
-  \hbox to \dimen0{#1\hfil}%
-}
-
-\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
-
-% Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
-
-% Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
-
-% And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
-  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
-
-
-% This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we would want to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
-   \penalty-300 \vskip\baselineskip
-   \begingroup
-     \chapentryfonts
-     \tocentry{#1}{\dopageno{#2}}%
-   \endgroup
-   \nobreak\vskip .25\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
-  \secentryfonts \leftskip=\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
-  \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
-  \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here.  (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-%
-\def\tocentry#1#2{\begingroup
-  \hyphenpenalty = 10000
-  \entry{#1}{#2}%
-\endgroup}
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
-
-
-\message{environments,}
-
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-% Furthermore, these definitions must come after we define our fonts.
-\newbox\dblarrowbox    \newbox\longdblarrowbox
-\newbox\pushcharbox    \newbox\bullbox
-\newbox\equivbox       \newbox\errorbox
-
-\let\ptexequiv = \equiv
-
-%{\tentt
-%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
-%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
-%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
-%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
-% Adapted from the manmac format (p.420 of TeXbook)
-%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
-%                                      depth .1ex\hfil}
-%}
-
-\def\point{$\star$}
-
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% Adapted from the TeXbook's \boxit.
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
-   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-   \advance\hsize by -2\dimen2 % Rules.
-   \vbox{
-      \hrule height\dimen2
-      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
-         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-         \kern3pt\vrule width\dimen2}% Space to right.
-      \hrule height\dimen2}
-    \hfil}
-
-% The @error{} command.
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex    escapes into raw Tex temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
-
-\def\tex{\begingroup
-\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-\catcode `\%=14
-\catcode 43=12
-\catcode`\"=12
-\catcode`\==12
-\catcode`\|=12
-\catcode`\<=12
-\catcode`\>=12
-\escapechar=`\\
-%
-\let\~=\ptextilde
-\let\{=\ptexlbrace
-\let\}=\ptexrbrace
-\let\.=\ptexdot
-\let\*=\ptexstar
-\let\dots=\ptexdots
-\def\@{@}%
-\let\bullet=\ptexbullet
-\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
-\let\L=\ptexL
-%
-\let\Etex=\endgroup}
-
-% Define @lisp ... @endlisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @endlisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments.  \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% Make each space character in the input produce a normal interword
-% space in the output.  Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is.  This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical.  We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip
-%
-\def\aboveenvbreak{{\advance\envskipamount by \parskip
-\endgraf \ifdim\lastskip<\envskipamount
-\removelastskip \penalty-50 \vskip\envskipamount \fi}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
-\let\nonarrowing=\relax
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \cartouche: draw rectangle w/rounded corners around argument
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
-       \ctl\leaders\hrule height\circthick\hfil\ctr
-       \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
-       \cbl\leaders\hrule height\circthick\hfil\cbr
-       \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\long\def\cartouche{%
-\begingroup
-       \lskip=\leftskip \rskip=\rightskip
-       \leftskip=0pt\rightskip=0pt %we want these *outside*.
-       \cartinner=\hsize \advance\cartinner by-\lskip
-                         \advance\cartinner by-\rskip
-       \cartouter=\hsize
-       \advance\cartouter by 18pt % allow for 3pt kerns on either
-%                                   side, and for 6pt waste from
-%                                   each corner char
-       \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-       % Flag to tell @lisp, etc., not to narrow margin.
-       \let\nonarrowing=\comment
-       \vbox\bgroup
-               \baselineskip=0pt\parskip=0pt\lineskip=0pt
-               \carttop
-               \hbox\bgroup
-                       \hskip\lskip
-                       \vrule\kern3pt
-                       \vbox\bgroup
-                               \hsize=\cartinner
-                               \kern3pt
-                               \begingroup
-                                       \baselineskip=\normbskip
-                                       \lineskip=\normlskip
-                                       \parskip=\normpskip
-                                       \vskip -\parskip
-\def\Ecartouche{%
-                               \endgroup
-                               \kern3pt
-                       \egroup
-                       \kern3pt\vrule
-                       \hskip\rskip
-               \egroup
-               \cartbot
-       \egroup
-\endgroup
-}}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\def\nonfillstart{%
-  \aboveenvbreak
-  \inENV % This group ends at the end of the body
-  \hfuzz = 12pt % Don't be fussy
-  \sepspaces % Make spaces be word-separators rather than space tokens.
-  \singlespace
-  \let\par = \lisppar % don't ignore blank lines
-  \obeylines % each line of input is a line of output
-  \parskip = 0pt
-  \parindent = 0pt
-  \emergencystretch = 0pt % don't try to avoid overfull boxes
-  % @cartouche defines \nonarrowing to inhibit narrowing
-  % at next level down.
-  \ifx\nonarrowing\relax
-    \advance \leftskip by \lispnarrowing
-    \exdentamount=\lispnarrowing
-    \let\exdent=\nofillexdent
-    \let\nonarrowing=\relax
-  \fi
-}
-
-% To ending an @example-like environment, we first end the paragraph
-% (via \afterenvbreak's vertical glue), and then the group.  That way we
-% keep the zero \parskip that the environments set -- \parskip glue
-% will be inserted at the beginning of the next paragraph in the
-% document, after the environment.
-%
-\def\nonfillfinish{\afterenvbreak\endgroup}%
-
-% This macro is
-\def\lisp{\begingroup
-  \nonfillstart
-  \let\Elisp = \nonfillfinish
-  \tt
-  \rawbackslash % have \ input char produce \ char from current font
-  \gobble
-}
-
-% Define the \E... control sequence only if we are inside the
-% environment, so the error checking in \end will work.
-%
-% We must call \lisp last in the definition, since it reads the
-% return following the @example (or whatever) command.
-%
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-
-% @smallexample and @smalllisp.  This is not used unless the @smallbook
-% command is given.  Originally contributed by Pavel@xerox.
-%
-\def\smalllispx{\begingroup
-  \nonfillstart
-  \let\Esmalllisp = \nonfillfinish
-  \let\Esmallexample = \nonfillfinish
-  %
-  % Smaller interline space and fonts for small examples.
-  \setleading{10pt}%
-  \indexfonts \tt
-  \rawbackslash % make \ output the \ character from the current font (tt)
-  \gobble
-}
-
-% This is @display; same as @lisp except use roman font.
-%
-\def\display{\begingroup
-  \nonfillstart
-  \let\Edisplay = \nonfillfinish
-  \gobble
-}
-
-% This is @format; same as @display except don't narrow margins.
-%
-\def\format{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eformat = \nonfillfinish
-  \gobble
-}
-
-% @flushleft (same as @format) and @flushright.
-%
-\def\flushleft{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eflushleft = \nonfillfinish
-  \gobble
-}
-\def\flushright{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eflushright = \nonfillfinish
-  \advance\leftskip by 0pt plus 1fill
-  \gobble}
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
-%
-\def\quotation{%
-  \begingroup\inENV %This group ends at the end of the @quotation body
-  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
-  \singlespace
-  \parindent=0pt
-  % We have retained a nonzero parskip for the environment, since we're
-  % doing normal filling. So to avoid extra space below the environment...
-  \def\Equotation{\parskip = 0pt \nonfillfinish}%
-  %
-  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
-  \ifx\nonarrowing\relax
-    \advance\leftskip by \lispnarrowing
-    \advance\rightskip by \lispnarrowing
-    \exdentamount = \lispnarrowing
-    \let\nonarrowing = \relax
-  \fi
-}
-
-\message{defuns,}
-% Define formatter for defuns
-% First, allow user to change definition object font (\df) internally
-\def\setdeffont #1 {\csname DEF#1\endcsname}
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deftypemargin \deftypemargin=12pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-
-\newcount\parencount
-% define \functionparens, which makes ( and ) and & do special things.
-% \functionparens affects the group it is contained in.
-\def\activeparens{%
-\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
-\catcode`\[=\active \catcode`\]=\active}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-
-% Be sure that we always have a definition for `(', etc.  For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
-
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %
-\global\advance\parencount by 1 }
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
-% also in that case restore the outer-level definition of (.
-\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
-\global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text.  This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
-\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
-
-% First, defname, which formats the header line itself.
-% #1 should be the function name.
-% #2 should be the type of definition, such as "Function".
-
-\def\defname #1#2{%
-% Get the values of \leftskip and \rightskip as they were
-% outside the @def...
-\dimen2=\leftskip
-\advance\dimen2 by -\defbodyindent
-\dimen3=\rightskip
-\advance\dimen3 by -\defbodyindent
-\noindent        %
-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1     %
-% Now output arg 2 ("Function" or some such)
-% ending at \deftypemargin from the right margin,
-% but stuck inside a box of width 0 so it does not interfere with linebreaking
-{% Adjust \hsize to exclude the ambient margins,
-% so that \rightline will obey them.
-\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
-\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
-% Make all lines underfull and no complaints:
-\tolerance=10000 \hbadness=10000
-\advance\leftskip by -\defbodyindent
-\exdentamount=\defbodyindent
-{\df #1}\enskip        % Generate function name
-}
-
-% Actually process the body of a definition
-% #1 should be the terminating control sequence, such as \Edefun.
-% #2 should be the "another name" control sequence, such as \defunx.
-% #3 should be the control sequence that actually processes the header,
-%    such as \defunheader.
-
-\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active % 61 is `='
-\obeylines\activeparens\spacesplit#3}
-
-\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
-
-\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
-
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
-
-\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active %
-\obeylines\spacesplit#3}
-
-% This is used for \def{tp,vr}parsebody.  It could probably be used for
-% some of the others, too, with some judicious conditionals.
-% 
-\def\parsebodycommon#1#2#3{%
-  \begingroup\inENV %
-  \medbreak %
-  % Define the end token that this defining construct specifies
-  % so that it will exit this group.
-  \def#1{\endgraf\endgroup\medbreak}%
-  \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
-  \parindent=0in
-  \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-  \exdentamount=\defbodyindent
-  \begingroup\obeylines
-}
-
-\def\defvrparsebody#1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \spacesplit{#3{#4}}%
-}
-
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument.  Sigh.
-% \let\deftpparsebody=\defvrparsebody
-%
-% So, to get around this, we put \empty in with the type name.  That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
-%
-\def\deftpparsebody #1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \spacesplit{\parsetpheaderline{#3{#4}}}\empty
-}
-
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any).  That's what this does, putting the result in \tptemp.
-% 
-\def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}%
-
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
-% 
-\def\parsetpheaderline#1#2#3{%
-  \removeemptybraces#2\relax
-  #1{\tptemp}{#3}%
-}%
-
-\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\spacesplit{#3{#5}}}
-
-% Split up #2 at the first space token.
-% call #1 with two arguments:
-%  the first is all of #2 before the space token,
-%  the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
-
-{\obeylines
-\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
-\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
-\ifx\relax #3%
-#1{#2}{}\else #1{#2}{#3#4}\fi}}
-
-% So much for the things common to all kinds of definitions.
-
-% Define @defun.
-
-% First, define the processing that is wanted for arguments of \defun
-% Use this to expand the args and terminate the paragraph they make up
-
-\def\defunargs #1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-\hyphenchar\tensl=0
-#1%
-\hyphenchar\tensl=45
-\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-}
-
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% 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
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-}
-
-% Do complete processing of one @defun or @defunx line already parsed.
-
-% @deffn Command forward-char nchars
-
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defun == @deffn Function
-
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
-
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Function}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-
-% #1 is the data type.  #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
-\deftypefunargs {#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-
-% \defheaderxcond#1\relax$$$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
-
-% #1 is the classification.  #2 is the data type.  #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-%               at least some C++ text from working
-\defname {\defheaderxcond#2\relax$$$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defmac == @deffn Macro
-
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Macro}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defspec == @deffn Special Form
-
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Special Form}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% This definition is run if you use @defunx
-% anywhere other than immediately after a @defun or @defunx.
-
-\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
-\def\defunx #1 {\errmessage{@defunx in invalid context}}
-\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
-\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
-\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
-
-% @defmethod, and so on
-
-% @defop {Funny Method} foo-class frobnicate argument
-
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-
-\def\defopheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype{} on #1}%
-\defunargs {#3}\endgroup %
-}
-
-% @defmethod == @defop Method
-
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-
-\def\defmethodheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% entry in function index
-\begingroup\defname {#2}{Method on #1}%
-\defunargs {#3}\endgroup %
-}
-
-% @defcv {Class Option} foo-class foo-flag
-
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
-\def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype{} of #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% @defivar == @defcv {Instance Variable}
-
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-
-\def\defivarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{Instance Variable of #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% These definitions are run if you use @defmethodx, etc.,
-% anywhere other than immediately after a @defmethod, etc.
-
-\def\defopx #1 {\errmessage{@defopx in invalid context}}
-\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
-\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
-\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
-
-% Now @defvar
-
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{Variable}%
-\defvarargs {#2}\endgroup %
-}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{User Option}%
-\defvarargs {#2}\endgroup %
-}
-
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type.  #2 is the name.
-\def\deftypevarheader #1#2{%
-\doind {vr}{\code{#2}}% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-\endgroup}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}%
-\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-\endgroup}
-
-% This definition is run if you use @defvarx
-% anywhere other than immediately after a @defvar or @defvarx.
-
-\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
-\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
-
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
-
-\def\deftpargs #1{\bf \defvarargs{#1}}
-
-% @deftp Class window height width ...
-
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
-
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-
-% This definition is run if you use @deftpx, etc
-% anywhere other than immediately after a @deftp, etc.
-
-\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
-
-\message{cross reference,}
-% Define cross-reference macros
-\newwrite \auxfile
-
-\newif\ifhavexrefs  % True if xref values are known.
-\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
-
-% \setref{foo} defines a cross-reference point named foo.
-
-\def\setref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ysectionnumberandtype}}
-
-\def\unnumbsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ynothing}}
-
-\def\appendixsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Yappendixletterandtype}}
-
-% \xref, \pxref, and \ref generate cross-references to specified points.
-% For \xrefX, #1 is the node name, #2 the name of the Info
-% cross-reference, #3 the printed node name, #4 the name of the Info
-% file, #5 the name of the printed manual.  All but the node name can be
-% omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
-  \def\printedmanual{\ignorespaces #5}%
-  \def\printednodename{\ignorespaces #3}%
-  \setbox1=\hbox{\printedmanual}%
-  \setbox0=\hbox{\printednodename}%
-  \ifdim \wd0 = 0pt
-    % No printed node name was explicitly given.
-    \ifx\SETxref-automatic-section-title\relax %
-      % Use the actual chapter/section title appear inside
-      % the square brackets.  Use the real section title if we have it.
-      \ifdim \wd1>0pt%
-        % It is in another manual, so we don't have it.
-        \def\printednodename{\ignorespaces #1}%
-      \else
-        \ifhavexrefs
-          % We know the real title if we have the xref values.
-          \def\printednodename{\refx{#1-title}}%
-        \else
-          % Otherwise just copy the Info node name.
-          \def\printednodename{\ignorespaces #1}%
-        \fi%
-      \fi
-      \def\printednodename{#1-title}%
-    \else
-      % Use the node name inside the square brackets.
-      \def\printednodename{\ignorespaces #1}%
-    \fi
-  \fi
-  %
-  % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-  % insert empty discretionaries after hyphens, which means that it will
-  % not find a line break at a hyphen in a node names.  Since some manuals
-  % are best written with fairly long node names, containing hyphens, this
-  % is a loss.  Therefore, we give the text of the node name again, so it
-  % is as if TeX is seeing it for the first time.
-  \ifdim \wd1 > 0pt
-    \putwordsection{} ``\printednodename'' in \cite{\printedmanual}%
-  \else
-    % _ (for example) has to be the character _ for the purposes of the
-    % control sequence corresponding to the node, but it has to expand
-    % into the usual \leavevmode...\vrule stuff for purposes of
-    % printing. So we \turnoffactive for the \refx-snt, back on for the
-    % printing, back off for the \refx-pg.
-    {\turnoffactive \refx{#1-snt}{}}%
-    \space [\printednodename],\space
-    \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-  \fi
-\endgroup}
-
-% \dosetq is the interface for calls from other macros
-
-% Use \turnoffactive so that punctuation chars such as underscore
-% work in node names.
-\def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat%
-\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
-\next}}
-
-% \internalsetq {foo}{page} expands into
-% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-% When the aux file is read, ' is the escape character
-
-\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq
-
-\def\Ypagenumber{\folio}
-
-\def\Ytitle{\thissection}
-
-\def\Ynothing{}
-
-\def\Ysectionnumberandtype{%
-\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
-\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\def\Yappendixletterandtype{%
-\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
-\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\gdef\xreftie{'tie}
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
-  \let\linenumber = \empty % Non-3.0.
-\else
-  \def\linenumber{\the\inputlineno:\space}
-\fi
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-
-\def\refx#1#2{%
-  \expandafter\ifx\csname X#1\endcsname\relax
-    % If not defined, say something at least.
-    $\langle$un\-de\-fined$\rangle$%
-    \ifhavexrefs
-      \message{\linenumber Undefined cross reference `#1'.}%
-    \else
-      \ifwarnedxrefs\else
-        \global\warnedxrefstrue
-        \message{Cross reference values unknown; you must run TeX again.}%
-      \fi
-    \fi
-  \else
-    % It's defined, so just use it.
-    \csname X#1\endcsname
-  \fi
-  #2% Output the suffix in any case.
-}
-
-% Read the last existing aux file, if any.  No error if none exists.
-
-% This is the macro invoked by entries in the aux file.
-\def\xrdef #1#2{
-{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}
-
-\def\readauxfile{%
-\begingroup
-\catcode `\^^@=\other
-\catcode `\\ 1=\other
-\catcode `\\ 2=\other
-\catcode `\^^C=\other
-\catcode `\^^D=\other
-\catcode `\^^E=\other
-\catcode `\^^F=\other
-\catcode `\^^G=\other
-\catcode `\^^H=\other
-\catcode `\\v=\other
-\catcode `\^^L=\other
-\catcode `\\ e=\other
-\catcode `\\ f=\other
-\catcode `\\10=\other
-\catcode `\\11=\other
-\catcode `\\12=\other
-\catcode `\\13=\other
-\catcode `\\14=\other
-\catcode `\\15=\other
-\catcode `\\16=\other
-\catcode `\\17=\other
-\catcode `\\18=\other
-\catcode `\\19=\other
-\catcode 26=\other
-\catcode `\^^[=\other
-\catcode `\^^\=\other
-\catcode `\^^]=\other
-\catcode `\^^^=\other
-\catcode `\^^_=\other
-\catcode `\@=\other
-\catcode `\^=\other
-\catcode `\~=\other
-\catcode `\[=\other
-\catcode `\]=\other
-\catcode`\"=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode `\$=\other
-\catcode `\#=\other
-\catcode `\&=\other
-% `\+ does not work, so use 43.
-\catcode 43=\other
-% Make the characters 128-255 be printing characters
-{%
-  \count 1=128
-  \def\loop{%
-    \catcode\count 1=\other
-    \advance\count 1 by 1
-    \ifnum \count 1<256 \loop \fi
-  }%
-}%
-% the aux file uses ' as the escape.
-% Turn off \ as an escape so we do not lose on
-% entries which were dumped with control sequences in their names.
-% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
-% Reference to such entries still does not work the way one would wish,
-% but at least they do not bomb out when the aux file is read in.
-\catcode `\{=1 \catcode `\}=2
-\catcode `\%=\other
-\catcode `\'=0
-\catcode`\^=7 % to make ^^e4 etc usable in xref tags 
-\catcode `\\=\other
-\openin 1 \jobname.aux
-\ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue
-\global\warnedobstrue
-\fi
-% Open the new aux file.  Tex will close it automatically at exit.
-\openout \auxfile=\jobname.aux
-\endgroup}
-
-
-% Footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed.
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for info output only..
-\let\footnotestyle=\comment
-
-\let\ptexfootnote=\footnote
-
-{\catcode `\@=11
-%
-% Auto-number footnotes.  Otherwise like plain.
-\gdef\footnote{%
-  \global\advance\footnoteno by \@ne
-  \edef\thisfootno{$^{\the\footnoteno}$}%
-  %
-  % In case the footnote comes at the end of a sentence, preserve the
-  % extra spacing after we do the footnote number.
-  \let\@sf\empty
-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
-  %
-  % Remove inadvertent blank space before typesetting the footnote number.
-  \unskip
-  \thisfootno\@sf
-  \footnotezzz
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter.  Our footnotes don't need to be so general.
-%
-\long\gdef\footnotezzz#1{\insert\footins{%
-  % We want to typeset this text as a normal paragraph, even if the
-  % footnote reference occurs in (for example) a display environment.
-  % So reset some parameters.
-  \interlinepenalty\interfootnotelinepenalty
-  \splittopskip\ht\strutbox % top baseline for broken footnotes
-  \splitmaxdepth\dp\strutbox
-  \floatingpenalty\@MM
-  \leftskip\z@skip
-  \rightskip\z@skip
-  \spaceskip\z@skip
-  \xspaceskip\z@skip
-  \parindent\defaultparindent
-  %
-  % Hang the footnote text off the number.
-  \hang
-  \textindent{\thisfootno}%
-  %
-  % Don't crash into the line above the footnote text.  Since this
-  % expands into a box, it must come within the paragraph, lest it
-  % provide a place where TeX can split the footnote.
-  \footstrut
-  #1\strut}%
-}
-
-}%end \catcode `\@=11
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly.  There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-\def\setleading#1{%
-  \normalbaselineskip = #1\relax
-  \normallineskip = \lineskipfactor\normalbaselineskip
-  \normalbaselines
-  \setbox\strutbox =\hbox{%
-    \vrule width0pt height\strutheightpercent\baselineskip
-                    depth \strutdepthpercent \baselineskip
-  }%
-}
-
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
-%
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
-  %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
-}
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt}
-
-
-% End of control word definitions.
-
-\message{and turning on texinfo input format.}
-
-\def\openindices{%
-   \newindex{cp}%
-   \newcodeindex{fn}%
-   \newcodeindex{vr}%
-   \newcodeindex{tp}%
-   \newcodeindex{ky}%
-   \newcodeindex{pg}%
-}
-
-% Set some numeric style parameters, for 8.5 x 11 format.
-
-%\hsize = 6.5in
-\newdimen\defaultparindent \defaultparindent = 15pt
-\parindent = \defaultparindent
-\parskip 18pt plus 1pt
-\setleading{15pt}
-\advance\topskip by 1.2cm
-
-% Prevent underfull vbox error messages.
-\vbadness=10000
-
-% Following George Bush, just get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything.  We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize.  This makes it come to about 9pt for the 8.5x11 format.
-%
-\ifx\emergencystretch\thisisundefined
-  % Allow us to assign to \emergencystretch anyway.
-  \def\emergencystretch{\dimen0}%
-\else
-  \emergencystretch = \hsize
-  \divide\emergencystretch by 45
-\fi
-
-% Use @smallbook to reset parameters for 7x9.5 format  (or else 7x9.25)
-\def\smallbook{
-
-% These values for secheadingskip and subsecheadingskip are
-% experiments.  RJC 7 Aug 1992
-\global\secheadingskip = 17pt plus 6pt minus 3pt
-\global\subsecheadingskip = 14pt plus 6pt minus 3pt
-
-\global\lispnarrowing = 0.3in
-\setleading{12pt}
-\advance\topskip by -1cm
-\global\parskip 3pt plus 1pt
-\global\hsize = 5in
-\global\vsize=7.5in
-\global\tolerance=700
-\global\hfuzz=1pt
-\global\contentsrightmargin=0pt
-\global\deftypemargin=0pt
-\global\defbodyindent=.5cm
-
-\global\pagewidth=\hsize
-\global\pageheight=\vsize
-
-\global\let\smalllisp=\smalllispx
-\global\let\smallexample=\smalllispx
-\global\def\Esmallexample{\Esmalllisp}
-}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{
-\global\tolerance=700
-\global\hfuzz=1pt
-\setleading{12pt}
-\global\parskip 15pt plus 1pt
-
-\global\vsize= 53\baselineskip
-\advance\vsize by \topskip
-%\global\hsize=   5.85in     % A4 wide 10pt
-\global\hsize=  6.5in
-\global\outerhsize=\hsize
-\global\advance\outerhsize by 0.5in
-\global\outervsize=\vsize
-\global\advance\outervsize by 0.6in
-
-\global\pagewidth=\hsize
-\global\pageheight=\vsize
-}
-
-% Allow control of the text dimensions.  Parameters in order: textheight;
-% textwidth; \voffset; \hoffset (!); binding offset.  All require a dimension;
-% header is additional; added length extends the bottom of the page.
-
-\def\changepagesizes#1#2#3#4#5{
- \global\vsize= #1
- \advance\vsize by \topskip
- \global\voffset= #3
- \global\hsize= #2
- \global\outerhsize=\hsize
- \global\advance\outerhsize by 0.5in
- \global\outervsize=\vsize
- \global\advance\outervsize by 0.6in
- \global\pagewidth=\hsize
- \global\pageheight=\vsize
- \global\normaloffset= #4
- \global\bindingoffset= #5}
-
-% This layout is compatible with Latex on A4 paper.
-
-\def\afourlatex{\changepagesizes{22cm}{15cm}{7mm}{4.6mm}{5mm}}
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise.  Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt \char '042}}
-\let"=\activedoublequote
-\catcode`\~=\active
-\def~{{\tt \char '176}}
-\chardef\hat=`\^
-\catcode`\^=\active
-\def\auxhat{\def^{'hat}}
-\def^{{\tt \hat}}
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-% Subroutine for the previous macro.
-\def\_{\lvvmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-
-% \lvvmode is equivalent in function to \leavevmode.
-% Using \leavevmode runs into trouble when written out to
-% an index file due to the expansion of \leavevmode into ``\unhbox
-% \voidb@x'' ---which looks to TeX like ``\unhbox \voidb\x'' due to our
-% magic tricks with @.
-\def\lvvmode{\vbox to 0pt{}}
-
-\catcode`\|=\active
-\def|{{\tt \char '174}}
-\chardef \less=`\<
-\catcode`\<=\active
-\def<{{\tt \less}}
-\chardef \gtr=`\>
-\catcode`\>=\active
-\def>{{\tt \gtr}}
-\catcode`\+=\active
-\def+{{\tt \char 43}}
-%\catcode 27=\active
-%\def^^[{$\diamondsuit$}
-
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`\@=0
-
-% \rawbackslashxx output one backslash character in current font
-\global\chardef\rawbackslashxx=`\\
-%{\catcode`\\=\other
-%@gdef@rawbackslashxx{\}}
-
-% \rawbackslash redefines \ as input to do \rawbackslashxx.
-{\catcode`\\=\active
-@gdef@rawbackslash{@let\=@rawbackslashxx }}
-
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
-
-% Say @foo, not \foo, in error messages.
-\escapechar=`\@
-
-% \catcode 17=0   % Define control-q
-\catcode`\\=\active
-
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{@let"=@normaldoublequote
-@let\=@realbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus}
-
-@def@normalturnoffactive{@let"=@normaldoublequote
-@let\=@normalbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus}
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-%
-@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi}
-
-%% These look ok in all fonts, so just make them not special.  The @rm below
-%% makes sure that the current font starts out as the newly loaded cmr10
-@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
-
-@textfonts
-@rm
-
-@c Local variables:
-@c page-delimiter: "^\\\\message"
-@c End:
diff --git a/gnu/usr.bin/cvs/cvsinit.sh b/gnu/usr.bin/cvs/cvsinit.sh
deleted file mode 100644 (file)
index f8c933e..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-#! /bin/sh
-:
-#
-#ident "@(#)cvs:$Name:  $:$Id: cvsinit.sh,v 1.1.1.2 1996/01/30 00:17:16 tholo Exp $"
-# Copyright (c) 1992, Brian Berliner
-#
-# You may distribute under the terms of the GNU General Public License as
-# specified in the README file that comes with the CVS 1.4 kit.
-
-# This script should be run for each repository you create to help you
-# setup your site for CVS.  You may also run it to update existing
-# repositories if you install a new version of CVS.
-
-# this line is edited by Makefile when creating cvsinit.inst
-CVSLIB="xLIBDIRx"
-
-CVS_VERSION="xVERSIONx"
-
-# All purpose usage message, also suffices for --help and --version.
-if test $# -gt 0; then
-  echo "cvsinit version $CVS_VERSION"
-  echo "usage: $0"
-  echo "(set CVSROOT to the repository that you want to initialize)"
-  exit 0
-fi
-
-# Make sure that the CVSROOT variable is set
-if [ "x$CVSROOT" = x ]; then
-    echo "The CVSROOT environment variable is not set."
-    echo ""
-    echo "You should choose a location for your source repository"
-    echo "that can be shared by many developers.  It also helps to"
-    echo "place the source repository on a file system that has"
-    echo "plenty of free space."
-    echo ""
-    echo "Please enter the full path for your CVSROOT source repository:"
-    read CVSROOT junk
-    unset junk
-    remind_cvsroot=yes
-else
-    remind_cvsroot=no
-fi
-
-# Now, create the $CVSROOT if it is not already there
-if [ ! -d $CVSROOT ]; then
-    echo "Creating $CVSROOT..."
-    path=
-    for comp in `echo $CVSROOT | sed -e 's,/, ,g'`; do
-       path=$path/$comp
-       if [ ! -d $path ]; then
-           mkdir $path
-       fi
-    done
-else
-    true
-fi
-
-# Next, check for $CVSROOT/CVSROOT
-if [ ! -d $CVSROOT/CVSROOT ]; then
-    if [ -d $CVSROOT/CVSROOT.adm ]; then
-       echo "You have the old $CVSROOT/CVSROOT.adm directory."
-       echo "I will rename it to $CVSROOT/CVSROOT for you..."
-       mv $CVSROOT/CVSROOT.adm $CVSROOT/CVSROOT
-    else
-       echo "Creating the $CVSROOT/CVSROOT directory..."
-       mkdir $CVSROOT/CVSROOT
-    fi
-else
-    true
-fi
-if [ ! -d $CVSROOT/CVSROOT ]; then
-    echo "Unable to create $CVSROOT/CVSROOT."
-    echo "I give up."
-    exit 1
-fi
-
-# Create the special control files and templates within $CVSROOT/CVSROOT
-
-EXAMPLES="checkoutlist commitinfo cvswrappers editinfo loginfo modules 
-rcsinfo rcstemplate taginfo wrap unwrap notify"
-
-NEWSAMPLE=false
-for info in $EXAMPLES; do
-    if [ -f $CVSROOT/CVSROOT/${info},v ]; then
-       if [ ! -f $CVSROOT/CVSROOT/$info ]; then
-           echo "Checking out $CVSROOT/CVSROOT/$info"
-           echo "  from $CVSROOT/CVSROOT/${info},v..."
-           (cd $CVSROOT/CVSROOT; co -q $info)
-       fi
-    else
-       NEWSAMPLE=true
-       if [ -f $CVSROOT/CVSROOT/$info ]; then
-           echo "Checking in $CVSROOT/CVSROOT/${info},v"
-           echo "  from $CVSROOT/CVSROOT/$info..."
-       else
-           echo "Creating a sample $CVSROOT/CVSROOT/$info file..."
-           case $info in
-             modules)
-               sed -n -e '/END_REQUIRED_CONTENT/q' \
-                   -e p $CVSLIB/examples/modules > $CVSROOT/CVSROOT/modules
-               ;;
-             rcstemplate)
-               cp $CVSLIB/examples/$info $CVSROOT/CVSROOT/$info
-               ;;
-             wrap|unwrap)
-               cp $CVSLIB/examples/$info $CVSROOT/CVSROOT/$info
-               chmod +x $CVSROOT/CVSROOT/$info
-               ;;
-             *)
-               # comment out everything in all the other examples....
-               sed -e 's/^\([^#]\)/#\1/' $CVSLIB/examples/$info > $CVSROOT/CVSROOT/$info
-               ;;
-           esac
-       fi
-       (cd $CVSROOT/CVSROOT; ci -q -u -t/dev/null -m"initial checkin of $info" $info)
-    fi
-done
-
-if $NEWSAMPLE ; then
-    echo "NOTE:  You may wish to check out the CVSROOT module and edit any new"
-    echo "configuration files to match your local requirements."
-    echo ""
-fi
-
-# check to see if there are any references to the old CVSROOT.adm directory
-if grep CVSROOT.adm $CVSROOT/CVSROOT/modules >/dev/null 2>&1; then
-    echo "Warning: your $CVSROOT/CVSROOT/modules file still"
-    echo "     contains references to the old CVSROOT.adm directory"
-    echo "     You should really change these to the new CVSROOT directory"
-    echo ""
-fi
-
-# These files are generated from the contrib files.
-# FIXME: Is it really wise to overwrite possible local changes like this?
-# Normal folks will keep these up to date by modifying the source in
-# their CVS module and re-installing CVS, but is everyone OK with that?
-#
-#
-CONTRIBS="log commit_prep log_accum cln_hist"
-#
-for contrib in $CONTRIBS; do
-    echo "Copying the new version of '${contrib}'"
-    echo "  to $CVSROOT/CVSROOT for you..."
-    cp $CVSLIB/contrib/$contrib $CVSROOT/CVSROOT/$contrib
-done
-
-# XXX - also add a stub for the cvsignore file
-
-# Turn on history logging by default
-if [ ! -f $CVSROOT/CVSROOT/history ]; then
-    echo "Enabling CVS history logging..."
-    touch $CVSROOT/CVSROOT/history
-    chmod g+w $CVSROOT/CVSROOT/history
-    echo "(Remove $CVSROOT/CVSROOT/history to disable.)"
-fi
-
-# finish up by running mkmodules
-echo "All done!  Running 'mkmodules' as my final step..."
-mkmodules $CVSROOT/CVSROOT
-
-exit 0
diff --git a/gnu/usr.bin/cvs/examples/.cvsignore b/gnu/usr.bin/cvs/examples/.cvsignore
deleted file mode 100644 (file)
index f3c7a7c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Makefile
diff --git a/gnu/usr.bin/cvs/examples/ChangeLog b/gnu/usr.bin/cvs/examples/ChangeLog
deleted file mode 100644 (file)
index 3d76f23..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-Mon Feb 12 15:42:46 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>
-
-       * modules: Remove mkmodules stuff; mkmodules is no longer a
-       separate program.
-
-Tue Jan 30 15:24:52 1996  Vince Demarco  <vdemarco@bou.shl.com>
-
-       * modules: change /usr/local/bin/mkmodules to
-       mkmodules (remove the abosolute path) just incase
-       the user doesn't install mkmodules, in /usr/local/bin
-
-Wed Jan 10 08:38:27 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>
-
-       * Makefile.in (DISTFILES): Include EXAMPLE_FILES rather than
-       duplicating the list.
-       (EXAMPLE_FILES): Add notify.
-
-Sun Dec 10 23:10:32 1995  Jim Kingdon  <kingdon@harvey.cyclic.com>
-
-       * notify: New file.
-
-Tue Nov 14 18:19:22 1995  Greg A. Woods  <woods@most.weird.com>
-
-       * commitinfo, editinfo, loginfo, rcsinfo: new rcs id
-
-       * modules:
-       - new rcs id
-       - add mention of new CVSROOT admin files
-
-       * taginfo:
-       - new rcs id
-       - leave the DEFAULT uncommented -- cvsinit comments it out
-
-       * checkoutlist: add wrap & unwrap as useful examples
-
-       * cvswrappers:
-       - renamed comb/uncom to wrap/unwrap
-       - re-formatted comments, etc.
-
-       * Makefile.in: renamed comb/uncom to wrap/unwrap
-
-       * unwrap, wrap: renamed from comb and uncom
-
-Mon Oct  9 09:25:23 1995  Norbert Kiesel  <nk@col.sw-ley.de>
-
-       * taginfo: document "mov" for tag -F
-
-Thu Aug  3 01:42:28 1995  Vince DeMarco  <vdemarco@bou.shl.com>
-
-       * cvswrappers: Cleaned up old file to use $CVSROOT stuff and
-       shortened all of the lines to under 80 columns. File is now a
-       working example of a cvswrappers file.
-
-Mon Jul 24 17:08:25 1995  Vince DeMarco  <vdemarco@bou.shl.com>
-
-       * Updated comb program to work when the user runs update/commit
-       etc from the top directory of a source tree.
-
-Fri Jul 21 10:35:10 1995  Vince DeMarco <vdemarco@bou.shl.com>
-
-       * Makefile.in (DISTFILES, EXAMPLE_FILES): Add cvswrappers uncom comb.
-       * cvswrappers uncom comb: New files.
-
-Sun Jul  9 21:21:35 1995  Karl Fogel  <kfogel@floss.cyclic.com>
-
-        Greg Woods' change:
-        
-        * checkoutlist, rcstemplate: new files.
-
-Sun Jul  9 19:03:00 1995  Greg A. Woods  <woods@most.weird.com>
-        
-       * modules: fix this up so cvsinit can use it for new
-        repositories
-
-       * loginfo: fix comments to note current perl requirement
-        for log and log_accum
-
-       * Makefile.in: add new template example files
-       (from previous local changes)
-
-       * rcsinfo, loginfo, commitinfo: corrections to comments
-        - corrections to sample control lines (from previous local changes)
-        
-Sat May 27 08:46:00 1995  Jim Meyering  (meyering@comco.com)
-
-       * Makefile.in (Makefile): Regenerate only Makefile in current
-       directory when Makefile.in is out of date.  Depend on ../config.status.
-
-Fri Apr 28 22:48:03 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>
-
-       * Makefile.in (DISTFILES): Updated.
-       (dist-dir): Renamed from dist, changed to work with DISTDIR value
-       passed from parent.
diff --git a/gnu/usr.bin/cvs/examples/Makefile.in b/gnu/usr.bin/cvs/examples/Makefile.in
deleted file mode 100644 (file)
index 4e3800e..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# Makefile for GNU CVS example files.
-# Do not use this makefile directly, but only from `../Makefile'.
-# Copyright (C) 1986, 1988-1990 Free Software Foundation, Inc.
-
-# 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.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-# $CVSid: @(#)Makefile.in 1.4 94/10/22 $
-
-SHELL = /bin/sh
-
-srcdir     = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH      = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-# Where to install the executables.
-bindir = $(exec_prefix)/bin
-
-# Where to put the system-wide .cvsrc file
-libdir = $(prefix)/lib
-
-# Where to put the manual pages.
-mandir = $(prefix)/man
-
-# Use cp if you don't have install.
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-
-EXAMPLE_FILES = commitinfo editinfo loginfo modules rcsinfo taginfo \
-       rcstemplate checkoutlist cvswrappers wrap unwrap notify
-
-DISTFILES = \
-       .cvsignore Makefile.in ChangeLog $(EXAMPLE_FILES)
-
-all: Makefile
-.PHONY: all
-
-install: all $(libdir)/cvs/examples
-       for f in $(EXAMPLE_FILES) ; do\
-               $(INSTALL_DATA) $(srcdir)/$$f $(libdir)/cvs/examples/$$f; \
-       done
-       @echo "You might consider running 'cvsinit' to upgrade your repository(s)...."
-.PHONY: install
-
-$(libdir)/cvs/examples:
-       $(srcdir)/../mkinstalldirs $(libdir)/cvs/examples
-
-tags:
-.PHONY: tags
-
-TAGS:
-.PHONY: TAGS
-
-ls:
-       @echo $(DISTFILES)
-.PHONY: ls
-
-clean:
-       /bin/rm -f *.o core
-.PHONY: clean
-
-distclean: clean
-       rm -f Makefile
-.PHONY: distclean
-
-realclean: distclean
-.PHONY: realclean
-
-dist-dir:
-       mkdir ${DISTDIR}
-       for i in ${DISTFILES}; do \
-         ln $(srcdir)/$${i} ${DISTDIR}; \
-       done
-.PHONY: dist-dir
-
-subdir = examples
-Makefile: ../config.status Makefile.in
-       cd .. && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status
diff --git a/gnu/usr.bin/cvs/examples/checkoutlist b/gnu/usr.bin/cvs/examples/checkoutlist
deleted file mode 100644 (file)
index ce969ed..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: checkoutlist,v 1.1.1.2 1996/01/30 00:19:25 tholo Exp $"
-#
-# The "checkoutlist" file is used to support additional version controlled
-# administrative files in $CVSROOT/CVSROOT, such as template files.
-#
-# The first entry on a line is a filename which will be checked out from
-# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
-# The remainder of the line is an error message to use if the file cannot
-# be checked out.
-#
-# File format:
-#
-#      [<whitespace>]<filename><whitespace><error message><end-of-line>
-#
-# comment lines begin with '#'
-#
-rcstemplate
-wrap
-unwrap
diff --git a/gnu/usr.bin/cvs/examples/commitinfo b/gnu/usr.bin/cvs/examples/commitinfo
deleted file mode 100644 (file)
index 8693586..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: commitinfo,v 1.1.1.2 1996/01/30 00:19:19 tholo Exp $"
-#
-# The "commitinfo" file is used to control pre-commit checks.
-# The filter on the right is invoked with the repository and a list 
-# of files to check.  A non-zero exit of the filter program will 
-# cause the commit to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
-#
-# NOTE:  contrib/commit_prep usage:
-# -r   - record directories affected by commit for use with contrib/log_accum
-# -c   - check for things like "$Id" near head of file, no "$Log", etc.
-#
-^apc                   $CVSROOT/CVSROOT/commit_prep -r -c
-^misc                  $CVSROOT/CVSROOT/commit_prep -r
-CVSROOT                        $CVSROOT/CVSROOT/commit_prep -r -c
-DEFAULT                        $CVSROOT/CVSROOT/commit_prep
diff --git a/gnu/usr.bin/cvs/examples/cvswrappers b/gnu/usr.bin/cvs/examples/cvswrappers
deleted file mode 100644 (file)
index 68570f5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: cvswrappers,v 1.1.1.2 1996/01/30 00:19:25 tholo Exp $"
-#
-# This file describes wrappers and other binary files to CVS.
-#
-# Wrappers are the concept where directories of files are to be
-# treated as a single file.  The intended use is to wrap up a wrapper
-# into a single tar such that the tar archive can be treated as a
-# single binary file in CVS.
-#
-# To solve the problem effectively, it was also necessary to be able to
-# prevent rcsmerge from merging these files.
-#
-# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
-#
-#  wildcard    [option value][option value]...
-#
-#  where option is one of
-#  -f          from cvs filter         value: path to filter
-#  -t          to cvs filter           value: path to filter
-#  -m          update methodology      value: MERGE or COPY
-#
-#  and value is a single-quote delimited value.
-#
-#
-*.nib  -f '$CVSROOT/CVSROOT/unwrap %s' -t '$CVSROOT/CVSROOT/wrap %s %s'
-*.rtfd -f '$CVSROOT/CVSROOT/unwrap %s' -t '$CVSROOT/CVSROOT/wrap %s %s'
-*.draw -f '$CVSROOT/CVSROOT/unwrap %s' -t '$CVSROOT/CVSROOT/wrap %s %s'
-*.tiff -m 'COPY'
diff --git a/gnu/usr.bin/cvs/examples/editinfo b/gnu/usr.bin/cvs/examples/editinfo
deleted file mode 100644 (file)
index 1f058e5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: editinfo,v 1.1.1.2 1996/01/30 00:19:20 tholo Exp $"
-#
-# The "editinfo" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# Although these test could be handled by an interactive script being
-# called via an entry in commitinfo,  The information reported in
-# such a script can't be easily merged into the report.
-#
-# One thing that should be noted  is the the ALL keyword is not
-# supported. There can be only one entry that matches a given
-# repository.
-#
-# Note there is no "edit" example script currently available....
-#
-DEFAULT                        $CVSROOT/CVSROOT/edit "%s"
diff --git a/gnu/usr.bin/cvs/examples/loginfo b/gnu/usr.bin/cvs/examples/loginfo
deleted file mode 100644 (file)
index 0327962..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: loginfo,v 1.1.1.2 1996/01/30 00:19:20 tholo Exp $"
-#
-# The "loginfo" file is used to control where "cvs commit" log information
-# is sent.  The first entry on a line is a regular expression which is tested
-# against the directory that the change is being made to, relative to the
-# $CVSROOT.  For the first match that is found, then the remainder of the
-# line is a filter program that should expect log information on its standard
-# input.
-#
-# If the repository name does not match any of the regular expressions in the
-# first field of this file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
-#
-# The filter program may use one and only one "%s" modifier (ala printf).  If
-# such a "%s" is specified in the filter program, a brief title is included
-# (as one argument, enclosed in single quotes) showing the relative directory
-# name and listing the modified file names.
-#
-# NOTE: contrib/log usage:  (currently requires perl)
-#      -d              - turn debugging on....
-#      -m mailto       - send mail to "mailto" (multiple -m's permitted)
-#      -f logfile      - required arg:  save messages to logfile
-#      %s              - may follow other options at the end of the line
-#
-# NOTE: contrib/log_accum usage:  (currently requires perl)
-# (must have 'commit_prep -r' in commitinfo)
-#      -d              - turn debugging on....
-#      -M modulename   - use this as the module name (necessary for sub-dirs)
-#      -m mailto       - send mail to "mailto" (multiple -m's permitted) [optional]
-#      -f logfile      - save messages to logfile [optional]
-#      %s              - must follow other options at the end of the line
-#
-# without perl you could do this:
-#DEFAULT               (echo ""; who am i; date; cat) >> $CVSROOT/CVSROOT/commitlog
-#
-DEFAULT                        $CVSROOT/CVSROOT/log -f $CVSROOT/CVSROOT/commitlog  %s
diff --git a/gnu/usr.bin/cvs/examples/modules b/gnu/usr.bin/cvs/examples/modules
deleted file mode 100644 (file)
index fba936e..0000000
+++ /dev/null
@@ -1,581 +0,0 @@
-#
-# The CVS Modules File
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: modules,v 1.1.1.3 1996/04/27 19:43:05 tholo Exp $"
-#
-# Three different line formats are valid:
-#      key     -a    aliases...
-#      key [options] directory
-#      key [options] directory files...
-#
-# Where "options" are composed of:
-#      -i prog         Run "prog" on "cvs commit" from top-level of module.
-#      -o prog         Run "prog" on "cvs checkout" of module.
-#      -e prog         Run "prog" on "cvs export" of module.
-#      -t prog         Run "prog" on "cvs rtag" of module.
-#      -u prog         Run "prog" on "cvs update" of module.
-#      -d dir          Place module in directory "dir" instead of module name.
-#      -l              Top-level directory only -- do not recurse.
-#
-# And "directory" is a path to a directory relative to $CVSROOT.
-#
-# The "-a" option specifies an alias.  An alias is interpreted as if
-# everything on the right of the "-a" had been typed on the command line.
-#
-# You can encode a module within a module by using the special '&'
-# character to interpose another module into the current module.  This
-# can be useful for creating a module that consists of many directories
-# spread out over the entire source repository.
-#
-
-# Convenient aliases
-world          -a .
-
-# CVSROOT support
-CVSROOT                CVSROOT
-commitinfo     CVSROOT commitinfo
-cvswrappers    CVSROOT cvswrappers
-editinfo       CVSROOT editinfo
-modules                CVSROOT modules
-loginfo                CVSROOT loginfo
-rcsinfo                CVSROOT rcsinfo
-rcstemplate    CVSROOT rcstemplate
-taginfo                CVSROOT taginfo
-
-# Add more modules here 
-#
-# END_REQUIRED_CONTENT (this comment for cvsinit)
-#
-# The remainder was for the Prisma OS sources
-#
-
-# another convenient alias
-kernel         -a sys lang/adb sparcsim
-
-# The "sys" entry exists only to make symbolic links after checkout
-sys            -o sys/tools/make_links sys
-
-# Sub-directories of "bin"
-awk            bin/awk
-csh            bin/csh
-diff           bin/diff
-make           bin/make
-sed            bin/sed
-sh             bin/sh
-
-# Programs that live in "bin"
-cat            bin Makefile cat.c
-chgrp          bin Makefile chgrp.c
-chmod          bin Makefile chmod.c
-cmp            bin Makefile cmp.c
-cp             bin Makefile cp.c
-date           bin Makefile date.c
-dd             bin Makefile dd.c
-df             bin Makefile df.c
-domainname     bin Makefile domainname.c
-du             bin Makefile du.c
-echo           bin Makefile echo.c
-ed             bin Makefile ed.c
-env            bin Makefile env.c
-expr           bin Makefile expr.c
-grep           bin Makefile grep.c
-hostid         bin Makefile hostid.c
-hostname       bin Makefile hostname.c
-kill           bin Makefile kill.c
-ldd            bin Makefile ldd.c
-line           bin Makefile line.c
-ln             bin Makefile ln.c
-login          bin Makefile login.c
-ls             bin Makefile ls.c
-mail           bin Makefile mail.c
-mkdir          bin Makefile mkdir.c
-mt             bin Makefile mt.c
-mv             bin Makefile mv.c
-newgrp         bin Makefile newgrp.c
-nice           bin Makefile nice.c
-od             bin Makefile od.c
-pagesize       bin Makefile pagesize.c
-passwd         bin Makefile passwd.c
-pr             bin Makefile pr.c
-ps             bin Makefile ps.c
-pwd            bin Makefile pwd.c
-rm             bin Makefile rm.c
-rmail          bin Makefile rmail.c
-rmdir          bin Makefile rmdir.c
-stty           bin Makefile stty.c
-su             bin Makefile su.c
-sync           bin Makefile sync.c
-tar            bin Makefile tar.c
-tee            bin Makefile tee.c
-test           bin Makefile test.c
-time           bin Makefile time.c
-wall           bin Makefile wall.c
-who            bin Makefile who.c
-write          bin Makefile write.c
-
-# Sub-directories of "etc"
-dump           etc/dump
-files          etc/files
-fsck           etc/fsck
-getty          etc/getty
-in.routed      etc/in.routed
-restore                etc/restore
-rpc.lockd      etc/rpc.lockd
-rpc.statd      etc/rpc.statd
-
-# Programs that live in "etc"
-arp            etc Makefile arp.c
-biod           etc Makefile biod.c
-chown          etc Makefile chown.c
-clri           etc Makefile clri.c
-dkinfo         etc Makefile dkinfo.c
-dmesg          etc Makefile dmesg.c
-fsirand                etc Makefile fsirand.c
-halt           etc Makefile halt.c
-ifconfig       etc Makefile ifconfig.c
-in.rlogind     etc Makefile in.rlogind.c
-in.rshd                etc Makefile in.rshd.c
-inetd          etc Makefile inetd.c
-init           etc Makefile init.c
-mkfs           etc Makefile mkfs.c
-mknod          etc Makefile mknod.c
-mount          etc Makefile mount.c
-newfs          etc Makefile newfs.c
-nfsd           etc Makefile nfsd.c
-portmap                etc Makefile portmap.c
-pstat          etc Makefile pstat.c
-reboot         etc Makefile reboot.c
-renice         etc Makefile renice.c
-rmt            etc Makefile rmt.c
-shutdown       etc Makefile shutdown.c
-syslogd                etc Makefile syslogd.c
-umount         etc Makefile umount.c
-update         etc Makefile update.c
-vipw           etc Makefile vipw.c
-ypbind         etc Makefile ypbind.c
-
-# Sub-directories of "games"
-adventure      games/adventure
-backgammon     games/backgammon
-battlestar     games/battlestar
-boggle         games/boggle
-chess          games/chess
-ching          games/ching
-cribbage       games/cribbage
-fortune                games/fortune
-hack           games/hack
-hangman                games/hangman
-hunt           games/hunt
-life           games/life
-mille          games/mille
-monop          games/monop
-quiz           games/quiz
-robots         games/robots
-sail           games/sail
-snake          games/snake
-trek           games/trek
-
-# Programs that live in "games"
-arithmetic     games Makefile arithmetic.c
-banner         games Makefile banner.c
-bcd            games Makefile bcd.c
-bj             games Makefile bj.c
-btlgammon      games Makefile btlgammon.c
-canfield       games Makefile canfield.c
-cfscores       games Makefile cfscores.c
-craps          games Makefile craps.c
-factor         games Makefile factor.c
-fish           games Makefile fish.c
-moo            games Makefile moo.c
-number         games Makefile number.c
-primes         games Makefile primes.c
-rain           games Makefile rain.c
-random         games Makefile random.c
-worm           games Makefile worm.c
-worms          games Makefile worms.c
-wump           games Makefile wump.c
-
-# Sub-directories of "lang"
-adb            lang/adb
-as             lang/as
-boot           lang/boot
-c2             lang/c2
-cgrdr          lang/cgrdr
-compile                lang/compile
-cpp            lang/cpp
-dbx            lang/dbx
-f77            lang/f77
-inline         lang/inline
-iropt          lang/iropt
-ld             lang/ld
-lint           lang/lint
-m4             lang/m4
-pascal         lang/pascal
-pcc            lang/pcc
-ratfor         lang/ratfor
-rtld           lang/rtld
-tcov           lang/tcov
-vroot          lang/vroot
-
-# Programs that live in "lang"
-ar             lang Makefile ar.c
-nm             lang Makefile nm.c
-ranlib         lang Makefile ranlib.c
-size           lang Makefile size.c
-strip          lang Makefile strip.c
-symorder       lang Makefile symorder.c
-
-# Sub-directories of "lib"
-csu            lib/csu
-libc           lib/libc
-
-# Programs that live in "lib"
-# NONE
-
-# Sub-directories of "lib/libc"
-libc_compat    lib/libc/compat
-libc_crt       lib/libc/crt
-libc_des       lib/libc/des
-libc_gen       lib/libc/gen
-libc_net       lib/libc/net
-libc_inet      lib/libc/inet
-libc_rpc       lib/libc/rpc
-libc_stdio     lib/libc/stdio
-libc_sun       lib/libc/sun
-libc_sys       lib/libc/sys
-libc_yp                lib/libc/yp
-
-# Programs that live in "lib/libc"
-# NONE
-
-#Sub-directories of "local"
-notes          local/notes
-
-# Sub-directories of "man"
-man1           man/man1
-man2           man/man2
-man3           man/man3
-man4           man/man4
-man5           man/man5
-man6           man/man6
-man7           man/man7
-man8           man/man8
-manl           man/manl
-
-# Programs that live in "man"
-# NONE
-
-# Sub-directories of "old"
-old_compact    old/compact
-old_eyacc      old/eyacc
-old_filemerge  old/filemerge
-old_make       old/make
-
-# Programs that live in "old"
-old_analyze    old Makefile analyze.c
-old_prmail     old Makefile prmail.c
-old_pti                old Makefile pti.c
-old_syslog     old Makefile syslog.c
-
-# Sub-directories of "ucb"
-Mail           ucb/Mail
-compress       ucb/compress
-error          ucb/error
-ex             ucb/ex
-ftp            ucb/ftp
-gprof          ucb/gprof
-indent         ucb/indent
-lpr            ucb/lpr
-more           ucb/more
-msgs           ucb/msgs
-netstat                ucb/netstat
-rdist          ucb/rdist
-talk           ucb/talk
-tftp           ucb/tftp
-tset           ucb/tset
-vgrind         ucb/vgrind
-
-# Programs that live in "ucb"
-biff           ucb Makefile biff.c
-checknr                ucb Makefile checknr.c
-clear          ucb Makefile clear.c
-colcrt         ucb Makefile colcrt.c
-colrm          ucb Makefile colrm.c
-ctags          ucb Makefile ctags.c
-expand         ucb Makefile expand.c
-finger         ucb Makefile finger.c
-fold           ucb Makefile fold.c
-from           ucb Makefile from.c
-fsplit         ucb Makefile fsplit.c
-gcore          ucb Makefile gcore.c
-groups         ucb Makefile groups.c
-head           ucb Makefile head.c
-last           ucb Makefile last.c
-lastcomm       ucb Makefile lastcomm.c
-leave          ucb Makefile leave.c
-logger         ucb Makefile logger.c
-man_prog       ucb Makefile man.c
-mkstr          ucb Makefile mkstr.c
-printenv       ucb Makefile printenv.c
-quota          ucb Makefile quota.c
-rcp            ucb Makefile rcp.c
-rdate          ucb Makefile rdate.c
-rlogin         ucb Makefile rlogin.c
-rsh            ucb Makefile rsh.c
-rup            ucb Makefile rup.c
-ruptime                ucb Makefile ruptime.c
-rusers         ucb Makefile rusers.c
-rwho           ucb Makefile rwho.c
-sccs           ucb Makefile sccs.c
-script         ucb Makefile script.c
-soelim         ucb Makefile soelim.c
-strings                ucb Makefile strings.c
-tail           ucb Makefile tail.c
-tcopy          ucb Makefile tcopy.c
-telnet         ucb Makefile telnet.c
-ul             ucb Makefile ul.c
-unexpand       ucb Makefile unexpand.c
-unifdef                ucb Makefile unifdef.c
-users          ucb Makefile users.c
-vmstat         ucb Makefile vmstat.c
-w              ucb Makefile w.c
-wc             ucb Makefile wc.c
-what           ucb Makefile what.c
-whatis         ucb Makefile whatis.c
-whereis                ucb Makefile whereis.c
-whoami         ucb Makefile whoami.c
-whois          ucb Makefile whois.c
-xstr           ucb Makefile xstr.c
-yes            ucb Makefile yes.c
-
-# Sub-directories of "usr.bin"
-calendar       usr.bin/calendar
-cflow          usr.bin/cflow
-ctrace         usr.bin/ctrace
-cxref          usr.bin/cxref
-dc             usr.bin/dc
-des            usr.bin/des
-diff3          usr.bin/diff3
-sun_eqn                usr.bin/eqn
-file           usr.bin/file
-find           usr.bin/find
-graph          usr.bin/graph
-lex            usr.bin/lex
-sun_neqn       usr.bin/neqn
-sun_nroff      usr.bin/nroff
-sun_plot       usr.bin/plot
-prof           usr.bin/prof
-refer          usr.bin/refer
-rpcgen         usr.bin/rpcgen
-spell          usr.bin/spell
-sun_tbl                usr.bin/tbl
-tip            usr.bin/tip
-trace          usr.bin/trace
-sun_troff      usr.bin/troff
-uucp           usr.bin/uucp
-xsend          usr.bin/xsend
-yacc           usr.bin/yacc
-
-# Programs that live in "usr.bin"
-basename       usr.bin Makefile basename.c
-bc             usr.bin Makefile bc.c
-cal            usr.bin Makefile cal.c
-cb             usr.bin Makefile cb.c
-checkeq                usr.bin Makefile checkeq.c
-chkey          usr.bin Makefile chkey.c
-click          usr.bin Makefile click.c
-col            usr.bin Makefile col.c
-comm           usr.bin Makefile comm.c
-cpio           usr.bin Makefile cpio.c
-crypt          usr.bin Makefile crypt.c
-csplit         usr.bin Makefile csplit.c
-cut            usr.bin Makefile cut.c
-deroff         usr.bin Makefile deroff.c
-egrep          usr.bin Makefile egrep.c
-fgrep          usr.bin Makefile fgrep.c
-getopt         usr.bin Makefile getopt.c
-id             usr.bin Makefile id.c
-installcmd     usr.bin Makefile installcmd.c
-iostat         usr.bin Makefile iostat.c
-ipcrm          usr.bin Makefile ipcrm.c
-ipcs           usr.bin Makefile ipcs.c
-join           usr.bin Makefile join.c
-keylogin       usr.bin Makefile keylogin.c
-logname                usr.bin Makefile logname.c
-look           usr.bin Makefile look.c
-mesg           usr.bin Makefile mesg.c
-nl             usr.bin Makefile nl.c
-pack           usr.bin Makefile pack.c
-paste          usr.bin Makefile paste.c
-ptx            usr.bin Makefile ptx.c
-rev            usr.bin Makefile rev.c
-screenblank    usr.bin Makefile screenblank.c
-sdiff          usr.bin Makefile sdiff.c
-sleep          usr.bin Makefile sleep.c
-sort           usr.bin Makefile sort.c
-spline         usr.bin Makefile spline.c
-split          usr.bin Makefile split.c
-sum            usr.bin Makefile sum.c
-touch          usr.bin Makefile touch.c
-tr             usr.bin Makefile tr.c
-tsort          usr.bin Makefile tsort.c
-tty            usr.bin Makefile tty.c
-uniq           usr.bin Makefile uniq.c
-units          usr.bin Makefile units.c
-unpack         usr.bin Makefile unpack.c
-xargs          usr.bin Makefile xargs.c
-ypcat          usr.bin Makefile ypcat.c
-ypmatch                usr.bin Makefile ypmatch.c
-yppasswd       usr.bin Makefile yppasswd.c
-ypwhich                usr.bin Makefile ypwhich.c
-
-# Sub-directories of "usr.etc"
-automount      usr.etc/automount
-c2convert      usr.etc/c2convert
-config         usr.etc/config
-cron           usr.etc/cron
-eeprom         usr.etc/eeprom
-etherfind      usr.etc/etherfind
-format         usr.etc/format
-htable         usr.etc/htable
-implog         usr.etc/implog
-in.ftpd                -a usr.etc/in.ftpd ucb/ftp
-in.named       usr.etc/in.named
-in.rwhod       usr.etc/in.rwhod
-keyserv                usr.etc/keyserv
-ndbootd                usr.etc/ndbootd
-praudit                usr.etc/praudit
-rexd           usr.etc/rexd
-rpc.bootparamd usr.etc/rpc.bootparamd
-termcap                usr.etc/termcap
-upgrade                usr.etc/upgrade
-yp             usr.etc/yp
-zic            usr.etc/zic
-
-# Programs that live in "usr.etc"
-ac             usr.etc Makefile ac.c
-accton         usr.etc Makefile accton.c
-audit          usr.etc Makefile audit.c
-auditd         usr.etc Makefile auditd.c
-catman         usr.etc Makefile catman.c
-chroot         usr.etc Makefile chroot.c
-dcheck         usr.etc Makefile dcheck.c
-devnm          usr.etc Makefile devnm.c
-dumpfs         usr.etc Makefile dumpfs.c
-edquota                usr.etc Makefile edquota.c
-exportfs       usr.etc Makefile exportfs.c
-foption                usr.etc Makefile foption.c
-gettable       usr.etc Makefile gettable.c
-grpck          usr.etc Makefile grpck.c
-icheck         usr.etc Makefile icheck.c
-in.comsat      usr.etc Makefile in.comsat.c
-in.fingerd     usr.etc Makefile in.fingerd.c
-in.rexecd      usr.etc Makefile in.rexecd.c
-in.telnetd     usr.etc Makefile in.telnetd.c
-in.tnamed      usr.etc Makefile in.tnamed.c
-kgmon          usr.etc Makefile kgmon.c
-link           usr.etc Makefile link.c
-mkfile         usr.etc Makefile mkfile.c
-mkproto                usr.etc Makefile mkproto.c
-mount_lo       usr.etc Makefile mount_lo.c
-ncheck         usr.etc Makefile ncheck.c
-nfsstat                usr.etc Makefile nfsstat.c
-ping           usr.etc Makefile ping.c
-pwck           usr.etc Makefile pwck.c
-quot           usr.etc Makefile quot.c
-quotacheck     usr.etc Makefile quotacheck.c
-quotaon                usr.etc Makefile quotaon.c
-rarpd          usr.etc Makefile rarpd.c
-repquota       usr.etc Makefile repquota.c
-route          usr.etc Makefile route.c
-rpc.etherd     usr.etc Makefile rpc.etherd.c
-rpc.mountd     usr.etc Makefile rpc.mountd.c
-rpc.pwdauthd   usr.etc Makefile rpc.pwdauthd.c
-rpc.rquotad    usr.etc Makefile rpc.rquotad.c
-rpc.rstatd     usr.etc Makefile rpc.rstatd.c
-rpc.rusersd    usr.etc Makefile rpc.rusersd.c
-rpc.rwalld     usr.etc Makefile rpc.rwalld.c
-rpc.sprayd     usr.etc Makefile rpc.sprayd.c
-rpc.yppasswdd  usr.etc Makefile rpc.yppasswdd.c
-rpc.ypupdated  usr.etc Makefile rpc.ypupdated.c
-rpcinfo                usr.etc Makefile rpcinfo.c
-rwall          usr.etc Makefile rwall.c
-sa             usr.etc Makefile sa.c
-savecore       usr.etc Makefile savecore.c
-showmount      usr.etc Makefile showmount.c
-spray          usr.etc Makefile spray.c
-swapon         usr.etc Makefile swapon.c
-trpt           usr.etc Makefile trpt.c
-tunefs         usr.etc Makefile tunefs.c
-unlink         usr.etc Makefile unlink.c
-
-# Sub-directories of "usr.lib"
-bb_count       usr.lib/bb_count
-fixedwidthfonts        usr.lib/fixedwidthfonts
-libcurses      usr.lib/libcurses
-libdbm         usr.lib/libdbm
-libg           usr.lib/libg
-libkvm         usr.lib/libkvm
-libln          usr.lib/libln
-liblwp         usr.lib/liblwp
-libm           usr.lib/libm
-libmp          usr.lib/libmp
-libpixrect     usr.lib/libpixrect
-libplot                usr.lib/libplot
-libresolv      usr.lib/libresolv
-librpcsvc      usr.lib/librpcsvc
-libtermlib     usr.lib/libtermlib
-liby           usr.lib/liby
-me             usr.lib/me
-ms             usr.lib/ms
-sendmail       usr.lib/sendmail
-sun_tmac       usr.lib/tmac
-vfont          usr.lib/vfont
-
-# Programs that live in "usr.lib"
-getNAME                usr.lib Makefile getNAME
-makekey                usr.lib Makefile makekey
-
-# Sub-directories of "5bin"
-5diff3         5bin/diff3
-5m4            5bin/m4
-
-# Sub-directories of "5bin", but use sources from other places
-5cxref         -a 5bin/cxref usr.bin/cxref
-5sed           -a 5bin/sed bin/sed
-5lint          -a 5bin/lint lang/pcc lang/lint
-
-# Programs that live in "5bin"
-5banner                5bin Makefile banner.c
-5cat           5bin Makefile cat.c
-5du            5bin Makefile du.c
-5echo          5bin Makefile echo.c
-5expr          5bin Makefile expr.c
-5ls            5bin Makefile ls.c
-5nohup         5bin Makefile nohup.c
-5od            5bin Makefile od.c
-5pg            5bin Makefile pg.c
-5pr            5bin Makefile pr.c
-5sum           5bin Makefile sum.c
-5tabs          5bin Makefile tabs.c
-5time          5bin Makefile time.c
-5tr            5bin Makefile tr.c
-5uname         5bin Makefile uname.c
-
-# Programs that live in "5bin", but use sources from other places
-5chmod         -a 5bin/Makefile bin/chmod.c
-5date          -a 5bin/Makefile bin/date.c
-5grep          -a 5bin/Makefile bin/grep.c
-5stty          -a 5bin/Makefile bin/stty.c
-5col           -a 5bin/Makefile usr.bin/col.c
-5sort          -a 5bin/Makefile usr.bin/sort.c
-5touch         -a 5bin/Makefile usr.bin/touch.c
-
-# Sub-directories of "5lib"
-5compile       5lib/compile
-5libcurses     5lib/libcurses
-5liby          5lib/liby
-5terminfo      5lib/terminfo
-
-# Programs that live in "5lib"
-# NONE
diff --git a/gnu/usr.bin/cvs/examples/notify b/gnu/usr.bin/cvs/examples/notify
deleted file mode 100644 (file)
index 2be867e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# The "notify" file controls where notifications from watches set by
-# "cvs watch add" or "cvs edit" are sent.  The first entry on a line is
-# a regular expression which is tested against the directory that the
-# change is being made to, relative to the $CVSROOT.  If it matches,
-# then the remainder of the line is a filter program that should contain
-# one occurrence of %s for the user to notify, and information on its
-# standard input.
-#
-# "ALL" or "DEFAULT" can be used in place of the regular expression.
-#
-ALL mail %s -s "CVS notification"
diff --git a/gnu/usr.bin/cvs/examples/rcsinfo b/gnu/usr.bin/cvs/examples/rcsinfo
deleted file mode 100644 (file)
index 1eb1610..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: rcsinfo,v 1.1.1.2 1996/01/30 00:19:22 tholo Exp $"
-#
-# The "rcsinfo" file is used to control templates with which the editor
-# is invoked on commit and import.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being made to, relative to the
-# $CVSROOT.  For the first match that is found, then the remainder of the
-# line is the name of the file that contains the template.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
-#
-DEFAULT                        $CVSROOT/CVSROOT/rcstemplate
diff --git a/gnu/usr.bin/cvs/examples/rcstemplate b/gnu/usr.bin/cvs/examples/rcstemplate
deleted file mode 100644 (file)
index c9a2d1e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-CVS: 
-CVS: WARNING:  You are commiting a change to the main source repository.
-CVS: 
-CVS:          This change will be immediately available to all other users
-CVS:          of this repository!  Please be sure your changes have been
-CVS:          adequately tested.
-CVS: 
diff --git a/gnu/usr.bin/cvs/examples/taginfo b/gnu/usr.bin/cvs/examples/taginfo
deleted file mode 100644 (file)
index 04ebfdd..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: taginfo,v 1.1.1.2 1996/01/30 00:19:23 tholo Exp $"
-#
-# The "taginfo" file is used to control pre-tag checks.
-# The filter on the right is invoked with the following arguments:
-#
-# $1 -- tagname
-# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
-# $3 -- repository
-# $4->  file revision [file revision ...]
-#
-# A non-zero exit of the filter program will cause the tag to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
-#
-DEFAULT                        $CVSROOT/CVSROOT/tag_logging_program
diff --git a/gnu/usr.bin/cvs/examples/unwrap b/gnu/usr.bin/cvs/examples/unwrap
deleted file mode 100644 (file)
index 99d48ac..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#! /bin/sh
-#
-#      unwrap - extract the combined package (created with wrap)
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: unwrap,v 1.1.1.1 1996/01/30 00:19:26 tholo Exp $"
-
-# move the file to a new name with an extension
-rm -rf $1.cvswrap
-mv $1 $1.cvswrap
-
-# untar the file
-
-if `gzip -t $1.cvswrap > /dev/null 2>&1`
-then
-       gzcat -d $1.cvswrap | gnutar --preserve --sparse -x -f -
-else
-       gnutar --preserve --sparse -x -f $1.cvswrap
-fi
-
-# remove the original
-rm -rf $1.cvswrap
diff --git a/gnu/usr.bin/cvs/examples/wrap b/gnu/usr.bin/cvs/examples/wrap
deleted file mode 100644 (file)
index 4448771..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#! /bin/sh
-#
-#      wrap - Combine a directory into a single tar package.
-#
-#ident "@(#)cvs/examples:$Name:  $:$Id: wrap,v 1.1.1.1 1996/01/30 00:19:26 tholo Exp $"
-
-# This script is always called with the current directory set to
-# where the file to be combined exists. but i may get called with a
-# path to where cvs first started executing. (this probably should be
-# fixed in cvs) so strip out all of the directory information. The
-# first sed expression will only work if the path has a leading /
-# if it doesn't the one in the if statement will work.
-DIRNAME=`echo $1 | sed -e "s|/.*/||g"`
-if [ ! -d $DIRNAME ] ; then
-      DIRNAME=`echo $1 | sed -e "s|.*/||g"`
-fi
-#
-# Now tar up the directory but we now will only get a relative path
-# even if the user did a cvs commit . at the top.
-#
-gnutar --preserve --sparse -cf - $DIRNAME | gzip --no-name --best -c > $2
index b0f9411..20f442f 100644 (file)
@@ -1,3 +1,26 @@
+
+/*  A Bison parser, made from ./getdate.y
+ by  Bison version A2.5 (Andrew Consortium)
+  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+#define        tAGO    258
+#define        tDAY    259
+#define        tDAYZONE        260
+#define        tID     261
+#define        tMERIDIAN       262
+#define        tMINUTE_UNIT    263
+#define        tMONTH  264
+#define        tMONTH_UNIT     265
+#define        tSEC_UNIT       266
+#define        tSNUMBER        267
+#define        tUNUMBER        268
+#define        tZONE   269
+#define        tDST    270
+
+#line 1 "./getdate.y"
+
 /*
 **  Originally written by Steven M. Bellovin <smb@research.att.com> while
 **  at the University of North Carolina at Chapel Hill.  Later tweaked by
 #endif
 #endif
 
-#if STDC_HEADERS
-#include <stdlib.h>
-#else
-char *malloc (), *realloc ();
-#endif
-
 /* Since the code of getdate.y is not included in the Emacs executable
    itself, there is no need to #define static in this file.  Even if
    the code were included in the Emacs executable, it probably
@@ -90,119 +107,1226 @@ struct timeb {
 #include <string.h>
 #endif
 
-/* Some old versions of bison generate parsers that use bcopy.
-   That loses on systems that don't provide the function, so we have
-   to redefine it here.  */
-#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
-#define bcopy(from, to, len) memcpy ((to), (from), (len))
+/* Some old versions of bison generate parsers that use bcopy.
+   That loses on systems that don't provide the function, so we have
+   to redefine it here.  */
+#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
+#define bcopy(from, to, len) memcpy ((to), (from), (len))
+#endif
+
+#if defined (STDC_HEADERS)
+#include <stdlib.h>
+#endif
+
+#if defined (HAVE_ALLOCA_H)
+#include <alloca.h>
+#endif
+
+extern struct tm       *gmtime();
+extern struct tm       *localtime();
+
+#define yyparse getdate_yyparse
+#define yylex getdate_yylex
+#define yyerror getdate_yyerror
+
+#if    !defined(lint) && !defined(SABER)
+static char RCS[] = "$CVSid: @(#)getdate.y 1.11 94/09/21 $";
+#endif /* !defined(lint) && !defined(SABER) */
+
+static int yylex ();
+static int yyerror ();
+
+#define EPOCH          1970
+#define HOUR(x)                ((time_t)(x) * 60)
+#define SECSPERDAY     (24L * 60L * 60L)
+
+
+/*
+**  An entry in the lexical lookup table.
+*/
+typedef struct _TABLE {
+    char       *name;
+    int                type;
+    time_t     value;
+} TABLE;
+
+
+/*
+**  Daylight-savings mode:  on, off, or not yet known.
+*/
+typedef enum _DSTMODE {
+    DSTon, DSToff, DSTmaybe
+} DSTMODE;
+
+/*
+**  Meridian:  am, pm, or 24-hour style.
+*/
+typedef enum _MERIDIAN {
+    MERam, MERpm, MER24
+} MERIDIAN;
+
+
+/*
+**  Global variables.  We could get rid of most of these by using a good
+**  union as the yacc stack.  (This routine was originally written before
+**  yacc had the %union construct.)  Maybe someday; right now we only use
+**  the %union very rarely.
+*/
+static char    *yyInput;
+static DSTMODE yyDSTmode;
+static time_t  yyDayOrdinal;
+static time_t  yyDayNumber;
+static int     yyHaveDate;
+static int     yyHaveDay;
+static int     yyHaveRel;
+static int     yyHaveTime;
+static int     yyHaveZone;
+static time_t  yyTimezone;
+static time_t  yyDay;
+static time_t  yyHour;
+static time_t  yyMinutes;
+static time_t  yyMonth;
+static time_t  yySeconds;
+static time_t  yyYear;
+static MERIDIAN        yyMeridian;
+static time_t  yyRelMonth;
+static time_t  yyRelSeconds;
+
+
+#line 175 "./getdate.y"
+typedef union {
+    time_t             Number;
+    enum _MERIDIAN     Meridian;
+} YYSTYPE;
+#include <stdio.h>
+
+#ifndef __cplusplus
+#ifndef __STDC__
+#define const
+#endif
+#endif
+
+
+
+#define        YYFINAL         52
+#define        YYFLAG          -32768
+#define        YYNTBASE        19
+
+#define YYTRANSLATE(x) ((unsigned)(x) <= 270 ? yytranslate[x] : 29)
+
+static const char yytranslate[] = {     0,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,    17,     2,     2,    18,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,    16,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
+     6,     7,     8,     9,    10,    11,    12,    13,    14,    15
+};
+
+#if YYDEBUG != 0
+static const short yyprhs[] = {     0,
+     0,     1,     4,     6,     8,    10,    12,    14,    16,    19,
+    24,    29,    36,    43,    45,    47,    50,    52,    55,    58,
+    62,    68,    72,    76,    79,    84,    87,    91,    94,    96,
+    99,   102,   104,   107,   110,   112,   115,   118,   120,   122,
+   123
+};
+
+static const short yyrhs[] = {    -1,
+    19,    20,     0,    21,     0,    22,     0,    24,     0,    23,
+     0,    25,     0,    27,     0,    13,     7,     0,    13,    16,
+    13,    28,     0,    13,    16,    13,    12,     0,    13,    16,
+    13,    16,    13,    28,     0,    13,    16,    13,    16,    13,
+    12,     0,    14,     0,     5,     0,    14,    15,     0,     4,
+     0,     4,    17,     0,    13,     4,     0,    13,    18,    13,
+     0,    13,    18,    13,    18,    13,     0,    13,    12,    12,
+     0,    13,     9,    12,     0,     9,    13,     0,     9,    13,
+    17,    13,     0,    13,     9,     0,    13,     9,    13,     0,
+    26,     3,     0,    26,     0,    13,     8,     0,    12,     8,
+     0,     8,     0,    12,    11,     0,    13,    11,     0,    11,
+     0,    12,    10,     0,    13,    10,     0,    10,     0,    13,
+     0,     0,     7,     0
+};
+
+#endif
+
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+   189,   190,   193,   196,   199,   202,   205,   208,   211,   217,
+   223,   230,   236,   246,   250,   254,   261,   265,   269,   275,
+   279,   284,   290,   296,   300,   305,   309,   316,   320,   323,
+   326,   329,   332,   335,   338,   341,   344,   347,   352,   379,
+   382
+};
+#endif
+
+
+#if YYDEBUG != 0
+
+static const char * const yytname[] = {   "$","error","$undefined.","tAGO","tDAY",
+"tDAYZONE","tID","tMERIDIAN","tMINUTE_UNIT","tMONTH","tMONTH_UNIT","tSEC_UNIT",
+"tSNUMBER","tUNUMBER","tZONE","tDST","':'","','","'/'","spec","item","time",
+"zone","day","date","rel","relunit","number","o_merid", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+    19,    19,    20,    20,    20,    20,    20,    20,    21,    21,
+    21,    21,    21,    22,    22,    22,    23,    23,    23,    24,
+    24,    24,    24,    24,    24,    24,    24,    25,    25,    26,
+    26,    26,    26,    26,    26,    26,    26,    26,    27,    28,
+    28
+};
+
+static const short yyr2[] = {     0,
+     0,     2,     1,     1,     1,     1,     1,     1,     2,     4,
+     4,     6,     6,     1,     1,     2,     1,     2,     2,     3,
+     5,     3,     3,     2,     4,     2,     3,     2,     1,     2,
+     2,     1,     2,     2,     1,     2,     2,     1,     1,     0,
+     1
+};
+
+static const short yydefact[] = {     1,
+     0,    17,    15,    32,     0,    38,    35,     0,    39,    14,
+     2,     3,     4,     6,     5,     7,    29,     8,    18,    24,
+    31,    36,    33,    19,     9,    30,    26,    37,    34,     0,
+     0,     0,    16,    28,     0,    23,    27,    22,    40,    20,
+    25,    41,    11,     0,    10,     0,    40,    21,    13,    12,
+     0,     0
+};
+
+static const short yydefgoto[] = {     1,
+    11,    12,    13,    14,    15,    16,    17,    18,    45
+};
+
+static const short yypact[] = {-32768,
+     0,    -1,-32768,-32768,     4,-32768,-32768,    25,    11,    -8,
+-32768,-32768,-32768,-32768,-32768,-32768,    21,-32768,-32768,     9,
+-32768,-32768,-32768,-32768,-32768,-32768,   -10,-32768,-32768,    16,
+    19,    24,-32768,-32768,    26,-32768,-32768,-32768,    18,    13,
+-32768,-32768,-32768,    27,-32768,    28,    -6,-32768,-32768,-32768,
+    38,-32768
+};
+
+static const short yypgoto[] = {-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    -5
+};
+
+
+#define        YYLAST          42
+
+
+static const short yytable[] = {    51,
+    42,    36,    37,     2,     3,    49,    33,     4,     5,     6,
+     7,     8,     9,    10,    24,    19,    20,    25,    26,    27,
+    28,    29,    30,    34,    42,    35,    31,    38,    32,    43,
+    46,    39,    21,    44,    22,    23,    40,    52,    41,    47,
+    48,    50
+};
+
+static const short yycheck[] = {     0,
+     7,    12,    13,     4,     5,    12,    15,     8,     9,    10,
+    11,    12,    13,    14,     4,    17,    13,     7,     8,     9,
+    10,    11,    12,     3,     7,    17,    16,    12,    18,    12,
+    18,    13,     8,    16,    10,    11,    13,     0,    13,    13,
+    13,    47
+};
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/share/bison.simple"
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+
+   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.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+#ifndef alloca
+#ifdef __GNUC__
+#define alloca __builtin_alloca
+#else /* not GNU C.  */
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
+#include <alloca.h>
+#else /* not sparc */
+#if defined (MSDOS) && !defined (__TURBOC__)
+#include <malloc.h>
+#else /* not MSDOS, or __TURBOC__ */
+#if defined(_AIX)
+#include <malloc.h>
+ #pragma alloca
+#else /* not MSDOS, __TURBOC__, or _AIX */
+#ifdef __hpux
+#ifdef __cplusplus
+extern "C" {
+void *alloca (unsigned int);
+};
+#else /* not __cplusplus */
+void *alloca ();
+#endif /* not __cplusplus */
+#endif /* __hpux */
+#endif /* not _AIX */
+#endif /* not MSDOS, or __TURBOC__ */
+#endif /* not sparc.  */
+#endif /* not GNU C.  */
+#endif /* alloca not defined.  */
+
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+/* Note: there must be only one dollar sign in this file.
+   It is replaced by the list of actions, each action
+   as one case of the switch.  */
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                -2
+#define YYEOF          0
+#define YYACCEPT       return(0)
+#define YYABORT        return(1)
+#define YYERROR                goto yyerrlab1
+/* Like YYERROR except do call yyerror.
+   This remains here temporarily to ease the
+   transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+#define YYFAIL         goto yyerrlab
+#define YYRECOVERING()  (!!yyerrstatus)
+#define YYBACKUP(token, value) \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    { yychar = (token), yylval = (value);                      \
+      yychar1 = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK;                                              \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    { yyerror ("syntax error: cannot back up"); YYERROR; }     \
+while (0)
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+#ifndef YYPURE
+#define YYLEX          yylex()
+#endif
+
+#ifdef YYPURE
+#ifdef YYLSP_NEEDED
+#ifdef YYLEX_PARAM
+#define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
+#else
+#define YYLEX          yylex(&yylval, &yylloc)
+#endif
+#else /* not YYLSP_NEEDED */
+#ifdef YYLEX_PARAM
+#define YYLEX          yylex(&yylval, YYLEX_PARAM)
+#else
+#define YYLEX          yylex(&yylval)
+#endif
+#endif /* not YYLSP_NEEDED */
+#endif
+
+/* If nonreentrant, generate the variables here */
+
+#ifndef YYPURE
+
+int    yychar;                 /*  the lookahead symbol                */
+YYSTYPE        yylval;                 /*  the semantic value of the           */
+                               /*  lookahead symbol                    */
+
+#ifdef YYLSP_NEEDED
+YYLTYPE yylloc;                        /*  location data for the lookahead     */
+                               /*  symbol                              */
+#endif
+
+int yynerrs;                   /*  number of parse errors so far       */
+#endif  /* not YYPURE */
+
+#if YYDEBUG != 0
+int yydebug;                   /*  nonzero means print parse trace     */
+/* Since this is uninitialized, it does not stop multiple parsers
+   from coexisting.  */
+#endif
+
+/*  YYINITDEPTH indicates the initial size of the parser's stacks      */
+
+#ifndef        YYINITDEPTH
+#define YYINITDEPTH 200
+#endif
+
+/*  YYMAXDEPTH is the maximum size the stacks can grow to
+    (effective only if the built-in stack extension method is used).  */
+
+#if YYMAXDEPTH == 0
+#undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 10000
+#endif
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+int yyparse (void);
+#endif
+\f
+#if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
+#define __yy_memcpy(FROM,TO,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
+#else                          /* not GNU C or C++ */
+#ifndef __cplusplus
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (from, to, count)
+     char *from;
+     char *to;
+     int count;
+{
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#else /* __cplusplus */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (char *from, char *to, int count)
+{
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#endif
+#endif
+\f
+#line 192 "/usr/share/bison.simple"
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+#else
+#define YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#endif
+
+int
+yyparse(YYPARSE_PARAM)
+     YYPARSE_PARAM_DECL
+{
+  register int yystate;
+  register int yyn;
+  register short *yyssp;
+  register YYSTYPE *yyvsp;
+  int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
+  int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
+
+  short        yyssa[YYINITDEPTH];     /*  the state stack                     */
+  YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
+
+  short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
+  YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
+
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+
+#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+#define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
+
+  int yystacksize = YYINITDEPTH;
+
+#ifdef YYPURE
+  int yychar;
+  YYSTYPE yylval;
+  int yynerrs;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylloc;
+#endif
+#endif
+
+  YYSTYPE yyval;               /*  the variable used to return         */
+                               /*  semantic values from the action     */
+                               /*  routines                            */
+
+  int yylen;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Starting parse\n");
+#endif
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss - 1;
+  yyvsp = yyvs;
+#ifdef YYLSP_NEEDED
+  yylsp = yyls;
+#endif
+
+/* Push a new state, which is found in  yystate  .  */
+/* In all cases, when you get here, the value and location stacks
+   have just been pushed. so pushing a state here evens the stacks.  */
+yynewstate:
+
+  *++yyssp = yystate;
+
+  if (yyssp >= yyss + yystacksize - 1)
+    {
+      /* Give user a chance to reallocate the stack */
+      /* Use copies of these so that the &'s don't force the real ones into memory. */
+      YYSTYPE *yyvs1 = yyvs;
+      short *yyss1 = yyss;
+#ifdef YYLSP_NEEDED
+      YYLTYPE *yyls1 = yyls;
+#endif
+
+      /* Get the current used size of the three stacks, in elements.  */
+      int size = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      /* Each stack pointer address is followed by the size of
+        the data in use in that stack, in bytes.  */
+#ifdef YYLSP_NEEDED
+      /* This used to be a conditional around just the two extra args,
+        but that might be undefined if yyoverflow is a macro.  */
+      yyoverflow("parser stack overflow",
+                &yyss1, size * sizeof (*yyssp),
+                &yyvs1, size * sizeof (*yyvsp),
+                &yyls1, size * sizeof (*yylsp),
+                &yystacksize);
+#else
+      yyoverflow("parser stack overflow",
+                &yyss1, size * sizeof (*yyssp),
+                &yyvs1, size * sizeof (*yyvsp),
+                &yystacksize);
+#endif
+
+      yyss = yyss1; yyvs = yyvs1;
+#ifdef YYLSP_NEEDED
+      yyls = yyls1;
+#endif
+#else /* no yyoverflow */
+      /* Extend the stack our own way.  */
+      if (yystacksize >= YYMAXDEPTH)
+       {
+         yyerror("parser stack overflow");
+         return 2;
+       }
+      yystacksize *= 2;
+      if (yystacksize > YYMAXDEPTH)
+       yystacksize = YYMAXDEPTH;
+      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
+      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
+#ifdef YYLSP_NEEDED
+      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
+#endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + size - 1;
+      yyvsp = yyvs + size - 1;
+#ifdef YYLSP_NEEDED
+      yylsp = yyls + size - 1;
+#endif
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Stack size increased to %d\n", yystacksize);
+#endif
+
+      if (yyssp >= yyss + yystacksize - 1)
+       YYABORT;
+    }
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Entering state %d\n", yystate);
+#endif
+
+  goto yybackup;
+ yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
+  if (yychar == YYEMPTY)
+    {
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Reading a token: ");
+#endif
+      yychar = YYLEX;
+    }
+
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)             /* This means end of input. */
+    {
+      yychar1 = 0;
+      yychar = YYEOF;          /* Don't call YYLEX any more */
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Now at end of input.\n");
+#endif
+    }
+  else
+    {
+      yychar1 = YYTRANSLATE(yychar);
+
+#if YYDEBUG != 0
+      if (yydebug)
+       {
+         fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
+         /* Give the individual parser a way to print the precise meaning
+            of a token, for further debugging info.  */
+#ifdef YYPRINT
+         YYPRINT (stderr, yychar, yylval);
+#endif
+         fprintf (stderr, ")\n");
+       }
+#endif
+    }
+
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
+#endif
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  /* count tokens shifted since error; after three, turn off error status.  */
+  if (yyerrstatus) yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+/* Do the default action for the current state.  */
+yydefault:
+
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+
+/* Do a reduction.  yyn is the number of a rule to reduce with.  */
+yyreduce:
+  yylen = yyr2[yyn];
+  if (yylen > 0)
+    yyval = yyvsp[1-yylen]; /* implement default value of the action */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      int i;
+
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+              yyn, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
+       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
+      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+
+
+  switch (yyn) {
+
+case 3:
+#line 193 "./getdate.y"
+{
+           yyHaveTime++;
+       ;
+    break;}
+case 4:
+#line 196 "./getdate.y"
+{
+           yyHaveZone++;
+       ;
+    break;}
+case 5:
+#line 199 "./getdate.y"
+{
+           yyHaveDate++;
+       ;
+    break;}
+case 6:
+#line 202 "./getdate.y"
+{
+           yyHaveDay++;
+       ;
+    break;}
+case 7:
+#line 205 "./getdate.y"
+{
+           yyHaveRel++;
+       ;
+    break;}
+case 9:
+#line 211 "./getdate.y"
+{
+           yyHour = yyvsp[-1].Number;
+           yyMinutes = 0;
+           yySeconds = 0;
+           yyMeridian = yyvsp[0].Meridian;
+       ;
+    break;}
+case 10:
+#line 217 "./getdate.y"
+{
+           yyHour = yyvsp[-3].Number;
+           yyMinutes = yyvsp[-1].Number;
+           yySeconds = 0;
+           yyMeridian = yyvsp[0].Meridian;
+       ;
+    break;}
+case 11:
+#line 223 "./getdate.y"
+{
+           yyHour = yyvsp[-3].Number;
+           yyMinutes = yyvsp[-1].Number;
+           yyMeridian = MER24;
+           yyDSTmode = DSToff;
+           yyTimezone = - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60);
+       ;
+    break;}
+case 12:
+#line 230 "./getdate.y"
+{
+           yyHour = yyvsp[-5].Number;
+           yyMinutes = yyvsp[-3].Number;
+           yySeconds = yyvsp[-1].Number;
+           yyMeridian = yyvsp[0].Meridian;
+       ;
+    break;}
+case 13:
+#line 236 "./getdate.y"
+{
+           yyHour = yyvsp[-5].Number;
+           yyMinutes = yyvsp[-3].Number;
+           yySeconds = yyvsp[-1].Number;
+           yyMeridian = MER24;
+           yyDSTmode = DSToff;
+           yyTimezone = - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60);
+       ;
+    break;}
+case 14:
+#line 246 "./getdate.y"
+{
+           yyTimezone = yyvsp[0].Number;
+           yyDSTmode = DSToff;
+       ;
+    break;}
+case 15:
+#line 250 "./getdate.y"
+{
+           yyTimezone = yyvsp[0].Number;
+           yyDSTmode = DSTon;
+       ;
+    break;}
+case 16:
+#line 255 "./getdate.y"
+{
+           yyTimezone = yyvsp[-1].Number;
+           yyDSTmode = DSTon;
+       ;
+    break;}
+case 17:
+#line 261 "./getdate.y"
+{
+           yyDayOrdinal = 1;
+           yyDayNumber = yyvsp[0].Number;
+       ;
+    break;}
+case 18:
+#line 265 "./getdate.y"
+{
+           yyDayOrdinal = 1;
+           yyDayNumber = yyvsp[-1].Number;
+       ;
+    break;}
+case 19:
+#line 269 "./getdate.y"
+{
+           yyDayOrdinal = yyvsp[-1].Number;
+           yyDayNumber = yyvsp[0].Number;
+       ;
+    break;}
+case 20:
+#line 275 "./getdate.y"
+{
+           yyMonth = yyvsp[-2].Number;
+           yyDay = yyvsp[0].Number;
+       ;
+    break;}
+case 21:
+#line 279 "./getdate.y"
+{
+           yyMonth = yyvsp[-4].Number;
+           yyDay = yyvsp[-2].Number;
+           yyYear = yyvsp[0].Number;
+       ;
+    break;}
+case 22:
+#line 284 "./getdate.y"
+{
+           /* ISO 8601 format.  yyyy-mm-dd.  */
+           yyYear = yyvsp[-2].Number;
+           yyMonth = -yyvsp[-1].Number;
+           yyDay = -yyvsp[0].Number;
+       ;
+    break;}
+case 23:
+#line 290 "./getdate.y"
+{
+           /* e.g. 17-JUN-1992.  */
+           yyDay = yyvsp[-2].Number;
+           yyMonth = yyvsp[-1].Number;
+           yyYear = -yyvsp[0].Number;
+       ;
+    break;}
+case 24:
+#line 296 "./getdate.y"
+{
+           yyMonth = yyvsp[-1].Number;
+           yyDay = yyvsp[0].Number;
+       ;
+    break;}
+case 25:
+#line 300 "./getdate.y"
+{
+           yyMonth = yyvsp[-3].Number;
+           yyDay = yyvsp[-2].Number;
+           yyYear = yyvsp[0].Number;
+       ;
+    break;}
+case 26:
+#line 305 "./getdate.y"
+{
+           yyMonth = yyvsp[0].Number;
+           yyDay = yyvsp[-1].Number;
+       ;
+    break;}
+case 27:
+#line 309 "./getdate.y"
+{
+           yyMonth = yyvsp[-1].Number;
+           yyDay = yyvsp[-2].Number;
+           yyYear = yyvsp[0].Number;
+       ;
+    break;}
+case 28:
+#line 316 "./getdate.y"
+{
+           yyRelSeconds = -yyRelSeconds;
+           yyRelMonth = -yyRelMonth;
+       ;
+    break;}
+case 30:
+#line 323 "./getdate.y"
+{
+           yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L;
+       ;
+    break;}
+case 31:
+#line 326 "./getdate.y"
+{
+           yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L;
+       ;
+    break;}
+case 32:
+#line 329 "./getdate.y"
+{
+           yyRelSeconds += yyvsp[0].Number * 60L;
+       ;
+    break;}
+case 33:
+#line 332 "./getdate.y"
+{
+           yyRelSeconds += yyvsp[-1].Number;
+       ;
+    break;}
+case 34:
+#line 335 "./getdate.y"
+{
+           yyRelSeconds += yyvsp[-1].Number;
+       ;
+    break;}
+case 35:
+#line 338 "./getdate.y"
+{
+           yyRelSeconds++;
+       ;
+    break;}
+case 36:
+#line 341 "./getdate.y"
+{
+           yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
+       ;
+    break;}
+case 37:
+#line 344 "./getdate.y"
+{
+           yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
+       ;
+    break;}
+case 38:
+#line 347 "./getdate.y"
+{
+           yyRelMonth += yyvsp[0].Number;
+       ;
+    break;}
+case 39:
+#line 352 "./getdate.y"
+{
+           if (yyHaveTime && yyHaveDate && !yyHaveRel)
+               yyYear = yyvsp[0].Number;
+           else {
+               if(yyvsp[0].Number>10000) {
+                   yyHaveDate++;
+                   yyDay= (yyvsp[0].Number)%100;
+                   yyMonth= (yyvsp[0].Number/100)%100;
+                   yyYear = yyvsp[0].Number/10000;
+               }
+               else {
+                   yyHaveTime++;
+                   if (yyvsp[0].Number < 100) {
+                       yyHour = yyvsp[0].Number;
+                       yyMinutes = 0;
+                   }
+                   else {
+                       yyHour = yyvsp[0].Number / 100;
+                       yyMinutes = yyvsp[0].Number % 100;
+                   }
+                   yySeconds = 0;
+                   yyMeridian = MER24;
+               }
+           }
+       ;
+    break;}
+case 40:
+#line 379 "./getdate.y"
+{
+           yyval.Meridian = MER24;
+       ;
+    break;}
+case 41:
+#line 382 "./getdate.y"
+{
+           yyval.Meridian = yyvsp[0].Meridian;
+       ;
+    break;}
+}
+   /* the action file gets copied in in place of this dollarsign */
+#line 487 "/usr/share/bison.simple"
+\f
+  yyvsp -= yylen;
+  yyssp -= yylen;
+#ifdef YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "state stack now");
+      while (ssp1 != yyssp)
+       fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+  *++yyvsp = yyval;
+
+#ifdef YYLSP_NEEDED
+  yylsp++;
+  if (yylen == 0)
+    {
+      yylsp->first_line = yylloc.first_line;
+      yylsp->first_column = yylloc.first_column;
+      yylsp->last_line = (yylsp-1)->last_line;
+      yylsp->last_column = (yylsp-1)->last_column;
+      yylsp->text = 0;
+    }
+  else
+    {
+      yylsp->last_line = (yylsp+yylen-1)->last_line;
+      yylsp->last_column = (yylsp+yylen-1)->last_column;
+    }
+#endif
+
+  /* Now "shift" the result of the reduction.
+     Determine what state that goes to,
+     based on the state we popped back to
+     and the rule number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTBASE];
+
+  goto yynewstate;
+
+yyerrlab:   /* here on detecting error */
+
+  if (! yyerrstatus)
+    /* If not already recovering from an error, report this error.  */
+    {
+      ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+       {
+         int size = 0;
+         char *msg;
+         int x, count;
+
+         count = 0;
+         /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
+         for (x = (yyn < 0 ? -yyn : 0);
+              x < (sizeof(yytname) / sizeof(char *)); x++)
+           if (yycheck[x + yyn] == x)
+             size += strlen(yytname[x]) + 15, count++;
+         msg = (char *) malloc(size + 15);
+         if (msg != 0)
+           {
+             strcpy(msg, "parse error");
+
+             if (count < 5)
+               {
+                 count = 0;
+                 for (x = (yyn < 0 ? -yyn : 0);
+                      x < (sizeof(yytname) / sizeof(char *)); x++)
+                   if (yycheck[x + yyn] == x)
+                     {
+                       strcat(msg, count == 0 ? ", expecting `" : " or `");
+                       strcat(msg, yytname[x]);
+                       strcat(msg, "'");
+                       count++;
+                     }
+               }
+             yyerror(msg);
+             free(msg);
+           }
+         else
+           yyerror ("parse error; also virtual memory exceeded");
+       }
+      else
+#endif /* YYERROR_VERBOSE */
+       yyerror("parse error");
+    }
+
+  goto yyerrlab1;
+yyerrlab1:   /* here on error raised explicitly by an action */
+
+  if (yyerrstatus == 3)
+    {
+      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
+
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
+       YYABORT;
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
 #endif
 
-#if defined (STDC_HEADERS)
-#include <stdlib.h>
-#endif
+      yychar = YYEMPTY;
+    }
 
-#if defined (HAVE_ALLOCA_H)
-#include <alloca.h>
-#endif
+  /* Else will try to reuse lookahead token
+     after shifting the error token.  */
 
-extern struct tm       *gmtime();
-extern struct tm       *localtime();
+  yyerrstatus = 3;             /* Each real token shifted decrements this */
 
-#define yyparse getdate_yyparse
-#define yylex getdate_yylex
-#define yyerror getdate_yyerror
+  goto yyerrhandle;
 
-#if    !defined(lint) && !defined(SABER)
-static char RCS[] = "$CVSid: @(#)getdate.y 1.11 94/09/21 $";
-#endif /* !defined(lint) && !defined(SABER) */
+yyerrdefault:  /* current state does not do anything special for the error token. */
 
-static int yylex ();
-static int yyerror ();
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
+  if (yyn) goto yydefault;
+#endif
 
-#define EPOCH          1970
-#define HOUR(x)                ((time_t)(x) * 60)
-#define SECSPERDAY     (24L * 60L * 60L)
+yyerrpop:   /* pop the current state because it cannot handle the error token */
 
+  if (yyssp == yyss) YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#ifdef YYLSP_NEEDED
+  yylsp--;
+#endif
 
-/*
-**  An entry in the lexical lookup table.
-*/
-typedef struct _TABLE {
-    char       *name;
-    int                type;
-    time_t     value;
-} TABLE;
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "Error: state stack now");
+      while (ssp1 != yyssp)
+       fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
 
+yyerrhandle:
 
-/*
-**  Daylight-savings mode:  on, off, or not yet known.
-*/
-typedef enum _DSTMODE {
-    DSTon, DSToff, DSTmaybe
-} DSTMODE;
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
 
-/*
-**  Meridian:  am, pm, or 24-hour style.
-*/
-typedef enum _MERIDIAN {
-    MERam, MERpm, MER24
-} MERIDIAN;
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
 
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
 
-/*
-**  Global variables.  We could get rid of most of these by using a good
-**  union as the yacc stack.  (This routine was originally written before
-**  yacc had the %union construct.)  Maybe someday; right now we only use
-**  the %union very rarely.
-*/
-static char    *yyInput;
-static DSTMODE yyDSTmode;
-static time_t  yyDayOrdinal;
-static time_t  yyDayNumber;
-static int     yyHaveDate;
-static int     yyHaveDay;
-static int     yyHaveRel;
-static int     yyHaveTime;
-static int     yyHaveZone;
-static time_t  yyTimezone;
-static time_t  yyDay;
-static time_t  yyHour;
-static time_t  yyMinutes;
-static time_t  yyMonth;
-static time_t  yySeconds;
-static time_t  yyYear;
-static MERIDIAN        yyMeridian;
-static time_t  yyRelMonth;
-static time_t  yyRelSeconds;
+  if (yyn == YYFINAL)
+    YYACCEPT;
 
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting error token, ");
+#endif
 
-typedef union  {
-    time_t             Number;
-    enum _MERIDIAN     Meridian;
-} YYSTYPE;
-# define tAGO 257
-# define tDAY 258
-# define tDAYZONE 259
-# define tID 260
-# define tMERIDIAN 261
-# define tMINUTE_UNIT 262
-# define tMONTH 263
-# define tMONTH_UNIT 264
-# define tSEC_UNIT 265
-# define tSNUMBER 266
-# define tUNUMBER 267
-# define tZONE 268
-# define tDST 269
-#define yyclearin yychar = -1
-#define yyerrok yyerrflag = 0
-extern int yychar;
-extern int yyerrflag;
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 150
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
 #endif
-YYSTYPE yylval, yyval;
-# define YYERRCODE 256
 
+  yystate = yyn;
+  goto yynewstate;
+}
+#line 387 "./getdate.y"
 
 
 /* Month and day table. */
@@ -726,7 +1850,7 @@ get_date(p, now)
     yyInput = p;
     if (now == NULL) {
         now = &ftz;
-       (void)time(&nowtime);
+       (void)time (&nowtime);
 
        if (! (tm = gmtime (&nowtime)))
            return -1;
@@ -818,800 +1942,3 @@ main(ac, av)
     /* NOTREACHED */
 }
 #endif /* defined(TEST) */
-int yyexca[] ={
--1, 1,
-       0, -1,
-       -2, 0,
-       };
-# define YYNPROD 42
-# define YYLAST 228
-int yyact[]={
-
-    13,    11,    22,    28,    16,    12,    18,    17,    15,     9,
-    10,    38,    39,    20,    48,    44,    47,    46,    36,    43,
-    50,    32,    35,    34,    33,    29,    37,    31,    41,    45,
-    40,    30,    14,     8,     7,     6,     5,     4,     3,     2,
-     1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    49,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    21,     0,     0,    19,    25,    24,    27,
-    26,    23,    44,     0,     0,     0,     0,    42 };
-int yypact[]={
-
- -1000,  -258, -1000, -1000, -1000, -1000, -1000, -1000, -1000,   -45,
-  -266, -1000,  -242,   -13,  -230,  -241, -1000, -1000, -1000, -1000,
-  -245, -1000,  -249,  -240,  -255, -1000, -1000, -1000, -1000,   -14,
- -1000, -1000, -1000, -1000, -1000,   -39,   -18, -1000, -1000, -1000,
-  -250, -1000, -1000,  -251, -1000,  -253, -1000,  -246, -1000, -1000,
- -1000 };
-int yypgo[]={
-
-     0,    28,    40,    39,    38,    37,    36,    35,    34,    33,
-    32 };
-int yyr1[]={
-
-     0,     2,     2,     3,     3,     3,     3,     3,     3,     4,
-     4,     4,     4,     4,     5,     5,     5,     7,     7,     7,
-     6,     6,     6,     6,     6,     6,     6,     6,     8,     8,
-    10,    10,    10,    10,    10,    10,    10,    10,    10,     9,
-     1,     1 };
-int yyr2[]={
-
-     0,     0,     4,     3,     3,     3,     3,     3,     2,     5,
-     9,     9,    13,    13,     3,     3,     5,     3,     5,     5,
-     7,    11,     7,     7,     5,     9,     5,     7,     5,     2,
-     5,     5,     3,     5,     5,     3,     5,     5,     3,     3,
-     1,     3 };
-int yychk[]={
-
- -1000,    -2,    -3,    -4,    -5,    -6,    -7,    -8,    -9,   267,
-   268,   259,   263,   258,   -10,   266,   262,   265,   264,   261,
-    58,   258,    47,   266,   263,   262,   265,   264,   269,   267,
-    44,   257,   262,   265,   264,   267,   267,   266,   266,   267,
-    44,    -1,   266,    58,   261,    47,   267,   267,   267,    -1,
-   266 };
-int yydef[]={
-
-     1,    -2,     2,     3,     4,     5,     6,     7,     8,    39,
-    14,    15,     0,    17,    29,     0,    32,    35,    38,     9,
-     0,    19,     0,     0,    26,    30,    34,    37,    16,    24,
-    18,    28,    31,    33,    36,    40,    20,    22,    23,    27,
-     0,    10,    11,     0,    41,     0,    25,    40,    21,    12,
-    13 };
-typedef struct { char *t_name; int t_val; } yytoktype;
-#ifndef YYDEBUG
-#      define YYDEBUG  0       /* don't allow debugging */
-#endif
-
-#if YYDEBUG
-
-yytoktype yytoks[] =
-{
-       "tAGO", 257,
-       "tDAY", 258,
-       "tDAYZONE",     259,
-       "tID",  260,
-       "tMERIDIAN",    261,
-       "tMINUTE_UNIT", 262,
-       "tMONTH",       263,
-       "tMONTH_UNIT",  264,
-       "tSEC_UNIT",    265,
-       "tSNUMBER",     266,
-       "tUNUMBER",     267,
-       "tZONE",        268,
-       "tDST", 269,
-       "-unknown-",    -1      /* ends search */
-};
-
-char * yyreds[] =
-{
-       "-no such reduction-",
-       "spec : /* empty */",
-       "spec : spec item",
-       "item : time",
-       "item : zone",
-       "item : date",
-       "item : day",
-       "item : rel",
-       "item : number",
-       "time : tUNUMBER tMERIDIAN",
-       "time : tUNUMBER ':' tUNUMBER o_merid",
-       "time : tUNUMBER ':' tUNUMBER tSNUMBER",
-       "time : tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid",
-       "time : tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER",
-       "zone : tZONE",
-       "zone : tDAYZONE",
-       "zone : tZONE tDST",
-       "day : tDAY",
-       "day : tDAY ','",
-       "day : tUNUMBER tDAY",
-       "date : tUNUMBER '/' tUNUMBER",
-       "date : tUNUMBER '/' tUNUMBER '/' tUNUMBER",
-       "date : tUNUMBER tSNUMBER tSNUMBER",
-       "date : tUNUMBER tMONTH tSNUMBER",
-       "date : tMONTH tUNUMBER",
-       "date : tMONTH tUNUMBER ',' tUNUMBER",
-       "date : tUNUMBER tMONTH",
-       "date : tUNUMBER tMONTH tUNUMBER",
-       "rel : relunit tAGO",
-       "rel : relunit",
-       "relunit : tUNUMBER tMINUTE_UNIT",
-       "relunit : tSNUMBER tMINUTE_UNIT",
-       "relunit : tMINUTE_UNIT",
-       "relunit : tSNUMBER tSEC_UNIT",
-       "relunit : tUNUMBER tSEC_UNIT",
-       "relunit : tSEC_UNIT",
-       "relunit : tSNUMBER tMONTH_UNIT",
-       "relunit : tUNUMBER tMONTH_UNIT",
-       "relunit : tMONTH_UNIT",
-       "number : tUNUMBER",
-       "o_merid : /* empty */",
-       "o_merid : tMERIDIAN",
-};
-#endif /* YYDEBUG */
-/*     @(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10   */
-
-/*
-** Skeleton parser driver for yacc output
-*/
-
-/*
-** yacc user known macros and defines
-*/
-#define YYERROR                goto yyerrlab
-#define YYACCEPT       { free(yys); free(yyv); return(0); }
-#define YYABORT                { free(yys); free(yyv); return(1); }
-#define YYBACKUP( newtoken, newvalue )\
-{\
-       if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
-       {\
-               yyerror( "syntax error - cannot backup" );\
-               goto yyerrlab;\
-       }\
-       yychar = newtoken;\
-       yystate = *yyps;\
-       yylval = newvalue;\
-       goto yynewstate;\
-}
-#define YYRECOVERING() (!!yyerrflag)
-#ifndef YYDEBUG
-#      define YYDEBUG  1       /* make debugging available */
-#endif
-
-/*
-** user known globals
-*/
-int yydebug;                   /* set to 1 to get debugging */
-
-/*
-** driver internal defines
-*/
-#define YYFLAG         (-1000)
-
-/*
-** static variables used by the parser
-*/
-static YYSTYPE *yyv;                   /* value stack */
-static int *yys;                       /* state stack */
-
-static YYSTYPE *yypv;                  /* top of value stack */
-static int *yyps;                      /* top of state stack */
-
-static int yystate;                    /* current state */
-static int yytmp;                      /* extra var (lasts between blocks) */
-
-int yynerrs;                   /* number of errors */
-
-int yyerrflag;                 /* error recovery flag */
-int yychar;                    /* current input token number */
-
-
-/*
-** yyparse - return 0 if worked, 1 if syntax error not recovered from
-*/
-int
-yyparse()
-{
-       register YYSTYPE *yypvt;        /* top of value stack for $vars */
-       unsigned yymaxdepth = YYMAXDEPTH;
-
-       /*
-       ** Initialize externals - yyparse may be called more than once
-       */
-       yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE));
-       yys = (int*)malloc(yymaxdepth*sizeof(int));
-       if (!yyv || !yys)
-       {
-               yyerror( "out of memory" );
-               return(1);
-       }
-       yypv = &yyv[-1];
-       yyps = &yys[-1];
-       yystate = 0;
-       yytmp = 0;
-       yynerrs = 0;
-       yyerrflag = 0;
-       yychar = -1;
-
-       goto yystack;
-       {
-               register YYSTYPE *yy_pv;        /* top of value stack */
-               register int *yy_ps;            /* top of state stack */
-               register int yy_state;          /* current state */
-               register int  yy_n;             /* internal state number info */
-
-               /*
-               ** get globals into registers.
-               ** branch to here only if YYBACKUP was called.
-               */
-       yynewstate:
-               yy_pv = yypv;
-               yy_ps = yyps;
-               yy_state = yystate;
-               goto yy_newstate;
-
-               /*
-               ** get globals into registers.
-               ** either we just started, or we just finished a reduction
-               */
-       yystack:
-               yy_pv = yypv;
-               yy_ps = yyps;
-               yy_state = yystate;
-
-               /*
-               ** top of for (;;) loop while no reductions done
-               */
-       yy_stack:
-               /*
-               ** put a state and value onto the stacks
-               */
-#if YYDEBUG
-               /*
-               ** if debugging, look up token value in list of value vs.
-               ** name pairs.  0 and negative (-1) are special values.
-               ** Note: linear search is used since time is not a real
-               ** consideration while debugging.
-               */
-               if ( yydebug )
-               {
-                       register int yy_i;
-
-                       (void)printf( "State %d, token ", yy_state );
-                       if ( yychar == 0 )
-                               (void)printf( "end-of-file\n" );
-                       else if ( yychar < 0 )
-                               (void)printf( "-none-\n" );
-                       else
-                       {
-                               for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
-                                       yy_i++ )
-                               {
-                                       if ( yytoks[yy_i].t_val == yychar )
-                                               break;
-                               }
-                               (void)printf( "%s\n", yytoks[yy_i].t_name );
-                       }
-               }
-#endif /* YYDEBUG */
-               if ( ++yy_ps >= &yys[ yymaxdepth ] )    /* room on stack? */
-               {
-                       /*
-                       ** reallocate and recover.  Note that pointers
-                       ** have to be reset, or bad things will happen
-                       */
-                       int yyps_index = (yy_ps - yys);
-                       int yypv_index = (yy_pv - yyv);
-                       int yypvt_index = (yypvt - yyv);
-                       yymaxdepth += YYMAXDEPTH;
-                       yyv = (YYSTYPE*)realloc((char*)yyv,
-                               yymaxdepth * sizeof(YYSTYPE));
-                       yys = (int*)realloc((char*)yys,
-                               yymaxdepth * sizeof(int));
-                       if (!yyv || !yys)
-                       {
-                               yyerror( "yacc stack overflow" );
-                               return(1);
-                       }
-                       yy_ps = yys + yyps_index;
-                       yy_pv = yyv + yypv_index;
-                       yypvt = yyv + yypvt_index;
-               }
-               *yy_ps = yy_state;
-               *++yy_pv = yyval;
-
-               /*
-               ** we have a new state - find out what to do
-               */
-       yy_newstate:
-               if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
-                       goto yydefault;         /* simple state */
-#if YYDEBUG
-               /*
-               ** if debugging, need to mark whether new token grabbed
-               */
-               yytmp = yychar < 0;
-#endif
-               if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
-                       yychar = 0;             /* reached EOF */
-#if YYDEBUG
-               if ( yydebug && yytmp )
-               {
-                       register int yy_i;
-
-                       (void)printf( "Received token " );
-                       if ( yychar == 0 )
-                               (void)printf( "end-of-file\n" );
-                       else if ( yychar < 0 )
-                               (void)printf( "-none-\n" );
-                       else
-                       {
-                               for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
-                                       yy_i++ )
-                               {
-                                       if ( yytoks[yy_i].t_val == yychar )
-                                               break;
-                               }
-                               (void)printf( "%s\n", yytoks[yy_i].t_name );
-                       }
-               }
-#endif /* YYDEBUG */
-               if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
-                       goto yydefault;
-               if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar )  /*valid shift*/
-               {
-                       yychar = -1;
-                       yyval = yylval;
-                       yy_state = yy_n;
-                       if ( yyerrflag > 0 )
-                               yyerrflag--;
-                       goto yy_stack;
-               }
-
-       yydefault:
-               if ( ( yy_n = yydef[ yy_state ] ) == -2 )
-               {
-#if YYDEBUG
-                       yytmp = yychar < 0;
-#endif
-                       if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
-                               yychar = 0;             /* reached EOF */
-#if YYDEBUG
-                       if ( yydebug && yytmp )
-                       {
-                               register int yy_i;
-
-                               (void)printf( "Received token " );
-                               if ( yychar == 0 )
-                                       (void)printf( "end-of-file\n" );
-                               else if ( yychar < 0 )
-                                       (void)printf( "-none-\n" );
-                               else
-                               {
-                                       for ( yy_i = 0;
-                                               yytoks[yy_i].t_val >= 0;
-                                               yy_i++ )
-                                       {
-                                               if ( yytoks[yy_i].t_val
-                                                       == yychar )
-                                               {
-                                                       break;
-                                               }
-                                       }
-                                       (void)printf( "%s\n", yytoks[yy_i].t_name );
-                               }
-                       }
-#endif /* YYDEBUG */
-                       /*
-                       ** look through exception table
-                       */
-                       {
-                               register int *yyxi = yyexca;
-
-                               while ( ( *yyxi != -1 ) ||
-                                       ( yyxi[1] != yy_state ) )
-                               {
-                                       yyxi += 2;
-                               }
-                               while ( ( *(yyxi += 2) >= 0 ) &&
-                                       ( *yyxi != yychar ) )
-                                       ;
-                               if ( ( yy_n = yyxi[1] ) < 0 )
-                                       YYACCEPT;
-                       }
-               }
-
-               /*
-               ** check for syntax error
-               */
-               if ( yy_n == 0 )        /* have an error */
-               {
-                       /* no worry about speed here! */
-                       switch ( yyerrflag )
-                       {
-                       case 0:         /* new error */
-                               yyerror( "syntax error" );
-                               goto skip_init;
-                       yyerrlab:
-                               /*
-                               ** get globals into registers.
-                               ** we have a user generated syntax type error
-                               */
-                               yy_pv = yypv;
-                               yy_ps = yyps;
-                               yy_state = yystate;
-                               yynerrs++;
-                       skip_init:
-                       case 1:
-                       case 2:         /* incompletely recovered error */
-                                       /* try again... */
-                               yyerrflag = 3;
-                               /*
-                               ** find state where "error" is a legal
-                               ** shift action
-                               */
-                               while ( yy_ps >= yys )
-                               {
-                                       yy_n = yypact[ *yy_ps ] + YYERRCODE;
-                                       if ( yy_n >= 0 && yy_n < YYLAST &&
-                                               yychk[yyact[yy_n]] == YYERRCODE)                                        {
-                                               /*
-                                               ** simulate shift of "error"
-                                               */
-                                               yy_state = yyact[ yy_n ];
-                                               goto yy_stack;
-                                       }
-                                       /*
-                                       ** current state has no shift on
-                                       ** "error", pop stack
-                                       */
-#if YYDEBUG
-#      define _POP_ "Error recovery pops state %d, uncovers state %d\n"
-                                       if ( yydebug )
-                                               (void)printf( _POP_, *yy_ps,
-                                                       yy_ps[-1] );
-#      undef _POP_
-#endif
-                                       yy_ps--;
-                                       yy_pv--;
-                               }
-                               /*
-                               ** there is no state on stack with "error" as
-                               ** a valid shift.  give up.
-                               */
-                               YYABORT;
-                       case 3:         /* no shift yet; eat a token */
-#if YYDEBUG
-                               /*
-                               ** if debugging, look up token in list of
-                               ** pairs.  0 and negative shouldn't occur,
-                               ** but since timing doesn't matter when
-                               ** debugging, it doesn't hurt to leave the
-                               ** tests here.
-                               */
-                               if ( yydebug )
-                               {
-                                       register int yy_i;
-
-                                       (void)printf( "Error recovery discards " );
-                                       if ( yychar == 0 )
-                                               (void)printf( "token end-of-file\n" );
-                                       else if ( yychar < 0 )
-                                               (void)printf( "token -none-\n" );
-                                       else
-                                       {
-                                               for ( yy_i = 0;
-                                                       yytoks[yy_i].t_val >= 0;
-                                                       yy_i++ )
-                                               {
-                                                       if ( yytoks[yy_i].t_val
-                                                               == yychar )
-                                                       {
-                                                               break;
-                                                       }
-                                               }
-                                               (void)printf( "token %s\n",
-                                                       yytoks[yy_i].t_name );
-                                       }
-                               }
-#endif /* YYDEBUG */
-                               if ( yychar == 0 )      /* reached EOF. quit */
-                                       YYABORT;
-                               yychar = -1;
-                               goto yy_newstate;
-                       }
-               }/* end if ( yy_n == 0 ) */
-               /*
-               ** reduction by production yy_n
-               ** put stack tops, etc. so things right after switch
-               */
-#if YYDEBUG
-               /*
-               ** if debugging, print the string that is the user's
-               ** specification of the reduction which is just about
-               ** to be done.
-               */
-               if ( yydebug )
-                       (void)printf( "Reduce by (%d) \"%s\"\n",
-                               yy_n, yyreds[ yy_n ] );
-#endif
-               yytmp = yy_n;                   /* value to switch over */
-               yypvt = yy_pv;                  /* $vars top of value stack */
-               /*
-               ** Look in goto table for next state
-               ** Sorry about using yy_state here as temporary
-               ** register variable, but why not, if it works...
-               ** If yyr2[ yy_n ] doesn't have the low order bit
-               ** set, then there is no action to be done for
-               ** this reduction.  So, no saving & unsaving of
-               ** registers done.  The only difference between the
-               ** code just after the if and the body of the if is
-               ** the goto yy_stack in the body.  This way the test
-               ** can be made before the choice of what to do is needed.
-               */
-               {
-                       /* length of production doubled with extra bit */
-                       register int yy_len = yyr2[ yy_n ];
-
-                       if ( !( yy_len & 01 ) )
-                       {
-                               yy_len >>= 1;
-                               yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
-                               yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
-                                       *( yy_ps -= yy_len ) + 1;
-                               if ( yy_state >= YYLAST ||
-                                       yychk[ yy_state =
-                                       yyact[ yy_state ] ] != -yy_n )
-                               {
-                                       yy_state = yyact[ yypgo[ yy_n ] ];
-                               }
-                               goto yy_stack;
-                       }
-                       yy_len >>= 1;
-                       yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
-                       yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
-                               *( yy_ps -= yy_len ) + 1;
-                       if ( yy_state >= YYLAST ||
-                               yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
-                       {
-                               yy_state = yyact[ yypgo[ yy_n ] ];
-                       }
-               }
-                                       /* save until reenter driver code */
-               yystate = yy_state;
-               yyps = yy_ps;
-               yypv = yy_pv;
-       }
-       /*
-       ** code supplied by user is placed in this switch
-       */
-       switch( yytmp )
-       {
-               
-case 3:
-{
-           yyHaveTime++;
-       } break;
-case 4:
-{
-           yyHaveZone++;
-       } break;
-case 5:
-{
-           yyHaveDate++;
-       } break;
-case 6:
-{
-           yyHaveDay++;
-       } break;
-case 7:
-{
-           yyHaveRel++;
-       } break;
-case 9:
-{
-           yyHour = yypvt[-1].Number;
-           yyMinutes = 0;
-           yySeconds = 0;
-           yyMeridian = yypvt[-0].Meridian;
-       } break;
-case 10:
-{
-           yyHour = yypvt[-3].Number;
-           yyMinutes = yypvt[-1].Number;
-           yySeconds = 0;
-           yyMeridian = yypvt[-0].Meridian;
-       } break;
-case 11:
-{
-           yyHour = yypvt[-3].Number;
-           yyMinutes = yypvt[-1].Number;
-           yyMeridian = MER24;
-           yyDSTmode = DSToff;
-           yyTimezone = - (yypvt[-0].Number % 100 + (yypvt[-0].Number / 100) * 60);
-       } break;
-case 12:
-{
-           yyHour = yypvt[-5].Number;
-           yyMinutes = yypvt[-3].Number;
-           yySeconds = yypvt[-1].Number;
-           yyMeridian = yypvt[-0].Meridian;
-       } break;
-case 13:
-{
-           yyHour = yypvt[-5].Number;
-           yyMinutes = yypvt[-3].Number;
-           yySeconds = yypvt[-1].Number;
-           yyMeridian = MER24;
-           yyDSTmode = DSToff;
-           yyTimezone = - (yypvt[-0].Number % 100 + (yypvt[-0].Number / 100) * 60);
-       } break;
-case 14:
-{
-           yyTimezone = yypvt[-0].Number;
-           yyDSTmode = DSToff;
-       } break;
-case 15:
-{
-           yyTimezone = yypvt[-0].Number;
-           yyDSTmode = DSTon;
-       } break;
-case 16:
-{
-           yyTimezone = yypvt[-1].Number;
-           yyDSTmode = DSTon;
-       } break;
-case 17:
-{
-           yyDayOrdinal = 1;
-           yyDayNumber = yypvt[-0].Number;
-       } break;
-case 18:
-{
-           yyDayOrdinal = 1;
-           yyDayNumber = yypvt[-1].Number;
-       } break;
-case 19:
-{
-           yyDayOrdinal = yypvt[-1].Number;
-           yyDayNumber = yypvt[-0].Number;
-       } break;
-case 20:
-{
-           yyMonth = yypvt[-2].Number;
-           yyDay = yypvt[-0].Number;
-       } break;
-case 21:
-{
-           yyMonth = yypvt[-4].Number;
-           yyDay = yypvt[-2].Number;
-           yyYear = yypvt[-0].Number;
-       } break;
-case 22:
-{
-           /* ISO 8601 format.  yyyy-mm-dd.  */
-           yyYear = yypvt[-2].Number;
-           yyMonth = -yypvt[-1].Number;
-           yyDay = -yypvt[-0].Number;
-       } break;
-case 23:
-{
-           /* e.g. 17-JUN-1992.  */
-           yyDay = yypvt[-2].Number;
-           yyMonth = yypvt[-1].Number;
-           yyYear = -yypvt[-0].Number;
-       } break;
-case 24:
-{
-           yyMonth = yypvt[-1].Number;
-           yyDay = yypvt[-0].Number;
-       } break;
-case 25:
-{
-           yyMonth = yypvt[-3].Number;
-           yyDay = yypvt[-2].Number;
-           yyYear = yypvt[-0].Number;
-       } break;
-case 26:
-{
-           yyMonth = yypvt[-0].Number;
-           yyDay = yypvt[-1].Number;
-       } break;
-case 27:
-{
-           yyMonth = yypvt[-1].Number;
-           yyDay = yypvt[-2].Number;
-           yyYear = yypvt[-0].Number;
-       } break;
-case 28:
-{
-           yyRelSeconds = -yyRelSeconds;
-           yyRelMonth = -yyRelMonth;
-       } break;
-case 30:
-{
-           yyRelSeconds += yypvt[-1].Number * yypvt[-0].Number * 60L;
-       } break;
-case 31:
-{
-           yyRelSeconds += yypvt[-1].Number * yypvt[-0].Number * 60L;
-       } break;
-case 32:
-{
-           yyRelSeconds += yypvt[-0].Number * 60L;
-       } break;
-case 33:
-{
-           yyRelSeconds += yypvt[-1].Number;
-       } break;
-case 34:
-{
-           yyRelSeconds += yypvt[-1].Number;
-       } break;
-case 35:
-{
-           yyRelSeconds++;
-       } break;
-case 36:
-{
-           yyRelMonth += yypvt[-1].Number * yypvt[-0].Number;
-       } break;
-case 37:
-{
-           yyRelMonth += yypvt[-1].Number * yypvt[-0].Number;
-       } break;
-case 38:
-{
-           yyRelMonth += yypvt[-0].Number;
-       } break;
-case 39:
-{
-           if (yyHaveTime && yyHaveDate && !yyHaveRel)
-               yyYear = yypvt[-0].Number;
-           else {
-               if(yypvt[-0].Number>10000) {
-                   yyHaveDate++;
-                   yyDay= (yypvt[-0].Number)%100;
-                   yyMonth= (yypvt[-0].Number/100)%100;
-                   yyYear = yypvt[-0].Number/10000;
-               }
-               else {
-                   yyHaveTime++;
-                   if (yypvt[-0].Number < 100) {
-                       yyHour = yypvt[-0].Number;
-                       yyMinutes = 0;
-                   }
-                   else {
-                       yyHour = yypvt[-0].Number / 100;
-                       yyMinutes = yypvt[-0].Number % 100;
-                   }
-                   yySeconds = 0;
-                   yyMeridian = MER24;
-               }
-           }
-       } break;
-case 40:
-{
-           yyval.Meridian = MER24;
-       } break;
-case 41:
-{
-           yyval.Meridian = yypvt[-0].Meridian;
-       } break;
-       }
-       goto yystack;           /* reset registers in driver code */
-}
diff --git a/gnu/usr.bin/cvs/man/cvsinit.8 b/gnu/usr.bin/cvs/man/cvsinit.8
deleted file mode 100644 (file)
index 4bdc465..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-.de Id
-.ds Rv \\$4
-.ds Dt \\$5
-..
-.Id @(#)ccvs/man:$Name:  $:$Id: cvsinit.8,v 1.1.1.3 1996/04/27 19:42:33 tholo Exp $
-.TH CVSINIT 8 "\*(Dt"
-.\" Full space in nroff; half space in troff
-.de SP
-.if n .sp
-.if t .sp .5
-..
-.\" quoted command
-.de `
-.RB ` "\|\\$1\|" '\\$2
-..
-.\"
-.SH "NAME"
-cvsinit \- Concurrent Versions System repository initialization script
-.SH "SYNOPSIS"
-.TP
-.B cvsinit
-.\"
-.SH "DESCRIPTION"
-.\"
-The
-.B cvsinit
-script initializes a repository in the location specified by the
-.SM CVSROOT
-environment variable.
-.SH "FILES"
-For more detailed information on
-.B cvs
-supporting files, see
-.BR cvs ( 5 ).
-.LP
-Files in source repositories (created by
-.BR cvsinit ):
-.TP
-$CVSROOT/CVSROOT
-Directory of global administrative files for repository.
-.TP
-$CVSROOT/commitinfo,v
-Records programs for filtering
-.` "cvs commit"
-requests.
-.TP
-$CVSROOT/history
-Log file of \fBcvs\fP transactions.
-.TP
-$CVSROOT/modules,v
-Definitions for modules in this repository.
-.TP
-$CVSROOT/loginfo,v
-Records programs for piping
-.` "cvs commit"
-log entries.
-.TP
-$CVSROOT/rcsinfo,v
-Records pathnames to templates used during a
-.` "cvs commit"
-operation.
-.TP
-$CVSROOT/editinfo,v
-Records programs for editing/validating
-.` "cvs commit"
-log entries.
-.TP
-$CVSROOT/log
-Sample logging script for use in
-.IR loginfo .
-.TP
-$CVSROOT/commit_prep
-Sample logging script for use in
-.I commitinfo
-with the
-.I log_accum
-script
-.TP
-$CVSROOT/log_accum
-Sample loggin script for use in
-.I loginfo
-with the
-.I commit_prep
-script
-.\"
-.SH "ENVIRONMENT VARIABLES"
-.TP
-.SM CVSROOT
-Should contain the full pathname to the root of the
-.B cvs
-source repository (where the
-.SM RCS
-files are kept).  This information must be available to \fBcvs\fP for
-most commands to execute; if
-.SM CVSROOT
-is not set, or if you wish to override it for one invocation, you can
-supply it on the command line:
-.` "cvs \-d \fIcvsroot cvs_command\fP\|.\|.\|."
-You may not need to set
-.SM CVSROOT
-if your \fBcvs\fP binary has the right path compiled in; use
-.` "cvs \-v"
-to display all compiled-in paths.
-.\"
-.SH "AUTHORS"
-.TP
-Dick Grune
-Original author of the
-.B cvs
-shell script version posted to
-.B comp.sources.unix
-in the volume6 release of December, 1986.
-Credited with much of the
-.B cvs
-conflict resolution algorithms.
-.TP
-Brian Berliner
-Coder and designer of the
-.B cvs
-program itself in April, 1989, based on the original work done by Dick.
-.TP
-Jeff Polk
-Helped Brian with the design of the
-.B cvs
-module and vendor branch support and author of the
-.BR checkin ( 1 )
-shell script (the ancestor of
-.` "cvs import").
-.SH "SEE ALSO"
-.BR ci ( 1 ),
-.BR co ( 1 ),
-.BR cvs ( 5 ),
-.BR diff ( 1 ),
-.BR grep ( 1 ),
-.BR patch ( 1 ),
-.BR rcs ( 1 ),
-.BR rcsdiff ( 1 ),
-.BR rcsmerge ( 1 ),
-.BR rlog ( 1 ),
index e30a9ac..ac81790 100644 (file)
@@ -23,7 +23,7 @@ static Dtype check_direntproc PROTO((char *dir, char *repos, char *update_dir));
 static int check_fileproc PROTO((struct file_info *finfo));
 static int check_filesdoneproc PROTO((int err, char *repos, char *update_dir));
 static int checkaddfile PROTO((char *file, char *repository, char *tag,
-                              char *options, List *srcfiles)); 
+                              char *options, RCSNode **rcsnode)); 
 static Dtype commit_direntproc PROTO((char *dir, char *repos, char *update_dir));
 static int commit_dirleaveproc PROTO((char *dir, int err, char *update_dir));
 static int commit_fileproc PROTO((struct file_info *finfo));
@@ -37,7 +37,7 @@ static int lockrcsfile PROTO((char *file, char *repository, char *rev));
 static int precommit_list_proc PROTO((Node * p, void *closure));
 static int precommit_proc PROTO((char *repository, char *filter));
 static int remove_file PROTO((char *file, char *repository, char *tag,
-                       char *message, List *entries, List *srcfiles));
+                       char *message, List *entries, RCSNode *rcsnode));
 static void fix_rcs_modes PROTO((char *rcs, char *user));
 static void fixaddfile PROTO((char *file, char *repository));
 static void fixbranch PROTO((char *file, char *repository, char *branch));
@@ -109,29 +109,21 @@ find_fileproc (finfo)
     enum classify_type status;
     Node *node;
     struct find_data *args = find_data_static;
-    char *fullname;
-
-    fullname = xmalloc (strlen (finfo->update_dir) + strlen (finfo->file) + 10);
-    fullname[0] = '\0';
-    if (finfo->update_dir[0] != '\0')
-    {
-       strcat (fullname, finfo->update_dir);
-       strcat (fullname, "/");
-    }
-    strcat (fullname, finfo->file);
 
     vers = Version_TS ((char *)NULL, (char *)NULL, (char *)NULL,
                       (char *)NULL,
-                      finfo->file, 0, 0, finfo->entries, (List *)NULL);
+                      finfo->file, 0, 0, finfo->entries, (RCSNode *)NULL);
     if (vers->ts_user == NULL
        && vers->vn_user != NULL
        && vers->vn_user[0] == '-')
        status = T_REMOVED;
-    else if (vers->ts_user == NULL
-            && vers->vn_user == NULL)
+    else if (vers->vn_user == NULL)
     {
-       error (0, 0, "nothing known about `%s'", fullname);
-       free (fullname);
+       if (vers->ts_user == NULL)
+           error (0, 0, "nothing known about `%s'", finfo->fullname);
+       else
+           error (0, 0, "use `cvs add' to create an entry for %s",
+                  finfo->fullname);
        return 1;
     }
     else if (vers->ts_user != NULL
@@ -144,23 +136,15 @@ find_fileproc (finfo)
        status = T_MODIFIED;
     else
     {
-       /* This covers unmodified files, as well as a variety of other cases
-          (e.g. "touch foo", "cvs ci foo").  FIXME: we probably should be
-          printing a message and returning 1 for many of those cases (but
-          I'm not sure exactly which ones).  */
-       free (fullname);
+       /* This covers unmodified files, as well as a variety of other
+          cases.  FIXME: we probably should be printing a message and
+          returning 1 for many of those cases (but I'm not sure
+          exactly which ones).  */
        return 0;
     }
 
     node = getnode ();
-    node->key = xmalloc (strlen (finfo->update_dir) + strlen (finfo->file) + 8);
-    node->key[0] = '\0';
-    if (finfo->update_dir[0] != '\0')
-    {
-       strcpy (node->key, finfo->update_dir);
-       strcat (node->key, "/");
-    }
-    strcat (node->key, finfo->file);
+    node->key = xstrdup (finfo->fullname);
 
     node->type = UPDATE;
     node->delproc = update_delproc;
@@ -169,8 +153,6 @@ find_fileproc (finfo)
 
     ++args->argc;
 
-    free (fullname);
-
     return 0;
 }
 
@@ -287,6 +269,7 @@ commit (argc, argv)
        if (message)
            error (1, 0, "cannot specify both a message and a log file");
 
+       /* FIXME: Why is this binary?  Needs more investigation.  */
        if ((logfd = open (logfile, O_RDONLY | OPEN_BINARY)) < 0)
            error (1, errno, "cannot open log file %s", logfile);
 
@@ -295,6 +278,8 @@ commit (argc, argv)
 
        message = xmalloc (statbuf.st_size + 1);
 
+       /* FIXME: Should keep reading until EOF, rather than assuming the
+          first read gets the whole thing.  */
        if ((n = read (logfd, message, statbuf.st_size + 1)) < 0)
            error (1, errno, "cannot read log message from %s", logfile);
 
@@ -365,7 +350,7 @@ commit (argc, argv)
           check on those files.  This is different from local CVS and
           previous versions of client/server CVS, but it probably is a Good
           Thing, or at least Not Such A Bad Thing.  */
-       send_file_names (find_args.argc, find_args.argv);
+       send_file_names (find_args.argc, find_args.argv, 0);
        send_files (find_args.argc, find_args.argv, local, 0);
 
        send_to_server ("ci\012", 0);
@@ -461,7 +446,7 @@ check_fileproc (finfo)
        {
            status = Classify_File (finfo->file, (char *) NULL, (char *) NULL,
                                    (char *) NULL, 1, aflag, finfo->repository,
-                                   finfo->entries, finfo->srcfiles, &vers, finfo->update_dir, 0);
+                                   finfo->entries, finfo->rcs, &vers, finfo->update_dir, 0);
            if (status == T_UPTODATE || status == T_MODIFIED ||
                status == T_ADDED)
            {
@@ -470,7 +455,7 @@ check_fileproc (finfo)
                freevers_ts (&vers);
                xstatus = Classify_File (finfo->file, tag, (char *) NULL,
                                         (char *) NULL, 1, aflag, finfo->repository,
-                                        finfo->entries, finfo->srcfiles, &vers, finfo->update_dir,
+                                        finfo->entries, finfo->rcs, &vers, finfo->update_dir,
                                         0);
                if (xstatus == T_REMOVE_ENTRY)
                    status = T_MODIFIED;
@@ -496,7 +481,7 @@ check_fileproc (finfo)
            }
            status = Classify_File (finfo->file, xtag, (char *) NULL,
                                    (char *) NULL, 1, aflag, finfo->repository,
-                                   finfo->entries, finfo->srcfiles, &vers, finfo->update_dir, 0);
+                                   finfo->entries, finfo->rcs, &vers, finfo->update_dir, 0);
            if ((status == T_REMOVE_ENTRY || status == T_CONFLICT)
                && (cp = strrchr (xtag, '.')) != NULL)
            {
@@ -505,7 +490,7 @@ check_fileproc (finfo)
                freevers_ts (&vers);
                status = Classify_File (finfo->file, xtag, (char *) NULL,
                                        (char *) NULL, 1, aflag, finfo->repository,
-                                       finfo->entries, finfo->srcfiles, &vers, finfo->update_dir,
+                                       finfo->entries, finfo->rcs, &vers, finfo->update_dir,
                                        0);
                if (status == T_UPTODATE || status == T_REMOVE_ENTRY)
                    status = T_MODIFIED;
@@ -518,7 +503,7 @@ check_fileproc (finfo)
     }
     else
        status = Classify_File (finfo->file, tag, (char *) NULL, (char *) NULL,
-                               1, 0, finfo->repository, finfo->entries, finfo->srcfiles, &vers,
+                               1, 0, finfo->repository, finfo->entries, finfo->rcs, &vers,
                                finfo->update_dir, 0);
     noexec = save_noexec;
     quiet = save_quiet;
@@ -541,11 +526,7 @@ check_fileproc (finfo)
        case T_NEEDS_MERGE:
        case T_CONFLICT:
        case T_REMOVE_ENTRY:
-           if (finfo->update_dir[0] == '\0')
-               error (0, 0, "Up-to-date check failed for `%s'", finfo->file);
-           else
-               error (0, 0, "Up-to-date check failed for `%s/%s'",
-                      finfo->update_dir, finfo->file);
+           error (0, 0, "Up-to-date check failed for `%s'", finfo->fullname);
            freevers_ts (&vers);
            return (1);
        case T_MODIFIED:
@@ -567,30 +548,18 @@ check_fileproc (finfo)
            {
                if (vers->date)
                {
-                   if (finfo->update_dir[0] == '\0')
-                       error (0, 0,
-                              "cannot commit with sticky date for file `%s'",
-                              finfo->file);
-                   else
-                       error
-                         (0, 0,
-                          "cannot commit with sticky date for file `%s/%s'",
-                          finfo->update_dir, finfo->file);
+                   error (0, 0,
+                          "cannot commit with sticky date for file `%s'",
+                          finfo->fullname);
                    freevers_ts (&vers);
                    return (1);
                }
                if (status == T_MODIFIED && vers->tag &&
-                   !RCS_isbranch (finfo->file, vers->tag, finfo->srcfiles))
+                   !RCS_isbranch (finfo->rcs, vers->tag))
                {
-                   if (finfo->update_dir[0] == '\0')
-                       error (0, 0,
-                              "sticky tag `%s' for file `%s' is not a branch",
-                              vers->tag, finfo->file);
-                   else
-                       error
-                         (0, 0,
-                          "sticky tag `%s' for file `%s/%s' is not a branch",
-                          vers->tag, finfo->update_dir, finfo->file);
+                   error (0, 0,
+                          "sticky tag `%s' for file `%s' is not a branch",
+                          vers->tag, finfo->fullname);
                    freevers_ts (&vers);
                    return (1);
                }
@@ -621,14 +590,9 @@ check_fileproc (finfo)
 #endif
                if (retcode == 0)
                {
-                   if (finfo->update_dir[0] == '\0')
-                       error (0, 0,
+                   error (0, 0,
                          "file `%s' had a conflict and has not been modified",
-                              finfo->file);
-                   else
-                       error (0, 0,
-                      "file `%s/%s' had a conflict and has not been modified",
-                              finfo->update_dir, finfo->file);
+                          finfo->fullname);
                    freevers_ts (&vers);
                    return (1);
                }
@@ -644,25 +608,15 @@ check_fileproc (finfo)
                    
                if (retcode == -1)
                {
-                   if (finfo->update_dir[0] == '\0')
-                       error (1, errno,
-                              "fork failed while examining conflict in `%s'",
-                              finfo->file);
-                   else
-                       error (1, errno,
-                            "fork failed while examining conflict in `%s/%s'",
-                              finfo->update_dir, finfo->file);
+                   error (1, errno,
+                          "fork failed while examining conflict in `%s'",
+                          finfo->fullname);
                }
                else if (retcode == 0)
                {
-                   if (finfo->update_dir[0] == '\0')
-                       error (0, 0,
-                              "file `%s' still contains conflict indicators",
-                              finfo->file);
-                   else
-                       error (0, 0,
-                            "file `%s/%s' still contains conflict indicators",
-                              finfo->update_dir, finfo->file);
+                   error (0, 0,
+                          "file `%s' still contains conflict indicators",
+                          finfo->fullname);
                    freevers_ts (&vers);
                    return (1);
                }
@@ -670,14 +624,9 @@ check_fileproc (finfo)
 
            if (status == T_REMOVED && vers->tag && isdigit (*vers->tag))
            {
-               if (finfo->update_dir[0] == '\0')
-                   error (0, 0,
+               error (0, 0,
        "cannot remove file `%s' which has a numeric sticky tag of `%s'",
-                          finfo->file, vers->tag);
-               else
-                   error (0, 0,
-       "cannot remove file `%s/%s' which has a numeric sticky tag of `%s'",
-                          finfo->update_dir, finfo->file, vers->tag);
+                          finfo->fullname, vers->tag);
                freevers_ts (&vers);
                return (1);
            }
@@ -690,28 +639,18 @@ check_fileproc (finfo)
                sprintf(rcs, "%s/%s%s", finfo->repository, finfo->file, RCSEXT);
                if (isreadable (rcs))
                {
-                   if (finfo->update_dir[0] == '\0')
-                       error (0, 0,
+                   error (0, 0,
                "cannot add file `%s' when RCS file `%s' already exists",
-                              finfo->file, rcs);
-                   else
-                       error (0, 0,
-               "cannot add file `%s/%s' when RCS file `%s' already exists",
-                              finfo->update_dir, finfo->file, rcs);
+                          finfo->fullname, rcs);
                    freevers_ts (&vers);
                    return (1);
                }
                if (vers->tag && isdigit (*vers->tag) &&
                    numdots (vers->tag) > 1)
                {
-                   if (finfo->update_dir[0] == '\0')
-                       error (0, 0,
+                   error (0, 0,
                "cannot add file `%s' with revision `%s'; must be on trunk",
-                              finfo->file, vers->tag);
-                   else
-                       error (0, 0,
-               "cannot add file `%s/%s' with revision `%s'; must be on trunk",
-                              finfo->update_dir, finfo->file, vers->tag);
+                              finfo->fullname, vers->tag);
                    freevers_ts (&vers);
                    return (1);
                }
@@ -763,7 +702,7 @@ check_fileproc (finfo)
                if (isdigit (*vers->tag))
                    ci->rev = xstrdup (vers->tag);
                else
-                   ci->rev = RCS_whatbranch (finfo->file, vers->tag, finfo->srcfiles);
+                   ci->rev = RCS_whatbranch (finfo->rcs, vers->tag);
            else
                ci->rev = (char *) NULL;
            ci->tag = xstrdup (vers->tag);
@@ -772,10 +711,7 @@ check_fileproc (finfo)
            (void) addnode (cilist, p);
            break;
        case T_UNKNOWN:
-           if (finfo->update_dir[0] == '\0')
-               error (0, 0, "nothing known about `%s'", finfo->file);
-           else
-               error (0, 0, "nothing known about `%s/%s'", finfo->update_dir, finfo->file);
+           error (0, 0, "nothing known about `%s'", finfo->fullname);
            freevers_ts (&vers);
            return (1);
        case T_UPTODATE:
@@ -949,7 +885,7 @@ commit_fileproc (finfo)
     else if (ci->status == T_ADDED)
     {
        if (checkaddfile (finfo->file, finfo->repository, ci->tag, ci->options,
-                         finfo->srcfiles) != 0)
+                         &finfo->rcs) != 0)
        {
            fixaddfile (finfo->file, finfo->repository);
            err = 1;
@@ -962,7 +898,7 @@ commit_fileproc (finfo)
 
        if (ci->tag) {
            locate_rcs (finfo->file, finfo->repository, rcs);
-           ci->rev = RCS_whatbranch (finfo->file, ci->tag, finfo->srcfiles);
+           ci->rev = RCS_whatbranch (finfo->rcs, ci->tag);
            err = Checkin ('A', finfo->file, finfo->update_dir, finfo->repository, rcs, ci->rev,
                           ci->tag, ci->options, message, finfo->entries);
            if (err != 0)
@@ -1019,7 +955,7 @@ commit_fileproc (finfo)
     else if (ci->status == T_REMOVED)
     {
        err = remove_file (finfo->file, finfo->repository, ci->tag, message,
-                          finfo->entries, finfo->srcfiles);
+                          finfo->entries, finfo->rcs);
 #ifdef SERVER_SUPPORT
        if (server_active) {
            server_scratch_entry_only ();
@@ -1246,13 +1182,13 @@ findmaxrev (p, closure)
  * link to keep it relative after we move it into the attic.
  */
 static int
-remove_file (file, repository, tag, message, entries, srcfiles)
+remove_file (file, repository, tag, message, entries, rcsnode)
     char *file;
     char *repository;
     char *tag;
     char *message;
     List *entries;
-    List *srcfiles;
+    RCSNode *rcsnode;
 {
     mode_t omask;
     int retcode;
@@ -1264,8 +1200,6 @@ remove_file (file, repository, tag, message, entries, srcfiles)
     char *corev;
     char *rev;
     char *prev_rev;
-    Node *p;
-    RCSNode *rcsfile;
 
     corev = NULL;
     rev = NULL;
@@ -1276,7 +1210,7 @@ remove_file (file, repository, tag, message, entries, srcfiles)
     locate_rcs (file, repository, rcs);
 
     branch = 0;
-    if (tag && !(branch = RCS_isbranch (file, tag, srcfiles)))
+    if (tag && !(branch = RCS_isbranch (rcsnode, tag)))
     {
        /* a symbolic tag is specified; just remove the tag from the file */
        if ((retcode = RCS_deltag (rcs, tag, 1)) != 0) 
@@ -1302,26 +1236,24 @@ remove_file (file, repository, tag, message, entries, srcfiles)
     {
        char *branchname;
 
-       rev = RCS_whatbranch (file, tag, srcfiles);
+       rev = RCS_whatbranch (rcsnode, tag);
        if (rev == NULL)
        {
            error (0, 0, "cannot find branch \"%s\".", tag);
            return (1);
        }
        
-       p = findnode (srcfiles, file);
-       if (p == NULL)
+       if (rcsnode == NULL)
        {
            error (0, 0, "boy, I'm confused.");
            return (1);
        }
-       rcsfile = (RCSNode *) p->data;
-       branchname = RCS_getbranch (rcsfile, rev, 1);
+       branchname = RCS_getbranch (rcsnode, rev, 1);
        if (branchname == NULL)
        {
            /* no revision exists on this branch.  use the previous
               revision but do not lock. */
-           corev = RCS_gettag (rcsfile, tag, 1, 0);
+           corev = RCS_gettag (rcsnode, tag, 1, 0);
            prev_rev = xstrdup(rev);
            lockflag = 0;
        } else
@@ -1335,14 +1267,12 @@ remove_file (file, repository, tag, message, entries, srcfiles)
     {
 
         /* Get current head revision of file. */
-       p = findnode (srcfiles, file);
-       if (p == NULL)
+       if (rcsnode == NULL)
        {
            error (0, 0, "could not find parsed rcsfile %s", file);
            return (1);
        }
-       rcsfile = (RCSNode *) p->data;
-       prev_rev = RCS_head (rcsfile);
+       prev_rev = RCS_head (rcsnode);
     }
     
     /* if removing without a tag or a branch, then make sure the default
@@ -1532,12 +1462,12 @@ fixbranch (file, repository, branch)
  */
 
 static int
-checkaddfile (file, repository, tag, options, srcfiles)
+checkaddfile (file, repository, tag, options, rcsnode)
     char *file;
     char *repository;
     char *tag;
     char *options;
-    List *srcfiles;
+    RCSNode **rcsnode;
 {
     char rcs[PATH_MAX];
     char fname[PATH_MAX];
@@ -1562,7 +1492,6 @@ checkaddfile (file, repository, tag, options, srcfiles)
        /* file has existed in the past.  Prepare to resurrect. */
        char oldfile[PATH_MAX];
        char *rev;
-       Node *p;
        RCSNode *rcsfile;
 
        if (tag == NULL)
@@ -1583,14 +1512,12 @@ checkaddfile (file, repository, tag, options, srcfiles)
            }
        }
 
-       p = findnode (srcfiles, file);
-       if (p == NULL)
+       if ((rcsfile = *rcsnode) == NULL)
        {
            error (0, 0, "could not find parsed rcsfile %s", file);
            return (1);
        }
 
-       rcsfile = (RCSNode *) p->data;
        rev = RCS_getversion (rcsfile, tag, NULL, 1, 0);
        /* and lock it */
        if (lock_RCS (file, rcs, rev, repository)) {
@@ -1663,7 +1590,6 @@ checkaddfile (file, repository, tag, options, srcfiles)
     {
        /* when adding with a tag, we need to stub a branch, if it
           doesn't already exist.  */
-       Node *p;
        RCSNode *rcsfile;
 
        rcsfile = RCS_parse (file, repository);
@@ -1673,7 +1599,7 @@ checkaddfile (file, repository, tag, options, srcfiles)
            return (1);
        }
        
-       if (!RCS_nodeisbranch (tag, rcsfile)) {
+       if (!RCS_nodeisbranch (rcsfile, tag)) {
            /* branch does not exist.  Stub it.  */
            char *head;
            char *magicrev;
@@ -1707,17 +1633,11 @@ checkaddfile (file, repository, tag, options, srcfiles)
                error (0, 0, "cannot lock `%s'.", rcs);
                return (1);
            }
-       }           
-
-       /* add (replace) this rcs file to our list */
-       p = findnode (srcfiles, file);
-
-       if (p != NULL)
-         freercsnode((RCSNode **) &p->data);
-
-       delnode(p);
+       } 
 
-       RCS_addnode (file, rcsfile, srcfiles);
+       if (rcsnode)
+               freercsnode(rcsnode);
+       *rcsnode = rcsfile;
     }
 
     fileattr_newfile (file);
index d1f0915..38fb5fb 100644 (file)
@@ -118,6 +118,23 @@ extern int errno;
  * Definitions for the CVS Administrative directory and the files it contains.
  * Here as #define's to make changing the names a simple task.
  */
+
+#ifdef USE_VMS_FILENAMES
+#define CVSADM          "CVS"
+#define CVSADM_ENT      "CVS/Entries."
+#define CVSADM_ENTBAK   "CVS/Entries.Backup"
+#define CVSADM_ENTLOG   "CVS/Entries.Log"
+#define CVSADM_ENTSTAT  "CVS/Entries.Static"
+#define CVSADM_REP      "CVS/Repository."
+#define CVSADM_ROOT     "CVS/Root."
+#define CVSADM_CIPROG   "CVS/Checkin.prog"
+#define CVSADM_UPROG    "CVS/Update.prog"
+#define CVSADM_TAG      "CVS/Tag."
+#define CVSADM_NOTIFY   "CVS/Notify."
+#define CVSADM_NOTIFYTMP "CVS/Notify.tmp"
+#define CVSADM_BASE      "CVS/Base"
+#define CVSADM_TEMPLATE "CVS/Template."
+#else /* USE_VMS_FILENAMES */
 #define        CVSADM          "CVS"
 #define        CVSADM_ENT      "CVS/Entries"
 #define        CVSADM_ENTBAK   "CVS/Entries.Backup"
@@ -133,6 +150,9 @@ extern int errno;
 /* A directory in which we store base versions of files we currently are
    editing with "cvs edit".  */
 #define CVSADM_BASE     "CVS/Base"
+/* File which contains the template for use in log messages.  */
+#define CVSADM_TEMPLATE "CVS/Template"
+#endif /* USE_VMS_FILENAMES */
 
 /* This is the special directory which we use to store various extra
    per-directory information in the repository.  It must be the same as
@@ -167,10 +187,6 @@ extern int errno;
 
 #define CVSNULLREPOS           "Emptydir"      /* an empty directory */
 
-/* support for the modules file (CVSROOTADM_MODULES) */
-#define        CVSMODULE_OPTS  "ad:i:lo:e:s:t:u:"/* options in modules file */
-#define CVSMODULE_SPEC '&'             /* special delimiter */
-
 /* Other CVS file names */
 
 /* Files go in the attic if the head main branch revision is dead,
@@ -181,7 +197,6 @@ extern int errno;
 #define        CVSATTIC        "Attic"
 
 #define        CVSLCK          "#cvs.lock"
-#define        CVSTFL          "#cvs.tfl"
 #define        CVSRFL          "#cvs.rfl"
 #define        CVSWFL          "#cvs.wfl"
 #define CVSRFLPAT      "#cvs.rfl.*"    /* wildcard expr to match read locks */
@@ -195,10 +210,16 @@ extern int errno;
 #define        CVSLCKAGE       (60*60)         /* 1-hour old lock files cleaned up */
 #define        CVSLCKSLEEP     30              /* wait 30 seconds before retrying */
 #define        CVSBRANCH       "1.1.1"         /* RCS branch used for vendor srcs */
+
+#ifdef USE_VMS_FILENAMES
+#define BAKPREFIX       "_$"
+#define DEVNULL         "NLA0:"
+#else /* USE_VMS_FILENAMES */
 #define        BAKPREFIX       ".#"            /* when rcsmerge'ing */
 #ifndef DEVNULL
 #define        DEVNULL         "/dev/null"
 #endif
+#endif /* USE_VMS_FILENAMES */
 
 #define        FALSE           0
 #define        TRUE            1
@@ -398,6 +419,7 @@ extern int logoff;          /* Don't write history entry */
 extern char hostname[];
 
 /* Externs that are included directly in the CVS sources */
+
 int RCS_settag PROTO((const char *, const char *, const char *));
 int RCS_deltag PROTO((const char *, const char *, int));
 int RCS_setbranch PROTO((const char *, const char *));
@@ -423,7 +445,7 @@ int RCS_checkin PROTO ((char *rcsfile, char *workfile, char *message,
 
 DBM *open_module PROTO((void));
 FILE *open_file PROTO((const char *, const char *));
-List *Find_Dirs PROTO((char *repository, int which));
+List *Find_Directories PROTO((char *repository, int which));
 void Entries_Close PROTO((List *entries));
 List *Entries_Open PROTO((int aflag));
 char *Make_Date PROTO((char *rawdate));
@@ -436,7 +458,7 @@ char *gca PROTO((char *rev1, char *rev2));
 char *getcaller PROTO((void));
 char *time_stamp PROTO((char *file));
 char *xmalloc PROTO((size_t bytes));
-char *xrealloc PROTO((char *ptr, size_t bytes));
+void *xrealloc PROTO((void *ptr, size_t bytes));
 char *xstrdup PROTO((const char *str));
 void strip_trailing_newlines PROTO((char *str));
 int No_Difference PROTO((char *file, Vers_TS * vers, List * entries,
@@ -447,7 +469,6 @@ int Reader_Lock PROTO((char *xrepository));
 typedef        RETSIGTYPE (*SIGCLEANUPPROC)    PROTO(());
 int SIG_register PROTO((int sig, SIGCLEANUPPROC sigcleanup));
 int Writer_Lock PROTO((List * list));
-int ign_name PROTO((char *name));
 int isdir PROTO((const char *file));
 int isfile PROTO((const char *file));
 int islink PROTO((const char *file));
@@ -492,6 +513,7 @@ void fperror PROTO((FILE * fp, int status, int errnum, char *message,...));
 void free_names PROTO((int *pargc, char *argv[]));
 void freevers_ts PROTO((Vers_TS ** versp));
 
+extern int ign_name PROTO ((char *name));
 void ign_add PROTO((char *ign, int hold));
 void ign_add_file PROTO((char *file, int hold));
 void ign_setup PROTO((void));
@@ -500,6 +522,7 @@ int ignore_directory PROTO((char *name));
 typedef void (*Ignore_proc) PROTO ((char *, char *));
 extern void ignore_files PROTO ((List *, char *, Ignore_proc));
 extern int ign_inhibit_server;
+extern int ign_case;
 
 #include "update.h"
 
@@ -507,6 +530,16 @@ void line2argv PROTO((int *pargc, char *argv[], char *line));
 void make_directories PROTO((const char *name));
 void make_directory PROTO((const char *name));
 void rename_file PROTO((const char *from, const char *to));
+/* Expand wildcards in each element of (ARGC,ARGV).  This is according to the
+   files which exist in the current directory, and accordingly to OS-specific
+   conventions regarding wildcard syntax.  It might be desirable to change the
+   former in the future (e.g. "cvs status *.h" including files which don't exist
+   in the working directory).  The result is placed in *PARGC and *PARGV;
+   the *PARGV array itself and all the strings it contains are newly
+   malloc'd.  It is OK to call it with PARGC == &ARGC or PARGV == &ARGV.  */
+extern void expand_wild PROTO ((int argc, char **argv, 
+                                int *pargc, char ***pargv));
+
 void strip_path PROTO((char *path));
 void strip_trailing_slashes PROTO((char *path));
 void update_delproc PROTO((Node * p));
@@ -518,7 +551,7 @@ int Checkin PROTO((int type, char *file, char *update_dir,
                   char *tag, char *options, char *message, List *entries));
 Ctype Classify_File PROTO((char *file, char *tag, char *date, char *options,
                     int force_tag_match, int aflag, char *repository,
-                    List *entries, List *srcfiles, Vers_TS **versp,
+                    List *entries, RCSNode *rcsnode, Vers_TS **versp,
                     char *update_dir, int pipeout));
 List *Find_Names PROTO((char *repository, int which, int aflag,
                  List ** optentries));
@@ -528,7 +561,7 @@ void Update_Logfile PROTO((char *repository, char *xmessage, char *xrevision,
                     FILE * xlogfp, List * xchanges));
 Vers_TS *Version_TS PROTO((char *repository, char *options, char *tag,
                     char *date, char *user, int force_tag_match,
-                    int set_time, List * entries, List * xfiles));
+                    int set_time, List * entries, RCSNode * rcs));
 void do_editor PROTO((char *dir, char **messagep,
                      char *repository, List * changes));
 
@@ -550,6 +583,11 @@ struct file_info
        in which the command was issued, this is "".  */
     char *update_dir;
 
+    /* update_dir and file put together, with a slash between them as
+       necessary.  This is the proper way to refer to the file in user
+       messages.  */
+    char *fullname;
+
     /* Name of the directory corresponding to the repository which contains
        this file.  */
     char *repository;
@@ -557,9 +595,7 @@ struct file_info
     /* The pre-parsed entries for this directory.  */
     List *entries;
 
-    /* The pre-parsed versions of the RCS files.  This is filled in only
-       if dosrcs was passed as nonzero to start_recursion.  */
-    List *srcfiles;
+    RCSNode *rcs;
 };
 
 typedef        int (*FILEPROC)         PROTO((struct file_info *finfo));
@@ -568,6 +604,7 @@ typedef     Dtype (*DIRENTPROC)     PROTO((char *dir, char *repos, char *update_dir));
 typedef        int (*DIRLEAVEPROC)     PROTO((char *dir, int err, char *update_dir));
 
 extern int mkmodules PROTO ((char *dir));
+extern int init PROTO ((int argc, char **argv));
 
 int do_module PROTO((DBM * db, char *mname, enum mtype m_type, char *msg,
                CALLBACKPROC callback_proc, char *where, int shorten,
@@ -585,7 +622,7 @@ int start_recursion PROTO((FILEPROC fileproc, FILESDONEPROC filesdoneproc,
                     int dosrcs, int wd_is_repos));
 void SIG_beginCrSect PROTO((void));
 void SIG_endCrSect PROTO((void));
-void read_cvsrc PROTO((int *argc, char ***argv));
+void read_cvsrc PROTO((int *argc, char ***argv, char *cmdname));
 
 char *make_message_rcslegal PROTO((char *message));
 
@@ -643,6 +680,7 @@ int edit PROTO ((int argc, char **argv));
 int unedit PROTO ((int argc, char **argv));
 int editors PROTO ((int argc, char **argv));
 int watchers PROTO ((int argc, char **argv));
+extern int annotate PROTO ((int argc, char **argv));
 \f
 #if defined(AUTH_CLIENT_SUPPORT) || defined(AUTH_SERVER_SUPPORT)
 char *scramble PROTO ((char *str));
index 5f150a8..7d947cb 100644 (file)
@@ -22,7 +22,9 @@ static int ign_size;                  /* This many slots available (plus
 static int ign_hold = -1;              /* Index where first "temporary" item
                                         * is held, -1 if none.  */
 
-const char *ign_default = ". .. core RCSLOG tags TAGS RCS SCCS .make.state .nse_depinfo #* .#* cvslog.* ,* CVS CVS.adm .del-* *.a *.o *.obj *.so *.Z *~ *.old *.elc *.ln *.bak *.BAK *.orig *.rej";
+const char *ign_default = ". .. core RCSLOG tags TAGS RCS SCCS .make.state\
+ .nse_depinfo #* .#* cvslog.* ,* CVS CVS.adm .del-* *.a *.olb *.o *.obj\
+ *.so *.Z *~ *.old *.elc *.ln *.bak *.BAK *.orig *.rej *.exe _$* *$";
 
 #define IGN_GROW 16                    /* grow the list by 16 elements at a
                                         * time */
@@ -228,6 +230,10 @@ ign_add (ign, hold)
     }
 }
 
+/* Set to 1 if ignore file patterns should be matched in a case-insensitive
+   fashion.  */
+int ign_case;
+
 /* Return 1 if the given filename should be ignored by update or import. */
 int
 ign_name (name)
@@ -238,12 +244,44 @@ ign_name (name)
     if (cpp == NULL)
        return (0);
 
-    while (*cpp)
-       if (fnmatch (*cpp++, name, 0) == 0)
-           return (1);
-    return (0);
+    if (ign_case)
+    {
+       /* We do a case-insensitive match by calling fnmatch on copies of
+          the pattern and the name which have been converted to
+          lowercase.  */
+       char *name_lower;
+       char *pat_lower;
+       char *p;
+
+       name_lower = xstrdup (name);
+       for (p = name_lower; *p != '\0'; ++p)
+           *p = tolower (*p);
+       while (*cpp)
+       {
+           pat_lower = xstrdup (*cpp++);
+           for (p = pat_lower; *p != '\0'; ++p)
+               *p = tolower (*p);
+           if (fnmatch (pat_lower, name_lower, 0) == 0)
+               goto matched;
+           free (pat_lower);
+       }
+       free (name_lower);
+       return 0;
+      matched:
+       free (name_lower);
+       free (pat_lower);
+       return 1;
+    }
+    else
+    {
+       while (*cpp)
+           if (fnmatch (*cpp++, name, 0) == 0)
+               return 1;
+       return 0;
+    }
 }
-
+\f
+/* FIXME: This list of dirs to ignore stuff seems not to be used.  */
 
 static char **dir_ign_list = NULL;
 static int dir_ign_max = 0;
@@ -287,7 +325,7 @@ int ignore_directory (name)
 
   return 0;
 }
-
+\f
 /*
  * Process the current directory, looking for files not in ILIST and not on
  * the global ignore list for this directory.  If we find one, call PROC
index 89460ba..5e1d22e 100644 (file)
@@ -19,7 +19,7 @@ static void set_lockers_name PROTO((struct stat *statp));
 static int set_writelock_proc PROTO((Node * p, void *closure));
 static int unlock_proc PROTO((Node * p, void *closure));
 static int write_lock PROTO((char *repository));
-static void unlock PROTO((char *repository));
+static void lock_simple_remove PROTO((char *repository));
 static void lock_wait PROTO((char *repository));
 static int Check_Owner PROTO((char *lockdir));
 
@@ -42,7 +42,7 @@ Lock_Cleanup ()
     /* clean up simple locks (if any) */
     if (repository != NULL)
     {
-       unlock (repository);
+       lock_simple_remove (repository);
        repository = (char *) NULL;
     }
 
@@ -62,7 +62,7 @@ unlock_proc (p, closure)
     Node *p;
     void *closure;
 {
-    unlock (p->key);
+    lock_simple_remove (p->key);
     return (0);
 }
 
@@ -70,7 +70,7 @@ unlock_proc (p, closure)
  * Remove the lock files (without complaining if they are not there),
  */
 static void
-unlock (repository)
+lock_simple_remove (repository)
     char *repository;
 {
     char tmp[PATH_MAX];
@@ -166,37 +166,15 @@ Reader_Lock (xrepository)
     if (readlock[0] == '\0')
       (void) sprintf (readlock, 
 #ifdef HAVE_LONG_FILE_NAMES
-               "%s.%s.%d", CVSRFL, hostname,
+               "%s.%s.%ld", CVSRFL, hostname,
 #else
-               "%s.%d", CVSRFL,
+               "%s.%ld", CVSRFL,
 #endif
-               getpid ());
+               (long) getpid ());
 
     /* remember what we're locking (for lock_cleanup) */
     repository = xrepository;
 
-#ifdef BOGUS_UNLESS_PROVEN_OTHERWISE
-    /* make sure we can write the repository */
-    (void) sprintf (tmp,
-#ifdef HAVE_LONG_FILE_NAMES
-       "%s/%s.%s.%d", xrepository, CVSTFL, hostname,
-#else
-       "%s/%s.%d", xrepository, CVSTFL,
-#endif
-       getpid());
-    if ((fp = fopen (tmp, "w+")) == NULL || fclose (fp) == EOF)
-    {
-       error (0, errno, "cannot create read lock in repository `%s'",
-              xrepository);
-       readlock[0] = '\0';
-       if (unlink (tmp) < 0 && ! existence_error (errno))
-           error (0, errno, "failed to remove lock %s", tmp);
-       return (1);
-    }
-    if (unlink (tmp) < 0)
-       error (0, errno, "failed to remove lock %s", tmp);
-#endif
-
     /* get the lock dir for our own */
     if (set_lock (xrepository, 1) != L_OK)
     {
@@ -307,32 +285,11 @@ write_lock (repository)
     if (writelock[0] == '\0')
        (void) sprintf (writelock,
 #ifdef HAVE_LONG_FILE_NAMES
-           "%s.%s.%d", CVSWFL, hostname,
-#else
-           "%s.%d", CVSWFL,
-#endif
-       getpid());
-
-#ifdef BOGUS_UNLESS_PROVEN_OTHERWISE
-    /* make sure we can write the repository */
-    (void) sprintf (tmp,
-#ifdef HAVE_LONG_FILE_NAMES
-       "%s/%s.%s.%d", repository, CVSTFL, hostname,
+           "%s.%s.%ld", CVSWFL, hostname,
 #else
-       "%s/%s.%d", repository, CVSTFL,
-#endif
-       getpid ());
-    if ((fp = fopen (tmp, "w+")) == NULL || fclose (fp) == EOF)
-    {
-       error (0, errno, "cannot create write lock in repository `%s'",
-              repository);
-       if (unlink (tmp) < 0 && ! existence_error (errno))
-           error (0, errno, "failed to remove lock %s", tmp);
-       return (L_ERROR);
-    }
-    if (unlink (tmp) < 0)
-       error (0, errno, "failed to remove lock %s", tmp);
+           "%s.%ld", CVSWFL,
 #endif
+       (long) getpid());
 
     /* make sure the lock dir is ours (not necessarily unique to us!) */
     status = set_lock (repository, 0);
index 2b23258..dafe689 100644 (file)
 
 #include "cvs.h"
 
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#else
+extern int gethostname ();
+#endif
+
 #if HAVE_KERBEROS
 #include <sys/socket.h>
 #include <netinet/in.h>
@@ -50,7 +56,7 @@ char *program_path;
  * Initialize comamnd_name to "cvs" so that the first call to
  * read_cvsrc tries to find global cvs options.
  */
-char *command_name = "cvs";
+char *command_name = "";
 
 /*
  * Since some systems don't define this...
@@ -127,6 +133,7 @@ const struct cmd
 
     CMD_ENTRY("add",      "ad",    "new",     add,       client_add),
     CMD_ENTRY("admin",    "adm",   "rcs",     admin,     client_admin),
+    CMD_ENTRY("annotate", NULL,    NULL,      annotate,  client_annotate),
     CMD_ENTRY("checkout", "co",    "get",     checkout,  client_checkout),
     CMD_ENTRY("commit",   "ci",    "com",     commit,    client_commit),
     CMD_ENTRY("diff",     "di",    "dif",     diff,      client_diff),
@@ -135,6 +142,7 @@ const struct cmd
     CMD_ENTRY("export",   "exp",   "ex",      checkout,  client_export),
     CMD_ENTRY("history",  "hi",    "his",     history,   client_history),
     CMD_ENTRY("import",   "im",    "imp",     import,    client_import),
+    CMD_ENTRY("init",     NULL,    NULL,      init,      client_init),
     CMD_ENTRY("log",      "lo",    "rlog",    cvslog,    client_log),
 #ifdef AUTH_CLIENT_SUPPORT
     CMD_ENTRY("login",    "logon", "lgn",     login,     login),
@@ -194,6 +202,7 @@ static const char *const cmd_usage[] =
     "CVS commands are:\n",
     "        add          Adds a new file/directory to the repository\n",
     "        admin        Administration front end for rcs\n",
+    "        annotate     Show revision where each line was modified\n",
     "        checkout     Checkout sources for editing\n",
     "        commit       Checks files into the repository\n",
     "        diff         Runs diffs between revisions\n",
@@ -244,7 +253,7 @@ main_cleanup (sig)
            break;
     }
 
-    error (1, 0, "received %s signal", name);
+    error (EXIT_FAILURE, 0, "received %s signal", name);
 }
 
 static void
@@ -362,7 +371,7 @@ main (argc, argv)
      * Scan cvsrc file for global options.
      */
     if (use_cvsrc)
-       read_cvsrc(&argc, &argv);
+       read_cvsrc (&argc, &argv, "cvs");
 
     optind = 1;
     opterr = 1;
@@ -486,7 +495,7 @@ main (argc, argv)
        {
            printf ("E Fatal error, aborting.\n\
 error %s getpeername or getsockname failed\n", strerror (errno));
-           exit (1);
+           exit (EXIT_FAILURE);
        }
 
        status = krb_recvauth (KOPT_DO_MUTUAL, STDIN_FILENO, &ticket, "rcmd",
@@ -496,7 +505,7 @@ error %s getpeername or getsockname failed\n", strerror (errno));
        {
            printf ("E Fatal error, aborting.\n\
 error 0 kerberos: %s\n", krb_get_err_text(status));
-           exit (1);
+           exit (EXIT_FAILURE);
        }
 
        /* Get the local name.  */
@@ -505,7 +514,7 @@ error 0 kerberos: %s\n", krb_get_err_text(status));
        {
            printf ("E Fatal error, aborting.\n\
 error 0 kerberos: can't get local name: %s\n", krb_get_err_text(status));
-           exit (1);
+           exit (EXIT_FAILURE);
        }
 
        pw = getpwnam (user);
@@ -513,7 +522,7 @@ error 0 kerberos: can't get local name: %s\n", krb_get_err_text(status));
        {
            printf ("E Fatal error, aborting.\n\
 error 0 %s: no such user\n", user);
-           exit (1);
+           exit (EXIT_FAILURE);
        }
 
        initgroups (pw->pw_name, pw->pw_gid);
@@ -643,16 +652,22 @@ error 0 %s: no such user\n", user);
            if (!isaccessible (path, R_OK | X_OK))
            {
                save_errno = errno;
+               /* If this is "cvs init", the root need not exist yet.  */
+               if (strcmp (command_name, "init") != 0
 #ifdef CLIENT_SUPPORT
-               if (strchr (CVSroot, ':') == NULL)
-               {
+                   /* If we are a remote client, the root need not exist
+                      on the client machine (FIXME: we should also skip
+                      the check for CVSROOTADM_HISTORY being writable;
+                      it shouldn't matter if there is a read-only file
+                      which happens to have the same name on the client
+                      machine).  */
+                   && strchr (CVSroot, ':') == NULL)
 #endif
+               {
                error (0, 0,
                    "Sorry, you don't have sufficient access to %s", CVSroot);
                error (1, save_errno, "%s", path);
-#ifdef CLIENT_SUPPORT
                }
-#endif
            }
            (void) strcat (path, "/");
            (void) strcat (path, CVSROOTADM_HISTORY);
@@ -766,7 +781,7 @@ error 0 %s: no such user\n", user);
 #endif
 
        if (use_cvsrc)
-         read_cvsrc(&argc, &argv);
+         read_cvsrc (&argc, &argv, command_name);
 
 #ifdef CLIENT_SUPPORT
        /* If cvsroot contains a colon, try to do it via the protocol.  */
@@ -782,14 +797,10 @@ error 0 %s: no such user\n", user);
 
 #endif /* No CLIENT_SUPPORT */
     }
-    /*
-     * If the command's error count is modulo 256, we need to change it
-     * so that we don't overflow the 8-bits we get to report exit status
-     */
-    if (err && (err % 256) == 0)
-       err = 1;
     Lock_Cleanup ();
-    return (err);
+    if (err)
+       return (EXIT_FAILURE);
+    return 0;
 }
 
 char *
@@ -824,5 +835,5 @@ usage (cpp)
     (void) fprintf (stderr, *cpp++, program_name, command_name);
     for (; *cpp; cpp++)
        (void) fprintf (stderr, *cpp);
-    exit (1);
+    exit (EXIT_FAILURE);
 }
index 2878a1f..9797734 100644 (file)
@@ -336,9 +336,8 @@ patch_fileproc (finfo)
 {
     struct utimbuf t;
     char *vers_tag, *vers_head;
-    char rcsspace[PATH_MAX];
-    char *rcs = rcsspace;
-    Node *p;
+    char rcsspace[1][PATH_MAX];
+    char *rcs = rcsspace[0];
     RCSNode *rcsfile;
     FILE *fp1, *fp2, *fp3;
     int ret = 0;
@@ -348,14 +347,12 @@ patch_fileproc (finfo)
     char *line1, *line2;
     size_t line1_chars_allocated;
     size_t line2_chars_allocated;
-    char *cp1, *cp2, *commap;
+    char *cp1, *cp2;
     FILE *fp;
 
     /* find the parsed rcs file */
-    p = findnode (finfo->srcfiles, finfo->file);
-    if (p == NULL)
+    if ((rcsfile = finfo->rcs) == NULL)
        return (1);
-    rcsfile = (RCSNode *) p->data;
     if ((rcsfile->flags & VALID) && (rcsfile->flags & INATTIC))
        isattic = 1;
 
@@ -393,12 +390,12 @@ patch_fileproc (finfo)
 
     if (patch_short)
     {
-       (void) printf ("File ");
+       (void) printf ("File %s ", finfo->fullname);
        if (vers_tag == NULL)
-           (void) printf ("%s is new; current revision %s\n", rcs, vers_head);
+           (void) printf ("is new; current revision %s\n", vers_head);
        else if (vers_head == NULL)
        {
-           (void) printf ("%s is removed; not included in ", rcs);
+           (void) printf ("is removed; not included in ");
            if (rev2 != NULL)
                (void) printf ("release tag %s", rev2);
            else if (date2 != NULL)
@@ -408,8 +405,8 @@ patch_fileproc (finfo)
            (void) printf ("\n");
        }
        else
-           (void) printf ("%s changed from revision %s to %s\n",
-                          rcs, vers_tag, vers_head);
+           (void) printf ("changed from revision %s to %s\n",
+                          vers_tag, vers_head);
        return (0);
     }
     if ((fp1 = fopen (tmpnam (tmpfile1), "w+")) != NULL)
@@ -486,10 +483,7 @@ patch_fileproc (finfo)
 
            /* Output an "Index:" line for patch to use */
            (void) fflush (stdout);
-           if (finfo->update_dir[0])
-             (void) printf ("Index: %s/%s\n", finfo->update_dir, finfo->file);
-           else
-             (void) printf ("Index: %s\n", finfo->file);
+           (void) printf ("Index: %s\n", finfo->fullname);
            (void) fflush (stdout);
 
            fp = open_file (tmpfile3, "r");
@@ -534,20 +528,20 @@ patch_fileproc (finfo)
                (void) strcpy (strippath, REPOS_STRIP);
            if (strncmp (rcs, strippath, strlen (strippath)) == 0)
                rcs += strlen (strippath);
-           commap = strrchr (rcs, ',');
-           *commap = '\0';
            if (vers_tag != NULL)
            {
-               (void) sprintf (file1, "%s%s%s:%s", finfo->update_dir,
-                               finfo->update_dir[0] ? "/" : "", rcs, vers_tag);
+               (void) sprintf (file1, "%s:%s", finfo->fullname, vers_tag);
            }
            else
            {
                (void) strcpy (file1, DEVNULL);
            }
-           (void) sprintf (file2, "%s%s%s:%s", finfo->update_dir,
-                           finfo->update_dir[0] ? "/" : "", rcs,
+           (void) sprintf (file2, "%s:%s", finfo->fullname,
                            vers_head ? vers_head : "removed");
+
+           /* Note that this prints "diff" not DIFF.  The format of a diff
+              does not depend on the name of the program which happens to
+              have produced it.  */
            if (unidiff)
            {
                (void) printf ("diff -u %s %s\n", file1, file2);
@@ -559,16 +553,14 @@ patch_fileproc (finfo)
                (void) printf ("*** %s%s--- ", file1, cp1);
            }
 
-           if (finfo->update_dir[0] != '\0')
-               (void) printf ("%s/", finfo->update_dir);
-           (void) printf ("%s%s", rcs, cp2);
+           (void) printf ("%s%s", finfo->fullname, cp2);
            /* spew the rest of the diff out */
            while (getline (&line1, &line1_chars_allocated, fp) >= 0)
                (void) fputs (line1, stdout);
            (void) fclose (fp);
            break;
        default:
-           error (0, 0, "diff failed for %s", rcs);
+           error (0, 0, "diff failed for %s", finfo->fullname);
     }
   out:
     if (line1)
index 1577e15..0fc7ce0 100644 (file)
 
 #ifdef AUTH_SERVER_SUPPORT
 /* For initgroups().  */
+#if HAVE_INITGROUPS
 #include <grp.h>
-#endif
+#endif /* HAVE_INITGROUPS */
+#endif /* AUTH_SERVER_SUPPORT */
 
 \f
 /* Functions which the server calls.  */
@@ -270,7 +272,7 @@ serve_valid_responses (arg)
        {
            printf ("E response `%s' not supported by client\nerror  \n",
                    rs->name);
-           exit (1);
+           exit (EXIT_FAILURE);
        }
        else if (rs->status == rs_optional)
            rs->status = rs_not_supported;
@@ -676,7 +678,8 @@ receive_file (size, file, gzipped)
     if (gzip_pid)
     {
        if (waitpid (gzip_pid, &gzip_status, 0) != gzip_pid)
-           error (1, errno, "waiting for gunzip process %d", gzip_pid);
+           error (1, errno, "waiting for gunzip process %ld",
+                  (long) gzip_pid);
        else if (gzip_status != 0)
            error (1, 0, "gunzip exited %d", gzip_status);
     }
@@ -2185,6 +2188,15 @@ serve_questionable (arg)
        buf_output (&buf_to_net, "\n", 1);
     }
 }
+
+static void serve_case PROTO ((char *));
+
+static void
+serve_case (arg)
+    char *arg;
+{
+    ign_case = 1;
+}
 \f
 static struct buffer protocol;
 
@@ -2226,7 +2238,7 @@ error ENOMEM Virtual memory exhausted.\n";
     /* If this gives an error, not much we could do.  syslog() it?  */
     write (STDOUT_FILENO, msg, sizeof (msg) - 1);
     server_cleanup (0);
-    exit (1);
+    exit (EXIT_FAILURE);
 }
 
 static void
@@ -3207,6 +3219,32 @@ serve_noop (arg)
 {
     do_cvs_command (noop);
 }
+
+static void serve_init PROTO ((char *));
+
+static void
+serve_init (arg)
+    char *arg;
+{
+    CVSroot = malloc (strlen (arg) + 1);
+    if (CVSroot == NULL)
+    {
+       pending_error = ENOMEM;
+       return;
+    }
+    strcpy (CVSroot, arg);
+
+    do_cvs_command (init);
+}
+
+static void serve_annotate PROTO ((char *));
+
+static void
+serve_annotate (arg)
+    char *arg;
+{
+    do_cvs_command (annotate);
+}
 \f
 static void
 serve_co (arg)
@@ -3382,6 +3420,10 @@ server_updated (file, update_dir, repository, updated, file_info, checksum)
        size = 0;
        if (sb.st_size > 0)
        {
+           /* Throughout this section we use binary mode to read the
+              file we are sending.  The client handles any line ending
+              translation if necessary.  */
+
            if (gzip_level
                /*
                 * For really tiny files, the gzip process startup
@@ -3394,11 +3436,11 @@ server_updated (file, update_dir, repository, updated, file_info, checksum)
                int status, fd, gzip_status;
                pid_t gzip_pid;
 
-               fd = open (file, O_RDONLY, 0);
+               fd = open (file, O_RDONLY | OPEN_BINARY, 0);
                if (fd < 0)
                    error (1, errno, "reading %s", short_pathname);
                fd = filter_through_gzip (fd, 1, gzip_level, &gzip_pid);
-               f = fdopen (fd, "r");
+               f = fdopen (fd, "rb");
                status = buf_read_file_to_eof (f, &list, &last);
                size = buf_chain_length (list);
                if (status == -2)
@@ -3409,7 +3451,8 @@ server_updated (file, update_dir, repository, updated, file_info, checksum)
                if (fclose (f) == EOF)
                    error (1, errno, "reading %s", short_pathname);
                if (waitpid (gzip_pid, &gzip_status, 0) == -1)
-                   error (1, errno, "waiting for gzip process %d", gzip_pid);
+                   error (1, errno, "waiting for gzip process %ld",
+                          (long) gzip_pid);
                else if (gzip_status != 0)
                    error (1, 0, "gzip exited %d", gzip_status);
                /* Prepending length with "z" is flag for using gzip here.  */
@@ -3420,7 +3463,7 @@ server_updated (file, update_dir, repository, updated, file_info, checksum)
                long status;
 
                size = sb.st_size;
-               f = fopen (file, "r");
+               f = fopen (file, "rb");
                if (f == NULL)
                    error (1, errno, "reading %s", short_pathname);
                status = buf_read_file (f, sb.st_size, &list, &last);
@@ -3561,7 +3604,76 @@ server_set_sticky (update_dir, repository, tag, date)
     }
     buf_send_counted (&protocol);
 }
+\f
+struct template_proc_data
+{
+    char *update_dir;
+    char *repository;
+};
+
+/* Here as a static until we get around to fixing Parse_Info to pass along
+   a void * for it.  */
+static struct template_proc_data *tpd;
+
+static int
+template_proc (repository, template)
+    char *repository;
+    char *template;
+{
+    FILE *fp;
+    char buf[1024];
+    size_t n;
+    struct stat sb;
+    struct template_proc_data *data = tpd;
+
+    if (!supported_response ("Template"))
+       /* Might want to warn the user that the rcsinfo feature won't work.  */
+       return 0;
+    buf_output0 (&protocol, "Template ");
+    output_dir (data->update_dir, data->repository);
+    buf_output0 (&protocol, "\n");
+
+    fp = fopen (template, "rb");
+    if (fp == NULL)
+    {
+       error (0, errno, "Couldn't open rcsinfo template file %s", template);
+       return 1;
+    }
+    if (fstat (fileno (fp), &sb) < 0)
+    {
+       error (0, errno, "cannot stat rcsinfo template file %s", template);
+       return 1;
+    }
+    sprintf (buf, "%ld\n", (long) sb.st_size);
+    buf_output0 (&protocol, buf);
+    while (!feof (fp))
+    {
+       n = fread (buf, 1, sizeof buf, fp);
+       buf_output (&protocol, buf, n);
+       if (ferror (fp))
+       {
+           error (0, errno, "cannot read rcsinfo template file %s", template);
+           (void) fclose (fp);
+           return 1;
+       }
+    }
+    if (fclose (fp) < 0)
+       error (0, errno, "cannot close rcsinfo template file %s", template);
+    return 0;
+}
 
+void
+server_template (update_dir, repository)
+    char *update_dir;
+    char *repository;
+{
+    struct template_proc_data data;
+    data.update_dir = update_dir;
+    data.repository = repository;
+    tpd = &data;
+    (void) Parse_Info (CVSROOTADM_RCSINFO, repository, template_proc, 1);
+}
+\f
 static void
 serve_gzip_contents (arg)
      char *arg;
@@ -3786,6 +3898,7 @@ struct request requests[] =
   REQ_LINE("Unchanged", serve_unchanged, rq_optional),
   REQ_LINE("Notify", serve_notify, rq_optional),
   REQ_LINE("Questionable", serve_questionable, rq_optional),
+  REQ_LINE("Case", serve_case, rq_optional),
   REQ_LINE("Argument", serve_argument, rq_essential),
   REQ_LINE("Argumentx", serve_argumentx, rq_essential),
   REQ_LINE("Global_option", serve_global_option, rq_optional),
@@ -3815,6 +3928,8 @@ struct request requests[] =
   REQ_LINE("watch-remove", serve_watch_remove, rq_optional),
   REQ_LINE("watchers", serve_watchers, rq_optional),
   REQ_LINE("editors", serve_editors, rq_optional),
+  REQ_LINE("init", serve_init, rq_optional),
+  REQ_LINE("annotate", serve_annotate, rq_optional),
   REQ_LINE("noop", serve_noop, rq_optional),
   REQ_LINE(NULL, NULL, rq_optional)
 
@@ -4010,7 +4125,7 @@ server (argc, argv)
        {
            printf ("E Fatal server error, aborting.\n\
 error ENOMEM Virtual memory exhausted.\n");
-           exit (1);
+           exit (EXIT_FAILURE);
        }
        putenv (env);
     }
@@ -4034,7 +4149,7 @@ error ENOMEM Virtual memory exhausted.\n");
             */
            printf ("E Fatal server error, aborting.\n\
 error ENOMEM Virtual memory exhausted.\n");
-           exit (1);
+           exit (EXIT_FAILURE);
        }
        strcpy (server_temp_dir, temp_dir);
 
@@ -4051,7 +4166,7 @@ error ENOMEM Virtual memory exhausted.\n");
        strcat (server_temp_dir, "/cvs-serv");
 
        p = server_temp_dir + strlen (server_temp_dir);
-       sprintf (p, "%d", getpid ());
+       sprintf (p, "%ld", (long) getpid ());
     }
 
     (void) SIG_register (SIGHUP, server_cleanup);
@@ -4074,7 +4189,7 @@ error ENOMEM Virtual memory exhausted.\n");
         */
        printf ("E Fatal server error, aborting.\n\
 error ENOMEM Virtual memory exhausted.\n");
-       exit (1);
+       exit (EXIT_FAILURE);
     }
 
     argument_count = 1;
@@ -4243,50 +4358,51 @@ check_repository_password (username, password, repository, host_user_ptr)
 /* Return a hosting username if password matches, else NULL. */
 char *
 check_password (username, password, repository)
-     char *username, *password, *repository;
+    char *username, *password, *repository;
 {
-  int rc;
-  char *host_user;
+    int rc;
+    char *host_user;
 
-  /* First we see if this user has a password in the CVS-specific
-     password file.  If so, that's enough to authenticate with.  If
-     not, we'll check /etc/passwd. */
+    /* First we see if this user has a password in the CVS-specific
+       password file.  If so, that's enough to authenticate with.  If
+       not, we'll check /etc/passwd. */
 
-  rc = check_repository_password (username, password, repository, &host_user);
+    rc = check_repository_password (username, password, repository,
+                                   &host_user);
 
-  if (rc == 1)
-    return host_user;
-  else if (rc == 2)
-    return 0;
-  else if (rc == 0)
+    if (rc == 1)
+       return host_user;
+    else if (rc == 2)
+       return 0;
+    else if (rc == 0)
     {
-      /* No cvs password found, so try /etc/passwd. */
+       /* No cvs password found, so try /etc/passwd. */
 
-      struct passwd *pw;
-      char *found_passwd;
+       struct passwd *pw;
+       char *found_passwd;
 
-      pw = getpwnam (username);
-      if (pw == NULL)
+       pw = getpwnam (username);
+       if (pw == NULL)
         {
-          printf ("E Fatal error, aborting.\n"
-                  "error 0 %s: no such user\n", username);
-          exit (1);
-        }
-      found_passwd = pw->pw_passwd;
-      
-      if (found_passwd && *found_passwd)
-        return (! strcmp (found_passwd, crypt (password, found_passwd))) ?
-          username : NULL;
-      else if (password && *password)
-        return username;
-      else
-        return NULL;
+           printf ("E Fatal error, aborting.\n\
+error 0 %s: no such user\n", username);
+           exit (EXIT_FAILURE);
+       }
+       found_passwd = pw->pw_passwd;
+
+       if (found_passwd && *found_passwd)
+           return ((! strcmp (found_passwd, crypt (password, found_passwd)))
+                   ? username : NULL);
+       else if (password && *password)
+           return username;
+       else
+           return NULL;
     }
-  else
+    else
     {
-      /* Something strange happened.  We don't know what it was, but
-         we certainly won't grant authorization. */
-      return NULL;
+       /* Something strange happened.  We don't know what it was, but
+          we certainly won't grant authorization. */
+       return NULL;
     }
 }
 
@@ -4395,7 +4511,7 @@ authenticate_connection ()
       fflush (stdout);
       memset (descrambled_password, 0, strlen (descrambled_password));
       free (descrambled_password);
-      exit (1);
+      exit (EXIT_FAILURE);
     }
   
   /* Don't go any farther if we're just responding to "cvs login". */
@@ -4411,7 +4527,10 @@ authenticate_connection ()
              username);
     }
   
+#if HAVE_INITGROUPS
   initgroups (pw->pw_name, pw->pw_gid);
+#endif /* HAVE_INITGROUPS */
+
   setgid (pw->pw_gid);
   setuid (pw->pw_uid);
   /* Inhibit access by randoms.  Don't want people randomly
index 84d406c..eddfe5a 100644 (file)
 #include "edit.h"
 
 static int checkout_file PROTO((char *file, char *repository, List *entries,
-                         List *srcfiles, Vers_TS *vers_ts, char *update_dir));
+                         RCSNode *rcsnode, Vers_TS *vers_ts, char *update_dir));
 #ifdef SERVER_SUPPORT
 static int patch_file PROTO((char *file, char *repository, List *entries,
-                      List *srcfiles, Vers_TS *vers_ts, char *update_dir,
+                      RCSNode*rcsnode, Vers_TS *vers_ts, char *update_dir,
                       int *docheckout, struct stat *file_info,
                       unsigned char *checksum));
 #endif
@@ -61,10 +61,10 @@ static int update_filesdone_proc PROTO((int err, char *repository,
                                        char *update_dir));
 static int write_letter PROTO((char *file, int letter, char *update_dir));
 #ifdef SERVER_SUPPORT
-static void join_file PROTO((char *file, List *srcfiles, Vers_TS *vers_ts,
+static void join_file PROTO((char *file, RCSNode *rcsnode, Vers_TS *vers_ts,
                       char *update_dir, List *entries, char *repository));
 #else
-static void join_file PROTO((char *file, List *srcfiles, Vers_TS *vers_ts,
+static void join_file PROTO((char *file, RCSNode *rcsnode, Vers_TS *vers_ts,
                       char *update_dir, List *entries));
 #endif
 
@@ -257,7 +257,7 @@ update (argc, argv)
 
            if (failed_patches == NULL)
            {
-               send_file_names (argc, argv);
+               send_file_names (argc, argv, SEND_EXPAND_WILD);
                send_files (argc, argv, local, aflag);
            }
            else
@@ -275,7 +275,7 @@ update (argc, argv)
 
                for (i = 0; i < failed_patches_count; i++)
                    (void) unlink_file (failed_patches[i]);
-               send_file_names (failed_patches_count, failed_patches);
+               send_file_names (failed_patches_count, failed_patches, 0);
                send_files (failed_patches_count, failed_patches, local,
                            aflag);
            }
@@ -439,7 +439,7 @@ update_fileproc (finfo)
     Vers_TS *vers;
 
     status = Classify_File (finfo->file, tag, date, options, force_tag_match,
-                           aflag, finfo->repository, finfo->entries, finfo->srcfiles, &vers,
+                           aflag, finfo->repository, finfo->entries, finfo->rcs, &vers,
                            finfo->update_dir, pipeout);
     if (pipeout)
     {
@@ -469,7 +469,7 @@ update_fileproc (finfo)
 #ifdef SERVER_SUPPORT
            case T_PATCH:               /* needs patch */
 #endif
-               retval = checkout_file (finfo->file, finfo->repository, finfo->entries, finfo->srcfiles,
+               retval = checkout_file (finfo->file, finfo->repository, finfo->entries, finfo->rcs,
                                        vers, finfo->update_dir);
                break;
 
@@ -505,7 +505,7 @@ update_fileproc (finfo)
                        /* Should we be warning the user that we are
                         * overwriting the user's copy of the file?  */
                        retval = checkout_file (finfo->file, finfo->repository, finfo->entries,
-                                               finfo->srcfiles, vers, finfo->update_dir);
+                                               finfo->rcs, vers, finfo->update_dir);
                    else
                        retval = merge_file (finfo->file, finfo->repository, finfo->entries,
                                             vers, finfo->update_dir);
@@ -549,14 +549,9 @@ update_fileproc (finfo)
                                            RUN_TTY,RUN_NORMAL);
                        if (retcode == -1)
                        {
-                           if (finfo->update_dir[0] == '\0')
-                               error (1, errno,
+                           error (1, errno,
                                "fork failed while examining conflict in `%s'",
-                                      finfo->file);
-                           else
-                               error (1, errno,
-                            "fork failed while examining conflict in `%s/%s'",
-                                      finfo->update_dir, finfo->file);
+                                      finfo->fullname);
                        }
                    }
                    if (!retcode)
@@ -583,7 +578,7 @@ update_fileproc (finfo)
                    struct stat file_info;
                    unsigned char checksum[16];
 
-                   retval = patch_file (finfo->file, finfo->repository, finfo->entries, finfo->srcfiles,
+                   retval = patch_file (finfo->file, finfo->repository, finfo->entries, finfo->rcs,
                                         vers, finfo->update_dir, &docheckout,
                                         &file_info, checksum);
                    if (! docheckout)
@@ -602,7 +597,7 @@ update_fileproc (finfo)
                /* Fall through.  */
 #endif
            case T_CHECKOUT:            /* needs checkout */
-               retval = checkout_file (finfo->file, finfo->repository, finfo->entries, finfo->srcfiles,
+               retval = checkout_file (finfo->file, finfo->repository, finfo->entries, finfo->rcs,
                                        vers, finfo->update_dir);
 #ifdef SERVER_SUPPORT
                if (server_active && retval == 0)
@@ -637,9 +632,9 @@ update_fileproc (finfo)
     /* only try to join if things have gone well thus far */
     if (retval == 0 && join_rev1)
 #ifdef SERVER_SUPPORT
-       join_file (finfo->file, finfo->srcfiles, vers, finfo->update_dir, finfo->entries, finfo->repository);
+       join_file (finfo->file, finfo->rcs, vers, finfo->update_dir, finfo->entries, finfo->repository);
 #else
-       join_file (finfo->file, finfo->srcfiles, vers, finfo->update_dir, finfo->entries);
+       join_file (finfo->file, finfo->rcs, vers, finfo->update_dir, finfo->entries);
 #endif
 
     /* if this directory has an ignore list, add this file to it */
@@ -746,7 +741,8 @@ update_dirent_proc (dir, repository, update_dir)
            Create_Admin (dir, update_dir, repository, tag, date);
        }
     }
-    else
+    /* Do we need to check noexec here? */
+    else if (!pipeout)
     {
        char *cvsadmdir;
 
@@ -910,11 +906,11 @@ scratch_file (file, repository, entries, update_dir)
  * check out a file - essentially returns the result of the fork on "co".
  */
 static int
-checkout_file (file, repository, entries, srcfiles, vers_ts, update_dir)
+checkout_file (file, repository, entries, rcsnode, vers_ts, update_dir)
     char *file;
     char *repository;
     List *entries;
-    List *srcfiles;
+    RCSNode *rcsnode;
     Vers_TS *vers_ts;
     char *update_dir;
 {
@@ -1043,23 +1039,9 @@ checkout_file (file, repository, entries, srcfiles, vers_ts, update_dir)
            wrap_fromcvs_process_file (file);
 
            xvers_ts = Version_TS (repository, options, tag, date, file,
-                             force_tag_match, set_time, entries, srcfiles);
+                             force_tag_match, set_time, entries, rcsnode);
            if (strcmp (xvers_ts->options, "-V4") == 0)
                xvers_ts->options[0] = '\0';
-           /* If no keyword expansion was specified on command line,
-              use whatever was in the file.  This is how we tell the client
-              whether a file is binary.  */
-           if (xvers_ts->options[0] == '\0')
-           {
-               if (vers_ts->srcfile->expand != NULL)
-               {
-                   free (xvers_ts->options);
-                   xvers_ts->options =
-                       xmalloc (strlen (vers_ts->srcfile->expand) + 3);
-                   strcpy (xvers_ts->options, "-k");
-                   strcat (xvers_ts->options, vers_ts->srcfile->expand);
-               }
-           }
 
            (void) time (&last_register_time);
 
@@ -1142,12 +1124,12 @@ checkout_file (file, repository, entries, srcfiles, vers_ts, update_dir)
  * itself.
  */
 static int
-patch_file (file, repository, entries, srcfiles, vers_ts, update_dir,
+patch_file (file, repository, entries, rcsnode, vers_ts, update_dir,
            docheckout, file_info, checksum)
     char *file;
     char *repository;
     List *entries;
-    List *srcfiles;
+    RCSNode *rcsnode;
     Vers_TS *vers_ts;
     char *update_dir;
     int *docheckout;
@@ -1328,7 +1310,7 @@ patch_file (file, repository, entries, srcfiles, vers_ts, update_dir,
         /* This stuff is just copied blindly from checkout_file.  I
           don't really know what it does.  */
         xvers_ts = Version_TS (repository, options, tag, date, file,
-                              force_tag_match, 0, entries, srcfiles);
+                              force_tag_match, 0, entries, rcsnode);
        if (strcmp (xvers_ts->options, "-V4") == 0)
            xvers_ts->options[0] = '\0';
 
@@ -1516,13 +1498,13 @@ merge_file (file, repository, entries, vers, update_dir)
  */
 static void
 #ifdef SERVER_SUPPORT
-join_file (file, srcfiles, vers, update_dir, entries, repository)
+join_file (file, rcsnode, vers, update_dir, entries, repository)
     char *repository;
 #else
-join_file (file, srcfiles, vers, update_dir, entries)
+join_file (file, rcsnode, vers, update_dir, entries)
 #endif
     char *file;
-    List *srcfiles;
+    RCSNode *rcsnode;
     Vers_TS *vers;
     char *update_dir;
     List *entries;
@@ -1746,7 +1728,7 @@ join_file (file, srcfiles, vers, update_dir, entries)
                return;
            }
            
-           baserev = RCS_whatbranch (file, join_rev1, srcfiles);
+           baserev = RCS_whatbranch (file, join_rev1, rcsnode);
            if (baserev)
            {
                char *cp;
diff --git a/gnu/usr.bin/cvs/windows-NT/alloca.h b/gnu/usr.bin/cvs/windows-NT/alloca.h
deleted file mode 100644 (file)
index 590b250..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* alloca.h --- Windows NT version of alloca.h
-   Jim Blandy <jimb@cyclic.com> --- July 1995  */
-
-/* Here's the situation.
-
-   CVS uses alloca.  Not in many places, but that number is likely to grow
-   since the GNU coding standards give alloca official blessing, and
-   supposedly autoconf takes care of the portability problems.
-
-   Windows NT has alloca, but calls it _alloca and declares it to return
-   void *.
-
-   The autoconf manual provides a big wad of CPP cruft to place in files
-   that want to use alloca; it currently appears in lib/system.h,
-   lib/regex.c, and in src/cvs.h.  This boilerplate wad says that if you
-   HAVE_ALLOCA but don't HAVE_ALLOCA_H, you should declare alloca as an
-   extern function returning char *.
-
-   This may be fine for most systems, but it makes Visual C++ barf,
-   because the return types conflict.  So the workaround is to
-   actually have an alloca.h file that declares things appropriately.
-   The boilerplate alloca wad says that if you HAVE_ALLOCA_H, let it
-   declare everything for you.  Which suits us fine.  */
-
-#define alloca _alloca
-extern void *alloca ();