home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume2 / makekits < prev    next >
Internet Message Format  |  1986-11-30  |  4KB

  1. From: ihnp4!amd!idi!bene!luke!itkin
  2. Subject: software "kit" generation script
  3. Reply-To: itkin@luke.UUCP (Steven List)
  4. Approved: john@genrad.UUCP
  5.  
  6. Mod.sources:  Volume 2, Issue 16
  7. Submitted by: ihnp4!amd!idi!bene!luke!itkin (Steven List)
  8.  
  9. [ This is not a shar archive!  Do not attempt to use unshar to extract it!
  10.   -  John Nelson [moderator]
  11. ]
  12.  
  13. The following C shell script is something I threw together, inspired by
  14. Larry Wall's rn installation package.  The script is called `makekits'.
  15. It's purpose is to take a set of text files, generate shar files that
  16. fall within some arbitrary size limit, and optionally compress those
  17. shar files.
  18.  
  19. As currently implemented, the script creates both the (optionally
  20. compressed) shar files and a file called MANIFEST (which goes into the
  21. shar files too).  The options allow the specification of the kit root
  22. name (-k), the maximum size of the kits in 1k blocks (-s - default is 62
  23. for uncompressed and 100 before compression if compression is to be
  24. done), the name of a manifest file (-m) or an indication that the
  25. default MANIFEST is to be used (-M).
  26.  
  27. If the manifest file is not specified with the -M flag, it should be a
  28. simple list of names (may or may not include directories).
  29.  
  30. I have used this a little bit.  It seems to work pretty well.  As usual,
  31. comment and corrections are welcome.
  32.  
  33. --------------------------- Cut Here -----------------------------------
  34. #! /usr/bin/csh
  35. #
  36. # makekits - generate "kits" from source files for transmission across
  37. #  telephone lines.  Generates an output file called MANIFEST.  That
  38. #  file can be used by later executions of the program as the list of
  39. #  files.
  40. #
  41. #  usage: makekits [ -cM ] [ -m manifest ]
  42. #                   [ -s size ] -k kitname [ files... ]
  43. #
  44. set COMPRESS = cat    # if -c, set to the local compression program
  45. set KITSIZE = 62    # leave room for the shar stuff
  46. set KITNAME = ""    # either from command line or requested below
  47. set MAN_NAME = ""    # may be set from the command line
  48. set MAX_KITS = 20    # limit the number of kits
  49. #
  50. # process command line arguments
  51. #
  52. foreach i ( $* )
  53.     switch ($1)
  54.         case -c:
  55.             set COMPRESS = /usr/lib/news/compress
  56.             set KITSIZE = 100
  57.             shift
  58.             breaksw
  59.         case -k:
  60.             set KITNAME = $2
  61.             shift; shift
  62.             breaksw
  63.         case -m:
  64.             set MAN_NAME = $2
  65.             shift; shift
  66.             breaksw
  67.         case -M:
  68.             set MAN_NAME = MANIFEST
  69.             shift
  70.             breaksw
  71.         case -s:
  72.             set KITSIZE = $2
  73.             shift; shift
  74.             breaksw
  75.         case -*:
  76.     echo "usage: makekits [-cM ][-m manifest][-s size] -k kitname [files...]"
  77.             exit (1)
  78.             breaksw
  79.         default:
  80.             break
  81.             breaksw
  82.     endsw
  83. end
  84. #
  85. if ( "$KITNAME" == "" ) then
  86.     echo "kitname is required"
  87.     echo "usage: makekits [-cM ][-m manifest][-s size] -k kitname [files...]"
  88.     exit (2)
  89. endif
  90. #
  91. set SIZE = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
  92. set FILES = ( ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' )
  93. #
  94. switch ("$MAN_NAME")
  95.     case MANIFEST:
  96.         set argv = ( `sed 1,2d MANIFEST | awk '{print $1}'` )
  97.         mv MANIFEST MANIFEST.bu
  98.         breaksw
  99.     case "":
  100.         breaksw
  101.     default:
  102.         set argv = ( `cat $MAN_NAME` )
  103.         breaksw
  104. endsw
  105. #
  106. echo > MANIFEST
  107. foreach file ( $* MANIFEST )
  108.     if ( -d $file ) continue
  109.     set thissize = ( `ls -s $file` )
  110.     set thissize = $thissize[1]
  111.     set kit = 0
  112.     while ( $kit < $MAX_KITS )
  113.         @ kit++
  114.         if ( ( $SIZE[$kit] + $thissize ) <= $KITSIZE ) then
  115.             set FILES[$kit] = "$FILES[$kit] $file"
  116.             @ SIZE[$kit] += $thissize
  117.             echo "$file $kit" >> MANIFEST
  118.             break
  119.         endif
  120.     end
  121. end
  122. #
  123. sort -o MANIFEST MANIFEST
  124. awk '\
  125. BEGIN { print "File Name                 Kit Number"\
  126.         print "--------------            ----------"\
  127.         }\
  128. { printf "%-24s     %d\n", $1, $2 }' MANIFEST  > tmp$$ 
  129. mv tmp$$ MANIFEST
  130. #
  131. foreach i ( 1 2 3 4 5 6 7 8 9 10 )
  132.     if ( $SIZE[$i] == 0 ) break
  133.     shar -c -v $FILES[$i] | $COMPRESS > $KITNAME$i
  134. end
  135.  
  136.  
  137.  
  138.