home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume41 / pcvt / part07 < prev    next >
Encoding:
Internet Message Format  |  1994-03-02  |  89.3 KB

  1. From: hm@hcshh.hcs.de (Hellmuth Michaelis)
  2. Newsgroups: comp.sources.misc
  3. Subject: v41i146:  pcvt - Video Driver for 386BSD/NetBSD/FreeBSD, v3.00, Part07/13
  4. Date: 1 Mar 1994 17:10:39 -0600
  5. Organization: Sterling Software
  6. Sender: root@news.sterling.com
  7. Approved: kent@sparky.sterling.com
  8. Message-ID: <2l0i1f$5o4@sparky.sterling.com>
  9. X-Md4-Signature: 2e52137f8f103b4b21be6af6e3cc0b90
  10.  
  11. Submitted-by: hm@hcshh.hcs.de (Hellmuth Michaelis)
  12. Posting-number: Volume 41, Issue 146
  13. Archive-name: pcvt/part07
  14. Environment: 386BSD, NETBSD, FREEBSD
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then feed it
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # Contents:  pcvt/Etc/uemacs.tar.Z.uu pcvt/pcvt_out.c
  21. # Wrapped by kent@sparky on Tue Mar  1 16:46:19 1994
  22. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
  23. echo If this archive is complete, you will see the following message:
  24. echo '          "shar: End of archive 7 (of 13)."'
  25. if test -f 'pcvt/Etc/uemacs.tar.Z.uu' -a "${1}" != "-c" ; then 
  26.   echo shar: Will not clobber existing file \"'pcvt/Etc/uemacs.tar.Z.uu'\"
  27. else
  28.   echo shar: Extracting \"'pcvt/Etc/uemacs.tar.Z.uu'\" \(36659 characters\)
  29.   sed "s/^X//" >'pcvt/Etc/uemacs.tar.Z.uu' <<'END_OF_FILE'
  30. Xbegin 666 uemacs.tar.Z
  31. XM'YV09-[0:5&F39@Q<^2,`<"PH<.'$"-*G$BQHL6*(#+:V`@"0,:/,#I^S!C2
  32. XMXT@0,F3,N%$C8XT:,&+`H#$CA@T:&6/$F%&#AD<8%X,*'4JT:,0Z<^B$D9,1
  33. XM@)PW`HU.O(.F3!DV4K-JW<JUJ]>O6G>T&$NVK-FS:-.J7<M6K8(=;Q-,42J'
  34. XM3ATX(,RD85,F[QNF3=*,>5JD29`A4T#,<(%##`O%+F0^7JPS3-RVF#.??1OW
  35. XMCIPT=.B4<0-"3!X02*ZR:5.'#AH0@<>@"7,US1P0,7+@R,$B=PX8O7/DB!$\
  36. XMAXRX"4`4.7.FC)RD9<C022K'!4H<R%'"V(XZ3!LQ=>2<`0$S`0HT;8"@08@&
  37. XMC8OU<UR0*9."\XX$=\F$$4U&!VX<+<`@0PN[@=`">LB9\1<(;\S10@XOV(##
  38. XM&B#<`=IK2$#1`A7.M9&&&V&P<9L)(+`!U1HAIK%&&7,@)QIT9%1X(0AHP"&#
  39. XM#3+0\$*-,<"THXTS&/?C#=OE@,<+8]3!&AM(O:#':**-@4.0,H`05W[[1><?
  40. XM#`#&,&"!![:1X((9ME`%%B`4=-!ME,'@(HO\R>@:"$DNB10(HLGA(8@B@H`"
  41. XM"#WT0"->1,+P0@XXU7<?EOSY)T,.`<;P8$AA(L=&&$D11`9H+>@G&@@&#?;&
  42. XME7!XJB4(,-S0@DP/QF`@@O?AIR9"D.GTV'S@,??A&8_!\08;MJ&Q*P@NN&!?
  43. XM`M%Q:JI_6TQ1!VE!U#&>3;C5H$,--EP;DF\R=!%7$9L.9(5S<S`;PPW>PC5'
  44. XM&72`0,*F<XS11HQ&!,'$%$4HX!EH9;30!HMSA-$<""(TRRX=P]X%@A'/CH'P
  45. XM&VZTL$09IS4Q6AT@S)$'=&T06ZP+78A@7Z`D"XI$$4Q``<(464Q!16&`EBSS
  46. XMS#3/'!>4SM%X%5X:<ZR`JTG]U6^H3RF0P+KMOFN;O/3:BZ_18GQ(1@MTO-'"
  47. XMBJ>5@4<928KF[T%/M5"E$4[$8+2KEXIQ50MF-/QPQ%@3G%$16"1!Q4@GIYR1
  48. XMR`E$[<;455]-<9I;=STTV%;/L+`3QR509=IKM^V&PVE`+/AI(IRD^4E\^PVX
  49. XMU7%KS75KAXO:@N)DSV"TXI"SP;;;E<,]>.:;U]ZYU%2#/KCHAG]M.NI.T&`T
  50. XM3JV_/OG;E\M=^^:W_YU[\KR3[GO8P-=@=$O%2TZYY7'3OCSG4.,>>.B%2T]T
  51. XMXHO;8+0-)8:AMNO:(]_]]YHW_SGTY7M]?@LXD7V#T3=HW_N,MSW982XC<)!#
  52. XM&>PPDGC)@30$"Y_SQK>[_)4N;"TA&W82@`,!1@YVW)M=1MR@M79]Q($0Y)NK
  53. XM2(B'@5CH;V^X@]&JP@8X&*V#"IQ#&I[4@A<&1(8)"`,9IM:&-\R'8`HD0^?*
  54. XM<(8/N6%7+7B#&=BVES(8K4H*DL,=EC(UV2SE('DRVACXLA1_`4Q@_0(6"8V&
  55. XM-'?!BVD@H((4JI"O$(R&#&*Z&1Y`H[,:*J!*05/@]$:%+`L.L@4V2(#1YL,7
  56. XMK_DPAF(DHQS,.(>`-:<%:K2B'?^6Q_N<3S&`RDA`W'""=H7(1'?`4U761:<W
  57. XMM,$@?[L-R4!PA"(XH0A2L!<(H%`%*4#A"?B*60\4,(.C54V0YS/:OO1WQH$5
  58. XM#`1+*$(64!.$Q#CA"0NK@A.&0(4D/,$)(`A!"$`0,@5L$H\*B$L"%UBY.]$0
  59. XM+W!`HP)P$L@+$E)M373#$]UPABA.,9-L+,-29-,"!=J!7'T100]\H$(0)%$.
  60. XM8;A#IVP#ATOEX8I^T2(76^!%B#K,.>:\8R<3P,)VO1,$\6R.`EI2ST%"C8E.
  61. XMA*(4,?DA*SHNHUN40Q=GX]$P'DV@"D$#V_Z2TQ@IE*%G<VAT("I1>%4T#!<]
  62. XMIYAV4+-9&B8)X&R"+:N0S6UV\YO0E&9B2-2$)$QA",*465S::)`/Y06$I(E;
  63. XMZUK$OI8F\Z=)>^.\%N:T?/5-?+K+FB'WYRJRF2T!(<CB&/J"-O=]\'BQ2Q[M
  64. XM\J:RCQ@A"4PHPMXD>#_RC4Y_B&M!`,G6N,3^9;$H\2#\X"K9C%SA"5(@PD>:
  65. XM\`0KO(`(*+/?\SS;N_UU,'5&,ZU"^L(ZQZX6LB$\(&IXB::/3`$*14!K!/\Z
  66. XMP<`2[K/V?-#BA(=8Q?:%>,8EH/Q$>`6L$N$)5_C($)I`A,1,UW.[K2!V#RF3
  67. XMQ5FONZ?M"_;"&[_(S@]?09#"$)"0$2D4`0I,.$P1=$M!P<Z7L(5U@OKP.UP0
  68. XML"][K)T?;,PJW8RLM[V;I6YGY=O;T'II<?^C,&H#B&'D&E!N!CZ"-\'I8?:Z
  69. XME\'6U1JG9G4;#0;7NR#H8(L+V%KEU.UN'RG,81+#MS$"E9*63&--`YK7I>U5
  70. XMCG0,*2??4E40O#:V7>7FC!-3U3*3+"[@V4N,[O"7J6'M-O]R0QT4$$"[(H[*
  71. XM;K1RT^[E5_@V&*4&;:>#V*S3Q1VVL0/L;W*5]V79@NH-!P4!#\:"X^25M(=M
  72. XM7ESC'L??#(O0R[!U=!$C/1:DBCB^IV$DN_JU3CL(&M.%!FX"BIMH3RNWT:*\
  73. XM2D8FW8)*QTW57KLTH>D5O.&I5KS^_32N0<#(C)3:UX,;`Z;Z-6R.A@$.H$G1
  74. XMD^Q[O6,K^L6T6[:TL:T4-N@!VJ>1]KI@/354YHQL$[YPIUU<Y&6C4B'31C>=
  75. XMILWN%MP%#N]V0HI9/&\B:WC9_\;WNO0=/=":CGT^YJ"W;:T\NMDM(U3`)FR"
  76. XM@-4F2Q+*:*3I&O&:YWA=>8YU%"F7N_P$#;$L,8<90A&F,%80#.$)33",$V1+
  77. XMM^BFM:H*Z*"=185GI9E\ST\[]9_G0$/7C<&5L"3VH2=.;PUGZ$P9D=??,JGO
  78. XM-+2`Z:K1-$:'/%[E7KVY&0$[&]CP7L`F3XA$-&)?9$WKQQK\TT$@@J-G^P3<
  79. XMAMC/U@7VT.2^76.3/=D'Q&UF7\9WO[>]NOA[L(G[YX3[[K?651>A888@!8UG
  80. XM!`I!J.7?W<Y;Z8'H7UV$>AC^EK[U4?WNRNUYA^G4!M8_?L0.[IU>^()B`+Z^
  81. XM[!7'@L\_LON^W![5URWQPQ>W02$7'/BTLSB2,YZ1JSK!XT_^5R5##E"2&QV.
  82. XM6$[YEJG:Y?+N'+T;=T+H"V/+NYGY_2530`XR=DQ[%EVO2.\SZ0<G;*G%T-!)
  83. XM=7B+1CNWA`5()B,PE$KZUFJO]DBI1%IC]WR(ISQ08&!6\!$.>'Q_)G@]Y'\/
  84. XMZ`2J,VN_-X&THW@?D21,X4/ZQH$"4163Y(`]5FP)`%Z8!WO*8X(9T8((J$2<
  85. XMA7QS4%&<@H(*Y`8NY('<E@"79W?0EQ'/Q007MX/_IV],]QENL`8=F("MEP#R
  86. XM5H-+.`5((`58M009D8'Z=@9/(5$9Z#^^)X#@IAQ.D&!2('IDV(-_UG#9!7%.
  87. XMT'PC.(!S<V08IW'6AWUEI'U1)G(VU4;?=W)9)E4K5S,K4P0!-F`O8&`(IF`_
  88. XM!W]F]C,A,71%XWWXQU=\1H?6M2X#)5195%0`F`"(IH0D^(B12&`XQ452"%0$
  89. XM95`()78WQ8:M!6`"1F!B<!!K4%3ZID!/M5A?1P=4.!YTMX=MR(L#!@(F0(R7
  90. XMLECZ%@=UX!QY4%!E4(S]0AW#0C;<18.L.(!3T(N^Q`1H=0<O8(W8J&]H\"P#
  91. XM<8I<=(1)>%PVF#F4"(E(EA!CD!=WP(-*9UWO2(0M\(MC$(SS"&^NIXOSDX]!
  92. XM<#?\6!K`R'"#%5K`,W#,6&3T\Q$4*7G+%W'.QX6M:&1/2'T;UW&1E'W-)&4C
  93. XMAXB?&'Y:AD[DYXAE=58V9V.7B(DZ^3-`4W\NY8EZ!HI)!WC)<P8"834&00>R
  94. XM`45F,!JH95@!*(%\2$M/8))#P#9.F5"B6)1':8BXR&DB.95'4)6>5R(U-7J0
  95. XM%S=MM(P,^6GX<H!VL!1IX#Y\H6_@809-.4F^HD-O4W@SF)$:YH7HAU(-`AJQ
  96. XM8Y<P%3&?1#:6!Y@BY#(!=H"?I($YYCR+*6$+*95MZ(9[!RJ(@Y:XEWSF\YEJ
  97. XMF``$%Y:;*7L?,9D=J7QA@X=ZV):QYX=Q!(@<=WTI.8@K:8CW%Y0PR8@S23,@
  98. XM$&,S=I,@II/(&7\GQHF$Y))!62^A&)#)@S1?(P<4`I6JZ)C*]98G81#6"9K(
  99. XMIS5>Q$^L]@8?,A"K1T1+<9V,$X&H6618,&!'@$!$:`+>N0;ZM@9[X3H*U$00
  100. XMLS@A6'?VN(30A%E,\!']&3N4F3Q/!P?9F*#_"8Z&IYE%=G-0,$T9`:&DH6_J
  101. XMUB\:BDDQ%'"-*9L$PP3H)6#5I%D:NJ!QTZ':Z)\1\V\!%V_:23!5``45.`0I
  102. XMJE0PRJ(D-IJ_TWNF6:/>LY$^FGM`^IK,=T-$VH<E:9LHF0!.IIO;=TG=YYQ'
  103. XM%T<H%Y.=E)Q>FIQQ,07L`@(*$P:M\08WV7?Y$IQ?VJ9`1P,P8$Q"\Y-M5`(*
  104. XM00=M@!<FH$.D00)C8`:GEU`NP#<AD`9F`(UE8(T@8*<.DZ>H8C2(I4!V\4#!
  105. XM=4>&BF>,BJ=ZZB$QXJ>`ZAU]80)PMZAWZJBN<E^%>J@FL"![FJBDVJAX(0)C
  106. XMD#FM&@>OJJD$@P9\$T1#Y"^$)ZM%-!^$:JEFP*4*@(@*)$1H<"*BZ7!A`Z?I
  107. XMQ*9NVJ9QP01O($0@$`8@0$*IE%)6)*W3ZJ4_0P-RBDQWAEB&"HWK8JLFH!>L
  108. XMQZW>Z@)P)`*[NDQ#LY($LP5#L'K;*A!Y(34@<$M7`'JUY`(?5DZ(=17K`JEV
  109. XM2$6\!Z]H)*_S4JE_<ZF,V(CA&JX8RYD@\`1&\(A4<*./`9E2<#=*AA@?DY,U
  110. XM@[$9ZZ8*T+#[HSYP`7>^>D1T<QA4H``T>P8F\HNN$ZQ]<;/<Q!E8"GY;"A<[
  111. XMX`-*JQQ$8#=$\)!%8+#L92#92@9J@!3MXAI]D2SM8BK9RGI<NZU*HC9R<"Q4
  112. XM4!5I$B[,EB4@8!NJU!=>ZQK[\;;_RGM;=!N7DA1I"QIQ`C'6<;;?BBQJ*V??
  113. XMD3-N>[5ZRZ\?,A@%`27#0KADJTISVQS341I*`G!K5A4D=%!E>Q]:6[=]X;9<
  114. XMRQ_&@K0)8`1_D92W(45T&[9>FYY[VRZ0FS-Z<14QLA1EH`/'D@#@PBE$D"7,
  115. XM<@71`0+1,AXQ@1LPH`,P8"T[@1O"D2X)P+OAT@+C\AS,`@/I$A=9\`88PW3<
  116. XMRP:W*R)H"@>M0;=TP&;9*@:0UA>9=!MS^[E5@Q>LFP?<V[G($BKQH1"@FS%H
  117. XM*K?M0A6CL4`Y0[\8$[9\I+6G<0=KQW:42RJF0@8A<"R,PB*Z&RLMD#%A$&E"
  118. XM""6$R9>Q@QP7'#`:'!Y#V"ZD&%3TEXP@K%1MI#5@]&A'1!55E#&T*"S\E%$$
  119. XMT[L#\;NBP2SE!!<I4:[VEP#S1YWWV1F?P4Q5FE#Z6A4'.2SI>I=YV;:WX596
  120. XMD`1%D%Y`B["IBJC6&"+0^(NLYZ=`BQOLXR;16Z>TA5M3$`16H%ED+'>06J<)
  121. XMYC+E^(PD<,*R,<=C&L='9`)BW*GR0GB`[`;^ND$)8*\@YTQ;8*UOH)\WG$7*
  122. XM,;T\G+L@L`5=@+!]DYC[U$\S57R0*ERHI<>F2%3S:`+2UBXBH,,M4,G^D3D%
  123. XMLZM=7*ONDA3[<2<P&;T)L(GL4IUK`*D_58I#I5&%)@*:G)T&B9`ZQ5$\!48@
  124. XMI<OZN78O^L&Z_"'K4A?'F(SN@C#_$LK$"JF*3(AHE*^.#,GC(<FL7+WE<LF9
  125. XM+,M`1LK#C(JH/+>K/+WJ_,KY*LOI2LMYK!1V<1NY'+V\/!!'K,OP+(_%?,RN
  126. XMDLQ%Q<Q?]%%E"\W[.<T0`\S6[!P#X8TW+*I#Y"[1S':'E;`56ZS1BT\QQ4_^
  127. XMY+`V):4?)\Y6.F5IW,>#?$0EL,8SY\9^Y7VDO*AU3`5WC`04NRG%.G_B.1OD
  128. XMV0*^<IXMD)Z^;*SJTL?VNJR/W*S9E1(*`!98G=5:O=5<W=5>'1$\]AXU]-5D
  129. XM710?L1'L8Q(@(1(C41*:(P,"\A(N`1,R01,VT1*X(1,R$`,_4=9^O158NQ1-
  130. XM\111\14`?!5_G=B*O=B,O5#1&QN$L7F)01FNDAHUE#&,.QIS$+TH``,S\`*Y
  131. XM\0*[41]&TP07#"H"Y0:W435DRDJ?RP,S-P0^``)QDT"5PQ2LC13#LGHMF#-8
  132. XM8S1>$`09\2^KM]IHBA1]\;E/1X1/P79Q\[YH&S#_@B=I,-V80K?"_=L*X`47
  133. XMN"!;``7C001NT`7)L3*BLG;,%D-N\-@MP`,,PA0\@`0X5P0^D`!"D)C#PKJ@
  134. XM[`5:\-Z7#-X@4`5P0-Y,>-YL=Q?L/=L+`ML[5]]%P'KZ747II!D47N$6;A8*
  135. XMX-CF$0,I`!NUA57S204G8W.]-`6PE4Y>\+$+8\J%UE'.+`<)8-HJGA&H2\QK
  136. XMUF;1.S%Y$$^W*P=GV")>(`09(03`B(HN#M$QW@)"_A%$?I"H.&S1B[O92CD'
  137. XM%<'!3>-/080,<JB9E.3S^1%'<)39:I9KY`6:I1P0SN4U%;W;36-.4$)D7@;L
  138. XM36-8#C'MPKKQ!%%F>&UHL-V5!06!QKUXN^:F75ESD^8H]45[#@=]?N&._NAL
  139. XMD>'U;1XRT.&*5P3=Y`3S22)8A2\E"^+IQ&O12P17L6J`QDZ"3B?-#-';+5L+
  140. XM?NDO4]^DWDA]45*J_M!AY`5HM>"=CDM44-])H-H8/>8_>!!69-JBG@"S;NH,
  141. XMF.K#I@"F302C7NJ?8NO/[@5+$+U#8"*LA`*"U^&L?4=;'N<*`.GF?NYC(>F<
  142. XM+0-AT.&T96`@`.L@#HT@T.N?KNFA;F`A*P5.,-L9$>S7;$K;6@8*O.8)P`-4
  143. XM$`1"X.]!0`9Q.3G)C::VKA1B0']O8$->H`3E7>_"7A=CSJV9]+4Q(C50DN1>
  144. XMD%X9L>R?DN<"`U&,OMU/L/%/`'"D@0(771<=#E`GO_$JWQ<KJC;G:Q6D<9]^
  145. XMTD:Z?</(7NR+]8MRX`,=#KLH.`=_`>TM<`4;/P07?QHKRMH?;;EX"5)>@`5>
  146. XM$/,?T?.E<2E5&.?N^Q3/$B-1/_7H'O>.KN[F,0,=[HQ(`.K;/05R4<.Q6&AF
  147. XM\!0=\_9,L9>&Z;?;+04)(`4"_!Q]L=.![TIT$AY27_B%^3;&$O9\7^.HN+@*
  148. XM%&?E1L.EN-U8H/B,S[FLY/F-2X1@3,H*P`/V\NLKT_>EB,.?:^MO,`8HF)7C
  149. XM_KEY:\+(."PHD`1"4.B[[@9LD`?U`?M,(/N*+Z:U+\F^CREWKOOAP?NL._UZ
  150. XMJ]'C,?S%WP)0</S)7Q]R7_X43O<H0`,=3HD)-@1Z;]I2\!&,SXW9BM[6K!00
  151. XMO[J'JA?/D;4['ATMP*UP/SGQ&M;%<B,#1B,CT('_-S4$8/#C)]8!S<4(@2(;
  152. XM4MBPL!!S(K89"]/F!>+?<-I&TZ@O8,#7P([D0!Z(@$%`M=V!G#$"=5<"\`)?
  153. XM3MI`/#80O3Y"!"0<!PQ-00D32)C.4W!!4"#0V-&M'$('HA>&RE!!$+60B.6&
  154. XM,.2,3?D!8&Y,:2M@H;=8U\5[&YN-SADRI<*-0!^]8X(?XAJ5._-'!B.=AD,!
  155. XM-:##Z2@H8#?L11+0`O..1,B1(.`$G@LP>7]F(@'<*.B"HH+)LS-M0R`!["MR
  156. XMHVU$8*;9>"#`"U`!1$@%((IJVTM]X<CEB19AVIA``G`W"L<0ZA32YP4L(2;L
  157. XM4#SJ@X4]+U`%\`,<`#B9,!16-"\0!1)`%*@#`J'6P;D=F`<>@]237.V""3:W
  158. XM5C(?X`Q4*0U;BP@YA^%UGOI7"1F#93`9;H8S:`/67Q&0,=^DYH@XS;($#!0(
  159. XM$`)5P`@8`5R23I)>/%EZ2Z&^M1'#(`7$T-S:8%K.\+T-3H@%HE<9P`+C:6`0
  160. XM/:A'^::>`A!NQ`FL6`CTIK5(@]IH)40H#`JZY-<IRH"[&E[7[7/A+FT%]%;@
  161. XM:*!;\_!O*`#E1L(X&.'K8(?/#41`P%6@F,"!PH;:$)=0,?,%YV18!9P-MT%M
  162. XMC`8%4$3TE@)9+$0H^6&P@Q(C%H3@(0/&0AGJQ+*`_FZ`&FPY66#>T4'90ENN
  163. XM&+[;;BC/[*&`*Y`&`$Z'TU#LS>HU**T'4_X3:ZN&'M'KY:7MAJ&RP.I9`\EL
  164. XM)O8%*98SSF$]+%M'((!!E+53"^E6`LE]T>'ZX;"IF-^8PJ@9%J*AA5`QW342
  165. XM.%R,6T]C+A^"DZ,W'KRAL6-ZLVUNF31]LMM8ST6<6W?$6(R$2J?LJ%WH:A<H
  166. XM8`0FPBO0X1;$5&Q;F%$SFC;.V+:(4/]"6UCQ0)'%ZJ``1H+=BW'KBVY=1-;V
  167. XMN7IA&D@B)2+W[0<%!;ORP%<$C1+I(/D)S>@%LD`*R(D[<2>B/QS@[M148O!8
  168. XM'8L//J090_J:0`)H>#&BC+F5U<C>FL!(P(X@@&>]`9\%PZS(*+2.9D\[^L,Z
  169. XM\/5@G,GSCBG/,H;'G@7&@)8"J"VX)'K-OQ!X&U#`^M(B28Q%/,7]X((D%VFX
  170. XM>95+$I(+!7`%<@D4B%Y4(#RH-@9!&H9-A7!Y?L),58VD)!@&7L$C(7.@/ERQ
  171. XM+!:]@L#:B2&WP=40O&%1?`@@]VH7")(WLAY@\\'6BYHJD6>*0_8CDA<0(]F"
  172. XM0"MO<<]U#%JH`(06%7@!AD'&!,(A8-2:PVU85JEDI\$N:20$G\XK24^W@=!0
  173. XM"!2P+F2A7O16Y"\YZD3TEP/N'B3J1<1KYPRG`]/^-(M-FP+IQ$CJP5.("E\`
  174. XM)MPWJ>\V&#(8>08,&6X4@#6,14"[T),$`B'C.P-UX%(4OOV0)X;>?EA*-TQ!
  175. XM/H=LI4"F',(X**W1!OY%I;1*OM9I@!B1<-6%D9&@`C:E;&`1GC)5SBZFD/W0
  176. XMUCI9+)LB4HI*D#(2O(!]XV3Y3<V1D.2P!<B)>IF53&&,8(K;X)2XW?7+E!F!
  177. XM!/`N1-?ED@,7.`FO,!8./+TH*9&AF"R#Z$\F=+AOT@+.BH&Q)0L#MA@&*I#I
  178. XMC@"*PP)&('J)J7:Q>]C.TV$2M0?:10P>0/'JV[K$$^XC8WQ#O"CQ;MU+G(3`
  179. XM,.@]1(IW&X(&'*"$+:`5GJ[4-;=8WJ(K@*?Q?<$Y8($J&Z+0\TSBP9J1OAX0
  180. XMO:#`Y5-0Q.@OM(NQP&PHBD49="1$;!4N.?`8.DHK@4<L`)AMO!:I0[8-U`.6
  181. XM9.IOY`S"1_5TG;;C7EINV,P!.UE3AF9'J6*.TCH-+PUE+:^E^<N6'`XV5('F
  182. XMEP00C&8Q/^?E"L!):+=Z3@/61"^)P2"<AG\(1M)`I)E;$`.U6,7HEMDT8D8P
  183. XMD6P'!GFFT^"]9(A0RTL<+,]5KE;Y^$"55G0.CV%!4,#7(#9+Y@^R*&/N;@Y#
  184. XM+0<J,Q\6D`%R`0AE+;2%#O^7$7(KY^L-O$`L$/.8Y.H9&*S-VGD@TA>G!,_D
  185. XM\W$<S`%%K[#W(#TG><(3XRO0W0D'1/IB0`(PG:>$06BM%.2!-AL'M`()``J,
  186. XMLQ]"&D1G`I*9)D\+!,]QIC!Z&^\\GDXS&6;+2F=SOHD<>0(><=Y]3:V9)F7+
  187. XM-%P9G*<(V))S:2L?G*(<&)43"MV!Y(#LW,!L"WLH[P/63!%HA%@;#W"?:H\3
  188. XM*L\I@`:H$(5(G[1S%#H!V!AI,A#QY(0/L@G$Q@QT%WJF)9Q_'_,_!=`':A!S
  189. XMR&OX7`Y$Z#7-Z!GWLJ7=DYI4TVI>PVRX#:4`G!1N(+&$CD1M%:AZG$`!B$KA
  190. XM0^RV]%8G.)C:&!9<*SI$P";0-?_F<V")OY!L4KDL<;ON',1SG$)`+F#`"LC:
  191. XM>-ON]*$1D`=PGMDF*)`;"$!<`Z'9W8G52/K:X118HA=4XL&YU5@:?:A92@H]
  192. XM<X"ZSH$1J,9=^N2B82_;F3T6:CF<BD497JO1<08Y96<R@RA[G&*;XE_^A=/@
  193. XM5K05[>2@9#!;JK\UF7?FG1'H/-ZQ:4V!)4`^TZ41`%C%9P<H%6Q5##\>P3.C
  194. XMC(N(Y@7!![H"E;$P#V?+;;FMSX44Z@`8VR*G@;4MQM@U0[D5Z'(!]6$4FCZ!
  195. XM$B-:9"=]HW\4<*8)B,*GQ@-HN`U:]#8P02@1'XR&$Q"CJ82,[D.V\P]#*>GB
  196. XMA$D@`0"\8>=+3>/I+&%FU"P^A[]P`O"6;L1\G!!X7E+6HZU:)&LS""OBFW(P
  197. XM*X;%M)@<0Z1/\PSVB+OGQN9="L4E,$=-"L;$0'TD*27EA'QO"F2P2%@1M1P9
  198. XM96WPXI>-0JMW!0*D/'6HP12WH:F(2OK4:)/L"RVRC;(N8-H>J9[RK*C\@D&4
  199. XMK]P9#_%H1G5?8&N/M`O(]@9.%IP,>SS@+\;3QI<'7$-^:PTZY(A01-2IY5;4
  200. XMAW`U`4,,\`725]\87STIC4@U#2C5Y'8,\6GYRY;-D'@-`9E#<^;=]VPYN&0Z
  201. XM:KJ5T3)>1A,XER&@[T&XE&DEHP[LI%L7SSGLQAO6,T1#QYB2[$)"DCX@$#R;
  202. XM8E\X+XFAK>+5.9`H*Y<LS:BD;P2<KKV0)\RH:V![9^`U`-:ZU5B#)$01$V$O
  203. XM$,Z%I2#P;*E@93UO<;%4D@71]G(&3;6II$_:.8L?).Y.JV0KC;01;24S,P0T
  204. XM8P0*T"9)`$T(@2E`!&B`"Z@2$&/\<<)`6`1D*FP0#)%MR6Q0J_KHLJ5/#"O3
  205. XM1`B8%Q`74&7+S<DY0W%KFK9L)P0`EK:*&TVTE5Q)VZ,Y3)MPBW<L8C!(U;Z@
  206. XMK81E)7&CJB>6],QL5P7<@.<8<W$C\MU5\1IU2-\/J(P.9+WR5]BEOMK>6_VN
  207. XM%(/JM</BBET^'JBRK;!K+^D0I7H:GD6!_1L=[K,BP#U`Z@*LVBA(4F-7S($^
  208. XM8#2(0!\]#5/0-MRY0\52XRL9@*DQ(FYX#A%[8'WH<F6N%RY;,L?JB5W5I.RI
  209. XM`E_%"2@`K#=>7^R^\8>/#^",`4.5!A"B,G6Q:J^,?JXLT@9<(`^X@K$#C!$C
  210. XM@9(+@28=F&U[0,.V@$#5!R0-EH488&PI($K0-P=\@`+8`PRV=XC93-('"DF#
  211. XMU58+$'.540U+[N"L(5F-==8./=DBBS)192&UL7YVOA2?.FMG#<>@=:OM:Y1*
  212. XMOG8JX<)L2]M-=):E`975AK9<&OLZ2V0@/.#0_/'!9DL+\`.Z;$I-RL\5K)CL
  213. XM\#(#E^*<+0B&B%AQ++K+EF5RXW`>;/)C@^RY1`%R@2ZTBY?89H8%UE!?\RB9
  214. XMA+T4$&POGE)Y.CK%V%(,9%MHE*WPX5T6A+9-VVM5;>],^P2SS*G.;E:/1VRC
  215. XM[0UKH9Z)Z&@.J:(NX]>S+;;G]L&FVZ*Q!V!6:'$#=3;.DHYYVR\SHPNJ=2-1
  216. XMO^*&MPK7PJ2MA73HK^"N#.CB_G1)-&D9*.X(:+O5LUC<94/MLD56Y"F5244:
  217. XM:*.SY0L'A>W@N:<@6HMIYN,J?R%ZU5>S22ZT[#;BLCLTB(+47^%N8H1I^%JP
  218. XME8GD#&]G$,T4&V@7@D+]43T>L"F:R)<-(JQGR^X'3NLE,:Y;]5^>R0W$TNK&
  219. XM(C9@"VB'V/;.;BMYBP(B;(.8L#+1PM;6#.MBTTDZ86QH-^VJW;7+=MLN17@6
  220. XM:0`/R*O3$1EB0!APNV3MK'$$M482V-I:X[MYC0;HM;D6$V9"3>`(>4TG``54
  221. XM@7?7;F!C"AV!L-$!L'#8L$+CO;R85^V^`!5P<.6>"FB-GQ<$E$HF0/TFF>\"
  222. XM7I?,64`+:6'&S)CR2EXRH(-P"V\A>D%O`B@3'$)/?`@PA@32DQH9#\M$-/C#
  223. XMBR)ZHY=E6PVMX37$AME0&^;`8^B]WR$\\`I:TB&ZINT]''O!/Z`']<`>W`-\
  224. XMD`]4E0WXAQ5``R`%G&H!+^$WS``W47N+;Y@PA9Z"19)2'E,K0@)KHVP!TS(4
  225. XMWP00PO!?0"A?>W*83AN;^RDYE[TRG$_E-!@U,O![;2__?2LN1MLJ8-^[*QSP
  226. XM!?LV$EBU#(L%W(#W[P4[MMRV)M*\+\CM?-Z++)H6&`(7D`S<.KZ@G6.FP7$-
  227. XM*(QZ`GIM[_ME%/PR3>`O$(#Z%!1E>P&43?^6RO?;:LU`'L"+'6+<X,NI:H/1
  228. XM0P(P`U@#DQB7VR#)9@`.L`%B8`[$"%=3%UPIVREN7D<E&`<\T2%V+QNHP:*W
  229. XM\\8]%?`"TLGF_;P)X,VEDJ9TRW*([CH;?XOJOL@L&08,TPW[3^T4KF3@V1!I
  230. XM5")I:*F]5/"M#IC`'5@;(]X.(<%#B`H#"#%>K+&X(M8!.V9$,(8U#,(IQ*',
  231. XMK<DJ4W[U#PW"$1&XRJWL7L+/Z4H'QLVU#81UAI;3/A9/&LFGP`.X^`1L1+1%
  232. XM9=$F2</%>&"%6L`;=MT4Q(F\`^4"4HF`AVL85,:Q#;$W++U>FVZ4J*X1Q!,!
  233. XMIY0*H*E1)0)@VUGQ`3Q@"X#C(,!0LI7[DL`S]@\?*K+A!!X#++Y&+C`!+&-I
  234. XMTHP7!SCQ`EM@"P0!;.Q,I274_5S2&.#XRQ<W3NH=C#S'R6H"QHMI/)!9'=(=
  235. XM>72@G)ZZT)!J#)5>2!(_]ZWB#-:X.JP#UC,1DU+*$=93*#)U:$:HK_.!*7`<
  236. XM-)&*07*6W$_`$*4D2KZ``!-`(<V1NW&,G$`:MR"<9YIP`UP88K#9QT#`CFR:
  237. XMN!!E<8@8#?B5A*_-3PY^+.(Q#`'[BZ:(P`V(@$\`MU'.7_$7?.'8A%L&L:;4
  238. XM9,(H&Z$LVD.4X^P55Y(Z((L142T^&'T!&)\`,>)B=_',U1.^&`0`8V$\`(LQ
  239. XMS461\5@$#`$F(`7J\0A($PL9X'R=:IR5^'$"X(BK4AA'9H%+E:O%8P!@E;(R
  240. XM!Y!56A6,1A9A(FS/,7+EY_`88%<'86T]PAS'8-IJ8-]E5\[&V[BC?6;6+)I!
  241. XM,JK`86"8#.M>/N%\J1AAS5W*>#`7YB"@,D("/MX"Z[<-.&:C<0(\9EUX7+$P
  242. XM&1N-)$`C%BJ>^`S#B[59T^0F+*CP#+N%4)>/>*]$>>.LD]&X;BL0O5TW"2M5
  243. XM[=:%>)&WCCRM+M)`P!9E7;C$MS=$<2YW?*BDWK_PJ3<L(*!*HW0A(<;T3<AT
  244. XMRQBCD@J<`-Y)VV`[-FPZW&%59!V>`&F8`MJD!0`3&O`8=F?H.L=O<:IV#&1T
  245. XMA&\8:UM<3.*(J"_7L)315I[P$&_@/6C<RN$PV(",+C[QX=_)"*:S,IY%A?A>
  246. XM,8)RO:W;>)X=!NRD7"XH`A:!@])QEY6T>`U%64B;B+UYJ))(6"8AV7$E.5^C
  247. XM(9Z=-/@B);G03+&2'AJB^4(;>,ES8LJ:808A!M0`UZ`#^%D&6(=@9[[^WU*K
  248. XM"MAJ/D2)OO1TYD.'1ELAUM6$6C"&6[$`&]D8=O4H/U&4..8NRS<Q,'G'OVDK
  249. XM1QU;!HP8HM%TP%V>DE.*!.+J@TY^1+E^90Q$71!:&ZH$E;VO*MQ5UN-34R)8
  250. XMWM/1@2ZCSAJ=P-[S2I6Z.5<.,&ETVI&)E_C*C8\,/DNR0/JF!VEUWCJ[PBZ#
  251. XM3VR"!49#W!W5/L,F,]T*409N8R]L%TG@!$2:+ND&'H,"L4:W<8:RUB4+QDP$
  252. XMM@)EYJ%+`D-4<AR9D"OI"Z'"AD7"W/FY<DAA'7?:*B$'4A2084_)>288U*$.
  253. XM&&EB[3`RQX(0`0%[8-]&*(&-_]WD2-&H$D=32IN";A5G"9.)\X'FQ<KQP#<[
  254. XMU@N8`A$P"1RJ^@RM$[6`G@-@>H989WX55RN6'.#72*($[^L4\`+T]6WDUV9)
  255. XM#$`4'BAMULZ?7HD)H"B/9_!EJMUB'5"J'3(@M!72T!KV`FC`'"Z;'QL-;2Q>
  256. XML0U?B,=$UFJS5_0FL?VD06"+L)G,K8%X+*;X@I%&U1U;0<>0_(8*Y^IXJ*L%
  257. XM(1GKLK/"K)TU'HC'T<N*B@!,\J+'3>:`77N;#>`!$0`7YK8V`26PBP;@;?S`
  258. XM2@)WW[XVA!N8$3_X1P4>P^1N`2OY,3RDNU&H-??/;1`!S@GD5LLM#'L*RUW<
  259. XM>AN31#T6P8]5`!MVPZZ;XXV1.G"*J\AM<-UM>`2@:-K=%WA`4M@4,1H-3+H$
  260. XML'E7AO^=1TG@!6"3^>"N,N)F>]VZ^V'S;H(!)^2`P(;3NDJ7%>\BL(.9MPS%
  261. XM@M'K=2N`-QSO)%X+&A9LKPGV!=RM`,X39MN3-NP,\.LW:S0DE83L;"D`+I#8
  262. XM\1V[+;1,M)):&X<5ZG0KKV\W]$Y7NU6V\`$^$."FP'Q:X"N#MB0&"'YV0``$
  263. XMQ]#@!((+']&-)B!X/Z6._!N'66$;D,!1A0N``;84!82)#G?`#U4"'^$*8`1X
  264. XM[Y19!?#%%\">1.`+D,LL$,._&?]6`;(;8H,N`YZ[=_<1$0';Z"E4C?<@`K0W
  265. XM$&<8$7B&.^_P7<2E]Q&/#@:1B3MQ6D(?V4Y<^@QT"2PW;_!]P*UX0KD*GU.+
  266. XM1Z_B37KY22L6X]\[=FRV!""^R?<2@,GK9(8/+_8]`DKKH>(F4L`2;G%`-Q[-
  267. XM-)I^#8!<D-?Q_LVY<J<1!ZFV6_26\=E]1'SWQG@!>;;J"N\M/@5(]8C^?\SF
  268. XM2D_Q22[$+?G0M&78>W@7[TO*>U#YG9#B9+R*4_+>W3->`*:VT9M\C0/QY(U-
  269. XM=.&O".5C7([3\3;\PXG7$-G$;.>1#W%)7L1=.&^-X<K<E&-RJOL>5#D0IP)4
  270. XMERG`<F$^S'OX2`,!Q;N$M_!KR%LM.`/'X.9\N6`=#W[%J&/TGN621H?TR1!1
  271. XMS3EY&ICG;&>;0XPY#KV)%3@'XB7\@A]N"LY<TOD'!ROCO(8_\',NP=-Y!1?H
  272. XM&9R!;_#<"LW-N*1YT96CGNOR.%*&^42]4][`/([O\VX^`OQY\5;HZ7P*-'2"
  273. XMOL[/^4"7Z+8DMXK>9DZ\VODWJ>CPG%Z6X0:AT8GW->_H8(R7A_0G$LN]N5#[
  274. XMYS4]"12G<3X$2MS,P>FE?'7'AUSNTVT.Y4.5&?0AODCR501)NA_W,N8%O>BR
  275. XMJOX$7H,A2ZM4W*BGJ^+=U$WHS)GIL!N(9^U&HJ"4N<1FW^3;Q`I2'G@02NZN
  276. XM\`^-$,6R'KV`*"MEJU:I<+I8M*V1S;V.[#CAXPC\F;_S4E[+`VE/+]YZO5CS
  277. XM0%HXU$=Y[M;C\2X)&!@G($>RP.U<V`Y#K1^J<%[.Q_E$[^`,W`H\)*@^O:6Y
  278. XMR[[L0#RS.PQCS=GUN6HCZ:"]:8WVTG[:_Z5J1^JO':[K[D-U6QTX-"(1(4"V
  279. XM4X$.=\%7.@-_Z"X]HB=U=Q[-B341PNWQ#K4?DZS!W%*-*"_J,OQ*_U71WGZD
  280. XM@&GW[G3@N)]TYU[=@8E#+^@0W:#;='"RR(&X4ZT_ITZ/QPC?3L1C^%=/Y&.]
  281. XM>/]WH6%SY(@@!^[JO<$'<E2!!PJOFRCFPO.RKII)R<=!NQ-XN.TG>JW?.%75
  282. XMG<#8RAFLJQ,[Y1THBB'\00Q86&7`!)CH=1,V>K#CZF9T?J;U]/[BKPF0E?&*
  283. XM3P9@BXW^!%H#CB>C.IZDIZN749C78`SW\&L0)$8OO4:NJGKN;0-*.)",LR3?
  284. XMS[]Y\6;R36`-*G?03@YES`#E(!N=AV9,TI#D7?Q9\I93X`W2^"I?O*>`@<-A
  285. XMWBF?['@/#WIJ>!&8\B2^>!]F;H8J'RO&F&!O-9Y8T?Y>/>M@PB/MB:'#1_AN
  286. XMHE6>`)"-7D*^!FST9]J0&VL&Z\-I@R]T\V).!4`Y@6?FQPH976\)S,'V0(('
  287. XMXCK.,WWB:%S>T[HQL=Y&&FMP,"`NW=B`'6`#L8*MX\S_)-W8EP"C@:_[UJ]Z
  288. XM7:_E@+@;:"&^'MAO=,_94U!\\9R8Q[Z;XP?5=L^QM+]4=<%>K@-+79;LW7>?
  289. XM+@.QHJH[U<(J;?/`N4_K?0`N+/<X@DO"/'%.];@^3,.!^^KJI_VU<1].>P&6
  290. XM!F@\'FBAMG>9SAY4I?LOWY3Q0J`B]VU82O$4T6OQ%,C"!^)SX2^,LR\^EZ8J
  291. XMO%<7JC[73UN`U>^KNHY+QP6_UA_\B9_P_\7%Y^AZ0@D_?%OOON,2DT#W6[R[
  292. XM5JP;9O.OT<=7``@_AXPI08$".HH*Z'!.8&HR@7#/PL;4`%P#:J`?=?FC_N7K
  293. XMO9AG]-:J9_-@N13&"_R\3^"I/B>GL%4_!\X`1:YX4<_L+T"F/P0N;GGDYVT8
  294. XME7?(A&W"U'X>J'B_XL7:?::?E>_YF@9:<#_L(XQ^1/?QQ-%D$."+4RZ%.<#V
  295. XMW;[B?PYI7>X3_I#?+G[NX<_[;.!HW@>V[O8M/T\)_)+_VRO5K[@%;$`7`!0Y
  296. XM'^U1"/@L*6E8$4SV>\!`$`?9_QA61>V?_;9?]H.`>"_?`7IKI^DHO;Y/\.N.
  297. XMW[-[.G_M@G_N4W[=#*-/YXMN_$2U70#^R._/E'^^9_Z5`_%+AP[!]S]#/JF/
  298. XM<B?PEW0O#\2#/T.W[RP=MJ^,EPX"DOLX/^A"-O07?HP.NE'0\Y_V;G_Z=W/Y
  299. XMO_SI_^I*_-P?D>?]_7WAWXYGT@%Q\)]RM^19??=>Z.<R*277QEVR!6P3Q!E(
  300. XMU`4P?5>>$M;Z:7G-@9N7,JU!7\!@)M!,>Y*$1H;H>"M[7H0'`JX74Q[^-T[9
  301. XM10)![)`"OG@KX)_G.)"`0(4)6!/I2G*.!]@7@(#X@HBWT6U6,$3Y<D>(?Z`=
  302. XM$!CSS"!#H/\%GZ$`MHCCPX.E`?/!&\!L06])(''V!9@5T8NF5]4%.X9)(839
  303. XM*!"CP0QXEH"`2P#?HX5L=#H.CU,>T1^<%1*H`FJ!T43T<@.P@12#&UC&'(%F
  304. XMX`>H!5H!212:5]59`;9!>S86J080'S3WQV%/)PZ/=P9J@5-9])(#;'0U#FA6
  305. XM6[42MMD(0.)A@7,@%!`"VDZJ2*#WQ`D-M)G;,YJ!`",`*,@)TH"0(.2DBH""
  306. XMJQPI&)J9@IF@*[@*/H*>X!!03*@BKF`LV)_,@IC@@C`"[(*WH!^8"U9Y.P$E
  307. XM*`M>@JX94S`"5'G%X`\("7J!,0"=-PK^@LS@*3@">('1H,T!"282JH@7Z`M:
  308. XM@JV9-@@.=H,KX!VHBH"#XV`I&`PZ@^H@.J@%$@$DWKFPT34Y:X`[V`RB@IO@
  309. XM9]<)?@%$`"@8`^``]R`PH@]J@ZJ@/\@*>H)$@"N8&Q2$!\E!6`OV@=(@0[@+
  310. XMPC4083X(#.Z#PR!%Z`TRA%7>7I,12H3"(#2H$.*"`*$7&,14=?@@2>@,<H,G
  311. XMH3$($(*#*L%(N!&:@QXA"&B587K6X#5D$-Z$F6`\F+L=@-63B1+_O&[\W_4W
  312. XM;MQ72Z'4@,F$$JX>6_?O10W`@L"'\IU1KU_$%_O)*FQ`YM`'L`!;W+:3`X8[
  313. XM)R`:8>MMA?*"5P@6NH"5SZ/Q-IR%!`,ULONMA56=6"C8D(4[8)P#%R)L98!:
  314. XMR,DY@49@++$72CU^81.8GCR!42`K(:B5`5:@MK<5V@:%X1=(U,TEP,*VD=6M
  315. XM-XXAP;`&S`&18?'6!F(K98PM4Q<$?@G`5K@B=(:P7AX(&A(>?&!F*`+8`6(`
  316. XM:@@"$()@UR&X=B2"\][-810:#6@A#"`;5H(N(3^X%XX!,<!ON`R6@YE@0L@;
  317. XMQH4R@'&(#2*'PJ`MJ!7&A3.`<T@.UF;"(#$X'<HJ-(!U&!P^@\-A#>`=`H7"
  318. XM($RX',HJ-L!XF`UF@N?@=C@&W`#J(70(#^Z%9(!O.!?F?#_A>B@,]H/G(1E0
  319. XM'-Z'-J%^Z`PJAZ4AP4`&-(<`(DN8'\J'J*!TV!]6APEB.+<@8H?.H';8'W:'
  320. XM$2)`-R'2@B4A?2@>9H@^841('KZ$]&%Z""*VA",B*M@>]H?PX>Z''XJ(`B(J
  321. XM*!3V?D4A;`'7\7ZY(2,H!21_.Y*6\Z?L@X+"J@#]@5-9A$NX_U5_/6(N)`8`
  322. XMB;+?D&A#;8CO($E'%.J&-B)2B"2.?2+?W0>P/&-_PU,H*$2%J:&6N/.-!U10
  323. XM5P?[$0QB`!T@`HPL2(`10`7P`8D<'W`"I`$GP'TH(1XD5$.^A#4D@@6B"+`&
  324. XM%(<C"\,E)\8`=>)72`FZ"GOB7K@&-(>!8G0A)\H`A>):N,I5"8FB:[@&5(>-
  325. XMXA`@)\X`D2(EJ#A4BF>BG]@=9HIR(@W0*59U1@!.`"INAVN`>$@JG@`UP*FX
  326. XMRK4$J^)YN`:DAZ^B#2`K/G'L0ZW8)ZX!\.&K>`/LB@M#`.$KFH8XP)JX<#F*
  327. XM)P`.0"P:`1W$L:@9Y@#*XG/!+.8`S^+\(2WZB;[AJP@#/(LAP8)@!-07B>+K
  328. XM!@+\BCM`M2@HG@#?(H"XRH6+3,&X&!+LB2@`U#<&7(&LXCXFE3EX<N(30"QN
  329. XM4QY/R%,NLHJQX;X8R,F)2`"QB`\J/7W!P&@K#@'*8IQX`C`!Q*)=R!1<AA*8
  330. XMHD@$1(S\X@E`!!"+9D_KYS#^BDJ$P<@$R(E.`,BHWE!*9TC&:"DN&":CG+@$
  331. XM5(PE(%XX[@B,%(.E:`1PC$P`%L`'P``57AE@*%9U=EYSPW8@-#%6SG@>M`'X
  332. XMHJV(!"B+6D7"(R?Z`,1BIS;=$$\NH[G8)P(!P2)L@.D$`5-CU?BNI3=W0%RA
  333. XM--J+3>.OJ*L\!E$CV'@"\`!BXW2S+:X!20#'>#">`$/`O]CQY$(XT\AH&C(!
  334. XM=N/)>`+,C.YB;B<?X8QY@*+8%<:,)X`00"PR`0:1*>'C_!]^HV9X?3".5@"Q
  335. XM^.9\2>-,Y>@G0@&!HYRH!1"+@`ZJ<R=X*UDCJR@%\(P^(]`H$PR-==Z=Q]#,
  336. XM(_0B>I`VFH9R0.AX`A@!Q*(4<,^A`9)CR^@YRF"Z(Q10*&YT`@[+2#GFC#_?
  337. XM^$?U77,,H,I@)8I][MN'(`&*;ML$$A!@7(`VGAMPY&54B6#HY[X!<=8C>_0:
  338. XM<$P;76J`K;`N'\+WV![1?/85>P3R48_-7FETEP!=6QP5`.J-.^UC^<(=:7OE
  339. XMHQD@[RV`35X#>"4^"_*<M^<RO4C7HZ5'!0!YW&/Q5N31`>YC7D+]B7T(9+<W
  340. XMO"!\B-W]&$J0=4:>_YA1X4M[@:W'0,J/-"*8=_7%?0<DM]<G;9`3WYN1J&P!
  341. XM0I[IM_D!<:6C7A",!62/#V,&\2QAHM[T./AAB>T"LU=$4@R>V`0(XI%V$628
  342. XM*.N%CU=BX6=$4GS/'AT0-Z"/Q=OFR"Z1@1F8P:?MJ7APP/PX1`IWHE<@!0<@
  343. XM(Z%$TN<1.8E:#L$VWJ4P`D4;<"2*?2Y3/.$:3("716;A!'"/59WP-"=$.+P'
  344. XM:^.ND`$7Y!#I,LD!UV,>:4OPD0I>7O5`["__HQ#9(2%\@<H9*0>\?%``&AE/
  345. XMZ"WB#IY#()51B"1[-.J1;U?>FN;;G3VY#X7`OKEO\4++QJ_90KI/"?9*X@ET
  346. XM`.4R!LR2H0%7=TNF`!T:'0!K(05H`+\&%["2@\Q!,4O&"U;!KW!,+A:,(1RP
  347. XM3*I$SB0O.08N$,)D^Z;EQ`MK@"LI36*38T2#4$WFB+LA,6D&O$O/)#F9O]&(
  348. XM5.)1V(:!><P?5+@^``>O'FP0!NP1K$''$)FQ+C^.M@=/AH5NWSU9I:%(VMY.
  349. XM(`/0A54=#T5/*@DJ4^0R4OT*2L)OE^SMDRX@..5/8H(-Y?,6\95Y6`5!6;RI
  350. XM>?D$#E-"6"HW3/NB[<%Y;Y!&B?'=>?.31]E"@)1G@#[Y&$"459V,PA3P!69`
  351. XME_5`Y`S,F\]EPK1-<%T<UN?A"R8E*DC=:!^JA/5&II0*;`MKH^BM"]I>*TGS
  352. XM!)4SS\`$U+$=Z=N:D^S%"]WDND`7LG4E&/;GT565N])5>9"T;%LE$!=5FHUW
  353. XM7PCF4)Q@867$QTUR.V6ES=%5@F#S"%@IYR1[H8$M&52F17PCKI,SV)7:7B[9
  354. XM&HP!02444+ZT?H`E7NE+,@E,1UQI!#"6K\%65[X`EDUE,5D&!)4*U`CS`JZ5
  355. XM3=NN5%DFDVQ`4%D$$%,1ST^6%X8\B:5;R4Q>/*(E::D#CCNH8VK)1JR6<$!0
  356. XM:3'2+;W0&A"_V'KQ`C095-XWV\@X05F*E09%4'DO)89]P6*(ILB61\,8`+_M
  357. XM"G'E<<DB,)1]B6P)3IXXS>4X^2L8EV-*D9@B,I>]Y;L43]Y+L]5WR5;>E4,A
  358. XM^5<CJI,*`.]G39H49V0`N-'!6@)#:0!1D#S82HU`-4R5'H-U\+JY;S4"%$8Q
  359. XMO'STY7B`T7ETC)I^"2S$4P)F-C)7P'7%W%GI58(Q\X&K@5JLDEI.:*!-TF]?
  360. XMWS-7U?&5M.1I`/CUE.F*S9/[9&J=S6/P50P!M005``4\!JL*^%+V4634'1\`
  361. XMJ=QR*68<X4VPF)C.$`!CYGV/7XADSMV8)R8;D&.NF$=`\^-C0B.8W]&4`M0'
  362. XMT8O]]D"H<!P.7&`TU'G6&6OS%_A]'ET9P_%U?3UEVD>1A1)YWXRY]J431..8
  363. XM8DN-F,F>F+D`N0!EWQ=08-X&?("@,`0(`9#:$E"XN9DG4)PY9T(C@H(?@`)$
  364. XM%_(-G%B8]1WGY)6)\8TI8R:;&?&5F#@F<*!C/@&(`:;S8D(C?&:-2636:$?F
  365. XMCOF6+)FC7Q6B:48OD::*Z6DJF8]!J+D&/)F0BI3I!E"9YZ3SN-;Y?K)%0D??
  366. XMG7_#GSJG_J%S&EQ,9Z@I@A$<,*%H*@<KI<X4(R`-3=`9P/@%&;^!#9`;M`%H
  367. XMP&T0!"@.5R6[\`7D.6U`BFG[K0JQ)E&HTMEWXMN'.:8XFEP:<U=JQA$\9L+S
  368. XM8P*`>L*3"0+L`9`**O04O&R"V>H1@#V0+>8^=DY&F8[DJ\EM%F[[&]&89:(I
  369. XM6^;WQW9XF5S?5!5FA@<O&IG);K8!5F::*;M\4N3FYB6E,)P=@KSR!1@JL1:@
  370. XM"0((FE@%.B(%\`&%$K]S,B8!1\`V(07D;TC=%N0%)`:P"RO4P=2&X42;B7'J
  371. XM"1HGQUE?F@"!YO#SAG`>)"?G\8:0G"DGT)E;?1,D)^>D#>V;]E_&.09\`6Q`
  372. XM@>EQ@IPZRC7A!)"<<=X1P`<0FD\`TWESM@$:I^ZS!5@!9<4>&4K$`'OFUQEV
  373. XMC@%C)Z57!)Q^@@(,8&7.>]\FG.33N6XJ@(AC5M0[,,<UA'+2$G0$S=&Q9!73
  374. XM!.A1LJ0LJ=@1@8@E0+`3FL(:5$`6TT/4@^US>%YI^0\15H9==R8CH#=:$M5"
  375. XM!#0!!TJX6;S!3?_'DH`P5!1]@;?CA74XZT(E(<<M=O5/0D;>A7$Q@LU9%SB=
  376. XM4*?4*2@`F;AGU-EQ<CI99\1YTK$2>=_*<`4\D`2&RY2ND!`EUU)P&I1[S%W3
  377. XMB7,^G;YG?1D"Q)U0YL5Y>TZ?7X#8:05,`<?G@`%W:G\OVMHY=H*?R.<%B&:R
  378. XM=5G/;-A-N'[)ID4I1JB=3Z?W205(5U3`^,E[<I_V)_ZI?@Z;Q97P-1\<FP>#
  379. XMB*5)[08P@+.9`T";TB:UZ59:F]BFMDD<_)LT8MT)84J<(>8;"'WZ">?F`_F6
  380. XM!`$PIO3)-'8X\&;T(F_^!2A`O:E/^"L>Z-<H`NR;"8"K"6L"G#2B^1=LYIK8
  381. XMW?JGW;E_-!W\-VR"F.2F3<;<*264"Z/TLDF:,>;VUVZ2H/&F<S!OIJ#[R@J:
  382. XMM8P!16AHD#O"H#(H!9H`!)Q89J2A90Z`72;A\64JG+9GP[E[/IS"YZ(Y<:82
  383. XM0:@(FG-*G3SGQ^ESBIQ!I\E)=*J<7N?V"792GW!HSUDHT4%(IUF!<FZ=`T;7
  384. XMF7;JH>8GV8E5C)]HY_R)B-:?;*<5X':.GW)G.C'O^:`8:,CS1C1%(8\DP\-H
  385. XM*VD1";$6+9R/*-1YEL2=\AY1F`"*GFIH!EK&;*`H@%*"-!BA1R9B`(A>`2'H
  386. XMU^ENEJ`)P`E*;T:A`9@LRBX8H2]HX1:#]ILSJ-%`8LF:JQT"N-]=H'6>P%9R
  387. XM]90R*`QP3NYOY-NVTR!05;L9A<E.7)C_98:IE,B2]4$)VD@^507GFG9@@G^]
  388. XM$(G)W`E][<+UZ2<8?2F`&LD$9)_V"@HP^\&CMA`RPA>\FO#HDSEW1G9$0+G)
  389. XM@1:9G2:E^99<FDFHF:G\#)FD)D(J::Z8G^:Z*1TXF1"I32:1FIH**:K)9((O
  390. XMF=_GQVKRFQQ7,LJ,(G7B'#$W[]F@%FCZE]*Q?\@?W2G!`:#%Y@`*?QJ@S&8"
  391. XM^FQ&F\2+`TIE7)M+0;8)'&R;568%VM#!HAUHI:EN?J1*Z`C::B*C%.A).M\M
  392. XM=#?H?=?2Z:#'GZ\)85ZB^]VP>2\UFH0'+"J,^C/(2"W:QEP3N"A3^J*-I,=H
  393. XM21J5JJ+/*"O:H^D^``,UBHQ:H_I;7+<P0):(7069,T!4)Q:JY[Z%!K\DTS&_
  394. XMP9OSG@IY[]ED6LX_FH;:'*X$5V?L\1-_Y*%R@"5[_RB9V1IXD!?,"2E`&J0H
  395. XM0&8:**`*V6<UFFBJ>RS"F$)&J4,*2K+GF0)='20*.6Q"`<X!E74AI52L#<:8
  396. XM[,F@^>CLYYD^!O]HAR./!J>IJ'JIF$J/*FFZTM;A"W:G`A'XL`C!9+>I7BZG
  397. XM;YWXMMSI3(?*<;K1.4\6`BNQ`H5'4A#`YL^L/K*+OY*LG$I*A,=@EY:D>*EJ
  398. XMUU[JI89E7UGML4K>E!WU"V&860L%.5@6?6A`?>`RR0;I7EV(,P&FAQ-4D=8A
  399. XMI@2DO0<%#)M,$M=`(4@R9-2GYH[Z":]IS,!D;J;LT18P/TD1_A&&:@:D`%U`
  400. XM]DF80I;5Y+`)'AU6[5%/J0*\IBO`"A!*`*@I9/2XE2JG3IW=6;S%IYV>M3=-
  401. XM/D3)'MPA&_"GTNGS2.*X=9$>,=>6WF_M*38:NX%'&Z`/B5IP/13#N?>4\4#L
  402. XMFQU@GMPN0P36P"4E*H\!H%(?9)`OI-O#\M$P<<#+1^V].&2J-;98I'7N&Z`2
  403. XMH**FA-7/U>Z]>]U<"=JFWD9)0>$F15(,N][I]!@X>RT$"O*83@'ZB?Q2/,UD
  404. XM:6I6<KL]FLQ="+"NE*;]YJ!:J&8,NP+OT:2R(_G/A,HE^:.CP98:!W0X[DVE
  405. XM\Y1R7(^IR-:O2&"W@8#W&!!H;J1,=*+MC1IHQ,?_Z"V"0B,JA/H)563<((^"
  406. XMD4PHFV,8>CSOB[.5X@T.GEA/J7V&$F"D,0JIL'%0`5X`C^P%G@FGA"II#2A1
  407. XMNY#L)3+"`N^!`J@`C^J["<P`,Y@=FO*=)B454/K4^EVKM^JVNJY8J"A("^`#
  408. XMR`:]JBXC,XV>#@_%55K:.B"7KH&N_A1Q0(MJC$8O*,B+&AZXJU5DM/>O/F%X
  409. XM*FQ:B>HR99;"TA?PHKYJ_L@#V3JM'['G-^6K;,>^6D4&K()"N^H#]'J_WL$Z
  410. XMKV)\[M;RZ7@R>/MJB;FQA@?99ZH5'H02*^LE*3,YK,B3SB90K`'_*HD5O>BL
  411. XM.BN#ZL0\J`L"8=,QN!5@I*9*'?RCGFJ',]M\>-)$^T&UH`"YZN#P@2&1UP9;
  412. XMZFHJJU_@_I.PYJA,`:"$J:(6JM3>&!V49AV-4NF</FL4#^\!B\ZJ=$#V*4/&
  413. XM`5L`MYJH,*)8:_%FJDI*:X^Q5U,R"/M9:13PO"U#JS=5)O:4D@P*P+:>G9J4
  414. XMW%JF_BO]3RAAC7JK$>M&&0;$4[849W>M1JW9R+MZ/HI>ZXJ_"JE@KNZJE"HH
  415. XMN*F0RK*ZR_V3`L%C\%R::!L5FG*MJJPMA*XJ*/"JD&O$BH$>KKFI=Q#M!4Z[
  416. XMDW&SK4![OYZQFJZRK2VK]NFN@JQLAZ"`N?ZK-.M8Y[$6K,&K\AJ[#IB02L!9
  417. XMU34\#\^3*D;I17'#M<JQ_JY6),7@N6ZA[VDQ=P1`%!5/_RB?OCB]F6:T1?`1
  418. XM[!N8JD!.?'N.&/"^T@&'*;`)]FU["20,*=C`J+-I;9JZ;%*U)Z/J)R1D.28J
  419. XM@P8\!E&3/!HU\:)<W1R0@L9NG9J/8P@2L,/4O,D@6#^XD>M6C#(L,I4^NF_J
  420. XMK#(HO%J<"JDI*;#)DEIWNN9+NH-JI>R<4G?3\:\:I)CZOZ(!C^D:!:_)'?S9
  421. XMP--\4JD&;-%'?W:?D>@D&J^ZH9#HV%EVTJV0"A)+Q+:=28!608D.D(?*"HO^
  422. XM$7]7*:\)TW%PFR:*.9$JI2`HIJF+GK"S9@-'E;:D6.RN"9-JI>]?5QJ]C*6T
  423. XMZ!=[EJ(7N:@>&J26L:OH"^"K<J$XI`"K)V"PL"@"BX3*!@RL<%JKQJL1[`0+
  424. XMQ%6PGX'"B:`YH3T9![O'J0`?K#L4PA:EY.NPR?AP7!X2U[J>WF\F;`UZ:U:E
  425. XM+FE^UVMR</J=#,O?M6%**A!WON9+ZBO7VIMY+Q[/_8KJR:_^*U-0OQHR]VO^
  426. XMVF$6I,:$V#?_45TVWU`)GWV)J,)C\(AM!P<*[\>8=EDPDT,QJ)8Z1EHLNYLB
  427. XMKG09/!)*K`MF&_XZ^T4CCX$]&LXJ?3`F-_,B[9LEYM.AS8ZFUNBH>K^YG0XD
  428. XM.AM]>EF2!FE:NR:R(@`%^Q<TLJT<-=LN0+*LDB1;>U*R,*B.X<V.L.MG'RL'
  429. XMV*8(VFZ*C-:OO:Q`2B.FL"OI*(O&MK"F[!8KT\6PU-$S^S(1(84;+FO#!DLX
  430. XM;$)K<WQ4Y5$/RWR>$4`L:.K$VI]1[-MIH3ZNO.A+&XDNL8ZK,6K30K%2;"A1
  431. XM`U"Q9FQ*Q\+FH%IL^^=K=K%&IAS[-=:Q:RD9VXP&M<*?5:K&OK"H;!NKRD(J
  432. XM<*P5:I;>HDQMAW#'/K5Y[!YKTM*F"^T`V]!&?.JLEB,H"+(AZ`*+&\BS\R@]
  433. XMZ][0M/$F4*7(H@;[[`7[R$Z.`>WN,]!6LH4$:"#"TJ#I:EH+=&&?[NR4"<\"
  434. XM6:=I(\G)>E8XDT-;DH:R4FGY9]$.M<4?5GK*;K0,7!Y;OI)OKU`9<(V41CC>
  435. XMN?JZ6:E4(`@0!WP(0.I[">Z-=0*J7ZE152V$9)WJLSJH.,Q_!&O]'TAI_+BW
  436. XMCJ8F0`"IH>X0C*$98//XMB!JO&JZ$B\K:(5US1BKO:55$$T:HU>K,FHTF*@=
  437. XMS;D:\:D``20=T**^J"5M*PN93C6Q+-Z*ZJ&VIN`CD[_2L&'JMP>C*GM98I\J
  438. XMJ%ZWXB:[M+6V?L\JZA%F;JX0;1^&O^Z;J^VK&<HJ$D3CI)JN?"YQ@VT`IA$[
  439. XM2A9E6"+P4CA48M9#?JWK6Q#[MFX!L@'<B=B2I!+2H"IL92O#%E2P8DE@Q:KM
  440. XMB:Q2K6&D2>O(.*L!D7.#XA(.U>JBJDQDJZDG"L*$+K<FUIH!R;%3T2JD-!YH
  441. XMMS=F]#FP:J[L:G_JK8*KNQRGQ9D%0P6L12/D3A(^`/2:O`H*]NB-&T_N1T(0
  442. XM2X4S:4:VU+JBIE:X,E-W&TH$D`=K@"O$0KGG'@S*X3X0.6N:("(\K".K,9>]
  443. XMWJO87L@EO!ZK'>N0*^7^JW$NB$FQ`DL=&M75Y#JO_"WZRLOZM]7D6)?.GH^"
  444. XMPF([W2%/U6V<&]J.MD#N6&?F#K@[:_7JYBXL$NMI\.?*MA02!C/=8*S"Z_?J
  445. XML2*O-*AXN\E*2*W$(Y/+LJ^"J3AJ2ZZWYEY).VRNN#D3PN`NX4P*@H&5[,DP
  446. XMVNH#2]_6MZ1M^2)PK48][*>W%X1QQBJDZ=N^!O)H=QNO2GRA!'?[[(ZOI*:Y
  447. XM^>Q:J-)NF+OM"@IB+KCKV_ZK-NOD:HPVK&\NFDD)PF2Q+!F%KCX=ZBU"2^`Z
  448. XMMJSNISN??K)39BB[OR6F60!T$00`-8/ICA,&X&ED`*WK(WI9TVSH<JB<)\Z!
  449. XM1T=&N2V&3,10$)R1SV<0&T!"N^+N_0BIEJ1%Z;#Y3*42IY)PI!G!;1U#"\>\
  450. XM+0PS!J3F:!1O5\"C%%FV!@59*O5DD6<#WZ=`P#QV$5_QYN>>>*S2H:*Q#0OF
  451. XM+5*ZD:*\CQHD0@2$H%Z6U7J7[ILE;-*;BKZY+:>_XJ@Y`2JO`F@&G+S27?VV
  452. XM]#Z]K$3Q%H!)=SWEZ#D'4`@\!1F04]QE'ZVUBM;2L^#NT$NI$0&6VDL)UQ9]
  453. XM<BUIFMB^FNWID9KO.KVJW2#XD"AW1.'46_6^;LLH44@%]+N0"(%AG2:H3A[Y
  454. XMAJ/"9UYN5G*9S0@\SL9VWEZI,AD%*40DK4#?F+JN!*C"'J@;^4(\!^IM*QQ)
  455. XM,G(&>@.+.JJ)RL;;X9JT^PIZ8Q4U?&_5NL!ZC+X79L2GGTX'GBH#VTOJDM=H
  456. XMC%I`(J=Z*1B(,(B!&.,WA"(,#/@I9K-A(JC9:?0H1HRI8T!M:?A)@%2>^NG1
  457. XMNG*,'QNQ_#6%K`<0-P:(`7KJ\L<EUIZT38H[_0HV0!SE,AK8`;,D$%=+L@O4
  458. XM08EZG6*]LYTCF#)1`2VFRR`%=%TL@!C`;,V_TT%9VG5)DRB``%P?E'3IKO[;
  459. XM%_"_F([_"P`+P`D``5S_'L!_:@+,:C*CEFBZDH-FO55=F8!UG&P+;I<THJ$I
  460. XMA!AWEII*62X:[0LLZ&S.YWXKV(0_?VJ``P7HJ<N*Q],@`!S1`=?;%WB]_DH%
  461. XME^Q]E(^DRT0#4WPW2N%&!+-Y.?"=PUKUP#2B$&RDZKR,)G^9R869>(&@X/X"
  462. XM92DHF%?)EI@A0/6+R-JUJPQ0=AL)91S,&,I[<`$B`)C'!O<K78MZ%P(`M@;M
  463. XM8&O=#IN!W5MEKL4(CQM><%7Z,W>"H$``0PFQZ/C+'K5,<,#<R_U:J-SF/4L&
  464. XM`Z/^2LO&_"EAQ0<=?,G*NR7F(LS.(K)4B"^9@G)ZG)WT8P6#<FQP"3`'L,%<
  465. XM@!N@+(K!QF@=C,GRL=27"4/<2EHC&NV+5V:<=,`7X`:TC((PY4*XI*#`P@M*
  466. XMM=BJY6<N/#G\<KTPN_`+RRIOP!<\A.+"NG#+Z-XH#A!<,:P+OTOU[`<%P9+!
  467. XM1>/%E%*N4E!!QO"UL0%S<$%["=.@7NF'6[_Z#08F[:MAR;A22A9L^$6`LBFQ
  468. XM6Z^EIL"/-N/0MA&-;O\K1Z2@D&$(F@@_IB#FY^(&5KHEI@5<EHH`<,"L(A"S
  469. XMI>%/*`$![GL9*O9"$(\I"D/(,VX`?%5AQ6LTW"BA!`3LT_S#(L!=H"RB,@.Q
  470. XM20MB^F0;,55HF*!*;6;%T[%&@%)#X0;LUK@5CWLSS^Q[3N&&:MR"OV0`S>83
  471. XM;ZM`<7);NXZ_QRN`UP]'P/\P4ASE@BH/L4XK!HROL'"#>OHN"'M"=8-0KKY`
  472. XML;X""3(!70"<">"9`"0""A`&T\1=X@K8!(3%3Q4$%P+<*+MH7<O[ML&:YSJ:
  473. XMS[T!+,*"FP+_9-Q+9$68K$"SK?4V]"!7-17^4@ZWPN?P'8R!(I=38!6H<<E5
  474. XMKHT.Q"R=);!H5ZP$LL5C\1*$%I,!7K$GB"]@QD(#I'I0[!&TJI9"1Q1N8+!E
  475. XM#`F^G6)Q:,RP_`HZ1FD,G>`+%_$1*29N;/#P&B`/G[\V,8WK)^C&]:P)</X.
  476. XMMT\"AWK^"L7$+8>J`AS'(6KM"G=HJ2*Q!*P;$ZQ0,::9"#\&T[$/T//1!\:H
  477. XM;DP5HYDU@AF*)U`N!68*B@=PAOE;5:<EY3>D`>[%7_X`\/&K4/)&?`'F%3D>
  478. XMLPOEL0B`!:#'-^2@0%,PF%'8@RF72IAV<2AG88*YZ:J&2?/P:V/P7`P)WSDC
  479. XMF%UL"0NVK[!)>R\]P;W4@E#Y#@NX+TQ,T^VO.[!5$"/DN<^!W0=GG@%?0(@,
  480. XM!5>VY%RM"?Q=ME<L1FO\;;:&6@*@(H_(SA_N^:?\GC:'$!`$5`%$@%.+U%FQ
  481. XM.&AF6]3RH,`F)GHCOZAF`.5R(Z,`J,P82R-ZMO/NH@GAE"]QG+:Q&Q%[3JJ'
  482. XM;#1P=3Q.T;<9=\9;X!0`&BL0YZ3%"29OOJJQ)Y@&GLG<<490O(4)/24VJ4V^
  483. XM?'3RU%?&'J<SZA]7HPZ;QB]E.`OKIH\F4>=`E*@8:$K)NA#*2QDTO`O_'X*"
  484. XM$W)+)`87##'L*&/#=B;V-`4\I@0R?UEA"@8(<D(<OW2J<;$)^@C;FY%PA#Q5
  485. XM3L@'+0W*(E.G1:J%+(W6I9(MDAK\%G/:*"N1_`(CXTSSBU62HQPFX[N8?GFL
  486. XMKA1QJ&`->F!8VH:IR48>FSPFHX&L<3V1'L_)Z$&=?)!DE<+D%I<GY[QR75=9
  487. XM('_*N>]2-HYNH]^DX2NC+KY^,I&*!Q?+>,GIU'KVE'?$"X$H<Y7;Z(29SWVC
  488. XM"')HD%66`>7R=%JCAKT8WZS\7M7*4V:2"KLQ"",875EH;,NNK9V\()>CBN#)
  489. XM>YQ^R<URP=LF?P%O<FN,)A=N(RHPF>C""U\`>[0&],M"S6<K_LZ5V]8\PC`3
  490. XMDVL`M@PQ+W<2L_3;BU;,8C)/G!;3@=%R_;%O=LR&Z;X),L\!4!C)?*F(MYDE
  491. XM0[59^LJ6)1080[1,OT)]X+Z=(:"O?_=_K$J)H+GW*T3-D"F\=*BN3*6OQ,?^
  492. XMUI)'R3<I+"^H=6'N-/O&?$Z9=I:L?`JCQH3[Y?:4:W+!"S97#36SYT`FKQ=P
  493. XM,M,<6JZ5=X!$RR+SR>CRD,J<&@UML])\!^C-7RU2!RM#HP$S73HP1WRF:5Y:
  494. XMS(V6T\9KR;J$/$@S:.G+CLU>J;@#&;O-O$^R%S?7S4YA#0@G)\Y5W_#;)PO.
  495. XM3QU+4Q?@Q<HDZBS7_<MRJ;/@.,/#D;/)W"WG@+II.+I3)I/19+`<_0Z_P&8Z
  496. XM.5MJET;F&8`\_P7[9GBI3)X!2^)H)CNOEP#SRB#NJ%J)Z@\I.M/,%_-@=CH+
  497. XMR:FS@KHZP\I&P^<L-#^UB[/XYI4*S+CSUJL[6\_#5N.C&%*!C"$<^"D@S0;%
  498. XMIIHE.,W7Y'B*-<MA]G,/:-LFIM+O=;DC>K0U99Z2:FHJ3)]=Y2OL;*+87#2:
  499. XMR;BOLH[(.,//2@7JDUS2SV@**H<@C\X>-`@`!5W,)@Z<#`+X!R1TSAP:#Z2+
  500. XMX&Z8KH;0H^EL7`3$JPFT//PCCF;&:)KHJ'2LT3-(IM,NSTQ!D&BK2BD]]((@
  501. XM1!NC\0+R;+AJ*C"H\VQDZM`I,?E:01N%@*]Q>BXGI^GRX/Q"CZ?9IRU3!/ZW
  502. XM2G"ZF\;X7W?$^:PXT\Y3<.,\C1+,>.^M3+X!EWXP4CC^2K>;\_"LH`*;(<`U
  503. XM85;P<&GFE=PN1%4*Y_NP-Z<K?$1L7+E4QL_R'R@$G,YR<9A\,0."WW/YW``3
  504. XMA0&8'LTR&*M?'MI2?'K19,#-]9\M*X-N!;S[WI(G`!<P+$[/@#,6S3K;G3YJ
  505. XM,%E*G]),WV6!)NB=4\`X`4WB;+`+?<FC64FHDL+@QXEE5;20FCZGT7/I&@TY
  506. XMN\_[KG*J(Q9S]])LEB(BS4IT,\@_=UD^]+1W"N:F[$(B"/W2>\1S@=L4P9XA
  507. XM@NQ9ELUJU/2"4!F?@J/I#0V2N;X%<V.+\1FXA\H^J."6$D/='A?$GL4V,V>\
  508. XM`F(O&C-]</?B;].L'_T.9L_A\LRL^5K,B70N&!*XJ'2O;48B^$21=.><"[E]
  509. XM^V";"42_J#BT\"L^!\[D<U4'!>G)Z#,:K?6RIVYT[$9>0HD5M>^,V?30#37S
  510. XM[-HV@V;J-=U!9].E+P'=3==Y\'3LR4O%4EL9.3U0G].V63I=1,L!['0;+:E^
  511. XMT^F*/(VRT=,"GJ:*3]O-^S0CO>8:U19R)WE8GH(=,MS,/2?4`.%"'=<ZU"``
  512. XM1-U/N],8M+EZ"IJ+F\/XRR3"U!KU"MD!9]&M<_'V4:>7PK1(K?=2U87O=&I!
  513. XM,WKWTEL6&JQO*G6Q8V0R#?XI]3LO8,W"DRT6";E87;/5[*>E-\GJ^LL4B+_J
  514. XMKX"*VTHR8"2V$2E!6;`H=3`YY"E%W[SP&,QC64`]IBP^5YLPI!(0%*VU:AB]
  515. XML-C4=[0!#9IZUO*",\DTC-;"F6G]&*#6&^[MY.KF`<4J*BI)O]93XEY-5^_)
  516. XM5_0_G??"$2N`H'`#/*;E#`[#,!*N"T+19T,?UJ)7]1M."`JE]+>H256_+6KV
  517. XM66*J`-KU:%HGG@#3+GD-!WRWW#47X%T#,^4NSEJ]@J;JM87:7:/7_W3'VT?Z
  518. XML1U#7`51]"6PZ&J-XEJY=2'$P+ED+6@*UB"E>J^$AZ`0-!PDH750''%>KV5K
  519. XM_\)%7JO/,<5@73/-\P%""UL[>;(UL@#UPIO++=8#E`T[VMDI&)DQV$>$H+`?
  520. XMF"<1-@R:SA(><VTZ)Z7.-OL4,".#ZM<%96RT#TJIVME4&/#1392?7.2]<M53
  521. XM&0C@HIY[)K2@,`[G/INJ'("TBL%*]EMKC*:S2+97S62/U<`,=5#]Y@&D\\VL
  522. XM4%?96W8]@0A[V,4U%0U2(W6I]$AM*TO.OZP+*]6FLM11-*I`R$1%1.;)KV!1
  523. XM+7+)%K>E-ZJ$V\+HD;6VJ;9B,%&J^%RLVRZ(`;IE@]!T&*ZJ*\0,IS*:+7`W
  524. XM^H6Q'@1:;,6^E%Z8<\1G!X0&5""8O6\.FT\`BM`6&4PI2[+WT:``E`NV4?!*
  525. XMDUGG2`P%D-7"2\;@I<4(O&Q,%A;]6]E*3?E7L@A*PK`@ES(^DC`&Q5/B560`
  526. XM4V$MW\F.Z!T`![BK=X"<V7$*"E>`$:`]QA9ZZAFP%(@!ATJCBW(,JNPSOHM7
  527. XM6Z)$84`W(Z>Q=#9"1\R1;P4QU37NZ`?/Y^O&01)Z2,-Z:R+<,.[;7:))U7FW
  528. XM=DQ&Z'T!:J]D3?'](#5P]1MQ<I"4P[\P+[NR3I\G-U3FRU07E'R7D-7"TWM%
  529. XM\C[<;]5R<V#G#%>E#4WH2=SL$5E=!,PM(,]94ND6KN6UOI2X&MQTPGJ]`HC7
  530. XMS%U];5ZGPNAU[4K'I=SW-;F;K,C7F>Y=S26EQ,ET%0LC%\E7*?)'OC$^;12E
  531. XMI;:JU$,(J&*X5A&S7_$AJG*0Q0?:&4\^`41;2`6JI'54=Q4A`_S/GY36_2]T
  532. XMS84?*N?UV*IEMS_C]7S=)BVG9Y08$;"GU!,>H!8M$@E,3QO21JL_\W3S!=_L
  533. XM7<+A%-7)J.D+M.(V:M:8TEGKW5(WC'F74$^;\)$[!%H%L*<O-:T5>\TN<^=W
  534. XMB\5?0(5IH2[>F+?F31;#U^Q1#(!Y?PAHRFC*>2<%&Z<A0]IL<<_4Q/G#QE++
  535. XMY6C@-[5(Z&KNG,D2NY]!7D@7"&G)WK.@1HS,4C=9S01\"!1"YK3,50U(&L<=
  536. XMQ/[>>W<9$'5[W4JO6ZI?GW3(#_']WG"98`SM?4R7I+XW\=U\_]UY*8M,),_9
  537. XM-#*$F8V>$O!9;NIP*Y7\]8`5_JK4/9N)T!K$V)TO^TM[D`%8,Y'U=.E`%D1C
  538. XMW3_?,MTO@]I58HUB9>%L#3_*AS-IRC$OEAYS\WPM<SO9,K4\'XO+^_+"7;ZY
  539. XMWX.N)NQG9YN$]4S[F/YWG-4&#M?5#F7?MMUMF\9%@)XZ5C[,_3'#G""/RJ]F
  540. XMJ6Q02[#Y+!`W6FJP"D3+AH19V@8RJ"S)L<IV\.T=C=[.(_CF((-ROR6U7+<V
  541. XM/SY'F]J1L0;6\439.$:D`9#VMC)-YP5OZBH7:\UQW9S[Y@9DX0B@>*`D6$1>
  542. XM5M?,03(=!_>8N@7#OV0U$0`QT-/H=RIQV/%9Z0H1]!E\%(-NB4D$%9B`-Q'D
  543. XMA#+(M;&M'7;8D:_!5<G?KAI<L`C@A:`,@./<ZZCVI_IK.0?1S3&;JPCP`O@-
  544. XM2`+3$;FQR.8V5FIKGK&8;=$-PW:V;NS14(E?XA_""Z")@\^6+2@>(^>@R1U'
  545. XMJVZ;M&ZX(*[Z;M^@+/H]?S,=$JUX.P5$X:1!>\590^$1Q:MI!D3:KJT`"=MJ
  546. XMX0(#%ZY2?^'+>!B^9I'A\(@9/O%E$A.@I/QVHL;7Y&/JAB^X<7B@_6C!+G5X
  547. XM]288Q`F!+)S`A__3?KB/`XBKQ&,*G]5ILQ&A1!O`!D@C8+8(,`<#IS5%.*N-
  548. XM.^(ATC\=(CVFA/8`FXIE7%?EBZJ+XZ^9!%F=KGRG4@[#:[H=%+V"F-87\-J5
  549. XM,5]0.%BH,G2O6CO8X_EHP?#@D`$A`PS*,T>GQFA>R2[LDG!![4!BU0Y'>!).
  550. XM;#98EI5WH&@G'PF$_':,6^').!B^ES;C5;.6`XW'DT&`&.X%&;9=,Y9IW11,
  551. XMP+BX_7,7XU6X&]"+PZ=^55]:OHQ<;X"0]%:YNRHUMJ%DS0M1^16NC,>3CR50
  552. XMSJ8*Y3YY43Z-'[S5N&WK-<^4-44VCE5LXUQ:-VXT_%-'86F0XB8`VQ/%YVR7
  553. XMOW3DQ+=[G!Y>8ESH8D5NP^8W#H<?8^(X!@Y[VN'GN#T-FN[AL58?#B?\X1+M
  554. XM#SJF>.7]@EO!9R7D3O8]#@+EXT"`LIA)^.-S.4`.>`_D\/BPE=IV;'R69+EH
  555. XMCY"$]#]+&A_2$9\8(`]SVU+#WGUZ/`8RM-R+&EO>B7#M^N7Q0._4Y,J$5TH0
  556. XM>:5D+.^HI,&UZFR'$@",$+&78ZLS3&94G$.L)::S#6U_`7=)%BPHZ.;3KHV,
  557. XM_.0!/@0*$)Q;V3)3?)VS`C/3N:#@G?L`T7;92`9<YSIKNAH"Z`$"P5V2`"?"
  558. XM+:OM#0N#1[*YOL0U,%FI3&OJ5B(CJ4QHVH\3#`Q%\\R@[P<..@G1I>X%IT<;
  559. XMCJ9\YFZE0GXBS=\-^7#N)SBJJSE9_8M7A;*1VY>!).?QE-!J^VQE&5>!OOH>
  560. XM3J!!>KZ>_]W*-5G],>!5V`H&91>TRV[%ZDL>5Q&^N7<`G/<5T?>;;=+R4/'4
  561. XM89>!T%-93$I[5+XNZ$T9$VG9GO-YM!V>NZMBP!=0QM29L`$1,")=`3:Q/%R=
  562. XMW^>]<7;N;,>K6;JT75^"Z=6V36.,QN<5PK--GW\!]OE>#@OOZ)CVF))[IVI4
  563. XM59ZB\?%`VK?1T'U7(44ZTUBX[=@R.2O76#U4_5-?_!I\YBKU[I$GA.4]>33^
  564. XMDRN;0;GLDI8;Y=0X$6*-"S;8^!LREW<!'5J>0I@[`8KD'LF-FS"%&UY.\>GF
  565. XM@+DA.?&)`8%*#%"8BP"P5A,$!T1NP:RM+M@,YMZ!KCY^\NIRJO<(K#N`@CF&
  566. XM[AW(`+MZK_XB(>95G6)N2C#F<SB458Y[(WBXIDJ9"PR6.73@CF?FU?H;?JVC
  567. XM$I25<Y`KS8;UU!OH[@:Q*(ANSJ5[Z81,F#ZF]^&C1/+SCFOFDQ,D]W/E#$DW
  568. XMZW%,44K*9IU<CXOF%44^/@*8Y@^ZJ7Y+J.8"N8F>5^$%!O%3@`KM+X$*/*R;
  569. XM"ZR(Y%[N93LHL:BJ;J3KY?/ZI_(O3,L87Y:I28.A8$P;]0<K!""[O.X#=.DF
  570. XM^V59&N3J*#L&G0.I5$R!+86JR:4HU:?`1[Q(+=//RB()3GPM/`P&VRLO4J(^
  571. XM^XD`=\`+&J^"Y`%2"JJOH,K_BT5EJ=,N541)CD0SZ#&[G4ZS!RJI.AR0H5.W
  572. XM[K,0KH8J#+$L["*C+^CX!D/>CV<./$"OWCZ"`#Z`M-X:?+`!;%G[QW+H]/A,
  573. XM_*'+[20$66VJ$E:W\X/FK?%2952A_D+'J[($`<O:$NMMP$`IE,S05S9S%Y!O
  574. XM<6H>A4!&73>(F/`JL]/L'2>8+@08`?()8<OF:++X,,;N-[WL7_9_7K*3[7B"
  575. XMR*ZHF[2PBY#VIW=L#O2@?AHX[H<Z\.VLMP&8;/">J%<Z@RJ49#_?"3-Z]DFU
  576. XM\PM6N[[5EY@!H%YTX+6[V5,F:R[>@IB':_'11@E<=F2CA.HA?.1Q\6&XCFN%
  577. XM-?MK!HQK6#,K)WM/-^,:@KXEKS>OFYVJY9`\>$"O8)X0(8]!"5%@/J:75..:
  578. XMY[@VO-@,0XAO.8>*FM;**5EU,M@.9A/B72KZSHW/!\&8@\VIOIJ$>(=3*:?I
  579. XMVBK^CK?'G<^=GT"(;P'X^^DGCYX`+T"=^'F;H`02":\SX0$F?'O-!:CP),((
  580. XM7\)OUR#`":`#H-?9YUB`OQ=N-OP+OP+$`.-GSFUV6=97,5/`KWR4W-Y_(CKO
  581. XM[[#IT=JIKN]*E@:/&RC!+83N>;ES\*EG4J/E^`#89^U:8E+Q7,,6X,73`1IN
  582. XM#N\"U-P0J_\^;:/@.O?->N[&FU#\6(`.DW41,MKB1AIK9[SR#9J:D<C($2NS
  583. XMW6R`/%%MC!;R::32=\<C\KOGS_NRH0`C//9B7[O7-3<4A(V]`)F#?Y#!1YQ@
  584. XM<"$/>%>Y$>?'#F:'DCOY)F\T5))HI*`0C4B`4CQ`.G'_GU4=G^[VY$[23P'?
  585. XMN#KN,J@O;+Y/Y>:KF@GG>.^S-RD5OC>\XSO+I\L3Z9)V]?C"E[_7GW#7WDT3
  586. XM0!R:[OU>?V;W^N[//*:R_+[!M2T(M\\O/\,D>P%![7J?AQ(VV\OFR6?N(_I]
  587. XM'J`CHZ"\NBOLX;8L^G(N`CT^DVKNM`)9:U-J!"V>;"-=BWBW97K)8S3,#F:C
  588. XM\BP3LV&GDP&Z,*ARFI99-W'1HW>3\C"F-;\?=#@KO'EPOOLSF'<90R),`5N@
  589. XM$=`$3'<A/`K`T2<!C]0SE-)U],*=N[D)/Z8'KN;)V;DMVLH>/[%6QP$#W>2Z
  590. XM!K$7_7Z0T=?K([U'#]*/ICU]2C_'3.CX*T0?VKEU4(#_2U:ONH]D-Z\7B=UE
  591. XM`,Z+O;OR(3><G:X8`0F&$(`R\&]J&+KS>2%+'P$'I@*K8'W)FZ%Q86!RQ106
  592. XMZKK'EG:+H#ET]9E!.O$]'%^LP9RP?-$&5)#SLAL4!\"!;W!8S`W,`;G`'Q3`
  593. XMU<%UP'C"-=P!]`4>B`?D`1J3$:1%>)G4I<M@7^(7C9`>P`?MP7N`$(!?C"?H
  594. XM!=>;.^8BCY@S]:\C;5Z0-@026P`.T`5L`3`!(PG$M6`D`A[@(2S:P,@,!N!)
  595. XMDOV(RT1?9F%5@QF0VH^?>P!P(-RS`,-]<1_O577MTJO5<8IO;>K#9ER$Y1M=
  596. XM"Q:(16#=:QO6IC)]:M88?DW^&Q13C!`?/^-,'UK/?_"\N,''T$'\)_JE72SC
  597. XMPIOGHLO$!BA5-*1%7-6U8`/0N]X:O>5ZV6S/VC>1UUEQ,]O'"0/0GQ#;Y/!P
  598. XM@"Y6+)P`=T"=R,*U8>W]K9ZAX@#R??'&M(N0*:K66#TR?<V!*`K&D"]R`"14
  599. XM&E'P(_CV"P@S?E6=J[F\R[A6PKEHJ)C%X7&'$,*'`/4QQ4"SB;\_*^S9G"_6
  600. XM^L2;EIUM8Z1!>L]?:HT^=T?>DBL2*CYSUVT+"AUYBE\:WO<)P/,N&J2@)<";
  601. XM\VH)8G'#JO3!GHM!/I(^Y+_D]WWQ1HY+?UA+3#8%,1&<V'B_,HW@][W*6L^Z
  602. XM"A`<:3#;[%CW/7L?O3CY_+((4`)`<2M8E4_>PV?XY.?4%YZ36+X,*N3?]US^
  603. XMN5B\"6D^NC:#38>_#/Y]_]ZS`5N`)-]>>]?J,=QBKO<K<CC:TH+E`88W@T_D
  604. XM"Z$H@/[\SQSL^'@*^N`T5J37^V"\)2.O#'"J5#&P99(ABX+7!X$^,HJ$M^2.
  605. XM/GQO$Q3QE#RN7^2'^FG`-GO!AZ9*E;N)8S=#3'ZP7ZO:`+Y^`B#;@P:1/B6*
  606. XM!\0`Y.]]_^S3`5L`$1]*G`!O0)WHHG[AUKY^WRUL^[U^:W3?_R"=L'&[VZ/V
  607. XM$0,1SP+8^6-`NP(#A`$E`!FP!M3[!R(38`J;PFLB?[H4I`"NHV/0K:4!+,"C
  608. XMSP)<^X!^(E.U$P?K_C&Q!;3[J'HK;[B>]@X_Q"_1GHL-OQ3Q\*\*3.RY>.[;
  609. XM-D2(<7N7O/LE0+RO!@@!_7Y'`?!/^P+PD-^;!L"'L,0_<:?':*8,&GY<HU9"
  610. XM"&>?.K>T"Y4_.`C(+*38!S*+S`8OC)33"MS8KPU)WZ[X,'Y\^<>2Q>%$C*_\
  611. XMW+U6YKD8$,3YGSZHG_'[]FE`B,KD*_S0.\-/\?\%)'S$/^QG_')`V7_QDZ_G
  612. XMXDUL\WRW[@US-.2C^^>)R'\(P_LFP,F?\O,4*S^UG_"__"._S!]RT_Q<?O&V
  613. XM\XO@XOUI`/2+]C]ST`PQ-_B"3=*O?GK\OW[3WW!"_4U_@TGK3]5S/\CO"8_\
  614. XM>+\:H"_Z^T1UP/_W+_PP_S$N^'^HA#^-B-4K/"@#A`EL)G=0?QY):5)2[EL;
  615. XML`;L:[0[T)*^3]:!2G\L4ATJ,CWL32<LX7!=[B]W],=*`J8P>!__7):"XF\)
  616. XM!J_!=XJT51*?&B'5)PD-'\."3[_A]Q(@A`_+B_()\"%,,.C^@13!(*''[>7_
  617. XM3AZHK/\-^L@O-\PV+T"%^0*DOFR'#.`#F`#%(=-KZWMR[3]>WM-L7G"S>?_5
  618. XMWX!_"I^JSO"O9++7,?Z93NIW2+\'GT4,S43^`_WI"=)_E2PO&X5._O?^8^;%
  619. XM_\Q_F0/ZG_T/_X<2V/_U_Q9U_S^.00`P^,4BH_VAO$P40P`QA'6JW":)8^",
  620. XMWTI9YS:C%BI+%K?*NFID7GZ`0,`@H!!P"$@$+`(:`8^`2,`DH!)P"<@$;`(Z
  621. XC`9^`4,`HH!1P"D@%K`):`:^`6,`LH!9P"\@%[`)Z`;^`8`$D
  622. X`
  623. Xend
  624. END_OF_FILE
  625.   if test 36659 -ne `wc -c <'pcvt/Etc/uemacs.tar.Z.uu'`; then
  626.     echo shar: \"'pcvt/Etc/uemacs.tar.Z.uu'\" unpacked with wrong size!
  627.   fi
  628.   # end of 'pcvt/Etc/uemacs.tar.Z.uu'
  629. fi
  630. if test -f 'pcvt/pcvt_out.c' -a "${1}" != "-c" ; then 
  631.   echo shar: Will not clobber existing file \"'pcvt/pcvt_out.c'\"
  632. else
  633.   echo shar: Extracting \"'pcvt/pcvt_out.c'\" \(49760 characters\)
  634.   sed "s/^X//" >'pcvt/pcvt_out.c' <<'END_OF_FILE'
  635. X/*
  636. X * Copyright (c) 1992,1993,1994 Hellmuth Michaelis, Brian Dunford-Shore
  637. X *                              and Joerg Wunsch.
  638. X *
  639. X * All rights reserved.
  640. X *
  641. X * This code is derived from software contributed to Berkeley by
  642. X * William Jolitz and Don Ahn.
  643. X *
  644. X * Redistribution and use in source and binary forms, with or without
  645. X * modification, are permitted provided that the following conditions
  646. X * are met:
  647. X * 1. Redistributions of source code must retain the above copyright
  648. X *    notice, this list of conditions and the following disclaimer.
  649. X * 2. Redistributions in binary form must reproduce the above copyright
  650. X *    notice, this list of conditions and the following disclaimer in the
  651. X *    documentation and/or other materials provided with the distribution.
  652. X * 3. All advertising materials mentioning features or use of this software
  653. X *    must display the following acknowledgement:
  654. X *    This product includes software developed by Hellmuth Michaelis,
  655. X *    Brian Dunford-Shore and Joerg Wunsch.
  656. X * 4. The name authors may not be used to endorse or promote products
  657. X *    derived from this software without specific prior written permission.
  658. X *
  659. X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
  660. X * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  661. X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  662. X * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  663. X * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  664. X * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  665. X * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  666. X * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  667. X * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  668. X * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  669. X *
  670. X *
  671. X * @(#)pcvt_out.c, 3.00, Last Edit-Date: [Sun Feb 27 17:04:53 1994]
  672. X *
  673. X */
  674. X
  675. X/*---------------------------------------------------------------------------*
  676. X *
  677. X *    pcvt_out.c    VT220 Terminal Emulator
  678. X *    ---------------------------------------
  679. X *    -hm    fixes for monochrome environments
  680. X *    -jw    include rather primitive X stuff
  681. X *    -hm    debugging netbsd-current
  682. X *    -hm    converting to memory mapped virtual screens
  683. X *    -hm    132 columns mode operation
  684. X *    -jw    SCROLL_SLEEP patch
  685. X *    -hm    cursor on/off implemented (DECTCEM)
  686. X *    -hm    added Bruce Evans' set color escape sequence
  687. X *    -hm    keyboard repeat (DECARM) activated
  688. X *    -hm    just malloc as much memory as is really needed
  689. X *    -hm    keyboard initialization for ddb activists ...
  690. X *    -hm    add a volatile to color detection code for netbsd 0.9
  691. X *    -hm    trident cursor start setting - finally ....
  692. X *    -jw    USL VT compatibility
  693. X *    -jw    patches to set winsize struct for VT/HP and real pixelsizes
  694. X *    -hm    made SCROLL_SLEEP patch working
  695. X *    -hm    HP emulation debugging
  696. X *    -jw/hm    all ifdef's converted to if's 
  697. X *    -hm    patch from Joerg: PCVT_INHIBIT_NUMLOCK and support for LCD's
  698. X *    -hm    patch from Michael Havemester, bcopyb -> bcopy in check_scroll
  699. X *    -hm    protected bcopy in check_scroll from being interrupted
  700. X *    -hm    ------------ Release 3.00 --------------
  701. X *
  702. X *---------------------------------------------------------------------------*/
  703. X
  704. X#include "vt.h"
  705. X#if NVT > 0
  706. X
  707. X#include "pcvt_hdr.h"        /* global include */
  708. X
  709. Xstatic void check_scroll ( struct video_state *svsp );
  710. Xstatic void hp_entry ( U_char ch, struct video_state *svsp );
  711. Xstatic void update_hp ( struct video_state *svsp );
  712. Xstatic void vt_coldinit ( void );
  713. Xstatic void wrfkl ( int num, u_char *string, struct video_state *svsp );
  714. Xstatic void writefkl ( int num, u_char *string, struct video_state *svsp );
  715. Xstatic void write_char ( struct video_state *svsp, U_char kernel, U_char ch );
  716. X
  717. X/*---------------------------------------------------------------------------*
  718. X *    emulator main entry
  719. X *---------------------------------------------------------------------------*/
  720. Xvoid
  721. Xsput(U_char ch, U_char attrib, int page)
  722. X{
  723. X    register struct video_state *svsp;
  724. X
  725. X    if(page >= PCVT_NSCREENS)
  726. X        page = 0;
  727. X    
  728. X    svsp = &vs[page];
  729. X
  730. X    if(do_initialization)
  731. X        vt_coldinit();
  732. X
  733. X    if(svsp->sevenbit)
  734. X        ch &= 0x7f;
  735. X
  736. X        
  737. X
  738. X    if(svsp == vsp)            /* on current displayed page ?    */
  739. X    {
  740. X        cursor_pos_valid = 0;        /* do not update cursor */
  741. X#if PCVT_SCREENSAVER
  742. X        if(scrnsv_active)        /* screen blanked ?    */
  743. X            pcvt_scrnsv_reset();    /* unblank NOW !    */
  744. X        else
  745. X            reset_screen_saver = 1;    /* do it asynchronously    */
  746. X#endif /* PCVT_SCREENSAVER */
  747. X    }
  748. X
  749. X
  750. X    if((ch <= 0x1f) && (svsp->transparent == 0))
  751. X    {
  752. X    
  753. X    /* always process control-chars in the range 0x00..0x1f !!! */
  754. X
  755. X        if(svsp->dis_fnc)
  756. X        {
  757. X            if(svsp->lastchar && svsp->m_awm
  758. X               && (svsp->lastrow == svsp->row))
  759. X            {
  760. X                svsp->cur_offset++;
  761. X                svsp->col = 0;
  762. X                svsp->lastchar = 0;
  763. X                check_scroll(svsp);
  764. X            }
  765. X
  766. X            if(svsp->irm)
  767. X                ovbcopy((svsp->Crtat + svsp->cur_offset),
  768. X                    (svsp->Crtat + svsp->cur_offset) + 1,
  769. X                    (((svsp->maxcol)-1) - svsp->col)*CHR);
  770. X                    
  771. X            write_char(svsp, attrib, ch);
  772. X
  773. X            vt_selattr(svsp);
  774. X
  775. X            if(svsp->col >= ((svsp->maxcol)-1)
  776. X               && ch != 0x0a && ch != 0x0b && ch != 0x0c)
  777. X            {
  778. X                svsp->lastchar = 1;
  779. X                svsp->lastrow = svsp->row;
  780. X            }
  781. X            else if(ch == 0x0a || ch == 0x0b || ch == 0x0c)
  782. X            {
  783. X                svsp->cur_offset -= svsp->col;
  784. X                svsp->cur_offset += svsp->maxcol;
  785. X                svsp->col = 0;
  786. X                svsp->lastchar = 0;
  787. X            }
  788. X            else
  789. X            {
  790. X                svsp->cur_offset++;
  791. X                svsp->col++;
  792. X                svsp->lastchar = 0;
  793. X            }
  794. X        }            
  795. X        else
  796. X        {
  797. X            switch(ch)    
  798. X            {
  799. X                case 0x00:    /* NUL */
  800. X                case 0x01:    /* SOH */
  801. X                case 0x02:    /* STX */
  802. X                case 0x03:    /* ETX */
  803. X                case 0x04:    /* EOT */
  804. X                case 0x05:    /* ENQ */
  805. X                case 0x06:    /* ACK */
  806. X                    break;
  807. X                    
  808. X                case 0x07:    /* BEL */
  809. X                    if(svsp->bell_on)
  810. X                       sysbeep(PCVT_SYSBEEPF/1500, hz/4);
  811. X                    break;
  812. X                    
  813. X                case 0x08:    /* BS */
  814. X                    if(svsp->col > 0)
  815. X                    {
  816. X                        svsp->cur_offset--;
  817. X                        svsp->col--;
  818. X                    }
  819. X                    break;
  820. X                    
  821. X                case 0x09:    /* TAB */
  822. X                    while(svsp->col < ((svsp->maxcol)-1))
  823. X                    {
  824. X                        svsp->cur_offset++;
  825. X                        if(svsp->
  826. X                           tab_stops[++svsp->col])
  827. X                            break;
  828. X                    }
  829. X                    break;
  830. X                    
  831. X                case 0x0a:    /* LF */
  832. X                case 0x0b:    /* VT */
  833. X                case 0x0c:    /* FF */
  834. X                    if(svsp->lnm)
  835. X                    {
  836. X                        svsp->cur_offset -= svsp->col;
  837. X                        svsp->cur_offset +=
  838. X                            svsp->maxcol;
  839. X                        svsp->col = 0;
  840. X                    }
  841. X                    else
  842. X                    {
  843. X                        svsp->cur_offset +=
  844. X                            svsp->maxcol;
  845. X                    }
  846. X                    break;
  847. X                    
  848. X                case 0x0d:    /* CR */
  849. X                    svsp->cur_offset -= svsp->col;
  850. X                    svsp->col = 0;
  851. X                    break;
  852. X                    
  853. X                case 0x0e:    /* SO */
  854. X                    svsp->GL = svsp->G1;
  855. X                    break;
  856. X                    
  857. X                case 0x0f:    /* SI */
  858. X                    svsp->GL = svsp->G0;
  859. X                    break;
  860. X    
  861. X                case 0x10:    /* DLE */
  862. X                case 0x11:    /* DC1/XON */
  863. X                case 0x12:    /* DC2 */
  864. X                case 0x13:    /* DC3/XOFF */
  865. X                case 0x14:    /* DC4 */
  866. X                case 0x15:    /* NAK */
  867. X                case 0x16:    /* SYN */
  868. X                case 0x17:    /* ETB */        
  869. X                    break;
  870. X                    
  871. X                case 0x18:    /* CAN */
  872. X                    svsp->state = STATE_INIT;
  873. X                    clr_parms(svsp);
  874. X                    break;
  875. X                    
  876. X                case 0x19:    /* EM */
  877. X                    break;
  878. X                    
  879. X                case 0x1a:    /* SUB */
  880. X                    svsp->state = STATE_INIT;
  881. X                    clr_parms(svsp);
  882. X                    break;
  883. X                    
  884. X                case 0x1b:    /* ESC */
  885. X                    svsp->state = STATE_ESC;
  886. X                    clr_parms(svsp);
  887. X                    break;
  888. X                    
  889. X                case 0x1c:    /* FS */
  890. X                case 0x1d:    /* GS */
  891. X                case 0x1e:    /* RS */
  892. X                case 0x1f:    /* US */
  893. X                break;
  894. X            }
  895. X        }
  896. X    }
  897. X    else
  898. X    {
  899. X        
  900. X    /* char range 0x20...0xff processing depends on current state */
  901. X        
  902. X        switch(svsp->state)
  903. X        {
  904. X            case STATE_INIT:
  905. X                if(svsp->lastchar && svsp->m_awm &&
  906. X                   (svsp->lastrow == svsp->row))
  907. X                {
  908. X                    svsp->cur_offset++;
  909. X                    svsp->col = 0;
  910. X                    svsp->lastchar = 0;
  911. X                    check_scroll(svsp);
  912. X                }
  913. X
  914. X                if(svsp->irm)
  915. X                    ovbcopy((svsp->Crtat
  916. X                         + svsp->cur_offset),
  917. X                        (svsp->Crtat 
  918. X                         + svsp->cur_offset) + 1,
  919. X                        (((svsp->maxcol)-1)
  920. X                         - svsp->col) * CHR);
  921. X                    
  922. X                write_char(svsp, attrib, ch);
  923. X
  924. X                vt_selattr(svsp);
  925. X
  926. X                if(svsp->col >= ((svsp->maxcol)-1))
  927. X                {
  928. X                    svsp->lastchar = 1;
  929. X                    svsp->lastrow = svsp->row;
  930. X                }
  931. X                else
  932. X                {
  933. X                    svsp->lastchar = 0;
  934. X                    svsp->cur_offset++;
  935. X                    svsp->col++;
  936. X                }
  937. X                break;
  938. X
  939. X            case STATE_ESC:
  940. X                switch(ch)
  941. X                {
  942. X    
  943. X                    case '#':    /* ESC # family */
  944. X                        svsp->state = STATE_HASH;
  945. X                        break;
  946. X    
  947. X                    case '&':    /* ESC & family (HP) */
  948. X                        if(svsp->vt_pure_mode ==
  949. X                           M_HPVT)
  950. X                        {
  951. X                            svsp->state =
  952. X                                STATE_AMPSND;
  953. X                            svsp->hp_state =
  954. X                                SHP_INIT;
  955. X                        }
  956. X                        else
  957. X                            svsp->state =
  958. X                                STATE_INIT;
  959. X                        break;
  960. X    
  961. X                    case '(':    /* ESC ( family */
  962. X                        svsp->state = STATE_BROPN;
  963. X                        break;
  964. X    
  965. X                    case ')':    /* ESC ) family */
  966. X                        svsp->state = STATE_BRCLO;
  967. X                        break;
  968. X    
  969. X                    case '*':    /* ESC * family */
  970. X                        svsp->state = STATE_STAR;
  971. X                        break;
  972. X    
  973. X                    case '+':    /* ESC + family */
  974. X                        svsp->state = STATE_PLUS;
  975. X                        break;
  976. X    
  977. X                    case '-':    /* ESC - family */
  978. X                        svsp->state = STATE_MINUS;
  979. X                        break;
  980. X    
  981. X                    case '.':    /* ESC . family */
  982. X                        svsp->state = STATE_DOT;
  983. X                        break;
  984. X    
  985. X                    case '/':    /* ESC / family */
  986. X                        svsp->state = STATE_SLASH;
  987. X                        break;
  988. X    
  989. X                    case '7':    /* SAVE CURSOR */
  990. X                        vt_sc(svsp);
  991. X                        svsp->state = STATE_INIT;
  992. X                        break;
  993. X    
  994. X                    case '8':    /* RESTORE CURSOR */
  995. X                        vt_rc(svsp);
  996. X                        svsp->state = STATE_INIT;
  997. X                        break;
  998. X    
  999. X                    case '=': /* keypad application mode */
  1000. X#if !PCVT_INHIBIT_NUMLOCK
  1001. X                        vt_keyappl(svsp);
  1002. X#endif
  1003. X                        svsp->state = STATE_INIT;
  1004. X                        break;
  1005. X    
  1006. X                    case '>': /* keypad numeric mode */
  1007. X#if !PCVT_INHIBIT_NUMLOCK
  1008. X                        vt_keynum(svsp);
  1009. X#endif
  1010. X                        svsp->state = STATE_INIT;
  1011. X                        break;
  1012. X    
  1013. X                    case 'D':    /* INDEX */
  1014. X                        vt_ind(svsp);
  1015. X                        svsp->state = STATE_INIT;
  1016. X                        break;
  1017. X    
  1018. X                    case 'E':    /* NEXT LINE */
  1019. X                        vt_nel(svsp);
  1020. X                        svsp->state = STATE_INIT;
  1021. X                        break;
  1022. X    
  1023. X                    case 'H': /* set TAB at current col */
  1024. X                        svsp->tab_stops[svsp->col] = 1;
  1025. X                        svsp->state = STATE_INIT;
  1026. X                        break;
  1027. X    
  1028. X                    case 'M':    /* REVERSE INDEX */
  1029. X                        vt_ri(svsp);
  1030. X                        svsp->state = STATE_INIT;
  1031. X                        break;
  1032. X     
  1033. X                    case 'N':    /* SINGLE SHIFT G2 */
  1034. X                        svsp->ss2 = 1;
  1035. X                        svsp->state = STATE_INIT;
  1036. X                        break;
  1037. X     
  1038. X                    case 'O':    /* SINGLE SHIFT G3 */
  1039. X                        svsp->ss3 = 1;
  1040. X                        svsp->state = STATE_INIT;
  1041. X                        break;
  1042. X
  1043. X                    case 'P':    /* DCS detected */
  1044. X                        svsp->dcs_state = DCS_INIT;
  1045. X                        svsp->state = STATE_DCS;
  1046. X                        break;
  1047. X
  1048. X                    case 'Z': /* What are you = ESC [ c */
  1049. X                        vt_da(svsp);
  1050. X                        svsp->state = STATE_INIT;
  1051. X                        break;
  1052. X    
  1053. X                    case '[':    /* CSI detected */
  1054. X                        clr_parms(svsp);
  1055. X                        svsp->state = STATE_CSI;
  1056. X                        break;
  1057. X    
  1058. X                    case '\\':    /* String Terminator */
  1059. X                        svsp->state = STATE_INIT;
  1060. X                        break;
  1061. X     
  1062. X                    case 'c':    /* hard reset */
  1063. X                        vt_ris(svsp);
  1064. X                        svsp->state = STATE_INIT;
  1065. X                        break;
  1066. X    
  1067. X#if PCVT_SETCOLOR
  1068. X                    case 'd':    /* set color sgr */
  1069. X                        if(color)
  1070. X                        {
  1071. X                            /* set shiftwidth=4 */
  1072. X                            sgr_tab_color
  1073. X                                [svsp->
  1074. X                                 vtsgr] =
  1075. X                                 svsp->c_attr
  1076. X                                 >> 8;
  1077. X                            user_attr =
  1078. X                                sgr_tab_color
  1079. X                                [0] << 8;
  1080. X                        }
  1081. X                        svsp->state = STATE_INIT;
  1082. X                        break;
  1083. X#endif /* PCVT_SETCOLOR */
  1084. X                    case 'n': /* Lock Shift G2 -> GL */
  1085. X                        svsp->GL = svsp->G2;
  1086. X                        svsp->state = STATE_INIT;
  1087. X                        break;
  1088. X    
  1089. X                    case 'o': /* Lock Shift G3 -> GL */
  1090. X                        svsp->GL = svsp->G3;
  1091. X                        svsp->state = STATE_INIT;
  1092. X                        break;
  1093. X    
  1094. X                    case '}': /* Lock Shift G2 -> GR */
  1095. X                        svsp->GR = svsp->G2;
  1096. X                        svsp->state = STATE_INIT;
  1097. X                        break;
  1098. X    
  1099. X                    case '|': /* Lock Shift G3 -> GR */
  1100. X                        svsp->GR = svsp->G3;
  1101. X                        svsp->state = STATE_INIT;
  1102. X                        break;
  1103. X    
  1104. X                    case '~': /* Lock Shift G1 -> GR */
  1105. X                        svsp->GR = svsp->G1;
  1106. X                        svsp->state = STATE_INIT;
  1107. X                        break;
  1108. X    
  1109. X                    default:
  1110. X                        svsp->state = STATE_INIT;
  1111. X                        break;
  1112. X                }
  1113. X                break;
  1114. X    
  1115. X            case STATE_HASH:
  1116. X                switch(ch)
  1117. X                {
  1118. X                    case '3': /* double height top half */
  1119. X                    case '4': /*double height bottom half*/
  1120. X                    case '5': /*single width sngle height*/
  1121. X                    case '6': /*double width sngle height*/
  1122. X                        svsp->state = STATE_INIT;
  1123. X                        break;
  1124. X                        
  1125. X                    case '8': /* fill sceen with 'E's */
  1126. X                        vt_aln(svsp);
  1127. X                        svsp->state = STATE_INIT;
  1128. X                        break;
  1129. X                        
  1130. X                    default: /* anything else */
  1131. X                        svsp->state = STATE_INIT;
  1132. X                        break;
  1133. X                }
  1134. X                break;
  1135. X                
  1136. X            case STATE_BROPN:    /* designate G0 */
  1137. X            case STATE_BRCLO:    /* designate G1 */
  1138. X            case STATE_STAR:    /* designate G2 */
  1139. X            case STATE_PLUS:    /* designate G3 */
  1140. X            case STATE_MINUS:    /* designate G1 (96) */
  1141. X            case STATE_DOT:        /* designate G2 (96) */
  1142. X            case STATE_SLASH:    /* designate G3 (96) */
  1143. X                svsp->which[svsp->whichi++] = ch;
  1144. X                if(ch >= 0x20 && ch <= 0x2f
  1145. X                   && svsp->whichi <= 2)
  1146. X                    break;
  1147. X                else if(ch >=0x30 && ch <= 0x7e)
  1148. X                {
  1149. X                    svsp->which[svsp->whichi] = '\0';
  1150. X                    vt_designate(svsp);
  1151. X                }
  1152. X                svsp->whichi = 0;
  1153. X                svsp->state = STATE_INIT;
  1154. X                break;
  1155. X
  1156. X            case STATE_CSIQM:    /* DEC private modes */
  1157. X                switch(ch)
  1158. X                {
  1159. X                    case '0':
  1160. X                    case '1':
  1161. X                    case '2':
  1162. X                    case '3':
  1163. X                    case '4':
  1164. X                    case '5':
  1165. X                    case '6':
  1166. X                    case '7':
  1167. X                    case '8':
  1168. X                    case '9':    /* parameters */
  1169. X                        svsp->parms[svsp->parmi] *= 10;
  1170. X                        svsp->parms[svsp->parmi] +=
  1171. X                            (ch -'0');
  1172. X                        break;
  1173. X    
  1174. X                    case ';':    /* next parameter */
  1175. X                        svsp->parmi = 
  1176. X                         (svsp->parmi+1 < MAXPARMS) ?
  1177. X                         svsp->parmi+1 : svsp->parmi;
  1178. X                        break;
  1179. X    
  1180. X                    case 'h':    /* set mode */
  1181. X                        vt_set_dec_priv_qm(svsp);
  1182. X                        svsp->state = STATE_INIT;
  1183. X                        break;
  1184. X    
  1185. X                    case 'l':    /* reset mode */
  1186. X                        vt_reset_dec_priv_qm(svsp);
  1187. X                        svsp->state = STATE_INIT;
  1188. X                        break;
  1189. X
  1190. X                    case 'n':    /* Reports */
  1191. X                        vt_dsr(svsp);
  1192. X                        svsp->state = STATE_INIT;
  1193. X                        break;
  1194. X
  1195. X                    case 'K': /* selective erase in line */
  1196. X                        vt_sel(svsp);
  1197. X                        svsp->state = STATE_INIT;
  1198. X                        break;
  1199. X
  1200. X                    case 'J':/*selective erase in display*/
  1201. X                        vt_sed(svsp);
  1202. X                        svsp->state = STATE_INIT;
  1203. X                        break;
  1204. X
  1205. X                    default:
  1206. X                        svsp->state = STATE_INIT;
  1207. X                        break;
  1208. X
  1209. X                }
  1210. X                break;
  1211. X                
  1212. X            case STATE_CSI:
  1213. X                switch(ch)
  1214. X                {
  1215. X                    case '0':
  1216. X                    case '1':
  1217. X                    case '2':
  1218. X                    case '3':
  1219. X                    case '4':
  1220. X                    case '5':
  1221. X                    case '6':
  1222. X                    case '7':
  1223. X                    case '8':
  1224. X                    case '9':    /* parameters */
  1225. X                        svsp->parms[svsp->parmi] *= 10;
  1226. X                        svsp->parms[svsp->parmi] +=
  1227. X                            (ch -'0');
  1228. X                        break;
  1229. X    
  1230. X                    case ';':    /* next parameter */
  1231. X                        svsp->parmi = 
  1232. X                         (svsp->parmi+1 < MAXPARMS) ?
  1233. X                         svsp->parmi+1 : svsp->parmi;
  1234. X                        break;
  1235. X    
  1236. X                    case '?':    /* ESC [ ? family */
  1237. X                        svsp->state = STATE_CSIQM;
  1238. X                        break;
  1239. X                        
  1240. X                    case '@':    /* insert char */
  1241. X                        vt_ic(svsp);
  1242. X                        svsp->state = STATE_INIT;
  1243. X                        break;
  1244. X    
  1245. X                    case '"': /* select char attribute */
  1246. X                        svsp->state = STATE_SCA;
  1247. X                        break;
  1248. X    
  1249. X                    case '!': /* soft terminal reset */
  1250. X                        svsp->state = STATE_STR;
  1251. X                        break;
  1252. X    
  1253. X                    case 'A':    /* cursor up */
  1254. X                        vt_cuu(svsp);
  1255. X                        svsp->state = STATE_INIT;
  1256. X                        break;
  1257. X    
  1258. X                    case 'B':    /* cursor down */
  1259. X                        vt_cud(svsp);
  1260. X                        svsp->state = STATE_INIT;
  1261. X                        break;
  1262. X    
  1263. X                    case 'C':    /* cursor forward */
  1264. X                        vt_cuf(svsp);
  1265. X                        svsp->state = STATE_INIT;
  1266. X                        break;
  1267. X    
  1268. X                    case 'D':    /* cursor backward */
  1269. X                        vt_cub(svsp);
  1270. X                        svsp->state = STATE_INIT;
  1271. X                        break;
  1272. X    
  1273. X                    case 'H': /* direct cursor addressing*/
  1274. X                        vt_curadr(svsp);
  1275. X                        svsp->state = STATE_INIT;
  1276. X                        break;
  1277. X    
  1278. X                    case 'J':    /* erase screen */
  1279. X                        vt_clreos(svsp);
  1280. X                        svsp->state = STATE_INIT;
  1281. X                        break;
  1282. X    
  1283. X                    case 'K':    /* erase line */
  1284. X                        vt_clreol(svsp);
  1285. X                        svsp->state = STATE_INIT;
  1286. X                        break;
  1287. X    
  1288. X                    case 'L':    /* insert line */
  1289. X                        vt_il(svsp);
  1290. X                        svsp->state = STATE_INIT;
  1291. X                        break;
  1292. X    
  1293. X                    case 'M':    /* delete line */
  1294. X                        vt_dl(svsp);
  1295. X                        svsp->state = STATE_INIT;
  1296. X                        break;
  1297. X    
  1298. X                    case 'P':    /* delete character */
  1299. X                        vt_dch(svsp);
  1300. X                        svsp->state = STATE_INIT;
  1301. X                        break;
  1302. X    
  1303. X                    case 'S':    /* scroll up */
  1304. X                        vt_su(svsp);
  1305. X                        svsp->state = STATE_INIT;
  1306. X                        break;
  1307. X    
  1308. X                    case 'T':    /* scroll down */
  1309. X                        vt_sd(svsp);
  1310. X                        svsp->state = STATE_INIT;
  1311. X                        break;
  1312. X    
  1313. X                    case 'X':    /* erase character */
  1314. X                        vt_ech(svsp);
  1315. X                        svsp->state = STATE_INIT;
  1316. X                        break;
  1317. X
  1318. X                    case 'c':    /* device attributes */
  1319. X                        vt_da(svsp); 
  1320. X                        svsp->state = STATE_INIT;
  1321. X                        break;
  1322. X    
  1323. X                    case 'f': /* direct cursor addressing*/
  1324. X                        vt_curadr(svsp);
  1325. X                        svsp->state = STATE_INIT;
  1326. X                        break;
  1327. X    
  1328. X                    case 'g':    /* clear tabs */
  1329. X                        vt_clrtab(svsp);
  1330. X                        svsp->state = STATE_INIT;
  1331. X                        break;
  1332. X    
  1333. X                    case 'h':    /* set mode(s) */
  1334. X                        vt_set_ansi(svsp);
  1335. X                        svsp->state = STATE_INIT;
  1336. X                        break;
  1337. X    
  1338. X                    case 'i':    /* media copy */
  1339. X                        vt_mc(svsp);
  1340. X                        svsp->state = STATE_INIT;
  1341. X                        break;
  1342. X    
  1343. X                    case 'l':    /* reset mode(s) */
  1344. X                        vt_reset_ansi(svsp);
  1345. X                        svsp->state = STATE_INIT;
  1346. X                        break;
  1347. X    
  1348. X                    case 'm': /* select graphic rendition*/
  1349. X                        vt_sgr(svsp);
  1350. X                        svsp->state = STATE_INIT;
  1351. X                        break;
  1352. X    
  1353. X                    case 'n':    /* reports */
  1354. X                        vt_dsr(svsp);
  1355. X                        svsp->state = STATE_INIT;
  1356. X                        break;
  1357. X    
  1358. X                    case 'r': /* set scrolling region */
  1359. X                        vt_stbm(svsp);
  1360. X                        svsp->state = STATE_INIT;
  1361. X                        break;
  1362. X    
  1363. X                    case 'x': /*request/report parameters*/
  1364. X                        vt_reqtparm(svsp);
  1365. X                        svsp->state = STATE_INIT;
  1366. X                        break;
  1367. X    
  1368. X                    case 'y': /* invoke selftest(s) */
  1369. X                        vt_tst(svsp);
  1370. X                        svsp->state = STATE_INIT;
  1371. X                        break;
  1372. X    
  1373. X                    default:
  1374. X                        svsp->state = STATE_INIT;
  1375. X                        break;
  1376. X                }
  1377. X                break;
  1378. X
  1379. X            case STATE_AMPSND:
  1380. X                hp_entry(ch,svsp);
  1381. X                break;
  1382. X
  1383. X            case STATE_DCS:
  1384. X                vt_dcsentry(ch,svsp);
  1385. X                break;
  1386. X
  1387. X            case STATE_SCA:
  1388. X                switch(ch)
  1389. X                {
  1390. X                    case 'q':
  1391. X                        vt_sca(svsp);
  1392. X                        svsp->state = STATE_INIT;
  1393. X                        break;
  1394. X                        
  1395. X                    default:
  1396. X                        svsp->state = STATE_INIT;
  1397. X                        break;
  1398. X                }
  1399. X                break;
  1400. X
  1401. X            case STATE_STR:
  1402. X                switch(ch)
  1403. X                {
  1404. X                    case 'p': /* soft terminal reset */
  1405. X                        vt_str(svsp);
  1406. X                        svsp->state = STATE_INIT;
  1407. X                        break;
  1408. X
  1409. X                    default:
  1410. X                        svsp->state = STATE_INIT;
  1411. X                        break;
  1412. X                }
  1413. X                break;
  1414. X
  1415. X            default:        /* failsafe */
  1416. X                svsp->state = STATE_INIT;
  1417. X                break;
  1418. X
  1419. X        }
  1420. X    }
  1421. X
  1422. X    check_scroll(svsp);                /* check scroll up */
  1423. X
  1424. X    svsp->row = (((svsp->Crtat + svsp->cur_offset) - svsp->Crtat)
  1425. X             / svsp->maxcol);    /* current row update */
  1426. X
  1427. X    if(svsp == vsp)            /* on current displayed page ?    */
  1428. X        cursor_pos_valid = 1;    /* position is valid now */
  1429. X
  1430. X    /* take care of last character on line behaviour */
  1431. X    
  1432. X    if(svsp->lastchar && (svsp->col < ((svsp->maxcol)-1)))
  1433. X        svsp->lastchar = 0;
  1434. X}
  1435. X
  1436. X/*---------------------------------------------------------------------------*
  1437. X *    do character set transformation and write to display memory
  1438. X *---------------------------------------------------------------------------*/
  1439. Xstatic void
  1440. Xwrite_char(struct video_state *svsp, U_char kernel, U_char ch)
  1441. X{
  1442. X    register u_short result;
  1443. X    register u_short *gsave;    /* gcc warning: "may be used
  1444. X                     * uninitialized" = don't care ! */
  1445. X    if(kernel)
  1446. X        result = kern_attr;
  1447. X    else
  1448. X        result = svsp->c_attr;
  1449. X
  1450. X    if(svsp->ss2)                /* single shift G2 -> GL ? */
  1451. X    {
  1452. X        gsave = svsp->GL;        /* save GL */
  1453. X        svsp->GL = svsp->G2;        /* G2 -> GL */
  1454. X    }
  1455. X    else if(svsp->ss3)            /* single shift G3 -> GL ? */
  1456. X    {
  1457. X        gsave = svsp->GL;        /* save GL */
  1458. X        svsp->GL = svsp->G3;        /* G3 -> GL */
  1459. X    }
  1460. X    
  1461. X    if(ch >= 0xA0)                /* use GR if ch >= 0xA0 */
  1462. X        result |= svsp->GR[ch-0xA0];
  1463. X
  1464. X    else if(ch >= 0x80)            /* display controls C1 */
  1465. X    {
  1466. X        if(vgacs[svsp->vga_charset].secondloaded)
  1467. X        {
  1468. X            result |= ((ch-0x60) | CSH);
  1469. X        }
  1470. X        else    /* use normal ibm charset for control display */
  1471. X        {
  1472. X            result |= ch;
  1473. X        }
  1474. X    }
  1475. X
  1476. X    else if (ch >= 0x20)            /* use GL if ch >= 0x20 */
  1477. X        result |= svsp->GL[ch-0x20];
  1478. X
  1479. X    else                    /* display controls C0 */
  1480. X    {
  1481. X        if(vgacs[svsp->vga_charset].secondloaded)
  1482. X        {
  1483. X            result |= (ch | CSH);
  1484. X        }
  1485. X        else    /* use normal ibm charset for control display */
  1486. X        {
  1487. X            result |= ch;
  1488. X        }
  1489. X    }
  1490. X    
  1491. X    *(svsp->Crtat + svsp->cur_offset) = result;  /* write char to screen */
  1492. X
  1493. X    if(svsp->ss2)                /* was single shift G2->GL ? */
  1494. X    {
  1495. X        svsp->GL = gsave;        /* restore GL */
  1496. X        svsp->ss2 = 0;            /* reset flag */
  1497. X    }
  1498. X    else if(svsp->ss3)            /* was single shift G3->GL ? */
  1499. X    {
  1500. X        svsp->GL = gsave;        /* restore GL */
  1501. X        svsp->ss3 = 0;            /* reset flag */
  1502. X    }
  1503. X    
  1504. X}
  1505. X
  1506. X/*---------------------------------------------------------------------------*
  1507. X *    this is the absolute cold initialization of the emulator
  1508. X *---------------------------------------------------------------------------*/
  1509. Xstatic void
  1510. Xvt_coldinit(void)
  1511. X{
  1512. X    extern u_short csd_ascii[];        /* pcvt_tbl.h */
  1513. X    extern u_short csd_supplemental[];
  1514. X    
  1515. X    u_short volatile *cp = Crtat + (CGA_BUF-MONO_BUF)/CHR;  /* gcc 2.4.5 */
  1516. X    u_short was;
  1517. X    int nscr, charset;
  1518. X    int equipment;
  1519. X    u_short *SaveCrtat = Crtat;
  1520. X
  1521. X    do_initialization = 0;
  1522. X    
  1523. X    equipment = ((rtcin(RTC_EQUIPMENT)) >> 4) & 0x03;
  1524. X    
  1525. X    switch(equipment)
  1526. X    {
  1527. X        default:
  1528. X        case EQ_EGAVGA:
  1529. X
  1530. X            /* set memory start to CGA == B8000 */
  1531. X            
  1532. X            Crtat = Crtat + (CGA_BUF-MONO_BUF)/CHR;
  1533. X        
  1534. X            /* find out, what monitor is connected */
  1535. X            
  1536. X            was = *cp;
  1537. X            *cp = (u_short) 0xA55A;
  1538. X            if (*cp != 0xA55A)
  1539. X            {
  1540. X                addr_6845 = MONO_BASE;
  1541. X                color = 0;
  1542. X            }
  1543. X            else
  1544. X            {
  1545. X                *cp = was;
  1546. X                addr_6845 = CGA_BASE;
  1547. X                color = 1;
  1548. X            }
  1549. X
  1550. X            if(vga_test())
  1551. X            {
  1552. X                adaptor_type = VGA_ADAPTOR;
  1553. X                totalfonts = 8;
  1554. X                if(color == 0)
  1555. X                {
  1556. X
  1557. X                    /*
  1558. X                     * if a mono monitor is
  1559. X                     * attached to a vga, it comes
  1560. X                     * up with a mda emulation.
  1561. X                     */
  1562. X
  1563. X                    /*
  1564. X                     * program sequencer to access
  1565. X                     * video ram
  1566. X                     */
  1567. X
  1568. X                    /* synchronous reset */
  1569. X                    outb(TS_INDEX, TS_SYNCRESET);
  1570. X                    outb(TS_DATA, 0x01);
  1571. X
  1572. X                    /* write to map 0 & 1 */
  1573. X                    outb(TS_INDEX, TS_WRPLMASK);
  1574. X                    outb(TS_DATA, 0x03);
  1575. X                
  1576. X                    /* odd-even addressing */
  1577. X                    outb(TS_INDEX, TS_MEMMODE);
  1578. X                    outb(TS_DATA, 0x03);
  1579. X                
  1580. X                    /* clear synchronous reset */
  1581. X                    outb(TS_INDEX, TS_SYNCRESET);
  1582. X                    outb(TS_DATA, 0x03);
  1583. X
  1584. X                    /*
  1585. X                     * program graphics controller
  1586. X                     * to access character
  1587. X                     * generator
  1588. X                     */
  1589. X
  1590. X                    /* select map 0 for cpu reads */
  1591. X                    outb(GDC_INDEX, GDC_RDPLANESEL);
  1592. X                    outb(GDC_DATA, 0x00);
  1593. X                
  1594. X                    /* enable odd-even addressing */
  1595. X                    outb(GDC_INDEX, GDC_MODE);
  1596. X                    outb(GDC_DATA, 0x10);
  1597. X                
  1598. X                    /* map starts at 0xb000 */
  1599. X                    outb(GDC_INDEX, GDC_MISC);
  1600. X                    outb(GDC_DATA, 0x0a);
  1601. X
  1602. X                    Crtat = SaveCrtat; /* mono start */
  1603. X                }
  1604. X                /* find out which chipset we are running on */
  1605. X                vga_type = vga_chipset();
  1606. X            }
  1607. X            else
  1608. X            {
  1609. X                if(color)
  1610. X                {
  1611. X                    adaptor_type = EGA_ADAPTOR;
  1612. X                    totalfonts = 4;
  1613. X                }
  1614. X                else
  1615. X                {    /* mono ega -> MDA .... */
  1616. X                    /* NOT TESTED !!!!!!!!! */
  1617. X                    addr_6845 = MONO_BASE;
  1618. X                    adaptor_type = MDA_ADAPTOR;
  1619. X                    totalfonts = 0;
  1620. X                    Crtat = SaveCrtat;
  1621. X                    break;
  1622. X                }
  1623. X                    
  1624. X            }
  1625. X    
  1626. X            /* decouple vga charsets and intensity */
  1627. X            set_2ndcharset();
  1628. X
  1629. X            break;
  1630. X
  1631. X        case EQ_40COLOR:
  1632. X        case EQ_80COLOR:
  1633. X            Crtat = Crtat + (CGA_BUF-MONO_BUF)/CHR;
  1634. X            addr_6845 = CGA_BASE;
  1635. X            adaptor_type = CGA_ADAPTOR;
  1636. X            totalfonts = 0;
  1637. X            break;
  1638. X
  1639. X        case EQ_80MONO:
  1640. X            addr_6845 = MONO_BASE;
  1641. X            adaptor_type = MDA_ADAPTOR;
  1642. X            totalfonts = 0;            
  1643. X            break;
  1644. X    }
  1645. X
  1646. X    /* establish default colors */
  1647. X    
  1648. X    if(color)
  1649. X    {
  1650. X        kern_attr = (COLOR_KERNEL_FG | COLOR_KERNEL_BG) << 8;
  1651. X        user_attr = sgr_tab_color[0] << 8;
  1652. X    }
  1653. X    else
  1654. X    {
  1655. X        kern_attr = (MONO_KERNEL_FG | MONO_KERNEL_BG) << 8;
  1656. X        if(adaptor_type == MDA_ADAPTOR)
  1657. X            user_attr = sgr_tab_imono[0] << 8;
  1658. X        else
  1659. X            user_attr = sgr_tab_mono[0] << 8;        
  1660. X    }
  1661. X
  1662. X    totalscreens = 1;    /* for now until malloced */
  1663. X    
  1664. X    for(nscr = 0; nscr < PCVT_NSCREENS; nscr++)
  1665. X    {
  1666. X        vs[nscr].Crtat = Crtat;        /* all same until malloc'ed */
  1667. X        vs[nscr].Memory = Crtat;    /* until malloc'ed */
  1668. X        vs[nscr].cur_offset = 0;    /* cursor offset */
  1669. X        vs[nscr].c_attr = user_attr;    /* non-kernel attributes */
  1670. X        vs[nscr].bell_on = 1;        /* enable bell */
  1671. X        vs[nscr].sevenbit = 0;        /* set to 8-bit path */
  1672. X        vs[nscr].dis_fnc = 0;        /* disable display functions */
  1673. X        vs[nscr].transparent = 0;    /* disable internal tranparency */
  1674. X        vs[nscr].lastchar = 0;        /* VTxxx behaviour of last
  1675. X                         * char on line */
  1676. X        vs[nscr].report_chars = NULL;    /* VTxxx reports init */
  1677. X        vs[nscr].report_count = 0;    /* VTxxx reports init */
  1678. X        vs[nscr].state = STATE_INIT;    /* main state machine init */
  1679. X        vs[nscr].m_awm = 1;        /* enable auto wrap mode */
  1680. X        vs[nscr].m_om = 0;        /* origin mode = absolute */
  1681. X        vs[nscr].sc_flag = 0;        /* init saved cursor flag */
  1682. X        vs[nscr].which_fkl = SYS_FKL;  /* display system fkey-labels */
  1683. X        vs[nscr].labels_on = 1;        /* if in HP-mode, display
  1684. X                         * fkey-labels */
  1685. X        vs[nscr].attribute = 0;        /* HP mode init */
  1686. X        vs[nscr].key = 0;        /* HP mode init */
  1687. X        vs[nscr].l_len = 0;        /* HP mode init */
  1688. X        vs[nscr].s_len = 0;        /* HP mode init */
  1689. X        vs[nscr].m_len = 0;        /* HP mode init */
  1690. X        vs[nscr].i = 0;            /* HP mode init */
  1691. X        vs[nscr].vt_pure_mode = M_PUREVT; /* initial mode: pure VT220*/
  1692. X        vs[nscr].vga_charset = CH_SET0;    /* use bios default charset */
  1693. X
  1694. X#if PCVT_24LINESDEF                /* true compatibility */
  1695. X        vs[nscr].screen_rows = 24;    /* default 24 rows on screen */
  1696. X#else                        /* full screen */
  1697. X        vs[nscr].screen_rows = 25;    /* default 25 rows on screen */
  1698. X#endif /* PCVT_24LINESDEF */
  1699. X
  1700. X        vs[nscr].screen_rowsize = 25;    /* default 25 rows on screen */
  1701. X        vs[nscr].scrr_beg = 0;        /* scrolling region begin row*/
  1702. X        vs[nscr].scrr_len=vs[nscr].screen_rows-1; /* scrolling region
  1703. X                               * end */
  1704. X        if(vga_family == VGA_F_TRI)
  1705. X            vs[nscr].cursor_start = 1; /* cursor upper scanline */
  1706. X        else
  1707. X            vs[nscr].cursor_start = 0; /* cursor upper scanline */
  1708. X        vs[nscr].cursor_end = 15;    /* cursor lower scanline */
  1709. X        vs[nscr].cursor_on = 1;        /* cursor is on */
  1710. X        vs[nscr].ckm = 1;        /* normal cursor key mode */
  1711. X        vs[nscr].irm = 0;        /* replace mode */
  1712. X        vs[nscr].lnm = 0;        /* CR only */
  1713. X        vs[nscr].selchar = 0;        /* selective attribute off */
  1714. X        vs[nscr].G0 = csd_ascii;    /* G0 = ascii    */
  1715. X        vs[nscr].G1 = csd_ascii;    /* G1 = ascii    */
  1716. X        vs[nscr].G2 = csd_supplemental;    /* G2 = supplemental */
  1717. X        vs[nscr].G3 = csd_supplemental;    /* G3 = supplemental */
  1718. X        vs[nscr].GL = vs[nscr].G0;    /* GL = G0 */
  1719. X        vs[nscr].GR = vs[nscr].G2;    /* GR = G2 */
  1720. X        vs[nscr].whichi = 0;        /* char set designate init */
  1721. X        vs[nscr].which[0] = '\0';    /* char set designate init */
  1722. X        vs[nscr].hp_state = SHP_INIT;    /* init HP mode state machine*/
  1723. X        vs[nscr].dcs_state = DCS_INIT; /* init DCS mode state machine*/
  1724. X        vs[nscr].ss2 = 0;        /* init single shift 2 */
  1725. X        vs[nscr].ss3 = 0;        /* init single shift 3 */
  1726. X        vs[nscr].maxcol = SCR_COL80;    /* 80 columns now (you MUST!!!
  1727. X                         * start with 80!)
  1728. X                         * see et4000_col() for
  1729. X                         * reason ... */
  1730. X        vs[nscr].wd132col = 0;        /* help good old WD .. */
  1731. X        vs[nscr].scroll_lock = 0;    /* scrollock off */
  1732. X#if PCVT_INHIBIT_NUMLOCK
  1733. X        vs[nscr].num_lock = 0;         /* numlock off */
  1734. X#else
  1735. X        vs[nscr].num_lock = 1;        /* numlock on */
  1736. X#endif
  1737. X        vs[nscr].caps_lock = 0;        /* capslock off */
  1738. X        vs[nscr].shift_lock = 0;    /* shiftlock off */
  1739. X
  1740. X#if PCVT_24LINESDEF                /* true compatibility */
  1741. X        vs[nscr].force24 = 1;        /* force 24 lines */
  1742. X#else                        /* maximum screen size */
  1743. X        vs[nscr].force24 = 0;        /* no 24 lines force yet */
  1744. X#endif /* PCVT_24LINESDEF */
  1745. X
  1746. X        vt_clearudk(&(vs[nscr]));    /* clear vt220 udk's */
  1747. X
  1748. X        vt_str(&vs[nscr]);        /* init emulator */
  1749. X
  1750. X        if(nscr == 0)
  1751. X        {
  1752. X            fillw(user_attr | ' ',
  1753. X                vs[nscr].Crtat,
  1754. X                vs[nscr].maxcol * vs[nscr].screen_rowsize);
  1755. X        }
  1756. X
  1757. X#if PCVT_USL_VT_COMPAT
  1758. X        vs[nscr].smode.mode = VT_AUTO;
  1759. X        vs[nscr].smode.relsig = vs[nscr].smode.acqsig =
  1760. X            vs[nscr].smode.frsig = 0;
  1761. X        vs[nscr].proc = 0;
  1762. X        vs[nscr].pid = vs[nscr].vt_status = 0;
  1763. X#endif /* PCVT_USL_VT_COMPAT */
  1764. X
  1765. X    }
  1766. X
  1767. X     for(charset = 0;charset < NVGAFONTS;charset++)
  1768. X    {
  1769. X        vgacs[charset].loaded = 0;        /* not populated yet */
  1770. X        vgacs[charset].secondloaded = 0;    /* not populated yet */
  1771. X        switch(adaptor_type)
  1772. X        {
  1773. X            case VGA_ADAPTOR:
  1774. X
  1775. X                /*
  1776. X                 * for a VGA, do not assume any
  1777. X                 * constant - instead, read the actual
  1778. X                 * values. This avoid problems with
  1779. X                 * LCD displays that apparently happen
  1780. X                 * to use font matrices up to 19
  1781. X                 * scan lines and 475 scan lines 
  1782. X                 * total in order to make use of the
  1783. X                 * whole screen area
  1784. X                 */
  1785. X
  1786. X                outb(addr_6845, CRTC_VDE);
  1787. X                vgacs[charset].scr_scanlines = 
  1788. X                    inb(addr_6845 + 1);
  1789. X                outb(addr_6845, CRTC_MAXROW);
  1790. X                vgacs[charset].char_scanlines =
  1791. X                    inb(addr_6845 + 1);
  1792. X                break;
  1793. X
  1794. X            case EGA_ADAPTOR:
  1795. X                /* 0x5D for 25 lines */
  1796. X                vgacs[charset].scr_scanlines = 0x5D;
  1797. X                /* 0x4D for 25 lines */
  1798. X                vgacs[charset].char_scanlines = 0x4D;
  1799. X                break;
  1800. X
  1801. X            case CGA_ADAPTOR:
  1802. X            case MDA_ADAPTOR:
  1803. X            default:
  1804. X                /* These shouldn't be used for CGA/MDA */
  1805. X                vgacs[charset].scr_scanlines = 0;
  1806. X                vgacs[charset].char_scanlines = 0;
  1807. X                break;
  1808. X        }
  1809. X        vgacs[charset].screen_size = SIZ_25ROWS; /* set screen size */
  1810. X     }
  1811. X
  1812. X     vgacs[0].loaded = 1; /* The BIOS loaded this at boot */
  1813. X
  1814. X    /* set cursor for first screen */
  1815. X    
  1816. X    outb(addr_6845,CRTC_CURSTART);    /* cursor start reg */
  1817. X    outb(addr_6845+1,vs[0].cursor_start);    
  1818. X    outb(addr_6845,CRTC_CUREND);    /* cursor end reg */
  1819. X    outb(addr_6845+1,vs[0].cursor_end);
  1820. X
  1821. X    /* this is to satisfy ddb */
  1822. X    
  1823. X    if(!keyboard_is_initialized)
  1824. X        kbd_code_init1();
  1825. X
  1826. X    /* update keyboard led's */
  1827. X    
  1828. X    update_led();
  1829. X}
  1830. X
  1831. X/*---------------------------------------------------------------------------*
  1832. X *    get kernel memory for virtual screens
  1833. X *
  1834. X *    CAUTION: depends on "can_do_132col" being set properly, or
  1835. X *    depends on vga_type() being run before calling this !!!
  1836. X *
  1837. X *---------------------------------------------------------------------------*/
  1838. Xvoid
  1839. Xvt_coldmalloc(void)
  1840. X{
  1841. X    int nscr;
  1842. X    int screen_max_size;
  1843. X
  1844. X    switch(adaptor_type)
  1845. X    {
  1846. X        default:
  1847. X        case MDA_ADAPTOR:
  1848. X        case CGA_ADAPTOR:
  1849. X            screen_max_size = MAXROW_MDACGA * MAXCOL_MDACGA * CHR;
  1850. X            break;
  1851. X
  1852. X        case EGA_ADAPTOR:
  1853. X            screen_max_size = MAXROW_EGA * MAXCOL_EGA * CHR;
  1854. X            break;
  1855. X
  1856. X        case VGA_ADAPTOR:
  1857. X            if(can_do_132col)
  1858. X                screen_max_size =
  1859. X                    MAXROW_VGA * MAXCOL_SVGA * CHR;
  1860. X            else
  1861. X                screen_max_size =
  1862. X                    MAXROW_VGA * MAXCOL_VGA * CHR;
  1863. X    }
  1864. X    
  1865. X    for(nscr = 0; nscr < PCVT_NSCREENS; nscr++)
  1866. X    {
  1867. X        if((vs[nscr].Memory =
  1868. X            (u_short *)malloc(screen_max_size, M_DEVBUF, M_WAITOK))
  1869. X           == NULL)
  1870. X        {
  1871. X            printf("pcvt: screen memory malloc failed, "
  1872. X                   "NSCREEN=%d, nscr=%d\n",
  1873. X                   PCVT_NSCREENS, nscr);
  1874. X            break;
  1875. X        }
  1876. X        if(nscr != 0)
  1877. X        {
  1878. X            vs[nscr].Crtat = vs[nscr].Memory;
  1879. X            fillw(user_attr | ' ',
  1880. X                vs[nscr].Crtat,
  1881. X                vs[nscr].maxcol * vs[nscr].screen_rowsize);
  1882. X            totalscreens++;
  1883. X        }
  1884. X    }
  1885. X}
  1886. X
  1887. X/*---------------------------------------------------------------------------*
  1888. X *    check if we must scroll up screen
  1889. X *---------------------------------------------------------------------------*/
  1890. Xstatic void
  1891. Xcheck_scroll(struct video_state *svsp)
  1892. X{
  1893. X    if(svsp->cur_offset >=
  1894. X       ((svsp->scrr_beg + svsp->scrr_len + 1) * svsp->maxcol)) 
  1895. X    {
  1896. X
  1897. X/* XXX */    critical_scroll = 1;
  1898. X        
  1899. X        bcopy (    svsp->Crtat + (svsp->scrr_beg * svsp->maxcol)
  1900. X            + svsp->maxcol,
  1901. X            svsp->Crtat + (svsp->scrr_beg * svsp->maxcol),
  1902. X            svsp->maxcol * svsp->scrr_len * CHR );
  1903. X
  1904. X        fillw(    user_attr | ' ',
  1905. X            svsp->Crtat
  1906. X            + ((svsp->scrr_beg + svsp->scrr_len) * svsp->maxcol),
  1907. X            svsp->maxcol);
  1908. X            
  1909. X        svsp->cur_offset -= svsp->maxcol;
  1910. X
  1911. X/* XXX */    if(switch_page != -1)
  1912. X/* XXX */    {
  1913. X/* XXX */        vgapage(switch_page);
  1914. X/* XXX */        switch_page = -1;            
  1915. X/* XXX */    }
  1916. X
  1917. X/* XXX */    critical_scroll = 0;
  1918. X        
  1919. X  
  1920. X/*XXX*/      if(svsp->scroll_lock && svsp->openf && curproc)
  1921. X             tsleep((caddr_t)&(svsp->scroll_lock), PUSER, "scrlck", 0);
  1922. X      }
  1923. X}
  1924. X
  1925. X/*---------------------------------------------------------------------------*
  1926. X *    write to one user function key label
  1927. X *---------------------------------------------------------------------------*/
  1928. Xstatic void
  1929. Xwritefkl(int num, u_char *string, struct video_state *svsp)
  1930. X{
  1931. X    if((num < 0) || (num > 7))    /* range ok ? */
  1932. X        return;
  1933. X        
  1934. X    strncpy(svsp->ufkl[num], string, 16); /* save string in static array */
  1935. X
  1936. X    if(svsp->which_fkl == USR_FKL)
  1937. X        wrfkl(num,string,svsp);
  1938. X}
  1939. X
  1940. X/*---------------------------------------------------------------------------*
  1941. X *    write to one system function key label
  1942. X *---------------------------------------------------------------------------*/
  1943. Xvoid
  1944. Xswritefkl(int num, u_char *string, struct video_state *svsp)
  1945. X{
  1946. X    if((num < 0) || (num > 7))    /* range ok ? */
  1947. X        return;
  1948. X        
  1949. X    strncpy(svsp->sfkl[num], string, 16); /* save string in static array */
  1950. X
  1951. X    if(svsp->which_fkl == SYS_FKL)
  1952. X        wrfkl(num,string,svsp);
  1953. X}
  1954. X
  1955. X/*---------------------------------------------------------------------------*
  1956. X *    write function key label onto screen
  1957. X *---------------------------------------------------------------------------*/
  1958. Xstatic void
  1959. Xwrfkl(int num, u_char *string, struct video_state *svsp)
  1960. X{
  1961. X    register u_short *p;
  1962. X    register u_short *p1;    
  1963. X    register int cnt = 0;
  1964. X        
  1965. X    if(!svsp->labels_on || (svsp->vt_pure_mode == M_PUREVT))
  1966. X        return;
  1967. X
  1968. X    p = (svsp->Crtat
  1969. X         + (svsp->screen_rows * svsp->maxcol)); /* screen_rows+1 line */
  1970. X
  1971. X    if(svsp->maxcol == SCR_COL80)
  1972. X    {
  1973. X        if(num < 4)    /* labels 1 .. 4 */
  1974. X            p += (num * LABEL_LEN);
  1975. X        else        /* labels 5 .. 8 */
  1976. X            p += ((num * LABEL_LEN) + LABEL_MID + 1);
  1977. X    }
  1978. X    else
  1979. X    {
  1980. X        if(num < 4)    /* labels 1 .. 4 */
  1981. X            p += (num * (LABEL_LEN + 6));
  1982. X        else        /* labels 5 .. 8 */
  1983. X            p += ((num * (LABEL_LEN + 6)) + LABEL_MID + 11);
  1984. X
  1985. X    }        
  1986. X    p1 = p + svsp->maxcol;    /* second label line */
  1987. X    
  1988. X    while((*string != '\0') && (cnt < 8))
  1989. X    {
  1990. X        *p = ((0x70 << 8) + (*string & 0xff));
  1991. X        p++;
  1992. X        string++;
  1993. X        cnt++;
  1994. X    }
  1995. X    while(cnt < 8)
  1996. X    {
  1997. X        *p = ((0x70 << 8) + ' ');
  1998. X        p++;
  1999. X        cnt++;
  2000. X    }
  2001. X
  2002. X    while((*string != '\0') && (cnt < 16))
  2003. X    {
  2004. X        *p1 = ((0x70 << 8) + (*string & 0xff));
  2005. X        p1++;
  2006. X        string++;
  2007. X        cnt++;
  2008. X    }
  2009. X    while(cnt < 16)
  2010. X    {
  2011. X        *p1 = ((0x70 << 8) + ' ');
  2012. X        p1++;
  2013. X        cnt++;
  2014. X    }
  2015. X}
  2016. X
  2017. X/*---------------------------------------------------------------------------*
  2018. X *    remove (blank) function key labels, row/col and status line
  2019. X *---------------------------------------------------------------------------*/
  2020. Xvoid
  2021. Xfkl_off(struct video_state *svsp)
  2022. X{
  2023. X    register u_short *p;
  2024. X    register int num;
  2025. X        
  2026. X    svsp->labels_on = 0;
  2027. X
  2028. X    p = (svsp->Crtat+(svsp->screen_rows*svsp->maxcol));
  2029. X
  2030. X    for(num = 0; num < (3*svsp->maxcol); num++)
  2031. X        *p++ = ' ';
  2032. X}
  2033. X
  2034. X/*---------------------------------------------------------------------------*
  2035. X *    (re-) display function key labels, row/col and status line
  2036. X *---------------------------------------------------------------------------*/
  2037. Xvoid
  2038. Xfkl_on(struct video_state *svsp)
  2039. X{
  2040. X    svsp->labels_on = 1;
  2041. X
  2042. X    if(svsp->which_fkl == SYS_FKL)
  2043. X        sw_sfkl(svsp);
  2044. X    else if(svsp->which_fkl == USR_FKL)
  2045. X        sw_ufkl(svsp);
  2046. X}
  2047. X
  2048. X/*---------------------------------------------------------------------------*
  2049. X *    set emulation mode, switch between pure VTxxx mode and HP/VTxxx mode
  2050. X *---------------------------------------------------------------------------*/
  2051. Xvoid
  2052. Xset_emulation_mode(struct video_state *svsp, int mode)
  2053. X{
  2054. X    if(svsp->vt_pure_mode == mode)
  2055. X        return;
  2056. X    
  2057. X    fillw(user_attr | ' ',
  2058. X        svsp->Crtat,
  2059. X        svsp->maxcol * svsp->screen_rowsize);
  2060. X
  2061. X    clr_parms(svsp);        /* escape parameter init */
  2062. X    svsp->state = STATE_INIT;    /* initial state */
  2063. X
  2064. X    svsp->col = 0;            /* init row */
  2065. X    svsp->row = 0;            /* init col */
  2066. X    svsp->cur_offset = 0;        /* cursor offset init */
  2067. X    svsp->scrr_beg = 0;        /* start of scrolling region */
  2068. X    svsp->sc_flag = 0;        /* invalidate saved cursor position */
  2069. X    svsp->transparent = 0;        /* disable control code processing */
  2070. X
  2071. X    if(mode == M_HPVT)        /* vt-pure -> hp/vt-mode */
  2072. X    {
  2073. X        svsp->vt_pure_mode = M_HPVT;
  2074. X
  2075. X        svsp->vs_tty->t_winsize.ws_row
  2076. X            = svsp->screen_rows = svsp->screen_rowsize - 3;
  2077. X
  2078. X        svsp->scrr_len = svsp->screen_rows - 1;
  2079. X
  2080. X        update_hp(svsp);
  2081. X    }
  2082. X    else if(mode == M_PUREVT)    /* hp/vt-mode -> vt-pure */
  2083. X    {
  2084. X        svsp->vt_pure_mode = M_PUREVT;
  2085. X
  2086. X        svsp->screen_rows = svsp->screen_rowsize;
  2087. X
  2088. X        svsp->vs_tty->t_winsize.ws_row
  2089. X            = svsp->screen_rows = svsp->screen_rowsize;
  2090. X
  2091. X        svsp->scrr_len = svsp->screen_rows - 1;
  2092. X    }        
  2093. X
  2094. X#if PCVT_SIGWINCH
  2095. X    pgsignal(svsp->vs_tty->t_pgrp, SIGWINCH, 1);
  2096. X#endif /* PCVT_SIGWINCH */            
  2097. X
  2098. X}
  2099. X
  2100. X/*---------------------------------------------------------------------------*
  2101. X *    initialize user function key labels
  2102. X *---------------------------------------------------------------------------*/
  2103. Xvoid
  2104. Xinit_ufkl(struct video_state *svsp)
  2105. X{
  2106. X    writefkl(0,(u_char *)"   f1",svsp);    /* init fkey labels */
  2107. X    writefkl(1,(u_char *)"   f2",svsp);
  2108. X    writefkl(2,(u_char *)"   f3",svsp);
  2109. X    writefkl(3,(u_char *)"   f4",svsp);
  2110. X    writefkl(4,(u_char *)"   f5",svsp);
  2111. X    writefkl(5,(u_char *)"   f6",svsp);
  2112. X    writefkl(6,(u_char *)"   f7",svsp);
  2113. X    writefkl(7,(u_char *)"   f8",svsp);
  2114. X}
  2115. X
  2116. X/*---------------------------------------------------------------------------*
  2117. X *    initialize system user function key labels
  2118. X *---------------------------------------------------------------------------*/
  2119. Xvoid
  2120. Xinit_sfkl(struct video_state *svsp)
  2121. X{
  2122. X                /* 1234567812345678 */
  2123. X    if(can_do_132col)
  2124. X                    /* 1234567812345678 */
  2125. X        swritefkl(0,(u_char *)"132     COLUMNS ",svsp);
  2126. X    else
  2127. X        swritefkl(0,(u_char *)" ",svsp);    
  2128. X
  2129. X                /* 1234567812345678 */
  2130. X    swritefkl(1,(u_char *)"SOFT-RSTTERMINAL",svsp);
  2131. X    if(svsp->force24)
  2132. X        swritefkl(2,(u_char *)"FORCE24 ENABLE *",svsp);
  2133. X    else
  2134. X        swritefkl(2,(u_char *)"FORCE24 ENABLE  ",svsp);    
  2135. X
  2136. X#if PCVT_SHOWKEYS        /* 1234567812345678 */
  2137. X    if(svsp == &vs[0])
  2138. X        swritefkl(3,(u_char *)"KEYBSCANDISPLAY ",svsp);
  2139. X    else
  2140. X        swritefkl(3,(u_char *)" ",svsp);
  2141. X#else
  2142. X    swritefkl(3,(u_char *)" ",svsp);
  2143. X#endif /* PCVT_SHOWKEYS */
  2144. X
  2145. X                /* 1234567812345678 */
  2146. X    swritefkl(4,(u_char *)"BELL    ENABLE *",svsp);
  2147. X    swritefkl(5,(u_char *)"8-BIT   ENABLE *",svsp);
  2148. X    swritefkl(6,(u_char *)"DISPLAY FUNCTNS ",svsp);
  2149. X    swritefkl(7,(u_char *)"AUTOWRAPENABLE *",svsp);
  2150. X                /* 1234567812345678 */    
  2151. X}
  2152. X/*---------------------------------------------------------------------------*
  2153. X *    switch display to user function key labels
  2154. X *---------------------------------------------------------------------------*/
  2155. Xvoid
  2156. Xsw_ufkl(struct video_state *svsp)
  2157. X{
  2158. X    int i;
  2159. X    svsp->which_fkl = USR_FKL;
  2160. X    for(i = 0; i < 8; i++)
  2161. X        wrfkl(i,svsp->ufkl[i],svsp);
  2162. X}
  2163. X
  2164. X/*---------------------------------------------------------------------------*
  2165. X *    switch display to system function key labels
  2166. X *---------------------------------------------------------------------------*/
  2167. Xvoid
  2168. Xsw_sfkl(struct video_state *svsp)
  2169. X{
  2170. X    int i;
  2171. X    svsp->which_fkl = SYS_FKL;
  2172. X    for(i = 0; i < 8; i++)
  2173. X        wrfkl(i,svsp->sfkl[i],svsp);
  2174. X}
  2175. X
  2176. X/*---------------------------------------------------------------------------*
  2177. X *    toggle force 24 lines
  2178. X *---------------------------------------------------------------------------*/
  2179. Xvoid
  2180. Xtoggl_24l(struct video_state *svsp)
  2181. X{
  2182. X    if(svsp->which_fkl == SYS_FKL)
  2183. X    {
  2184. X        if(svsp->force24)
  2185. X        {
  2186. X            svsp->force24 = 0;
  2187. X            swritefkl(2,(u_char *)"FORCE24 ENABLE  ",svsp);    
  2188. X        }
  2189. X        else
  2190. X        {
  2191. X            svsp->force24 = 1;            
  2192. X            swritefkl(2,(u_char *)"FORCE24 ENABLE *",svsp);
  2193. X        }
  2194. X        set_screen_size(svsp, vgacs[(svsp->vga_charset)].screen_size);
  2195. X    }
  2196. X}
  2197. X
  2198. X#if PCVT_SHOWKEYS
  2199. X/*---------------------------------------------------------------------------*
  2200. X *    toggle keyboard scancode display
  2201. X *---------------------------------------------------------------------------*/
  2202. Xvoid
  2203. Xtoggl_kbddbg(struct video_state *svsp)
  2204. X{
  2205. X    if((svsp->which_fkl == SYS_FKL) && (svsp == &vs[0]))
  2206. X    {
  2207. X        if(keyboard_show)
  2208. X        {
  2209. X            keyboard_show = 0;
  2210. X            swritefkl(3,(u_char *)"KEYBSCANDISPLAY ",svsp);
  2211. X        }
  2212. X        else
  2213. X        {
  2214. X            keyboard_show = 1;
  2215. X            swritefkl(3,(u_char *)"KEYBSCANDISPLAY*",svsp);
  2216. X        }
  2217. X    }
  2218. X}
  2219. X#endif /* PCVT_SHOWKEYS */
  2220. X
  2221. X/*---------------------------------------------------------------------------*
  2222. X *    toggle display functions
  2223. X *---------------------------------------------------------------------------*/
  2224. Xvoid
  2225. Xtoggl_dspf(struct video_state *svsp)
  2226. X{
  2227. X    if(svsp->which_fkl == SYS_FKL)
  2228. X    {
  2229. X        if(svsp->dis_fnc)
  2230. X        {
  2231. X            svsp->dis_fnc = 0;
  2232. X            swritefkl(6,(u_char *)"DISPLAY FUNCTNS ",svsp);
  2233. X        }
  2234. X        else
  2235. X        {
  2236. X            svsp->dis_fnc = 1;
  2237. X            swritefkl(6,(u_char *)"DISPLAY FUNCTNS*",svsp);
  2238. X        }
  2239. X    }
  2240. X}
  2241. X
  2242. X/*---------------------------------------------------------------------------*
  2243. X *    auto wrap on/off
  2244. X *---------------------------------------------------------------------------*/
  2245. Xvoid
  2246. Xtoggl_awm(struct video_state *svsp)
  2247. X{
  2248. X    if(svsp->which_fkl == SYS_FKL)
  2249. X    {
  2250. X        if(svsp->m_awm)
  2251. X        {
  2252. X            svsp->m_awm = 0;
  2253. X            swritefkl(7,(u_char *)"AUTOWRAPENABLE  ",svsp);
  2254. X        }
  2255. X        else
  2256. X        {
  2257. X            svsp->m_awm = 1;
  2258. X            swritefkl(7,(u_char *)"AUTOWRAPENABLE *",svsp);
  2259. X        }
  2260. X    }
  2261. X}
  2262. X
  2263. X/*---------------------------------------------------------------------------*
  2264. X *    bell on/off
  2265. X *---------------------------------------------------------------------------*/
  2266. Xvoid
  2267. Xtoggl_bell(struct video_state *svsp)
  2268. X{
  2269. X    if(svsp->which_fkl == SYS_FKL)
  2270. X    {
  2271. X        if(svsp->bell_on)
  2272. X        {
  2273. X            svsp->bell_on = 0;
  2274. X            swritefkl(4,(u_char *)"BELL    ENABLE  ",svsp);
  2275. X        }
  2276. X        else
  2277. X        {
  2278. X            svsp->bell_on = 1;
  2279. X            swritefkl(4,(u_char *)"BELL    ENABLE *",svsp);
  2280. X        }
  2281. X    }
  2282. X}
  2283. X
  2284. X/*---------------------------------------------------------------------------*
  2285. X *    7/8 bit usage
  2286. X *---------------------------------------------------------------------------*/
  2287. Xvoid
  2288. Xtoggl_sevenbit(struct video_state *svsp)
  2289. X{
  2290. X    if(svsp->which_fkl == SYS_FKL)
  2291. X    {
  2292. X        if(svsp->sevenbit)
  2293. X        {
  2294. X            svsp->sevenbit = 0;
  2295. X            swritefkl(5,(u_char *)"8-BIT   ENABLE *",svsp);
  2296. X        }
  2297. X        else
  2298. X        {
  2299. X            svsp->sevenbit = 1;
  2300. X            swritefkl(5,(u_char *)"8-BIT   ENABLE  ",svsp);
  2301. X        }
  2302. X    }
  2303. X}
  2304. X
  2305. X/*---------------------------------------------------------------------------*
  2306. X *    80 / 132 columns
  2307. X *---------------------------------------------------------------------------*/
  2308. Xvoid
  2309. Xtoggl_columns(struct video_state *svsp)
  2310. X{
  2311. X    if(svsp->which_fkl == SYS_FKL)
  2312. X    {
  2313. X        if(svsp->maxcol == SCR_COL132)
  2314. X        {
  2315. X            if(vt_col(svsp, SCR_COL80))
  2316. X                svsp->maxcol = 80;
  2317. X        }
  2318. X        else
  2319. X        {
  2320. X            if(vt_col(svsp, SCR_COL132))
  2321. X                svsp->maxcol = 132;
  2322. X        }
  2323. X    }
  2324. X}
  2325. X
  2326. X/*---------------------------------------------------------------------------*
  2327. X *    toggle vga 80/132 column operation
  2328. X *---------------------------------------------------------------------------*/
  2329. Xint
  2330. Xvt_col(struct video_state *svsp, int cols)
  2331. X{
  2332. X    if(vga_col(svsp, cols) == 0)
  2333. X        return(0);
  2334. X        
  2335. X    if(cols == SCR_COL80)
  2336. X        swritefkl(0,(u_char *)"132     COLUMNS ",svsp);
  2337. X    else
  2338. X        swritefkl(0,(u_char *)"132     COLUMNS*",svsp);
  2339. X
  2340. X    fillw(user_attr | ' ',
  2341. X        svsp->Crtat,
  2342. X        svsp->maxcol * svsp->screen_rowsize);
  2343. X    
  2344. X    clr_parms(svsp);        /* escape parameter init */
  2345. X    svsp->state = STATE_INIT;    /* initial state */
  2346. X    svsp->col = 0;            /* init row */
  2347. X    svsp->row = 0;            /* init col */
  2348. X    svsp->cur_offset = 0;        /* cursor offset init */
  2349. X    svsp->sc_flag = 0;        /* invalidate saved cursor position */
  2350. X    svsp->scrr_beg = 0;        /* reset scrolling region */
  2351. X    svsp->scrr_len = svsp->screen_rows-1; /*reset scrolling region legnth*/
  2352. X    svsp->transparent = 0;        /* disable control code processing */
  2353. X    svsp->selchar = 0;        /* selective attr off */
  2354. X    vt_initsel(svsp);        /* re-init sel attr */
  2355. X
  2356. X    update_hp(svsp);        /* update labels, row/col, page ind */
  2357. X
  2358. X    /* Update winsize struct to reflect screen size */
  2359. X
  2360. X    if(svsp->vt_pure_mode == M_HPVT)
  2361. X        svsp->vs_tty->t_winsize.ws_row = svsp->screen_rowsize - 3;
  2362. X    else
  2363. X        svsp->vs_tty->t_winsize.ws_row = svsp->screen_rowsize;
  2364. X    svsp->vs_tty->t_winsize.ws_col = svsp->maxcol;
  2365. X
  2366. X    svsp->vs_tty->t_winsize.ws_xpixel = (cols == SCR_COL80)? 720: 1056;
  2367. X    svsp->vs_tty->t_winsize.ws_ypixel = 400;
  2368. X
  2369. X#if PCVT_SIGWINCH
  2370. X    pgsignal(svsp->vs_tty->t_pgrp, SIGWINCH, 1);
  2371. X#endif /* PCVT_SIGWINCH */            
  2372. X
  2373. X    return(1);
  2374. X}    
  2375. X
  2376. X/*---------------------------------------------------------------------------*
  2377. X *    update HP stuff on screen
  2378. X *---------------------------------------------------------------------------*/
  2379. Xstatic void
  2380. Xupdate_hp(struct video_state *svsp)
  2381. X{
  2382. X    if(svsp->vt_pure_mode != M_HPVT || (!svsp->labels_on))
  2383. X        return;
  2384. X
  2385. X    /* update fkey labels */
  2386. X
  2387. X    if(svsp->which_fkl == SYS_FKL)
  2388. X        sw_sfkl(svsp);
  2389. X    else if(svsp->which_fkl == USR_FKL)
  2390. X        sw_ufkl(svsp);
  2391. X
  2392. X    if(vsp == svsp)
  2393. X    {
  2394. X        /* update current displayed screen indicator */
  2395. X
  2396. X        *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol))
  2397. X          + svsp->maxcol - 3) = user_attr | '[';
  2398. X        *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol))
  2399. X          + svsp->maxcol - 2) = user_attr | current_video_screen + '0';
  2400. X        *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol))
  2401. X          + svsp->maxcol - 1) = user_attr | ']';
  2402. X    }
  2403. X}
  2404. X
  2405. X/*---------------------------------------------------------------------------*
  2406. X *    initialize ANSI escape sequence parameter buffers
  2407. X *---------------------------------------------------------------------------*/
  2408. Xvoid
  2409. Xclr_parms(struct video_state *svsp)
  2410. X{
  2411. X    register int i;
  2412. X    for(i=0; i < MAXPARMS; i++)
  2413. X        svsp->parms[i] = 0;
  2414. X    svsp->parmi = 0;
  2415. X}
  2416. X
  2417. X
  2418. X/*---------------------------------------------------------------------------*
  2419. X *
  2420. X *    partial HP 2392 ANSI mode Emulator
  2421. X *    ==================================
  2422. X *
  2423. X *    this part tooks over the emulation of some escape sequences
  2424. X *    needed to handle the function key labels
  2425. X *
  2426. X *    They are modeled after the corresponding escape sequences
  2427. X *    introduced with the HP2392 terminals from Hewlett-Packard.
  2428. X *
  2429. X *    see:
  2430. X *    "HP2392A, Display Terminal Reference Manual",
  2431. X *    HP Manual Part Number 02390-90001
  2432. X *    and:
  2433. X *    Reference Manual Supplement
  2434. X *    "2392A Display Terminal Option 049, ANSI Operation"
  2435. X *    HP Manual Part Number 02390-90023EN
  2436. X *
  2437. X *---------------------------------------------------------------------------*/
  2438. X
  2439. Xstatic void
  2440. Xhp_entry(U_char ch, struct video_state *svsp)
  2441. X{
  2442. X    switch(svsp->hp_state)
  2443. X    {
  2444. X        case SHP_INIT:
  2445. X            switch(ch)
  2446. X            {
  2447. X                case 'f':
  2448. X                    svsp->hp_state = SHP_AND_F;
  2449. X                    svsp->attribute = 0;
  2450. X                    svsp->key = 0;
  2451. X                    svsp->l_len = 0;
  2452. X                    svsp->s_len = 0;
  2453. X                    svsp->i = 0;
  2454. X                    break;
  2455. X
  2456. X                case 'j':
  2457. X                    svsp->m_len = 0;
  2458. X                    svsp->hp_state = SHP_AND_J;
  2459. X                    break;
  2460. X
  2461. X                case 's':
  2462. X                    svsp->hp_state = SHP_AND_ETE;
  2463. X                    break;
  2464. X
  2465. X                default:
  2466. X                    svsp->hp_state = SHP_INIT;
  2467. X                    svsp->state = STATE_INIT;
  2468. X                    break;
  2469. X            }
  2470. X            break;
  2471. X    
  2472. X        case SHP_AND_F:
  2473. X            if((ch >= '0') && (ch <= '8'))
  2474. X            {
  2475. X                svsp->attribute = ch;
  2476. X                svsp->hp_state = SHP_AND_Fa;
  2477. X            }
  2478. X            else
  2479. X            {
  2480. X                svsp->hp_state = SHP_INIT;
  2481. X                svsp->state = STATE_INIT;
  2482. X            }
  2483. X            break;
  2484. X
  2485. X        case SHP_AND_Fa:
  2486. X            if(ch == 'a')
  2487. X                svsp->hp_state = SHP_AND_Fak;
  2488. X            else if(ch == 'k')
  2489. X            {
  2490. X                svsp->key = svsp->attribute;
  2491. X                svsp->hp_state = SHP_AND_Fakd;
  2492. X            }
  2493. X            else
  2494. X            {
  2495. X                svsp->hp_state = SHP_INIT;
  2496. X                svsp->state = STATE_INIT;
  2497. X            }
  2498. X            break;
  2499. X
  2500. X        case SHP_AND_Fak:
  2501. X            if((ch >= '1') && (ch <= '8'))
  2502. X            {
  2503. X                svsp->key = ch;
  2504. X                svsp->hp_state = SHP_AND_Fak1;
  2505. X            }
  2506. X            else
  2507. X            {
  2508. X                svsp->hp_state = SHP_INIT;
  2509. X                svsp->state = STATE_INIT;
  2510. X            }
  2511. X            break;
  2512. X
  2513. X        case SHP_AND_Fak1:            
  2514. X            if(ch == 'k')
  2515. X                svsp->hp_state = SHP_AND_Fakd;
  2516. X            else
  2517. X            {
  2518. X                svsp->hp_state = SHP_INIT;
  2519. X                svsp->state = STATE_INIT;
  2520. X            }
  2521. X            break;
  2522. X            
  2523. X        case SHP_AND_Fakd:
  2524. X            if(svsp->l_len > 16)
  2525. X            {
  2526. X                svsp->hp_state = SHP_INIT;
  2527. X                svsp->state = STATE_INIT;
  2528. X            }
  2529. X            else if(ch >= '0' && ch <= '9')
  2530. X            {
  2531. X                svsp->l_len *= 10;
  2532. X                svsp->l_len += (ch -'0');
  2533. X            }
  2534. X            else if(ch == 'd')
  2535. X                svsp->hp_state = SHP_AND_FakdL;
  2536. X            else
  2537. X            {
  2538. X                svsp->hp_state = SHP_INIT;
  2539. X                svsp->state = STATE_INIT;
  2540. X            }
  2541. X            break;
  2542. X
  2543. X        case SHP_AND_FakdL:
  2544. X            if(svsp->s_len > 80)
  2545. X            {
  2546. X                svsp->hp_state = SHP_INIT;
  2547. X                svsp->state = STATE_INIT;
  2548. X            }
  2549. X            else if(ch >= '0' && ch <= '9')
  2550. X            {
  2551. X                svsp->s_len *= 10;
  2552. X                svsp->s_len += (ch -'0');
  2553. X            }
  2554. X            else if(ch == 'L')
  2555. X            {
  2556. X                svsp->hp_state = SHP_AND_FakdLl;
  2557. X                svsp->transparent = 1;
  2558. X            }
  2559. X            else
  2560. X            {
  2561. X                svsp->hp_state = SHP_INIT;
  2562. X                svsp->state = STATE_INIT;
  2563. X            }
  2564. X            break;
  2565. X
  2566. X        case SHP_AND_FakdLl:
  2567. X            svsp->l_buf[svsp->i] = ch;
  2568. X            if(svsp->i >= svsp->l_len-1)
  2569. X            {
  2570. X                svsp->hp_state = SHP_AND_FakdLls;
  2571. X                svsp->i = 0;
  2572. X                if(svsp->s_len == 0)
  2573. X                {
  2574. X                    svsp->state = STATE_INIT;
  2575. X                    svsp->hp_state = SHP_INIT;
  2576. X                    svsp->transparent = 0;
  2577. X                    svsp->i = 0;
  2578. X                    svsp->l_buf[svsp->l_len] = '\0';
  2579. X                    svsp->s_buf[svsp->s_len] = '\0';
  2580. X                    writefkl((svsp->key - '0' -1),
  2581. X                         svsp->l_buf, svsp);
  2582. X                }
  2583. X            }
  2584. X            else
  2585. X                svsp->i++;
  2586. X            break;
  2587. X            
  2588. X        case SHP_AND_FakdLls:
  2589. X            svsp->s_buf[svsp->i] = ch;
  2590. X            if(svsp->i >= svsp->s_len-1)
  2591. X            {
  2592. X                svsp->state = STATE_INIT;
  2593. X                svsp->hp_state = SHP_INIT;
  2594. X                svsp->transparent = 0;
  2595. X                svsp->i = 0;
  2596. X                svsp->l_buf[svsp->l_len] = '\0';
  2597. X                svsp->s_buf[svsp->s_len] = '\0';
  2598. X                writefkl((svsp->key - '0' -1), svsp->l_buf,
  2599. X                     svsp);
  2600. X            }
  2601. X            else
  2602. X                svsp->i++;
  2603. X            break;
  2604. X
  2605. X        case SHP_AND_J:
  2606. X            switch(ch)
  2607. X            {
  2608. X                case '@':    /* enable user keys, remove */
  2609. X                        /* all labels & status from */
  2610. X                        /* screen             */
  2611. X                    svsp->hp_state = SHP_INIT;
  2612. X                    svsp->state = STATE_INIT;
  2613. X                    fkl_off(svsp);
  2614. X                    break;
  2615. X
  2616. X                case 'A':    /* enable & display "modes" */
  2617. X                    svsp->hp_state = SHP_INIT;
  2618. X                    svsp->state = STATE_INIT;
  2619. X                    fkl_on(svsp);
  2620. X                    sw_sfkl(svsp);
  2621. X                    break;
  2622. X
  2623. X                case 'B':    /* enable & display "user"  */
  2624. X                    svsp->hp_state = SHP_INIT;
  2625. X                    svsp->state = STATE_INIT;
  2626. X                    fkl_on(svsp);
  2627. X                    sw_ufkl(svsp);
  2628. X                    break;
  2629. X
  2630. X                case 'C':    /* remove (clear) status line*/
  2631. X                        /* and restore current labels*/
  2632. X                    svsp->hp_state = SHP_INIT;
  2633. X                    svsp->state = STATE_INIT;
  2634. X                    fkl_on(svsp);
  2635. X                    break;
  2636. X
  2637. X                case 'R':    /* enable usr/menu keys */
  2638. X                        /* and fkey label modes */
  2639. X                    svsp->hp_state = SHP_INIT;
  2640. X                    svsp->state = STATE_INIT;
  2641. X                    break;
  2642. X
  2643. X                case 'S':    /* disable usr/menu keys */
  2644. X                        /* and fkey label modes */
  2645. X                    svsp->hp_state = SHP_INIT;
  2646. X                    svsp->state = STATE_INIT;
  2647. X                    break;
  2648. X
  2649. X                case '0':
  2650. X                case '1':
  2651. X                case '2':
  2652. X                case '3':
  2653. X                case '4':
  2654. X                case '5':
  2655. X                case '6':
  2656. X                case '7':
  2657. X                case '8':
  2658. X                case '9': /* parameters for esc & j xx L mm */
  2659. X                    svsp->m_len *= 10;
  2660. X                    svsp->m_len += (ch -'0');
  2661. X                    break;
  2662. X    
  2663. X                case 'L':
  2664. X                    svsp->hp_state = SHP_AND_JL;
  2665. X                    svsp->i = 0;
  2666. X                    svsp->transparent = 1;
  2667. X                    break;
  2668. X
  2669. X                default:
  2670. X                    svsp->hp_state = SHP_INIT;
  2671. X                    svsp->state = STATE_INIT;
  2672. X                    break;
  2673. X
  2674. X            }
  2675. X            break;
  2676. X
  2677. X
  2678. X        case SHP_AND_JL:
  2679. X            svsp->m_buf[svsp->i] = ch;
  2680. X            if(svsp->i >= svsp->m_len-1)
  2681. X            {
  2682. X                svsp->state = STATE_INIT;
  2683. X                svsp->hp_state = SHP_INIT;
  2684. X                svsp->transparent = 0;
  2685. X                svsp->i = 0;
  2686. X                svsp->m_buf[svsp->m_len] = '\0';
  2687. X                /* display status line */
  2688. X                /* needs to be implemented */
  2689. X                /* see 2392 man, 3-14 */
  2690. X            
  2691. X            }
  2692. X            else
  2693. X                svsp->i++;
  2694. X            break;
  2695. X
  2696. X        case SHP_AND_ETE:    /* eat chars until uppercase */
  2697. X            if(ch >= '@' && ch <= 'Z')
  2698. X            {
  2699. X                svsp->hp_state = SHP_INIT;
  2700. X                svsp->state = STATE_INIT;
  2701. X                svsp->transparent = 0;
  2702. X            }
  2703. X            break;
  2704. X        
  2705. X        default:
  2706. X            svsp->hp_state = SHP_INIT;
  2707. X            svsp->state = STATE_INIT;
  2708. X            svsp->transparent = 0;
  2709. X            break;
  2710. X    }
  2711. X}
  2712. X
  2713. X#endif    /* NVT > 0 */
  2714. X
  2715. X/* ------------------------- E O F ------------------------------------------*/
  2716. X
  2717. END_OF_FILE
  2718.   if test 49760 -ne `wc -c <'pcvt/pcvt_out.c'`; then
  2719.     echo shar: \"'pcvt/pcvt_out.c'\" unpacked with wrong size!
  2720.   fi
  2721.   # end of 'pcvt/pcvt_out.c'
  2722. fi
  2723. echo shar: End of archive 7 \(of 13\).
  2724. cp /dev/null ark7isdone
  2725. MISSING=""
  2726. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do
  2727.     if test ! -f ark${I}isdone ; then
  2728.     MISSING="${MISSING} ${I}"
  2729.     fi
  2730. done
  2731. if test "${MISSING}" = "" ; then
  2732.     echo You have unpacked all 13 archives.
  2733.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2734. else
  2735.     echo You still must unpack the following archives:
  2736.     echo "        " ${MISSING}
  2737. fi
  2738. exit 0
  2739. exit 0 # Just in case...
  2740.