home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume30 / rc / part03 < prev    next >
Encoding:
Text File  |  1992-05-29  |  61.1 KB  |  1,835 lines

  1. Newsgroups: comp.sources.misc
  2. From: byron@archone.tamu.edu (Byron Rakitzis)
  3. Subject:  v30i026:  rc - A Plan 9 shell reimplementation, v1.4, Part03/07
  4. Message-ID: <1992May30.031635.5381@sparky.imd.sterling.com>
  5. X-Md4-Signature: 3348c5b9e8df1e60bbbc89f972374a56
  6. Date: Sat, 30 May 1992 03:16:35 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: byron@archone.tamu.edu (Byron Rakitzis)
  10. Posting-number: Volume 30, Issue 26
  11. Archive-name: rc/part03
  12. Environment: UNIX
  13. Supersedes: rc: Volume 23, Issue 61-66
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then feed it
  17. # into a shell via "sh file" or similar.  To overwrite existing files,
  18. # type "sh file -c".
  19. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  20. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  21. # Contents:  EXAMPLES.uu input.c plan9.ps.a
  22. # Wrapped by kent@sparky on Fri May 29 20:55:23 1992
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. echo If this archive is complete, you will see the following message:
  25. echo '          "shar: End of archive 3 (of 7)."'
  26. if test -f 'EXAMPLES.uu' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'EXAMPLES.uu'\"
  28. else
  29.   echo shar: Extracting \"'EXAMPLES.uu'\" \(22983 characters\)
  30.   sed "s/^X//" >'EXAMPLES.uu' <<'END_OF_FILE'
  31. Xbegin 644 EXAMPLES
  32. XM5&AE<F4@:7,@;F\@<F5P;W-I=&]R>2!F;W(@=7-E9G5L(')C(&-O9&4@<VYI
  33. XM<'!E=',@87,@>65T+"!S;R!))VT@:6YC;'5D:6YG"F$@*'-H;W)T*2!F:6QE
  34. XM(&EN('1H92!D:7-T<FEB=71I;VX@=VET:"!S;VUE(&AE;'!F=6PO:6YT<FEG
  35. XM=6EN9R!P:65C97,@;V8*<F,@8V]D92X*"D$@<V%M<&QE("YR8W)C"BTM+2TM
  36. XM+2TM+2TM+2TM"DAE<F4@:7,@=&AE("YR8W)C($D@=7-E(&]N(&%R8VAO;F4Z
  37. XM"@IU;6%S:R P,C(@"G!A=&@]*"]B:6X@+W5S<B]B:6X@+W5S<B]U8V(I"FAT
  38. XM/6 O=7-R+V%R8V@O8FEN+VAO<W1T>7!E"F@])&AO;64*:&ES=&]R>3TD:"\N
  39. XM:&ES=&]R>0IB:6X])&@O8FEN+R1H= IL:6(])&@O;&EB+R1H= IS:#TD:"]B
  40. XM:6XO<V@*:6YC;'5D93TD:"]L:6(O:6YC;'5D90H*<W=I=&-H("@D:'0I('L*
  41. XM8V%S92!S=6XJ"@E/0D523TX])RX@)R1H+V]T:&5R+V]B97)O;@H)<#TO=7-R
  42. XM+W5C8@H)8V]M<&EL97(])V=C8R M5V%L;" M3R M9R<*"4U!3E!!5$@])&@O
  43. XM;6%N.B]U<W(O87)C:"]M86XZ+W5S<B]M86X*"6EF("@A('X@)%1%4DT@*"DI
  44. XM('L*"0ES='1Y(&1E8PH)"2]U<W(O87)C:"]B:6XO;7-G<R M<0H)?0IC87-E
  45. XM(&YE>'0*"7 ]*"]U<W(O=6-B("]U<W(O8FEN("].97AT07!P<RD*"6-O;7!I
  46. XM;&5R/2=C8R M5V%L;" M3R M9R M1$Y/1$E214Y4)PH)34%.4$%42#TD:"]M
  47. XM86XZ+W5S<B]A<F-H+VUA;CHO=7-R+VUA;@H):68@*"$@?B D5$5232 H*2D*
  48. XM"0ES='1Y(&1E8PIC87-E('-G:0H)<#TH+W5S<B]U8V(@+W5S<B]S8FEN("]U
  49. XM<W(O8FEN*0H)8V]M<&EL97(])V=C8R M5V%L;" M3R M9R M1$Y/4TE'0TQ$
  50. XM)PH)34%.4$%42#TD:"]M86XZ+W5S<B]A<F-H+VUA;CHO=7-R+V-A=&UA;@H)
  51. XM:68@*"%[?B D5$5232 H*2!\?"!^("1415)-("II<FES*GTI"@D)<W1T>2!L
  52. XM:6YE(#$@:6YT<B G R<@97)A<V4@)W\G(&MI;&P@)Q4G"F-A<V4@*@H)96-H
  53. XM;R N<F-R8R!N;W0@8V]N9FEG=7)E9"!F;W(@=&AI<R!M86-H:6YE"GT*"G!A
  54. XM=&@]*"X@)'-H("1B:6X@+W5S<B]A<F-H+V)I;B D<" O8FEN("]U<W(O8FEN
  55. XM+U@Q,2 O971C("]U<W(O971C*0IC9'!A=&@]*"X@+BX@)&@@)&@O<W)C("1H
  56. XM+VUI<V,@)&@O;W1H97(@)&@O861M*0I23DE.250]+60D:"<@+70@+4T@+3(T
  57. XM,# M:" M,C0P,"MH9G)O;2<[($1/5$1)4CTD:"]M:7-C+VYE=W,*4%))3E1%
  58. XM4CUL=PH*9FX@<R!["@EE8VAO("1S=&%T=7,*?0IF;B!C9"!["@EB=6EL=&EN
  59. XM(&-D("0Q("8F(%P*"7-W:71C:" H)#$I('L*"6-A<V4@*"D*"0ED:7(])&AO
  60. XM;64*"6-A<V4@*@H)"61I<CTH*0H)?0I]"F9N('!W9"!["@EI9B H?B D9&ER
  61. XM("@I*0H)"61I<CU@+V)I;B]P=V0*"65C:&\@)&1I<@I]"F9N('@@>PH):68@
  62. XM*'X@8'1T>2 O9&5V+V-O;G-O;&4I"@D)8VQE87)?8V]L;W)M87 *"6-L96%R
  63. XM"@EE>&ET"GT*9FX@<"!["@EI9B H?B D:&ES=&]R>2 H*2D@>PH)"65C:&\@
  64. XM)R1H:7-T;W)Y(&YO="!S970G(#Y;,3TR70H)"7)E='5R;B Q"@E]"@H):68@
  65. XM*"$@?B D(RH@," Q(#(I('L*"0EE8VAO('5S86=E.B D," G6V5G<F5P('!A
  66. XM='1E<FY=(%MS960@8V]M;6%N9%TG(#Y;,3TR70H)"7)E='5R;B Q"@E]"@H)
  67. XM8V]M;6%N9#U@>PH)"65G<F5P("UV("=>6R )72IP*%L)(%TK?"0I)R D:&ES
  68. XM=&]R>2!\('-W:71C:" H)",J*2!["@D)8V%S92 P"@D)"6-A= H)"6-A<V4@
  69. XM,0H)"0EE9W)E<" D,0H)"6-A<V4@,@H)"0EE9W)E<" D,2!\('-E9" D,@H)
  70. XM"7T@?"!T86EL("TQ"@E]"@H)96-H;R D8V]M;6%N9 H)979A;" D8V]M;6%N
  71. XM9 I]"@II9B H?B D5$5232!D:6%L=7 @;F5T=V]R:RD@>PH)5$5233UV=#$P
  72. XM, H)8FEF9B!Y"GT*"D$@9G)O;G0M96YD('1O($YE6%0G<R B;W!E;F9I;&4B
  73. XM"BTM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM"@I.86UE9"!A9G1E
  74. XM<B!T:&4@<V%M(")"(B!C;VUM86YD(&9O<B!O<&5N:6YG(&$@9FEL92P@=&AI
  75. XM<R!S8W)I<'0@=V%S('=R:71T96X*8GD@4&%U;"!(86%H<BX@*$%S<W5M97,@
  76. XM=&AE(")P:6-K(B!C;VUM86YD(&9R;VT@2V5R;FEG:&%N(&%N9"!0:6ME(&ES
  77. XM(&%L<V\*:6X@>6]U<B!P871H+BD*"B,A+V)I;B]R8PII9B H?B D(RH@,"D*
  78. XM(" @(" @("!E>&5C(&]P96YF:6QE"F-R96%T92 ]("@I"F9I;&5S(#T@*"D*
  79. XM9F]R("AI(&EN("0J*0H@(" @(" @(&EF("AT97-T("UF("1I*2!["B @(" @
  80. XM(" @(" @(" @("!F:6QE<R ]("@D9FEL97,@)&DI"B @(" @(" @?2!E;'-E
  81. XM('L*(" @(" @(" @(" @(" @(&-R96%T92 ]("@D8W)E871E("1I*0H)?0IC
  82. XM<F5A=&4@/2!@>R!P:6-K("1C<F5A=&4@?0IF:6QE<R ]("@D9FEL97,@)&-R
  83. XM96%T92D*9F]R("AI(&EN("1C<F5A=&4I"B @(" @(" @/B D:0II9B H(2!^
  84. XM("0C9FEL97,@,"D*"6]P96YF:6QE("1F:6QE<PH*02!R96%D(&9U;F-T:6]N
  85. XM"BTM+2TM+2TM+2TM+2TM+0H*56YL:6ME('-H+"!R8R!D;V5S;B=T(&AA=F4@
  86. XM82!R96%D+B!4:&ES(&-L979E<B!A;'1E<FYA=&EV92!R971U<FYS(&%N"F5X
  87. XM:70@<W1A='5S(&%S('=E;&P@87,@9F5T8V@@82!V87)I86)L92X@57-E(&%S
  88. XM"@H)<F5A9"!F;V\*"G1O('-E=" D9F]O('1O(&$@<VEN9VQE(&QI;F4@9G)O
  89. XM;2!T:&4@=&5R;6EN86PN"@HH9'5E('1O($IO:&X@36%C:VEN(#QJ;VAN0'-Y
  90. XM9"YD:70N8W-I<F\N874^*0H*9FX@<F5A9"!["B @(" @(" @>#TH*2!["B @
  91. XM(" @(" @(" @(" @("!X(#T@8& @*"1N;"D@>R!A=VL@)WMP<FEN=#L@<')I
  92. XM;G0@,#L@97AI='TG(%X@)&YL(%X@7 H@(" @(" @(" @(" @(" @(" @(" @
  93. XM(" @(" @(" @(" @("=%3D0@>W!R:6YT(#$[('!R:6YT(#%])R!]"B @(" @
  94. XM(" @(" @(" @(" D,2 ]("1X*#$I"B @(" @(" @(" @(" @("!R971U<FX@
  95. XM)'@H,BD*(" @(" @("!]"GT*"D9R;VT@8W,N=VES8RYE9'4A9'=S($9R:2!!
  96. XM=6<@(#(@,3@Z,38Z,30@,3DY,0H*(RTM+2TM+2T*(R!L<R!F<F]N="!E;F0*
  97. XM(RTM+2TM+2T*9FX@;',)7 I["@ET97-T("UT(#$@)B8@*B ]("@M1D-B("0J
  98. XM*0H)8G5I;'1I;B!L<R D*@I]"B,M+2TM+2TM"B,@;FP@+2!H;VQD<R!A(&YE
  99. XM=VQI;F4L('5S969U;"!I;B!C97)T86EN(&-O;6UA;F0@<W5B<W1I='5T:6]N
  100. XM<PHC+2TM+2TM+0IN;#TG"B<*(RTM+2TM+2T*(R!S:&]W("T@=&5L;"!M92!A
  101. XM8F]U="!A(&YA;64*(PHC(%)U;G,@<&]S<VEB;'D@9&%N9V5R;W5S('1H:6YG
  102. XM<R!T:')O=6=H(&-A=" M=B!I;B!O<F1E<B!T;R!P<F]T96-T"B,@;64@9G)O
  103. XM;2!T:&4@969F96-T<R!O9B!C;VYT<F]L(&-H87)A8W1E<G,@22!M:6=H="!H
  104. XM879E(&EN('1H90HC(&5N=FER;VYM96YT+@HC+2TM+2TM+0IF;B!S:&]W"5P*
  105. XM>PH)*B ](&!@("1N;"![=VAA=&ES("TM("0J?0H)9F]R*&ET:7,I"@E["@D)
  106. XM<W=I=&-H*"1>:71I<RD*"0E["@D)8V%S92 G9FX@)RH).R!E8VAO("1I=&ES
  107. XM('P@8V%T("UV("UT"@D)8V%S92!B=6EL=&EN*@D[(&5C:&\@)&ET:7,*"0EC
  108. XM87-E("\J"0D[(&9I;&4@)&ET:7,[(&QS("UL9" D:71I<PH)"6-A<V4@*B<]
  109. XM)RH).R!E8VAO("1I=&ES('P@8V%T("UV("UT"@D)8V%S92 J"0D[(&5C:&\@
  110. XM)&ET:7,Z(%5.2TY/5TXZ('5P9&%T92!S:&]W"@D)?0H)?0H):71I<R ]("@I
  111. XM"GT*(RTM+2TM+2T*(R!496QL(&UE(&%U=&]M871I8V%L;'D@=VAE;B!A(&-O
  112. XM;6UA;F0@:&%S(&$@;F]N>F5R;R!S=&%T=7,N"B,M+2TM+2TM"F9N('!R;VUP
  113. XM= E<"GL*"5-T871U<R ]("1S=&%T=7,*"7X@)%-T871U<R P('Q\(&5C:&\@
  114. XM)UMS=&%T=7,@)R13=&%T=7,G72<*?0H*(RTM+2TM+2T*(R!C:&]P("T@96-H
  115. XM;R!T:&4@9VEV96X@;&ES="P@;&5S<R!I=',@9FEN86P@;65M8F5R"B,*(R!E
  116. XM+F<N(&-H;W @*&$@8B!C*2 M/B H82!B*0HC+2TM+2TM+0IF;B!C:&]P('L*
  117. XM"7X@)",J(# @,2 F)B!R971U<FX@, H)86YS(#T@)R<@>PDC(&QO8V%L('9A
  118. XM<FEA8FQE"@D)86YS(#T@*"D*"0EW:&EL92@A('X@)",J(#$I"@D)>PH)"0EA
  119. XM;G,@/2 H)&%N<R D,2D*"0D)<VAI9G0*"0E]"@D)96-H;R D86YS"@E]"GT*
  120. XM"D9R;VT@87)N;VQD0&%U9&EO9F%X+F-O;2!4:'4@36%Y(#,P(# X.C0Y.C4Q
  121. XM(#$Y.3$*"B,@8V0N<F,@+2TM('-O=7!E9"!U<"!V97)S:6]N(&]F(&-D"@HC
  122. XM('1H:7,@:7,@9&5S:6=N960@=&\@96UU;&%T92!T:&4@9F%N8WD@=F5R<VEO
  123. XM;B!O9B!C9"!I;B!K<V@L"B,@<V\@:68@>6]U)W)E(&$@<'5R:7-T+"!F965L
  124. XM(&9R964@=&\@9V%G"@I?8W=D/21H;VUE"E]O;&1C=V0])&AO;64*"F9N(&-D
  125. XM('L*"6EF("A^("0C*B P*2!["@D):68@*'X@)%]C=V0@)&AO;64I('L)(R!D
  126. XM;R!N;W1H:6YG"@D)?2!E;'-E('L*"0D)8G5I;'1I;B!C9" F)B![(%]O;&1C
  127. XM=V0])%]C=V0@.R!?8W=D/21H;VUE('T*"0E]"@E](&5L<V4@:68@*'X@)",J
  128. XM(#$I('L*"0EI9B H?B D,2 M*2!["@D)"5]T/21?8W=D"@D)"6)U:6QT:6X@
  129. XM8V0@)%]O;&1C=V0@)B8@>PH)"0D)7V-W9#TD7V]L9&-W9 H)"0D)7V]L9&-W
  130. XM9#TD7W0*"0D)"65C:&\@)%]C=V0*"0D)?0H)"0E?=#TH*0H)"7T@96QS92![
  131. XM"@D)"2,@:68@82!C9"!H87!P96YS('1H<F]U9V@@=&AE(&-D<&%T:"P@<F,@
  132. XM96-H;W,*"0D)(R!T:&4@9&ER96-T;W)Y(&]N(&ET<R!O=VXN("!A;&P@=V4@
  133. XM:&%V92!T;R!D;PH)"0DC(&ES('1R86-K('=H97)E('=E(&5N9"!U< H)"0E?
  134. XM9&]P=V0@/2 Q"@D)"7L@?B D,2 O*B!]("8F(%]D;W!W9" ](# )(R!A8G-O
  135. XM;'5T92!P871H"@D)"6)U:6QT:6X@8V0@)#$@)B8@>PH)"0D)7V]L9&-W9#TD
  136. XM7V-W9 H)"0D)7V-W9#TD,0H)"0D)>R!^("1?9&]P=V0@,2!]("8F(%]C=V0]
  137. XM8"]B:6XO<'=D"@D)"7T*"0D)7V1O<'=D/2@I"@D)?0H)?2!E;'-E(&EF("A^
  138. XM("0C*B R*2!["@D)7W0]8'L@96-H;R D7V-W9"!\('-E9" G<SPG)#$G/"<D
  139. XM,B<\)R!]"@D)8G5I;'1I;B!C9" D7W0@)B8@>PH)"0E?;VQD8W=D/21?8W=D
  140. XM"@D)"5]C=V0])%]T"@D)"65C:&\@)%]C=V0*"0E]"@D)7W0]*"D*"7T@96QS
  141. XM92!["@D)96-H;R!C9#H@=&%K97,@,"P@,2P@;W(@,B!A<F=U;65N=',@/ELQ
  142. XM/3)="@D)8G5I;'1I;B!C9" D,2 F)B![(%]O;&1C=V0])%]C=V0@.R!?8W=D
  143. XM/6 O8FEN+W!W9" [(&5C:&\@)%]C=V0@?0H)?0I]"@IF;B!P=V0@>R!E8VAO
  144. XM("1?8W=D('T*"D9R;VT@=FQS:2YC<RYC86QT96-H+F5D=2%D<F%Z96X@5'5E
  145. XM($IA;B R,2 Q-CHP,SHQ-" Q.3DR"@HC($$@:VEL;"!B=6EL=&EN+@H*(VEF
  146. XM9&5F($)?2TE,3 HC:6YC;'5D92 \8W1Y<&4N:#X*<W1A=&EC('9O:60@8E]K
  147. XM:6QL*&-H87(@*BIA=BD*>PH@(" @:6YT('-I9VYA;" ](%-)1U1%4DT["B @
  148. XM("!I;G0@;B ](#$["B @("!P:61?="!P:60["B @("!B;V]L96%N(')E<SL*
  149. XM"B @("!I9B H(6%V6S%=*2!["B @(" @(" @<V5T*%12544I.PH@(" @(" @
  150. XM(')E='5R;CL*(" @('T*(W5N9&5F("!35%)#35 *(V1E9FEN92!35%)#35 @
  151. XM<W1R8VUP"B @("!I9B H("<M)R ]/2!A=ELQ75LP72D@>PH@(" @(" @(&-H
  152. XM87(@*G @/2 Q*V%V6S%=.PH@(" @(" @(&EF("@P(#T]('-T<F-M<"AA=ELQ
  153. XM72P@(BUL(BDI>PH@(" @(" @(" @("!I;G0@<CL@8V]N<W0@:6YT(&YS:6<@
  154. XM/2!.54U/1E-)1TY!3%,["B @(" @(" @(" @(&-O;G-T(&EN="!#(#T@-"P@
  155. XM4B ](#$@*R H:6YT*2@H;G-I9RTR*2]#*3L*(" @(" @(" @(" @9F]R("AR
  156. XM/3$[('(\/5([('(K*RE["B @(" @(" @(" @(" @:6YT(&H["B @(" @(" @
  157. XM(" @(" @9F]R("AJ/7([(&H\;G-I9SL@:BL]4BE["B @(" @(" @(" @(" @
  158. XM("!F<')I;G0H,2P@(B5S)60N("5S7'0B+"!J/#$P/R(@(CHB(BP@:BP@<VEG
  159. XM;F%L<UMJ75LP72D["B @(" @(" @(" @(" @?0H@(" @(" @(" @(" @(&9P
  160. XM<FEN="@Q+")<;B(I.PH@(" @(" @(" @("!]"B @(" @(" @(" @('-E="A4
  161. XM4E5%*3L*(" @(" @(" @(" @<F5T=7)N.PH@(" @(" @('T*(" @(" @("!N
  162. XM*RL["B @(" @(" @:68@*" H<VEG;F%L/6$R=2AP*2D@/" P*7L*(" @(" @
  163. XM(" @(" @:6YT(&D["B @(" @(" @(" @(&9O<B H:2 ](#$[(&D@/"!.54U/
  164. XM1E-)1TY!3%,[(&DK*RE["B @(" @(" @(" @(" @("!C:&%R(%504$526S,Q
  165. XM72P@*G4]55!015(L("IQ.PH@(" @(" @(" @(" @(" @9F]R("AQ/7-I9VYA
  166. XM;'-;:5U;,%T[("IQ.R!Q*RLL('4K*RD@*G4@/2!T;W5P<&5R*"IQ*3L*(" @
  167. XM(" @(" @(" @(" @("IU(#T@)UPP)SL*"B @(" @(" @(" @(" @("!I9B H
  168. XM*G-I9VYA;'-;:5U;,%T@)B8*(" @(" @(" @(" @(" @(" @*"%35%)#35 H
  169. XM<VEG;F%L<UMI75LP72P@<"D@?'P@(5-44D--4"@S*W-I9VYA;'-;:5U;,%TL
  170. XM<"D*(" @(" @(" @(" @(" @(" @('Q\("%35%)#35 H55!015(L(' I('Q\
  171. XM("%35%)#35 H,RM54%!%4BP@<"D@*2 @*0H@(" @(" @(" @(" @(" @>PH@
  172. XM(" @(" @(" @(" @(" @(" @('-I9VYA;" ](&D["B @(" @(" @(" @(" @
  173. XM(" @(" @8G)E86L["B @(" @(" @(" @(" @("!]"B @(" @(" @(" @('T*
  174. XM(" @(" @(" @(" @:68@*'-I9VYA;" \(# I>PH@(" @(" @(" @(" @(" @
  175. XM9G!R:6YT*#(L(FMI;&PZ(&)A9"!S:6=N86P@)7-<;B(L(&%V6S%=*3L*(" @
  176. XM(" @(" @(" @(" @('-E="A&04Q312D["B @(" @(" @(" @(" @("!R971U
  177. XM<FX["B @(" @(" @(" @('T*(" @(" @("!]"B @("!]"B-U;F1E9B!35%)#
  178. XM35 *"B @("!F;W(@*')E<SU44E5%.R!A=EMN73L@;BLK*7L*(" @(" @("!I
  179. XM9B@@*'!I9" ]("AP:61?="D@83)U*&%V6VY=*2D@/" P*7L*(" @(" @(" @
  180. XM(" @9G!R:6YT*#(L(")K:6QL.B!B860@<')O8V5S<R!N=6UB97(@)7-<;B(L
  181. XM(&%V6VY=*3L*(" @(" @(" @(" @<F5S(#T@1D%,4T4["B @(" @(" @(" @
  182. XM(&-O;G1I;G5E.PH@(" @(" @('T*(" @(" @("!I9B H:VEL;"AP:60L<VEG
  183. XM;F%L*2E["B @(" @(" @(" @('5E<G)O<B@B:VEL;"(I.PH@(" @(" @(" @
  184. XM("!R97,@/2!&04Q313L*(" @(" @(" @(" @8V]N=&EN=64["B @(" @(" @
  185. XM?0H@(" @?0H@(" @<V5T*')E<RD["GT*(V5N9&EF"D9R;VT@86-C+G-T;VQA
  186. XM9BYE9'4A<75A;G-T<F\@5&AU($%P<B @,B P,CHU,3HQ," Q.3DR"E)E8V5I
  187. XM=F5D.B!F<F]M('1H;W(N86-C+G-T;VQA9BYE9'4@*%LQ,S N-S$N,3DR+C%=
  188. XM*2!B>2!A<F-H;VYE+G1A;74N961U('=I=&@@4TU44"!I9" \-#4S,SD^.R!4
  189. XM:'4L(#(@07!R(#$Y.3(@,#(Z-3 Z-38@+3 V,# *4F5C96EV960Z(&)Y('1H
  190. XM;W(N86-C+G-T;VQA9BYE9'4[(%1H=2P@,B!!<'(@.3(@,#(Z-#DZ,S$@+3 V
  191. XM,# *1&%T93H@5&AU+" R($%P<B Q.3DR(# R.C0Y.C,Q("TP-C P"D9R;VTZ
  192. XM('%U86YS=')O0&%C8RYS=&]L868N961U"DUE<W-A9V4M260Z(#PY,C T,#(P
  193. XM.#0Y+D%!,C8U-C9 =&AO<BYA8V,N<W1O;&%F+F5D=3X*5&\Z(&)Y<F]N0&%R
  194. XM8VAO;F4N=&%M=2YE9'4*4W5B:F5C=#H@15A!35!,15,@:6X@,2XT8F5T80I3
  195. XM=&%T=7,Z(%)/"@H*22!H879E(&$@;&ET=&QE(&)I="!O9B!C;V1E('=H:6-H
  196. XM(&UI9VAT(&)E(&$@;&ET=&QE(&UO<F4@9V5N97)A;"!T:&%N"G1H92!S;W5P
  197. XM960M=7 @=F5R<VEO;B!T:&%T(&ES(&%L<F5A9'D@=&AE<F4N($AE<F4@:70@
  198. XM:7,L(&EF('EO=2!A<F4*:6YT97)E<W1E9"X@"@HC(&1I<F5C=&]R>2!F=6YC
  199. XM=&EO;G,@(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
  200. XM(R,C(R,C(R,C(R,C"F9N('!W9"![(&5C:&\@)%!71#L@?0H*9FX@<'5S:&0@
  201. XM>PH@(&1I<G,@/2 H)%!71" D9&ER<RD["0D*("!B=6EL=&EN(&-D("0J.PH@
  202. XM(%!71" ](&![8G5I;'1I;B!P=V1].PI]"@IF;B!P;W!D('L*("!S=VET8V@@
  203. XM*"0C*BD*(" @('L*(" @(&-A<V4@, H@(" @(" ["B @("!C87-E(#$*(" @
  204. XM(" @96-H;R G<&]P9#H@87)G=6UE;G0@)UXD,5XG(&EG;F]R960N)R ^6S$]
  205. XM,ET["B @("!C87-E("H*(" @(" @96-H;R G<&]P9#H@=7-A9V4Z('!O<&0@
  206. XM6VY=+B<["B @("!]"@H@(&EF("@A('X@)&1I<G,@*"DI( H@(" @>PH@(" @
  207. XM("!B=6EL=&EN(&-D("1D:7)S*#$I.PH@(" @("!05T0@/2 D9&ER<R@Q*3L*
  208. XM(" @(" @96-H;R D4%=$.PH@(" @(" J(#T@)&1I<G,["B @(" @('-H:69T
  209. XM"B @(" @(&1I<G,@/2 D*CL*(" @('T*?0H*9FX@8V0@>PH@('X@)"H@*"D@
  210. XM)B8@*B ]("1H;VUE.PH@("%^("0C*B Q("8F(&5C:&\@)V-D.B!T;V\@;6%N
  211. XM>2!A<F=U;65N=',G(#Y;,3TR72 F)B!R971U<FX@,3L*"B @:68@*'1E<W0@
  212. XM+7(@)"H@*2!["B @("!P=7-H9" D*CL*("!](&5L<V4@>PH@(" @96-H;R!C
  213. XM9#H@)"H@9&]E<R!N;W0@97AI<W0N(#Y;,3TR70H@(" @<F5T=7)N(#$["B @
  214. XM?2 *?0H*9FX@8F%C:R![('!O<&0@)"H[('T*"F9N($)A8VL@>R *("!C9" D
  215. XM:&]M93L*("!05T0@/2 D:&]M93L*("!D:7)S(#T@*"D["GT*"F9N(&1I<G,@
  216. XM>PH@(&5C:&\@)&1I<G,["GT*"E!71" ](&![8G5I;'1I;B!P=V1](#L@9&ER
  217. XM<R ]("105T0)"2,@:VEC:W-T87)T"@H*"@H*1G)O;2!A8V,N<W1O;&%F+F5D
  218. XM=2%Q=6%N<W1R;R!4:'4@07!R(" R(# R.C4S.C0P(#$Y.3(*4F5C96EV960Z
  219. XM(&9R;VT@=&AO<BYA8V,N<W1O;&%F+F5D=2 H6S$S,"XW,2XQ.3(N,5TI(&)Y
  220. XM(&%R8VAO;F4N=&%M=2YE9'4@=VET:"!33510(&ED(#PT-3,S.3X[(%1H=2P@
  221. XM,B!!<'(@,3DY,B P,CHU,SHS." M,#8P, I296-E:79E9#H@8GD@=&AO<BYA
  222. XM8V,N<W1O;&%F+F5D=3L@5&AU+" R($%P<B Y,B P,CHU,3HT-B M,#8P, I$
  223. XM871E.B!4:'4L(#(@07!R(#$Y.3(@,#(Z-3$Z-#8@+3 V,# *1G)O;3H@<75A
  224. XM;G-T<F] 86-C+G-T;VQA9BYE9'4*365S<V%G92U)9#H@/#DR,#0P,C X-3$N
  225. XM04$R-C4W,T!T:&]R+F%C8RYS=&]L868N961U/@I4;SH@8GER;VY 87)C:&]N
  226. XM92YT86UU+F5D=0I3=6)J96-T.B!%6$%-4$Q%4PI3=&%T=7,Z(%)/"@H*3&ET
  227. XM=&QE('EP(&AA8VL@=VAI8V@@86-T)W,@;&EK92!^('<O;R!S>6YT871I8R!S
  228. XM=6=A<B H9F]R('1H;W-E('=H;R!D;PIN;W0@:&%V92!T:&4@;'5X=7)Y(&]F
  229. XM('-E=&EN9R!U<"!S>6UB;VQI8R!L:6YK<R!T;R!A;&P@=7-E<B=S(&AO;65S
  230. XM"@HC('5S97(@9G5N8W1I;VX@(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
  231. XM(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C"F9N('4@=7-E<B![(" *
  232. XM("!I;F9O(#T@*"D*("!I;F9O(#T@8& @*"<Z)RD@>WEP;6%T8V@@)#$@<&%S
  233. XM<W=D(#Y;,ET@+V1E=B]N=6QL('T*"B @:68@*'X@)&EN9F\@*"DI('L*(" @
  234. XM(&5C:&\@=7-E<B D,2!U;FMN;W=N(#Y;,3TR73L*(" @(')E='5R;B Q.PH@
  235. XM('T@96QS92!["B @("!E8VAO("1I;F9O*#8I"B @("!I9B H?B D,"!U<V5R
  236. XM*2 *(" @(" @8V0@)&EN9F\H-BD*("!]"GT*"@I&<F]M('-T;VQA9BYE9'4A
  237. XM<75A;G-T<F\@4W5N($%P<B @-2 P-#HU,SHS-" Q.3DR"D1A=&4Z(%-U;BP@
  238. XM-2!!<'(@,3DY,B P-#HU,SHP." M,#4P, I&<F]M.B!Q=6%N<W1R;T!S=&]L
  239. XM868N961U("A%<FEK(%%U86YS=')O;2D*5&\Z(&)Y<F]N0&%R8VAO;F4N=&%M
  240. XM=2YE9'4*4W5B:F5C=#H@;6%N('=R:71T96X@:6X@<F,@"E-T871U<SH@4D\*
  241. XM"DD@=VAI<'!E9"!T:&ES('5P(&)E8V%U<V4@=&AE($YE6%1S(&AE<F4@:6YS
  242. XM:7-T(&]N('5S:6YG($U!3E!!1T52"FEN<W1E860@;V8@4$%'15(@86YD(&]T
  243. XM:&5R=VES92!B96EN9R!O8FYO>&EO=7,@+B N("X@"@I!;GEW87D@+BXN($D@
  244. XM:&]P92!Y;W4@87!P<F]V90H*(R$O8FEN+W)C"B,C(R,C(R,C(R,C(R,C(R,C
  245. XM(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
  246. XM(R,C(R,C(R,C(R,*(R!F:6QE.@D);6%N"0D)"0D)"2,*(PD)"0D)"0D)"2,*
  247. XM(R!O8FIE8W0Z"61I<W!L87D@;6%N('!A9V5S"0D)"0DC"B,)"0D)"0D)"0DC
  248. XM"B,@8G5G<SH)"2H@<VQO=PD)"0D)"0DC"B,)"2H@9&]E<R!N;W0@:VYO=R!A
  249. XM8F]U="!F;70@9FEL97,)"0D)(PHC"0D)"0D)"0D)(PHC($5R:6L@475A;G-T
  250. XM<F]M"0D)"0D)"2,*(R Q,2X@1F5B<G5A<B Q.3DR"0D)"0D)"2,*(R,C(R,C
  251. XM(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
  252. XM(R,C(R,C(R,C(R,C(R,C(R,C(R,C(PI0051(/2]B:6XZ+W5S<B]B:6XZ+W5S
  253. XM<B]U8V(Z+W5S<B]L;V-A;"]B:6XZ)%!!5$@@.R *5%)/1D8@/2 H;G)O9F8@
  254. XM+6AQ("U48W)T*3L*;6%C<F]S/6%N.PIS96-T:6]N<STH8V%T,2!C870R(&-A
  255. XM=#,@8V%T-"!C870U(&-A=#8@8V%T-R!C870X(&-A=&P@;6%N,2!M86XR(&UA
  256. XM;C,@;6%N-"!<"@D@(&UA;C4@;6%N-B!M86XW(&UA;C@@;6%N;"D*)&YL/2<*
  257. XM)PIF;B!S:6=I;G0@<VEG:'5P('-I9W%U:70@<VEG86QR;2!S:6=T97)M('L@
  258. XM<FT@+68@)$)A=#L@97AI=" R.WT*(" *9FX@=7-A9V4@>PH@(&5C:&\@=7-A
  259. XM9V4Z("0P(%LM72!;+71=(%LM32!P871H72!;+50@;6%C<F]S72!;6W-E8W1I
  260. XM;VY=('1I=&QE72 N+BX^6S$],ET["B @97AI=" Q.PI]"@IN/2@I.PIF;B!S
  261. XM:&EF=&X@>PH@(&X]*"1N(#$I"GT*"GX@)%!!1T52("@I("8F('1E<W0@+70@
  262. XM,2 F)B!004=%4CUM;W)E.R C9&5F875L="!P86=E<@H@(" @( IW:&EL92 H
  263. XM?B D,2 M*BD*("![( H@(" @<W=I=&-H("@D,2D*(" @(" @>PH@(" @("!C
  264. XM87-E("T*"6EF("A^("1004=%4B!T<F]F9BD*"2 @96-H;R!B860@8V]M8FEN
  265. XM871I;VX@;V8@9FQA9W,@/ELQ/3)=("8F('5S86=E.PH)4$%'15(]8V%T.PH@
  266. XM(" @("!C87-E("UT"@E^(%123T9&("@I("8F(%123T9&(#T@*'1R;V9F("UT
  267. XM*3L*"7X@5$-!5" @*"D@)B8@4$%'15(]*&QP<B M="D["B @(" @(&-A<V4@
  268. XM+4T*"7-H:69T.PH)?B D,2 H*2 F)B!U<V%G93L*"0H)34%.4$%42#TD,3L*
  269. XM(" @(" @8V%S92 M5 H)<VAI9G0["@E^("0Q("@I("8F('5S86=E.PH);6%C
  270. XM<F]S/20Q.PH@(" @("!C87-E("UK"@EF9FQA9STH*3L@:V9L86<],3L*(" @
  271. XM(" @("!S:&EF=#L*(" @(" @("!B<F5A:SL*(" @(" @8V%S92 M9@H)(R!L
  272. XM;V-A=&4@<F5L871E9"!T;V\@9FEL96YA;65S"@EK9FQA9STH*3L@9F9L86<]
  273. XM,3L*(" @(" @("!S:&EF=#L*(" @(" @("!B<F5A:SL*(" @(" @8V%S92 M
  274. XM*@H)96-H;R!B860@9FQA9R G8"=>)#%>)R<G)R ^6S$],ET["@EU<V%G93L*
  275. XM(" @(" @?0H@(" @<VAI9G0["B @?0H*:68@*"%^("0C*B Q*2!["B @?B D
  276. XM,2!;;#$M.%T@)B8@>R!S;F%M93TD,2 [('-E8W1I;VYS/2AC870@;6%N*5XD
  277. XM,2 [('-H:69T('T*(" C:&%C:R!F;W(@<W5N+7-T>6QE(&UA;B!P86=E<PH@
  278. XM('X@)#$@6VPQ+3A=/R F)B![('-N86UE/20Q(#L@<V5C=&EO;G,]*&-A="!M
  279. XM86XI7F![96-H;R D,7P@8W5T("UC,7T@.R!S:&EF="!]"GT*"FEF("A^(#$@
  280. XM)&9F;&%G("1K9FQA9RD@>PH@(&1I<FQI<W0]*"D["B @9F]R("AD(&EN(&!@
  281. XM*#HD;FPI('ME8VAO("1-04Y0051(?2D*(" @('1E<W0@+7,@)&1>+W=H871I
  282. XM<R F)B!D:7)L:7-T/2@D9&ER;&ES=" D9%XO=VAA=&ES*3L*(" *("!^("0Q
  283. XM("@I("8F('5S86=E.PH@( H@(&EF("A^("1F9FQA9R Q*2![( H@(" @=VAI
  284. XM;&4@*"%^("0Q("@I*2!["B @(" @(&-M9#U@>V5C:&\@)#$@?"!S960@)W,O
  285. XM7BXJ7"\O+V<G?0H@(" @("!E9W)E<" M:" G7B=>)&-M9"<@)R D9&ER;&ES
  286. XM=#L*(" @(" @<VAI9G0["B @("!]"B @?2!E;'-E('L*(" @('=H:6QE("@A
  287. XM?B D,2 H*2D@>PH@(" @("!G<F5P("UH("0Q("1D:7)L:7-T.PH@(" @("!S
  288. XM:&EF=#L*(" @('T*("!]"B!E>&ET(# ["GT*"G,],#L)( IW:&EL92 H(7X@
  289. XM)#$@*"DI('L*("!F;W(@*&1I<B!I;B!@8"@Z)&YL*2![96-H;R D34%.4$%4
  290. XM2'TI('L*(" @(&9I;&5L:7-T/2@D9FEL96QI<W0@8'ME8VAO("1D:7(O7B1S
  291. XM96-T:6]N<UXO)#%>+BH@?%P*"0D)(" @('1R("<@)R G7#$R)R!\(&=R97 @
  292. XM+78@)RHG?2D*"B @(" C(&-O;65N="!T:&ES(&]U="!I9B!Y;W4@9&]N)W0@
  293. XM8V%R92!A8F]U="!S<&5E9"P@8G5T( H@(" @(R!W;W5L9"!R871H97(@9FEN
  294. XM9"!A;&P@=&AE('!A9V5S+@H@(" @?B D9FEL96QI<W0@*"D@?'P@8G)E86L[
  295. XM"B @?0H*("!I9B H?B D9FEL96QI<W0@*"DI('L*(" @(&EF("A^("0C<V5C
  296. XM=&EO;G,@,BD@>PH@(" @("!E8VAO(&YO(&5N=')Y(&9O<B D,2!I;B!S96-T
  297. XM:6]N("=@)R1S;F%M92<G)R<@;V8@=&AE(&UA;G5A;" ^6S$],ET["B @("!]
  298. XM(&5L<V4@>PH@(" @("!E8VAO(&YO(&5N=')Y(&9O<B G8"<D,2<G)R<@9F]U
  299. XM;F0N(#Y;,3TR73L*(" @('T*(" @(',],3L*("!](&5L<V4@>PH*(" @(&5C
  300. XM:&\@)&9I;&5L:7-T("<H)R D(V9I;&5L:7-T("<I)R ^6S$],ET["@H@(" @
  301. XM9F]R("AF:6QE(&EN("1F:6QE;&ES="D@>PH@(" @("!I9B H?B D9FEL92 J
  302. XM+V-A=%LQ+3AL72\J*2!["@E#870@/2 H)$-A=" D9FEL92D["B @(" @('T@
  303. XM96QS92!["@DC('-E87)C:"!F;W(@9'5P<PH)9&]N=#TH*0H)9F]R("AX(&EN
  304. XM("1#870I('L*"2 @:68@*'X@8'ME8VAO("1X('P@('-E9" G<R]<+UMM8UUA
  305. XM6VYT75LQ+3AL72\O)WT@7 H)(" @(" @("!@>V5C:&\@)&9I;&4@?" @<V5D
  306. XM("=S+UPO6VUC76%;;G1=6S$M.&Q=+R\G?2D@>PH)(" @(&1O;G0],3L*"2 @
  307. XM("!B<F5A:SL*"2 @?0H)?0H*"6EF("A^("1D;VYT("@I*2!["@D@(&-D(&![
  308. XM96-H;R D9FEL92!\('-E9" G<R]M86Y;,2TX72XJ+R\G?0H)("!E8VAO("UN
  309. XM($9O<FUA='1I;F<@+BXN"@D@("144D]&1B M;5XD;6%C<F]S("1F:6QE(#X@
  310. XM+W1M<"]M86Y>)'!I9%XD(VX@)B8@7 H)"4)A=" ]("@D0F%T("]T;7 O;6%N
  311. XM7B1P:61>)"-N*0H*"2 @<VAI9G1N.PH)("!E8VAO("<@)V1O;F4N"@E]"B @
  312. XM(" @('T*(" @('T*("!]( H@('-H:69T.PI]"@I[("%^("@I("1#870@?'P@
  313. XM(7X@*"D@)$)A="!]("8F("1004=%4B D0V%T("1"870["@IR;2 M9B D0F%T
  314. XM.PI^("1S("@I('Q\(&5X:70@)',["B @(" @"F5X:70@,#L*"@H*1G)O;2!O
  315. XM<V8N;W)G(7)S86QZ(%1H=2!!<'(@,C,@,38Z,C(Z,S(@,3DY,@I$871E.B!4
  316. XM:'4L(#(S($%P<B Q.3DR(#$V.C(R.C W("TP-3 P"D9R;VTZ(')S86QZ0&]S
  317. XM9BYO<F<*5&\Z(&)Y<F]N0&%R8VAO;F4N=&%M=2YE9'4*4W5B:F5C=#H@3VYE
  318. XM(&9O<B!Y;W5R($5804U03$53(&9I;&4*4W1A='5S.B!23PH*57-E"@ET<FEM
  319. XM:&ES="!;+2-L:6YE<UT*=')I;7,@>6]U<B!H:7-T;W)Y(&9I;&4@8F%C:SL@
  320. XM=7-E9G5L(&9O<B!F;VQK<R!W:71H(&1I<R!Q=6]T82=S(#HM*0IF;B!T<FEM
  321. XM:&ES="![(' Q/2TQ,# @>PH@(" @8W @)&AI<W1O<GD@)&AI<W1O<GE>)WXG
  322. XM"B @("!^("0C*B Q("8F(' Q/20Q"B @("!T86EL("1P,2 \)&AI<W1O<GE>
  323. XM)WXG(#XD:&ES=&]R>0H@(" @<FT@)&AI<W1O<GE>)WXG"GT@?0H*1G)O;2!0
  324. XM82YD96,N8V]M(75U8W @36]N($%P<B R-R Q,CHR-3HP,B Q.3DR"D1A=&4Z
  325. XM($UO;BP@,C<@07!R(#$Y.3(@,3(Z,34Z,3@@+3 U,# *1G)O;3H@:&%A:') 
  326. XM861O8F4N8V]M"E1O.B!">7)O;B!286MI='II<R \8GER;VY 87)C:&]N92YT
  327. XM86UU+F5D=3X*4W5B:F5C=#H@82!N96%T(&QI='1L92!R8R!S8W)I<'0*"G=H
  328. XM870@>6]U(&AA=F4@=&\@:VYO=R!T;R!U;F1E<G-T86YD('1H:7,Z"@DD;60@
  329. XM9F]R(&UE(&ES('5S=6%L;'D@;V)J+B1M86-H:6YE"@EM>2!M:V9I;&5S(&)U
  330. XM:6QD("HN;RP@*BYA+"!A;F0@=&AE(&$N;W5T<R!I;B D;60*"71H:7,@:7,@
  331. XM;7D@86-C('-C<FEP="P@=VAI8V@@:2!U<V4@9F]R(&-O;7!I;&EN9R!A9&]B
  332. XM92!R;W5T:6YE<PHM+2T*(R$@+W5S97(O:&%A:'(O8FEN+VYE>'0O<F,*"F-C
  333. XM(#T@8V,*<')O=&\@/2 G+4104D]43U194$53/3$G"@IS=VET8V@@*"1M9"D@
  334. XM>PIC87-E(&YO<')O=&\N)&UA8VAI;F4["7!R;W1O(#T@)RU$4%)/5$]465!%
  335. XM4STP)PIC87-E(&=P<F]F+B1M86-H:6YE.PEC8R ]("@D8V,@+7!G*0IC87-E
  336. XM('!R;V8N)&UA8VAI;F4["6-C(#T@*"1C8R M<"D*8V%S92!L8V]M<"XD;6%C
  337. XM:&EN93L)8V,@/2!L8V]M< I]"F5X96,@)&-C("1P<F]T;R G+41004-+04=%
  338. XM7U-014-3/2)P86-K86=E+F@B)R G+41)4U ]:7-P7VUC-C@P,C G("<M1$]3
  339. XM/6]S7VUA8V@G("0J"@I&<F]M(')C+6]W;F5R(%1U92!-87D@,3(@,30Z-30Z
  340. XM,3 @,3DY,@I296-E:79E9#H@9G)O;2!P;W-T;6%N+F]S9BYO<F<@*%LQ,S N
  341. XM,3 U+C$N,34R72D@8GD@87)C:&]N92YT86UU+F5D=2!W:71H(%--5% @:60@
  342. XM/#0U,S,W/CL@5'5E+" Q,B!-87D@,3DY,B Q-#HS.#HQ-B M,#4P, I296-E
  343. XM:79E9#H@9G)O;2!E87)T:"YO<V8N;W)G(&)Y('!O<W1M86XN;W-F+F]R9R H
  344. XM-2XV-"LO3U-&(#$N,"D*"6ED($%!,30T.# [(%1U92P@,3(@36%Y(#DR(#$S
  345. XM.C(U.C S("TP-# P"E)E8V5I=F5D.B!B>2!E87)T:"YO<V8N;W)G("@U+C8T
  346. XM+S0N-RD@:60@04$P,S0Y.3L@5'5E+" Q,B!-87D@.3(@,3,Z,C4Z,#(@+3 T
  347. XM,# *1&%T93H@5'5E+" Q,B!-87D@,3DY,B Q,CHR-3HP,B M,#4P, I&<F]M
  348. XM.B!R<V%L>D!O<V8N;W)G"DUE<W-A9V4M260Z(#PY,C U,3(Q-S(U+D%!,#,T
  349. XM.3E 96%R=&@N;W-F+F]R9SX*5&\Z(')C0&%R8VAO;F4N=&%M=2YE9'4*4W5B
  350. XM:F5C=#H@57-E9G5L(&9U;F-T:6]N"E-T871U<SH@4@H*270@;&]O:W,@;&EK
  351. XM92!L:6YE(&YO:7-E+"!B=70@:70@='5R;G,@=&AI;F=S(&QI:V4*"2]H;VUE
  352. XM+W)S86QZ+V9O;R]B87(*:6YT;PH)?B]F;V\O8F%R"@I5<V5F=6P@9F]R('=H
  353. XM96X@>6]U('!U="!Y;W5R(&-U<G)E;G0@9&ER96-T;W)Y('5P(&EN('EO=7(@
  354. XM:6-O;B!T:71L92X*0GD@9'5P;&EC871I;F<@=&AE("1H;VUE('-E8W1I;VX@
  355. XM>6]U(&-A;B!M86ME('1H:6YG<R!L:6ME"@DO<')O:F5C="]D8V4O8G5I;&0O
  356. XM9&-E,2XP+C$O<W)C+W)P8PIB96-O;64*"21-64)4+W-R8R]R<&,*"B,C("!)
  357. XM9B!A('!A=&AN86UE('-T87)T<R!W:71H("1H;VUE+"!T=7)N("1H;VUE(&EN
  358. XM=&\@?BX@(%5S97,@86QL(&)U:6QT+6EN<RX*9FX@=&EL9&5P871H('L@<#$]
  359. XM*"D@:3TH*2!["B @("!P,3TD,0H@(" @<W=I=&-H("@D<#$I('L*(" @(&-A
  360. XM<V4@)&AO;64@)&AO;64O*@H)(R!3<&QI="!A<F<@:6YT;R!C;VUP;VYE;G1S
  361. XM"@DJ/6!@("@O*2![(&5C:&\@+6X@)' Q('T*"2,@4VAI9G0@9&]W;B!B>2!N
  362. XM=6UB97(@;V8@8V]M<&]N96YT<R!I;B D:&]M90H)9F]R("AI(&EN(&!@("@O
  363. XM*2![(&5C:&\@+6X@)&AO;64@?2 I('-H:69T"@DC($=L=64@8F%C:R!T;V=E
  364. XM=&AE<@H)<#$])WXG"@EF;W(@*&DI(' Q/21P,2!>("<O)R!>("1I"@EE8VAO
  365. XM("1P,0H@(" @8V%S92 J"@EE8VAO("1P,0H@(" @?0H@(" @<F5T=7)N(# *
  366. XM?2!]"@I&<F]M(&]S9BYO<F<A<G-A;'H@5'5E($UA>2 Q,B Q-3HT-SHQ,B Q
  367. XM.3DR"E)E8V5I=F5D.B!F<F]M('!O<W1M86XN;W-F+F]R9R H6S$S,"XQ,#4N
  368. XM,2XQ-3)=*2!B>2!A<F-H;VYE+G1A;74N961U('=I=&@@4TU44"!I9" \-#4S
  369. XM,38^.R!4=64L(#$R($UA>2 Q.3DR(#$U.C0W.C V("TP-3 P"E)E8V5I=F5D
  370. XM.B!F<F]M(&5A<G1H+F]S9BYO<F<@8GD@<&]S=&UA;BYO<V8N;W)G("@U+C8T
  371. XM*R]/4T8@,2XP*0H):60@04$R,3 W,#L@5'5E+" Q,B!-87D@.3(@,38Z-#8Z
  372. XM-3@@+3 T,# *4F5C96EV960Z(&)Y(&5A<G1H+F]S9BYO<F<@*#4N-C0O-"XW
  373. XM*2!I9"!!03 Y,SDV.R!4=64L(#$R($UA>2 Y,B Q-CHT-CHU-B M,#0P, I$
  374. XM871E.B!4=64L(#$R($UA>2 Q.3DR(#$U.C0V.C4V("TP-3 P"D9R;VTZ(')S
  375. XM86QZ0&]S9BYO<F<*365S<V%G92U)9#H@/#DR,#4Q,C(P-#8N04$P.3,Y-D!E
  376. XM87)T:"YO<V8N;W)G/@I4;SH@8GER;VY 87)C:&]N92YT86UU+F5D=0I3=6)J
  377. XM96-T.B!293H@57-E9G5L(&9U;F-T:6]N"E-T871U<SH@4@H*/G=O=RX@=&AA
  378. XM;FMS+"!I)VQL(&%D9"!I="!T;R!%6$%-4$Q%4RX*1VQA9"!Y;W4@;&EK92X@
  379. XM($=E='1I;F<@<V]M971H:6YG(&%D9&5D('1O($5804U03$53(&AA<R!B965N
  380. XM(&$@9V]A;"!O9B!M:6YE+BXN"@I))W9E(&)E96X@=&AI;FMI;F<L(&$@8FET
  381. XM+"!A8F]U="!A(&UO<F4@9V5N97)A;"!W87D@;V8@9&]I;F<@:70N("!)('=A
  382. XM;G0*82 B<')E9FEX+7-U8B(@9G5N8W1I;VXL(&QI:V4@=&AI<PH)<')E9FEX
  383. XM("1S;VUE7W!A=&@@=F%R,2!V87(R('9A<C,@=F%R-"!V87(U"E1H870@=V]U
  384. XM;&0@=&%K92!S;VUE7W!A=&@@86YD(')E<&QA8V4@86YY(&QE861I;F<@)'9A
  385. XM<C$@*&5T8RD@=F%L=65S"G=I=&@@=&AE('9A<FEA8FQE(&YA;64N("!2971U
  386. XM<FX@;VX@=&AE(&9I<G-T(&UA=&-H+@H*2&UM("TM(&-O;64@=&\@=&AI;FL@
  387. XM;V8@:70L('1H870G<R!V97)Y(&5A<WD@=&\@9&\Z"@HC(%5S92!P871H<')E
  388. XM9FEX(&9I;&5N86UE('9A<C$@=F%R,B!V87(S"B,@<F5T=7)N<R!F:6QE;F%M
  389. XM92P@=VET:"!L96%D:6YG('!R969I>&5S("AI;B D=F%R,2XN+BD@='5R;F5D
  390. XM(&EN=&\@=&AE"B,@<W1R:6YG("1V87(Q+BXN"F9N('!A=&AP<F5F:7@@>R!P
  391. XM,3TH*2!I/2@I(&H]*"D@>PH@(" @<#$])#$@.R!S:&EF= H@(" @9F]R("AI
  392. XM*2!["@E^("1P,2 D)&D@)"1I7B\J("8F('L*"2 @(" J/6!@("@O*2![(&5C
  393. XM:&\@+6X@)' Q('T*"2 @("!F;W(@*&H@:6X@8& @*"\I('L@96-H;R M;B D
  394. XM)&D@?2 I('-H:69T"@D@(" @<#$])R0G7B1I"@D@(" @9F]R("AJ*2!P,3TD
  395. XM<#$@7B G+R<@7B D:@H)(" @(&5C:&\@)' Q"@D@(" @<F5T=7)N(# *"7T*
  396. XM(" @('T*(" @(&5C:&\@)' Q"B @("!R971U<FX@, I]('T*"FAO;64]+W5S
  397. XM97(O=7-E<G,O<G-A;'H*>CTO=7-R+W5S97)S"G!A=&AP<F5F:7@@+W5S<B]U
  398. XM<V5R<R]R<V%L>B!H;VUE('5S<@DC("TM/B D:&]M90IP871H<')E9FEX("]U
  399. XM<W(O=7-E<G,O<G-A;'H@>@D)(R M+3X@)'HO<G-A;'H*<&%T:'!R969I>" O
  400. XM=7-R+W5S97)S+W)S86QZ+V9O;R!Z(&AO;64)(R M+3X@)'HO<G-A;'HO9F]O
  401. XM"G!A=&AP<F5F:7@@+W5S<B]U<V5R<R]R<V%L>B]F;V\@:&]M90DC("TM/B D
  402. X*:&]M92]F;V\*"G@@
  403. Xend
  404. END_OF_FILE
  405.   if test 22983 -ne `wc -c <'EXAMPLES.uu'`; then
  406.     echo shar: \"'EXAMPLES.uu'\" unpacked with wrong size!
  407.   else
  408.     echo shar: Uudecoding \"'EXAMPLES.uu'\" \(16660 characters\)
  409.     cat EXAMPLES.uu | uudecode
  410.     if test -f EXAMPLES ; then
  411.         rm EXAMPLES.uu
  412.     fi
  413.   fi
  414.   # end of 'EXAMPLES.uu'
  415. fi
  416. if test -f 'input.c' -a "${1}" != "-c" ; then 
  417.   echo shar: Will not clobber existing file \"'input.c'\"
  418. else
  419.   echo shar: Extracting \"'input.c'\" \(7955 characters\)
  420.   sed "s/^X//" >'input.c' <<'END_OF_FILE'
  421. X/* input.c: i/o routines for files and pseudo-files (strings) */
  422. X
  423. X#include <errno.h>
  424. X#include <setjmp.h>
  425. X#include "rc.h"
  426. X#include "jbwrap.h"
  427. X
  428. X/*
  429. X   NB: character unget is supported for up to two characters, but NOT
  430. X   in the case of EOF. Since EOF does not fit in a char, it is easiest
  431. X   to support only one unget of EOF.
  432. X*/
  433. X
  434. Xtypedef struct Input {
  435. X    inputtype t;
  436. X    char *ibuf;
  437. X    int fd, index, read, lineno, last;
  438. X    bool saved, eofread;
  439. X} Input;
  440. X
  441. X#define BUFSIZE ((SIZE_T) 256)
  442. X
  443. X#ifdef READLINE
  444. Xextern char *readline(char *);
  445. Xextern void add_history(char *);
  446. Xstatic char *rlinebuf;
  447. X#endif
  448. X
  449. Xchar *prompt, *prompt2;
  450. Xbool rcrc;
  451. X
  452. Xstatic int dead(void);
  453. Xstatic int fdgchar(void);
  454. Xstatic int stringgchar(void);
  455. Xstatic void history(void);
  456. Xstatic void ugdead(int);
  457. Xstatic void pushcommon(void);
  458. X
  459. Xstatic char *inbuf;
  460. Xstatic SIZE_T istacksize, chars_out, chars_in;
  461. Xstatic bool eofread = FALSE, save_lineno = TRUE;
  462. Xstatic Input *istack, *itop;
  463. Xstatic char *histstr;
  464. Xstatic int histfd;
  465. X
  466. Xstatic int (*realgchar)(void);
  467. Xstatic void (*realugchar)(int);
  468. X
  469. Xint last;
  470. X
  471. Xextern int gchar() {
  472. X    if (eofread) {
  473. X        eofread = FALSE;
  474. X        return last = EOF;
  475. X    }
  476. X    return (*realgchar)();
  477. X}
  478. X
  479. Xextern void ugchar(int c) {
  480. X    (*realugchar)(c);
  481. X}
  482. X
  483. Xstatic int dead() {
  484. X    return last = EOF;
  485. X}
  486. X
  487. Xstatic void ugdead(int c) {
  488. X    return;
  489. X}
  490. X
  491. Xstatic void ugalive(int c) {
  492. X    if (c == EOF)
  493. X        eofread = TRUE;
  494. X    else
  495. X        inbuf[--chars_out] = c;
  496. X}
  497. X
  498. X/* get the next character from a string. */
  499. X
  500. Xstatic int stringgchar() {
  501. X    return last = (inbuf[chars_out] == '\0' ? EOF : inbuf[chars_out++]);
  502. X}
  503. X
  504. X/* signal-safe readline wrapper */
  505. X
  506. X#ifdef READLINE
  507. X#ifndef SVSIGS
  508. Xstatic char *rc_readline(char *prompt) {
  509. X    char *r;
  510. X    interrupt_happened = FALSE;
  511. X    if (!setjmp(slowbuf.j)) {
  512. X        slow = TRUE;
  513. X        if (!interrupt_happened)
  514. X            r = readline(prompt);
  515. X        else
  516. X            r = NULL;
  517. X    } else
  518. X        r = NULL;
  519. X    slow = FALSE;
  520. X    if (r == NULL)
  521. X        errno = EINTR;
  522. X    SIGCHK;
  523. X    return r;
  524. X}
  525. X#else
  526. X#define rc_readline readline
  527. X#endif /* SVSIGS */
  528. X#endif /* READLINE */
  529. X
  530. X/*
  531. X   read a character from a file-descriptor. If GNU readline is defined, add a newline and doctor
  532. X   the buffer to look like a regular fdgchar buffer.
  533. X*/
  534. X
  535. Xstatic int fdgchar() {
  536. X    if (chars_out >= chars_in + 2) { /* has the buffer been exhausted? if so, replenish it */
  537. X        while (1) {
  538. X#ifdef READLINE
  539. X            if (interactive && istack->fd == 0) {
  540. X                rlinebuf = readline(prompt);
  541. X                if (rlinebuf == NULL) {
  542. X                    chars_in = 0;
  543. X                } else {
  544. X                    if (*rlinebuf != '\0')
  545. X                        add_history(rlinebuf);
  546. X                    chars_in = strlen(rlinebuf) + 1;
  547. X                    efree(inbuf);
  548. X                    inbuf = ealloc(chars_in + 3);
  549. X                    strcpy(inbuf+2, rlinebuf);
  550. X                    strcat(inbuf+2, "\n");
  551. X                }
  552. X            } else
  553. X#endif
  554. X                {
  555. X                long /*ssize_t*/ r = rc_read(istack->fd, inbuf + 2, BUFSIZE);
  556. X                if (r < 0) {
  557. X                    if (errno == EINTR)
  558. X                        continue; /* Suppose it was interrupted by a signal */
  559. X                    uerror("read");
  560. X                    rc_exit(1);
  561. X                }
  562. X                chars_in = (SIZE_T) r;
  563. X            }
  564. X            break;
  565. X        }
  566. X        if (chars_in == 0)
  567. X            return last = EOF;
  568. X        chars_out = 2;
  569. X        if (dashvee)
  570. X            writeall(2, inbuf + 2, chars_in);
  571. X        history();
  572. X    }
  573. X    return last = inbuf[chars_out++];
  574. X}
  575. X
  576. X/* set up the input stack, and put a "dead" input at the bottom, so that yyparse will always read eof */
  577. X
  578. Xextern void initinput() {
  579. X    istack = itop = ealloc(istacksize = 256 * sizeof (Input));
  580. X    istack->t = iFd;
  581. X    istack->fd = -1;
  582. X    realugchar = ugalive;
  583. X}
  584. X
  585. X/* push an input source onto the stack. set up a new input buffer, and set gchar() */
  586. X
  587. Xstatic void pushcommon() {
  588. X    SIZE_T idiff;
  589. X    istack->index = chars_out;
  590. X    istack->read = chars_in;
  591. X    istack->ibuf = inbuf;
  592. X    istack->lineno = lineno;
  593. X    istack->saved = save_lineno;
  594. X    istack->last = last;
  595. X    istack->eofread = eofread;
  596. X    istack++;
  597. X    idiff = istack - itop;
  598. X    if (idiff >= istacksize / sizeof (Input)) {
  599. X        itop = erealloc(itop, istacksize *= 2);
  600. X        istack = itop + idiff;
  601. X    }
  602. X    realugchar = ugalive;
  603. X    chars_out = 2;
  604. X    chars_in = 0;
  605. X}
  606. X
  607. Xextern void pushfd(int fd) {
  608. X    pushcommon();
  609. X    istack->t = iFd;
  610. X    save_lineno = TRUE;
  611. X    istack->fd = fd;
  612. X    realgchar = fdgchar;
  613. X    inbuf = ealloc(BUFSIZE + 2);
  614. X    lineno = 1;
  615. X}
  616. X
  617. Xextern void pushstring(char **a, bool save) {
  618. X    pushcommon();
  619. X    istack->t = iString;
  620. X    save_lineno = save;
  621. X    inbuf = mprint("..%A", a);
  622. X    realgchar = stringgchar;
  623. X    if (save_lineno)
  624. X        lineno = 1;
  625. X    else
  626. X        --lineno;
  627. X}
  628. X
  629. X/* remove an input source from the stack. restore the right kind of getchar (string,fd) etc. */
  630. X
  631. Xextern void popinput() {
  632. X    if (istack->t == iFd)
  633. X        close(istack->fd);
  634. X    efree(inbuf);
  635. X    --istack;
  636. X    realgchar = (istack->t == iString ? stringgchar : fdgchar);
  637. X    if (istack->fd == -1) { /* top of input stack */
  638. X        realgchar = dead;
  639. X        realugchar = ugdead;
  640. X    }
  641. X    last = istack->last;
  642. X    eofread = istack->eofread;
  643. X    inbuf = istack->ibuf;
  644. X    chars_out = istack->index;
  645. X    chars_in = istack->read;
  646. X    if (save_lineno)
  647. X        lineno = istack->lineno;
  648. X    else
  649. X        lineno++;
  650. X    save_lineno = istack->saved;
  651. X}
  652. X
  653. X/* flush input characters upto newline. Used by scanerror() */
  654. X
  655. Xextern void flushu() {
  656. X    int c;
  657. X    if (last == '\n' || last == EOF)
  658. X        return;
  659. X    while ((c = gchar()) != '\n' && c != EOF)
  660. X        ; /* skip to newline */
  661. X    if (c == EOF)
  662. X        ugchar(c);
  663. X}
  664. X
  665. X/* the wrapper loop in rc: prompt for commands until EOF, calling yyparse and walk() */
  666. X
  667. Xextern Node *doit(bool execit) {
  668. X    bool eof;
  669. X    Jbwrap j;
  670. X    Estack e1, e2;
  671. X    Edata jerror;
  672. X    if (dashen)
  673. X        execit = FALSE;
  674. X    setjmp(j.j);
  675. X    jerror.jb = &j;
  676. X    except(eError, jerror, &e1);
  677. X    for (eof = FALSE; !eof;) {
  678. X        Edata block;
  679. X        block.b = newblock();
  680. X        except(eArena, block, &e2);
  681. X        SIGCHK;
  682. X        if (dashell) {
  683. X            char *fname[3];
  684. X            fname[1] = concat(varlookup("home"), word("/.rcrc", NULL))->w;
  685. X            fname[2] = NULL;
  686. X            rcrc = TRUE;
  687. X            dashell = FALSE;
  688. X            b_dot(fname);
  689. X        }
  690. X        if (interactive) {
  691. X            List *s;
  692. X            if (!dashen && fnlookup("prompt") != NULL) {
  693. X                static char *arglist[] = { "prompt", NULL };
  694. X                funcall(arglist);
  695. X            }
  696. X            if ((s = varlookup("prompt")) != NULL) {
  697. X#ifdef READLINE
  698. X                prompt = s->w;
  699. X#else
  700. X                fprint(2, "%s", s->w);
  701. X#endif
  702. X                prompt2 = (s->n == NULL ? "" : s->n->w);
  703. X            }
  704. X        }
  705. X        inityy();
  706. X        if (yyparse() == 1 && execit)
  707. X            rc_raise(eError);
  708. X        eof = (last == EOF); /* "last" can be clobbered during a walk() */
  709. X        if (parsetree != NULL) {
  710. X            if (execit)
  711. X                walk(parsetree, TRUE);
  712. X            else if (dashex && dashen)
  713. X                fprint(2, "%T\n", parsetree);
  714. X        }
  715. X        unexcept(); /* eArena */
  716. X    }
  717. X    popinput();
  718. X    unexcept(); /* eError */
  719. X    return parsetree;
  720. X}
  721. X
  722. X/* parse a function imported from the environment */
  723. X
  724. Xextern Node *parseline(char *extdef) {
  725. X    int i = interactive;
  726. X    char *in[2];
  727. X    Node *fun;
  728. X    in[0] = extdef;
  729. X    in[1] = NULL;
  730. X    interactive = FALSE;
  731. X    pushstring(in, TRUE);
  732. X    fun = doit(FALSE);
  733. X    interactive = i;
  734. X    return fun;
  735. X}
  736. X
  737. X/* write last command out to a file. Check to see if $history has changed, also */
  738. X
  739. Xstatic void history() {
  740. X    List *histlist;
  741. X    SIZE_T a;
  742. X    if (!interactive)
  743. X        return;
  744. X    if ((histlist = varlookup("history")) == NULL) {
  745. X        if (histstr != NULL) {
  746. X            efree(histstr);
  747. X            close(histfd);
  748. X            histstr = NULL;
  749. X        }
  750. X        return;
  751. X    }
  752. X    if (histstr == NULL || !streq(histstr, histlist->w)) { /* open new file */
  753. X        if (histstr != NULL) {
  754. X            efree(histstr);
  755. X            close(histfd);
  756. X        }
  757. X        histstr = ecpy(histlist->w);
  758. X        histfd = rc_open(histstr, rAppend);
  759. X        if (histfd < 0) {
  760. X            uerror(histstr);
  761. X            efree(histstr);
  762. X            histstr = NULL;
  763. X            varrm("history", FALSE);
  764. X        }
  765. X    }
  766. X    /*
  767. X       Small unix hack: since read() reads only up to a newline
  768. X       from a terminal, then presumably this write() will write at
  769. X       most only one input line at a time.
  770. X    */
  771. X    for (a = 2; a < chars_in + 2; a++) { /* skip empty lines and comments in history. */
  772. X        if (inbuf[a] == '#' || inbuf[a] == '\n')
  773. X            return;
  774. X        if (inbuf[a] != ' ' && inbuf[a] != '\t')
  775. X            break;
  776. X    }
  777. X    writeall(histfd, inbuf + 2, chars_in);
  778. X}
  779. X
  780. X/* close file descriptors after a fork() */
  781. X
  782. Xextern void closefds() {
  783. X    Input *i;
  784. X    if (histstr != NULL) {            /* Close an open history file */
  785. X        close(histfd);
  786. X        histstr = NULL;            /* But prevent re-closing of the same file-descriptor */
  787. X    }
  788. X    for (i = istack; i != itop; --i)    /* close open scripts */
  789. X        if (i->t == iFd && i->fd > 2) {
  790. X            close(i->fd);
  791. X            i->fd = -1;
  792. X        }
  793. X}
  794. END_OF_FILE
  795.   if test 7955 -ne `wc -c <'input.c'`; then
  796.     echo shar: \"'input.c'\" unpacked with wrong size!
  797.   fi
  798.   # end of 'input.c'
  799. fi
  800. if test -f 'plan9.ps.a' -a "${1}" != "-c" ; then 
  801.   echo shar: Will not clobber existing file \"'plan9.ps.a'\"
  802. else
  803.   echo shar: Extracting \"'plan9.ps.a'\" \(26880 characters\)
  804.   sed "s/^X//" >'plan9.ps.a' <<'END_OF_FILE'
  805. X%!PS
  806. X%%Version: 3.3
  807. X%%DocumentFonts: (atend)
  808. X%%Pages: (atend)
  809. X%%EndComments
  810. X%
  811. X% Version 3.3 prologue for troff files.
  812. X%
  813. X
  814. X/#copies 1 store
  815. X/aspectratio 1 def
  816. X/formsperpage 1 def
  817. X/landscape false def
  818. X/linewidth .3 def
  819. X/magnification 1 def
  820. X/margin 0 def
  821. X/orientation 0 def
  822. X/resolution 720 def
  823. X/rotation 1 def
  824. X/xoffset 0 def
  825. X/yoffset 0 def
  826. X
  827. X/roundpage true def
  828. X/useclippath true def
  829. X/pagebbox [0 0 612 792] def
  830. X
  831. X/R  /Times-Roman def
  832. X/I  /Times-Italic def
  833. X/B  /Times-Bold def
  834. X/BI /Times-BoldItalic def
  835. X/H  /Helvetica def
  836. X/HI /Helvetica-Oblique def
  837. X/HB /Helvetica-Bold def
  838. X/HX /Helvetica-BoldOblique def
  839. X/CW /Courier def
  840. X/CO /Courier def
  841. X/CI /Courier-Oblique def
  842. X/CB /Courier-Bold def
  843. X/CX /Courier-BoldOblique def
  844. X/PA /Palatino-Roman def
  845. X/PI /Palatino-Italic def
  846. X/PB /Palatino-Bold def
  847. X/PX /Palatino-BoldItalic def
  848. X/Hr /Helvetica-Narrow def
  849. X/Hi /Helvetica-Narrow-Oblique def
  850. X/Hb /Helvetica-Narrow-Bold def
  851. X/Hx /Helvetica-Narrow-BoldOblique def
  852. X/KR /Bookman-Light def
  853. X/KI /Bookman-LightItalic def
  854. X/KB /Bookman-Demi def
  855. X/KX /Bookman-DemiItalic def
  856. X/AR /AvantGarde-Book def
  857. X/AI /AvantGarde-BookOblique def
  858. X/AB /AvantGarde-Demi def
  859. X/AX /AvantGarde-DemiOblique def
  860. X/NR /NewCenturySchlbk-Roman def
  861. X/NI /NewCenturySchlbk-Italic def
  862. X/NB /NewCenturySchlbk-Bold def
  863. X/NX /NewCenturySchlbk-BoldItalic def
  864. X/ZD /ZapfDingbats def
  865. X/ZI /ZapfChancery-MediumItalic def
  866. X/S  /S def
  867. X/S1 /S1 def
  868. X/GR /Symbol def
  869. X
  870. X/inch {72 mul} bind def
  871. X/min {2 copy gt {exch} if pop} bind def
  872. X
  873. X/setup {
  874. X    counttomark 2 idiv {def} repeat pop
  875. X
  876. X    landscape {/orientation 90 orientation add def} if
  877. X    /scaling 72 resolution div def
  878. X    linewidth setlinewidth
  879. X    1 setlinecap
  880. X
  881. X    pagedimensions
  882. X    xcenter ycenter translate
  883. X    orientation rotation mul rotate
  884. X    width 2 div neg height 2 div translate
  885. X    xoffset inch yoffset inch neg translate
  886. X    margin 2 div dup neg translate
  887. X    magnification dup aspectratio mul scale
  888. X    scaling scaling scale
  889. X
  890. X    /Symbol /S Sdefs cf
  891. X    /Times-Roman /S1 S1defs cf
  892. X    0 0 moveto
  893. X} def
  894. X
  895. X/pagedimensions {
  896. X    useclippath userdict /gotpagebbox known not and {
  897. X        /pagebbox [clippath pathbbox newpath] def
  898. X        roundpage currentdict /roundpagebbox known and {roundpagebbox} if
  899. X    } if
  900. X    pagebbox aload pop
  901. X    4 -1 roll exch 4 1 roll 4 copy
  902. X    landscape {4 2 roll} if
  903. X    sub /width exch def
  904. X    sub /height exch def
  905. X    add 2 div /xcenter exch def
  906. X    add 2 div /ycenter exch def
  907. X    userdict /gotpagebbox true put
  908. X} def
  909. X
  910. X/pagesetup {
  911. X    /page exch def
  912. X    currentdict /pagedict known currentdict page known and {
  913. X        page load pagedict exch get cvx exec
  914. X    } if
  915. X} def
  916. X
  917. X/decodingdefs [
  918. X    {counttomark 2 idiv {y moveto show} repeat}
  919. X    {neg /y exch def counttomark 2 idiv {y moveto show} repeat}
  920. X    {neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat}
  921. X    {neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat}
  922. X    {counttomark 2 idiv {y moveto show} repeat}
  923. X    {neg setfunnytext}
  924. X] def
  925. X
  926. X/setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def
  927. X
  928. X/w {neg moveto show} bind def
  929. X/m {neg dup /y exch def moveto} bind def
  930. X/done {/lastpage where {pop lastpage} if} def
  931. X
  932. X/f {
  933. X    dup /font exch def findfont exch
  934. X    dup /ptsize exch def scaling div dup /size exch def scalefont setfont
  935. X    linewidth ptsize mul scaling 10 mul div setlinewidth
  936. X    /spacewidth ( ) stringwidth pop def
  937. X} bind def
  938. X
  939. X/changefont {
  940. X    /fontheight exch def
  941. X    /fontslant exch def
  942. X    currentfont [
  943. X        1 0
  944. X        fontheight ptsize div fontslant sin mul fontslant cos div
  945. X        fontheight ptsize div
  946. X        0 0
  947. X    ] makefont setfont
  948. X} bind def
  949. X
  950. X/sf {f} bind def
  951. X
  952. X/cf {
  953. X    dup length 2 idiv
  954. X    /entries exch def
  955. X    /chtab exch def
  956. X    /newfont exch def
  957. X
  958. X    findfont dup length 1 add dict
  959. X    /newdict exch def
  960. X    {1 index /FID ne {newdict 3 1 roll put} {pop pop} ifelse} forall
  961. X
  962. X    newdict /Metrics entries dict put
  963. X    newdict /Metrics get
  964. X    begin
  965. X        chtab aload pop
  966. X        1 1 entries {pop def} for
  967. X        newfont newdict definefont pop
  968. X    end
  969. X} bind def
  970. X
  971. X%
  972. X% A few arrays used to adjust reference points and character widths in some
  973. X% of the printer resident fonts. If square roots are too high try changing
  974. X% the lines describing /radical and /radicalex to,
  975. X%
  976. X%    /radical    [0 -75 550 0]
  977. X%    /radicalex    [-50 -75 500 0]
  978. X%
  979. X% Move braceleftbt a bit - default PostScript character is off a bit.
  980. X%
  981. X
  982. X/Sdefs [
  983. X    /bracketlefttp        [201 500]
  984. X    /bracketleftbt        [201 500]
  985. X    /bracketrighttp        [-81 380]
  986. X    /bracketrightbt        [-83 380]
  987. X    /braceleftbt        [203 490]
  988. X    /bracketrightex        [220 -125 500 0]
  989. X    /radical        [0 0 550 0]
  990. X    /radicalex        [-50 0 500 0]
  991. X    /parenleftex        [-20 -170 0 0]
  992. X    /integral        [100 -50 500 0]
  993. X    /infinity        [10 -75 730 0]
  994. X] def
  995. X
  996. X/S1defs [
  997. X    /underscore        [0 80 500 0]
  998. X    /endash            [7 90 650 0]
  999. X] def
  1000. X%
  1001. X% Tries to round clipping path dimensions, as stored in array pagebbox, so they
  1002. X% match one of the known sizes in the papersizes array. Lower left coordinates
  1003. X% are always set to 0.
  1004. X%
  1005. X
  1006. X/roundpagebbox {
  1007. X    7 dict begin
  1008. X    /papersizes [8.5 inch 11 inch 14 inch 17 inch] def
  1009. X
  1010. X    /mappapersize {
  1011. X        /val exch def
  1012. X        /slop .5 inch def
  1013. X        /diff slop def
  1014. X        /j 0 def
  1015. X        0 1 papersizes length 1 sub {
  1016. X            /i exch def
  1017. X            papersizes i get val sub abs
  1018. X            dup diff le {/diff exch def /j i def} {pop} ifelse
  1019. X        } for
  1020. X        diff slop lt {papersizes j get} {val} ifelse
  1021. X    } def
  1022. X
  1023. X    pagebbox 0 0 put
  1024. X    pagebbox 1 0 put
  1025. X    pagebbox dup 2 get mappapersize 2 exch put
  1026. X    pagebbox dup 3 get mappapersize 3 exch put
  1027. X    end
  1028. X} bind def
  1029. X
  1030. X%%EndProlog
  1031. X%%BeginSetup
  1032. Xmark
  1033. X/linewidth 0.5 def
  1034. X/xoffset 0 def
  1035. X/yoffset 0 def
  1036. X/#copies 1 store
  1037. X/magnification 1 def
  1038. X%%FormsPerPage: 1
  1039. X/formsperpage 1 def
  1040. X
  1041. X/landscape false def
  1042. X/resolution 720 def
  1043. Xsetup
  1044. X2 setdecoding
  1045. X%%EndSetup
  1046. X%%Page: 1 1
  1047. X/saveobj save def
  1048. Xmark
  1049. X1 pagesetup
  1050. X12 B f
  1051. X(Rc \320 A Shell for Plan 9 and UNIX Systems)9 2230 1 1765 1230 t
  1052. X10 I f
  1053. X(Tom Duff)1 381 1 2689 1470 t
  1054. X10 R f
  1055. X(AT&T Bell Laboratories)2 993 1 2383 1650 t
  1056. X(Murray Hill, New Jersey 07974)4 1267 1 2246 1770 t
  1057. X10 I f
  1058. X(ABSTRACT)2643 2150 w
  1059. X(Rc)1330 2410 w
  1060. X10 R f
  1061. X( also runs on a variety of traditional sys-)8 1641( It)1 115( interpreter for Plan 9.)4 900(is a command)2 561 4 1463 2410 t
  1062. X( provides similar facilities to Bourne's)5 1580( It)1 120( SunOS and the Tenth Edition.)5 1273(tems, including)1 627 4 1080 2530 t
  1063. X10 I f
  1064. X(/bin/sh)1080 2650 w
  1065. X10 R f
  1066. X( paper intro-)2 497( This)1 229(, with some small additions and mostly less idiosyncratic syntax.)9 2601 3 1353 2650 t
  1067. X(duces)1080 2770 w
  1068. X10 I f
  1069. X(rc)1335 2770 w
  1070. X10 R f
  1071. X( why it varies)3 547('s highlights with numerous examples, and discusses its design and)9 2715 2 1418 2770 t
  1072. X(from Bourne's.)1 610 1 1080 2890 t
  1073. X10 B f
  1074. X(1. Introduction)1 670 1 720 3250 t
  1075. X10 R f
  1076. X( new)1 208( porting the Bourne shell to an incompatible)7 1875( As)1 177(Plan 9 needs a command-programming language.)5 2060 4 720 3406 t
  1077. X( new command interpreter, called)4 1350(environment seemed a daunting task, I chose to write a)9 2232 2 720 3526 t
  1078. X10 I f
  1079. X(rc)4330 3526 w
  1080. X10 R f
  1081. X(because it runs)2 599 1 4441 3526 t
  1082. X( could hardly resist trying to)5 1220( tinkering with perfection is a dangerous business, I)8 2197(commands. Although)1 903 3 720 3646 t
  1083. X( Thus)1 250(`improve' on Bourne's design.)3 1226 2 720 3766 t
  1084. X10 I f
  1085. X(rc)2221 3766 w
  1086. X10 R f
  1087. X(is similar in spirit but different in detail from Bourne's shell.)10 2424 1 2329 3766 t
  1088. X(The bulk of this paper describes)5 1318 1 720 3922 t
  1089. X10 I f
  1090. X(rc)2071 3922 w
  1091. X10 R f
  1092. X( features with many small examples and a few larger ones.)10 2426('s principal)1 460 2 2154 3922 t
  1093. X(We close with a discussion of the principles guiding)8 2143 1 720 4042 t
  1094. X10 I f
  1095. X(rc)2895 4042 w
  1096. X10 R f
  1097. X( it differs from Bourne's design.)5 1317('s design and why)3 745 2 2978 4042 t
  1098. X( features, as individual details)4 1198(The descriptive sections include little discussion of the rationale for particular)10 3122 2 720 4162 t
  1099. X( skip to the discussion at the end before)8 1632( impatient reader may wish to)5 1230( The)1 213(are hard to justify in isolation.)5 1245 4 720 4282 t
  1100. X(skimming the expository parts of the paper.)6 1740 1 720 4402 t
  1101. X10 B f
  1102. X( commands)1 486(2. Simple)1 420 2 720 4642 t
  1103. X10 R f
  1104. X(For the simplest uses)3 881 1 720 4798 t
  1105. X10 I f
  1106. X(rc)1639 4798 w
  1107. X10 R f
  1108. X( all of the following behave as)6 1293( Thus)1 263(has syntax familiar to Bourne-shell users.)5 1724 3 1760 4798 t
  1109. X(expected:)720 4918 w
  1110. X9 CW f
  1111. X(date)1008 5088 w
  1112. X(con alice)1 486 1 1008 5198 t
  1113. X(who >user.names)1 810 1 1008 5308 t
  1114. X(who >>user.names)1 864 1 1008 5418 t
  1115. X(wc <file)1 432 1 1008 5528 t
  1116. X(echo [a-f]*.c)1 702 1 1008 5638 t
  1117. X(who | wc)2 432 1 1008 5748 t
  1118. X(who; date)1 486 1 1008 5858 t
  1119. X(cc *.c &)2 432 1 1008 5968 t
  1120. X(cyntax *.c && cc -g -o cmd *.c)7 1620 1 1008 6078 t
  1121. X(rm -r junk || echo rm failed!)6 1566 1 1008 6188 t
  1122. X10 B f
  1123. X(3. Quotation)1 559 1 720 6488 t
  1124. X10 R f
  1125. X(An argument that contains a space or one of)8 1813 1 720 6644 t
  1126. X10 I f
  1127. X(rc)2565 6644 w
  1128. X10 R f
  1129. X( in apostrophes)2 621('s other syntax characters must be enclosed)6 1771 2 2648 6644 t
  1130. X(\()720 6764 w
  1131. X10 CW f
  1132. X(')753 6764 w
  1133. X10 R f
  1134. X(\):)813 6764 w
  1135. X9 CW f
  1136. X(rm 'odd file name')3 972 1 1008 6934 t
  1137. X10 R f
  1138. X(An apostrophe in a quoted argument must be doubled:)8 2170 1 720 7114 t
  1139. Xcleartomark
  1140. Xshowpage
  1141. Xsaveobj restore
  1142. X%%EndPage: 1 1
  1143. X%%Page: 2 2
  1144. X/saveobj save def
  1145. Xmark
  1146. X2 pagesetup
  1147. X10 R f
  1148. X(- 2 -)2 166 1 2797 480 t
  1149. X9 CW f
  1150. X(echo 'How''s your father?')3 1404 1 1008 830 t
  1151. X10 B f
  1152. X(4. Variables)1 536 1 720 1130 t
  1153. X10 I f
  1154. X(Rc)720 1286 w
  1155. X10 R f
  1156. X( by typing, for)3 602( may be given values)4 879( Variables)1 441(provides variables whose values are lists of arguments.)7 2259 4 859 1286 t
  1157. X(example:)720 1406 w
  1158. X9 CW f
  1159. X(path=\(. /bin /usr/bin\))2 1188 1 1008 1576 t
  1160. X(user=td)1008 1686 w
  1161. X(tty=/dev/tty8)1008 1796 w
  1162. X10 R f
  1163. X(The parentheses indicate that the value assigned to)7 2049 1 720 1976 t
  1164. X10 CW f
  1165. X(path)2798 1976 w
  1166. X10 R f
  1167. X( strings. The variables)3 897(is a list of three)4 632 2 3067 1976 t
  1168. X10 CW f
  1169. X(user)4626 1976 w
  1170. X10 R f
  1171. X(and)4896 1976 w
  1172. X10 CW f
  1173. X(tty)720 2096 w
  1174. X10 R f
  1175. X(are assigned lists containing a single string.)6 1735 1 925 2096 t
  1176. X(The value of a variable can be substituted into a command by preceding its name with a)16 3505 1 720 2252 t
  1177. X10 CW f
  1178. X($)4250 2252 w
  1179. X10 R f
  1180. X(, like this:)2 398 1 4310 2252 t
  1181. X9 CW f
  1182. X(echo $path)1 540 1 1008 2422 t
  1183. X10 R f
  1184. X(If)720 2602 w
  1185. X10 CW f
  1186. X(path)811 2602 w
  1187. X10 R f
  1188. X(had been set as above, this would be equivalent to)9 1997 1 1076 2602 t
  1189. X9 CW f
  1190. X(echo . /bin /usr/bin)3 1080 1 1008 2772 t
  1191. X10 R f
  1192. X(Variables may be subscripted by numbers or lists of numbers, like this:)11 2842 1 720 2952 t
  1193. X9 CW f
  1194. X(echo $path\(2\))1 702 1 1008 3122 t
  1195. X(echo $path\(3 2 1\))3 918 1 1008 3232 t
  1196. X10 R f
  1197. X(These are equivalent to)3 928 1 720 3412 t
  1198. X9 CW f
  1199. X(echo /bin)1 486 1 1008 3582 t
  1200. X(echo /usr/bin /bin .)3 1080 1 1008 3692 t
  1201. X10 R f
  1202. X( the subscript)2 555( Otherwise,)1 496(There can be no space separating the variable's name from the left parenthesis.)12 3269 3 720 3872 t
  1203. X(would be considered a separate parenthesized list.)6 1992 1 720 3992 t
  1204. X(The number of strings in a variable can be determined by the)11 2431 1 720 4148 t
  1205. X10 CW f
  1206. X($#)3176 4148 w
  1207. X10 R f
  1208. X( example,)1 388(operator. For)1 546 2 3321 4148 t
  1209. X9 CW f
  1210. X(echo $#path)1 594 1 1008 4318 t
  1211. X10 R f
  1212. X(would print the number of entries in)6 1443 1 720 4498 t
  1213. X10 CW f
  1214. X($path)2188 4498 w
  1215. X10 R f
  1216. X(.)2488 4498 w
  1217. X(The following two assignments are subtly different:)6 2070 1 720 4654 t
  1218. X9 CW f
  1219. X(empty=\(\))1008 4824 w
  1220. X(null='')1008 4934 w
  1221. X10 R f
  1222. X(The first sets)2 538 1 720 5114 t
  1223. X10 CW f
  1224. X(empty)1294 5114 w
  1225. X10 R f
  1226. X( second sets)2 501( The)1 217( list containing no strings.)4 1085(to a)1 158 4 1630 5114 t
  1227. X10 CW f
  1228. X(null)3628 5114 w
  1229. X10 R f
  1230. X(to a list containing a single)5 1135 1 3905 5114 t
  1231. X(string, but the string contains no characters.)6 1742 1 720 5234 t
  1232. X( indistinguishable\),)1 775(Although these may seem like more or less the same thing \(in Bourne's shell, they are)15 3545 2 720 5390 t
  1233. X( other things)2 500( Among)1 350(they behave differently in almost all circumstances.)6 2060 3 720 5510 t
  1234. X9 CW f
  1235. X(echo $#empty)1 648 1 1008 5680 t
  1236. X10 R f
  1237. X(prints 0, whereas)2 679 1 720 5860 t
  1238. X9 CW f
  1239. X(echo $#null)1 594 1 1008 6030 t
  1240. X10 R f
  1241. X(prints 1.)1 328 1 720 6210 t
  1242. X(All variables that have never been set have the value)9 2097 1 720 6366 t
  1243. X10 CW f
  1244. X(\(\))2842 6366 w
  1245. X10 R f
  1246. X(.)2962 6366 w
  1247. X10 B f
  1248. X(5. Arguments)1 602 1 720 6606 t
  1249. X10 R f
  1250. X(When)720 6762 w
  1251. X10 I f
  1252. X(rc)983 6762 w
  1253. X10 R f
  1254. X( from a file, the file has access to the arguments supplied on)12 2405(is reading its input)3 742 2 1091 6762 t
  1255. X10 I f
  1256. X(rc)4264 6762 w
  1257. X10 R f
  1258. X('s command line.)2 693 1 4347 6762 t
  1259. X(The variable)1 504 1 720 6882 t
  1260. X10 CW f
  1261. X($*)1252 6882 w
  1262. X10 R f
  1263. X( names)1 282( The)1 207( it.)1 108(initially has the list of arguments assigned to)7 1807 4 1400 6882 t
  1264. X10 CW f
  1265. X($1)3831 6882 w
  1266. X10 R f
  1267. X(,)3951 6882 w
  1268. X10 CW f
  1269. X($2)4003 6882 w
  1270. X10 R f
  1271. X(, etc. are synonyms for)4 917 1 4123 6882 t
  1272. X10 CW f
  1273. X($*\(1\))720 7002 w
  1274. X10 R f
  1275. X(,)1020 7002 w
  1276. X10 CW f
  1277. X($*\(2\))1070 7002 w
  1278. X10 R f
  1279. X( addition,)1 378( In)1 133(, etc.)1 191 3 1370 7002 t
  1280. X10 CW f
  1281. X($0)2097 7002 w
  1282. X10 R f
  1283. X(is the name of the file from which)7 1356 1 2242 7002 t
  1284. X10 I f
  1285. X(rc)3623 7002 w
  1286. X10 R f
  1287. X('s input is being read.)4 863 1 3706 7002 t
  1288. Xcleartomark
  1289. Xshowpage
  1290. Xsaveobj restore
  1291. X%%EndPage: 2 2
  1292. X%%Page: 3 3
  1293. X/saveobj save def
  1294. Xmark
  1295. X3 pagesetup
  1296. X10 R f
  1297. X(- 3 -)2 166 1 2797 480 t
  1298. X10 B f
  1299. X(6. Concatenation)1 747 1 720 840 t
  1300. X10 I f
  1301. X(Rc)720 996 w
  1302. X10 R f
  1303. X(has a string concatenation operator, the caret)6 1781 1 850 996 t
  1304. X10 CW f
  1305. X(\303)2656 996 w
  1306. X10 R f
  1307. X(, to build arguments out of pieces.)6 1360 1 2716 996 t
  1308. X9 CW f
  1309. X(echo hully\303gully)1 864 1 1008 1166 t
  1310. X10 R f
  1311. X(is exactly equivalent to)3 924 1 720 1346 t
  1312. X9 CW f
  1313. X(echo hullygully)1 810 1 1008 1516 t
  1314. X10 R f
  1315. X(Suppose variable)1 685 1 720 1696 t
  1316. X10 CW f
  1317. X(i)1430 1696 w
  1318. X10 R f
  1319. X( Then)1 255(contains the name of a command.)5 1342 2 1515 1696 t
  1320. X9 CW f
  1321. X(cc -o $i $i\303.c)3 756 1 1008 1866 t
  1322. X10 R f
  1323. X(might compile the command's source code, leaving the result in the appropriate file.)12 3367 1 720 2046 t
  1324. X(Concatenation distributes over lists. The following)5 2027 1 720 2202 t
  1325. X9 CW f
  1326. X(echo \(a b c\)\303\(1 2 3\))5 1080 1 1008 2372 t
  1327. X(src=\(main subr io\))2 972 1 1008 2482 t
  1328. X(cc $src\303.c)1 540 1 1008 2592 t
  1329. X10 R f
  1330. X(are equivalent to)2 665 1 720 2772 t
  1331. X9 CW f
  1332. X(echo a1 b2 c3)3 702 1 1008 2942 t
  1333. X(cc main.c subr.c io.c)3 1134 1 1008 3052 t
  1334. X10 R f
  1335. X(In detail, the rule is: if both operands of)8 1640 1 720 3232 t
  1336. X10 CW f
  1337. X(\303)2392 3232 w
  1338. X10 R f
  1339. X( non-zero number of strings, they are con-)7 1735(are lists of the same)4 821 2 2484 3232 t
  1340. X( if one of the operands is a single string, it is concatenated with each mem-)15 3059( Otherwise,)1 491(catenated pairwise.)1 770 3 720 3352 t
  1341. X( other combination of operands is an error.)7 1702( Any)1 222(ber of the other operand in turn.)6 1272 3 720 3472 t
  1342. X10 B f
  1343. X( carets)1 279(7. Free)1 318 2 720 3712 t
  1344. X10 R f
  1345. X(User demand has dictated that)4 1263 1 720 3868 t
  1346. X10 I f
  1347. X(rc)2023 3868 w
  1348. X10 R f
  1349. X( syntax look more like the)5 1121(insert carets in certain places, to make the)7 1773 2 2146 3868 t
  1350. X( example, this:)2 586( For)1 189(Bourne shell.)1 533 3 720 3988 t
  1351. X9 CW f
  1352. X(cc -$flags $stems.c)2 1026 1 1008 4158 t
  1353. X10 R f
  1354. X(is equivalent to)2 611 1 720 4338 t
  1355. X9 CW f
  1356. X(cc -\303$flags $stems\303.c)2 1134 1 1008 4508 t
  1357. X10 R f
  1358. X(In general,)1 440 1 720 4688 t
  1359. X10 I f
  1360. X(rc)1199 4688 w
  1361. X10 R f
  1362. X(will insert)1 417 1 1321 4688 t
  1363. X10 CW f
  1364. X(\303)1777 4688 w
  1365. X10 R f
  1366. X( Specifically,)1 567( not separated by white space.)5 1272(between two arguments that are)4 1325 3 1876 4688 t
  1367. X(whenever one of)2 668 1 720 4808 t
  1368. X10 CW f
  1369. X($'`)1415 4808 w
  1370. X10 R f
  1371. X(follows a quoted or unquoted word, or an unquoted word follows a quoted word with)14 3418 1 1622 4808 t
  1372. X(no intervening blanks or tabs, a)5 1264 1 720 4928 t
  1373. X10 CW f
  1374. X(\303)2011 4928 w
  1375. X10 R f
  1376. X( an unquoted word immediately following)5 1700( If)1 119( between the two.)3 713(is inserted)1 410 4 2098 4928 t
  1377. X(a)720 5048 w
  1378. X10 CW f
  1379. X($)797 5048 w
  1380. X10 R f
  1381. X(contains a character other than an alphanumeric, underscore or)8 2564 1 890 5048 t
  1382. X10 CW f
  1383. X(*)3487 5048 w
  1384. X10 R f
  1385. X(, a)1 102 1 3547 5048 t
  1386. X10 CW f
  1387. X(\303)3682 5048 w
  1388. X10 R f
  1389. X( the first such)3 562(is inserted before)2 703 2 3775 5048 t
  1390. X(character.)720 5168 w
  1391. X10 B f
  1392. X( substitution)1 532(8. Command)1 575 2 720 5408 t
  1393. X10 R f
  1394. X( list from the output of a command.)7 1444(It is often useful to build an argument)7 1528 2 720 5564 t
  1395. X10 I f
  1396. X(Rc)3746 5564 w
  1397. X10 R f
  1398. X(allows a command, enclosed)3 1160 1 3880 5564 t
  1399. X(in braces and preceded by a left quote,)7 1569 1 720 5684 t
  1400. X10 CW f
  1401. X(`{...})2319 5684 w
  1402. X10 R f
  1403. X( command is)2 519( The)1 209( an argument is required.)4 1011(, anywhere that)2 622 4 2679 5684 t
  1404. X( characters stored in the variable)5 1333( The)1 213( its standard output captured.)4 1189(executed and)1 530 4 720 5804 t
  1405. X10 CW f
  1406. X(ifs)4018 5804 w
  1407. X10 R f
  1408. X(are used to split the)4 809 1 4231 5804 t
  1409. X( example,)1 388( For)1 189(output into arguments.)2 903 3 720 5924 t
  1410. X9 CW f
  1411. X(cat `{ls -tr|sed 10q})3 1134 1 1008 6094 t
  1412. X10 R f
  1413. X(will catenate the ten oldest files in the current directory in temporal order.)12 2947 1 720 6274 t
  1414. X10 B f
  1415. X( branching)1 465(9. Pipeline)1 470 2 720 6514 t
  1416. X10 R f
  1417. X( occasionally it is useful to have)6 1312( Very)1 254( for almost all cases.)4 838(The normal pipeline notation is general enough)6 1916 4 720 6670 t
  1418. X( can require arbitrarily large pipe)5 1350( topologies more general than trees)5 1440( Pipeline)1 386(pipelines that are not linear.)4 1144 4 720 6790 t
  1419. X(buffers, or worse, can cause deadlock.)5 1567 1 720 6910 t
  1420. X10 I f
  1421. X(Rc)2346 6910 w
  1422. X10 R f
  1423. X( of non-linear but treelike pipelines.)5 1481(has syntax for some kinds)4 1074 2 2485 6910 t
  1424. X(For example,)1 527 1 720 7030 t
  1425. X9 CW f
  1426. X(cmp <{old} <{new})2 918 1 1440 7200 t
  1427. Xcleartomark
  1428. Xshowpage
  1429. Xsaveobj restore
  1430. X%%EndPage: 3 3
  1431. X%%Page: 4 4
  1432. X/saveobj save def
  1433. Xmark
  1434. X4 pagesetup
  1435. X10 R f
  1436. X(- 4 -)2 166 1 2797 480 t
  1437. X(will regression test a new version of a command.)8 1963 1 720 840 t
  1438. X10 CW f
  1439. X(<)2734 840 w
  1440. X10 R f
  1441. X(or)2820 840 w
  1442. X10 CW f
  1443. X(>)2929 840 w
  1444. X10 R f
  1445. X( in braces causes the com-)5 1054(followed by a command)3 971 2 3015 840 t
  1446. X( parent command \()3 751( The)1 205( be run with its standard output or input attached to a pipe.)12 2334(mand to)1 326 4 720 960 t
  1447. X10 CW f
  1448. X(cmp)4336 960 w
  1449. X10 R f
  1450. X(in the exam-)2 499 1 4541 960 t
  1451. X( descriptor or other, and with an argument)7 1701(ple\) is started with the other end of the pipe attached to some file)13 2619 2 720 1080 t
  1452. X( connect to the pipe when opened \(e.g.)7 1601(that will)1 341 2 720 1200 t
  1453. X10 CW f
  1454. X(/dev/fd/6)2721 1200 w
  1455. X10 R f
  1456. X( systems without)2 691(.\) On)1 239 2 3261 1200 t
  1457. X10 CW f
  1458. X(/dev/fd)4225 1200 w
  1459. X10 R f
  1460. X(or some-)1 361 1 4679 1200 t
  1461. X(thing similar \(SunOS for example\) this feature does not work.)9 2475 1 720 1320 t
  1462. X10 B f
  1463. X( status)1 275(10. Exit)1 353 2 720 1560 t
  1464. X10 R f
  1465. X( Plan 9 status is a character)6 1153( On)1 184( executed it.)2 509(When a command exits it returns status to the program that)10 2474 4 720 1716 t
  1466. X( normal termination it is empty.)5 1267( On)1 172(string describing an error condition.)4 1434 3 720 1836 t
  1467. X10 I f
  1468. X(Rc)720 1992 w
  1469. X10 R f
  1470. X( the variable)2 537(captures commands' exit statuses in)4 1521 2 871 1992 t
  1471. X10 CW f
  1472. X($status)2976 1992 w
  1473. X10 R f
  1474. X( a simple command the value of)6 1408(. For)1 236 2 3396 1992 t
  1475. X10 CW f
  1476. X($status)720 2112 w
  1477. X10 R f
  1478. X( a pipeline)2 420( For)1 191(is just as described above.)4 1048 3 1167 2112 t
  1479. X10 CW f
  1480. X($status)2853 2112 w
  1481. X10 R f
  1482. X( to the concatenation of the statuses of)7 1535(is set)1 205 2 3300 2112 t
  1483. X(the pipeline components with)3 1180 1 720 2232 t
  1484. X10 CW f
  1485. X(|)1925 2232 w
  1486. X10 R f
  1487. X(characters for separators.)2 998 1 2010 2232 t
  1488. X10 I f
  1489. X(Rc)720 2388 w
  1490. X10 R f
  1491. X( control flow, many of them conditioned by the status returned from previously)12 3286(has a several kinds of)4 895 2 859 2388 t
  1492. X( Any)1 224(executed commands.)1 839 2 720 2508 t
  1493. X10 CW f
  1494. X($status)1810 2508 w
  1495. X10 R f
  1496. X(containing only)1 627 1 2257 2508 t
  1497. X10 CW f
  1498. X(0)2911 2508 w
  1499. X10 R f
  1500. X('s and)1 243 1 2971 2508 t
  1501. X10 CW f
  1502. X(|)3241 2508 w
  1503. X10 R f
  1504. X('s has boolean value)3 818 1 3301 2508 t
  1505. X10 I f
  1506. X(true)4146 2508 w
  1507. X10 R f
  1508. X( other status)2 485(. Any)1 248 2 4307 2508 t
  1509. X(is)720 2628 w
  1510. X10 I f
  1511. X(false)812 2628 w
  1512. X10 R f
  1513. X(.)1001 2628 w
  1514. X10 B f
  1515. X( grouping)1 415(11. Command)1 625 2 720 2868 t
  1516. X10 R f
  1517. X(A sequence of commands enclosed in)5 1505 1 720 3024 t
  1518. X10 CW f
  1519. X({})2250 3024 w
  1520. X10 R f
  1521. X( example:)1 391( For)1 189(may be used anywhere a command is required.)7 1873 3 2395 3024 t
  1522. X9 CW f
  1523. X({sleep 3600;echo 'Time''s up!'}&)3 1728 1 1008 3194 t
  1524. X10 R f
  1525. X( the braces:)2 454( Without)1 378(will wait an hour in the background, then print a message.)10 2319 3 720 3374 t
  1526. X9 CW f
  1527. X(sleep 3600;echo 'Time''s up!'&)3 1620 1 1008 3544 t
  1528. X10 R f
  1529. X(this would lock up the terminal for an hour, then print the message in the background!)15 3440 1 720 3724 t
  1530. X10 B f
  1531. X( flow \320)2 333(12. Control)1 508 2 720 3964 t
  1532. X10 CW f
  1533. X(for)1586 3964 w
  1534. X10 R f
  1535. X(A command may be executed once for each member of a list by typing, for example:)15 3387 1 720 4120 t
  1536. X9 CW f
  1537. X(for\(i in printf scanf putchar\) look $i /usr/td/lib/dw.dat)7 3078 1 1008 4290 t
  1538. X10 R f
  1539. X(This looks for each of the words)6 1292 1 720 4470 t
  1540. X10 CW f
  1541. X(printf)2037 4470 w
  1542. X10 R f
  1543. X(,)2397 4470 w
  1544. X10 CW f
  1545. X(scanf)2447 4470 w
  1546. X10 R f
  1547. X(and)2772 4470 w
  1548. X10 CW f
  1549. X(putchar)2941 4470 w
  1550. X10 R f
  1551. X( general form is)3 629( The)1 205(in the given file.)3 655 3 3386 4470 t
  1552. X9 CW f
  1553. X(for\()1008 4640 w
  1554. X9 I f
  1555. X(name)1224 4640 w
  1556. X9 CW f
  1557. X(in)1473 4640 w
  1558. X9 I f
  1559. X(list)1635 4640 w
  1560. X9 CW f
  1561. X(\))1745 4640 w
  1562. X9 I f
  1563. X(command)1853 4640 w
  1564. X10 R f
  1565. X(or)720 4820 w
  1566. X9 CW f
  1567. X(for\()1008 4990 w
  1568. X9 I f
  1569. X(name)1224 4990 w
  1570. X9 CW f
  1571. X(\))1419 4990 w
  1572. X9 I f
  1573. X(command)1527 4990 w
  1574. X10 R f
  1575. X( first case)2 394(In the)1 235 2 720 5170 t
  1576. X10 I f
  1577. X(command)1380 5170 w
  1578. X10 R f
  1579. X(is executed once for each member of)6 1503 1 1799 5170 t
  1580. X10 I f
  1581. X(list)3333 5170 w
  1582. X10 R f
  1583. X(with that member assigned to variable)5 1553 1 3487 5170 t
  1584. X10 I f
  1585. X(name)720 5290 w
  1586. X10 R f
  1587. X(. If)1 141 1 936 5290 t
  1588. X10 CW f
  1589. X(in)1102 5290 w
  1590. X10 I f
  1591. X(list)1247 5290 w
  1592. X10 R f
  1593. X(is not given,)2 492 1 1395 5290 t
  1594. X10 I f
  1595. X($*)1912 5290 w
  1596. X10 R f
  1597. X(is used.)1 300 1 2037 5290 t
  1598. X10 B f
  1599. X( execution \320)2 555(13. Conditional)1 682 2 720 5530 t
  1600. X10 CW f
  1601. X(if)1982 5530 w
  1602. X10 I f
  1603. X(Rc)720 5686 w
  1604. X10 R f
  1605. X( example:)1 391( For)1 189(also provides a general if-statement.)4 1444 3 850 5686 t
  1606. X9 CW f
  1607. X(if\(cyntax *.c\) cc -g -o cmd *.c)6 1674 1 1008 5856 t
  1608. X10 R f
  1609. X(runs the C compiler whenever)4 1259 1 720 6036 t
  1610. X10 CW f
  1611. X(cyntax)2018 6036 w
  1612. X10 R f
  1613. X(finds no problems with)3 967 1 2417 6036 t
  1614. X10 CW f
  1615. X(*.c)3423 6036 w
  1616. X10 R f
  1617. X( `if not' statement provides a)5 1226(. An)1 211 2 3603 6036 t
  1618. X( example:)1 391( For)1 189(two-tailed conditional.)1 905 3 720 6156 t
  1619. X9 CW f
  1620. X(for\(i\){)1008 6326 w
  1621. X(if\(test -f /tmp/$i\) echo $i already in /tmp)7 2322 1 1224 6436 t
  1622. X(if not cp $i /tmp)4 918 1 1224 6546 t
  1623. X(})1008 6656 w
  1624. X10 R f
  1625. X(This loops over each file in)5 1090 1 720 6836 t
  1626. X10 CW f
  1627. X($*)1835 6836 w
  1628. X10 R f
  1629. X(, copying to)2 475 1 1955 6836 t
  1630. X10 CW f
  1631. X(/tmp)2455 6836 w
  1632. X10 R f
  1633. X(those that do not already appear there, and printing a mes-)10 2320 1 2720 6836 t
  1634. X(sage for those that do.)4 879 1 720 6956 t
  1635. Xcleartomark
  1636. Xshowpage
  1637. Xsaveobj restore
  1638. X%%EndPage: 4 4
  1639. X%%Page: 5 5
  1640. X/saveobj save def
  1641. Xmark
  1642. X5 pagesetup
  1643. X10 R f
  1644. X(- 5 -)2 166 1 2797 480 t
  1645. X10 B f
  1646. X( flow \320)2 333(14. Control)1 508 2 720 840 t
  1647. X10 CW f
  1648. X(while)1586 840 w
  1649. X10 I f
  1650. X(Rc)720 996 w
  1651. X10 R f
  1652. X('s while statement looks like this:)5 1342 1 825 996 t
  1653. X9 CW f
  1654. X(while\(newer subr.c subr.o\) sleep 5)4 1836 1 1008 1166 t
  1655. X10 R f
  1656. X(This waits until)2 623 1 720 1346 t
  1657. X10 CW f
  1658. X(subr.o)1368 1346 w
  1659. X10 R f
  1660. X(is newer than)2 532 1 1753 1346 t
  1661. X10 CW f
  1662. X(subr.c)2310 1346 w
  1663. X10 R f
  1664. X(\(presumably because the C compiler finished with it.\))7 2147 1 2695 1346 t
  1665. X10 B f
  1666. X( flow \320)2 333(15. Control)1 508 2 720 1586 t
  1667. X10 CW f
  1668. X(switch)1586 1586 w
  1669. X10 I f
  1670. X(Rc)720 1742 w
  1671. X10 R f
  1672. X( general form is)3 629( Its)1 150(provides a switch statement to do pattern-matching on arbitrary strings.)9 2852 3 850 1742 t
  1673. X9 CW f
  1674. X(switch\()1008 1912 w
  1675. X9 I f
  1676. X(word)1386 1912 w
  1677. X9 CW f
  1678. X(\){)1571 1912 w
  1679. X(case)1008 2022 w
  1680. X9 I f
  1681. X(pattern ...)1 352 1 1278 2022 t
  1682. X(commands)1224 2132 w
  1683. X9 CW f
  1684. X(case)1008 2242 w
  1685. X9 I f
  1686. X(pattern ...)1 352 1 1278 2242 t
  1687. X(commands)1224 2352 w
  1688. X9 CW f
  1689. X(...)1008 2462 w
  1690. X(})1008 2572 w
  1691. X10 I f
  1692. X(Rc)720 2752 w
  1693. X10 R f
  1694. X( are the same as)4 647( Patterns)1 376(attempts to match the word against the patterns in each case statement in turn.)13 3164 3 853 2752 t
  1695. X(for filename matching, except that)4 1372 1 720 2872 t
  1696. X10 CW f
  1697. X(/)2117 2872 w
  1698. X10 R f
  1699. X(and the first characters of)4 1013 1 2202 2872 t
  1700. X10 CW f
  1701. X(.)3240 2872 w
  1702. X10 R f
  1703. X(and)3350 2872 w
  1704. X10 CW f
  1705. X(..)3519 2872 w
  1706. X10 R f
  1707. X(need not be matched explicitly.)4 1251 1 3689 2872 t
  1708. X( to the next case \(or the end of the switch\) are)11 1864(If any pattern matches, the commands following that case up)9 2456 2 720 3028 t
  1709. X( example,)1 388( For)1 189(executed, and execution of the switch is complete.)7 2010 3 720 3148 t
  1710. X9 CW f
  1711. X(switch\($#*\){)1008 3318 w
  1712. X(case 1)1 324 1 1008 3428 t
  1713. X(cat >>$1)1 432 1 1224 3538 t
  1714. X(case 2)1 324 1 1008 3648 t
  1715. X(cat >>$2 <$1)2 648 1 1224 3758 t
  1716. X(case *)1 324 1 1008 3868 t
  1717. X(echo 'Usage: append [from] to')4 1620 1 1224 3978 t
  1718. X(})1008 4088 w
  1719. X10 R f
  1720. X( two, the first)3 536( With)1 251( with one file argument, it tacks standard input to its end.)11 2279( Called)1 311(is an append command.)3 943 5 720 4268 t
  1721. X( other number elicits a usage message.)6 1533( Any)1 222(is appended to the second.)4 1051 3 720 4388 t
  1722. X(The built-in)1 475 1 720 4544 t
  1723. X10 CW f
  1724. X(\304)1220 4544 w
  1725. X10 R f
  1726. X( arguments are a)3 659( Its)1 151( more concise than a switch.)5 1136(command also matches patterns, and is often)6 1789 4 1305 4544 t
  1727. X( sets)1 181( It)1 118(string and a list of patterns.)5 1123 3 720 4664 t
  1728. X10 CW f
  1729. X($status)2173 4664 w
  1730. X10 R f
  1731. X(to true if and only if any of the patterns matches the string.)12 2416 1 2624 4664 t
  1732. X(The following example processes option arguments for the)7 2349 1 720 4784 t
  1733. X10 I f
  1734. X(man)3094 4784 w
  1735. X10 R f
  1736. X(\(1\) command:)1 563 1 3266 4784 t
  1737. X9 CW f
  1738. X(opt=\(\))1008 4954 w
  1739. X(while\(\304 $1 -* [1-9] 10\){)4 1296 1 1008 5064 t
  1740. X(switch\($1\){)1224 5174 w
  1741. X(case [1-9] 10)2 702 1 1224 5284 t
  1742. X(sec=$1 secn=$1)1 756 1 1440 5394 t
  1743. X(case -f)1 378 1 1224 5504 t
  1744. X(c=f s=f)1 378 1 1440 5614 t
  1745. X(case -[qwnt])1 648 1 1224 5724 t
  1746. X(cmd=$1)1440 5834 w
  1747. X(case -T*)1 432 1 1224 5944 t
  1748. X(T=$1)1440 6054 w
  1749. X(case -*)1 378 1 1224 6164 t
  1750. X(opt=\($opt $1\))1 702 1 1440 6274 t
  1751. X(})1224 6384 w
  1752. X(shift)1224 6494 w
  1753. X(})1008 6604 w
  1754. Xcleartomark
  1755. Xshowpage
  1756. Xsaveobj restore
  1757. X%%EndPage: 5 5
  1758. X%%Page: 6 6
  1759. X/saveobj save def
  1760. Xmark
  1761. X6 pagesetup
  1762. X10 R f
  1763. X(- 6 -)2 166 1 2797 480 t
  1764. X10 B f
  1765. X(16. Functions)1 598 1 720 840 t
  1766. X10 R f
  1767. X(Functions may be defined by typing)5 1441 1 720 996 t
  1768. X9 CW f
  1769. X(fn)1008 1166 w
  1770. X9 I f
  1771. X(name)1170 1166 w
  1772. X9 CW f
  1773. X({)1419 1166 w
  1774. X9 I f
  1775. X(commands)1527 1166 w
  1776. X9 CW f
  1777. X(})1966 1166 w
  1778. X10 R f
  1779. X(Subsequently, whenever a command named)4 1795 1 720 1346 t
  1780. X10 I f
  1781. X(name)2550 1346 w
  1782. X10 R f
  1783. X(is encountered, the remainder of the command's argu-)7 2238 1 2802 1346 t
  1784. X( to)1 106(ment list will assigned)3 910 2 720 1466 t
  1785. X10 CW f
  1786. X($*)1764 1466 w
  1787. X10 R f
  1788. X(and)1912 1466 w
  1789. X10 I f
  1790. X(rc)2084 1466 w
  1791. X10 R f
  1792. X(will execute the)2 638 1 2195 1466 t
  1793. X10 I f
  1794. X(commands)2861 1466 w
  1795. X10 R f
  1796. X( value of)2 355(. The)1 233 2 3288 1466 t
  1797. X10 CW f
  1798. X($*)3904 1466 w
  1799. X10 R f
  1800. X(will be restored on com-)4 988 1 4052 1466 t
  1801. X( example:)1 391(pletion. For)1 492 2 720 1586 t
  1802. X9 CW f
  1803. X(fn g {)2 324 1 1008 1756 t
  1804. X(gre -e $1 *.[hcyl])3 972 1 1224 1866 t
  1805. END_OF_FILE
  1806.   if test 26880 -ne `wc -c <'plan9.ps.a'`; then
  1807.     echo shar: \"'plan9.ps.a'\" unpacked with wrong size!
  1808.   elif test -f plan9.ps.b; then
  1809.     echo shar: Creating \"'plan9.ps'\" \(67056 characters\)
  1810.     cat plan9.ps.a plan9.ps.b > plan9.ps
  1811.     if test -f plan9.ps ; then
  1812.       rm plan9.ps.a plan9.ps.b
  1813.     fi
  1814.   fi
  1815.   # end of 'plan9.ps.a'
  1816. fi
  1817. echo shar: End of archive 3 \(of 7\).
  1818. cp /dev/null ark3isdone
  1819. MISSING=""
  1820. for I in 1 2 3 4 5 6 7 ; do
  1821.     if test ! -f ark${I}isdone ; then
  1822.     MISSING="${MISSING} ${I}"
  1823.     fi
  1824. done
  1825. if test "${MISSING}" = "" ; then
  1826.     echo You have unpacked all 7 archives.
  1827.     rm -f ark[1-9]isdone
  1828. else
  1829.     echo You still must unpack the following archives:
  1830.     echo "        " ${MISSING}
  1831. fi
  1832. exit 0
  1833. exit 0 # Just in case...
  1834.