[comp.sources.unix] v24i011: RCS source control system, Part11/12

rsalz@bbn.com (Rich Salz) (02/23/91)

Submitted-by: Adam Hammer <hammer@cs.purdue.edu>
Posting-number: Volume 24, Issue 11
Archive-name: rcs/part11

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then feed it
# into a shell via "sh file" or similar.  To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix@uunet.uu.net if you want that tool.
# Contents:  man/merge.1 man/rcs.1 man/rcsclean.1 man/rcsdiff.1
#   man/rcsfile.5 man/rcsmerge.1 rcs.ms.02 src/conf.heg src/ident.c
#   src/merge.sh src/rcsfreeze.sh src/rcsmap.c
# Wrapped by rsalz@litchi.bbn.com on Thu Feb 21 14:37:11 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
echo If this archive is complete, you will see the following message:
echo '          "shar: End of archive 11 (of 12)."'
if test -f 'man/merge.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'man/merge.1'\"
else
  echo shar: Extracting \"'man/merge.1'\" \(1637 characters\)
  sed "s/^X//" >'man/merge.1' <<'END_OF_FILE'
X.de Id
X.ds Rv \\$3
X.ds Dt \\$4
X..
X.Id $Id: merge.1,v 5.1 1990/08/29 07:12:59 eggert Exp $
X.TH MERGE 1 \*(Dt GNU
X.SH NAME
Xmerge \- three-way file merge
X.SH SYNOPSIS
X.B merge
X[
X.B \-L
X.I label1
X[
X.B \-L
X.I label3
X] ] [
X.B \-p
X] [
X.B \-q
X]
X.I "file1 file2 file3"
X.SH DESCRIPTION
X.B merge
Xincorporates all changes that lead from
X.I file2
Xto
X.I file3
Xinto
X.IR file1 .
XThe result goes to standard output if
X.B \-p
Xis present, into
X.I file1
Xotherwise.
X.B merge
Xis useful for combining separate changes to an original.  Suppose
X.I file2
Xis the original, and both
X.I file1
Xand
X.I file3
Xare modifications of
X.IR file2 .
XThen
X.B merge
Xcombines both changes.
X.PP
XAn overlap occurs if both
X.I file1
Xand
X.I file3
Xhave changes in a common segment of lines.
X.B merge
Xoutputs a message if overlaps occurred,
Xand includes both alternatives
Xin the result.  The alternatives are delimited as follows:
X.LP
X.RS
X.nf
X.BI <<<<<<< " file1"
X.I "lines in file1"
X.B "======="
X.I "lines in file3"
X.BI >>>>>>> " file3"
X.RE
X.fi
X.LP
XIf there are overlaps, the user should edit the result and delete one of the
Xalternatives.
XIf the
X.BI \-L "\ label1"
Xand
X.BI \-L "\ label3"
Xoptions are given, the labels are output in place of the names
X.I file1
Xand
X.I file3
Xin overlap reports.
XAny overlap message is suppressed if the
X.B \-q
Xoption is given.
X.SH DIAGNOSTICS
XExit status is 0 for no overlaps, 1 for some overlaps, 2 for trouble.
X.SH IDENTIFICATION
XAuthor: Walter F. Tichy.
X.br
XRevision Number: \*(Rv; Release Date: \*(Dt.
X.br
XCopyright \(co 1982, 1988, 1989 by Walter F. Tichy.
X.br
XCopyright \(co 1990 by Paul Eggert.
X.SH SEE ALSO
Xdiff3(1), diff(1), rcsmerge(1), co(1).
END_OF_FILE
  if test 1637 -ne `wc -c <'man/merge.1'`; then
    echo shar: \"'man/merge.1'\" unpacked with wrong size!
  fi
  # end of 'man/merge.1'
fi
if test -f 'man/rcs.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'man/rcs.1'\"
else
  echo shar: Extracting \"'man/rcs.1'\" \(7061 characters\)
  sed "s/^X//" >'man/rcs.1' <<'END_OF_FILE'
X.de Id
X.ds Rv \\$3
X.ds Dt \\$4
X..
X.Id $Id: rcs.1,v 5.3 1990/12/04 05:18:34 eggert Exp $
X.ds r \s-1RCS\s0
X.if n .ds - \%--
X.if t .ds - \(em
X.TH RCS 1 \*(Dt GNU
X.SH NAME
Xrcs \- change RCS file attributes
X.SH SYNOPSIS
X.B rcs
X.RI [ " options " ] " file " .\|.\|.
X.SH DESCRIPTION
X.B rcs
Xcreates new \*r files or changes attributes of existing ones.
XAn \*r file contains multiple revisions of text,
Xan access list, a change log,
Xdescriptive text,
Xand some control attributes.
XFor
X.B rcs
Xto work, the caller's login name must be on the access list,
Xexcept if the access list is empty, the caller is the owner of the file
Xor the superuser, or
Xthe
X.B \-i
Xoption is present.
X.PP
XFile names ending in
X.B ,v
Xdenote \*r files; all others denote working files.
XIf a working file is given,
X.B rcs
Xtries to find the corresponding \*r file first in an \*r subdirectory
Xand then in the working file's directory,
Xas explained in
X.BR co (1).
X.SH OPTIONS
X.TP
X.B \-i
XCreate and initialize a new \*r file, but do not deposit any revision.
XIf the \*r file has no path prefix, try to place it
Xfirst into the subdirectory
X.BR ./RCS ,
Xand then into the current directory.
XIf the \*r file
Xalready exists, print an error message.
X.TP
X.BI \-a "logins"
XAppend the login names appearing in the comma-separated list
X.I logins
Xto the access list of the \*r file.
X.TP
X.BI \-A "oldfile"
XAppend the access list of
X.I oldfile
Xto the access list of the \*r file.
X.TP
X.BR \-e [\f2logins\fP]
XErase the login names appearing in the comma-separated list
X.I logins
Xfrom the access list of the \*r file.
XIf
X.I logins
Xis omitted, erase the entire access list.
X.TP
X.BR \-b [\f2rev\fP]
XSet the default branch to
X.IR rev .
XIf
X.I rev
Xis omitted, the default
Xbranch is reset to the (dynamically) highest branch on the trunk.
X.TP
X.BI \-c string
Xsets the comment leader to
X.IR string .
XThe comment leader
Xis printed before every log message line generated by the keyword
X.B $\&Log$
Xduring checkout (see
X.BR co (1)).
XThis is useful for programming
Xlanguages without multi-line comments.
XAn initial
X.B ci ,
Xor an
X.B "rcs\ \-i"
Xwithout
X.BR \-c ,
Xguesses the comment leader from the suffix of the working file.
X.TP
X.BI \-k subst
XSet the default keyword substitution to
X.IR subst .
XThe effect of keyword substitution is described in
X.BR co (1).
XGiving an explicit
X.B \-k
Xoption to
X.BR co ,
X.BR rcsdiff ,
Xand
X.B rcsmerge
Xoverrides this default.
XBeware
X.BR "rcs\ \-kv",
Xbecause
X.B \-kv
Xis incompatible with
X.BR "co\ \-l".
XUse
X.B "rcs\ \-kkv"
Xto restore the normal default keyword substitution.
X.TP
X.BR \-l [\f2rev\fP]
XLock the revision with number
X.IR rev .
XIf a branch is given, lock the latest revision on that branch.
XIf
X.I rev
Xis omitted, lock the latest revision on the default branch.
XLocking prevents overlapping changes.
XA lock is removed with
X.B ci
Xor
X.B "rcs\ \-u"
X(see below).
X.TP
X.BR \-u [\f2rev\fP]
XUnlock the revision with number
X.IR rev .
XIf a branch is given, unlock the latest revision on that branch.
XIf
X.I rev
Xis omitted, remove the latest lock held by the caller.
XNormally, only the locker of a revision may unlock it.
XSomebody else unlocking a revision breaks the lock.
XThis causes a mail message to be sent to the original locker.
XThe message contains a commentary solicited from the breaker.
XThe commentary is terminated by end-of-file or by a line containing
X.BR \&. "\ by"
Xitself.
X.TP
X.B \-L
XSet locking to
X.IR strict .
XStrict locking means that the owner
Xof an \*r file is not exempt from locking for checkin.
XThis option should be used for files that are shared.
X.TP
X.B \-U
XSet locking to non-strict.  Non-strict locking means that the owner of
Xa file need not lock a revision for checkin.
XThis option should
X.I not
Xbe used for files that are shared.
XWhether default locking is strict is determined by your system administrator,
Xbut it is normally strict.
X.TP
X.B \-n\f2name\fP\f1[\fP:\f2rev\fP\f1]\fP
XAssociate the symbolic name
X.I name
Xwith the branch or
Xrevision
X.IR rev .
XPrint an error message if
X.I name
Xis already associated with
Xanother number.
XIf
X.I rev
Xis omitted, the symbolic name is deleted.
X.TP
X.B \-N\f2name\fP\f1[\fP:\f2rev\fP\f1]\fP
XAct like
X.BR \-n ,
Xexcept override any previous assignment of
X.IR name .
X.TP
X.BI \-o range
Xdeletes (\*(lqoutdates\*(rq) the revisions given by
X.IR range .
XA range consisting of a single revision number means that revision.
XA range consisting of a branch number means the latest revision on that
Xbranch.
XA range of the form
X.IB rev1 \- rev2
Xmeans
Xrevisions
X.I rev1
Xto
X.I rev2
Xon the same branch,
X.BI \- rev
Xmeans from the beginning of the branch containing
X.I rev
Xup to and including
X.IR rev ,
Xand
X.IB rev \-
Xmeans
Xfrom revision
X.I rev
Xto the end of the branch containing
X.IR rev .
XNone of the outdated revisions may have branches or locks.
X.TP
X.B \-q
XRun quietly; do not print diagnostics.
X.TP
X.B \-I
XRun interactively, even if the standard input is not a terminal.
X.TP
X.B \-s\f2state\fP\f1[\fP:\f2rev\fP\f1]\fP
XSet the state attribute of the revision
X.I rev
Xto
X.I state .
XIf
X.I rev
Xis a branch number, assume the latest revision on that branch.
XIf
X.I rev
Xis omitted, assume the latest revision on the default branch.
XAny identifier is acceptable for
X.IR state .
XA useful set of states
Xis
X.B Exp
X(for experimental),
X.B Stab
X(for stable), and
X.B Rel
X(for
Xreleased).
XBy default,
X.BR ci (1)
Xsets the state of a revision to
X.BR Exp .
X.TP
X.BR \-t [\f2file\fP]
XWrite descriptive text from the contents of the named
X.I file
Xinto the \*r file, deleting the existing text.
XThe
X.IR file
Xname may not begin with
X.BR \- .
XIf
X.I file
Xis omitted, obtain the text from standard input,
Xterminated by end-of-file or by a line containing
X.BR \&. "\ by"
Xitself.
XPrompt for the text if interaction is possible; see
X.BR \-I .
XWith
X.BR \-i ,
Xdescriptive text is obtained
Xeven if
X.B \-t
Xis not given.
X.TP
X.BI \-t\- string
XWrite descriptive text from the
X.I string
Xinto the \*r file, deleting the existing text.
X.TP
X.BI \-V n
XEmulate \*r version
X.IR n .
XSee
X.BR co (1)
Xfor details.
X.SH COMPATIBILITY
XThe
X.BI \-b rev
Xoption generates an \*r file that cannot be parsed by \*r version 3 or earlier.
X.PP
XThe
X.BI \-k subst
Xoptions (except
X.BR \-kkv )
Xgenerate an \*r file that cannot be parsed by \*r version 4 or earlier.
X.PP
XUse
X.BI "rcs \-V" n
Xto make an \*r file acceptable to \*r version
X.I n
Xby discarding information that would confuse version
X.IR n .
X.SH DIAGNOSTICS
XThe \*r file name and the revisions outdated are written to
Xthe diagnostic output.
XThe exit status is zero if and only if all operations were successful.
X.SH FILES
X.B rcs
Xaccesses files much as
X.BR ci (1)
Xdoes,
Xexcept that it does not need to access the working file or its directory.
X.SH IDENTIFICATION
XAuthor: Walter F. Tichy.
X.br
XRevision Number: \*(Rv; Release Date: \*(Dt.
X.br
XCopyright \(co 1982, 1988, 1989 by Walter F. Tichy.
X.br
XCopyright \(co 1990 by Paul Eggert.
X.SH "SEE ALSO"
Xco(1), ci(1), ident(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1),
Xrcsfile(5)
X.br
XWalter F. Tichy,
X\*r\*-A System for Version Control,
X.I "Software\*-Practice & Experience"
X.BR 15 ,
X7 (July 1985), 637-654.
END_OF_FILE
  if test 7061 -ne `wc -c <'man/rcs.1'`; then
    echo shar: \"'man/rcs.1'\" unpacked with wrong size!
  fi
  # end of 'man/rcs.1'
fi
if test -f 'man/rcsclean.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'man/rcsclean.1'\"
else
  echo shar: Extracting \"'man/rcsclean.1'\" \(2172 characters\)
  sed "s/^X//" >'man/rcsclean.1' <<'END_OF_FILE'
X.de Id
X.ds Rv \\$3
X.ds Dt \\$4
X..
X.Id $Id: rcsclean.1,v 1.4 1990/11/02 19:33:11 hammer Exp $
X.ds r \s-1RCS\s0
X.if n .ds - \%--
X.if t .ds - \(em
X.TH RCSCLEAN 1 \*(Dt GNU
X.SH NAME
Xrcsclean \- clean up working files
X.SH SYNOPSIS
X.B rcsclean
X.RI [ "rcsdiff options" ]
X.RI [ file "\ .\|.\|.\ ]"
X.SH DESCRIPTION
X.B rcsclean
Xremoves working files that were checked out and never modified.
XFor each file given, 
X.B rcsclean
Xcompares the working file and a revision in the corresponding
X\*r file. If it finds no difference, it removes the working file, and,
Xif the revision was locked, unlocks the revision.
X.PP
XIf no
X.I file
Xis given, all working files in the current directory are cleaned.
XAny other options are passed along to
X.B rcsdiff
Xfor the comparison.
X.PP
X.B rcsclean
Xis useful for
X.B clean
Xtargets in Makefiles.
XSee also
X.BR rcsdiff (1),
Xwhich prints out the differences,
Xand
X.BR ci (1),
Xwhich
Xnormally asks whether to check in a file
Xif it was not changed.
X.SH EXAMPLES
X.LP
X.RS
X.ft 3
Xrcsclean  *.c  *.h
X.ft
X.RE
X.LP
Xremoves all working files ending in
X.B .c
Xor
X.B .h
Xthat were not changed
Xsince their checkout.
X.RS
X.ft 3
Xrcsclean
X.ft
X.RE
X.LP
Xremoves all working files in the current directory
Xthat were not changed since their checkout.
X.SH DIAGNOSTICS
XThe exit status is 0 if there were no differences in any file under \*r control,
X1 if there were differences, and 2 if there were errors.
X.SH IDENTIFICATION
XAuthor: Walter F. Tichy.
X.br
XRevision Number: \*(Rv; Release Date: \*(Dt.
X.br
XCopyright \(co 1982, 1988, 1989 by Walter F. Tichy.
X.br
XCopyright \(co 1990 by Paul Eggert.
X.SH "SEE ALSO"
Xci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1),
Xrcsfile(5)
X.br
XWalter F. Tichy,
X\*r\*-A System for Version Control,
X.I "Software\*-Practice & Experience"
X.BR 15 ,
X7 (July 1985), 637-654.
X.SH BUGS
XRCS file names may not be given as arguments.
X.PP
XAny diagnostics generated by
X.B rcsdiff
Xwhen comparing files are discarded.
X.PP
XIf the latest revision is already unlocked,
Xand you have a lock on an earlier revision,
Xthe earlier revision is unlocked.
X.PP
X.B rcsclean
Xis just an optional example shell script, and should not be taken too seriously.
END_OF_FILE
  if test 2172 -ne `wc -c <'man/rcsclean.1'`; then
    echo shar: \"'man/rcsclean.1'\" unpacked with wrong size!
  fi
  # end of 'man/rcsclean.1'
fi
if test -f 'man/rcsdiff.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'man/rcsdiff.1'\"
else
  echo shar: Extracting \"'man/rcsdiff.1'\" \(2785 characters\)
  sed "s/^X//" >'man/rcsdiff.1' <<'END_OF_FILE'
X.de Id
X.ds Rv \\$3
X.ds Dt \\$4
X..
X.Id $Id: rcsdiff.1,v 5.2 1990/09/26 15:54:04 hammer Exp $
X.ds r \s-1RCS\s0
X.if n .ds - \%--
X.if t .ds - \(em
X.TH RCSDIFF 1 \*(Dt GNU
X.SH NAME
Xrcsdiff \- compare RCS revisions
X.SH SYNOPSIS
X.B rcsdiff
X[
X.BI \-k subst
X] [
X.B \-q
X] [
X.BI \-r rev1
X[
X.BI \-r rev2
X] ] [
X.BI \-V n
X] [
X.I "diff options"
X]
X.I "file .\|.\|."
X.SH DESCRIPTION
X.B rcsdiff
Xruns
X.BR diff (1)
Xto compare two revisions of each \*r file given.
XA file name ending in
X.B ,v
Xis an \*r file name, otherwise a
Xworking file name.
X.B rcsdiff
Xderives the working file name from the \*r
Xfile name and vice versa, as explained in
X.BR co (1).
XPairs consisting
Xof both an \*r and a working file name may also be specified.
X.PP
XThe option
X.B \-q
Xsuppresses diagnostic output.
XZero, one, or two revisions may be specified with
X.BR \-r .
XThe option
X.BI \-k subst
Xaffects keyword substitution when extracting
Xrevisions, as described in
X.BR co (1);
Xfor example,
X.B "\-kk\ \-r1.1\ \-r1.2"
Xignores differences in keyword values when comparing revisions
X.B 1.1
Xand
X.BR 1.2 .
XTo avoid excess output from locker name substitution,
X.B \-kkvl
Xis assumed if (1) at most one revision option is given,
X(2) no
X.B \-k
Xoption is given, (3)
X.B \-kkv
Xis the default keyword substitution, and
X(4) the working file's mode would be produced by
X.BR "co\ \-l".
XSee
X.BR co (1)
Xfor details
Xabout
X.BR \-V .
XOtherwise, all options of
X.BR diff (1)
Xthat apply to regular files are accepted, with the same meaning as for
X.BR diff .
X.PP
XIf both
X.I rev1
Xand
X.I rev2
Xare omitted,
X.B rcsdiff
Xcompares the latest revision on the
Xdefault branch (by default the trunk)
Xwith the contents of the corresponding working file.  This is useful
Xfor determining what you changed since the last checkin.
X.PP
XIf
X.I rev1
Xis given, but
X.I rev2
Xis omitted,
X.B rcsdiff
Xcompares revision
X.I rev1
Xof the \*r file with
Xthe contents of the corresponding working file.
X.PP
XIf both
X.I rev1
Xand
X.I rev2
Xare given,
X.B rcsdiff
Xcompares revisions
X.I rev1
Xand
X.I rev2
Xof the \*r file.
X.PP
XBoth
X.I rev1
Xand
X.I rev2
Xmay be given numerically or symbolically.
X.SH EXAMPLE
XThe command
X.LP
X.B "        rcsdiff  f.c"
X.LP
Xcompares the latest revision on the default branch of the \*r file
X.B RCS/f.c,v
Xto the contents of the working file
X.BR f.c .
X.SH DIAGNOSTICS
XExit status is 0 for no differences during any comparison,
X1 for some differences, 2 for trouble.
X.SH IDENTIFICATION
XAuthor: Walter F. Tichy.
X.br
XRevision Number: \*(Rv; Release Date: \*(Dt.
X.br
XCopyright \(co 1982, 1988, 1989 by Walter F. Tichy.
X.br
XCopyright \(co 1990 by Paul Eggert.
X.SH "SEE ALSO"
Xci(1), co(1), diff(1), ident(1), rcs(1), rcsintro(1), rcsmerge(1), rlog(1)
X.br
XWalter F. Tichy,
X\*r\*-A System for Version Control,
X.I "Software\*-Practice & Experience"
X.BR 15 ,
X7 (July 1985), 637-654.
END_OF_FILE
  if test 2785 -ne `wc -c <'man/rcsdiff.1'`; then
    echo shar: \"'man/rcsdiff.1'\" unpacked with wrong size!
  fi
  # end of 'man/rcsdiff.1'
fi
if test -f 'man/rcsfile.5' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'man/rcsfile.5'\"
else
  echo shar: Extracting \"'man/rcsfile.5'\" \(6200 characters\)
  sed "s/^X//" >'man/rcsfile.5' <<'END_OF_FILE'
X.de Id
X.ds Rv \\$3
X.ds Dt \\$4
X..
X.Id $Id: rcsfile.5,v 5.0 1990/08/22 09:09:36 eggert Exp $
X.ds r \s-1RCS\s0
X.if n .ds - \%--
X.if t .ds - \(em
X.TH RCSFILE 5 \*(Dt GNU
X.SH NAME
Xrcsfile \- format of RCS file
X.SH DESCRIPTION
XAn \*r file's
Xcontents are described by the grammar
Xbelow.  The text is free format: space, backspace, tab, newline, vertical
Xtab, form feed, and carriage return (collectively,
X.IR "white space")
Xhave no significance except in strings.
XStrings are enclosed by
X.BR @ .
XIf a string contains a
X.BR @ ,
Xit must be doubled;
Xotherwise, strings may contain arbitrary binary data.
X.PP
XThe meta syntax uses the following conventions: `|' (bar) separates
Xalternatives; `{' and `}' enclose optional phrases; `{' and `}*' enclose
Xphrases that may be repeated zero or more times;
X`{' and '}+' enclose phrases that must appear at least once and may be
Xrepeated;
XTerminal symbols are in
X.BR boldface ;
Xnonterminal symbols are in
X.IR italics .
X.LP
X.nr x \w'\f3branches\fP'
X.nr y \w'{ \f3comment\fP'
X.if \nx<\ny .nr x \ny
X.nr y \w'\f3{ branch\fP'
X.if \nx<\ny .nr x \ny
X.ta \w'\f2deltatext\fP  'u +\w'::=  'u +\nxu+\w'  'u
X.fc ~
X.nf
X\f2rcstext\fP	::=	\f2admin\fP {\f2delta\fP}* \f2desc\fP {\f2deltatext\fP}*
X.LP
X\f2admin\fP	::=	\f3head\fP	{\f2num\fP}\f3;\fP
X		{ \f3branch\fP	{\f2num\fP}\f3;\fP }
X		\f3access\fP	{\f2id\fP}*\f3;\fP
X		\f3symbols\fP	{\f2id\fP \f3:\fP \f2num\fP}*\f3;\fP
X		\f3locks\fP	{\f2id\fP \f3:\fP \f2num\fP}*\f3;\fP  {\f3strict  ;\fP}
X		{ \f3comment\fP	{\f2string\fP}\f3;\fP }
X		{ \f3expand\fP	{\f2string\fP}\f3;\fP }
X		{ \f2newphrase\fP }*
X.LP
X\f2delta\fP	::=	\f2num\fP
X		\f3date\fP	\f2num\fP\f3;\fP
X		\f3author\fP	\f2id\fP\f3;\fP
X		\f3state\fP	{\f2id\fP}\f3;\fP
X		\f3branches\fP	{\f2num\fP}*\f3;\fP
X		\f3next\fP	{\f2num\fP}\f3;\fP
X		{ \f2newphrase\fP }*
X.LP
X\f2desc\fP	::=	\f3desc\fP	\f2string\fP
X.LP
X\f2deltatext\fP	::=	\f2num\fP
X		\f3log\fP	\f2string\fP
X		{ \f2newphrase\fP }*
X		\f3text\fP	\f2string\fP
X.LP
X\f2num\fP	::=	{\f2digit\fP{\f3.\fP}}+
X.LP
X\f2digit\fP	::=	\f30\fP | \f31\fP | .\|.\|. | \f39\fP
X.LP
X\f2id\fP	::=	\f2letter\fP{\f2idchar\fP}*
X.LP
X\f2letter\fP	::=	any letter
X.LP
X\f2idchar\fP	::=	any visible graphic character except \f2special\fP
X.LP
X\f2special\fP	::=	\f3$\fP | \f3,\fP | \f3.\fP | \f3:\fP | \f3;\fP | \f3@\fP
X.LP
X\f2string\fP	::=	\f3@\fP{any character, with \f3@\fP doubled}*\f3@\fP
X.LP
X\f2newphrase\fP	::=	\f2id\fP \f2word\fP* \f3;\fP
X.LP
X\f2word\fP	::=	\f2id\fP | \f2num\fP | \f2string\fP | \f3:\fP
X.fi
X.PP
XIdentifiers are case sensitive.  Keywords are in lower case only.
XThe sets of keywords and identifiers may overlap.
XIn most environments RCS uses the ISO 8859/1 encoding:
Xletters are octal codes 101\-132, 141\-172, 300\-326, 330\-366 and 370-377,
Xvisible graphic characters are codes 041\-176 and 240\-377,
Xand white space characters are codes 010\-015 and 040.
X.PP
XThe
X.I newphrase
Xproductions in the grammar are reserved for future extensions
Xto the format of \*r files.
XNo
X.I newphrase
Xwill begin with any keyword already in use.
X.PP
XThe
X.I delta
Xnodes form a tree.  All nodes whose numbers
Xconsist of a single pair
X(e.g., 2.3, 2.1, 1.3, etc.)
Xare on the trunk, and are linked through the
X.B next
Xfield in order of decreasing numbers.
XThe
X.B head
Xfield in the
X.I admin
Xnode points to the head of that sequence (i.e., contains
Xthe highest pair).
XThe
X.B branch
Xnode in the admin node indicates the default
Xbranch (or revision) for most \*r operations.
XIf empty, the default
Xbranch is the highest branch on the trunk.
X.PP
XAll
X.I delta
Xnodes whose numbers consist of
X.RI 2 n
Xfields
X.RI ( n \(\fP=2)
X(e.g., 3.1.1.1, 2.1.2.2, etc.)
Xare linked as follows.
XAll nodes whose first
X.RI 2 n \-1
Xnumber fields are identical are linked through the
X.B next
Xfield in order of increasing numbers.
XFor each such sequence,
Xthe
X.I delta
Xnode whose number is identical to the first
X.RI 2 n \-2
Xnumber fields of the deltas on that sequence is called the branchpoint.
XThe
X.B branches
Xfield of a node contains a list of the
Xnumbers of the first nodes of all sequences for which it is a branchpoint.
XThis list is ordered in increasing numbers.
X.LP
X.nf
X.vs 12
X.ne 38
XExample:
X.if t .in +0.5i
X.cs 1 20
X.eo
X
X                           Head
X                             |
X                             |
X                             v                        / \
X                         ---------                   /   \
X   / \          / \      |       |      / \         /     \
X  /   \        /   \     |  2.1  |     /   \       /       \
X /     \      /     \    |       |    /     \     /         \
X/1.2.1.3\    /1.3.1.1\   |       |   /1.2.2.2\   /1.2.2.1.1.1\
X---------    ---------   ---------   ---------   -------------
X    ^            ^           |           ^             ^
X    |            |           |           |             |
X    |            |           v           |             |
X   / \           |       ---------      / \            |
X  /   \          |       \  1.3  /     /   \           |
X /     \         ---------\     /     /     \-----------
X/1.2.1.1\                  \   /     /1.2.2.1\
X---------                   \ /      ---------
X    ^                        |           ^
X    |                        |           |
X    |                        v           |
X    |                    ---------       |
X    |                    \  1.2  /       |
X    ----------------------\     /---------
X                           \   /
X                            \ /
X                             |
X                             |
X                             v
X                         ---------
X                         \  1.1  /
X                          \     /
X                           \   /
X                            \ /
X
X.ec
X.if t .in
X.cs 1
X.ce
XFig. 1: A revision tree
X.vs
X.fi
X.PP
X.SH IDENTIFICATION
X.de VL
X\\$2
X..
XAuthor: Walter F. Tichy,
XPurdue University, West Lafayette, IN, 47907.
X.br
XRevision Number: \*(Rv; Release Date: \*(Dt.
X.br
XCopyright \(co 1982, 1988, 1989 by Walter F. Tichy.
X.br
XCopyright \(co 1990 by Paul Eggert.
X.SH SEE ALSO
Xci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsmerge(1), rlog(1),
X.br
XWalter F. Tichy,
X\*r\*-A System for Version Control,
X.I "Software\*-Practice & Experience"
X.BR 15 ,
X7 (July 1985), 637-654.
END_OF_FILE
  if test 6200 -ne `wc -c <'man/rcsfile.5'`; then
    echo shar: \"'man/rcsfile.5'\" unpacked with wrong size!
  fi
  # end of 'man/rcsfile.5'
fi
if test -f 'man/rcsmerge.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'man/rcsmerge.1'\"
else
  echo shar: Extracting \"'man/rcsmerge.1'\" \(3141 characters\)
  sed "s/^X//" >'man/rcsmerge.1' <<'END_OF_FILE'
X.de Id
X.ds Rv \\$3
X.ds Dt \\$4
X..
X.Id $Id: rcsmerge.1,v 5.1 1990/08/29 07:13:01 eggert Exp $
X.ds r \s-1RCS\s0
X.if n .ds - \%--
X.if t .ds - \(em
X.TH RCSMERGE 1 \*(Dt GNU
X.SH NAME
Xrcsmerge \- merge RCS revisions
X.SH SYNOPSIS
X.B rcsmerge
X.RI [ options ] " file"
X.SH DESCRIPTION
X.B rcsmerge
Xincorporates the changes between two revisions
Xof an \*r file into the corresponding working file.
X.PP
XA file name ending in
X.B ,v
Xis an \*r file name, otherwise a
Xworking file name.
X.B rcsmerge
Xderives the working file name from the \*r
Xfile name and vice versa, as explained in
X.BR co (1).
XA pair consisting
Xof both an \*r and a working file name may also be specified.
X.PP
XAt least one revision must be specified with one of the options
Xdescribed below, usually
X.BR \-r .
XAt most two revisions may be specified.
XIf only one revision is specified, the latest
Xis omitted, the latest
Xrevision on the default branch (normally the highest branch on the trunk)
Xis assumed for the second revision.
XRevisions may be specified numerically or symbolically.
X.PP
X.B rcsmerge
Xprints a warning if there are overlaps, and delimits
Xthe overlapping regions as explained in
X.BR "co\ \-j".
XThe command is useful for incorporating changes into a checked-out revision.
X.SH OPTIONS
X.TP
X.BI \-k subst
XUse
X.I subst
Xstyle keyword substitution.
XSee
X.BR co (1)
Xfor details.
XFor example,
X.B "\-kk\ \-r1.1\ \-r1.2"
Xignores differences in keyword values when merging the changes from
X.B 1.1
Xto
X.BR 1.2 .
X.TP
X.BR \-p [\f2rev\fP]
XSend the result to standard output instead of overwriting the working file.
X.TP
X.BR \-q [\f2rev\fP]
XRun quietly; do not print diagnostics.
X.TP
X.BR \-r [\f2rev\fP]
XMerge with respect to revision
X.IR rev .
X.TP
X.BI \-V n
XEmulate \*r version
X.IR n .
XSee
X.BR co (1)
Xfor details.
X.SH EXAMPLES
XSuppose you have released revision 2.8 of
X.BR f.c .
XAssume
Xfurthermore that after you complete an unreleased revision 3.4, you receive
Xupdates to release 2.8 from someone else.
XTo combine the updates to 2.8 and your changes between 2.8 and 3.4,
Xput the updates to 2.8 into file f.c and execute
X.LP
X.B "    rcsmerge  \-p  \-r2.8  \-r3.4  f.c  >f.merged.c"
X.PP
XThen examine
X.BR f.merged.c .
XAlternatively, if you want to save the updates to 2.8 in the \*r file,
Xcheck them in as revision 2.8.1.1 and execute
X.BR "co \-j":
X.LP
X.B "    ci  \-r2.8.1.1  f.c"
X.br
X.B "    co  \-r3.4  \-j2.8:2.8.1.1  f.c"
X.PP
XAs another example, the following command undoes the changes
Xbetween revision 2.4 and 2.8 in your currently checked out revision
Xin
X.BR f.c .
X.LP
X.B "    rcsmerge  \-r2.8  \-r2.4  f.c"
X.PP
XNote the order of the arguments, and that
X.B f.c
Xwill be
Xoverwritten.
X.SH DIAGNOSTICS
XExit status is 0 for no overlaps, 1 for some overlaps, 2 for trouble.
X.SH IDENTIFICATION
XAuthor: Walter F. Tichy.
X.br
XRevision Number: \*(Rv; Release Date: \*(Dt.
X.br
XCopyright \(co 1982, 1988, 1989 by Walter F. Tichy.
X.br
XCopyright \(co 1990 by Paul Eggert.
X.SH "SEE ALSO"
Xci(1), co(1), ident(1), merge(1), rcs(1), rcsdiff(1), rcsintro(1), rlog(1),
Xrcsfile(5)
X.br
XWalter F. Tichy,
X\*r\*-A System for Version Control,
X.I "Software\*-Practice & Experience"
X.BR 15 ,
X7 (July 1985), 637-654.
END_OF_FILE
  if test 3141 -ne `wc -c <'man/rcsmerge.1'`; then
    echo shar: \"'man/rcsmerge.1'\" unpacked with wrong size!
  fi
  # end of 'man/rcsmerge.1'
fi
if test -f 'rcs.ms.02' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'rcs.ms.02'\"
else
  echo shar: Extracting \"'rcs.ms.02'\" \(7103 characters\)
  sed "s/^X//" >'rcs.ms.02' <<'END_OF_FILE'
Xif that option is missing, it derives the number from the
Xlock held by the user; if there is no lock and locking is not strict,
X\fIci\fR increments the number of the latest revision on the trunk.
XA side branch can only be started by explicitly specifying its
Xnumber with the \fI\-r\fR option during check-in.
X.sp 1
X\fICi\fR also determines
Xwhether the revision to be checked in is different from the
Xprevious one, and asks whether to proceed if not.
XThis facility simplifies check-in operations for large systems,
Xbecause one need not remember which files were changed.
X.sp 1
XThe option \fI\-k\fR searches the checked in file for identification
Xmarkers containing
Xthe attributes
Xrevision number, check-in date, author and state, and assigns these
Xto the new revision rather than computing them.  This option is
Xuseful for software distribution: Recipients of distributed software
Xusing RCS should check in updates with the \fI\-k\fR option.
XThis convention guarantees that revision numbers, check-in dates,
Xetc., are the same at all sites.
X.IP "\fIco\fP \fB\- check out revisions\fP"
X.sp 0
X\fICo\fR retrieves revisions according to revision number,
Xdate, author and state attributes.  It either places the revision
Xinto the working file, or prints it on the standard output.
X\fICo\fR always expands the identification markers.
X.IP "\fIident\fP \fB\- extract identification markers\fP"
X.sp 0
X\fIIdent\fR extracts the identification markers expanded by \fIco\fR
Xfrom any file and prints them.
X.IP "\fIrcs\fP \fB\- change RCS file attributes\fP"
X.sp 0
X\fIRcs\fR is an administrative operation that changes access lists,
Xlocks, unlocks, breaks locks, toggles the strict-locking feature,
Xsets state attributes and symbolic revision numbers, changes the
Xdescription, and deletes revisions.  A revision can
Xonly be deleted if it is not the fork of a side branch.
X.IP "\fIrcsclean\fP \fB\- clean working directory\fP"
X.sp 0
X.ne 10
X\fIRcsclean\fR removes working files that were checked out but never changed.*
X.FS *
XThe \fIrcsclean\fP and \fIrcsfreeze\fP commands
Xare optional and are not always installed.
X.FE
X.IP "\fIrcsdiff\fP \fB\- compare revisions\fP"
X.sp 0
X\fIRcsdiff\fR compares two revisions and prints their
Xdifference, using the UNIX tool \fIdiff\fR.
XOne of the revisions compared may be checked out.
XThis command is useful for finding out about changes.
X.IP "\fIrcsfreeze\fP \fB\- freeze a configuration\fP"
X.sp 0
X\fIRcsfreeze\fR assigns the same symbolic revision number
Xto a given revision in all RCS files.
XThis command is useful for accurately recording a configuration.*
X.IP "\fIrcsmerge\fP \fB\- merge revisions\fP"
X.sp 0
X\fIRcsmerge\fR merges two revisions, \fIrev1\fR and \fIrev2\fR,
Xwith respect to a common ancestor.
XA 3-way file comparison determines the segments of lines that
Xare (a) the same in all three revisions, or (b) the same in 2 revisions,
Xor (c) different in all three.  For all segments of type (b) where
X\fIrev1\fR is the differing revision,
Xthe segment in \fIrev1\fR replaces the corresponding segment of \fIrev2\fR.
XType (c) indicates an overlapping change, is flagged as an error, and requires user
Xintervention to select the correct alternative.
X.IP "\fIrlog\fP \fB\- read log messages\fP"
X.sp 0
X\fIRlog\fR prints the log messages and other information in an RCS file.
X.bp
X.LP
X.nr VS 12p
X.vs 12p
X.]<
X.ds [F 1
X.]-
X.ds [K FELD02
X.ds [K MakeArticle
X.ds [A Feldman, Stuart I.
X.ds [D March 1979
X.ds [T Make\*-A Program for Maintaining Computer Programs
X.ds [J Software\*-Practice & Experience
X.ds [V 9
X.ds [N 3
X.ds [P 255-265
X.nr [P 1
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 1 journal-article
X.ds [F 2
X.]-
X.ds [K HUNT01
X.ds [T An Algorithm for Differential File Comparison
X.ds [A Hunt, James W.
X.as [A " and McIlroy, M. D.
X.ds [I Computing Science Technical Report, Bell Laboratories
X.ds [R 41
X.ds [D June 1976
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 4 tech-report
X.ds [F 3
X.]-
X.ds [K SCCS
X.ds [A Rochkind, Marc J.
X.ds [D Dec. 1975
X.ds [T The Source Code Control System
X.ds [J IEEE Transactions on Software Engineering
X.ds [V SE-1
X.ds [N 4
X.ds [P 364-370
X.nr [P 1
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 1 journal-article
X.ds [F 4
X.]-
X.ds [K TICH08
X.ds [T Design, Implementation, and Evaluation of a Revision Control System
X.ds [A Tichy, Walter F.
X.ds [B Proceedings of the 6th International Conference on Software Engineering
X.ds [I ACM, IEEE, IPS, NBS
X.ds [D September 1982
X.ds [P 58-67
X.nr [P 1
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 3 article-in-book
X.ds [F 5
X.]-
X.ds [K LEBL01
X.ds [A Leblang, David B.
X.as [A " and Chase, Robert P.
X.ds [T Computer-Aided Software Engineering in a Distributed Workstation Environment
X.ds [O Proceedings of the ACM SIGSOFT/SIGPLAN Software Engineering Symposium
X.as [O " on Practical Software Development Environments.
X.ds [J SIGPLAN Notices
X.ds [V 19
X.ds [N 5
X.ds [D May 1984
X.ds [P 104-112
X.nr [P 1
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 1 journal-article
X.ds [F 1
X.ds [F 3
X.ds [F 6
X.]-
X.ds [K SCCSEval
X.ds [A Glasser, Alan L.
X.ds [D Nov. 1978
X.ds [T The Evolution of a Source Code Control System
X.ds [J Software Engineering Notes
X.ds [V 3
X.ds [N 5
X.ds [P 122-125
X.nr [P 1
X.ds [O Proceedings of the Software Quality and Assurance Workshop.
X.nr [T 0
X.nr [A 1
X.nr [O 1
X.][ 1 journal-article
X.ds [F 5
X.ds [F 7
X.]-
X.ds [K IBMClearCaster
X.ds [A Brown, H.B.
X.ds [D 1970
X.ds [T The Clear/Caster System
X.ds [J Nato Conference on Software Engineering, Rome
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 1 journal-article
X.ds [F 3
X.ds [F 8
X.]-
X.ds [K HabermannSDC
X.ds [A Habermann, A. Nico
X.ds [D Jan. 1979
X.ds [T A Software Development Control System
X.ds [I Technical Report, Carnegie-Mellon University, Department of Computer Science
X.nr [T 0
X.nr [A 0
X.nr [O 0
X.][ 2 book
X.ds [F 9
X.]-
X.ds [K CMS
X.ds [A DEC
X.ds [T Code Management System
X.ds [I Digital Equipment Corporation
X.ds [O Document No.\ EA-23134-82
X.ds [D 1982
X.nr [T 0
X.nr [A 0
X.nr [O 0
X.][ 2 book
X.ds [F 10
X.]-
X.ds [K LAMP01
X.ds [A Lampson, Butler W.
X.as [A " and Schmidt, Eric E.
X.ds [T Practical Use of a Polymorphic Applicative Language
X.ds [B Proceedings of the 10th Symposium on Principles of Programming Languages
X.ds [I ACM
X.ds [P 237-255
X.nr [P 1
X.ds [D January 1983
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 3 article-in-book
X.ds [F 5
X.ds [F 11
X.]-
X.ds [K TICH07
X.ds [T A Data Model for Programming Support Environments and its Application
X.ds [A Tichy, Walter F.
X.ds [B Automated Tools for Information System Design and Development
X.ds [E Hans-Jochen Schneider and Anthony I. Wasserman
X.ds [C Amsterdam
X.ds [I North-Holland Publishing Company
X.ds [D 1982
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 3 article-in-book
X.ds [F 4
X.ds [F 2
X.ds [F 12
X.]-
X.ds [K HECK01
X.ds [T A Technique for Isolating Differences Between Files
X.ds [A Heckel, Paul
X.ds [J Communications of the ACM
X.ds [D April 1978
X.ds [V 21
X.ds [N 4
X.ds [P 264-268
X.nr [P 1
X.nr [T 0
X.nr [A 0
X.nr [O 0
X.][ 1 journal-article
X.ds [F 13
X.]-
X.ds [K TICH11
X.ds [T The String-to-String Correction Problem with Block Moves
X.ds [A Tichy, Walter F.
X.ds [D Nov. 1984
X.ds [J ACM Transactions on Computer Systems
X.ds [V 2
X.ds [N 4
X.ds [P 309-321
X.nr [P 1
X.nr [T 0
X.nr [A 1
X.nr [O 0
X.][ 1 journal-article
X.]>
END_OF_FILE
  if test 7103 -ne `wc -c <'rcs.ms.02'`; then
    echo shar: \"'rcs.ms.02'\" unpacked with wrong size!
  fi
  # end of 'rcs.ms.02'
fi
if test -f 'src/conf.heg' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/conf.heg'\"
else
  echo shar: Extracting \"'src/conf.heg'\" \(4342 characters\)
  sed "s/^X//" >'src/conf.heg' <<'END_OF_FILE'
X/* example RCS compile-time configuration */
X
X	/* $Id: conf.heg,v 1.1 1990/11/01 05:03:27 eggert Exp $ */
X
X/*
X * This is an example RCS compile-time configuration.
X * If you can't get conf.sh to work as described in the Makefile,
X * copy this file to conf.h and edit conf.h by hand.
X */
X
X#define exitmain(n) return n /* how to exit from main() */
X#if !MAKEDEPEND
X#	include <stdio.h>
X#	include <sys/types.h>
X#	include <sys/stat.h>
X#	include <fcntl.h>
X#	include <limits.h>
X#	include <stdlib.h>
X#	include <string.h>
X#	include <unistd.h>
X	/* #include <vfork.h> does not work.  */
X#endif /* !MAKEDEPEND */
X#define has_sys_dir_h 0 /* Does #include <sys/dir.h> work?  */
X#define has_sys_param_h 0 /* Does #include <sys/param.h> work?  */
X#define has_sys_wait_h 1 /* Does #include <sys/wait.h> work?  */
X/* #define const */ /* The 'const' keyword works.  */
X/* #define volatile */ /* The 'volatile' keyword works.  */
X/* typedef int gid_t; */ /* Standard headers define gid_t.  */
X/* typedef int mode_t; */ /* Standard headers define mode_t.  */
X/* typedef int pid_t; */ /* Standard headers define pid_t.  */
X/* typedef int sig_atomic_t; */ /* Standard headers define sig_atomic_t.  */
X/* typedef int size_t; */ /* Standard headers define size_t.  */
X/* typedef long time_t; */ /* Standard headers define time_t.  */
X/* typedef int uid_t; */ /* Standard headers define uid_t.  */
X#define has_prototypes 1 /* Do function prototypes work?  */
X#if has_prototypes
X#	define P(params) params
X#	if !MAKEDEPEND
X#		include <stdarg.h>
X#	endif
X#	define vararg_start(ap,p) va_start(ap,p)
X#else
X#	define P(params) ()
X#	if !MAKEDEPEND
X#		include <varargs.h>
X#	endif
X#	define vararg_start(ap,p) va_start(ap)
X#endif
X#define has_getuid 1 /* Does getuid() work?  */
X#define declare_getpwuid struct passwd *getpwuid P((uid_t));
X#define has_rename 1 /* Does rename() work?  */
X#define bad_rename 0 /* Does rename(A,B) fail if B exists?  */
X#define VOID (void) /* 'VOID e;' discards the value of an expression 'e'.  */
X#define signal_type void /* type returned by signal handlers */
X#define sig_zaps_handler 0 /* Must a signal handler reinvoke signal()?  */
X#define has_seteuid 1 /* Does seteuid() obey Posix 1003.1-1990?  */
X#define has_sigaction 1 /* Does struct sigaction work?  */
X#define has_sigblock 0 /* Does sigblock() work?  */
X#define has_sys_siglist 0 /* Does sys_siglist[] work?  */
X#define exit_type void /* type returned by exit() */
X#define underscore_exit_type void /* type returned by _exit() */
Xtypedef size_t fread_type; /* type returned by fread() and fwrite() */
Xtypedef void *malloc_type; /* type returned by malloc() */
X#define free_type void /* type returned by free() */
Xtypedef size_t strlen_type; /* type returned by strlen() */
X#define has_getcwd 1 /* Does getcwd() work?  */
X/* #define has_getwd ? */ /* Does getwd() work?  */
X#define has_vfork 0 /* Does vfork() work?  */
X#define has_vfprintf 1 /* Does vfprintf() work?  */
X#define CO "/usr/local/bin/co" /* name of 'co' program */
X#define COMPAT2 0 /* Are version 2 files supported?  */
X#define DATEFORM "%.2d.%.2d.%.2d.%.2d.%.2d.%.2d" /* e.g. 01.01.01.01.01.01 */
X#define DIFF "/bin/diff" /* name of 'diff' program */
X#define DIFF_FLAGS , "-n" /* Make diff output suitable for RCS.  */
X#define DIFF_L 0 /* Does diff -L work? */
X#define EXECRCS execv /* variant of execv() to use on subprograms */
X#define MERGE "/usr/local/bin/merge" /* name of 'merge' program */
X#define RCSDIR "RCS/" /* subdirectory for RCS files */
X#define SLASH '/' /* path name separator */
X#define TMPDIR "/tmp/" /* default directory for temporary files */
X#define DIFF_PATH_HARDWIRED 1 /* Is DIFF absolute, not relative?  */
X#define ROOTPATH(p) ((p)[0]==SLASH)
X#define RCSSEP ',' /* separator for RCSSUF */
X#define SENDMAIL "/bin/mail" /* how to send mail */
X#if 1 /* These agree with <stdio.h>.  */
X	int fprintf P((FILE*,const char*,...));
X	int printf P((const char*,...));
X#	if has_vfprintf
X		int vfprintf P((FILE*,const char*,...));
X#	else
X		void _doprnt P((const char*,...));
X#	endif
X#endif
Xchar *sprintf P((char*,const char*,...));
Xint chmod P((const char*,mode_t));
Xint fcntl P((int,int,...));
Xint open P((const char*,int,...));
Xmode_t umask P((mode_t));
Xpid_t wait P((int*));
X#ifndef O_CREAT
X	int creat P((const char*,mode_t));
X#endif
X#if has_seteuid
X	int setegid P((gid_t));
X	int seteuid P((uid_t));
X#endif
END_OF_FILE
  if test 4342 -ne `wc -c <'src/conf.heg'`; then
    echo shar: \"'src/conf.heg'\" unpacked with wrong size!
  fi
  # end of 'src/conf.heg'
fi
if test -f 'src/ident.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/ident.c'\"
else
  echo shar: Extracting \"'src/ident.c'\" \(4900 characters\)
  sed "s/^X//" >'src/ident.c' <<'END_OF_FILE'
X/* Copyright (C) 1982, 1988, 1989 Walter Tichy
X   Copyright 1990 by Paul Eggert
X   Distributed under license by the Free Software Foundation, Inc.
X
XThis file is part of RCS.
X
XRCS is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation; either version 1, or (at your option)
Xany later version.
X
XRCS is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
XGNU General Public License for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with RCS; see the file COPYING.  If not, write to
Xthe Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
X
XReport problems and direct all questions to:
X
X    rcs-bugs@cs.purdue.edu
X
X*/
X
X/*
X *                     RCS identification operation
X */
X
X/* $Log: ident.c,v $
X * Revision 5.0  1990/08/22  08:12:37  eggert
X * Don't limit output to known keywords.
X * Remove arbitrary limits and lint.  Ansify and Posixate.
X *
X * Revision 4.5  89/05/01  15:11:54  narten
X * changed copyright header to reflect current distribution rules
X * 
X * Revision 4.4  87/10/23  17:09:57  narten
X * added exit(0) so exit return code would be non random
X * 
X * Revision 4.3  87/10/18  10:23:55  narten
X * Updating version numbers. Changes relative to 1.1 are actually relative
X * to 4.1
X * 
X * Revision 1.3  87/07/09  09:20:52  trinkle
X * Added check to make sure there is at least one arg before comparing argv[1]
X * with "-q".  This necessary on machines that don't allow dereferncing null
X * pointers (i.e. Suns).
X * 
X * Revision 1.2  87/03/27  14:21:47  jenkins
X * Port to suns
X * 
X * Revision 4.1  83/05/10  16:31:02  wft
X * Added option -q and input from reading stdin.
X * Marker matching is now done with trymatch() (independent of keywords).
X * 
X * Revision 3.4  83/02/18  17:37:49  wft
X * removed printing of new line after last file.
X *
X * Revision 3.3  82/12/04  12:48:55  wft
X * Added LOCKER.
X *
X * Revision 3.2  82/11/28  18:24:17  wft
X * removed Suffix; added ungetc to avoid skipping over trailing KDELIM.
X *
X * Revision 3.1  82/10/13  15:58:51  wft
X * fixed type of variables receiving from getc() (char-->int).
X*/
X
X#include  "rcsbase.h"
X
Xstatic int match P((FILE*));
Xstatic int scanfile P((FILE*));
X
XmainProg(identId, "ident", "$Id: ident.c,v 5.0 1990/08/22 08:12:37 eggert Exp $")
X/*  Ident searches the named files for all occurrences
X *  of the pattern $keyword:...$, where the keywords are
X *  Author, Date, Header, Id, Log, RCSfile, Revision, Source, and State.
X */
X
X{
X   FILE *fp;
X   int quiet;
X   int status = EXIT_SUCCESS;
X
X   if ((quiet  =  argc > 1 && strcmp("-q",argv[1])==0)) {
X        argc--; argv++;
X   }
X
X   if (argc<2) {
X	 if ((scanfile(stdin) == 0) && !quiet)
X	    VOID fprintf(stderr, "%s warning: no id keywords in input\n", cmdid);
X	exitmain(EXIT_FAILURE);
X   }
X
X   while ( --argc > 0 ) {
X      if ( (fp = fopen(*++argv, "r") ) == NULL ) {
X	 VOID fprintf(stderr,  "%s error: can't open %s\n", cmdid, *argv);
X	 status = EXIT_FAILURE;
X         continue;
X      } else {
X         VOID printf( "%s:\n", *argv);   /*  print file name  */
X	 if ((scanfile(fp) == 0) && !quiet)
X	    VOID fprintf(stderr, "%s warning: no id keywords in %s\n", cmdid, *argv);
X	 if (argc>1) VOID putchar('\n');
X	 VOID fclose(fp);
X      }
X   }
X   exitmain(status);
X}
X
X#if lint
X#	define exiterr identExit
X#endif
X	exiting void
Xexiterr()
X{
X	_exit(EXIT_FAILURE);
X}
X
X
X	static int
Xscanfile(file)
X	register FILE *file;
X/* Function: scan an open file with descriptor file for keywords.
X * Returns nonzero if a match is found.
X */
X{
X   register int matched;
X   register int c;
X
X
X   matched = false;
X   c = 0;
X   while (c != EOF) {
X      if (c == KDELIM) {
X	 if ((c = match(file)))
X	    continue;
X	 matched = true;
X      }
X      c = getc(file);
X   }
X   return matched;
X}
X
X
X
X	static int
Xmatch(fp)   /* group substring between two KDELIM's; then do pattern match */
X   register FILE *fp;
X{
X   char line[BUFSIZ];
X   register int c;
X   register char * tp;
X
X   tp = line;
X   while ((c = getc(fp)) != VDELIM)
X      switch (ctab[c]) {
X	 case LETTER: case Letter:
X	    *tp++ = c;
X	    if (tp < line+sizeof(line)-4)
X	       break;
X	    /* fall into */
X	 default:
X	    return c ? c : '\n'/* anything but 0 or KDELIM or EOF */;
X      }
X   *tp++ = c;
X   if ((c = getc(fp)) != ' ')
X      return c ? c : '\n';
X   *tp++ = c;
X   while( (c = getc(fp)) != KDELIM ) {
X      switch (ctab[c]) {
X	 default:
X	    *tp++ = c;
X	    if (tp < line+sizeof(line)-2)
X	       break;
X	    /* fall into */
X	 case EOFILE: case NEWLN: case UNKN:
X	    return c ? c : '\n';
X      }
X   }
X   if (tp[-1] != ' ')
X      return tp[-1];
X   *tp++ = c;     /*append trailing KDELIM*/
X   *tp   = '\0';
X   VOID fprintf(stdout, "     %c%s\n", KDELIM, line);
X   return 0;
X}
END_OF_FILE
  if test 4900 -ne `wc -c <'src/ident.c'`; then
    echo shar: \"'src/ident.c'\" unpacked with wrong size!
  fi
  # end of 'src/ident.c'
fi
if test -f 'src/merge.sh' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/merge.sh'\"
else
  echo shar: Extracting \"'src/merge.sh'\" \(2057 characters\)
  sed "s/^X//" >'src/merge.sh' <<'END_OF_FILE'
X: 'Output the merge command as a shell file.'
X
XId='$Id: merge.sh,v 5.3 1990/11/01 05:03:32 eggert Exp $'
X
Xcat >a.sh <<'EOF' && chmod +x a.sh || exit
X#!/bin/sh
Xexport something
XEOF
Xif
X	(
X		./a.sh &&
X		if csh -c :
X		then csh -c ./a.sh
X		else :
X		fi
X	) 2>/dev/null
Xthen
X	echo '#!/bin/sh'
X	echo '# merge - three-way file merge'
X	echo "#	$Id"
Xelse
X	echo ': merge - three-way file merge'
X	echo ": '$Id'"
Xfi
Xrm -f a.sh
X
Xcat <<EOF
X
XDIFF=${DIFF?}
XDIFF3=${DIFF3?}
XEOF
X
Xcat <<'EOF'
XPATH=/bin:/usr/bin
Xlabels=0 p=w say=echo
Xwhile
X	case $1 in
X	-p)
X		p='1,$p';;
X	-q)
X		say=:;;
X	-L)
X		case $labels in
X		0) l1=$2 labels=1;;
X		1) l3=$2 labels=2;;
X		*) echo "merge: too many -L options"; exit 2
X		esac
X		case $# in
X		1) ;;
X		*) shift
X		esac;;
X	-*)
X		echo "merge: $1: unknown option"; exit 2;;
X	*)
X		break
X	esac
Xdo shift
Xdone
X
Xcase $# in
X3) ;;
X*)
X	echo >&2 'merge: usage: merge [-p] [-q] [-L label1 [-L label3]] file1 file2 file3'
X	exit 2
Xesac
X
Xf1=$1 f2=$2 f3=$3
Xcase $1 in +*) f1=./$1;; esac
Xcase $2 in +*|-*) f2=./$2;; esac
Xcase $3 in +*|-*) f3=./$3;; esac
X
Xcase $labels in
X0) l3=$3 l1=$1;;
X1) l3=$3
Xesac
X
Xcase $p in
Xw)
X	if test ! -w "$f1"
X	then
X		echo >&2 "merge: $1 not writeable"
X		exit 2
X	fi
Xesac
X
Xstatus=2
Xtemps=
Xtrap '
X	case $temps in
X	?*) rm -f $temps || status=2
X	esac
X	exit $status
X' 0
Xtrap exit 1 2 3 13 15
Xumask 077
X
Xt=/tmp/d3t$$
X
XEOF
X
Xcase ${DIFF3_TYPE?} in
Xbin) sed 's/^[	 ]*//' <<'EOF'
X	case $p in
X	w) temps=$t;;
X	*) t=
X	esac
X
X	$DIFF3 -am -L "$l1" -L "$l3" "$f1" "$f2" "$f3" >$t
X	s=$?
X
X	case $s in
X	0) ;;
X	1) $say >&2 "merge: overlaps during merge";;
X	*) exit
X	esac
X
X	case $p in
X	w) cp $t "$f1" || s=2
X	esac
X
X	status=$s
XEOF
X;;
X
X*) sed 's/^[	 ]*//' <<'EOF'
X	temps="/tmp/d3a$$ /tmp/d3b$$ $t"
X
X	$DIFF "$f1" "$f3" >/tmp/d3a$$
X	case $? in
X	0|1) ;;
X	*) exit
X	esac
X
X	$DIFF "$f2" "$f3" >/tmp/d3b$$
X	case $? in
X	0|1) ;;
X	*) exit
X	esac
X
X	$DIFF3 -E /tmp/d3a$$ /tmp/d3b$$ "$f1" "$f2" "$f3" "$l1" "$l3" >$t
X	s=$?
X
X	case $s in
X	0) ;;
X	*) s=1; $say >&2 "merge: overlaps or other problems during merge"
X	esac
X
X	echo $p >>$t  &&  ed - "$f1" <$t   ||   s=2
X
X	status=$s
XEOF
Xesac
END_OF_FILE
  if test 2057 -ne `wc -c <'src/merge.sh'`; then
    echo shar: \"'src/merge.sh'\" unpacked with wrong size!
  fi
  # end of 'src/merge.sh'
fi
if test -f 'src/rcsfreeze.sh' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/rcsfreeze.sh'\"
else
  echo shar: Extracting \"'src/rcsfreeze.sh'\" \(3263 characters\)
  sed "s/^X//" >'src/rcsfreeze.sh' <<'END_OF_FILE'
X#! /bin/sh
X
X# rcsfreeze - assign a symbolic revision number to a configuration of RCS files
X
X#	$Id: rcsfreeze.sh,v 4.3 1990/11/01 05:03:45 eggert Exp $
X
X#       The idea is to run rcsfreeze each time a new version is checked
X#       in. A unique symbolic revision number (C_[number], where number
X#       is increased each time rcsfreeze is run) is then assigned to the most
X#       recent revision of each RCS file of the main trunk.
X#
X#       If the command is invoked with an argument, then this
X#       argument is used as the symbolic name to freeze a configuration.
X#       The unique identifier is still generated
X#       and is listed in the log file but it will not appear as
X#       part of the symbolic revision name in the actual RCS file.
X#
X#       A log message is requested from the user which is saved for future
X#       references.
X#
X#       The shell script works only on all RCS files at one time.
X#       It is important that all changed files are checked in (there are
X#       no precautions against any error in this respect).
X#       file names:
X#       {RCS/}.rcsfreeze.ver	version number
X#       {RCS/}.rscfreeze.log	log messages, most recent first
X
XPATH=/usr/local/bin:/bin:/usr/bin:/usr/ucb:$PATH
Xexport PATH
X
XDATE=`date` || exit
X# Check whether we have an RCS subdirectory, so we can have the right
X# prefix for our paths.
Xif [ -d RCS ]
Xthen RCSDIR=RCS/
Xelse RCSDIR=
Xfi
X
X# Version number stuff, log message file
XVERSIONFILE=${RCSDIR}.rcsfreeze.ver
XLOGFILE=${RCSDIR}.rcsfreeze.log
X# Initialize, rcsfreeze never run before in the current directory
X[ -r $VERSIONFILE ] || { echo 0 >$VERSIONFILE && >>$LOGFILE; } || exit
X
X# Get Version number, increase it, write back to file.
XVERSIONNUMBER=`cat $VERSIONFILE` &&
XVERSIONNUMBER=`expr $VERSIONNUMBER + 1` &&
Xecho $VERSIONNUMBER >$VERSIONFILE || exit
X
X# Symbolic Revision Number
XSYMREV=C_$VERSIONNUMBER
X# Allow the user to give a meaningful symbolic name to the revision.
XSYMREVNAME=${1-$SYMREV}
Xecho >&2 "rcsfreeze: symbolic revision number computed: \"$SYMREV\"
Xrcsfreeze: symbolic revision number used:     \"$SYMREVNAME\"
Xrcsfreeze: the two differ only when rcsfreeze invoked with argument
Xrcsfreeze: give log message, summarizing changes (end with EOF or single '.')" \
X	|| exit
X
X# Stamp the logfile. Because we order the logfile the most recent
X# first we will have to save everything right now in a temporary file.
XTMPLOG=/tmp/rcsfrz$$
Xtrap 'rm -f $TMPLOG; exit 1' 1 2 13 15
X# Now ask for a log message, continously add to the log file
X(
X	echo "Version: $SYMREVNAME($SYMREV), Date: $DATE
X-----------" || exit
X	while read MESS
X	do
X		case $MESS in
X		.) break
X		esac
X		echo "	$MESS" || exit
X	done
X	echo "-----------
X" &&
X	cat $LOGFILE
X) >$TMPLOG &&
X
X# combine old and new logfiles
Xcp $TMPLOG $LOGFILE &&
Xrm -f $TMPLOG || exit
Xtrap 1 2 13 15
X
X# Now the real work begins by assigning a symbolic revision number
X# to each rcs file. Take the most recent version of the main trunk.
X
Xstatus=
X
Xfor FILE in ${RCSDIR}*
Xdo
X#   get the revision number of the most recent revision
X    HEAD=`rlog -h $FILE` &&
X	REV=`echo "$HEAD" | sed -n 's/^head:[ 	]*//p'` &&
X#   assign symbolic name to it.
X    echo >&2 "rcsfreeze: $REV $FILE" &&
X    rcs -q -n$SYMREVNAME:$REV $FILE || status=$?
Xdone
X
Xexit $status
END_OF_FILE
  if test 3263 -ne `wc -c <'src/rcsfreeze.sh'`; then
    echo shar: \"'src/rcsfreeze.sh'\" unpacked with wrong size!
  fi
  # end of 'src/rcsfreeze.sh'
fi
if test -f 'src/rcsmap.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/rcsmap.c'\"
else
  echo shar: Extracting \"'src/rcsmap.c'\" \(3176 characters\)
  sed "s/^X//" >'src/rcsmap.c' <<'END_OF_FILE'
X/* RCS map of character types */
X
X/* Copyright (C) 1982, 1988, 1989 Walter Tichy
X   Copyright 1990 by Paul Eggert
X   Distributed under license by the Free Software Foundation, Inc.
X
XThis file is part of RCS.
X
XRCS is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation; either version 1, or (at your option)
Xany later version.
X
XRCS is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
XGNU General Public License for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with RCS; see the file COPYING.  If not, write to
Xthe Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
X
XReport problems and direct all questions to:
X
X    rcs-bugs@cs.purdue.edu
X
X*/
X
X#include "rcsbase.h"
X
XlibId(mapId, "$Id: rcsmap.c,v 5.0 1990/08/22 08:13:14 eggert Exp $")
X
X/* map of character types */
X/* ISO 8859/1 (Latin-1) */
X/* For best results, this should match diff's opinion of which */
X/* characters may appear in a text file. */
Xconst enum tokens map[] = {
X	EOFILE, /* ctab[-1] */
X	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,
X	SPACE,	SPACE,	NEWLN,	SPACE,	SPACE,	SPACE,	UNKN,	UNKN,
X	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,
X	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,
X	SPACE,	IDCHAR,	IDCHAR,	IDCHAR,	DELIM,	IDCHAR,	IDCHAR,	IDCHAR,
X	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	DELIM,	IDCHAR,	PERIOD,	IDCHAR,
X	DIGIT,	DIGIT,	DIGIT,	DIGIT,	DIGIT,	DIGIT,	DIGIT,	DIGIT,
X	DIGIT,	DIGIT,	COLON,	SEMI,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,
X	SBEGIN,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,
X	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,
X	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,
X	LETTER,	LETTER,	LETTER,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,
X	IDCHAR,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,
X	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,
X	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,
X	Letter,	Letter,	Letter,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	UNKN,
X	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,
X	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,
X	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,
X	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,	UNKN,
X	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,
X	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,
X	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,
X	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,	IDCHAR,
X	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,
X	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,
X	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	IDCHAR,
X	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	LETTER,	Letter,
X	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,
X	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,
X	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	IDCHAR,
X	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,	Letter,
X};
END_OF_FILE
  if test 3176 -ne `wc -c <'src/rcsmap.c'`; then
    echo shar: \"'src/rcsmap.c'\" unpacked with wrong size!
  fi
  # end of 'src/rcsmap.c'
fi
echo shar: End of archive 11 \(of 12\).
cp /dev/null ark11isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 12 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still must unpack the following archives:
    echo "        " ${MISSING}
fi
exit 0
exit 0 # Just in case...
-- 
Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.
Use a domain-based address or give alternate paths, or you may lose out.