home *** CD-ROM | disk | FTP | other *** search
- /* Written 9:35 am Jun 18, 1986 by sources-request@mirror.UUCP in mirror:mod.sources */
- /* ---------- "v06i005: makekits revisited (makek" ---------- */
- Submitted by: pyramid!tolerant!bene!luke!itkin
- Mod.sources: Volume 6, Issue 5
- Archive-name: makekits2
-
- As the final header comment indicates, this is a modification of a script
- I posted a while back that includes the capability to traverse directories.
- It seems to work very well, and I am posting it in response to some discussion
- in net.sources.d about multi-part shar files. I hope that it will satisfy the
- needs of those who have the problem.
-
- [ I would be particularly interested in a /bin/sh or C version of
- this that everyone could use. I somehow think it would make my
- job a little easier. Steven's original version was posted in
- mod.sources Vol2#16. Note that this version supports up to 10
- kits, or 640K of source; just barely big enough for hack. --r$]
-
- --------------------------------------------cut here-------------------
- # This is a shell archive. Remove anything before this line,
- # then unpack it by saving it in a file and typing "sh file".
- echo x - makekits.csh
- sed 's/^XX//' > "makekits.csh" <<'@//E*O*F makekits.csh//'
- XX#! /bin/csh -f
- XX#
- XX# makekits - generate "kits" from source files for transmission across
- XX# telephone lines. Generates an output file called MANIFEST. That
- XX# file can be used by later executions of the program as the list of
- XX# files.
- XX#
- XX# usage: makekits [ -cMt ] [ -m manifest ]
- XX# [ -s size ] -k kitname [ files... ]
- XX#
- XX# note that to do directory traversal, you MUST include the name of
- XX# the root directory in the list of file names. In fact, the simplest
- XX# way to do it is JUST to include the root name as the list of files.
- XX#
- XX# for example, to traverse the current tree and put all regular files
- XX# in the kits: "makekits -c -t /usr/local/src/abc"
- XX#
- XX# a short tutorial:
- XX# first, if there is a file named MANIFEST, remove it
- XX# if you are using a manifest, and it is named MANIFEST, change it
- XX# second, DO NOT create your kits in the same directory as those
- XX# files that are going into the kits, otherwise the kits will be
- XX# in the kits will be in the kits will...
- XX#
- XX# change directory to the directory (or root of the directories) containing
- XX# the files to be placed in kits
- XX#
- XX# execute the command "makekits -k /tmp/kit *" to pick up only plain
- XX# files
- XX#
- XX# execute the command "makekits -t -k /tmp/kit -s 124 *" to pick up all
- XX# files in the current directory and all subdirectories. this will
- XX# cause the creation of a kit numbered zero (0) that will do nothing
- XX# but create directories.
- XX#
- XX#--------------------------------------------------------------------------
- XX# this script updated 04/18/86 based on a cry for help on the network from
- XX# Alan Clegg (...!mcnc!ncsu!ncsuvx!abc) to handle directories
- XX#--------------------------------------------------------------------------
- XX# Steven List @ Benetics Corporation, Mt. View, CA
- XX# {cdp,engfocus,idi,oliveb,plx,tolerant}!bene!luke!itkin
- XX#--------------------------------------------------------------------------
- XX#
- XXset COMPRESS = cat # if -c, set to the local compression program
- XXset KITSIZE = 62 # leave room for the shar stuff
- XXset KITNAME = "" # either from command line or requested below
- XXset MAN_NAME = "" # may be set from the command line
- XXset MAX_KITS = 20 # limit the number of kits
- XXset TRAVERSE = 0 # if -t, traverse all directory trees found
- XX#
- XX# process command line arguments
- XX#
- XXforeach i ( $* )
- XX switch ($1)
- XX case -c:
- XX set COMPRESS = /usr/lib/news/compress
- XX set KITSIZE = 100
- XX shift
- XX breaksw
- XX case -k:
- XX set KITNAME = $2
- XX shift; shift
- XX breaksw
- XX case -m:
- XX set MAN_NAME = $2
- XX shift; shift
- XX breaksw
- XX case -M:
- XX set MAN_NAME = MANIFEST
- XX shift
- XX breaksw
- XX case -s:
- XX set KITSIZE = $2
- XX shift; shift
- XX breaksw
- XX case -t:
- XX set TRAVERSE = 1
- XX shift
- XX breaksw
- XX case -*:
- XX echo "usage: makekits [-cMt ][-m manifest][-s size] -k kitname [files...]"
- XX exit (1)
- XX breaksw
- XX default:
- XX break
- XX breaksw
- XX endsw
- XXend
- XX#
- XXif ( "$KITNAME" == "" ) then
- XX echo "kitname is required"
- XX echo "usage: makekits [-cMt ][-m manifest][-s size] -k kitname [files...]"
- XX exit (2)
- XXendif
- XX#
- XXset SIZE = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- XXset FILES = ( ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' )
- XX#
- XXswitch ("$MAN_NAME")
- XX case MANIFEST:
- XX set argv = ( `sed 1,2d MANIFEST | awk '{print $1}'` )
- XX mv MANIFEST MANIFEST.bu
- XX breaksw
- XX case "":
- XX breaksw
- XX default:
- XX set argv = ( `cat $MAN_NAME` )
- XX breaksw
- XXendsw
- XX#
- XXset FLIST = ( "" )
- XXset DIRS = ( "" )
- XX######################################################################
- XX#
- XX# first, if specified, traverse all directories and add their file
- XX# names to the list of files
- XX#
- XXif ( $TRAVERSE ) then
- XX foreach file ( $* )
- XX if ( -d $file ) then
- XX set DIRS = ( $DIRS `find $file -type d -print` )
- XX else if ( -r $file ) then
- XX set FLIST = ( $FLIST $file )
- XX endif
- XX end
-
- XX set BASE = `pwd`
- XX foreach dir ( $DIRS )
- XX cd $dir
- XX foreach subfile ( * )
- XX if ( -f $subfile ) set FLIST = ( $FLIST $dir/$subfile )
- XX end
- XX cd $BASE
- XX end
- XXelse
- XX FLIST = ( $* )
- XXendif
- XX
- XXecho > MANIFEST
-
- XXforeach file ( $FLIST MANIFEST )
- XX if ( -d $file ) continue
- XX set thissize = ( `ls -s $file` )
- XX set thissize = $thissize[1]
- XX set kit = 0
- XX while ( $kit < $MAX_KITS )
- XX @ kit++
- XX if ( ( $SIZE[$kit] + $thissize ) <= $KITSIZE ) then
- XX set FILES[$kit] = "$FILES[$kit] $file"
- XX @ SIZE[$kit] += $thissize
- XX echo "$file $kit" >> MANIFEST
- XX break
- XX endif
- XX end
- XXend
- XX#
- XXsort -o MANIFEST MANIFEST
- XXawk '\
- XXBEGIN { print "File Name Kit Number"\
- XX print "-------------- ----------"\
- XX }\
- XX{ printf "%-24s %d\n", $1, $2 }' MANIFEST > tmp$$
- XXmv tmp$$ MANIFEST
- XX######################################################################
- XX#
- XX# make a kit to create the directories, if necessary
- XX#
- XXif ( "$DIRS" != "" ) then
- XX echo "Creating KIT 0 to make directories"
- XX cat > ${KITNAME}0 << EndHead
- XX#! /bin/sh
- XX# This is a shell archive, meaning:
- XX# 1. Remove everything above the #! /bin/sh line.
- XX# 2. Save the resulting text in a file.
- XX# 3. Execute the file with /bin/sh (not csh) to create the directories:
- XXEndHead
- XX foreach i ( $DIRS )
- XX echo "# $i" >> ${KITNAME}0
- XX end
- XX echo "# This archive created: `date`" >> ${KITNAME}0
- XX echo 'export PATH; PATH=/bin:$PATH' >> ${KITNAME}0
- XX foreach i ( $DIRS )
- XX cat >> ${KITNAME}0 << EndDIR
- XXif test ! -d '$i'
- XXthen
- XX echo shar: creating directory "'$i'"
- XX mkdir '$i'
- XXfi
- XXEndDIR
- XX end
- XX echo "# End of shell archive" >> ${KITNAME}0
- XX echo "Completed KIT 0"
- XXendif
- XX######################################################################
- XXforeach i ( 1 2 3 4 5 6 7 8 9 10 )
- XX if ( $SIZE[$i] == 0 ) break
- XX set NFILES = ( $FILES[$i] )
- XX echo "Creating KIT $i ($KITNAME$i) - $#NFILES files, $SIZE[$i] blocks"
- XX shar -p'XX#' -c -v $FILES[$i] | $COMPRESS > $KITNAME$i
- XX echo "Completed KIT $i ($KITNAME$i)"
- XXend
- @//E*O*F makekits.csh//
- chmod u=rw,g=rw,o=rw xxx
-
- exit 0
- /* End of text from mirror:mod.sources */
-