home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-10-22 | 55.1 KB | 1,482 lines |
- Newsgroups: comp.sources.misc
- From: jmd@cyclone.bt.co.uk (John Downey)
- Subject: v33i014: xvi - portable multi-window vi-like editor, Part05/18
- Message-ID: <1992Oct23.181137.148@sparky.imd.sterling.com>
- X-Md4-Signature: 44503f913eae7f8693126a162a0c3ccc
- Date: Fri, 23 Oct 1992 18:11:37 GMT
- Approved: kent@sparky.imd.sterling.com
-
- Submitted-by: jmd@cyclone.bt.co.uk (John Downey)
- Posting-number: Volume 33, Issue 14
- Archive-name: xvi/part05
- Environment: Unix, MS-DOS, OS/2, QNX
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: xvi/doc/summary.UU xvi/src/os2vio.c
- # Wrapped by kent@sparky on Thu Oct 22 09:03:41 1992
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 5 (of 18)."'
- if test -f 'xvi/doc/summary.UU' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'xvi/doc/summary.UU'\"
- else
- echo shar: Extracting \"'xvi/doc/summary.UU'\" \(34026 characters\)
- sed "s/^X//" >'xvi/doc/summary.UU' <<'END_OF_FILE'
- Xbegin 664 xvi/doc/summary.lst
- XM"@H*"@H*"@H*"0D@4W5M;6%R>2!O9B!$:69F97)E;F-E<R!B971W965N(%9I
- XM(&%N9"!8=FD*"@H)"0D@(" @(" @0VAR:7,@1&]W;F5Y"@D)"0E*;VAN($1O
- XM=VYE>0H*"@H)(" @(" @(%AV:2 H<')O;F]U;F-E9"!?"&5?"&-?"&M?"',M
- XM7PAV7PAE7PAE+5\(95\(>5\(92D@:7,@82!F<F5E+"!P;W)T86)L92P*"2 @
- XM;75L=&DM=VEN9&]W(&EM<&QE;65N=&%T:6]N(&]F('1H92!P;W!U;&%R(%5.
- XM25A\""T@961I=&]R"@D@('9I+@H*"2 @5&AI<R!D;V-U;65N="!S=6UM87)I
- XM<V5S('1H92 @9&EF9F5R96YC97,@(&)E='=E96X@('1H90H)("!@8')E86PG
- XM)R @=FD@(&%N9" @>'9I+B @(%1H97-E(&1I9F9E<F5N8V5S(&%R92!D:79I
- XM9&5D"@D@(&EN=&\@=&AR964@9W)O=7!S.B!?"'5?"&Y?"&E?"&U?"'!?"&Q?
- XM"&5?"&U?"&5?"&Y?"'1?"&5?"&0@7PAF7PAE7PAA7PAT7PAU7PAR7PAE7PAS
- XM+" @7PAD7PAI7PAF7PAF7PAE7PAR7PAE7PAN7PAC7PAE7PAS"@D@(&%N9"!?
- XM"&5?"&Y?"&A?"&%?"&Y?"&-?"&5?"&U?"&5?"&Y?"'1?"',L(&%N9"!E86-H
- XM(&]F('1H97-E(&ES(&1E<V-R:6)E9"!I;B!T:&4*"2 @9F]L;&]W:6YG('-E
- XM8W1I;VYS+@H*"@H@(" @(%\(,2X@(%\(55\(;E\(:5\(;5\(<%\(;%\(95\(
- XM;5\(95\(;E\(=%\(95\(9"!?"$9?"&5?"&%?"'1?"'5?"')?"&5?"',*"B @
- XM(" @7P@Q+E\(,2X@(%\(15\(>"!?"$U?"&]?"&1?"&4*"B @(" @5&AE(&UA
- XM:6X@87)E82!I;B!W:&EC:"!X=FD@:7,@;&%C:VEN9R!I<R!V:2=S(%\(95\(
- XM>"!M;V1E+" @=VAI8V@@(&ES"B @(" @;F]T(&EM<&QE;65N=&5D(&%T(&%L
- XM;" H86YD(&YE:71H97(@87)E(&5D:70L(&4L(&%N9"!O<&5N(&UO9&5S*2X*
- XM(" @("!(;W=E=F5R+"!M86YY(&]F('1H92!E>"!C;VUM86YD<R!A<F4@879A
- XM:6QA8FQE(&EN("!X=FD@(&%S("!C;VQO;@H@(" @(&-O;6UA;F1S.R @=&AE
- XM("!C;VQO;B!C;VUM86YD<R!T:&%T(&AA=F4@;F]T(&)E96X@:6UP;&5M96YT
- XM960@87)E"B @(" @;6]S=&QY('1H;W-E('=H:6-H(&]F9F5R('1H92!S86UE
- XM(&9U;F-T:6]N86QI='D@87,@;W1H97(@8V]M;6%N9',*(" @("!I;B!V:2!M
- XM;V1E+@H*(" @("!3<&5C:69I8V%L;'DL('1H92!F;VQL;W=I;F<@97@@8V]M
- XM;6%N9',@87)E(&YO="!I;7!L96UE;G1E9"P@(&%N9 H@(" @('!R;V)A8FQY
- XM(&YE=F5R('=I;&P@8F4@=VET:&EN('AV:3H*"@D@(" @(%\(:5\(;E\(<U\(
- XM95\(<E\(=" @(" @(" @(%\(=5\(;E\(9%\(;R @(" @(" @(" @7PAE7PAX
- XM"@D@(" @(%\(8U\(:%\(85\(;E\(9U\(92 @(" @(" @(%\(;U\(<%\(95\(
- XM;B @(" @(" @(" @? H)(" @("!?"&%?"'!?"'!?"&5?"&Y?"&0@(" @(" @
- XM("!?"'H*"B @(" @=VAI;&4@=&AE<V4@97@@8V]M;6%N9',L(&%L=&AO=6=H
- XM(&YO="!C=7)R96YT;'D@:6UP;&5M96YT960L("!M87D*(" @("!B92!A9&1E
- XM9"!A<R!C;VQO;B!C;VUM86YD<R!A="!S;VUE('1I;64@:6X@=&AE(&9U='5R
- XM93H*"@D@(" @(%\(85\(8E\(8E\(<E\(95\(=E\(:5\(85\(=%\(92 @(" @
- XM7PAR7PAE7PAC7PAO7PAV7PAE7PAR(" @(" @("!?"'=?"')?"&E?"'1?"&4^
- XM/@H)(" @("!?"'5?"&Y?"&%?"&)?"&)?"')?"&5?"'9?"&E?"&%?"'1?"&4@
- XM("!?"&I?"&]?"&E?"&X*"@H*"@H*(" @("!?7U]?7U]?7U]?7U]?7U]?7U]?
- XM7U]?7U]?"B @(" @? @M(%5.25@@:7,@82!T<F%D96UA<FL@;V8@0F5L;"!,
- XM86)O<F%T;W)I97,N"@H*"B @(" @7P@R7P@U7PAT7PAH(%\(4U\(95\(<%\(
- XM=%\(95\(;5\(8E\(95\(<B!?"#%?"#E?"#E?"#(@(" @(" @(" @(" @(" @
- XM(" @(" @(" @(" @(" @(" @(" @(" @7PA07PAA7PAG7PAE(%\(,0H*"@H*
- XM"B @(" @7P@R(" @(" @(" @(" @(" @(" @(" @("!?"%-?"'5?"&U?"&U?
- XM"&%?"')?"'D@7PAO7PAF(%\(1%\(:5\(9E\(9E\(95\(<E\(95\(;E\(8U\(
- XM95\(<R!?"&)?"&5?"'1?"'=?"&5?"&5?"&X@7PA67PAI(%\(85\(;E\(9"!?
- XM"%A?"'9?"&D*"@H@(" @(%\(,2Y?"#(N("!?"%9?"&D@7PAC7PAO7PAM7PAM
- XM7PAA7PAN7PAD7PAS"@H@(" @(%1H92!F;VQL;W=I;F<@=FD@;6]D92 @8V]M
- XM;6%N9',@(&%R92 @;F]T("!I;7!L96UE;G1E9"P@(&%L=&AO=6=H"B @(" @
- XM=&AE<F4@:7,@;F\@<F5A;"!R96%S;VX@=VAY('1H97D@<VAO=6QD;B=T(&)E
- XM.@H*"2 @(" @7PA5(" @(" @(" @(" @(" ]"@H@(" @('=H:6QE('1H:7,@
- XM;VYE(&ES(&EN87!P<F]P<FEA=&4@:6X@('1H92 @8V]N=&5X=" @;V8@('AV
- XM:2P@('-I;F-E"B @(" @=&AE<F4@:7,@;F\@7PAE7PAX(&UO9&4Z"@H)(" @
- XM("!?"%$*"@H@(" @(%\(,2Y?"#,N("!?"%!?"&%?"')?"&%?"&U?"&5?"'1?
- XM"&5?"')?"',*"B @(" @5&AE(&9O;&QO=VEN9R!P87)A;65T97)S(&AA=F4@
- XM;F]T(&)E96X@:6UP;&5M96YT960L(&%N9" @<')O8F%B;'D*(" @("!W;VXG
- XM="!B93H*"@D@(" @(%\(85\(9%\(82 @(" @(" @(" @(%\(;%\(:5\(<U\(
- XM<" @(" @(" @(" @7PAR7PAE7PAD7PAR7PAA7PAW"@D@(" @(%\(85\(9%\(
- XM85\(<%\(85\(=%\(:" @(" @(" @7PAM7PAE7PAS7PAG(" @(" @(" @("!?
- XM"'-?"&Q?"&]?"'=?"&]?"'!?"&5?"&X*"2 @(" @7PAA7PAU7PAT7PAO7PAP
- XM7PAR7PAI7PAN7PAT(" @(" @7PAM7PAO7PAD7PAE7PAL7PAI7PAN7PAE(" @
- XM(" @(%\(=%\(95\(<E\(;0H)(" @("!?"&)?"&5?"&%?"'5?"'1?"&E?"&9?
- XM"'D@(" @(" @7PAO7PAP7PAE7PAN(" @(" @(" @("!?"'1?"&5?"')?"'-?
- XM"&4*"2 @(" @7PAD7PAI7PAR7PAE7PAC7PAT7PAO7PAR7PAY(" @(" @7PAO
- XM7PAP7PAT7PAI7PAM7PAI7PAZ7PAE(" @(" @(%\(=%\(=%\(>5\(=%\(>5\(
- XM<%\(90H)(" @("!?"&5?"&1?"&-?"&]?"&U?"'!?"&%?"'1?"&E?"&)?"&Q?
- XM"&4@("!?"'!?"')?"&]?"&U?"'!?"'0@(" @(" @("!?"'=?"&E?"&Y?"&1?
- XM"&]?"'<*"2 @(" @7PAH7PAA7PAR7PAD7PAT7PAA7PAB7PAS"@H@(" @('=H
- XM:6QE('1H97-E('!A<F%M971E<G,@;6%Y('=E;&P@8F4@:6UP;&5M96YT960@
- XM870@<V]M92!P;VEN=#H*"@D@(" @(%\(85\(=5\(=%\(;U\(=U\(<E\(:5\(
- XM=%\(92 @(" @(%\(<U\(8U\(<E\(;U\(;%\(;" @(" @(" @(%\(=U\(85\(
- XM<E\(;@H)(" @("!?"&5?"')?"')?"&]?"')?"&)?"&5?"&Q?"&Q?"',@(" @
- XM(%\(<U\(;U\(=5\(<E\(8U\(95\(85\(;E\(>2 @(" @(%\(=U\(<E\(:5\(
- XM=%\(95\(85\(;E\(>0H*"B @(" @7P@Q+E\(-"X@(%\(35\(:5\(<U\(8U\(
- XM95\(;%\(;%\(85\(;E\(95\(;U\(=5\(<PH*(" @("!3;VUE(&9E871U<F5S
- XM(&]F(&-E<G1A:6X@8V]M;6%N9',@9&\@;F]T("!W;W)K("!A<R @=&AE>2 @
- XM<VAO=6QD+@H@(" @(%-P96-I9FEC86QL>3H*"B @(" @;P@K(" @(%)E<&5A
- XM="!C;W5N=',@8F5F;W)E(&EN<V5R=&EO;G,@9&]N)W0@=V]R:RX*"B @(" @
- XM;P@K(" @($%P<&5N9&EN9R!T;R!N86UE9"!B=69F97)S(&ES(&YO="!Y970@
- XM:6UP;&5M96YT960N"@H@(" @(&\(*R @("!4>7!I;F<@7E$@:6X@:6YP=70@
- XM;6]D92!D;V5S(&YO="!M96%N('1H92 @<V%M92 @87,@(%Y6.R @:70*"2 @
- XM:G5S=" @:6YS97)T<R @82!@7E$G+"!A<W-U;6EN9R!I="!G971S(&%S(&9A
- XM<B!A<R!T:&4@961I=&]R"@D@(&%T(&%L;"X*"B @(" @;P@K(" @(%1Y<&EN
- XM9R!>5R!I;B!I;G-E<G0@;6]D92!D;V5S(&YO="!B86-K('5P(&]N92!W;W)D
- XM(&%S(&EN('9I+@H*(" @("!O""L@(" @270@:7,@;F]T('!O<W-I8FQE('1O
- XM("!I;G1E<G)U<'0@('1H92 @961I=&]R("!W:&EL92 @:70@(&ES"@D@('!E
- XM<F9O<FUI;F<@(&-E<G1A:6X@(&]P97)A=&EO;G,N(" @268@('EO=2 @<W1A
- XM<G0@(&]F9B!A(&)I9PH)("!G;&]B86P@8V]M;6%N9"P@>6]U(&AA=F4@=&\@
- XM=V%I="!F;W(@:70@=&\@9FEN:7-H+@H*(" @("!O""L@(" @1FQA9W,@86YD
- XM(&-O=6YT<R!A9G1E<B!C;VQO;B!C;VUM86YD<R!A<F4@;F]T('-U<'!O<G1E
- XM9"X*"@H*"@H@(" @(%\(4%\(85\(9U\(92!?"#(@(" @(" @(" @(" @(" @
- XM(" @(" @(" @(" @(" @(" @(" @(" @7P@R7P@U7PAT7PAH(%\(4U\(95\(
- XM<%\(=%\(95\(;5\(8E\(95\(<B!?"#%?"#E?"#E?"#(*"@H*"@H@(" @(%\(
- XM4U\(=5\(;5\(;5\(85\(<E\(>2!?"&]?"&8@7PA$7PAI7PAF7PAF7PAE7PAR
- XM7PAE7PAN7PAC7PAE7PAS(%\(8E\(95\(=%\(=U\(95\(95\(;B!?"%9?"&D@
- XM7PAA7PAN7PAD(%\(6%\(=E\(:2 @(" @(" @(" @(" @(" @(" @(" @7P@S
- XM"@H*"B @(" @;P@K(" @($ET(&ES(&YO="!P;W-S:6)L92!T;R!R96%D('1H
- XM92!O=71P=70@;V8@(&$@('-Y<W1E;2 @8V]M;6%N9 H)("!U<VEN9PH*"0D@
- XM(#IR("%?"&-?"&]?"&U?"&U?"&%?"&Y?"&0*"@D@(&]R('1O('=R:71E(&EN
- XM=&\@82!C;VUM86YD('5S:6YG"@H)"2 @.G<@(5\(8U\(;U\(;5\(;5\(85\(
- XM;E\(9 H*"B @(" @;P@K(" @(%1H92 Z<W5B<W1I='5T92!C;VUM86YD(&1O
- XM97,@;F]T('-U<'!O<G0@<W!L:71T:6YG(&]F(&QI;F5S+@H*(" @("!O""L@
- XM(" @4F5G=6QA<B!E>'!R97-S:6]N<RP@86QT:&]U9V@@(&EM<&QE;65N=&5D
- XM(" H<V5E("!L871E<B @9F]R"@D@(&UO<F4@(&1E=&%I;',I+"!D;R!N;W0@
- XM<W5P<&]R="!T:&4@?B!C:&%R86-T97([(&%L<V\L('1H92!<=0H)("!A;F0@
- XM7&P@97-C87!E('-E<75E;F-E<R!A<F4@;F]T('-U<'!O<G1E9"!O;B!T:&4@
- XM(')I9VAT+6AA;F0*"2 @<VED92!O9B!A('-U8G-T:71U=&4@<F5P;&%C96UE
- XM;G0@<&%T=&5R;BX*"B @(" @;P@K(" @(%1H92 Z9VQO8F%L(&-O;6UA;F0@
- XM;VYL>2!S=7!P;W)T<R!T:&4@8V]M;6%N9',@6VQP<R9^9%TN"@H@(" @(&\(
- XM*R @("!5;F1O(&1O97,@;F]T('=O<FL@<')O<&5R;'D@=VAE;B!A<'!L:65D
- XM('1O(&UA8W)O<R H96ET:&5R($ *"2 @;W(@(#IM87 I.R!I="!S:&]U;&0@
- XM=6YD;R!A;&P@=&AE(&-H86YG97,@;6%D92!B>2!T:&4@;6%C<F\L"@D@(&)U
- XM="!I;B!F86-T(&]N;'D@('1H92 @;&%S=" @8V]M;6%N9" @=VET:&EN("!T
- XM:&4@(&UA8W)O("!I<PH)("!U;F1O;F4N"@H@(" @(%\(,BX@(%\(15\(;E\(
- XM:%\(85\(;E\(8U\(95\(;5\(95\(;E\(=%\(<PH*(" @("!4:&4@9F]L;&]W
- XM:6YG(&5X=&5N<VEO;G,@87)E(&%V86EL86)L92!I;B!X=FDN"@H@(" @(%\(
- XM,BY?"#$N("!?"%!?"&%?"')?"&%?"&U?"&5?"'1?"&5?"'(@7PA(7PAA7PAN
- XM7PAD7PAL7PAI7PAN7PAG"@H@(" @(%AV:2!S=7!P;W)T<R U('1Y<&5S(&]F
- XM("!P87)A;65T97(Z("!A<R @=V5L;" @87,@('9I)W,@(%\(;E\(=5\(;5\(
- XM95\(<E\(:5\(8RP*(" @("!?"'-?"'1?"')?"&E?"&Y?"&<@(&%N9" @7PAB
- XM7PAO7PAO7PAL7PAE7PAA7PAN+"!I="!A;'-O(&AA<R!?"&5?"&Y?"'5?"&U?
- XM"&5?"')?"&%?"'1?"&5?"&0@86YD(%\(;%\(:5\(<U\(="!T>7!E<RX@(%1H
- XM90H@(" @(&9O<FUE<B!I<R!U<V5D(&9O<B!E+F<N(&9O<FUA="!A;F0@<F5G
- XM97AT>7!E+"!W:&EL92!T:&4@;&%T=&5R(&ES"B @(" @8W5R<F5N=&QY("!O
- XM;FQY("!U<V5D("!F;W(@=&%G<RX@(%1H92!A9'9A;G1A9V4@;V8@=&AE(%\(
- XM95\(;E\(=5\(;5\(95\(<E\(85\(=%\(95\(9 H@(" @('1Y<&4@:7,@=&AA
- XM="!I9B!Y;W4@=')Y('1O('-E=" @86X@(&EL;&5G86P@('9A;'5E+" @=&AE
- XM("!S970@(&]F"B @(" @8V]R<F5C=" @=F%L=65S("!W:6QL("!B92 @9&ES
- XM<&QA>65D+"!W:&EC:"!I<R!V97)Y('5S969U;"!I9B!Y;W4*(" @("!H879E
- XM(&9O<F=O='1E;B!W:&%T('1H92!V86QU97,@;6%Y(&)E+B @*%1R>2 Z<V5T
- XM('!R97-E<G9E('1O('-E90H@(" @(&%N(&5X86UP;&4@;V8@=&AI<RXI"@H@
- XM(" @(%\(,BY?"#(N("!?"%=?"&E?"&Y?"&1?"&]?"'=?"',*"B @(" @6'9I
- XM('-U<'!O<G1S(&UU;'1I<&QE(%\(8E\(=5\(9E\(9E\(95\(<E\(<R @86YD
- XM("!?"'=?"&E?"&Y?"&1?"&]?"'=?"',N(" @02 @7PAB7PAU7PAF7PAF7PAE
- XM7PAR("!I<R @=&AE"B @(" @;V)J96-T('=H:6-H(&AO;&1S(&$@9FEL92!I
- XM;B!M96UO<GDL('=H:6QE(&$@7PAW7PAI7PAN7PAD7PAO7PAW(&ES(&%N(&%R
- XM96$@;V8*(" @("!T:&4@<V-R965N('=H:6-H('-H;W=S('!A<G0@;V8@82!B
- XM=69F97(N("!.;W1E('1H870@979E<GD@('=I;F1O=PH@(" @(')E9F5R96YC
- XM97,@82!B=69F97(L(&5V96X@:68@;F\@9FEL92!I<R!B96EN9R!E9&ET960N
- XM"@H@(" @(%1H92!F;VQL;W=I;F<@8V]M;6%N9',@87)E(&%V86EL86)L92!F
- XM;W(@;W!E<F%T:6YG(&]N(&)U9F9E<G,@86YD"B @(" @=VEN9&]W<SH*"B @
- XM(" @.F)U9F9E<B @(&-R96%T92!A(&YE=R!B=69F97(@:6X@82!N97<@=VEN
- XM9&]W.R!C86X@8F4@9F]L;&]W960@8GD*"2 @(" @("!A(&9I;&5N86UE+"!W
- XM:&EC:"!W:6QL(&)E(&5D:71E9"!I;B!T:&4@;F5W(&)U9F9E<BX*"B @(" @
- XM.G-P;&ET(" @(&-R96%T92 @82 @;F5W("!W:6YD;W<@(&]N=&\@('1H92 @
- XM8W5R<F5N=" @8G5F9F5R(" @8GD*"2 @(" @("!S<&QI='1I;F<@("!T:&4@
- XM("!C=7)R96YT("!W:6YD;W<@(&EN("!H86QF+B @(%1H92 @='=O"@H*(" @
- XM("!?"#)?"#5?"'1?"&@@7PA37PAE7PAP7PAT7PAE7PAM7PAB7PAE7PAR(%\(
- XM,5\(.5\(.5\(,B @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
- XM(" @("!?"%!?"&%?"&=?"&4@7P@S"@H*"@H*(" @("!?"#0@(" @(" @(" @
- XM(" @(" @(" @(" @(%\(4U\(=5\(;5\(;5\(85\(<E\(>2!?"&]?"&8@7PA$
- XM7PAI7PAF7PAF7PAE7PAR7PAE7PAN7PAC7PAE7PAS(%\(8E\(95\(=%\(=U\(
- XM95\(95\(;B!?"%9?"&D@7PAA7PAN7PAD(%\(6%\(=E\(:0H*"@D@(" @(" @
- XM<F5S=6QT:6YG('=I;F1O=W,@87)E('-I;6EL87(@('1O("!?"'9?"&E?"&5?
- XM"'=?"'!?"&]?"')?"'1?"',@(&]N("!T;R @80H)(" @(" @('-I;F=L92 @
- XM961I=&EN9R @8G5F9F5R+" @:6X@('1H870@(&-H86YG97,@;6%D92!I;B!O
- XM;F4*"2 @(" @("!W:6YD;W<@87)E(')E9FQE8W1E9"!I;B!T:&4@;W1H97(@
- XM;VYE+@H*(" @(" Z8VQO<V4@(" @8VQO<V4@=&AE(&-U<G)E;G0@=VEN9&]W
- XM.R!W:6QL(&%L<V\@8VQO<V4@=&AE(&)U9F9E<B!I9@H)(" @(" @('1H:7,@
- XM:7,@=&AE(&QA<W0@=VEN9&]W(&]N=&\@:70N"@H@(" @(#IX("\@6EH@("!C
- XM;&]S92!O;FQY('1H92!C=7)R96YT('=I;F1O=RX@($EF('1H92 @=VEN9&]W
- XM("!I<R @=&AE"@D@(" @(" @;VYL>2 @;VYE(&]N=&\@=&AE(&)U9F9E<BP@
- XM=&AE(&)U9F9E<B!W:6QL(&)E(&-L;W-E9"!A<PH)(" @(" @('=E;&PL('=R
- XM:71I;F<@:70@9FER<W0@:68@:70@:7,@;6]D:69I960N("!(96YC92P@9F]R
- XM(&$*"2 @(" @("!S:6YG;&4@=VEN9&]W+"!T:&ES(&-O;6UA;F0@9&]E<R!T
- XM:&4@<V%M92!A<R!I;B!V:2X*"B @(" @9R @(" @(" @(&UO=F4@=&\@=&AE
- XM(&YE>'0@=VEN9&]W+B @5&AI<R!I<R!N;W)M86QL>2 @=&AE("!W:6YD;W<*
- XM"2 @(" @("!D:7)E8W1L>2 @8F5L;W<@('1H92 @8W5R<F5N="!O;F4@;VX@
- XM=&AE('-C<F5E;BP@;W(@=&AE"@D@(" @(" @=&]P('=I;F1O=R!O;B!T:&4@
- XM<V-R965N(&EF('1H92!C=7)R96YT('=I;F1O=R @:7,@('1H90H)(" @(" @
- XM(&)O='1O;2!O;F4N"@H@(" @(%Y7(" @(" @("!I;F-R96%S92!T:&4@<VEZ
- XM92!O9B!T:&4@8W5R<F5N="!W:6YD;W<@*&UA>2!B92!G:79E;B!A"@D@(" @
- XM(" @;G5M97)I8R!P<F5F:7@L(&1E9F%U;'0@:7,@;VYE(&QI;F4I+@H*(" @
- XM("!>5" @(" @(" @9&5C<F5A<V4@=&AE('-I>F4@;V8@=&AE(&-U<G)E;G0@
- XM=VEN9&]W("AM87D@8F4@9VEV96X@80H)(" @(" @(&YU;65R:6,@<')E9FEX
- XM+"!D969A=6QT(&ES(&]N92!L:6YE*2X*"B @(" @7D\@(" @(" @(&UA:V4@
- XM=&AE(&-U<G)E;G0@=VEN9&]W(&%S(&QA<F=E(&%S('!O<W-I8FQE+@H*(" @
- XM("!>72 @(" @(" @87,@(&9O<B @=FDL("!B=70@(&-R96%T97,@(&$@(&YE
- XM=R @8G5F9F5R("!W:6YD;W<@("!I9@H)(" @(" @(&%P<')O<')I871E("AA
- XM;F0@:68@875T;W-P;&ET(&%L;&]W<RDN"@H@(" @($YO=&4@=&AA="!T:&4@
- XM.G%U:70@8V]M;6%N9"!Q=6ET<R!O=70@;V8@=&AE(&5D:71O<BP@;F]T(&]U
- XM="!O9B!A"B @(" @=VEN9&]W+B @(%1H92 @.F-L;W-E(&-O;6UA;F0@:7,@
- XM=&AU<R!T:&4@97%U:79A;&5N="!O9B Z<75I="!F;W(*(" @("!W:6YD;W=S
- XM+B @5&AE<F4@:7,@;F\@97%U:79A;&5N=" @;V8@(#IX("!O<B @6EH@(&9O
- XM<B @=&AE("!W:&]L90H@(" @(&5D:71O<CL@=&AE<V4@:&%V92!B965N(&AI
- XM:F%C:V5D(&9O<B!O<&5R871I;VYS(&]N('=I;F1O=W,N"@H@(" @($%L<V\@
- XM=&AE(&YU;65R:6,@875T;W-P;&ET('!A<F%M971E<B!S<&5C:69I97,@=&AE
- XM(&UA>&EM=6T@;G5M8F5R"B @(" @;V8@8G5F9F5R('=I;F1O=W,@=&AA="!W
- XM:6QL(&)E(&-R96%T960@875T;VUA=&EC86QL>2!W:&5N979E<B!Y;W4*(" @
- XM("!E:71H97(@961I="!M;W)E('1H86X@;VYE(&9I;&4L(&]R('5S92!T86=S
- XM('1O(&5D:70@(&$@(&1I9F9E<F5N= H@(" @(&9I;&4N"@H@(" @(%5N9&\@
- XM=V]R:W,@<&5R(&)U9F9E<BP@87,@9&\@;6%R:W,[("!Y86YK+W!U=" @86YD
- XM("!R961O(" H=&AE(" N"B @(" @8V]M;6%N9"D@('=O<FL@(&]V97(@(&%L
- XM;" @8G5F9F5R<RP@(&DN92X@>6]U(&-A;B!D96QE=&4@9G)O;2!O;F4*(" @
- XM("!B=69F97(@86YD('!U="!T:&4@=&5X="!I;G1O(&$@9&EF9F5R96YT(&)U
- XM9F9E<BX*"B @(" @5&AE(&UI;G)O=W,@<&%R86UE=&5R('-P96-I9FEE<R!T
- XM:&4@;6EN:6UU;2 @;G5M8F5R("!O9B @<F]W<R @=&\*(" @("!W:&EC:" @
- XM82 @=VEN9&]W("!M87D@(&)E('-H<G5N:RP@:6YC;'5D:6YG('1H92!S=&%T
- XM=7,@;&EN92X@(%1H90H@(" @(&1E9F%U;'0@=F%L=64@:7,@,CL@,"!A;F0@
- XM,2!M87D@86QS;R!B92!U<V5F=6PN"@H@(" @(%\(,BY?"#,N("!?"$Y?"&%?
- XM"&U?"&5?"&0@7PA"7PAU7PAF7PAF7PAE7PAR7PAS"@H@(" @($%S('=E;&P@
- XM87,@=&AE(&YO<FUA;"!N86UE9" H8V]N:G5G871E*2!B=69F97)S+"!A;F0@
- XM=&AE("!D969A=6QT"B @(" @;VYE("!N86UE9"! +"!S979E<F%L(&5X=')A
- XM(&)U9F9E<G,@;F%M960@.BP@+RP@/R @86YD("$@(&-O;G1A:6X*(" @("!T
- XM:&4@;&%S="!C;VUM86YD(&QI;F5S(&5N=&5R960@9F]R(&5A8V@@;V8@=&AE
- XM(&-O;6UA;F0@='EP97,N("!3;PH@(" @(&9O<B @:6YS=&%N8V4L("! .B!W
- XM:6QL(')E+65X96-U=&4@=&AE(&QA<W0@8V]L;VX@8V]M;6%N9"P@;W(@>6]U
- XM"B @(" @8V%N(&EN<V5R="!I="!I;G1O('EO=7(@8G5F9F5R+"!E9&ET(&ET
- XM(&%N9" @=&AE;B @<F4M97AE8W5T92 @:70*(" @(" H92YG+B!W:71H(%\(
- XM9%\(9$! *2X*"@H*(" @("!?"%!?"&%?"&=?"&4@7P@T(" @(" @(" @(" @
- XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(%\(,E\(-5\(=%\(:"!?"%-?
- XM"&5?"'!?"'1?"&5?"&U?"&)?"&5?"'(@7P@Q7P@Y7P@Y7P@R"@H*"@H*(" @
- XM("!?"%-?"'5?"&U?"&U?"&%?"')?"'D@7PAO7PAF(%\(1%\(:5\(9E\(9E\(
- XM95\(<E\(95\(;E\(8U\(95\(<R!?"&)?"&5?"'1?"'=?"&5?"&5?"&X@7PA6
- XM7PAI(%\(85\(;E\(9"!?"%A?"'9?"&D@(" @(" @(" @(" @(" @(" @(" @
- XM(%\(-0H*"@H@(" @(%\(,BY?"#0N("!?"$9?"&E?"&Q?"&4@7PA&7PAO7PAR
- XM7PAM7PAA7PAT7PAS"@H@(" @(%AV:2!W:6QL(&AA;F1L92!D:69F97)E;G0@
- XM9FEL92!F;W)M871S+"!V:6$@=&AE(&9O<FUA="!P87)A;65T97(L"B @(" @
- XM=VAI8V@@(&UA>2 @8F4@<V5T('1O(&4N9RX@(")U;FEX(BP@(FUS9&]S(BP@
- XM971C+B @5&AI<R!M96%N<R!Y;W4*(" @("!C86X@961I="!-4RU$3U,@9FEL
- XM97,@=6YD97(@54Y)6"P@971C+@H*(" @("!?"#(N7P@U+B @7PA27PAE7PAG
- XM7PAU7PAL7PAA7PAR(%\(15\(>%\(<%\(<E\(95\(<U\(<U\(:5\(;U\(;E\(
- XM<PH*(" @("!6:2=S(&UA9VEC('!A<F%M971E<B!I<R @<F5P;&%C960@(&)Y
- XM("!T:&4@(')E9V5X='EP92 @<&%R86UE=&5R+ H@(" @('=H:6-H(&-A;B!T
- XM86ME('1H92!F;VQL;W=I;F<@=F%L=65S.@H*(" @("!T86=S(" @(" @;VYL
- XM>2!>(&%N9" D(&%R92!S:6=N:69I8V%N=" H=7-E9"!F;W(@=&%G<RDN"@H@
- XM(" @(&=R97 @(" @("!L:6ME(%\(9U\(<E\(95\(<"@Q*2P@8G5T('=I=&@@
- XM7PA</"!A;F0@7PA</B!A9&1E9"X*"B @(" @96=R97 @(" @(&QI:V4@7PAE
- XM7PAG7PAR7PAE7PAP*#$I+"!B=70@=VET:"!?"%P\(&%N9"!?"%P^(&%D9&5D
- XM+@H*(" @("!4:&4@9&5F875L="!I<R!?"&=?"')?"&5?"' N"@H@(" @(%1H
- XM92 @<V5C=&EO;G,@(&%N9" @<&%R86=R87!H<R @<&%R86UE=&5R<R @(&1E
- XM9FEN92 @(%\(95\(9U\(<E\(95\(<"US='EL90H@(" @('!A='1E<FYS("!T
- XM;R @<V5A<F-H(&9O<BP@<F%T:&5R('1H86X@7PAV7PAI)W,@<VEM<&QI<W1I
- XM8R H86YD(%\(=%\(<E\(;U\(9E\(9BT*(" @("!D97!E;F1E;G0I(&-H87)A
- XM8W1E<B!P86ER<RX*"B @(" @5&AE('-E;G1E;F-E<R!P87)A;65T97(@:7,@
- XM86QS;R!I;7!L96UE;G1E9"!I;B!T:&ES(&9A<VAI;VXL("!B=70*(" @("!T
- XM:&ES(&ES(&YO="!C;VUP;&5T96QY('-A=&ES9F%C=&]R>2!A="!T:&4@;6]M
- XM96YT+@H*(" @("!.;W1E('1H870@:70@:7,@<&]S<VEB;&4@=&\@<V5T(&]R
- XM('5N<V5T('1H92!M86=I8R @<&%R86UE=&5R("!A<PH@(" @(&EN("!V:3L@
- XM('1H:7,@=VEL;"!S:6UP;'D@<F5S=6QT(&EN('1H92!R96=E>'1Y<&4@<&%R
- XM86UE=&5R(&)E:6YG"B @(" @<V5T(&%S(&%P<')O<')I871E+@H*(" @("!?
- XM"#(N7P@V+B @7PA#7PAO7PAL7PAO7PAU7PAR"@H@(" @(%AV:2!H87,@82!M
- XM:6YI;6%L(&%M;W5N=" @;V8@('-U<'!O<G0@(&9O<B @8V]L;W5R<RX@("!"
- XM87-I8V%L;'DL"B @(" @=&AE<F4@(&%R92 @8V]N<VED97)E9" @=&\@(&)E
- XM(&9O=7(@<V5T=&%B;&4@8V]L;W5R<RP@96%C:"!W:71H(&$*(" @("!N=6UE
- XM<FEC('!A<F%M971E<B!T;R!S87D@=VAA="!I=',@=F%L=64@:7,Z"@H@(" @
- XM(&-O;&]U<B @(" @(" @8V]L;W5R('5S960@9F]R('1E>'0*"B @(" @<W1A
- XM='5S8V]L;W5R("!C;VQO=7(@=7-E9"!F;W(@<W1A='5S(&QI;F5S"@H@(" @
- XM(')O<V-O;&]U<B @(" @87,@<W1A='5S8V]L;W5R+"!B=70@9F]R(')E861O
- XM;FQY(&9I;&5S"@H@(" @('-Y<W1E;6-O;&]U<B @8V]L;W5R('5S960@9F]R
- XM('-Y<W1E;2 @;6]D92 @*&DN92X@('-U8G-H96QL<R @86YD"@D)(" @869T
- XM97(@=&5R;6EN871I;VXI+@H*(" @("!4:&4@86-T=6%L('9A;'5E<R!O9B!T
- XM:&5S92!P87)A;65T97)S(&%R92!S>7-T96TM9&5P96YD96YT.R!O;B!00PH@
- XM(" @('9E<G-I;VYS+" @=&AE>2!A<F4@:&%R9'=A<F4M9&5P96YD96YT('9I
- XM9&5O(&%T=')I8G5T97,L('=H:6QE(&]N"B @(" @54Y)6"!T:&5Y(&%R92!I
- XM;F1E>&5S(&EN=&\@=&AE(&5N=')I97,@8&!C,"<G('1O("!@8&,Y)R<@(&EN
- XM("!T:&4*(" @("!?"'1?"&5?"')?"&U?"&-?"&%?"' H-2D@(&1A=&%B87-E
- XM+" @=VAI8V@@(&%R92 @87-S=6UE9" @=&\@(&)E(&-O;&]U<BUS971T:6YG
- XM"B @(" @97-C87!E('-E<75E;F-E<R!I9B!T:&5Y(&%R92!P<F5S96YT+B @
- XM268@=&AE>2!A<F4@(&YO=" @<')E<V5N="P*(" @(" B<V\B(" H8F5G:6X@
- XM<W1A;F1O=70@;6]D92D@86YD(")S92(@*&5N9"!S=&%N9&]U="!M;V1E*2!A
- XM<F4@=7-E9 H@(" @(&EN<W1E860N("!686QU97,@;V8@,"!A;F0@(#$@(&=I
- XM=F4@(&YO<FUA;" @=&5X="P@(#(@('1O(" Y("!G:79E"B @(" @<W1A;F1O
- XM=70@;6]D92X*"@H*(" @("!?"#)?"#5?"'1?"&@@7PA37PAE7PAP7PAT7PAE
- XM7PAM7PAB7PAE7PAR(%\(,5\(.5\(.5\(,B @(" @(" @(" @(" @(" @(" @
- XM(" @(" @(" @(" @(" @(" @("!?"%!?"&%?"&=?"&4@7P@U"@H*"@H*(" @
- XM("!?"#8@(" @(" @(" @(" @(" @(" @(" @(%\(4U\(=5\(;5\(;5\(85\(
- XM<E\(>2!?"&]?"&8@7PA$7PAI7PAF7PAF7PAE7PAR7PAE7PAN7PAC7PAE7PAS
- XM(%\(8E\(95\(=%\(=U\(95\(95\(;B!?"%9?"&D@7PAA7PAN7PAD(%\(6%\(
- XM=E\(:0H*"B @(" @5&AE(&1E9F%U;'0@8V]L;W5R("!F;W(@('1H92 @<F]S
- XM8V]L;W5R("!P87)A;65T97(@('=I;&P@('5S=6%L;'D*(" @("!I;G9O;'9E
- XM(')E9"!I9B!C;VQO=7)S(&%R92!A=F%I;&%B;&4[('1H:7,@:7,@:6YT96YD
- XM960@=&\@<')O=FED90H@(" @(&$@=V%R;FEN9R!T;R!T:&4@=7-E<B!T:&%T
- XM('=R:71I;F<@=&AE(&9I;&4@;6%Y(&YO="!B92!P;W-S:6)L92X*"B @(" @
- XM5&AE(&-O;&]U<B!V86QU97,@;6%Y(&)E(&5N=&5R960@:6X@9&5C:6UA;"P@
- XM;V-T86P@;W(@:&5X861E8VEM86P*(" @("!F;W)M+B @(%1H:7,@(&UA>2!B
- XM92!C;VYV96YI96YT(&9O<B!00R!V97)S:6]N<R!W:&5R92!T:&4@;G5M8F5R
- XM<PH@(" @(&%C='5A;&QY(')E<')E<V5N="!C;VQO=7(@8FET;6%P<SL@9F]R
- XM(&5X86UP;&4L(&]N($U3+41/4RP*"@D@(" @(#I?"'-?"&5?"'0@7PAC7PAO
- XM/5\(,%\(>%\(,5\(9@H*(" @("!G:79E<R!B<FEG:'0@=VAI=&4@=&5X="!O
- XM;B!A(&)L=64@8F%C:V=R;W5N9"X*"B @(" @7P@R+E\(-RX@(%\(4E\(95\(
- XM<%\(;%\(85\(8U\(92!?"$U?"&]?"&1?"&4*"B @(" @6'9I)W,@(%\(<E\(
- XM95\(<%\(;%\(85\(8U\(92 @;6]D92 @*&5N=&5R960@(&)Y("!T:&4@(%(@
- XM(&-O;6UA;F0I("!A8W1S(" @;6]R90H@(" @(&EN=&5L;&EG96YT;'D@('=H
- XM96X@>6]U('!R97-S('1H92!R971U<FX@:V5Y("T@:70@;&5A=F5S('1H92!R
- XM97-T"B @(" @;V8@=&AE(&-U<G)E;G0@;&EN92!A;&]N92P@86YD(&IU<W0@
- XM<W1A<G1S(')E<&QA8VEN9R!T97AT(&]N("!T:&4*(" @("!N97AT(&QI;F4L
- XM('-T87)T:6YG(&%T('1H92!S8W)E96X@8V]L=6UN('=H97)E('EO=2!F:7)S
- XM="!T>7!E9"!2+@H*(" @("!?"#(N7P@X+B @7PA07PAR7PAE7PAS7PAE7PAR
- XM7PAV7PAE"@H@(" @(%)A=&AE<B!T:&%N('5S92!V:2=S(%5.25@M<W!E8VEF
- XM:6,@;65T:&]D(&9O<B @<')E<V5R=F%T:6]N+" @>'9I"B @(" @9&]E<R @
- XM<&5R:6]D:6,@('!R97-E<G9A=&EO;B @;V8@86QL(&9I;&5S(&-U<G)E;G1L
- XM>2!B96EN9R!E9&ET960*(" @("!I;G1O(&$@=&5M<&]R87)Y(&9I;&4@:6X@
- XM=&AE('-A;64@9&ER96-T;W)Y+B @(%AV:2 @=')I97,@('1O("!D;PH@(" @
- XM('1H:7,@('=H96X@>6]U(&%R92!N;W0@='EP:6YG+"!S;R!T:&%T('EO=2!W
- XM;VXG="!N;W1I8V4@=&AE('-H;W)T"B @(" @9&5L87D@=VAE;B!T:&4@=&5M
- XM<&]R87)Y(&9I;&4@:7,@=W)I='1E;B @;W5T+B @($]B=FEO=7-L>2P@(&]N
- XM;'D*(" @("!C:&%N9V5D("!F:6QE<R @87)E('!R97-E<G9E9"!I;B!T:&ES
- XM('=A>2P@86YD('1H92!T96UP;W)A<GD@9FEL90H@(" @(&ES(&YO<FUA;&QY
- XM(')E;6]V960@;VYC92!T:&4@(')E86P@(&9I;&4@(&AA<R @8F5E;B @<W5C
- XM8V5S<V9U;&QY"B @(" @=W)I='1E;BX@("!!<R @86X@(&%D9&ET:6]N86P@
- XM('-A9F5T>2 @;65A<W5R92P@('=H96X@(&$@(&9I;&4@:7,*(" @("!E>'!L
- XM:6-I=&QY('-A=F5D(&%N9" @:70@(&%P<&5A<G,@(&YO=" @=&\@(&AA=F4@
- XM(&)E96X@('!R97-E<G9E9 H@(" @(')E8V5N=&QY+" @:70@(&ES("!N;W)M
- XM86QL>2 @<')E<V5R=F5D(&9I<G-T+B @5&AI<R!E;G-U<F5S('1H870L"B @
- XM(" @979E;B!I9B!T:&4@;W!E<F%T:6YG('-Y<W1E;2!C<F%S:&5S('=H:6QE
- XM('1H92!R96%L(&9I;&4@:7,@8F5I;F<*(" @("!C<F5A=&5D+"!T:&5R92!S
- XM:&]U;&0@86QW87ES(&)E(&%T(&QE87-T(&]N92!R96-E;G0@8V]P>2!O9B!I
- XM="!I;@H@(" @('1H92!F:6QE<WES=&5M+B @5&AE(#IP<F5S97)V92!C;VUM
- XM86YD(&ES(&%V86EL86)L92!A<R!I;B @=FD@('1O"B @(" @<')E<V5R=F4@
- XM82!S<&5C:69I8R!B=69F97(@;6%N=6%L;'DN"@H@(" @(%1H92!L979E;"!O
- XM9B!S869E='D@<')O=FED960@8GD@=&AE('!R97-E<G9A=&EO;B!F86-I;&ET
- XM>2!M87D@(&)E"B @(" @8V]N9FEG=7)E9" @(&)Y(" @8VAA;F=I;F<@("!T
- XM:&4@("!V86QU97,@(&]F("!T:&4@(%\(<%\(<E\(95\(<U\(95\(<E\(=E\(
- XM92 @86YD"B @(" @7PAP7PAR7PAE7PAS7PAE7PAR7PAV7PAE7PAT7PAI7PAM
- XM7PAE('!A<F%M971E<G,N("!4:&4@9F]L;&]W:6YG('9A;'5E<R!A<F4@879A
- XM:6QA8FQE("!F;W(*(" @("!?"'!?"')?"&5?"'-?"&5?"')?"'9?"&4Z"@H@
- XM(" @('5N<V%F92 @("!.979E<B!P<F5S97)V92!A;GD@(&)U9F9E<B @8F5F
- XM;W)E("!A;B @97AP;&EC:70@('-A=F4N"@D@(" @(" @5&AI<R @8V%N("!B
- XM92!U<V5F=6P@;VX@;VQD+"!S;&]W+"!F;&]P<'DM;VYL>2!S>7-T96US+ H)
- XM(" @(" @(&)U="!I<R!N;W0@9V5N97)A;&QY(')E8V]M;65N9&5D+@H*(" @
- XM("!S=&%N9&%R9" @5&AE(&1E9F%U;'0@=F%L=64N("!/;FQY('!R97-E<G9E
- XM(&$@(&)U9F9E<B @8F5F;W)E("!A;@H)(" @(" @(&5X<&QI8VET("!S879E
- XM(&EF(&ET(&%P<&5A<G,@;F]T('1O(&AA=F4@8F5E;B!P<F5S97)V960*"2 @
- XM(" @("!R96-E;G1L>2X*"B @(" @<V%F92 @(" @($%L=V%Y<R!P<F5S97)V
- XM92!B=69F97)S(&)E9F]R92!T:&5Y(&%R92!W<FET=&5N+@H*(" @("!P87)A
- XM;F]I9" @07,@9F]R('-A9F4L(&)U="!T:&4@<')E<V5R=F4@9FEL92 @:7,@
- XM(&YE=F5R("!R96UO=F5D+ H)(" @(" @(&5V96X@869T97(@=&AE(&9I;&4@
- XM:&%S(&)E96X@<W5C8V5S<V9U;&QY('=R:71T96XN"@H@(" @($EN(&%L;"!C
- XM87-E<RP@86QL(&UO9&EF:65D(&)U9F9E<G,@(&%R92 @<')E<V5R=F5D("!A
- XM=71O;6%T:6-A;&QY"@H*(" @("!?"%!?"&%?"&=?"&4@7P@V(" @(" @(" @
- XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(%\(,E\(-5\(=%\(:"!?
- XM"%-?"&5?"'!?"'1?"&5?"&U?"&)?"&5?"'(@7P@Q7P@Y7P@Y7P@R"@H*"@H*
- XM(" @("!?"%-?"'5?"&U?"&U?"&%?"')?"'D@7PAO7PAF(%\(1%\(:5\(9E\(
- XM9E\(95\(<E\(95\(;E\(8U\(95\(<R!?"&)?"&5?"'1?"'=?"&5?"&5?"&X@
- XM7PA67PAI(%\(85\(;E\(9"!?"%A?"'9?"&D@(" @(" @(" @(" @(" @(" @
- XM(" @(%\(-PH*"B @(" @869T97(@;F\@=7-E<B!E=F5N=',@:&%V92!B965N
- XM(')E8V5I=F5D(&9O<B!?"'!?"')?"&5?"'-?"&5?"')?"'9?"&5?"'1?"&E?
- XM"&U?"&4@<V5C;VYD<RP*(" @("!I9B!A(&UI;FEM=6T@;G5M8F5R(&]F(&5V
- XM96YT<R H8W5R<F5N=&QY(#8P*2!H879E("!B965N("!R96-E:79E9 H@(" @
- XM('-I;F-E("!T:&4@(&QA<W0@(&%U=&]M871I8R @<')E<V5R=F%T:6]N+B @
- XM5&AI<R!B96AA=FEO=7(@8V%N(&)E"B @(" @;6]R92!O<B!L97-S(&1I<V%B
- XM;&5D(&)Y('-E='1I;F<@(%\(<%\(<E\(95\(<U\(95\(<E\(=E\(95\(=%\(
- XM:5\(;5\(92 @=&\@(&$@('9E<GD@(&AI9V@*(" @("!V86QU92X@(" H1F]R
- XM("!E>&%M<&QE+" @;VYE(&]F('1H92!A=71H;W)S('-E=',@:70@=&\@-C P
- XM(&]N('1H90H@(" @(&UA8VAI;F4@:&4@=7-E<R!A="!H;VUE+"!W:&EC:"!I
- XM<R!A;B X,#@X+6)A<V5D(%!#('=I=&@@(&YO("!H87)D"B @(" @9&ES:SL@
- XM(&)Y("!W87D@;V8@8V]N=')A<W0L(&]N('1H92!3<&%R8U-T871I;VX@25!8
- XM('=H:6-H(&AE('5S97,*(" @("!A="!W;W)K+"!H92!S971S(&ET('1O(#(N
- XM*0H*(" @("!4:&4@;F%M97,@9VEV96X@=&\@<')E<V5R=F4@9FEL97,@87)E
- XM('-Y<W1E;2UD97!E;F1E;G0L("!B=70@(&%R90H@(" @(&=E;F5R86QL>2 @
- XM;V8@('1H92 @9F]R;2 @(E\(9E\(:5\(;%\(95\(;E\(85\(;5\(92YT;7 B
- XM+" @;W(@(")?"&9?"&E?"&Q?"&5?"&Y?"&%?"&U?"&4N,# Q(B @=&\*(" @
- XM(" B7PAF7PAI7PAL7PAE7PAN7PAA7PAM7PAE+CDY.2(N("!)9B!A('!R97-E
- XM<G9E(&9I;&4@86QR96%D>2!E>&ES=',L(&ET("!W:6QL("!N;W0*(" @("!B
- XM92!O=F5R=W)I='1E;CL@:6YS=&5A9"P@82!N97<@9FEL96YA;64@=VEL;"!B
- XM92!G96YE<F%T960N"@H@(" @(%1H92 M<B!C;VUM86YD(&QI;F4@;W!T:6]N
- XM(&ES(&YO="!S=7!P;W)T960N"@H@(" @(%\(,BY?"#DN("!?"$A?"&5?"&Q?
- XM"' *"B @(" @02!P<FEM:71I=F4@:&5L<"!F86-I;&ET>2!I<R!A=F%I;&%B
- XM;&4[('1H92!C;VUM86YD(" Z:&5L<"P@(&%L<V\*(" @("!M87!P960@('1O
- XM("!T:&4@2$5,4"!O<B!&,2!K97ES(&]N(&UA;GD@<WES=&5M<RP@<VEM<&QY
- XM(&-R96%T97,@80H@(" @(&YE=R!B=69F97(@=VEN9&]W(&]N=&\@82!S=&%N
- XM9&%R9"!H96QP(&9I;&4N(" @5&AE("!N86UE("!O9B @=&AE"B @(" @9FEL
- XM92 @=VAI8V@@(&ES(&5D:71E9"!I<R!G:79E;B!B>2!T:&4@:&5L<&9I;&4@
- XM<W1R:6YG('!A<F%M971E<CL*(" @("!T:&4@9&5F875L="!O;B!5;FEX('9E
- XM<G-I;VYS(&ES("(O=7-R+VQI8B]X=FDN:&5L<"(N"@H@(" @(%\(,BY?"#%?
- XM"# N("!?"%-?"&-?"')?"&]?"&Q?"&Q?"&E?"&Y?"&<*"B @(" @5&AE("!?
- XM"&I?"'5?"&U?"'!?"'-?"&-?"')?"&]?"&Q?"&P@(&5N=6UE<F%T960@('!A
- XM<F%M971E<B @8V]N=')O;',@("!T:&4@("!E9&ET;W(G<PH@(" @(&)E:&%V
- XM:6]U<B @=VAE;B!T:&4@8W5R<V]R(&UO=F5S(&)E>6]N9"!T:&4@;&EM:71S
- XM(&]F('1H92!C=7)R96YT"B @(" @=VEN9&]W+B @268@:71S('9A;'5E(&ES
- XM(%\(;U\(9E\(9BP@(&%N9" @=&AE("!N97<@('!O<VET:6]N("!I<R @<W1I
- XM;&P*(" @("!R96%S;VYA8FQY("!C;&]S92 @=&\@('1H92 @8W5R<F5N=" @
- XM=VEN9&]W+" @=&AE("!W:6YD;W<@=VEL;"!B90H@(" @('-C<F]L;&5D('-O
- XM('1H870@=&AE(&YE=R!C=7)S;W(@<&]S:71I;VX@:7,@870@=&AE('1O<"!O
- XM<B @8F]T=&]M"B @(" @;V8@:70N("!4>7!I8V%L;'DL('1H92!W:6YD;W<@
- XM=VEL;"!B92!S8W)O;&QE9"!O;F4@;&EN92!A="!A('1I;64*(" @("!A<R!T
- XM:&4@8W5R<V]R(&ES(&UO=F5D('5P(&]R(&1O=VXN("!4:&ES(&)E:&%V:6]U
- XM<B!M87D@;F]T(&%L=V%Y<PH@(" @(&)E("!D97-I<F%B;&4[("!F;W(@(&5X
- XM86UP;&4L("!T97)M:6YA;',@('=I=&AO=70@(')E86P@<V-R;VQL:6YG"B @
- XM(" @<F5G:6]N<R!M87D@9F]R8V4@=&AE(&5D:71O<B!T;R!D;R @82 @;&]T
- XM("!O9B @<V-R965N("!U<&1A=&EN9RP*(" @("!P;W-S:6)L>2!O=F5R(&$@
- XM<VQO=R!T96QE<&AO;F4@;&EN92!O<B!O=F5R;&]A9&5D(&YE='=O<FLN("!!
- XM;'-O+ H@(" @(&]N($Q#1"!S8W)E96YS(&]R(&]T:&5R(&1I<W!L87ES('=I
- XM=&@@82!L;VYG("!I;6%G92 @<&5R<VES=&5N8V4L"B @(" @:70@(&UA>2 @
- XM;6%K92 @=&AE('1E>'0@;6]R92!D:69F:6-U;'0@=&\@<F5A9"X@($EF(%\(
- XM:E\(=5\(;5\(<%\(<U\(8U\(<E\(;U\(;%\(;"!I<PH@(" @('-E="!T;R!?
- XM"&]?"&XL('-C<F]L;&EN9R!B96AA=FEO=7(@:7,@;6]D:69I960@<V\@=&AA
- XM="P@=VAE;F5V97(@('1H90H@(" @(&-U<G-O<B @;6]V97,@8F5Y;VYD('1H
- XM92!L:6UI=',@;V8@=&AE(&-U<G)E;G0@=VEN9&]W+"!T:&4@=VEN9&]W"B @
- XM(" @:7,@<F5D<F%W;B!S;R!A<R!T;R!P;&%C92!T:&4@8W5R<V]R(&%S(&-E
- XM;G1R86QL>2!A<R!P;W-S:6)L92 @:6X*(" @("!I=#L@('1H=7,L("!T:&4@
- XM('=I;F1O=R!A<'!E87)S('1O(%\(:E\(=5\(;5\(<"!T;R!T:&4@;F5W('!O
- XM<VET:6]N+B @5&AE"B @(" @9&5F875L="!V86QU92!F;W(@7PAJ7PAU7PAM
- XM7PAP7PAS7PAC7PAR7PAO7PAL7PAL(&ES(&%U=&\L('=H:6-H(&-A=7-E<R!T
- XM:&4@961I=&]R("!T;PH@(" @(&IU;7 @(&EN<W1E860@(&]F("!S8W)O;&QI
- XM;F<@;VYL>2!I9B!I="!C86XG="!S8W)O;&P@=&AE(&%F9F5C=&5D"B @(" @
- XM=VEN9&]W(&5F9FEC:65N=&QY+@H*(" @("!);B!A;&P@8V%S97,L(&EF('1H
- XM92!D:7-T86YC92!F<F]M("!T:&4@('1O<" @;W(@(&)O='1O;2 @;V8@('1H
- XM90H@(" @('=I;F1O=R!T;R!T:&4@;F5W('!O<VET:6]N(&ES(&UO<F4@=&AA
- XM;B!H86QF('1H92!W:6YD;W<@<VEZ92P@=&AE"B @(" @961I=&]R('=I;&P@
- XM:G5M<"!I;G-T96%D(&]F('-C<F]L;&EN9RX*"B @(" @17AP;&EC:70@<V-R
- XM;VQL(&-O;6UA;F1S(" H92YG+B @7D0I("!A<F4@(&YO=" @869F96-T960@
- XM(&)Y("!T:&4*(" @("!J=6UP<V-R;VQL('!A<F%M971E<BX*"@H*"@H@(" @
- XM(%\(,E\(-5\(=%\(:"!?"%-?"&5?"'!?"'1?"&5?"&U?"&)?"&5?"'(@7P@Q
- XM7P@Y7P@Y7P@R(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
- XM(" @(%\(4%\(85\(9U\(92!?"#<*"@H*"@H@(" @(%\(." @(" @(" @(" @
- XM(" @(" @(" @(" @7PA37PAU7PAM7PAM7PAA7PAR7PAY(%\(;U\(9B!?"$1?
- XM"&E?"&9?"&9?"&5?"')?"&5?"&Y?"&-?"&5?"',@7PAB7PAE7PAT7PAW7PAE
- XM7PAE7PAN(%\(5E\(:2!?"&%?"&Y?"&0@7PA87PAV7PAI"@H*"B @(" @7P@R
- XM+E\(,5\(,2X@(%\(."U?"&)?"&E?"'0@7PA#7PAH7PAA7PAR7PAA7PAC7PAT
- XM7PAE7PAR7PAS"@H@(" @($-H87)A8W1E<G,@=VET:"!T:&4@=&]P(&)I="!S
- XM970@;6%Y(&)E(&1I<W!L87EE9"P@86QT:&]U9V@@:70@(&ES"B @(" @;F]T
- XM('EE="!P;W-S:6)L92!T;R!H879E(&YU;&P@*"=<,"<I(&)Y=&5S(&EN(&$@
- XM9FEL92!B=69F97(N("!(;W<*(" @("!T:&4@8VAA<F%C=&5R<R!A<F4@9&ES
- XM<&QA>65D('9A<FEE<R @8F5T=V5E;B @<WES=&5M<SL@(&]N("!53DE8+ H@
- XM(" @('1H97D@('=I;&P@8F4@<VAO=VX@87,@86X@;V-T86P@97-C87!E('-E
- XM<75E;F-E+"!W:&EL92!O;B!-4RU$3U,L"B @(" @3U,O,B!A;F0@44Y8('1H
- XM97D@=VEL;"!B92!S:&]W;B!A<R!T:&4@86-T=6%L(&-H87)A8W1E<B!I;B!T
- XM:&4@4$,*(" @("!C:&%R86-T97(@('-E="X@(%1H:7,@8V%N(&)E(&-O;G1R
- XM;VQL960@8GD@<V5T=&EN9R!T:&4@8V-H87)S(&%N9 H@(" @(&UC:&%R<R!V
- XM87)I86)L97,[(&EF("!T:&5S92 @<&%R86UE=&5R<R @87)E("!S970L("!C
- XM;VYT<F]L+2 @86YD"B @(" @;65T82UC:&%R86-T97)S("AR97-P96-T:79E
- XM;'DI(&%R92!S:&]W;B!D:7)E8W1L>2P@;W1H97)W:7-E('1H97D*(" @("!A
- XM<F4@<VAO=VX@87,@<V]M92!S97%U96YC92!O9B!P<FEN=&%B;&4@8VAA<F%C
- XM=&5R<RX*"B @(" @66]U(&-A;B!U<V4@=&AE(%Y?("AC;VYT<F]L+75N9&5R
- XM<V-O<F4I(&-O;6UA;F0@=&\@9FQI<" @=&AE("!T;W *(" @("!B:70@(&]F
- XM("!T:&4@(&-H87)A8W1E<B @=&AE(&-U<G-O<B!I<R!O;BX@(%1H:7,@;6%Y
- XM(&)E('5S969U;"!O;@H@(" @('-Y<W1E;7,@('=H97)E("!I=" @:7,@(&]T
- XM:&5R=VES92 @:6UP;W-S:6)L92 @=&\@("!E;G1E<B @(#@M8FET"B @(" @
- XM8VAA<F%C=&5R<RX*"B @(" @5&%B<R!A<F4@(&YO<FUA;&QY("!D:7-P;&%Y
- XM960@(&%S("!A("!S97)I97,@(&]F("!S<&%C97,@(&]F("!T:&4*(" @("!A
- XM<'!R;W!R:6%T92!L96YG=&@@*&%C8V]R9&EN9R!T;R!T:&4@=&%B<W1O<',@
- XM<&%R86UE=&5R*3L@<V5T=&EN9PH@(" @(&QI<W0@;6]D92!W:6QL(&-A=7-E
- XM('1H96T@=&\@8F4@9&ES<&QA>65D(&%S(&$@8V]N=')O;"!C:&%R86-T97(L
- XM"B @(" @87,@('=I;&P@('5N<V5T=&EN9R!T:&4@=&%B<R!P87)A;65T97(N
- XM("!(;W<@=&AE('1A8B!C:&%R86-T97(@:7,*(" @("!D:7-P;&%Y960@:7,@
- XM=&AE;B!U;F1E<B!T:&4@8V]N=')O;"!O9B!T:&4@8V-H87)S('!A<F%M971E
- XM<BX*"B @(" @7P@R+E\(,5\(,BX@(%\(35\(;U\(=5\(<U\(92!?"%-?"'5?
- XM"'!?"'!?"&]?"')?"'0*"B @(" @4V]M92!M;W5S92!S=7!P;W)T("!I<R @
- XM879A:6QA8FQE("!F;W(@(&UI8W)O+6)A<V5D("!S>7-T96US("!A;F0*(" @
- XM("!W;W)K<W1A=&EO;G,N("!#;&EC:VEN9R!T:&4@;6]U<V4@8G5T=&]N(&]N
- XM.@H*(" @("!A;GD@;&EN92!O=71S:61E(&-U<G)E;G0@=VEN9&]W"@D@(&-H
- XM86YG97,@8W5R<F5N="!W:6YD;W<@=&\@=&AE(&]N92 @:6YD:6-A=&5D("!B
- XM>2 @=&AE("!M;W5S90H)(" H8V%N(&)E('5S960@:6YS=&5A9"!O9B!G*2X*
- XM"B @(" @=&]P(&QI;F4@;V8@86YY('=I;F1O=PH)("!S8W)O;&QS('=I;F1O
- XM=R!D;W=N=V%R9',@*'-A;64@87,@7EDI+@H*(" @("!B;W1T;VT@;&EN92!O
- XM9B!A;GD@=VEN9&]W"@D@('-C<F]L;',@=VEN9&]W('5P=V%R9',@*'-A;64@
- XM87,@7D4I+@H*(" @("!S=&%T=7,@;&EN92!O9B!A;GD@=VEN9&]W"@D@('-H
- XM;W=S(&-U<G)E;G0@9FEL92!A;F0@;&EN97,@*'-A;64@87,@7D<I+@H*(" @
- XM("!A;GD@=&5X="!L:6YE(&]F(&%N>2!W:6YD;W<*"2 @;6]V97,@=&5X="!C
- XM=7)S;W(@87,@;F5A<B!A<R!P;W-S:6)L92!T;R!M;W5S92!C=7)S;W(N"@H@
- XM(" @($%L<V\L('=I;F1O=W,@8V%N(&)E(')E<VEZ960@8GD@(F1R86=G:6YG
- XM(B!T:&4@87!P<F]P<FEA=&4@<W1A='5S"B @(" @;&EN92!U<"!O<B!D;W=N
- XM('=I=&@@=&AE(&UO=7-E+@H*(" @("!?"#(N7P@Q7P@S+B @7PA-7PAI7PAS
- XM7PAC7PAE7PAL7PAL7PAA7PAN7PAE7PAO7PAU7PAS"@H@(" @(&\(*R @("!4
- XM:&4@.G=N("AW<FET92!F:6QE(&%N9"!E9&ET(&YE>'0I(&-O;6UA;F0@:7,@
- XM('!R;W9I9&5D+" @87,*"2 @<&5R(%!#+79I+@H*(" @("!O""L@(" @5&AE
- XM<F4@:7,@;F\@;&EM:70@=&\@=&AE(&YU;6)E<B!O<B!S:7IE(&]F(&UA<',@
- XM=VAI8V@@;6%Y(&)E"@D@(&1E9FEN960L(&YO<B!I<R!T:&5R92!A;GD@9FEX
- XM960@;&EM:70@=&\@=&AE(&YU;6)E<B!O9B!L:6YE<PH*"B @(" @7PA07PAA
- XM7PAG7PAE(%\(." @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
- XM(" @("!?"#)?"#5?"'1?"&@@7PA37PAE7PAP7PAT7PAE7PAM7PAB7PAE7PAR
- XM(%\(,5\(.5\(.5\(,@H*"@H*"B @(" @7PA37PAU7PAM7PAM7PAA7PAR7PAY
- XM(%\(;U\(9B!?"$1?"&E?"&9?"&9?"&5?"')?"&5?"&Y?"&-?"&5?"',@7PAB
- XM7PAE7PAT7PAW7PAE7PAE7PAN(%\(5E\(:2!?"&%?"&Y?"&0@7PA87PAV7PAI
- XM(" @(" @(" @(" @(" @(" @(" @("!?"#D*"@H)("!I;B!A(&)U9F9E<BX*
- XM"B @(" @;P@K(" @(%1H92 @961I=" @<&%R86UE=&5R("!C;VYT<F]L<R @
- XM=VAE=&AE<B @82 @8G5F9F5R("!C86X@("!B90H)("!M;V1I9FEE9"X@("!4
- XM:&ES("!M87D@(&)E("!U<V5D+" @=&]G971H97(@=VET:"!T:&4@7PAR7PAE
- XM7PAA7PAD7PAO7PAN7PAL7PAY"@D@('!A<F%M971E<BP@=&\@:6UP;&5M96YT
- XM(&$@;FEC97(@=F5R<VEO;B!O9B!?"'9?"&E?"&5?"'<H,2D@=&AA;B!V:2=S
- XM"@D@('9E<G-I;VXL("!S:6YC92!I="!W;VXG="!F;V]L('EO=2!I;G1O('1H
- XM:6YK:6YG('1H870@961I=&EN9PH)("!T:&4@8G5F9F5R(&ES(&EN(&%N>2!W
- XM87D@<V%F92X@($)E('=A<FYE9#H@;VYC92 @:&%V:6YG("!S970*"2 @;F]E
- XM9&ET+" @:70@(&ES(&YO="!P;W-S:6)L92!T;R!D;R!A(#IS970@961I="X@
- XM($ET)W,@82!O;F4M"@D@('=A>2!S=')E970N"@H@(" @(&\(*R @("!4:&4@
- XM=&EM96]U="!P87)A;65T97(@:7,@:6UP;&5M96YT960@(&%S("!A("!N=6UE
- XM<FEC("!V86QU92P*"2 @<W!E8VEF>6EN9R @=&AE(&YU;6)E<B!O9B!M:6QL
- XM:7-E8V]N9',@869T97(@=VAI8V@@=&\@87-S=6UE"@D@('1H870@;F\@9G5R
- XM=&AE<B!I;G!U="!I<R @879A:6QA8FQE("!T;R @8V]N=&EN=64@('=I=&@@
- XM('1H90H)("!P87)S:6YG("!O9B @82 @;6%P("!S97%U96YC92X@("!4:&ES
- XM("!R97!L86-E<R!V:2=S(&)O;VQE86X*"2 @<&%R86UE=&5R(&]F('1H92!S
- XM86UE(&YA;64N"@H@(" @(&\(*R @("!4:&4@=F)E;&P@<&%R86UE=&5R(&UA
- XM>2!B92!U<V5D('1O('-P96-I9GD@=7-E(&]F(&$@('9I<W5A;"P*"2 @<F%T
- XM:&5R('1H86X@875D:6)L92P@8F5L;"P@:68@=&AI<R!I<R!A=F%I;&%B;&4N
- XM"@H@(" @(&\(*R @("!4:&4@(#IE8VAO("!C;VUM86YD("!I<R @879A:6QA
- XM8FQE.R @:70@('-I;7!L>2 @96-H;V5S("!I=',*"2 @87)G=6UE;G1S+"!A
- XM9G1E<B!E>'!A;G-I;VX@;V8@)2!A;F0@(R!C:&%R86-T97)S+@H*(" @("!O
- XM""L@(" @26X@:6YS97)T(&%N9"!R97!L86-E(&UO9&5S+"!>7PA!(&AA<R!T
- XM:&4@<V%M92!M96%N:6YG("!A<R @7D *"2 @:6X@('9I+" @97AC97!T("!T
- XM:&%T(&ET('=O<FMS(&%T(&%N>2!T:6UE+"!N;W0@:G5S="!F;W(@=&AE"@D@
- XM(&9I<G-T(&-H87)A8W1E<BX@($%L<V\L('1Y<&EN9R!>0E\(>"P@=VAE<F4@
- XM7PAX(&ES('1H92!N86UE(&]F(&$*"2 @8V]N:G5G871E("!B=69F97(L("!I
- XM;G-E<G1S('1H92!C;VYT96YT<R!O9B!T:&%T(&)U9F9E<B!I;G1O"@D@('1H
- XM92!I;G!U="!S=')E86T@870@=&AA="!P;VEN="X@(%1H92!B=69F97(@;F%M
- XM960@(#P@(&%L=V%Y<PH)("!C;VYT86EN<R!T:&4@;&%S="!T:&EN9R!I;G-E
- XM<G1E9"P@<V\@=&AA="!>7PA"/"!I<R!T:&4@<V%M92!A<PH)("!>7PA!+@H*
- XM(" @("!?"#,N("!?"$1?"&E?"&9?"&9?"&5?"')?"&5?"&Y?"&-?"&5?"',*
- XM"B @(" @;P@K(" @($%R9W5M96YT(&AA;F1L:6YG(&ES('-O;65W:&%T(&1I
- XM9F9E<F5N=#L@9F]R(&EN<W1A;F-E+" M7PA2(&ES"@D@(&YO=" @<W5P<&]R
- XM=&5D+" @8G5T(" B+7,@<&%R86UE=&5R/79A;'5E(B!I<RP@=VAI8V@@:7,@
- XM;75C: H)("!M;W)E('5S969U;"!A;GEW87DN"@H@(" @(&\(*R @("!4:&4@
- XM7PA87PA67PA)7PA.7PA)7PA4(&5N=FER;VYM96YT('9A<FEA8FQE(&ES(')E
- XM860@:6YS=&5A9" @;V8@(%\(15\(6%\(25\(3E\(25\(5"X*"2 @5VAI;'-T
- XM(&YO(&9I;&5S(&%R92!S;W5R8V5D(&%U=&]M871I8V%L;'DL('5S97)S('=H
- XM;R!W:7-H('1O"@D@(&AA=F4@82!S=&%R='5P(&9I;&4@8V%N(&%R<F%N9V4@
- XM:70@=F5R>2 @96%S:6QY+B @(%\(<U\(:"@Q*2 @;W(*"2 @7PAK7PAS7PAH
- XM*#$I('5S97)S('-H;W5L9"!A9&0@=&AI<R!L:6YE('1O('1H96ER("1?"$A?
- XM"$]?"$U?"$4O+E\(<%\(<E\(;U\(9E\(:5\(;%\(93H*"@D)("!?"%A?"%9?
- XM"$E?"$Y?"$E?"%0])U\(<U\(;U\(=5\(<E\(8U\(92!?"'A?"'9?"&DM7PAS
- XM7PAT7PAA7PAR7PAT7PAU7PAP+5\(9E\(:5\(;%\(92<[(%\(95\(>%\(<%\(
- XM;U\(<E\(="!?"%A?"%9?"$E?"$Y?"$E?"%0*"@D@(%\(8U\(<U\(:"@Q*2!U
- XM<V5R<R!S:&]U;&0@861D('1H:7,@=&\@=&AE:7(@)%\(2%\(3U\(35\(12\N
- XM7PAL7PAO7PAG7PAI7PAN.@H*"0D@(%\(<U\(95\(=%\(95\(;E\(=B!?"%A?
- XM"%9?"$E?"$Y?"$E?"%0@)U\(<U\(;U\(=5\(<E\(8U\(92!?"'A?"'9?"&DM
- XM7PAS7PAT7PAA7PAR7PAT7PAU7PAP+5\(9E\(:5\(;%\(92<*"@D@(&%N9"!-
- XM4RU$3U,@=7-E<G,@<VAO=6QD(&%D9"!T:&ES('1O('1H96ER(%\(85\(=5\(
- XM=%\(;U\(95\(>%\(95\(8RY?"&)?"&%?"'0Z"@H)"2 @7PAS7PAE7PAT(%\(
- XM6%\(5E\(25\(3E\(25\(5#U?"'-?"&]?"'5?"')?"&-?"&4@7PAX7PAV7PAI
- XM+5\(<U\(=%\(85\(<E\(=%\(=5\(<"U?"&9?"&E?"&Q?"&4*"@H@(" @(&\(
- XM*R @("!4:&4@=&%G<R!P87)A;65T97(@8V%N(&)E("!U<V5D("!T;R @<W!E
- XM8VEF>2 @;75L=&EP;&4@('1A9W,*"2 @9FEL97,[("!T:&5S92 @8V%N("!B
- XM92 @<V5P87)A=&5D("!B>2!E:71H97(@(EP@(B H8F%C:W-L87-H"@D@('-P
- XM86-E*2!O<B B+"(@*&-O;6UA*2X*"@H@(" @(%\(,E\(-5\(=%\(:"!?"%-?
- XM"&5?"'!?"'1?"&5?"&U?"&)?"&5?"'(@7P@Q7P@Y7P@Y7P@R(" @(" @(" @
- XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(%\(4%\(85\(9U\(92!?
- XM"#D*"@H*"@H@(" @(%\(,5\(," @(" @(" @(" @(" @(" @(" @("!?"%-?
- XM"'5?"&U?"&U?"&%?"')?"'D@7PAO7PAF(%\(1%\(:5\(9E\(9E\(95\(<E\(
- XM95\(;E\(8U\(95\(<R!?"&)?"&5?"'1?"'=?"&5?"&5?"&X@7PA67PAI(%\(
- XM85\(;E\(9"!?"%A?"'9?"&D*"@H@(" @(&\(*R @("!!;'1E<FYA=&4@9FEL
- XM97,@87)E(&AA;F1L960@<VQI9VAT;'D@9&EF9F5R96YT;'DL("!O=VEN9R @
- XM=&\*"2 @=&AE("!P<F5S96YC92 @;V8@(&)U9F9E<B!A;F0@=VEN9&]W(&AA
- XM;F1L:6YG+B @17-S96YT:6%L;'DL"@D@('=H96X@>6]U(&-L;W-E(&$@8G5F
- XM9F5R+"!I=',@9FEL96YA;64@:7,@<F5M96UB97)E9" @87,@('1H90H)("!A
- XM;'1E<FYA=&4@(&9I;&4[("!W:&5N("!Y;W4@(&EN=F]K92!T:&4@7EX@;W(@
- XM.F4@(R!C;VUM86YD<RP*"2 @=&AI<R @9FEL96YA;64@(&ES("!R92UE9&ET
- XM960N(" @3F]T92 @=&AA=" @7EX@(&5D:71S(" @=&AE"@D@(&%L=&5R;F%T
- XM92!F:6QE(&EN(&$@;F5W(&)U9F9E<B!W:6YD;W<N"@H@(" @(&\(*R @("!(
- XM:71T:6YG('1H92!E<V-A<&4@:V5Y('=H:6QE(&EN('1H92!C;VUM86YD("!L
- XM:6YE("!D;V5S("!N;W0*"2 @=&5R;6EN871E("!I;G!U=#L@(&EN<W1E860L
- XM("!I="!C86YC96QS(&EN<'5T+"!R971U<FYI;F<@=&AE"@D@('!R;VUP="!T
- XM;R!T:&4@8F5G:6YN:6YG(&]F('1H92!L:6YE+B @5&AI<R!A<'!L:65S('1O
- XM("!I;G!U= H)("!F;W(@.BP@+RP@/R @86YD("$N"@H@(" @(&\(*R @("!#
- XM:&%R86-T97(M8F%S960@('EA;FMS(" H;W(@("!D96QE=&5S*2 @('=H:6-H
- XM(" @<W!A;B @(&QI;F4*"2 @8F]U;F1A<FEE<R!A<F4@:&%N9&QE9"!C;W)R
- XM96-T;'D@*'9I(&=E=',@=&AI<R!W<F]N9RDN"@H*"@H*"@H*"@H*"@H*"@H*
- XM"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H@(" @(%\(4%\(85\(9U\(92!?
- XM"#%?"# @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @("!?
- XM"#)?"#5?"'1?"&@@7PA37PAE7PAP7PAT7PAE7PAM7PAB7PAE7PAR(%\(,5\(
- X*.5\(.5\(,@H*"F@@
- X
- Xend
- END_OF_FILE
- if test 34030 -ne `wc -c <'xvi/doc/summary.UU'`; then
- echo shar: \"'xvi/doc/summary.UU'\" unpacked with wrong size!
- else
- echo shar: Uudecoding \"'xvi/doc/summary.lst'\" \(24670 characters\)
- cat 'xvi/doc/summary.UU' | uudecode
- if test -f 'xvi/doc/summary.lst' ; then
- if test 24670 -ne `wc -c <'xvi/doc/summary.lst'`; then
- echo shar: \"'xvi/doc/summary.lst'\" uudecoded with wrong size!
- else
- rm 'xvi/doc/summary.UU'
- fi
- else
- echo shar: \"'xvi/doc/summary.lst'\" uudecode failed!
- fi
- fi
- # end of 'xvi/doc/summary.UU'
- fi
- if test -f 'xvi/src/os2vio.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'xvi/src/os2vio.c'\"
- else
- echo shar: Extracting \"'xvi/src/os2vio.c'\" \(18336 characters\)
- sed "s/^X//" >'xvi/src/os2vio.c' <<'END_OF_FILE'
- X#ifndef lint
- Xstatic char *sccsid = "@(#)os2vio.c 2.1 (Chris & John Downey) 7/29/92";
- X#endif
- X
- X/***
- X
- X* program name:
- X xvi
- X* function:
- X PD version of UNIX "vi" editor, with extensions.
- X* module name:
- X os2vio.c
- X
- X* module function:
- X OS/2 system interface module.
- X
- X This is a character-based implementation using the VIO & KBD
- X families of system calls. It doesn't use the Presentation Manager
- X but, on OS/2 version 1.* at least, it can be made to work in a PM
- X shell window by using markexe (see makefile.os2).
- X
- X Like the MS-DOS version, this one saves the screen contents &
- X restores them when it exits.
- X
- X Currently, the mouse input code doesn't work, & so is commented
- X out. I suspect that, if we want to have both mouse & keyboard
- X input, we have to use a device monitor, or develop a real PM
- X implementation.
- X* history:
- X STEVIE - ST Editor for VI Enthusiasts, Version 3.10
- X Originally by Tim Thompson (twitch!tjt)
- X Extensive modifications by Tony Andrews (onecom!wldrdg!tony)
- X Heavily modified by Chris & John Downey
- X
- X***/
- X
- X#include "xvi.h"
- X
- X#define NOMOUSE
- X
- X#ifdef __ZTC__
- X/*
- X * Set default stack size.
- X *
- X * See i286.asm for an explanation of why it has to be so big.
- X */
- Xunsigned _stack = 44 * 1024;
- X#endif
- X
- X/*
- X * These are globals which are set by the system interface or terminal
- X * interface module, & used for various purposes throughout the rest
- X * of xvi.
- X *
- X * Number of rows & columns in the current window.
- X */
- Xunsigned Rows,
- X Columns;
- X/*
- X * Current position for screen writes.
- X */
- Xunsigned char virt_row,
- X virt_col;
- X/*
- X * Screen cell (character & attribute): current colour is stored here.
- X */
- Xunsigned char curcell [2];
- X
- X/*
- X * Time of last keypress or mouse button press (or garbage if
- X * (keystrokes < PSVKEYS)).
- X *
- X * This should only be referenced within a thread's critical section.
- X * Referencing a 32-bit variable is not generally an atomic operation
- X * on the 80286.
- X */
- Xstatic volatile clock_t lastevent;
- X
- X#ifndef NOMOUSE
- X /*
- X * This is FALSE if we don't appear to have a mouse driver.
- X */
- X static bool_t usemouse;
- X
- X /*
- X * Our logical mouse handle.
- X */
- X static HMOU mousenum;
- X
- X#else /* NOMOUSE */
- X# define usemouse FALSE
- X#endif /* NOMOUSE */
- X
- X#ifndef NOMOUSE
- X /*
- X * Hide mouse cursor.
- X */
- X static void
- X hidemouse()
- X {
- X NOPTRRECT r;
- X
- X r.row = r.col = 0;
- X r.cRow = Rows - 1;
- X r.cCol = Columns - 1;
- X (void) MouRemovePtr((PNOPTRRECT) &r, mousenum);
- X }
- X
- X#endif /* NOMOUSE */
- X
- X/*
- X * Show mouse cursor. (This is for symmetry with hidemouse().)
- X */
- X#define showmouse() ((void) MouDrawPtr(mousenum))
- X
- Xstatic long semvec [2];
- X
- X/*
- X * This semaphore needs to be acquired by a thread before it enters a
- X * critical region.
- X */
- X#define control ((HSEM)(long FAR *)&semvec[0])
- X
- X/*
- X * This semaphore is used for communication between the main thread &
- X * the thread which handles automatic buffer preservation. It should
- X * be clear when (keystrokes >= PSVKEYS), otherwise it should be set.
- X */
- X#define psvsema ((HSEM)(long FAR *)&semvec[1])
- X
- X#ifndef NOMOUSE
- X
- Xstatic void
- Xmousehandler()
- X{
- X for (;;) {
- X MOUEVENTINFO m;
- X unsigned short status;
- X clock_t start;
- X
- X#if 0
- X if (MouGetDevStatus((PUSHORT) &status, mousenum) != 0
- X ||
- X (status & (MOUSE_UNSUPPORTED_MODE | MOUSE_DISABLED))
- X ) {
- X hidemouse();
- X (void) MouClose(mousenum);
- X DosExit(EXIT_THREAD, 0);
- X }
- X#endif
- X status = MOU_WAIT;
- X MouReadEventQue((PMOUEVENTINFO) &m, (PUSHORT) &status, mousenum);
- X /*
- X * If we don't get the control semaphore immediately,
- X * we do nothing. Delayed responses to mouse button
- X * presses could be confusing.
- X */
- X#if 0
- X start = clock();
- X#endif
- X if (DosSemRequest(control, SEM_IMMEDIATE_RETURN) != 0)
- X continue;
- X#if 0
- X if (clock() != start) {
- X (void) fprintf(stderr, "mouse thread: %d\n", __LINE__);
- X DosSemClear(control);
- X continue;
- X }
- X#endif
- X /*
- X * Start of critical section.
- X */
- X if (++keystrokes >= PSVKEYS)
- X lastevent = clock();
- X if (State == NORMAL &&
- X (m.fs & (MOUSE_BN1_DOWN | MOUSE_BN2_DOWN | MOUSE_BN3_DOWN))) {
- X hidemouse();
- X mouseclick(m.row, m.col);
- X showmouse();
- X }
- X /*
- X * End of critical section.
- X */
- X DosSemClear(control);
- X }
- X}
- X
- X#endif /* NOMOUSE */
- X
- X/*
- X * Macro to convert clock ticks to milliseconds.
- X */
- X#if CLK_TCK == 1000
- X# define CLK2MS(c) (c)
- X#else
- X# if CLK_TCK < 1000
- X# define CLK2MS(c) ((c) * (1000 / CLK_TCK))
- X# else
- X# define CLK2MS(c) ((c) / (CLK_TCK / 1000))
- X# endif /* CLK_TCK > 1000 */
- X#endif /* CLK_TCK != 1000 */
- X
- X/*
- X * Number of keystrokes or mouse button presses since the last buffer
- X * preservation.
- X */
- Xvolatile int keystrokes;
- X
- X/*
- X * This function handles automatic buffer preservation. It runs in its
- X * own thread, which is only awake when keystrokes >= PSVKEYS and the
- X * main thread is waiting for keyboard input. Even then, it spends
- X * most of its time asleep.
- X */
- Xstatic void FAR
- Xpsvhandler()
- X{
- X for (;;) {
- X long sleeptime;
- X
- X DosSemWait(psvsema, SEM_INDEFINITE_WAIT);
- X DosSemRequest(control, SEM_INDEFINITE_WAIT);
- X /*
- X * Start of critical section.
- X */
- X if (keystrokes < PSVKEYS) {
- X sleeptime = 0;
- X /*
- X * If we haven't had at least PSVKEYS
- X * keystrokes, psvsema should be set.
- X */
- X DosSemSet(psvsema);
- X } else if ((sleeptime = (long) Pn(P_preservetime) * 1000 -
- X CLK2MS(clock() - lastevent)) <= 0) {
- X /*
- X * If Pn(P_presevetime) seconds haven't yet
- X * elapsed, sleep until they should have - but
- X * NOT within the critical section (!).
- X *
- X * Otherwise do automatic preserve.
- X *
- X * do_preserve() should reset keystrokes to 0.
- X */
- X (void) do_preserve();
- X sleeptime = 0;
- X }
- X /*
- X * End of critical section.
- X */
- X DosSemClear(control);
- X /*
- X * Sleep if we have to.
- X */
- X if (sleeptime != 0)
- X DosSleep(sleeptime);
- X }
- X}
- X
- X/*
- X * inchar() - get a character from the keyboard.
- X *
- X * Timeout not implemented yet for OS/2.
- X */
- Xint
- Xinchar(long mstimeout)
- X{
- X for (;;) {
- X KBDKEYINFO k;
- X bool_t mstatus,
- X psvstatus;
- X
- X flush_output();
- X
- X mstatus = (usemouse && State == NORMAL);
- X psvstatus = (keystrokes >= PSVKEYS);
- X /*
- X * We don't have to give control to any other thread
- X * if neither of these conditions is true.
- X */
- X if (mstatus || psvstatus) {
- X#ifndef NOMOUSE
- X if (mstatus)
- X showmouse();
- X#endif
- X if (psvstatus && DosSemWait(psvsema, SEM_IMMEDIATE_RETURN)
- X == ERROR_SEM_TIMEOUT) {
- X /*
- X * If psvsema is set, clear it.
- X */
- X DosSemClear(psvsema);
- X }
- X DosSemClear(control);
- X }
- X /*
- X * Start of non-critical section.
- X *
- X * Wait for character from keyboard.
- X */
- X KbdCharIn((PKBDKEYINFO) &k, IO_WAIT, 0);
- X /*
- X * End of non-critical section.
- X */
- X if (mstatus || psvstatus) {
- X DosSemRequest(control, SEM_INDEFINITE_WAIT);
- X#ifndef NOMOUSE
- X if (mstatus)
- X hidemouse();
- X#endif
- X }
- X if (++keystrokes >= PSVKEYS)
- X lastevent = clock();
- X /*
- X * Now deal with the keypress information.
- X */
- X if ((unsigned char) k.chChar == (unsigned char) 0xe0) {
- X /*
- X * It's (probably) a function key.
- X */
- X if (k.chScan == 0x53)
- X /*
- X * It's the delete key.
- X */
- X return State == NORMAL ? 'x' : '\b';
- X /* else */
- X if (State == NORMAL) {
- X /*
- X * Assume it must be a function key.
- X */
- X switch (k.chScan) {
- X case 0x3b: return(K_HELP);
- X /* F1 key */
- X case 0x47: return('H');
- X /* home key */
- X case 0x48: return('k');
- X /* up arrow key */
- X case 0x49: return(CTRL('B'));
- X /* page up key */
- X case 0x4b: return('\b');
- X /* left arrow key */
- X case 0x4d: return(' ');
- X /* right arrow key */
- X case 0x4f: return('L');
- X /* end key */
- X case 0x50: return('j');
- X /* down arrow key */
- X case 0x51: return(CTRL('F'));
- X /* page down key */
- X case 0x52: return('i');
- X /* insert key */
- X default:
- X /* just ignore it ... */
- X continue;
- X }
- X /*
- X * If we aren't in command mode, 0xe0
- X * is a perfectly legitimate
- X * character, & we can't really tell
- X * whether or not it's supposed to be
- X * a function key, so we just have to
- X * return it as is.
- X */
- X }
- X }
- X return (unsigned char) k.chChar;
- X }
- X}
- X
- Xvoid
- Xoutchar(int c)
- X{
- X curcell [0] = c;
- X VioWrtNCell((PBYTE) curcell, 1, virt_row, virt_col, 0);
- X if (++virt_col >= Columns) {
- X virt_col -= Columns;
- X if (++virt_row >= Rows)
- X virt_row = Rows - 1;
- X }
- X}
- X
- Xvoid
- Xoutstr(char* s)
- X{
- X unsigned len = strlen(s);
- X
- X VioWrtCharStrAtt((PCH) s, len, virt_row, virt_col,
- X (PBYTE) & curcell [1], 0);
- X if ((virt_col += len) >= Columns) {
- X virt_col -= Columns;
- X if (++virt_row >= Rows)
- X virt_row = Rows - 1;
- X }
- X}
- X
- Xvoid
- Xerase_display()
- X{
- X curcell[1] = Pn(P_colour);
- X curcell[0] = ' ';
- X VioWrtNCell((PBYTE) curcell, Rows * Columns, 0, 0, 0);
- X}
- X
- Xvoid
- Xerase_line()
- X{
- X curcell [0] = ' ';
- X VioWrtNCell((PBYTE) curcell, Columns - virt_col, virt_row, virt_col, 0);
- X}
- X
- Xvoid
- Xscroll_down(unsigned start, unsigned end, unsigned nlines)
- X{
- X curcell [0] = ' ';
- X VioScrollDn(start, 0, end, Columns - 1, nlines, (PBYTE) curcell, 0);
- X}
- X
- Xvoid
- Xscroll_up(unsigned start, unsigned end, unsigned nlines)
- X{
- X curcell [0] = ' ';
- X VioScrollUp(start, 0, end, Columns - 1, nlines, (PBYTE) curcell, 0);
- X}
- X
- X/*
- X * Attributes for colour systems
- X */
- X#define BRIGHT 8 /* only available for foreground colours */
- X#define BLACK 0
- X#define BLUE 1
- X#define GREEN 2
- X#define CYAN (BLUE | GREEN)
- X#define RED 4
- X#define BROWN (RED | GREEN)
- X#define YELLOW (BRIGHT | BROWN)
- X#define WHITE (RED | GREEN | BLUE)
- X
- X/*
- X * macro to set up foreground & background colours
- X */
- X#define mkcolour(f,b) ((unsigned char) (((b) << 4) | ((f) & 0xf)))
- X
- Xstatic char *oldscreen;
- Xstatic unsigned short scrsize;
- Xstatic enum { m_SYS = 0, m_VI = 1 } curmode;
- X
- X/*
- X * Save screen contents & set up video & keyboard states for editor.
- X */
- Xvoid
- Xsys_startv()
- X{
- X if (curmode == m_VI)
- X return;
- X if (oldscreen != NULL) {
- X /*
- X * Save contents of screen so we can restore them
- X * afterwards.
- X */
- X VioReadCellStr((PCH) oldscreen, (PUSHORT) &scrsize, 0, 0, 0);
- X }
- X set_colour(Pn(P_colour));
- X /*
- X * Change keyboard status.
- X *
- X * We only do this when we've disabled keyboard interrupts.
- X */
- X {
- X KBDINFO k;
- X
- X k.cb = sizeof k;
- X KbdGetStatus((PKBDINFO) &k, 0);
- X k.fsMask = (k.fsMask
- X /*
- X * turn these flags off:
- X */
- X & ~(KEYBOARD_ECHO_ON |
- X KEYBOARD_ASCII_MODE |
- X KEYBOARD_MODIFY_STATE |
- X KEYBOARD_MODIFY_INTERIM |
- X KEYBOARD_MODIFY_TURNAROUND |
- X KEYBOARD_2B_TURNAROUND |
- X KEYBOARD_SHIFT_REPORT))
- X /*
- X * turn these flags on:
- X */
- X | KEYBOARD_ECHO_OFF |
- X KEYBOARD_BINARY_MODE;
- X KbdSetStatus((PKBDINFO) &k, 0);
- X }
- X curmode = m_VI;
- X}
- X
- Xvoid
- Xsys_init()
- X{
- X {
- X VIOMODEINFO v;
- X
- X /*
- X * Get information about display.
- X */
- X v.cb = sizeof v;
- X VioGetMode((PVIOMODEINFO) &v, 0);
- X Rows = v.row;
- X Columns = v.col;
- X scrsize = (Rows - 1) * Columns * 2;
- X if (v.color >= COLORS_16) {
- X /*
- X * Statically defined values are for mono systems:
- X * these are defaults for colour systems.
- X */
- X set_param(P_colour, mkcolour(BRIGHT | WHITE, BLUE));
- X set_param(P_statuscolour, mkcolour(YELLOW, BLACK));
- X set_param(P_roscolour, mkcolour(BRIGHT | RED, BLACK));
- X set_param(P_systemcolour, mkcolour(BRIGHT | CYAN, BLACK));
- X }
- X }
- X oldscreen = malloc(scrsize);
- X /*
- X * We have to acquire this semaphore before we start any other
- X * threads.
- X */
- X DosSemSet(control);
- X#ifndef NOMOUSE
- X /*
- X * Open mouse device if we can.
- X */
- X if (MouOpen((PSZ) NULL, (PHMOU) &mousenum) == 0
- X#if 0
- X && MouSynch(0) != 0
- X#endif
- X ) {
- X TID mousethread;
- X short mask = MOUSE_BN1_DOWN |
- X MOUSE_BN2_DOWN |
- X MOUSE_BN3_DOWN;
- X
- X hidemouse();
- X#if 0
- X MouSetEventMask((PUSHORT) &mask, mousenum);
- X#endif
- X /*
- X * Create concurrent thread to handle mouse events.
- X *
- X * According to Microsoft, the ES register should be
- X * set to 0 first.
- X */
- X DosCreateThread((PFNTHREAD) mousehandler,
- X (es0(), (PTID) &mousethread), (PBYTE) newstack(32000));
- X usemouse = TRUE;
- X }
- X#endif /* NOMOUSE */
- X /*
- X * Initialize semaphore for automatic buffer preservation. It
- X * should only be clear if (keystrokes >= PSVKEYS).
- X */
- X DosSemSet(psvsema);
- X /*
- X * Create concurrent thread to do automatic preserves.
- X *
- X * According to Microsoft, the ES register should be set to 0 first.
- X */
- X {
- X TID psvthread;
- X
- X if (DosCreateThread((PFNTHREAD) psvhandler,
- X (es0(), (PTID) &psvthread),
- X (PBYTE) newstack(20000)) != 0) {
- X (void) fputs("Can't create thread for automatic preserves\r\n",
- X stderr);
- X exit(1);
- X }
- X }
- X /*
- X * Disable system critical error handler.
- X */
- X DosError(HARDERROR_DISABLE);
- X sys_startv();
- X}
- X
- X/*
- X * Restore video & keyboard states to what they were when we started.
- X *
- X * sys_endv() can be called when we're already in system mode, so we
- X * have to check.
- X */
- Xvoid
- Xsys_endv()
- X{
- X KBDINFO k;
- X
- X if (curmode == m_SYS)
- X return;
- X k.cb = sizeof k;
- X KbdGetStatus((PKBDINFO) &k, 0);
- X k.fsMask = (k.fsMask
- X /*
- X * turn these flags off:
- X */
- X & ~(KEYBOARD_ECHO_OFF |
- X KEYBOARD_BINARY_MODE |
- X KEYBOARD_MODIFY_STATE |
- X KEYBOARD_MODIFY_INTERIM |
- X KEYBOARD_MODIFY_TURNAROUND |
- X KEYBOARD_2B_TURNAROUND |
- X KEYBOARD_SHIFT_REPORT))
- X /*
- X * turn these flags on:
- X */
- X | KEYBOARD_ECHO_ON |
- X KEYBOARD_ASCII_MODE;
- X KbdSetStatus((PKBDINFO) &k, 0);
- X if (oldscreen != (char*) 0)
- X /*
- X * Restore contents of screen saved by
- X * sys_startv().
- X */
- X VioWrtCellStr((PCH) oldscreen, scrsize, 0, 0, 0);
- X tty_goto(Rows - 1, 0);
- X set_colour(Pn(P_systemcolour));
- X erase_line();
- X flush_output();
- X curmode = m_SYS;
- X}
- X
- Xvoid
- Xsys_exit(int r)
- X{
- X sys_endv();
- X#ifndef NOMOUSE
- X if (usemouse)
- X MouClose(mousenum);
- X#endif
- X exit(r);
- X}
- X
- Xvoid
- Xsleep(unsigned seconds)
- X{
- X DosSleep(seconds * (long) 1000);
- X}
- X
- X/*
- X * This function is only used by tempfname(). It constructs a filename
- X * suffix based on an index number.
- X *
- X * The suffix ".$$$" is commonly used for temporary file names on
- X * MS-DOS & OS/2 systems. We also use the sequence ".$$1", ".$$2" ...
- X * ".fff" (all digits are hexadecimal).
- X */
- Xstatic char*
- Xhexsuffix(unsigned i)
- X{
- X static char suffix[] = ".$$$";
- X static char hextab[] = "0123456789abcdef";
- X char *sp = &suffix[3];
- X
- X while (sp > suffix) {
- X if (i > 0) {
- X *sp-- = hextab[i & 0xf];
- X i >>= 4;
- X } else {
- X *sp-- = '$';
- X }
- X }
- X return suffix;
- X}
- X
- X/*
- X * Construct unique name for temporary file, to be used as a backup
- X * file for the named file.
- X */
- Xchar *
- Xtempfname(char *srcname)
- X{
- X char *srctail,
- X *srcdot,
- X *endp,
- X *retp;
- X unsigned indexnum = 0;
- X unsigned baselen;
- X
- X srctail = srcdot = NULL;
- X endp = srcname;
- X
- X while (*endp) {
- X switch (*endp++) {
- X case '\\':
- X case '/':
- X srctail = endp;
- X srcdot = (char*) 0;
- X continue;
- X case '.':
- X srcdot = endp - 1;
- X }
- X }
- X if (srctail == NULL) {
- X /*
- X * We haven't found any directory separators ('/' or '\\').
- X */
- X srctail = srcname;
- X /*
- X * Check to see if there's a disk drive name. If there
- X * is, skip over it.
- X */
- X if (*srcname && is_alpha(*srcname) && srcname[1] == ':')
- X srctail = &srcname[2];
- X }
- X /*
- X * There isn't a dot in the trailing part of the filename:
- X * just add it at the end.
- X */
- X if (srcdot == NULL)
- X srcdot = endp;
- X /*
- X * Don't make name too long.
- X */
- X if (srcdot - srctail > MAXNAMLEN - 4)
- X srcdot = srctail + MAXNAMLEN - 4;
- X if (srcdot - srcname > MAXPATHLEN - 4)
- X srcdot = srcname + MAXPATHLEN - 4;
- X baselen = srcdot - srcname;
- X /*
- X * Allocate space for new temporary file name ...
- X */
- X if ((retp = alloc(baselen + 5)) == (char*) 0)
- X return (char*) 0;
- X if (baselen > 0)
- X (void) memcpy(retp, srcname, baselen);
- X do {
- X /*
- X * Keep trying this until we get a unique file name.
- X */
- X strcpy(&retp[baselen], hexsuffix(indexnum++));
- X } while (exists(retp));
- X return retp;
- X}
- X
- X/*
- X * Fake out a pipe by writing output to temp file, running a process with
- X * i/o redirected from this file to another temp file, and then reading
- X * the second temp file back in.
- X *
- X * OS/2 does have real pipes, but I don't know how to avoid deadlock
- X * when connecting concurrent processes with bidirectional pipes.
- X */
- Xbool_t
- Xsys_pipe(cmd, writefunc, readfunc)
- Xchar *cmd;
- Xint (*writefunc) P((FILE *));
- Xlong (*readfunc) P((FILE *));
- X{
- X char *temp1;
- X FILE *fp;
- X bool_t retval;
- X
- X /*
- X * Create first temporary file ...
- X */
- X if (
- X (temp1 = tempfname("xvi_out")) == NULL
- X ||
- X (fp = fopen(temp1, "w")) == NULL
- X ) {
- X retval = FALSE;
- X } else {
- X char *temp2 = NULL;
- X int savcon;
- X int fd1 = -1,
- X fd2 = -1;
- X
- X /*
- X * ... then write to it & close it ...
- X */
- X (void) (*writefunc)(fp);
- X (void) fclose(fp);
- X
- X /*
- X * ... then re-open it for reading, open second one
- X * for writing & re-arrange file descriptors.
- X *
- X * Note that we assume that the editor's standard
- X * input, output & error files are the same device,
- X * since I can't imagine how any of them could
- X * usefully be redirected to anything else.
- X */
- X
- X#ifndef O_BINARY
- X# define O_BINARY 0
- X#endif
- X if (
- X (savcon = dup(0)) < 3
- X ||
- X (fd1 = open(temp1, O_RDONLY | O_BINARY)) < 3
- X ||
- X (temp2 = tempfname("xvi_in")) == NULL
- X ||
- X (fd2 = open(temp2,
- X O_WRONLY | O_CREAT | O_EXCL | O_BINARY, 0600)) < 3
- X ) {
- X retval = FALSE;
- X } else {
- X (void) dup2(fd1, 0);
- X (void) dup2(fd2, 1);
- X (void) dup2(fd2, 2);
- X
- X (void) close(fd1);
- X (void) close(fd2);
- X fd1 = fd2 = -1;
- X
- X /*
- X * Run the command.
- X */
- X (void) system(cmd);
- X
- X /*
- X * Restore our standard input, output & error
- X * files.
- X */
- X (void) dup2(savcon, 0);
- X (void) dup2(savcon, 1);
- X (void) dup2(savcon, 2);
- X
- X /*
- X * Now read from the second temporary file,
- X * close it, & we're done.
- X */
- X if ((fp = fopen(temp2, "r")) == NULL) {
- X retval = FALSE;
- X } else {
- X (void) (*readfunc)(fp);
- X (void) fclose(fp);
- X retval = TRUE;
- X }
- X }
- X /*
- X * Clean up.
- X */
- X if (temp2) {
- X (void) remove(temp2);
- X free(temp2);
- X }
- X if (savcon > 2)
- X (void) close(savcon);
- X if (fd1 > 2)
- X (void) close(fd1);
- X if (fd2 > 2)
- X (void) close(fd2);
- X }
- X
- X if (temp1) {
- X (void) remove(temp1);
- X free(temp1);
- X }
- X
- X return(retval);
- X}
- END_OF_FILE
- if test 18336 -ne `wc -c <'xvi/src/os2vio.c'`; then
- echo shar: \"'xvi/src/os2vio.c'\" unpacked with wrong size!
- fi
- # end of 'xvi/src/os2vio.c'
- fi
- echo shar: End of archive 5 \(of 18\).
- cp /dev/null ark5isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 18 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-