    1	:
    2	#
    3	# vedit - VI version editing
    4	# Copyright Unilabs Research Group, 1994
    5	#
    6	# This program implements file version numbering like that which is
    7	# used on DEC VAX systems.
    8	#
    9	# Check to insure that we have at least one option, and print an error
   10	# if we don't
   11	#
   12	if [ $# -lt 1 ]
   13	then
   14	   echo "Usage:  `basename $0` file [file ...]"
   15	   exit 1
   16	fi
   17	#
   18	# loop for each file in the argument list
   19	#
   20	for file in $*
   21	do
   22	   #
   23	   # Determine if the file is under "version" control
   24	   # list the files which start with the name in the argument list and pipe
   25	   # that list into grep, looking for files under VersionVI control.  Pipe
   26	   # that list into sed substituting spaces for alphabetic and numerical
   27	   # characters followed by a semi-colon.  Pipe that list into sort doing a
   28	   # reverse numerical sort, and reading the first line.
   29	   #
   30	   verList=`ls $file* | grep "$file;" |
   31		     sed 's/.*;//g' | sort -rn | head -1`
   32	   #
   33	   # If there is a version in this variable, then it is the highest version
   34	   # number in the file list.
   35	   #
   36	   if [ "$verList" ]
   37	   then
   38	      #
   39	      # increment the version number
   40	      #
   41	      version=`expr $verList + 1`
   42	      original="$file;$verList"
   43	      newfile="$file;$version"
   44	   else
   45	      #
   46	      # This is a new file - start the version at 1
   47	      #
   48	      version=1
   49	      original="$file"
   50	      newfile="$file;$version"
   51	      #
   52	      # Check to see if the file REALLY EXISTS
   53	      #
   54	      if [ ! -f ${original} ]
   55	      then
   56		 touch ${original}
   57	      fi
   58	   fi
   59	   #
   60	   # We have to copy the last edit file to the new version so we have
   61	   # something to edit.
   62	   #
   63	   error=`cp ${original} ${newfile} 2>&1`
   64	   #
   65	   # OOPS - there was an error
   66	   #
   67	   if [ $? -ne 0 ]
   68	   then
   69	      error=`echo $error | sed 's/.*: //g' 2>&1`
   70	      echo "Your edit of ${newfile} is aborted."
   71	      echo "Attempting to access ${original} has reported the follwing \c"
   72	      echo "system error\n\n\t$error\n"
   73	      echo "Aborting edit."
   74	      exit 2
   75	   fi
   76	   echo "Loading ${newfile} for edit ..."
   77	   # Load vi and edit
   78	   #
   79	   vi ${newfile}
   80	   if [ $version -gt 1 ]
   81	   then
   82	      #
   83	      # See of the user actually made changes
   84	      #
   85	      diff ${original} ${newfile} 2>&1 >/dev/null
   86	      EDIT=$?
   87	   else
   88	      #
   89	      # This is the first edit - so don't run diff, and record the
   90	      # edit history
   91	      #
   92	      if [ -r ${newfile} ]
   93	      then
   94	         EDIT=1
   95	      fi
   96	   fi
   97	   #
   98	   # the user DID make changes
   99	   if [ EDIT -eq 1 ]
  100	   then
  101	      #
  102	      # Count the number of lines and bytes in the file
  103	      #
  104	      set `wc ${newfile}`
  105	      lines=`echo $1 | sed 's/ //g'`
  106	      bytes=`echo $3 | sed 's/ //g'`
  107	      #
  108	      # record the edit history for this file
  109	      #
  110	      echo "${newfile}\t`logname`\tlines=${lines}\tbytes=${bytes}\
  111	      `date`" >> $file.INDEX
  112	      #
  113	      # Now link the newly edited version to the basename - that is the file
  114	      # name without using the version number
  115	      #
  116	      ln $newfile $file
  117	   else
  118	      #
  119	      # remove the higher version copy as the user made NO changes
  120	      #
  121	      echo "${newfile} was not edited.  Restoring to ${original}"
  122	      rm ${newfile}
  123	   fi
  124	done
