#!/bin/csh -fb
############################################################################### 
## ============								     ##
##   mkuufile								     ##
## ============								     ##
##(Function)								     ##
##   mkuufile creates a uufile, tarring, compressing, and uuencoding a file  ##
##   or a directory for email.						     ##
##(Usage)								     ##
##     mkuufile <directory>      --->  <directory>.uu			     ##	
##     mkuufile <file>           --->  <file>.uu			     ##
##(Update Record)							     ##
##   94/12/03	K.Fujii		Original version derived from uufiles.	     ##
############################################################################### 
#
#--
# Choose a data compressor.
#--
#set opt = ""
#set level = ""
#
set opt = -gz
set level = ""
#set level = -9
#
if ("$opt" != "-gz") then 
   set gz=Z unc=uncompress gunzip=zcat gzip=(compress -f -c) 
   echo "Will use Z-compression." 
else 
   set gz=gz unc=gunzip gunzip="gunzip -c" gzip=(gzip $level -f -c) 
   echo Will use gzip $level to compress 
endif
#--
# Set input directory and file names.
#-- 
if ( $#argv == 0 ) then
   echo "Usage:"
   echo "  mkuufile [dirname] [filenames]"
   exit
else if ( $#argv == 1 ) then
   if ( -d $1 ) then
      set dir = $1
      set files = "*"
      set pname = `basename $1`
   else if ( -f $1 ) then
      set dir = "."
      set files = $1
   else      
      echo no such file or directory
      exit
   endif
else if ( $#argv >= 2 ) then
   if ( -f $1 ) then
      set dir = "."
      set tmpfiles = ($argv)
      set pname = `basename $PWD`
   else if ( -d $1 ) then
      set dir = $1
      set tmpfiles = ($argv[2-$#argv])
      set pname = `basename $1`
   else     
      echo no such file or directory
      exit
   endif
   set files = ""
   foreach file ( $tmpfiles )
      set files = ($files `basename $file`)
   end 
   echo "$tmpfiles now become $files"
endif
echo ""
#--
# Set output file name.
#--
if (`echo $dir/$files | wc -w` == 1 && ! -d `echo $dir/$files`) then 
   set dtar="" tar=cat name=$files:t 
   set pname=$name:r 
   echo Single file. Will create $name.$gz uuencoded as $pname.uu 
else 
   set name=$pname:t dtar=".tar" tar="tar cf -" 
   echo Dir- or multi-file. Will create $name.tar.$gz uuencoded as $name.uu
endif
#--
# Prepare the header section.
#-- 
cat > $pname.uu << EOF 
#!/bin/csh -f 
# This uuencoded $gz-compressed $dtar file has been created by 
# a csh script derived from the uufiles command. 
# If you are on a unix machine this file will unpack itself: 
# Strip off any mail header and call resulting file, e.g., $pname:t.uu 
# (uudecode ignores these header lines and starts at begin line below) 
# then say csh $pname:t.uu 
# or explicitly execute the commands (generally more secure):
# uudecode $pname:t.uu ; $unc $name$dtar.$gz ; 
EOF
if ("$dtar" != "") echo "# tar -xvf $name.tar" >> $pname.uu 
cat << EOF >> $pname.uu 
# on some non-unix (e.g. VAX/VMS), first use an editor to change the 
# filename in "begin" line below to $name${dtar}_$gz , then execute 
# uudecode $pname:t.uu 
# $gzip[1] -d $name${dtar}_$gz 
EOF
if ("$dtar" != "") echo "# tar -xvf $name.tar" >> $pname.uu 
echo \# >> $pname.uu 
echo uudecode \$0 >> $pname.uu 
#
echo chmod 644 $name$dtar.$gz >> $pname.uu 
if ("$dtar" != "") then 
   echo "$gunzip $name$dtar.$gz | tar -xvf -" >> $pname.uu 
   echo rm \$0 $name$dtar.$gz >> $pname.uu 
else 
   echo $unc $name$dtar.$gz >> $pname.uu 
   echo rm \$0 >> $pname.uu 
endif
echo "echo '---'" >> $pname.uu
echo "echo ''" >> $pname.uu
echo "echo '(END)'" >> $pname.uu
echo exit >> $pname.uu 
echo "" >> $pname.uu 
#--
# Now prepare the data body.
#--
echo "" 
echo "Switching to directory:" 
echo "   $dir" 
echo "and creating a uu file $pname.uu from:"
echo "---" 
(cd $dir; ls $files)
echo "---" 
#
(cd $dir; $tar $files) | $gzip | uuencode $name$dtar.$gz | \
sed -e '1s/^begin [0-7][0-7]* /begin 644 /' \
       -e '2,$s/ /`/g' >> $pname.uu 
#--
# Make it executable.
#--
chmod 755 $pname.uu 
#--
# Final remark.
#--
echo "" 
echo "Finished. To invert:" 
echo " uudecode $pname.uu" 
if ( "$dtar" != "" ) then 
   echo " $gunzip $name$dtar.$gz | tar -xvf - (or gnutar zxvf $name$dtar.$gz)" 
else 
   echo " $unc $name$dtar.$gz " 
endif 
echo "or execute"
echo " $pname.uu" 
echo "which unpacks itself, removes $pname.uu, and $name$dtar.$gz." 
echo "---"
echo ""
echo "That's all, falks\!"
exit
