home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / base / root.15 / usr / bin / uupick / uupick~
Text File  |  1998-08-19  |  4KB  |  169 lines

  1. #!/usr/bin/sh
  2. #ident    "@(#)uupick    1.2"
  3. #ident "$Header: uupick 1.1 91/02/28 $"
  4.  
  5. export IFS PATH
  6. IFS="     
  7. "
  8. PATH="/usr/bin"
  9.  
  10. # sys: system; user: login name;  cdir: current directory;
  11. # tdir: temporary directory; pu: PUBDIR/receive/user;
  12. cdir=`pwd`
  13. dir=""
  14. abs=""
  15. sys=""
  16. var=""
  17. varto=""
  18. varfrom=""
  19. label="UX:uupick"
  20. cat="uxbnu"
  21. sigmsg="received signal %s\\n"
  22. trap "pfmt -l $label -s error -g ${cat}:26 \"$sigmsg\" '<1>'; exit 29" 1
  23. trap "pfmt -l $label -s error -g ${cat}:26 \"$sigmsg\" '<2>'; exit 29" 2
  24. trap "pfmt -l $label -s error -g ${cat}:26 \"$sigmsg\" '<3>'; exit 29" 3
  25. trap "pfmt -l $label -s error -g ${cat}:26 \"$sigmsg\" '<13>'; exit 29" 13
  26. trap "pfmt -l $label -s error -g ${cat}:26 \"$sigmsg\" '<15>'; exit 29" 15
  27. # get options
  28. if test $# -gt 2
  29. then pfmt -l $label -s action -g ${cat}:11 "Usage: uupick [-s sysname]\n" ; exit 36
  30. fi
  31. while test $# -ge 1
  32. do
  33.     case $1 in
  34.     -s*)    if [ $# -eq 1 ]
  35.         then
  36.             sys=`expr $1 : '-s\(.*\)'`
  37.         else
  38.             sys=$2
  39.             shift
  40.         fi
  41.         if [ -z "$sys" ]
  42.         then
  43.             pfmt -l $label -s action -g ${cat}:11 "Usage: uupick [-s sysname]\n" ; exit 36
  44.         fi
  45.         ;;
  46.     *)    pfmt -l $label -s action -g ${cat}:11 "Usage: uupick [-s sysname]\n" ; exit 36
  47.         ;;
  48.     esac
  49.     shift
  50. done
  51. user=`LC_MESSAGES=C id | sed -n "/^uid=[0-9]*(\([^)]*\)).*/s//\1/p"`
  52.  
  53. if test -z "$user"
  54. then pfmt -l $label -s error -g ${cat}:12 "User id required!\n" ; exit 23
  55. fi
  56.  
  57. pu=/var/spool/uucppublic/receive/$user
  58. if test -d $pu -a -s $pu
  59. then
  60.     for i in `/usr/bin/ls $pu`
  61.     do
  62.     if test $sys
  63.     then
  64.         if test $sys != $i;  then continue;  fi
  65.     fi
  66.     if test -d $pu/$i -a -s $pu/$i
  67.     then
  68.         cd $pu/$i
  69.         for j in `/usr/bin/ls -a`
  70.         do
  71.         if test $j = "." -o $j = ".."; then continue; fi
  72.         printf "`gettxt ${cat}:19 \"from system %s : \"`" $i
  73.         if test -d $j
  74.         then
  75.             printf "`gettxt ${cat}:13 \"directory %s \"`" $j
  76.         else
  77.             printf "`gettxt ${cat}:14 \"file %s \"`" $j
  78.         fi
  79.         while true
  80.         do
  81.             echo '? \c'
  82.             if read cmd dir
  83.             then
  84.             trap ": ;;" 1
  85.             case $cmd in
  86.             d)
  87.                 rm -fr $j ; break ;;
  88.             "")
  89.                 break ;;
  90. # options m, a:
  91. #    If dir path begins with a slash, use full path for destination;
  92. #    otherwise, use path relative to current dir;
  93. #    default destination is current dir
  94. #
  95. #    As files are transferred, put their names in /tmp/$$uupick.
  96. #    Only remove those named files from...receive/..dir if diff
  97. #    verifies transfer took place. then find & remove directories
  98. #    (separate find is necessary because cpio -v doesn't print dir names)
  99.             a|m)
  100.                 eval dir="$dir"
  101.                 if test $dir
  102.                 then abs=`expr "$dir" : '/.*'`
  103.                 if test $abs != 0
  104.                 then tdir=$dir
  105.                 else tdir=$cdir/$dir
  106.                 fi
  107.                 else
  108.                 tdir=$cdir
  109.                 fi
  110.                 if [ ! -d $tdir -o ! -w $tdir ]; then
  111.                 pfmt -l $label -s warning -g ${cat}:15 "directory %s does not exist or is not writable\n" $tdir
  112.                 continue
  113.                 fi
  114.                 if [ "$cmd" = "a" ]
  115.                 then
  116.                 find . -depth -print | \
  117.                 grep -v '^\.$' >/tmp/$$uupick
  118.                 level=2
  119.                 else
  120.                 find $j -depth -print >/tmp/$$uupick
  121.                 level=1
  122.                 fi
  123.                 cpio -pdmu $tdir </tmp/$$uupick 
  124.                 for k in `cat /tmp/$$uupick`
  125.                 do
  126.                 varto="$tdir/$k"
  127.                 varfrom="$pu/$i/$k"
  128.                 if test -f $varfrom; then
  129.                     diff $varfrom $varto >/dev/null
  130.                     if [ "$?" = "0" ]; then
  131.                     rm -f $varfrom
  132.                     else
  133.                     pfmt -l $label -s warning -g ${cat}:16 "file %s not removed\n" $varform
  134.                     fi
  135.                 else
  136.                     rmdir $varfrom 2>/dev/null
  137.                 fi
  138.                 done
  139.                 rm -f /tmp/$$uupick
  140.                 break $level;; 
  141.             p)
  142.                 if test -d $j
  143.                 then find $j -print
  144.                 elif test -s $j 
  145.                 then cat $j
  146.                 fi;;
  147.             q)
  148.                 break 3;;
  149.             !*)
  150.                 ex=`expr "$cmd $dir" : '!\(.*\)'`
  151.                 tdir=`pwd`
  152.                 cd $cdir
  153.                 sh -c "$ex"
  154.                 cd $tdir
  155.                 echo '!';;
  156.             *)
  157.                 gettxt ${cat}:17 "Usage: [d][m dir][a dir][p][q]"
  158.                 gettxt ${cat}:18 "[cntl-d][!cmd][*][new-line]\n";;
  159.             esac
  160.             trap "pfmt -l $label -s error -g ${cat}:26 \"$sigmsg\" '<1>'; exit 29" 1
  161.             else
  162.             break 3
  163.             fi
  164.         done
  165.         done
  166.     fi
  167.     done
  168. fi
  169.