home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume33 / xvi / part05 < prev    next >
Encoding:
Text File  |  1992-10-22  |  55.1 KB  |  1,482 lines

  1. Newsgroups: comp.sources.misc
  2. From: jmd@cyclone.bt.co.uk (John Downey)
  3. Subject:  v33i014:  xvi - portable multi-window vi-like editor, Part05/18
  4. Message-ID: <1992Oct23.181137.148@sparky.imd.sterling.com>
  5. X-Md4-Signature: 44503f913eae7f8693126a162a0c3ccc
  6. Date: Fri, 23 Oct 1992 18:11:37 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: jmd@cyclone.bt.co.uk (John Downey)
  10. Posting-number: Volume 33, Issue 14
  11. Archive-name: xvi/part05
  12. Environment: Unix, MS-DOS, OS/2, QNX
  13.  
  14. #! /bin/sh
  15. # This is a shell archive.  Remove anything before this line, then feed it
  16. # into a shell via "sh file" or similar.  To overwrite existing files,
  17. # type "sh file -c".
  18. # Contents:  xvi/doc/summary.UU xvi/src/os2vio.c
  19. # Wrapped by kent@sparky on Thu Oct 22 09:03:41 1992
  20. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  21. echo If this archive is complete, you will see the following message:
  22. echo '          "shar: End of archive 5 (of 18)."'
  23. if test -f 'xvi/doc/summary.UU' -a "${1}" != "-c" ; then 
  24.   echo shar: Will not clobber existing file \"'xvi/doc/summary.UU'\"
  25. else
  26.   echo shar: Extracting \"'xvi/doc/summary.UU'\" \(34026 characters\)
  27.   sed "s/^X//" >'xvi/doc/summary.UU' <<'END_OF_FILE'
  28. Xbegin 664 xvi/doc/summary.lst
  29. XM"@H*"@H*"@H*"0D@4W5M;6%R>2!O9B!$:69F97)E;F-E<R!B971W965N(%9I
  30. XM(&%N9"!8=FD*"@H)"0D@(" @(" @0VAR:7,@1&]W;F5Y"@D)"0E*;VAN($1O
  31. XM=VYE>0H*"@H)(" @(" @(%AV:2 H<')O;F]U;F-E9"!?"&5?"&-?"&M?"',M
  32. XM7PAV7PAE7PAE+5\(95\(>5\(92D@:7,@82!F<F5E+"!P;W)T86)L92P*"2 @
  33. XM;75L=&DM=VEN9&]W(&EM<&QE;65N=&%T:6]N(&]F('1H92!P;W!U;&%R(%5.
  34. XM25A\""T@961I=&]R"@D@('9I+@H*"2 @5&AI<R!D;V-U;65N="!S=6UM87)I
  35. XM<V5S('1H92 @9&EF9F5R96YC97,@(&)E='=E96X@('1H90H)("!@8')E86PG
  36. XM)R @=FD@(&%N9" @>'9I+B @(%1H97-E(&1I9F9E<F5N8V5S(&%R92!D:79I
  37. XM9&5D"@D@(&EN=&\@=&AR964@9W)O=7!S.B!?"'5?"&Y?"&E?"&U?"'!?"&Q?
  38. XM"&5?"&U?"&5?"&Y?"'1?"&5?"&0@7PAF7PAE7PAA7PAT7PAU7PAR7PAE7PAS
  39. XM+" @7PAD7PAI7PAF7PAF7PAE7PAR7PAE7PAN7PAC7PAE7PAS"@D@(&%N9"!?
  40. XM"&5?"&Y?"&A?"&%?"&Y?"&-?"&5?"&U?"&5?"&Y?"'1?"',L(&%N9"!E86-H
  41. XM(&]F('1H97-E(&ES(&1E<V-R:6)E9"!I;B!T:&4*"2 @9F]L;&]W:6YG('-E
  42. XM8W1I;VYS+@H*"@H@(" @(%\(,2X@(%\(55\(;E\(:5\(;5\(<%\(;%\(95\(
  43. XM;5\(95\(;E\(=%\(95\(9"!?"$9?"&5?"&%?"'1?"'5?"')?"&5?"',*"B @
  44. XM(" @7P@Q+E\(,2X@(%\(15\(>"!?"$U?"&]?"&1?"&4*"B @(" @5&AE(&UA
  45. XM:6X@87)E82!I;B!W:&EC:"!X=FD@:7,@;&%C:VEN9R!I<R!V:2=S(%\(95\(
  46. XM>"!M;V1E+" @=VAI8V@@(&ES"B @(" @;F]T(&EM<&QE;65N=&5D(&%T(&%L
  47. XM;" H86YD(&YE:71H97(@87)E(&5D:70L(&4L(&%N9"!O<&5N(&UO9&5S*2X*
  48. XM(" @("!(;W=E=F5R+"!M86YY(&]F('1H92!E>"!C;VUM86YD<R!A<F4@879A
  49. XM:6QA8FQE(&EN("!X=FD@(&%S("!C;VQO;@H@(" @(&-O;6UA;F1S.R @=&AE
  50. XM("!C;VQO;B!C;VUM86YD<R!T:&%T(&AA=F4@;F]T(&)E96X@:6UP;&5M96YT
  51. XM960@87)E"B @(" @;6]S=&QY('1H;W-E('=H:6-H(&]F9F5R('1H92!S86UE
  52. XM(&9U;F-T:6]N86QI='D@87,@;W1H97(@8V]M;6%N9',*(" @("!I;B!V:2!M
  53. XM;V1E+@H*(" @("!3<&5C:69I8V%L;'DL('1H92!F;VQL;W=I;F<@97@@8V]M
  54. XM;6%N9',@87)E(&YO="!I;7!L96UE;G1E9"P@(&%N9 H@(" @('!R;V)A8FQY
  55. XM(&YE=F5R('=I;&P@8F4@=VET:&EN('AV:3H*"@D@(" @(%\(:5\(;E\(<U\(
  56. XM95\(<E\(=" @(" @(" @(%\(=5\(;E\(9%\(;R @(" @(" @(" @7PAE7PAX
  57. XM"@D@(" @(%\(8U\(:%\(85\(;E\(9U\(92 @(" @(" @(%\(;U\(<%\(95\(
  58. XM;B @(" @(" @(" @? H)(" @("!?"&%?"'!?"'!?"&5?"&Y?"&0@(" @(" @
  59. XM("!?"'H*"B @(" @=VAI;&4@=&AE<V4@97@@8V]M;6%N9',L(&%L=&AO=6=H
  60. XM(&YO="!C=7)R96YT;'D@:6UP;&5M96YT960L("!M87D*(" @("!B92!A9&1E
  61. XM9"!A<R!C;VQO;B!C;VUM86YD<R!A="!S;VUE('1I;64@:6X@=&AE(&9U='5R
  62. XM93H*"@D@(" @(%\(85\(8E\(8E\(<E\(95\(=E\(:5\(85\(=%\(92 @(" @
  63. XM7PAR7PAE7PAC7PAO7PAV7PAE7PAR(" @(" @("!?"'=?"')?"&E?"'1?"&4^
  64. XM/@H)(" @("!?"'5?"&Y?"&%?"&)?"&)?"')?"&5?"'9?"&E?"&%?"'1?"&4@
  65. XM("!?"&I?"&]?"&E?"&X*"@H*"@H*(" @("!?7U]?7U]?7U]?7U]?7U]?7U]?
  66. XM7U]?7U]?"B @(" @? @M(%5.25@@:7,@82!T<F%D96UA<FL@;V8@0F5L;"!,
  67. XM86)O<F%T;W)I97,N"@H*"B @(" @7P@R7P@U7PAT7PAH(%\(4U\(95\(<%\(
  68. XM=%\(95\(;5\(8E\(95\(<B!?"#%?"#E?"#E?"#(@(" @(" @(" @(" @(" @
  69. XM(" @(" @(" @(" @(" @(" @(" @(" @7PA07PAA7PAG7PAE(%\(,0H*"@H*
  70. XM"B @(" @7P@R(" @(" @(" @(" @(" @(" @(" @("!?"%-?"'5?"&U?"&U?
  71. XM"&%?"')?"'D@7PAO7PAF(%\(1%\(:5\(9E\(9E\(95\(<E\(95\(;E\(8U\(
  72. XM95\(<R!?"&)?"&5?"'1?"'=?"&5?"&5?"&X@7PA67PAI(%\(85\(;E\(9"!?
  73. XM"%A?"'9?"&D*"@H@(" @(%\(,2Y?"#(N("!?"%9?"&D@7PAC7PAO7PAM7PAM
  74. XM7PAA7PAN7PAD7PAS"@H@(" @(%1H92!F;VQL;W=I;F<@=FD@;6]D92 @8V]M
  75. XM;6%N9',@(&%R92 @;F]T("!I;7!L96UE;G1E9"P@(&%L=&AO=6=H"B @(" @
  76. XM=&AE<F4@:7,@;F\@<F5A;"!R96%S;VX@=VAY('1H97D@<VAO=6QD;B=T(&)E
  77. XM.@H*"2 @(" @7PA5(" @(" @(" @(" @(" ]"@H@(" @('=H:6QE('1H:7,@
  78. XM;VYE(&ES(&EN87!P<F]P<FEA=&4@:6X@('1H92 @8V]N=&5X=" @;V8@('AV
  79. XM:2P@('-I;F-E"B @(" @=&AE<F4@:7,@;F\@7PAE7PAX(&UO9&4Z"@H)(" @
  80. XM("!?"%$*"@H@(" @(%\(,2Y?"#,N("!?"%!?"&%?"')?"&%?"&U?"&5?"'1?
  81. XM"&5?"')?"',*"B @(" @5&AE(&9O;&QO=VEN9R!P87)A;65T97)S(&AA=F4@
  82. XM;F]T(&)E96X@:6UP;&5M96YT960L(&%N9" @<')O8F%B;'D*(" @("!W;VXG
  83. XM="!B93H*"@D@(" @(%\(85\(9%\(82 @(" @(" @(" @(%\(;%\(:5\(<U\(
  84. XM<" @(" @(" @(" @7PAR7PAE7PAD7PAR7PAA7PAW"@D@(" @(%\(85\(9%\(
  85. XM85\(<%\(85\(=%\(:" @(" @(" @7PAM7PAE7PAS7PAG(" @(" @(" @("!?
  86. XM"'-?"&Q?"&]?"'=?"&]?"'!?"&5?"&X*"2 @(" @7PAA7PAU7PAT7PAO7PAP
  87. XM7PAR7PAI7PAN7PAT(" @(" @7PAM7PAO7PAD7PAE7PAL7PAI7PAN7PAE(" @
  88. XM(" @(%\(=%\(95\(<E\(;0H)(" @("!?"&)?"&5?"&%?"'5?"'1?"&E?"&9?
  89. XM"'D@(" @(" @7PAO7PAP7PAE7PAN(" @(" @(" @("!?"'1?"&5?"')?"'-?
  90. XM"&4*"2 @(" @7PAD7PAI7PAR7PAE7PAC7PAT7PAO7PAR7PAY(" @(" @7PAO
  91. XM7PAP7PAT7PAI7PAM7PAI7PAZ7PAE(" @(" @(%\(=%\(=%\(>5\(=%\(>5\(
  92. XM<%\(90H)(" @("!?"&5?"&1?"&-?"&]?"&U?"'!?"&%?"'1?"&E?"&)?"&Q?
  93. XM"&4@("!?"'!?"')?"&]?"&U?"'!?"'0@(" @(" @("!?"'=?"&E?"&Y?"&1?
  94. XM"&]?"'<*"2 @(" @7PAH7PAA7PAR7PAD7PAT7PAA7PAB7PAS"@H@(" @('=H
  95. XM:6QE('1H97-E('!A<F%M971E<G,@;6%Y('=E;&P@8F4@:6UP;&5M96YT960@
  96. XM870@<V]M92!P;VEN=#H*"@D@(" @(%\(85\(=5\(=%\(;U\(=U\(<E\(:5\(
  97. XM=%\(92 @(" @(%\(<U\(8U\(<E\(;U\(;%\(;" @(" @(" @(%\(=U\(85\(
  98. XM<E\(;@H)(" @("!?"&5?"')?"')?"&]?"')?"&)?"&5?"&Q?"&Q?"',@(" @
  99. XM(%\(<U\(;U\(=5\(<E\(8U\(95\(85\(;E\(>2 @(" @(%\(=U\(<E\(:5\(
  100. XM=%\(95\(85\(;E\(>0H*"B @(" @7P@Q+E\(-"X@(%\(35\(:5\(<U\(8U\(
  101. XM95\(;%\(;%\(85\(;E\(95\(;U\(=5\(<PH*(" @("!3;VUE(&9E871U<F5S
  102. XM(&]F(&-E<G1A:6X@8V]M;6%N9',@9&\@;F]T("!W;W)K("!A<R @=&AE>2 @
  103. XM<VAO=6QD+@H@(" @(%-P96-I9FEC86QL>3H*"B @(" @;P@K(" @(%)E<&5A
  104. XM="!C;W5N=',@8F5F;W)E(&EN<V5R=&EO;G,@9&]N)W0@=V]R:RX*"B @(" @
  105. XM;P@K(" @($%P<&5N9&EN9R!T;R!N86UE9"!B=69F97)S(&ES(&YO="!Y970@
  106. XM:6UP;&5M96YT960N"@H@(" @(&\(*R @("!4>7!I;F<@7E$@:6X@:6YP=70@
  107. XM;6]D92!D;V5S(&YO="!M96%N('1H92 @<V%M92 @87,@(%Y6.R @:70*"2 @
  108. XM:G5S=" @:6YS97)T<R @82!@7E$G+"!A<W-U;6EN9R!I="!G971S(&%S(&9A
  109. XM<B!A<R!T:&4@961I=&]R"@D@(&%T(&%L;"X*"B @(" @;P@K(" @(%1Y<&EN
  110. XM9R!>5R!I;B!I;G-E<G0@;6]D92!D;V5S(&YO="!B86-K('5P(&]N92!W;W)D
  111. XM(&%S(&EN('9I+@H*(" @("!O""L@(" @270@:7,@;F]T('!O<W-I8FQE('1O
  112. XM("!I;G1E<G)U<'0@('1H92 @961I=&]R("!W:&EL92 @:70@(&ES"@D@('!E
  113. XM<F9O<FUI;F<@(&-E<G1A:6X@(&]P97)A=&EO;G,N(" @268@('EO=2 @<W1A
  114. XM<G0@(&]F9B!A(&)I9PH)("!G;&]B86P@8V]M;6%N9"P@>6]U(&AA=F4@=&\@
  115. XM=V%I="!F;W(@:70@=&\@9FEN:7-H+@H*(" @("!O""L@(" @1FQA9W,@86YD
  116. XM(&-O=6YT<R!A9G1E<B!C;VQO;B!C;VUM86YD<R!A<F4@;F]T('-U<'!O<G1E
  117. XM9"X*"@H*"@H@(" @(%\(4%\(85\(9U\(92!?"#(@(" @(" @(" @(" @(" @
  118. XM(" @(" @(" @(" @(" @(" @(" @(" @7P@R7P@U7PAT7PAH(%\(4U\(95\(
  119. XM<%\(=%\(95\(;5\(8E\(95\(<B!?"#%?"#E?"#E?"#(*"@H*"@H@(" @(%\(
  120. XM4U\(=5\(;5\(;5\(85\(<E\(>2!?"&]?"&8@7PA$7PAI7PAF7PAF7PAE7PAR
  121. XM7PAE7PAN7PAC7PAE7PAS(%\(8E\(95\(=%\(=U\(95\(95\(;B!?"%9?"&D@
  122. XM7PAA7PAN7PAD(%\(6%\(=E\(:2 @(" @(" @(" @(" @(" @(" @(" @7P@S
  123. XM"@H*"B @(" @;P@K(" @($ET(&ES(&YO="!P;W-S:6)L92!T;R!R96%D('1H
  124. XM92!O=71P=70@;V8@(&$@('-Y<W1E;2 @8V]M;6%N9 H)("!U<VEN9PH*"0D@
  125. XM(#IR("%?"&-?"&]?"&U?"&U?"&%?"&Y?"&0*"@D@(&]R('1O('=R:71E(&EN
  126. XM=&\@82!C;VUM86YD('5S:6YG"@H)"2 @.G<@(5\(8U\(;U\(;5\(;5\(85\(
  127. XM;E\(9 H*"B @(" @;P@K(" @(%1H92 Z<W5B<W1I='5T92!C;VUM86YD(&1O
  128. XM97,@;F]T('-U<'!O<G0@<W!L:71T:6YG(&]F(&QI;F5S+@H*(" @("!O""L@
  129. XM(" @4F5G=6QA<B!E>'!R97-S:6]N<RP@86QT:&]U9V@@(&EM<&QE;65N=&5D
  130. XM(" H<V5E("!L871E<B @9F]R"@D@(&UO<F4@(&1E=&%I;',I+"!D;R!N;W0@
  131. XM<W5P<&]R="!T:&4@?B!C:&%R86-T97([(&%L<V\L('1H92!<=0H)("!A;F0@
  132. XM7&P@97-C87!E('-E<75E;F-E<R!A<F4@;F]T('-U<'!O<G1E9"!O;B!T:&4@
  133. XM(')I9VAT+6AA;F0*"2 @<VED92!O9B!A('-U8G-T:71U=&4@<F5P;&%C96UE
  134. XM;G0@<&%T=&5R;BX*"B @(" @;P@K(" @(%1H92 Z9VQO8F%L(&-O;6UA;F0@
  135. XM;VYL>2!S=7!P;W)T<R!T:&4@8V]M;6%N9',@6VQP<R9^9%TN"@H@(" @(&\(
  136. XM*R @("!5;F1O(&1O97,@;F]T('=O<FL@<')O<&5R;'D@=VAE;B!A<'!L:65D
  137. XM('1O(&UA8W)O<R H96ET:&5R($ *"2 @;W(@(#IM87 I.R!I="!S:&]U;&0@
  138. XM=6YD;R!A;&P@=&AE(&-H86YG97,@;6%D92!B>2!T:&4@;6%C<F\L"@D@(&)U
  139. XM="!I;B!F86-T(&]N;'D@('1H92 @;&%S=" @8V]M;6%N9" @=VET:&EN("!T
  140. XM:&4@(&UA8W)O("!I<PH)("!U;F1O;F4N"@H@(" @(%\(,BX@(%\(15\(;E\(
  141. XM:%\(85\(;E\(8U\(95\(;5\(95\(;E\(=%\(<PH*(" @("!4:&4@9F]L;&]W
  142. XM:6YG(&5X=&5N<VEO;G,@87)E(&%V86EL86)L92!I;B!X=FDN"@H@(" @(%\(
  143. XM,BY?"#$N("!?"%!?"&%?"')?"&%?"&U?"&5?"'1?"&5?"'(@7PA(7PAA7PAN
  144. XM7PAD7PAL7PAI7PAN7PAG"@H@(" @(%AV:2!S=7!P;W)T<R U('1Y<&5S(&]F
  145. XM("!P87)A;65T97(Z("!A<R @=V5L;" @87,@('9I)W,@(%\(;E\(=5\(;5\(
  146. XM95\(<E\(:5\(8RP*(" @("!?"'-?"'1?"')?"&E?"&Y?"&<@(&%N9" @7PAB
  147. XM7PAO7PAO7PAL7PAE7PAA7PAN+"!I="!A;'-O(&AA<R!?"&5?"&Y?"'5?"&U?
  148. XM"&5?"')?"&%?"'1?"&5?"&0@86YD(%\(;%\(:5\(<U\(="!T>7!E<RX@(%1H
  149. XM90H@(" @(&9O<FUE<B!I<R!U<V5D(&9O<B!E+F<N(&9O<FUA="!A;F0@<F5G
  150. XM97AT>7!E+"!W:&EL92!T:&4@;&%T=&5R(&ES"B @(" @8W5R<F5N=&QY("!O
  151. XM;FQY("!U<V5D("!F;W(@=&%G<RX@(%1H92!A9'9A;G1A9V4@;V8@=&AE(%\(
  152. XM95\(;E\(=5\(;5\(95\(<E\(85\(=%\(95\(9 H@(" @('1Y<&4@:7,@=&AA
  153. XM="!I9B!Y;W4@=')Y('1O('-E=" @86X@(&EL;&5G86P@('9A;'5E+" @=&AE
  154. XM("!S970@(&]F"B @(" @8V]R<F5C=" @=F%L=65S("!W:6QL("!B92 @9&ES
  155. XM<&QA>65D+"!W:&EC:"!I<R!V97)Y('5S969U;"!I9B!Y;W4*(" @("!H879E
  156. XM(&9O<F=O='1E;B!W:&%T('1H92!V86QU97,@;6%Y(&)E+B @*%1R>2 Z<V5T
  157. XM('!R97-E<G9E('1O('-E90H@(" @(&%N(&5X86UP;&4@;V8@=&AI<RXI"@H@
  158. XM(" @(%\(,BY?"#(N("!?"%=?"&E?"&Y?"&1?"&]?"'=?"',*"B @(" @6'9I
  159. XM('-U<'!O<G1S(&UU;'1I<&QE(%\(8E\(=5\(9E\(9E\(95\(<E\(<R @86YD
  160. XM("!?"'=?"&E?"&Y?"&1?"&]?"'=?"',N(" @02 @7PAB7PAU7PAF7PAF7PAE
  161. XM7PAR("!I<R @=&AE"B @(" @;V)J96-T('=H:6-H(&AO;&1S(&$@9FEL92!I
  162. XM;B!M96UO<GDL('=H:6QE(&$@7PAW7PAI7PAN7PAD7PAO7PAW(&ES(&%N(&%R
  163. XM96$@;V8*(" @("!T:&4@<V-R965N('=H:6-H('-H;W=S('!A<G0@;V8@82!B
  164. XM=69F97(N("!.;W1E('1H870@979E<GD@('=I;F1O=PH@(" @(')E9F5R96YC
  165. XM97,@82!B=69F97(L(&5V96X@:68@;F\@9FEL92!I<R!B96EN9R!E9&ET960N
  166. XM"@H@(" @(%1H92!F;VQL;W=I;F<@8V]M;6%N9',@87)E(&%V86EL86)L92!F
  167. XM;W(@;W!E<F%T:6YG(&]N(&)U9F9E<G,@86YD"B @(" @=VEN9&]W<SH*"B @
  168. XM(" @.F)U9F9E<B @(&-R96%T92!A(&YE=R!B=69F97(@:6X@82!N97<@=VEN
  169. XM9&]W.R!C86X@8F4@9F]L;&]W960@8GD*"2 @(" @("!A(&9I;&5N86UE+"!W
  170. XM:&EC:"!W:6QL(&)E(&5D:71E9"!I;B!T:&4@;F5W(&)U9F9E<BX*"B @(" @
  171. XM.G-P;&ET(" @(&-R96%T92 @82 @;F5W("!W:6YD;W<@(&]N=&\@('1H92 @
  172. XM8W5R<F5N=" @8G5F9F5R(" @8GD*"2 @(" @("!S<&QI='1I;F<@("!T:&4@
  173. XM("!C=7)R96YT("!W:6YD;W<@(&EN("!H86QF+B @(%1H92 @='=O"@H*(" @
  174. XM("!?"#)?"#5?"'1?"&@@7PA37PAE7PAP7PAT7PAE7PAM7PAB7PAE7PAR(%\(
  175. XM,5\(.5\(.5\(,B @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
  176. XM(" @("!?"%!?"&%?"&=?"&4@7P@S"@H*"@H*(" @("!?"#0@(" @(" @(" @
  177. XM(" @(" @(" @(" @(%\(4U\(=5\(;5\(;5\(85\(<E\(>2!?"&]?"&8@7PA$
  178. XM7PAI7PAF7PAF7PAE7PAR7PAE7PAN7PAC7PAE7PAS(%\(8E\(95\(=%\(=U\(
  179. XM95\(95\(;B!?"%9?"&D@7PAA7PAN7PAD(%\(6%\(=E\(:0H*"@D@(" @(" @
  180. XM<F5S=6QT:6YG('=I;F1O=W,@87)E('-I;6EL87(@('1O("!?"'9?"&E?"&5?
  181. XM"'=?"'!?"&]?"')?"'1?"',@(&]N("!T;R @80H)(" @(" @('-I;F=L92 @
  182. XM961I=&EN9R @8G5F9F5R+" @:6X@('1H870@(&-H86YG97,@;6%D92!I;B!O
  183. XM;F4*"2 @(" @("!W:6YD;W<@87)E(')E9FQE8W1E9"!I;B!T:&4@;W1H97(@
  184. XM;VYE+@H*(" @(" Z8VQO<V4@(" @8VQO<V4@=&AE(&-U<G)E;G0@=VEN9&]W
  185. XM.R!W:6QL(&%L<V\@8VQO<V4@=&AE(&)U9F9E<B!I9@H)(" @(" @('1H:7,@
  186. XM:7,@=&AE(&QA<W0@=VEN9&]W(&]N=&\@:70N"@H@(" @(#IX("\@6EH@("!C
  187. XM;&]S92!O;FQY('1H92!C=7)R96YT('=I;F1O=RX@($EF('1H92 @=VEN9&]W
  188. XM("!I<R @=&AE"@D@(" @(" @;VYL>2 @;VYE(&]N=&\@=&AE(&)U9F9E<BP@
  189. XM=&AE(&)U9F9E<B!W:6QL(&)E(&-L;W-E9"!A<PH)(" @(" @('=E;&PL('=R
  190. XM:71I;F<@:70@9FER<W0@:68@:70@:7,@;6]D:69I960N("!(96YC92P@9F]R
  191. XM(&$*"2 @(" @("!S:6YG;&4@=VEN9&]W+"!T:&ES(&-O;6UA;F0@9&]E<R!T
  192. XM:&4@<V%M92!A<R!I;B!V:2X*"B @(" @9R @(" @(" @(&UO=F4@=&\@=&AE
  193. XM(&YE>'0@=VEN9&]W+B @5&AI<R!I<R!N;W)M86QL>2 @=&AE("!W:6YD;W<*
  194. XM"2 @(" @("!D:7)E8W1L>2 @8F5L;W<@('1H92 @8W5R<F5N="!O;F4@;VX@
  195. XM=&AE('-C<F5E;BP@;W(@=&AE"@D@(" @(" @=&]P('=I;F1O=R!O;B!T:&4@
  196. XM<V-R965N(&EF('1H92!C=7)R96YT('=I;F1O=R @:7,@('1H90H)(" @(" @
  197. XM(&)O='1O;2!O;F4N"@H@(" @(%Y7(" @(" @("!I;F-R96%S92!T:&4@<VEZ
  198. XM92!O9B!T:&4@8W5R<F5N="!W:6YD;W<@*&UA>2!B92!G:79E;B!A"@D@(" @
  199. XM(" @;G5M97)I8R!P<F5F:7@L(&1E9F%U;'0@:7,@;VYE(&QI;F4I+@H*(" @
  200. XM("!>5" @(" @(" @9&5C<F5A<V4@=&AE('-I>F4@;V8@=&AE(&-U<G)E;G0@
  201. XM=VEN9&]W("AM87D@8F4@9VEV96X@80H)(" @(" @(&YU;65R:6,@<')E9FEX
  202. XM+"!D969A=6QT(&ES(&]N92!L:6YE*2X*"B @(" @7D\@(" @(" @(&UA:V4@
  203. XM=&AE(&-U<G)E;G0@=VEN9&]W(&%S(&QA<F=E(&%S('!O<W-I8FQE+@H*(" @
  204. XM("!>72 @(" @(" @87,@(&9O<B @=FDL("!B=70@(&-R96%T97,@(&$@(&YE
  205. XM=R @8G5F9F5R("!W:6YD;W<@("!I9@H)(" @(" @(&%P<')O<')I871E("AA
  206. XM;F0@:68@875T;W-P;&ET(&%L;&]W<RDN"@H@(" @($YO=&4@=&AA="!T:&4@
  207. XM.G%U:70@8V]M;6%N9"!Q=6ET<R!O=70@;V8@=&AE(&5D:71O<BP@;F]T(&]U
  208. XM="!O9B!A"B @(" @=VEN9&]W+B @(%1H92 @.F-L;W-E(&-O;6UA;F0@:7,@
  209. XM=&AU<R!T:&4@97%U:79A;&5N="!O9B Z<75I="!F;W(*(" @("!W:6YD;W=S
  210. XM+B @5&AE<F4@:7,@;F\@97%U:79A;&5N=" @;V8@(#IX("!O<B @6EH@(&9O
  211. XM<B @=&AE("!W:&]L90H@(" @(&5D:71O<CL@=&AE<V4@:&%V92!B965N(&AI
  212. XM:F%C:V5D(&9O<B!O<&5R871I;VYS(&]N('=I;F1O=W,N"@H@(" @($%L<V\@
  213. XM=&AE(&YU;65R:6,@875T;W-P;&ET('!A<F%M971E<B!S<&5C:69I97,@=&AE
  214. XM(&UA>&EM=6T@;G5M8F5R"B @(" @;V8@8G5F9F5R('=I;F1O=W,@=&AA="!W
  215. XM:6QL(&)E(&-R96%T960@875T;VUA=&EC86QL>2!W:&5N979E<B!Y;W4*(" @
  216. XM("!E:71H97(@961I="!M;W)E('1H86X@;VYE(&9I;&4L(&]R('5S92!T86=S
  217. XM('1O(&5D:70@(&$@(&1I9F9E<F5N= H@(" @(&9I;&4N"@H@(" @(%5N9&\@
  218. XM=V]R:W,@<&5R(&)U9F9E<BP@87,@9&\@;6%R:W,[("!Y86YK+W!U=" @86YD
  219. XM("!R961O(" H=&AE(" N"B @(" @8V]M;6%N9"D@('=O<FL@(&]V97(@(&%L
  220. XM;" @8G5F9F5R<RP@(&DN92X@>6]U(&-A;B!D96QE=&4@9G)O;2!O;F4*(" @
  221. XM("!B=69F97(@86YD('!U="!T:&4@=&5X="!I;G1O(&$@9&EF9F5R96YT(&)U
  222. XM9F9E<BX*"B @(" @5&AE(&UI;G)O=W,@<&%R86UE=&5R('-P96-I9FEE<R!T
  223. XM:&4@;6EN:6UU;2 @;G5M8F5R("!O9B @<F]W<R @=&\*(" @("!W:&EC:" @
  224. XM82 @=VEN9&]W("!M87D@(&)E('-H<G5N:RP@:6YC;'5D:6YG('1H92!S=&%T
  225. XM=7,@;&EN92X@(%1H90H@(" @(&1E9F%U;'0@=F%L=64@:7,@,CL@,"!A;F0@
  226. XM,2!M87D@86QS;R!B92!U<V5F=6PN"@H@(" @(%\(,BY?"#,N("!?"$Y?"&%?
  227. XM"&U?"&5?"&0@7PA"7PAU7PAF7PAF7PAE7PAR7PAS"@H@(" @($%S('=E;&P@
  228. XM87,@=&AE(&YO<FUA;"!N86UE9" H8V]N:G5G871E*2!B=69F97)S+"!A;F0@
  229. XM=&AE("!D969A=6QT"B @(" @;VYE("!N86UE9"! +"!S979E<F%L(&5X=')A
  230. XM(&)U9F9E<G,@;F%M960@.BP@+RP@/R @86YD("$@(&-O;G1A:6X*(" @("!T
  231. XM:&4@;&%S="!C;VUM86YD(&QI;F5S(&5N=&5R960@9F]R(&5A8V@@;V8@=&AE
  232. XM(&-O;6UA;F0@='EP97,N("!3;PH@(" @(&9O<B @:6YS=&%N8V4L("! .B!W
  233. XM:6QL(')E+65X96-U=&4@=&AE(&QA<W0@8V]L;VX@8V]M;6%N9"P@;W(@>6]U
  234. XM"B @(" @8V%N(&EN<V5R="!I="!I;G1O('EO=7(@8G5F9F5R+"!E9&ET(&ET
  235. XM(&%N9" @=&AE;B @<F4M97AE8W5T92 @:70*(" @(" H92YG+B!W:71H(%\(
  236. XM9%\(9$! *2X*"@H*(" @("!?"%!?"&%?"&=?"&4@7P@T(" @(" @(" @(" @
  237. XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(%\(,E\(-5\(=%\(:"!?"%-?
  238. XM"&5?"'!?"'1?"&5?"&U?"&)?"&5?"'(@7P@Q7P@Y7P@Y7P@R"@H*"@H*(" @
  239. XM("!?"%-?"'5?"&U?"&U?"&%?"')?"'D@7PAO7PAF(%\(1%\(:5\(9E\(9E\(
  240. XM95\(<E\(95\(;E\(8U\(95\(<R!?"&)?"&5?"'1?"'=?"&5?"&5?"&X@7PA6
  241. XM7PAI(%\(85\(;E\(9"!?"%A?"'9?"&D@(" @(" @(" @(" @(" @(" @(" @
  242. XM(%\(-0H*"@H@(" @(%\(,BY?"#0N("!?"$9?"&E?"&Q?"&4@7PA&7PAO7PAR
  243. XM7PAM7PAA7PAT7PAS"@H@(" @(%AV:2!W:6QL(&AA;F1L92!D:69F97)E;G0@
  244. XM9FEL92!F;W)M871S+"!V:6$@=&AE(&9O<FUA="!P87)A;65T97(L"B @(" @
  245. XM=VAI8V@@(&UA>2 @8F4@<V5T('1O(&4N9RX@(")U;FEX(BP@(FUS9&]S(BP@
  246. XM971C+B @5&AI<R!M96%N<R!Y;W4*(" @("!C86X@961I="!-4RU$3U,@9FEL
  247. XM97,@=6YD97(@54Y)6"P@971C+@H*(" @("!?"#(N7P@U+B @7PA27PAE7PAG
  248. XM7PAU7PAL7PAA7PAR(%\(15\(>%\(<%\(<E\(95\(<U\(<U\(:5\(;U\(;E\(
  249. XM<PH*(" @("!6:2=S(&UA9VEC('!A<F%M971E<B!I<R @<F5P;&%C960@(&)Y
  250. XM("!T:&4@(')E9V5X='EP92 @<&%R86UE=&5R+ H@(" @('=H:6-H(&-A;B!T
  251. XM86ME('1H92!F;VQL;W=I;F<@=F%L=65S.@H*(" @("!T86=S(" @(" @;VYL
  252. XM>2!>(&%N9" D(&%R92!S:6=N:69I8V%N=" H=7-E9"!F;W(@=&%G<RDN"@H@
  253. XM(" @(&=R97 @(" @("!L:6ME(%\(9U\(<E\(95\(<"@Q*2P@8G5T('=I=&@@
  254. XM7PA</"!A;F0@7PA</B!A9&1E9"X*"B @(" @96=R97 @(" @(&QI:V4@7PAE
  255. XM7PAG7PAR7PAE7PAP*#$I+"!B=70@=VET:"!?"%P\(&%N9"!?"%P^(&%D9&5D
  256. XM+@H*(" @("!4:&4@9&5F875L="!I<R!?"&=?"')?"&5?"' N"@H@(" @(%1H
  257. XM92 @<V5C=&EO;G,@(&%N9" @<&%R86=R87!H<R @<&%R86UE=&5R<R @(&1E
  258. XM9FEN92 @(%\(95\(9U\(<E\(95\(<"US='EL90H@(" @('!A='1E<FYS("!T
  259. XM;R @<V5A<F-H(&9O<BP@<F%T:&5R('1H86X@7PAV7PAI)W,@<VEM<&QI<W1I
  260. XM8R H86YD(%\(=%\(<E\(;U\(9E\(9BT*(" @("!D97!E;F1E;G0I(&-H87)A
  261. XM8W1E<B!P86ER<RX*"B @(" @5&AE('-E;G1E;F-E<R!P87)A;65T97(@:7,@
  262. XM86QS;R!I;7!L96UE;G1E9"!I;B!T:&ES(&9A<VAI;VXL("!B=70*(" @("!T
  263. XM:&ES(&ES(&YO="!C;VUP;&5T96QY('-A=&ES9F%C=&]R>2!A="!T:&4@;6]M
  264. XM96YT+@H*(" @("!.;W1E('1H870@:70@:7,@<&]S<VEB;&4@=&\@<V5T(&]R
  265. XM('5N<V5T('1H92!M86=I8R @<&%R86UE=&5R("!A<PH@(" @(&EN("!V:3L@
  266. XM('1H:7,@=VEL;"!S:6UP;'D@<F5S=6QT(&EN('1H92!R96=E>'1Y<&4@<&%R
  267. XM86UE=&5R(&)E:6YG"B @(" @<V5T(&%S(&%P<')O<')I871E+@H*(" @("!?
  268. XM"#(N7P@V+B @7PA#7PAO7PAL7PAO7PAU7PAR"@H@(" @(%AV:2!H87,@82!M
  269. XM:6YI;6%L(&%M;W5N=" @;V8@('-U<'!O<G0@(&9O<B @8V]L;W5R<RX@("!"
  270. XM87-I8V%L;'DL"B @(" @=&AE<F4@(&%R92 @8V]N<VED97)E9" @=&\@(&)E
  271. XM(&9O=7(@<V5T=&%B;&4@8V]L;W5R<RP@96%C:"!W:71H(&$*(" @("!N=6UE
  272. XM<FEC('!A<F%M971E<B!T;R!S87D@=VAA="!I=',@=F%L=64@:7,Z"@H@(" @
  273. XM(&-O;&]U<B @(" @(" @8V]L;W5R('5S960@9F]R('1E>'0*"B @(" @<W1A
  274. XM='5S8V]L;W5R("!C;VQO=7(@=7-E9"!F;W(@<W1A='5S(&QI;F5S"@H@(" @
  275. XM(')O<V-O;&]U<B @(" @87,@<W1A='5S8V]L;W5R+"!B=70@9F]R(')E861O
  276. XM;FQY(&9I;&5S"@H@(" @('-Y<W1E;6-O;&]U<B @8V]L;W5R('5S960@9F]R
  277. XM('-Y<W1E;2 @;6]D92 @*&DN92X@('-U8G-H96QL<R @86YD"@D)(" @869T
  278. XM97(@=&5R;6EN871I;VXI+@H*(" @("!4:&4@86-T=6%L('9A;'5E<R!O9B!T
  279. XM:&5S92!P87)A;65T97)S(&%R92!S>7-T96TM9&5P96YD96YT.R!O;B!00PH@
  280. XM(" @('9E<G-I;VYS+" @=&AE>2!A<F4@:&%R9'=A<F4M9&5P96YD96YT('9I
  281. XM9&5O(&%T=')I8G5T97,L('=H:6QE(&]N"B @(" @54Y)6"!T:&5Y(&%R92!I
  282. XM;F1E>&5S(&EN=&\@=&AE(&5N=')I97,@8&!C,"<G('1O("!@8&,Y)R<@(&EN
  283. XM("!T:&4*(" @("!?"'1?"&5?"')?"&U?"&-?"&%?"' H-2D@(&1A=&%B87-E
  284. XM+" @=VAI8V@@(&%R92 @87-S=6UE9" @=&\@(&)E(&-O;&]U<BUS971T:6YG
  285. XM"B @(" @97-C87!E('-E<75E;F-E<R!I9B!T:&5Y(&%R92!P<F5S96YT+B @
  286. XM268@=&AE>2!A<F4@(&YO=" @<')E<V5N="P*(" @(" B<V\B(" H8F5G:6X@
  287. XM<W1A;F1O=70@;6]D92D@86YD(")S92(@*&5N9"!S=&%N9&]U="!M;V1E*2!A
  288. XM<F4@=7-E9 H@(" @(&EN<W1E860N("!686QU97,@;V8@,"!A;F0@(#$@(&=I
  289. XM=F4@(&YO<FUA;" @=&5X="P@(#(@('1O(" Y("!G:79E"B @(" @<W1A;F1O
  290. XM=70@;6]D92X*"@H*(" @("!?"#)?"#5?"'1?"&@@7PA37PAE7PAP7PAT7PAE
  291. XM7PAM7PAB7PAE7PAR(%\(,5\(.5\(.5\(,B @(" @(" @(" @(" @(" @(" @
  292. XM(" @(" @(" @(" @(" @(" @("!?"%!?"&%?"&=?"&4@7P@U"@H*"@H*(" @
  293. XM("!?"#8@(" @(" @(" @(" @(" @(" @(" @(%\(4U\(=5\(;5\(;5\(85\(
  294. XM<E\(>2!?"&]?"&8@7PA$7PAI7PAF7PAF7PAE7PAR7PAE7PAN7PAC7PAE7PAS
  295. XM(%\(8E\(95\(=%\(=U\(95\(95\(;B!?"%9?"&D@7PAA7PAN7PAD(%\(6%\(
  296. XM=E\(:0H*"B @(" @5&AE(&1E9F%U;'0@8V]L;W5R("!F;W(@('1H92 @<F]S
  297. XM8V]L;W5R("!P87)A;65T97(@('=I;&P@('5S=6%L;'D*(" @("!I;G9O;'9E
  298. XM(')E9"!I9B!C;VQO=7)S(&%R92!A=F%I;&%B;&4[('1H:7,@:7,@:6YT96YD
  299. XM960@=&\@<')O=FED90H@(" @(&$@=V%R;FEN9R!T;R!T:&4@=7-E<B!T:&%T
  300. XM('=R:71I;F<@=&AE(&9I;&4@;6%Y(&YO="!B92!P;W-S:6)L92X*"B @(" @
  301. XM5&AE(&-O;&]U<B!V86QU97,@;6%Y(&)E(&5N=&5R960@:6X@9&5C:6UA;"P@
  302. XM;V-T86P@;W(@:&5X861E8VEM86P*(" @("!F;W)M+B @(%1H:7,@(&UA>2!B
  303. XM92!C;VYV96YI96YT(&9O<B!00R!V97)S:6]N<R!W:&5R92!T:&4@;G5M8F5R
  304. XM<PH@(" @(&%C='5A;&QY(')E<')E<V5N="!C;VQO=7(@8FET;6%P<SL@9F]R
  305. XM(&5X86UP;&4L(&]N($U3+41/4RP*"@D@(" @(#I?"'-?"&5?"'0@7PAC7PAO
  306. XM/5\(,%\(>%\(,5\(9@H*(" @("!G:79E<R!B<FEG:'0@=VAI=&4@=&5X="!O
  307. XM;B!A(&)L=64@8F%C:V=R;W5N9"X*"B @(" @7P@R+E\(-RX@(%\(4E\(95\(
  308. XM<%\(;%\(85\(8U\(92!?"$U?"&]?"&1?"&4*"B @(" @6'9I)W,@(%\(<E\(
  309. XM95\(<%\(;%\(85\(8U\(92 @;6]D92 @*&5N=&5R960@(&)Y("!T:&4@(%(@
  310. XM(&-O;6UA;F0I("!A8W1S(" @;6]R90H@(" @(&EN=&5L;&EG96YT;'D@('=H
  311. XM96X@>6]U('!R97-S('1H92!R971U<FX@:V5Y("T@:70@;&5A=F5S('1H92!R
  312. XM97-T"B @(" @;V8@=&AE(&-U<G)E;G0@;&EN92!A;&]N92P@86YD(&IU<W0@
  313. XM<W1A<G1S(')E<&QA8VEN9R!T97AT(&]N("!T:&4*(" @("!N97AT(&QI;F4L
  314. XM('-T87)T:6YG(&%T('1H92!S8W)E96X@8V]L=6UN('=H97)E('EO=2!F:7)S
  315. XM="!T>7!E9"!2+@H*(" @("!?"#(N7P@X+B @7PA07PAR7PAE7PAS7PAE7PAR
  316. XM7PAV7PAE"@H@(" @(%)A=&AE<B!T:&%N('5S92!V:2=S(%5.25@M<W!E8VEF
  317. XM:6,@;65T:&]D(&9O<B @<')E<V5R=F%T:6]N+" @>'9I"B @(" @9&]E<R @
  318. XM<&5R:6]D:6,@('!R97-E<G9A=&EO;B @;V8@86QL(&9I;&5S(&-U<G)E;G1L
  319. XM>2!B96EN9R!E9&ET960*(" @("!I;G1O(&$@=&5M<&]R87)Y(&9I;&4@:6X@
  320. XM=&AE('-A;64@9&ER96-T;W)Y+B @(%AV:2 @=')I97,@('1O("!D;PH@(" @
  321. XM('1H:7,@('=H96X@>6]U(&%R92!N;W0@='EP:6YG+"!S;R!T:&%T('EO=2!W
  322. XM;VXG="!N;W1I8V4@=&AE('-H;W)T"B @(" @9&5L87D@=VAE;B!T:&4@=&5M
  323. XM<&]R87)Y(&9I;&4@:7,@=W)I='1E;B @;W5T+B @($]B=FEO=7-L>2P@(&]N
  324. XM;'D*(" @("!C:&%N9V5D("!F:6QE<R @87)E('!R97-E<G9E9"!I;B!T:&ES
  325. XM('=A>2P@86YD('1H92!T96UP;W)A<GD@9FEL90H@(" @(&ES(&YO<FUA;&QY
  326. XM(')E;6]V960@;VYC92!T:&4@(')E86P@(&9I;&4@(&AA<R @8F5E;B @<W5C
  327. XM8V5S<V9U;&QY"B @(" @=W)I='1E;BX@("!!<R @86X@(&%D9&ET:6]N86P@
  328. XM('-A9F5T>2 @;65A<W5R92P@('=H96X@(&$@(&9I;&4@:7,*(" @("!E>'!L
  329. XM:6-I=&QY('-A=F5D(&%N9" @:70@(&%P<&5A<G,@(&YO=" @=&\@(&AA=F4@
  330. XM(&)E96X@('!R97-E<G9E9 H@(" @(')E8V5N=&QY+" @:70@(&ES("!N;W)M
  331. XM86QL>2 @<')E<V5R=F5D(&9I<G-T+B @5&AI<R!E;G-U<F5S('1H870L"B @
  332. XM(" @979E;B!I9B!T:&4@;W!E<F%T:6YG('-Y<W1E;2!C<F%S:&5S('=H:6QE
  333. XM('1H92!R96%L(&9I;&4@:7,@8F5I;F<*(" @("!C<F5A=&5D+"!T:&5R92!S
  334. XM:&]U;&0@86QW87ES(&)E(&%T(&QE87-T(&]N92!R96-E;G0@8V]P>2!O9B!I
  335. XM="!I;@H@(" @('1H92!F:6QE<WES=&5M+B @5&AE(#IP<F5S97)V92!C;VUM
  336. XM86YD(&ES(&%V86EL86)L92!A<R!I;B @=FD@('1O"B @(" @<')E<V5R=F4@
  337. XM82!S<&5C:69I8R!B=69F97(@;6%N=6%L;'DN"@H@(" @(%1H92!L979E;"!O
  338. XM9B!S869E='D@<')O=FED960@8GD@=&AE('!R97-E<G9A=&EO;B!F86-I;&ET
  339. XM>2!M87D@(&)E"B @(" @8V]N9FEG=7)E9" @(&)Y(" @8VAA;F=I;F<@("!T
  340. XM:&4@("!V86QU97,@(&]F("!T:&4@(%\(<%\(<E\(95\(<U\(95\(<E\(=E\(
  341. XM92 @86YD"B @(" @7PAP7PAR7PAE7PAS7PAE7PAR7PAV7PAE7PAT7PAI7PAM
  342. XM7PAE('!A<F%M971E<G,N("!4:&4@9F]L;&]W:6YG('9A;'5E<R!A<F4@879A
  343. XM:6QA8FQE("!F;W(*(" @("!?"'!?"')?"&5?"'-?"&5?"')?"'9?"&4Z"@H@
  344. XM(" @('5N<V%F92 @("!.979E<B!P<F5S97)V92!A;GD@(&)U9F9E<B @8F5F
  345. XM;W)E("!A;B @97AP;&EC:70@('-A=F4N"@D@(" @(" @5&AI<R @8V%N("!B
  346. XM92!U<V5F=6P@;VX@;VQD+"!S;&]W+"!F;&]P<'DM;VYL>2!S>7-T96US+ H)
  347. XM(" @(" @(&)U="!I<R!N;W0@9V5N97)A;&QY(')E8V]M;65N9&5D+@H*(" @
  348. XM("!S=&%N9&%R9" @5&AE(&1E9F%U;'0@=F%L=64N("!/;FQY('!R97-E<G9E
  349. XM(&$@(&)U9F9E<B @8F5F;W)E("!A;@H)(" @(" @(&5X<&QI8VET("!S879E
  350. XM(&EF(&ET(&%P<&5A<G,@;F]T('1O(&AA=F4@8F5E;B!P<F5S97)V960*"2 @
  351. XM(" @("!R96-E;G1L>2X*"B @(" @<V%F92 @(" @($%L=V%Y<R!P<F5S97)V
  352. XM92!B=69F97)S(&)E9F]R92!T:&5Y(&%R92!W<FET=&5N+@H*(" @("!P87)A
  353. XM;F]I9" @07,@9F]R('-A9F4L(&)U="!T:&4@<')E<V5R=F4@9FEL92 @:7,@
  354. XM(&YE=F5R("!R96UO=F5D+ H)(" @(" @(&5V96X@869T97(@=&AE(&9I;&4@
  355. XM:&%S(&)E96X@<W5C8V5S<V9U;&QY('=R:71T96XN"@H@(" @($EN(&%L;"!C
  356. XM87-E<RP@86QL(&UO9&EF:65D(&)U9F9E<G,@(&%R92 @<')E<V5R=F5D("!A
  357. XM=71O;6%T:6-A;&QY"@H*(" @("!?"%!?"&%?"&=?"&4@7P@V(" @(" @(" @
  358. XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(%\(,E\(-5\(=%\(:"!?
  359. XM"%-?"&5?"'!?"'1?"&5?"&U?"&)?"&5?"'(@7P@Q7P@Y7P@Y7P@R"@H*"@H*
  360. XM(" @("!?"%-?"'5?"&U?"&U?"&%?"')?"'D@7PAO7PAF(%\(1%\(:5\(9E\(
  361. XM9E\(95\(<E\(95\(;E\(8U\(95\(<R!?"&)?"&5?"'1?"'=?"&5?"&5?"&X@
  362. XM7PA67PAI(%\(85\(;E\(9"!?"%A?"'9?"&D@(" @(" @(" @(" @(" @(" @
  363. XM(" @(%\(-PH*"B @(" @869T97(@;F\@=7-E<B!E=F5N=',@:&%V92!B965N
  364. XM(')E8V5I=F5D(&9O<B!?"'!?"')?"&5?"'-?"&5?"')?"'9?"&5?"'1?"&E?
  365. XM"&U?"&4@<V5C;VYD<RP*(" @("!I9B!A(&UI;FEM=6T@;G5M8F5R(&]F(&5V
  366. XM96YT<R H8W5R<F5N=&QY(#8P*2!H879E("!B965N("!R96-E:79E9 H@(" @
  367. XM('-I;F-E("!T:&4@(&QA<W0@(&%U=&]M871I8R @<')E<V5R=F%T:6]N+B @
  368. XM5&AI<R!B96AA=FEO=7(@8V%N(&)E"B @(" @;6]R92!O<B!L97-S(&1I<V%B
  369. XM;&5D(&)Y('-E='1I;F<@(%\(<%\(<E\(95\(<U\(95\(<E\(=E\(95\(=%\(
  370. XM:5\(;5\(92 @=&\@(&$@('9E<GD@(&AI9V@*(" @("!V86QU92X@(" H1F]R
  371. XM("!E>&%M<&QE+" @;VYE(&]F('1H92!A=71H;W)S('-E=',@:70@=&\@-C P
  372. XM(&]N('1H90H@(" @(&UA8VAI;F4@:&4@=7-E<R!A="!H;VUE+"!W:&EC:"!I
  373. XM<R!A;B X,#@X+6)A<V5D(%!#('=I=&@@(&YO("!H87)D"B @(" @9&ES:SL@
  374. XM(&)Y("!W87D@;V8@8V]N=')A<W0L(&]N('1H92!3<&%R8U-T871I;VX@25!8
  375. XM('=H:6-H(&AE('5S97,*(" @("!A="!W;W)K+"!H92!S971S(&ET('1O(#(N
  376. XM*0H*(" @("!4:&4@;F%M97,@9VEV96X@=&\@<')E<V5R=F4@9FEL97,@87)E
  377. XM('-Y<W1E;2UD97!E;F1E;G0L("!B=70@(&%R90H@(" @(&=E;F5R86QL>2 @
  378. XM;V8@('1H92 @9F]R;2 @(E\(9E\(:5\(;%\(95\(;E\(85\(;5\(92YT;7 B
  379. XM+" @;W(@(")?"&9?"&E?"&Q?"&5?"&Y?"&%?"&U?"&4N,# Q(B @=&\*(" @
  380. XM(" B7PAF7PAI7PAL7PAE7PAN7PAA7PAM7PAE+CDY.2(N("!)9B!A('!R97-E
  381. XM<G9E(&9I;&4@86QR96%D>2!E>&ES=',L(&ET("!W:6QL("!N;W0*(" @("!B
  382. XM92!O=F5R=W)I='1E;CL@:6YS=&5A9"P@82!N97<@9FEL96YA;64@=VEL;"!B
  383. XM92!G96YE<F%T960N"@H@(" @(%1H92 M<B!C;VUM86YD(&QI;F4@;W!T:6]N
  384. XM(&ES(&YO="!S=7!P;W)T960N"@H@(" @(%\(,BY?"#DN("!?"$A?"&5?"&Q?
  385. XM"' *"B @(" @02!P<FEM:71I=F4@:&5L<"!F86-I;&ET>2!I<R!A=F%I;&%B
  386. XM;&4[('1H92!C;VUM86YD(" Z:&5L<"P@(&%L<V\*(" @("!M87!P960@('1O
  387. XM("!T:&4@2$5,4"!O<B!&,2!K97ES(&]N(&UA;GD@<WES=&5M<RP@<VEM<&QY
  388. XM(&-R96%T97,@80H@(" @(&YE=R!B=69F97(@=VEN9&]W(&]N=&\@82!S=&%N
  389. XM9&%R9"!H96QP(&9I;&4N(" @5&AE("!N86UE("!O9B @=&AE"B @(" @9FEL
  390. XM92 @=VAI8V@@(&ES(&5D:71E9"!I<R!G:79E;B!B>2!T:&4@:&5L<&9I;&4@
  391. XM<W1R:6YG('!A<F%M971E<CL*(" @("!T:&4@9&5F875L="!O;B!5;FEX('9E
  392. XM<G-I;VYS(&ES("(O=7-R+VQI8B]X=FDN:&5L<"(N"@H@(" @(%\(,BY?"#%?
  393. XM"# N("!?"%-?"&-?"')?"&]?"&Q?"&Q?"&E?"&Y?"&<*"B @(" @5&AE("!?
  394. XM"&I?"'5?"&U?"'!?"'-?"&-?"')?"&]?"&Q?"&P@(&5N=6UE<F%T960@('!A
  395. XM<F%M971E<B @8V]N=')O;',@("!T:&4@("!E9&ET;W(G<PH@(" @(&)E:&%V
  396. XM:6]U<B @=VAE;B!T:&4@8W5R<V]R(&UO=F5S(&)E>6]N9"!T:&4@;&EM:71S
  397. XM(&]F('1H92!C=7)R96YT"B @(" @=VEN9&]W+B @268@:71S('9A;'5E(&ES
  398. XM(%\(;U\(9E\(9BP@(&%N9" @=&AE("!N97<@('!O<VET:6]N("!I<R @<W1I
  399. XM;&P*(" @("!R96%S;VYA8FQY("!C;&]S92 @=&\@('1H92 @8W5R<F5N=" @
  400. XM=VEN9&]W+" @=&AE("!W:6YD;W<@=VEL;"!B90H@(" @('-C<F]L;&5D('-O
  401. XM('1H870@=&AE(&YE=R!C=7)S;W(@<&]S:71I;VX@:7,@870@=&AE('1O<"!O
  402. XM<B @8F]T=&]M"B @(" @;V8@:70N("!4>7!I8V%L;'DL('1H92!W:6YD;W<@
  403. XM=VEL;"!B92!S8W)O;&QE9"!O;F4@;&EN92!A="!A('1I;64*(" @("!A<R!T
  404. XM:&4@8W5R<V]R(&ES(&UO=F5D('5P(&]R(&1O=VXN("!4:&ES(&)E:&%V:6]U
  405. XM<B!M87D@;F]T(&%L=V%Y<PH@(" @(&)E("!D97-I<F%B;&4[("!F;W(@(&5X
  406. XM86UP;&4L("!T97)M:6YA;',@('=I=&AO=70@(')E86P@<V-R;VQL:6YG"B @
  407. XM(" @<F5G:6]N<R!M87D@9F]R8V4@=&AE(&5D:71O<B!T;R!D;R @82 @;&]T
  408. XM("!O9B @<V-R965N("!U<&1A=&EN9RP*(" @("!P;W-S:6)L>2!O=F5R(&$@
  409. XM<VQO=R!T96QE<&AO;F4@;&EN92!O<B!O=F5R;&]A9&5D(&YE='=O<FLN("!!
  410. XM;'-O+ H@(" @(&]N($Q#1"!S8W)E96YS(&]R(&]T:&5R(&1I<W!L87ES('=I
  411. XM=&@@82!L;VYG("!I;6%G92 @<&5R<VES=&5N8V4L"B @(" @:70@(&UA>2 @
  412. XM;6%K92 @=&AE('1E>'0@;6]R92!D:69F:6-U;'0@=&\@<F5A9"X@($EF(%\(
  413. XM:E\(=5\(;5\(<%\(<U\(8U\(<E\(;U\(;%\(;"!I<PH@(" @('-E="!T;R!?
  414. XM"&]?"&XL('-C<F]L;&EN9R!B96AA=FEO=7(@:7,@;6]D:69I960@<V\@=&AA
  415. XM="P@=VAE;F5V97(@('1H90H@(" @(&-U<G-O<B @;6]V97,@8F5Y;VYD('1H
  416. XM92!L:6UI=',@;V8@=&AE(&-U<G)E;G0@=VEN9&]W+"!T:&4@=VEN9&]W"B @
  417. XM(" @:7,@<F5D<F%W;B!S;R!A<R!T;R!P;&%C92!T:&4@8W5R<V]R(&%S(&-E
  418. XM;G1R86QL>2!A<R!P;W-S:6)L92 @:6X*(" @("!I=#L@('1H=7,L("!T:&4@
  419. XM('=I;F1O=R!A<'!E87)S('1O(%\(:E\(=5\(;5\(<"!T;R!T:&4@;F5W('!O
  420. XM<VET:6]N+B @5&AE"B @(" @9&5F875L="!V86QU92!F;W(@7PAJ7PAU7PAM
  421. XM7PAP7PAS7PAC7PAR7PAO7PAL7PAL(&ES(&%U=&\L('=H:6-H(&-A=7-E<R!T
  422. XM:&4@961I=&]R("!T;PH@(" @(&IU;7 @(&EN<W1E860@(&]F("!S8W)O;&QI
  423. XM;F<@;VYL>2!I9B!I="!C86XG="!S8W)O;&P@=&AE(&%F9F5C=&5D"B @(" @
  424. XM=VEN9&]W(&5F9FEC:65N=&QY+@H*(" @("!);B!A;&P@8V%S97,L(&EF('1H
  425. XM92!D:7-T86YC92!F<F]M("!T:&4@('1O<" @;W(@(&)O='1O;2 @;V8@('1H
  426. XM90H@(" @('=I;F1O=R!T;R!T:&4@;F5W('!O<VET:6]N(&ES(&UO<F4@=&AA
  427. XM;B!H86QF('1H92!W:6YD;W<@<VEZ92P@=&AE"B @(" @961I=&]R('=I;&P@
  428. XM:G5M<"!I;G-T96%D(&]F('-C<F]L;&EN9RX*"B @(" @17AP;&EC:70@<V-R
  429. XM;VQL(&-O;6UA;F1S(" H92YG+B @7D0I("!A<F4@(&YO=" @869F96-T960@
  430. XM(&)Y("!T:&4*(" @("!J=6UP<V-R;VQL('!A<F%M971E<BX*"@H*"@H@(" @
  431. XM(%\(,E\(-5\(=%\(:"!?"%-?"&5?"'!?"'1?"&5?"&U?"&)?"&5?"'(@7P@Q
  432. XM7P@Y7P@Y7P@R(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
  433. XM(" @(%\(4%\(85\(9U\(92!?"#<*"@H*"@H@(" @(%\(." @(" @(" @(" @
  434. XM(" @(" @(" @(" @7PA37PAU7PAM7PAM7PAA7PAR7PAY(%\(;U\(9B!?"$1?
  435. XM"&E?"&9?"&9?"&5?"')?"&5?"&Y?"&-?"&5?"',@7PAB7PAE7PAT7PAW7PAE
  436. XM7PAE7PAN(%\(5E\(:2!?"&%?"&Y?"&0@7PA87PAV7PAI"@H*"B @(" @7P@R
  437. XM+E\(,5\(,2X@(%\(."U?"&)?"&E?"'0@7PA#7PAH7PAA7PAR7PAA7PAC7PAT
  438. XM7PAE7PAR7PAS"@H@(" @($-H87)A8W1E<G,@=VET:"!T:&4@=&]P(&)I="!S
  439. XM970@;6%Y(&)E(&1I<W!L87EE9"P@86QT:&]U9V@@:70@(&ES"B @(" @;F]T
  440. XM('EE="!P;W-S:6)L92!T;R!H879E(&YU;&P@*"=<,"<I(&)Y=&5S(&EN(&$@
  441. XM9FEL92!B=69F97(N("!(;W<*(" @("!T:&4@8VAA<F%C=&5R<R!A<F4@9&ES
  442. XM<&QA>65D('9A<FEE<R @8F5T=V5E;B @<WES=&5M<SL@(&]N("!53DE8+ H@
  443. XM(" @('1H97D@('=I;&P@8F4@<VAO=VX@87,@86X@;V-T86P@97-C87!E('-E
  444. XM<75E;F-E+"!W:&EL92!O;B!-4RU$3U,L"B @(" @3U,O,B!A;F0@44Y8('1H
  445. XM97D@=VEL;"!B92!S:&]W;B!A<R!T:&4@86-T=6%L(&-H87)A8W1E<B!I;B!T
  446. XM:&4@4$,*(" @("!C:&%R86-T97(@('-E="X@(%1H:7,@8V%N(&)E(&-O;G1R
  447. XM;VQL960@8GD@<V5T=&EN9R!T:&4@8V-H87)S(&%N9 H@(" @(&UC:&%R<R!V
  448. XM87)I86)L97,[(&EF("!T:&5S92 @<&%R86UE=&5R<R @87)E("!S970L("!C
  449. XM;VYT<F]L+2 @86YD"B @(" @;65T82UC:&%R86-T97)S("AR97-P96-T:79E
  450. XM;'DI(&%R92!S:&]W;B!D:7)E8W1L>2P@;W1H97)W:7-E('1H97D*(" @("!A
  451. XM<F4@<VAO=VX@87,@<V]M92!S97%U96YC92!O9B!P<FEN=&%B;&4@8VAA<F%C
  452. XM=&5R<RX*"B @(" @66]U(&-A;B!U<V4@=&AE(%Y?("AC;VYT<F]L+75N9&5R
  453. XM<V-O<F4I(&-O;6UA;F0@=&\@9FQI<" @=&AE("!T;W *(" @("!B:70@(&]F
  454. XM("!T:&4@(&-H87)A8W1E<B @=&AE(&-U<G-O<B!I<R!O;BX@(%1H:7,@;6%Y
  455. XM(&)E('5S969U;"!O;@H@(" @('-Y<W1E;7,@('=H97)E("!I=" @:7,@(&]T
  456. XM:&5R=VES92 @:6UP;W-S:6)L92 @=&\@("!E;G1E<B @(#@M8FET"B @(" @
  457. XM8VAA<F%C=&5R<RX*"B @(" @5&%B<R!A<F4@(&YO<FUA;&QY("!D:7-P;&%Y
  458. XM960@(&%S("!A("!S97)I97,@(&]F("!S<&%C97,@(&]F("!T:&4*(" @("!A
  459. XM<'!R;W!R:6%T92!L96YG=&@@*&%C8V]R9&EN9R!T;R!T:&4@=&%B<W1O<',@
  460. XM<&%R86UE=&5R*3L@<V5T=&EN9PH@(" @(&QI<W0@;6]D92!W:6QL(&-A=7-E
  461. XM('1H96T@=&\@8F4@9&ES<&QA>65D(&%S(&$@8V]N=')O;"!C:&%R86-T97(L
  462. XM"B @(" @87,@('=I;&P@('5N<V5T=&EN9R!T:&4@=&%B<R!P87)A;65T97(N
  463. XM("!(;W<@=&AE('1A8B!C:&%R86-T97(@:7,*(" @("!D:7-P;&%Y960@:7,@
  464. XM=&AE;B!U;F1E<B!T:&4@8V]N=')O;"!O9B!T:&4@8V-H87)S('!A<F%M971E
  465. XM<BX*"B @(" @7P@R+E\(,5\(,BX@(%\(35\(;U\(=5\(<U\(92!?"%-?"'5?
  466. XM"'!?"'!?"&]?"')?"'0*"B @(" @4V]M92!M;W5S92!S=7!P;W)T("!I<R @
  467. XM879A:6QA8FQE("!F;W(@(&UI8W)O+6)A<V5D("!S>7-T96US("!A;F0*(" @
  468. XM("!W;W)K<W1A=&EO;G,N("!#;&EC:VEN9R!T:&4@;6]U<V4@8G5T=&]N(&]N
  469. XM.@H*(" @("!A;GD@;&EN92!O=71S:61E(&-U<G)E;G0@=VEN9&]W"@D@(&-H
  470. XM86YG97,@8W5R<F5N="!W:6YD;W<@=&\@=&AE(&]N92 @:6YD:6-A=&5D("!B
  471. XM>2 @=&AE("!M;W5S90H)(" H8V%N(&)E('5S960@:6YS=&5A9"!O9B!G*2X*
  472. XM"B @(" @=&]P(&QI;F4@;V8@86YY('=I;F1O=PH)("!S8W)O;&QS('=I;F1O
  473. XM=R!D;W=N=V%R9',@*'-A;64@87,@7EDI+@H*(" @("!B;W1T;VT@;&EN92!O
  474. XM9B!A;GD@=VEN9&]W"@D@('-C<F]L;',@=VEN9&]W('5P=V%R9',@*'-A;64@
  475. XM87,@7D4I+@H*(" @("!S=&%T=7,@;&EN92!O9B!A;GD@=VEN9&]W"@D@('-H
  476. XM;W=S(&-U<G)E;G0@9FEL92!A;F0@;&EN97,@*'-A;64@87,@7D<I+@H*(" @
  477. XM("!A;GD@=&5X="!L:6YE(&]F(&%N>2!W:6YD;W<*"2 @;6]V97,@=&5X="!C
  478. XM=7)S;W(@87,@;F5A<B!A<R!P;W-S:6)L92!T;R!M;W5S92!C=7)S;W(N"@H@
  479. XM(" @($%L<V\L('=I;F1O=W,@8V%N(&)E(')E<VEZ960@8GD@(F1R86=G:6YG
  480. XM(B!T:&4@87!P<F]P<FEA=&4@<W1A='5S"B @(" @;&EN92!U<"!O<B!D;W=N
  481. XM('=I=&@@=&AE(&UO=7-E+@H*(" @("!?"#(N7P@Q7P@S+B @7PA-7PAI7PAS
  482. XM7PAC7PAE7PAL7PAL7PAA7PAN7PAE7PAO7PAU7PAS"@H@(" @(&\(*R @("!4
  483. XM:&4@.G=N("AW<FET92!F:6QE(&%N9"!E9&ET(&YE>'0I(&-O;6UA;F0@:7,@
  484. XM('!R;W9I9&5D+" @87,*"2 @<&5R(%!#+79I+@H*(" @("!O""L@(" @5&AE
  485. XM<F4@:7,@;F\@;&EM:70@=&\@=&AE(&YU;6)E<B!O<B!S:7IE(&]F(&UA<',@
  486. XM=VAI8V@@;6%Y(&)E"@D@(&1E9FEN960L(&YO<B!I<R!T:&5R92!A;GD@9FEX
  487. XM960@;&EM:70@=&\@=&AE(&YU;6)E<B!O9B!L:6YE<PH*"B @(" @7PA07PAA
  488. XM7PAG7PAE(%\(." @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
  489. XM(" @("!?"#)?"#5?"'1?"&@@7PA37PAE7PAP7PAT7PAE7PAM7PAB7PAE7PAR
  490. XM(%\(,5\(.5\(.5\(,@H*"@H*"B @(" @7PA37PAU7PAM7PAM7PAA7PAR7PAY
  491. XM(%\(;U\(9B!?"$1?"&E?"&9?"&9?"&5?"')?"&5?"&Y?"&-?"&5?"',@7PAB
  492. XM7PAE7PAT7PAW7PAE7PAE7PAN(%\(5E\(:2!?"&%?"&Y?"&0@7PA87PAV7PAI
  493. XM(" @(" @(" @(" @(" @(" @(" @("!?"#D*"@H)("!I;B!A(&)U9F9E<BX*
  494. XM"B @(" @;P@K(" @(%1H92 @961I=" @<&%R86UE=&5R("!C;VYT<F]L<R @
  495. XM=VAE=&AE<B @82 @8G5F9F5R("!C86X@("!B90H)("!M;V1I9FEE9"X@("!4
  496. XM:&ES("!M87D@(&)E("!U<V5D+" @=&]G971H97(@=VET:"!T:&4@7PAR7PAE
  497. XM7PAA7PAD7PAO7PAN7PAL7PAY"@D@('!A<F%M971E<BP@=&\@:6UP;&5M96YT
  498. XM(&$@;FEC97(@=F5R<VEO;B!O9B!?"'9?"&E?"&5?"'<H,2D@=&AA;B!V:2=S
  499. XM"@D@('9E<G-I;VXL("!S:6YC92!I="!W;VXG="!F;V]L('EO=2!I;G1O('1H
  500. XM:6YK:6YG('1H870@961I=&EN9PH)("!T:&4@8G5F9F5R(&ES(&EN(&%N>2!W
  501. XM87D@<V%F92X@($)E('=A<FYE9#H@;VYC92 @:&%V:6YG("!S970*"2 @;F]E
  502. XM9&ET+" @:70@(&ES(&YO="!P;W-S:6)L92!T;R!D;R!A(#IS970@961I="X@
  503. XM($ET)W,@82!O;F4M"@D@('=A>2!S=')E970N"@H@(" @(&\(*R @("!4:&4@
  504. XM=&EM96]U="!P87)A;65T97(@:7,@:6UP;&5M96YT960@(&%S("!A("!N=6UE
  505. XM<FEC("!V86QU92P*"2 @<W!E8VEF>6EN9R @=&AE(&YU;6)E<B!O9B!M:6QL
  506. XM:7-E8V]N9',@869T97(@=VAI8V@@=&\@87-S=6UE"@D@('1H870@;F\@9G5R
  507. XM=&AE<B!I;G!U="!I<R @879A:6QA8FQE("!T;R @8V]N=&EN=64@('=I=&@@
  508. XM('1H90H)("!P87)S:6YG("!O9B @82 @;6%P("!S97%U96YC92X@("!4:&ES
  509. XM("!R97!L86-E<R!V:2=S(&)O;VQE86X*"2 @<&%R86UE=&5R(&]F('1H92!S
  510. XM86UE(&YA;64N"@H@(" @(&\(*R @("!4:&4@=F)E;&P@<&%R86UE=&5R(&UA
  511. XM>2!B92!U<V5D('1O('-P96-I9GD@=7-E(&]F(&$@('9I<W5A;"P*"2 @<F%T
  512. XM:&5R('1H86X@875D:6)L92P@8F5L;"P@:68@=&AI<R!I<R!A=F%I;&%B;&4N
  513. XM"@H@(" @(&\(*R @("!4:&4@(#IE8VAO("!C;VUM86YD("!I<R @879A:6QA
  514. XM8FQE.R @:70@('-I;7!L>2 @96-H;V5S("!I=',*"2 @87)G=6UE;G1S+"!A
  515. XM9G1E<B!E>'!A;G-I;VX@;V8@)2!A;F0@(R!C:&%R86-T97)S+@H*(" @("!O
  516. XM""L@(" @26X@:6YS97)T(&%N9"!R97!L86-E(&UO9&5S+"!>7PA!(&AA<R!T
  517. XM:&4@<V%M92!M96%N:6YG("!A<R @7D *"2 @:6X@('9I+" @97AC97!T("!T
  518. XM:&%T(&ET('=O<FMS(&%T(&%N>2!T:6UE+"!N;W0@:G5S="!F;W(@=&AE"@D@
  519. XM(&9I<G-T(&-H87)A8W1E<BX@($%L<V\L('1Y<&EN9R!>0E\(>"P@=VAE<F4@
  520. XM7PAX(&ES('1H92!N86UE(&]F(&$*"2 @8V]N:G5G871E("!B=69F97(L("!I
  521. XM;G-E<G1S('1H92!C;VYT96YT<R!O9B!T:&%T(&)U9F9E<B!I;G1O"@D@('1H
  522. XM92!I;G!U="!S=')E86T@870@=&AA="!P;VEN="X@(%1H92!B=69F97(@;F%M
  523. XM960@(#P@(&%L=V%Y<PH)("!C;VYT86EN<R!T:&4@;&%S="!T:&EN9R!I;G-E
  524. XM<G1E9"P@<V\@=&AA="!>7PA"/"!I<R!T:&4@<V%M92!A<PH)("!>7PA!+@H*
  525. XM(" @("!?"#,N("!?"$1?"&E?"&9?"&9?"&5?"')?"&5?"&Y?"&-?"&5?"',*
  526. XM"B @(" @;P@K(" @($%R9W5M96YT(&AA;F1L:6YG(&ES('-O;65W:&%T(&1I
  527. XM9F9E<F5N=#L@9F]R(&EN<W1A;F-E+" M7PA2(&ES"@D@(&YO=" @<W5P<&]R
  528. XM=&5D+" @8G5T(" B+7,@<&%R86UE=&5R/79A;'5E(B!I<RP@=VAI8V@@:7,@
  529. XM;75C: H)("!M;W)E('5S969U;"!A;GEW87DN"@H@(" @(&\(*R @("!4:&4@
  530. XM7PA87PA67PA)7PA.7PA)7PA4(&5N=FER;VYM96YT('9A<FEA8FQE(&ES(')E
  531. XM860@:6YS=&5A9" @;V8@(%\(15\(6%\(25\(3E\(25\(5"X*"2 @5VAI;'-T
  532. XM(&YO(&9I;&5S(&%R92!S;W5R8V5D(&%U=&]M871I8V%L;'DL('5S97)S('=H
  533. XM;R!W:7-H('1O"@D@(&AA=F4@82!S=&%R='5P(&9I;&4@8V%N(&%R<F%N9V4@
  534. XM:70@=F5R>2 @96%S:6QY+B @(%\(<U\(:"@Q*2 @;W(*"2 @7PAK7PAS7PAH
  535. XM*#$I('5S97)S('-H;W5L9"!A9&0@=&AI<R!L:6YE('1O('1H96ER("1?"$A?
  536. XM"$]?"$U?"$4O+E\(<%\(<E\(;U\(9E\(:5\(;%\(93H*"@D)("!?"%A?"%9?
  537. XM"$E?"$Y?"$E?"%0])U\(<U\(;U\(=5\(<E\(8U\(92!?"'A?"'9?"&DM7PAS
  538. XM7PAT7PAA7PAR7PAT7PAU7PAP+5\(9E\(:5\(;%\(92<[(%\(95\(>%\(<%\(
  539. XM;U\(<E\(="!?"%A?"%9?"$E?"$Y?"$E?"%0*"@D@(%\(8U\(<U\(:"@Q*2!U
  540. XM<V5R<R!S:&]U;&0@861D('1H:7,@=&\@=&AE:7(@)%\(2%\(3U\(35\(12\N
  541. XM7PAL7PAO7PAG7PAI7PAN.@H*"0D@(%\(<U\(95\(=%\(95\(;E\(=B!?"%A?
  542. XM"%9?"$E?"$Y?"$E?"%0@)U\(<U\(;U\(=5\(<E\(8U\(92!?"'A?"'9?"&DM
  543. XM7PAS7PAT7PAA7PAR7PAT7PAU7PAP+5\(9E\(:5\(;%\(92<*"@D@(&%N9"!-
  544. XM4RU$3U,@=7-E<G,@<VAO=6QD(&%D9"!T:&ES('1O('1H96ER(%\(85\(=5\(
  545. XM=%\(;U\(95\(>%\(95\(8RY?"&)?"&%?"'0Z"@H)"2 @7PAS7PAE7PAT(%\(
  546. XM6%\(5E\(25\(3E\(25\(5#U?"'-?"&]?"'5?"')?"&-?"&4@7PAX7PAV7PAI
  547. XM+5\(<U\(=%\(85\(<E\(=%\(=5\(<"U?"&9?"&E?"&Q?"&4*"@H@(" @(&\(
  548. XM*R @("!4:&4@=&%G<R!P87)A;65T97(@8V%N(&)E("!U<V5D("!T;R @<W!E
  549. XM8VEF>2 @;75L=&EP;&4@('1A9W,*"2 @9FEL97,[("!T:&5S92 @8V%N("!B
  550. XM92 @<V5P87)A=&5D("!B>2!E:71H97(@(EP@(B H8F%C:W-L87-H"@D@('-P
  551. XM86-E*2!O<B B+"(@*&-O;6UA*2X*"@H@(" @(%\(,E\(-5\(=%\(:"!?"%-?
  552. XM"&5?"'!?"'1?"&5?"&U?"&)?"&5?"'(@7P@Q7P@Y7P@Y7P@R(" @(" @(" @
  553. XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(%\(4%\(85\(9U\(92!?
  554. XM"#D*"@H*"@H@(" @(%\(,5\(," @(" @(" @(" @(" @(" @(" @("!?"%-?
  555. XM"'5?"&U?"&U?"&%?"')?"'D@7PAO7PAF(%\(1%\(:5\(9E\(9E\(95\(<E\(
  556. XM95\(;E\(8U\(95\(<R!?"&)?"&5?"'1?"'=?"&5?"&5?"&X@7PA67PAI(%\(
  557. XM85\(;E\(9"!?"%A?"'9?"&D*"@H@(" @(&\(*R @("!!;'1E<FYA=&4@9FEL
  558. XM97,@87)E(&AA;F1L960@<VQI9VAT;'D@9&EF9F5R96YT;'DL("!O=VEN9R @
  559. XM=&\*"2 @=&AE("!P<F5S96YC92 @;V8@(&)U9F9E<B!A;F0@=VEN9&]W(&AA
  560. XM;F1L:6YG+B @17-S96YT:6%L;'DL"@D@('=H96X@>6]U(&-L;W-E(&$@8G5F
  561. XM9F5R+"!I=',@9FEL96YA;64@:7,@<F5M96UB97)E9" @87,@('1H90H)("!A
  562. XM;'1E<FYA=&4@(&9I;&4[("!W:&5N("!Y;W4@(&EN=F]K92!T:&4@7EX@;W(@
  563. XM.F4@(R!C;VUM86YD<RP*"2 @=&AI<R @9FEL96YA;64@(&ES("!R92UE9&ET
  564. XM960N(" @3F]T92 @=&AA=" @7EX@(&5D:71S(" @=&AE"@D@(&%L=&5R;F%T
  565. XM92!F:6QE(&EN(&$@;F5W(&)U9F9E<B!W:6YD;W<N"@H@(" @(&\(*R @("!(
  566. XM:71T:6YG('1H92!E<V-A<&4@:V5Y('=H:6QE(&EN('1H92!C;VUM86YD("!L
  567. XM:6YE("!D;V5S("!N;W0*"2 @=&5R;6EN871E("!I;G!U=#L@(&EN<W1E860L
  568. XM("!I="!C86YC96QS(&EN<'5T+"!R971U<FYI;F<@=&AE"@D@('!R;VUP="!T
  569. XM;R!T:&4@8F5G:6YN:6YG(&]F('1H92!L:6YE+B @5&AI<R!A<'!L:65S('1O
  570. XM("!I;G!U= H)("!F;W(@.BP@+RP@/R @86YD("$N"@H@(" @(&\(*R @("!#
  571. XM:&%R86-T97(M8F%S960@('EA;FMS(" H;W(@("!D96QE=&5S*2 @('=H:6-H
  572. XM(" @<W!A;B @(&QI;F4*"2 @8F]U;F1A<FEE<R!A<F4@:&%N9&QE9"!C;W)R
  573. XM96-T;'D@*'9I(&=E=',@=&AI<R!W<F]N9RDN"@H*"@H*"@H*"@H*"@H*"@H*
  574. XM"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H@(" @(%\(4%\(85\(9U\(92!?
  575. XM"#%?"# @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @("!?
  576. XM"#)?"#5?"'1?"&@@7PA37PAE7PAP7PAT7PAE7PAM7PAB7PAE7PAR(%\(,5\(
  577. X*.5\(.5\(,@H*"F@@
  578. Xend
  579. END_OF_FILE
  580.   if test 34030 -ne `wc -c <'xvi/doc/summary.UU'`; then
  581.     echo shar: \"'xvi/doc/summary.UU'\" unpacked with wrong size!
  582.   else
  583.     echo shar: Uudecoding \"'xvi/doc/summary.lst'\" \(24670 characters\)
  584.     cat 'xvi/doc/summary.UU' | uudecode
  585.     if test -f 'xvi/doc/summary.lst' ; then
  586.       if test 24670 -ne `wc -c <'xvi/doc/summary.lst'`; then
  587.         echo shar: \"'xvi/doc/summary.lst'\" uudecoded with wrong size!
  588.       else
  589.         rm 'xvi/doc/summary.UU'
  590.       fi
  591.     else
  592.       echo shar: \"'xvi/doc/summary.lst'\" uudecode failed!
  593.     fi
  594.   fi
  595.   # end of 'xvi/doc/summary.UU'
  596. fi
  597. if test -f 'xvi/src/os2vio.c' -a "${1}" != "-c" ; then 
  598.   echo shar: Will not clobber existing file \"'xvi/src/os2vio.c'\"
  599. else
  600.   echo shar: Extracting \"'xvi/src/os2vio.c'\" \(18336 characters\)
  601.   sed "s/^X//" >'xvi/src/os2vio.c' <<'END_OF_FILE'
  602. X#ifndef lint
  603. Xstatic char *sccsid = "@(#)os2vio.c    2.1 (Chris & John Downey) 7/29/92";
  604. X#endif
  605. X
  606. X/***
  607. X
  608. X* program name:
  609. X    xvi
  610. X* function:
  611. X    PD version of UNIX "vi" editor, with extensions.
  612. X* module name:
  613. X    os2vio.c
  614. X
  615. X* module function:
  616. X    OS/2 system interface module.
  617. X
  618. X    This is a character-based implementation using the VIO & KBD
  619. X    families of system calls. It doesn't use the Presentation Manager
  620. X    but, on OS/2 version 1.* at least, it can be made to work in a PM
  621. X    shell window by using markexe (see makefile.os2).
  622. X
  623. X    Like the MS-DOS version, this one saves the screen contents &
  624. X    restores them when it exits.
  625. X
  626. X    Currently, the mouse input code doesn't work, & so is commented
  627. X    out. I suspect that, if we want to have both mouse & keyboard
  628. X    input, we have to use a device monitor, or develop a real PM
  629. X    implementation.
  630. X* history:
  631. X    STEVIE - ST Editor for VI Enthusiasts, Version 3.10
  632. X    Originally by Tim Thompson (twitch!tjt)
  633. X    Extensive modifications by Tony Andrews (onecom!wldrdg!tony)
  634. X    Heavily modified by Chris & John Downey
  635. X
  636. X***/
  637. X
  638. X#include "xvi.h"
  639. X
  640. X#define NOMOUSE
  641. X
  642. X#ifdef __ZTC__
  643. X/*
  644. X * Set default stack size.
  645. X *
  646. X * See i286.asm for an explanation of why it has to be so big.
  647. X */
  648. Xunsigned    _stack = 44 * 1024;
  649. X#endif
  650. X
  651. X/*
  652. X * These are globals which are set by the system interface or terminal
  653. X * interface module, & used for various purposes throughout the rest
  654. X * of xvi.
  655. X *
  656. X * Number of rows & columns in the current window.
  657. X */
  658. Xunsigned    Rows,
  659. X        Columns;
  660. X/*
  661. X * Current position for screen writes.
  662. X */
  663. Xunsigned char    virt_row,
  664. X        virt_col;
  665. X/*
  666. X * Screen cell (character & attribute): current colour is stored here.
  667. X */
  668. Xunsigned char    curcell [2];
  669. X
  670. X/*
  671. X * Time of last keypress or mouse button press (or garbage if
  672. X * (keystrokes < PSVKEYS)).
  673. X *
  674. X * This should only be referenced within a thread's critical section.
  675. X * Referencing a 32-bit variable is not generally an atomic operation
  676. X * on the 80286.
  677. X */
  678. Xstatic volatile clock_t lastevent;
  679. X
  680. X#ifndef NOMOUSE
  681. X    /*
  682. X     * This is FALSE if we don't appear to have a mouse driver.
  683. X     */
  684. X    static bool_t    usemouse;
  685. X
  686. X    /*
  687. X     * Our logical mouse handle.
  688. X     */
  689. X    static HMOU    mousenum;
  690. X
  691. X#else    /* NOMOUSE */
  692. X#   define    usemouse    FALSE
  693. X#endif    /* NOMOUSE */
  694. X
  695. X#ifndef NOMOUSE
  696. X    /*
  697. X     * Hide mouse cursor.
  698. X     */
  699. X    static void
  700. X    hidemouse()
  701. X    {
  702. X    NOPTRRECT    r;
  703. X
  704. X    r.row = r.col = 0;
  705. X    r.cRow = Rows - 1;
  706. X    r.cCol = Columns - 1;
  707. X    (void) MouRemovePtr((PNOPTRRECT) &r, mousenum);
  708. X    }
  709. X
  710. X#endif    /* NOMOUSE */
  711. X
  712. X/*
  713. X * Show mouse cursor. (This is for symmetry with hidemouse().)
  714. X */
  715. X#define showmouse()    ((void) MouDrawPtr(mousenum))
  716. X
  717. Xstatic long    semvec [2];
  718. X
  719. X/*
  720. X * This semaphore needs to be acquired by a thread before it enters a
  721. X * critical region.
  722. X */
  723. X#define        control ((HSEM)(long FAR *)&semvec[0])
  724. X
  725. X/*
  726. X * This semaphore is used for communication between the main thread &
  727. X * the thread which handles automatic buffer preservation. It should
  728. X * be clear when (keystrokes >= PSVKEYS), otherwise it should be set.
  729. X */
  730. X#define        psvsema ((HSEM)(long FAR *)&semvec[1])
  731. X
  732. X#ifndef NOMOUSE
  733. X
  734. Xstatic void
  735. Xmousehandler()
  736. X{
  737. X    for (;;) {
  738. X    MOUEVENTINFO    m;
  739. X    unsigned short    status;
  740. X    clock_t        start;
  741. X
  742. X#if 0
  743. X    if (MouGetDevStatus((PUSHORT) &status, mousenum) != 0
  744. X        ||
  745. X        (status & (MOUSE_UNSUPPORTED_MODE | MOUSE_DISABLED))
  746. X    ) {
  747. X        hidemouse();
  748. X        (void) MouClose(mousenum);
  749. X        DosExit(EXIT_THREAD, 0);
  750. X    }
  751. X#endif
  752. X    status = MOU_WAIT;
  753. X    MouReadEventQue((PMOUEVENTINFO) &m, (PUSHORT) &status, mousenum);
  754. X    /*
  755. X     * If we don't get the control semaphore immediately,
  756. X     * we do nothing. Delayed responses to mouse button
  757. X     * presses could be confusing.
  758. X     */
  759. X#if 0
  760. X    start = clock();
  761. X#endif
  762. X    if (DosSemRequest(control, SEM_IMMEDIATE_RETURN) != 0)
  763. X        continue;
  764. X#if 0
  765. X    if (clock() != start) {
  766. X        (void) fprintf(stderr, "mouse thread: %d\n", __LINE__);
  767. X        DosSemClear(control);
  768. X        continue;
  769. X    }
  770. X#endif
  771. X    /*
  772. X     * Start of critical section.
  773. X     */
  774. X    if (++keystrokes >= PSVKEYS)
  775. X        lastevent = clock();
  776. X    if (State == NORMAL &&
  777. X        (m.fs & (MOUSE_BN1_DOWN | MOUSE_BN2_DOWN | MOUSE_BN3_DOWN))) {
  778. X        hidemouse();
  779. X        mouseclick(m.row, m.col);
  780. X        showmouse();
  781. X    }
  782. X    /*
  783. X     * End of critical section.
  784. X     */
  785. X    DosSemClear(control);
  786. X    }
  787. X}
  788. X
  789. X#endif    /* NOMOUSE */
  790. X
  791. X/*
  792. X * Macro to convert clock ticks to milliseconds.
  793. X */
  794. X#if CLK_TCK == 1000
  795. X#   define CLK2MS(c)        (c)
  796. X#else
  797. X#   if CLK_TCK < 1000
  798. X#    define CLK2MS(c)    ((c) * (1000 / CLK_TCK))
  799. X#   else
  800. X#    define CLK2MS(c)    ((c) / (CLK_TCK / 1000))
  801. X#   endif    /* CLK_TCK > 1000 */
  802. X#endif    /* CLK_TCK != 1000 */
  803. X
  804. X/*
  805. X * Number of keystrokes or mouse button presses since the last buffer
  806. X * preservation.
  807. X */
  808. Xvolatile int        keystrokes;
  809. X
  810. X/*
  811. X * This function handles automatic buffer preservation. It runs in its
  812. X * own thread, which is only awake when keystrokes >= PSVKEYS and the
  813. X * main thread is waiting for keyboard input. Even then, it spends
  814. X * most of its time asleep.
  815. X */
  816. Xstatic void FAR
  817. Xpsvhandler()
  818. X{
  819. X    for (;;) {
  820. X    long    sleeptime;
  821. X
  822. X    DosSemWait(psvsema, SEM_INDEFINITE_WAIT);
  823. X    DosSemRequest(control, SEM_INDEFINITE_WAIT);
  824. X    /*
  825. X     * Start of critical section.
  826. X     */
  827. X    if (keystrokes < PSVKEYS) {
  828. X        sleeptime = 0;
  829. X        /*
  830. X         * If we haven't had at least PSVKEYS
  831. X         * keystrokes, psvsema should be set.
  832. X         */
  833. X        DosSemSet(psvsema);
  834. X    } else if ((sleeptime = (long) Pn(P_preservetime) * 1000 -
  835. X              CLK2MS(clock() - lastevent)) <= 0) {
  836. X        /*
  837. X         * If Pn(P_presevetime) seconds haven't yet
  838. X         * elapsed, sleep until they should have - but
  839. X         * NOT within the critical section (!).
  840. X         *
  841. X         * Otherwise do automatic preserve.
  842. X         *
  843. X         * do_preserve() should reset keystrokes to 0.
  844. X         */
  845. X        (void) do_preserve();
  846. X        sleeptime = 0;
  847. X    }
  848. X    /*
  849. X     * End of critical section.
  850. X     */
  851. X    DosSemClear(control);
  852. X    /*
  853. X     * Sleep if we have to.
  854. X     */
  855. X    if (sleeptime != 0)
  856. X        DosSleep(sleeptime);
  857. X    }
  858. X}
  859. X
  860. X/*
  861. X * inchar() - get a character from the keyboard.
  862. X *
  863. X * Timeout not implemented yet for OS/2.
  864. X */
  865. Xint
  866. Xinchar(long mstimeout)
  867. X{
  868. X    for (;;) {
  869. X    KBDKEYINFO k;
  870. X    bool_t    mstatus,
  871. X        psvstatus;
  872. X
  873. X    flush_output();
  874. X
  875. X    mstatus = (usemouse && State == NORMAL);
  876. X    psvstatus = (keystrokes >= PSVKEYS);
  877. X    /*
  878. X     * We don't have to give control to any other thread
  879. X     * if neither of these conditions is true.
  880. X     */
  881. X    if (mstatus || psvstatus) {
  882. X#ifndef NOMOUSE
  883. X        if (mstatus)
  884. X        showmouse();
  885. X#endif
  886. X        if (psvstatus && DosSemWait(psvsema, SEM_IMMEDIATE_RETURN)
  887. X                            == ERROR_SEM_TIMEOUT) {
  888. X        /*
  889. X         * If psvsema is set, clear it.
  890. X         */
  891. X        DosSemClear(psvsema);
  892. X        }
  893. X        DosSemClear(control);
  894. X    }
  895. X    /*
  896. X     * Start of non-critical section.
  897. X     *
  898. X     * Wait for character from keyboard.
  899. X     */
  900. X    KbdCharIn((PKBDKEYINFO) &k, IO_WAIT, 0);
  901. X    /*
  902. X     * End of non-critical section.
  903. X     */
  904. X    if (mstatus || psvstatus) {
  905. X        DosSemRequest(control, SEM_INDEFINITE_WAIT);
  906. X#ifndef NOMOUSE
  907. X        if (mstatus)
  908. X        hidemouse();
  909. X#endif
  910. X    }
  911. X    if (++keystrokes >= PSVKEYS)
  912. X        lastevent = clock();
  913. X    /*
  914. X     * Now deal with the keypress information.
  915. X     */
  916. X    if ((unsigned char) k.chChar == (unsigned char) 0xe0) {
  917. X    /*
  918. X     * It's (probably) a function key.
  919. X     */
  920. X        if (k.chScan == 0x53)
  921. X        /*
  922. X         * It's the delete key.
  923. X         */
  924. X        return State == NORMAL ? 'x' : '\b';
  925. X         /* else */
  926. X        if (State == NORMAL) {
  927. X        /*
  928. X         * Assume it must be a function key.
  929. X         */
  930. X        switch (k.chScan) {
  931. X            case 0x3b: return(K_HELP);
  932. X            /* F1 key */
  933. X            case 0x47: return('H');
  934. X            /* home key */
  935. X            case 0x48: return('k');
  936. X            /* up arrow key */
  937. X            case 0x49: return(CTRL('B'));
  938. X            /* page up key */
  939. X            case 0x4b: return('\b');
  940. X            /* left arrow key */
  941. X            case 0x4d: return(' ');
  942. X            /* right arrow key */
  943. X            case 0x4f: return('L');
  944. X            /* end key */
  945. X            case 0x50: return('j');
  946. X            /* down arrow key */
  947. X            case 0x51: return(CTRL('F'));
  948. X            /* page down key */
  949. X            case 0x52: return('i');
  950. X            /* insert key */
  951. X            default:
  952. X            /* just ignore it ... */
  953. X            continue;
  954. X        }
  955. X        /*
  956. X         * If we aren't in command mode, 0xe0
  957. X         * is a perfectly legitimate
  958. X         * character, & we can't really tell
  959. X         * whether or not it's supposed to be
  960. X         * a function key, so we just have to
  961. X         * return it as is.
  962. X         */
  963. X        }
  964. X    }
  965. X    return (unsigned char) k.chChar;
  966. X    }
  967. X}
  968. X
  969. Xvoid
  970. Xoutchar(int c)
  971. X{
  972. X    curcell [0] = c;
  973. X    VioWrtNCell((PBYTE) curcell, 1, virt_row, virt_col, 0);
  974. X    if (++virt_col >= Columns) {
  975. X    virt_col -= Columns;
  976. X    if (++virt_row >= Rows)
  977. X        virt_row = Rows - 1;
  978. X    }
  979. X}
  980. X
  981. Xvoid
  982. Xoutstr(char* s)
  983. X{
  984. X    unsigned len = strlen(s);
  985. X
  986. X    VioWrtCharStrAtt((PCH) s, len, virt_row, virt_col,
  987. X                     (PBYTE) & curcell [1], 0);
  988. X    if ((virt_col += len) >= Columns) {
  989. X    virt_col -= Columns;
  990. X    if (++virt_row >= Rows)
  991. X        virt_row = Rows - 1;
  992. X    }
  993. X}
  994. X
  995. Xvoid
  996. Xerase_display()
  997. X{
  998. X    curcell[1] = Pn(P_colour);
  999. X    curcell[0] = ' ';
  1000. X    VioWrtNCell((PBYTE) curcell, Rows * Columns, 0, 0, 0);
  1001. X}
  1002. X
  1003. Xvoid
  1004. Xerase_line()
  1005. X{
  1006. X    curcell [0] = ' ';
  1007. X    VioWrtNCell((PBYTE) curcell, Columns - virt_col, virt_row, virt_col, 0);
  1008. X}
  1009. X
  1010. Xvoid
  1011. Xscroll_down(unsigned start, unsigned end, unsigned nlines)
  1012. X{
  1013. X    curcell [0] = ' ';
  1014. X    VioScrollDn(start, 0, end, Columns - 1, nlines, (PBYTE) curcell, 0);
  1015. X}
  1016. X
  1017. Xvoid
  1018. Xscroll_up(unsigned start, unsigned end, unsigned nlines)
  1019. X{
  1020. X    curcell [0] = ' ';
  1021. X    VioScrollUp(start, 0, end, Columns - 1, nlines, (PBYTE) curcell, 0);
  1022. X}
  1023. X
  1024. X/*
  1025. X * Attributes for colour systems
  1026. X */
  1027. X#define BRIGHT    8    /* only available for foreground colours */
  1028. X#define BLACK    0
  1029. X#define BLUE    1
  1030. X#define GREEN    2
  1031. X#define CYAN    (BLUE | GREEN)
  1032. X#define RED    4
  1033. X#define BROWN    (RED | GREEN)
  1034. X#define YELLOW    (BRIGHT | BROWN)
  1035. X#define WHITE    (RED | GREEN | BLUE)
  1036. X
  1037. X/*
  1038. X * macro to set up foreground & background colours
  1039. X */
  1040. X#define mkcolour(f,b)    ((unsigned char) (((b) << 4) | ((f) & 0xf)))
  1041. X
  1042. Xstatic char                *oldscreen;
  1043. Xstatic unsigned short            scrsize;
  1044. Xstatic enum { m_SYS = 0, m_VI = 1 }    curmode;
  1045. X
  1046. X/*
  1047. X * Save screen contents & set up video & keyboard states for editor.
  1048. X */
  1049. Xvoid
  1050. Xsys_startv()
  1051. X{
  1052. X    if (curmode == m_VI)
  1053. X    return;
  1054. X    if (oldscreen != NULL) {
  1055. X    /*
  1056. X     * Save contents of screen so we can restore them
  1057. X     * afterwards.
  1058. X     */
  1059. X    VioReadCellStr((PCH) oldscreen, (PUSHORT) &scrsize, 0, 0, 0);
  1060. X    }
  1061. X    set_colour(Pn(P_colour));
  1062. X    /*
  1063. X     * Change keyboard status.
  1064. X     *
  1065. X     * We only do this when we've disabled keyboard interrupts.
  1066. X     */
  1067. X    {
  1068. X    KBDINFO        k;
  1069. X
  1070. X    k.cb = sizeof k;
  1071. X    KbdGetStatus((PKBDINFO) &k, 0);
  1072. X    k.fsMask = (k.fsMask
  1073. X        /*
  1074. X         * turn these flags off:
  1075. X         */
  1076. X         & ~(KEYBOARD_ECHO_ON |
  1077. X         KEYBOARD_ASCII_MODE |
  1078. X         KEYBOARD_MODIFY_STATE |
  1079. X         KEYBOARD_MODIFY_INTERIM |
  1080. X         KEYBOARD_MODIFY_TURNAROUND |
  1081. X         KEYBOARD_2B_TURNAROUND |
  1082. X         KEYBOARD_SHIFT_REPORT))
  1083. X        /*
  1084. X         * turn these flags on:
  1085. X         */
  1086. X        | KEYBOARD_ECHO_OFF |
  1087. X          KEYBOARD_BINARY_MODE;
  1088. X    KbdSetStatus((PKBDINFO) &k, 0);
  1089. X    }
  1090. X    curmode = m_VI;
  1091. X}
  1092. X
  1093. Xvoid
  1094. Xsys_init()
  1095. X{
  1096. X    {
  1097. X    VIOMODEINFO    v;
  1098. X
  1099. X    /*
  1100. X     * Get information about display.
  1101. X     */
  1102. X    v.cb = sizeof v;
  1103. X    VioGetMode((PVIOMODEINFO) &v, 0);
  1104. X    Rows = v.row;
  1105. X    Columns = v.col;
  1106. X    scrsize = (Rows - 1) * Columns * 2;
  1107. X    if (v.color >= COLORS_16) {
  1108. X        /*
  1109. X         * Statically defined values are for mono systems:
  1110. X         * these are defaults for colour systems.
  1111. X         */
  1112. X        set_param(P_colour, mkcolour(BRIGHT | WHITE, BLUE));
  1113. X        set_param(P_statuscolour, mkcolour(YELLOW, BLACK));
  1114. X        set_param(P_roscolour, mkcolour(BRIGHT | RED, BLACK));
  1115. X        set_param(P_systemcolour, mkcolour(BRIGHT | CYAN, BLACK));
  1116. X    }
  1117. X    }
  1118. X    oldscreen = malloc(scrsize);
  1119. X    /*
  1120. X     * We have to acquire this semaphore before we start any other
  1121. X     * threads.
  1122. X     */
  1123. X    DosSemSet(control);
  1124. X#ifndef NOMOUSE
  1125. X    /*
  1126. X     * Open mouse device if we can.
  1127. X     */
  1128. X    if (MouOpen((PSZ) NULL, (PHMOU) &mousenum) == 0
  1129. X#if 0
  1130. X    && MouSynch(0) != 0
  1131. X#endif
  1132. X    ) {
  1133. X    TID        mousethread;
  1134. X    short        mask = MOUSE_BN1_DOWN |
  1135. X                   MOUSE_BN2_DOWN |
  1136. X                   MOUSE_BN3_DOWN;
  1137. X
  1138. X    hidemouse();
  1139. X#if 0
  1140. X    MouSetEventMask((PUSHORT) &mask, mousenum);
  1141. X#endif
  1142. X    /*
  1143. X     * Create concurrent thread to handle mouse events.
  1144. X     *
  1145. X     * According to Microsoft, the ES register should be
  1146. X     * set to 0 first.
  1147. X     */
  1148. X    DosCreateThread((PFNTHREAD) mousehandler,
  1149. X        (es0(), (PTID) &mousethread), (PBYTE) newstack(32000));
  1150. X    usemouse = TRUE;
  1151. X    }
  1152. X#endif    /* NOMOUSE */
  1153. X    /*
  1154. X     * Initialize semaphore for automatic buffer preservation. It
  1155. X     * should only be clear if (keystrokes >= PSVKEYS).
  1156. X     */
  1157. X    DosSemSet(psvsema);
  1158. X    /*
  1159. X     * Create concurrent thread to do automatic preserves.
  1160. X     *
  1161. X     * According to Microsoft, the ES register should be set to 0 first.
  1162. X     */
  1163. X    {
  1164. X    TID psvthread;
  1165. X
  1166. X    if (DosCreateThread((PFNTHREAD) psvhandler,
  1167. X            (es0(), (PTID) &psvthread),
  1168. X            (PBYTE) newstack(20000)) != 0) {
  1169. X        (void) fputs("Can't create thread for automatic preserves\r\n",
  1170. X             stderr);
  1171. X        exit(1);
  1172. X    }
  1173. X    }
  1174. X    /*
  1175. X     * Disable system critical error handler.
  1176. X     */
  1177. X    DosError(HARDERROR_DISABLE);
  1178. X    sys_startv();
  1179. X}
  1180. X
  1181. X/*
  1182. X * Restore video & keyboard states to what they were when we started.
  1183. X *
  1184. X * sys_endv() can be called when we're already in system mode, so we
  1185. X * have to check.
  1186. X */
  1187. Xvoid
  1188. Xsys_endv()
  1189. X{
  1190. X    KBDINFO k;
  1191. X
  1192. X    if (curmode == m_SYS)
  1193. X    return;
  1194. X    k.cb = sizeof k;
  1195. X    KbdGetStatus((PKBDINFO) &k, 0);
  1196. X    k.fsMask = (k.fsMask
  1197. X        /*
  1198. X         * turn these flags off:
  1199. X         */
  1200. X         & ~(KEYBOARD_ECHO_OFF |
  1201. X         KEYBOARD_BINARY_MODE |
  1202. X         KEYBOARD_MODIFY_STATE |
  1203. X         KEYBOARD_MODIFY_INTERIM |
  1204. X         KEYBOARD_MODIFY_TURNAROUND |
  1205. X         KEYBOARD_2B_TURNAROUND |
  1206. X         KEYBOARD_SHIFT_REPORT))
  1207. X        /*
  1208. X         * turn these flags on:
  1209. X         */
  1210. X        | KEYBOARD_ECHO_ON |
  1211. X          KEYBOARD_ASCII_MODE;
  1212. X    KbdSetStatus((PKBDINFO) &k, 0);
  1213. X    if (oldscreen != (char*) 0)
  1214. X    /*
  1215. X     * Restore contents of screen saved by
  1216. X     * sys_startv().
  1217. X     */
  1218. X    VioWrtCellStr((PCH) oldscreen, scrsize, 0, 0, 0);
  1219. X    tty_goto(Rows - 1, 0);
  1220. X    set_colour(Pn(P_systemcolour));
  1221. X    erase_line();
  1222. X    flush_output();
  1223. X    curmode = m_SYS;
  1224. X}
  1225. X
  1226. Xvoid
  1227. Xsys_exit(int r)
  1228. X{
  1229. X    sys_endv();
  1230. X#ifndef NOMOUSE
  1231. X    if (usemouse)
  1232. X    MouClose(mousenum);
  1233. X#endif
  1234. X    exit(r);
  1235. X}
  1236. X
  1237. Xvoid
  1238. Xsleep(unsigned seconds)
  1239. X{
  1240. X    DosSleep(seconds * (long) 1000);
  1241. X}
  1242. X
  1243. X/*
  1244. X * This function is only used by tempfname(). It constructs a filename
  1245. X * suffix based on an index number.
  1246. X *
  1247. X * The suffix ".$$$" is commonly used for temporary file names on
  1248. X * MS-DOS & OS/2 systems. We also use the sequence ".$$1", ".$$2" ...
  1249. X * ".fff" (all digits are hexadecimal).
  1250. X */
  1251. Xstatic char*
  1252. Xhexsuffix(unsigned i)
  1253. X{
  1254. X    static char    suffix[] = ".$$$";
  1255. X    static char    hextab[] = "0123456789abcdef";
  1256. X    char    *sp = &suffix[3];
  1257. X
  1258. X    while (sp > suffix) {
  1259. X    if (i > 0) {
  1260. X        *sp-- = hextab[i & 0xf];
  1261. X        i >>= 4;
  1262. X    } else {
  1263. X        *sp-- = '$';
  1264. X    }
  1265. X    }
  1266. X    return suffix;
  1267. X}
  1268. X
  1269. X/*
  1270. X * Construct unique name for temporary file, to be used as a backup
  1271. X * file for the named file.
  1272. X */
  1273. Xchar *
  1274. Xtempfname(char *srcname)
  1275. X{
  1276. X    char    *srctail,
  1277. X        *srcdot,
  1278. X        *endp,
  1279. X        *retp;
  1280. X    unsigned    indexnum = 0;
  1281. X    unsigned    baselen;
  1282. X
  1283. X    srctail = srcdot = NULL;
  1284. X    endp = srcname;
  1285. X
  1286. X    while (*endp) {
  1287. X    switch (*endp++) {
  1288. X    case '\\':
  1289. X    case '/':
  1290. X        srctail = endp;
  1291. X        srcdot = (char*) 0;
  1292. X        continue;
  1293. X    case '.':
  1294. X        srcdot = endp - 1;
  1295. X    }
  1296. X    }
  1297. X    if (srctail == NULL) {
  1298. X    /*
  1299. X     * We haven't found any directory separators ('/' or '\\').
  1300. X     */
  1301. X    srctail = srcname;
  1302. X    /*
  1303. X     * Check to see if there's a disk drive name. If there
  1304. X     * is, skip over it.
  1305. X     */
  1306. X    if (*srcname && is_alpha(*srcname) && srcname[1] == ':')
  1307. X        srctail = &srcname[2];
  1308. X    }
  1309. X    /*
  1310. X     * There isn't a dot in the trailing part of the filename:
  1311. X     * just add it at the end.
  1312. X     */
  1313. X    if (srcdot == NULL)
  1314. X    srcdot = endp;
  1315. X    /*
  1316. X     * Don't make name too long.
  1317. X     */
  1318. X    if (srcdot - srctail > MAXNAMLEN - 4)
  1319. X    srcdot = srctail + MAXNAMLEN - 4;
  1320. X    if (srcdot - srcname > MAXPATHLEN - 4)
  1321. X    srcdot = srcname + MAXPATHLEN - 4;
  1322. X    baselen = srcdot - srcname;
  1323. X    /*
  1324. X     * Allocate space for new temporary file name ...
  1325. X     */
  1326. X    if ((retp = alloc(baselen + 5)) == (char*) 0)
  1327. X    return (char*) 0;
  1328. X    if (baselen > 0)
  1329. X    (void) memcpy(retp, srcname, baselen);
  1330. X    do {
  1331. X    /*
  1332. X     * Keep trying this until we get a unique file name.
  1333. X     */
  1334. X    strcpy(&retp[baselen], hexsuffix(indexnum++));
  1335. X    } while (exists(retp));
  1336. X    return retp;
  1337. X}
  1338. X
  1339. X/*
  1340. X * Fake out a pipe by writing output to temp file, running a process with
  1341. X * i/o redirected from this file to another temp file, and then reading
  1342. X * the second temp file back in.
  1343. X *
  1344. X * OS/2 does have real pipes, but I don't know how to avoid deadlock
  1345. X * when connecting concurrent processes with bidirectional pipes.
  1346. X */
  1347. Xbool_t
  1348. Xsys_pipe(cmd, writefunc, readfunc)
  1349. Xchar    *cmd;
  1350. Xint    (*writefunc) P((FILE *));
  1351. Xlong    (*readfunc) P((FILE *));
  1352. X{
  1353. X    char    *temp1;
  1354. X    FILE    *fp;
  1355. X    bool_t    retval;
  1356. X
  1357. X    /*
  1358. X     * Create first temporary file ...
  1359. X     */
  1360. X    if (
  1361. X    (temp1 = tempfname("xvi_out")) == NULL
  1362. X    ||
  1363. X    (fp = fopen(temp1, "w")) == NULL
  1364. X    ) {
  1365. X    retval = FALSE;
  1366. X    } else {
  1367. X    char    *temp2 = NULL;
  1368. X    int    savcon;
  1369. X    int    fd1 = -1,
  1370. X        fd2 = -1;
  1371. X
  1372. X    /*
  1373. X     * ... then write to it & close it ...
  1374. X     */
  1375. X    (void) (*writefunc)(fp);
  1376. X    (void) fclose(fp);
  1377. X
  1378. X    /*
  1379. X     * ... then re-open it for reading, open second one
  1380. X     * for writing & re-arrange file descriptors.
  1381. X     *
  1382. X     * Note that we assume that the editor's standard
  1383. X     * input, output & error files are the same device,
  1384. X     * since I can't imagine how any of them could
  1385. X     * usefully be redirected to anything else.
  1386. X     */
  1387. X
  1388. X#ifndef O_BINARY
  1389. X#    define O_BINARY 0
  1390. X#endif
  1391. X    if (
  1392. X        (savcon = dup(0)) < 3
  1393. X        ||
  1394. X        (fd1 = open(temp1, O_RDONLY | O_BINARY)) < 3
  1395. X        ||
  1396. X        (temp2 = tempfname("xvi_in")) == NULL 
  1397. X        ||
  1398. X        (fd2 = open(temp2,
  1399. X                O_WRONLY | O_CREAT | O_EXCL | O_BINARY, 0600)) < 3
  1400. X    ) {
  1401. X        retval = FALSE;
  1402. X    } else {
  1403. X        (void) dup2(fd1, 0);
  1404. X        (void) dup2(fd2, 1);
  1405. X        (void) dup2(fd2, 2);
  1406. X
  1407. X        (void) close(fd1);
  1408. X        (void) close(fd2);
  1409. X        fd1 = fd2 = -1;
  1410. X
  1411. X        /*
  1412. X         * Run the command.
  1413. X         */
  1414. X        (void) system(cmd);
  1415. X
  1416. X        /*
  1417. X         * Restore our standard input, output & error
  1418. X         * files.
  1419. X         */
  1420. X        (void) dup2(savcon, 0);
  1421. X        (void) dup2(savcon, 1);
  1422. X        (void) dup2(savcon, 2);
  1423. X
  1424. X        /*
  1425. X         * Now read from the second temporary file,
  1426. X         * close it, & we're done.
  1427. X         */
  1428. X        if ((fp = fopen(temp2, "r")) == NULL) {
  1429. X        retval = FALSE;
  1430. X        } else {
  1431. X        (void) (*readfunc)(fp);
  1432. X        (void) fclose(fp);
  1433. X        retval = TRUE;
  1434. X        }
  1435. X    }
  1436. X    /*
  1437. X     * Clean up.
  1438. X     */
  1439. X    if (temp2) {
  1440. X        (void) remove(temp2);
  1441. X        free(temp2);
  1442. X    }
  1443. X    if (savcon > 2)
  1444. X        (void) close(savcon);
  1445. X    if (fd1 > 2)
  1446. X        (void) close(fd1);
  1447. X    if (fd2 > 2)
  1448. X        (void) close(fd2);
  1449. X    }
  1450. X
  1451. X    if (temp1) {
  1452. X    (void) remove(temp1);
  1453. X    free(temp1);
  1454. X    }
  1455. X
  1456. X    return(retval);
  1457. X}
  1458. END_OF_FILE
  1459.   if test 18336 -ne `wc -c <'xvi/src/os2vio.c'`; then
  1460.     echo shar: \"'xvi/src/os2vio.c'\" unpacked with wrong size!
  1461.   fi
  1462.   # end of 'xvi/src/os2vio.c'
  1463. fi
  1464. echo shar: End of archive 5 \(of 18\).
  1465. cp /dev/null ark5isdone
  1466. MISSING=""
  1467. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
  1468.     if test ! -f ark${I}isdone ; then
  1469.     MISSING="${MISSING} ${I}"
  1470.     fi
  1471. done
  1472. if test "${MISSING}" = "" ; then
  1473.     echo You have unpacked all 18 archives.
  1474.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1475. else
  1476.     echo You still must unpack the following archives:
  1477.     echo "        " ${MISSING}
  1478. fi
  1479. exit 0
  1480. exit 0 # Just in case...
  1481.