home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume4 / mailsplit2 / mailsplit < prev    next >
Encoding:
Text File  |  1989-02-03  |  5.7 KB  |  255 lines

  1. #! /bin/sh
  2. #
  3. # mailsplit:     A tarmail variant  -M F Wyle 1988-
  4. #
  5. # @(#)mailsplit    2.1    88/07/25
  6.  
  7. ME=`/usr/bin/basename $0`
  8. SP=/usr/bin/split
  9. LI=700
  10. CM="$0 $*"
  11. VE="2.1  88/07/25"
  12. MA=/usr/ucb/Mail
  13. FC=0
  14. DE=0
  15. DB=5
  16. MF=""
  17. SU="_default_"
  18. TM=false
  19. FL=""
  20. ne="FL=$FL@"
  21. TO=""
  22. UU=uuencode
  23. TD=/tmp
  24. TA=tar
  25. CO=compress
  26. RA=all
  27.  
  28. umask 0
  29.  
  30. for AR in $* ; do
  31.   case $AR in
  32.     -C  ) ne="CO=" ;;
  33.     -D  ) ne="TD=" ;;
  34.     -M  ) ne="MF=" ;;
  35.     -T  ) ne="TA=" ;;
  36.     -V  ) DB=9 ;;
  37.     -d  ) ne="DE=" ;;
  38.     -l  ) ne="LI=" ;;
  39.     -m  ) ne="MA=" ;;
  40.     -n  ) TM=true ;;
  41.     -r  ) ne="RA=" ;;
  42.     -s  ) ne="SU=" ;;
  43.     -t  ) TM=true ;;
  44.     -v  ) echo "$ME version $VE by Mitch Wyle" ;  exit 0 ;;
  45.     -x* ) DB=`echo $AR | cut -c3` ; DB=${DB:-0} ;;
  46.     -u  ) ne="UU=" ;;
  47.     -*  ) echo " " ; echo "Bad flag for $ME": $AR
  48.           echo "Usage:    $ME  [<options>] <mailpath> <file(s)>"
  49.           echo "Example:  $ME  werner@utastro.uucp ./german_lessons"
  50.           echo " "
  51.           exit 0  ;;
  52.     *   ) eval $ne"$AR" ; ne="FL=$FL@" ;;
  53.   esac
  54. done
  55. case $# in
  56.   0 | 1 )
  57.     echo " "
  58.     echo "Usage:    $ME  [<options>] <mailpath> <file(s)>"
  59.     echo "Example:  $ME  werner@utastro.uucp german_lessons"
  60.     echo " "
  61.     exit 0  ;;
  62. esac
  63. IFS=@
  64. set $FL
  65. TO=$1
  66. case $SU in
  67.   _default_ ) SU=$2 ;;
  68. esac
  69.  
  70. case $DB in
  71.   8|9) set -x ;;
  72. esac
  73.  
  74. T1=$TD/1sp$$
  75. T2=$TD/2sp$$
  76. T3=$TD/3sp$$
  77.  
  78. case $RA in
  79.   all) ;;
  80.   *  )
  81.    R=""
  82.    RA=`echo $RA | sed 's/,/\@/'`
  83.    for tok in $RA ; do
  84.      if echo $tok | grep -s '\-' ; then
  85.        t=`echo $tok | sed 's/-/@-@/'`
  86.        set $t
  87.        i=$1
  88.        max=${3:-99}
  89.        while test $i -le $max ; do
  90.          R=$R"@"$i
  91.          i=`expr $i+1`
  92.        done
  93.      else
  94.        R=$R"@"$tok
  95.      fi
  96.      RA=$R
  97.    done ;;
  98. esac
  99.  
  100. case $DB in
  101.   5|6|7|8|9) echo "beginning tar and compress..." ;;
  102. esac
  103. set $FL ; shift
  104. for i in $* ; do
  105.   if test -s $i ; then
  106.     FC=`expr $FC + 1`
  107.   fi
  108. done
  109. if test $FC -gt 0 ; then
  110.   case $DB in
  111.     1|2|3|4) 
  112.       case $TM in
  113.         true )
  114.           echo "would have issued command:"
  115.           echo "$TA cvf - $* 2> /dev/null | $CO >$T1" ;;
  116.         false)  $TA cvf - $* 2> /dev/null | $CO >$T1 ;;
  117.         *    ) echo "Sigh... Programmer error in $ME at line 93." ;;
  118.       esac ;;
  119.     *) 
  120.       case $TM in
  121.        true )
  122.          echo "would have issued command:"
  123.          echo "$TA cvf - $* | $CO >$T1" ;;
  124.        false) $TA cvf - $* | $CO >$T1 ;;
  125.        *    ) echo "Sigh... Programmer error in $ME at line 101." ;;
  126.       esac ;;
  127.   esac
  128. else
  129. case $DB in
  130.   [5-9] ) echo "...whoops!  Nothing to send!  Punting..." 1>&2 ;;
  131. esac
  132.   exit 1
  133. fi
  134. case $DB in
  135.   5|6|7|8|9) echo "...finished tar, compress, starting uuencode..."
  136. esac
  137. case $TM in
  138.   true )
  139.     echo "would have issued command:"
  140.     echo "$UU $T1 $T1 > $T2 " ;;
  141.   false) $UU $T1 $T1 > $T2 ; ;;
  142.   *    ) echo "Sigh... Programmer error in $ME at line 118." ;;
  143. esac
  144. case $DB in
  145.   5|6|7|8|9) echo "...finished uuencode, starting split..."
  146. esac
  147. case $TM in 
  148.   true )
  149.     echo "would have issued command:" 
  150.     echo "$SP -$LI $T2 $T3" ;; 
  151.   false)  $SP -$LI $T2 $T3 ; ;; 
  152.   *    ) echo "Sigh... Programmer error in $ME at line 128." ;;
  153. esac 
  154. case $TM in
  155.   true )
  156.     echo "would have issued commands:"
  157.     echo "$MA -s "$SU - part n of m" $TO" 
  158.     echo "with n ranging from 1 to m; m cannot be determined."
  159.     echo "without running for real."
  160.     exit 0 ;;
  161. esac 
  162.  
  163. n=1
  164. set $T3*
  165. for f  do
  166.   SE=false
  167.   case $RA in
  168.     all)  SE=true ;;
  169.     *  )
  170.       for p in $RA ; do
  171.         case $p in
  172.           $n ) SE=true ;;
  173.         esac
  174.       done ;;
  175.   esac
  176.   case $SE in
  177.     true)
  178.     {
  179.     echo " "
  180.     case $n in
  181.     1)
  182.       if test ! -s $f ; then
  183.         case $DB in 
  184.           [5-9]) echo "...whoops!  $SP failed!   Punting..." 1>&2 ;;
  185.         esac 
  186.         exit 1 ;
  187.       fi
  188.       echo "[The attached script will glue these mail messages together,"
  189.       echo "uuencode, uncompress, and extract all the files.  Be sure"
  190.       echo "to send the pieces through this script in the proper order!"
  191.       echo " "
  192.       echo "#! /bin/sh"
  193.       echo "echo extracting data..."
  194.       echo "/bin/awk '"
  195.       echo "BEGIN { inhex = 0 ; part = 0 }"
  196.       echo "/^---/ {"
  197.       echo "  if (\$2 == \"start\") part++"
  198.       echo "  if (\$6 != part) exit 1"
  199.       echo "  if (inhex && (NF > 1))"
  200.       echo "    inhex = 0"
  201.       echo "  else {"
  202.       echo "    inhex = 1"
  203.       echo "    getline"
  204.       echo "  }"
  205.       echo "}"
  206.       echo "{ if (inhex) print \$0 }'  > /tmp/xtr\$\$"
  207.       echo ""
  208.       echo " if test \$? = 1 ; then"
  209.       echo "   echo 'Parts sent through out of order!! Punting.'"
  210.       echo "   /bin/rm -f /tmp/xtr\$\$"
  211.       echo "   exit 1"
  212.       echo " fi"
  213.       echo ""
  214.       echo "echo ...finished extraction, starting uudecode..."
  215.       echo "fname=\`head -100 /tmp/xtr\$\$ | grep begin | cut -f3 -d' '\`"
  216.       echo "OurDir=\`pwd\`"
  217.       echo "cd /tmp"
  218.       echo "$UU xtr\$\$"
  219.       echo "/bin/rm -f xtr\$\$"
  220.       echo "/bin/chmod  777 \$fname"
  221.       echo "mv \$fname \$fname.Z"
  222.       echo "echo ...finished uudecode, starting uncompress..."
  223.       echo "uncompress \$fname"
  224.       echo "mv \$fname \$OurDir"
  225.       echo "cd \$OurDir"
  226.       echo "echo ...finished uncompress, starting tar extraction..."
  227.       echo "$TA xvf \$fname"
  228.       echo "/bin/rm -f /tmp/xtr* \$fname"
  229.       echo " " ;;
  230.     esac
  231.     echo " "
  232.     echo "This file was packed by mailsplit version:"
  233.     echo $VE
  234.     echo with command:
  235.     echo "$CM"
  236.     echo "on: `date`"
  237.     echo " "
  238.     echo "--- start of $SU part $n of $#"
  239.     cat $f
  240.     echo "--- end of $SU part $n of $#"
  241.     echo " "
  242.     echo " "
  243.     } | $MA $MF -s "$SU - part $n of $#" $TO
  244.     case $DB in
  245.       [5-9])   echo "...sent part $n of $# to $MA..." ;;
  246.     esac
  247.     case $DB in
  248.       5|6|7|8|9) echo "...sleeping $DE seconds (waiting for mailer) ..." ;;
  249.     esac
  250.     sleep $DE ;;
  251.   esac
  252.   n=`expr $n + 1`
  253. done
  254. /bin/rm -f $T1 $T2 $T3*
  255.