BSD 4_4 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 30 Dec 1992 10:03:53 +0000 (02:03 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 30 Dec 1992 10:03:53 +0000 (02:03 -0800)
Work on file usr/src/contrib/rcs-V5.6/man/ci.1
Work on file usr/src/contrib/rcs-V5.6/man/co.1
Work on file usr/src/contrib/rcs-V5.6/man/ident.1
Work on file usr/src/contrib/rcs-V5.6/man/merge.1
Work on file usr/src/contrib/rcs-V5.6/man/rcs.1
Work on file usr/src/contrib/rcs-V5.6/man/rcsdiff.1
Work on file usr/src/contrib/rcs-V5.6/man/rcsfile.5
Work on file usr/src/contrib/rcs-V5.6/man/rcsfreeze.1
Work on file usr/src/contrib/rcs-V5.6/man/rcsintro.1
Work on file usr/src/contrib/rcs-V5.6/man/rlog.1
Work on file usr/src/contrib/rcs-V5.6/man/rcsmerge.1
Work on file usr/src/contrib/rcs-V5.6/man/rcsclean.1
Work on file usr/src/contrib/rcs-V5.6/COPYING
Work on file usr/src/contrib/rcs-V5.6/README
Work on file usr/src/contrib/rcs-V5.6/rcs_func.ms
Work on file usr/src/contrib/rcs-V5.6/rcs.ps
Work on file usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps
Work on file usr/src/contrib/rcs-V5.6/Makefile

Synthesized-from: CSRG/cd3/4.4

18 files changed:
usr/src/contrib/rcs-V5.6/COPYING [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/Makefile [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps [new symlink]
usr/src/contrib/rcs-V5.6/README [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/ci.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/co.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/ident.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/merge.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/rcs.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/rcsclean.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/rcsdiff.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/rcsfile.5 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/rcsfreeze.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/rcsintro.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/rcsmerge.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/man/rlog.1 [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/rcs.ps [new file with mode: 0644]
usr/src/contrib/rcs-V5.6/rcs_func.ms [new file with mode: 0644]

diff --git a/usr/src/contrib/rcs-V5.6/COPYING b/usr/src/contrib/rcs-V5.6/COPYING
new file mode 100644 (file)
index 0000000..a43ea21
--- /dev/null
@@ -0,0 +1,339 @@
+                   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.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. 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.
+
+  1. 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.
+
+  2. 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.)
+\f
+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.
+
+  3. 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.
+\f
+  4. 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.
+
+  5. 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.
+
+  6. 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.
+
+  7. 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.
+\f
+  8. 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.
+
+  9. 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.
+
+  10. 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
+
+  11. 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.
+
+  12. 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
+\f
+       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.
diff --git a/usr/src/contrib/rcs-V5.6/Makefile b/usr/src/contrib/rcs-V5.6/Makefile
new file mode 100644 (file)
index 0000000..fd0724a
--- /dev/null
@@ -0,0 +1,20 @@
+SUBDIR=        src man
+DESTDIR=
+
+all: ${SUBDIR}
+
+${SUBDIR}: FRC
+       cd $@; make ${MFLAGS} DESTDIR=${DESTDIR}
+
+install:
+       for i in ${SUBDIR}; do \
+               (cd $$i; make ${MFLAGS} DESTDIR=${DESTDIR} install); \
+       done
+
+clean:
+       for i in ${SUBDIR}; do \
+               (cd $$i; make ${MFLAGS} DESTDIR=${DESTDIR} clean); \
+       done
+
+FRC:
+
diff --git a/usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps b/usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps
new file mode 120000 (symlink)
index 0000000..a6cc96b
--- /dev/null
@@ -0,0 +1 @@
+../rcs.ps
\ No newline at end of file
diff --git a/usr/src/contrib/rcs-V5.6/README b/usr/src/contrib/rcs-V5.6/README
new file mode 100644 (file)
index 0000000..c320e09
--- /dev/null
@@ -0,0 +1,407 @@
+This directory contains complete sources for RCS version 5.6.
+
+RCS, the Revision Control System, manages multiple revisions of files.
+RCS can store, retrieve, log, identify, and merge revisions.
+It is useful for files that are revised frequently,
+e.g. programs, documentation, graphics, and papers.
+
+/* Copyright (C) 1982, 1988, 1989 Walter Tichy
+   Copyright 1990, 1991 by Paul Eggert
+   Distributed under license by the Free Software Foundation, Inc.
+
+This file is part of RCS.
+
+RCS 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.
+
+RCS 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 RCS; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Report problems and direct all questions to:
+
+    rcs-bugs@cs.purdue.edu
+
+*/
+
+$Id: README,v 5.16 1991/11/03 01:09:19 eggert Exp $
+
+
+Installation notes:
+
+  RCS requires a diff that supports the -n option.
+  Get GNU diff (version 1.15 or later) if your diff lacks -n.
+
+  RCS works best with a diff that supports -a and -L,
+  and a diff3 that supports -E and -m.
+  GNU diff supports these options.
+
+  Sources for RCS are in the src directory.
+  Read the directions in src/README to build RCS on your system.
+
+  Manual entries reside in man.
+
+  Troff source for the paper `RCS--A System for Version Control', which
+  appeared in _Software--Practice & Experience_, is in rcs.ms.
+
+  If you don't have troff, you can get GNU groff to format the documentation.
+
+
+RCS compatibility notes:
+
+  RCS version 5 reads RCS files written by any RCS version released since 1982.
+  It also writes RCS files that these older versions of RCS can read,
+  unless you use one of the following new features:
+
+       checkin times after 1999/12/31 23:59:59 GMT
+       checking in non-text files
+       non-Ascii symbolic names
+       rcs -bX, where X is nonempty
+       rcs -kX, where X is not `kv'
+       RCS files that exceed hardcoded limits in older RCS versions
+
+  A working file written by RCS 5.5 or later contains four-digit years in its
+  keyword strings.  If you check out a working file with RCS 5.5 or later,
+  an older RCS version's `ci -k' may insist on two-digit years.
+  Fix this with `co -V4', or by editing the working file.
+
+
+Features new to RCS version 5.6 include:
+
+  Security holes have been plugged; setgid use is no longer supported.
+
+  co can retrieve old revisions much more efficiently.
+  To generate the Nth youngest revision on the trunk,
+  the old method used up to N passes through copies of the working file;
+  the new method uses a piece table to generate the working file in one pass.
+
+  When ci finds no changes in the working file,
+  it automatically reverts to the previous revision unless -f is given.
+
+  RCS follows symbolic links to RCS files instead of breaking them,
+  and warns when it breaks hard links to RCS files.
+
+  `$' stands for the revision number taken from working file keyword strings.
+  E.g. if F contains an Id keyword string,
+  `rcsdiff -r$ F' compares F to its checked-in revision, and
+  `rcs -nL:$ F' gives the symbolic name L to F's revision.
+
+  co and ci's new -M option sets the modification time
+  of the working file to be that of the revision.
+  Without -M, ci now tries to avoid changing the working file's
+  modification time if its contents are unchanged.
+
+  rcs's new -m option changes the log message of an old revision.
+
+  RCS is portable to hosts that do not permit `,' in filenames.
+  (`,' is not part of the Posix portable filename character set.)
+  A new -x option specifies extensions other than `,v' for RCS files.
+  The Unix default is `-x,v/', so that the working file `w' corresponds
+  to the first file in the list `RCS/w,v', `w,v', `RCS/w' that works.
+  The non-Unix default is `-x', so that only `RCS/w' is tried.
+  Eventually, the Unix default should change to `-x/,v'
+  to encourage interoperability among all Posix hosts.
+
+  A new RCSINIT environment variable specifies defaults for options like -x.
+
+  The separator for revision ranges has been changed from `-' to `:', because
+  the range `A-B' is ambiguous if `A', `B' and `A-B' are all symbolic names.
+  E.g. the old `rlog -r1.5-1.7' is now `rlog -r1.5:1.7'; ditto for `rcs -o'.
+  For a while RCS will still support (but warn about) the old `-' separator.
+
+  RCS manipulates its lock files using a method that is more reliable under NFS.
+
+  Experimental support for MS-DOS and OS/2 is available as part of a separate
+  software distribution.
+
+
+Features new to RCS version 5 include:
+
+  RCS can check in arbitrary files, not just text files, if diff -a works.
+  RCS can merge lines containing just a single `.' if diff3 -m works.
+  GNU diff supports the -a and -m options.
+
+  RCS can now be used as a setuid program.
+  See ci(1) for how users can employ setuid copies of ci, co, and rcsclean.
+  Setuid privileges yield extra security if the effective user owns RCS files
+  and directories, and if only the effective user can write RCS directories.
+  RCS uses the real user for all accesses other than writing RCS directories.
+  As described in ci(1), there are three levels of setuid support.
+
+    1.  Setuid works fully if the seteuid() system call lets any
+    process switch back and forth between real and effective users,
+    as specified in Posix 1003.1a Draft 5.
+
+    2.  On hosts with saved setuids (a Posix 1003.1-1990 option) and without
+    a modern seteuid(), setuid works unless the real or effective user is root.
+
+    3.  On hosts that lack both modern seteuid() and saved setuids,
+    setuid does not work, and RCS uses the effective user for all accesses;
+    formerly it was inconsistent.
+
+  New options to co, rcsdiff, and rcsmerge give more flexibility to keyword
+  substitution.
+
+    -kkv substitutes the default `$Keyword: value $' for keyword strings.
+    However, a locker's name is inserted only as a file is being locked,
+    i.e. by `ci -l' and `co -l'.  This is normally the default.
+
+    -kkvl acts like -kkv, except that a locker's name is always inserted
+    if the given revision is currently locked.  This was the default in
+    version 4.  It is now the default only with when using rcsdiff to
+    compare a revision to a working file whose mode is that of a file
+    checked out for changes.
+
+    -kk substitutes just `$Keyword$', which helps to ignore keyword values
+    when comparing revisions.
+
+    -ko retrieves the old revision's keyword string, thus bypassing keyword
+    substitution.
+
+    -kv retrieves just `value'.  This can ease the use of keyword values, but
+    it is dangerous because it causes RCS to lose track of where the keywords
+    are, so for safety the owner write permission of the working file is
+    turned off when -kv is used; to edit the file later, check it out again
+    without -kv.
+
+  rcs -ko sets the default keyword substitution to be in the style of co -ko,
+  and similarly for the other -k options.  This can be useful with binary file
+  formats that cannot tolerate changing the lengths of keyword strings.
+  However it also renders a RCS file readable only by RCS version 5 or later.
+  Use rcs -kkv to restore the usual default substitution.
+
+  RCS can now be used by development groups that span timezone boundaries.
+  All times are now displayed in GMT, and GMT is the default timezone.
+  To use local time with co -d, append ` LT' to the time.
+  When interchanging RCS files with sites running older versions of RCS,
+  time stamp discrepancies may prevent checkins; to work around this,
+  use `ci -d' with a time slightly in the future.
+
+  Dates are now displayed using four-digit years, not two-digit years.
+  Years given in -d options must now have four digits.
+  This change is required for RCS to continue to work after 1999/12/31.
+  The form of dates in version 5 RCS files will not change until 2000/01/01,
+  so in the meantime RCS files can still be interchanged with sites
+  running older versions of RCS.  To make room for the longer dates,
+  rlog now outputs `lines: +A -D' instead of `lines added/del: A/D'.
+
+  To help prevent diff programs that are broken or have run out of memory
+  from trashing an RCS file, ci now checks diff output more carefully.
+
+  ci -k now handles the Log keyword, so that checking in a file
+  with -k does not normally alter the file's contents.
+
+  RCS no longer outputs white space at the ends of lines
+  unless the original working file had it.
+  For consistency with other keywords,
+  a space, not a tab, is now output after `$Log:'.
+  Rlog now puts lockers and symbolic names on separate lines in the output
+  to avoid generating lines that are too long.
+  A similar fix has been made to lists in the RCS files themselves.
+
+  RCS no longer outputs the string `Locker: ' when expanding Header or Id
+  keywords.  This saves space and reverts back to version 3 behavior.
+
+  The default branch is not put into the RCS file unless it is nonempty.
+  Therefore, files generated by RCS version 5 can be read by RCS version 3
+  unless they use the default branch feature introduced in version 4.
+  This fixes a compatibility problem introduced by version 4.
+
+  RCS can now emulate older versions of RCS; see `co -V'.
+  This may be useful to overcome compatibility problems
+  due to the above changes.
+
+  Programs like Emacs can now interact with RCS commands via a pipe:
+  the new -I option causes ci, co, and rcs to run interactively,
+  even if standard input is not a terminal.
+  These commands now accept multiple inputs from stdin separated by `.' lines.
+
+  ci now silently ignores the -t option if the RCS file already exists.
+  This simplifies some shell scripts and improves security in setuid sites.
+
+  Descriptive text may be given directly in an argument of the form -t-string.
+
+  The character set for symbolic names has been upgraded
+  from Ascii to ISO 8859.
+
+  rcsdiff now passes through all options used by GNU diff;
+  this is a longer list than 4.3BSD diff.
+
+  merge's new -L option gives tags for merge's overlap report lines.
+  This ability used to be present in a different, undocumented form;
+  the new form is chosen for compatibility with GNU diff3's -L option.
+
+  rcsmerge and merge now have a -q option, just like their siblings do.
+
+  RCS now attempts to ignore parts of an RCS file that look like they come
+  from a future version of RCS.
+
+  When properly configured, RCS now strictly conforms with Posix 1003.1-1990.
+  RCS can still be compiled in non-Posix traditional Unix environments,
+  and can use common BSD and USG extensions to Posix.
+  RCS is a conforming Standard C program, and also compiles under traditional C.
+
+  Arbitrary limits on internal table sizes have been removed.
+  The only limit now is the amount of memory available via malloc().
+
+  File temporaries, lock files, signals, and system call return codes
+  are now handled more cleanly, portably, and quickly.
+  Some race conditions have been removed.
+
+  A new compile-time option RCSPREFIX lets administrators avoid absolute path
+  names for subsidiary programs, trading speed for flexibility.
+
+  The configuration procedure is now more automatic.
+
+  Snooping has been removed.
+
+
+Version 4 was the first version distributed by FSF.
+Beside bug fixes, features new to RCS version 4 include:
+
+  The notion of default branch has been added; see rcs -b.
+
+
+Version 3 was included in the 4.3BSD distribution.
+
+
+Further projects:
+
+  Add format options for finer control over the output of ident and rlog.
+
+  Be able to redo the most recent checkin with minor changes.
+
+  Add a `-' option to take the list of pathnames from standard input.
+  Perhaps the pathnames should be null-terminated, not newline-terminated,
+  so that pathnames that contain newlines are handled properly.
+
+  Add general options so that rcsdiff and rcsmerge can pass arbitrary options
+  to its subsidiary co and diff processes.  E.g.
+
+       -.OPTION to pass OPTION to the subsidiary `co'
+       -/OPTION to pass OPTION to the subsidiary `diff' (for rcsdiff only)
+
+  For example:
+
+       rcsdiff -.-d"1991/02/09 18:09" -.-sRel -/+unified -/-C -/5 -/-d foo.c
+
+  invokes `co -d"1991/02/09 18:09" -sRel ...' and `diff +unified -C 5 -d ...'.
+  To pass an option to just one subsidiary `co', put the -. option
+  after the corresponding -r option.  For example:
+
+       rcsmerge -r1.4 -.-ko -r1.8 -.-kkv foo.c
+
+  passes `-ko' to the first subsidiary `co', and `-kkv' to the second one.
+
+
+  Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b.
+
+  Add ways to specify the earliest revision, the most recent revision,
+  the earliest or latest revision on a particular branch, and
+  the parent or child of some other revision.
+
+  If a user has multiple locks, perhaps ci should fall back on ci -k's
+  method to figure out which revision to use.
+
+  Symbolic names need not refer to existing branches and revisions.
+  rcs(1)'s BUGS section says this is a bug.  Is it?  If so, it should be fixed.
+
+  Write an rcsck program that repairs corrupted RCS files,
+  much as fsck repairs corrupted file systems.
+
+  Clean up the source code with a consistent indenting style.
+
+  Update the date parser to use the more modern getdate.y by Bellovin,
+  Salz, and Berets, or the even more modern getdate by Moraes.  None of
+  these getdate implementations are as robust as RCS's old warhorse in
+  avoiding problems like arithmetic overflow, so they'll have to be
+  fixed first.
+
+  Break up the code into a library so that it's easier to write new programs
+  that manipulate RCS files, and so that useless code is removed from the
+  existing programs.  For example, the rcs command contains unnecessary
+  keyword substitution baggage, and the merge command can be greatly pruned.
+
+  Make it easier to use your favorite text editor to edit log messages,
+  etc. instead of having to type them in irretrievably at the terminal.
+
+The following projects require a change to RCS file format,
+and thus must wait until at least RCS version 6.
+
+  Be able to store RCS files in compressed format.
+  Don't bother to use a .Z extension that would exceed file name length limits;
+  just look at the magic number.
+
+  Add locker commentary, e.g. `co -l -m"checkout to fix merge bug" foo'
+  to tell others why you checked out `foo'.
+  Also record the time when the revision was locked,
+  and perhaps the working pathname (if applicable).
+
+  Let the user mark an RCS revision as deleted; checking out such a revision
+  would result in no working file.  Similarly, using `co -d' with a date either
+  before the initial revision or after the file was marked deleted should
+  remove the working file.  For extra credit, extend the notion of `deleted' to
+  include `renamed'.  RCS should support arbitrary combinations of renaming and
+  deletion, e.g. renaming A to B and B to A, checking in new revisions to both
+  files, and then renaming them back.
+
+  Use a better scheme for locking revisions; the current scheme requires
+  changing the RCS file just to lock or unlock a revision.
+  The new scheme should coexist as well as possible with older versions of RCS,
+  and should avoid the rare NFS bugs mentioned in rcsedit.c.
+
+  Add rcs options for changing keyword names, e.g. XConsortium instead of Id.
+
+  Add frozen branches a la SCCS.  In general, be able to emulate all of
+  SCCS, so that an SCCS-to-RCS program can be practical.
+
+  Add support for distributed RCS, where widely separated
+  users cannot easily access each others' RCS files,
+  and must periodically distribute and reconcile new revisions.
+
+  Be able to create empty branches.
+
+  Improve RCS's method for storing binary files.
+  Although it is more efficient than SCCS's,
+  the diff algorithm is still line oriented,
+  and often generates long output for minor changes to an executable file.
+
+  Add a new `-kb' expansion for binary files on non-Posix hosts
+  that distinguish between text and binary I/O.
+  The current `text_work_stdio' compile-time switch is too inflexible.
+  This fix either requires nonstandard primitives like DOS's setmode(),
+  or requires that `-kb' be specified on initial checkin and never changed.
+  From the user's point of view, it would be best if
+  RCS detected and handled binary files without human intervention,
+  switching expansion methods as needed from revision to revision.
+
+  Extend the grammar of RCS files so that keywords need not be in a fixed order.
+
+  Internationalize messages; unfortunately, there's no common standard yet.
+  This requires a change in RCS file format because of the
+  `empty log message' and `checked in with -k' hacks inside RCS files.
+
+
+Credits:
+
+  RCS was designed and built by Walter F. Tichy of Purdue University.
+  RCS version 3 was released in 1983.
+
+  Adam Hammer, Thomas Narten, and Dan Trinkle of Purdue supported RCS through
+  version 4.3, released in 1990.  Guy Harris of Sun contributed many porting
+  fixes.  Paul Eggert of System Development Corporation contributed bug fixes
+  and tuneups.  Jay Lepreau contributed 4.3BSD support.
+
+  Paul Eggert of Twin Sun wrote the changes for RCS version 5, released in 1991.
+  Rich Braun of Kronos and Andy Glew of Intel contributed ideas for new options.
+  Bill Hahn of Stratus contributed ideas for setuid support.
+  Ideas for piece tables came from Joe Berkovitz of Stratus and Walter F. Tichy.
+  Matt Cross of Stratus contributed test case ideas.
+  Adam Hammer of Purdue QAed.
diff --git a/usr/src/contrib/rcs-V5.6/man/ci.1 b/usr/src/contrib/rcs-V5.6/man/ci.1
new file mode 100644 (file)
index 0000000..5736dc9
--- /dev/null
@@ -0,0 +1,772 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: ci.1,v 5.9 1991/10/07 17:32:46 eggert Exp $
+.ds r \&\s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH CI 1 \*(Dt GNU
+.SH NAME
+ci \- check in RCS revisions
+.SH SYNOPSIS
+.B ci
+.RI [ options ] " file " .\|.\|.
+.SH DESCRIPTION
+.B ci
+stores new revisions into \*r files.
+Each pathname matching an \*r suffix
+is taken to be an \*r file.
+All others
+are assumed to be working files containing new revisions.
+.B ci
+deposits the contents of each working file
+into the corresponding \*r file.
+If only a working file is given,
+.B ci
+tries to find the corresponding \*r file in an \*r subdirectory
+and then in the working file's directory.
+For more details, see
+.SM "FILE NAMING"
+below.
+.PP
+For
+.B ci
+to work, the caller's login must be on the access list,
+except if the access list is empty or the caller is the superuser or the
+owner of the file.
+To append a new revision to an existing branch, the tip revision on
+that branch must be locked by the caller.  Otherwise, only a
+new branch can be created.  This restriction is not enforced
+for the owner of the file if non-strict locking is used
+(see
+.BR rcs (1)).
+A lock held by someone else may be broken with the
+.B rcs
+command.
+.PP
+Unless the
+.B \-f
+option is given,
+.B ci
+checks whether the revision to be deposited differs from the preceding one.
+If not, instead of creating a new revision
+.B ci
+reverts to the preceding one.
+To revert, ordinary
+.B ci
+removes the working file and any lock;
+.B "ci\ \-l"
+keeps and
+.B "ci\ \-u"
+removes any lock, and then they both generate a new working file much as if
+.B "co\ \-l"
+or
+.B "co\ \-u"
+had been applied to the preceding revision.
+When reverting, any
+.B \-n
+and
+.B \-s
+options apply to the preceding revision.
+.PP
+For each revision deposited,
+.B ci
+prompts for a log message.
+The log message should summarize the change and must be terminated by
+end-of-file or by a line containing
+.BR \&. "\ by"
+itself.
+If several files are checked in
+.B ci
+asks whether to reuse the
+previous log message.
+If the standard input is not a terminal,
+.B ci
+suppresses the prompt
+and uses the same log message for all files.
+See also
+.BR \-m .
+.PP
+If the \*r file does not exist,
+.B ci
+creates it and
+deposits the contents of the working file as the initial revision
+(default number:
+.BR 1.1 ).
+The access list is initialized to empty.
+Instead of the log message,
+.B ci
+requests descriptive text (see
+.B \-t
+below).
+.PP
+The number
+.I rev
+of the deposited revision can be given by any of the options
+.BR \-f ,
+.BR \-I ,
+.BR \-k ,
+.BR \-l ,
+.BR \-M ,
+.BR \-q ,
+.BR \-r ,
+or
+.BR \-u .
+.I rev
+may be symbolic, numeric, or mixed.
+If
+.I rev
+is
+.BR $ ,
+.B ci
+determines the revision number from keyword values in the working file.
+.PP
+If
+.I rev
+is a revision number, it must be higher than the latest
+one on the branch to which
+.I rev
+belongs, or must start a new branch.
+.PP
+If
+.I rev
+is a branch rather than a revision number,
+the new revision is appended to that branch.  The level number is obtained
+by incrementing the tip revision number of that branch.
+If
+.I rev
+indicates a non-existing branch,
+that branch is created with the initial revision numbered
+.IB rev .1\f1.\fP
+.br
+.ne 8
+.PP
+If
+.I rev
+is omitted,
+.B ci
+tries to derive the new revision number from
+the caller's last lock.  If the caller has locked the tip revision of a branch,
+the new revision is appended to that branch.
+The new revision number is obtained
+by incrementing the tip revision number.
+If the caller locked a non-tip revision, a new branch is started at
+that revision by incrementing the highest branch number at that revision.
+The default initial branch and level numbers are
+.BR 1 .
+.PP
+If
+.I rev
+is omitted and the caller has no lock, but owns
+the file and locking
+is not set to
+.IR strict ,
+then the revision is appended to the
+default branch (normally the trunk; see the
+.B \-b
+option of
+.BR rcs (1)).
+.PP
+Exception: On the trunk, revisions can be appended to the end, but
+not inserted.
+.SH OPTIONS
+.TP
+.BR \-r [\f2rev\fP]
+checks in a revision, releases the corresponding lock, and
+removes the working file.  This is the default.
+.RS
+.PP
+The
+.B \-r
+option has an unusual meaning in
+.BR ci .
+In other \*r commands,
+.B \-r
+merely specifies a revision number,
+but in
+.B ci
+it also releases a lock and removes the working file.
+See
+.B \-u
+for a tricky example.
+.RE
+.TP
+.BR \-l [\f2rev\fP]
+works like
+.BR \-r ,
+except it performs an additional
+.B "co\ \-l"
+for the
+deposited revision.  Thus, the deposited revision is immediately
+checked out again and locked.
+This is useful for saving a revision although one wants to continue
+editing it after the checkin.
+.TP
+.BR \-u [\f2rev\fP]
+works like
+.BR \-l ,
+except that the deposited revision is not locked.
+This lets one read the working file
+immediately after checkin.
+.RS
+.PP
+The
+.BR \-l ,
+.BR \-r ,
+and
+.B \-u
+options are mutually exclusive and silently override each other.
+For example,
+.B "ci\ \-u\ \-r"
+is equivalent to
+.B "ci\ \-r"
+because
+.B \-r
+overrides
+.BR \-u .
+.RE
+.TP
+.BR \-f [\f2rev\fP]
+forces a deposit; the new revision is deposited even it is not different
+from the preceding one.
+.TP
+.BR \-k [\f2rev\fP]
+searches the working file for keyword values to determine its revision number,
+creation date, state, and author (see
+.BR co (1)),
+and assigns these
+values to the deposited revision, rather than computing them locally.
+It also generates a default login message noting the login of the caller
+and the actual checkin date.
+This option is useful for software distribution.  A revision that is sent to
+several sites should be checked in with the
+.B \-k
+option at these sites to
+preserve the original number, date, author, and state.
+The extracted keyword values and the default log message may be overridden
+with the options
+.BR \-d ,
+.BR \-m ,
+.BR \-s ,
+.BR \-w ,
+and any option that carries a revision number.
+.TP
+.BR \-q [\f2rev\fP]
+quiet mode; diagnostic output is not printed.
+A revision that is not different from the preceding one is not deposited,
+unless
+.B \-f
+is given.
+.TP
+.BR \-I [\f2rev\fP]
+interactive mode;
+the user is prompted and questioned
+even if the standard input is not a terminal.
+.TP
+.BR \-d "[\f2date\fP]"
+uses
+.I date
+for the checkin date and time.
+The
+.I date
+is specified in free format as explained in
+.BR co (1).
+This is useful for lying about the checkin date, and for
+.B \-k
+if no date is available.
+If
+.I date
+is empty, the working file's time of last modification is used.
+.TP
+.BR \-M [\f2rev\fP]
+Set the modification time on any new working file
+to be the date of the retrieved revision.
+For example,
+.BI "ci\ \-d\ \-M\ \-u" "\ f"
+does not alter
+.IR f 's
+modification time, even if
+.IR f 's
+contents change due to keyword substitution.
+Use this option with care; it can confuse
+.BR make (1).
+.TP
+.BI \-m "msg"
+uses the string
+.I msg
+as the log message for all revisions checked in.
+.TP
+.BI \-n "name"
+assigns the symbolic name
+.I name
+to the number of the checked-in revision.
+.B ci
+prints an error message if
+.I name
+is already assigned to another
+number.
+.TP
+.BI \-N "name"
+same as
+.BR \-n ,
+except that it overrides a previous assignment of
+.IR name .
+.TP
+.BI \-s "state"
+sets the state of the checked-in revision to the identifier
+.IR state .
+The default state is
+.BR Exp .
+.TP
+.BI \-t file
+writes descriptive text from the contents of the named
+.I file
+into the \*r file,
+deleting the existing text.
+The
+.I file
+may not begin with
+.BR \- .
+.TP
+.BI \-t\- string
+Write descriptive text from the
+.I string
+into the \*r file, deleting the existing text.
+.RS
+.PP
+The
+.B \-t
+option, in both its forms, has effect only during an initial checkin;
+it is silently ignored otherwise.
+.PP
+During the initial checkin, if
+.B \-t
+is not given,
+.B ci
+obtains the text from standard input,
+terminated by end-of-file or by a line containing
+.BR \&. "\ by"
+itself.
+The user is prompted for the text if interaction is possible; see
+.BR \-I .
+.PP
+For backward compatibility with older versions of \*r, a bare
+.B \-t
+option is ignored.
+.RE
+.TP
+.BI \-w "login"
+uses
+.I login
+for the author field of the deposited revision.
+Useful for lying about the author, and for
+.B \-k
+if no author is available.
+.TP
+.BI \-V n
+Emulate \*r version
+.IR n .
+See
+.BR co (1)
+for details.
+.TP
+.BI \-x "suffixes"
+specifies the suffixes for \*r files.
+A nonempty suffix matches any pathname ending in the suffix.
+An empty suffix matches any pathname of the form
+.BI RCS/ file
+or
+.IB path /RCS/ file.
+The
+.B \-x
+option can specify a list of suffixes
+separated by
+.BR / .
+For example,
+.B \-x,v/
+specifies two suffixes:
+.B ,v
+and the empty suffix.
+If two or more suffixes are specified,
+they are tried in order when looking for an \*r file;
+the first one that works is used for that file.
+If no \*r file is found but an \*r file can be created,
+the suffixes are tried in order
+to determine the new \*r file's name.
+The default for
+.IR suffixes
+is installation-dependent; normally it is
+.B ,v/
+for hosts like Unix that permit commas in file names,
+and is empty (i.e. just the empty suffix) for other hosts.
+.SH "FILE NAMING"
+Pairs of \*r files and working files may be specified in three ways
+(see also the
+example section).
+.PP
+1) Both the \*r file and the working file are given.  The \*r pathname is of
+the form
+.IB path1 / workfileX
+and the working pathname is of the form
+.IB path2 / workfile
+where
+.IB path1 /
+and
+.IB path2 /
+are (possibly different or empty) paths,
+.I workfile
+is a filename, and
+.I X
+is an \*r suffix.
+If
+.I X
+is empty,
+.IB path1 /
+must be
+.B RCS/
+or must end in
+.BR /RCS/ .
+.PP
+2) Only the \*r file is given.  Then the working file is created in the current
+directory and its name is derived from the name of the \*r file
+by removing
+.IB path1 /
+and the suffix
+.IR X .
+.PP
+3) Only the working file is given.
+Then
+.B ci
+considers each \*r suffix
+.I X
+in turn, looking for an \*r file of the form
+.IB path2 /RCS/ workfileX
+or (if the former is not found and
+.I X
+is nonempty)
+.IB path2 / workfileX.
+.PP
+If the \*r file is specified without a path in 1) and 2),
+.B ci
+looks for the \*r file first in the directory
+.B ./RCS
+and then in the current
+directory.
+.PP
+.B ci
+reports an error if an attempt to open an \*r file fails for an unusual reason,
+even if the \*r file's pathname is just one of several possibilities.
+For example, to suppress use of \*r commands in a directory
+.IR d ,
+create a regular file named
+.IB d /RCS
+so that casual attempts to use \*r commands in
+.I d
+fail because
+.IB d /RCS
+is not a directory.
+.SH EXAMPLES
+Suppose
+.B ,v
+is an \*r suffix and the current directory contains a subdirectory
+.B RCS
+with an \*r file
+.BR io.c,v .
+Then each of the following commands check in a copy of
+.B io.c
+into
+.B RCS/io.c,v
+as the latest revision, removing
+.BR io.c .
+.LP
+.RS
+.nf
+.ft 3
+ci  io.c;    ci  RCS/io.c,v;   ci  io.c,v;
+ci  io.c  RCS/io.c,v;    ci  io.c  io.c,v;
+ci  RCS/io.c,v  io.c;    ci  io.c,v  io.c;
+.ft
+.fi
+.RE
+.PP
+Suppose instead that the empty suffix
+is an \*r suffix and the current directory contains a subdirectory
+.B RCS
+with an \*r file
+.BR io.c .
+The each of the following commands checks in a new revision.
+.LP
+.RS
+.nf
+.ft 3
+ci  io.c;    ci  RCS/io.c;
+ci  io.c  RCS/io.c;
+ci  RCS/io.c  io.c;
+.ft
+.fi
+.RE
+.SH "FILE MODES"
+An \*r file created by
+.B ci
+inherits the read and execute permissions
+from the working file.  If the \*r file exists already,
+.B ci
+preserves its read and execute permissions.
+.B ci
+always turns off all write permissions of \*r files.
+.SH FILES
+Several temporary files may be created in the directory containing
+the working file, and also in the temporary directory (see
+.B \s-1TMPDIR\s0
+under
+.BR \s-1ENVIRONMENT\s0 ).
+A semaphore file or files are created in the directory containing the \*r file.
+With a nonempty suffix, the semaphore names begin with
+the first character of the suffix; therefore, do not specify an suffix
+whose first character could be that of a working filename.
+With an empty suffix, the semaphore names end with
+.B _
+so working filenames should not end in
+.BR _ .
+.PP
+.B ci
+never changes an \*r or working file.
+Normally,
+.B ci
+unlinks the file and creates a new one;
+but instead of breaking a chain of one or more symbolic links to an \*r file,
+it unlinks the destination file instead.
+Therefore,
+.B ci
+breaks any hard or symbolic links to any working file it changes;
+and hard links to \*r files are ineffective,
+but symbolic links to \*r files are preserved.
+.PP
+The effective user must be able to
+search and write the directory containing the \*r file.
+Normally, the real user must be able to
+read the \*r and working files
+and to search and write the directory containing the working file;
+however, some older hosts
+cannot easily switch between real and effective users,
+so on these hosts the effective user is used for all accesses.
+The effective user is the same as the real user
+unless your copies of
+.B ci
+and
+.B co
+have setuid privileges.
+As described in the next section,
+these privileges yield extra security if
+the effective user owns all \*r files and directories,
+and if only the effective user can write \*r directories.
+.PP
+Users can control access to \*r files by setting the permissions
+of the directory containing the files; only users with write access
+to the directory can use \*r commands to change its \*r files.
+For example, in hosts that allow a user to belong to several groups,
+one can make a group's \*r directories writable to that group only.
+This approach suffices for informal projects,
+but it means that any group member can arbitrarily change the group's \*r files,
+and can even remove them entirely.
+Hence more formal projects sometimes distinguish between an \*r administrator,
+who can change the \*r files at will, and other project members,
+who can check in new revisions but cannot otherwise change the \*r files.
+.SH "SETUID USE"
+To prevent anybody but their \*r administrator from deleting revisions,
+a set of users can employ setuid privileges as follows.
+.nr n \w'\(bu '+1n-1/1n
+.IP \(bu \nn
+Check that the host supports \*r setuid use.
+Consult a trustworthy expert if there are any doubts.
+It is best if the
+.B seteuid()
+system call works as described in Posix 1003.1a Draft 5,
+because \*r can switch back and forth easily
+between real and effective users, even if the real user is
+.BR root .
+If not, the second best is if the
+.B setuid()
+system call supports saved setuid
+(the {\s-1_POSIX_SAVED_IDS\s0} behavior of Posix 1003.1-1990);
+this fails only if the real user is
+.BR root .
+If \*r detects any failure in setuid, it quits immediately.
+.IP \(bu \nn
+Choose a user
+.I A
+to serve as \*r administrator for the set of users.
+Only
+.I A
+will be able to invoke the
+.B rcs
+command on the users' \*r files.
+.I A
+should not be
+.B root
+or any other user with special powers.
+Mutually suspicious sets of users should use different administrators.
+.IP \(bu \nn
+Choose a path name
+.I B
+that will be a directory of files to be executed by the users.
+.IP \(bu \nn
+Have
+.I A
+set up
+.I B
+to contain copies of
+.B ci
+and
+.B co
+that are setuid to
+.I A
+by copying the commands from their standard installation directory
+.I D
+as follows:
+.LP
+.RS
+.nf
+.ne 3
+\f3mkdir\fP  \f2B\fP
+\f3cp\fP  \f2D\fP\^\f3/c[io]\fP  \f2B\fP
+\f3chmod  go\-w,u+s\fP  \f2B\fP\f3/c[io]\fP
+.fi
+.RE
+.IP \(bu \nn
+Have each user prepend
+.I B
+to their path as follows:
+.LP
+.RS
+.nf
+.ne 2
+\f3PATH=\fP\f2B\fP\f3:$PATH;  export  PATH\fP  # ordinary shell
+\f3set  path=(\fP\f2B\fP  \f3$path)\fP  # C shell
+.fi
+.RE
+.IP \(bu \nn
+Have
+.I A
+create each \*r directory
+.I R
+with write access only to
+.I A
+as follows:
+.LP
+.RS
+.nf
+.ne 2
+\f3mkdir\fP  \f2R\fP
+\f3chmod  go\-w\fP  \f2R\fP
+.fi
+.RE
+.IP \(bu \nn
+If you want to let only certain users read the \*r files,
+put the users into a group
+.IR G ,
+and have
+.I A
+further protect the \*r directory as follows:
+.LP
+.RS
+.nf
+.ne 2
+\f3chgrp\fP  \f2G  R\fP
+\f3chmod  g\-w,o\-rwx\fP  \f2R\fP
+.fi
+.RE
+.IP \(bu \nn
+Have
+.I A
+copy old \*r files (if any) into
+.IR R ,
+to ensure that
+.I A
+owns them.
+.IP \(bu \nn
+An \*r file's access list limits who can check in and lock revisions.
+The default access list is empty,
+which grants checkin access to anyone who can read the \*r file.
+If you want limit checkin access,
+have
+.I A
+invoke
+.B "rcs\ \-a"
+on the file; see
+.BR rcs (1).
+In particular,
+.BI "rcs\ \-e\ \-a" A
+limits access to just
+.IR A .
+.IP \(bu \nn
+Have
+.I A
+initialize any new \*r files with
+.B "rcs\ \-i"
+before initial checkin, adding the
+.B \-a
+option if you want to limit checkin access.
+.IP \(bu \nn
+Give setuid privileges only to
+.BR ci ,
+.BR co ,
+and
+.BR rcsclean ;
+do not give them to
+.B rcs
+or to any other command.
+.IP \(bu \nn
+Do not use other setuid commands to invoke \*r commands;
+setuid is trickier than you think!
+.SH ENVIRONMENT
+.TP
+.B \s-1RCSINIT\s0
+options prepended to the argument list, separated by spaces.
+A backslash escapes spaces within an option.
+The
+.B \s-1RCSINIT\s0
+options are prepended to the argument lists of most \*r commands.
+Useful
+.B \s-1RCSINIT\s0
+options include
+.BR \-q ,
+.BR \-V ,
+and
+.BR \-x .
+.TP
+.B \s-1TMPDIR\s0
+Name of the temporary directory.
+If not set, the environment variables
+.B \s-1TMP\s0
+and
+.B \s-1TEMP\s0
+are inspected instead and the first value found is taken;
+if none of them are set,
+a host-dependent default is used, typically
+.BR /tmp .
+.SH DIAGNOSTICS
+For each revision,
+.B ci
+prints the \*r file, the working file, and the number
+of both the deposited and the preceding revision.
+The exit status is zero if and only if all operations were successful.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH "SEE ALSO"
+co(1), ident(1), make(1), rcs(1), rcsclean(1), rcsdiff(1),
+rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
+.br
diff --git a/usr/src/contrib/rcs-V5.6/man/co.1 b/usr/src/contrib/rcs-V5.6/man/co.1
new file mode 100644 (file)
index 0000000..d9ce65e
--- /dev/null
@@ -0,0 +1,569 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: co.1,v 5.7 1991/08/19 03:13:55 eggert Exp $
+.ds g \&\s-1UTC\s0
+.ds r \&\s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH CO 1 \*(Dt GNU
+.SH NAME
+co \- check out RCS revisions
+.SH SYNOPSIS
+.B co
+.RI [ options ] " file " .\|.\|.
+.SH DESCRIPTION
+.B co
+retrieves a revision from each \*r file and stores it into
+the corresponding working file.
+.PP
+Pathnames matching an \*r suffix denote \*r files;
+all others denote working files.
+Names are paired as explained in
+.BR ci (1).
+.PP
+Revisions of an \*r file may be checked out locked or unlocked.  Locking a
+revision prevents overlapping updates.  A revision checked out for reading or
+processing (e.g., compiling) need not be locked.  A revision checked out
+for editing and later checkin must normally be locked.  Checkout with locking
+fails if the revision to be checked out is currently locked by another user.
+(A lock may be broken with
+.BR rcs "(1).)\ \&"
+Checkout with locking also requires the caller to be on the access list of
+the \*r file, unless he is the owner of the
+file or the superuser, or the access list is empty.
+Checkout without locking is not subject to accesslist restrictions, and is
+not affected by the presence of locks.
+.PP
+A revision is selected by options for revision or branch number,
+checkin date/time, author, or state.
+When the selection options
+are applied in combination,
+.B co
+retrieves the latest revision
+that satisfies all of them.
+If none of the selection options
+is specified,
+.B co
+retrieves the latest revision
+on the default branch (normally the trunk, see the
+.B \-b
+option of
+.BR rcs (1)).
+A revision or branch number may be attached
+to any of the options
+.BR \-f ,
+.BR \-I ,
+.BR \-l ,
+.BR \-M ,
+.BR \-p ,
+.BR \-q ,
+.BR \-r ,
+or
+.BR \-u .
+The options
+.B \-d
+(date),
+.B \-s
+(state), and
+.B \-w
+(author)
+retrieve from a single branch, the
+.I selected
+branch,
+which is either specified by one of
+.BR \-f,
+\&.\|.\|.,
+.BR \-u ,
+or the default branch.
+.PP
+A
+.B co
+command applied to an \*r
+file with no revisions creates a zero-length working file.
+.B co
+always performs keyword substitution (see below).
+.SH OPTIONS
+.TP
+.BR \-r [\f2rev\fP]
+retrieves the latest revision whose number is less than or equal to
+.I rev.
+If
+.I rev
+indicates a branch rather than a revision,
+the latest revision on that branch is retrieved.
+If
+.I rev
+is omitted, the latest revision on the default branch
+(see the
+.B \-b
+option of
+.BR rcs (1))
+is retrieved.
+If
+.I rev
+is
+.BR $ ,
+.B co
+determines the revision number from keyword values in the working file.
+Otherwise, a revision is composed of one or more numeric or symbolic fields
+separated by periods.  The numeric equivalent of a symbolic field
+is specified with the
+.B \-n
+option of the commands
+.BR ci (1)
+and
+.BR rcs (1).
+.TP
+.BR \-l [\f2rev\fP]
+same as
+.BR \-r ,
+except that it also locks the retrieved revision for
+the caller.
+.TP
+.BR \-u [\f2rev\fP]
+same as
+.BR \-r ,
+except that it unlocks the retrieved revision if it was
+locked by the caller.  If
+.I rev
+is omitted,
+.B \-u
+retrieves the revision locked by the caller, if there is one; otherwise,
+it retrieves the latest revision on the default branch.
+.TP
+.BR \-f [\f2rev\fP]
+forces the overwriting of the working file;
+useful in connection with
+.BR \-q .
+See also
+.SM "FILE MODES"
+below.
+.TP
+.B \-kkv
+Generate keyword strings using the default form, e.g.\&
+.B "$\&Revision: \*(Rv $"
+for the
+.B Revision
+keyword.
+A locker's name is inserted in the value of the
+.BR Header ,
+.BR Id ,
+and
+.B Locker
+keyword strings
+only as a file is being locked,
+i.e. by
+.B "ci\ \-l"
+and
+.BR "co\ \-l".
+This is the default.
+.TP
+.B \-kkvl
+Like
+.BR \-kkv ,
+except that a locker's name is always inserted
+if the given revision is currently locked.
+.TP
+.BR \-kk
+Generate only keyword names in keyword strings; omit their values.
+See
+.SM "KEYWORD SUBSTITUTION"
+below.
+For example, for the
+.B Revision
+keyword, generate the string
+.B $\&Revision$
+instead of
+.BR "$\&Revision: \*(Rv $".
+This option is useful to ignore differences due to keyword substitution
+when comparing different revisions of a file.
+.TP
+.BR \-ko
+Generate the old keyword string,
+present in the working file just before it was checked in.
+For example, for the
+.B Revision
+keyword, generate the string
+.B "$\&Revision: 1.1 $"
+instead of
+.B "$\&Revision: \*(Rv $"
+if that is how the string appeared when the file was checked in.
+This can be useful for binary file formats
+that cannot tolerate any changes to substrings
+that happen to take the form of keyword strings.
+.TP
+.BR \-kv
+Generate only keyword values for keyword strings.
+For example, for the
+.B Revision
+keyword, generate the string
+.B \*(Rv
+instead of
+.BR "$\&Revision: \*(Rv $".
+This can help generate files in programming languages where it is hard to
+strip keyword delimiters like
+.B "$\&Revision:\ $"
+from a string.
+However, further keyword substitution cannot be performed once the
+keyword names are removed, so this option should be used with care.
+Because of this danger of losing keywords,
+this option cannot be combined with
+.BR \-l ,
+and the owner write permission of the working file is turned off;
+to edit the file later, check it out again without
+.BR \-kv .
+.TP
+.BR \-p [\f2rev\fP]
+prints the retrieved revision on the standard output rather than storing it
+in the working file.
+This option is useful when
+.B co
+is part of a pipe.
+.TP
+.BR \-q [\f2rev\fP]
+quiet mode; diagnostics are not printed.
+.TP
+.BR \-I [\f2rev\fP]
+interactive mode;
+the user is prompted and questioned
+even if the standard input is not a terminal.
+.TP
+.BI \-d date
+retrieves the latest revision on the selected branch whose checkin date/time is
+less than or equal to
+.I date.
+The date and time may be given in free format.
+The time zone
+.B LT
+stands for local time;
+other common time zone names are understood.
+For example, the following
+.IR date s
+are equivalent
+if local time is January 11, 1990, 8pm Pacific Standard Time,
+eight hours west of Coordinated Universal Time (\*g):
+.RS
+.LP
+.RS
+.nf
+.ta \w'\f3Thu, 11 Jan 1990 20:00:00 \-0800\fP  'u
+.ne 9
+\f38:00 pm lt\fP
+\f34:00 AM, Jan. 12, 1990\fP   note: default is \*g
+\f31990/01/12 04:00:00\fP      \*r date format
+\f3Thu Jan 11 20:00:00 1990 LT\fP      output of \f3ctime\fP(3) + \f3LT\fP
+\f3Thu Jan 11 20:00:00 PST 1990\fP     output of \f3date\fP(1)
+\f3Fri Jan 12 04:00:00 GMT 1990\fP
+\f3Thu, 11 Jan 1990 20:00:00 \-0800\fP
+\f3Fri-JST, 1990, 1pm Jan 12\fP
+\f312-January-1990, 04:00-WET\fP
+.ta 4n +4n +4n +4n
+.fi
+.RE
+.LP
+Most fields in the date and time may be defaulted.
+The default time zone is \*g.
+The other defaults are determined in the order year, month, day,
+hour, minute, and second (most to least significant).  At least one of these
+fields must be provided.  For omitted fields that are of higher significance
+than the highest provided field, the time zone's current values are assumed.
+For all other omitted fields,
+the lowest possible values are assumed.
+For example, the date
+.B "20, 10:30"
+defaults to
+10:30:00 \*g of the 20th of the \*g time zone's current month and year.
+The date/time must be quoted if it contains spaces.
+.RE
+.TP
+.BR \-M [\f2rev\fP]
+Set the modification time on the new working file
+to be the date of the retrieved revision.
+Use this option with care; it can confuse
+.BR make (1).
+.TP
+.BI \-s state
+retrieves the latest revision on the selected branch whose state is set to
+.I state.
+.TP
+.BR \-w [\f2login\fP]
+retrieves the latest revision on the selected branch which was checked in
+by the user with login name
+.I login.
+If the argument
+.I login
+is
+omitted, the caller's login is assumed.
+.TP
+.BI \-j joinlist
+generates a new revision which is the join of the revisions on
+.I joinlist.
+This option is largely obsoleted by
+.BR rcsmerge (1)
+but is retained for backwards compatibility.
+.RS
+.PP
+The
+.I joinlist
+is a comma-separated list of pairs of the form
+.IB rev2 : rev3,
+where
+.I rev2
+and
+.I rev3
+are (symbolic or numeric)
+revision numbers.
+For the initial such pair,
+.I rev1
+denotes the revision selected
+by the above options
+.BR \-f,
+\&.\|.\|.,
+.BR \-w .
+For all other pairs,
+.I rev1
+denotes the revision generated by the previous pair.
+(Thus, the output
+of one join becomes the input to the next.)
+.PP
+For each pair,
+.B co
+joins revisions
+.I rev1
+and
+.I rev3
+with respect to
+.I rev2.
+This means that all changes that transform
+.I rev2
+into
+.I rev1
+are applied to a copy of
+.I rev3.
+This is particularly useful if
+.I rev1
+and
+.I rev3
+are the ends of two branches that have
+.I rev2
+as a common ancestor.  If
+.IR rev1 < rev2 < rev3
+on the same branch,
+joining generates a new revision which is like
+.I rev3,
+but with all changes that lead from
+.I rev1
+to
+.I rev2
+undone.
+If changes from
+.I rev2
+to
+.I rev1
+overlap with changes from
+.I rev2
+to
+.I rev3,
+.B co
+reports overlaps as described in
+.BR merge (1).
+.PP
+For the initial pair,
+.I rev2
+may be omitted.  The default is the common
+ancestor.
+If any of the arguments indicate branches, the latest revisions
+on those branches are assumed.
+The options
+.B \-l
+and
+.B \-u
+lock or unlock
+.I rev1.
+.RE
+.TP
+.BI \-V n
+Emulate \*r version
+.I n,
+where
+.I n
+may be
+.BR 3 ,
+.BR 4 ,
+or
+.BR 5 .
+This may be useful when interchanging \*r files with others who are
+running older versions of \*r.
+To see which version of \*r your correspondents are running, have them invoke
+.B rlog
+on an \*r file;
+if none of the first few lines of output contain the string
+.B branch:
+it is version 3;
+if the dates' years have just two digits, it is version 4;
+otherwise, it is version 5.
+An \*r file generated while emulating version 3 will lose its default branch.
+An \*r revision generated while emulating version 4 or earlier will have
+a timestamp that is off by up to 13 hours.
+A revision extracted while emulating version 4 or earlier will contain
+dates of the form
+.IB yy / mm / dd
+instead of
+.IB yyyy / mm / dd
+and may also contain different white space in the substitution for
+.BR $\&Log$ .
+.TP
+.BI \-x "suffixes"
+Use
+.I suffixes
+to characterize \*r files.
+See
+.BR ci (1)
+for details.
+.SH "KEYWORD SUBSTITUTION"
+Strings of the form
+.BI $ keyword $
+and
+.BI $ keyword : .\|.\|. $
+embedded in
+the text are replaced
+with strings of the form
+.BI $ keyword : value $
+where
+.I keyword
+and
+.I value
+are pairs listed below.
+Keywords may be embedded in literal strings
+or comments to identify a revision.
+.PP
+Initially, the user enters strings of the form
+.BI $ keyword $ .
+On checkout,
+.B co
+replaces these strings with strings of the form
+.BI $ keyword : value $ .
+If a revision containing strings of the latter form
+is checked back in, the value fields will be replaced during the next
+checkout.
+Thus, the keyword values are automatically updated on checkout.
+This automatic substitution can be modified by the
+.B \-k
+options.
+.PP
+Keywords and their corresponding values:
+.TP
+.B $\&Author$
+The login name of the user who checked in the revision.
+.TP
+.B $\&Date$
+The date and time (\*g) the revision was checked in.
+.TP
+.B $\&Header$
+A standard header containing the full pathname of the \*r file, the
+revision number, the date (\*g), the author, the state,
+and the locker (if locked).
+.TP
+.B $\&Id$
+Same as
+.BR $\&Header$ ,
+except that the \*r filename is without a path.
+.TP
+.B $\&Locker$
+The login name of the user who locked the revision (empty if not locked).
+.TP
+.B $\&Log$
+The log message supplied during checkin, preceded by a header
+containing the \*r filename, the revision number, the author, and the date
+(\*g).
+Existing log messages are
+.I not
+replaced.
+Instead, the new log message is inserted after
+.BR $\&Log: .\|.\|. $ .
+This is useful for
+accumulating a complete change log in a source file.
+.TP
+.B $\&RCSfile$
+The name of the \*r file without a path.
+.TP
+.B $\&Revision$
+The revision number assigned to the revision.
+.TP
+.B $\&Source$
+The full pathname of the \*r file.
+.TP
+.B $\&State$
+The state assigned to the revision with the
+.B \-s
+option of
+.BR rcs (1)
+or
+.BR ci (1).
+.SH "FILE MODES"
+The working file inherits the read and execute permissions from the \*r
+file.  In addition, the owner write permission is turned on, unless
+.B \-kv
+is set or the file
+is checked out unlocked and locking is set to strict (see
+.BR rcs (1)).
+.PP
+If a file with the name of the working file exists already and has write
+permission,
+.B co
+aborts the checkout,
+asking beforehand if possible.
+If the existing working file is
+not writable or
+.B \-f
+is given, the working file is deleted without asking.
+.SH FILES
+.B co
+accesses files much as
+.BR ci (1)
+does, except that it does not need to read the working file.
+.SH ENVIRONMENT
+.TP
+.B \s-1RCSINIT\s0
+options prepended to the argument list, separated by spaces.
+See
+.BR ci (1)
+for details.
+.SH DIAGNOSTICS
+The \*r pathname, the working pathname,
+and the revision number retrieved are
+written to the diagnostic output.
+The exit status is zero if and only if all operations were successful.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH "SEE ALSO"
+ci(1), ctime(3), date(1), ident(1), make(1),
+rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1),
+rcsfile(5)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
+.SH LIMITS
+Links to the \*r and working files are not preserved.
+.PP
+There is no way to selectively suppress the expansion of keywords, except
+by writing them differently.  In nroff and troff, this is done by embedding the
+null-character
+.B \e&
+into the keyword.
+.SH BUGS
+The
+.B \-d
+option sometimes gets confused, and accepts no date before 1970.
+.br
diff --git a/usr/src/contrib/rcs-V5.6/man/ident.1 b/usr/src/contrib/rcs-V5.6/man/ident.1
new file mode 100644 (file)
index 0000000..37c8eda
--- /dev/null
@@ -0,0 +1,76 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+.ds iD \\$3 \\$4 \\$5 \\$6 \\$7
+..
+.Id $Id: ident.1,v 5.0 1990/08/22 09:09:36 eggert Exp $
+.ds r \s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH IDENT 1 \*(Dt GNU
+.SH NAME
+ident \- identify files
+.SH SYNOPSIS
+.B ident
+[
+.B \-q
+] [
+.I file
+\&.\|.\|. ]
+.SH DESCRIPTION
+.B ident
+searches for all occurrences of the pattern
+.BI $ keyword : .\|.\|. $
+in the named files or, if no file name appears, the standard input.
+.PP
+These patterns are normally inserted automatically by the \*r command
+.BR co (1),
+but can also be inserted manually.
+The option
+.B \-q
+suppresses
+the warning given if there are no patterns in a file.
+.PP
+.B ident
+works on text files as well as object files and dumps.
+For example, if the C program in
+.B f.c
+contains
+.IP
+\f3char rcsid[] = \&"$\&Id: f.c,v \*(iD $\&";\fP
+.LP
+and
+.B f.c
+is compiled into
+.BR f.o ,
+then the command
+.IP
+.B "ident  f.c  f.o"
+.LP
+will output
+.nf
+.IP
+.ft 3
+f.c:
+    $\&Id: f.c,v \*(iD $
+f.o:
+    $\&Id: f.c,v \*(iD $
+.ft
+.fi
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990 by Paul Eggert.
+.SH "SEE ALSO"
+ci(1), co(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1),
+rcsfile(5)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
diff --git a/usr/src/contrib/rcs-V5.6/man/merge.1 b/usr/src/contrib/rcs-V5.6/man/merge.1
new file mode 100644 (file)
index 0000000..8b1957f
--- /dev/null
@@ -0,0 +1,102 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: merge.1,v 5.3 1991/02/28 19:18:45 eggert Exp $
+.TH MERGE 1 \*(Dt GNU
+.SH NAME
+merge \- three-way file merge
+.SH SYNOPSIS
+.B merge
+[
+.B \-L
+.I label1
+[
+.B \-L
+.I label3
+] ] [
+.B \-p
+] [
+.B \-q
+]
+.I "file1 file2 file3"
+.SH DESCRIPTION
+.B merge
+incorporates all changes that lead from
+.I file2
+to
+.I file3
+into
+.IR file1 .
+The result goes to standard output if
+.B \-p
+is present, into
+.I file1
+otherwise.
+.B merge
+is useful for combining separate changes to an original.  Suppose
+.I file2
+is the original, and both
+.I file1
+and
+.I file3
+are modifications of
+.IR file2 .
+Then
+.B merge
+combines both changes.
+.PP
+An overlap occurs if both
+.I file1
+and
+.I file3
+have changes in a common segment of lines.
+On a few older hosts where
+.B diff3
+does not support the
+.B \-E
+option,
+.B merge
+does not detect overlaps, and merely supplies the changed lines from
+.I file3.
+On most hosts, if overlaps occur,
+.B merge
+outputs a message (unless the
+.B \-q
+option is given),
+and includes both alternatives
+in the result.  The alternatives are delimited as follows:
+.LP
+.RS
+.nf
+.BI <<<<<<< " file1"
+.I "lines in file1"
+.B "======="
+.I "lines in file3"
+.BI >>>>>>> " file3"
+.RE
+.fi
+.LP
+If there are overlaps, the user should edit the result and delete one of the
+alternatives.
+If the
+.BI \-L "\ label1"
+and
+.BI \-L "\ label3"
+options are given, the labels are output in place of the names
+.I file1
+and
+.I file3
+in overlap reports.
+.SH DIAGNOSTICS
+Exit status is 0 for no overlaps, 1 for some overlaps, 2 for trouble.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH SEE ALSO
+diff3(1), diff(1), rcsmerge(1), co(1).
diff --git a/usr/src/contrib/rcs-V5.6/man/rcs.1 b/usr/src/contrib/rcs-V5.6/man/rcs.1
new file mode 100644 (file)
index 0000000..9866a9c
--- /dev/null
@@ -0,0 +1,397 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: rcs.1,v 5.6 1991/09/26 23:16:17 eggert Exp $
+.ds r \&\s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH RCS 1 \*(Dt GNU
+.SH NAME
+rcs \- change RCS file attributes
+.SH SYNOPSIS
+.B rcs
+.RI [ " options " ] " file " .\|.\|.
+.SH DESCRIPTION
+.B rcs
+creates new \*r files or changes attributes of existing ones.
+An \*r file contains multiple revisions of text,
+an access list, a change log,
+descriptive text,
+and some control attributes.
+For
+.B rcs
+to work, the caller's login name must be on the access list,
+except if the access list is empty, the caller is the owner of the file
+or the superuser, or
+the
+.B \-i
+option is present.
+.PP
+Pathnames matching an \*r suffix denote \*r files;
+all others denote working files.
+Names are paired as explained in
+.BR ci (1).
+Revision numbers use the syntax described in
+.BR ci (1).
+.SH OPTIONS
+.TP
+.B \-i
+Create and initialize a new \*r file, but do not deposit any revision.
+If the \*r file has no path prefix, try to place it
+first into the subdirectory
+.BR ./RCS ,
+and then into the current directory.
+If the \*r file
+already exists, print an error message.
+.TP
+.BI \-a "logins"
+Append the login names appearing in the comma-separated list
+.I logins
+to the access list of the \*r file.
+.TP
+.BI \-A "oldfile"
+Append the access list of
+.I oldfile
+to the access list of the \*r file.
+.TP
+.BR \-e [\f2logins\fP]
+Erase the login names appearing in the comma-separated list
+.I logins
+from the access list of the \*r file.
+If
+.I logins
+is omitted, erase the entire access list.
+.TP
+.BR \-b [\f2rev\fP]
+Set the default branch to
+.IR rev .
+If
+.I rev
+is omitted, the default
+branch is reset to the (dynamically) highest branch on the trunk.
+.TP
+.BI \-c string
+sets the comment leader to
+.IR string .
+The comment leader
+is printed before every log message line generated by the keyword
+.B $\&Log$
+during checkout (see
+.BR co (1)).
+This is useful for programming
+languages without multi-line comments.
+An initial
+.B ci ,
+or an
+.B "rcs\ \-i"
+without
+.BR \-c ,
+guesses the comment leader from the suffix of the working file.
+.TP
+.BI \-k subst
+Set the default keyword substitution to
+.IR subst .
+The effect of keyword substitution is described in
+.BR co (1).
+Giving an explicit
+.B \-k
+option to
+.BR co ,
+.BR rcsdiff ,
+and
+.B rcsmerge
+overrides this default.
+Beware
+.BR "rcs\ \-kv",
+because
+.B \-kv
+is incompatible with
+.BR "co\ \-l".
+Use
+.B "rcs\ \-kkv"
+to restore the normal default keyword substitution.
+.TP
+.BR \-l [\f2rev\fP]
+Lock the revision with number
+.IR rev .
+If a branch is given, lock the latest revision on that branch.
+If
+.I rev
+is omitted, lock the latest revision on the default branch.
+Locking prevents overlapping changes.
+A lock is removed with
+.B ci
+or
+.B "rcs\ \-u"
+(see below).
+.TP
+.BR \-u [\f2rev\fP]
+Unlock the revision with number
+.IR rev .
+If a branch is given, unlock the latest revision on that branch.
+If
+.I rev
+is omitted, remove the latest lock held by the caller.
+Normally, only the locker of a revision may unlock it.
+Somebody else unlocking a revision breaks the lock.
+This causes a mail message to be sent to the original locker.
+The message contains a commentary solicited from the breaker.
+The commentary is terminated by end-of-file or by a line containing
+.BR \&. "\ by"
+itself.
+.TP
+.B \-L
+Set locking to
+.IR strict .
+Strict locking means that the owner
+of an \*r file is not exempt from locking for checkin.
+This option should be used for files that are shared.
+.TP
+.B \-U
+Set locking to non-strict.  Non-strict locking means that the owner of
+a file need not lock a revision for checkin.
+This option should
+.I not
+be used for files that are shared.
+Whether default locking is strict is determined by your system administrator,
+but it is normally strict.
+.TP
+\f3\-m\fP\f2rev\fP\f3:\fP\f2msg\fP
+Replace revision
+.IR rev 's
+log message with
+.IR msg .
+.TP
+\f3\-n\fP\f2name\fP[\f3:\fP[\f2rev\fP]]
+Associate the symbolic name
+.I name
+with the branch or
+revision
+.IR rev .
+Delete the symbolic name if both
+.B :
+and
+.I rev
+are omitted; otherwise, print an error message if
+.I name
+is already associated with
+another number.
+If
+.I rev
+is symbolic, it is expanded before association.
+A
+.I rev
+consisting of a branch number followed by a
+.B .\&
+stands for the current latest revision in the branch.
+A
+.B :
+with an empty
+.I rev
+stands for the current latest revision on the default branch,
+normally the trunk.
+For example,
+.BI "rcs\ \-n" name ":\ RCS/*"
+associates
+.I name
+with the current latest revision of all the named \*r files;
+this contrasts with
+.BI "rcs\ \-n" name ":$\ RCS/*"
+which associates
+.I name
+with the revision numbers extracted from keyword strings
+in the corresponding working files.
+.TP
+\f3\-N\fP\f2name\fP[\f3:\fP[\f2rev\fP]]
+Act like
+.BR \-n ,
+except override any previous assignment of
+.IR name .
+.TP
+.BI \-o range
+deletes (\*(lqoutdates\*(rq) the revisions given by
+.IR range .
+A range consisting of a single revision number means that revision.
+A range consisting of a branch number means the latest revision on that
+branch.
+A range of the form
+.IB rev1 : rev2
+means
+revisions
+.I rev1
+to
+.I rev2
+on the same branch,
+.BI : rev
+means from the beginning of the branch containing
+.I rev
+up to and including
+.IR rev ,
+and
+.IB rev :
+means
+from revision
+.I rev
+to the end of the branch containing
+.IR rev .
+None of the outdated revisions may have branches or locks.
+.TP
+.B \-q
+Run quietly; do not print diagnostics.
+.TP
+.B \-I
+Run interactively, even if the standard input is not a terminal.
+.TP
+.B \-s\f2state\fP\f1[\fP:\f2rev\fP\f1]\fP
+Set the state attribute of the revision
+.I rev
+to
+.I state .
+If
+.I rev
+is a branch number, assume the latest revision on that branch.
+If
+.I rev
+is omitted, assume the latest revision on the default branch.
+Any identifier is acceptable for
+.IR state .
+A useful set of states
+is
+.B Exp
+(for experimental),
+.B Stab
+(for stable), and
+.B Rel
+(for
+released).
+By default,
+.BR ci (1)
+sets the state of a revision to
+.BR Exp .
+.TP
+.BR \-t [\f2file\fP]
+Write descriptive text from the contents of the named
+.I file
+into the \*r file, deleting the existing text.
+The
+.IR file
+pathname may not begin with
+.BR \- .
+If
+.I file
+is omitted, obtain the text from standard input,
+terminated by end-of-file or by a line containing
+.BR \&. "\ by"
+itself.
+Prompt for the text if interaction is possible; see
+.BR \-I .
+With
+.BR \-i ,
+descriptive text is obtained
+even if
+.B \-t
+is not given.
+.TP
+.BI \-t\- string
+Write descriptive text from the
+.I string
+into the \*r file, deleting the existing text.
+.TP
+.BI \-V n
+Emulate \*r version
+.IR n .
+See
+.BR co (1)
+for details.
+.TP
+.BI \-x "suffixes"
+Use
+.I suffixes
+to characterize \*r files.
+See
+.BR ci (1)
+for details.
+.SH COMPATIBILITY
+The
+.BI \-b rev
+option generates an \*r file that cannot be parsed by \*r version 3 or earlier.
+.PP
+The
+.BI \-k subst
+options (except
+.BR \-kkv )
+generate an \*r file that cannot be parsed by \*r version 4 or earlier.
+.PP
+Use
+.BI "rcs \-V" n
+to make an \*r file acceptable to \*r version
+.I n
+by discarding information that would confuse version
+.IR n .
+.PP
+\*r version 5.5 and earlier does not support the
+.B \-x
+option, and requires a
+.B ,v
+suffix on an \*r pathname.
+.SH FILES
+.B rcs
+accesses files much as
+.BR ci (1)
+does,
+except that it uses the effective user for all accesses,
+it does not write the working file or its directory,
+and it does not even read the working file unless a revision number of
+.B $
+is specified.
+.SH ENVIRONMENT
+.TP
+.B \s-1RCSINIT\s0
+options prepended to the argument list, separated by spaces.
+See
+.BR ci (1)
+for details.
+.SH DIAGNOSTICS
+The \*r pathname and the revisions outdated are written to
+the diagnostic output.
+The exit status is zero if and only if all operations were successful.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH "SEE ALSO"
+co(1), ci(1), ident(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1),
+rcsfile(5)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
+.SH BUGS
+The separator for revision ranges in the
+.B \-o
+option used to be
+.B \-
+instead of
+.BR : ,
+but this leads to confusion when symbolic names contain
+.BR \- .
+For backwards compatibility
+.B "rcs \-o"
+still supports the old
+.B \-
+separator, but it warns about this obsolete use.
+.PP
+Symbolic names need not refer to existing revisions or branches.
+For example, the
+.B \-o
+option does not remove symbolic names for the outdated revisions; you must use
+.B \-n
+to remove the names.
+.br
diff --git a/usr/src/contrib/rcs-V5.6/man/rcsclean.1 b/usr/src/contrib/rcs-V5.6/man/rcsclean.1
new file mode 100644 (file)
index 0000000..07ed722
--- /dev/null
@@ -0,0 +1,177 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: rcsclean.1,v 1.8 1991/11/03 01:09:19 eggert Exp $
+.ds r \&\s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH RCSCLEAN 1 \*(Dt GNU
+.SH NAME
+rcsclean \- clean up working files
+.SH SYNOPSIS
+.B rcsclean
+.RI [ options "] [ " file " .\|.\|. ]"
+.SH DESCRIPTION
+.B rcsclean
+removes working files that were checked out and never modified.
+For each
+.I file
+given,
+.B rcsclean
+compares the working file and a revision in the corresponding
+\*r file.  If it finds a difference, it does nothing.
+Otherwise, it first unlocks the revision if the
+.B \-u
+option is given,
+and then removes the working file
+unless the working file is writable and the revision is locked.
+It logs its actions by outputting the corresponding
+.B "rcs \-u"
+and
+.B "rm \-f"
+commands on the standard output.
+.PP
+If no
+.I file
+is given, all working files in the current directory are cleaned.
+Pathnames matching an \*r suffix denote \*r files;
+all others denote working files.
+Names are paired as explained in
+.BR ci (1).
+.PP
+The number of the revision to which the working file is compared
+may be attached to any of the options
+.BR \-n ,
+.BR \-q ,
+.BR \-r ,
+or
+.BR \-u .
+If no revision number is specified, then if the
+.B \-u
+option is given and the caller has one revision locked,
+.B rcsclean
+uses that revision; otherwise
+.B rcsclean
+uses the latest revision on the default branch, normally the root.
+.PP
+.B rcsclean
+is useful for
+.B clean
+targets in Makefiles.
+See also
+.BR rcsdiff (1),
+which prints out the differences,
+and
+.BR ci (1),
+which
+normally asks whether to check in a file
+if it was not changed.
+.SH OPTIONS
+.TP
+.BI \-k subst
+Use
+.I subst
+style keyword substitution when retrieving the revision for comparison.
+See
+.BR co (1)
+for details.
+.TP
+.BR \-n [\f2rev\fP]
+Do not actually remove any files or unlock any revisions.
+Using this option will tell you what
+.B rcsclean
+would do without actually doing it.
+.TP
+.BR \-q [\f2rev\fP]
+Do not log the actions taken on standard output.
+.TP
+.BR \-r [\f2rev\fP]
+This option has no effect other than specifying the revision for comparison.
+.TP
+.BR \-u [\f2rev\fP]
+Unlock the revision if it is locked and no difference is found.
+.TP
+.BI \-V n
+Emulate \*r version
+.IR n .
+See
+.BR co (1)
+for details.
+.TP
+.BI \-x "suffixes"
+Use
+.I suffixes
+to characterize \*r files.
+See
+.BR ci (1)
+for details.
+.SH EXAMPLES
+.LP
+.RS
+.ft 3
+rcsclean  *.c  *.h
+.ft
+.RE
+.LP
+removes all working files ending in
+.B .c
+or
+.B .h
+that were not changed
+since their checkout.
+.LP
+.RS
+.ft 3
+rcsclean
+.ft
+.RE
+.LP
+removes all working files in the current directory
+that were not changed since their checkout.
+.SH FILES
+.B rcsclean
+accesses files much as
+.BR ci (1)
+does.
+.SH ENVIRONMENT
+.TP
+.B \s-1RCSINIT\s0
+options prepended to the argument list, separated by spaces.
+A backslash escapes spaces within an option.
+The
+.B \s-1RCSINIT\s0
+options are prepended to the argument lists of most \*r commands.
+Useful
+.B \s-1RCSINIT\s0
+options include
+.BR \-q ,
+.BR \-V ,
+and
+.BR \-x .
+.SH DIAGNOSTICS
+The exit status is zero if and only if all operations were successful.
+Missing working files and \*r files are silently ignored.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH "SEE ALSO"
+ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1),
+rcsfile(5)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
+.SH BUGS
+At least one
+.I file
+must be given in older Unix versions that
+do not provide the needed directory scanning operations.
+.br
diff --git a/usr/src/contrib/rcs-V5.6/man/rcsdiff.1 b/usr/src/contrib/rcs-V5.6/man/rcsdiff.1
new file mode 100644 (file)
index 0000000..b78bbdd
--- /dev/null
@@ -0,0 +1,152 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: rcsdiff.1,v 5.3 1991/04/21 12:00:46 eggert Exp $
+.ds r \&\s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH RCSDIFF 1 \*(Dt GNU
+.SH NAME
+rcsdiff \- compare RCS revisions
+.SH SYNOPSIS
+.B rcsdiff
+[
+.BI \-k subst
+] [
+.B \-q
+] [
+.BI \-r rev1
+[
+.BI \-r rev2
+] ] [
+.BI \-V n
+] [
+.BI \-x suffixes
+] [
+.I "diff options"
+]
+.I "file .\|.\|."
+.SH DESCRIPTION
+.B rcsdiff
+runs
+.BR diff (1)
+to compare two revisions of each \*r file given.
+.PP
+Pathnames matching an \*r suffix denote \*r files;
+all others denote working files.
+Names are paired as explained in
+.BR ci (1).
+.PP
+The option
+.B \-q
+suppresses diagnostic output.
+Zero, one, or two revisions may be specified with
+.BR \-r .
+The option
+.BI \-k subst
+affects keyword substitution when extracting
+revisions, as described in
+.BR co (1);
+for example,
+.B "\-kk\ \-r1.1\ \-r1.2"
+ignores differences in keyword values when comparing revisions
+.B 1.1
+and
+.BR 1.2 .
+To avoid excess output from locker name substitution,
+.B \-kkvl
+is assumed if (1) at most one revision option is given,
+(2) no
+.B \-k
+option is given, (3)
+.B \-kkv
+is the default keyword substitution, and
+(4) the working file's mode would be produced by
+.BR "co\ \-l".
+See
+.BR co (1)
+for details
+about
+.B \-V
+and
+.BR \-x .
+Otherwise, all options of
+.BR diff (1)
+that apply to regular files are accepted, with the same meaning as for
+.BR diff .
+.PP
+If both
+.I rev1
+and
+.I rev2
+are omitted,
+.B rcsdiff
+compares the latest revision on the
+default branch (by default the trunk)
+with the contents of the corresponding working file.  This is useful
+for determining what you changed since the last checkin.
+.PP
+If
+.I rev1
+is given, but
+.I rev2
+is omitted,
+.B rcsdiff
+compares revision
+.I rev1
+of the \*r file with
+the contents of the corresponding working file.
+.PP
+If both
+.I rev1
+and
+.I rev2
+are given,
+.B rcsdiff
+compares revisions
+.I rev1
+and
+.I rev2
+of the \*r file.
+.PP
+Both
+.I rev1
+and
+.I rev2
+may be given numerically or symbolically.
+.SH EXAMPLE
+The command
+.LP
+.B "        rcsdiff  f.c"
+.LP
+compares the latest revision on the default branch of the \*r file
+to the contents of the working file
+.BR f.c .
+.SH ENVIRONMENT
+.TP
+.B \s-1RCSINIT\s0
+options prepended to the argument list, separated by spaces.
+See
+.BR ci (1)
+for details.
+.SH DIAGNOSTICS
+Exit status is 0 for no differences during any comparison,
+1 for some differences, 2 for trouble.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH "SEE ALSO"
+ci(1), co(1), diff(1), ident(1), rcs(1), rcsintro(1), rcsmerge(1), rlog(1)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
+.br
diff --git a/usr/src/contrib/rcs-V5.6/man/rcsfile.5 b/usr/src/contrib/rcs-V5.6/man/rcsfile.5
new file mode 100644 (file)
index 0000000..f3f79bd
--- /dev/null
@@ -0,0 +1,224 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: rcsfile.5,v 5.1 1991/08/19 03:13:55 eggert Exp $
+.ds r \s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH RCSFILE 5 \*(Dt GNU
+.SH NAME
+rcsfile \- format of RCS file
+.SH DESCRIPTION
+An \*r file's
+contents are described by the grammar
+below.
+.PP
+The text is free format: space, backspace, tab, newline, vertical
+tab, form feed, and carriage return (collectively,
+.IR "white space")
+have no significance except in strings.
+However, an \*r file must end in a newline character.
+.PP
+Strings are enclosed by
+.BR @ .
+If a string contains a
+.BR @ ,
+it must be doubled;
+otherwise, strings may contain arbitrary binary data.
+.PP
+The meta syntax uses the following conventions: `|' (bar) separates
+alternatives; `{' and `}' enclose optional phrases; `{' and `}*' enclose
+phrases that may be repeated zero or more times;
+`{' and '}+' enclose phrases that must appear at least once and may be
+repeated;
+Terminal symbols are in
+.BR boldface ;
+nonterminal symbols are in
+.IR italics .
+.LP
+.nr x \w'\f3branches\fP'
+.nr y \w'{ \f3comment\fP'
+.if \nx<\ny .nr x \ny
+.nr y \w'\f3{ branch\fP'
+.if \nx<\ny .nr x \ny
+.ta \w'\f2deltatext\fP  'u +\w'::=  'u +\nxu+\w'  'u
+.fc ~
+.nf
+\f2rcstext\fP  ::=     \f2admin\fP {\f2delta\fP}* \f2desc\fP {\f2deltatext\fP}*
+.LP
+\f2admin\fP    ::=     \f3head\fP      {\f2num\fP}\f3;\fP
+               { \f3branch\fP  {\f2num\fP}\f3;\fP }
+               \f3access\fP    {\f2id\fP}*\f3;\fP
+               \f3symbols\fP   {\f2id\fP \f3:\fP \f2num\fP}*\f3;\fP
+               \f3locks\fP     {\f2id\fP \f3:\fP \f2num\fP}*\f3;\fP  {\f3strict  ;\fP}
+               { \f3comment\fP {\f2string\fP}\f3;\fP }
+               { \f3expand\fP  {\f2string\fP}\f3;\fP }
+               { \f2newphrase\fP }*
+.LP
+\f2delta\fP    ::=     \f2num\fP
+               \f3date\fP      \f2num\fP\f3;\fP
+               \f3author\fP    \f2id\fP\f3;\fP
+               \f3state\fP     {\f2id\fP}\f3;\fP
+               \f3branches\fP  {\f2num\fP}*\f3;\fP
+               \f3next\fP      {\f2num\fP}\f3;\fP
+               { \f2newphrase\fP }*
+.LP
+\f2desc\fP     ::=     \f3desc\fP      \f2string\fP
+.LP
+\f2deltatext\fP        ::=     \f2num\fP
+               \f3log\fP       \f2string\fP
+               { \f2newphrase\fP }*
+               \f3text\fP      \f2string\fP
+.LP
+\f2num\fP      ::=     {\f2digit\fP{\f3.\fP}}+
+.LP
+\f2digit\fP    ::=     \f30\fP | \f31\fP | .\|.\|. | \f39\fP
+.LP
+\f2id\fP       ::=     \f2letter\fP{\f2idchar\fP}*
+.LP
+\f2letter\fP   ::=     any letter
+.LP
+\f2idchar\fP   ::=     any visible graphic character except \f2special\fP
+.LP
+\f2special\fP  ::=     \f3$\fP | \f3,\fP | \f3.\fP | \f3:\fP | \f3;\fP | \f3@\fP
+.LP
+\f2string\fP   ::=     \f3@\fP{any character, with \f3@\fP doubled}*\f3@\fP
+.LP
+\f2newphrase\fP        ::=     \f2id\fP \f2word\fP* \f3;\fP
+.LP
+\f2word\fP     ::=     \f2id\fP | \f2num\fP | \f2string\fP | \f3:\fP
+.fi
+.PP
+Identifiers are case sensitive.  Keywords are in lower case only.
+The sets of keywords and identifiers may overlap.
+In most environments RCS uses the ISO 8859/1 encoding:
+letters are octal codes 101\-132, 141\-172, 300\-326, 330\-366 and 370-377,
+visible graphic characters are codes 041\-176 and 240\-377,
+and white space characters are codes 010\-015 and 040.
+.PP
+The
+.I newphrase
+productions in the grammar are reserved for future extensions
+to the format of \*r files.
+No
+.I newphrase
+will begin with any keyword already in use.
+.PP
+The
+.I delta
+nodes form a tree.  All nodes whose numbers
+consist of a single pair
+(e.g., 2.3, 2.1, 1.3, etc.)
+are on the trunk, and are linked through the
+.B next
+field in order of decreasing numbers.
+The
+.B head
+field in the
+.I admin
+node points to the head of that sequence (i.e., contains
+the highest pair).
+The
+.B branch
+node in the admin node indicates the default
+branch (or revision) for most \*r operations.
+If empty, the default
+branch is the highest branch on the trunk.
+.PP
+All
+.I delta
+nodes whose numbers consist of
+.RI 2 n
+fields
+.RI ( n \(\fP=2)
+(e.g., 3.1.1.1, 2.1.2.2, etc.)
+are linked as follows.
+All nodes whose first
+.RI 2 n \-1
+number fields are identical are linked through the
+.B next
+field in order of increasing numbers.
+For each such sequence,
+the
+.I delta
+node whose number is identical to the first
+.RI 2 n \-2
+number fields of the deltas on that sequence is called the branchpoint.
+The
+.B branches
+field of a node contains a list of the
+numbers of the first nodes of all sequences for which it is a branchpoint.
+This list is ordered in increasing numbers.
+.LP
+.nf
+.vs 12
+.ne 38
+Example:
+.if t .in +0.5i
+.cs 1 20
+.eo
+
+                           Head
+                             |
+                             |
+                             v                        / \
+                         ---------                   /   \
+   / \          / \      |       |      / \         /     \
+  /   \        /   \     |  2.1  |     /   \       /       \
+ /     \      /     \    |       |    /     \     /         \
+/1.2.1.3\    /1.3.1.1\   |       |   /1.2.2.2\   /1.2.2.1.1.1\
+---------    ---------   ---------   ---------   -------------
+    ^            ^           |           ^             ^
+    |            |           |           |             |
+    |            |           v           |             |
+   / \           |       ---------      / \            |
+  /   \          |       \  1.3  /     /   \           |
+ /     \         ---------\     /     /     \-----------
+/1.2.1.1\                  \   /     /1.2.2.1\
+---------                   \ /      ---------
+    ^                        |           ^
+    |                        |           |
+    |                        v           |
+    |                    ---------       |
+    |                    \  1.2  /       |
+    ----------------------\     /---------
+                           \   /
+                            \ /
+                             |
+                             |
+                             v
+                         ---------
+                         \  1.1  /
+                          \     /
+                           \   /
+                            \ /
+
+.ec
+.if t .in
+.cs 1
+.ce
+Fig. 1: A revision tree
+.vs
+.fi
+.PP
+.SH IDENTIFICATION
+.de VL
+\\$2
+..
+Author: Walter F. Tichy,
+Purdue University, West Lafayette, IN, 47907.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH SEE ALSO
+ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsmerge(1), rlog(1),
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
diff --git a/usr/src/contrib/rcs-V5.6/man/rcsfreeze.1 b/usr/src/contrib/rcs-V5.6/man/rcsfreeze.1
new file mode 100644 (file)
index 0000000..be669a9
--- /dev/null
@@ -0,0 +1,68 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: rcsfreeze.1,v 4.4 1990/11/13 15:43:42 hammer Exp $
+.ds r \s-1RCS\s0
+.TH RCSFREEZE 1 \*(Dt GNU
+.SH NAME
+rcsfreeze \- freeze a configuration of sources checked in under RCS
+.SH SYNOPSIS
+.B rcsfreeze
+.RI [ "name" ]
+.SH DESCRIPTION
+.B rcsfreeze
+assigns a symbolic revision
+number to a set of \*r files that form a valid configuration.
+.PP
+The idea is to run
+.B rcsfreeze
+each time a new version is checked
+in.  A unique symbolic name (\c
+.BI C_ number,
+where
+.I number
+is increased each time
+.B rcsfreeze
+is run) is then assigned to the most
+recent revision of each \*r file of the main trunk.
+.PP
+An optional
+.I name
+argument to
+.B rcsfreeze
+gives a symbolic name to the configuration.
+The unique identifier is still generated
+and is listed in the log file but it will not appear as
+part of the symbolic revision name in the actual \*r files.
+.PP
+A log message is requested from the user for future reference.
+.PP
+The shell script works only on all \*r files at one time.
+All changed files must be checked in already.
+Run
+.IR rcsclean (1)
+first and see whether any sources remain in the current directory.
+.SH FILES
+.TP
+.B RCS/.rcsfreeze.ver
+version number
+.TP
+.B RCS/.rcsfreeze.log
+log messages, most recent first
+.SH AUTHOR
+Stephan v. Bechtolsheim
+.SH "SEE ALSO"
+co(1), rcs(1), rcsclean(1), rlog(1)
+.SH BUGS
+.B rcsfreeze
+does not check whether any sources are checked out and modified.
+.PP
+Although both source file names and RCS file names are accepted,
+they are not paired as usual with RCS commands.
+.PP
+Error checking is rudimentary.
+.PP
+.B rcsfreeze
+is just an optional example shell script, and should not be taken too seriously.
+See \s-1CVS\s0 for a more complete solution.
diff --git a/usr/src/contrib/rcs-V5.6/man/rcsintro.1 b/usr/src/contrib/rcs-V5.6/man/rcsintro.1
new file mode 100644 (file)
index 0000000..a76caa0
--- /dev/null
@@ -0,0 +1,292 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: rcsintro.1,v 5.1 1991/04/21 12:00:46 eggert Exp $
+.ds r \&\s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.am SS
+.LP
+..
+.TH RCSINTRO 1 \*(Dt GNU
+.SH NAME
+rcsintro \- introduction to RCS commands
+.SH DESCRIPTION
+The Revision Control System (\*r) manages multiple revisions of files.
+\*r automates the storing, retrieval, logging, identification, and merging
+of revisions.  \*r is useful for text that is revised frequently, for example
+programs, documentation, graphics, papers, and form letters.
+.PP
+The basic user interface is extremely simple.  The novice only needs
+to learn two commands:
+.BR ci (1)
+and
+.BR co (1).
+.BR ci ,
+short for \*(lqcheck in\*(rq, deposits the contents of a
+file into an archival file called an \*r file.  An \*r file
+contains all revisions of a particular file.
+.BR co ,
+short for \*(lqcheck out\*(rq, retrieves revisions from an \*r file.
+.SS "Functions of \*r"
+.IP \(bu
+Store and retrieve multiple revisions of text.  \*r saves all old
+revisions in a space efficient way.
+Changes no longer destroy the original, because the
+previous revisions remain accessible.  Revisions can be retrieved according to
+ranges of revision numbers, symbolic names, dates, authors, and
+states.
+.IP \(bu
+Maintain a complete history of changes.
+\*r logs all changes automatically.
+Besides the text of each revision, \*r stores the author, the date and time of
+check-in, and a log message summarizing the change.
+The logging makes it easy to find out
+what happened to a module, without having to compare
+source listings or having to track down colleagues.
+.IP \(bu
+Resolve access conflicts.  When two or more programmers wish to
+modify the same revision, \*r alerts the programmers and prevents one
+modification from corrupting the other.
+.IP \(bu
+Maintain a tree of revisions.  \*r can maintain separate lines of development
+for each module.  It stores a tree structure that represents the
+ancestral relationships among revisions.
+.IP \(bu
+Merge revisions and resolve conflicts.
+Two separate lines of development of a module can be coalesced by merging.
+If the revisions to be merged affect the same sections of code, \*r alerts the
+user about the overlapping changes.
+.IP \(bu
+Control releases and configurations.
+Revisions can be assigned symbolic names
+and marked as released, stable, experimental, etc.
+With these facilities, configurations of modules can be
+described simply and directly.
+.IP \(bu
+Automatically identify each revision with name, revision number,
+creation time, author, etc.
+The identification is like a stamp that can be embedded at an appropriate place
+in the text of a revision.
+The identification makes it simple to determine which
+revisions of which modules make up a given configuration.
+.IP \(bu
+Minimize secondary storage.  \*r needs little extra space for
+the revisions (only the differences).  If intermediate revisions are
+deleted, the corresponding deltas are compressed accordingly.
+.SS "Getting Started with \*r"
+Suppose you have a file
+.B f.c
+that you wish to put under control of \*r.
+If you have not already done so, make an \*r directory with the command
+.IP
+.B "mkdir  RCS"
+.LP
+Then invoke the check-in command
+.IP
+.B "ci  f.c"
+.LP
+This command creates an \*r file in the
+.B RCS
+directory,
+stores
+.B f.c
+into it as revision 1.1, and
+deletes
+.BR f.c .
+It also asks you for a description.  The description
+should be a synopsis of the contents of the file.  All later check-in
+commands will ask you for a log entry, which should summarize the
+changes that you made.
+.PP
+Files in the \*r directory are called \*r files;
+the others are called working files.
+To get back the working file
+.B f.c
+in the previous example, use the check-out
+command
+.IP
+.B "co  f.c"
+.LP
+This command extracts the latest revision from the \*r file
+and writes
+it into
+.BR f.c .
+If you want to edit
+.BR f.c ,
+you must lock it as you check it out with the command
+.IP
+.B "co  \-l  f.c"
+.LP
+You can now edit
+.BR f.c .
+.PP
+Suppose after some editing you want to know what changes that you have made.
+The command
+.IP
+.B "rcsdiff  f.c"
+.LP
+tells you the difference between the most recently checked-in version
+and the working file.
+You can check the file back in by invoking
+.IP
+.B "ci  f.c"
+.LP
+This increments the revision number properly.
+.PP
+If
+.B ci
+complains with the message
+.IP
+.BI "ci error: no lock set by " "your name"
+.LP
+then you have tried to check in a file even though you did not
+lock it when you checked it out.
+Of course, it is too late now to do the check-out with locking, because
+another check-out would
+overwrite your modifications.  Instead, invoke
+.IP
+.B "rcs  \-l  f.c"
+.LP
+This command will lock the latest revision for you, unless somebody
+else got ahead of you already.  In this case, you'll have to negotiate with
+that person.
+.PP
+Locking assures that you, and only you, can check in the next update, and
+avoids nasty problems if several people work on the same file.
+Even if a revision is locked, it can still be checked out for
+reading, compiling, etc.  All that locking
+prevents is a
+.I "check-in"
+by anybody but the locker.
+.PP
+If your \*r file is private, i.e., if you are the only person who is going
+to deposit revisions into it, strict locking is not needed and you
+can turn it off.
+If strict locking is turned off,
+the owner of the \*r file need not have a lock for check-in; all others
+still do.  Turning strict locking off and on is done with the commands
+.IP
+.BR "rcs  \-U  f.c" "     and     " "rcs  \-L  f.c"
+.LP
+If you don't want to clutter your working directory with \*r files, create
+a subdirectory called
+.B RCS
+in your working directory, and move all your \*r
+files there.  \*r commands will look first into that directory to find
+needed files.  All the commands discussed above will still work, without any
+modification.
+(Actually, pairs of \*r and working files can be specified in three ways:
+(a) both are given, (b) only the working file is given, (c) only the
+\*r file is given.  Both \*r and working files may have arbitrary path prefixes;
+\*r commands pair them up intelligently.)
+.PP
+To avoid the deletion of the working file during check-in (in case you want to
+continue editing or compiling), invoke
+.IP
+.BR "ci  \-l  f.c" "     or     " "ci  \-u  f.c"
+.LP
+These commands check in
+.B f.c
+as usual, but perform an implicit
+check-out.  The first form also locks the checked in revision, the second one
+doesn't.  Thus, these options save you one check-out operation.
+The first form is useful if you want to continue editing,
+the second one if you just want to read the file.
+Both update the identification markers in your working file (see below).
+.PP
+You can give
+.B ci
+the number you want assigned to a checked in
+revision.  Assume all your revisions were numbered 1.1, 1.2, 1.3, etc.,
+and you would like to start release 2.
+The command
+.IP
+.BR "ci  \-r2  f.c" "     or     " "ci  \-r2.1  f.c"
+.LP
+assigns the number 2.1 to the new revision.
+From then on,
+.B ci
+will number the subsequent revisions
+with 2.2, 2.3, etc.  The corresponding
+.B co
+commands
+.IP
+.BR "co  \-r2  f.c" "     and     " "co  \-r2.1  f.c"
+.PP
+retrieve the latest revision numbered
+.RI 2. x
+and the revision 2.1,
+respectively.
+.B co
+without a revision number selects
+the latest revision on the
+.IR trunk ,
+i.e. the highest
+revision with a number consisting of two fields.  Numbers with more than two
+fields are needed for branches.
+For example, to start a branch at revision 1.3, invoke
+.IP
+.B "ci  \-r1.3.1  f.c"
+.LP
+This command starts a branch numbered 1 at revision 1.3, and assigns
+the number 1.3.1.1 to the new revision.  For more information about
+branches, see
+.BR rcsfile (5).
+.SS "Automatic Identification"
+\*r can put special strings for identification into your source and object
+code.  To obtain such identification, place the marker
+.IP
+.B "$\&Id$"
+.LP
+into your text, for instance inside a comment.
+\*r will replace this marker with a string of the form
+.IP
+.BI $\&Id: "  filename  revision  date  time  author  state  " $
+.LP
+With such a marker on the first page of each module, you can
+always see with which revision you are working.
+\*r keeps the markers up to date automatically.
+To propagate the markers into your object code, simply put
+them into literal character strings.  In C, this is done as follows:
+.IP
+.ft 3
+static char rcsid[] = \&"$\&Id$\&";
+.ft
+.LP
+The command
+.B ident
+extracts such markers from any file, even object code
+and dumps.
+Thus,
+.B ident
+lets you find out
+which revisions of which modules were used in a given program.
+.PP
+You may also find it useful to put the marker
+.B $\&Log$
+into your text, inside a comment.  This marker accumulates
+the log messages that are requested during check-in.
+Thus, you can maintain the complete history of your file directly inside it.
+There are several additional identification markers; see
+.BR co (1)
+for
+details.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH "SEE ALSO"
+ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
+.br
diff --git a/usr/src/contrib/rcs-V5.6/man/rcsmerge.1 b/usr/src/contrib/rcs-V5.6/man/rcsmerge.1
new file mode 100644 (file)
index 0000000..82871b0
--- /dev/null
@@ -0,0 +1,140 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: rcsmerge.1,v 5.3 1991/08/19 03:13:55 eggert Exp $
+.ds r \&\s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH RCSMERGE 1 \*(Dt GNU
+.SH NAME
+rcsmerge \- merge RCS revisions
+.SH SYNOPSIS
+.B rcsmerge
+.RI [ options ] " file"
+.SH DESCRIPTION
+.B rcsmerge
+incorporates the changes between two revisions
+of an \*r file into the corresponding working file.
+.PP
+Pathnames matching an \*r suffix denote \*r files;
+all others denote working files.
+Names are paired as explained in
+.BR ci (1).
+.PP
+At least one revision must be specified with one of the options
+described below, usually
+.BR \-r .
+At most two revisions may be specified.
+If only one revision is specified, the latest
+revision on the default branch (normally the highest branch on the trunk)
+is assumed for the second revision.
+Revisions may be specified numerically or symbolically.
+.PP
+.B rcsmerge
+prints a warning if there are overlaps, and delimits
+the overlapping regions as explained in
+.BR merge (1).
+The command is useful for incorporating changes into a checked-out revision.
+.SH OPTIONS
+.TP
+.BI \-k subst
+Use
+.I subst
+style keyword substitution.
+See
+.BR co (1)
+for details.
+For example,
+.B "\-kk\ \-r1.1\ \-r1.2"
+ignores differences in keyword values when merging the changes from
+.B 1.1
+to
+.BR 1.2 .
+.TP
+.BR \-p [\f2rev\fP]
+Send the result to standard output instead of overwriting the working file.
+.TP
+.BR \-q [\f2rev\fP]
+Run quietly; do not print diagnostics.
+.TP
+.BR \-r [\f2rev\fP]
+Merge with respect to revision
+.IR rev .
+Here an empty
+.I rev
+stands for the latest revision on the default branch, normally the head.
+.TP
+.BI \-V n
+Emulate \*r version
+.IR n .
+See
+.BR co (1)
+for details.
+.TP
+.BI \-x "suffixes"
+Use
+.I suffixes
+to characterize \*r files.
+See
+.BR ci (1)
+for details.
+.SH EXAMPLES
+Suppose you have released revision 2.8 of
+.BR f.c .
+Assume
+furthermore that after you complete an unreleased revision 3.4, you receive
+updates to release 2.8 from someone else.
+To combine the updates to 2.8 and your changes between 2.8 and 3.4,
+put the updates to 2.8 into file f.c and execute
+.LP
+.B "    rcsmerge  \-p  \-r2.8  \-r3.4  f.c  >f.merged.c"
+.PP
+Then examine
+.BR f.merged.c .
+Alternatively, if you want to save the updates to 2.8 in the \*r file,
+check them in as revision 2.8.1.1 and execute
+.BR "co \-j":
+.LP
+.B "    ci  \-r2.8.1.1  f.c"
+.br
+.B "    co  \-r3.4  \-j2.8:2.8.1.1  f.c"
+.PP
+As another example, the following command undoes the changes
+between revision 2.4 and 2.8 in your currently checked out revision
+in
+.BR f.c .
+.LP
+.B "    rcsmerge  \-r2.8  \-r2.4  f.c"
+.PP
+Note the order of the arguments, and that
+.B f.c
+will be
+overwritten.
+.SH ENVIRONMENT
+.TP
+.B \s-1RCSINIT\s0
+options prepended to the argument list, separated by spaces.
+See
+.BR ci (1)
+for details.
+.SH DIAGNOSTICS
+Exit status is 0 for no overlaps, 1 for some overlaps, 2 for trouble.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH "SEE ALSO"
+ci(1), co(1), ident(1), merge(1), rcs(1), rcsdiff(1), rcsintro(1), rlog(1),
+rcsfile(5)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
+.br
diff --git a/usr/src/contrib/rcs-V5.6/man/rlog.1 b/usr/src/contrib/rcs-V5.6/man/rlog.1
new file mode 100644 (file)
index 0000000..fa627ff
--- /dev/null
@@ -0,0 +1,260 @@
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id: rlog.1,v 5.3 1991/08/22 06:50:48 eggert Exp $
+.ds g \&\s-1UTC\s0
+.ds r \&\s-1RCS\s0
+.if n .ds - \%--
+.if t .ds - \(em
+.TH RLOG 1 \*(Dt GNU
+.SH NAME
+rlog \- print log messages and other information about RCS files
+.SH SYNOPSIS
+.B rlog
+.RI [ " options " ] " file " .\|.\|.
+.SH DESCRIPTION
+.B rlog
+prints information about \*r files.
+.PP
+Pathnames matching an \*r suffix denote \*r files;
+all others denote working files.
+Names are paired as explained in
+.BR ci (1).
+.PP
+.B rlog
+prints the following information for each
+\*r file: \*r pathname, working pathname, head (i.e., the number
+of the latest revision on the trunk), default branch, access list, locks,
+symbolic names, suffix, total number of revisions,
+number of revisions selected for printing, and
+descriptive text.  This is followed by entries for the selected revisions in
+reverse chronological order for each branch.  For each revision,
+.B rlog
+prints revision number, author, date/time, state, number of
+lines added/deleted (with respect to the previous revision),
+locker of the revision (if any), and log message.
+All times are displayed in Coordinated Universal Time (\*g).
+Without options,
+.B rlog
+prints complete information.
+The options below restrict this output.
+.nr n \w'\f3\-V\fP\f2n\fP '+1n-1/1n
+.TP \nn
+.B \-L
+Ignore \*r files that have no locks set.
+This is convenient in combination with
+.BR \-h ,
+.BR \-l ,
+and
+.BR \-R .
+.TP
+.B \-R
+Print only the name of the \*r file.
+This is convenient for translating a
+working pathname into an \*r pathname.
+.TP
+.B \-h
+Print only the \*r pathname, working pathname, head,
+default branch, access list, locks,
+symbolic names, and suffix.
+.TP
+.B \-t
+Print the same as
+.BR \-h ,
+plus the descriptive text.
+.TP
+.B \-b
+Print information about the revisions on the default branch, normally
+the highest branch on the trunk.
+.TP
+.BI \-d "dates"
+Print information about revisions with a checkin date/time in the ranges given by
+the semicolon-separated list of
+.IR dates .
+A range of the form
+.IB d1 < d2
+or
+.IB d2 > d1
+selects the revisions that were deposited between
+.I d1
+and
+.I d2
+inclusive.
+A range of the form
+.BI < d
+or
+.IB d >
+selects
+all revisions dated
+.I d
+or earlier.
+A range of the form
+.IB d <
+or
+.BI > d
+selects
+all revisions dated
+.I d
+or later.
+A range of the form
+.I d
+selects the single, latest revision dated
+.I d
+or earlier.
+The date/time strings
+.IR d ,
+.IR d1 ,
+and
+.I d2
+are in the free format explained in
+.BR co (1).
+Quoting is normally necessary, especially for
+.B <
+and
+.BR > .
+Note that the separator is
+a semicolon.
+.TP
+.BR \-l [\f2lockers\fP]
+Print information about locked revisions only.
+In addition, if the comma-separated list
+.I lockers
+of login names is given,
+ignore all locks other than those held by the
+.IR lockers .
+For example,
+.B "rlog\ \-L\ \-R\ \-lwft\ RCS/*"
+prints the name of \*r files locked by the user
+.BR wft .
+.TP
+.BR \-r [\f2revisions\fP]
+prints information about revisions given in the comma-separated list
+.I revisions
+of revisions and ranges.
+A range
+.IB rev1 : rev2
+means revisions
+.I rev1
+to
+.I rev2
+on the same branch,
+.BI : rev
+means revisions from the beginning of the branch up to and including
+.IR rev ,
+and
+.IB rev :
+means revisions starting with
+.I rev
+to the end of the branch containing
+.IR rev .
+An argument that is a branch means all
+revisions on that branch.
+A range of branches means all revisions
+on the branches in that range.
+A branch followed by a
+.B .\&
+means the latest revision in that branch.
+A bare
+.B \-r
+with no
+.I revisions
+means the latest revision on the default branch, normally the trunk.
+.TP
+.BI \-s states
+prints information about revisions whose state attributes match one of the
+states given in the comma-separated list
+.IR states .
+.TP
+.BR \-w [\f2logins\fP]
+prints information about revisions checked in by users with
+login names appearing in the comma-separated list
+.IR logins .
+If
+.I logins
+is omitted, the user's login is assumed.
+.TP
+.BI \-V n
+Emulate \*r version
+.I n
+when generating logs.
+See
+.BR co (1)
+for more.
+.TP
+.BI \-x "suffixes"
+Use
+.I suffixes
+to characterize \*r files.
+See
+.BR ci (1)
+for details.
+.PP
+.B rlog
+prints the intersection of the revisions selected with
+the options
+.BR \-d ,
+.BR \-l ,
+.BR \-s ,
+and
+.BR \-w ,
+intersected
+with the union of the revisions selected by
+.B \-b
+and
+.BR \-r .
+.SH EXAMPLES
+.LP
+.nf
+.B "    rlog  \-L  \-R  RCS/*"
+.B "    rlog  \-L  \-h  RCS/*"
+.B "    rlog  \-L  \-l  RCS/*"
+.B "    rlog  RCS/*"
+.fi
+.LP
+The first command prints the names of all \*r files in the subdirectory
+.B RCS
+that have locks.  The second command prints the headers of those files,
+and the third prints the headers plus the log messages of the locked revisions.
+The last command prints complete information.
+.SH ENVIRONMENT
+.TP
+.B \s-1RCSINIT\s0
+options prepended to the argument list, separated by spaces.
+See
+.BR ci (1)
+for details.
+.SH DIAGNOSTICS
+The exit status is zero if and only if all operations were successful.
+.SH IDENTIFICATION
+Author: Walter F. Tichy.
+.br
+Revision Number: \*(Rv; Release Date: \*(Dt.
+.br
+Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+.br
+Copyright \(co 1990, 1991 by Paul Eggert.
+.SH "SEE ALSO"
+ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1),
+rcsfile(5)
+.br
+Walter F. Tichy,
+\*r\*-A System for Version Control,
+.I "Software\*-Practice & Experience"
+.BR 15 ,
+7 (July 1985), 637-654.
+.SH BUGS
+The separator for revision ranges in the
+.B \-r
+option used to be
+.B \-
+instead of
+.BR : ,
+but this leads to confusion when symbolic names contain
+.BR \- .
+For backwards compatibility
+.B "rlog \-r"
+still supports the old
+.B \-
+separator, but it warns about this obsolete use.
+.br
diff --git a/usr/src/contrib/rcs-V5.6/rcs.ps b/usr/src/contrib/rcs-V5.6/rcs.ps
new file mode 100644 (file)
index 0000000..bec9168
--- /dev/null
@@ -0,0 +1,11236 @@
+%!PS-Adobe-1.0
+%%Creator: devps (Pipeline Associates, Inc.)
+%%CreationDate: Fri Jan  4 00:13:52 1991
+%%Pages: (atend)
+%%DocumentFonts: (atend)
+
+/X /exch load def
+/r /rmoveto load def
+/m /moveto load def
+/l /lineto load def
+/rl /rlineto load def
+/lc{yc X xc X l st} bind def
+/mc{yc X xc X m} bind def
+/el{gs /a X def a div 1 X scale cp np a xc 2 div 0 360 arc st gr} bind def
+/ar{cp 7 2 roll np xc 5 1 roll atan 3 1 roll atan X arc st} bind def
+/sp{yc X xc X 6 2 roll yc X xc X 6 2 roll yc X xc X 6 2 roll ct} bind def
+/st /stroke load def
+/gs /gsave load def
+/gr /grestore load def
+/cp /currentpoint load def
+/np /newpath load def
+/ct /curveto load def
+/m0{0 0 moveto} bind def
+/BP{/devps-save save def m0} bind def
+/EP{
+clear devps-save restore
+showpage} bind def
+/res 10.000000 def
+/V{res neg div 792 add
+currentpoint pop X
+m} bind def
+/H{res div
+currentpoint X pop
+transform round exch round exch itransform
+moveto} bind def
+/h{res div 0 r} bind def
+/v{res neg div 0 X r} bind def
+/xc{res div} bind def
+/yc{res neg div 792 add} bind def
+/S{X H show} bind def
+/psize 10 def
+/height 1 def
+/slant 0 def
+/FF{findfont X dup 12 div setlinewidth /psize X def
+    [psize 0 psize height mul slant sin slant cos div mul psize height mul 0 0]
+    makefont setfont} bind def
+/shade{gs
+ /dy X def
+ /dx X def
+ np m
+ setgray
+ 0 dy rl
+ dx 0 rl
+ 0 dy neg rl
+ dx neg 0 rl
+ closepath
+ fill
+gr} bind def
+1 setlinecap
+50 dict dup begin
+/FontType 3 def
+/FontName /DIThacks def
+/FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def
+/FontBBox [-220 -280 1000 1000] def
+/Encoding 256 array def
+0 1 255{Encoding exch /.notdef put}for
+Encoding
+ dup 8#040/space put 
+ dup 8#110/rc put 
+ dup 8#111/lt put 
+ dup 8#112/bv put 
+ dup 8#113/lk put 
+ dup 8#114/lb put 
+ dup 8#115/rt put 
+ dup 8#116/rk put 
+ dup 8#117/rb put 
+ dup 8#120/rf put 
+ dup 8#121/lf put 
+ dup 8#122/lc put 
+ dup 8#140/sq put 
+ dup 8#141/bx put 
+ dup 8#142/ci put 
+ dup 8#143/br put 
+ dup 8#144/rn put 
+ dup 8#145/vr put 
+ dup 8#146/ob put 
+ dup 8#147/bu put 
+ dup 8#150/ru put 
+ dup 8#151/ul put 
+ dup 8#326/sr put
+ pop
+/DITfd 100 dict def
+/BuildChar{0 begin
+ /cc exch def /fd exch def
+ /charname fd /Encoding get cc get def
+ /charwid fd /Metrics get charname get def
+ /charproc fd /CharProcs get charname get def
+ charwid 0 fd /FontBBox get aload pop setcachedevice
+ 2 setlinejoin 40 setlinewidth
+ newpath 0 0 moveto gsave charproc grestore
+ end}def
+/BuildChar load 0 DITfd put
+/CharProcs 50 dict def
+CharProcs begin
+/space{}def
+/.notdef{}def
+/ru{500 0 rls}def
+/rn{0 750 moveto 500 0 rls}def
+/vr{0 800 moveto 0 -770 rls}def
+/bv{0 800 moveto 0 -1000 rls}def
+/br{0 750 moveto 0 -1000 rls}def
+/ul{0 -250 moveto 500 0 rls}def
+/ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def
+/bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def
+/sq{80 0 rmoveto currentpoint dround newpath moveto
+    640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def
+/bx{80 0 rmoveto currentpoint dround newpath moveto
+    640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def
+/ci{355 333 rmoveto currentpoint newpath 333 0 360 arc
+    50 setlinewidth stroke}def
+
+/lt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def
+/lb{0 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def
+/rt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def
+/rb{0 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def
+/lk{0 800 moveto 0 300 -300 300 s4 arcto pop pop 1000 sub
+    0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def
+/rk{0 800 moveto 0 300 s2 300 s4 arcto pop pop 1000 sub
+    0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def
+/lf{0 800 moveto 0 -1000 rlineto s4 0 rls}def
+/rf{0 800 moveto 0 -1000 rlineto s4 neg 0 rls}def
+/lc{0 -200 moveto 0 1000 rlineto s4 0 rls}def
+/rc{0 -200 moveto 0 1000 rlineto s4 neg 0 rls}def
+/sr{395.744681 0 moveto 557.446809 995.744681 lineto 521.276596 1000 lineto
+    382.978723 170.212766 lineto 168.085106 602.127660 lineto
+    8.510638 525.531915 lineto 23.404255 496.170213 lineto
+    127.659574 546.808511 lineto 395.744681 0 lineto closepath fill} def
+end
+
+/Metrics 50 dict def Metrics begin
+/.notdef 0 def
+/space 500 def
+/ru 500 def
+/br 0 def
+/lt 416 def
+/lb 416 def
+/rt 416 def
+/rb 416 def
+/lk 416 def
+/rk 416 def
+/rc 416 def
+/lc 416 def
+/rf 416 def
+/lf 416 def
+/bv 416 def
+/ob 350 def
+/bu 350 def
+/ci 750 def
+/bx 750 def
+/sq 750 def
+/rn 500 def
+/ul 500 def
+/vr 0 def
+/sr 750 def
+end
+
+DITfd begin
+/s2 500 def /s4 250 def /s3 333 def
+/a4p{arcto pop pop pop pop}def
+/2cx{2 copy exch}def
+/rls{rlineto stroke}def
+/currx{currentpoint pop}def
+/dround{transform round exch round exch itransform} def
+end
+end
+/DIThacks exch definefont pop
+
+
+/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap
+currentlinejoin currentdash currentgray currentmiterlimit ] cvx def
+
+/resolution 720 def
+
+/startFig {
+      /SavedState save def
+      userdict maxlength dict begin
+      currentpoint transform
+
+      DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap
+              setlinewidth setmatrix
+
+      itransform moveto
+
+      /ury exch def
+      /urx exch def
+      /lly exch def
+      /llx exch def
+      /y exch 72 mul resolution div def
+      /x exch 72 mul resolution div def
+
+      currentpoint /cy exch def /cx exch def
+
+      /sx x urx llx sub div def       % scaling for x
+      /sy y ury lly sub div def       % scaling for y
+
+      sx sy scale                     % scale by (sx,sy)
+
+      cx sx div llx sub
+      cy sy div ury sub translate
+
+      /DefFigCTM matrix currentmatrix def
+
+      /initmatrix {
+              DefFigCTM setmatrix
+      } def
+      /defaultmatrix {
+              DefFigCTM exch copy
+      } def
+
+      /initgraphics {
+              DocumentInitState setmiterlimit setgray setdash
+                      setlinejoin setlinecap setlinewidth setmatrix
+              DefFigCTM setmatrix
+      } def
+
+      /showpage {
+              initgraphics
+      } def
+
+} def
+/clipFig {
+      currentpoint 6 2 roll
+      newpath 4 copy
+      4 2 roll moveto
+      6 -1 roll exch lineto
+      exch lineto
+      exch lineto
+      closepath clip
+      newpath
+      moveto
+} def
+/doclip { llx lly urx ury clipFig } def
+/endFig {
+      end SavedState restore
+} def
+/globalstart {
+      % Push details about the enviornment on the stack.
+      fontnum fontsize fontslant fontheight
+      % firstpage
+      mh my resolution slotno currentpoint
+      pagesave restore gsave
+} def
+/globalend {
+      grestore moveto
+      /slotno exch def /resolution exch def /my exch def
+      /mh exch def
+      % /firstpage exch def
+      /fontheight exch def
+      /fontslant exch def /fontsize exch def /fontnum exch def
+      F
+      /pagesave save def
+} def
+/C{/Courier FF}def
+/R{/Times-Roman FF}def
+/B{/Times-Bold FF}def
+/I{/Times-Italic FF}def
+%% Troff special characters not on Symbol font
+%% Copyright (C) 1986 by Pipeline Associates, Inc.
+%% Version 1.0
+/altRTD 20 dict def
+altRTD begin
+/s{setcachedevice}def
+/C{1000 1000 scale}def
+/m /moveto load def
+/c /curveto load def
+/S /stroke load def
+/l /lineto load def
+/a /arcto load def
+/p /pop load def
+/sl /setlinewidth load def
+
+end
+/F_Troff 17 dict def F_Troff begin
+systemdict /currentpacking known
+{/SavePacking currentpacking def true setpacking}if
+/PaintType 0 def
+/FontType 3 def
+/StrokeWidth 0 def
+/UniqueID 8277003 def
+/FontMatrix [.001000 0 0 .001000 0 0] def
+/FontBBox [-12 -105 942 855 ] def
+/Encoding 256 array def
+/CD 256 1 add dict def
+/FontInfo 3 dict def FontInfo begin
+/UnderlinePosition -133 def /UnderlineThickness 20 def end
+/FontName (Troff) def
+0 1 256 1 sub{Encoding exch /.notdef put}for
+CD /.notdef{500 0 setcharwidth{}}put
+Encoding (1) 0 get /br put
+%% bold vertical rule used by tbl
+CD /br{
+C
+0 0 -.5 -.5 1 1 s
+np
+.05 sl
+0 -.1 m
+0 .9 l
+{S}
+}put
+Encoding (2) 0 get /ul put
+%% underline used by tbl
+CD /ul{
+C
+.5 0 -.5 -.5 1 1 s
+np
+.05 sl
+0 -.1 m
+.5 -.1 l
+{S}
+}put
+Encoding (3) 0 get /ru put
+%% baseline rule
+CD /ru{
+C
+.5 0 -.5 -.5 1 1 s
+np
+.05 sl
+m0
+.5 0 l
+{S}
+}put
+Encoding (4) 0 get /vr put
+%% vertical rule
+CD /vr{
+C
+0 0 -.5 -.5 1 1 s
+np
+.05 sl
+m0
+0 1 l
+{S}
+}put
+Encoding (5) 0 get /sq put
+%% square
+CD /sq{
+C
+.5 0 -.5 -.5 1 1 s
+np
+.05 sl
+0 .25 m
+0 .5 rl
+.5 0 rl
+0 -.5 rl
+-.5 0 rl
+closepath
+{S}
+}put
+Encoding (6) 0 get /bx put
+%% solid box
+CD /bx{
+C
+.5 0 -.5 -.5 1 1 s
+np
+0 .25 m
+0 .5 rl
+.5 0 rl
+0 -.5 rl
+-.5 0 rl
+closepath
+{fill}
+}put
+Encoding (7) 0 get /rn put
+%% radical extender
+CD /rn{
+C
+.5 0 -.5 -.5 1 1 s
+np
+.03 sl
+-.03 .9 m
+.5 0 rl
+{S}
+}put
+Encoding (8) 0 get /GR put
+%% gray mask
+CD /GR{
+C
+.5 0 setcharwidth
+.5 setgray
+np
+0 -.1 m
+0 1 rl
+.5 0 rl
+0 -1 rl
+-.5 0 rl
+closepath
+{fill}
+}put
+Encoding 97 /a put
+CD /a{1000 0 0 66 942 421 s 430 415
+m 578 406 678 349 662 319 c 655 306 614 287 583
+296 c 570 300 466 340 438 332 c 365 309 335 213
+270 209 c 0 310 m 108 310 l 108 114 l 0
+114 l 0 310 l 42 161 m 42 134 l 66 134 l 66
+161 l 42 161 l 47 155 m 47 140 l 62 140 l 62
+155 l 47 155 l 110 133 m 226 113 300 66 410
+80 c 497 91 550 69 634 76 c 645 76 663 92 669
+107 c 677 125 673 141 668 160 c 725 334 m 758
+332 734 253 701 250 c 501 325 m 475 316 476 309
+473 302 c 465 282 482 263 499 257 c 552 236 615
+253 689 253 c 701 253 713 236 713 218 c 712 194
+702 168 678 161 c 671 159 663 160 655 160 c 591
+158 516 156 479 168 c 461 173 453 191 453 210 c 453
+224 456 235 466 244 c 476 253 490 252 503 255 c 459
+84 m 447 96 435 106 435 123 c 435 136 440 145 447
+155 c 453 163 462 168 469 173 c 110 293 m 173
+318 300 421 435 415 c 609 407 852 416 885 411 c 898
+409 924 411 930 380 c 942 316 828 339 742 334 c 731
+334 730 335 725 335 c 701 336 685 336 660 336 c{S}}put
+Encoding 98 /b put
+CD /b{1000 0 -12 66 930 421 s 500
+415 m 352 406 252 349 268 319 c 275 306 316 287
+347 296 c 360 300 464 340 492 332 c 565 309 595
+213 660 209 c 930 310 m 822 310 l 822 114 l 930
+114 l 930 310 l 888 161 m 888 134 l 864 134
+l 864 161 l 888 161 l 883 155 m 883 140 l 868
+140 l 868 155 l 883 155 l 820 133 m 704 113
+630 66 520 80 c 433 91 380 69 296 76 c 285 76
+267 92 261 107 c 253 125 257 141 262 160 c 205
+334 m 172 332 196 253 229 250 c 429 325 m 455
+316 454 309 457 302 c 465 282 448 263 431 257 c 378
+236 315 253 241 253 c 229 253 217 236 217 218 c 218
+194 228 168 252 161 c 259 159 267 160 275 160 c 339
+158 414 156 451 168 c 469 173 477 191 477 210 c 477
+224 474 235 464 244 c 454 253 440 252 427 255 c 471
+84 m 483 96 495 106 495 123 c 495 136 490 145 483
+155 c 477 163 468 168 461 173 c 820 293 m 757
+318 630 421 495 415 c 321 407 78 416 45 411 c 32
+409 6 411 0 380 c -12 316 102 339 188 334 c 199
+334 200 335 205 335 c 229 336 245 336 270 336 c{S}}put
+Encoding 99 /c put
+CD /c{1000 0 184 0 827 627 s 185 315
+m 186 488 332 627 505 625 c 682 623 827 467 815
+290 c 804 124 666 0 500 0 c 327 0 184 142 185
+315 c{S}}put
+Encoding 100 /d put
+CD /d{590 0 134 158 477 500 s 300
+160 m 208 162 134 238 135 330 c 136 423 212 500
+305 500 c 397 500 473 427 475 335 c 477 239 396
+158 300 160 c{fill}}put
+Encoding 101 /e put    % Bell Symbol
+CD /e{1010 0 -100 -210 1010 1010 s 100 sl 0 setlinecap
+420 300 450 0 360 arc
+420 650 m 420 575 l S
+newpath 120 125 m 720 125 l 75 sl S
+420 125 m 420 25 l S
+220 400 m 220 175 120 175 100 a p p p p
+220 400 m 220 550 420 550 80 a p p p p 
+620 400 m 620 175 720 175 100 a p p p p
+620 400 m 620 550 420 550 80 a p p p p
+295 550 m 545 550 l{S}}put
+/BuildChar{altRTD /BuildChar get exec}def end
+altRTD begin /BuildChar{altRTD begin
+/char exch def /fontdict exch def save
+/charname fontdict /Encoding get char get def
+fontdict /StrokeWidth get sl
+fontdict /CD get dup charname known
+{charname}{/.notdef}ifelse get newpath exec
+fontdict /PaintType get 0 eq{exec}{p S}ifelse
+restore end}def end
+systemdict /currentpacking known{F_Troff /SavePacking get setpacking}if
+/Troff F_Troff definefont pop
+/Y1{/Troff FF}def
+/Y{/Symbol FF}def
+%%EndProlog
+%%Page: 0 1
+BP
+/slant 0 def
+/height 1.000000 def
+10 C
+10 R
+40 V
+0(-)S
+1230 V
+12 B
+1925(RCS\320A)S
+2406(System)S
+2809(for)S
+2998(Version)S
+3434(Control)S
+1620 V
+10 I
+2560(Walter)S
+2862(F.)S
+2978(Tichy)S
+1800 V
+10 R
+2183(Department)S
+2684(of)S
+2797(Computer)S
+3227(Sciences)S
+1920 V
+2512(Purdue)S
+2825(University)S
+2040 V
+2257(West)S
+2492(Lafayette,)S
+2923(Indiana)S
+3252(47907)S
+2640 V
+10 I
+2643(ABSTRACT)S
+2880 V
+10 R
+1330(An)S
+1490(important)S
+1917(problem)S
+2289(in)S
+2406(program)S
+2783(development)S
+3338(and)S
+3521(maintenance)S
+4064(is)S
+4170(version)S
+4503(con-)S
+3000 V
+1080(trol,)S
+1302(i.e.,)S
+1507(the)S
+1687(task)S
+1906(of)S
+2047(keeping)S
+2421(a)S
+2523(software)S
+2924(system)S
+3260(consisting)S
+3724(of)S
+3865(many)S
+4145(versions)S
+4536(and)S
+3120 V
+1080(con\256gurations)S
+1691(well)S
+1902(organized.)S
+2389(The)S
+2583(Revision)S
+2978(Control)S
+3323(System)S
+3657(\(RCS\))S
+3952(is)S
+4058(a)S
+4141(software)S
+4524(tool)S
+3240 V
+1080(that)S
+1280(assists)S
+1586(with)S
+1814(that)S
+2014(task.)S
+2280(RCS)S
+2520(manages)S
+2919(revisions)S
+3330(of)S
+3463(text)S
+3663(documents,)S
+4171(in)S
+4298(particular)S
+3360 V
+1080(source)S
+1376(programs,)S
+1815(documentation,)S
+2471(and)S
+2652(test)S
+2828(data.)S
+3086(It)S
+3184(automates)S
+3626(the)S
+3785(storing,)S
+4125(retrieval,)S
+4519(log-)S
+3480 V
+1080(ging)S
+1289(and)S
+1464(identi\256cation)S
+2023(of)S
+2136(revisions,)S
+2552(and)S
+2726(it)S
+2812(provides)S
+3186(selection)S
+3571(mechanisms)S
+4095(for)S
+4241(composing)S
+3600 V
+1080(con\256gurations.)S
+1745(This)S
+1962(paper)S
+2222(introduces)S
+2677(basic)S
+2921(version)S
+3254(control)S
+3576(concepts)S
+3964(and)S
+4147(discusses)S
+4558(the)S
+3720 V
+1080(practice)S
+1438(of)S
+1564(version)S
+1901(control)S
+2227(using)S
+2487(RCS.)S
+2775(For)S
+2957(conserving)S
+3438(space,)S
+3726(RCS)S
+3958(stores)S
+4233(deltas,)S
+4533(i.e.,)S
+3840 V
+1080(di)S
+1158 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1219(erences)S
+1555(between)S
+1925(successive)S
+2384(revisions.)S
+2838(Several)S
+3175(delta)S
+3407(storage)S
+3734(methods)S
+4112(are)S
+4272(discussed.)S
+3960 V
+1080(Usage)S
+1365(statistics)S
+1746(show)S
+1993(that)S
+2179(RCS's)S
+2476(delta)S
+2705(storage)S
+3028(method)S
+3363(is)S
+3465(space)S
+3721(and)S
+3900(time)S
+4113(e)S
+4157 H
+       (f)show 10 -.5 mul h (\256)show
+10 R
+4241(cient.)S
+4525(The)S
+4080 V
+1080(paper)S
+1331(concludes)S
+1760(with)S
+1968(a)S
+2042(detailed)S
+2388(survey)S
+2684(of)S
+2797(version)S
+3121(control)S
+3434(tools.)S
+4320 V
+10 B
+1080(Keywords)S
+10 R
+1513(:)S
+1579(con\256guration)S
+2150(management,)S
+2723(history)S
+3040(management,)S
+3614(version)S
+3947(control,)S
+4294(revisions,)S
+4440 V
+1080(deltas.)S
+4920 V
+720(1991/01/03)S
+7920 V
+EP
+%%Page: 1 2
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+1230 V
+12 B
+1925(RCS\320A)S
+2406(System)S
+2809(for)S
+2998(Version)S
+3434(Control)S
+1620 V
+10 I
+2560(Walter)S
+2862(F.)S
+2978(Tichy)S
+1800 V
+10 R
+2183(Department)S
+2684(of)S
+2797(Computer)S
+3227(Sciences)S
+1920 V
+2512(Purdue)S
+2825(University)S
+2040 V
+2257(West)S
+2492(Lafayette,)S
+2923(Indiana)S
+3252(47907)S
+2676 V
+10 B
+720(1.)S
+855(Introduction)S
+2892 V
+10 R
+970(Version)S
+1353(control)S
+1703(is)S
+1837(the)S
+2026(task)S
+2254(of)S
+2404(keeping)S
+2787(software)S
+3197(systems)S
+3581(consisting)S
+4054(of)S
+4205(many)S
+4495(versions)S
+4896(and)S
+3072 V
+720(con\256gurations)S
+1337(well)S
+1554(organized.)S
+2047(The)S
+2247(Revision)S
+2648(Control)S
+2999(System)S
+3339(\(RCS\))S
+3639(is)S
+3750(a)S
+3838(set)S
+3993(of)S
+4120(UNIX)S
+4413(commands)S
+4890(that)S
+3252 V
+720(assist)S
+967(with)S
+1175(that)S
+1355(task.)S
+3468 V
+970(RCS')S
+1227(primary)S
+1577(function)S
+1944(is)S
+2045(to)S
+2157(manage)S
+10 I
+2501(revision)S
+2857(groups)S
+10 R
+3135(.)S
+3224(A)S
+3330(revision)S
+3686(group)S
+3953(is)S
+4054(a)S
+4133(set)S
+4279(of)S
+4397(text)S
+4582(documents,)S
+3648 V
+720(called)S
+10 I
+991(revisions)S
+10 R
+1352(,)S
+1410(that)S
+1593(evolved)S
+1942(from)S
+2169(each)S
+2384(other.)S
+2677(A)S
+2781(new)S
+2979(revision)S
+3333(is)S
+3432(created)S
+3751(by)S
+3883(manually)S
+4287(editing)S
+4597(an)S
+4723(existing)S
+3828 V
+720(one.)S
+956(RCS)S
+1183(organizes)S
+1602(the)S
+1761(revisions)S
+2159(into)S
+2352(an)S
+2483(ancestral)S
+2874(tree.)S
+3115(The)S
+3307(initial)S
+3579(revision)S
+3939(is)S
+4044(the)S
+4204(root)S
+4403(of)S
+4524(the)S
+4684(tree,)S
+4896(and)S
+4008 V
+720(the)S
+880(tree)S
+1067(edges)S
+1332(indicate)S
+1686(from)S
+1918(which)S
+2200(revision)S
+2560(a)S
+2642(given)S
+2902(one)S
+3084(evolved.)S
+3493(Besides)S
+3842(managing)S
+4274(individual)S
+4718(revision)S
+4188 V
+720(groups,)S
+1052(RCS)S
+1277(provides)S
+1657(\257exible)S
+1993(selection)S
+2384(functions)S
+2792(for)S
+2944(composing)S
+3419(con\256gurations.)S
+4082(RCS)S
+4308(may)S
+4516(be)S
+4646(combined)S
+4368 V
+720(with)S
+928(MAKE)S
+4318 V
+1222(1)S
+4368 V
+1272(,)S
+1327(resulting)S
+1707(in)S
+1815(a)S
+1889(powerful)S
+2279(package)S
+2635(for)S
+2781(version)S
+3105(control.)S
+4584 V
+970(RCS)S
+1192(also)S
+1385(o)S
+1435 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1496(ers)S
+1644(facilities)S
+2021(for)S
+2170(merging)S
+2536(updates)S
+2874(with)S
+3085(customer)S
+3484(modi\256cations,)S
+4087(for)S
+4236(distributed)S
+4697(software)S
+4764 V
+720(development,)S
+1334(and)S
+1551(for)S
+1740(automatic)S
+2207(identi\256cation.)S
+2863(Identi\256cation)S
+3469(is)S
+3609(the)S
+3803(`stamping')S
+4308(of)S
+4463(revisions)S
+4896(and)S
+4944 V
+720(con\256gurations)S
+1336(with)S
+1558(unique)S
+1874(markers.)S
+2294(These)S
+2576(markers)S
+2941(are)S
+3106(akin)S
+3322(to)S
+3444(serial)S
+3704(numbers,)S
+4118(telling)S
+4419(software)S
+4807(main-)S
+5124 V
+720(tainers)S
+1016(unambiguously)S
+1663(which)S
+1937(con\256guration)S
+2500(is)S
+2597(before)S
+2881(them.)S
+5340 V
+970(RCS)S
+1194(is)S
+1295(designed)S
+1684(for)S
+1835(both)S
+2048(production)S
+2516(and)S
+2695(experimental)S
+3251(environments.)S
+3885(In)S
+4003(production)S
+4471(environments,)S
+5520 V
+720(access)S
+1014(controls)S
+1376(detect)S
+1654(update)S
+1959(con\257icts)S
+2337(and)S
+2520(prevent)S
+2858(overlapping)S
+3374(changes.)S
+3789(In)S
+3911(experimental)S
+4471(environments,)S
+5700 V
+720(where)S
+993(strong)S
+1273(controls)S
+1625(are)S
+1776(counterproductive,)S
+2557(it)S
+2643(is)S
+2740(possible)S
+3098(to)S
+3206(loosen)S
+3497(the)S
+3649(controls.)S
+5916 V
+970(Although)S
+1389(RCS)S
+1621(was)S
+1818(originally)S
+2249(intended)S
+2635(for)S
+2793(programs,)S
+3237(it)S
+3335(is)S
+3444(useful)S
+3730(for)S
+3888(any)S
+4074(text)S
+4266(that)S
+4458(is)S
+4567(revised)S
+4897(fre-)S
+6096 V
+720(quently)S
+1054(and)S
+1232(whose)S
+1521(previous)S
+1898(revisions)S
+2292(must)S
+2520(be)S
+2647(preserved.)S
+3122(RCS)S
+3345(has)S
+3511(been)S
+3732(applied)S
+4059(successfully)S
+4580(to)S
+4691(store)S
+4918(the)S
+6276 V
+720(source)S
+1010(text)S
+1190(for)S
+1336(drawings,)S
+1757(VLSI)S
+2009(layouts,)S
+2353(documentation,)S
+3002(speci\256cations,)S
+3601(test)S
+3770(data,)S
+3991(form)S
+4215(letters)S
+4489(and)S
+4663(articles.)S
+6492 V
+970(This)S
+1191(paper)S
+1455(discusses)S
+1870(the)S
+2035(practice)S
+2393(of)S
+2519(version)S
+2856(control)S
+3182(using)S
+3442(RCS.)S
+3730(It)S
+3834(also)S
+4038(introduces)S
+4497(basic)S
+4746(version)S
+6672 V
+720(control)S
+1036(concepts,)S
+1443(useful)S
+1720(for)S
+1869(clarifying)S
+2290(current)S
+2605(practice)S
+2953(and)S
+3130(designing)S
+3551(similar)S
+3861(systems.)S
+4265(Revision)S
+4653(groups)S
+4957(of)S
+6852 V
+720(individual)S
+1161(components)S
+1679(are)S
+1835(treated)S
+2141(in)S
+2254(the)S
+2411(next)S
+2618(three)S
+2853(sections,)S
+3236(and)S
+3416(the)S
+3574(extensions)S
+4032(to)S
+4146(con\256gurations)S
+4754(follow.)S
+7032 V
+720(Because)S
+1082(of)S
+1195(its)S
+1320(size,)S
+1530(a)S
+1604(survey)S
+1900(of)S
+2013(version)S
+2337(control)S
+2650(tools)S
+2875(appears)S
+3209(at)S
+3311(the)S
+3463(end)S
+3637(of)S
+3750(the)S
+3902(paper.)S
+7132 V
+8 Y1
+720(333333333333333333)S
+7232 V
+8 R
+720(An)S
+842(earlier)S
+1067(version)S
+1325(of)S
+1415(this)S
+1554(paper)S
+1754(was)S
+1902(published)S
+2236(in)S
+8 I
+2322(Software\320Practice)S
+2970(&)S
+3056(Experience)S
+8 B
+3450(15)S
+8 R
+3530(,)S
+3574(7)S
+3638(\(July)S
+3821(1985\),)S
+4051(637-654.)S
+7920 V
+EP
+%%Page: 2 3
+BP
+/slant 0 def
+/height 1.000000 def
+8 R
+8 R
+40 V
+10 R
+0(-)S
+580 V
+2792(- 2 -)S
+900 V
+10 B
+720(2.)S
+855(Getting)S
+1207(started)S
+1536(with)S
+1755(RCS)S
+1116 V
+10 R
+970(Suppose)S
+1339(a)S
+1413(text)S
+1593(\256le)S
+10 I
+1751(f.c)S
+10 R
+1878(is)S
+1975(to)S
+2083(be)S
+2207(placed)S
+2497(under)S
+2754(control)S
+3067(of)S
+3180(RCS.)S
+3455(Invoking)S
+3846(the)S
+3998(check-in)S
+4371(command)S
+1296 V
+10 I
+1080(ci)S
+1212(f.c)S
+1536 V
+10 R
+720(creates)S
+1030(a)S
+1108(new)S
+1308(revision)S
+1664(group)S
+1931(with)S
+2143(the)S
+2299(contents)S
+2666(of)S
+10 I
+2783(f.c)S
+10 R
+2914(as)S
+3031(the)S
+3187(initial)S
+3455(revision)S
+3811(\(numbered)S
+4278(1.1\))S
+4471(and)S
+4650(stores)S
+4918(the)S
+1716 V
+720(group)S
+986(into)S
+1175(the)S
+1330(\256le)S
+10 I
+1491(f.c,v)S
+10 R
+1657(.)S
+1745(Unless)S
+2050(told)S
+2239(otherwise,)S
+2685(the)S
+2840(command)S
+3267(deletes)S
+10 I
+3577(f.c)S
+10 R
+3674(.)S
+3762(It)S
+3856(also)S
+4050(asks)S
+4255(for)S
+4404(a)S
+4481(description)S
+4957(of)S
+1896 V
+720(the)S
+878(group.)S
+1202(The)S
+1393(description)S
+1873(should)S
+2176(state)S
+2395(the)S
+2553(common)S
+2939(purpose)S
+3291(of)S
+3410(all)S
+3546(revisions)S
+3943(in)S
+4057(the)S
+4215(group,)S
+4510(and)S
+4691(becomes)S
+2076 V
+720(part)S
+913(of)S
+1034(the)S
+1194(group's)S
+1537(documentation.)S
+2224(All)S
+2390(later)S
+2605(check-in)S
+2986(commands)S
+3457(will)S
+3651(ask)S
+3822(for)S
+3976(a)S
+4058(log)S
+4224(entry,)S
+4492(which)S
+4773(should)S
+2256 V
+720(summarize)S
+1197(the)S
+1358(changes)S
+1718(made.)S
+2029(\(The)S
+2257(\256rst)S
+2453(revision)S
+2815(is)S
+2922(assigned)S
+3306(a)S
+3390(default)S
+3707(log)S
+3875(message,)S
+4278(which)S
+4562(just)S
+4747(records)S
+2436 V
+720(the)S
+872(fact)S
+1051(that)S
+1231(it)S
+1317(is)S
+1414(the)S
+1566(initial)S
+1830(revision.\))S
+2652 V
+970(Files)S
+1204(ending)S
+1515(in)S
+10 I
+1632(,v)S
+10 R
+1740(are)S
+1900(called)S
+10 I
+2177(RCS)S
+2394(files)S
+10 R
+2600(\()S
+10 I
+2633(v)S
+10 R
+2716(stands)S
+3006(for)S
+10 I
+3162(v)S
+10 R
+3206(ersions\);)S
+3590(the)S
+3752(others)S
+4036(are)S
+4197(called)S
+4475(working)S
+4848(\256les.)S
+2832 V
+720(To)S
+861(get)S
+1013(back)S
+1231(the)S
+1383(working)S
+1746(\256le)S
+10 I
+1904(f.c)S
+10 R
+2031(in)S
+2139(the)S
+2291(previous)S
+2665(example,)S
+3058(execute)S
+3392(the)S
+3544(check-out)S
+3967(command:)S
+3012 V
+10 I
+1080(co)S
+1234(f.c)S
+3252 V
+10 R
+720(This)S
+932(command)S
+1360(extracts)S
+1704(the)S
+1860(latest)S
+2105(revision)S
+2461(from)S
+2689(the)S
+2845(revision)S
+3201(group)S
+10 I
+3468(f.c,v)S
+10 R
+3668(and)S
+3846(writes)S
+4124(it)S
+4214(into)S
+10 I
+4404(f.c)S
+10 R
+4501(.)S
+4590(The)S
+4780(\256le)S
+10 I
+4943(f.c)S
+3432 V
+10 R
+720(can)S
+888(now)S
+1090(be)S
+1214(edited)S
+1488(and,)S
+1687(when)S
+1933(\256nished,)S
+2305(checked)S
+2661(back)S
+2879(in)S
+2987(with)S
+10 I
+3195(ci)S
+10 R
+3267(:)S
+3612 V
+10 I
+1080(ci)S
+1212(f.c)S
+3852 V
+720(Ci)S
+10 R
+845(assigns)S
+1164(number)S
+1499(1.2)S
+1654(to)S
+1762(the)S
+1914(new)S
+2110(revision.)S
+2517(If)S
+10 I
+2613(ci)S
+10 R
+2715(complains)S
+3156(with)S
+3364(the)S
+3516(message)S
+4032 V
+10 I
+1080(ci)S
+1182(error:)S
+1456(no)S
+1586(lock)S
+1782(set)S
+1923(by)S
+2047(<login>)S
+4272 V
+10 R
+720(then)S
+922(the)S
+1074(system)S
+1383(administrator)S
+1947(has)S
+2111(decided)S
+2452(to)S
+2561(con\256gure)S
+2969(RCS)S
+3190(for)S
+3337(a)S
+3412(production)S
+3876(environment)S
+4412(by)S
+4543(enabling)S
+4918(the)S
+4452 V
+720(`strict)S
+993(locking)S
+1333(feature'.)S
+1736(If)S
+1841(this)S
+2025(feature)S
+2340(is)S
+2446(enabled,)S
+2820(all)S
+2959(RCS)S
+3188(\256les)S
+3394(are)S
+3554(initialized)S
+3993(such)S
+4215(that)S
+4404(check-in)S
+4786(opera-)S
+4632 V
+720(tions)S
+959(require)S
+1285(a)S
+1373(lock)S
+1590(on)S
+1735(the)S
+1902(previous)S
+2291(revision)S
+2658(\(the)S
+2858(one)S
+3047(from)S
+3286(which)S
+3575(the)S
+3742(current)S
+4069(one)S
+4258(evolved\).)S
+4707(Locking)S
+4812 V
+720(prevents)S
+1100(overlapping)S
+1619(modi\256cations)S
+2206(if)S
+2309(several)S
+2633(people)S
+2941(work)S
+3188(on)S
+3330(the)S
+3494(same)S
+3740(\256le.)S
+3964(If)S
+4071(locking)S
+4412(is)S
+4520(required,)S
+4918(the)S
+4992 V
+720(revision)S
+1072(should)S
+1369(have)S
+1587(been)S
+1805(locked)S
+2101(during)S
+2392(the)S
+2544(check-out)S
+2967(by)S
+3097(using)S
+3344(the)S
+3496(option)S
+10 I
+3782(\261l)S
+10 R
+3860(:)S
+5172 V
+10 I
+1080(co)S
+1234(\261l)S
+1372(f.c)S
+5412 V
+10 R
+720(Of)S
+858(course)S
+1151(it)S
+1240(is)S
+1340(too)S
+1501(late)S
+1678(now)S
+1883(for)S
+2032(the)S
+2187(check-out)S
+2614(with)S
+2826(locking,)S
+3185(because)S
+10 I
+3534(f.c)S
+10 R
+3665(has)S
+3832(already)S
+4159(been)S
+4381(changed;)S
+4775(check-)S
+5592 V
+720(ing)S
+880(out)S
+1040(the)S
+1194(\256le)S
+1354(again)S
+1602(would)S
+1884(overwrite)S
+2298(the)S
+2452(modi\256cations.)S
+3084(\(To)S
+3260(prevent)S
+3591(accidental)S
+4027(overwrites,)S
+10 I
+4505(co)S
+10 R
+4631(senses)S
+4918(the)S
+5772 V
+720(presence)S
+1111(of)S
+1237(a)S
+1324(working)S
+1700(\256le)S
+1871(and)S
+2058(asks)S
+2273(whether)S
+2637(the)S
+2803(user)S
+3013(really)S
+3284(intended)S
+3672(to)S
+3794(overwrite)S
+4220(it.)S
+4375(The)S
+4574(overwriting)S
+5952 V
+720(check-out)S
+1151(is)S
+1256(sometimes)S
+1722(useful)S
+2004(for)S
+2158(backing)S
+2512(up)S
+2650(to)S
+2766(the)S
+2926(previous)S
+3307(revision.\))S
+3754(To)S
+3902(be)S
+4033(able)S
+4236(to)S
+4351(proceed)S
+4703(with)S
+4918(the)S
+6132 V
+720(check-in)S
+1093(in)S
+1201(the)S
+1353(present)S
+1671(case,)S
+1897(\256rst)S
+2083(execute)S
+6312 V
+10 I
+1080(rcs)S
+1262(\261l)S
+1400(f.c)S
+6552 V
+10 R
+720(This)S
+933(command)S
+1363(retroactively)S
+1903(locks)S
+2150(the)S
+2308(latest)S
+2555(revision,)S
+2938(unless)S
+3224(someone)S
+3615(else)S
+3806(locked)S
+4108(it)S
+4200(in)S
+4314(the)S
+4472(meantime.)S
+4957(In)S
+6732 V
+720(this)S
+895(case,)S
+1121(the)S
+1273(two)S
+1453(programmers)S
+2015(involved)S
+2395(have)S
+2613(to)S
+2721(negotiate)S
+3117(whose)S
+3402(modi\256cations)S
+3977(should)S
+4274(take)S
+4470(precedence.)S
+6948 V
+970(If)S
+1073(an)S
+1204(RCS)S
+1431(\256le)S
+1596(is)S
+1700(private,)S
+2039(i.e.,)S
+2223(if)S
+2321(only)S
+2536(the)S
+2695(owner)S
+2981(of)S
+3101(the)S
+3260(\256le)S
+3426(is)S
+3531(expected)S
+3923(to)S
+4039(deposit)S
+4366(revisions)S
+4765(into)S
+4959(it,)S
+7128 V
+720(the)S
+879(strict)S
+1116(locking)S
+1453(feature)S
+1766(is)S
+1870(unnecessary)S
+2394(and)S
+2575(may)S
+2784(be)S
+2915(disabled.)S
+3340(If)S
+3443(strict)S
+3680(locking)S
+4017(is)S
+4120(disabled,)S
+4514(the)S
+4672(owner)S
+4957(of)S
+7308 V
+720(the)S
+884(RCS)S
+1117(\256le)S
+1288(need)S
+1519(not)S
+1690(have)S
+1921(a)S
+2008(lock)S
+2223(for)S
+2382(check-in.)S
+2823(For)S
+3005(safety)S
+3286(reasons,)S
+3653(all)S
+3796(others)S
+4083(still)S
+4277(do.)S
+4475(Turning)S
+4840(strict)S
+7920 V
+EP
+%%Page: 3 4
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2792(- 3 -)S
+900 V
+720(locking)S
+1050(o)S
+1100 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1191(and)S
+1365(on)S
+1495(is)S
+1592(done)S
+1816(with)S
+2024(the)S
+2176(commands:)S
+1080 V
+10 I
+1080(rcs)S
+1262(\261U)S
+1444(f.c)S
+10 R
+1751(and)S
+10 I
+2165(rcs)S
+2347(\261L)S
+2513(f.c)S
+1320 V
+10 R
+720(These)S
+993(commands)S
+1461(enable)S
+1756(or)S
+1875(disable)S
+2194(the)S
+2352(strict)S
+2588(locking)S
+2924(feature)S
+3236(for)S
+3388(each)S
+3606(RCS)S
+3832(\256le)S
+3996(individually.)S
+4571(The)S
+4762(system)S
+1500 V
+720(administrator)S
+1283(only)S
+1491(decides)S
+1820(whether)S
+2171(strict)S
+2401(locking)S
+2731(is)S
+2828(enabled)S
+3168(initially.)S
+1716 V
+970(To)S
+1114(reduce)S
+1412(the)S
+1567(clutter)S
+1855(in)S
+1966(a)S
+2043(working)S
+2409(directory,)S
+2827(all)S
+2960(RCS)S
+3183(\256les)S
+3383(can)S
+3554(be)S
+3681(moved)S
+3986(to)S
+4097(a)S
+4174(subdirectory)S
+4706(with)S
+4918(the)S
+1896 V
+720(name)S
+10 I
+980(RCS)S
+10 R
+1158(.)S
+1257(RCS)S
+1491(commands)S
+1968(look)S
+2190(\256rst)S
+2390(into)S
+2590(that)S
+2784(directory)S
+3188(for)S
+3348(RCS)S
+3581(\256les.)S
+3846(All)S
+4017(the)S
+4182(commands)S
+4658(presented)S
+2076 V
+720(above)S
+988(work)S
+1223(with)S
+1431(the)S
+10 I
+1583(RCS)S
+10 R
+1791(subdirectory)S
+2320(without)S
+2656(change.\262)S
+2292 V
+970(It)S
+1068(may)S
+1277(be)S
+1408(undesirable)S
+1906(that)S
+10 I
+2094(ci)S
+10 R
+2204(deletes)S
+2519(the)S
+2679(working)S
+3050(\256le.)S
+3271(For)S
+3448(instance,)S
+3838(sometimes)S
+4304(one)S
+4486(would)S
+4774(like)S
+4962(to)S
+2472 V
+720(save)S
+927(the)S
+1079(current)S
+1391(revision,)S
+1768(but)S
+1926(continue)S
+2300(editing.)S
+2663(Invoking)S
+2652 V
+10 I
+1080(ci)S
+1212(\261l)S
+1350(f.c)S
+2892 V
+10 R
+720(checks)S
+1027(in)S
+10 I
+1141(f.c)S
+10 R
+1274(as)S
+1393(usual,)S
+1665(but)S
+1829(performs)S
+2225(an)S
+2355(additional)S
+2792(check-out)S
+3222(with)S
+3437(locking)S
+3774(afterwards.)S
+4286(Thus,)S
+4548(the)S
+4707(working)S
+3072 V
+720(\256le)S
+883(does)S
+1101(not)S
+1264(disappear)S
+1681(after)S
+1898(the)S
+2055(check-in.)S
+2488(Similarly,)S
+2921(the)S
+3078(option)S
+10 I
+3368(\261u)S
+10 R
+3502(does)S
+3719(a)S
+3797(check-in)S
+4174(followed)S
+4563(by)S
+4697(a)S
+4775(check-)S
+3252 V
+720(out)S
+885(without)S
+1228(locking.)S
+1620(This)S
+1835(option)S
+2128(is)S
+2232(useful)S
+2513(if)S
+2611(the)S
+2770(\256le)S
+2935(is)S
+3039(needed)S
+3359(for)S
+3513(compilation)S
+4029(after)S
+4249(the)S
+4409(check-in.)S
+4845(Both)S
+3432 V
+720(options)S
+1045(update)S
+1341(the)S
+1493(identi\256cation)S
+2051(markers)S
+2402(in)S
+2510(the)S
+2662(working)S
+3025(\256le)S
+3183(\(see)S
+3373(below\).)S
+3648 V
+970(Besides)S
+1311(the)S
+1463(operations)S
+10 I
+1909(ci)S
+10 R
+2011(and)S
+10 I
+2185(co)S
+10 R
+2279(,)S
+2334(RCS)S
+2554(provides)S
+2928(the)S
+3080(following)S
+3499(commands:)S
+3828 V
+10 I
+720(ident)S
+10 R
+1241(extract)S
+1542(identi\256cation)S
+2100(markers)S
+3948 V
+10 I
+720(rcs)S
+10 R
+1241(change)S
+1553(RCS)S
+1773(\256le)S
+1931(attributes)S
+4068 V
+10 I
+720(rcsclean)S
+10 R
+1241(remove)S
+1570(unchanged)S
+2032(working)S
+2395(\256les)S
+2592(\(optional\))S
+4188 V
+10 I
+720(rcsdiff)S
+10 R
+1241(compare)S
+1614(revisions)S
+4308 V
+10 I
+720(rcsfreeze)S
+10 R
+1241(record)S
+1525(a)S
+1599(con\256guration)S
+2162(\(optional\))S
+4428 V
+10 I
+720(rcsmerge)S
+10 R
+1241(merge)S
+1520(revisions)S
+4548 V
+10 I
+720(rlog)S
+10 R
+1241(read)S
+1442(log)S
+1600(messages)S
+2007(and)S
+2181(other)S
+2416(information)S
+2918(in)S
+3026(RCS)S
+3246(\256les)S
+4728 V
+720(A)S
+822(synopsis)S
+1197(of)S
+1310(these)S
+1545(commands)S
+2008(appears)S
+2342(in)S
+2450(the)S
+2602(Appendix.)S
+4968 V
+10 B
+720(2.1.)S
+930(Automatic)S
+1409(Identi\256cation)S
+5124 V
+10 R
+970(RCS)S
+1201(can)S
+1381(stamp)S
+1662(source)S
+1964(and)S
+2150(object)S
+2436(code)S
+2666(with)S
+2886(special)S
+3205(identi\256cation)S
+3775(strings,)S
+4109(similar)S
+4429(to)S
+4549(product)S
+4896(and)S
+5244 V
+720(serial)S
+966(numbers.)S
+1395(To)S
+1536(obtain)S
+1816(such)S
+2029(identi\256cation,)S
+2612(place)S
+2852(the)S
+3004(marker)S
+5424 V
+10 I
+1080($Id$)S
+5664 V
+10 R
+720(into)S
+923(the)S
+1092(text)S
+1289(of)S
+1419(a)S
+1510(revision,)S
+1904(for)S
+2067(instance)S
+2441(inside)S
+2727(a)S
+2818(comment.)S
+3292(The)S
+3494(check-out)S
+3934(operation)S
+4358(will)S
+4561(replace)S
+4895(this)S
+5844 V
+720(marker)S
+1032(with)S
+1240(a)S
+1314(string)S
+1572(of)S
+1685(the)S
+1837(form)S
+6024 V
+10 I
+1080($Id:)S
+1306(filename)S
+1710(revisionnumber)S
+2397(date)S
+2629(time)S
+2861(author)S
+3188(state)S
+3437(locker)S
+3716($)S
+6264 V
+10 R
+720(This)S
+929(string)S
+1188(need)S
+1407(never)S
+1659(be)S
+1784(touched,)S
+2156(because)S
+10 I
+2502(co)S
+10 R
+2627(keeps)S
+2885(it)S
+2972(up)S
+3103(to)S
+3212(date)S
+3409(automatically.)S
+4039(To)S
+4181(propagate)S
+4605(the)S
+4758(marker)S
+6444 V
+720(into)S
+906(object)S
+1180(code,)S
+1423(simply)S
+1726(put)S
+1884(it)S
+1970(into)S
+2156(a)S
+2230(literal)S
+2493(character)S
+2887(string.)S
+3200(In)S
+3313(C,)S
+3435(this)S
+3610(is)S
+3707(done)S
+3931(as)S
+4044(follows:)S
+6702 V
+8 Y1
+720(333333333333333333)S
+6820 V
+8 R
+820(\262)S
+900(Pairs)S
+1088(of)S
+1184(RCS)S
+1367(and)S
+1512(working)S
+1808(\256les)S
+1971(can)S
+2111(actually)S
+2392(be)S
+2497(speci\256ed)S
+2810(in)S
+2902(3)S
+2972(ways:)S
+3188(a\))S
+3279(both)S
+3451(are)S
+3577(given,)S
+3804(b\))S
+3900(only)S
+4072(the)S
+4199(working)S
+4495(\256le)S
+4627(is)S
+6920 V
+720(given,)S
+945(c\))S
+1034(only)S
+1204(the)S
+1329(RCS)S
+1510(\256le)S
+1640(is)S
+1721(given.)S
+1970(If)S
+2050(a)S
+2113(pair)S
+2264(is)S
+2345(given,)S
+2570(both)S
+2740(\256les)S
+2900(may)S
+3064(have)S
+3241(arbitrary)S
+3540(path)S
+3704(pre\256xes;)S
+4005(RCS)S
+4185(commands)S
+4557(pair)S
+7020 V
+720(them)S
+903(up)S
+1007(intelligently.)S
+7920 V
+EP
+%%Page: 4 5
+BP
+/slant 0 def
+/height 1.000000 def
+8 R
+8 R
+40 V
+10 R
+0(-)S
+520 V
+2792(- 4 -)S
+900 V
+10 I
+1080(static)S
+1327(char)S
+1540(rcsid[])S
+1848(=)S
+1946("$Id$";)S
+1140 V
+10 R
+720(The)S
+914(command)S
+10 I
+1347(ident)S
+10 R
+1586(extracts)S
+1935(such)S
+2157(markers)S
+2517(from)S
+2750(any)S
+2933(\256le,)S
+3125(in)S
+3243(particular)S
+3665(from)S
+3899(object)S
+4183(code.)S
+10 I
+4466(Ident)S
+10 R
+4711(helps)S
+4962(to)S
+1320 V
+720(\256nd)S
+921(out)S
+1094(which)S
+1383(revisions)S
+1789(of)S
+1917(which)S
+2206(modules)S
+2590(were)S
+2828(used)S
+3056(in)S
+3179(a)S
+3268(given)S
+3535(program.)S
+3972(It)S
+4077(returns)S
+4398(a)S
+4486(complete)S
+4896(and)S
+1500 V
+720(unambiguous)S
+1300(component)S
+1785(list,)S
+1974(from)S
+2209(which)S
+2494(a)S
+2579(copy)S
+2814(of)S
+2938(the)S
+3101(program)S
+3480(can)S
+3659(be)S
+3794(reconstructed.)S
+4428(This)S
+4648(facility)S
+4973(is)S
+1680 V
+720(invaluable)S
+1166(for)S
+1312(program)S
+1680(maintenance.)S
+1896 V
+970(There)S
+1232(are)S
+1383(several)S
+1695(additional)S
+2125(identi\256cation)S
+2683(markers,)S
+3059(one)S
+3233(for)S
+3379(each)S
+3591(component)S
+4065(of)S
+4178($Id$.)S
+4446(The)S
+4631(marker)S
+2076 V
+10 I
+1080($Log$)S
+2316 V
+10 R
+720(has)S
+894(a)S
+979(similar)S
+1298(function.)S
+1727(It)S
+1829(accumulates)S
+2363(the)S
+2526(log)S
+2695(messages)S
+3113(that)S
+3304(are)S
+3466(requested)S
+3889(during)S
+4191(check-in.)S
+4630(Thus,)S
+4896(one)S
+2496 V
+720(can)S
+891(maintain)S
+1274(the)S
+1429(complete)S
+1828(history)S
+2139(of)S
+2255(a)S
+2332(revision)S
+2687(directly)S
+3025(inside)S
+3297(it,)S
+3411(by)S
+3544(enclosing)S
+3960(it)S
+4049(in)S
+4160(a)S
+4237(comment.)S
+4697(Figure)S
+4990(1)S
+2676 V
+720(is)S
+822(a)S
+901(partial)S
+1191(reproduction)S
+1736(of)S
+1854(a)S
+1933(log)S
+2096(contained)S
+2519(in)S
+2632(revision)S
+2990(4.1)S
+3151(of)S
+3270(the)S
+3428(\256le)S
+10 I
+3592(ci.c)S
+10 R
+3733(.)S
+3824(The)S
+4015(log)S
+4179(appears)S
+4519(at)S
+4627(the)S
+4785(begin-)S
+2856 V
+720(ning)S
+928(of)S
+1041(the)S
+1193(\256le,)S
+1376(and)S
+1550(makes)S
+1835(it)S
+1921(easy)S
+2128(to)S
+2236(determine)S
+2665(what)S
+2889(the)S
+3041(recent)S
+3314(modi\256cations)S
+3889(were.)S
+3156 V
+1080(/*)S
+1188($Log:)S
+1457(ci.c,v)S
+1703($)S
+3276 V
+1110(*)S
+1190(Revision)S
+1576(4.1)S
+1761(1983/05/10)S
+2277(17:03:06)S
+2693(wft)S
+3396 V
+1110(*)S
+1190(Added)S
+1486(option)S
+1772(\261d)S
+1902(and)S
+2076(\261w,)S
+2253(and)S
+2427(updated)S
+2773(assignment)S
+3253(of)S
+3366(date,)S
+3587(etc.)S
+3758(to)S
+3866(new)S
+4062(delta.)S
+3516 V
+1110(*)S
+1190(Added)S
+1486(handling)S
+1866(of)S
+1979(default)S
+2286(branches.)S
+3636 V
+1110(*)S
+3756 V
+1110(*)S
+1190(Revision)S
+1576(3.9)S
+1761(1983/02/15)S
+2277(15:25:44)S
+2693(wft)S
+3876 V
+1110(*)S
+1190(Added)S
+1486(call)S
+1660(to)S
+1768(fastcopy\(\))S
+2202(to)S
+2310(copy)S
+2534(remainder)S
+2968(of)S
+3081(RCS)S
+3301(\256le.)S
+3996 V
+1110(*)S
+4116 V
+1110(*)S
+1190(Revision)S
+1576(3.8)S
+1761(1983/01/14)S
+2277(15:34:05)S
+2693(wft)S
+4236 V
+1110(*)S
+1190(Added)S
+1486(ignoring)S
+1855(of)S
+1968(interrupts)S
+2381(while)S
+2633(new)S
+2829(RCS)S
+3049(\256le)S
+3207(is)S
+3304(renamed;)S
+4356 V
+1110(*)S
+1190(avoids)S
+1481(deletion)S
+1833(of)S
+1946(RCS)S
+2166(\256les)S
+2363(by)S
+2493(interrupts.)S
+4476 V
+1110(*)S
+4596 V
+1110(*)S
+1190(Revision)S
+1576(3.7)S
+1761(1982/12/10)S
+2277(16:09:20)S
+2693(wft)S
+4716 V
+1110(*)S
+1190(Corrected)S
+1613(checking)S
+2003(of)S
+2116(return)S
+2384(code)S
+2602(from)S
+2826(di)S
+2904 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2965(.)S
+4836 V
+1110(*)S
+1190(An)S
+1342(RCS)S
+1562(\256le)S
+1720(now)S
+1922(inherits)S
+2252(its)S
+2377(mode)S
+2629(during)S
+2920(the)S
+3072(\256rst)S
+3258(ci)S
+3360(from)S
+3584(the)S
+3736(working)S
+4099(\256le,)S
+4956 V
+1110(*)S
+1190(except)S
+1480(that)S
+1660(write)S
+1895(permission)S
+2364(is)S
+2461(removed.)S
+5076 V
+1110(*/)S
+5196 V
+1783(Figure)S
+2074(1.)S
+2209(Log)S
+2400(entries)S
+2696(produced)S
+3097(by)S
+3227(the)S
+3379(marker)S
+3691($Log$.)S
+5412 V
+720(Since)S
+973(revisions)S
+1365(are)S
+1517(stored)S
+1792(in)S
+1901(the)S
+2054(form)S
+2279(of)S
+2393(di)S
+2471 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2532(erences,)S
+2886(each)S
+3099(log)S
+3258(message)S
+3628(is)S
+3727(physically)S
+4170(stored)S
+4446(once,)S
+4691(indepen-)S
+5592 V
+720(dent)S
+922(of)S
+1035(the)S
+1187(number)S
+1522(of)S
+1635(revisions)S
+2026(present.)S
+2399(Thus,)S
+2654(the)S
+2806($Log$)S
+3097(marker)S
+3409(incurs)S
+3683(negligible)S
+4113(space)S
+4364(overhead.)S
+5952 V
+10 B
+720(3.)S
+855(The)S
+1052(RCS)S
+1282(Revision)S
+1679(Tree)S
+6168 V
+10 R
+970(RCS)S
+1198(arranges)S
+1573(revisions)S
+1972(in)S
+2089(an)S
+2222(ancestral)S
+2615(tree.)S
+2858(The)S
+10 I
+3052(ci)S
+10 R
+3163(command)S
+3596(builds)S
+3880(this)S
+4064(tree;)S
+4280(the)S
+4441(auxiliary)S
+4835(com-)S
+6348 V
+720(mand)S
+10 I
+983(rcs)S
+10 R
+1146(prunes)S
+1453(it.)S
+1605(The)S
+1801(tree)S
+1991(has)S
+2165(a)S
+2250(root)S
+2452(revision,)S
+2840(normally)S
+3242(numbered)S
+3682(1.1,)S
+3873(and)S
+4057(successive)S
+4518(revisions)S
+4919(are)S
+6528 V
+720(numbered)S
+1154(1.2,)S
+1339(1.3,)S
+1524(etc.)S
+1730(The)S
+1921(\256rst)S
+2113(\256eld)S
+2327(of)S
+2446(a)S
+2526(revision)S
+2884(number)S
+3225(is)S
+3328(called)S
+3602(the)S
+10 I
+3760(release)S
+4084(number)S
+10 R
+4425(and)S
+4605(the)S
+4763(second)S
+6708 V
+720(one)S
+900(the)S
+10 I
+1058(level)S
+1282(number)S
+10 R
+1587(.)S
+1677(Unless)S
+1984(given)S
+2241(explicitly,)S
+2679(the)S
+10 I
+2836(ci)S
+10 R
+2943(command)S
+3372(assigns)S
+3696(a)S
+3775(new)S
+3976(revision)S
+4333(number)S
+4673(by)S
+4808(incre-)S
+6888 V
+720(menting)S
+1085(the)S
+1244(level)S
+1475(number)S
+1817(of)S
+1937(the)S
+2096(previous)S
+2477(revision.)S
+2891(The)S
+3084(release)S
+3398(number)S
+3741(must)S
+3974(be)S
+4106(incremented)S
+4637(explicitly,)S
+7068 V
+720(using)S
+974(the)S
+10 I
+1133(\261r)S
+10 R
+1259(option)S
+1551(of)S
+10 I
+1670(ci)S
+10 R
+1742(.)S
+1833(Assuming)S
+2275(there)S
+2510(are)S
+2667(revisions)S
+3064(1.1,)S
+3250(1.2,)S
+3436(and)S
+3616(1.3)S
+3777(in)S
+3891(the)S
+4049(RCS)S
+4275(\256le)S
+4439(f.c,v,)S
+4677(the)S
+4835(com-)S
+7248 V
+720(mand)S
+7920 V
+EP
+%%Page: 5 6
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2792(- 5 -)S
+900 V
+10 I
+1080(ci)S
+1212(\261r2.1)S
+1486(f.c)S
+10 R
+1793(or)S
+10 I
+2086(ci)S
+2218(\261r2)S
+2417(f.c)S
+1140 V
+10 R
+720(assigns)S
+1061(the)S
+1235(number)S
+1592(2.1)S
+1769(to)S
+1899(the)S
+2074(new)S
+2293(revision.)S
+2723(Later)S
+2986(check-ins)S
+3421(without)S
+3780(the)S
+10 I
+3955(\261r)S
+10 R
+4097(option)S
+4406(will)S
+4615(assign)S
+4918(the)S
+1320 V
+720(numbers)S
+1095(2.2,)S
+1276(2.3,)S
+1457(and)S
+1632(so)S
+1751(on.)S
+1936(The)S
+2121(release)S
+2427(number)S
+2762(should)S
+3059(be)S
+3183(incremented)S
+3706(only)S
+3914(at)S
+4016(major)S
+4279(transition)S
+4687(points)S
+4962(in)S
+1500 V
+720(the)S
+872(development,)S
+1443(for)S
+1589(instance)S
+1946(when)S
+2192(a)S
+2266(new)S
+2462(release)S
+2768(of)S
+2881(a)S
+2955(software)S
+3328(product)S
+3663(has)S
+3826(been)S
+4044(completed.)S
+1860 V
+10 B
+720(3.1.)S
+930(When)S
+1216(are)S
+1384(branches)S
+1803(needed?)S
+2076 V
+10 R
+970(A)S
+1075(young)S
+1358(revision)S
+1713(tree)S
+1895(is)S
+1995(slender:)S
+2344(It)S
+2438(consists)S
+2789(of)S
+2906(only)S
+3118(one)S
+3296(branch,)S
+3626(called)S
+3898(the)S
+4054(trunk.)S
+4354(As)S
+4499(the)S
+4655(tree)S
+4838(ages,)S
+2256 V
+720(side)S
+911(branches)S
+1295(may)S
+1497(form.)S
+1776(Branches)S
+2177(are)S
+2328(needed)S
+2640(in)S
+2748(the)S
+2900(following)S
+3319(4)S
+3399(situations.)S
+2472 V
+10 I
+720(Temporary)S
+1194(fixes)S
+2652 V
+10 R
+970(Suppose)S
+1346(a)S
+1427(tree)S
+1614(has)S
+1785(5)S
+1873(revisions)S
+2272(grouped)S
+2637(in)S
+2753(2)S
+2841(releases,)S
+3219(as)S
+3340(illustrated)S
+3778(in)S
+3894(Figure)S
+4193(2.)S
+4336(Revision)S
+4730(1.3,)S
+4918(the)S
+2832 V
+970(last)S
+1139(one)S
+1313(of)S
+1426(release)S
+1732(1,)S
+1837(is)S
+1934(in)S
+2042(operation)S
+2449(at)S
+2551(customer)S
+2947(sites,)S
+3180(while)S
+3432(release)S
+3738(2)S
+3818(is)S
+3915(in)S
+4023(active)S
+4291(development.)S
+3143 V
+8 R
+2532(1.1)S
+3242 V
+2410 H
+2410 3012 lc
+2410 3012 mc
+2410 H
+2755 3012 lc
+2755 3012 mc
+2755 H
+2755 3242 lc
+2755 3242 mc
+2755 H
+2410 3242 lc
+2410 3242 mc
+3127 V
+2755 H
+2985 3127 lc
+2985 3127 mc
+3138 V
+2939 H
+2985 3127 lc
+2985 3127 mc
+3115 V
+2939 H
+2985 3126 lc
+2985 3126 mc
+3143 V
+3108(1.2)S
+3242 V
+2986 H
+2986 3012 lc
+2986 3012 mc
+2986 H
+3331 3012 lc
+3331 3012 mc
+3331 H
+3331 3242 lc
+3331 3242 mc
+3331 H
+2986 3242 lc
+2986 3242 mc
+3127 V
+3331 H
+3561 3127 lc
+3561 3127 mc
+3138 V
+3515 H
+3561 3127 lc
+3561 3127 mc
+3115 V
+3515 H
+3561 3126 lc
+3561 3126 mc
+3143 V
+3684(1.3)S
+3242 V
+3562 H
+3562 3012 lc
+3562 3012 mc
+3562 H
+3907 3012 lc
+3907 3012 mc
+3907 H
+3907 3242 lc
+3907 3242 mc
+3907 H
+3562 3242 lc
+3562 3242 mc
+3127 V
+3907 H
+4137 3127 lc
+4137 3127 mc
+3138 V
+4091 H
+4137 3127 lc
+4137 3127 mc
+3115 V
+4091 H
+4137 3126 lc
+4137 3126 mc
+3143 V
+4260(2.1)S
+3242 V
+4138 H
+4138 3012 lc
+4138 3012 mc
+4138 H
+4483 3012 lc
+4483 3012 mc
+4483 H
+4483 3242 lc
+4483 3242 mc
+4483 H
+4138 3242 lc
+4138 3242 mc
+3127 V
+4483 H
+4713 3127 lc
+4713 3127 mc
+3138 V
+4667 H
+4713 3127 lc
+4713 3127 mc
+3115 V
+4667 H
+4713 3126 lc
+4713 3126 mc
+3143 V
+4836(2.2)S
+3242 V
+4714 H
+4714 3012 lc
+4714 3012 mc
+4714 H
+5059 3012 lc
+5059 3012 mc
+5059 H
+5059 3242 lc
+5059 3242 mc
+5059 H
+4714 3242 lc
+4714 3242 mc
+3127 V
+5059 H
+5082 3127 lc
+5082 3127 mc
+5111 H
+5134 3127 lc
+5134 3127 mc
+5163 H
+5186 3127 lc
+5186 3127 mc
+5215 H
+5238 3127 lc
+5238 3127 mc
+5266 H
+5289 3127 lc
+5289 3127 mc
+3138 V
+5243 H
+5289 3127 lc
+5289 3127 mc
+3115 V
+5243 H
+5289 3126 lc
+5289 3126 mc
+3422 V
+10 R
+2319(Figure)S
+2610(2.)S
+2745(A)S
+2847(slender)S
+3165(revision)S
+3517(tree.)S
+3602 V
+970(Now)S
+1194(imagine)S
+1547(a)S
+1622(customer)S
+2019(requesting)S
+2466(a)S
+2541(\256x)S
+2678(of)S
+2792(a)S
+2867(problem)S
+3231(in)S
+3340(revision)S
+3693(1.3,)S
+3874(although)S
+4255(actual)S
+4524(development)S
+3782 V
+970(has)S
+1135(moved)S
+1439(on)S
+1571(to)S
+1681(release)S
+1989(2.)S
+2126(RCS)S
+2347(does)S
+2561(not)S
+2720(permit)S
+3012(an)S
+3137(extra)S
+3367(revision)S
+3720(to)S
+3829(be)S
+3954(spliced)S
+4268(in)S
+4377(between)S
+4740(1.3)S
+4896(and)S
+3962 V
+970(2.1,)S
+1151(since)S
+1387(that)S
+1568(would)S
+1849(not)S
+2008(re\257ect)S
+2288(the)S
+2441(actual)S
+2710(development)S
+3257(history.)S
+3621(Instead,)S
+3966(create)S
+4235(a)S
+4311(branch)S
+4614(at)S
+4718(revision)S
+4142 V
+970(1.3,)S
+1155(and)S
+1334(check)S
+1601(in)S
+1714(the)S
+1871(\256x)S
+2012(on)S
+2147(that)S
+2332(branch.)S
+2692(The)S
+2881(\256rst)S
+3071(branch)S
+3376(starting)S
+3710(at)S
+3816(1.3)S
+3975(has)S
+4142(number)S
+4481(1.3.1,)S
+4740(and)S
+4918(the)S
+4322 V
+970(revisions)S
+1374(on)S
+1517(that)S
+1710(branch)S
+2024(are)S
+2188(numbered)S
+2630(1.3.1.1,)S
+2974(1.3.1.2,)S
+3318(etc.)S
+3533(The)S
+3732(double)S
+4048(numbering)S
+4525(is)S
+4636(needed)S
+4962(to)S
+4502 V
+970(allow)S
+1235(for)S
+1394(another)S
+1736(branch)S
+2050(at)S
+2165(1.3,)S
+2358(say)S
+2534(1.3.2.)S
+2832(Revisions)S
+3270(on)S
+3413(the)S
+3578(second)S
+3898(branch)S
+4212(would)S
+4505(be)S
+4641(numbered)S
+4682 V
+970(1.3.2.1,)S
+1300(1.3.2.2,)S
+1630(and)S
+1804(so)S
+1923(on.)S
+2108(The)S
+2293(following)S
+2712(steps)S
+2942(create)S
+3209(branch)S
+3510(1.3.1)S
+3740(and)S
+3914(add)S
+4088(revision)S
+4440(1.3.1.1:)S
+4862 V
+10 I
+1270(co)S
+1424(\261r1.3)S
+1698(f.c)S
+2028(\320)S
+2147(check)S
+2403(out)S
+2561(revision)S
+2913(1.3)S
+4982 V
+1270(edit)S
+1480(f.c)S
+2028(\320)S
+2147(change)S
+2465(it)S
+5102 V
+1270(ci)S
+1402(\261r1.3.1)S
+1751(f.c)S
+2028(\320)S
+2147(check)S
+2403(it)S
+2489(in)S
+2597(on)S
+2727(branch)S
+3040(1.3.1)S
+5342 V
+10 R
+970(This)S
+1184(sequence)S
+1585(of)S
+1704(commands)S
+2173(transforms)S
+2636(the)S
+2794(tree)S
+2979(of)S
+3098(Figure)S
+3395(2)S
+3481(into)S
+3673(the)S
+3831(one)S
+4011(in)S
+4126(Figure)S
+4424(3.)S
+4566(Note)S
+4797(that)S
+4984(it)S
+5522 V
+970(may)S
+1179(be)S
+1310(necessary)S
+1734(to)S
+1849(incorporate)S
+2340(the)S
+2499(di)S
+2577 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2638(erences)S
+2973(between)S
+3342(1.3)S
+3504(and)S
+3685(1.3.1.1)S
+3997(into)S
+4189(a)S
+4269(revision)S
+4627(at)S
+4735(level)S
+4965(2.)S
+5702 V
+970(The)S
+1155(operation)S
+10 I
+1562(rcsmerge)S
+10 R
+1963(automates)S
+2398(this)S
+2573(process)S
+2902(\(see)S
+3092(the)S
+3244(Appendix\).)S
+6013 V
+8 R
+2532(1.1)S
+6112 V
+2410 H
+2410 5882 lc
+2410 5882 mc
+2410 H
+2755 5882 lc
+2755 5882 mc
+2755 H
+2755 6112 lc
+2755 6112 mc
+2755 H
+2410 6112 lc
+2410 6112 mc
+5997 V
+2755 H
+2985 5997 lc
+2985 5997 mc
+6008 V
+2939 H
+2985 5997 lc
+2985 5997 mc
+5985 V
+2939 H
+2985 5996 lc
+2985 5996 mc
+6013 V
+3108(1.2)S
+6112 V
+2986 H
+2986 5882 lc
+2986 5882 mc
+2986 H
+3331 5882 lc
+3331 5882 mc
+3331 H
+3331 6112 lc
+3331 6112 mc
+3331 H
+2986 6112 lc
+2986 6112 mc
+5997 V
+3331 H
+3561 5997 lc
+3561 5997 mc
+6008 V
+3515 H
+3561 5997 lc
+3561 5997 mc
+5985 V
+3515 H
+3561 5996 lc
+3561 5996 mc
+6013 V
+3684(1.3)S
+6112 V
+3562 H
+3562 5882 lc
+3562 5882 mc
+3562 H
+3907 5882 lc
+3907 5882 mc
+3907 H
+3907 6112 lc
+3907 6112 mc
+3907 H
+3562 6112 lc
+3562 6112 mc
+5997 V
+3907 H
+4137 5997 lc
+4137 5997 mc
+6008 V
+4091 H
+4137 5997 lc
+4137 5997 mc
+5985 V
+4091 H
+4137 5996 lc
+4137 5996 mc
+6013 V
+4260(2.1)S
+6112 V
+4138 H
+4138 5882 lc
+4138 5882 mc
+4138 H
+4483 5882 lc
+4483 5882 mc
+4483 H
+4483 6112 lc
+4483 6112 mc
+4483 H
+4138 6112 lc
+4138 6112 mc
+5997 V
+4483 H
+4713 5997 lc
+4713 5997 mc
+6008 V
+4667 H
+4713 5997 lc
+4713 5997 mc
+5985 V
+4667 H
+4713 5996 lc
+4713 5996 mc
+6013 V
+4836(2.2)S
+6112 V
+4714 H
+4714 5882 lc
+4714 5882 mc
+4714 H
+5059 5882 lc
+5059 5882 mc
+5059 H
+5059 6112 lc
+5059 6112 mc
+5059 H
+4714 6112 lc
+4714 6112 mc
+5997 V
+5059 H
+5082 5997 lc
+5082 5997 mc
+5111 H
+5134 5997 lc
+5134 5997 mc
+5163 H
+5186 5997 lc
+5186 5997 mc
+5215 H
+5238 5997 lc
+5238 5997 mc
+5266 H
+5289 5997 lc
+5289 5997 mc
+6008 V
+5243 H
+5289 5997 lc
+5289 5997 mc
+5985 V
+5243 H
+5289 5996 lc
+5289 5996 mc
+6474 V
+4200(1.3.1.1)S
+6573 V
+4138 H
+4138 6343 lc
+4138 6343 mc
+6342 V
+4138 H
+4483 6342 lc
+4483 6342 mc
+4483 H
+4483 6572 lc
+4483 6572 mc
+6573 V
+4483 H
+4138 6573 lc
+4138 6573 mc
+6458 V
+4483 H
+4506 6458 lc
+4506 6458 mc
+4535 H
+4558 6458 lc
+4558 6458 mc
+4587 H
+4610 6458 lc
+4610 6458 mc
+4639 H
+4662 6458 lc
+4662 6458 mc
+4690 H
+4713 6458 lc
+4713 6458 mc
+6469 V
+4667 H
+4713 6458 lc
+4713 6458 mc
+6446 V
+4667 H
+4713 6457 lc
+4713 6457 mc
+6112 V
+3734 H
+4137 6457 lc
+4137 6457 mc
+6436 V
+4095 H
+4137 6457 lc
+4137 6457 mc
+6419 V
+4110 H
+4137 6457 lc
+4137 6457 mc
+6753 V
+10 R
+2053(Figure)S
+2344(3.)S
+2479(A)S
+2581(revision)S
+2933(tree)S
+3112(with)S
+3320(one)S
+3494(side)S
+3685(branch)S
+7149 V
+10 I
+720(Distributed)S
+1206(development)S
+1740(and)S
+1920(customer)S
+2316(modifications)S
+7329 V
+10 R
+970(Assume)S
+1337(a)S
+1426(situation)S
+1816(as)S
+1944(in)S
+2067(Figure)S
+2373(2,)S
+2493(where)S
+2781(revision)S
+3148(1.3)S
+3319(is)S
+3432(in)S
+3556(operation)S
+3979(at)S
+4097(several)S
+4425(customer)S
+4837(sites,)S
+7920 V
+EP
+%%Page: 6 7
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2792(- 6 -)S
+900 V
+970(while)S
+1223(release)S
+1530(2)S
+1611(is)S
+1709(in)S
+1818(development.)S
+2420(Customer)S
+2840(sites)S
+3049(should)S
+3347(use)S
+3510(RCS)S
+3730(to)S
+3838(store)S
+4062(the)S
+4214(distributed)S
+4672(software.)S
+1080 V
+970(However,)S
+1413(customer)S
+1832(modi\256cations)S
+2430(should)S
+2750(not)S
+2931(be)S
+3078(placed)S
+3391(on)S
+3544(the)S
+3719(same)S
+3977(branch)S
+4301(as)S
+4437(the)S
+4612(distributed)S
+1260 V
+970(source;)S
+1309(instead,)S
+1668(they)S
+1891(should)S
+2209(be)S
+2354(placed)S
+2665(on)S
+2816(a)S
+2911(side)S
+3123(branch.)S
+3500(When)S
+3789(the)S
+3962(next)S
+4185(software)S
+4578(distribution)S
+1440 V
+970(arrives,)S
+1303(it)S
+1396(should)S
+1700(be)S
+1831(appended)S
+2250(to)S
+2365(the)S
+2524(trunk)S
+2772(of)S
+2892(the)S
+3051(customer's)S
+3527(RCS)S
+3755(\256le,)S
+3946(and)S
+4128(the)S
+4288(customer)S
+4692(can)S
+4868(then)S
+1620 V
+970(merge)S
+1254(the)S
+1411(local)S
+1640(modi\256cations)S
+2220(back)S
+2443(into)S
+2634(the)S
+2791(new)S
+2992(release.)S
+3358(In)S
+3475(the)S
+3631(above)S
+3903(example,)S
+4300(a)S
+4378(customer's)S
+4850(RCS)S
+1800 V
+970(\256le)S
+1134(would)S
+1421(contain)S
+1752(the)S
+1911(following)S
+2337(tree,)S
+2548(assuming)S
+2963(that)S
+3150(the)S
+3309(customer)S
+3712(has)S
+3882(received)S
+4256(revision)S
+4615(1.3,)S
+4802(added)S
+1980 V
+970(his)S
+1124(local)S
+1355(modi\256cations)S
+1937(as)S
+2057(revision)S
+2416(1.3.1.1,)S
+2753(then)S
+2962(received)S
+3336(revision)S
+3695(2.4,)S
+3882(and)S
+4063(merged)S
+4399(2.4)S
+4560(and)S
+4740(1.3.1.1,)S
+2160 V
+970(resulting)S
+1350(in)S
+1458(2.4.1.1.)S
+2471 V
+8 R
+2532(1.3)S
+2570 V
+2410 H
+2410 2340 lc
+2410 2340 mc
+2410 H
+2755 2340 lc
+2755 2340 mc
+2755 H
+2755 2570 lc
+2755 2570 mc
+2755 H
+2410 2570 lc
+2410 2570 mc
+2471 V
+4260(2.4)S
+2570 V
+4138 H
+4138 2340 lc
+4138 2340 mc
+4138 H
+4483 2340 lc
+4483 2340 mc
+4483 H
+4483 2570 lc
+4483 2570 mc
+4483 H
+4138 2570 lc
+4138 2570 mc
+2455 V
+2755 H
+4137 2455 lc
+4137 2455 mc
+2466 V
+4091 H
+4137 2455 lc
+4137 2455 mc
+2443 V
+4091 H
+4137 2454 lc
+4137 2454 mc
+2932 V
+3048(1.3.1.1)S
+3031 V
+2986 H
+2986 2801 lc
+2986 2801 mc
+2800 V
+2986 H
+3331 2800 lc
+3331 2800 mc
+3331 H
+3331 3030 lc
+3331 3030 mc
+3031 V
+3331 H
+2986 3031 lc
+2986 3031 mc
+2570 V
+2582 H
+2985 2915 lc
+2985 2915 mc
+2894 V
+2943 H
+2985 2915 lc
+2985 2915 mc
+2877 V
+2958 H
+2985 2915 lc
+2985 2915 mc
+2932 V
+4776(2.4.1.1)S
+3031 V
+4714 H
+4714 2801 lc
+4714 2801 mc
+2800 V
+4714 H
+5059 2800 lc
+5059 2800 mc
+5059 H
+5059 3030 lc
+5059 3030 mc
+3031 V
+5059 H
+4714 3031 lc
+4714 3031 mc
+2570 V
+4310 H
+4713 2915 lc
+4713 2915 mc
+2894 V
+4671 H
+4713 2915 lc
+4713 2915 mc
+2877 V
+4686 H
+4713 2915 lc
+4713 2915 mc
+3211 V
+10 R
+1740(Figure)S
+2031(4.)S
+2166(A)S
+2268(customer's)S
+2736(revision)S
+3088(tree)S
+3267(with)S
+3475(local)S
+3699(modi\256cations.)S
+3571 V
+970(This)S
+1178(approach)S
+1573(is)S
+1670(actually)S
+2016(practiced)S
+2411(in)S
+2519(the)S
+2671(CSNET)S
+3018(project,)S
+3350(where)S
+3623(several)S
+3935(universities)S
+4426(and)S
+4600(a)S
+4674(company)S
+3751 V
+970(cooperate)S
+1387(in)S
+1495(developing)S
+1969(a)S
+2043(national)S
+2395(computer)S
+2802(network.)S
+3967 V
+10 I
+720(Parallel)S
+1078(development)S
+4147 V
+10 R
+970(Sometimes)S
+1451(it)S
+1543(is)S
+1646(desirable)S
+2042(to)S
+2156(explore)S
+2491(an)S
+2621(alternate)S
+3000(design)S
+3297(or)S
+3416(a)S
+3497(di)S
+3575 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+3636(erent)S
+3872(implementation)S
+4537(technique)S
+4962(in)S
+4327 V
+970(parallel)S
+1301(with)S
+1511(the)S
+1665(main)S
+1896(line)S
+2077(development.)S
+2679(Such)S
+2910(development)S
+3457(should)S
+3755(be)S
+3880(carried)S
+4187(out)S
+4346(on)S
+4477(a)S
+4552(side)S
+4744(branch.)S
+4507 V
+970(The)S
+1155(experimental)S
+1706(changes)S
+2057(may)S
+2259(later)S
+2466(be)S
+2590(moved)S
+2892(into)S
+3078(the)S
+3230(main)S
+3460(line,)S
+3665(or)S
+3778(abandoned.)S
+4723 V
+10 I
+720(Conflicting)S
+1201(updates)S
+4903 V
+10 R
+970(A)S
+1075(common)S
+1458(occurrence)S
+1927(is)S
+2027(that)S
+2210(one)S
+2387(programmer)S
+2913(has)S
+3079(checked)S
+3438(out)S
+3599(a)S
+3676(revision,)S
+4056(but)S
+4218(cannot)S
+4518(complete)S
+4918(the)S
+5083 V
+970(assignment)S
+1459(for)S
+1614(some)S
+1864(reason.)S
+2218(In)S
+2340(the)S
+2501(meantime,)S
+2959(another)S
+3297(person)S
+3602(must)S
+3836(perform)S
+4196(another)S
+4534(modi\256cation)S
+5263 V
+970(immediately.)S
+1565(In)S
+1689(that)S
+1880(case,)S
+2117(the)S
+2280(second)S
+2598(person)S
+2905(should)S
+3213(check-out)S
+3647(the)S
+3810(same)S
+4056(revision,)S
+4444(modify)S
+4774(it,)S
+4896(and)S
+5443 V
+970(check)S
+1232(it)S
+1318(in)S
+1426(on)S
+1556(a)S
+1630(side)S
+1821(branch,)S
+2147(for)S
+2293(later)S
+2500(merging.)S
+5659 V
+970(Every)S
+1238(node)S
+1462(in)S
+1570(a)S
+1644(revision)S
+1996(tree)S
+2175(consists)S
+2522(of)S
+2635(the)S
+2787(following)S
+3206(attributes:)S
+3636(a)S
+3711(revision)S
+4064(number,)S
+4425(a)S
+4500(check-in)S
+4874(date)S
+5839 V
+720(and)S
+896(time,)S
+1131(the)S
+1285(author's)S
+1644(identi\256cation,)S
+2229(a)S
+2305(log)S
+2465(entry,)S
+2727(a)S
+2803(state)S
+3018(and)S
+3194(the)S
+3348(actual)S
+3618(text.)S
+3855(All)S
+4015(these)S
+4252(attributes)S
+4656(are)S
+4808(deter-)S
+6019 V
+720(mined)S
+1000(at)S
+1102(the)S
+1254(time)S
+1462(the)S
+1614(revision)S
+1966(is)S
+2063(checked)S
+2419(in.)S
+2582(The)S
+2767(state)S
+2980(attribute)S
+3344(indicates)S
+3730(the)S
+3883(status)S
+4142(of)S
+4256(a)S
+4331(revision.)S
+4739(It)S
+4831(is)S
+4929(set)S
+6199 V
+720(automatically)S
+1299(to)S
+1412(`experimental')S
+2034(during)S
+2330(check-in.)S
+2763(A)S
+2870(revision)S
+3227(can)S
+3400(later)S
+3612(be)S
+3741(promoted)S
+4158(to)S
+4270(a)S
+4348(higher)S
+4637(status,)S
+4924(for)S
+6379 V
+720(example)S
+1088(`stable')S
+1417(or)S
+1530(`released'.)S
+2007(The)S
+2192(set)S
+2333(of)S
+2446(states)S
+2698(is)S
+2795(user-de\256ned.)S
+6739 V
+10 B
+720(3.2.)S
+930(Revisions)S
+1366(are)S
+1534(represented)S
+2068(as)S
+2187(deltas)S
+6955 V
+10 R
+970(For)S
+1145(conserving)S
+1619(space,)S
+1901(RCS)S
+2127(stores)S
+2396(revisions)S
+2793(in)S
+2907(the)S
+3065(form)S
+3295(of)S
+3414(deltas,)S
+3708(i.e.,)S
+3891(as)S
+4010(di)S
+4088 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+4149(erences)S
+4483(between)S
+4852(revi-)S
+7135 V
+720(sions.)S
+1011(The)S
+1196(user)S
+1392(interface)S
+1770(completely)S
+2244(hides)S
+2485(this)S
+2660(fact.)S
+7920 V
+EP
+%%Page: 7 8
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2792(- 7 -)S
+900 V
+970(A)S
+1096(delta)S
+1344(is)S
+1465(a)S
+1563(sequence)S
+1982(of)S
+2119(edit)S
+2323(commands)S
+2810(that)S
+3014(transforms)S
+3495(one)S
+3694(string)S
+3977(into)S
+4188(another.)S
+4597(The)S
+4807(deltas)S
+1080 V
+720(employed)S
+1156(by)S
+1298(RCS)S
+1529(are)S
+1691(line-based,)S
+2167(which)S
+2452(means)S
+2748(that)S
+2939(the)S
+3102(only)S
+3321(edit)S
+3512(commands)S
+3986(allowed)S
+4343(are)S
+4505(insertion)S
+4896(and)S
+1260 V
+720(deletion)S
+1091(of)S
+1223(lines.)S
+1516(If)S
+1631(a)S
+1724(single)S
+2012(character)S
+2425(in)S
+2552(a)S
+2646(line)S
+2846(is)S
+2963(changed,)S
+3370(the)S
+3542(edit)S
+3742(scripts)S
+4053(consider)S
+4441(the)S
+4613(entire)S
+4890(line)S
+1440 V
+720(changed.)S
+1145(The)S
+1337(program)S
+10 I
+1712(diff)S
+1390 V
+10 R
+1846(2)S
+1440 V
+1933(produces)S
+2330(a)S
+2411(small,)S
+2690(line-based)S
+3137(delta)S
+3368(between)S
+3737(pairs)S
+3968(of)S
+4088(text)S
+4275(\256les.)S
+4534(A)S
+4643(character-)S
+1620 V
+720(based)S
+977(edit)S
+1157(script)S
+1409(would)S
+1689(take)S
+1885(much)S
+2137(longer)S
+2422(to)S
+2530(compute,)S
+2929(and)S
+3103(would)S
+3383(not)S
+3541(be)S
+3665(signi\256cantly)S
+4190(shorter.)S
+1836 V
+970(Using)S
+1259(deltas)S
+1542(is)S
+1659(a)S
+1753(classical)S
+2141(space-time)S
+2623(tradeo)S
+2872 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2933(:)S
+3011(deltas)S
+3294(reduce)S
+3609(the)S
+3782(space)S
+4054(consumed,)S
+4535(but)S
+4714(increase)S
+2016 V
+720(access)S
+1012(time.)S
+1283(However,)S
+1711(a)S
+1793(version)S
+2124(control)S
+2444(tool)S
+2637(should)S
+2941(impose)S
+3267(as)S
+3387(little)S
+3608(delay)S
+3861(as)S
+3981(possible)S
+4346(on)S
+4483(programmers.)S
+2196 V
+720(Excessive)S
+1163(delays)S
+1462(discourage)S
+1938(the)S
+2104(use)S
+2281(of)S
+2408(version)S
+2746(controls,)S
+3137(or)S
+3264(induce)S
+3574(programmers)S
+4150(to)S
+4273(take)S
+4484(shortcuts)S
+4890(that)S
+2376 V
+720(compromise)S
+1252(system)S
+1568(integrity.)S
+2000(To)S
+2149(gain)S
+2359(reasonably)S
+2829(fast)S
+3011(access)S
+3303(time)S
+3518(for)S
+3671(both)S
+3886(editing)S
+4201(and)S
+4382(compiling,)S
+4850(RCS)S
+2556 V
+720(arranges)S
+1096(deltas)S
+1368(in)S
+1485(the)S
+1646(following)S
+2074(way.)S
+2334(The)S
+2528(most)S
+2762(recent)S
+3044(revision)S
+3406(on)S
+3546(the)S
+3708(trunk)S
+3959(is)S
+4066(stored)S
+4350(intact.)S
+4667(All)S
+4835(other)S
+2736 V
+720(revisions)S
+1117(on)S
+1253(the)S
+1411(trunk)S
+1658(are)S
+1815(stored)S
+2095(as)S
+2214(reverse)S
+2537(deltas.)S
+2861(A)S
+2969(reverse)S
+3292(delta)S
+3522(describes)S
+3928(how)S
+4135(to)S
+4248(go)S
+4383(backward)S
+4805(in)S
+4918(the)S
+2916 V
+720(development)S
+1277(history:)S
+1624(it)S
+1721(produces)S
+2122(the)S
+2285(desired)S
+2615(revision)S
+2979(if)S
+3082(applied)S
+3418(to)S
+3538(the)S
+3702(successor)S
+4126(of)S
+4251(that)S
+4443(revision.)S
+4862(This)S
+3096 V
+720(implementation)S
+1379(has)S
+1543(the)S
+1696(advantage)S
+2131(that)S
+2311(extraction)S
+2740(of)S
+2853(the)S
+3005(latest)S
+3246(revision)S
+3598(is)S
+3695(a)S
+3769(simple)S
+4066(and)S
+4240(fast)S
+4414(copy)S
+4638(operation.)S
+3276 V
+720(Adding)S
+1051(a)S
+1126(new)S
+1324(revision)S
+1678(to)S
+1788(the)S
+1942(trunk)S
+2185(is)S
+2284(also)S
+2477(fast:)S
+10 I
+2681(ci)S
+10 R
+2785(simply)S
+3090(adds)S
+3305(the)S
+3459(new)S
+3657(revision)S
+4011(intact,)S
+4290(replaces)S
+4648(the)S
+4802(previ-)S
+3456 V
+720(ous)S
+895(revision)S
+1253(with)S
+1467(a)S
+1546(reverse)S
+1868(delta,)S
+2122(and)S
+2301(keeps)S
+2563(the)S
+2720(rest)S
+2899(of)S
+3017(the)S
+3174(old)S
+3337(deltas.)S
+3660(Thus,)S
+10 I
+3920(ci)S
+10 R
+4027(requires)S
+4383(the)S
+4540(computation)S
+3636 V
+720(of)S
+833(only)S
+1041(one)S
+1215(new)S
+1411(delta.)S
+3852 V
+970(Branches)S
+1373(need)S
+1593(special)S
+1902(treatment.)S
+2366(The)S
+2553(naive)S
+2801(solution)S
+3156(would)S
+3439(be)S
+3566(to)S
+3677(store)S
+3904(complete)S
+4303(copies)S
+4591(for)S
+4740(the)S
+4895(tips)S
+4032 V
+720(of)S
+836(all)S
+969(branches.)S
+1411(Clearly,)S
+1762(this)S
+1939(approach)S
+2336(would)S
+2618(cost)S
+2811(too)S
+2971(much)S
+3225(space.)S
+3533(Instead,)S
+3878(RCS)S
+4100(uses)S
+10 I
+4304(forward)S
+10 R
+4659(deltas)S
+4924(for)S
+4212 V
+720(branches.)S
+1163(Regenerating)S
+1729(a)S
+1807(revision)S
+2163(on)S
+2297(a)S
+2375(side)S
+2570(branch)S
+2875(proceeds)S
+3263(as)S
+3380(follows.)S
+3769(First,)S
+4012(extract)S
+4317(the)S
+4473(latest)S
+4718(revision)S
+4392 V
+720(on)S
+864(the)S
+1030(trunk;)S
+1313(secondly,)S
+1737(apply)S
+2003(reverse)S
+2334(deltas)S
+2611(until)S
+2839(the)S
+3005(fork)S
+3215(revision)S
+3581(for)S
+3741(the)S
+3907(branch)S
+4222(is)S
+4333(obtained;)S
+4748(thirdly,)S
+4572 V
+720(apply)S
+974(forward)S
+1321(deltas)S
+1586(until)S
+1802(the)S
+1956(desired)S
+2277(branch)S
+2581(revision)S
+2936(is)S
+3036(reached.)S
+3433(Figure)S
+3727(5)S
+3810(illustrates)S
+4232(a)S
+4309(tree)S
+4491(with)S
+4702(one)S
+4879(side)S
+4752 V
+720(branch.)S
+1076(Triangles)S
+1483(pointing)S
+1847(to)S
+1955(the)S
+2107(left)S
+2270(and)S
+2444(right)S
+2663(represent)S
+3058(reverse)S
+3375(and)S
+3549(forward)S
+3894(deltas,)S
+4182(respectively.)S
+5130 V
+8 R
+2273(1.1)S
+5114 V
+2463 H
+2463 4932 lc
+2463 4932 mc
+2463 H
+2160 5114 lc
+2160 5114 mc
+2160 H
+2463 5296 lc
+2463 5296 mc
+5295 V
+2463 H
+2463 5113 lc
+2463 5113 mc
+5114 V
+2463 H
+2766 5114 lc
+2766 5114 mc
+5129 V
+2705 H
+2765 5114 lc
+2765 5114 mc
+5099 V
+2705 H
+2765 5114 lc
+2765 5114 mc
+5130 V
+2880(1.2)S
+5114 V
+3069 H
+3069 4932 lc
+3069 4932 mc
+3069 H
+2766 5114 lc
+2766 5114 mc
+2766 H
+3069 5296 lc
+3069 5296 mc
+5295 V
+3069 H
+3069 5113 lc
+3069 5113 mc
+5114 V
+3069 H
+3372 5114 lc
+3372 5114 mc
+5129 V
+3312 H
+3372 5114 lc
+3372 5114 mc
+5099 V
+3312 H
+3372 5114 lc
+3372 5114 mc
+5130 V
+3486(1.3)S
+5114 V
+3675 H
+3675 4932 lc
+3675 4932 mc
+3675 H
+3372 5114 lc
+3372 5114 mc
+3372 H
+3675 5296 lc
+3675 5296 mc
+5295 V
+3675 H
+3675 5113 lc
+3675 5113 mc
+5114 V
+3675 H
+3978 5114 lc
+3978 5114 mc
+5129 V
+3918 H
+3978 5114 lc
+3978 5114 mc
+5099 V
+3918 H
+3978 5114 lc
+3978 5114 mc
+5130 V
+4092(2.1)S
+5114 V
+4281 H
+4281 4932 lc
+4281 4932 mc
+4281 H
+3978 5114 lc
+3978 5114 mc
+3978 H
+4281 5296 lc
+4281 5296 mc
+5295 V
+4281 H
+4281 5113 lc
+4281 5113 mc
+5114 V
+4281 H
+4584 5114 lc
+4584 5114 mc
+5129 V
+4524 H
+4584 5114 lc
+4584 5114 mc
+5099 V
+4524 H
+4584 5114 lc
+4584 5114 mc
+5130 V
+4762(2.2)S
+5265 V
+4584 H
+4584 4962 lc
+4584 4962 mc
+4584 H
+5039 4962 lc
+5039 4962 mc
+5040 H
+5040 5265 lc
+5040 5265 mc
+5040 H
+4585 5265 lc
+4585 5265 mc
+5796 V
+4008(1.3.1.1)S
+5780 V
+4281 H
+3978 5962 lc
+3978 5962 mc
+5963 V
+3978 H
+3978 5600 lc
+3978 5600 mc
+5598 V
+3978 H
+4281 5780 lc
+4281 5780 mc
+5295 V
+3675 H
+3978 5780 lc
+3978 5780 mc
+5737 V
+3934 H
+3978 5780 lc
+3978 5780 mc
+5721 V
+3960 H
+3979 5780 lc
+3979 5780 mc
+4281 H
+4584 5780 lc
+4584 5780 mc
+5796 V
+4524 H
+4584 5781 lc
+4584 5781 mc
+5765 V
+4524 H
+4584 5780 lc
+4584 5780 mc
+5796 V
+4614(1.3.1.2)S
+5780 V
+4888 H
+4585 5962 lc
+4585 5962 mc
+5963 V
+4584 H
+4584 5600 lc
+4584 5600 mc
+5598 V
+4584 H
+4887 5780 lc
+4887 5780 mc
+6143 V
+10 R
+1699(Figure)S
+1990(5.)S
+2125(A)S
+2227(revision)S
+2579(tree)S
+2758(with)S
+2966(reverse)S
+3283(and)S
+3457(forward)S
+3802(deltas.)S
+6359 V
+970(Although)S
+1382(implementing)S
+1972(fast)S
+2150(check-out)S
+2577(for)S
+2727(the)S
+2884(latest)S
+3130(trunk)S
+3376(revision,)S
+3758(this)S
+3938(arrangement)S
+4471(has)S
+4639(the)S
+4796(disad-)S
+6539 V
+720(vantage)S
+1071(that)S
+1262(generation)S
+1724(of)S
+1848(other)S
+2093(revisions)S
+2494(takes)S
+2739(time)S
+2957(proportional)S
+3491(to)S
+3609(the)S
+3771(number)S
+4116(of)S
+4239(deltas)S
+4512(applied.)S
+4901(For)S
+6719 V
+720(example,)S
+1121(regenerating)S
+1657(the)S
+1817(branch)S
+2126(tip)S
+2270(in)S
+2386(Figure)S
+2685(5)S
+2773(requires)S
+3132(application)S
+3614(of)S
+3735(\256ve)S
+3923(deltas)S
+4195(\(including)S
+4645(the)S
+4806(initial)S
+6899 V
+720(one\).)S
+983(Since)S
+1236(usage)S
+1494(statistics)S
+1870(show)S
+2112(that)S
+2293(the)S
+2446(latest)S
+2688(trunk)S
+2930(revision)S
+3282(is)S
+3379(the)S
+3531(one)S
+3705(that)S
+3885(is)S
+3982(retrieved)S
+4366(in)S
+4474(95)S
+4604(per)S
+4761(cent)S
+4957(of)S
+7079 V
+720(all)S
+859(cases)S
+1108(\(see)S
+1307(the)S
+1468(section)S
+1790(on)S
+1929(usage)S
+2195(statistics\),)S
+2638(biasing)S
+2967(check-out)S
+3400(time)S
+3618(in)S
+3736(favor)S
+3986(of)S
+4109(that)S
+4299(revision)S
+4661(results)S
+4962(in)S
+7259 V
+720(signi\256cant)S
+1186(savings.)S
+1590(However,)S
+2029(careful)S
+2354(implementation)S
+3030(of)S
+3161(the)S
+3331(delta)S
+3573(application)S
+4065(process)S
+4412(is)S
+4527(necessary)S
+4962(to)S
+7920 V
+EP
+%%Page: 8 9
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2792(- 8 -)S
+900 V
+720(provide)S
+1055(low)S
+1235(retrieval)S
+1597(overhead)S
+1992(for)S
+2138(other)S
+2373(revisions,)S
+2789(in)S
+2897(particular)S
+3309(for)S
+3455(branch)S
+3756(tips.)S
+1116 V
+970(There)S
+1233(are)S
+1386(several)S
+1700(techniques)S
+2159(for)S
+2307(delta)S
+2533(application.)S
+3064(The)S
+3251(naive)S
+3499(one)S
+3675(is)S
+3774(to)S
+3884(pass)S
+4088(each)S
+4302(delta)S
+4528(to)S
+4638(a)S
+4714(general-)S
+1296 V
+720(purpose)S
+1077(text)S
+1267(editor.)S
+1595(A)S
+1707(prototype)S
+2130(of)S
+2253(RCS)S
+2483(invoked)S
+2845(the)S
+3007(UNIX)S
+3296(editor)S
+10 I
+3569(ed)S
+10 R
+3703(both)S
+3921(for)S
+4077(applying)S
+4467(deltas)S
+4740(and)S
+4924(for)S
+1476 V
+720(expanding)S
+1172(the)S
+1330(identi\256cation)S
+1894(markers.)S
+2306(Although)S
+2720(easy)S
+2934(to)S
+3049(implement,)S
+3539(performance)S
+4079(was)S
+4271(poor,)S
+4516(owing)S
+4803(to)S
+4918(the)S
+1656 V
+720(high)S
+934(start-up)S
+1275(costs)S
+1511(and)S
+1691(excess)S
+1987(generality)S
+2422(of)S
+10 I
+2541(ed)S
+10 R
+2635(.)S
+2726(An)S
+2884(intermediate)S
+3419(version)S
+3749(of)S
+3867(RCS)S
+4092(used)S
+4310(a)S
+4389(special-purpose,)S
+1836 V
+720(stream-oriented)S
+1376(editor.)S
+1694(This)S
+1902(technique)S
+2320(reduced)S
+2665(the)S
+2817(cost)S
+3008(of)S
+3121(applying)S
+3501(a)S
+3575(delta)S
+3800(to)S
+3909(the)S
+4062(cost)S
+4254(of)S
+4368(checking)S
+4759(out)S
+4918(the)S
+2016 V
+720(latest)S
+965(trunk)S
+1210(revision.)S
+1621(The)S
+1810(reason)S
+2104(for)S
+2254(this)S
+2433(behavior)S
+2816(is)S
+2917(that)S
+3101(each)S
+3316(delta)S
+3543(application)S
+4020(involves)S
+4392(a)S
+4469(complete)S
+4868(pass)S
+2196 V
+720(over)S
+927(the)S
+1079(preceding)S
+1502(revision.)S
+2412 V
+970(However,)S
+1395(there)S
+1629(is)S
+1731(a)S
+1810(much)S
+2068(better)S
+2331(algorithm.)S
+2811(Note)S
+3041(that)S
+3227(the)S
+3385(deltas)S
+3654(are)S
+3811(line)S
+3997(oriented)S
+4360(and)S
+4540(that)S
+4726(most)S
+4957(of)S
+2592 V
+720(the)S
+884(work)S
+1131(of)S
+1256(a)S
+1342(stream)S
+1650(editor)S
+1925(involves)S
+2306(copying)S
+2670(unchanged)S
+3143(lines)S
+3373(from)S
+3608(one)S
+3793(revision)S
+4156(to)S
+4275(the)S
+4438(next.)S
+4706(A)S
+4819(faster)S
+2772 V
+720(algorithm)S
+1141(avoids)S
+1434(unnecessary)S
+1953(copying)S
+2307(of)S
+2423(character)S
+2820(strings)S
+3120(by)S
+3253(using)S
+3503(a)S
+10 I
+3580(piece)S
+3823(table)S
+10 R
+4023(.)S
+4111(A)S
+4216(piece)S
+4459(table)S
+4686(is)S
+4786(a)S
+4863(one-)S
+2952 V
+720(dimensional)S
+1245(array,)S
+1509(specifying)S
+1960(how)S
+2167(a)S
+2246(given)S
+2503(revision)S
+2860(is)S
+2962(`pieced)S
+3290(together')S
+3685(from)S
+3914(lines)S
+4138(in)S
+4251(the)S
+4408(RCS)S
+4633(\256le.)S
+4851(Sup-)S
+3132 V
+720(pose)S
+935(piece)S
+1177(table)S
+10 I
+1403(PT)S
+3182 V
+1520(r)S
+3132 V
+10 R
+1591(represents)S
+2027(revision)S
+10 I
+2381(r)S
+10 R
+2420(.)S
+2507(Then)S
+10 I
+2744(PT)S
+3182 V
+2861(r)S
+3132 V
+2900([i])S
+10 R
+3038(contains)S
+3403(the)S
+3557(starting)S
+3889(position)S
+4244(of)S
+4359(line)S
+10 I
+4541(i)S
+10 R
+4602(of)S
+4718(revision)S
+3312 V
+10 I
+720(r)S
+10 R
+759(.)S
+848(Application)S
+1354(of)S
+1471(the)S
+1627(next)S
+1833(delta)S
+2061(transforms)S
+2522(piece)S
+2766(table)S
+10 I
+2994(PT)S
+3362 V
+3111(r)S
+3312 V
+10 R
+3184(into)S
+10 I
+3374(PT)S
+3362 V
+3491(r+1)S
+3312 V
+10 R
+3648(.)S
+3737(For)S
+3910(instance,)S
+4296(a)S
+4374(delete)S
+4646(command)S
+3492 V
+720(removes)S
+1093(a)S
+1173(series)S
+1436(of)S
+1555(entries)S
+1857(from)S
+2087(the)S
+2245(piece)S
+2491(table.)S
+2776(An)S
+2934(insertion)S
+3320(command)S
+3750(inserts)S
+4047(new)S
+4249(entries,)S
+4576(moving)S
+4918(the)S
+3672 V
+720(entries)S
+1019(following)S
+1441(the)S
+1596(insertion)S
+1979(point)S
+2218(further)S
+2522(down)S
+2777(the)S
+2932(array.)S
+3224(The)S
+3411(inserted)S
+3759(entries)S
+4057(point)S
+4295(to)S
+4405(the)S
+4559(text)S
+4741(lines)S
+4962(in)S
+3852 V
+720(the)S
+874(delta.)S
+1155(Thus,)S
+1412(no)S
+1544(I/O)S
+1709(is)S
+1808(involved)S
+2190(except)S
+2483(for)S
+2632(reading)S
+2964(the)S
+3119(delta)S
+3346(itself.)S
+3634(When)S
+3905(all)S
+4038(deltas)S
+4304(have)S
+4525(been)S
+4746(applied)S
+4032 V
+720(to)S
+834(the)S
+992(piece)S
+1238(table,)S
+1493(a)S
+1573(sequential)S
+2014(pass)S
+2222(through)S
+2569(the)S
+2726(table)S
+2955(looks)S
+3207(up)S
+3342(each)S
+3559(line)S
+3744(in)S
+3857(the)S
+4014(RCS)S
+4239(\256le)S
+4402(and)S
+4581(copies)S
+4871(it)S
+4962(to)S
+4212 V
+720(the)S
+872(output)S
+1158(\256le,)S
+1341(updating)S
+1721(identi\256cation)S
+2279(markers)S
+2630(at)S
+2732(the)S
+2884(same)S
+3119(time.)S
+3382(Of)S
+3517(course,)S
+3832(the)S
+3984(RCS)S
+4204(\256le)S
+4362(must)S
+4588(permit)S
+4880(ran-)S
+4392 V
+720(dom)S
+930(access,)S
+1241(since)S
+1478(the)S
+1632(copied)S
+1930(lines)S
+2151(are)S
+2304(scattered)S
+2690(throughout)S
+3161(that)S
+3343(\256le.)S
+3558(Figure)S
+3851(6)S
+3933(illustrates)S
+4354(an)S
+4480(RCS)S
+4702(\256le)S
+4862(with)S
+4572 V
+720(two)S
+900(revisions)S
+1291(and)S
+1465(the)S
+1617(corresponding)S
+2218(piece)S
+2458(tables.)S
+5832 V
+10 I
+2363(Figure)S
+2665(6)S
+2745(is)S
+2842(not)S
+3000(available.)S
+6912 V
+10 R
+2016(Figure)S
+2307(6.)S
+2442(An)S
+2594(RCS)S
+2814(\256le)S
+2972(and)S
+3146(its)S
+3271(piece)S
+3511(tables)S
+7128 V
+970(The)S
+1157(piece)S
+1399(table)S
+1625(approach)S
+2022(has)S
+2187(the)S
+2341(property)S
+2711(that)S
+2893(the)S
+3047(time)S
+3257(for)S
+3405(applying)S
+3788(a)S
+3865(single)S
+4137(delta)S
+4364(is)S
+4464(roughly)S
+4808(deter-)S
+7308 V
+720(mined)S
+1004(by)S
+1138(the)S
+1294(size)S
+1483(of)S
+1600(the)S
+1756(delta,)S
+2009(and)S
+2187(not)S
+2349(by)S
+2483(the)S
+2639(size)S
+2828(of)S
+2945(the)S
+3101(revision.)S
+3512(For)S
+3685(example,)S
+4082(if)S
+4177(a)S
+4254(delta)S
+4481(is)S
+4581(10)S
+4714(per)S
+4874(cent)S
+7920 V
+EP
+%%Page: 9 10
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2792(- 9 -)S
+900 V
+720(of)S
+840(the)S
+999(size)S
+1191(of)S
+1311(a)S
+1392(revision,)S
+1776(then)S
+1985(applying)S
+2372(it)S
+2466(takes)S
+2709(only)S
+2925(10)S
+3063(per)S
+3228(cent)S
+3432(of)S
+3553(the)S
+3713(time)S
+3929(to)S
+4045(generate)S
+4420(the)S
+4580(latest)S
+4829(trunk)S
+1080 V
+720(revision.)S
+1127(\(The)S
+1345(stream)S
+1641(editor)S
+1904(would)S
+2184(take)S
+2380(100)S
+2560(per)S
+2717(cent.\))S
+1296 V
+970(There)S
+1233(is)S
+1331(an)S
+1456(important)S
+1876(alternative)S
+2328(for)S
+2475(representing)S
+2999(deltas)S
+3263(that)S
+3444(a)S
+3488 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+3549(ects)S
+3735(performance.)S
+4324(SCCS)S
+1246 V
+4570(3)S
+1296 V
+4620(,)S
+4677(a)S
+4753(precur-)S
+1476 V
+720(sor)S
+889(of)S
+1019(RCS,)S
+1281(uses)S
+10 I
+1499(interleaved)S
+10 R
+1994(deltas.)S
+2328(A)S
+2446(\256le)S
+2620(containing)S
+3088(interleaved)S
+3577(deltas)S
+3856(is)S
+3969(partitioned)S
+4448(into)S
+4650(blocks)S
+4957(of)S
+1656 V
+720(lines.)S
+1009(Each)S
+1253(block)S
+1520(has)S
+1698(a)S
+1787(header)S
+2097(that)S
+2292(speci\256es)S
+2681(to)S
+2804(which)S
+3093(revision\(s\))S
+3565(the)S
+3732(block)S
+3999(belongs.)S
+4411(The)S
+4612(blocks)S
+4919(are)S
+1836 V
+720(sorted)S
+995(out)S
+1154(in)S
+1262(such)S
+1475(a)S
+1549(way)S
+1745(that)S
+1925(a)S
+1999(single)S
+2268(pass)S
+2470(over)S
+2677(the)S
+2829(\256le)S
+2987(can)S
+3155(pick)S
+3357(up)S
+3487(all)S
+3617(the)S
+3769(lines)S
+3988(belonging)S
+4418(to)S
+4526(a)S
+4600(given)S
+4852(revi-)S
+2016 V
+720(sion.)S
+984(Thus,)S
+1251(the)S
+1415(regeneration)S
+1955(time)S
+2175(for)S
+2333(all)S
+2475(revisions)S
+2878(is)S
+2987(the)S
+3151(same:)S
+3426(all)S
+3568(headers)S
+3914(must)S
+4151(be)S
+4287(inspected,)S
+4731(and)S
+4918(the)S
+2196 V
+720(associated)S
+1169(blocks)S
+1469(either)S
+1735(copied)S
+2040(or)S
+2162(skipped.)S
+2567(As)S
+2717(the)S
+2878(number)S
+3222(of)S
+3344(revisions)S
+3744(increases,)S
+4172(the)S
+4332(cost)S
+4531(of)S
+4652(retrieving)S
+2376 V
+720(any)S
+896(revision)S
+1251(is)S
+1351(much)S
+1606(higher)S
+1894(than)S
+2099(the)S
+2254(cost)S
+2448(of)S
+2564(checking)S
+2957(out)S
+3118(the)S
+3273(latest)S
+3517(trunk)S
+3761(revision)S
+4116(with)S
+4327(reverse)S
+4647(deltas.)S
+4968(A)S
+2556 V
+720(detailed)S
+1071(comparison)S
+1572(of)S
+1690(SCCS's)S
+2043(interleaved)S
+2520(deltas)S
+2787(and)S
+2965(RCS's)S
+3261(reverse)S
+3582(deltas)S
+3849(can)S
+4021(be)S
+4149(found)S
+4416(in)S
+4528(Reference)S
+4965(4.)S
+2736 V
+720(This)S
+952(reference)S
+1375(considers)S
+1806(the)S
+1982(version)S
+2330(of)S
+2467(RCS)S
+2711(with)S
+2943(the)S
+3119(stream)S
+3440(editor)S
+3728(only.)S
+4016(The)S
+4226(piece)S
+4491(table)S
+4740(method)S
+2916 V
+720(improves)S
+1131(performance)S
+1673(further,)S
+2008(so)S
+2135(that)S
+2323(RCS)S
+2551(is)S
+2656(always)S
+2971(faster)S
+3230(than)S
+3440(SCCS,)S
+3749(except)S
+4047(if)S
+4146(10)S
+4284(or)S
+4405(more)S
+4648(deltas)S
+4919(are)S
+3096 V
+720(applied.)S
+3312 V
+970(Additional)S
+1429(speed-up)S
+1820(for)S
+1967(both)S
+2176(delta)S
+2402(methods)S
+2773(can)S
+2943(be)S
+3069(obtained)S
+3445(by)S
+3577(caching)S
+3919(the)S
+4073(most)S
+4300(recently)S
+4653(generated)S
+3492 V
+720(revision,)S
+1101(as)S
+1218(has)S
+1385(been)S
+1607(implemented)S
+2163(in)S
+2275(DSEE.)S
+3442 V
+2550(5)S
+3492 V
+2634(With)S
+2868(caching,)S
+3237(access)S
+3525(time)S
+3737(to)S
+3849(frequently)S
+4292(used)S
+4508(revisions)S
+4902(can)S
+3672 V
+720(approach)S
+1115(normal)S
+1428(\256le)S
+1586(access)S
+1870(time,)S
+2103(at)S
+2205(the)S
+2357(cost)S
+2548(of)S
+2661(some)S
+2902(additional)S
+3332(space.)S
+4032 V
+10 B
+720(4.)S
+855(Locking:)S
+1269(A)S
+1371(Controversial)S
+1989(Issue)S
+4248 V
+10 R
+970(The)S
+1169(locking)S
+1513(mechanism)S
+2012(for)S
+2172(RCS)S
+2406(was)S
+2605(di)S
+2683 H
+       (f)show 10 -.5 mul h (\256)show
+10 R
+2767(cult)S
+2961(to)S
+3083(design.)S
+3443(The)S
+3643(problem)S
+4021(and)S
+4210(its)S
+4350(solution)S
+4718(are)S
+4884(\256rst)S
+4428 V
+720(presented)S
+1136(in)S
+1248(their)S
+1465(`pure')S
+1742(form,)S
+1995(followed)S
+2384(by)S
+2518(a)S
+2596(discussion)S
+3047(of)S
+3163(the)S
+3318(complications)S
+3912(caused)S
+4216(by)S
+4349(`real-world')S
+4863(con-)S
+4608 V
+720(siderations.)S
+4824 V
+970(RCS)S
+1198(must)S
+1431(prevent)S
+1768(two)S
+1956(or)S
+2077(more)S
+2320(persons)S
+2663(from)S
+2895(depositing)S
+3350(competing)S
+3810(changes)S
+4169(of)S
+4290(the)S
+4450(same)S
+4693(revision.)S
+5004 V
+720(Suppose)S
+1104(two)S
+1299(programmers)S
+1875(check)S
+2151(out)S
+2323(revision)S
+2689(2.4)S
+2858(and)S
+3046(modify)S
+3379(it.)S
+3534(Programmer)S
+4077(A)S
+4193(checks)S
+4508(in)S
+4630(a)S
+4718(revision)S
+5184 V
+720(before)S
+1010(programmer)S
+1539(B.)S
+1697(Unfortunately,)S
+2318(programmer)S
+2847(B)S
+2950(has)S
+3119(not)S
+3284(seen)S
+3498(A's)S
+3679(changes,)S
+4062(so)S
+4188(the)S
+4347(e)S
+4391 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+4452(ect)S
+4605(is)S
+4709(that)S
+4896(A's)S
+5364 V
+720(changes)S
+1079(are)S
+1238(covered)S
+1591(up)S
+1729(by)S
+1867(B's)S
+2044(deposit.)S
+2426(A's)S
+2608(changes)S
+2967(are)S
+3126(not)S
+3292(lost)S
+3475(since)S
+3718(all)S
+3856(revisions)S
+4255(are)S
+4414(saved,)S
+4703(but)S
+4868(they)S
+5544 V
+720(are)S
+871(con\256ned)S
+1245(to)S
+1353(a)S
+1427(single)S
+1696(revision.\263)S
+5760 V
+970(This)S
+1191(con\257ict)S
+1534(is)S
+1644(prevented)S
+2080(in)S
+2201(RCS)S
+2434(by)S
+2577(locking.)S
+2975(Whenever)S
+3427(someone)S
+3825(intends)S
+4157(to)S
+4278(edit)S
+4471(a)S
+4558(revision)S
+4924(\(as)S
+5940 V
+720(opposed)S
+1083(to)S
+1191(reading)S
+1520(or)S
+1633(compiling)S
+2069(it\),)S
+2213(the)S
+2365(revision)S
+2717(should)S
+3014(be)S
+3138(checked)S
+3494(out)S
+3652(and)S
+3826(locked,)S
+4147(using)S
+4394(the)S
+10 I
+4546(\261l)S
+10 R
+4654(option)S
+4940(on)S
+6120 V
+10 I
+720(co)S
+10 R
+814(.)S
+908(On)S
+1069(subsequent)S
+1552(check-in,)S
+10 I
+1959(ci)S
+10 R
+2070(tests)S
+2287(the)S
+2448(lock)S
+2659(and)S
+2842(then)S
+3053(removes)S
+3430(it.)S
+3580(At)S
+3719(most)S
+3953(one)S
+4136(programmer)S
+4668(at)S
+4779(a)S
+4862(time)S
+6300 V
+720(may)S
+932(lock)S
+1144(a)S
+1228(particular)S
+1650(revision,)S
+2037(and)S
+2221(only)S
+2439(this)S
+2624(programmer)S
+3157(may)S
+3368(check)S
+3639(in)S
+3756(the)S
+3917(succeeding)S
+4399(revision.)S
+4815(Thus,)S
+6480 V
+720(while)S
+972(a)S
+1046(revision)S
+1398(is)S
+1495(locked,)S
+1816(it)S
+1902(is)S
+1999(the)S
+2151(exclusive)S
+2558(responsibility)S
+3133(of)S
+3246(the)S
+3398(locker.)S
+6702 V
+8 Y1
+720(333333333333333333)S
+6820 V
+8 R
+820(\263)S
+900(Note)S
+1088(that)S
+1240(this)S
+1388(problem)S
+1686(is)S
+1773(entirely)S
+2049(di)S
+2111 H
+       (f)show 8 -.5 mul h (f)show
+8 R
+2160(erent)S
+2352(from)S
+2540(the)S
+2671(atomicity)S
+3005(problem.)S
+3348(Atomicity)S
+3705(means)S
+3942(that)S
+4095(concurrent)S
+4468(update)S
+6920 V
+720(operations)S
+1082(on)S
+1193(the)S
+1321(same)S
+1515(RCS)S
+1698(\256le)S
+1830(cannot)S
+2072(be)S
+2177(permitted,)S
+2531(because)S
+2812(that)S
+2961(may)S
+3128(result)S
+3334(in)S
+3426(inconsistent)S
+3836(data.)S
+4042(Atomic)S
+4311(updates)S
+4584(are)S
+7020 V
+720(essential)S
+1017(\(and)S
+1182(implemented)S
+1621(in)S
+1707(RCS\),)S
+1930(but)S
+2056(do)S
+2160(not)S
+2286(solve)S
+2478(the)S
+2599(con\257ict)S
+2862(discussed)S
+3191(here.)S
+7920 V
+EP
+%%Page: 10 11
+BP
+/slant 0 def
+/height 1.000000 def
+8 R
+8 R
+40 V
+10 R
+0(-)S
+580 V
+2767(- 10 -)S
+900 V
+970(An)S
+1126(important)S
+1549(maxim)S
+1861(for)S
+2011(software)S
+2388(tools)S
+2617(like)S
+2801(RCS)S
+3025(is)S
+3126(that)S
+3310(they)S
+3516(must)S
+3745(not)S
+3907(stand)S
+4152(in)S
+4264(the)S
+4421(way)S
+4622(of)S
+4740(making)S
+1080 V
+720(progress)S
+1093(with)S
+1305(a)S
+1383(project.)S
+1749(This)S
+1961(consideration)S
+2533(leads)S
+2772(to)S
+2884(several)S
+3200(weakenings)S
+3705(of)S
+3822(the)S
+3978(locking)S
+4312(mechanism.)S
+4856(First)S
+1260 V
+720(of)S
+839(all,)S
+1000(even)S
+1224(if)S
+1321(a)S
+1401(revision)S
+1759(is)S
+1862(locked,)S
+2189(it)S
+2281(can)S
+2455(still)S
+2642(be)S
+2772(checked)S
+3134(out.)S
+3353(This)S
+3567(is)S
+3670(necessary)S
+4093(if)S
+4191(other)S
+4433(people)S
+4736(wish)S
+4962(to)S
+1440 V
+720(compile)S
+1073(or)S
+1187(inspect)S
+1501(the)S
+1654(locked)S
+1951(revision)S
+2304(while)S
+2556(the)S
+2708(next)S
+2910(one)S
+3084(is)S
+3181(in)S
+3289(preparation.)S
+3828(The)S
+4013(only)S
+4221(operations)S
+4667(they)S
+4869(can-)S
+1620 V
+720(not)S
+880(do)S
+1012(are)S
+1165(to)S
+1275(lock)S
+1479(the)S
+1633(revision)S
+1987(or)S
+2102(to)S
+2212(check)S
+2476(in)S
+2586(the)S
+2740(succeeding)S
+3215(one.)S
+3447(Secondly,)S
+3877(check-in)S
+4253(operations)S
+4702(on)S
+4835(other)S
+1800 V
+720(branches)S
+1109(in)S
+1222(the)S
+1379(RCS)S
+1604(\256le)S
+1767(are)S
+1923(still)S
+2109(possible;)S
+2500(the)S
+2657(locking)S
+2991(of)S
+3108(one)S
+3286(revision)S
+3642(does)S
+3859(not)S
+4021(a)S
+4065 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+4126(ect)S
+4276(any)S
+4454(other)S
+4693(revision.)S
+1980 V
+720(Thirdly,)S
+1084(revisions)S
+1484(are)S
+1644(occasionally)S
+2183(locked)S
+2489(for)S
+2645(a)S
+2729(long)S
+2947(period)S
+3242(of)S
+3365(time)S
+3583(because)S
+3938(a)S
+4022(programmer)S
+4555(is)S
+4662(absent)S
+4957(or)S
+2160 V
+720(otherwise)S
+1153(unable)S
+1464(to)S
+1587(complete)S
+1998(the)S
+2165(assignment.)S
+2715(If)S
+2826(another)S
+3170(programmer)S
+3708(has)S
+3886(to)S
+4008(make)S
+4268(a)S
+4356(pressing)S
+4733(change,)S
+2340 V
+720(there)S
+950(are)S
+1102(the)S
+1255(following)S
+1675(three)S
+1905(alternatives)S
+2397(for)S
+2545(making)S
+2877(progress:)S
+3275(a\))S
+3384(\256nd)S
+3572(out)S
+3732(who)S
+3936(is)S
+4035(holding)S
+4373(the)S
+4527(lock)S
+4731(and)S
+4907(ask)S
+2520 V
+720(that)S
+906(person)S
+1208(to)S
+1322(release)S
+1634(it;)S
+1754(b\))S
+1873(check)S
+2141(out)S
+2305(the)S
+2463(locked)S
+2765(revision,)S
+3148(modify)S
+3473(it,)S
+3590(check)S
+3858(it)S
+3950(in)S
+4064(on)S
+4200(a)S
+4280(branch,)S
+4612(and)S
+4791(merge)S
+2700 V
+720(the)S
+878(changes)S
+1236(later;)S
+1478(c\))S
+1592(break)S
+1850(the)S
+2009(lock.)S
+2273(Breaking)S
+2676(a)S
+2757(lock)S
+2966(leaves)S
+3252(a)S
+3333(highly)S
+3626(visible)S
+3930(trace,)S
+4185(namely)S
+4516(an)S
+4647(electronic)S
+2880 V
+720(mail)S
+930(message)S
+1300(that)S
+1482(is)S
+1581(sent)S
+1774(automatically)S
+2350(to)S
+2460(the)S
+2614(holder)S
+2901(of)S
+3015(the)S
+3168(lock,)S
+3396(recording)S
+3809(the)S
+3962(breaker)S
+4291(and)S
+4466(a)S
+4541(commentary)S
+3060 V
+720(requested)S
+1135(from)S
+1362(him.)S
+1606(Thus,)S
+1864(breaking)S
+2246(locks)S
+2490(is)S
+2590(tolerated)S
+2972(under)S
+3232(certain)S
+3536(circumstances,)S
+4159(but)S
+4321(will)S
+4511(not)S
+4673(go)S
+4807(unno-)S
+3240 V
+720(ticed.)S
+1016(Experience)S
+1511(has)S
+1691(shown)S
+1998(that)S
+2194(the)S
+2362(automatic)S
+2802(mail)S
+3026(message)S
+3410(attaches)S
+3777(a)S
+3867(high)S
+4091(enough)S
+4431(stigma)S
+4744(to)S
+4868(lock)S
+3420 V
+720(breaking,)S
+1130(such)S
+1349(that)S
+1535(programmers)S
+2103(break)S
+2360(locks)S
+2607(only)S
+2821(in)S
+2935(real)S
+3120(emergencies,)S
+3679(or)S
+3798(when)S
+4050(a)S
+4130(co-worker)S
+4576(resigns)S
+4896(and)S
+3600 V
+720(leaves)S
+999(locked)S
+1295(revisions)S
+1686(behind.)S
+3816 V
+970(If)S
+1074(an)S
+1206(RCS)S
+1434(\256le)S
+1600(is)S
+1705(private,)S
+2046(i.e.,)S
+2232(when)S
+2487(a)S
+2570(programmer)S
+3102(owns)S
+3352(an)S
+3485(RCS)S
+3714(\256le)S
+3881(and)S
+4064(does)S
+4286(not)S
+4453(expect)S
+4752(anyone)S
+3996 V
+720(else)S
+912(to)S
+1027(perform)S
+1385(check-in)S
+1765(operations,)S
+2243(locking)S
+2580(is)S
+2684(an)S
+2815(unnecessary)S
+3339(nuisance.)S
+3780(In)S
+3900(this)S
+4081(case,)S
+4313(the)S
+4471(`strict)S
+4740(locking)S
+4176 V
+720(feature')S
+1069(discussed)S
+1492(earlier)S
+1786(may)S
+1998(be)S
+2133(disabled,)S
+2532(provided)S
+2928(that)S
+3119(\256le)S
+3288(protection)S
+3734(is)S
+3842(set)S
+3994(such)S
+4218(that)S
+4409(only)S
+4628(the)S
+4791(owner)S
+4356 V
+720(may)S
+927(write)S
+1167(the)S
+1324(RCS)S
+1549(\256le.)S
+1767(This)S
+1980(has)S
+2148(the)S
+2305(e)S
+2349 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2410(ect)S
+2561(that)S
+2746(only)S
+2959(the)S
+3116(owner)S
+3400(can)S
+3573(check-in)S
+3951(revisions,)S
+4372(and)S
+4550(that)S
+4734(no)S
+4868(lock)S
+4536 V
+720(is)S
+817(needed)S
+1129(for)S
+1275(doing)S
+1533(so.)S
+4752 V
+970(As)S
+1113(added)S
+1383(protection,)S
+1845(each)S
+2059(RCS)S
+2281(\256le)S
+2441(contains)S
+2806(an)S
+2932(access)S
+3218(list)S
+3373(that)S
+3556(speci\256es)S
+3933(the)S
+4088(users)S
+4326(who)S
+4531(may)S
+4736(execute)S
+4932 V
+720(update)S
+1019(operations.)S
+1523(If)S
+1622(an)S
+1749(access)S
+2036(list)S
+2192(is)S
+2292(empty,)S
+2600(only)S
+2811(normal)S
+3127(UNIX)S
+3408(\256le)S
+3568(protection)S
+4005(applies.)S
+4375(Thus,)S
+4632(the)S
+4786(access)S
+5112 V
+720(list)S
+878(is)S
+980(useful)S
+1259(for)S
+1410(restricting)S
+1851(the)S
+2009(set)S
+2156(of)S
+2275(people)S
+2577(who)S
+2785(would)S
+3071(otherwise)S
+3495(have)S
+3719(update)S
+4021(permission.)S
+4551(Just)S
+4743(as)S
+4862(with)S
+5292 V
+720(locking,)S
+1077(the)S
+1231(access)S
+1517(list)S
+1672(has)S
+1837(no)S
+1969(e)S
+2013 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2074(ect)S
+2222(on)S
+2354(read-only)S
+2768(operations)S
+3216(such)S
+3431(as)S
+10 I
+3546(co)S
+10 R
+3640(.)S
+3727(This)S
+3937(approach)S
+4333(is)S
+4431(consistent)S
+4862(with)S
+5472 V
+720(the)S
+872(UNIX)S
+1151(philosophy)S
+1626(of)S
+1739(openness,)S
+2160(which)S
+2434(contributes)S
+2908(to)S
+3016(a)S
+3090(productive)S
+3547(software)S
+3920(development)S
+4466(environment.)S
+5832 V
+10 B
+720(5.)S
+855(Con\256guration)S
+1486(Management)S
+6048 V
+10 R
+970(The)S
+1156(preceding)S
+1580(sections)S
+1933(described)S
+2346(how)S
+2549(RCS)S
+2770(deals)S
+3006(with)S
+3215(revisions)S
+3607(of)S
+3722(individual)S
+4160(components;)S
+4703(this)S
+4880(sec-)S
+6228 V
+720(tion)S
+917(discusses)S
+1330(how)S
+1543(to)S
+1662(handle)S
+1969(con\256gurations.)S
+2637(A)S
+2749(con\256guration)S
+3322(is)S
+3429(a)S
+3513(set)S
+3664(of)S
+3787(revisions,)S
+4213(where)S
+4496(each)S
+4718(revision)S
+6408 V
+720(comes)S
+1007(from)S
+1233(a)S
+1309(di)S
+1387 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1448(erent)S
+1679(revision)S
+2033(group,)S
+2323(and)S
+2500(the)S
+2655(revisions)S
+3049(are)S
+3203(selected)S
+3557(according)S
+3983(to)S
+4094(a)S
+4171(certain)S
+4475(criterion.)S
+4901(For)S
+6588 V
+720(example,)S
+1121(in)S
+1237(order)S
+1485(to)S
+1601(build)S
+1845(a)S
+1927(functioning)S
+2426(compiler,)S
+2844(the)S
+3004(`right')S
+3297(revisions)S
+3696(from)S
+3928(the)S
+4088(scanner,)S
+4454(the)S
+4613(parser,)S
+4918(the)S
+6768 V
+720(optimizer)S
+1154(and)S
+1349(the)S
+1522(code)S
+1761(generator)S
+2188(must)S
+2434(be)S
+2579(combined.)S
+3079(RCS,)S
+3345(in)S
+3475(conjunction)S
+3999(with)S
+4229(MAKE,)S
+4600(provides)S
+4996(a)S
+6948 V
+720(number)S
+1055(of)S
+1168(facilities)S
+1542(to)S
+1650(e)S
+1694 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1755(ect)S
+1901(a)S
+1975(smooth)S
+2300(selection.)S
+7920 V
+EP
+%%Page: 11 12
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2767(- 11 -)S
+900 V
+10 B
+720(5.1.)S
+930(RCS)S
+1160(Selection)S
+1573(Functions)S
+1152 V
+10 I
+720(Default)S
+1050(selection)S
+1332 V
+10 R
+970(During)S
+1285(development,)S
+1858(the)S
+2012(usual)S
+2255(selection)S
+2642(criterion)S
+3012(is)S
+3111(to)S
+3221(choose)S
+3530(the)S
+3684(latest)S
+3928(revision)S
+4283(of)S
+4399(all)S
+4532(components.)S
+1512 V
+970(The)S
+10 I
+1155(co)S
+10 R
+1279(command)S
+1703(makes)S
+1988(this)S
+2163(selection)S
+2548(by)S
+2678(default.)S
+3040(For)S
+3209(example,)S
+3602(the)S
+3754(command)S
+1692 V
+10 I
+1330(co)S
+1484(*,v)S
+1932 V
+10 R
+970(retrieves)S
+1354(the)S
+1517(latest)S
+1769(revision)S
+2132(on)S
+2273(the)S
+2437(default)S
+2756(branch)S
+3069(of)S
+3194(each)S
+3418(RCS)S
+3650(\256le)S
+3820(in)S
+3940(the)S
+4104(current)S
+4428(directory.)S
+4885(The)S
+2112 V
+970(default)S
+1285(branch)S
+1594(is)S
+1699(usually)S
+2025(the)S
+2184(trunk,)S
+2457(but)S
+2622(may)S
+2831(be)S
+2962(set)S
+3110(to)S
+3225(be)S
+3356(a)S
+3437(side)S
+3635(branch.)S
+3998(Side)S
+4213(branches)S
+4604(as)S
+4724(defaults)S
+2292 V
+970(are)S
+1133(needed)S
+1457(in)S
+1577(distributed)S
+2047(software)S
+2432(development,)S
+3015(as)S
+3140(discussed)S
+3565(in)S
+3686(the)S
+3851(section)S
+4177(on)S
+4320(the)S
+4485(RCS)S
+4718(revision)S
+2472 V
+970(tree.)S
+2868 V
+10 I
+720(Release)S
+1060(based)S
+1323(selection)S
+3048 V
+10 R
+970(Specifying)S
+1448(a)S
+1537(release)S
+1858(or)S
+1986(branch)S
+2302(number)S
+2653(selects)S
+2965(the)S
+3133(latest)S
+3390(revision)S
+3758(in)S
+3882(that)S
+4078(release)S
+4400(or)S
+4529(branch.)S
+4901(For)S
+3228 V
+970(instance,)S
+3408 V
+10 I
+1330(co)S
+1484(\261r2)S
+1683(*,v)S
+3648 V
+10 R
+970(retrieves)S
+1344(the)S
+1497(latest)S
+1739(revision)S
+2092(with)S
+2302(release)S
+2610(number)S
+2947(2)S
+3029(from)S
+3255(each)S
+3469(RCS)S
+3691(\256le.)S
+3906(This)S
+4116(selection)S
+4503(is)S
+4602(convenient)S
+3828 V
+970(if)S
+1061(a)S
+1135(release)S
+1441(has)S
+1604(been)S
+1822(completed)S
+2268(and)S
+2442(development)S
+2988(has)S
+3151(moved)S
+3453(on)S
+3583(to)S
+3691(the)S
+3843(next)S
+4045(release.)S
+4224 V
+10 I
+720(State)S
+950(and)S
+1130(author)S
+1427(based)S
+1690(selection)S
+4404 V
+10 R
+970(If)S
+1070(the)S
+1226(highest)S
+1549(level)S
+1777(number)S
+2116(within)S
+2406(a)S
+2484(given)S
+2740(release)S
+3050(number)S
+3389(is)S
+3490(not)S
+3652(the)S
+3808(desired)S
+4130(one,)S
+4333(the)S
+4489(state)S
+4707(attribute)S
+4584 V
+970(can)S
+1138(help.)S
+1395(For)S
+1564(example,)S
+4764 V
+10 I
+1330(co)S
+1484(\261r2)S
+1683(\261sReleased)S
+2192(*,v)S
+5004 V
+10 R
+970(retrieves)S
+1352(the)S
+1513(latest)S
+1763(revision)S
+2124(with)S
+2341(release)S
+2656(number)S
+3001(2)S
+3091(whose)S
+3386(state)S
+3609(attribute)S
+3982(is)S
+4089(`Released'.)S
+4610(Of)S
+4755(course,)S
+5184 V
+970(the)S
+1126(state)S
+1343(attribute)S
+1710(has)S
+1877(to)S
+1989(be)S
+2117(set)S
+2262(appropriately,)S
+2853(using)S
+3104(the)S
+10 I
+3260(ci)S
+10 R
+3366(or)S
+10 I
+3483(rcs)S
+10 R
+3638(commands.)S
+4159(Another)S
+4519(alternative)S
+4973(is)S
+5364 V
+970(to)S
+1078(select)S
+1335(a)S
+1409(revision)S
+1761(by)S
+1891(its)S
+2016(author,)S
+2326(using)S
+2573(the)S
+10 I
+2725(\261w)S
+10 R
+2872(option.)S
+5760 V
+10 I
+720(Date)S
+944(based)S
+1207(selection)S
+5940 V
+10 R
+970(Revisions)S
+1399(may)S
+1605(also)S
+1800(be)S
+1928(selected)S
+2283(by)S
+2417(date.)S
+2672(Suppose)S
+3045(a)S
+3123(release)S
+3433(of)S
+3551(an)S
+3680(entire)S
+3942(system)S
+4255(was)S
+4445(completed)S
+4896(and)S
+6120 V
+970(current)S
+1282(on)S
+1412(March)S
+1702(4,)S
+1807(at)S
+1909(1:00)S
+2117(p.m.)S
+2325(local)S
+2549(time.)S
+2812(Then)S
+3047(the)S
+3199(command)S
+6300 V
+10 I
+1330(co)S
+1484(\261d'March)S
+1913(4,)S
+2018(1:00)S
+2231(pm)S
+2383(LT')S
+2588(*,v)S
+6540 V
+10 R
+970(checks)S
+1293(out)S
+1473(all)S
+1626(the)S
+1801(components)S
+2337(of)S
+2473(that)S
+2676(release,)S
+3030(independent)S
+3571(of)S
+3707(the)S
+3882(numbering.)S
+4423(The)S
+10 I
+4631(\261d)S
+10 R
+4784(option)S
+6720 V
+970(speci\256es)S
+1346(a)S
+1422(`cuto)S
+1627 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1720(date',)S
+1976(i.e.,)S
+2155(the)S
+2309(revision)S
+2662(selected)S
+3014(has)S
+3178(a)S
+3253(check-in)S
+3627(date)S
+3824(that)S
+4005(is)S
+4103(closest)S
+4406(to,)S
+4540(but)S
+4699(not)S
+4858(after)S
+6900 V
+970(the)S
+1122(date)S
+1318(given.)S
+7116 V
+10 I
+720(Name)S
+983(based)S
+1246(selection)S
+7296 V
+10 R
+970(The)S
+1178(most)S
+1426(powerful)S
+1839(selection)S
+2247(function)S
+2633(is)S
+2753(based)S
+3033(on)S
+3187(assigning)S
+3619(symbolic)S
+4040(names)S
+4349(to)S
+4481(revisions)S
+4896(and)S
+7920 V
+EP
+%%Page: 12 13
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2767(- 12 -)S
+900 V
+970(branches.)S
+1412(In)S
+1528(large)S
+1760(systems,)S
+2135(a)S
+2212(single)S
+2484(release)S
+2793(number)S
+3131(or)S
+3247(date)S
+3446(is)S
+3546(not)S
+3707(su)S
+3796 H
+       (f)show 10 -.5 mul h (\256)show
+10 R
+3880(cient)S
+4107(to)S
+4217(collect)S
+4515(the)S
+4669(appropri-)S
+1080 V
+970(ate)S
+1122(revisions)S
+1519(from)S
+1749(all)S
+1885(groups.)S
+2248(For)S
+2423(example,)S
+2822(suppose)S
+3181(one)S
+3362(wishes)S
+3671(to)S
+3786(combine)S
+4167(release)S
+4480(2)S
+4567(of)S
+4687(one)S
+4868(sub-)S
+1260 V
+970(system)S
+1296(and)S
+1488(release)S
+1812(15)S
+1960(of)S
+2091(another.)S
+2493(Most)S
+2747(likely,)S
+3048(the)S
+3218(creation)S
+3587(dates)S
+3840(of)S
+3971(those)S
+4229(releases)S
+4591(di)S
+4669 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+4730(er)S
+4854(also.)S
+1440 V
+970(Thus,)S
+1226(a)S
+1301(single)S
+1571(revision)S
+1924(number)S
+2260(or)S
+2375(date)S
+2573(passed)S
+2871(to)S
+2981(the)S
+10 I
+3135(co)S
+10 R
+3261(command)S
+3687(will)S
+3875(not)S
+4035(su)S
+4124 H
+       (f)show 10 -.5 mul h (\256)show
+10 R
+4208(ce)S
+4328(to)S
+4438(select)S
+4697(the)S
+4851(right)S
+1620 V
+970(revisions.)S
+1432(Symbolic)S
+1862(revision)S
+2230(numbers)S
+2620(solve)S
+2877(this)S
+3068(problem.)S
+3502(Each)S
+3747(RCS)S
+3983(\256le)S
+4156(may)S
+4373(contain)S
+4712(a)S
+4801(set)S
+4957(of)S
+1800 V
+970(symbolic)S
+1377(names)S
+1672(that)S
+1862(are)S
+2023(mapped)S
+2379(to)S
+2497(numeric)S
+2864(revision)S
+3226(numbers.)S
+3665(For)S
+3844(example,)S
+4247(assume)S
+4582(the)S
+4745(symbol)S
+1980 V
+10 I
+970(V3)S
+10 R
+1122(is)S
+1230(bound)S
+1521(to)S
+1640(release)S
+1957(number)S
+2303(2)S
+2394(in)S
+2513(\256le)S
+10 I
+2682(s,v)S
+10 R
+2790(,)S
+2856(and)S
+3041(to)S
+3160(revision)S
+3523(number)S
+3869(15.9)S
+4084(in)S
+10 I
+4202(t,v)S
+10 R
+4299(.)S
+4394(Then)S
+4639(the)S
+4801(single)S
+2160 V
+970(command)S
+2340 V
+10 I
+1330(co)S
+1484(\261rV3)S
+1744(s,v)S
+1912(t,v)S
+2580 V
+10 R
+970(retrieves)S
+1344(the)S
+1497(latest)S
+1739(revision)S
+2092(of)S
+2206(release)S
+2513(2)S
+2594(from)S
+10 I
+2819(s,v)S
+10 R
+2927(,)S
+2983(and)S
+3159(revision)S
+3513(15.9)S
+3720(from)S
+10 I
+3946(t,v)S
+10 R
+4043(.)S
+4130(In)S
+4245(a)S
+4321(large)S
+4552(system)S
+4862(with)S
+2760 V
+970(many)S
+1249(modules,)S
+1670(checking)S
+2087(out)S
+2271(all)S
+2427(revisions)S
+2844(with)S
+3078(one)S
+3278(command)S
+3728(greatly)S
+4061(simpli\256es)S
+4507(con\256guration)S
+2940 V
+970(management.)S
+3156 V
+970(Judicious)S
+1385(use)S
+1555(of)S
+1675(symbolic)S
+2079(revision)S
+2439(numbers)S
+2821(helps)S
+3070(with)S
+3286(organizing)S
+3751(large)S
+3988(con\256gurations.)S
+4653(A)S
+4763(special)S
+3336 V
+720(command,)S
+10 I
+1195(rcsfreeze)S
+10 R
+1555(,)S
+1636(assigns)S
+1981(a)S
+2081(symbolic)S
+2504(revision)S
+2882(number)S
+3243(to)S
+3377(a)S
+3477(selected)S
+3854(revision)S
+4232(in)S
+4366(every)S
+4642(RCS)S
+4887(\256le.)S
+3516 V
+10 I
+720(Rcsfreeze)S
+10 R
+1147(e)S
+1191 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1252(ectively)S
+1613(freezes)S
+1939(a)S
+2028(con\256guration.)S
+2661(The)S
+2861(assigned)S
+3250(symbolic)S
+3662(revision)S
+4029(number)S
+4379(selects)S
+4690(all)S
+4835(com-)S
+3696 V
+720(ponents)S
+1062(of)S
+1176(the)S
+1329(con\256guration.)S
+1948(If)S
+2045(necessary,)S
+2488(symbolic)S
+2886(numbers)S
+3260(may)S
+3462(even)S
+3680(be)S
+3804(intermixed)S
+4267(with)S
+4475(numeric)S
+4832(ones.)S
+3876 V
+720(Thus,)S
+10 I
+975(V3.5)S
+10 R
+1191(in)S
+1299(the)S
+1451(above)S
+1719(example)S
+2087(would)S
+2367(select)S
+2624(revision)S
+2976(2.5)S
+3131(in)S
+10 I
+3239(s,v)S
+10 R
+3377(and)S
+3551(branch)S
+3852(15.9.5)S
+4132(in)S
+10 I
+4240(t,v)S
+10 R
+4337(.)S
+4092 V
+970(The)S
+1162(options)S
+10 I
+1494(\261r)S
+10 R
+1583(,)S
+10 I
+1645(\261s)S
+10 R
+1734(,)S
+10 I
+1796(\261w)S
+10 R
+1950(and)S
+10 I
+2131(\261d)S
+10 R
+2269(may)S
+2479(be)S
+2611(combined.)S
+3098(If)S
+3202(a)S
+3284(branch)S
+3593(is)S
+3698(given,)S
+3983(the)S
+4143(latest)S
+4392(revision)S
+4752(on)S
+4890(that)S
+4272 V
+720(branch)S
+1021(satisfying)S
+1440(all)S
+1570(conditions)S
+2017(is)S
+2114(retrieved;)S
+2526(otherwise,)S
+2969(the)S
+3121(default)S
+3428(branch)S
+3729(is)S
+3826(used.)S
+4632 V
+10 B
+720(5.2.)S
+930(Combining)S
+1439(MAKE)S
+1780(and)S
+1972(RCS)S
+4848 V
+10 R
+970(MAKE)S
+4798 V
+1264(1)S
+4848 V
+1360(is)S
+1473(a)S
+1563(program)S
+1947(that)S
+2143(processes)S
+2571(con\256gurations.)S
+3245(It)S
+3353(is)S
+3467(driven)S
+3769(by)S
+3916(con\256guration)S
+4496(speci\256cations)S
+5028 V
+720(recorded)S
+1108(in)S
+1226(a)S
+1310(special)S
+1627(\256le,)S
+1820(called)S
+2098(a)S
+2182(`Make\256le'.)S
+2698(MAKE)S
+3031(avoids)S
+3331(redundant)S
+3769(processing)S
+4235(steps)S
+4474(by)S
+4613(comparing)S
+5208 V
+720(creation)S
+1072(dates)S
+1308(of)S
+1422(source)S
+1713(and)S
+1888(processed)S
+2312(objects.)S
+2681(For)S
+2851(example,)S
+3245(when)S
+3492(instructed)S
+3917(to)S
+4026(compile)S
+4379(all)S
+4510(modules)S
+4881(of)S
+4996(a)S
+5388 V
+720(given)S
+972(system,)S
+1305(it)S
+1391(only)S
+1599(recompiles)S
+2067(those)S
+2308(source)S
+2598(modules)S
+2967(that)S
+3147(were)S
+3370(changed)S
+3732(since)S
+3967(they)S
+4169(were)S
+4392(processed)S
+4815(last.)S
+5604 V
+970(MAKE)S
+1298(has)S
+1465(been)S
+1687(extended)S
+2081(with)S
+2293(an)S
+2421(auto-checkout)S
+3020(feature)S
+3330(for)S
+3481(RCS.*)S
+3811(When)S
+4084(a)S
+4163(certain)S
+4469(\256le)S
+4632(to)S
+4745(be)S
+4874(pro-)S
+5784 V
+720(cessed)S
+1012(is)S
+1111(not)S
+1271(present,)S
+1616(MAKE)S
+1942(attempts)S
+2313(a)S
+2389(check-out)S
+2813(operation.)S
+3276(If)S
+3373(successful,)S
+3839(MAKE)S
+4164(performs)S
+4555(the)S
+4708(required)S
+5964 V
+720(processing,)S
+1210(and)S
+1392(then)S
+1602(deletes)S
+1917(the)S
+2077(checked)S
+2441(out)S
+2607(\256le)S
+2773(to)S
+2889(conserve)S
+3281(space.)S
+3595(The)S
+3788(selection)S
+4181(parameters)S
+4657(discussed)S
+6144 V
+720(above)S
+996(can)S
+1172(be)S
+1304(passed)S
+1608(to)S
+1724(MAKE)S
+2056(either)S
+2321(as)S
+2442(parameters,)S
+2942(or)S
+3063(directly)S
+3406(embedded)S
+3854(in)S
+3970(the)S
+4129(Make\256le.)S
+4576(MAKE)S
+4907(has)S
+6324 V
+720(also)S
+922(been)S
+1152(extended)S
+1554(to)S
+1674(search)S
+1970(the)S
+2134(subdirectory)S
+2675(named)S
+10 I
+2983(RCS)S
+10 R
+3203(for)S
+3361(needed)S
+3685(\256les,)S
+3919(rather)S
+4193(than)S
+4407(just)S
+4594(the)S
+4758(current)S
+6504 V
+720(working)S
+1090(directory.)S
+1542(However,)S
+1969(if)S
+2067(a)S
+2148(working)S
+2517(\256le)S
+2681(is)S
+2784(present,)S
+3133(MAKE)S
+3463(totally)S
+3755(ignores)S
+4085(the)S
+4243(corresponding)S
+4850(RCS)S
+6684 V
+720(\256le)S
+894(and)S
+1085(uses)S
+1304(the)S
+1473(working)S
+1853(\256le.)S
+2083(\(In)S
+2246(newer)S
+2536(versions)S
+2916(of)S
+3046(MAKE)S
+3387(distributed)S
+3862(by)S
+4009(AT&T)S
+4328(and)S
+4519(others,)S
+4835(auto-)S
+6864 V
+720(checkout)S
+1112(can)S
+1282(be)S
+1408(achieved)S
+1794(with)S
+2004(the)S
+2158(rule)S
+2345(DEFAULT,)S
+2856(instead)S
+3170(of)S
+3284(a)S
+3359(special)S
+3667(extension)S
+4081(of)S
+4195(MAKE.)S
+4575(However,)S
+4996(a)S
+6964 V
+8 Y1
+720(333333333333333333)S
+7082 V
+8 R
+820(*)S
+900(This)S
+1066(auto-checkout)S
+1540(extension)S
+1869(is)S
+1946(available)S
+2256(only)S
+2422(in)S
+2508(some)S
+2700(versions)S
+2989(of)S
+3079(MAKE,)S
+3359(e.g.)S
+3498(GNU)S
+3696(MAKE.)S
+7920 V
+EP
+%%Page: 13 14
+BP
+/slant 0 def
+/height 1.000000 def
+8 R
+8 R
+40 V
+10 R
+0(-)S
+580 V
+2767(- 13 -)S
+900 V
+720(\256le)S
+879(checked)S
+1236(out)S
+1395(by)S
+1526(the)S
+1679(rule)S
+1865(DEFAULT)S
+2351(will)S
+2538(not)S
+2697(be)S
+2822(deleted)S
+3141(after)S
+3355(processing.)S
+10 I
+3839(Rcsclean)S
+10 R
+4231(can)S
+4401(be)S
+4527(used)S
+4742(for)S
+4890(that)S
+1080 V
+720(purpose.\))S
+1296 V
+970(With)S
+1225(auto-checkout,)S
+1870(RCS/MAKE)S
+2437(can)S
+2630(e)S
+2674 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2735(ect)S
+2906(a)S
+3005(selection)S
+3415(rule)S
+3625(especially)S
+4079(tuned)S
+4357(for)S
+4529(multi-person)S
+1476 V
+720(software)S
+1107(development)S
+1667(and)S
+1855(maintenance.)S
+2458(In)S
+2585(these)S
+2834(situations,)S
+3287(programmers)S
+3863(should)S
+4174(obtain)S
+4468(con\256gurations)S
+1656 V
+720(that)S
+910(consist)S
+1228(of)S
+1351(the)S
+1513(revisions)S
+1914(they)S
+2126(have)S
+2354(personally)S
+2810(checked)S
+3176(out)S
+3344(plus)S
+3552(the)S
+3715(latest)S
+3967(checked)S
+4334(in)S
+4453(revision)S
+4816(of)S
+4940(all)S
+1836 V
+720(other)S
+955(revision)S
+1307(groups.)S
+1664(This)S
+1872(schema)S
+2201(can)S
+2369(be)S
+2493(set)S
+2634(up)S
+2764(as)S
+2877(follows.)S
+2052 V
+970(Each)S
+1207(programmer)S
+1738(chooses)S
+2092(a)S
+2174(working)S
+2546(directory)S
+2945(and)S
+3128(places)S
+3416(into)S
+3611(it)S
+3706(a)S
+3789(symbolic)S
+4195(link,)S
+4415(named)S
+10 I
+4720(RCS)S
+10 R
+4898(,)S
+4962(to)S
+2232 V
+720(the)S
+879(directory)S
+1276(containing)S
+1735(the)S
+1894(relevant)S
+2252(RCS)S
+2479(\256les.)S
+2738(The)S
+2930(symbolic)S
+3334(link)S
+3527(makes)S
+3818(sure)S
+4020(that)S
+10 I
+4206(co)S
+10 R
+4336(and)S
+10 I
+4516(ci)S
+10 R
+4624(operations)S
+2412 V
+720(need)S
+947(only)S
+1164(specify)S
+1491(the)S
+1652(working)S
+2024(\256les,)S
+2255(and)S
+2438(that)S
+2627(the)S
+2788(Make\256le)S
+3183(need)S
+3411(not)S
+3579(be)S
+3713(changed.)S
+4140(The)S
+4335(programmer)S
+4868(then)S
+2592 V
+720(checks)S
+1039(out)S
+1215(the)S
+1385(needed)S
+1715(\256les)S
+1930(and)S
+2121(modi\256es)S
+2513(them.)S
+2815(If)S
+2928(MAKE)S
+3269(is)S
+3383(invoked,)S
+3777(it)S
+3880(composes)S
+4321(con\256gurations)S
+4940(by)S
+2772 V
+720(selecting)S
+1112(those)S
+1360(revisions)S
+1758(that)S
+1945(are)S
+2103(checked)S
+2466(out,)S
+2656(and)S
+2837(the)S
+2996(rest)S
+3177(from)S
+3408(the)S
+3567(subdirectory)S
+10 I
+4103(RCS)S
+10 R
+4281(.)S
+4373(The)S
+4565(latter)S
+4808(selec-)S
+2952 V
+720(tion)S
+912(may)S
+1120(be)S
+1250(controlled)S
+1691(by)S
+1827(a)S
+1907(symbolic)S
+2310(revision)S
+2668(number)S
+3009(or)S
+3128(any)S
+3307(of)S
+3425(the)S
+3582(other)S
+3822(selection)S
+4212(criteria.)S
+4584(If)S
+4685(there)S
+4919(are)S
+3132 V
+720(several)S
+1034(programmers)S
+1598(editing)S
+1908(in)S
+2018(separate)S
+2376(working)S
+2741(directories,)S
+3219(they)S
+3423(are)S
+3576(insulated)S
+3969(from)S
+4195(each)S
+4409(other's)S
+4719(changes)S
+3312 V
+720(until)S
+934(checking)S
+1324(in)S
+1432(their)S
+1645(modi\256cations.)S
+3528 V
+970(Similarly,)S
+1399(a)S
+1475(maintainer)S
+1934(can)S
+2104(recreate)S
+2450(an)S
+2576(older)S
+2813(con\256guration)S
+3378(by)S
+3510(starting)S
+3842(to)S
+3952(work)S
+4189(in)S
+4299(an)S
+4425(empty)S
+4707(working)S
+3708 V
+720(directory.)S
+1172(During)S
+1492(the)S
+1651(initial)S
+1922(MAKE)S
+2253(invocation,)S
+2737(all)S
+2874(revisions)S
+3272(are)S
+3430(selected)S
+3788(from)S
+4018(RCS)S
+4244(\256les.)S
+4502(As)S
+4649(the)S
+4807(main-)S
+3888 V
+720(tainer)S
+977(checks)S
+1278(out)S
+1436(\256les)S
+1633(and)S
+1807(modi\256es)S
+2182(them,)S
+2437(a)S
+2511(new)S
+2707(con\256guration)S
+3270(is)S
+3367(gradually)S
+3774(built)S
+3988(up.)S
+4173(Every)S
+4441(time)S
+4649(MAKE)S
+4973(is)S
+4068 V
+720(invoked,)S
+1097(it)S
+1183(substitutes)S
+1636(the)S
+1788(modi\256ed)S
+2174(revisions)S
+2565(into)S
+2751(the)S
+2903(con\256guration)S
+3466(being)S
+3718(manipulated.)S
+4284 V
+970(A)S
+1096(\256nal)S
+1328(application)S
+1826(of)S
+1963(RCS)S
+2208(is)S
+2330(to)S
+2463(use)S
+2651(it)S
+2762(for)S
+2933(storing)S
+3266(Make\256les.)S
+3770(Revision)S
+4181(groups)S
+4508(of)S
+4646(Make\256les)S
+4464 V
+720(represent)S
+1126(multiple)S
+1501(versions)S
+1875(of)S
+1999(con\256gurations.)S
+2667(Whenever)S
+3117(a)S
+3202(con\256guration)S
+3776(is)S
+3884(baselined)S
+4302(or)S
+4425(distributed,)S
+4918(the)S
+4644 V
+720(best)S
+929(approach)S
+1342(is)S
+1457(to)S
+1584(unambiguously)S
+2250(\256x)S
+2405(the)S
+2576(con\256guration)S
+3158(with)S
+3385(a)S
+3478(symbolic)S
+3894(revision)S
+4265(number)S
+4619(by)S
+4768(calling)S
+4824 V
+10 I
+720(rcsfreeze)S
+10 R
+1080(,)S
+1137(to)S
+1247(embed)S
+1545(that)S
+1727(symbol)S
+2054(into)S
+2242(the)S
+2396(Make\256le,)S
+2808(and)S
+2983(to)S
+3092(check)S
+3355(in)S
+3464(the)S
+3617(Make\256le)S
+4003(\(using)S
+4284(the)S
+4437(same)S
+4673(symbolic)S
+5004 V
+720(revision)S
+1072(number\).)S
+1495(With)S
+1725(this)S
+1900(approach,)S
+2320(old)S
+2478(con\256gurations)S
+3080(can)S
+3248(be)S
+3372(regenerated)S
+3866(easily)S
+4129(and)S
+4303(reliably.)S
+5364 V
+10 B
+720(6.)S
+855(Usage)S
+1140(Statistics)S
+5580 V
+10 R
+970(The)S
+1165(following)S
+1594(usage)S
+1861(statistics)S
+2246(were)S
+2479(collected)S
+2879(on)S
+3019(two)S
+3209(DEC)S
+3449(VAX-11/780)S
+4016(computers)S
+4472(of)S
+4595(the)S
+4757(Purdue)S
+5760 V
+720(Computer)S
+1164(Science)S
+1517(Department.)S
+2086(Both)S
+2324(machines)S
+2744(are)S
+2908(mainly)S
+3229(used)S
+3455(for)S
+3614(research)S
+3988(purposes.)S
+4441(Thus,)S
+4709(the)S
+4874(data)S
+5940 V
+720(re\257ect)S
+1019(an)S
+1163(environment)S
+1718(in)S
+1847(which)S
+2142(the)S
+2315(majority)S
+2705(of)S
+2839(projects)S
+3206(involve)S
+3557(prototyping)S
+4075(and)S
+4270(advanced)S
+4697(software)S
+6120 V
+720(development,)S
+1291(but)S
+1449(relatively)S
+1856(little)S
+2070(long-term)S
+2494(maintenance.)S
+6336 V
+970(For)S
+1141(the)S
+1295(\256rst)S
+1483(experiment,)S
+1989(the)S
+10 I
+2143(ci)S
+10 R
+2247(and)S
+10 I
+2423(co)S
+10 R
+2549(operations)S
+2997(were)S
+3222(instrumented)S
+3776(to)S
+3886(log)S
+4046(the)S
+4200(number)S
+4537(of)S
+4653(backward)S
+6516 V
+720(and)S
+903(forward)S
+1256(deltas)S
+1527(applied.)S
+1914(The)S
+2107(data)S
+2311(were)S
+2542(collected)S
+2940(during)S
+3239(a)S
+3321(13)S
+3459(month)S
+3753(period)S
+4046(from)S
+4278(Dec.)S
+4501(1982)S
+4739(to)S
+4855(Dec.)S
+6696 V
+720(1983.)S
+1005(Table)S
+1262(I)S
+1325(summarizes)S
+1832(the)S
+1984(results.)S
+7920 V
+EP
+%%Page: 14 15
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+520 V
+2767(- 14 -)S
+740 V
+10 Y1
+1032(2)S
+1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S
+860 V
+10 R
+1082(Operation)S
+1748(Total)S
+2227(Total)S
+2468(deltas)S
+2851(Mean)S
+3108(deltas)S
+3541(Operations)S
+4284(Branch)S
+980 V
+1631(operations)S
+2317(applied)S
+2949(applied)S
+3491(with)S
+3699(>1)S
+3835(delta)S
+4220(operations)S
+1000 V
+10 Y1
+1032(2)S
+1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S
+1120 V
+10 R
+1082(co)S
+1779(7867)S
+2389(9320)S
+3008(1.18)S
+3491(509)S
+3810(\(6%\))S
+4179(203)S
+4479(\(3%\))S
+1240 V
+1082(ci)S
+1779(3468)S
+2389(2207)S
+3008(0.64)S
+3541(85)S
+3810(\(2%\))S
+4229(75)S
+4479(\(2%\))S
+1360 V
+1082(ci)S
+1184(&)S
+1292(co)S
+1729(11335)S
+2339(11527)S
+3008(1.02)S
+3491(594)S
+3810(\(5%\))S
+4179(278)S
+4479(\(2%\))S
+1380 V
+10 Y1
+1032(2)S
+1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S
+1032(1)S
+1340 V
+1032(1)S
+1240 V
+1032(1)S
+1140 V
+1032(1)S
+1040 V
+1032(1)S
+940 V
+1032(1)S
+840 V
+1032(1)S
+1380 V
+1556(1)S
+1340 V
+1556(1)S
+1240 V
+1556(1)S
+1140 V
+1556(1)S
+1040 V
+1556(1)S
+940 V
+1556(1)S
+840 V
+1556(1)S
+1380 V
+2152(1)S
+1340 V
+2152(1)S
+1240 V
+2152(1)S
+1140 V
+2152(1)S
+1040 V
+2152(1)S
+940 V
+2152(1)S
+840 V
+2152(1)S
+1380 V
+2776(1)S
+1340 V
+2776(1)S
+1240 V
+2776(1)S
+1140 V
+2776(1)S
+1040 V
+2776(1)S
+940 V
+2776(1)S
+840 V
+2776(1)S
+1380 V
+3416(1)S
+1340 V
+3416(1)S
+1240 V
+3416(1)S
+1140 V
+3416(1)S
+1040 V
+3416(1)S
+940 V
+3416(1)S
+840 V
+3416(1)S
+1380 V
+4104(1)S
+1340 V
+4104(1)S
+1240 V
+4104(1)S
+1140 V
+4104(1)S
+1040 V
+4104(1)S
+940 V
+4104(1)S
+840 V
+4104(1)S
+1380 V
+4728(1)S
+1340 V
+4728(1)S
+1240 V
+4728(1)S
+1140 V
+4728(1)S
+1040 V
+4728(1)S
+940 V
+4728(1)S
+840 V
+4728(1)S
+1560 V
+10 R
+2003(Table)S
+2260(I.)S
+2378(Statistics)S
+2770(for)S
+10 I
+2916(co)S
+10 R
+3040(and)S
+10 I
+3214(ci)S
+10 R
+3316(operations.)S
+1776 V
+970(The)S
+1157(\256rst)S
+1345(two)S
+1527(lines)S
+1748(show)S
+1991(statistics)S
+2368(for)S
+2516(check-out)S
+2941(and)S
+3117(check-in;)S
+3520(the)S
+3674(third)S
+3895(line)S
+4077(shows)S
+4360(the)S
+4515(combination.)S
+1956 V
+720(Recall)S
+1006(that)S
+10 I
+1187(ci)S
+10 R
+1290(performs)S
+1681(an)S
+1806(implicit)S
+2149(check-out)S
+2573(to)S
+2682(obtain)S
+2963(a)S
+3038(revision)S
+3391(for)S
+3537(computing)S
+3995(the)S
+4147(delta.)S
+4426(In)S
+4539(all)S
+4669(measures)S
+2136 V
+720(presented,)S
+1173(the)S
+1341(most)S
+1582(recent)S
+1871(revision)S
+2239(\(stored)S
+2562(intact\))S
+2863(counts)S
+3170(as)S
+3299(one)S
+3489(delta.)S
+3784(The)S
+3985(number)S
+4336(of)S
+4466(deltas)S
+4746(applied)S
+2316 V
+720(represents)S
+1154(the)S
+1306(number)S
+1641(of)S
+1754(passes)S
+2039(necessary,)S
+2481(where)S
+2754(the)S
+2906(\256rst)S
+3092(`pass')S
+3360(is)S
+3457(a)S
+3531(copying)S
+3883(step.)S
+2532 V
+970(Note)S
+1199(that)S
+1384(the)S
+1541(check-out)S
+1969(operation)S
+2381(is)S
+2483(executed)S
+2872(more)S
+3112(than)S
+3319(twice)S
+3570(as)S
+3688(frequently)S
+4133(as)S
+4251(the)S
+4408(check-in)S
+4786(opera-)S
+2712 V
+720(tion.)S
+972(The)S
+1168(fourth)S
+1453(column)S
+1794(gives)S
+2046(the)S
+2209(mean)S
+2466(number)S
+2812(of)S
+2936(deltas)S
+3210(applied)S
+3544(in)S
+3662(all)S
+3802(three)S
+4041(cases.)S
+4346(For)S
+10 I
+4525(ci)S
+10 R
+4597(,)S
+4662(the)S
+4824(mean)S
+2892 V
+720(number)S
+1055(of)S
+1168(deltas)S
+1431(applied)S
+1755(is)S
+1852(less)S
+2032(than)S
+2234(one.)S
+2463(The)S
+2649(reasons)S
+2979(are)S
+3131(that)S
+3312(the)S
+3465(initial)S
+3730(check-in)S
+4104(requires)S
+4456(no)S
+4587(delta)S
+4812(at)S
+4915(all,)S
+3072 V
+720(and)S
+913(that)S
+1111(the)S
+1281(only)S
+1507(time)S
+10 I
+1733(ci)S
+10 R
+1853(requires)S
+2222(more)S
+2475(than)S
+2695(one)S
+2887(delta)S
+3129(is)S
+3244(for)S
+3408(branches.)S
+3865(Column)S
+4236(5)S
+4334(shows)S
+4632(the)S
+4802(actual)S
+3252 V
+720(number)S
+1058(of)S
+1174(operations)S
+1623(that)S
+1806(applied)S
+2133(more)S
+2371(than)S
+2576(one)S
+2753(delta.)S
+3035(The)S
+3223(last)S
+3395(column)S
+3728(indicates)S
+4116(that)S
+4299(branches)S
+4686(were)S
+4912(not)S
+3432 V
+720(used)S
+933(often.)S
+3648 V
+970(The)S
+1156(last)S
+1326(three)S
+1556(columns)S
+1926(demonstrate)S
+2445(that)S
+2626(the)S
+2779(most)S
+3005(recent)S
+3279(trunk)S
+3522(revision)S
+3876(is)S
+3975(by)S
+4107(far)S
+4249(the)S
+4403(most)S
+4630(frequently)S
+3828 V
+720(accessed.)S
+1154(For)S
+1324(RCS,)S
+1570(check-out)S
+1994(of)S
+2108(this)S
+2284(revision)S
+2637(is)S
+2735(a)S
+2810(simple)S
+3108(copy)S
+3332(operation,)S
+3764(which)S
+4038(is)S
+4135(the)S
+4287(absolute)S
+4650(minimum)S
+4008 V
+720(given)S
+996(the)S
+1172(copy-semantics)S
+1847(of)S
+10 I
+1984(co)S
+10 R
+2078(.)S
+2187(Access)S
+2523(to)S
+2655(older)S
+2914(revisions)S
+3329(and)S
+3528(branches)S
+3937(is)S
+4059(more)S
+4319(common)S
+4724(in)S
+4857(non-)S
+4188 V
+720(academic)S
+1131(environments,)S
+1735(yet)S
+1892(even)S
+2115(if)S
+2210(access)S
+2498(to)S
+2610(older)S
+2849(deltas)S
+3116(were)S
+3343(an)S
+3471(order)S
+3715(of)S
+3832(magnitude)S
+4288(more)S
+4527(frequent,)S
+4918(the)S
+4368 V
+720(combined)S
+1155(average)S
+1505(number)S
+1851(of)S
+1975(deltas)S
+2249(applied)S
+2584(would)S
+2875(still)S
+3068(be)S
+3204(below)S
+3490(1.2.)S
+3712(Since)S
+3976(RCS)S
+4208(is)S
+4317(faster)S
+4580(than)S
+4794(SCCS)S
+4548 V
+720(until)S
+934(up)S
+1064(to)S
+1172(10)S
+1302(delta)S
+1526(applications,)S
+2064(reverse)S
+2381(deltas)S
+2644(are)S
+2795(clearly)S
+3096(the)S
+3248(method)S
+3578(of)S
+3691(choice.)S
+4764 V
+970(The)S
+1158(second)S
+1468(experiment,)S
+1975(conducted)S
+2418(in)S
+2529(March)S
+2822(of)S
+2938(1984,)S
+3196(involved)S
+3580(surveying)S
+4008(the)S
+4164(existing)S
+4515(RCS)S
+4739(\256les)S
+4940(on)S
+4944 V
+720(our)S
+887(two)S
+1071(machines.)S
+1536(The)S
+1724(goal)S
+1929(was)S
+2117(to)S
+2228(determine)S
+2660(the)S
+2815(mean)S
+3064(number)S
+3402(of)S
+3518(revisions)S
+3912(per)S
+4072(RCS)S
+4295(\256le,)S
+4481(as)S
+4597(well)S
+4802(as)S
+4918(the)S
+5124 V
+720(space)S
+977(consumed)S
+1418(by)S
+1554(them.)S
+1845(Table)S
+2109(II)S
+2212(shows)S
+2499(the)S
+2658(results.)S
+3011(\(Tables)S
+3347(I)S
+3417(and)S
+3598(II)S
+3701(were)S
+3931(produced)S
+4339(at)S
+4448(di)S
+4526 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+4587(erent)S
+4823(times)S
+5304 V
+720(and)S
+894(are)S
+1045(unrelated.\))S
+5384 V
+10 Y1
+883(2)S
+926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S
+5504 V
+10 R
+1486(Total)S
+1727(RCS)S
+2142(Total)S
+2645(Mean)S
+3089(Mean)S
+3346(size)S
+3531(of)S
+3764(Mean)S
+4021(size)S
+4206(of)S
+4439(Overhead)S
+5624 V
+1618(\256les)S
+2067(revisions)S
+2578(revisions)S
+3158(RCS)S
+3378(\256les)S
+3846(revisions)S
+5644 V
+10 Y1
+883(2)S
+926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S
+5764 V
+10 R
+933(All)S
+1091(\256les)S
+1601(8033)S
+2122(11133)S
+2671(1.39)S
+3251(6156)S
+3926(5585)S
+4545(1.10)S
+5884 V
+933(Files)S
+1158(with)S
+1601(1477)S
+2172(4578)S
+2671(3.10)S
+3251(8074)S
+3926(6041)S
+4545(1.34)S
+6004 V
+10 Y
+933(\263)S
+10 R
+1018(2)S
+1098(deltas)S
+6024 V
+10 Y1
+883(2)S
+926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S
+883(1)S
+5984 V
+883(1)S
+5884 V
+883(1)S
+5784 V
+883(1)S
+5684 V
+883(1)S
+5584 V
+883(1)S
+5484 V
+883(1)S
+6024 V
+1411(1)S
+5984 V
+1411(1)S
+5884 V
+1411(1)S
+5784 V
+1411(1)S
+5684 V
+1411(1)S
+5584 V
+1411(1)S
+5484 V
+1411(1)S
+6024 V
+1992(1)S
+5984 V
+1992(1)S
+5884 V
+1992(1)S
+5784 V
+1992(1)S
+5684 V
+1992(1)S
+5584 V
+1992(1)S
+5484 V
+1992(1)S
+6024 V
+2503(1)S
+5984 V
+2503(1)S
+5884 V
+2503(1)S
+5784 V
+2503(1)S
+5684 V
+2503(1)S
+5584 V
+2503(1)S
+5484 V
+2503(1)S
+6024 V
+3014(1)S
+5984 V
+3014(1)S
+5884 V
+3014(1)S
+5784 V
+3014(1)S
+5684 V
+3014(1)S
+5584 V
+3014(1)S
+5484 V
+3014(1)S
+6024 V
+3689(1)S
+5984 V
+3689(1)S
+5884 V
+3689(1)S
+5784 V
+3689(1)S
+5684 V
+3689(1)S
+5584 V
+3689(1)S
+5484 V
+3689(1)S
+6024 V
+4364(1)S
+5984 V
+4364(1)S
+5884 V
+4364(1)S
+5784 V
+4364(1)S
+5684 V
+4364(1)S
+5584 V
+4364(1)S
+5484 V
+4364(1)S
+6024 V
+4876(1)S
+5984 V
+4876(1)S
+5884 V
+4876(1)S
+5784 V
+4876(1)S
+5684 V
+4876(1)S
+5584 V
+4876(1)S
+5484 V
+4876(1)S
+6204 V
+10 R
+2201(Table)S
+2458(II.)S
+2609(Statistics)S
+3001(for)S
+3147(RCS)S
+3367(\256les.)S
+6420 V
+970(The)S
+1166(mean)S
+1423(number)S
+1769(of)S
+1893(revisions)S
+2295(per)S
+2463(RCS)S
+2694(\256le)S
+2863(is)S
+2972(1.39.)S
+3244(Columns)S
+3648(5)S
+3740(and)S
+3926(6)S
+4018(show)S
+4271(the)S
+4435(mean)S
+4693(sizes)S
+4929(\(in)S
+6600 V
+720(bytes\))S
+1004(of)S
+1127(an)S
+1261(RCS)S
+1491(\256le)S
+1659(and)S
+1842(of)S
+1964(the)S
+2125(latest)S
+2375(revision)S
+2736(of)S
+2858(each)S
+3079(RCS)S
+3308(\256le,)S
+3500(respectively.)S
+4076(The)S
+4270(`overhead')S
+4740(column)S
+6780 V
+720(contains)S
+1093(the)S
+1255(ratio)S
+1478(of)S
+1601(the)S
+1763(mean)S
+2019(sizes.)S
+2308(Assuming)S
+2754(that)S
+2944(all)S
+3084(revisions)S
+3485(in)S
+3603(an)S
+3738(RCS)S
+3969(\256le)S
+4138(are)S
+4300(approximately)S
+4918(the)S
+6960 V
+720(same)S
+955(size,)S
+1165(this)S
+1340(ratio)S
+1553(gives)S
+1794(a)S
+1868(measure)S
+2230(of)S
+2343(the)S
+2495(space)S
+2746(consumed)S
+3181(by)S
+3311(the)S
+3463(extra)S
+3692(revisions.)S
+7176 V
+970(In)S
+1092(our)S
+1264(sample,)S
+1611(over)S
+1827(80)S
+1966(per)S
+2132(cent)S
+2337(of)S
+2459(the)S
+2620(RCS)S
+2849(\256les)S
+3055(contained)S
+3482(only)S
+3699(a)S
+3782(single)S
+4061(revision.)S
+4478(The)S
+4673(reason)S
+4973(is)S
+7356 V
+720(that)S
+911(our)S
+1085(systems)S
+1443(programmers)S
+2016(routinely)S
+2418(check)S
+2691(in)S
+2810(all)S
+2951(source)S
+3252(\256les)S
+3460(on)S
+3600(the)S
+3762(distribution)S
+4264(tapes,)S
+4534(even)S
+4762(though)S
+7920 V
+EP
+%%Page: 15 16
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2767(- 15 -)S
+900 V
+720(they)S
+933(may)S
+1146(never)S
+1408(touch)S
+1672(them)S
+1914(again.)S
+2227(To)S
+2380(get)S
+2544(a)S
+2630(better)S
+2899(indication)S
+3341(of)S
+3466(how)S
+3680(much)S
+3944(space)S
+4207(savings)S
+4549(are)S
+4712(possible)S
+1080 V
+720(with)S
+935(deltas,)S
+1230(all)S
+1367(measures)S
+1775(with)S
+1990(those)S
+2238(\256les)S
+2442(that)S
+2629(contained)S
+3054(2)S
+3140(or)S
+3259(more)S
+3500(revisions)S
+3897(were)S
+4126(recomputed.)S
+4688(Only)S
+4924(for)S
+1260 V
+720(those)S
+961(\256les)S
+1158(is)S
+1255(RCS)S
+1475(necessary.)S
+1947(As)S
+2088(shown)S
+2379(in)S
+2487(the)S
+2639(second)S
+2946(line,)S
+3151(the)S
+3303(average)S
+3642(number)S
+3978(of)S
+4092(revisions)S
+4484(for)S
+4631(those)S
+4873(\256les)S
+1440 V
+720(is)S
+823(3.10,)S
+1059(with)S
+1273(an)S
+1403(overhead)S
+1804(of)S
+1923(1.34.)S
+2188(This)S
+2401(means)S
+2691(that)S
+2876(the)S
+3033(extra)S
+3267(2.10)S
+3477(deltas)S
+3745(require)S
+4062(34)S
+4197(per)S
+4359(cent)S
+4560(extra)S
+4794(space,)S
+1620 V
+720(or)S
+842(16)S
+981(per)S
+1147(cent)S
+1352(per)S
+1518(extra)S
+1756(revision.)S
+2172(Rochkind)S
+1570 V
+2561(3)S
+1620 V
+2650(measured)S
+3071(the)S
+3233(space)S
+3494(consumed)S
+3939(by)S
+4079(SCCS,)S
+4390(and)S
+4574(reported)S
+4946(an)S
+1800 V
+720(average)S
+1067(of)S
+1188(5)S
+1276(revisions)S
+1675(per)S
+1840(group)S
+2111(and)S
+2293(an)S
+2425(overhead)S
+2828(of)S
+2949(1.37)S
+3162(\(or)S
+3316(about)S
+3575(9)S
+3662(per)S
+3826(cent)S
+4029(per)S
+4193(extra)S
+4429(revision\).)S
+4876(In)S
+4996(a)S
+1980 V
+720(later)S
+930(paper,)S
+1209(Glasser)S
+1930 V
+1508(6)S
+1980 V
+1591(observed)S
+1984(an)S
+2111(average)S
+2453(of)S
+2569(7)S
+2652(revisions)S
+3046(per)S
+3206(group)S
+3472(in)S
+3583(a)S
+3660(single,)S
+3957(large)S
+4189(project,)S
+4524(but)S
+4685(provided)S
+2160 V
+720(no)S
+863(overhead)S
+1271(\256gure.)S
+1602(In)S
+1728(his)S
+1888(paper)S
+2152(on)S
+2294(DSEE)S
+2110 V
+2544(5)S
+2160 V
+2594(,)S
+2661(Leblang)S
+3030(reported)S
+3404(that)S
+3596(delta)S
+3832(storage)S
+4162(combined)S
+4598(with)S
+4818(blank)S
+2340 V
+720(compression)S
+1260(results)S
+1556(in)S
+1669(an)S
+1798(overhead)S
+2198(of)S
+2316(a)S
+2395(mere)S
+2629(1\2612)S
+2814(per)S
+2976(cent)S
+3177(per)S
+3339(revision.)S
+3751(Since)S
+4009(leading)S
+4339(blanks)S
+4636(accounted)S
+2520 V
+720(for)S
+870(about)S
+1126(20)S
+1260(per)S
+1421(cent)S
+1621(of)S
+1738(the)S
+1894(surveyed)S
+2288(Pascal)S
+2577(programs,)S
+3013(a)S
+3091(revision)S
+3447(group)S
+3714(with)S
+3926(5\26110)S
+4159(members)S
+4558(was)S
+4746(smaller)S
+2700 V
+720(than)S
+922(a)S
+996(single)S
+1265(cleartext)S
+1638(copy.)S
+2916 V
+970(The)S
+1155(above)S
+1423(observations)S
+1958(demonstrate)S
+2476(clearly)S
+2777(that)S
+2957(the)S
+3109(space)S
+3360(needed)S
+3672(for)S
+3818(extra)S
+4047(revisions)S
+4439(is)S
+4537(small.)S
+4840(With)S
+3096 V
+720(delta)S
+950(storage,)S
+1299(the)S
+1457(luxury)S
+1753(of)S
+1871(keeping)S
+2222(multiple)S
+2591(revisions)S
+2987(online)S
+3272(is)S
+3374(certainly)S
+3758(a)S
+3802 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+3863(ordable.)S
+4252(In)S
+4370(fact,)S
+4579(introducing)S
+3276 V
+720(a)S
+803(system)S
+1120(with)S
+1337(delta)S
+1571(storage)S
+1899(may)S
+2111(reduce)S
+2416(storage)S
+2744(requirements,)S
+3330(because)S
+3685(programmers)S
+4257(often)S
+4502(save)S
+4719(back-up)S
+3456 V
+720(copies)S
+1011(anyway.)S
+1411(Since)S
+1668(back-up)S
+2024(copies)S
+2314(are)S
+2470(stored)S
+2749(much)S
+3006(more)S
+3246(e)S
+3290 H
+       (f)show 10 -.5 mul h (\256)show
+10 R
+3374(ciently)S
+3681(with)S
+3894(deltas,)S
+4187(introducing)S
+4683(a)S
+4762(system)S
+3636 V
+720(such)S
+933(as)S
+1046(RCS)S
+1266(may)S
+1468(actually)S
+1814(free)S
+1998(a)S
+2072(considerable)S
+2606(amount)S
+2936(of)S
+3049(space.)S
+3996 V
+10 B
+720(7.)S
+855(Survey)S
+1185(of)S
+1298(Version)S
+1661(Control)S
+2024(Tools)S
+4212 V
+10 R
+970(The)S
+1159(need)S
+1381(to)S
+1493(keep)S
+1715(back-up)S
+2070(copies)S
+2359(of)S
+2477(software)S
+2855(arose)S
+3100(when)S
+3351(programs)S
+3763(and)S
+3942(data)S
+4143(were)S
+4371(no)S
+4506(longer)S
+4796(stored)S
+4392 V
+720(on)S
+861(paper)S
+1123(media,)S
+1433(but)S
+1602(were)S
+1836(entered)S
+2170(from)S
+2405(terminals)S
+2818(and)S
+3003(stored)S
+3288(on)S
+3428(disk.)S
+3690(Back-up)S
+4068(copies)S
+4363(are)S
+4524(desirable)S
+4924(for)S
+4572 V
+720(reliability,)S
+1166(and)S
+1342(many)S
+1596(modern)S
+1934(editors)S
+2239(automatically)S
+2816(save)S
+3026(a)S
+3103(back-up)S
+3457(copy)S
+3684(for)S
+3833(every)S
+4087(\256le)S
+4248(touched.)S
+4652(This)S
+4863(stra-)S
+4752 V
+720(tegy)S
+928(is)S
+1031(valuable)S
+1405(for)S
+1557(short-term)S
+2009(back-ups,)S
+2430(but)S
+2593(not)S
+2756(suitable)S
+3102(for)S
+3253(long-term)S
+3682(version)S
+4011(control,)S
+4354(since)S
+4594(an)S
+4723(existing)S
+4932 V
+720(back-up)S
+1071(copy)S
+1295(is)S
+1392(overwritten)S
+1882(whenever)S
+2299(the)S
+2451(corresponding)S
+3052(\256le)S
+3210(is)S
+3307(edited.)S
+5148 V
+970(Tape)S
+1217(archives)S
+1597(are)S
+1766(suitable)S
+2125(for)S
+2289(long-term,)S
+2756(o)S
+2806 H
+       (f)show 10 -.5 mul h (\257)show
+10 R
+2890(ine)S
+3060(storage.)S
+3451(If)S
+3565(all)S
+3713(changed)S
+4093(\256les)S
+4308(are)S
+4477(dumped)S
+4847(on)S
+4996(a)S
+5328 V
+720(back-up)S
+1073(tape)S
+1271(once)S
+1491(per)S
+1650(day,)S
+1851(old)S
+2010(revisions)S
+2402(remain)S
+2710(accessible.)S
+3200(However,)S
+3621(tape)S
+3818(archives)S
+4181(are)S
+4333(unsatisfactory)S
+4924(for)S
+5508 V
+720(version)S
+1049(control)S
+1367(in)S
+1480(several)S
+1797(ways.)S
+2092(First,)S
+2337(backing)S
+2689(up)S
+2825(the)S
+2983(\256le)S
+3147(system)S
+3461(every)S
+3718(24)S
+3854(hours)S
+4112(does)S
+4331(not)S
+4495(capture)S
+4824(inter-)S
+5688 V
+720(mediate)S
+1078(revisions.)S
+1536(Secondly,)S
+1975(the)S
+2139(old)S
+2308(revisions)S
+2710(are)S
+2872(not)S
+3041(online,)S
+3357(and)S
+3542(accessing)S
+3965(them)S
+4206(is)S
+4314(tedious)S
+4644(and)S
+4829(time-)S
+5868 V
+720(consuming.)S
+1248(In)S
+1365(particular,)S
+1806(it)S
+1896(is)S
+1997(impractical)S
+2480(to)S
+2592(compare)S
+2969(several)S
+3285(old)S
+3447(revisions)S
+3843(of)S
+3961(a)S
+4040(group,)S
+4333(because)S
+4683(that)S
+4868(may)S
+6048 V
+720(require)S
+1037(mounting)S
+1456(and)S
+1635(searching)S
+2052(several)S
+2369(tapes.)S
+2664(Tape)S
+2898(archives)S
+3265(are)S
+3421(important)S
+3845(fail-safe)S
+4206(tools)S
+4436(in)S
+4549(the)S
+4706(event)S
+4957(of)S
+6228 V
+720(catastrophic)S
+1240(disk)S
+1445(failures)S
+1782(or)S
+1903(accidental)S
+2345(deletions,)S
+2769(but)S
+2935(they)S
+3145(are)S
+3304(ill-suited)S
+3698(for)S
+3852(version)S
+4184(control.)S
+4560(Conversely,)S
+6408 V
+720(version)S
+1044(control)S
+1357(tools)S
+1582(do)S
+1712(not)S
+1870(obviate)S
+2194(the)S
+2346(need)S
+2564(for)S
+2710(tape)S
+2906(archives.)S
+6624 V
+970(A)S
+1076(natural)S
+1387(technique)S
+1809(for)S
+1959(keeping)S
+2309(several)S
+2625(old)S
+2787(revisions)S
+3182(online)S
+3466(is)S
+3567(to)S
+3679(never)S
+3934(delete)S
+4206(a)S
+4285(\256le.)S
+4503(Editing)S
+4833(a)S
+4912(\256le)S
+6804 V
+720(simply)S
+1036(creates)S
+1355(a)S
+1442(new)S
+1651(\256le)S
+1822(with)S
+2043(the)S
+2208(same)S
+2456(name,)S
+2740(but)S
+2911(with)S
+3132(a)S
+3218(di)S
+3296 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+3357(erent)S
+3598(sequence)S
+4005(number.)S
+4407(This)S
+4627(technique,)S
+6984 V
+720(available)S
+1119(as)S
+1241(an)S
+1374(option)S
+1669(in)S
+1786(DEC's)S
+2097(VMS)S
+2353(operating)S
+2769(system,)S
+3111(turns)S
+3350(out)S
+3518(to)S
+3636(be)S
+3770(inadequate)S
+4242(for)S
+4398(version)S
+4732(control.)S
+7164 V
+720(First,)S
+970(it)S
+1067(is)S
+1174(prohibitively)S
+1731(expensive)S
+2170(in)S
+2288(terms)S
+2550(of)S
+2673(storage)S
+3001(costs,)S
+3266(especially)S
+3705(since)S
+3950(no)S
+4090(data)S
+4296(compression)S
+4841(tech-)S
+7344 V
+720(niques)S
+1016(are)S
+1172(employed.)S
+1656(Secondly,)S
+2088(indiscriminately)S
+2773(storing)S
+3086(every)S
+3342(change)S
+3659(produces)S
+4054(too)S
+4217(many)S
+4474(revisions,)S
+4896(and)S
+7920 V
+EP
+%%Page: 16 17
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2767(- 16 -)S
+900 V
+720(programmers)S
+1289(have)S
+1514(di)S
+1592 H
+       (f)show 10 -.5 mul h (\256)show
+10 R
+1676(culties)S
+1974(distinguishing)S
+2579(them.)S
+2871(The)S
+3063(proliferation)S
+3599(of)S
+3718(revisions)S
+4115(forces)S
+4394(programmers)S
+4962(to)S
+1080 V
+720(spend)S
+989(much)S
+1247(time)S
+1461(on)S
+1597(\256nding)S
+1917(and)S
+2097(deleting)S
+2455(useless)S
+2774(\256les.)S
+3032(Thirdly,)S
+3393(most)S
+3624(of)S
+3743(the)S
+3902(support)S
+4239(functions)S
+4648(like)S
+4835(lock-)S
+1260 V
+720(ing,)S
+903(logging,)S
+1264(revision)S
+1616(selection,)S
+2026(and)S
+2200(identi\256cation)S
+2758(described)S
+3170(in)S
+3278(this)S
+3453(paper)S
+3704(are)S
+3855(not)S
+4013(available.)S
+1476 V
+970(An)S
+1122(alternative)S
+1573(approach)S
+1968(is)S
+2065(to)S
+2173(separate)S
+2529(editing)S
+2837(from)S
+3061(revision)S
+3414(control.)S
+3783(The)S
+3969(user)S
+4166(may)S
+4369(repeatedly)S
+4815(edit)S
+4996(a)S
+1656 V
+720(given)S
+985(revision,)S
+1374(until)S
+1600(freezing)S
+1968(it)S
+2066(with)S
+2286(an)S
+2422(explicit)S
+2764(command.)S
+3255(Once)S
+3507(a)S
+3593(revision)S
+3957(is)S
+4066(frozen,)S
+4387(it)S
+4485(is)S
+4594(stored)S
+4880(per-)S
+1836 V
+720(manently)S
+1122(and)S
+1296(can)S
+1464(no)S
+1594(longer)S
+1879(be)S
+2003(modi\256ed.)S
+2445(\(In)S
+2592(RCS,)S
+2838(freezing)S
+3195(a)S
+3270(revisions)S
+3662(is)S
+3760(done)S
+3985(with)S
+10 I
+4194(ci)S
+10 R
+4266(.\))S
+4385(Editing)S
+4711(a)S
+4786(frozen)S
+2016 V
+720(revision)S
+1073(implicitly)S
+1494(creates)S
+1801(a)S
+1876(new)S
+2073(one,)S
+2273(which)S
+2548(can)S
+2717(again)S
+2964(be)S
+3089(changed)S
+3451(repeatedly)S
+3896(until)S
+4110(it)S
+4196(is)S
+4293(frozen)S
+4577(itself.)S
+4862(This)S
+2196 V
+720(approach)S
+1123(saves)S
+1377(exactly)S
+1703(those)S
+1952(revisions)S
+2352(that)S
+2541(the)S
+2702(user)S
+2907(considers)S
+3323(important,)S
+3776(and)S
+3959(keeps)S
+4225(the)S
+4386(number)S
+4730(of)S
+4852(revi-)S
+2376 V
+720(sions)S
+969(manageable.)S
+1543(IBM's)S
+1847(CLEAR/CASTER)S
+2326 V
+2587(7)S
+2376 V
+2637(,)S
+2705(AT&T's)S
+3092(SCCS)S
+2326 V
+3338(3)S
+2376 V
+3388(,)S
+3456(CMU's)S
+3799(SDC)S
+2326 V
+3994(8)S
+2376 V
+4087(and)S
+4274(DEC's)S
+4589(CMS)S
+2326 V
+4801(9)S
+2376 V
+4851(,)S
+4919(are)S
+2556 V
+720(examples)S
+1142(of)S
+1270(version)S
+1609(control)S
+1937(systems)S
+2299(using)S
+2561(this)S
+2751(approach.)S
+3216(CLEAR/CASTER)S
+4001(maintains)S
+4435(a)S
+4524(data)S
+4735(base)S
+4957(of)S
+2736 V
+720(programs,)S
+1163(speci\256cations,)S
+1773(documentation)S
+2407(and)S
+2591(messages,)S
+3033(using)S
+3290(deltas.)S
+3618(Its)S
+3758(goal)S
+3970(is)S
+4077(to)S
+4195(provide)S
+4540(control)S
+4863(over)S
+2916 V
+720(the)S
+873(development)S
+1420(process)S
+1750(from)S
+1975(a)S
+2050(management)S
+2591(viewpoint.)S
+3077(SCCS)S
+3354(stores)S
+3618(multiple)S
+3983(revisions)S
+4375(of)S
+4489(source)S
+4780(text)S
+4962(in)S
+3096 V
+720(an)S
+861(ancestral)S
+1262(tree,)S
+1483(records)S
+1823(a)S
+1913(log)S
+2087(entry)S
+2338(for)S
+2500(each)S
+2728(revision,)S
+3121(provides)S
+3511(access)S
+3811(control,)S
+4165(and)S
+4355(has)S
+4534(facilities)S
+4924(for)S
+3276 V
+720(uniquely)S
+1100(identifying)S
+1569(each)S
+1781(revision.)S
+2188(An)S
+2340(e)S
+2384 H
+       (f)show 10 -.5 mul h (\256)show
+10 R
+2468(cient)S
+2692(delta)S
+2916(technique)S
+3334(reduces)S
+3668(the)S
+3820(space)S
+4072(consumed)S
+4508(by)S
+4639(each)S
+4852(revi-)S
+3456 V
+720(sion)S
+919(group.)S
+1239(SDC)S
+1466(is)S
+1565(much)S
+1819(simpler)S
+2151(than)S
+2355(SCCS)S
+2633(because)S
+2980(it)S
+3068(stores)S
+3333(not)S
+3493(more)S
+3730(than)S
+3934(two)S
+4116(revisions.)S
+4563(However,)S
+4984(it)S
+3636 V
+720(maintains)S
+1140(a)S
+1215(complete)S
+1612(log)S
+1771(for)S
+1918(all)S
+2049(old)S
+2208(revisions,)S
+2625(some)S
+2867(of)S
+2981(which)S
+3256(may)S
+3459(be)S
+3584(on)S
+3715(back-up)S
+4067(tape.)S
+4319(CMS,)S
+4587(like)S
+4769(SCCS,)S
+3816 V
+720(manages)S
+1099(tree-structured)S
+1710(revision)S
+2062(groups,)S
+2389(but)S
+2547(o)S
+2597 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2658(ers)S
+2804(no)S
+2934(identi\256cation)S
+3492(mechanism.)S
+4032 V
+970(Tools)S
+1228(for)S
+1374(dealing)S
+1698(with)S
+1906(con\256gurations)S
+2508(are)S
+2659(still)S
+2841(in)S
+2950(a)S
+3025(state)S
+3239(of)S
+3353(\257ux.)S
+3595(SCCS,)S
+3897(SDC)S
+4123(and)S
+4298(CMS)S
+4541(can)S
+4710(be)S
+4835(com-)S
+4212 V
+720(bined)S
+988(with)S
+1211(MAKE)S
+1550(or)S
+1678(MAKE-like)S
+2200(programs.)S
+2677(Since)S
+2944(\257exible)S
+3289(selection)S
+3689(rules)S
+3928(are)S
+4094(missing)S
+4451(from)S
+4690(all)S
+4835(these)S
+4392 V
+720(tools,)S
+986(it)S
+1088(is)S
+1201(sometimes)S
+1675(di)S
+1753 H
+       (f)show 10 -.5 mul h (\256)show
+10 R
+1837(cult)S
+2033(to)S
+2157(specify)S
+2491(precisely)S
+2897(which)S
+3187(revision)S
+3555(of)S
+3685(each)S
+3914(group)S
+4194(should)S
+4508(be)S
+4649(passed)S
+4962(to)S
+4572 V
+720(MAKE)S
+1055(for)S
+1211(building)S
+1585(a)S
+1669(desired)S
+1997(con\256guration.)S
+2625(The)S
+2820(Xerox)S
+3109(Cedar)S
+3387(system)S
+4522 V
+3665(10)S
+4572 V
+3805(provides)S
+4189(a)S
+4273(`System)S
+4641(Modeller')S
+4752 V
+720(that)S
+903(can)S
+1074(rebuild)S
+1390(a)S
+1467(con\256guration)S
+2033(from)S
+2260(an)S
+2387(arbitrary)S
+2763(set)S
+2907(of)S
+3023(module)S
+3356(revisions.)S
+3806(The)S
+3995(revisions)S
+4390(of)S
+4507(a)S
+4585(module)S
+4919(are)S
+4932 V
+720(only)S
+935(distinguished)S
+1506(by)S
+1643(creation)S
+2001(time,)S
+2241(and)S
+2422(there)S
+2658(is)S
+2762(no)S
+2899(tool)S
+3092(for)S
+3245(managing)S
+3676(groups.)S
+4039(Since)S
+4297(the)S
+4455(selection)S
+4846(rules)S
+5112 V
+720(are)S
+871(primitive,)S
+1293(the)S
+1445(System)S
+1770(Modeller)S
+2166(appears)S
+2500(to)S
+2608(be)S
+2732(somewhat)S
+3167(tedious)S
+3486(to)S
+3594(use.)S
+3812(Apollo's)S
+4192(DSEE)S
+5062 V
+4442(5)S
+5112 V
+4522(is)S
+4620(a)S
+4695(sophisti-)S
+5292 V
+720(cated)S
+961(software)S
+1335(engineering)S
+1837(environment.)S
+2428(It)S
+2520(manages)S
+2900(revision)S
+3253(groups)S
+3556(in)S
+3665(a)S
+3740(way)S
+3937(similar)S
+4245(to)S
+4353(SCCS)S
+4629(and)S
+4803(CMS.)S
+5472 V
+720(Con\256gurations)S
+1359(are)S
+1524(built)S
+1752(using)S
+2013(`con\256guration)S
+2624(threads'.)S
+3045(A)S
+3162(con\256guration)S
+3740(thread)S
+4034(states)S
+4301(which)S
+4590(revision)S
+4957(of)S
+5652 V
+720(each)S
+947(group)S
+1225(named)S
+1536(in)S
+1659(a)S
+1748(con\256guration)S
+2326(should)S
+2638(be)S
+2777(chosen.)S
+3154(A)S
+3271(con\256guration)S
+3849(thread)S
+4142(may)S
+4358(contain)S
+4696(dynamic)S
+5832 V
+720(speci\256ers)S
+1141(\(e.g.,)S
+1387(`choose)S
+1741(the)S
+1908(revisions)S
+2314(I)S
+2392(am)S
+2559(currently)S
+2964(working)S
+3342(on,)S
+3512(and)S
+3701(the)S
+3868(most)S
+4108(recent)S
+4396(revisions)S
+4802(other-)S
+6012 V
+720(wise'\),)S
+1030(which)S
+1310(are)S
+1467(bound)S
+1753(automatically)S
+2332(at)S
+2439(build)S
+2680(time.)S
+2948(It)S
+3044(also)S
+3240(provides)S
+3619(a)S
+3698(noti\256cation)S
+4189(mechanism)S
+4679(for)S
+4830(alert-)S
+6192 V
+720(ing)S
+878(maintainers)S
+1374(about)S
+1626(the)S
+1778(need)S
+1996(to)S
+2104(rebuild)S
+2417(a)S
+2491(system)S
+2799(after)S
+3011(a)S
+3085(change.)S
+6408 V
+970(RCS)S
+1195(is)S
+1298(based)S
+1561(on)S
+1697(a)S
+1777(general)S
+2106(model)S
+2392(for)S
+2544(describing)S
+2996(multi-version/multi-con\256guration)S
+4377(systems)S
+6358 V
+4694(11)S
+6408 V
+4794(.)S
+4885(The)S
+6588 V
+720(model)S
+1017(describes)S
+1435(systems)S
+1798(using)S
+2061(AND/OR)S
+2490(graphs,)S
+2827(where)S
+3116(AND)S
+3378(nodes)S
+3657(represent)S
+4068(con\256gurations,)S
+4711(and)S
+4901(OR)S
+6768 V
+720(nodes)S
+1012(represent)S
+1436(version)S
+1789(groups.)S
+2175(The)S
+2389(model)S
+2698(gives)S
+2968(rise)S
+3171(to)S
+3308(a)S
+3411(suit)S
+3615(of)S
+3757(selection)S
+4171(rules)S
+4425(for)S
+4601(composing)S
+6948 V
+720(con\256gurations,)S
+1354(almost)S
+1658(all)S
+1795(of)S
+1915(which)S
+2196(are)S
+2354(implemented)S
+2913(in)S
+3028(RCS.)S
+3310(The)S
+3501(revisions)S
+3898(selected)S
+4255(by)S
+4391(RCS)S
+4617(are)S
+4774(passed)S
+7128 V
+720(to)S
+831(MAKE)S
+1158(for)S
+1307(con\256guration)S
+1873(building.)S
+2295(Revision)S
+2684(group)S
+2950(management)S
+3493(is)S
+3593(modelled)S
+3999(after)S
+4215(SCCS.)S
+4550(RCS)S
+4774(retains)S
+7308 V
+720(SCCS's)S
+1080(best)S
+1283(features,)S
+1665(but)S
+1835(o)S
+1885 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1946(ers)S
+2104(a)S
+2190(signi\256cantly)S
+2727(simpler)S
+3068(user)S
+3275(interface,)S
+3689(\257exible)S
+4030(selection)S
+4426(rules,)S
+4686(adequate)S
+7920 V
+EP
+%%Page: 17 18
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+580 V
+2767(- 17 -)S
+900 V
+720(integration)S
+1190(with)S
+1405(MAKE)S
+1736(and)S
+1917(improved)S
+2337(identi\256cation.)S
+2957(A)S
+3066(detailed)S
+3419(comparison)S
+3922(of)S
+4042(RCS)S
+4270(and)S
+4452(SCCS)S
+4736(appears)S
+1080 V
+720(in)S
+828(Reference)S
+1261(4.)S
+1296 V
+970(An)S
+1126(important)S
+1549(component)S
+2027(of)S
+2144(all)S
+2278(revision)S
+2634(control)S
+2951(systems)S
+3303(is)S
+3405(a)S
+3484(program)S
+3857(for)S
+4008(computing)S
+4471(deltas.)S
+4794(SCCS)S
+1476 V
+720(and)S
+896(RCS)S
+1118(use)S
+1283(the)S
+1437(program)S
+10 I
+1807(diff)S
+1426 V
+10 R
+1941(2)S
+1476 V
+1991(,)S
+2048(which)S
+2324(\256rst)S
+2512(computes)S
+2927(the)S
+3081(longest)S
+3402(common)S
+3784(substring)S
+4183(of)S
+4298(two)S
+4479(revisions,)S
+4896(and)S
+1656 V
+720(then)S
+927(produces)S
+1322(the)S
+1479(delta)S
+1708(from)S
+1937(that)S
+2122(substring.)S
+2579(The)S
+2769(delta)S
+2998(is)S
+3100(simply)S
+3408(an)S
+3537(edit)S
+3722(script)S
+3979(consisting)S
+4420(of)S
+4538(deletion)S
+4896(and)S
+1836 V
+720(insertion)S
+1100(commands)S
+1563(that)S
+1743(generate)S
+2110(one)S
+2284(revision)S
+2636(from)S
+2860(the)S
+3012(other.)S
+2052 V
+970(A)S
+1078(delta)S
+1308(based)S
+1571(on)S
+1707(a)S
+1787(longest)S
+2112(common)S
+2498(substring)S
+2901(is)S
+3004(not)S
+3168(necessarily)S
+3648(minimal,)S
+4044(because)S
+4396(it)S
+4489(does)S
+4709(not)S
+4874(take)S
+2232 V
+720(advantage)S
+1156(of)S
+1271(crossing)S
+1636(block)S
+1890(moves.)S
+2238(Crossing)S
+2626(block)S
+2880(moves)S
+3173(arise)S
+3392(if)S
+3484(two)S
+3665(or)S
+3779(more)S
+4015(blocks)S
+4307(of)S
+4421(lines)S
+4641(\(e.g.,)S
+4874(pro-)S
+2412 V
+720(cedures\))S
+1090(appear)S
+1388(in)S
+1499(a)S
+1576(di)S
+1654 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1715(erent)S
+1947(order)S
+2190(in)S
+2301(two)S
+2484(revisions.)S
+2933(An)S
+3088(edit)S
+3271(script)S
+3526(derived)S
+3858(from)S
+4085(a)S
+4162(longest)S
+4484(common)S
+4868(sub-)S
+2592 V
+720(string)S
+987(\256rst)S
+1182(deletes)S
+1498(the)S
+1659(shorter)S
+1975(of)S
+2097(the)S
+2258(two)S
+2447(blocks,)S
+2772(and)S
+2955(then)S
+3166(reinserts)S
+3543(it.)S
+3693(Heckel)S
+2542 V
+3975(12)S
+2592 V
+4114(proposed)S
+4519(an)S
+4651(algorithm)S
+2772 V
+720(for)S
+884(detecting)S
+1298(block)S
+1568(moves,)S
+1902(but)S
+2078(since)S
+2331(the)S
+2501(algorithm)S
+2938(is)S
+3053(based)S
+3328(on)S
+3476(heuristics,)S
+3932(there)S
+4179(are)S
+4348(conditions)S
+4813(under)S
+2952 V
+720(which)S
+997(the)S
+1152(generated)S
+1572(delta)S
+1799(is)S
+1899(far)S
+2042(from)S
+2269(minimal.)S
+2691(DSEE)S
+2974(uses)S
+3179(this)S
+3357(algorithm)S
+3779(combined)S
+4205(with)S
+4415(blank)S
+4669(compres-)S
+3132 V
+720(sion,)S
+965(apparently)S
+1439(with)S
+1670(satisfactory)S
+2183(overall)S
+2514(results.)S
+2884(A)S
+3010(new)S
+3230(algorithm)S
+3673(that)S
+3877(is)S
+3998(guaranteed)S
+4489(to)S
+4621(produce)S
+4996(a)S
+3312 V
+720(minimal)S
+1085(delta)S
+1310(based)S
+1568(on)S
+1699(block)S
+1951(moves)S
+2242(appears)S
+2576(in)S
+2684(Reference)S
+3117(13.)S
+3302(A)S
+3404(future)S
+3672(release)S
+3978(of)S
+4091(RCS)S
+4311(will)S
+4497(use)S
+4660(this)S
+4835(algo-)S
+3492 V
+720(rithm.)S
+3708 V
+10 I
+970(Acknowledgements)S
+10 R
+1735(:)S
+1818(Many)S
+2106(people)S
+2427(have)S
+2670(helped)S
+2991(make)S
+3262(RCS)S
+3507(a)S
+3606(success)S
+3960(by)S
+4115(contributed)S
+4626(criticisms,)S
+3888 V
+720(suggestions,)S
+1246(corrections,)S
+1748(and)S
+1926(even)S
+2148(whole)S
+2426(new)S
+2626(commands)S
+3093(\(including)S
+3538(manual)S
+3866(pages\).)S
+4214(The)S
+4402(list)S
+4558(of)S
+4674(people)S
+4973(is)S
+4068 V
+720(too)S
+878(long)S
+1086(to)S
+1194(be)S
+1318(reproduced)S
+1796(here,)S
+2022(but)S
+2180(my)S
+2338(sincere)S
+2650(thanks)S
+2941(for)S
+3087(their)S
+3300(help)S
+3502(and)S
+3676(goodwill)S
+4062(goes)S
+4275(to)S
+4383(all)S
+4513(of)S
+4626(them.)S
+4488 V
+10 B
+720(Appendix:)S
+1201(Synopsis)S
+1605(of)S
+1718(RCS)S
+1948(Operations)S
+4680 V
+10 I
+720(ci)S
+10 B
+822(\261)S
+902(check)S
+1176(in)S
+1290(revisions)S
+4800 V
+10 I
+970(Ci)S
+10 R
+1102(stores)S
+1372(the)S
+1531(contents)S
+1901(of)S
+2021(a)S
+2102(working)S
+2472(\256le)S
+2637(into)S
+2830(the)S
+2989(corresponding)S
+3598(RCS)S
+3826(\256le)S
+3992(as)S
+4113(a)S
+4195(new)S
+4399(revision.)S
+4814(If)S
+4918(the)S
+4920 V
+970(RCS)S
+1191(\256le)S
+1350(doesn't)S
+1675(exist,)S
+10 I
+1920(ci)S
+10 R
+2023(creates)S
+2330(it.)S
+10 I
+2472(Ci)S
+10 R
+2598(removes)S
+2967(the)S
+3120(working)S
+3484(\256le,)S
+3668(unless)S
+3949(one)S
+4124(of)S
+4238(the)S
+4391(options)S
+10 I
+4717(\261u)S
+10 R
+4848(or)S
+10 I
+4962(\261l)S
+5040 V
+10 R
+970(is)S
+1071(present.)S
+1448(For)S
+1621(each)S
+1837(check-in,)S
+10 I
+2239(ci)S
+10 R
+2345(asks)S
+2551(for)S
+2701(a)S
+2779(commentary)S
+3312(describing)S
+3763(the)S
+3920(changes)S
+4276(relative)S
+4610(to)S
+4723(the)S
+4880(pre-)S
+5160 V
+970(vious)S
+1217(revision.)S
+5400 V
+10 I
+970(Ci)S
+10 R
+1111(assigns)S
+1446(the)S
+1614(revision)S
+1982(number)S
+2333(given)S
+2601(by)S
+2747(the)S
+10 I
+2915(\261r)S
+10 R
+3050(option;)S
+3380(if)S
+3487(that)S
+3683(option)S
+3985(is)S
+4098(missing,)S
+4481(it)S
+4583(derives)S
+4918(the)S
+5520 V
+970(number)S
+1313(from)S
+1545(the)S
+1705(lock)S
+1915(held)S
+2125(by)S
+2263(the)S
+2423(user;)S
+2655(if)S
+2754(there)S
+2991(is)S
+3096(no)S
+3234(lock)S
+3444(and)S
+3625(locking)S
+3962(is)S
+4066(not)S
+4231(strict,)S
+10 I
+4493(ci)S
+10 R
+4602(increments)S
+5640 V
+970(the)S
+1136(number)S
+1485(of)S
+1612(the)S
+1778(latest)S
+2033(revision)S
+2399(on)S
+2544(the)S
+2711(trunk.)S
+3022(A)S
+3139(side)S
+3345(branch)S
+3661(can)S
+3844(only)S
+4067(be)S
+4206(started)S
+4517(by)S
+4662(explicitly)S
+5760 V
+970(specifying)S
+1416(its)S
+1541(number)S
+1876(with)S
+2084(the)S
+10 I
+2236(\261r)S
+10 R
+2355(option)S
+2641(during)S
+2932(check-in.)S
+6000 V
+10 I
+970(Ci)S
+10 R
+1106(also)S
+1308(determines)S
+1787(whether)S
+2149(the)S
+2312(revision)S
+2675(to)S
+2794(be)S
+2929(checked)S
+3296(in)S
+3415(is)S
+3523(di)S
+3601 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+3662(erent)S
+3902(from)S
+4137(the)S
+4300(previous)S
+4685(one,)S
+4896(and)S
+6120 V
+970(asks)S
+1194(whether)S
+1567(to)S
+1697(proceed)S
+2064(if)S
+2177(not.)S
+2412(This)S
+2642(facility)S
+2977(simpli\256es)S
+3419(check-in)S
+3814(operations)S
+4281(for)S
+4448(large)S
+4698(systems,)S
+6240 V
+970(because)S
+1315(one)S
+1489(need)S
+1707(not)S
+1865(remember)S
+2299(which)S
+2573(\256les)S
+2770(were)S
+2993(changed.)S
+6480 V
+970(The)S
+1161(option)S
+10 I
+1453(\261k)S
+10 R
+1583(searches)S
+1956(the)S
+2114(checked)S
+2476(in)S
+2590(\256le)S
+2754(for)S
+2906(identi\256cation)S
+3470(markers)S
+3827(containing)S
+4285(the)S
+4443(attributes)S
+4852(revi-)S
+6600 V
+970(sion)S
+1169(number,)S
+1530(check-in)S
+1904(date,)S
+2126(author)S
+2412(and)S
+2587(state,)S
+2826(and)S
+3001(assigns)S
+3321(these)S
+3557(to)S
+3666(the)S
+3819(new)S
+4016(revision)S
+4369(rather)S
+4632(than)S
+4835(com-)S
+6720 V
+970(puting)S
+1275(them.)S
+1579(This)S
+1806(option)S
+2111(is)S
+2227(useful)S
+2520(for)S
+2685(software)S
+3077(distribution:)S
+3616(Recipients)S
+4087(of)S
+4219(distributed)S
+4697(software)S
+6840 V
+970(using)S
+1227(RCS)S
+1457(should)S
+1764(check)S
+2036(in)S
+2154(updates)S
+2499(with)S
+2717(the)S
+10 I
+2879(\261k)S
+10 R
+3013(option.)S
+3364(This)S
+3581(convention)S
+4064(guarantees)S
+4529(that)S
+4718(revision)S
+6960 V
+970(numbers,)S
+1369(check-in)S
+1742(dates,)S
+2002(etc.,)S
+2198(are)S
+2349(the)S
+2501(same)S
+2736(at)S
+2838(all)S
+2968(sites.)S
+7116 V
+10 I
+720(co)S
+10 B
+844(\261)S
+924(check)S
+1198(out)S
+1367(revisions)S
+7236 V
+10 I
+970(Co)S
+10 R
+1136(retrieves)S
+1528(revisions)S
+1938(according)S
+2380(to)S
+2507(revision)S
+2878(number,)S
+3257(date,)S
+3497(author)S
+3801(and)S
+3994(state)S
+4226(attributes.)S
+4702(It)S
+4813(either)S
+7920 V
+EP
+%%Page: 18 19
+BP
+/slant 0 def
+/height 1.000000 def
+10 R
+10 R
+40 V
+0(-)S
+520 V
+2767(- 18 -)S
+840 V
+970(places)S
+1251(the)S
+1405(revision)S
+1759(into)S
+1947(the)S
+2101(working)S
+2465(\256le,)S
+2649(or)S
+2763(prints)S
+3022(it)S
+3109(on)S
+3240(the)S
+3393(standard)S
+3762(output.)S
+10 I
+4104(Co)S
+10 R
+4252(always)S
+4560(expands)S
+4918(the)S
+960 V
+970(identi\256cation)S
+1528(markers.)S
+1116 V
+10 I
+720(ident)S
+10 B
+950(\261)S
+1030(extract)S
+1358(identi\256cation)S
+1950(markers)S
+1236 V
+10 I
+970(Ident)S
+10 R
+1205(extracts)S
+1545(the)S
+1697(identi\256cation)S
+2255(markers)S
+2606(expanded)S
+3018(by)S
+10 I
+3148(co)S
+10 R
+3272(from)S
+3496(any)S
+3670(\256le)S
+3828(and)S
+4002(prints)S
+4260(them.)S
+1392 V
+10 I
+720(rcs)S
+10 B
+872(\261)S
+952(change)S
+1282(RCS)S
+1512(\256le)S
+1670(attributes)S
+1512 V
+10 I
+970(Rcs)S
+10 R
+1144(is)S
+1241(an)S
+1365(administrative)S
+1967(operation)S
+2374(that)S
+2554(changes)S
+2905(access)S
+3189(lists,)S
+3406(locks,)S
+3673(unlocks,)S
+4040(breaks)S
+4331(locks,)S
+4598(toggles)S
+4918(the)S
+1632 V
+970(strict-locking)S
+1541(feature,)S
+1880(sets)S
+2068(state)S
+2289(attributes)S
+2699(and)S
+2881(symbolic)S
+3286(revision)S
+3646(numbers,)S
+4053(changes)S
+4412(the)S
+4571(description,)S
+1752 V
+970(and)S
+1144(deletes)S
+1451(revisions.)S
+1897(A)S
+1999(revision)S
+2351(can)S
+2519(only)S
+2727(be)S
+2851(deleted)S
+3169(if)S
+3260(it)S
+3346(is)S
+3443(not)S
+3601(the)S
+3753(fork)S
+3949(of)S
+4062(a)S
+4136(side)S
+4327(branch.)S
+1908 V
+10 I
+720(rcsclean)S
+10 B
+1088(\261)S
+1168(clean)S
+1420(working)S
+1806(directory)S
+2028 V
+10 I
+970(Rcsclean)S
+10 R
+1360(removes)S
+1728(working)S
+2091(\256les)S
+2288(that)S
+2468(were)S
+2691(checked)S
+3047(out)S
+3205(but)S
+3363(never)S
+3614(changed.*)S
+2184 V
+10 I
+720(rcsdiff)S
+10 B
+1006(\261)S
+1086(compare)S
+1487(revisions)S
+2304 V
+10 I
+970(Rcsdiff)S
+10 R
+1289(compares)S
+1712(two)S
+1903(revisions)S
+2305(and)S
+2490(prints)S
+2759(their)S
+2983(di)S
+3061 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+3122(erence,)S
+3447(using)S
+3705(the)S
+3868(UNIX)S
+4158(tool)S
+10 I
+4355(diff)S
+10 R
+4489(.)S
+4585(One)S
+4793(of)S
+4918(the)S
+2424 V
+970(revisions)S
+1361(compared)S
+1784(may)S
+1986(be)S
+2110(checked)S
+2466(out.)S
+2679(This)S
+2887(command)S
+3311(is)S
+3408(useful)S
+3682(for)S
+3828(\256nding)S
+4142(out)S
+4300(about)S
+4552(changes.)S
+2580 V
+10 I
+720(rcsfreeze)S
+10 B
+1110(\261)S
+1190(freeze)S
+1473(a)S
+1553(con\256guration)S
+2700 V
+10 I
+970(Rcsfreeze)S
+10 R
+1394(assigns)S
+1726(the)S
+1891(same)S
+2139(symbolic)S
+2549(revision)S
+2914(number)S
+3262(to)S
+3383(a)S
+3470(given)S
+3735(revision)S
+4100(in)S
+4221(all)S
+4364(RCS)S
+4597(\256les.)S
+4862(This)S
+2820 V
+970(command)S
+1394(is)S
+1491(useful)S
+1765(for)S
+1911(accurately)S
+2350(recording)S
+2762(a)S
+2836(con\256guration.*)S
+2976 V
+10 I
+720(rcsmerge)S
+10 B
+1121(\261)S
+1201(merge)S
+1496(revisions)S
+3096 V
+10 I
+970(Rcsmerge)S
+10 R
+1400(merges)S
+1725(two)S
+1912(revisions,)S
+10 I
+2335(rev1)S
+10 R
+2549(and)S
+10 I
+2730(rev2)S
+10 R
+2907(,)S
+2969(with)S
+3184(respect)S
+3504(to)S
+3620(a)S
+3702(common)S
+4090(ancestor.)S
+4515(A)S
+4625(3-way)S
+4912(\256le)S
+3216 V
+970(comparison)S
+1472(determines)S
+1946(the)S
+2104(segments)S
+2512(of)S
+2631(lines)S
+2856(that)S
+3042(are)S
+3199(\(a\))S
+3345(the)S
+3503(same)S
+3744(in)S
+3858(all)S
+3994(three)S
+4228(revisions,)S
+4649(or)S
+4767(\(b\))S
+4918(the)S
+3336 V
+970(same)S
+1216(in)S
+1336(2)S
+1428(revisions,)S
+1856(or)S
+1981(\(c\))S
+2133(di)S
+2211 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2272(erent)S
+2513(in)S
+2633(all)S
+2775(three.)S
+3071(For)S
+3252(all)S
+3394(segments)S
+3808(of)S
+3933(type)S
+4147(\(b\))S
+4305(where)S
+10 I
+4590(rev1)S
+10 R
+4809(is)S
+4918(the)S
+3456 V
+970(di)S
+1048 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+1109(ering)S
+1350(revision,)S
+1733(the)S
+1891(segment)S
+2260(in)S
+10 I
+2374(rev1)S
+10 R
+2587(replaces)S
+2949(the)S
+3107(corresponding)S
+3713(segment)S
+4081(of)S
+10 I
+4199(rev2)S
+10 R
+4376(.)S
+4466(Type)S
+4706(\(c\))S
+4851(indi-)S
+3576 V
+970(cates)S
+1215(an)S
+1355(overlapping)S
+1878(change,)S
+2231(is)S
+2344(\257agged)S
+2684(as)S
+2813(an)S
+2953(error,)S
+3217(and)S
+3408(requires)S
+3776(user)S
+3989(intervention)S
+4519(to)S
+4644(select)S
+4918(the)S
+3696 V
+970(correct)S
+1276(alternative.)S
+3852 V
+10 I
+720(rlog)S
+10 B
+917(\261)S
+997(read)S
+1221(log)S
+1379(messages)S
+3972 V
+10 I
+970(Rlog)S
+10 R
+1189(prints)S
+1447(the)S
+1599(log)S
+1757(messages)S
+2164(and)S
+2338(other)S
+2573(information)S
+3075(in)S
+3183(an)S
+3307(RCS)S
+3527(\256le.)S
+6962 V
+8 Y1
+720(333333333333333333)S
+7080 V
+8 R
+820(*)S
+900(The)S
+8 I
+1048(rcsclean)S
+8 R
+1341(and)S
+8 I
+1480(rcsfreeze)S
+8 R
+1790(commands)S
+2159(are)S
+2279(optional)S
+2564(and)S
+2703(are)S
+2823(not)S
+2949(always)S
+3194(installed.)S
+7920 V
+EP
+%%Page: 19 20
+BP
+/slant 0 def
+/height 1.000000 def
+8 R
+8 R
+40 V
+10 R
+0(-)S
+520 V
+2767(- 19 -)S
+840 V
+10 B
+720(References)S
+1032 V
+10 R
+720(1.)S
+970(Feldman,)S
+1378(Stuart)S
+1650(I.,)S
+1766(``Make\320A)S
+2264(Program)S
+2642(for)S
+2792(Maintaining)S
+3315(Computer)S
+3749(Programs,'')S
+10 I
+4257(Software\320Practice)S
+1152 V
+970(&)S
+1078(Experience)S
+10 R
+1526(,)S
+1581(vol.)S
+1764(9,)S
+1869(no.)S
+2024(3,)S
+2129(pp.)S
+2284(255-265,)S
+2672(March)S
+2962(1979.)S
+1308 V
+720(2.)S
+970(Hunt,)S
+1229(James)S
+1507(W.)S
+1660(and)S
+1838(McIlroy,)S
+2224(M.)S
+2372(D.,)S
+2528(``An)S
+2750(Algorithm)S
+3201(for)S
+3351(Di)S
+3451 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+3512(erential)S
+3846(File)S
+4037(Comparison,'')S
+4652(41,)S
+4812(Com-)S
+1428 V
+970(puting)S
+1256(Science)S
+1596(Technical)S
+2019(Report,)S
+2346(Bell)S
+2543(Laboratories,)S
+3102(June)S
+3315(1976.)S
+1584 V
+720(3.)S
+970(Rochkind,)S
+1414(Marc)S
+1654(J.,)S
+1773(``The)S
+2024(Source)S
+2331(Code)S
+2572(Control)S
+2908(System,'')S
+10 I
+3324(IEEE)S
+3570(Transactions)S
+4123(on)S
+4254(Software)S
+4641(Engineer-)S
+1704 V
+970(ing)S
+10 R
+1098(,)S
+1153(vol.)S
+1336(SE-1,)S
+1591(no.)S
+1746(4,)S
+1851(pp.)S
+2006(364-370,)S
+2394(Dec.)S
+2609(1975.)S
+1860 V
+720(4.)S
+970(Tichy,)S
+1275(Walter)S
+1593(F.,)S
+1746(``Design,)S
+2168(Implementation,)S
+2874(and)S
+3066(Evaluation)S
+3547(of)S
+3678(a)S
+3770(Revision)S
+4174(Control)S
+4528(System,'')S
+4962(in)S
+1980 V
+10 I
+970(Proceedings)S
+1503(of)S
+1615(the)S
+1771(6th)S
+1933(International)S
+2495(Conference)S
+2989(on)S
+3123(Software)S
+3512(Engineering)S
+10 R
+4006(,)S
+4064(pp.)S
+4222(58-67,)S
+4513(ACM,)S
+4799(IEEE,)S
+2100 V
+970(IPS,)S
+1170(NBS,)S
+1420(September)S
+1877(1982.)S
+2256 V
+720(5.)S
+970(Leblang,)S
+1357(David)S
+1636(B.)S
+1763(and)S
+1942(Chase,)S
+2247(Robert)S
+2555(P.,)S
+2697(``Computer-Aided)S
+3476(Software)S
+3872(Engineering)S
+4396(in)S
+4510(a)S
+4590(Distributed)S
+2376 V
+970(Workstation)S
+1505(Environment,'')S
+10 I
+2159(SIGPLAN)S
+2600(Notices)S
+10 R
+2900(,)S
+2966(vol.)S
+3160(19,)S
+3325(no.)S
+3490(5,)S
+3605(pp.)S
+3770(104-112,)S
+4168(May)S
+4391(1984.)S
+4686(Proceed-)S
+2496 V
+970(ings)S
+1184(of)S
+1314(the)S
+1484(ACM)S
+1760(SIGSOFT/SIGPLAN)S
+2664(Software)S
+3072(Engineering)S
+3608(Symposium)S
+4135(on)S
+4283(Practical)S
+4680(Software)S
+2616 V
+970(Development)S
+1538(Environments.)S
+2772 V
+720(6.)S
+970(Glasser,)S
+1325(Alan)S
+1551(L.,)S
+1694(``The)S
+1947(Evolution)S
+2374(of)S
+2489(a)S
+2565(Source)S
+2874(Code)S
+3117(Control)S
+3455(System,'')S
+10 I
+3873(Software)S
+4261(Engineering)S
+4787(Notes)S
+10 R
+5015(,)S
+2892 V
+970(vol.)S
+1180(3,)S
+1312(no.)S
+1494(5,)S
+1626(pp.)S
+1808(122-125,)S
+2223(Nov.)S
+2477(1978.)S
+2789(Proceedings)S
+3334(of)S
+3474(the)S
+3653(Software)S
+4069(Quality)S
+4425(and)S
+4625(Assurance)S
+3012 V
+970(Workshop.)S
+3168 V
+720(7.)S
+970(Brown,)S
+1297(H.B.,)S
+1541(``The)S
+1792(Clear/Caster)S
+2321(System,'')S
+10 I
+2737(Nato)S
+2962(Conference)S
+3452(on)S
+3582(Software)S
+3968(Engineering,)S
+4517(Rome)S
+10 R
+4744(,)S
+4799(1970.)S
+3324 V
+720(8.)S
+970(Habermann,)S
+1493(A.)S
+1623(Nico,)S
+10 I
+1875(A)S
+1969(Software)S
+2358(Development)S
+2918(Control)S
+3264(System,)S
+10 R
+3600(Technical)S
+4027(Report,)S
+4358(Carnegie-Mellon)S
+3444 V
+970(University,)S
+1447(Department)S
+1948(of)S
+2061(Computer)S
+2491(Science,)S
+2856(Jan.)S
+3044(1979.)S
+3600 V
+720(9.)S
+970(DEC,)S
+10 I
+1258(Code)S
+1532(Management)S
+2116(System,)S
+10 R
+2481(Digital)S
+2823(Equipment)S
+3326(Corporation,)S
+3898(1982.)S
+4217(Document)S
+4697(No. EA-)S
+3720 V
+970(23134-82)S
+3876 V
+720(10.)S
+970(Lampson,)S
+1437(Butler)S
+1757(W.)S
+1946(and)S
+2160(Schmidt,)S
+2589(Eric)S
+2825(E.,)S
+3006(``Practical)S
+3491(Use)S
+3717(of)S
+3871(a)S
+3986(Polymorphic)S
+4574(Applicative)S
+3996 V
+970(Language,'')S
+1491(in)S
+10 I
+1606(Proceedings)S
+2142(of)S
+2257(the)S
+2416(10th)S
+2630(Symposium)S
+3121(on)S
+3257(Principles)S
+3704(of)S
+3818(Programming)S
+4415(Languages)S
+10 R
+4854(,)S
+4915(pp.)S
+4116 V
+970(237-255,)S
+1358(ACM,)S
+1641(January)S
+1981(1983.)S
+4272 V
+720(11.)S
+970(Tichy,)S
+1260(Walter)S
+1563(F.,)S
+1701(``A)S
+1871(Data)S
+2091(Model)S
+2385(for)S
+2534(Programming)S
+3117(Support)S
+3467(Environments)S
+4061(and)S
+4238(its)S
+4366(Application,'')S
+4962(in)S
+4392 V
+10 I
+970(Automated)S
+1438(Tools)S
+1696(for)S
+1848(Information)S
+2361(System)S
+2673(Design)S
+2991(and)S
+3176(Development)S
+10 R
+3702(,)S
+3761(ed.)S
+3914(Hans-Jochen)S
+4463(Schneider)S
+4896(and)S
+4512 V
+970(Anthony)S
+1350(I.)S
+1438(Wasserman,)S
+1958(North-Holland)S
+2576(Publishing)S
+3035(Company,)S
+3479(Amsterdam,)S
+4000(1982.)S
+4668 V
+720(12.)S
+970(Heckel,)S
+1328(Paul,)S
+1582(``A)S
+1771(Technique)S
+2243(for)S
+2410(Isolating)S
+2811(Di)S
+2911 H
+       (f)show 10 -.5 mul h (f)show
+10 R
+2972(erences)S
+3321(Between)S
+3721(Files,'')S
+10 I
+4058(Communications)S
+4788(of)S
+4918(the)S
+4788 V
+970(ACM)S
+10 R
+1181(,)S
+1236(vol.)S
+1419(21,)S
+1574(no.)S
+1729(4,)S
+1834(pp.)S
+1989(264-268,)S
+2377(April)S
+2618(1978.)S
+4944 V
+720(13.)S
+970(Tichy,)S
+1270(Walter)S
+1583(F.,)S
+1731(``The)S
+1994(String-to-String)S
+2670(Correction)S
+3139(Problem)S
+3520(with)S
+3740(Block)S
+4021(Moves,'')S
+10 I
+4426(ACM)S
+4679(Transac-)S
+5064 V
+970(tions)S
+1195(on)S
+1325(Computer)S
+1755(Systems)S
+10 R
+2071(,)S
+2126(vol.)S
+2309(2,)S
+2414(no.)S
+2569(4,)S
+2674(pp.)S
+2829(309-321,)S
+3217(Nov.)S
+3444(1984.)S
+7950 V
+0(-)S
+7950 V
+EP
+%%Trailer
+%%DocumentFonts: Courier Times-Roman Times-Bold Times-Italic Symbol Troff
+%%Pages: 20
diff --git a/usr/src/contrib/rcs-V5.6/rcs_func.ms b/usr/src/contrib/rcs-V5.6/rcs_func.ms
new file mode 100644 (file)
index 0000000..9818086
--- /dev/null
@@ -0,0 +1,95 @@
+.SH
+Functions of RCS (Revision Control System)
+.PP
+RCS manages software libraries. It greatly increases programmer productivity
+by providing the following functions.
+.IP 1.
+RCS stores and retrieves multiple revisions of program and other text.
+Thus, one can maintain one or more releases while developing the next
+release, with a minimum of space overhead. Changes no longer destroy the
+original -- previous revisions remain accessible.
+.RS
+.IP a.
+Maintains each module as a tree of revisions.
+.IP b.
+Project libraries can
+be organized centrally, decentralized, or any way you like.
+.IP c.
+RCS works for any type of text: programs, documentation, memos, papers,
+graphics, VLSI layouts, form letters, etc.
+.RE
+.IP 2.
+RCS maintains a complete history of changes.
+Thus, one can find out what happened to a module easily
+and quickly, without having to compare source listings or
+having to track down colleagues.
+.RS
+.IP a.
+RCS performs automatic record keeping.
+.IP b.
+RCS logs all changes automatically.
+.IP c.
+RCS guarantees project continuity.
+.RE
+.IP 3.
+RCS manages multiple lines of development.
+.IP 4.
+RCS can merge multiple lines of development.
+Thus, when several parallel lines of development must be consolidated
+into one line, the merging of changes is automatic.
+.IP 5.
+RCS flags coding conflicts.
+If two or more lines of development modify the same section of code,
+RCS can alert programmers about overlapping changes.
+.IP 6.
+RCS resolves access conflicts.
+When two or more programmers wish to modify the same revision,
+RCS alerts the programmers and makes sure that one modification won't wipe
+out the other one.
+.IP 7.
+RCS provides high-level retrieval functions.
+Revisions can be retrieved according to ranges of revision numbers,
+symbolic names, dates, authors, and states.
+.IP 8.
+RCS provides release and configuration control.
+Revisions can be marked as released, stable, experimental, etc.
+Configurations of modules can be described simply and directly.
+.IP 9.
+RCS performs automatic identification of modules with name, revision
+number, creation time, author, etc.
+Thus, it is always possible to determine which revisions of which
+modules make up a given configuration.
+.IP 10.
+Provides high-level management visibility.
+Thus, it is easy to track the status of a software project.
+.RS
+.IP a.
+RCS provides a complete change history.
+.IP b.
+RCS records who did what when to which revision of which module.
+.RE
+.IP 11.
+RCS is fully compatible with existing software development tools.
+RCS is unobtrusive -- its interface to the file system is such that
+all your existing software tools can be used as before.
+.IP 12.
+RCS' basic user interface is extremely simple. The novice need to learn
+only two commands. Its more sophisticated features have been
+tuned towards advanced software development environments and the
+experienced software professional.
+.IP 13.
+RCS simplifies software distribution if customers
+maintain sources with RCS also. This technique assures proper
+identification of versions and configurations, and tracking of customer
+modifications. Customer modifications can be merged into distributed
+versions locally or by the development group.
+.IP 14.
+RCS needs little extra space for the revisions (only the differences).
+If intermediate revisions are deleted, the corresponding
+differences are compressed into the shortest possible form.
+.IP 15.
+RCS is implemented with reverse deltas. This means that
+the latest revision, which is the one that is accessed most often,
+is stored intact. All others are regenerated from the latest one
+by applying reverse deltas (backward differences). This
+results in fast access time for the revision needed most often.