+#! /bin/sh
+PATH=/usr/local/bin:/bin:/usr/bin:/usr/ucb
+# 'rcsfreeze' has the purpose of assigning a symbolic revision
+# number to a set of RCS files, which form a valid configuration.
+#
+# The idea is to run rcsfreeze each time a new version is checked
+# in. A unique symbolic revision number (C_[number], where number
+# is increased each time rcsfreeze is run) is then assigned to the most
+# recent revision of each RCS file of the main trunk.
+#
+# If the command is invoked with an argument, then this
+# argument is used as the symbolic name to freeze a 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 RCS file.
+#
+# A log message is requested from the user which is saved for future
+# references.
+#
+# The shell script works only on all RCS files at one time.
+# It is important that all changed files are checked in (there are
+# no precautions against any error in this respect).
+# file names:
+# {RCS/}rcsfreeze.version for the version number
+# {RCS/}rscfreeze.log for the log messages, most recent
+# logmessage first.
+
+progname=`basename $0`
+DATE=`date`
+# Check whether we have an RCS subdirectory, so we can have the right
+# prefix for our paths.
+if [ -d RCS ] ; then
+ RCSDIR=RCS
+else
+ RCSDIR=.
+fi
+
+# Version number stuff, log message file
+VERSIONFILE=$RCSDIR/.rcsfreeze.version
+LOGFILE=$RCSDIR/.rcsfreeze.log
+if [ ! -r $VERSIONFILE ] ; then
+# Initialize, rcsfreeze never run before in the current directory
+ cat << EOF > $VERSIONFILE
+0
+EOF
+ touch $LOGFILE
+fi
+
+# Get Version number, increase it, write back to file.
+VERSIONNUMBER=`cat $VERSIONFILE`
+VERSIONNUMBER=`expr $VERSIONNUMBER + 1`
+ cat << EOF > $VERSIONFILE
+$VERSIONNUMBER
+EOF
+
+# Symbolic Revision Number
+SYMREV=C_$VERSIONNUMBER
+# Allow the user to give a meaningful symbolic name to the revision.
+SYMREVNAME=${1-$SYMREV}
+echo "$progname: symbolic revision number computed: \"$SYMREV\""
+echo "$progname: symbolic revision number used: \"$SYMREVNAME\""
+echo "$progname: the two differ only when $progname invoked with argument"
+
+# Stamp the logfile. Because we order the logfile the most recent
+# first we will have to save everything right now in a temporary file.
+TMPLOG=/tmp/rcsfreeze.$$.log.tmp
+echo "Version: $SYMREVNAME($SYMREV), Date: $DATE" > $TMPLOG
+echo "-----------" >> $TMPLOG
+# Now ask for a log message, continously add to the log file
+echo "$progname: give log message, summarizing changes"
+echo " (terminate with ^D or single '.')"
+while read MESS ; do
+ if [ "$MESS" = '.' ] ; then break ; fi
+ echo " $MESS" >> $TMPLOG
+done
+echo "-----------" >> $TMPLOG
+echo >> $TMPLOG
+
+# combine old and new logfiles
+TMPLOG2=$TMPLOG.2
+cat $TMPLOG $LOGFILE > $TMPLOG2
+cp $TMPLOG2 $LOGFILE
+rm -f $TMPLOG $TMPLOG2
+
+# Now the real work begins by assigning a symbolic revision number
+# to each rcs file. Take the most recent version of the main trunk.
+
+for FILE in $RCSDIR/* ; do
+# get the revision number of the most recent revision
+ REV=`rlog -h -d"$DATE" $FILE | fgrep 'head:' | awk ' { print $2 } ' `
+ echo "$progname: file name: \"$FILE\", Revision Number: $REV"
+# assign symbolic name to it.
+ rcs -q -n$SYMREVNAME:$REV $FILE
+done