home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume1 / 8711 / 5 / pipe next >
Text File  |  1990-07-13  |  2KB  |  114 lines

  1. #!/bin/sh
  2.  
  3. #
  4. # pipe  --  multi-input, multi-output pipelining
  5. #
  6. #           Terry Jones 19/10/87 (tcjones@watdragon)
  7. #
  8. #-------------------------------------------------------------------------------
  9. #             Department Of Computer Science, University Of Waterloo
  10. #             Waterloo Ontario Canada N2L 3G1
  11. #
  12. #{ihnp4,allegra,decvax,utzoo,utcsri,clyde}!watmath!watdragon!tcjones
  13. #tcjones@dragon.waterloo.{cdn,edu} tcjones@WATER.bitnet
  14. #tcjones%watdragon@waterloo.csnet [from oz, tcjones@dragon.waterloo.cdn@munnari]
  15. #-------------------------------------------------------------------------------
  16. #
  17.  
  18. myname=`basename $0`
  19.  
  20. if [ $# -eq 0 ]
  21. then
  22.     while read line
  23.     do
  24.         echo $line
  25.     done
  26.     exit 1
  27. fi
  28.  
  29. def_shell=/bin/sh
  30.  
  31. if [ -z "$SHELL" ]
  32. then
  33.     echo No '$SHELL' variable set, using $def_shell
  34.     SHELL=$def_shell
  35. fi
  36.  
  37. cum_in=/tmp/${USER}_pipe_$$
  38.  
  39. if [ -f $cum_in -a ! -w $cum_in ]
  40. then
  41.     echo ${myname}: could not use temporary ${cum_in} - try again.
  42.     exit 1
  43. fi
  44.  
  45. >$cum_in
  46. tty=`tty`
  47. #echo rm $cum_in >> rmt
  48.  
  49. IN=1
  50. SOME_IN=0
  51. SOME_OUT=0
  52. ANY_OUT=0
  53. while [ -n "$1" ]
  54. do
  55.     case $1 in
  56.         -in|-i) 
  57.             IN=1
  58.             SOME_IN=0
  59.  
  60.             if [ "$SOME_OUT" = "0" ]
  61.             then
  62.                 SOME_OUT=1
  63.                 cat $cum_in
  64.             fi
  65.  
  66.             shift;;
  67.         -out|-o)
  68.             IN=0
  69.             SOME_OUT=0
  70.             ANY_OUT=1
  71.  
  72.             if [ "$SOME_IN" = "0" ]
  73.             then
  74.                 SOME_IN=1
  75.                 while read line
  76.                 do
  77.                     echo $line >> $cum_in
  78.                 done
  79.             fi
  80.             shift;;
  81.         *) 
  82.             if [ "$IN" = "1" ]
  83.             then
  84.                 SOME_IN=1
  85.                 if [ "$1" = "-" ]
  86.                 then
  87.                     while read line 
  88.                     do
  89.                         echo $line >> $cum_in
  90.                     done
  91.                 else
  92.                     echo $1 | $SHELL >> $cum_in
  93.                 fi
  94.             else
  95.                 SOME_OUT=1
  96.                 if [ "$1" = "-" ]
  97.                 then
  98.                     cat $cum_in
  99.                 else
  100.                     eval "cat $cum_in" "$1"
  101.                 fi
  102.             fi
  103.  
  104.             shift;;
  105.     esac
  106. done
  107.  
  108. if [ "$SOME_OUT" = "0" -o "$ANY_OUT" = "0" ]
  109. then
  110.     cat $cum_in
  111. fi
  112.  
  113. /bin/rm -f $cum_in
  114.