software "kit" generation script

sources-request at genrad.UUCP sources-request at genrad.UUCP
Tue Jul 23 01:47:42 AEST 1985


Mod.sources:  Volume 2, Issue 16
Submitted by: ihnp4!amd!idi!bene!luke!itkin (Steven List)

[ This is not a shar archive!  Do not attempt to use unshar to extract it!
  -  John Nelson [moderator]
]

The following C shell script is something I threw together, inspired by
Larry Wall's rn installation package.  The script is called `makekits'.
It's purpose is to take a set of text files, generate shar files that
fall within some arbitrary size limit, and optionally compress those
shar files.

As currently implemented, the script creates both the (optionally
compressed) shar files and a file called MANIFEST (which goes into the
shar files too).  The options allow the specification of the kit root
name (-k), the maximum size of the kits in 1k blocks (-s - default is 62
for uncompressed and 100 before compression if compression is to be
done), the name of a manifest file (-m) or an indication that the
default MANIFEST is to be used (-M).

If the manifest file is not specified with the -M flag, it should be a
simple list of names (may or may not include directories).

I have used this a little bit.  It seems to work pretty well.  As usual,
comment and corrections are welcome.

--------------------------- Cut Here -----------------------------------
#! /usr/bin/csh
#
# makekits - generate "kits" from source files for transmission across
#  telephone lines.  Generates an output file called MANIFEST.  That
#  file can be used by later executions of the program as the list of
#  files.
#
#  usage: makekits [ -cM ] [ -m manifest ]
#				   [ -s size ] -k kitname [ files... ]
#
set COMPRESS = cat	# if -c, set to the local compression program
set KITSIZE = 62	# leave room for the shar stuff
set KITNAME = ""	# either from command line or requested below
set MAN_NAME = ""	# may be set from the command line
set MAX_KITS = 20	# limit the number of kits
#
# process command line arguments
#
foreach i ( $* )
	switch ($1)
		case -c:
			set COMPRESS = /usr/lib/news/compress
			set KITSIZE = 100
			shift
			breaksw
		case -k:
			set KITNAME = $2
			shift; shift
			breaksw
		case -m:
			set MAN_NAME = $2
			shift; shift
			breaksw
		case -M:
			set MAN_NAME = MANIFEST
			shift
			breaksw
		case -s:
			set KITSIZE = $2
			shift; shift
			breaksw
		case -*:
	echo "usage: makekits [-cM ][-m manifest][-s size] -k kitname [files...]"
			exit (1)
			breaksw
		default:
			break
			breaksw
	endsw
end
#
if ( "$KITNAME" == "" ) then
	echo "kitname is required"
	echo "usage: makekits [-cM ][-m manifest][-s size] -k kitname [files...]"
	exit (2)
endif
#
set SIZE = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
set FILES = ( ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' )
#
switch ("$MAN_NAME")
	case MANIFEST:
		set argv = ( `sed 1,2d MANIFEST | awk '{print $1}'` )
		mv MANIFEST MANIFEST.bu
		breaksw
	case "":
		breaksw
	default:
		set argv = ( `cat $MAN_NAME` )
		breaksw
endsw
#
echo > MANIFEST
foreach file ( $* MANIFEST )
	if ( -d $file ) continue
	set thissize = ( `ls -s $file` )
	set thissize = $thissize[1]
	set kit = 0
	while ( $kit < $MAX_KITS )
		@ kit++
		if ( ( $SIZE[$kit] + $thissize ) <= $KITSIZE ) then
			set FILES[$kit] = "$FILES[$kit] $file"
			@ SIZE[$kit] += $thissize
			echo "$file $kit" >> MANIFEST
			break
		endif
	end
end
#
sort -o MANIFEST MANIFEST
awk '\
BEGIN { print "File Name                 Kit Number"\
		print "--------------            ----------"\
		}\
{ printf "%-24s     %d\n", $1, $2 }' MANIFEST  > tmp$$ 
mv tmp$$ MANIFEST
#
foreach i ( 1 2 3 4 5 6 7 8 9 10 )
	if ( $SIZE[$i] == 0 ) break
	shar -c -v $FILES[$i] | $COMPRESS > $KITNAME$i
end



More information about the Mod.sources mailing list