home *** CD-ROM | disk | FTP | other *** search
- From: hm@hcshh.hcs.de (Hellmuth Michaelis)
- Newsgroups: comp.sources.misc
- Subject: v41i146: pcvt - Video Driver for 386BSD/NetBSD/FreeBSD, v3.00, Part07/13
- Date: 1 Mar 1994 17:10:39 -0600
- Organization: Sterling Software
- Sender: root@news.sterling.com
- Approved: kent@sparky.sterling.com
- Message-ID: <2l0i1f$5o4@sparky.sterling.com>
- X-Md4-Signature: 2e52137f8f103b4b21be6af6e3cc0b90
-
- Submitted-by: hm@hcshh.hcs.de (Hellmuth Michaelis)
- Posting-number: Volume 41, Issue 146
- Archive-name: pcvt/part07
- Environment: 386BSD, NETBSD, FREEBSD
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: pcvt/Etc/uemacs.tar.Z.uu pcvt/pcvt_out.c
- # Wrapped by kent@sparky on Tue Mar 1 16:46:19 1994
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 7 (of 13)."'
- if test -f 'pcvt/Etc/uemacs.tar.Z.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'pcvt/Etc/uemacs.tar.Z.uu'\"
- else
- echo shar: Extracting \"'pcvt/Etc/uemacs.tar.Z.uu'\" \(36659 characters\)
- sed "s/^X//" >'pcvt/Etc/uemacs.tar.Z.uu' <<'END_OF_FILE'
- Xbegin 666 uemacs.tar.Z
- XM'YV09-[0:5&F39@Q<^2,`<"PH<.'$"-*G$BQHL6*(#+:V`@"0,:/,#I^S!C2
- XMXT@0,F3,N%$C8XT:,&+`H#$CA@T:&6/$F%AD<8%X,*'4JT:,0Z<^B$D9,1
- XM@)PW`HU.O(.F3!DV4K-JW<JUJ]>O6G>T&$NVK-FS:-.J7<M6K8(=;Q-,42J'
- XM3ATX(,RD85,F[QNF3=*,>5JD29`A4T#,<(%##`O%+F0^7JPS3-RVF#.??1OW
- XMCIPT=.B4<0-"3!X02*ZR:5.'#AH0@<>@"7,US1P0,7+@R,$B=PX8O7/DB!$\
- XMAXRX"4`4.7.FC)RD9<C022K'!4H<R%'"V(XZ3!LQ=>2<`0$S`0HT;8"@08@&
- XMC8OU<UR0*9."\XX$=\F$$4U&!VX<+<`@0PN[@=`">LB9\1<(;\S10@XOV(##
- XM&B#<`=IK2$#1`A7.M9&&&V&P<9L)(+`!U1HAIK%&&7,@)QIT9%1X(0AHP"
- XM#3+0\$*-,<"THXTS&/?C#=OE@,<+8]3!&AM(O:#':**-@4.0,H`05W[[1><?
- XM#`#&,&"!![:1X((9ME`%%B`4=-!ME,'@(HO\R>@:"$DNB10(HLGA(8@B@H`"
- XM"#WT0"->1,+P0@XXU7<?EOSY)T,.`<;P8$AA(L=&&$D11`9H+>@G&@@?;&
- XME7!XJB4(,-S0@DP/QF`@@O?AIR9"D.GTV'S@,??A&8_!\08;MJ&Q*P@NN&!?
- XM`M%Q:JI_6TQ1!VE!U#&>3;C5H$,--EP;DF\R=!%7$9L.9(5S<S`;PPW>PC5'
- XM&72`0,*F<XS11HQ&!,'$%$4HX!EH9;30!HMSA-$<""(TRRX=P]X%@A'/CH'P
- XM&VZTL$09IS4Q6AT@S)$'=&T06ZP+78A@7Z`D"XI$$4Q``<(464Q!16&`EBSS
- XMS#3/'!>4SM%X%5X:<ZR`JTG]U6^H3RF0P+KMOFN;O/3:BZ_18GQ(1@MTO-'"
- XMBJ>5@4<928KF[T%/M5"E$4[$8+2KEXIQ50MF-/QPQ%@3G%$16"1!Q4@GIYR1
- XMR`E$[<;455]-<9I;=STTV%;/L+`3QR509=IKM^V&PVE`+/AI(IRD^4E\^PVX
- XMU7%KS75KAXO:@N)DSV"TXI"SP;;;E<,]>.:;U]ZYU%2#/KCHAG]M.NI.T&`T
- XM3JV_/OG;E\M=^^:W_YU[\KR3[GO8P-=@=$O%2TZYY7'3OCSG4.,>>.B%2T]T
- XMXHO;8+0-)8:AMNO:(]_]]YHW_SGTY7M]?@LXD7V#T3=HW_N,MSW982XC<)!#
- XM&>PPDGC)@30$"Y_SQK>[_)4N;"TA&W82@`,!1@YVW)M=1MR@M79]Q($0Y)NK
- XM2(B'@5CH;V^X@]&JP@8X&*V#"IQ#&I[4@A<&1(8)"`,9IM:&-\R'8`HD0^?*
- XM<(8/N6%7+7B#&=BVES(8K4H*DL,=EC(UV2SE('DRVACXLA1_`4Q@_0(6"8V&
- XM-'?!BVD@H((4JI"O$(R&*Z&1Y`H[,:*J!*05/@]$:%+`L.L@4V2(#1YL,7
- XMK_DPAF(DHQS,.(>`-:<%:K2B'?^6Q_N<3S&`RDA`W'""=H7(1'?`4U761:<W
- XMM,$@?[L-R4!PA"(XH0A2L!<(H%`%*4#A"?B*60\4,(.C54V0YS/:OO1WQH$5
- XM#`1+*$(64!.$Q#CA"0NK@A.&0(4D/,$)(`A!"$`0,@5L$H\*B$L"%UBY.]$0
- XM+W!`HP)P$L@+$E)M373#$]UPABA.,9-L+,-29-,"!=J!7'T100]\H$(0)%$.
- XM8;A#IVP#ATOEX8I^T2(76^!%B#K,.>:\8R<3P,)VO1,$\6R.`EI2ST%"C8E.
- XMA*(4,?DA*SHNHUN40Q=GX]$P'DV@"D$#V_Z2TQ@IE*%G<VAT("I1>%4T#!<]
- XMIYAV4+-9&B8)X&R"+:N0S6UV\YO0E&9B2-2$)$QA",*465S::)`/Y06$I(E;
- XMZUK$OI8F\Z=)>^.\%N:T?/5-?+K+FB'WYRJRF2T!(<CB&/J"-O=]\'BQ2Q[M
- XM\J:RCQ@A"4PHPMXD>#_RC4Y_B&M!`,G6N,3^9;$H\2#\X"K9C%SA"5(@PD>:
- XM\`0KO(`(*+/?\SS;N_UU,'5&,ZU"^L(ZQZX6LB$\(&IXB::/3`$*14!K!/\Z
- XMP<`2[K/V?-#BA(=8Q?:%>,8EH/Q$>`6L$N$)5_C($)I`A,1,UW.[K2!V#RF3
- XMQ5FONZ?M"_;"&[_(S@]?09#"$)"0$2D4`0I,.$P1=$M!P<Z7L(5U@OKP.UP0
- XML"][K)T?;,PJW8RLM[V;I6YGY=O;T'II<?^C,&H#B&'D&E!N!CZ"-\'I8?:Z
- XME\'6U1JG9G4;#0;7NR#H8(L+V%KEU.UN'RG,81+#MS$"E9*63&--`YK7I>U5
- XMCG0,*2??4E40O#:V7>7FC!-3U3*3+"[@V4N,[O"7J6'M-O]R0QT4$$"[(H[*
- XM;K1RT^[E5_@V&*4&;:>#V*S3Q1VVL0/L;W*5]V79@NH-!P4!#\:"X^25M(=M
- XM7ESC'L??#(O0R[!U=!$C/1:DBCB^IV$DN_JU3CL(&M.%!FX"BIMH3RNWT:*\
- XM2D8FW8)*QTW57KLTH>D5O.&I5KS^_32N0<#(C)3:UX,;`Z;Z-6R.A@$.H$G1
- XMD^Q[O6,K^L6T6[:TL:T4-N@!VJ>1]KI@/354YHQL$[YPIUU<Y&6C4B'31C>=
- XMILWN%MP%#N]V0HI9/&\B:WC9_\;WNO0=/=":CGT^YJ"W;:T\NMDM(U3`)FR"
- XM@-4F2Q+*:*3I&O&:YWA=>8YU%"F7N_P$#;$L,8<90A&F,%80#.$)33",$V1+
- XMM^BFM:H*Z*"=185GI9E\ST\[]9_G0$/7C<&5L"3VH2=.;PUGZ$P9D=??,JGO
- XM-+2`Z:K1-$:'/%[E7KVY&0$[&]CP7L`F3XA$-&)?9$WKQQK\TT$@@J-G^P3<
- XMAMC/U@7VT.2^76.3/=D'Q&UF7\9WO[>]NOA[L(G[YX3[[K?651>A888@!8UG
- XM!`I!J.7?W<Y;Z8'H7UV$>AC^EK[U4?WNRNUYA^G4!M8_?L0.[IU>^()B`+Z^
- XM[!7'@L\_LON^W![5URWQPQ>W02$7'/BTLSB2,YZ1JSK!XT_^5R5##E"2&QV.
- XM6$[YEJG:Y?+N'+T;=T+H"V/+NYGY_2530`XR=DQ[%EVO2.\SZ0<G;*G%T-!)
- XM=7B+1CNWA`5()B,PE$KZUFJO]DBI1%IC]WR(ISQ08&!6\!$.>'Q_)G@]Y'\/
- XMZ`2J,VN_-X&THW@?D21,X4/ZQH$"4163Y(`]5FP)`%Z8!WO*8X(9T8((J$2<
- XMA7QS4%&<@H(*Y`8NY('<E@"79W?0EQ'/Q007MX/_IV],]QENL`8=F("MEP#R
- XM5H-+.`5((`58M009D8'Z=@9/(5$9Z#^^)X#@IAQ.D&!2('IDV(-_UG#9!7%.
- XMT'PC.(!S<V08IW'6AWUEI'U1)G(VU4;?=W)9)E4K5S,K4P0!-F`O8&`(IF`_
- XM!W]F]C,A,71%XWWXQU=\1H?6M2X#)5195%0`F`"(IH0D^(B12&`XQ452"%0$
- XM95`()78WQ8:M!6`"1F!B<!!K4%3ZID!/M5A?1P=4.!YTMX=MR(L#!@(F0(R7
- XMLECZ%@=UX!QY4%!E4(S]0AW#0C;<18.L.(!3T(N^Q`1H=0<O8(W8J&]H\"P#
- XM<8I<=(1)>%PVF#F4"(E(EA!CD!=WP(-*9UWO2(0M\(MC$(SS"&^NIXOSDX]!
- XM<#?\6!K`R'"#%5K`,W#,6&3T\Q$4*7G+%W'.QX6M:&1/2'T;UW&1E'W-)&4C
- XMAXB?&'Y:AD[DYXAE=58V9V.7B(DZ^3-`4W\NY8EZ!HI)!WC)<P8"834&00>R
- XM`45F,!JH95@!*(%\2$M/8))#P#9.F5"B6)1':8BXR&DB.95'4)6>5R(U-7J0
- XM%S=MM(P,^6GX<H!VL!1IX#Y\H6_@809-.4F^HD-O4W@SF)$:YH7HAU(-`AJQ
- XM8Y<P%3&?1#:6!Y@BY#(!=H"?I($YYCR+*6$+*95MZ(9[!RJ(@Y:XEWSF\YEJ
- XMF``$%Y:;*7L?,9D=J7QA@X=ZV):QYX=Q!(@<=WTI.8@K:8CW%Y0PR8@S23,@
- XM$&,S=I,@II/(&7\GQHF$Y))!62^A&)#)@S1?(P<4`I6JZ)C*]98G81#6"9K(
- XMIS5>Q$^L]@8?,A"K1T1+<9V,$X&H6618,&!'@$!$:`+>N0;ZM@9[X3H*U$00
- XMLS@A6'?VN(30A%E,\!']&3N4F3Q/!P?9F*#_"8Z&IYE%=G-0,$T9`:&DH6_J
- XMUB\:BDDQ%'"-*9L$PP3H)6#5I%D:NJ!QTZ':Z)\1\V\!%V_:23!5``45.`0I
- XMJE0PRJ(D-IJ_TWNF6:/>LY$^FGM`^IK,=T-$VH<E:9LHF0!.IIO;=TG=YYQ'
- XM%T<H%Y.=E)Q>FIQQ,07L`@(*$P:M\08WV7?Y$IQ?VJ9`1P,P8$Q"\Y-M5`(*
- XM00=M@!<FH$.D00)C8`:GEU`NP#<AD`9F`(UE8(T@8*<.DZ>H8C2(I4!V\4#!
- XM=4>&BF>,BJ=ZZB$QXJ>`ZAU]80)PMZAWZJBN<E^%>J@FL"![FJBDVJAX(0)C
- XMD#FM&@>OJJD$@P9\$T1#Y"^$)ZM%-!^$:JEFP*4*@(@*)$1H<"*BZ7!A`Z?I
- XMQ*9NVJ9QP01O($0@$`8@0$*IE%)6)*W3ZJ4_0P-RBDQWAEB&"HWK8JLFH!>L
- XMQZW>Z@)P)`*[NDQ#LY($LP5#L'K;*A!Y(34@<$M7`'JUY`(?5DZ(=17K`JEV
- XM2$6\!Z]H)*_S4JE_<ZF,V(CA&JX8RYD@\`1&\(A4<*./`9E2<#=*AA@?DY,U
- XM@[$9ZZ8*T+#[HSYP`7>^>D1T<QA4H``T>P8F\HNN$ZQ]<;/<Q!E8"GY;"A<[
- XMX`-*JQQ$8#=$\)!%8+#L92#92@9J@!3MXAI]D2SM8BK9RGI<NZU*HC9R<"Q4
- XM4!5I$B[,EB4@8!NJU!=>ZQK[\;;_RGM;=!N7DA1I"QIQ`C'6<;;?BBQJ*V??
- XMD3-N>[5ZRZ\?,A@%`27#0KADJTISVQS341I*`G!K5A4D=%!E>Q]:6[=]X;9<
- XMRQ_&@K0)8`1_D92W(45T&[9>FYY[VRZ0FS-Z<14QLA1EH`/'D@#@PBE$D"7,
- XM<@71`0+1,AXQ@1LPH`,P8"T[@1O"D2X)P+OAT@+C\AS,`@/I$A=9\`88PW3<
- XMRP:W*R)H"@>M0;=TP&;9*@:0UA>9=!MS^[E5@Q>LFP?<V[G($BKQH1"@FS%H
- XM*K?M0A6CL4`Y0[\8$[9\I+6G<0=KQW:42RJF0@8A<"R,PB*Z&RLMD#%A$&E"
- XM""6$R9>Q@QP7'#`:'!Y#V"ZD&%3TEXP@K%1MI#5@]&A'1!55E#&T*"S\E%$$
- XMT[L#\;NBP2SE!!<I4:[VEP#S1YWWV1F?P4Q5FE#Z6A4'.2SI>I=YV;:WX596
- XMD`1%D%Y`B["IBJC6&"+0^(NLYZ=`BQOLXR;16Z>TA5M3$`16H%ED+'>06J<)
- XMYC+E^(PD<,*R,<=C&L='9`)BW*GR0GB`[`;^ND$)8*\@YTQ;8*UOH)\WG$7*
- XM,;T\G+L@L`5=@+!]DYC[U$\S57R0*ERHI<>F2%3S:`+2UBXBH,,M4,G^D3D%
- XMLZM=7*ONDA3[<2<P&;T)L(GL4IUK`*D_58I#I5&%)@*:G)T&B9`ZQ5$\!48@
- XMI<OZN78O^L&Z_"'K4A?'F(SN@C#_$LK$"JF*3(AHE*^.#,GC(<FL7+WE<LF9
- XM+,M`1LK#C(JH/+>K/+WJ_,KY*LOI2LMYK!1V<1NY'+V\/!!'K,OP+(_%?,RN
- XMDLQ%Q<Q?]%%E"\W[.<T0`\S6[!P#X8TW+*I#Y"[1S':'E;`56ZS1BT\QQ4_^
- XMY+`V):4?)\Y6.F5IW,>#?$0EL,8SY\9^Y7VDO*AU3`5WC`04NRG%.G_B.1OD
- XMV0*^<IXMD)Z^;*SJTL?VNJR/W*S9E1(*`!98G=5:O=5<W=5>'1$\]AXU]-5D
- XM710?L1'L8Q(@(1(C41*:(P,"\A(N`1,R01,VT1*X(1,R$`,_4=9^O158NQ1-
- XM\111\14`?!5_G=B*O=B,O5#1&QN$L7F)01FNDAHUE#&,.QIS$+TH``,S\`*Y
- XM\0*[41]&TP07#"H"Y0:W435DRDJ?RP,S-P0^``)QDT"5PQ2LC13#LGHMF#-8
- XM8S1>$`09\2^KM]IHBA1]\;E/1X1/P79Q\[YH&S#_@B=I,-V80K?"_=L*X`47
- XMN"!;``7C001NT`7)L3*BLG;,%D-N\-@MP`,,PA0\@`0X5P0^D`!"D)C#PKJ@
- XM[`5:\-Z7#-X@4`5P0-Y,>-YL=Q?L/=L+`ML[5]]%P'KZ747II!D47N$6;A8*
- XMX-CF$0,I`!NUA57S204G8W.]-`6PE4Y>\+$+8\J%UE'.+`<)8-HJGA&H2\QK
- XMUF;1.S%Y$$^W*P=GV")>(`09(03`B(HN#M$QW@)"_A%$?I"H.&S1B[O92CD'
- XM%<'!3>-/080,<JB9E.3S^1%'<)39:I9KY`6:I1P0SN4U%;W;36-.4$)D7@;L
- XM36-8#C'MPKKQ!%%F>&UHL-V5!06!QKUXN^:F75ESD^8H]45[#@=]?N&._NAL
- XMD>'U;1XRT.&*5P3=Y`3S22)8A2\E"^+IQ&O12P17L6J`QDZ"3B?-#-';+5L+
- XM?NDO4]^DWDA]45*J_M!AY`5HM>"=CDM44-])H-H8/>8_>!!69-JBG@"S;NH,
- XMF.K#I@"F302C7NJ?8NO/[@5+$+U#8"*LA`*"U^&L?4=;'N<*`.GF?NYC(>F<
- XM+0-AT.&T96`@`.L@#HT@T.N?KNFA;F`A*P5.,-L9$>S7;$K;6@8*O.8)P`-4
- XM$`1"X.]!0`9Q.3G)C::VKA1B0']O8$->H`3E7>_"7A=CSJV9]+4Q(C50DN1>
- XMD%X9L>R?DN<"`U&,OMU/L/%/`'"D@0(771<=#E`GO_$JWQ<KJC;G:Q6D<9]^
- XMTD:Z?</(7NR+]8MRX`,=#KLH.`=_`>TM<`4;/P07?QHKRMH?;;EX"5)>@`5>
- XM$/,?T?.E<2E5&.?N^Q3/$B-1/_7H'O>.KN[F,0,=[HQ(`.K;/05R4<.Q6&AF
- XM\!0=\_9,L9>&Z;?;+04)(`4"_!Q]L=.![TIT$AY27_B%^3;&$O9\7^.HN+@*
- XM%&?E1L.EN-U8H/B,S[FLY/F-2X1@3,H*P`/V\NLKT_>EB,.?:^MO,`8HF)7C
- XM_KEY:\+(."PHD`1"4.B[[@9LD`?U`?M,(/N*+Z:U+\F^CREWKOOAP?NL._UZ
- XMJ]'C,?S%WP)0</S)7Q]R7_X43O<H0`,=3HD)-@1Z;]I2\!&,SXW9BM[6K!00
- XMO[J'JA?/D;4['ATMP*UP/SGQ&M;%<B,#1B,CT('_-S4$8/#C)]8!S<4(@2(;
- XM4MBPL!!S(K89"]/F!>+?<-I&TZ@O8,#7P([D0!Z(@$%`M=V!G#$"=5<"\`)?
- XM3MI`/#80O3Y"!"0<!PQ-00D32)C.4W!!4"#0V-&M'$('HA>&RE!!$+60B.6&
- XM,.2,3?D!8&Y,:2M@H;=8U\5[&YN-SADRI<*-0!^]8X(?XAJ5._-'!B.=AD,!
- XM-:##Z2@H8#?L11+0`O..1,B1(.`$G@LP>7]F(@'<*.B"HH+)LS-M0R`!["MR
- XMHVU$8*;9>"#`"U`!1$@%((IJVTM]X<CEB19AVIA``G`W"L<0ZA32YP4L(2;L
- XM4#SJ@X4]+U`%\`,<`#B9,!16-"\0!1)`%*@#`J'6P;D=F`<>@]237.V""3:W
- XM5C(?X`Q4*0U;BP@YA^%UGOI7"1F#93`9;H8S:`/67Q&0,=^DYH@XS;($#!0(
- XM$`)5P`@8`5R23I)>/%EZ2Z&^M1'#(`7$T-S:8%K.\+T-3H@%HE<9P`+C:6`0
- XM/:A'^::>`A!NQ`FL6`CTIK5(@]IH)40H#`JZY-<IRH"[&E[7[7/A+FT%]%;@
- XM:*!;\_!O*`#E1L(X&.'K8(?/#41`P%6@F,"!PH;:$)=0,?,%YV18!9P-MT%M
- XMC`8%4$3TE@)9+$0H^6&P@Q(C%H3@(0/&0AGJQ+*`_FZ`&FPY66#>T4'90ENN
- XM&+[;;BC/[*&`*Y`&`$Z'TU#LS>HU**T'4_X3:ZN&'M'KY:7MAJ&RP.I9`\EL
- XM)O8%*98SSF$]+%M'((!!E+53"^E6`LE]T>'ZX;"IF-^8PJ@9%J*AA5`QW342
- XM.%R,6T]C+A^"DZ,W'KRAL6-ZLVUNF31]LMM8ST6<6W?$6(R$2J?LJ%WH:A<H
- XM8`0FPBO0X1;$5&Q;F%$SFC;.V+:(4/]"6UCQ0)'%ZJ``1H+=BW'KBVY=1-;V
- XMN7IA&D@B)2+W[0<%!;ORP%<$C1+I(/D)S>@%LD`*R(D[<2>B/QS@[M148O!8
- XM'8L//J090_J:0`)H>#&BC+F5U<C>FL!(P(X@@&>]`9\%PZS(*+2.9D\[^L,Z
- XM\/5@G,GSCBG/,H;'G@7&@)8"J"VX)'K-OQ!X&U#`^M(B28Q%/,7]X((D%VFX
- XM>95+$I(+!7`%<@D4B%Y4(#RH-@9!&H9-A7!Y?L),58VD)!@&7L$C(7.@/ERQ
- XM+!:]@L#:B2&WP=40O&%1?`@@]VH7")(WLAY@\\'6BYHJD6>*0_8CDA<0(]F"
- XM0"MO<<]U#%JH`(06%7@!AD'&!,(A8-2:PVU85JEDI\$N:20$G\XK24^W@=!0
- XM"!2P+F2A7O16Y"\YZD3TEP/N'B3J1<1KYPRG`]/^-(M-FP+IQ$CJP5.("E\`
- XM)MPWJ>\V(8>08,&6X4@#6,14"[T),$`B'C.P-UX%(4OOV0)X;>?EA*-TQ!
- XM/H=LI4"F',(X**W1!OY%I;1*OM9I@!B1<-6%D9&@`C:E;&`1GC)5SBZFD/W0
- XMUCI9+)LB4HI*D#(2O(!]XV3Y3<V1D.2P!<B)>IF53&&,8(K;X)2XW?7+E!F!
- XM!/`N1-?ED@,7.`FO,!8./+TH*9&AF"R#Z$\F=+AOT@+.BH&Q)0L#MA@&*I#I
- XMC@"*PP)&('J)J7:Q>]C.TV$2M0?:10P>0/'JV[K$$^XC8WQ#O"CQ;MU+G(3`
- XM,.@]1(IW&X(&'*"$+:`5GJ[4-;=8WJ(K@*?Q?<$Y8($J&Z+0\TSBP9J1OAX0
- XMO:#`Y5-0Q.@OM(NQP&PHBD49="1$;!4N.?`8.DHK@4<L`)AMO!:I0[8-U`.6
- XM9.IOY`S"1_5TG;;C7EINV,P!.UE3AF9'J6*.TCH-+PUE+:^E^<N6'`XV5('F
- XMEP00C&8Q/^?E"L!):+=Z3@/61"^)P2"<AG\(1M)`I)E;$`.U6,7HEMDT8D8P
- XMD6P'!GFFT^"]9(A0RTL<+,]5KE;Y^$"55G0.CV%!4,#7(#9+Y@^R*&/N;@Y#
- XM+0<J,Q\6D`%R`0AE+;2%#O^7$7(KY^L-O$`L$/.8Y.H9&*S-VGD@TA>G!,_D
- XM\W$<S`%%K[#W(#TG><(3XRO0W0D'1/IB0`(PG:>$06BM%.2!-AL'M`()``J,
- XMLQ]"&D1G`I*9)D\+!,]QIC!Z&^\\GDXS&6;+2F=SOHD<>0(><=Y]3:V9)F7+
- XM-%P9G*<(V))S:2L?G*(<&)43"MV!Y(#LW,!L"WLH[P/63!%HA%@;#W"?:H\3
- XM*L\I@`:H$(5(G[1S%#H!V!AI,A#QY(0/L@G$Q@QT%WJF)9Q_'_,_!=`':A!S
- XMR&OX7`Y$Z#7-Z!GWLJ7=DYI4TVI>PVRX#:4`G!1N(+&$CD1M%:AZG$`!B$KA
- XM0^RV]%8G.)C:&!9<*SI$P";0-?_F<V")OY!L4KDL<;ON',1SG$)`+F#`"LC:
- XM>-ON]*$1D`=PGMDF*)`;"$!<`Z'9W8G52/K:X118HA=4XL&YU5@:?:A92@H]
- XM<X"ZSH$1J,9=^N2B82_;F3T6:CF<BD497JO1<08Y96<R@RA[G&*;XE_^A=/@
- XM5K05[>2@9#!;JK\UF7?FG1'H/-ZQ:4V!)4`^TZ41`%C%9P<H%6Q5##\>P3.C
- XMC(N(Y@7!![H"E;$P#V?+;;FMSX44Z@`8VR*G@;4MQM@U0[D5Z'(!]6$4FCZ!
- XM$B-:9"=]HW\4<*8)B,*GQ@-HN`U:]#8P02@1'XR&$Q"CJ82,[D.V\P]#*>GB
- XMA$D@`0"\8>=+3>/I+&%FU"P^A[]P`O"6;L1\G!!X7E+6HZU:)&LS""OBFW(P
- XM*X;%M)@<0Z1/\PSVB+OGQN9="L4E,$=-"L;$0'TD*27EA'QO"F2P2%@1M1P9
- XM96WPXI>-0JMW!0*D/'6HP12WH:F(2OK4:)/L"RVRC;(N8-H>J9[RK*C\@D&4
- XMK]P9#_%H1G5?8&N/M`O(]@9.%IP,>SS@+\;3QI<'7$-^:PTZY(A01-2IY5;4
- XMAW`U`4,,\`725]\87STIC4@U#2C5Y'8,\6GYRY;-D'@-`9E#<^;=]VPYN&0Z
- XM:KJ5T3)>1A,XER&@[T&XE&DEHP[LI%L7SSGLQAO6,T1#QYB2[$)"DCX@$#R;
- XM8E\X+XFAK>+5.9`H*Y<LS:BD;P2<KKV0)\RH:V![9^`U`-:ZU5B#)$01$V$O
- XM$,Z%I2#P;*E@93UO<;%4D@71]G(&3;6II$_:.8L?).Y.JV0KC;01;24S,P0T
- XM8P0*T"9)`$T(@2E`!&B`"Z@2$&/\<<)`6`1D*FP0#)%MR6Q0J_KHLJ5/#"O3
- XM1`B8%Q`74&7+S<DY0W%KFK9L)P0`EK:*&TVTE5Q)VZ,Y3)MPBW<L8C!(U;Z@
- XMK81E)7&CJB>6],QL5P7<@.<8<W$C\MU5\1IU2-\/J(P.9+WR5]BEOMK>6_VN
- XM%(/JM</BBET^'JBRK;!K+^D0I7H:GD6!_1L=[K,BP#U`Z@*LVBA(4F-7S($^
- XM8#2(0!\]#5/0-MRY0\52XRL9@*DQ(FYX#A%[8'WH<F6N%RY;,L?JB5W5I.RI
- XM`E_%"2@`K#=>7^R^\8>/#^",`4.5!A"B,G6Q:J^,?JXLT@9<(`^X@K$#C!$C
- XM@9(+@28=F&U[0,.V@$#5!R0-EH488&PI($K0-P=\@`+8`PRV=XC93-('"DF#
- XMU58+$'.540U+[N"L(5F-==8./=DBBS)192&UL7YVOA2?.FMG#<>@=:OM:Y1*
- XMOG8JX<)L2]M-=):E`975AK9<&OLZ2V0@/.#0_/'!9DL+\`.Z;$I-RL\5K)CL
- XM\#(#E^*<+0B&B%AQ++K+EF5RXW`>;/)C@^RY1`%R@2ZTBY?89H8%UE!?\RB9
- XMA+T4$&POGE)Y.CK%V%(,9%MHE*WPX5T6A+9-VVM5;>],^P2SS*G.;E:/1VRC
- XM[0UKH9Z)Z&@.J:(NX]>S+;;G]L&FVZ*Q!V!6:'$#=3;.DHYYVR\SHPNJ=2-1
- XMO^*&MPK7PJ2MA73HK^"N#.CB_G1)-&D9*.X(:+O5LUC<94/MLD56Y"F5244:
- XM:*.SY0L'A>W@N:<@6HMIYN,J?R%ZU5>S22ZT[#;BLCLTB(+47^%N8H1I^%JP
- XME8GD#&]G$,T4&V@7@D+]43T>L"F:R)<-(JQGR^X'3NLE,:Y;]5^>R0W$TNK&
- XM(C9@"VB'V/;.;BMYBP(B;(.8L#+1PM;6#.MBTTDZ86QH-^VJW;7+=MLN17@6
- XM:0`/R*O3$1EB0!APNV3MK'$$M482V-I:X[MYC0;HM;D6$V9"3>`(>4TG``54
- XM@7?7;F!C"AV!L-$!L'#8L$+CO;R85^V^`!5P<.6>"FB-GQ<$E$HF0/TFF>\"
- XM7I?,64`+:6'&S)CR2EXRH(-P"V\A>D%O`B@3'$)/?`@PA@32DQH9#\M$-/C#
- XMBR)ZHY=E6PVMX37$AME0&^;`8^B]WR$\\`I:TB&ZINT]''O!/Z`']<`>W`-\
- XMD`]4E0WXAQ5``R`%G&H!+^$WS``W47N+;Y@PA9Z"19)2'E,K0@)KHVP!TS(4
- XMWP00PO!?0"A?>W*83AN;^RDYE[TRG$_E-!@U,O![;2__?2LN1MLJ8-^[*QSP
- XM!?LV$EBU#(L%W(#W[P4[MMRV)M*\+\CM?-Z++)H6&`(7D`S<.KZ@G6.FP7$-
- XM*(QZ`GIM[_ME%/PR3>`O$(#Z%!1E>P&43?^6RO?;:LU`'L"+'6+<X,NI:H/1
- XM0P(P`U@#DQB7VR#)9@`.L`%B8`[$"%=3%UPIVREN7D<E&`<\T2%V+QNHP:*W
- XM\\8]%?`"TLGF_;P)X,VEDJ9TRW*([CH;?XOJOL@L&08,TPW[3^T4KF3@V1!I
- XM5")I:*F]5/"M#IC`'5@;(]X.(<%#B`H#"#%>K+&X(M8!.V9$,(8U#,(IQ*',
- XMK<DJ4W[U#PW"$1&XRJWL7L+/Z4H'QLVU#81UAI;3/A9/&LFGP`.X^`1L1+1%
- XM9=$F2</%>&"%6L`;=MT4Q(F\`^4"4HF`AVL85,:Q#;$W++U>FVZ4J*X1Q!,!
- XMIY0*H*E1)0)@VUGQ`3Q@"X#C(,!0LI7[DL`S]@\?*K+A!!X#++Y&+C`!+&-I
- XMTHP7!SCQ`EM@"P0!;.Q,I274_5S2&.#XRQ<W3NH=C#S'R6H"QHMI/)!9'=(=
- XM>72@G)ZZT)!J#)5>2!(_]ZWB#-:X.JP#UC,1DU+*$=93*#)U:$:HK_.!*7`<
- XM-)&*07*6W$_`$*4D2KZ``!-`(<V1NW&,G$`:MR"<9YIP`UP88K#9QT#`CFR:
- XMN!!E<8@8#?B5A*_-3PY^+.(Q#`'[BZ:(P`V(@$\`MU'.7_$7?.'8A%L&L:;4
- XM9,(H&Z$LVD.4X^P55Y(Z((L142T^&'T!&)\`,>)B=_',U1.^&`0`8V$\`(LQ
- XMS461\5@$#`$F(`7J\0A($PL9X'R=:IR5^'$"X(BK4AA'9H%+E:O%8P!@E;(R
- XM!Y!56A6,1A9A(FS/,7+EY_`88%<'86T]PAS'8-IJ8-]E5\[&V[BC?6;6+)I!
- XM,JK`86"8#.M>/N%\J1AAS5W*>#`7YB"@,D("/MX"Z[<-.&:C<0(\9EUX7+$P
- XM&1N-)$`C%BJ>^`S#B[59T^0F+*CP#+N%4)>/>*]$>>.LD]&X;BL0O5TW"2M5
- XM[=:%>)&WCCRM+M)`P!9E7;C$MS=$<2YW?*BDWK_PJ3<L(*!*HW0A(<;T3<AT
- XMRQBCD@J<`-Y)VV`[-FPZW&%59!V>`&F8`MJD!0`3&O`8=F?H.L=O<:IV#&1T
- XMA&\8:UM<3.*(J"_7L)315I[P$&_@/6C<RN$PV(",+C[QX=_)"*:S,IY%A?A>
- XM,8)RO:W;>)X=!NRD7"XH`A:!@])QEY6T>`U%64B;B+UYJ))(6"8AV7$E.5^C
- XM(9Z=-/@B);G03+&2'AJB^4(;>,ES8LJ:808A!M0`UZ`#^%D&6(=@9[[^WU*K
- XM"MAJ/D2)OO1TYD.'1ELAUM6$6C"&6[$`&]D8=O4H/U&4..8NRS<Q,'G'OVDK
- XM1QU;!HP8HM%TP%V>DE.*!.+J@TY^1+E^90Q$71!:&ZH$E;VO*MQ5UN-34R)8
- XMWM/1@2ZCSAJ=P-[S2I6Z.5<.,&ETVI&)E_C*C8\,/DNR0/JF!VEUWCJ[PBZ#
- XM3VR"!49#W!W5/L,F,]T*409N8R]L%TG@!$2:+ND&'H,"L4:W<8:RUB4+QDP$
- XMM@)EYJ%+`D-4<AR9D"OI"Z'"AD7"W/FY<DAA'7?:*B$'4A2084_)>288U*$.
- XM&&EB[3`RQX(0`0%[8-]&*(&-_]WD2-&H$D=32IN";A5G"9.)\X'FQ<KQP#<[
- XMU@N8`A$P"1RJ^@RM$[6`G@-@>H989WX55RN6'.#72*($[^L4\`+T]6WDUV9)
- XM#$`4'BAMULZ?7HD)H"B/9_!EJMUB'5"J'3(@M!72T!KV`FC`'"Z;'QL-;2Q>
- XML0U?B,=$UFJS5_0FL?VD06"+L)G,K8%X+*;X@I%&U1U;0<>0_(8*Y^IXJ*L%
- XM(1GKLK/"K)TU'HC'T<N*B@!,\J+'3>:`77N;#>`!$0`7YK8V`26PBP;@;?S`
- XM2@)WW[XVA!N8$3_X1P4>P^1N`2OY,3RDNU&H-??/;1`!S@GD5LLM#'L*RUW<
- XM>AN31#T6P8]5`!MVPZZ;XXV1.G"*J\AM<-UM>`2@:-K=%WA`4M@4,1H-3+H$
- XML'E7AO^=1TG@!6"3^>"N,N)F>]VZ^V'S;H(!)^2`P(;3NDJ7%>\BL(.9MPS%
- XM@M'K=2N`-QSO)%X+&A9LKPGV!=RM`,X39MN3-NP,\.LW:S0DE83L;"D`+I#8
- XM\1V[+;1,M)):&X<5ZG0KKV\W]$Y7NU6V\`$^$."FP'Q:X"N#MB0&"'YV0``$
- XMQ]#@!((+']&-)B!X/Z6._!N'66$;D,!1A0N``;84!82)#G?`#U4"'^$*8`1X
- XM[Y19!?#%%\">1.`+D,LL$,._&?]6`;(;8H,N`YZ[=_<1$0';Z"E4C?<@`K0W
- XM$&<8$7B&.^_P7<2E]Q&/#@:1B3MQ6D(?V4Y<^@QT"2PW;_!]P*UX0KD*GU.+
- XM1Z_B37KY22L6X]\[=FRV!""^R?<2@,GK9(8/+_8]`DKKH>(F4L`2;G%`-Q[-
- XM-)I^#8!<D-?Q_LVY<J<1!ZFV6_26\=E]1'SWQG@!>;;J"N\M/@5(]8C^?\SF
- XM2D_Q22[$+?G0M&78>W@7[TO*>U#YG9#B9+R*4_+>W3->`*:VT9M\C0/QY(U-
- XM=.&O".5C7([3\3;\PXG7$-G$;.>1#W%)7L1=.&^-X<K<E&-RJOL>5#D0IP)4
- XMERG`<F$^S'OX2`,!Q;N$M_!KR%LM.`/'X.9\N6`=#W[%J&/TGN621H?TR1!1
- XMS3EY&ICG;&>;0XPY#KV)%3@'XB7\@A]N"LY<TOD'!ROCO(8_\',NP=-Y!1?H
- XM&9R!;_#<"LW-N*1YT96CGNOR.%*&^42]4][`/([O\VX^`OQY\5;HZ7P*-'2"
- XMOL[/^4"7Z+8DMXK>9DZ\VODWJ>CPG%Z6X0:AT8GW->_H8(R7A_0G$LN]N5#[
- XMYS4]"12G<3X$2MS,P>FE?'7'AUSNTVT.Y4.5&?0AODCR501)NA_W,N8%O>BR
- XMJOX$7H,A2ZM4W*BGJ^+=U$WHS)GIL!N(9^U&HJ"4N<1FW^3;Q`I2'G@02NZN
- XM\`^-$,6R'KV`*"MEJU:I<+I8M*V1S;V.[#CAXPC\F;_S4E[+`VE/+]YZO5CS
- XM0%HXU$=Y[M;C\2X)&!@G($>RP.U<V`Y#K1^J<%[.Q_E$[^`,W`H\)*@^O:6Y
- XMR[[L0#RS.PQCS=GUN6HCZ:"]:8WVTG[:_Z5J1^JO':[K[D-U6QTX-"(1(4"V
- XM4X$.=\%7.@-_Z"X]HB=U=Q[-B341PNWQ#K4?DZS!W%*-*"_J,OQ*_U71WGZD
- XM@&GW[G3@N)]TYU[=@8E#+^@0W:#;='"RR(&X4ZT_ITZ/QPC?3L1C^%=/Y&.]
- XM>/]WH6%SY(@@!^[JO<$'<E2!!PJOFRCFPO.RKII)R<=!NQ-XN.TG>JW?.%75
- XMG<#8RAFLJQ,[Y1THBB'\00Q86&7`!)CH=1,V>K#CZF9T?J;U]/[BKPF0E?&*
- XM3P9@BXW^!%H#CB>C.IZDIZN749C78`SW\&L0)$8OO4:NJGKN;0-*.)",LR3?
- XMS[]Y\6;R36`-*G?03@YES`#E(!N=AV9,TI#D7?Q9\I93X`W2^"I?O*>`@<-A
- XMWBF?['@/#WIJ>!&8\B2^>!]F;H8J'RO&F&!O-9Y8T?Y>/>M@PB/MB:'#1_AN
- XMHE6>`)"-7D*^!FST9]J0&VL&Z\-I@R]T\V).!4`Y@6?FQPH976\)S,'V0(('
- XMXCK.,WWB:%S>T[HQL=Y&&FMP,"`NW=B`'6`#L8*MX\S_)-W8EP"C@:_[UJ]Z
- XM7:_E@+@;:"&^'MAO=,_94U!\\9R8Q[Z;XP?5=L^QM+]4=<%>K@-+79;LW7>?
- XM+@.QHJH[U<(J;?/`N4_K?0`N+/<X@DO"/'%.];@^3,.!^^KJI_VU<1].>P&6
- XM!F@\'FBAMG>9SAY4I?LOWY3Q0J`B]VU82O$4T6OQ%,C"!^)SX2^,LR\^EZ8J
- XMO%<7JC[73UN`U>^KNHY+QP6_UA_\B9_P_\7%Y^AZ0@D_?%OOON,2DT#W6[R[
- XM5JP;9O.OT<=7``@_AXPI08$".HH*Z'!.8&HR@7#/PL;4`%P#:J`?=?FC_N7K
- XMO9AG]-:J9_-@N13&"_R\3^"I/B>GL%4_!\X`1:YX4<_L+T"F/P0N;GGDYVT8
- XME7?(A&W"U'X>J'B_XL7:?::?E>_YF@9:<#_L(XQ^1/?QQ-%D$."+4RZ%.<#V
- XMW;[B?PYI7>X3_I#?+G[NX<_[;.!HW@>V[O8M/T\)_)+_VRO5K[@%;$`7`!0Y
- XM'^U1"/@L*6E8$4SV>\!`$`?9_QA61>V?_;9?]H.`>"_?`7IKI^DHO;Y/\.N.
- XMW[-[.G_M@G_N4W[=#*-/YXMN_$2U70#^R._/E'^^9_Z5`_%+AP[!]S]#/JF/
- XM<B?PEW0O#\2#/T.W[RP=MJ^,EPX"DOLX/^A"-O07?HP.NE'0\Y_V;G_Z=W/Y
- XMO_SI_^I*_-P?D>?]_7WAWXYGT@%Q\)]RM^19??=>Z.<R*277QEVR!6P3Q!E(
- XMU`4P?5>>$M;Z:7G-@9N7,JU!7\!@)M!,>Y*$1H;H>"M[7H0'`JX74Q[^-T[9
- XM10)![)`"OG@KX)_G.)"`0(4)6!/I2G*.!]@7@(#X@HBWT6U6,$3Y<D>(?Z`=
- XM$!CSS"!#H/\%GZ$`MHCCPX.E`?/!&\!L06])(''V!9@5T8NF5]4%.X9)(839
- XM*!"CP0QXEH"`2P#?HX5L=#H.CU,>T1^<%1*H`FJ!T43T<@.P@12#&UC&'(%F
- XMX`>H!5H!212:5]59`;9!>S86J080'S3WQV%/)PZ/=P9J@5-9])(#;'0U#FA6
- XM6[42MMD(0.)A@7,@%!`"VDZJ2*#WQ`D-M)G;,YJ!`",`*,@)TH"0(.2DBH""
- XMJQPI&)J9@IF@*[@*/H*>X!!03*@BKF`LV)_,@IC@@C`"[(*WH!^8"U9Y.P$E
- XM*`M>@JX94S`"5'G%X`\("7J!,0"=-PK^@LS@*3@">('1H,T!"282JH@7Z`M:
- XM@JV9-@@.=H,KX!VHBH"#XV`I&`PZ@^H@.J@%$@$DWKFPT34Y:X`[V`RB@IO@
- XM9]<)?@%$`"@8`^``]R`PH@]J@ZJ@/\@*>H)$@"N8&Q2$!\E!6`OV@=(@0[@+
- XMPC4083X(#.Z#PR!%Z`TRA%7>7I,12H3"(#2H$.*"`*$7&,14=?@@2>@,<H,G
- XMH3$($(*#*L%(N!&:@QXA"&B587K6X#5D$-Z$F6`\F+L=@-63B1+_O&[\W_4W
- XM;MQ72Z'4@,F$$JX>6_?O10W`@L"'\IU1KU_$%_O)*FQ`YM`'L`!;W+:3`X8[
- XM)R`:8>MMA?*"5P@6NH"5SZ/Q-IR%!`,ULONMA56=6"C8D(4[8)P#%R)L98!:
- XMR,DY@49@++$72CU^81.8GCR!42`K(:B5`5:@MK<5V@:%X1=(U,TEP,*VD=6M
- XM-XXAP;`&S`&18?'6!F(K98PM4Q<$?@G`5K@B=(:P7AX(&A(>?&!F*`+8`6(`
- XM:@@"$()@UR&X=B2"\][-810:#6@A#"`;5H(N(3^X%XX!,<!ON`R6@YE@0L@;
- XMQH4R@'&(#2*'PJ`MJ!7&A3.`<T@.UF;"(#$X'<HJ-(!U&!P^@\-A#>`=`H7"
- XM($RX',HJ-L!XF`UF@N?@=C@&W`#J(70(#^Z%9(!O.!?F?#_A>B@,]H/G(1E0
- XM'-Z'-J%^Z`PJAZ4AP4`&-(<`(DN8'\J'J*!TV!]6APEB.+<@8H?.H';8'W:'
- XM$2)`-R'2@B4A?2@>9H@^841('KZ$]&%Z""*VA",B*M@>]H?PX>Z''XJ(`B(J
- XM*!3V?D4A;`'7\7ZY(2,H!21_.Y*6\Z?L@X+"J@#]@5-9A$NX_U5_/6(N)`8`
- XMB;+?D&A#;8CO($E'%.J&-B)2B"2.?2+?W0>P/&-_PU,H*$2%J:&6N/.-!U10
- XM5P?[$0QB`!T@`HPL2(`10`7P`8D<'W`"I`$GP'TH(1XD5$.^A#4D@@6B"+`&
- XM%(<C"\,E)\8`=>)72`FZ"GOB7K@&-(>!8G0A)\H`A>):N,I5"8FB:[@&5(>-
- XMXA`@)\X`D2(EJ#A4BF>BG]@=9HIR(@W0*59U1@!.`"INAVN`>$@JG@`UP*FX
- XMRK4$J^)YN`:DAZ^B#2`K/G'L0ZW8)ZX!\.&K>`/LB@M#`.$KFH8XP)JX<#F*
- XM)P`.0"P:`1W$L:@9Y@#*XG/!+.8`S^+\(2WZB;[AJP@#/(LAP8)@!-07B>+K
- XM!@+\BCM`M2@HG@#?(H"XRH6+3,&X&!+LB2@`U#<&7(&LXCXFE3EX<N(30"QN
- XM4QY/R%,NLHJQX;X8R,F)2`"QB`\J/7W!P&@K#@'*8IQX`C`!Q*)=R!1<AA*8
- XMHD@$1(S\X@E`!!"+9D_KYS#^BDJ$P<@$R(E.`,BHWE!*9TC&:"DN&":CG+@$
- XM5(PE(%XX[@B,%(.E:`1PC$P`%L`'P``57AE@*%9U=EYSPW8@-#%6SG@>M`'X
- XMHJV(!"B+6D7"(R?Z`,1BIS;=$$\NH[G8)P(!P2)L@.D$`5-CU?BNI3=W0%RA
- XM--J+3>.OJ*L\!E$CV'@"\`!BXW2S+:X!20#'>#">`$/`O]CQY$(XT\AH&C(!
- XM=N/)>`+,C.YB;B<?X8QY@*+8%<:,)X`00"PR`0:1*>'C_!]^HV9X?3".5@"Q
- XM^.9\2>-,Y>@G0@&!HYRH!1"+@`ZJ<R=X*UDCJR@%\(P^(]`H$PR-==Z=Q]#,
- XM(_0B>I`VFH9R0.AX`A@!Q*(4<,^A`9)CR^@YRF"Z(Q10*&YT`@[+2#GFC#_?
- XM^$?U77,,H,I@)8I][MN'(`&*;ML$$A!@7(`VGAMPY&54B6#HY[X!<=8C>_0:
- XM<$P;76J`K;`N'\+WV![1?/85>P3R48_-7FETEP!=6QP5`.J-.^UC^<(=:7OE
- XMHQD@[RV`35X#>"4^"_*<M^<RO4C7HZ5'!0!YW&/Q5N31`>YC7D+]B7T(9+<W
- XMO"!\B-W]&$J0=4:>_YA1X4M[@:W'0,J/-"*8=_7%?0<DM]<G;9`3WYN1J&P!
- XM0I[IM_D!<:6C7A",!62/#V,&\2QAHM[T./AAB>T"LU=$4@R>V`0(XI%V$628
- XM*.N%CU=BX6=$4GS/'AT0-Z"/Q=OFR"Z1@1F8P:?MJ7APP/PX1`IWHE<@!0<@
- XM(Z%$TN<1.8E:#L$VWJ4P`D4;<"2*?2Y3/.$:3("716;A!'"/59WP-"=$.+P'
- XM:^.ND`$7Y!#I,LD!UV,>:4OPD0I>7O5`["__HQ#9(2%\@<H9*0>\?%``&AE/
- XMZ"WB#IY#()51B"1[-.J1;U?>FN;;G3VY#X7`OKEO\4++QJ_90KI/"?9*X@ET
- XM`.4R!LR2H0%7=TNF`!T:'0!K(05H`+\&%["2@\Q!,4O&"U;!KW!,+A:,(1RP
- XM3*I$SB0O.08N$,)D^Z;EQ`MK@"LI36*38T2#4$WFB+LA,6D&O$O/)#F9O]&(
- XM5.)1V(:!><P?5+@^``>O'FP0!NP1K$''$)FQ+C^.M@=/AH5NWSU9I:%(VMY.
- XM(`/0A54=#T5/*@DJ4^0R4OT*2L)OE^SMDRX@..5/8H(-Y?,6\95Y6`5!6;RI
- XM>?D$#E-"6"HW3/NB[<%Y;Y!&B?'=>?.31]E"@)1G@#[Y&$"459V,PA3P!69`
- XME_5`Y`S,F\]EPK1-<%T<UN?A"R8E*DC=:!^JA/5&II0*;`MKH^BM"]I>*TGS
- XM!)4SS\`$U+$=Z=N:D^S%"]WDND`7LG4E&/;GT565N])5>9"T;%LE$!=5FHUW
- XM7PCF4)Q@867$QTUR.V6ES=%5@F#S"%@IYR1[H8$M&52F17PCKI,SV)7:7B[9
- XM&HP!02444+ZT?H`E7NE+,@E,1UQI!#"6K\%65[X`EDUE,5D&!)4*U`CS`JZ5
- XM3=NN5%DFDVQ`4%D$$%,1ST^6%X8\B:5;R4Q>/*(E::D#CCNH8VK)1JR6<$!0
- XM:3'2+;W0&A"_V'KQ`C095-XWV\@X05F*E09%4'DO)89]P6*(ILB61\,8`+_M
- XM"G'E<<DB,)1]B6P)3IXXS>4X^2L8EV-*D9@B,I>]Y;L43]Y+L]5WR5;>E4,A
- XM^5<CJI,*`.]G39H49V0`N-'!6@)#:0!1D#S82HU`-4R5'H-U\+JY;S4"%$8Q
- XMO'STY7B`T7ETC)I^"2S$4P)F-C)7P'7%W%GI58(Q\X&K@5JLDEI.:*!-TF]?
- XMWS-7U?&5M.1I`/CUE.F*S9/[9&J=S6/P50P!M005``4\!JL*^%+V4634'1\`
- XMJ=QR*68<X4VPF)C.$`!CYGV/7XADSMV8)R8;D&.NF$=`\^-C0B.8W]&4`M0'
- XMT8O]]D"H<!P.7&`TU'G6&6OS%_A]'ET9P_%U?3UEVD>1A1)YWXRY]J431..8
- XM8DN-F,F>F+D`N0!EWQ=08-X&?("@,`0(`9#:$E"XN9DG4)PY9T(C@H(?@`)$
- XM%_(-G%B8]1WGY)6)\8TI8R:;&?&5F#@F<*!C/@&(`:;S8D(C?&:-2636:$?F
- XMCOF6+)FC7Q6B:48OD::*Z6DJF8]!J+D&/)F0BI3I!E"9YZ3SN-;Y?K)%0D??
- XMG7_#GSJG_J%S&EQ,9Z@I@A$<,*%H*@<KI<X4(R`-3=`9P/@%&;^!#9`;M`%H
- XMP&T0!"@.5R6[\`7D.6U`BFG[K0JQ)E&HTMEWXMN'.:8XFEP:<U=JQA$\9L+S
- XM8P*`>L*3"0+L`9`**O04O&R"V>H1@#V0+>8^=DY&F8[DJ\EM%F[[&]&89:(I
- XM6^;WQW9XF5S?5!5FA@<O&IG);K8!5F::*;M\4N3FYB6E,)P=@KSR!1@JL1:@
- XM"0((FE@%.B(%\`&%$K]S,B8!1\`V(07D;TC=%N0%)`:P"RO4P=2&X42;B7'J
- XM"1HGQUE?F@"!YO#SAG`>)"?G\8:0G"DGT)E;?1,D)^>D#>V;]E_&.09\`6Q`
- XM@>EQ@IPZRC7A!)"<<=X1P`<0FD\`TWESM@$:I^ZS!5@!9<4>&4K$`'OFUQEV
- XMC@%C)Z57!)Q^@@(,8&7.>]\FG.33N6XJ@(AC5M0[,,<UA'+2$G0$S=&Q9!73
- XM!.A1LJ0LJ=@1@8@E0+`3FL(:5$`6TT/4@^US>%YI^0\15H9==R8CH#=:$M5"
- XM!#0!!TJX6;S!3?_'DH`P5!1]@;?CA74XZT(E(<<M=O5/0D;>A7$Q@LU9%SB=
- XM4*?4*2@`F;AGU-EQ<CI99\1YTK$2>=_*<`4\D`2&RY2ND!`EUU)P&I1[S%W3
- XMB7,^G;YG?1D"Q)U0YL5Y>TZ?7X#8:05,`<?G@`%W:G\OVMHY=H*?R.<%B&:R
- XM=5G/;-A-N'[)ID4I1JB=3Z?W205(5U3`^,E[<I_V)_ZI?@Z;Q97P-1\<FP>#
- XMB*5)[08P@+.9`T";TB:UZ59:F]BFMDD<_)LT8MT)84J<(>8;"'WZ">?F`_F6
- XM!`$PIO3)-'8X\&;T(F_^!2A`O:E/^"L>Z-<H`NR;"8"K"6L"G#2B^1=LYIK8
- XMW?JGW;E_-!W\-VR"F.2F3<;<*264"Z/TLDF:,>;VUVZ2H/&F<S!OIJ#[R@J:
- XMM8P!16AHD#O"H#(H!9H`!)Q89J2A90Z`72;A\64JG+9GP[E[/IS"YZ(Y<:82
- XM0:@(FG-*G3SGQ^ESBIQ!I\E)=*J<7N?V"792GW!HSUDHT4%(IUF!<FZ=`T;7
- XMF7;JH>8GV8E5C)]HY_R)B-:?;*<5X':.GW)G.C'O^:`8:,CS1C1%(8\DP\-H
- XM*VD1";$6+9R/*-1YEL2=\AY1F`"*GFIH!EK&;*`H@%*"-!BA1R9B`(A>`2'H
- XMU^ENEJ`)P`E*;T:A`9@LRBX8H2]HX1:#]ILSJ-%`8LF:JQT"N-]=H'6>P%9R
- XM]90R*`QP3NYOY-NVTR!05;L9A<E.7)C_98:IE,B2]4$)VD@^507GFG9@@G^]
- XM$(G)W`E][<+UZ2<8?2F`&LD$9)_V"@HP^\&CMA`RPA>\FO#HDSEW1G9$0+G)
- XM@1:9G2:E^99<FDFHF:G\#)FD)D(J::Z8G^:Z*1TXF1"I32:1FIH**:K)9((O
- XMF=_GQVKRFQQ7,LJ,(G7B'#$W[]F@%FCZE]*Q?\@?W2G!`:#%Y@`*?QJ@S&8"
- XM^FQ&F\2+`TIE7)M+0;8)'&R;568%VM#!HAUHI:EN?J1*Z`C::B*C%.A).M\M
- XM=#?H?=?2Z:#'GZ\)85ZB^]VP>2\UFH0'+"J,^C/(2"W:QEP3N"A3^J*-I,=H
- XM21J5JJ+/*"O:H^D^``,UBHQ:H_I;7+<P0):(7069,T!4)Q:JY[Z%!K\DTS&_
- XMP9OSG@IY[]ED6LX_FH;:'*X$5V?L\1-_Y*%R@"5[_RB9V1IXD!?,"2E`&J0H
- XM0&8:**`*V6<UFFBJ>RS"F$)&J4,*2K+GF0)='20*.6Q"`<X!E74AI52L#<:8
- XM[,F@^>CLYYD^!O]HAR./!J>IJ'JIF$J/*FFZTM;A"W:G`A'XL`C!9+>I7BZG
- XM;YWXMMSI3(?*<;K1.4\6`BNQ`H5'4A#`YL^L/K*+OY*LG$I*A,=@EY:D>*EJ
- XMUU[JI89E7UGML4K>E!WU"V&860L%.5@6?6A`?>`RR0;I7EV(,P&FAQ-4D=8A
- XMI@2DO0<%#)M,$M=`(4@R9-2GYH[Z":]IS,!D;J;LT18P/TD1_A&&:@:D`%U`
- XM]DF80I;5Y+`)'AU6[5%/J0*\IBO`"A!*`*@I9/2XE2JG3IW=6;S%IYV>M3=-
- XM/D3)'MPA&_"GTNGS2.*X=9$>,=>6WF_M*38:NX%'&Z`/B5IP/13#N?>4\4#L
- XMFQU@GMPN0P36P"4E*H\!H%(?9)`OI-O#\M$P<<#+1^V].&2J-;98I'7N&Z`2
- XMH**FA-7/U>Z]>]U<"=JFWD9)0>$F15(,N][I]!@X>RT$"O*83@'ZB?Q2/,UD
- XM:6I6<KL]FLQ="+"NE*;]YJ!:J&8,NP+OT:2R(_G/A,HE^:.CP98:!W0X[DVE
- XM\Y1R7(^IR-:O2&"W@8#W&!!H;J1,=*+MC1IHQ,?_Z"V"0B,JA/H)563<((^"
- XMD4PHFV,8>CSOB[.5X@T.GEA/J7V&$F"D,0JIL'%0`5X`C^P%G@FGA"II#2A1
- XMNY#L)3+"`N^!`J@`C^J["<P`,Y@=FO*=)B454/K4^EVKM^JVNJY8J"A("^`#
- XMR`:]JBXC,XV>#@_%55K:.B"7KH&N_A1Q0(MJC$8O*,B+&AZXJU5DM/>O/F%X
- XM*FQ:B>HR99;"TA?PHKYJ_L@#V3JM'['G-^6K;,>^6D4&K()"N^H#]'J_WL$Z
- XMKV)\[M;RZ7@R>/MJB;FQA@?99ZH5'H02*^LE*3,YK,B3SB90K`'_*HD5O>BL
- XM.BN#ZL0\J`L"8=,QN!5@I*9*'?RCGFJ',]M\>-)$^T&UH`"YZN#P@2&1UP9;
- XMZFHJJU_@_I.PYJA,`:"$J:(6JM3>&!V49AV-4NF</FL4#^\!B\ZJ=$#V*4/&
- XM`5L`MYJH,*)8:_%FJDI*:X^Q5U,R"/M9:13PO"U#JS=5)O:4D@P*P+:>G9J4
- XMW%JF_BO]3RAAC7JK$>M&&0;$4[849W>M1JW9R+MZ/HI>ZXJ_"JE@KNZJE"HH
- XMN*F0RK*ZR_V3`L%C\%R::!L5FG*MJJPMA*XJ*/"JD&O$BH$>KKFI=Q#M!4Z[
- XMDW&SK4![OYZQFJZRK2VK]NFN@JQLAZ"`N?ZK-.M8Y[$6K,&K\AJ[#IB02L!9
- XMU34\#\^3*D;I17'#M<JQ_JY6),7@N6ZA[VDQ=P1`%!5/_RB?OCB]F6:T1?`1
- XM[!N8JD!.?'N.&/"^T@&'*;`)]FU["20,*=C`J+-I;9JZ;%*U)Z/J)R1D.28J
- XM@P8\!E&3/!HU\:)<W1R0@L9NG9J/8P@2L,/4O,D@6#^XD>M6C#(L,I4^NF_J
- XMK#(HO%J<"JDI*;#)DEIWNN9+NH-JI>R<4G?3\:\:I)CZOZ(!C^D:!:_)'?S9
- XMP--\4JD&;-%'?W:?D>@D&J^ZH9#HV%EVTJV0"A)+Q+:=28!608D.D(?*"HO^
- XM$7]7*:\)TW%PFR:*.9$JI2`HIJF+GK"S9@-'E;:D6.RN"9-JI>]?5QJ]C*6T
- XMZ!=[EJ(7N:@>&J26L:OH"^"K<J$XI`"K)V"PL"@"BX3*!@RL<%JKQJL1[`0+
- XMQ%6PGX'"B:`YH3T9![O'J0`?K#L4PA:EY.NPR?AP7!X2U[J>WF\F;`UZ:U:E
- XM+FE^UVMR</J=#,O?M6%**A!WON9+ZBO7VIMY+Q[/_8KJR:_^*U-0OQHR]VO^
- XMVF$6I,:$V#?_45TVWU`)GWV)J,)C\(AM!P<*[\>8=EDPDT,QJ)8Z1EHLNYLB
- XMKG09/!)*K`MF&_XZ^T4CCX$]&LXJ?3`F-_,B[9LEYM.AS8ZFUNBH>K^YG0XD
- XM.AM]>EF2!FE:NR:R(@`%^Q<TLJT<-=LN0+*LDB1;>U*R,*B.X<V.L.MG'RL'
- XMV*8(VFZ*C-:OO:Q`2B.FL"OI*(O&MK"F[!8KT\6PU-$S^S(1(84;+FO#!DLX
- XM;$)K<WQ4Y5$/RWR>$4`L:.K$VI]1[-MIH3ZNO.A+&XDNL8ZK,6K30K%2;"A1
- XM`U"Q9FQ*Q\+FH%IL^^=K=K%&IAS[-=:Q:RD9VXP&M<*?5:K&OK"H;!NKRD(J
- XM<*P5:I;>HDQMAW#'/K5Y[!YKTM*F"^T`V]!&?.JLEB,H"+(AZ`*+&\BS\R@]
- XMZ][0M/$F4*7(H@;[[`7[R$Z.`>WN,]!6LH4$:"#"TJ#I:EH+=&&?[NR4"<\"
- XM6:=I(\G)>E8XDT-;DH:R4FGY9]$.M<4?5GK*;K0,7!Y;OI)OKU`9<(V41CC>
- XMN?JZ6:E4(`@0!WP(0.I[">Z-=0*J7ZE152V$9)WJLSJH.,Q_!&O]'TAI_+BW
- XMCJ8F0`"IH>X0C*$98//XMB!JO&JZ$B\K:(5US1BKO:55$$T:HU>K,FHTF*@=
- XMS;D:\:D``20=T**^J"5M*PN93C6Q+-Z*ZJ&VIN`CD[_2L&'JMP>C*GM98I\J
- XMJ%ZWXB:[M+6V?L\JZA%F;JX0;1^&O^Z;J^VK&<HJ$D3CI)JN?"YQ@VT`IA$[
- XM2A9E6"+P4CA48M9#?JWK6Q#[MFX!L@'<B=B2I!+2H"IL92O#%E2P8DE@Q:KM
- XMB:Q2K6&D2>O(.*L!D7.#XA(.U>JBJDQDJZDG"L*$+K<FUIH!R;%3T2JD-!YH
- XMMS=F]#FP:J[L:G_JK8*KNQRGQ9D%0P6L12/D3A(^`/2:O`H*]NB-&T_N1T(0
- XM2X4S:4:VU+JBIE:X,E-W&TH$D`=K@"O$0KGG'@S*X3X0.6N:("(\K".K,9>]
- XMWJO87L@EO!ZK'>N0*^7^JW$NB$FQ`DL=&M75Y#JO_"WZRLOZM]7D6)?.GH^"
- XMPF([W2%/U6V<&]J.MD#N6&?F#K@[:_7JYBXL$NMI\.?*MA02!C/=8*S"Z_?J
- XML2*O-*AXN\E*2*W$(Y/+LJ^"J3AJ2ZZWYEY).VRNN#D3PN`NX4P*@H&5[,DP
- XMVNH#2]_6MZ1M^2)PK48][*>W%X1QQBJDZ=N^!O)H=QNO2GRA!'?[[(ZOI*:Y
- XM^>Q:J-)NF+OM"@IB+KCKV_ZK-NOD:HPVK&\NFDD)PF2Q+!F%KCX=ZBU"2^`Z
- XMMJSNISN??K)39BB[OR6F60!T$00`-8/ICA,&X&ED`*WK(WI9TVSH<JB<)\Z!
- XM1T=&N2V&3,10$)R1SV<0&T!"N^+N_0BIEJ1%Z;#Y3*42IY)PI!G!;1U#"\>\
- XM+0PS!J3F:!1O5\"C%%FV!@59*O5DD6<#WZ=`P#QV$5_QYN>>>*S2H:*Q#0OF
- XM+5*ZD:*\CQHD0@2$H%Z6U7J7[ILE;-*;BKZY+:>_XJ@Y`2JO`F@&G+S27?VV
- XM]#Z]K$3Q%H!)=SWEZ#D'4`@\!1F04]QE'ZVUBM;2L^#NT$NI$0&6VDL)UQ9]
- XM<BUIFMB^FNWID9KO.KVJW2#XD"AW1.'46_6^;LLH44@%]+N0"(%AG2:H3A[Y
- XMAJ/"9UYN5G*9S0@\SL9VWEZI,AD%*40DK4#?F+JN!*C"'J@;^4(\!^IM*QQ)
- XM,G(&>@.+.JJ)RL;;X9JT^PIZ8Q4U?&_5NL!ZC+X79L2GGTX'GBH#VTOJDM=H
- XMC%I`(J=Z*1B(,(B!&.,WA"(,#/@I9K-A(JC9:?0H1HRI8T!M:?A)@%2>^NG1
- XMNG*,'QNQ_#6%K`<0-P:(`7KJ\L<EUIZT38H[_0HV0!SE,AK8`;,D$%=+L@O4
- XM08EZG6*]LYTCF#)1`2VFRR`%=%TL@!C`;,V_TT%9VG5)DRB``%P?E'3IKO[;
- XM%_"_F([_"P`+P`D``5S_'L!_:@+,:C*CEFBZDH-FO55=F8!UG&P+;I<THJ$I
- XMA!AWEII*62X:[0LLZ&S.YWXKV(0_?VJ``P7HJ<N*Q],@`!S1`=?;%WB]_DH%
- XME^Q]E(^DRT0#4WPW2N%&!+-Y.?"=PUKUP#2B$&RDZKR,)G^9R869>(&@X/X"
- XM92DHF%?)EI@A0/6+R-JUJPQ0=AL)91S,&,I[<`$B`)C'!O<K78MZ%P(`M@;M
- XM8&O=#IN!W5MEKL4(CQM><%7Z,W>"H$``0PFQZ/C+'K5,<,#<R_U:J-SF/4L&
- XM`Z/^2LO&_"EAQ0<=?,G*NR7F(LS.(K)4B"^9@G)ZG)WT8P6#<FQP"3`'L,%<
- XM@!N@+(K!QF@=C,GRL=27"4/<2EHC&NV+5V:<=,`7X`:TC((PY4*XI*#`P@M*
- XMM=BJY6<N/#G\<KTPN_`+RRIOP!<\A.+"NG#+Z-XH#A!<,:P+OTOU[`<%P9+!
- XM1>/%E%*N4E!!QO"UL0%S<$%["=.@7NF'6[_Z#08F[:MAR;A22A9L^$6`LBFQ
- XM6Z^EIL"/-N/0MA&-;O\K1Z2@D&$(F@@_IB#FY^(&5KHEI@5<EHH`<,"L(A"S
- XMI>%/*`$![GL9*O9"$(\I"D/(,VX`?%5AQ6LTW"BA!`3LT_S#(L!=H"RB,@.Q
- XM20MB^F0;,55HF*!*;6;%T[%&@%)#X0;LUK@5CWLSS^Q[3N&&:MR"OV0`S>83
- XM;ZM`<7);NXZ_QRN`UP]'P/\P4ASE@BH/L4XK!HROL'"#>OHN"'M"=8-0KKY`
- XML;X""3(!70"<">"9`"0""A`&T\1=X@K8!(3%3Q4$%P+<*+MH7<O[ML&:YSJ:
- XMS[T!+,*"FP+_9-Q+9$68K$"SK?4V]"!7-17^4@ZWPN?P'8R!(I=38!6H<<E5
- XMKHT.Q"R=);!H5ZP$LL5C\1*$%I,!7K$GB"]@QD(#I'I0[!&TJI9"1Q1N8+!E
- XM#`F^G6)Q:,RP_`HZ1FD,G>`+%_$1*29N;/#P&B`/G[\V,8WK)^C&]:P)</X.
- XMMT\"AWK^"L7$+8>J`AS'(6KM"G=HJ2*Q!*P;$ZQ0,::9"#\&T[$/T//1!\:H
- XM;DP5HYDU@AF*)U`N!68*B@=PAOE;5:<EY3>D`>[%7_X`\/&K4/)&?`'F%3D>
- XMLPOEL0B`!:#'-^2@0%,PF%'8@RF72IAV<2AG88*YZ:J&2?/P:V/P7`P)WSDC
- XMF%UL"0NVK[!)>R\]P;W4@E#Y#@NX+TQ,T^VO.[!5$"/DN<^!W0=GG@%?0(@,
- XM!5>VY%RM"?Q=ME<L1FO\;;:&6@*@(H_(SA_N^:?\GC:'$!`$5`%$@%.+U%FQ
- XM.&AF6]3RH,`F)GHCOZAF`.5R(Z,`J,P82R-ZMO/NH@GAE"]QG+:Q&Q%[3JJ'
- XM;#1P=3Q.T;<9=\9;X!0`&BL0YZ3%"29OOJJQ)Y@&GLG<<490O(4)/24VJ4V^
- XM?'3RU%?&'J<SZA]7HPZ;QB]E.`OKIH\F4>=`E*@8:$K)NA#*2QDTO`O_'X*"
- XM$W)+)`87##'L*&/#=B;V-`4\I@0R?UEA"@8(<D(<OW2J<;$)^@C;FY%PA#Q5
- XM3L@'+0W*(E.G1:J%+(W6I9(MDAK\%G/:*"N1_`(CXTSSBU62HQPFX[N8?GFL
- XMKA1QJ&`->F!8VH:IR48>FSPFHX&L<3V1'L_)Z$&=?)!DE<+D%I<GY[QR75=9
- XM('_*N>]2-HYNH]^DX2NC+KY^,I&*!Q?+>,GIU'KVE'?$"X$H<Y7;Z(29SWVC
- XM"')HD%66`>7R=%JCAKT8WZS\7M7*4V:2"KLQ"",875EH;,NNK9V\()>CBN#)
- XM>YQ^R<URP=LF?P%O<FN,)A=N(RHPF>C""U\`>[0&],M"S6<K_LZ5V]8\PC`3
- XMDVL`M@PQ+W<2L_3;BU;,8C)/G!;3@=%R_;%O=LR&Z;X),L\!4!C)?*F(MYDE
- XM0[59^LJ6)1080[1,OT)]X+Z=(:"O?_=_K$J)H+GW*T3-D"F\=*BN3*6OQ,?^
- XMUI)'R3<I+"^H=6'N-/O&?$Z9=I:L?`JCQH3[Y?:4:W+!"S97#36SYT`FKQ=P
- XM,M,<6JZ5=X!$RR+SR>CRD,J<&@UML])\!^C-7RU2!RM#HP$S73HP1WRF:5Y:
- XMS(V6T\9KR;J$/$@S:.G+CLU>J;@#&;O-O$^R%S?7S4YA#0@G)\Y5W_#;)PO.
- XM3QU+4Q?@Q<HDZBS7_<MRJ;/@.,/#D;/)W"WG@+II.+I3)I/19+`<_0Z_P&8Z
- XM.5MJET;F&8`\_P7[9GBI3)X!2^)H)CNOEP#SRB#NJ%J)Z@\I.M/,%_-@=CH+
- XMR:FS@KHZP\I&P^<L-#^UB[/XYI4*S+CSUJL[6\_#5N.C&%*!C"$<^"D@S0;%
- XMIIHE.,W7Y'B*-<MA]G,/:-LFIM+O=;DC>K0U99Z2:FHJ3)]=Y2OL;*+87#2:
- XMR;BOLH[(.,//2@7JDUS2SV@**H<@C\X>-`@`!5W,)@Z<#`+X!R1TSAP:#Z2+
- XMX&Z8KH;0H^EL7`3$JPFT//PCCF;&:)KHJ'2LT3-(IM,NSTQ!D&BK2BD]]((@
- XM1!NC\0+R;+AJ*C"H\VQDZM`I,?E:01N%@*]Q>BXGI^GRX/Q"CZ?9IRU3!/ZW
- XM2G"ZF\;X7W?$^:PXT\Y3<.,\C1+,>.^M3+X!EWXP4CC^2K>;\_"LH`*;(<`U
- XM85;P<&GFE=PN1%4*Y_NP-Z<K?$1L7+E4QL_R'R@$G,YR<9A\,0."WW/YW``3
- XMA0&8'LTR&*M?'MI2?'K19,#-]9\M*X-N!;S[WI(G`!<P+$[/@#,6S3K;G3YJ
- XM,%E*G]),WV6!)NB=4\`X`4WB;+`+?<FC64FHDL+@QXEE5;20FCZGT7/I&@TY
- XMN\_[KG*J(Q9S]])LEB(BS4IT,\@_=UD^]+1W"N:F[$(B"/W2>\1S@=L4P9XA
- XM@NQ9ELUJU/2"4!F?@J/I#0V2N;X%<V.+\1FXA\H^J."6$D/='A?$GL4V,V>\
- XM`F(O&C-]</?B;].L'_T.9L_A\LRL^5K,B70N&!*XJ'2O;48B^$21=.><"[E]
- XM^V";"42_J#BT\"L^!\[D<U4'!>G)Z#,:K?6RIVYT[$9>0HD5M>^,V?30#37S
- XM[-HV@V;J-=U!9].E+P'=3==Y\'3LR4O%4EL9.3U0G].V63I=1,L!['0;+:E^
- XMT^F*/(VRT=,"GJ:*3]O-^S0CO>8:U19R)WE8GH(=,MS,/2?4`.%"'=<ZU"``
- XM1-U/N],8M+EZ"IJ+F\/XRR3"U!KU"MD!9]&M<_'V4:>7PK1(K?=2U87O=&I!
- XM,WKWTEL6&JQO*G6Q8V0R#?XI]3LO8,W"DRT6";E87;/5[*>E-\GJ^LL4B+_J
- XMKX"*VTHR8"2V$2E!6;`H=3`YY"E%W[SP&,QC64`]IBP^5YLPI!(0%*VU:AB]
- XML-C4=[0!#9IZUO*",\DTC-;"F6G]&*#6&^[MY.KF`<4J*BI)O]93XEY-5^_)
- XM5_0_G??"$2N`H'`#/*;E#`[#,!*N"T+19T,?UJ)7]1M."`JE]+>H256_+6KV
- XM66*J`-KU:%HGG@#3+GD-!WRWW#47X%T#,^4NSEJ]@J;JM87:7:/7_W3'VT?Z
- XML1U#7`51]"6PZ&J-XEJY=2'$P+ED+6@*UB"E>J^$AZ`0-!PDH750''%>KV5K
- XM_\)%7JO/,<5@73/-\P%""UL[>;(UL@#UPIO++=8#E`T[VMDI&)DQV$>$H+`?
- XMF"<1-@R:SA(><VTZ)Z7.-OL4,".#ZM<%96RT#TJIVME4&/#1392?7.2]<M53
- XM&0C@HIY[)K2@,`[G/INJ'("TBL%*]EMKC*:S2+97S62/U<`,=5#]Y@&D\\VL
- XM4%?96W8]@0A[V,4U%0U2(W6I]$AM*TO.OZP+*]6FLM11-*I`R$1%1.;)KV!1
- XM+7+)%K>E-ZJ$V\+HD;6VJ;9B,%&J^%RLVRZ(`;IE@]!T&*ZJ*\0,IS*:+7`W
- XM^H6Q'@1:;,6^E%Z8<\1G!X0&5""8O6\.FT\`BM`6&4PI2[+WT:``E`NV4?!*
- XMDUGG2`P%D-7"2\;@I<4(O&Q,%A;]6]E*3?E7L@A*PK`@ES(^DC`&Q5/B560`
- XM4V$MW\F.Z!T`![BK=X"<V7$*"E>`$:`]QA9ZZAFP%(@!ATJCBW(,JNPSOHM7
- XM6Z)$84`W(Z>Q=#9"1\R1;P4QU37NZ`?/Y^O&01)Z2,-Z:R+<,.[;7:))U7FW
- XM=DQ&Z'T!:J]D3?'](#5P]1MQ<I"4P[\P+[NR3I\G-U3FRU07E'R7D-7"TWM%
- XM\C[<;]5R<V#G#%>E#4WH2=SL$5E=!,PM(,]94ND6KN6UOI2X&MQTPGJ]`HC7
- XMS%U];5ZGPNAU[4K'I=SW-;F;K,C7F>Y=S26EQ,ET%0LC%\E7*?)'OC$^;12E
- XMI;:JU$,(J&*X5A&S7_$AJG*0Q0?:&4\^`41;2`6JI'54=Q4A`_S/GY36_2]T
- XMS84?*N?UV*IEMS_C]7S=)BVG9Y08$;"GU!,>H!8M$@E,3QO21JL_\W3S!=_L
- XM7<+A%-7)J.D+M.(V:M:8TEGKW5(WC'F74$^;\)$[!%H%L*<O-:T5>\TN<^=W
- XMB\5?0(5IH2[>F+?F31;#U^Q1#(!Y?PAHRFC*>2<%&Z<A0]IL<<_4Q/G#QE++
- XMY6C@-[5(Z&KNG,D2NY]!7D@7"&G)WK.@1HS,4C=9S01\"!1"YK3,50U(&L<=
- XMQ/[>>W<9$'5[W4JO6ZI?GW3(#_']WG"98`SM?4R7I+XW\=U\_]UY*8M,),_9
- XM-#*$F8V>$O!9;NIP*Y7\]8`5_JK4/9N)T!K$V)TO^TM[D`%8,Y'U=.E`%D1C
- XMW3_?,MTO@]I58HUB9>%L#3_*AS-IRC$OEAYS\WPM<SO9,K4\'XO+^_+"7;ZY
- XMWX.N)NQG9YN$]4S[F/YWG-4M?5#F7?MMUMF\9%@)XZ5C[,_3'#G""/RJ]F
- XMJ6Q02[#Y+!`W6FJP"D3+AH19V@8RJ"S)L<IV\.T=C=[.(_CF((-ROR6U7+<V
- XM/SY'F]J1L0;6\439.$:D`9#VMC)-YP5OZBH7:\UQW9S[Y@9DX0B@>*`D6$1>
- XM5M?,03(=!_>8N@7#OV0U$0`QT-/H=RIQV/%9Z0H1]!E\%(-NB4D$%9B`-Q'D
- XMA#+(M;&M'7;8D:_!5<G?KAI<L`C@A:`,@./<ZZCVI_IK.0?1S3&;JPCP`O@-
- XM2`+3$;FQR.8V5FIKGK&8;=$-PW:V;NS14(E?XA_""Z")@\^6+2@>(^>@R1U'
- XMJVZ;M&ZX(*[Z;M^@+/H]?S,=$JUX.P5$X:1!>\590^$1Q:MI!D3:KJT`"=MJ
- XMX0(#%ZY2?^'+>!B^9I'A\(@9/O%E$A.@I/QVHL;7Y&/JAB^X<7B@_6C!+G5X
- XM]288Q`F!+)S`A__3?KB/`XBKQ&,*G]5ILQ&A1!O`!D@C8+8(,`<#IS5%.*N-
- XM.^(ATC\=(CVFA/8`FXIE7%?EBZJ+XZ^9!%F=KGRG4@[#:[H=%+V"F-87\-J5
- XM,5]0.%BH,G2O6CO8X_EHP?#@D`$A`PS*,T>GQFA>R2[LDG!![4!BU0Y'>!).
- XM;#98EI5WH&@G'PF$_':,6^').!B^ES;C5;.6`XW'DT&`&.X%&;9=,Y9IW11,
- XMP+BX_7,7XU6X&]"+PZ=^55]:OHQ<;X"0]%:YNRHUMJ%DS0M1^16NC,>3CR50
- XMSJ8*Y3YY43Z-'[S5N&WK-<^4-44VCE5LXUQ:-VXT_%-'86F0XB8`VQ/%YVR7
- XMOW3DQ+=[G!Y>8ESH8D5NP^8W#H<?8^(X!@Y[VN'GN#T-FN[AL58?#B?\X1+M
- XM#SJF>.7]@EO!9R7D3O8]#@+EXT"`LIA)^.-S.4`.>`_D\/BPE=IV;'R69+EH
- XMCY"$]#]+&A_2$9\8(`]SVU+#WGUZ/`8RM-R+&EO>B7#M^N7Q0._4Y,J$5TH0
- XM>:5D+.^HI,&UZFR'$@",$+&78ZLS3&94G$.L)::S#6U_`7=)%BPHZ.;3KHV,
- XM_.0!/@0*$)Q;V3)3?)VS`C/3N:#@G?L`T7;92`9<YSIKNAH"Z`$"P5V2`"?"
- XM+:OM#0N#1[*YOL0U,%FI3&OJ5B(CJ4QHVH\3#`Q%\\R@[P<..@G1I>X%IT<;
- XMCJ9\YFZE0GXBS=\-^7#N)SBJJSE9_8M7A;*1VY>!).?QE-!J^VQE&5>!OOH>
- XM3J!!>KZ>_]W*-5G],>!5V`H&91>TRV[%ZDL>5Q&^N7<`G/<5T?>;;=+R4/'4
- XM89>!T%-93$I[5+XNZ$T9$VG9GO-YM!V>NZMBP!=0QM29L`$1,")=`3:Q/%R=
- XMW^>]<7;N;,>K6;JT75^"Z=6V36.,QN<5PK--GW\!]OE>#@OOZ)CVF))[IVI4
- XM59ZB\?%`VK?1T'U7(44ZTUBX[=@R.2O76#U4_5-?_!I\YBKU[I$GA.4]>33^
- XMDRN;0;GLDI8;Y=0X$6*-"S;8^!LREW<!'5J>0I@[`8KD'LF-FS"%&UY.\>GF
- XM@+DA.?&)`8%*#%"8BP"P5A,$!T1NP:RM+M@,YMZ!KCY^\NIRJO<(K#N`@CF&
- XM[AW(`+MZK_XB(>95G6)N2C#F<SB458Y[(WBXIDJ9"PR6.73@CF?FU?H;?JVC
- XM$I25<Y`KS8;UU!OH[@:Q*(ANSJ5[Z81,F#ZF]^&C1/+SCFOFDQ,D]W/E#$DW
- XMZW%,44K*9IU<CXOF%44^/@*8Y@^ZJ7Y+J.8"N8F>5^$%!O%3@`KM+X$*/*R;
- XM"ZR(Y%[N93LHL:BJ;J3KY?/ZI_(O3,L87Y:I28.A8$P;]0<K!""[O.X#=.DF
- XM^V59&N3J*#L&G0.I5$R!+86JR:4HU:?`1[Q(+=//RB()3GPM/`P&VRLO4J(^
- XM^XD`=\`+&J^"Y`%2"JJOH,K_BT5EJ=,N541)CD0SZ#&[G4ZS!RJI.AR0H5.W
- XM[K,0KH8J#+$L["*C+^CX!D/>CV<./$"OWCZ"`#Z`M-X:?+`!;%G[QW+H]/A,
- XM_*'+[20$66VJ$E:W\X/FK?%2952A_D+'J[($`<O:$NMMP$`IE,S05S9S%Y!O
- XM<6H>A4!&73>(F/`JL]/L'2>8+@08`?()8<OF:++X,,;N-[WL7_9_7K*3[7B"
- XMR*ZHF[2PBY#VIW=L#O2@?AHX[H<Z\.VLMP&8;/">J%<Z@RJ49#_?"3-Z]DFU
- XM\PM6N[[5EY@!H%YTX+6[V5,F:R[>@IB':_'11@E<=F2CA.HA?.1Q\6&XCFN%
- XM-?MK!HQK6#,K)WM/-^,:@KXEKS>OFYVJY9`\>$"O8)X0(8]!"5%@/J:75..:
- XMY[@VO-@,0XAO.8>*FM;**5EU,M@.9A/B72KZSHW/!\&8@\VIOIJ$>(=3*:?I
- XMVBK^CK?'G<^=GT"(;P'X^^DGCYX`+T"=^'F;H`02":\SX0$F?'O-!:CP),((
- XM7\)OUR#`":`#H-?9YUB`OQ=N-OP+OP+$`.-GSFUV6=97,5/`KWR4W-Y_(CKO
- XM[[#IT=JIKN]*E@:/&RC!+83N>;ES\*EG4J/E^`#89^U:8E+Q7,,6X,73`1IN
- XM#N\"U-P0J_\^;:/@.O?->N[&FU#\6(`.DW41,MKB1AIK9[SR#9J:D<C($2NS
- XMW6R`/%%MC!;R::32=\<C\KOGS_NRH0`C//9B7[O7-3<4A(V]`)F#?Y#!1YQ@
- XM<"$/>%>Y$>?'#F:'DCOY)F\T5))HI*`0C4B`4CQ`.G'_GU4=G^[VY$[23P'?
- XMN#KN,J@O;+Y/Y>:KF@GG>.^S-RD5OC>\XSO+I\L3Z9)V]?C"E[_7GW#7WDT3
- XM0!R:[OU>?V;W^N[//*:R_+[!M2T(M\\O/\,D>P%![7J?AQ(VV\OFR6?N(_I]
- XM'J`CHZ"\NBOLX;8L^G(N`CT^DVKNM`)9:U-J!"V>;"-=BWBW97K)8S3,#F:C
- XM\BP3LV&GDP&Z,*ARFI99-W'1HW>3\C"F-;\?=#@KO'EPOOLSF'<90R),`5N@
- XM$=`$3'<A/`K`T2<!C]0SE-)U],*=N[D)/Z8'KN;)V;DMVLH>/[%6QP$#W>2Z
- XM!K$7_7Z0T=?K([U'#]*/ICU]2C_'3.CX*T0?VKEU4(#_2U:ONH]D-Z\7B=UE
- XM`,Z+O;OR(3><G:X8`0F&$(`R\&]J&+KS>2%+'P$'I@*K8'W)FZ%Q86!RQ106
- XMZKK'EG:+H#ET]9E!.O$]'%^LP9RP?-$&5)#SLAL4!\"!;W!8S`W,`;G`'Q3`
- XMU<%UP'C"-=P!]`4>B`?D`1J3$:1%>)G4I<M@7^(7C9`>P`?MP7N`$(!?C"?H
- XM!=>;.^8BCY@S]:\C;5Z0-@026P`.T`5L`3`!(PG$M6`D`A[@(2S:P,@,!N!)
- XMDOV(RT1?9F%5@QF0VH^?>P!P(-RS`,-]<1_O577MTJO5<8IO;>K#9ER$Y1M=
- XM"Q:(16#=:QO6IC)]:M88?DW^&Q13C!`?/^-,'UK/?_"\N,''T$'\)_JE72SC
- XMPIOGHLO$!BA5-*1%7-6U8`/0N]X:O>5ZV6S/VC>1UUEQ,]O'"0/0GQ#;Y/!P
- XM@"Y6+)P`=T"=R,*U8>W]K9ZAX@#R??'&M(N0*:K66#TR?<V!*`K&D"]R`"14
- XM&E'P(_CV"P@S?E6=J[F\R[A6PKEHJ)C%X7&'$,*'`/4QQ4"SB;\_*^S9G"_6
- XM^L2;EIUM8Z1!>L]?:HT^=T?>DBL2*CYSUVT+"AUYBE\:WO<)P/,N&J2@)<";
- XM\VH)8G'#JO3!GHM!/I(^Y+_D]WWQ1HY+?UA+3#8%,1&<V'B_,HW@][W*6L^Z
- XM"A`<:3#;[%CW/7L?O3CY_+((4`)`<2M8E4_>PV?XY.?4%YZ36+X,*N3?]US^
- XMN5B\"6D^NC:#38>_#/Y]_]ZS`5N`)-]>>]?J,=QBKO<K<CC:TH+E`88W@T_D
- XM"Z$H@/[\SQSL^'@*^N`T5J37^V"\)2.O#'"J5#&P99(ABX+7!X$^,HJ$M^2.
- XM/GQO$Q3QE#RN7^2'^FG`-GO!AZ9*E;N)8S=#3'ZP7ZO:`+Y^`B#;@P:1/B6*
- XM!\0`Y.]]_^S3`5L`$1]*G`!O0)WHHG[AUKY^WRUL^[U^:W3?_R"=L'&[VZ/V
- XM$0,1SP+8^6-`NP(#A`$E`!FP!M3[!R(38`J;PFLB?[H4I`"NHV/0K:4!+,"C
- XMSP)<^X!^(E.U$P?K_C&Q!;3[J'HK;[B>]@X_Q"_1GHL-OQ3Q\*\*3.RY>.[;
- XM-D2(<7N7O/LE0+RO!@@!_7Y'`?!/^P+PD-^;!L"'L,0_<:?':*8,&GY<HU9"
- XM"&>?.K>T"Y4_.`C(+*38!S*+S`8OC)33"MS8KPU)WZ[X,'Y\^<>2Q>%$C*_\
- XMW+U6YKD8$,3YGSZHG_'[]FE`B,KD*_S0.\-/\?\%)'S$/^QG_')`V7_QDZ_G
- XMXDUL\WRW[@US-.2C^^>)R'\(P_LFP,F?\O,4*S^UG_"__"._S!]RT_Q<?O&V
- XM\XO@XOUI`/2+]C]ST`PQ-_B"3=*O?GK\OW[3WW!"_4U_@TGK3]5S/\CO"8_\
- XM>+\:H"_Z^T1UP/_W+_PP_S$N^'^HA#^-B-4K/"@#A`EL)G=0?QY):5)2[EL;
- XML`;L:[0[T)*^3]:!2G\L4ATJ,CWL32<LX7!=[B]W],=*`J8P>!__7):"XF\)
- XM!J_!=XJT51*?&B'5)PD-'\."3[_A]Q(@A`_+B_()\"%,,.C^@13!(*''[>7_
- XM3AZHK/\-^L@O-\PV+T"%^0*DOFR'#.`#F`#%(=-KZWMR[3]>WM-L7G"S>?_5
- XMWX!_"I^JSO"O9++7,?Z93NIW2+\'GT4,S43^`_WI"=)_E2PO&X5._O?^8^;%
- XM_\Q_F0/ZG_T/_X<2V/_U_Q9U_S^.00`P^,4BH_VAO$P40P`QA'6JW":)8^",
- XMWTI9YS:C%BI+%K?*NFID7GZ`0,`@H!!P"$@$+`(:`8^`2,`DH!)P"<@$;`(Z
- XC`9^`4,`HH!1P"D@%K`):`:^`6,`LH!9P"\@%[`)Z`;^`8`$D
- X`
- Xend
- END_OF_FILE
- if test 36659 -ne `wc -c <'pcvt/Etc/uemacs.tar.Z.uu'`; then
- echo shar: \"'pcvt/Etc/uemacs.tar.Z.uu'\" unpacked with wrong size!
- fi
- # end of 'pcvt/Etc/uemacs.tar.Z.uu'
- fi
- if test -f 'pcvt/pcvt_out.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'pcvt/pcvt_out.c'\"
- else
- echo shar: Extracting \"'pcvt/pcvt_out.c'\" \(49760 characters\)
- sed "s/^X//" >'pcvt/pcvt_out.c' <<'END_OF_FILE'
- X/*
- X * Copyright (c) 1992,1993,1994 Hellmuth Michaelis, Brian Dunford-Shore
- X * and Joerg Wunsch.
- X *
- X * All rights reserved.
- X *
- X * This code is derived from software contributed to Berkeley by
- X * William Jolitz and Don Ahn.
- X *
- X * Redistribution and use in source and binary forms, with or without
- X * modification, are permitted provided that the following conditions
- X * are met:
- X * 1. Redistributions of source code must retain the above copyright
- X * notice, this list of conditions and the following disclaimer.
- X * 2. Redistributions in binary form must reproduce the above copyright
- X * notice, this list of conditions and the following disclaimer in the
- X * documentation and/or other materials provided with the distribution.
- X * 3. All advertising materials mentioning features or use of this software
- X * must display the following acknowledgement:
- X * This product includes software developed by Hellmuth Michaelis,
- X * Brian Dunford-Shore and Joerg Wunsch.
- X * 4. The name authors may not be used to endorse or promote products
- X * derived from this software without specific prior written permission.
- X *
- X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
- X * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- X * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- X * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- X * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- X * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- X * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- X * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- X * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- X *
- X *
- X * @(#)pcvt_out.c, 3.00, Last Edit-Date: [Sun Feb 27 17:04:53 1994]
- X *
- X */
- X
- X/*---------------------------------------------------------------------------*
- X *
- X * pcvt_out.c VT220 Terminal Emulator
- X * ---------------------------------------
- X * -hm fixes for monochrome environments
- X * -jw include rather primitive X stuff
- X * -hm debugging netbsd-current
- X * -hm converting to memory mapped virtual screens
- X * -hm 132 columns mode operation
- X * -jw SCROLL_SLEEP patch
- X * -hm cursor on/off implemented (DECTCEM)
- X * -hm added Bruce Evans' set color escape sequence
- X * -hm keyboard repeat (DECARM) activated
- X * -hm just malloc as much memory as is really needed
- X * -hm keyboard initialization for ddb activists ...
- X * -hm add a volatile to color detection code for netbsd 0.9
- X * -hm trident cursor start setting - finally ....
- X * -jw USL VT compatibility
- X * -jw patches to set winsize struct for VT/HP and real pixelsizes
- X * -hm made SCROLL_SLEEP patch working
- X * -hm HP emulation debugging
- X * -jw/hm all ifdef's converted to if's
- X * -hm patch from Joerg: PCVT_INHIBIT_NUMLOCK and support for LCD's
- X * -hm patch from Michael Havemester, bcopyb -> bcopy in check_scroll
- X * -hm protected bcopy in check_scroll from being interrupted
- X * -hm ------------ Release 3.00 --------------
- X *
- X *---------------------------------------------------------------------------*/
- X
- X#include "vt.h"
- X#if NVT > 0
- X
- X#include "pcvt_hdr.h" /* global include */
- X
- Xstatic void check_scroll ( struct video_state *svsp );
- Xstatic void hp_entry ( U_char ch, struct video_state *svsp );
- Xstatic void update_hp ( struct video_state *svsp );
- Xstatic void vt_coldinit ( void );
- Xstatic void wrfkl ( int num, u_char *string, struct video_state *svsp );
- Xstatic void writefkl ( int num, u_char *string, struct video_state *svsp );
- Xstatic void write_char ( struct video_state *svsp, U_char kernel, U_char ch );
- X
- X/*---------------------------------------------------------------------------*
- X * emulator main entry
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xsput(U_char ch, U_char attrib, int page)
- X{
- X register struct video_state *svsp;
- X
- X if(page >= PCVT_NSCREENS)
- X page = 0;
- X
- X svsp = &vs[page];
- X
- X if(do_initialization)
- X vt_coldinit();
- X
- X if(svsp->sevenbit)
- X ch &= 0x7f;
- X
- X
- X
- X if(svsp == vsp) /* on current displayed page ? */
- X {
- X cursor_pos_valid = 0; /* do not update cursor */
- X#if PCVT_SCREENSAVER
- X if(scrnsv_active) /* screen blanked ? */
- X pcvt_scrnsv_reset(); /* unblank NOW ! */
- X else
- X reset_screen_saver = 1; /* do it asynchronously */
- X#endif /* PCVT_SCREENSAVER */
- X }
- X
- X
- X if((ch <= 0x1f) && (svsp->transparent == 0))
- X {
- X
- X /* always process control-chars in the range 0x00..0x1f !!! */
- X
- X if(svsp->dis_fnc)
- X {
- X if(svsp->lastchar && svsp->m_awm
- X && (svsp->lastrow == svsp->row))
- X {
- X svsp->cur_offset++;
- X svsp->col = 0;
- X svsp->lastchar = 0;
- X check_scroll(svsp);
- X }
- X
- X if(svsp->irm)
- X ovbcopy((svsp->Crtat + svsp->cur_offset),
- X (svsp->Crtat + svsp->cur_offset) + 1,
- X (((svsp->maxcol)-1) - svsp->col)*CHR);
- X
- X write_char(svsp, attrib, ch);
- X
- X vt_selattr(svsp);
- X
- X if(svsp->col >= ((svsp->maxcol)-1)
- X && ch != 0x0a && ch != 0x0b && ch != 0x0c)
- X {
- X svsp->lastchar = 1;
- X svsp->lastrow = svsp->row;
- X }
- X else if(ch == 0x0a || ch == 0x0b || ch == 0x0c)
- X {
- X svsp->cur_offset -= svsp->col;
- X svsp->cur_offset += svsp->maxcol;
- X svsp->col = 0;
- X svsp->lastchar = 0;
- X }
- X else
- X {
- X svsp->cur_offset++;
- X svsp->col++;
- X svsp->lastchar = 0;
- X }
- X }
- X else
- X {
- X switch(ch)
- X {
- X case 0x00: /* NUL */
- X case 0x01: /* SOH */
- X case 0x02: /* STX */
- X case 0x03: /* ETX */
- X case 0x04: /* EOT */
- X case 0x05: /* ENQ */
- X case 0x06: /* ACK */
- X break;
- X
- X case 0x07: /* BEL */
- X if(svsp->bell_on)
- X sysbeep(PCVT_SYSBEEPF/1500, hz/4);
- X break;
- X
- X case 0x08: /* BS */
- X if(svsp->col > 0)
- X {
- X svsp->cur_offset--;
- X svsp->col--;
- X }
- X break;
- X
- X case 0x09: /* TAB */
- X while(svsp->col < ((svsp->maxcol)-1))
- X {
- X svsp->cur_offset++;
- X if(svsp->
- X tab_stops[++svsp->col])
- X break;
- X }
- X break;
- X
- X case 0x0a: /* LF */
- X case 0x0b: /* VT */
- X case 0x0c: /* FF */
- X if(svsp->lnm)
- X {
- X svsp->cur_offset -= svsp->col;
- X svsp->cur_offset +=
- X svsp->maxcol;
- X svsp->col = 0;
- X }
- X else
- X {
- X svsp->cur_offset +=
- X svsp->maxcol;
- X }
- X break;
- X
- X case 0x0d: /* CR */
- X svsp->cur_offset -= svsp->col;
- X svsp->col = 0;
- X break;
- X
- X case 0x0e: /* SO */
- X svsp->GL = svsp->G1;
- X break;
- X
- X case 0x0f: /* SI */
- X svsp->GL = svsp->G0;
- X break;
- X
- X case 0x10: /* DLE */
- X case 0x11: /* DC1/XON */
- X case 0x12: /* DC2 */
- X case 0x13: /* DC3/XOFF */
- X case 0x14: /* DC4 */
- X case 0x15: /* NAK */
- X case 0x16: /* SYN */
- X case 0x17: /* ETB */
- X break;
- X
- X case 0x18: /* CAN */
- X svsp->state = STATE_INIT;
- X clr_parms(svsp);
- X break;
- X
- X case 0x19: /* EM */
- X break;
- X
- X case 0x1a: /* SUB */
- X svsp->state = STATE_INIT;
- X clr_parms(svsp);
- X break;
- X
- X case 0x1b: /* ESC */
- X svsp->state = STATE_ESC;
- X clr_parms(svsp);
- X break;
- X
- X case 0x1c: /* FS */
- X case 0x1d: /* GS */
- X case 0x1e: /* RS */
- X case 0x1f: /* US */
- X break;
- X }
- X }
- X }
- X else
- X {
- X
- X /* char range 0x20...0xff processing depends on current state */
- X
- X switch(svsp->state)
- X {
- X case STATE_INIT:
- X if(svsp->lastchar && svsp->m_awm &&
- X (svsp->lastrow == svsp->row))
- X {
- X svsp->cur_offset++;
- X svsp->col = 0;
- X svsp->lastchar = 0;
- X check_scroll(svsp);
- X }
- X
- X if(svsp->irm)
- X ovbcopy((svsp->Crtat
- X + svsp->cur_offset),
- X (svsp->Crtat
- X + svsp->cur_offset) + 1,
- X (((svsp->maxcol)-1)
- X - svsp->col) * CHR);
- X
- X write_char(svsp, attrib, ch);
- X
- X vt_selattr(svsp);
- X
- X if(svsp->col >= ((svsp->maxcol)-1))
- X {
- X svsp->lastchar = 1;
- X svsp->lastrow = svsp->row;
- X }
- X else
- X {
- X svsp->lastchar = 0;
- X svsp->cur_offset++;
- X svsp->col++;
- X }
- X break;
- X
- X case STATE_ESC:
- X switch(ch)
- X {
- X
- X case '#': /* ESC # family */
- X svsp->state = STATE_HASH;
- X break;
- X
- X case '&': /* ESC & family (HP) */
- X if(svsp->vt_pure_mode ==
- X M_HPVT)
- X {
- X svsp->state =
- X STATE_AMPSND;
- X svsp->hp_state =
- X SHP_INIT;
- X }
- X else
- X svsp->state =
- X STATE_INIT;
- X break;
- X
- X case '(': /* ESC ( family */
- X svsp->state = STATE_BROPN;
- X break;
- X
- X case ')': /* ESC ) family */
- X svsp->state = STATE_BRCLO;
- X break;
- X
- X case '*': /* ESC * family */
- X svsp->state = STATE_STAR;
- X break;
- X
- X case '+': /* ESC + family */
- X svsp->state = STATE_PLUS;
- X break;
- X
- X case '-': /* ESC - family */
- X svsp->state = STATE_MINUS;
- X break;
- X
- X case '.': /* ESC . family */
- X svsp->state = STATE_DOT;
- X break;
- X
- X case '/': /* ESC / family */
- X svsp->state = STATE_SLASH;
- X break;
- X
- X case '7': /* SAVE CURSOR */
- X vt_sc(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '8': /* RESTORE CURSOR */
- X vt_rc(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '=': /* keypad application mode */
- X#if !PCVT_INHIBIT_NUMLOCK
- X vt_keyappl(svsp);
- X#endif
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '>': /* keypad numeric mode */
- X#if !PCVT_INHIBIT_NUMLOCK
- X vt_keynum(svsp);
- X#endif
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'D': /* INDEX */
- X vt_ind(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'E': /* NEXT LINE */
- X vt_nel(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'H': /* set TAB at current col */
- X svsp->tab_stops[svsp->col] = 1;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'M': /* REVERSE INDEX */
- X vt_ri(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'N': /* SINGLE SHIFT G2 */
- X svsp->ss2 = 1;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'O': /* SINGLE SHIFT G3 */
- X svsp->ss3 = 1;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'P': /* DCS detected */
- X svsp->dcs_state = DCS_INIT;
- X svsp->state = STATE_DCS;
- X break;
- X
- X case 'Z': /* What are you = ESC [ c */
- X vt_da(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '[': /* CSI detected */
- X clr_parms(svsp);
- X svsp->state = STATE_CSI;
- X break;
- X
- X case '\\': /* String Terminator */
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'c': /* hard reset */
- X vt_ris(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X#if PCVT_SETCOLOR
- X case 'd': /* set color sgr */
- X if(color)
- X {
- X /* set shiftwidth=4 */
- X sgr_tab_color
- X [svsp->
- X vtsgr] =
- X svsp->c_attr
- X >> 8;
- X user_attr =
- X sgr_tab_color
- X [0] << 8;
- X }
- X svsp->state = STATE_INIT;
- X break;
- X#endif /* PCVT_SETCOLOR */
- X case 'n': /* Lock Shift G2 -> GL */
- X svsp->GL = svsp->G2;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'o': /* Lock Shift G3 -> GL */
- X svsp->GL = svsp->G3;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '}': /* Lock Shift G2 -> GR */
- X svsp->GR = svsp->G2;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '|': /* Lock Shift G3 -> GR */
- X svsp->GR = svsp->G3;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '~': /* Lock Shift G1 -> GR */
- X svsp->GR = svsp->G1;
- X svsp->state = STATE_INIT;
- X break;
- X
- X default:
- X svsp->state = STATE_INIT;
- X break;
- X }
- X break;
- X
- X case STATE_HASH:
- X switch(ch)
- X {
- X case '3': /* double height top half */
- X case '4': /*double height bottom half*/
- X case '5': /*single width sngle height*/
- X case '6': /*double width sngle height*/
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '8': /* fill sceen with 'E's */
- X vt_aln(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X default: /* anything else */
- X svsp->state = STATE_INIT;
- X break;
- X }
- X break;
- X
- X case STATE_BROPN: /* designate G0 */
- X case STATE_BRCLO: /* designate G1 */
- X case STATE_STAR: /* designate G2 */
- X case STATE_PLUS: /* designate G3 */
- X case STATE_MINUS: /* designate G1 (96) */
- X case STATE_DOT: /* designate G2 (96) */
- X case STATE_SLASH: /* designate G3 (96) */
- X svsp->which[svsp->whichi++] = ch;
- X if(ch >= 0x20 && ch <= 0x2f
- X && svsp->whichi <= 2)
- X break;
- X else if(ch >=0x30 && ch <= 0x7e)
- X {
- X svsp->which[svsp->whichi] = '\0';
- X vt_designate(svsp);
- X }
- X svsp->whichi = 0;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case STATE_CSIQM: /* DEC private modes */
- X switch(ch)
- X {
- X case '0':
- X case '1':
- X case '2':
- X case '3':
- X case '4':
- X case '5':
- X case '6':
- X case '7':
- X case '8':
- X case '9': /* parameters */
- X svsp->parms[svsp->parmi] *= 10;
- X svsp->parms[svsp->parmi] +=
- X (ch -'0');
- X break;
- X
- X case ';': /* next parameter */
- X svsp->parmi =
- X (svsp->parmi+1 < MAXPARMS) ?
- X svsp->parmi+1 : svsp->parmi;
- X break;
- X
- X case 'h': /* set mode */
- X vt_set_dec_priv_qm(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'l': /* reset mode */
- X vt_reset_dec_priv_qm(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'n': /* Reports */
- X vt_dsr(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'K': /* selective erase in line */
- X vt_sel(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'J':/*selective erase in display*/
- X vt_sed(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X default:
- X svsp->state = STATE_INIT;
- X break;
- X
- X }
- X break;
- X
- X case STATE_CSI:
- X switch(ch)
- X {
- X case '0':
- X case '1':
- X case '2':
- X case '3':
- X case '4':
- X case '5':
- X case '6':
- X case '7':
- X case '8':
- X case '9': /* parameters */
- X svsp->parms[svsp->parmi] *= 10;
- X svsp->parms[svsp->parmi] +=
- X (ch -'0');
- X break;
- X
- X case ';': /* next parameter */
- X svsp->parmi =
- X (svsp->parmi+1 < MAXPARMS) ?
- X svsp->parmi+1 : svsp->parmi;
- X break;
- X
- X case '?': /* ESC [ ? family */
- X svsp->state = STATE_CSIQM;
- X break;
- X
- X case '@': /* insert char */
- X vt_ic(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '"': /* select char attribute */
- X svsp->state = STATE_SCA;
- X break;
- X
- X case '!': /* soft terminal reset */
- X svsp->state = STATE_STR;
- X break;
- X
- X case 'A': /* cursor up */
- X vt_cuu(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'B': /* cursor down */
- X vt_cud(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'C': /* cursor forward */
- X vt_cuf(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'D': /* cursor backward */
- X vt_cub(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'H': /* direct cursor addressing*/
- X vt_curadr(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'J': /* erase screen */
- X vt_clreos(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'K': /* erase line */
- X vt_clreol(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'L': /* insert line */
- X vt_il(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'M': /* delete line */
- X vt_dl(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'P': /* delete character */
- X vt_dch(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'S': /* scroll up */
- X vt_su(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'T': /* scroll down */
- X vt_sd(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'X': /* erase character */
- X vt_ech(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'c': /* device attributes */
- X vt_da(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'f': /* direct cursor addressing*/
- X vt_curadr(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'g': /* clear tabs */
- X vt_clrtab(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'h': /* set mode(s) */
- X vt_set_ansi(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'i': /* media copy */
- X vt_mc(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'l': /* reset mode(s) */
- X vt_reset_ansi(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'm': /* select graphic rendition*/
- X vt_sgr(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'n': /* reports */
- X vt_dsr(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'r': /* set scrolling region */
- X vt_stbm(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'x': /*request/report parameters*/
- X vt_reqtparm(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'y': /* invoke selftest(s) */
- X vt_tst(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X default:
- X svsp->state = STATE_INIT;
- X break;
- X }
- X break;
- X
- X case STATE_AMPSND:
- X hp_entry(ch,svsp);
- X break;
- X
- X case STATE_DCS:
- X vt_dcsentry(ch,svsp);
- X break;
- X
- X case STATE_SCA:
- X switch(ch)
- X {
- X case 'q':
- X vt_sca(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X default:
- X svsp->state = STATE_INIT;
- X break;
- X }
- X break;
- X
- X case STATE_STR:
- X switch(ch)
- X {
- X case 'p': /* soft terminal reset */
- X vt_str(svsp);
- X svsp->state = STATE_INIT;
- X break;
- X
- X default:
- X svsp->state = STATE_INIT;
- X break;
- X }
- X break;
- X
- X default: /* failsafe */
- X svsp->state = STATE_INIT;
- X break;
- X
- X }
- X }
- X
- X check_scroll(svsp); /* check scroll up */
- X
- X svsp->row = (((svsp->Crtat + svsp->cur_offset) - svsp->Crtat)
- X / svsp->maxcol); /* current row update */
- X
- X if(svsp == vsp) /* on current displayed page ? */
- X cursor_pos_valid = 1; /* position is valid now */
- X
- X /* take care of last character on line behaviour */
- X
- X if(svsp->lastchar && (svsp->col < ((svsp->maxcol)-1)))
- X svsp->lastchar = 0;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * do character set transformation and write to display memory
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xwrite_char(struct video_state *svsp, U_char kernel, U_char ch)
- X{
- X register u_short result;
- X register u_short *gsave; /* gcc warning: "may be used
- X * uninitialized" = don't care ! */
- X if(kernel)
- X result = kern_attr;
- X else
- X result = svsp->c_attr;
- X
- X if(svsp->ss2) /* single shift G2 -> GL ? */
- X {
- X gsave = svsp->GL; /* save GL */
- X svsp->GL = svsp->G2; /* G2 -> GL */
- X }
- X else if(svsp->ss3) /* single shift G3 -> GL ? */
- X {
- X gsave = svsp->GL; /* save GL */
- X svsp->GL = svsp->G3; /* G3 -> GL */
- X }
- X
- X if(ch >= 0xA0) /* use GR if ch >= 0xA0 */
- X result |= svsp->GR[ch-0xA0];
- X
- X else if(ch >= 0x80) /* display controls C1 */
- X {
- X if(vgacs[svsp->vga_charset].secondloaded)
- X {
- X result |= ((ch-0x60) | CSH);
- X }
- X else /* use normal ibm charset for control display */
- X {
- X result |= ch;
- X }
- X }
- X
- X else if (ch >= 0x20) /* use GL if ch >= 0x20 */
- X result |= svsp->GL[ch-0x20];
- X
- X else /* display controls C0 */
- X {
- X if(vgacs[svsp->vga_charset].secondloaded)
- X {
- X result |= (ch | CSH);
- X }
- X else /* use normal ibm charset for control display */
- X {
- X result |= ch;
- X }
- X }
- X
- X *(svsp->Crtat + svsp->cur_offset) = result; /* write char to screen */
- X
- X if(svsp->ss2) /* was single shift G2->GL ? */
- X {
- X svsp->GL = gsave; /* restore GL */
- X svsp->ss2 = 0; /* reset flag */
- X }
- X else if(svsp->ss3) /* was single shift G3->GL ? */
- X {
- X svsp->GL = gsave; /* restore GL */
- X svsp->ss3 = 0; /* reset flag */
- X }
- X
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * this is the absolute cold initialization of the emulator
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xvt_coldinit(void)
- X{
- X extern u_short csd_ascii[]; /* pcvt_tbl.h */
- X extern u_short csd_supplemental[];
- X
- X u_short volatile *cp = Crtat + (CGA_BUF-MONO_BUF)/CHR; /* gcc 2.4.5 */
- X u_short was;
- X int nscr, charset;
- X int equipment;
- X u_short *SaveCrtat = Crtat;
- X
- X do_initialization = 0;
- X
- X equipment = ((rtcin(RTC_EQUIPMENT)) >> 4) & 0x03;
- X
- X switch(equipment)
- X {
- X default:
- X case EQ_EGAVGA:
- X
- X /* set memory start to CGA == B8000 */
- X
- X Crtat = Crtat + (CGA_BUF-MONO_BUF)/CHR;
- X
- X /* find out, what monitor is connected */
- X
- X was = *cp;
- X *cp = (u_short) 0xA55A;
- X if (*cp != 0xA55A)
- X {
- X addr_6845 = MONO_BASE;
- X color = 0;
- X }
- X else
- X {
- X *cp = was;
- X addr_6845 = CGA_BASE;
- X color = 1;
- X }
- X
- X if(vga_test())
- X {
- X adaptor_type = VGA_ADAPTOR;
- X totalfonts = 8;
- X if(color == 0)
- X {
- X
- X /*
- X * if a mono monitor is
- X * attached to a vga, it comes
- X * up with a mda emulation.
- X */
- X
- X /*
- X * program sequencer to access
- X * video ram
- X */
- X
- X /* synchronous reset */
- X outb(TS_INDEX, TS_SYNCRESET);
- X outb(TS_DATA, 0x01);
- X
- X /* write to map 0 & 1 */
- X outb(TS_INDEX, TS_WRPLMASK);
- X outb(TS_DATA, 0x03);
- X
- X /* odd-even addressing */
- X outb(TS_INDEX, TS_MEMMODE);
- X outb(TS_DATA, 0x03);
- X
- X /* clear synchronous reset */
- X outb(TS_INDEX, TS_SYNCRESET);
- X outb(TS_DATA, 0x03);
- X
- X /*
- X * program graphics controller
- X * to access character
- X * generator
- X */
- X
- X /* select map 0 for cpu reads */
- X outb(GDC_INDEX, GDC_RDPLANESEL);
- X outb(GDC_DATA, 0x00);
- X
- X /* enable odd-even addressing */
- X outb(GDC_INDEX, GDC_MODE);
- X outb(GDC_DATA, 0x10);
- X
- X /* map starts at 0xb000 */
- X outb(GDC_INDEX, GDC_MISC);
- X outb(GDC_DATA, 0x0a);
- X
- X Crtat = SaveCrtat; /* mono start */
- X }
- X /* find out which chipset we are running on */
- X vga_type = vga_chipset();
- X }
- X else
- X {
- X if(color)
- X {
- X adaptor_type = EGA_ADAPTOR;
- X totalfonts = 4;
- X }
- X else
- X { /* mono ega -> MDA .... */
- X /* NOT TESTED !!!!!!!!! */
- X addr_6845 = MONO_BASE;
- X adaptor_type = MDA_ADAPTOR;
- X totalfonts = 0;
- X Crtat = SaveCrtat;
- X break;
- X }
- X
- X }
- X
- X /* decouple vga charsets and intensity */
- X set_2ndcharset();
- X
- X break;
- X
- X case EQ_40COLOR:
- X case EQ_80COLOR:
- X Crtat = Crtat + (CGA_BUF-MONO_BUF)/CHR;
- X addr_6845 = CGA_BASE;
- X adaptor_type = CGA_ADAPTOR;
- X totalfonts = 0;
- X break;
- X
- X case EQ_80MONO:
- X addr_6845 = MONO_BASE;
- X adaptor_type = MDA_ADAPTOR;
- X totalfonts = 0;
- X break;
- X }
- X
- X /* establish default colors */
- X
- X if(color)
- X {
- X kern_attr = (COLOR_KERNEL_FG | COLOR_KERNEL_BG) << 8;
- X user_attr = sgr_tab_color[0] << 8;
- X }
- X else
- X {
- X kern_attr = (MONO_KERNEL_FG | MONO_KERNEL_BG) << 8;
- X if(adaptor_type == MDA_ADAPTOR)
- X user_attr = sgr_tab_imono[0] << 8;
- X else
- X user_attr = sgr_tab_mono[0] << 8;
- X }
- X
- X totalscreens = 1; /* for now until malloced */
- X
- X for(nscr = 0; nscr < PCVT_NSCREENS; nscr++)
- X {
- X vs[nscr].Crtat = Crtat; /* all same until malloc'ed */
- X vs[nscr].Memory = Crtat; /* until malloc'ed */
- X vs[nscr].cur_offset = 0; /* cursor offset */
- X vs[nscr].c_attr = user_attr; /* non-kernel attributes */
- X vs[nscr].bell_on = 1; /* enable bell */
- X vs[nscr].sevenbit = 0; /* set to 8-bit path */
- X vs[nscr].dis_fnc = 0; /* disable display functions */
- X vs[nscr].transparent = 0; /* disable internal tranparency */
- X vs[nscr].lastchar = 0; /* VTxxx behaviour of last
- X * char on line */
- X vs[nscr].report_chars = NULL; /* VTxxx reports init */
- X vs[nscr].report_count = 0; /* VTxxx reports init */
- X vs[nscr].state = STATE_INIT; /* main state machine init */
- X vs[nscr].m_awm = 1; /* enable auto wrap mode */
- X vs[nscr].m_om = 0; /* origin mode = absolute */
- X vs[nscr].sc_flag = 0; /* init saved cursor flag */
- X vs[nscr].which_fkl = SYS_FKL; /* display system fkey-labels */
- X vs[nscr].labels_on = 1; /* if in HP-mode, display
- X * fkey-labels */
- X vs[nscr].attribute = 0; /* HP mode init */
- X vs[nscr].key = 0; /* HP mode init */
- X vs[nscr].l_len = 0; /* HP mode init */
- X vs[nscr].s_len = 0; /* HP mode init */
- X vs[nscr].m_len = 0; /* HP mode init */
- X vs[nscr].i = 0; /* HP mode init */
- X vs[nscr].vt_pure_mode = M_PUREVT; /* initial mode: pure VT220*/
- X vs[nscr].vga_charset = CH_SET0; /* use bios default charset */
- X
- X#if PCVT_24LINESDEF /* true compatibility */
- X vs[nscr].screen_rows = 24; /* default 24 rows on screen */
- X#else /* full screen */
- X vs[nscr].screen_rows = 25; /* default 25 rows on screen */
- X#endif /* PCVT_24LINESDEF */
- X
- X vs[nscr].screen_rowsize = 25; /* default 25 rows on screen */
- X vs[nscr].scrr_beg = 0; /* scrolling region begin row*/
- X vs[nscr].scrr_len=vs[nscr].screen_rows-1; /* scrolling region
- X * end */
- X if(vga_family == VGA_F_TRI)
- X vs[nscr].cursor_start = 1; /* cursor upper scanline */
- X else
- X vs[nscr].cursor_start = 0; /* cursor upper scanline */
- X vs[nscr].cursor_end = 15; /* cursor lower scanline */
- X vs[nscr].cursor_on = 1; /* cursor is on */
- X vs[nscr].ckm = 1; /* normal cursor key mode */
- X vs[nscr].irm = 0; /* replace mode */
- X vs[nscr].lnm = 0; /* CR only */
- X vs[nscr].selchar = 0; /* selective attribute off */
- X vs[nscr].G0 = csd_ascii; /* G0 = ascii */
- X vs[nscr].G1 = csd_ascii; /* G1 = ascii */
- X vs[nscr].G2 = csd_supplemental; /* G2 = supplemental */
- X vs[nscr].G3 = csd_supplemental; /* G3 = supplemental */
- X vs[nscr].GL = vs[nscr].G0; /* GL = G0 */
- X vs[nscr].GR = vs[nscr].G2; /* GR = G2 */
- X vs[nscr].whichi = 0; /* char set designate init */
- X vs[nscr].which[0] = '\0'; /* char set designate init */
- X vs[nscr].hp_state = SHP_INIT; /* init HP mode state machine*/
- X vs[nscr].dcs_state = DCS_INIT; /* init DCS mode state machine*/
- X vs[nscr].ss2 = 0; /* init single shift 2 */
- X vs[nscr].ss3 = 0; /* init single shift 3 */
- X vs[nscr].maxcol = SCR_COL80; /* 80 columns now (you MUST!!!
- X * start with 80!)
- X * see et4000_col() for
- X * reason ... */
- X vs[nscr].wd132col = 0; /* help good old WD .. */
- X vs[nscr].scroll_lock = 0; /* scrollock off */
- X#if PCVT_INHIBIT_NUMLOCK
- X vs[nscr].num_lock = 0; /* numlock off */
- X#else
- X vs[nscr].num_lock = 1; /* numlock on */
- X#endif
- X vs[nscr].caps_lock = 0; /* capslock off */
- X vs[nscr].shift_lock = 0; /* shiftlock off */
- X
- X#if PCVT_24LINESDEF /* true compatibility */
- X vs[nscr].force24 = 1; /* force 24 lines */
- X#else /* maximum screen size */
- X vs[nscr].force24 = 0; /* no 24 lines force yet */
- X#endif /* PCVT_24LINESDEF */
- X
- X vt_clearudk(&(vs[nscr])); /* clear vt220 udk's */
- X
- X vt_str(&vs[nscr]); /* init emulator */
- X
- X if(nscr == 0)
- X {
- X fillw(user_attr | ' ',
- X vs[nscr].Crtat,
- X vs[nscr].maxcol * vs[nscr].screen_rowsize);
- X }
- X
- X#if PCVT_USL_VT_COMPAT
- X vs[nscr].smode.mode = VT_AUTO;
- X vs[nscr].smode.relsig = vs[nscr].smode.acqsig =
- X vs[nscr].smode.frsig = 0;
- X vs[nscr].proc = 0;
- X vs[nscr].pid = vs[nscr].vt_status = 0;
- X#endif /* PCVT_USL_VT_COMPAT */
- X
- X }
- X
- X for(charset = 0;charset < NVGAFONTS;charset++)
- X {
- X vgacs[charset].loaded = 0; /* not populated yet */
- X vgacs[charset].secondloaded = 0; /* not populated yet */
- X switch(adaptor_type)
- X {
- X case VGA_ADAPTOR:
- X
- X /*
- X * for a VGA, do not assume any
- X * constant - instead, read the actual
- X * values. This avoid problems with
- X * LCD displays that apparently happen
- X * to use font matrices up to 19
- X * scan lines and 475 scan lines
- X * total in order to make use of the
- X * whole screen area
- X */
- X
- X outb(addr_6845, CRTC_VDE);
- X vgacs[charset].scr_scanlines =
- X inb(addr_6845 + 1);
- X outb(addr_6845, CRTC_MAXROW);
- X vgacs[charset].char_scanlines =
- X inb(addr_6845 + 1);
- X break;
- X
- X case EGA_ADAPTOR:
- X /* 0x5D for 25 lines */
- X vgacs[charset].scr_scanlines = 0x5D;
- X /* 0x4D for 25 lines */
- X vgacs[charset].char_scanlines = 0x4D;
- X break;
- X
- X case CGA_ADAPTOR:
- X case MDA_ADAPTOR:
- X default:
- X /* These shouldn't be used for CGA/MDA */
- X vgacs[charset].scr_scanlines = 0;
- X vgacs[charset].char_scanlines = 0;
- X break;
- X }
- X vgacs[charset].screen_size = SIZ_25ROWS; /* set screen size */
- X }
- X
- X vgacs[0].loaded = 1; /* The BIOS loaded this at boot */
- X
- X /* set cursor for first screen */
- X
- X outb(addr_6845,CRTC_CURSTART); /* cursor start reg */
- X outb(addr_6845+1,vs[0].cursor_start);
- X outb(addr_6845,CRTC_CUREND); /* cursor end reg */
- X outb(addr_6845+1,vs[0].cursor_end);
- X
- X /* this is to satisfy ddb */
- X
- X if(!keyboard_is_initialized)
- X kbd_code_init1();
- X
- X /* update keyboard led's */
- X
- X update_led();
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * get kernel memory for virtual screens
- X *
- X * CAUTION: depends on "can_do_132col" being set properly, or
- X * depends on vga_type() being run before calling this !!!
- X *
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_coldmalloc(void)
- X{
- X int nscr;
- X int screen_max_size;
- X
- X switch(adaptor_type)
- X {
- X default:
- X case MDA_ADAPTOR:
- X case CGA_ADAPTOR:
- X screen_max_size = MAXROW_MDACGA * MAXCOL_MDACGA * CHR;
- X break;
- X
- X case EGA_ADAPTOR:
- X screen_max_size = MAXROW_EGA * MAXCOL_EGA * CHR;
- X break;
- X
- X case VGA_ADAPTOR:
- X if(can_do_132col)
- X screen_max_size =
- X MAXROW_VGA * MAXCOL_SVGA * CHR;
- X else
- X screen_max_size =
- X MAXROW_VGA * MAXCOL_VGA * CHR;
- X }
- X
- X for(nscr = 0; nscr < PCVT_NSCREENS; nscr++)
- X {
- X if((vs[nscr].Memory =
- X (u_short *)malloc(screen_max_size, M_DEVBUF, M_WAITOK))
- X == NULL)
- X {
- X printf("pcvt: screen memory malloc failed, "
- X "NSCREEN=%d, nscr=%d\n",
- X PCVT_NSCREENS, nscr);
- X break;
- X }
- X if(nscr != 0)
- X {
- X vs[nscr].Crtat = vs[nscr].Memory;
- X fillw(user_attr | ' ',
- X vs[nscr].Crtat,
- X vs[nscr].maxcol * vs[nscr].screen_rowsize);
- X totalscreens++;
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * check if we must scroll up screen
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xcheck_scroll(struct video_state *svsp)
- X{
- X if(svsp->cur_offset >=
- X ((svsp->scrr_beg + svsp->scrr_len + 1) * svsp->maxcol))
- X {
- X
- X/* XXX */ critical_scroll = 1;
- X
- X bcopy ( svsp->Crtat + (svsp->scrr_beg * svsp->maxcol)
- X + svsp->maxcol,
- X svsp->Crtat + (svsp->scrr_beg * svsp->maxcol),
- X svsp->maxcol * svsp->scrr_len * CHR );
- X
- X fillw( user_attr | ' ',
- X svsp->Crtat
- X + ((svsp->scrr_beg + svsp->scrr_len) * svsp->maxcol),
- X svsp->maxcol);
- X
- X svsp->cur_offset -= svsp->maxcol;
- X
- X/* XXX */ if(switch_page != -1)
- X/* XXX */ {
- X/* XXX */ vgapage(switch_page);
- X/* XXX */ switch_page = -1;
- X/* XXX */ }
- X
- X/* XXX */ critical_scroll = 0;
- X
- X
- X/*XXX*/ if(svsp->scroll_lock && svsp->openf && curproc)
- X tsleep((caddr_t)&(svsp->scroll_lock), PUSER, "scrlck", 0);
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * write to one user function key label
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xwritefkl(int num, u_char *string, struct video_state *svsp)
- X{
- X if((num < 0) || (num > 7)) /* range ok ? */
- X return;
- X
- X strncpy(svsp->ufkl[num], string, 16); /* save string in static array */
- X
- X if(svsp->which_fkl == USR_FKL)
- X wrfkl(num,string,svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * write to one system function key label
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xswritefkl(int num, u_char *string, struct video_state *svsp)
- X{
- X if((num < 0) || (num > 7)) /* range ok ? */
- X return;
- X
- X strncpy(svsp->sfkl[num], string, 16); /* save string in static array */
- X
- X if(svsp->which_fkl == SYS_FKL)
- X wrfkl(num,string,svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * write function key label onto screen
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xwrfkl(int num, u_char *string, struct video_state *svsp)
- X{
- X register u_short *p;
- X register u_short *p1;
- X register int cnt = 0;
- X
- X if(!svsp->labels_on || (svsp->vt_pure_mode == M_PUREVT))
- X return;
- X
- X p = (svsp->Crtat
- X + (svsp->screen_rows * svsp->maxcol)); /* screen_rows+1 line */
- X
- X if(svsp->maxcol == SCR_COL80)
- X {
- X if(num < 4) /* labels 1 .. 4 */
- X p += (num * LABEL_LEN);
- X else /* labels 5 .. 8 */
- X p += ((num * LABEL_LEN) + LABEL_MID + 1);
- X }
- X else
- X {
- X if(num < 4) /* labels 1 .. 4 */
- X p += (num * (LABEL_LEN + 6));
- X else /* labels 5 .. 8 */
- X p += ((num * (LABEL_LEN + 6)) + LABEL_MID + 11);
- X
- X }
- X p1 = p + svsp->maxcol; /* second label line */
- X
- X while((*string != '\0') && (cnt < 8))
- X {
- X *p = ((0x70 << 8) + (*string & 0xff));
- X p++;
- X string++;
- X cnt++;
- X }
- X while(cnt < 8)
- X {
- X *p = ((0x70 << 8) + ' ');
- X p++;
- X cnt++;
- X }
- X
- X while((*string != '\0') && (cnt < 16))
- X {
- X *p1 = ((0x70 << 8) + (*string & 0xff));
- X p1++;
- X string++;
- X cnt++;
- X }
- X while(cnt < 16)
- X {
- X *p1 = ((0x70 << 8) + ' ');
- X p1++;
- X cnt++;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * remove (blank) function key labels, row/col and status line
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xfkl_off(struct video_state *svsp)
- X{
- X register u_short *p;
- X register int num;
- X
- X svsp->labels_on = 0;
- X
- X p = (svsp->Crtat+(svsp->screen_rows*svsp->maxcol));
- X
- X for(num = 0; num < (3*svsp->maxcol); num++)
- X *p++ = ' ';
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * (re-) display function key labels, row/col and status line
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xfkl_on(struct video_state *svsp)
- X{
- X svsp->labels_on = 1;
- X
- X if(svsp->which_fkl == SYS_FKL)
- X sw_sfkl(svsp);
- X else if(svsp->which_fkl == USR_FKL)
- X sw_ufkl(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * set emulation mode, switch between pure VTxxx mode and HP/VTxxx mode
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xset_emulation_mode(struct video_state *svsp, int mode)
- X{
- X if(svsp->vt_pure_mode == mode)
- X return;
- X
- X fillw(user_attr | ' ',
- X svsp->Crtat,
- X svsp->maxcol * svsp->screen_rowsize);
- X
- X clr_parms(svsp); /* escape parameter init */
- X svsp->state = STATE_INIT; /* initial state */
- X
- X svsp->col = 0; /* init row */
- X svsp->row = 0; /* init col */
- X svsp->cur_offset = 0; /* cursor offset init */
- X svsp->scrr_beg = 0; /* start of scrolling region */
- X svsp->sc_flag = 0; /* invalidate saved cursor position */
- X svsp->transparent = 0; /* disable control code processing */
- X
- X if(mode == M_HPVT) /* vt-pure -> hp/vt-mode */
- X {
- X svsp->vt_pure_mode = M_HPVT;
- X
- X svsp->vs_tty->t_winsize.ws_row
- X = svsp->screen_rows = svsp->screen_rowsize - 3;
- X
- X svsp->scrr_len = svsp->screen_rows - 1;
- X
- X update_hp(svsp);
- X }
- X else if(mode == M_PUREVT) /* hp/vt-mode -> vt-pure */
- X {
- X svsp->vt_pure_mode = M_PUREVT;
- X
- X svsp->screen_rows = svsp->screen_rowsize;
- X
- X svsp->vs_tty->t_winsize.ws_row
- X = svsp->screen_rows = svsp->screen_rowsize;
- X
- X svsp->scrr_len = svsp->screen_rows - 1;
- X }
- X
- X#if PCVT_SIGWINCH
- X pgsignal(svsp->vs_tty->t_pgrp, SIGWINCH, 1);
- X#endif /* PCVT_SIGWINCH */
- X
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * initialize user function key labels
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xinit_ufkl(struct video_state *svsp)
- X{
- X writefkl(0,(u_char *)" f1",svsp); /* init fkey labels */
- X writefkl(1,(u_char *)" f2",svsp);
- X writefkl(2,(u_char *)" f3",svsp);
- X writefkl(3,(u_char *)" f4",svsp);
- X writefkl(4,(u_char *)" f5",svsp);
- X writefkl(5,(u_char *)" f6",svsp);
- X writefkl(6,(u_char *)" f7",svsp);
- X writefkl(7,(u_char *)" f8",svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * initialize system user function key labels
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xinit_sfkl(struct video_state *svsp)
- X{
- X /* 1234567812345678 */
- X if(can_do_132col)
- X /* 1234567812345678 */
- X swritefkl(0,(u_char *)"132 COLUMNS ",svsp);
- X else
- X swritefkl(0,(u_char *)" ",svsp);
- X
- X /* 1234567812345678 */
- X swritefkl(1,(u_char *)"SOFT-RSTTERMINAL",svsp);
- X if(svsp->force24)
- X swritefkl(2,(u_char *)"FORCE24 ENABLE *",svsp);
- X else
- X swritefkl(2,(u_char *)"FORCE24 ENABLE ",svsp);
- X
- X#if PCVT_SHOWKEYS /* 1234567812345678 */
- X if(svsp == &vs[0])
- X swritefkl(3,(u_char *)"KEYBSCANDISPLAY ",svsp);
- X else
- X swritefkl(3,(u_char *)" ",svsp);
- X#else
- X swritefkl(3,(u_char *)" ",svsp);
- X#endif /* PCVT_SHOWKEYS */
- X
- X /* 1234567812345678 */
- X swritefkl(4,(u_char *)"BELL ENABLE *",svsp);
- X swritefkl(5,(u_char *)"8-BIT ENABLE *",svsp);
- X swritefkl(6,(u_char *)"DISPLAY FUNCTNS ",svsp);
- X swritefkl(7,(u_char *)"AUTOWRAPENABLE *",svsp);
- X /* 1234567812345678 */
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * switch display to user function key labels
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xsw_ufkl(struct video_state *svsp)
- X{
- X int i;
- X svsp->which_fkl = USR_FKL;
- X for(i = 0; i < 8; i++)
- X wrfkl(i,svsp->ufkl[i],svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * switch display to system function key labels
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xsw_sfkl(struct video_state *svsp)
- X{
- X int i;
- X svsp->which_fkl = SYS_FKL;
- X for(i = 0; i < 8; i++)
- X wrfkl(i,svsp->sfkl[i],svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * toggle force 24 lines
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xtoggl_24l(struct video_state *svsp)
- X{
- X if(svsp->which_fkl == SYS_FKL)
- X {
- X if(svsp->force24)
- X {
- X svsp->force24 = 0;
- X swritefkl(2,(u_char *)"FORCE24 ENABLE ",svsp);
- X }
- X else
- X {
- X svsp->force24 = 1;
- X swritefkl(2,(u_char *)"FORCE24 ENABLE *",svsp);
- X }
- X set_screen_size(svsp, vgacs[(svsp->vga_charset)].screen_size);
- X }
- X}
- X
- X#if PCVT_SHOWKEYS
- X/*---------------------------------------------------------------------------*
- X * toggle keyboard scancode display
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xtoggl_kbddbg(struct video_state *svsp)
- X{
- X if((svsp->which_fkl == SYS_FKL) && (svsp == &vs[0]))
- X {
- X if(keyboard_show)
- X {
- X keyboard_show = 0;
- X swritefkl(3,(u_char *)"KEYBSCANDISPLAY ",svsp);
- X }
- X else
- X {
- X keyboard_show = 1;
- X swritefkl(3,(u_char *)"KEYBSCANDISPLAY*",svsp);
- X }
- X }
- X}
- X#endif /* PCVT_SHOWKEYS */
- X
- X/*---------------------------------------------------------------------------*
- X * toggle display functions
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xtoggl_dspf(struct video_state *svsp)
- X{
- X if(svsp->which_fkl == SYS_FKL)
- X {
- X if(svsp->dis_fnc)
- X {
- X svsp->dis_fnc = 0;
- X swritefkl(6,(u_char *)"DISPLAY FUNCTNS ",svsp);
- X }
- X else
- X {
- X svsp->dis_fnc = 1;
- X swritefkl(6,(u_char *)"DISPLAY FUNCTNS*",svsp);
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * auto wrap on/off
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xtoggl_awm(struct video_state *svsp)
- X{
- X if(svsp->which_fkl == SYS_FKL)
- X {
- X if(svsp->m_awm)
- X {
- X svsp->m_awm = 0;
- X swritefkl(7,(u_char *)"AUTOWRAPENABLE ",svsp);
- X }
- X else
- X {
- X svsp->m_awm = 1;
- X swritefkl(7,(u_char *)"AUTOWRAPENABLE *",svsp);
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * bell on/off
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xtoggl_bell(struct video_state *svsp)
- X{
- X if(svsp->which_fkl == SYS_FKL)
- X {
- X if(svsp->bell_on)
- X {
- X svsp->bell_on = 0;
- X swritefkl(4,(u_char *)"BELL ENABLE ",svsp);
- X }
- X else
- X {
- X svsp->bell_on = 1;
- X swritefkl(4,(u_char *)"BELL ENABLE *",svsp);
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * 7/8 bit usage
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xtoggl_sevenbit(struct video_state *svsp)
- X{
- X if(svsp->which_fkl == SYS_FKL)
- X {
- X if(svsp->sevenbit)
- X {
- X svsp->sevenbit = 0;
- X swritefkl(5,(u_char *)"8-BIT ENABLE *",svsp);
- X }
- X else
- X {
- X svsp->sevenbit = 1;
- X swritefkl(5,(u_char *)"8-BIT ENABLE ",svsp);
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * 80 / 132 columns
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xtoggl_columns(struct video_state *svsp)
- X{
- X if(svsp->which_fkl == SYS_FKL)
- X {
- X if(svsp->maxcol == SCR_COL132)
- X {
- X if(vt_col(svsp, SCR_COL80))
- X svsp->maxcol = 80;
- X }
- X else
- X {
- X if(vt_col(svsp, SCR_COL132))
- X svsp->maxcol = 132;
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * toggle vga 80/132 column operation
- X *---------------------------------------------------------------------------*/
- Xint
- Xvt_col(struct video_state *svsp, int cols)
- X{
- X if(vga_col(svsp, cols) == 0)
- X return(0);
- X
- X if(cols == SCR_COL80)
- X swritefkl(0,(u_char *)"132 COLUMNS ",svsp);
- X else
- X swritefkl(0,(u_char *)"132 COLUMNS*",svsp);
- X
- X fillw(user_attr | ' ',
- X svsp->Crtat,
- X svsp->maxcol * svsp->screen_rowsize);
- X
- X clr_parms(svsp); /* escape parameter init */
- X svsp->state = STATE_INIT; /* initial state */
- X svsp->col = 0; /* init row */
- X svsp->row = 0; /* init col */
- X svsp->cur_offset = 0; /* cursor offset init */
- X svsp->sc_flag = 0; /* invalidate saved cursor position */
- X svsp->scrr_beg = 0; /* reset scrolling region */
- X svsp->scrr_len = svsp->screen_rows-1; /*reset scrolling region legnth*/
- X svsp->transparent = 0; /* disable control code processing */
- X svsp->selchar = 0; /* selective attr off */
- X vt_initsel(svsp); /* re-init sel attr */
- X
- X update_hp(svsp); /* update labels, row/col, page ind */
- X
- X /* Update winsize struct to reflect screen size */
- X
- X if(svsp->vt_pure_mode == M_HPVT)
- X svsp->vs_tty->t_winsize.ws_row = svsp->screen_rowsize - 3;
- X else
- X svsp->vs_tty->t_winsize.ws_row = svsp->screen_rowsize;
- X svsp->vs_tty->t_winsize.ws_col = svsp->maxcol;
- X
- X svsp->vs_tty->t_winsize.ws_xpixel = (cols == SCR_COL80)? 720: 1056;
- X svsp->vs_tty->t_winsize.ws_ypixel = 400;
- X
- X#if PCVT_SIGWINCH
- X pgsignal(svsp->vs_tty->t_pgrp, SIGWINCH, 1);
- X#endif /* PCVT_SIGWINCH */
- X
- X return(1);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * update HP stuff on screen
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xupdate_hp(struct video_state *svsp)
- X{
- X if(svsp->vt_pure_mode != M_HPVT || (!svsp->labels_on))
- X return;
- X
- X /* update fkey labels */
- X
- X if(svsp->which_fkl == SYS_FKL)
- X sw_sfkl(svsp);
- X else if(svsp->which_fkl == USR_FKL)
- X sw_ufkl(svsp);
- X
- X if(vsp == svsp)
- X {
- X /* update current displayed screen indicator */
- X
- X *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol))
- X + svsp->maxcol - 3) = user_attr | '[';
- X *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol))
- X + svsp->maxcol - 2) = user_attr | current_video_screen + '0';
- X *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol))
- X + svsp->maxcol - 1) = user_attr | ']';
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * initialize ANSI escape sequence parameter buffers
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xclr_parms(struct video_state *svsp)
- X{
- X register int i;
- X for(i=0; i < MAXPARMS; i++)
- X svsp->parms[i] = 0;
- X svsp->parmi = 0;
- X}
- X
- X
- X/*---------------------------------------------------------------------------*
- X *
- X * partial HP 2392 ANSI mode Emulator
- X * ==================================
- X *
- X * this part tooks over the emulation of some escape sequences
- X * needed to handle the function key labels
- X *
- X * They are modeled after the corresponding escape sequences
- X * introduced with the HP2392 terminals from Hewlett-Packard.
- X *
- X * see:
- X * "HP2392A, Display Terminal Reference Manual",
- X * HP Manual Part Number 02390-90001
- X * and:
- X * Reference Manual Supplement
- X * "2392A Display Terminal Option 049, ANSI Operation"
- X * HP Manual Part Number 02390-90023EN
- X *
- X *---------------------------------------------------------------------------*/
- X
- Xstatic void
- Xhp_entry(U_char ch, struct video_state *svsp)
- X{
- X switch(svsp->hp_state)
- X {
- X case SHP_INIT:
- X switch(ch)
- X {
- X case 'f':
- X svsp->hp_state = SHP_AND_F;
- X svsp->attribute = 0;
- X svsp->key = 0;
- X svsp->l_len = 0;
- X svsp->s_len = 0;
- X svsp->i = 0;
- X break;
- X
- X case 'j':
- X svsp->m_len = 0;
- X svsp->hp_state = SHP_AND_J;
- X break;
- X
- X case 's':
- X svsp->hp_state = SHP_AND_ETE;
- X break;
- X
- X default:
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X break;
- X }
- X break;
- X
- X case SHP_AND_F:
- X if((ch >= '0') && (ch <= '8'))
- X {
- X svsp->attribute = ch;
- X svsp->hp_state = SHP_AND_Fa;
- X }
- X else
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X }
- X break;
- X
- X case SHP_AND_Fa:
- X if(ch == 'a')
- X svsp->hp_state = SHP_AND_Fak;
- X else if(ch == 'k')
- X {
- X svsp->key = svsp->attribute;
- X svsp->hp_state = SHP_AND_Fakd;
- X }
- X else
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X }
- X break;
- X
- X case SHP_AND_Fak:
- X if((ch >= '1') && (ch <= '8'))
- X {
- X svsp->key = ch;
- X svsp->hp_state = SHP_AND_Fak1;
- X }
- X else
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X }
- X break;
- X
- X case SHP_AND_Fak1:
- X if(ch == 'k')
- X svsp->hp_state = SHP_AND_Fakd;
- X else
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X }
- X break;
- X
- X case SHP_AND_Fakd:
- X if(svsp->l_len > 16)
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X }
- X else if(ch >= '0' && ch <= '9')
- X {
- X svsp->l_len *= 10;
- X svsp->l_len += (ch -'0');
- X }
- X else if(ch == 'd')
- X svsp->hp_state = SHP_AND_FakdL;
- X else
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X }
- X break;
- X
- X case SHP_AND_FakdL:
- X if(svsp->s_len > 80)
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X }
- X else if(ch >= '0' && ch <= '9')
- X {
- X svsp->s_len *= 10;
- X svsp->s_len += (ch -'0');
- X }
- X else if(ch == 'L')
- X {
- X svsp->hp_state = SHP_AND_FakdLl;
- X svsp->transparent = 1;
- X }
- X else
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X }
- X break;
- X
- X case SHP_AND_FakdLl:
- X svsp->l_buf[svsp->i] = ch;
- X if(svsp->i >= svsp->l_len-1)
- X {
- X svsp->hp_state = SHP_AND_FakdLls;
- X svsp->i = 0;
- X if(svsp->s_len == 0)
- X {
- X svsp->state = STATE_INIT;
- X svsp->hp_state = SHP_INIT;
- X svsp->transparent = 0;
- X svsp->i = 0;
- X svsp->l_buf[svsp->l_len] = '\0';
- X svsp->s_buf[svsp->s_len] = '\0';
- X writefkl((svsp->key - '0' -1),
- X svsp->l_buf, svsp);
- X }
- X }
- X else
- X svsp->i++;
- X break;
- X
- X case SHP_AND_FakdLls:
- X svsp->s_buf[svsp->i] = ch;
- X if(svsp->i >= svsp->s_len-1)
- X {
- X svsp->state = STATE_INIT;
- X svsp->hp_state = SHP_INIT;
- X svsp->transparent = 0;
- X svsp->i = 0;
- X svsp->l_buf[svsp->l_len] = '\0';
- X svsp->s_buf[svsp->s_len] = '\0';
- X writefkl((svsp->key - '0' -1), svsp->l_buf,
- X svsp);
- X }
- X else
- X svsp->i++;
- X break;
- X
- X case SHP_AND_J:
- X switch(ch)
- X {
- X case '@': /* enable user keys, remove */
- X /* all labels & status from */
- X /* screen */
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X fkl_off(svsp);
- X break;
- X
- X case 'A': /* enable & display "modes" */
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X fkl_on(svsp);
- X sw_sfkl(svsp);
- X break;
- X
- X case 'B': /* enable & display "user" */
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X fkl_on(svsp);
- X sw_ufkl(svsp);
- X break;
- X
- X case 'C': /* remove (clear) status line*/
- X /* and restore current labels*/
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X fkl_on(svsp);
- X break;
- X
- X case 'R': /* enable usr/menu keys */
- X /* and fkey label modes */
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case 'S': /* disable usr/menu keys */
- X /* and fkey label modes */
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X break;
- X
- X case '0':
- X case '1':
- X case '2':
- X case '3':
- X case '4':
- X case '5':
- X case '6':
- X case '7':
- X case '8':
- X case '9': /* parameters for esc & j xx L mm */
- X svsp->m_len *= 10;
- X svsp->m_len += (ch -'0');
- X break;
- X
- X case 'L':
- X svsp->hp_state = SHP_AND_JL;
- X svsp->i = 0;
- X svsp->transparent = 1;
- X break;
- X
- X default:
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X break;
- X
- X }
- X break;
- X
- X
- X case SHP_AND_JL:
- X svsp->m_buf[svsp->i] = ch;
- X if(svsp->i >= svsp->m_len-1)
- X {
- X svsp->state = STATE_INIT;
- X svsp->hp_state = SHP_INIT;
- X svsp->transparent = 0;
- X svsp->i = 0;
- X svsp->m_buf[svsp->m_len] = '\0';
- X /* display status line */
- X /* needs to be implemented */
- X /* see 2392 man, 3-14 */
- X
- X }
- X else
- X svsp->i++;
- X break;
- X
- X case SHP_AND_ETE: /* eat chars until uppercase */
- X if(ch >= '@' && ch <= 'Z')
- X {
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X svsp->transparent = 0;
- X }
- X break;
- X
- X default:
- X svsp->hp_state = SHP_INIT;
- X svsp->state = STATE_INIT;
- X svsp->transparent = 0;
- X break;
- X }
- X}
- X
- X#endif /* NVT > 0 */
- X
- X/* ------------------------- E O F ------------------------------------------*/
- X
- END_OF_FILE
- if test 49760 -ne `wc -c <'pcvt/pcvt_out.c'`; then
- echo shar: \"'pcvt/pcvt_out.c'\" unpacked with wrong size!
- fi
- # end of 'pcvt/pcvt_out.c'
- fi
- echo shar: End of archive 7 \(of 13\).
- cp /dev/null ark7isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 13 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-