From 652374b8ca673da7b481c90487344e1648792f9b Mon Sep 17 00:00:00 2001 From: jtc Date: Sat, 7 Oct 1995 21:10:55 +0000 Subject: [PATCH] import pcvt 3.32 --- .../i386/isa/pcvt/Util/demo/chardemo.vt.gz.uu | 53 + .../i386/isa/pcvt/Util/demo/colors.vt.gz.uu | 15 + .../i386/isa/pcvt/Util/demo/cowscene.vt.gz.uu | 90 ++ .../isa/pcvt/Util/demo/outerlimit.vt.gz.uu | 193 ++++ sys/arch/i386/isa/pcvt/Util/demo/playvt.c | 111 +++ sys/arch/i386/isa/pcvt/Util/demo/sgr.vt.gz.uu | 11 + .../i386/isa/pcvt/Util/demo/twzone.vt.gz.uu | 350 +++++++ .../i386/isa/pcvt/Util/demo/xmas.vt.gz.uu | 110 +++ sys/arch/i386/isa/pcvt/Util/kbdio/Makefile | 22 + sys/arch/i386/isa/pcvt/Util/kbdio/kbdio.y | 344 +++++++ sys/arch/i386/isa/pcvt/Util/kbdio/lex.l | 87 ++ sys/arch/i386/isa/pcvt/Util/pcvtdoc/Makefile | 4 + sys/arch/i386/isa/pcvt/Util/pcvtdoc/pcvt.4 | 906 ++++++++++++++++++ 13 files changed, 2296 insertions(+) create mode 100644 sys/arch/i386/isa/pcvt/Util/demo/chardemo.vt.gz.uu create mode 100644 sys/arch/i386/isa/pcvt/Util/demo/colors.vt.gz.uu create mode 100644 sys/arch/i386/isa/pcvt/Util/demo/cowscene.vt.gz.uu create mode 100644 sys/arch/i386/isa/pcvt/Util/demo/outerlimit.vt.gz.uu create mode 100644 sys/arch/i386/isa/pcvt/Util/demo/playvt.c create mode 100644 sys/arch/i386/isa/pcvt/Util/demo/sgr.vt.gz.uu create mode 100644 sys/arch/i386/isa/pcvt/Util/demo/twzone.vt.gz.uu create mode 100644 sys/arch/i386/isa/pcvt/Util/demo/xmas.vt.gz.uu create mode 100644 sys/arch/i386/isa/pcvt/Util/kbdio/Makefile create mode 100644 sys/arch/i386/isa/pcvt/Util/kbdio/kbdio.y create mode 100644 sys/arch/i386/isa/pcvt/Util/kbdio/lex.l create mode 100644 sys/arch/i386/isa/pcvt/Util/pcvtdoc/Makefile create mode 100644 sys/arch/i386/isa/pcvt/Util/pcvtdoc/pcvt.4 diff --git a/sys/arch/i386/isa/pcvt/Util/demo/chardemo.vt.gz.uu b/sys/arch/i386/isa/pcvt/Util/demo/chardemo.vt.gz.uu new file mode 100644 index 000000000000..efcd4c7f1ef2 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/demo/chardemo.vt.gz.uu @@ -0,0 +1,53 @@ +begin 664 chardemo.vt.gz +M'XL("):V^BX"`V-H87)D96UO+G9T`*7829,=5Q5%X3D1X!]0DZ(1($`F[VLR +M\UI"IF3`1V",<=DT%IT0!MF6)6%D^N:OLW*OO!',J\09U[N2;Y,6CBP>' +MVZT^^YE+_MY\^.*#9T\?/KF\O+I^[?[][:?WI\\O7/^&7Z^>/ +MC,MWW[J^WO;RG?H9:MVE;K5H>M^E;'K=JTY2G9MCPG#UO.R>.62_*T +MY9H\;]F3VZF64VV[U7*K;<=:CK7M6LNUPW:MY=IAN]9R[=73X?'%\KGMT7/E +MQ7-]?GON7%_8WCK7%_/0N;Z45\YU(T^/F^FI>-M?-/&NNK^5- +MSCOF^N9V>ZEIN[U4VVXO==AN+W7,[:5.N;W4.;>7 +MFG-[J26WEUIS>ZF>VTN]DMM+W<[MI>[D]E+?RNVE[N;V4J]NM]?Z]G9[K:OM +M]EKWMMMKO9;;:WTGM]?Z;FZO];W<7NOUW%ZKZT?Y/9:;^3V +M6C_,[;7>S.VU?K3=[O76=KO7C[?;O=[>;O>ZSNU>[^1VKW=SN]=/[G=ZT%N]_I%;O?Z96[W^E5N]_KU=KM-]9OM./MPN\[^=CO/ +M/LI]XG=Y`/%^7D#\/D\@_I`W$(_S".*#O(+X,,\@/LH[B"=Y"/%Q7D(\S5.( +M9WE+J^=Y2ZL_YBVM/LE;6OW)M[1ZX5M:?>I;6OW9M[3ZBV]I]5??TNIOOJ75 +MWWU+JW_XEE;_]"VM_N5;6OW;M[3ZSTL7:TP\N;AY;V?1SKI@`X.-#%8:A#8( +M<1#J(.1!Z(,0"*$00B*$1@B1$"HAPJ3-.F$#A8T45BJ$5@BQ$&HAY$+HA1`, +MH1A",H1F"-$0JB'"IBVZ80.'C1Q6.H1V"/$0ZB'D0^B'$!"A($)"A(8($1$J +M(L*HK3IB`XF-)%9*A)8(,1%J(N1$Z(D0%*$H0E*$I@A1$:HB9-5W5GUGU7=6 +M?;#J@U4?K/I@U0>K/ECUP:H/5GVPZH-5'ZSZ8-5E=9ADQ885&U:LK`A9$;(B +M9$7(BI`5(2M"5H2L"%D1LB)D1835K:L=U.$D*#:@V(!B!44(BA`4(2A"4(2@ +M"$$1@B($10B*$!0A*"*@#F=!L0'%!A0K*$)0A*`(01&"(@1%"(H0%"$H0E"$ +MH`A!$0%UF`7%!A0;4*R@"$$1@B($10B*$!0A*$)0A*`(01&"(@1%!-1A$10; +M4&Q`L8(B!$4(BA`4(2A"4(2@"$$1@B($10B*$!014(=54&Q`L0'%"HH0%"$H +M0E"$H`A!$8(B!$4(BA`4(2A"4(2@^@ZJ[Z#Z#JH/4'V`Z@-4'Z#Z`-4'J#Y` +M]0&J#U!]@.H#5!^@NJ!NWCCOHHY'1;$1Q484JRA"482B"$41BB(412B*4!2A +M*$)1A*((11$1=3PIBHTH-J)811&*(A1%*(I0%*$H0E&$H@A%$8HB%$4HBHBH +MXUE1;$2Q$<4JBE`4H2A"482B"$41BB(412B*4!2A*$)11$0=9T6Q$<5&%*LH +M0E&$H@A%$8HB%$4HBE`4H2A"482B"$41$75<%,5&%!M1K*((11&*(A1%*(I0 +M%*$H0E&$H@A%$8HB%$5$U'%5%!M1;$2QBB(412B*4!2A*$)1A*((11&*(A1% +M*(I0%*&H:0=U.@B*#2@VH%A!$8(B!$4(BA`4(2A"4(2@"$$1@B($10B*"*C3 +M45!L0+$!Q0J*$!0A*$)0A*`(01&"(@1%"(H0%"$H0E!$0)U.@F(#B@TH5E"$ +MH`A!$8(B!$4(BA`4(2A"4(2@"$$1@B("ZG06%!M0;$"Q@B($10B*$!0A*$)0 +MA*`(01&"(@1%"(H0%!%0IUE0;$"Q`<4*BA`4(2A"4(2@"$$1@B($10B*$!0A +M*$)01$"=%D&Q`<4&%"LH0E"$H`A!$8(B!$4(BA`4(2A"4(2@"$$1@KJS@SHW +M0;$!Q084*RA"4(2@"$$1@B($10B*$!0A*$)0A*`(01$!=3X(B@TH-J!801&" +M(@1%"(H0%"$H0E"$H`A!$8(B!$4(B@BH\U%0;$"Q`<4*BA`4(2A"4(2@"$$1 +M@B($10B*$!0A*$)01$"=3X)B`XH-*%90A*`(01&"(@1%"(H0%"$H0E"$H`A! +M$8(B`NI\%A0;4&Q`L8(B!$4(BA`4(2A"4(2@"$$1@B($10B*$!014.=94&Q` +ML0'%"HH0%"$H0E"$H`A!$8(B!$4(BA`4(2A"4(2@[HZ/==/^M6[:/]=-^_>Z +M:7RPF\87NVE\LIO&-[MI?+2;QE>[:7RVF\9WNVE\N)O&E[MI?+J;QK>[25!S +M$Q0;4&Q`L8(B!$4(BA`4(2A"4(2@"$$1@B($10B*$!014/-!4&Q`L0'%"HH0 +M%"$H0E"$H`A!$8(B!$4(BA`4(2A"4$1`S4=!L0'%!A0K*$)0A*`(01&"(@1% +M"(H0%"$H0E"$H`A!$0$UGP3%!A0;4*R@"$$1@B($10B*$!0A*$)0A*`(01&" +M(@1%!-1\%A0;4&Q`L8(B!$4(BA`4(2A"4(2@"$$1@B($10B*$!0AJ#9`]1U4 +MWT'U'50?H/H`U0>H/D#U`:H/4'V`Z@-4'Z#Z`-4'J#Y`]?UK^+1_#I_V[^'3 +M_D%\&E_$I_%)?!K?Q*?Q47P:7\6G\5E\&M_%I_%A?!I?QJ?Q:7P:W\:G\7%\ +M$M32!,4&%!M0K*`(01&"(@1%"(H0%"$H0E"$H`A!$8(B!$4$U'(0%!M0;$"Q +M@B($10B*$!0A*$)0A*`(01&"(@1%"(H0%!%0RU%0;$"Q`<4*BA`4(2A"4(2@ +M"$$1@B($10B*$!0A*$)01$`M)T&Q`<4&%"LH0E"$H`A!$8(B!$4(BA`4(2A" +64(2@"$$1?CT_'&^W^B\8)0@*\AL``,4& +` +end diff --git a/sys/arch/i386/isa/pcvt/Util/demo/colors.vt.gz.uu b/sys/arch/i386/isa/pcvt/Util/demo/colors.vt.gz.uu new file mode 100644 index 000000000000..1d5d0daee458 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/demo/colors.vt.gz.uu @@ -0,0 +1,15 @@ +begin 664 colors.vt.gz +M'XL("):V^BX"`V-O;&]R!^I7T"FGD`Q^+^S)TB2N-8 +M;B(GA=UMM;*1C;(8":\E/W[,G(.SX0E2+,WE(#%\@N$T._.O7H;MYO;NR_6O +MN_2CFX;^F.RR3??=^S'=CH]=^CX>QNGU(ME[^I9NQJE[FL:WE\>+Y/.%J_W# +M;US8;K:;A*/963LO_'&+MVF^TP5#,0S#,3)&8)24MIMEA63MLEP[I#EYBRB, +M@JB,BFB,ANB,CI@9,V(PQN=3:RRG#*D,(4/`$#($#"%#P!`R!`PA0\`0,@0, +M(4/`$#*DOH_T'4H]6C]"@\2H_"H_0H/$J/PJ/T*#Q*C\*C]"@\2H_" +M\W<;G)JLFHPF@\EH,IB,)H/):#*8C":#R6@RF(PF@\EHLM6G\LIP,AP,)\/! +M<#(<#"?#P7`R'`PGP\%P,AP,)\-7C%P9F8P,1B8C@Y')R&!D,C(8F8P,1B8C +M@Y')R&!D,O**$9419`0804:`$60$&$%&@!%D!!A!1H`19`0804:L&*4R"AD% +MC$)&`:.04<`H9!0P"AD%C$)&`:.04<`H9)1_&/?/_6M:_BZ/3R;XQMS>3UNF+A!PT8S;MAQPV^Y +M::N-?^R&C=WVOX>GXU]_?/_P])OM0R.;EXG.AXG/`1&*?*8/)I^#%V,G0U^W>>L[\OA%^,O`?;YBN<0 +MMUNAX(Y`EB@9S&&!TRR`FD.IIL%0`"L#:Y9H!P#7+)0U:X`(,8<$F`T`W35` +M90[;)Q#*?R5;2+?@BP@CQLT.3M3,F=$)H1-")X1.")T\>C%AA-`M0K<(W2)T +MB]`MTFX1ND/H#J$[A.X0ND/:'4)O$7J+T%N$WB+T%FEO$7J'T#N$WB'T#J%W +M2'N'T'N$WB/T'J'W"+U'VGN$?D+H)X1^0N@GA'Y"VD\(_8S0SPC]C-#/"/V, +MM)\1NCG"<'.$\>8(`\X11IPCF@`>M^2`0QZ.>3CHX:B'PQZ,>P8&/@,CGX&A +MS\#89V#P,S#Z&1C^#(Q_!@9``R.@@2'0P!AH8!`T,`H:&`8-C(,&!D(#(Z&! +MH=#`6&A@,#0P&AH8#@V,AP8&1`,CHH$AT<"8:&!0-#`J&A@6#8R+!@9&`R.C +M@:'1P-AH8'`T,#H:&!X-C(\&!D@#(Z2!(=+`&&E@D#0P2AH8)@V,DP3C),$X +M23!.$HR3=$0<:!DG3T/=>OFB^>V''Q^>SV^HN]P"K^[R]?B9P_>L0D/W_A4\/82F,%08P8003AC!A#!,&,6$4$X:A,`PQ +MB<""[*4RJ\Q^)F;^^O`7(E\?3;P^FCJCE5F]/FK^J,PJLYH_*K/*K.:/RJPR +MJ_FC,JO,*K/*K#+[.9@-=-SE$'[H;L>-\QMK+U]]^/#IIW5**[/*S%\@3;Q` +M&KY`IGMCZI169O4"J1FD,JO,:@:IS"JSFD$JL\JL9I#*K#*KS"JSRNS_FYE[ +M8_O+U^%9J-[_0D]C]OJB>?_-]V__]MWW[ZK)J\PJLW"=-/$Z:>)U4CR+66>V +M,JO72C@/R\X)OKW&PZ/]W<>_O__P]KOO_S(^.#.\ +MWX7W7?G^R!EV6B#8:8%@IP6"G1;H!.'Y +MJX?GS]IO.2*UE^LP]H%;+;G+-O_(_RIWF=G-'?WSS]/GGL674J([GA<:] +M89:8]\!F%[:ZR^X6-MWQ,K$]7@XA\-(Y;/D9W(4>#,6LG%(63.GCQT@IYT`! +MEV9<&J=L4F["W\W\=S-.5/R[&SM"Q+6_-4U<\%M"D6?_Z%N[#8R'_]WO/-'# +MXAR:G3]?=ET[!^+SG9;,9CHM#$YBG#Z3P##.%I6LJ\M5XX"X=K^Y!,4,1F +M)C9CXC(F)C*9@'G;]XM)2/27^3)\?`Q@CX_\L8Q`$Z^2XR4CRJN6,&)^+N/7 +M9OQHXA=:E(ZS[1N+YHGHW=L&)J+Y_6K7*[-:?-4O\RJSRNS?<9UP_FG+=-S! +M][WW2/M:S]UOK].5QXUOKR\O+[]NLI;*8]T3&]Z^A'^WJ=?M4_,ZCO^K"'"; +M$9X!Q`K&`B1!26'N,TX"U$"D-:@E5@J6HC4SW$N&MP*XB@@@,\P4].7>)).9 +MPMX`[@T"WP#R;04ZPWY))#H/@&XS?(`(OJPQR"HG^_Q2%;!H*$F\QBS4: +MF(=`I&"234?)Y<,:F54V*W0D/B6A?'(6E%8XO9-(K;$2:2UX%5-5,OO]&K4_ +MR]Q6RUE'HQ>RH63E'%IJV0$E>$%*+7_:$O-3U&S)63NU%H*@ +MGI6U603+;4D_2=.F*+Q*I:P]"E&+A;H)PFZ;RFX*:;=-;;=M<:6Z?:JN>5E? +M-DE?LRVPT2ALMB4V&HV%R"%@3")I(7):0Y)$TK9(THBD;9&T+9(6(L>@.(FT +MZRMI)9%V6Z35B+3;(NVV2%N*'#7.(MWZ2CI)I-L6Z30BW;9(MRW2%2*]QEED +MN[Z2K22RW1;9:D2VVR+;;9%M+C)HG+Q(M[Z0G:2QV];8:31VVQJ[;8U=II$E +M3AK[=8V]I+'?UMAK-/;;&OMMC7VJ,4HLB)Y.WO]2T9-F+WJ/ +M1)_65_HDB3YMBSYI1)^V19^V19]FT;/F8+Z!YO/Z0I\ES>=MS6>-YO.VYO.V +MYG.B>=2Q_]&SZH9/(IVZ:CP2T>583HJ'--189F.L_)9^&-47@@W@G#9 +M)VJ,HLXI:JRBQBL"L]@\1N&%;A+LL6@=C<([&I5Y-`KW:!3VT2S]XR!['W07 +MLJVPW**9-`HW:51VTBC\I%$82K-PE*/J(+M0[83%%MVE4=A+H_*71F$PC<)A +MFM)B>M%>=2&Z%99:=)M&83>-RF\:A>$T"L?I_W-5^T1T<"C>JF2:.V&A1?=I +M%/;3J/RG41A0HW"@XS'[1#.;LE%S)EGPHD;T949AS(S*F1F%-3,*;S8<$XK[ +M(#G:4+^7*#X)BRR:,J-P949ERXS"EQF%,1N."96^UQ@%>\6)X+.PQ*(C,PI+ +M9E2>S"A,F5&XLN&8W12^)KUCCK[/-^+1<7V%271CI'!CI')CI'!CI'!CE+BQ +M6>^C7^^HUW:7>_-+ONW!4VSNOWB*=1;K+-99_)^8Q4]\(A"J4Q*K4U)4IZ2J +M3DE1G9*B.B54G8;OAJ>\)Q2E)/^>H?E!0_>+AN8G#I.4M2=U"ZEWN>?`4@H-TDL-TE1;I*JW"1%N4F*I@FNRHFNR"M=D5:[)*ER35;@FF[FFJ'26*C@F +M*SHFJW!,5N68K,(Q685CLJECFI3.4@6[9.7[0#0W@NCN!-'<"J*Y%R2Q2[/2 +M6:K@EJSHEJS"+5F56[(*MV05;LEF;BDJG:4*;LF*;LDJW))5N26K<$M6X99L +MZI8FI;-4P2U9T2U9A5NR*K=D%6[)*MR23=S2K'26*K@E*[HEJW!+5N66K,(M +M685;LHE;.BQO/;:"6[*B6[(*MV15;LDJW))5N"5[6JM9IR?R5U=5=$M6X9:L +MRBU9A5NR"K=DSZ)4)[@E)[HEIW!+3N66G,(M.85;\CT,[NM2!;?D1+?D%&[) +MJ=R24[@EIW!+XS%W854%M^1$M^04;LFIW))3N"6G<$O#,7?I!!;!^M2!;?DY'MG-3?/ZNZ>=9>G3:GC,5M2!S1?B:](%=R2 +M$]V24[@EIW)+PU$OFU+;R\=-J>TE5.(K4@6WY$2WY!1NR:G]WI0Z'K,EM9?SJN"6G.B6G,(M.*1VW2-- +M1UF$4ZYENVZ1^';^HRQ3\$>MZ(]:A3]J5_T1"S1;Z]BN^B*69V1Y@B=J14_4 +M*CQ1N^:)$@D6X2Q6<OHKZS:L(?)?#,GI!!C(D+&/I$UC%THJPAJ7_8/9X*!?^D)-FSB>! +M\]);,.-%TF?""TL1)WWA(^)T+T:*L[QP#?$B7IB%\#3*8`07WEU, +M85=DZL"LR,],C/#T92F9>64IF%D1GK@LR3(I$F8MRZO,+$UWS"I-HDPJS9G, +MJ?R@"V\5=/)L&&BD29!9.#P_2=9C(DF.8QX.STV2PYB*D+:Z)&TQHSFQ,)K@+NRG?SS-*+-#W1A=QH_!,3PZ&B(@ORPZ'$:P?`.CQUV^&G/:=N% +M;1ZV]U$LC.J#%H>J<8?SD]^,3Y;&M^V\Z>;-UF_.P\5NI\=I;QJQF7JRIGLV +>.?"2C#BW34UWQQ.;K+_C\C-JOWWU+THZ&OFDJ0`` +` +end diff --git a/sys/arch/i386/isa/pcvt/Util/demo/outerlimit.vt.gz.uu b/sys/arch/i386/isa/pcvt/Util/demo/outerlimit.vt.gz.uu new file mode 100644 index 000000000000..a2b6d1a2e50c --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/demo/outerlimit.vt.gz.uu @@ -0,0 +1,193 @@ +begin 644 outerlimit.vt.gz +M'XL(",2LM1IG-+*\WJL-D@M[K37LK&(;0?Y[2-;[G"*[1^.6+4ZV%RT( +MF&)WL5AUZCWO^:ABUS]=//G)IT]^VET\^:I[^^0K__F3K\KXU_FGL=M=UH*; +M"V%1F+_JCJPW%MSN8I-V_4;MAHW:C1NUFS9J-V_4;MFHW7ZC=H>-VG7=5@UO +MI7%N*Y5S6^F5WKFM%,]MI7E^UCP_:>#=[NKVZFSVMC9[ +M<=+$ZU=G06\MZ#SI^7/_4Y]V;VYLS-L[8V,>&BV/[ +M;Z[O=F=H;`T-EY\&O_ORYO7M6=:;R[J??/6[JQ=7O[I^=7WS\BSQ,_&MB<]W +MTP>OKN[.T-@:&G/(-=[V"T4$M3C[K+4X.RBU.-LC%6>^5+F?;OR?IM#_RPQ. +MWU^I7L3YXBSY +M;27?SPSVX_!LE/50R_'9"O5R2&*L;Q9C>7-28_E1DY%FYH3]3*<$==8-N*:7:=*`I^-92<& +M^*R9^1^'S^L-4SE^/OMB+D^?OQ[+I9;CZRHSUT]?O)K%-9?CJ_D&/S_Y;KYA +M+L>[LZ/V",[V+.J+4?2SR["\RJNK?G7ENO7E^DZWOM6M[_7K>[V7'NVNQHL@ +M'=J=Z(++.!H_#^>7U\_O7M_6(C:S/3HN5TJO[BV:B\6Y1LNYF<> +MW'5[LZQ\M[Y\N;@.]]Y^\W+OEN?MDPN&M7?7U(S[Q?.]6_T]GU9YU;O"O7?% +M^^]RW)7NO2O?\VE8W%7NO:N__R[KX7#O77.6=O7QV5\_$]4^41$AWMT^>_GJ +MB^M7=7G-@L7EQV?X;)]+&J=EM!LG:#7\T^QV_M0Z_J-SA[>'QHAIO_OB-#L> +M=L]/L^-Q=X)+>.<@^^RAW!-*.7\.LA_#^9A3HV^N7[PXR_JLA0=:&'IB[.5C +M7G+[W<./>;C>(3P^6KM^HW;#1NVBBLGO]A993D/44R3@=[N;V^O?C&AY]H,% +MBY1BF/RLJ9+?W=;O/``9K%(_>9%3I3#7#E-!E7JK5%#%N'M1*T4J%:N4J93H +M"H7I*U5*5,I4HC!]I4J12H5*%*:O5"E0J:<2A>DK5?)4&JA$8?I*E9PJ):,K +M4R1GE6"CA*"M$$SB?J"2U[0D).Y-XKZ?93A6"KM=K83$O4G<%RK%2=&F2DC< +MF\1]WEW72@C:"MXD/IG-6@E!6\&;Q#T23PC:"MXD[I%X0M!6\"9QC\03@K:" +M-XE[))Z-R`WE)G&/Q#."MH(WB3LD/NDU\9R]W4>EGDI@/(?V;B&5P/@8GMP2 +MI]B;C50"XSG-H@]3P=ZKI!(8SWGWFUHIM[Z/ULGF@M=(@T.6AO4]+)21>YA3.]);TXFU>*B'QXJ3FQ;5WB54)@1?D +M;`63-^(N2-D*)FV$79!Q*U`%41%Y +M^3YX+H%^^5Z@(V+3E/M4!B&;SMVG?`LUOGRO&B\(X?*]A+"@ELOW4LN"I"[? +M2U(+NKM\+]TMB//R?<1Y%`4?1^9'F86C#,Q1I@J)/VCTD/B#YA.)F_V]SQ`C +M<;/D]YGTA7-P^3[GX"@WXSB'Y2C7YR@GZBAW["C'[B@7<>%L7K[7V43BYJW> +MY[8B5Y8.N<;]O(-<;H^)_T>XUV(44W/.;^S#IYS?O_?.;\\ +MJ>))YOQ\-[D-O[JZ/O@F+0FU=M%ORXI:\J&73P$6[I2QN +M*1;O%=8M[W'+,+NU=+&YRRYN6LG5Q +M[V)QTQ(";CF'+NQ=+.1V]A?/_N(J9NM/,F3+4X;P^;,3_%69?DKL/=\]>_GS +M?YZ]6N3S[GY]<,/>;C>8><_6KM^HW;#1NW& +MC=I-&[7+;]S%?G=W[^T^DX_VTO/7JYF=W9W7<6AW'<*:XW:G(5]YK[W_9+_1VNW;-1NOU&[PT;M[O^2_\=K>"N-FW[)_Y_GQ(S;??V1 +M_XT/J$SA_0:M;\ALT^_?G%1_N]/J[_1FZ$GUMS^Q_I83ZV\^L?ZF$^MO/+'^ +MAL?O[]?TX^N'^[NL9_W=W+Y]33^^?KB_#]>S_KH3ZV]W6OT=3JN[_6EUMYQ6 +M=_-I=3>=5G?C:74WG%9W3\VNG1B1G4Z[?J-VPT;MQHW:31NUFTF3C'[P^*^F +M(,;RS6W=VJ//SZ#9'#13;J*?A7U99V(*_LW?[RZF7=R;6L<9Z3[>YFWFF73AS-L;TYF8'I68WDX12%Y-2GW]]/F+9[?7=U_.FV'S>5+.1/5^HMJ@ +MW;)1N_U&[0Y;A4/=5@UO%L#9H3SS#P'\\8]__-U$(7VW^\L4WXY_OYD#73]] +M]1'_U>#Y]S7D_XNMW(;555Q=I=557EV5U56_NAI65W-N=W'IUI?K[KAU?]RZ +M0V[=([?NDEOWR:T[Y=:]\NM>^76O_+I7\^+YVWH(Q$>>EM_5A\R/G#!0^T*I +MHS3VGE)OI6*E;*5DI6BE8"5[AK-G.'N&/<*>8`^P]JUY:WV2U'TC_&0X;'>,A,@UL^Y1WDNOE#_&,\)#S&0^)C +M/"0]QD/R8SRD/,9#^L=XR/`(#_&/H?'^,33>/X;&5R?KOS_JO]^M/;KOOOVH +M_]ZMWMJT];AIZV'3UC?55;>IKKI-=753 +M5=U44S=5U$WU=%,UW51+-U72;75T2E7]^:/^^V8A\Y!VWS8GX=OY8/6T>W?9 +MN4_&_]Y??C=A:JK5[O^V_M)$V/E.!3=0Z"D4"IE"HA`I!!IRGH*C0-,=377?[LYK:* +M8_IN+8E$5Q*C3/0DT9-$3Q(]20PR6C7JG61W/NU6W(QT(2#GP_,#S`\\//#_P_&`3&.A`8&R!ICU->YKV-.UIVJ>Y +MV[[;-9&/%R^O?GU7.SY>[$&//GADX.F"=\?`\^(8?!X#SXMC\'D,/*L(TE($ +M:;>[>2W0C1=K$50%\?@\QCD71P#O6.0=W$,](Y! +MU(74_MTP:>K?RZ;?/XKL5Y,YU*MG+S^;9.&Z>V;S>\64M8?OU'OGZM6;F>3K;U)_ +M^_TERZGS:7?Y5BPW]7Z\G'Y1D^Z+Z!8X_`C4N@?6\@_QY3@&[W8+KVD?8]]4/T&N_5]O/CRYK6Z+LWXGI)K7&-0SO^KJTJO]WG_/TQG=`^HZ1]C +MS(7[]%W-5BY-[GT.U)DK'^;*A0_S]MN:O)ZN=U?/QHCA1VRE__:'%;.G>$)> +MYO>/W#X:7_XSS'9;S70XF-^Q/ +M9:.&LB2"^?"9^7C[9[=7>YUML^<.IJH<3$S8GX59K>-T:D25QY[\TX&P35^& +MNFY3CZ,_4,*'1%CWQ97E$Q\4)]+TDS3M`)PJCT]O7M_M2:1I43C0$!-KO."T +MF$7WFPC[`\GYIOE\7PV: +M4KF#,1OHA[ILE%<3T,;J#N`?EF"?CVI:#B(=C*:LP=N-"FV#2-/!,XOG'M_C +M^3B<.N>[_7$?W?O1PGKWP=WOZ7Z9SB#ZNWK?34=!+9Y[?(_G(W>JFK_9'[?9 +M],;(D4ZOPN-8$TC]2L^'?1O8.#.N`.^F7Q]V,D^=>@O/]N?\GA@.._IU;RTXUEG +M[$>P?N3IQ*;%,(Y^;B6[#WOLTK9%:?N;W?7SW=\[>/BF^Z!N-$,CNG`?/'KY +M!!_VW"77)QFXVZMGSW=7K_8%X/<=V6:UW!*&HNM[?)-NG^;"R-+Y8H5^J6^S +MD?Y@L/V!2Q07L'&'K@UA0!A9U1QC<\Q1_"S.^]GMS1?[FN\.9)K63QD;+R9* +M:7`#L#M@Z+1/P6[)V?3==M-)Z/4A\\_0__V +MT.HUQ\8=."IA.1MIS]LRQ(6XG/*R#Z4E?S0D=P?BP%D)83FE2Q8\]#/,:3)$ +MR@L:FUG20.A74KA^^7(Z_>)N8@ +MD'0'D;LOG\0Z,3CP#=T'4:O+^VCSH[;$.J\U\&E6]2#UXO*G/;#:9<^B:6-U_#7=`AR42]L&[1K9\]5O!+>84#O;&NN872 +M+@;M#Z33?1+[P^?A5';#4B;=P;18.UV_&&&3&?WIRH+=;7H=MJO+:^1T^YIL +M$NI&F8>#3%;KQBAH,TK>.F1&L@O+;I:#K_W#7[O5]/@#ENI&:<:+?;1/G?>? +M+PWS@W]/JN*=3@.O)N;!OQ>G5/'F]=W5[<)X/OCWXESQJ(HOKK^XOGO%^;E_ +MZ^_%:534F]&Y'3!>7S[526B#CCNK)X5/BS*<2U9/_/:H(YJQ3EH=VD')`!`$9U$.//>?.Z02S.M*(%.IAR=-WD>/?$J?)Y=4A +MSX-.A,XZ/KJ>-3V[ACJ96L=8<_AUT@'9P^)8[2SA)>1:S_7V]3CPZK-G!)O= +MZF3RS.GE''6N<]$3AZC;V>O#_(L8=:0ZSWW@]/=.9\5SP/SR+/JHONAH^_2T +MU(:G%^4UH87^%LU8WZDN`%-?U54[HURWU<.MI^,3=&!@7V6IUIQ.Y7-N<0I] +MQ1T3I3/DLQT&WPFED?/>P:@@&H30`D"S8#FVZNF7SCGWG',^#:27Y`3.U,XD +MK_#L=;1X$CKM@'`[Z!MX"IV$$`PXS`>5@"H!,`ZVO[(BOF4G^# +M:3LB03MH7?+H=50EIZ0[9L5IGIW7J9%.-.1JDX!1A.F$1*-+(1!J[(T9@Y#G +MH,2)4`N@9"X]0PP,,:!E.M1^L-/I,^`+G$#?"7U9Z`M0(\?!@SZ!KQX*7X]: +M#!SG&3F&$]D)>IV`-J$):56@)7!F,!/*(CSHA+*)]9C-BJ_I%UNZ6C=+].*\ +M828]$6325Q*Z6*\(:U-!`RSH0.$X4:%N!MT\HY7T)C"@7,)<%.:B(`?B(I0G +MP$T$0<^BD"QEDBH($VI%C3@==.HX)U48FXRV41TTY4"J&,Z+XH8&,)&Z*,Z` +M)JISPEL0W)+0UL-R9H(C+%`M+\YU<;MK +MY46\C&N0<156HOHKO(GIG(C.`3^,L!?J@HQO%.BR0-=C>SM1F\/V.LAMG+?< +M,0<9NY.9C,R(,^#-D&\VHXBG43@RMMBLBN8*B$NP7`!Q3H@;A+@BQ"4A;GJ? +M2%D2Z;%$(#60.:]596AD9YQ!5OU)0MFT)PK/1^Z?6[A_#,QA5>3U#7A]>4:< +M*"T(DY*\*$Y0PZ`&`2P+7P-<%HW+>N#E%O#"M1&JL*$<&6PG#@M1;D94C8HQ +M<0-1,J3) +MXHK%!*8`AT%BDPW$P,ES<\)4Y:ZZ=`((-/WRTCHX*S\%F%ZB,+*K/>U%BW)Q +MA1M82NZ8$WB"L),%G0$[6`,'X0P6\0]FXX=2V*8=^/(%7G>@> +MT^1P<7I999P/I+%,5(P +MZ;QFUR:W1_<=%#H)MU<57\G4`9 +M5B;0N3#LG8SN%^>I!Z8S!W@S[;@'C5I[''@/.`->1<`(!3C.93THR\+7F2CS1%2O +MHZ"-!<^U!S^65[&S(*MZJ-..=(GR2\&,F`?07N/R6!+S;%&M0-0@H7:DA`** +M4E/3M0Y3&=5NE$,3I6Q1>(Z03BR6$C+O@BRLA-U)V%FR#M(*8NXD\NLMZ('^ +M)LF37ZTG0E%8AZ= +MI7LL-4B2R)$(<+"'P\?QG:6D92&]N+VR8)+[$36IP:*6H&1N9;K*;SJXFWS1 +MR'3*V3'_+:V,M4LP3R+:D3)89)%EGB*^(]-`QL,92?4MTUMP,PJ2E(M`%BTT +M1\\2@32+I0#83F-UBC_=(-=%-@-IQ1;;H9J>#GF+^LD+!5G54#N&"^"0Z<1& +MYG9W@KJ7;R9JCQ)-E/V+/9K>[`*TE["R"3")6R+..)8_"?*1A+DS1SH@V4$0 +MS4]M$M"`"B2UY-228\G"(2HY$Q8>(_[FY[)VX4E@>>QZZ-#T@((O#VB_FA59 +MJ;($7!*>7*-9@Z'EN2U`R79XK62N(%6H&W!'>RP??DR$;P<@UC=SYV4[\(91 +M2%LN@*:<](]T?D:-![27K`/$2Z;!68K!MX4CUH=L<2"0.8Y8O`CS1\`;95>4 +M11>FTB)GU$-'&91EC&O&N\M05?/?F;,BTBF*YG`4D-=3B5[1C".(<5A.A^5T +M6$=;K!.U>%Q]*;+IA58M +M7$5!L>P.[FT!&N-P9/J=C).MA+$"YN1U>'E(#0];GY%?ATB6XEU"^99C:H`\#,`S.>1B854B0T +M\Y31_NVKLR,1$S4#B +M20FJE9?@\!)"H[I,%K1%T**6K-7&MNA&I+78/J`Q]E(DV,ARQ+8:18@E/\*S +MPNX4K@HC\41CZ"N$U, +MAK@=7.9HP.$GV/PY9MP65>3E-NVD&P%E4/I,$UP$:!QG-K1,)"9ZB19)69J$ +M-7Z8WW++(H="K%*P005_-+%$CQ-,1%)$$NXD9G)SN0'L[D'!6Q9P@9QPT6VBFKHPK7W>K#',`6VLV"2;)5] +M%/2K*FB3C44BUIL\5IHM%TZYY/)4%L39?@49QQ;$#2`M$I1:^(8A[0A1 +MB)2342A?95D^DJV^^4B%[!5Y2<<6J>;S"2J.'6;R'90"2^IVD;MC^2_?ME1$ +M7(26:B9DB_*SI%1AL79`'Q-10%,ON99%3VR;$30;\A!*HWQB(@L,"0B\K;(3 +MM042*=)`9J%;,"+(T7:AME!)LQEMS9B`3-ZU6&:YH"4%(]G;1AD!4+,LL&D0 +MBGD6^[5PH#T9"0]@`IY54+0$PA +M#6OKXMA41UW'/'KY(1X;[XGS`B8OL,(<+!,96&^;]O?.(Y+P;3-$,@Y#'!G' +M*D,.G401<+-;'"N-M2ABF*9"2;:E;I,((IW&6;>.0):G)0-H2.D-.+&(F +MV[65\6\M7=4,B4!:B+(TW3*[CM1@@HTD2WT$K%8PMJKN:+5!G:_ +M8&_QAPAG:*!9*EA7/7-Y@;1A]WIF*1QXQ:"P,0DC=@O(^EHR!PVPU5TM=HW0,TO("Y7D)-CR +MZN)BRRMN&UNQ;4&CL*9M&3;(S].QB`/4Y8S/6L+[K>=JRUC8UTT[;9VYJG;04(BE78.F\>AGJG/D53 +MU$+"LCF='9DB-H_"-J8!MFAHJ5/EC#RZD0A82>^((D)CP$+$X[2OQ#9!8'S8 +MBT62))KU4W1,:LNB8TOR=+LOJF,U+^:$MG<%TX-_Y4%A:NM:&:%9=I.=W#A> +MT1A$HN&E%5O6B0LE50A1A$MP"G",*PFJ-)UX8^C?9%E)$P:RF][8IA_8-5<=*1%GZ:$\XV3W+4MK_" +M]!<)1M2/I0Q+?M@"',99GE%N(2ST:3E\<:,7ER%;L^&-\\;`,6H2N) +MSY9X,`\)@&FFQ$%M<0&4V>YS3U@2L!$M*<9NXL#>FX0.)$C-MA<49%U$FI:9 +ML<0!6W@*`U**TZ6VI-[V#6M.6^!NV4H;#%O#>.$@6X!F6HO<21`(.K8^"A-% +M/**D&<,JL]8;;$,(KXP5,D[!7&=10M1?>]E+?I%+S4&V5P3(_;%!1SUN&V5L +MW+9DZ^B:Y9NDXZ2EB9J88UO3(M)R]D*=[>EM\K7E+MPTND+(8*Z3GF.AK=:. +MM0.Y;QE?>0@!D`1;;K,7#7E["J>RA;21%PUY]FCK_(-L@'WN0D@K=F9,BSV2F+HG6+A3OD +M38HHQS$Y60(V2QL-:H$0T';D>U;&;)N`O?_UY">?/OGII_\R_7__[7R]MW__'7R[M_O?ST#W_ZY@]__J]O?JO;+B[_#PQUTQ:@ +#^0`` +` +end diff --git a/sys/arch/i386/isa/pcvt/Util/demo/playvt.c b/sys/arch/i386/isa/pcvt/Util/demo/playvt.c new file mode 100644 index 000000000000..d0a391ff6b4e --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/demo/playvt.c @@ -0,0 +1,111 @@ +/* + * Copyright (c) 1995 Hellmuth Michaelis + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Hellmuth Michaelis + * 4. The name authors may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +static char *id = + "@(#)playvt.c, 1.00, Last Edit-Date: [Sun Jan 1 18:32:22 1995]"; + +/*---------------------------------------------------------------------------* + * + * history: + * + * -hm want to see my xmas greeting ... :-) + * + *---------------------------------------------------------------------------*/ + +#include +#include + +main(argc,argv) +int argc; +char *argv[]; +{ + extern int optind; + extern int opterr; + extern char *optarg; + + int c; + FILE *fp = stdin; + volatile int i; + int delay = 0; + int fflag = -1; + char *filename; + + while( (c = getopt(argc, argv, "d:f:")) != EOF) + { + switch(c) + { + case 'd': + delay = atoi(optarg); + break; + + case 'f': + filename = optarg; + fflag = 1; + break; + + case '?': + default: + usage(); + break; + } + } + + if(fflag == 1) + { + if((fp = fopen(filename, "r")) == NULL) + { + char buffer[80]; + strcpy(buffer,"ERROR opening file "); + strcat(buffer,filename); + perror(buffer); + exit(1); + } + } + + while((c = getc(fp)) != EOF) + { + putchar(c); + for(i = delay; i > 0; i--) + ; + } +} + + +usage() +{ + fprintf(stderr,"\nplayvt - play a VT animation with programmable delay\n"); + fprintf(stderr,"usage: playvt -f [filename] -d [delay]\n"); + fprintf(stderr," -f file containing the animation\n"); + fprintf(stderr," -d delay between characters\n"); + exit(1); +} + diff --git a/sys/arch/i386/isa/pcvt/Util/demo/sgr.vt.gz.uu b/sys/arch/i386/isa/pcvt/Util/demo/sgr.vt.gz.uu new file mode 100644 index 000000000000..099c3a496721 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/demo/sgr.vt.gz.uu @@ -0,0 +1,11 @@ +begin 664 sgr.vt.gz +M'XL("):V^BX"`W-GKOQA!M.`W@"$;JP+&Q\1B/L<+@U#"**[>8H +M"0ED<4K*.-W#/M\?YQ* +M64`610V'(H2PY[UE.;*Q9*W&M65X;:EB*AE*5)'3FF%E6=/+2" +M]&QC:EO5R6.;V5G)%;'JA)J7],.^I#J%DJ?T*FUO(J8S*1]T?#W2(\+U1&UH +F\OMC=0F]N92YV=`#M?5MS'<>1YN-&G-@`?H!>VK$7CV-WI*Y[ +MMV%Z!Y8@'U@2Y1$XJ_!X7R2*MD00D"%1XO'^^NW.S"_KTET@'V;?K`@%#[JK +MJ[*R\EY96?_Y\-X__>Z]7XV']_YLS(5/Q^&]/UMS8?WZ(UP8M_YKPH4-]&.Z +MX`?V(DS<@AJZBS`>AZ6/Z<+2^Z4':FCMA9_IB;\(^-30-V:^,./Z8[YPHW0> +M(_6R_+)1&GL>>)2.XT6DQOXB"62.81[I8^[64B_+0(#52I,`Z!B69:*&H$L" +M0I)I+="B$WLQR:N8Y)6=I3N>FKN(CO^=91K>\[PL?3G>K?W\84'RV?+_?QK^ +M8_\[_$?W]P\`_P'@/P#\!X#_GP%<1?A\7,3EW=4J(DE.Q_GX0#\6D?M`+29J +M\86V"%%:+`*<6P1J\4Q;I"`M'/J(U.*8^\`H(4F+U,!AC;2PZ&/1!FN3&VWB +M+9J@$V.HR77N9<(X$YIX:G*I39P#L&B1FDX6;2?CS&C"./E8FQ@T"=)B@;J> +ML0?6G'82FTX<@%T4KS296\RB24*31>)D_RK``W(A>'"/W:4:N +M$BTZB4T+"UHQC)9U:(-?7G\EI\]&_`KY[:S/K+;3E_@1)_PR07]ILZ#]6ATK +MZ5NOWT9]ZW(O>0R=A<_M\K/<+O_2,4R&+V-`Q]`I)IVB_HCZR^11M=_(?:P( +M7QE^78`5BR=A[RNV;O%@7A_,^>]P?+;^HW]/QR_(.-0'"X$LQ&=2\<0<%UJS +MKGCBCY=DJ.8GT_%CM@?Q9.',(QO%VB:M_9@"F(5(/F;K4I_,*WRF`'"AJ(]` +M*?>@_Q6>HLE\_'RU2?7!0K@+2<:B15P?%'-:&&1%5/'-PJV?D9&=G[AUG/)! +M6E&C$HP66#P31KPDF_)V.+]BI\/)@I@=FY8H/9"E^H.&2_+VL +MQ(_K/!=2_@`+\1U-*^*!/W[%ZV#Q)*U-R"S_``OS%UH&I[W$]F+9/P`B_T5`Y#+2A\02ATF.*"GQ\)R_AHP>!W1&W:KS_> +M$3DZ/(AKMPM-.'UBC]^L)!V`EF6YOX/W\P'6^WLB6HVBT4B"!@K%>%H!M26$>"HZ3J>C&,RYGGZ +MAEQ5QI4#7EDW_4YZ32M!O@\?64#A[A9N`E8C'HR"WH257+CD_<*R^9/0@%MI +MC7`@*^+0";G&[Q/58*V.3!^'5972O[+41@:, +MJ\H4GE6&1*=BU6"YIE5X,@#R`.\JR^GJ6^T?C;V":RKS=5P-3UHP:2H@1="'DQ5=&4QH2E?!`U@QK+^$ +M,$B"1_XBK!:E\($NEX=4P')EAH:$$5O\J&3@519YACD!!>!:D#UWMF`"7*QX +M%(3@U5F$WZK@+,A( +M=+VL&D1!U,5*@%75B_,59D>H"B\P6BL(!62K72<\DK0%-!"HU=7:9<*B./EV +MU87@"LA'-3,"NE4BQ'(Y5Q%LPA*K%@'1*Q\[\/P(VR$*I<1L$;EZO4*6QTY5 +M'*3=)%RF3*UH\I`8BMI8:4,+V6DOP.1J1X%5$\P:KV]&,1D4V%#%#@)W%K`& +M7E"APD7E(6Q1`WLG0KBR?QB.OV/@H#:<=)0@I=0\B90?\`395%#P8C53(4245$6P>!J^4,, +M9F,W';_D-Q!N3F1:4.,%+)C='I\M#PHB)&BZ*.A1?C;Z1EEMS.;@ASQ)C*3V +M61+;+)\Q*F.&$3HR@ +M7`,%22A&)>=BI3S%QK"(7=AE(%6U+=5SR(M,HE/%U`0CRZF-+^QH@%-_8;/- +M07O5FIW+>J*+]G`:I8PNJJ +MR(AKC,^!85UV<[63A2:_886H/A-B0,K#X?@UJW.1A=F*81DQ9P\L@=9=H1B_ +M8AH$_$J#8]9^WS(EJQ,&8[G0-:^)=<"T"7C)NLQ2�@(*`AB1&JTL1,S`$Z +M/;N(X_$Y0VFIAP#4#M2NC$N,X"&X91/%P[XD<#58*G&4:>L*+[CP2';H0E= +M(>%N264)BZA9D<78O&)A-6>$*354E[&=B`5"X7:I<66S//N>T0Q=:!"T*!U; +M[B>II(>&$W]J74C8V-I/(7M>LUC2P*_&YVR6;@Q&1'@!-@'W8JUX4$":8=\$ +M(N8K'@"KH1'5[)0P+K)=&,$BV24,1_97+*)`2EACX2]0WD\A6CEMR>;EG427 +MYS">.`DZ4D3>4>9^RBGR678-+(H+]J4$+XVXJWX<2L^G@DCJ.F>]NF&RX +M'<(XB"KB7P=$.-&:0N2ZE0,4&MDK-!)_-9@"5+X\=R!ZB_`:(JE&HI56D`+4 +M6VRG"DX7X_=`(Z)G(^%K^#KH%XOI,)+@1$2W,;`K1XFBR=\D]Z]H7<3[%WIU +MR'.`0!C587"(%,DT$7:R<+)%T?+>OHU95]P0"0-HH`_8PAZMS-U2!@3H(`KV +MX>.0@/TC+9NPA)`G-N2L.,G"S`B!K`KXFG8*9?I$+5;6#AD(I/R>$N8A/P5_ +M%UA!D+]$=+`PX!;=.C20548`$S@E/@434)UK,8!TFN'XC-$/AA%)881T8&TX +M`0`36=#U(7]7Z+X;`D36"98QUD^(3#D8`ZD,=`#58O)@22%G`R2&X_\6-7Y- +M'AKWD#TE!/V,]BBSD<@Q8`!E81$P,,2A@2&)D1%\=;(LZ+:P5Y]1!\+"L`H- +MY\!D@8K`.`">P`4J-!+/0-&8`.,%=! +M0D!F`E`$B:^H``6*:P0Z\U@$R$\KDM;(O^!+Z""5$!R8,K!DC&)7!`*9`*Q- +MD6>_;CR-GV1K=365:#/J$WUN):Y9-(4UV38-;%L5+9V8K_(H&\ZQZG`6ZZEX +MQ/;VI,]*PS9M1F;;VTS5B]+0M2548NJ6C\22';<]2URW_'R41OE0/*#R +M$=N]53,GQSE*(!U.7%0-#8*?S=3%WG8MJ,8W3@%AOT. +M@WR$03Y`WQG(OP&VVP->6O3T=[Q[C6%_C;[O\/TK#/('`/(;S2W]5XP;-;7T +M&=[]6K,BT?=/&/82/?T[!GF.0?YR0)>_`"2_48-[1`=O\.X%AOT"P_Y"(3GB +M,X//;M'HO^'[;S35]"]H]#?\:C'W0-%+H?&T3;X]?Z[C4>_:3X/6S83M\E_>[G#<"3?O=R@[(W +M6XJ^P[N3]OGW%ATN+Y'31U]M6WV];?6\:L48/53-FF=-NVE-#K6LBQ/U1C+\ +MN1B:5A*>GW.+>7U`Z=U6;#A+ALHB1*]8W(:U*05)K7@03Q#!Y-UXSTUIR^0) +M8J3V@)V1Y^(@7(EL?B(&_7-DC4IWB8`FK_Z*80O')^P]A+4->1&4P.JSCSRA`J.EUR)37^%_(HG2(BW\&JO +M:.!E00^0OW?86[G#+NYSR>*VW"_!X%9TW5'_LZ!KF8^E`,?R1++59@R=CG>( +M`UTAQ^HYSY4^YVVC)SRT86C""N@=#D(*"3C!#!&`I7,ZSY$4\80&IT6SE,M\ +M=T#^K14'UF)GX0IFP!713>",?<>DMG;/+9?N[4%L0\M3X23V:9W3$^BUYP03 +M.J/)4OCB"0*+S]E3<#,>>5F"94(66057*C">77]V]>G5S8V:SIM?3HE6BYJ2S."QB%-*F&B+$7]K#)"!)/(K&I,@R4,2 +MN>8_B +M(!$Z8X,$5EZ0P(^)J'@QB;L4:*>K1Q*TPHQ+6#+F%ZR1E:&(Q]%IJ`B,!$(Y +M^3$3(Y$L#TI"!F1!+,+/O>*'>4VP1KQ9+P?6E06GHB"5P)"T*_'%BD!INV8; +MDJ+U.@2=NGQ%HEWHT$V9R8@D$2&ZQ,3'E@RF3+F^@-\5\Q0"LPICS$7R""Q>RFL&US)AR2[2S218JD;9#$0L_PH68+EFR!I6;GB +M#)U8)A2/S7"Q%,#7FU+JS7*VD1QKI_P1%K#?UI*S8=%2$LD<$N($6V +M"03OE*S`Q_%ASX91_$TO'F*`ESR)QZN!C)FBX"NG$0*!`:4)!$U6P)VP/S6B%V(992/BK(#( +MC'P\"BZ=S)$3*08DC3_EL%%"+P[3EWTO&1&(LK*&O+/R4%V26]4Y'/HHLTP"2 +MC>"6M,6E''@;D/\`A<)KNDZ<`)%/';RP!+Q93%W)-.C$O$9GA%IL\3EH@2<] +MR]K-F0B#QIK`3M`C*(;!RV*5@Q*P,0D-&BR5+K-1DHOX*@*INF8!A(]B&GP6 +M9])11!!/&=C+VLN_'@5#@NQ\>P`LY#*AB7#8)/0Y`6$C(/$";,S$+L('IU +M$!&*HYB#G$0=1!1?2I[4`"'*\PK"02)L1LB"<1W_3\0.4IQ$"`S,["%3$VJV +M<-K^(-GZ`CL60^045LD5-()(H2S/++!X&8GV,SY"YJ3J!XT&2G=&)B2P)*`M +MRJL$R@N%<#82)$Y"_BJ#K(`2-&D`BF0$"%K`1G,R%',2#G4S9/^,MLA_"!Q8 +MCP6O(]RKA(!B-EZH92Q*X(0CC&$U(AEEVAW4V00$!:4Y!$>#%*2!TG*HS9.9 +M7J.X3E.1Q2>P`BY6(JA2">!951`)V1DF)[B(J$,RBG(Z`VP1PK69OR'@=-4B +MECKC!0(ZRQ19-X^]B`"QXU$]"+(%:EQ+`:$XD0<+8[:0!U'(>5W0Q:HZR![U +M()X(]B0&G)`44E))/6N&AV;UB%\G#)2*'Y")7M$Z@_\@B+'HS@EZG===D`%' +M5`9D]LOLE?%'S<09X'->ZXG^&S8RH"(C$*2EBG2-Q1I0^2S+Q#DG:M.IJ0;S +M7'V=`0;_(/N+/(,9O40H8VSZP(A)N3C3QSS'62@'8MU-8KMDX$2XN4GW.X0% +M\$((WREYS^``9%X+4Q>4JFN&M"2U0B:99QQ%P'CL)7G*$IFQ0E:C4@&2$WL_ +MJJUF2'\(0:_:1"U4H`^@I5P.BZ)4L!:TK!9D'OOIES1W_8AR@5V!ZI%W>0.F +M$V#I94*#%H:)@:0KV`HC$.MAS,$PFK`62OI)9H.$M074I_"O!N01#0=X[X,< +M]QOD6/P`/U_ZU>51LWK,65@@6H';04A.NGDYB&\_X!C!@+,E3)BR/F/I2`UB +M6J;-D[AY$HHG!QRQ+QN)1WJCK]WFM2M?V\UK6[XVF]>F?#UN7I.7IGZ".GOR +M0>&-R@?LN@TH(;/Y8-I\,!4?3-L/TN:#5'Q01%T&I&"W[6/1/E;M)[R4L<+F +MVU!\&]IO0_GM9MDX,C&@^DCS;;FF;K.F'&L94/BG^;9<<+=9<`X&#:AYTWR+ +MEQK^0S\;RN`PQX#".$T_)O=CJGXV).0*$G)CV\^8^QG+?NR&LFQ!679N^M&7 +MM"U=]K,A.%L0G)W:?J;3JGXV]&D+^K0M?>I+3AK8M/=M,S[:B9[NA9UO0LVWIV69ZMA4]VPT]VX*>;4O/-M.SK>C9;.C9 +M%/1L6GHVF9Y-1<]F0\^FH&?3TK/)]&PJ>C8;>C8%/9N6GDVF9U/1L]G0LRGH +MV;3T;#(]FXJ>S8:>34'/IJ5GD^G95/1L-O1L"GHV+3V;3,^FHF>SH6=3T+-I +MZ=ED>C85/9L-/9N"GDU+SR;3LZGHV6SHV13T;%IZ-IF>347/9D//IJ!GT]*S +MR?1L*GK>D'-!S2TQ9UJN2'E#R04AMW2FK;J+MH?<0?.]?EY^W7RLW]:?XLL*\NH[^:S^BC\J +M0-W[9.\+'61OB'[SG=;]QCMM>TTW+3<-SY`[>8]4'R]$'RYT\B/Q[P`1(5'U@H/$A":M$AY=^?#B(33Z(P'LH1)RW)^2`ITS5` +M28MZ/B`CO6X@!0:QI6#R2#-#EBL:R@L[\@O?3$6J@&ZQPD@AI2C%]^HY2+U' +MC]E2\O.)ODAERRC8HOSNTZ'J@@N#A@P]QJ0BG%/NT3/PAFO&%=#S=&(%_4$. +MIO"GR_&'9D^;5$7]`$ZN^PU7E2S-QDM*(V).64*DA*L47"[ZK8'G,L^ +M5QW\P+ +MSK5$5PND282#0=\A0YQ:2.?J04255A(!]^*/EZP7,V!^[%`7ZM"F/*Y0K#$- +M`WG3ZR,*',*=TP919H1\6];A'H<-&U1U9-"LD/&R3ZAF:];.3CB(\H#S&@4& +M9FJ!;>@.\!.`K^AUNH!\`S6.(B6)ENX1.)#Q]WOW*,9,D;ZRA34Z*^FTX?^$ +MSETQBC+ZU"Y-Z`D/1CR7#:F6A&7")`6ES2@2*F)V.76`"<+X`IFQ6;N&-*:+ +M4./2T=]0BE&F=A2H/.]WEVX263*A4//8R!(SBI!6,ISR +M`H6Q7:#0&458"K)E+D".#1U`B\@H>2ZHI9W7!0*A%3NC&&8>2_4RC(40XYLG33XT/+C'K7C +M,T6%L4-1(O(XIT)`:,6#<\*&&8**MW)9_F+R,`*"Z8VBQ67L4?D\R8MJ9 +MJA;J;WDUM'(GP#)H!"%GB_"<:WEOICQ5VTZ5\10+NI\Z-">7,]#N\JZR'$&- +MHSA\!HM:K+;%K04=J\#330[UP#`U_+29L9,!]T'B'9N3F+CW6IH?"K2F\#BV +M`P<,/&\&AM*//>>%S0(+MG89!1[L'7M&38`,ZQ`ZYS8R``%*MB8J6XR'^RC@ +M!)$YU!B!0NQ5,/$2#@@G:[D`37*U%ZD1(E:V$?7 +MKM#4R*"0-9;@QW?=2Z]74I3W-MS70#E(R%D\;P&*ZM!V5@^.3$=\4V&"!^2X +M8.38RB"Q0`PPE;8H<_!5O6_$1@P-IB(\H.![0$%Z>+VQ0:_;:)'H,_T)RB9` +MYUMCFHJLU?([]J1H"*WQ%,96:7G(RC8J!-MP!BAS`5-L$92$X*-M"7XC5UL6 +ML)5`*"_2X(W[AJX32$C<0&$^*H7>X,7U\))`UAVS1.X!0=CD_H""P0\XC5Q% +M[!0O'J&Y.'>H.4+Z=A0#)V@6]Y/H%2<-PK.*/PD\<5 +M-YRN>X\*/0TPK;2.&VG=DK,5HRS?@Y.#B!DAH]!L2VZQ)7U*PCPAU>:$',^: +MV1*"JW'J(4_E=J.`\M5!!18-D*?N(8M:6Q'Z`=FC#TCAU+6]KR(5OC6Z$CSG +MABNF#8>.&[:PK0%HHCU;7`FM<(^C8U:C&H7 +MMYQC@7#;6HUJ=V]#M%$D+2>=G7"XXP%RJ(X`IM@1+7)?TM3R-U>4;\`L[]VJ +MP123TF](':XGY\F?JC67N?&;&INMQ9U:3S]JW")N-`.0&;;8K$UOKP;H")3% +M:@;(*'M`7J/<>]2SSY-KP4RM,LW7+;76!H27;C$4M-JH600GYF+MD\C/+3(1 +M:DB]4$.<-E"J.@G%/5U[`E6W5'QA=`&7WC:XU!O;II*XSE%>Y/KU<,:@]N(5 +M<=Z`ZEOK).):,`^$1LA2:YLH6^9HTTBDC0^48K.X2;5-[&J;6%]$9W3WJ^MZ +M\)&.!_&Q[Y%8^'#`:8C[&BKL-"33T\?Y7K'8ZF.K4(VB\N)&VT13[P$HRA`T +MHH3K$S)3'ZK8;7X#][UAGJG5J"7@>M&9:7DE`'`#]=.HA1T=(U/3F"]GO#8$ +MFL249N'!QSY.#/C8RV18?O?B0>FWKB8`5_WK!44GS#E&YI/F)FL0F]J>`TZH[YC.>: +MNOC('>]OI8U&2AN-U#%FC.[;>J5^-6$C(FR51CK@\..IVET-,$L5SQ'!GXY. +M7>%49[9CTAL/L]'KCE1MUB(IMEF'C#8'DPH*/'5#0HWRE&L>#[@*Z@$WG#3+ +MJ4&ZQL(UIB"Z$?#XEJLW@:+D>D(RJ3%I0!\MXB+V9[8&[)BQ(H;QM/564M=; +MR?52J^?JC@BT[R%R<>7)-N27-/;- +M<%G8*[9V15"Q_M20X$89--:YD:0BL_&"#%(J^,H<`52H8JHVV"3.?E]'C@,V +M82.ZB4W^RZ@\Q-O`P]UWWWSSJN$COF*W`1D>BZJ'!/50[H`><`,-*^0-:PNM +MAXQ;IA@[;L2FW0@A7Y$MZ\4-`J%4&_/39M;1\)\0M!T;)X8K63_`OKL_Z%W0 +MI7G`NU[#7W_X_J?[;QB!5>X62K`W`,H4V'F[58X2:$GC?,'4"2K?'A +M@3;DAYG:AD3:NXSMH`(Z_&_'?,FQLF=03\$V\Y4+LTUM_B%%'F-.[7PC4A24 +M+)CJ^:1K0P2F60<^IOSUB]=O7KRXYX6HC3GD=MP+=4*$-U%?+CK]`+?S'H^"GE9V-3+%POPN)"7E1Y_8=<*OM`ZXZ +MZJRQA_G.9)!4L,4VH\_H=F01T[.EEN0#:P^XB[2=9M!IUJ@-6R+GE>+C;IA= +M1Z%."#Y:[/;X+5A;;C3*A&YLB:%68784DG8E;FR-FPR-[,?:3`(2%QDWJQ#; +M#=^R&T"K7.D==C*C0;K+'3+P(+>5;V]UD39L0D<[)M(APL6LQ;N8TMDK9;754^Y%1 +MV\CY[NJ*VM8*&'>?7O_^2/?]U=I[:G>9["8UPDQZC7K19@L6[\K8L4H&9229 +MKKIP2H8=7N4#>.U8NJR-36FF'I?QP;FV'Y4"MDM"9FSGCKCF=#%W05;ZF%KR +M:-/9IO[>?E:\L=M$]607Q5F7=3%L-AAV[:3;S4CD3MEQ1X>T2I>+/'P%RZ?H +M-;8,T.206DTMXI-0O0E8$)_9\*/9R.KNLFU8(;MMO4\T,]=OY,!FY3>0U6C2 +MD@?I[N9X^='G7PJ[GNOYO[,WYP@(##`&!UBG`QR[`?:*:H4!V6=P$.%FN:I4 +M$NSG:$#/!6\-0!"KK,AUY5? +MI@Q8U#Z*:A<'"!KU:33O5LW9`4*R*HBB90UR498)55,2"I10W&.`H37`H1J@ +MF]0D'Ɖ-4U8F*-5[#.5>#26.NE`YDA)"5J_+[`%-B@*.@!RA4A2BK*AF' +MHJ:(6I]Z=I,&9*>/OF!YP1^3-06(DHX?LM`&J4]%D058]+F2$+(H3A'N:Y[Y$.=W9\CE69Y?<#MY2^0FZ3?T$5Q7-KKM>;" +MZ%M#98`IL4*?A>.+`_)3]*&GNLN4'L+/*-E(AHX`+6*\B*YI3_#-`1MQKP'H +MV:!SXI^T`_;B@-'TO49FBPB>(X)0\=B%6+&6M(930`C%4*`OR59=7\H2[Y,&&`"="R5#F7E +MM)0%N(";M!Y+RD7S"@CX/C12,E\#IA>UM%R+3J/+%X#D_M!(KX`PGT,C*Y\M +M0KVO`)3?PA`;J`4KB`JKP]@^-_BQ]G#;W5+ZK?GBR%R +M@*0]J_Y.S=]3\_=<_QW'YF_3_&V;OUWSMV_^#LW?#7RQ@2\V\,4&OM3`EQKX +M4@-?:N!+#7RI@2_%S=^_7?[XC;8^IS_/'FX.6BU0#NMIE8E!A]+&_W8HBI^- +MHH38D%$X<^,_ZDU;@YQ6U`S^'&$LFE]IA&[(-2$I0CDHELKF7QQD-P'E!W(A +M/L5RU?Y&0R$/R$=".9`L_NLOGAUR%4V/$H<6]3QYI9LOKC6=H:S@Q^I-J:7] +MAFM/:KW-(N5_4(K;?'-]D)SN(5?U"V4=OK#SS>=%'5+<3L+[%X/2_LY73P\( +MI*IB?9"L\$%Y:.\[Y`65)>NBUJ$C5MS][""!L2'7Q\K*E#BZ]QDEPPPXO*3E +M-U4R]+Y#M3:M#QL+2RK,_?&\5D2S`8=D!A54CWVF[":'JJ.R74B/SB_E*'%5 +M-I%EYR-#>B'E9/1L(PRR161_>'WU],.KAT=&CE7UQ*EP%98G;_O>*\MYEZMD +M'J",WOXY^T5:MXZ">8/N!+W]>RVJ&W)MR0-4X-L^YZVWHL!B*CTW^R[8$P\K +MP'1D!E3#XFT]!`AH+Q3`MQ#I_L-;(1AQIZ<3/X?VG`?=1'A;!U$Y*R#/*KN* +MT]O'!X?,N1"RPN_2.RR@\_F,CB;39U_U[?!'HX<]<*`I>W!O^UP=-BL_4"^! +M':1W0']$$4(SYHI_.2#_=@"T)NTD6B4#\`X4*)=N<16"LGP@>_]OQW\2!A)_ +MVQ<3SY(OPQCN,;JJRTY0\-&@(_JWRQ^F%7*A$&G-XY=W(KRX<[4OLOYWZ4&/4 +M*O5D_6C?2?X9+=$*^1?S`IAWF8&5PN8V)T+B^_$=%C#G=AD]*H]8R?P."(@8 +MU]BZTC#%HMY!@=E\TF^0VBRFW!.A4.V +M6B893E=::-.6B6)9QN=XT)1C78#S'\_DR-F@X;<.G-)&$G=VN:@4V'/#[<87 +MENP.$]7DR6E?>0'`106@8X?;%[K^]*!I._OTF0/Z4\5$Y.1_H1;[%DPW5V!2 +MSFS&__G79UIN_H!\]#TH>=]`ML#6W)]=X4DEKS_';FA[<'HPGZ07[3-1%IVA1J9-A9^Y@9)2DVMDIK'`_OF;,YSLQJ+'+@\E +M!=-UP2RV&RO)F?6E]WO(K)=\@J!FY.N:F^-G!V2<[T+)5VXH,K=`/B`A%!15 +MPCD5/IO?JB&3K6)51"86Z!?!B0KNE'#>0:9)!6GN@AD+G6@;>13F(C2RM3X: +M*ZFT#U;5>'^F5_!H9OH>F)24/2B?[R/3%G:V:3G(%1&@K1J*H0$SFX6KF<%: +MSILB87W?]/#9])B[2Q[+G4O\QQM_%=1EV&JKE-+&`O7EQF-DMJ>TL4'SVCN4 +M6EA,TS[87KV@N2:!4`;'=C52*YNR!EM-XF_/Y"6`'+MT&@L%W\.MUQQSURI. +M)=0P[K+]U`+J"^P3/_&I#VS0SQU*%5IB@ZE'J4;AW(BG'%8U.Y1:0\F%TC+Z +MB5)YIUJ2$&W/.XIC87_N@SFJR3Y?M%Z'(B?8/7[RC?FY%JA7[)__3132?/SX +M@%SW?8649>@:L=\73DZ!K/1FB9K@]HR0C00M,`\'SJ@-8F,'1MD=8+]H%\8) +M\UA@3"TB,Y!^Q\T,XT:W3P7JB2I93`Z;+6G]''7FX +M"84A[U*!_7-6R@4V?0=.:PJOO2.+,IASXVX4R(F[EM*&R[-]O.#__/LSLGWM +M\:,#,M\[7)[-^+&[Z),691P;)S-[C2'MH=.UV"S$PK+"?SF3XI7`INV`&=3+ +M#'-WU46WKG"V[EL.'89=ORB7SB!`RS2O=8MF.$-=)`#:]8N<(C1T=!!7ULOU +M36MSR1>;6#L+'UNYF2V"=1?J[@S'>P#HV(LNJ)\9>FHH*)W/37@A%CL1<=P1 +MG,FU_MNB)#_.VVQ?G96W`7**_RY"U?'C(R-=\S,OO:\]XHR?:/;"(&%C?-AR +M&_'^#`>4`>C4M>95$X6.)K)T#=,S`;1513DX&'>\HU5[?]Y(T&JC])?$\HLZ +M/^JAA(YSE.'LZ")#%VEH'=9JX3.!QJTRLFI<%H*I7``),`#K9.UW/&*CJ;'! +M]2WE3*"I8:1BBWP#)EVS]<=ZW;/;%ZV:R@IFZ"#39NJT/<7N,Y!3#60.%\2P +M$_URKC4_/+MKO('_ES-4%1KTI$:'-KUJH]#51D9UNYD;7+HBLV$+9J.+7)G5 +MX-GD3(60-_NZR&ITF#,6NB:GFDEV;"*S66BO<%;_L5T5]W24S:6M4-NNR,GX +MZ@QGX@<]@-*)T^<#&7-7E6;@31UU4.3O4D*(C3>?MZ)7Z_R',Q2ZR<=;]L-A +M=BQNN.H`:;*+U&JG;*+NQAS2)@Q:B(L$[G=9ZH\]J9\)UJ<>P3KE*^L:?>\5 +M3K>WY$C5R8QEUQ2X6$9MQ^,RU"]ZH5TO`]Q37RN'_)E-H +MMQE"*HX9[\QAWD2<0[D?(@ZI"MJN_^2*PU<=@L@"S(::(%)&M-D#TC0.5"CT +ML9,PE-P%)V<8.P9@#M][WQ4--G-7;`E"I[!CKT1-*BYD6"KW0U9U,!<>N"JF1`SD):8V,_7BFEX[B>%8'G:DXIM8#,S:&=$;E[@;8O`GG +MS.5&R-T9+M04>[]'F#DD[CK:B4_'H"2K:?U[M;##GH*RF_B8*Y.-$(9(V?#K +MFBHJ-EU70WE=66=K=-H,IM]U2,>-AK+E7@C%(4SIX!\?-H!R_?!\HV'/*W'* +MS*Y64.LB?GG02XFW8(8-.N-8;H4,9RC?K-2Y!Z;1E#$^4MD3G%G7.-]N?&8F +MVE5#QK0.5/9C5IY=(Q&NP*??!306^YZN%\.)QN1/Y];9#Z)FW0[X[DTJN:B+MXM+":N=3N;TUSY+'S74((G/7SJ:--6WR +M@*^+T+!2S\FC='Y\G]<+.,=NE#D#,S8B/JJXVMD#\^UF-P>7'O(6"/;D0V'= +M[P(:"NO>SCU`8]Y:,(V,5Z/3[\9PW48DY3-CJ]=S>R:WB!2U`'9E4LA@=O>3 +M4L:GK;>]"@[:"4'D;;%"M9=;4!QZLD6.@]G71:;TZFQ'&]D*'E<+SU"_V4#J +MVV2A(CHZ2K#99E?#N`X^D\I.^T@HK\):*3IK3&]WOAI\ZFWHO!'RYDP*8^9@ +M244YHH$\ZJ/&DJ>]W(QO";!9RA'#8Q:3KRRY7:-Z6HBHX:2]3U# +M*4P52U<[(7,E"#9;7XT>*G8D9%O>F$(/F:XBRHK=]K>5?"4A2_LC[]?N)`K% +MUB%B=?>0-T*^.9,R)T,NU;(#IXA@JF,SM[')T%CPE]DDN5]UVR +M=#Q^4KCL&\&SL/QE;;4YO8''IV*[?0^\N0C)FW[BPE2%,"J3,B_LKKN3TB90 +MI-@LMH5C1]#D6('I.3ETUJR(`E4J,%:1HXW=TR0M1-TZ,T42E4T=:\=FX+H: +MQ=6!M&)=%_GQ61%\V[#$M(ECZ)-LX]BI`YO/[&KZX0M7Q2*K9'U313`;Z#)7 +M9O`FO7LS)QYUI%PLBLYT#(:IBN96\8I8Q8!;%;<)IT'LYC1.+DJZ3V]SKG[3 +MW9^J(N*E92C*!6'TC=^R#:%-^>K-G/S6DR-*;E/7:LW1A]CL[.3<";N[7[J> +M^*R5[HPBUF4ZX:YR<"LQ7^.&[]YF3K5C4T9VM/*.VPOBQG8G9^1@P5@X>,YU +M`3/'(VH3]8).Q49,F^26X^#6[C%INQL^:IS4%CN*SO<"#WG7HY=14-A1<7.B +MQE>;C0UTH3U<$96K0V'8N]#AA1Q@ZF_(F,RGL47=6&WCUL"%UJZ7DMU[B[AF +M.N^//Y,B+D:5G>V-%M(A4F\(VQ]B:H>8'AUBZ@UA^D/,[1#IT2'F_BSV#VK, +M)/OJ(>)C0_BQOQ;=(4P[1'AT"-,;PC\Z1+'A/^V,Z1\=T_;&[!QMDB&*,=/. +MF.[1,5UOS,XQI76(S6K91X?PO2%2=X@MS9E'APB](:;^$!O.&1\=HLO_(S1"/LK_OL[_I#Q&:(1YE?]]E?V/[0_AFB#[[KUKOAT(T +M_R__K61P3\?W_HM[=KR^T0NI>H"X/B"N`:0O)*SE(3V&#%3B=T^3SASMVQLR +M-J:0G+3I#SFOL^0!^>:KO0&Y6F?GK&YM&*YEZ-XZH.RWS?#944K\!-\+EIC4/?C7.`SAPKQ]BC*BH?I2^_L&IB=-;.L_^?)0 +M"H2S>PL8<9WX1]>?73V]D2(Z7*=\W^`V/;EC6D_3[@%CW@$87P)##NPN+(XC +M6GNPC%N?_!T6__./]3*_?U'KFU'3*4F@)7>(J0",7`>ELYTL+=B_0_\USK*T/]O +MX8UEA,\^NWXV?/[QL,B[X9.GGW_YZ=5'O[_J?[3"JS=I=J;HNU.T]10?40CN +M[?#S#/[(X']V^?27-\/'5Y=?W#SZ"2L;]X,.0=,)7%Y@+UAE0^]D=VBV$-.C +MLV$1_PQ5C+IABLZA_#J@'1ZQ"#"8EYIBT7="F#9US];/M;L\O\/,;K@N0>@' +MKG8'<\VVAWO,8LM3NZ%%LW.O)D2]Y6,?LS1U"I=/L5'>$WLKO2@,U-QQ\*37 +M7+HG(^;RBZM+PI&S[_:%ER\V/7UYO/[PN//"[[V@J7UYM?/4;YY2[Q]>?OKI +M7N?T//\GDF;]=\7*'PY<0'I9DEOD:_^T\L],EP&XU5CB'];+]?"+-GK%_>,* +M$J_W[VEERD5>OI23QJ?BY@"N7_4`1^6$5$VZ\GLA[#N2_EQLW^3KR>7B)LID +M.;$@]<<[K?2/W*L3+J9Z*3=&C^ND+*YT7IPEFF18R?TD1QLTD?PGGE,2Z*Q< +M_D'1B9^*BPU691U6#/!1D),4Q[@M[^H*%TEN8);JV[QV>I[S):43,D96?/(= +M[Q/UNH9%7\I9OI-4NCEIXN2)JNH!$,&N0P5_S\NFMYCK/99)=RZL+*2ES,P3 +M=C5><9`[\#V-O.AZ%3G5M+A%PB#K$<=E!'GMDGPQ"4:XKMTMS8HF15D,KQ@C +M"?>/Y[M8PSICN6\!9M]KGN%$ZTQ+)41AU^7@@YP_'9!N0)1[B*GC!ML$:);G9FP>8]4X4XDB2._ROPM^= +M5`N]1:[&2>H7/.@MR@=D$3V4MRN2)W1'RAER(8":A%%GN<>#C/63;J,^2/&+ +M4WD/J0.C.=$.>ML-;AZ<44(FR>T)#I.E+(/7+&2`9:[GGP"VP^UN$9=8S/D2 +M-2$8BG>^DC(G+,46#K^CIB,4#*F>I3N]ODDN$)EED=(ZUULR$F4:*HGB*%0< +M2+_POM_/ZH4QVT8H(;GHQ:S

.X?9WV1-`4OEM>7D/KERA^,K/I!EFJ@,]BTB08_-,44'X7/9\D][L8`FE +M?(+NA)1GZBZ!JT#*WHOFFW&5W3+B'N5"[&R_(.S[DZH8RD+ +MZ(1X(2E%EQD`,\NRT*FP.R28W)<7K5H(.Q^@,;`F2R>B3&@IK!'='//5D%;M +M`#(Q9]R*1OD,),>$BV9H>BO(2&)-6@-)84&T!F@&BUG:JWNI1UY.4@KD-5)6 +M7B*Q\*1Y+BAT^!KY][=ETFMD:X(+K8D`()*WT"T)HC/*_341RTE!-;Y"5G57 +M)DDPKW,01U[DK%"B@Q@T5GJQO"0.`Y!C_XJY*HJ&#V(4Q"AFG:$F:RFE2$1XLOR_K`$P6=%R'"NZTL]RO.*6!ZN@EZ+RIIGEG_# +MBM9[*5=S0E#MC@@O0=$E^":PE=D&F>7R0LZ_/2DW;2&VD?)%'^)Y(K +M4.YV$L*'`K=@=A&F2>N@C.*SD>2]8X8"R3IPHYJCANR_`'>)$@-AAN-^TM7_ +M*B^O!5/C4OE9J,TX`:N +M*/8>A$XLY<8R"[#&(8/NEK%IP*E&-%LDZ1/Y(BB5Y["3B&6EDR7/Q`H/][>&UR>IFR3.>5LXFA[W><9MB?:PB +M/Q:+U90T^\WB#XNK;G'UM\6W?UG\KEY<_4GY_%E?M +MFM%NN;B2N_WBJMY=+ZY6:U9W2T*(OJ?UFJXTBM@MS:NZ8/?++^9.OVQ*KWTI +M7=-6R^B&*@.UL<7?_C`GJ83!8VO:6'`+T+]VK36B?$U5;,M6T6AT[?'FJ2:\Z[=X?#V\/AO?Y3F3^-U.YP^'`X +MO)[;*E18)7.8UU:(\JXZN.OC86/_-__IUQK3?8^ZXJ/^H^V[3\,?7H?NTIVN +M.JV256AE_K`OSVSGT^[/KJ-67?63[18FNMK:R9INOJ^?UM[4IL=,Y0O7,\*6"M.U04B7MMU%P"*NF^ON +MPHY'8\;,4"R07A>UH:BZ<86Z-W2]C6&YM<$*T;58:S.B6!/%$KFVVWR*@BT4 +MG`6;2-`^F*JM=Z@J04U@FVYSF>`V$)=46R0HQCQJOZ'BH,&KK-E)C)*H+ +M1F0E@#$HD15&9(V<&L,18ZR7Q2J#L9C*8$]*(\EQF.-G-HC4!^O5U/B@K.5IZ'$J"TYL`KUT1+C +ML63`*I3'$N.Q1DZMHHA5UJ^3L(0YJP1&;5D#JU#O+##O+%:I50(EK\#(*]K4 +M*M&>\G]NK/2"/)Q<`F.V:%+[!.J>!>:>A0+VH606&)D%B#?$B7BC\?&&CI&3 +MD$]#8S07(.X0J+L6&*<%B#L$RFF!<5J`N$,PU#,ZX\PHTD!)C.8"1!P"==<< +MX[0`$8=`.A!D>YS#$NC#NWE_7A9IIJM +ME]\#<8SA'$0?'/7:'*,S!]$'1^G,,#IS$'WP^HGX-]EWSGOS&$9U!F(/-J!Z +M]:;7#F,U`[$'&["Z.O0`&*L9B#U8DP%(]V/&SK!6LS'17SM,$($P-<8,6HU) +M?7`((`1A`U)7V^V;D!;A&`*(01ADM:Y?V3R+QIGY328)@;$WCF'`(!!A?`3\ +MV@,[F#&QW4Z:@7"$L1',P<&X_3C#Z,U`4,(H!M,GXGS\'P-)BA&?@=B$U:>@ +M7_=4IQC5*8A4Z&H$MXMPAPB'$9^"N(6V([CE`&X6R#M(Y%!L9E`0N]#AS"`C +M53&_3T$,0^%TT+\J$E7=13C,X5,0T5`YA"-5A%LF0]XGB^HX]MB:0$%H0\5( +MY4?71LQB46QUH"#(H1RW/DV*46Q!H"#DH0RW'J;*W(8W67(H-J4H"(`HS8U[ +MLWOL@;#Y0T$<1.L\3C09FS@@&EKE\FV)I318*D)TM%IC4P@$1.U8/;^OQQ)+ +M(*^$2:-I%["EQR,\'O,4-J>4+*KH]A5LJ3#%T*`>!*^8-!H*@5CAJ?2+,"M; +M/Q=6F@4WK#Y= +MAK8)F3BC?S)YKJRV\<&5LMUN=+_NGZ3042+?/E+9I/*Z6Z[GB03)BGP:RD`A +MUS%1;!Z?WFSFGVN)906$W6*XAC!!EN2%R4@Z&G,9[&%Y:89)LZZZW`2C1NE_ +MM>9Y/([A<8/7:R/RT@*3%L`6F9>6F+1,;<&R_FJM\K`*@U7`I"8OW6#2#3"I +M3:3]RADQ6@RC30T[D?)7ZU7$7UR]U#\1?>70W4.\E;/)53"DJWO!N1.T/X%[ +M=>>6O*2T,:65=SK*+-@>(!%/6J>6O^$%(TV-"KXQD.M7)KX@*8R3D9ER`\2Z +MR[1$N6@G(STL=@\S!V7*Q5VQK.KCS?X!]!AF(.)&:ISP5RYP!,@IM,Q`IP*] +MCU#=`.)E@J(R*+V`?;#K#37T`1`I2I-!<0*;3\FPG1ISW(QP% +M3&WR^C2I/KGHK>D&$=0@TZ],"C\+W3X%W0)#-=%?9U#6F'2JAO'NIGTOC+/-;/(#8;<`*O:O'2+2;?`JE5> +M>H5)K[KQ-BMF]95Y")T#E!B599T:(_.LE1AK)4V-D7G62HRUDD5CQDE\98X) +M9/$P'DL.;,F356)DU2^DMN3)*C&R2@GF4!+FR3QQ)49<":(*F2>GQ,@I07PA +M\^24&#EE"R?-(-VNS/F:+"#&5PE""Y4GI\+(J4!DH?+D5!@Y%85#,LJ@*W,> +M*@N),5:!@$+E^:DP?BH01J@\/Q7&3Y4&#^.4N#)'UK*`&&45"!E4GJ8*HZD" +M@8+*TU1A-%4-C&4'66]E#A-F`3'F*A`6J#Q-%493!<*!)D_3!J-I4\-H!\UZ +M*W,$-`N-<;@!84&3IVN#T;4!84&3IVN#T;6!8<$XZZW,:=TL),;A!@0$C819 +M+"_<\[4Q]\8`7UVE2:E06[GHWU2V*_X<9+F5.2,=I**0H:63,3ST\&W,/(5Z +M;GEMS(W/3S4A./(WC;FI/I4SZ^7,>CFS7LZLES/KYSJR7,^OES'HY +MLU[.K/];G%F?7EWU(::XW_4_+-SK^UN'LAW1->PKPU; +MN";XM?0M..A7#^^J!-IAZI>J$2:Y/R*(Q_M$:8>IUP_O<+6*J<:)&8AZ^_W]O7E#O!Z1^_N]`WO7C\[K`+7KB]Z34]7001K"7 +M.?P4;S789T)$C@0MME^HQ3/&,0_SU6.7`WWFB.5T@X2'ND&]44!-I<-KHL?L +MZ&99'+T/'SY$0N1$39:%'`_W^Y17]X>C?L'D)]:T/FI/8E,L6_/Q%?JW+K>Y +MET?SL1;FMZO0=MN#K=%VYI&A3>(\$EO'W+A*C:[TT=9J=*T/MEJC7W58]LY5 +M-!_8\-'AF8]K^.`0E:G@,-VMJRQC91DKRUA9)I5%K"QB91$KBZ0RCY5YK,QC +M99Y49K$RBY59K,R2RC16IK$RC95I4KF.E>M8N8Z5ZU#9[M&7ILS\M@N**[#[ +MZZ5?.EV1W_93D\0RJY"M0H(P,6UX$!TZA*V_K>Q`[&>0.!028"!*A%^ZX-BA +M!`S:[_EW2Y+`DJ77>X`Z!/6QF[/&H#N-`JYF=E0V!0.&!U!35Z7U/#CH(M=( +M8JWOA]";H:/)4-.T,WEH+BJ:Z$7ZL?(8RZ`8Z85[*D.&HDMAUH6;C*YXV +MMN_0H.9#:".Q:17T:U/&^"R#WJ6ER_](=W*"`D8.N +M3`9KU6'D3V?JA<4]BV +M>#S:#[<1)H.ES3N>;6X+DS&Y=]=7S_6@NM.<=ZGBYW$!KD4=3H;.TA'F<5K? +MX)NI;5]H(NQT:SIZM9>^.X3B?Y'#J,,9IUVOA=,D%)_5B\QF#EZ3QOO),!NU +M#GV8OW>%37=!YON*;&;G\32N%=5=;$RS03/CQ5USK`OJF4^(,G[6N2A]Q?ZJN]'V:G8.%Q:FR(5IXL*U=!$T;+I4P43)(&5[;.,$ +M-U&_Z!2F=("VQ=`;&]-FU-/K>!\NY_-[[GGKQESSX=\4SC*T9?H$$$ZKYU5+ +M)N-]JAY)R'<1]7MXAI<-'GM#`-V866_[T*57RZF4[K^]6MS4OS#]Y90*L)&. +M:3?"T9[,?P<]@BT;G*S,KO22F)@:Z/>"P42NH4]2N85;A&>L$:$9S3W? +M?H53F9F,L!NBX]&U9^(Q.&CALP^Y/QVL8)W#X3"-9XP(O0"%_(FDQ&[L5;QUZGE]Y@-S,[-0F^L-O0=7V#?W*O@M +M=:^!WT'W"M"H@'GH8BP/XWW1!3[8X!7QBI6]?)(1HK)5V=J7S/OJO[,S74;8S>Y#.LCD@XG(D_@"3 +M39W8+%#??K@U2(;*?KHD/N=YGH&Z!T$Z@CUU!?L:YSA4=L$-9.WPZC-C$ +MF4U\]5:HQ`KS6:4D,<+=YQS-:3_CDW-D=_`).[(]^.2<33:I_LZU&AQ)<&&P +M"[_,%_GT(=GYA*(Y&&;3A]Y>=^,Z[L(/3*!-11)-+K[$U?BT)O%I3N+3FL2G +M.4EH<4-27]V3P;!R\R6>91[>C^3>1_4-)R_O;F^/#[\UG>_>=_6-Z,O\!P@' +MMEP`KEZ$?MWX->YS/4D8O4T8N,J^N.E[:O,EOB%R(6EX$[G\C%D^[=2<>HJ< +M@_K3TWI:VA82%A(6$A82%A(6$A82%A(6$A82%A(6$OY'DM!]+-E_+;Z1=D^> +M_/'KIV>][@N7,$.XOYZ>OK&UI3L!&DZ"FM.:T_,[-O=(R+IUZ/L'V!D=NEV=Q^6E[B7G: +MP.EG'&C+GZ&U#XW./QVS[9UE+F*FG6$>XKUXIEF7;_!\,PYI[DS3#31VAKG6 +M+?[^E/.:;K*EC7VVLYYP\O7MXVO3=-.O;VR\[)+))Z!N[$PS+2)/.Z52W.GF +M3HIZKA4IOP*>:TG*+W]E32IKTI/+Q*33ZBG'>9Y5Z93OG'!5.MMR4R90F4#D +M\P@]]00J\^2I1?0_<*(LKH[_'BDZ8?#F+U[\[=7;:NH)X.#;;OZ/[6TUZ328 +MGO^3$G]29MM>U`7S%S_<;K_;8P\6N9:+^48?[B +MO^]NWA4?^?7$E(:8F_=O"S$G(*;=[+Z:GI?VJQ7FKQZJ8OCJ_^]_;[0M")SA,53GX5)QN?/_CQ[?2,M%\Z-;^I"CFG +M(F?C0KH7^[>WOZ\F)ZO]+JKYW?[X<%N5MQ,4BOX*_&?C4A,O]O=G8J3];JWY +M[=NJL+.P\U>PNCR? +LK:O,4Y_?D[\>]SORP^WQS>WV]N?PK-K59 + +lex.o: y.tab.h lex.l diff --git a/sys/arch/i386/isa/pcvt/Util/kbdio/kbdio.y b/sys/arch/i386/isa/pcvt/Util/kbdio/kbdio.y new file mode 100644 index 000000000000..0b78eea5efc8 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/kbdio/kbdio.y @@ -0,0 +1,344 @@ +/* Hello emacs, this should be edited in -*- Fundamental -*- mode */ +%{ +/* + * Copyright (c) 1994,1995 Joerg Wunsch + * + * All rights reserved. + * + * This program is free software. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Joerg Wunsch + * 4. The name of the developer may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ident "$Header: /cvsroot/src/sys/arch/i386/isa/pcvt/Util/kbdio/Attic/kbdio.y,v 1.1.1.1 1995/10/07 21:11:26 jtc Exp $" + +#include +#include +#include +#include +#include +#include + +#ifdef __NetBSD__ +#include +#endif + +#define KBD_DELAY \ + { u_char x = inb(0x84); } \ + { u_char x = inb(0x84); } \ + { u_char x = inb(0x84); } \ + { u_char x = inb(0x84); } \ + { u_char x = inb(0x84); } \ + { u_char x = inb(0x84); } + +#define YYDEBUG 1 + +void yyerror(const char *msg); + +static void help(int), status(void), data(int), kbd(int), cmdbyte(int), + kbc(int), whatMCA(void); +static int kbget(void); +%} + +%union { + int num; +} + +%token NEWLINE +%token ALL CMD DATA DEFAULTS ECHOC ENABLE EXPR HELP ID LED +%token MAKE ONLY RELEASE RESEND RESET SCAN STATUS TYPEMATIC +%token WHAT +%token NUM + +%type expr opr + +%% + +interpret: lines ; + +lines: line + | lines line + ; + +line: statements NEWLINE + | NEWLINE + | error NEWLINE { fprintf(stderr, "bing!\n"); } + ; + +statements: statement + | statements ';' statement + ; + +statement: '?' { help(0); } + | HELP { help(0); } + | HELP EXPR { help(1); } + | STATUS '?' { status(); } + | WHAT '?' { whatMCA(); } + | DATA '?' { data(kbget()); } + | LED '=' NUM { kbd(0xed); kbd($3); } + | ECHOC { kbd(0xee); kbget(); } + | SCAN '=' NUM { kbd(0xf0); kbd($3); + if($3 == 0) data(kbget()); } + | SCAN '?' { kbd(0xf0); kbd(0); data(kbget()); } + | ID '?' { kbd(0xf2); data(kbget()); + data(kbget()); } + | TYPEMATIC '=' NUM ',' NUM + { kbd(0xf3); + if($3 > 1000) $3 = 1000; + if($5 > 30) $5 = 30; + if($5 < 2) $5 = 2; + kbd( + (int) + (8.0 * log(30.0 / (double)$5) + / log(2)) + | ((($3 / 250) - 1) * 32) + ); + } + | ENABLE { kbd(0xf4); } + | DEFAULTS { kbd(0xf6); } + | ALL TYPEMATIC { kbd(0xf7); } + | ALL MAKE RELEASE { kbd(0xf8); } + | ALL MAKE ONLY { kbd(0xf9); } + | ALL TYPEMATIC MAKE RELEASE + { kbd(0xfa); } + | NUM TYPEMATIC { kbd(0xfb); kbd($1); } + | NUM MAKE RELEASE { kbd(0xfc); kbd($1); } + | NUM MAKE ONLY { kbd(0xfd); kbd($1); } + | RESEND { kbd(0xfe); } + | RESET { kbd(0xff); } + | CMD '?' { kbc(0x20); cmdbyte(kbget()); } + | CMD '=' expr { kbc(0x60); kbd($3); } + | /* lambda */ + ; + +expr: opr { $$ = $1; } + | expr '+' opr { $$ = $1 | $3; } + | expr '-' opr { $$ = $1 & ~($3); } + ; + +opr: NUM { $$ = $1; } + | CMD { kbc(0x20); $$ = kbget(); } + ; + +%% + +static void +help(int topic) { + switch(topic) { + case 0: + printf( + "Input consists of lines, containing one or more semicolon-separated\n" + "statements. Numbers are implicitly hexadecimal, append a dot for\n" + "decimal numbers. Valid statements include:\n" + "help [expr]; give help [to expression syntax]\n" + "status ? interpret kbd ctrl status byte\n" + "what ? check for MCA type 1 or 2 motherboard controller\n" + "data ? get one byte of data\n" + "led = NUM set kbd LEDs\n" + "echo send kbd ECHO command\n" + "scan = NUM; scan ? set scan code set; return current set\n" + "id ? get two id bytes\n" + "typematic=delay,rate set typematic delay(ms)&rate(1/s)\n" + "enable; defaults enable kbd; back to defaults\n" + "all typematic make all keys typematic\n" + "all make release make all keys sending make/release\n" + "all make only make all keys sending make only\n" + "all typematic make release make all keys typematic & make/release\n" + "NUM typematic make specific key typematic\n" + "NUM make release make specific key sending make/release\n" + "NUM make only make specific key sending make only\n" + "resend; reset resend last byte from kbd; reset kbd\n" + "cmd ? fetch kbd ctrl command byte\n" + "cmd = expr set kbd ctrl command byte\n"); + break; + + case 1: + printf( + "Expressions can either consist of a number, possibly followed\n" + "by a + or - sign and bit values in numeric or symbolic form.\n" + "Symbolic bit values are:\n" + "scconv ignpar clklow ovrinh test irq\n" + "\n"); + break; + + case 2: + fprintf(stderr, "usage: kbdio [-d] [-f devname]\n"); + break; + } +} + +static void +status(void) { + int c = inb(0x64); + if(c&0x80) printf("parity error | "); + if(c&0x40) printf("rx timeout | "); + if(c&0x20) printf("tx timeout | "); + if(c&0x10) printf("kbd released "); + else printf("kbd locked "); + if(c&0x08) printf("| cmd last sent "); + else printf("| data last sent "); + if(c&0x04) printf("| power-on "); + else printf("| test ok "); + if(c&0x02) printf("| ctrl write busy "); + else printf("| ctrl write ok "); + if(c&0x01) printf("| ctrl read ok\n"); + else printf("| ctrl read empty\n"); +} + +/* see: Frank van Gilluwe, "The Undocumented PC", Addison Wesley 1994, pp 273*/ + +static void +whatMCA(void) { + int new, sav; + kbc(0x20); /* get command byte */ + sav = kbget(); /* sav = command byte */ + kbc(0x60); /* set command byte */ + kbd(sav | 0x40); /* set keyboard xlate bit */ + kbc(0x20); /* get keyboard command */ + new = kbget(); /* new = command byte */ + kbc(0x60); /* set command byte */ + kbd(sav); /* restore command byte */ + if(new & 0x40) + printf("Hmm - looks like MCA type 1 motherboard controller\n"); + else + printf("Hmm - looks like MCA type 2 motherboard controller\n"); +} + +static void +kbd(int d) { + int i = 100000; + while(i && (inb(0x64) & 2)) i--; + if(i == 0) { printf("kbd write: timed out\n"); return; } + outb(0x60, d); +} + +static void +kbc(int d) { + int i = 100000; + while(i && (inb(0x64) & 2)) i--; + if(i == 0) { printf("ctrl write: timed out\n"); return; } + outb(0x64, d); +} + +static int +kbget(void) { + int i, c; + for(;;) { + i = 10000; + while(i && (inb(0x64) & 1) == 0) i--; + if(i == 0) { printf("data read: timed out\n"); return -1; } + KBD_DELAY + c = (unsigned char)inb(0x60); + switch(c) { + case 0: case 0xff: + printf("got kbd overrun\n"); break; + case 0xaa: + printf("got self-test OK\n"); break; + case 0xee: + printf("got ECHO byte\n"); break; + case 0xfa: + printf("got ACK\n"); break; + case 0xfc: + printf("got self-test FAIL\n"); break; + case 0xfd: + printf("got internal failure\n"); break; + case 0xfe: + printf("got RESEND request\n"); break; + default: + goto done; + } + } +done: + return c; +} + +static void +cmdbyte(int d) { + if(d&0x40) printf("scan conv "); + else printf("pass thru "); + if(d&0x20) printf("| ign parity "); + else printf("| check parity "); + if(d&0x10) printf("| kbd clk low "); + else printf("| enable kbd "); + if(d&0x08) printf("| override kbd inh "); + if(d&0x04) printf("| test ok "); + else printf("| power-on "); + if(d&0x01) printf("| irq 1 enable\n"); + else printf("| no irq\n"); +} + +static void +data(int d) { + if(d < 0) return; + printf("data: 0x%02x\n", d); +} + +void yyerror(const char *msg) { + fprintf(stderr, "yyerror: %s\n", msg); +} + +int main(int argc, char **argv) { + int fd, c; + const char *devname = "/dev/console"; + + while((c = getopt(argc, argv, "df:")) != EOF) + switch(c) { + case 'd': + yydebug = 1; + break; + + case 'f': + devname = optarg; + break; + + case '?': + default: + help(2); + return 2; + } + argc -= optind; + argv += optind; + if(argc > 0) { + help(2); + return 2; + } + + if((fd = open(devname, O_RDONLY)) < 0) { + perror("open(kbd)"); + return 1; + } + + if(ioctl(fd, KDENABIO, 0) < 0) { + perror("ioctl(KDENABIO)"); + return 1; + } + yyparse(); + + (void)ioctl(fd, KDDISABIO, 0); + return 0; +} + diff --git a/sys/arch/i386/isa/pcvt/Util/kbdio/lex.l b/sys/arch/i386/isa/pcvt/Util/kbdio/lex.l new file mode 100644 index 000000000000..749efaf4610e --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/kbdio/lex.l @@ -0,0 +1,87 @@ +%{ +/* + * Copyright (c) 1994,1995 Joerg Wunsch + * + * All rights reserved. + * + * This program is free software. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Joerg Wunsch + * 4. The name of the developer may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ident "$Header: /cvsroot/src/sys/arch/i386/isa/pcvt/Util/kbdio/Attic/lex.l,v 1.1.1.1 1995/10/07 21:11:26 jtc Exp $" + +#include +#include + +#include "y.tab.h" + +extern YYSTYPE yylval; + +%} + +D [0-9a-fA-F] + +%% + +all { return ALL; } +cmd { return CMD; } +data { return DATA; } +defaults { return DEFAULTS; } +echo { return ECHOC; } +enable { return ENABLE; } +expr { return EXPR; } +help { return HELP; } +id { return ID; } +led { return LED; } +make { return MAKE; } +only { return ONLY; } +release { return RELEASE; } +resend { return RESEND; } +reset { return RESET; } +scan { return SCAN; } +status { return STATUS; } +typematic { return TYPEMATIC; } +what { return WHAT; } + + /* numeric values */ +clklow { yylval.num = 0x10; return NUM; } +ignpar { yylval.num = 0x20; return NUM; } +irq { yylval.num = 0x01; return NUM; } +ovrinh { yylval.num = 0x08; return NUM; } +scconv { yylval.num = 0x40; return NUM; } +test { yylval.num = 0x04; return NUM; } + +{D}({D}*)\. { sscanf(yytext, "%d", &yylval.num); return NUM; } + +{D}({D}*) { sscanf(yytext, "%x", &yylval.num); return NUM; } + +[ \t] { /* ignore */ } + +\n { return NEWLINE; } + +. { return yytext[0]; } diff --git a/sys/arch/i386/isa/pcvt/Util/pcvtdoc/Makefile b/sys/arch/i386/isa/pcvt/Util/pcvtdoc/Makefile new file mode 100644 index 000000000000..ee011f04930f --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/pcvtdoc/Makefile @@ -0,0 +1,4 @@ +MAN4= pcvt.${MAN4EXT} +MANSUBDIR= /i386 + +.include diff --git a/sys/arch/i386/isa/pcvt/Util/pcvtdoc/pcvt.4 b/sys/arch/i386/isa/pcvt/Util/pcvtdoc/pcvt.4 new file mode 100644 index 000000000000..d3bef826d6c3 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/pcvtdoc/pcvt.4 @@ -0,0 +1,906 @@ +.\" +.\" Copyright (c) 1992, 1995 Hellmuth Michaelis, Brian Dunford-Shore, +.\" Joerg Wunsch and Holger Veit. +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Hellmuth Michaelis, +.\" Brian Dunford-Shore, Joerg Wunsch and Holger Veit. +.\" 4. The name authors may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" @(#)pcvt.4, 3.30, Last Edit-Date: [Fri Jun 30 20:15:30 1995] +.\" +.\" Man page pcvt(4) created after pcvt_ioctl.h on 13-Jan-93 +.\" by Joerg Wunsch +.\" +.\" updated for rel 2.10 (-hm) +.\" updated for rel 2.20 (-hm) +.\" updated for rel 3.00 (-jw) +.\" updated for final rel 3.00 (-hm) +.\" removed references to 386BSD (-hm) +.\" +.Dd February 27, 1994 +.Dt PCVT 4 +.Sh NAME +.Nm pcvt +.Nd PC console virtual screen system +.Sh SYNOPSIS +options +.Do +.Em PCVT_FREEBSD = version +| +.Em PCVT_NETBSD = version +.Dc +.br +.Op options Dq Em PCVT_NSCREENS = number +.br +.Op options Dq Em PCVT_XXXX +.Po +see +.Sx Configuration +below +.Pc +.Pp +device +.Em vt0 +at +.Em isa? +port +.Dq Em IO_KBD +.Em tty +irq +.Em 1 +vector +.Em pcrint +.Sh DESCRIPTION +.Ss Overview +The +.Nm pcvt +driver provides a virtual screen system with several additional +features not available in +.Xr pc 4 +standard console device driver. Besides the ability of handling +multiple virtual screens, +the probably most important is an emulation of a wide range +of DEC VT-220 +.if t \(tm +.if n (TM) +functionality. See +.Sx Features +for a detailed description. + +.Ss Features +.Bl -bullet +.It +Almost full DEC VT220 +.if t \(tm +.if n (TM) +functionality +.Po +moving towards VT320 +.if t \(tm +.if n (TM) +.Pc +.It +Completely independent virtual terminals for MDA/HGC/CGA/EGA and VGA +.It +25, 28, 35, 40, 43 or 50x80 screen resolution for each virtual screen +.It +Fully remappable keyboard to support national keyboards +.It +All VT220 character sets plus ISO Latin-1 and DEC technical supported +.It +VT220 downloadable character set supported when run on EGA/VGA +.It +VT220 user defined keys for each virtual terminal +.It +Optional function key label support +.if t \('a +.if n 'a +la Hewlett-Packard +.It +Display function codes functionality +.It +Support for MDA, CGA, EGA and VGA display adaptors +.It +Support for 132 column operation on VGA chipsets +.It +X Window Support for XFree86 >= 1.2 using the pccons model, or +for XFree86 >= 2.0 using the syscons model +.Po +requires +.Em PCVT_USL_VT_COMPAT +to be configured +.Pc +.El + +What it cannot: +.Bl -bullet +.It +No double wide/high characters +.It +No softscroll +.It +No inverse background +.It +No VT220 printer output support +.It +No VT52 support at all +.It +No 8-bit controls +.It +Only limited AT-keyboard +.Pq 84 keys +support +.Pq yet +.It +Help you to make money... +.El + +.Ss Configuration +The +.Nm pcvt +console driver is currently available for the Intel-based BSD operating +systems +.Em NetBSD/i386 Pq release 0.9 or higher, +and +.Em FreeBSD Pq release 1.0-GAMMA or higher . +In order to get the appropriate system support, one of the options +.Em PCVT_NETBSD , +or +.Em PCVT_FREEBSD +must be defined in the system's config file +.Pq see Xr config 8 . +In addition, for the +.Em FreeBSD +and +.Em NetBSD +operating systems, it is necessary to set this option to the operating +system's version number. +For +.Em FreeBSD +this version number must be expressed as a 3-digit number. +E.\& g., if you are running the 1.0 release +.Pq which is actually version 1.0.2 , +you should define + +.Em PCVT_FREEBSD = 102 + +For +.Em NetBSD +this version number must be expressed as 9 if you are running NetBSD 0.9 +and anything greater than 9 for NetBSD-current (pre 1.0). It is recommended +to use (as with FreeBSD) 100 for NetBSD 1.0 and 999 for NetBSD-current. +E.\& g., if you are running the NetBSD 1.0 release, you should define + +.Em PCVT_NETBSD = 100 + +The +.Nm pcvt +driver has been designed to be highly configurable in order to satisfy +everyone's needs. The preferred way for those configurations is to +provide appropriate +.Em options +lines within the config file, possibly overriding the built-in default +values. Therefore it is possible to compile several distinct kernels +with different driver behaviour on a single machine. + +The following list gives a short overview of the available configuration +options. Refer to the file +.Pa i386/isa/pcvt/pcvt_hdr.h +in the kernel source tree for detailed documentation. + +Note: the following conventions apply to all the Boolean options. +If an option is given with no value, a value of 1 +.Pq activated +is substituted. If an option value is given as 0, this options is +deactivated. Any other value is substituted by 1, too. If an option +is omitted, a built-in default is assumed. + +.Bl -tag -width indent -compact + +.It Em PCVT_NSCREENS +Defines the number of virtual screens. +.br +Default: 8 + +.It Em PCVT_VT220KEYB +If activated, a keyboard layout resembling a DEC VT200 (TM) is generated. +If deactivated, a mixture between VT220 and HP is used. See the files +.Pa Keyboard.VT +and +.Pa Keyboard.HP +in the +.Nm pcvt +documentation directory for a full description. +.br +Default: off + +.It Em PCVT_SCREENSAVER +Enables the builtin screensaver feature. +.br +Default: on + +.It Em PCVT_PRETTYSCRNS +If enabled, a blinking-star screensaver is used. If disabled, the screen +is simply blanked +.Pq which might be useful for energy-saving monitors . +.br +Default: on + +.It Em PCVT_CTRL_ALT_DEL +If enabled, the key combination +.Aq Em Ctrl +.Aq Em Alt +.Aq Em Del +invokes a CPU reset. +.br +Default: off + +.It Em PCVT_USEKBDSEC +Do NOT override a security lock for the keyboard. +.br +Default: on + +.It Em PCVT_24LINESDEF +If enabled, the 25-line modi +.Po +VT emulation with 25 lines, and HP emulation with 28 lines +.Pc +default to 24 lines only to provide a better compatibility to the +original DEV VT220 (TM). Thus it should be possible to use the +terminal information for those terminals without further changes. +Note that this is a startup option; it is possible to toggle between +the 24- and 25-lines' display by the +.Xr scon 1 +utility. +.br +Default: off + +.It Em PCVT_EMU_MOUSE +Emulate a three-button mouse via the keypad. Useful for notebooks when +running XFree86. See +.Sx Mouse emulation +below. +.br +Default: off + +.It Em PCVT_META_ESC +If enabled, a sequence composed of +.Aq Em esc , +followed by the normal key code is emitted if a key is pressed with the +.Aq Em Alt +key modifier. If disabled, then normal key code with the value +.Em 0x80 +added is sent. +.br +Default: off + +.El + +Note that there are further options available which are mainly used for +debugging purposes or as a workaround for hardware problems. They are +found in +.Pa i386/isa/pcvt/pcvt_hdr.h +along with their documentation. + +.Ss Internal Functions +The functionality described below may be accessed via +.Xr ioctl 2 +system calls with a file descriptor opened on a device node +related to the +.Nm pcvt +driver. +To make use of them, a program should contain the following line: + + +.Dl #include + +Any parameter definitions cited below can be found in that file. + + +.Em Keyboard related functions + +Three functions are related to basic keyboard hardware: + +.Bl -tag -width 20n -offset indent -compact +.It KBDRESET +reset keyboard, set defaults; +.It KBDGTPMAT +get current typematic value, parameter is a pointer to int where +the values is stored to; +.It KBDSTPMAT +set current typematic value, similar to above command. +.El + +Symbolic values are available for the appropriate constants. +To specify the initial typematic delay time, they are +KBD_TPD250 for 250 ms through +KBD_TPD1000 for 1000 ms, in steps of 250 ms. The typematic repeat +rates are +KBD_TPM300, specifying 30.0 characters per second through +KBD_TPM20 for 2.0 characters per second. The intermediate values +are: 30.0, 26.7, 24.0, 21.8, 20.0, 18.5, 17.1, 16.0, 15.0, 13.3, +12.0, 10.9, 10.0, 9.2, 8.6, 8.0, 7.5, 6.7, 6.0, 5.5, 5.0, 4.6, 4.3, +4.0, 3.7, 3.3, 3.0, 2.7, 2.5, 2.3, 2.1, 2.0 characters per second. + + +.Bl -tag -width 20n -offset indent -compact +.It KBDGREPSW +get key repetition switch, and +.It KBDSREPSW +set key repetition switch +.El + +again take a pointer to int as argument. They manipulate the +drivers internal keyboard repetition flag, possible values are: +KBD_REPEATOFF or KBD_REPEATON. + + +.Bl -tag -width 20n -offset indent -compact +.It KBDGLEDS +get LED state, and +.It KBDSLEDS +set LED state manipulate the keyboard indicators, but do not influence +the drivers idea of lock key state. +.El + +The int where the argument points to +may have the values +KBD_SCROLLLOCK, KBD_NUMLOCK, KBD_CAPSLOCK, which may be used in any +conjunction. + +.Bl -tag -width 20n -offset indent -compact +.It KBDGLOCK +gets state of SCROLL,NUM,CAPS, and +.It KBDSLOCK +sets state of SCROLL,NUM,CAPS + LEDs +.El + +should be used in a same manner to get/set the drivers internal +LED flags. + + +.Em Keyboard remapping + +One important feature of the +.Nm pcvt +driver is its ability to overload the built in key definition. + +.Bl -tag -width 20n -offset indent -compact +.It KBDGCKEY +get current key values, +.It KBDSCKEY +set new key assignment values, and +.It KBDGOKEY +get original key assignment values +.El + +arrange those functions. The take a pointer to a +.Em struct kbd_ovlkey +as argument as described below. In addition, + +.Bl -tag -width 20n -offset indent -compact +.It KBDRMKEY +removes a key assignment, taking a pointer to an int as argument which +contains the affected key number; +.It KBDDEFAULT +removes all key assignments. +.El +.Bd -literal +struct kbd_ovlkey /* complete definition of a key */ +{ + u_short keynum; /* the key itself */ + u_short type; /* type of key, see below */ + u_char subu; /* subtype, ignored on write */ + char unshift[KBDMAXOVLKEYSIZE+1]; /* emitted string, unshifted */ + u_char subs; /* subtype, ignored on write */ + char shift[KBDMAXOVLKEYSIZE+1]; /* emitted string, shifted */ + u_char subc; /* subtype, ignored on write */ + char ctrl[KBDMAXOVLKEYSIZE+1]; /* emitted string, control */ + u_char suba; /* subtype, ignored on write */ + char altgr[KBDMAXOVLKEYSIZE+1]; /* emitted string, altgr */ +}; +.Ed + +The appropriate values for the +.Em type +field are: + +.Bl -tag -width 20n -offset indent -compact +.It KBD_NONE +no function, key is disabled, +.It KBD_SHIFT +keyboard shift, +.It KBD_META +alternate shift, sets bit8 to ASCII code, +.It KBD_NUM +numeric shift, keypad numeric / application mode, +.It KBD_CTL +control code generation, +.It KBD_CAPS +caps shift - swaps case of letter, +.It KBD_ASCII +ASCII code generating key, +.It KBD_SCROLL +stop output, +.It KBD_FUNC +function key, +.It KBD_KP +keypad keys, +.It KBD_BREAK +ignored, +.It KBD_ALTGR +AltGr translation feature, +.It KBD_SHFTLOCK +shift lock, +.It KBD_CURSOR +cursor keys, and +.It KBD_RETURN +.Dq Return +or +.Dq Enter +keys. +.El + +The +.Em subtype +field contains one of the values + +.Bl -tag -width 20n -offset indent -compact +.It KBD_SUBT_STR +key is bound to a string, or +.It KBD_SUBT_FNC +key is bound to a function. +.El + +.Em Mouse emulation + +The mouse emulator +.Pq if configured in +fakes a three-button mouse using the Mouse Systems protocol. The first +.Nm pcvt +device node not used by a virtual screen is the mouse device. I.\& e., +for the default value of 8 virtual screens, +.Pa /dev/ttyv0 +through +.Pa /dev/ttyv7 +would refer to the virtual screens, and +.Pa /dev/ttyv8 +were the mouse emulator device. The mouse emulation is turned on by +pressing the +.Aq Em NumLock +key. The pointer is moved by the numerical keypad keys, into the +obvious directions. The pointer is initially moved in single steps, +and is accelerated after an adjustable time +.Pq default: 500 ms +by about 6 times. The mouse buttons are emulated by three normal +keys, by default the function keys +.Aq Em \&F1 , +.Aq Em \&F2 , +and +.Aq Em \&F3 . +There are two selectable flavors available: normal and +.Dq sticky +buttons. Normal buttons behave as expected. +.Dq Sticky +buttons are notified as button-press on the first keypress. They +.Dq stick +until the key is pressed again +.Pq or another button-emulating key instead . +Button presses and releases are notified to the user by a simple +.Dq pling , +or +.Dq plong , +respectively, generated from the PC's built-in speaker. + +The following commands control the emulation. + +.Bl -tag -width 20n -offset indent -compact +.It KBDMOUSEGET +get the current definitions, and +.It KBDMOUSESET +set new definitions. +.El + +Both accept a +.Li struct mousedefs * +as the third argument to the ioctl call: +.Bd -literal +struct mousedefs { + int leftbutton; /* (PC) scan code for "left button" key */ + int middlebutton; /* (PC) scan code for "mid button" key */ + int rightbutton; /* (PC) scan code for "right button" key */ + int stickybuttons; /* if true, the buttons are "sticky" */ + int acceltime; /* timeout in microseconds to start pointer */ + /* movement acceleration */ + /* defaults to: scan(F1), scan(F2), scan(F3), false, 500000 */ +}; +.Ed + + +.Em Downloadable character set interface + +EGA and VGA video adaptors provide the capability of downloadable +software fonts. Since the +.Sq native character set +of any IBM-compatible PC video board does not allow the full interpretation +of DEC multinational character set or ISO Latin-1 +.Pq ISO 8859-1 , +this might be very useful for a U**X environment. + +.Bl -tag -width 20n -offset indent -compact +.It VGASETFONTATTR +set font attr, and +.It VGAGETFONTATTR +get font attr +.El + +are used to manipulate the drivers information about a downloaded +font. The take a pointer to a +.Em struct vgafontattr +as argument: +.Bd -literal +struct vgafontattr { + int character_set; /* VGA character set */ + int font_loaded; /* Mark font loaded or unloaded */ + int screen_size; /* Character rows per screen */ + int character_scanlines; /* Scanlines per character - 1 */ + int screen_scanlines; /* Scanlines per screen - 1 byte */ +}; +.Ed + +Each character of each font is to be downloaded with + +.Bl -tag -width 20n -offset indent -compact +.It VGALOADCHAR +load vga char, +.El + +taking a pointer to +.Em struct vgaloadchar +as its argument: +.Bd -literal +struct vgaloadchar { + int character_set; /* VGA character set to load into */ + int character; /* Character to load */ + int character_scanlines; /* Scanlines per character */ + u_char char_table[32]; /* VGA character shape table */ +}; +.Ed + +The field +.Em character_set +takes the values +CH_SET0, CH_SET1, CH_SET2, CH_SET3 on EGA's or VGA's. Since VGA's +might have up to eight simultaneously loaded fonts, they can take +CH_SET4, CH_SET5, CH_SET6, or CH_SET7, too. + +Note that there's a dependence between the font size +and a possible screen height +.Pq in character rows , +depending on the video adaptor used: +.Bd -literal +Screen size (rows) on: EGA VGA +Font size + +8 x 8 43 50 +8 x 10 35 40 +8 x 14 25 28 +8 x 16 not 25 + applicable +.Ed + + +.Em General screen manipulation commands + +.Bl -tag -width 20n -offset indent -compact +.It VGACURSOR +sets cursor shape, +.El + +taking a pointer to the following structure as argument: +.Bd -literal +struct cursorshape { + int screen_no; /* screen number for which to set, */ + /* or -1 to set on current active screen */ + int start; /* top scanline, range 0... Character Height - 1 */ + int end; /* end scanline, range 0... Character Height - 1 */ +}; +.Ed + +.Bl -tag -width 20n -offset indent -compact +.It VGASETSCREEN +set screen info, and +.It VGAGETSCREEN +get screen info, +.El + +provide an interface to some general driver internal variables +which might modify the behaviour of the screens, +or which might simply be used to force the driver to switch +to one certain screen. Their argument is a pointer to the structure: +.Bd -literal +struct screeninfo { + int adaptor_type; /* type of video adaptor installed */ + /* read only, ignored on write (yet!) */ + int totalfonts; /* no of downloadable fonts */ + /* read only, ignored on write */ + int totalscreens; /* no of virtual screens */ + /* read only, ignored on write */ + int screen_no; /* screen number, this was got from */ + /* on write, if -1, apply pure_vt_mode */ + /* and/or screen_size to current screen*/ + /* else to screen_no supplied */ + int current_screen; /* screen number, which is displayed. */ + /* on write, if -1, make this screen */ + /* the current screen, else set current*/ + /* displayed screen to parameter */ + int pure_vt_mode; /* flag, pure VT mode or HP/VT mode */ + /* on write, if -1, no change */ + int screen_size; /* screen size */ + /* on write, if -1, no change */ + int force_24lines; /* force 24 lines if 25 lines VT mode */ + /* or 28 lines HP mode to get pure */ + /* VT220 screen size */ + /* on write, if -1, no change */ + int vga_family; /* if adaptor_type = VGA, this reflects*/ + /* the chipset family after a read */ + /* nothing happenes on write ... */ + int vga_type; /* if adaptor_type = VGA, this reflects*/ + /* the chipset after a read */ + /* nothing happenes on write ... */ + int vga_132; /* set to 1 if driver has support for */ + /* 132 column operation for chipset */ + /* currently ignored on write */ +}; +.Ed + +Its field +.Em pure_vt_mode +may take the values M_HPVT for a mixed VTxxx and HP Mode, with function +key labels and a status line, or M_PUREVT for only VTxxx sequences +recognized, with no labels. + +.Bl -tag -width 20n -offset indent -compact +.It VGASETCOLMS +sets the number of columns for the current screen, +.El + +its parameter is a pointer to an integer containing either a value of 80, +or a value of 132. Note that setting the number of columns to 132 is +only supported on VGA adaptors. Any unsupported numbers cause the ioctl +to fail with +.Em errno +.Pq see Xr intro 2 +being set to +.Em EINVAL . + +.Em VGA color palette interface + +Only on VGA adaptors, there's a color palette register at the output. +It is responsible for the red, green and blue output voltage provided +for each of the 256 internal color codes, each lying in the range of +0 through 63 (with 63 representing the brightest value for a base color). +Thus, these adaptors map each color code to a color of a +.Dq palette +out of 262144 colors. The commands + +.Bl -tag -width 20n -offset indent -compact +.It VGAREADPEL +read VGA palette entry, and +.It VGAWRITEPEL +write VGA palette entry +.El + +establish an interface to these palette registers. Their argument is +a pointer to: +.Bd -literal +struct vgapel { + unsigned idx; /* index into palette, 0 .. 255 valid */ + unsigned r, g, b; /* RGB values, masked by VGA_PMASK (63) */ +}; +.Ed + + +.Em Driver identification + +.Bl -tag -width 20n -offset indent -compact +.It VGAPCVTID +returns information if the current compiled in driver is pcvt and it's +major and minor revision numbers. the call is taking a pointer to the +following structure as argument: +.El + +.Bd -literal +struct pcvtid { +#define PCVTIDNAMELN 16 /* driver id - string length */ + char name[PCVTIDNAMELN]; /* driver name, == PCVTIDSTR */ +#define PCVTIDNAME "pcvt" /* driver id - string */ + int rmajor; /* revision number, major */ +#define PCVTIDMAJOR 3 + int rminor; /* revision number, minor */ +#define PCVTIDMINOR 00 +}; +.Ed + + +.Bl -tag -width 20n -offset indent -compact +.It VGAPCVTINFO +returns information if the current compiled in driver is pcvt and it's +compile time options. the call is taking a pointer to the following +structure as argument: +.El + +.Bd -literal +struct pcvtinfo { + u_int opsys; /* PCVT_xxx(x)BSD */ +#define CONF_UNKNOWNOPSYS 0 +#define CONF_386BSD 1 /* unsupported !!! */ +#define CONF_NETBSD 2 +#define CONF_FREEBSD 3 + u_int opsysrel; /* Release for NetBSD/FreeBSD */ + u_int nscreens; /* PCVT_NSCREENS */ + u_int scanset; /* PCVT_SCANSET */ + u_int updatefast; /* PCVT_UPDATEFAST */ + u_int updateslow; /* PCVT_UPDATESLOW */ + u_int sysbeepf; /* PCVT_SYSBEEPF */ + +/* config booleans */ + + u_long compile_opts; /* PCVT_xxxxxxxxxxxxxxx */ +}; +.Ed + + +.Em Screen saver + +Depending on the configuration of a +.Nm pcvt +driver, their might be a simple screen saver available. It is controlled +by the command + +.Bl -tag -width 20n -offset indent -compact +.It VGASCREENSAVER +set timeout for screen saver in seconds; 0 turns it off, +.El + +taking a pointer to an integer as argument. Despite of its command name, +this is available on +.Em any +kind of adaptor if configured in by the +.Xr config 8 +option +.Dq PCVT_SCREENSAVER + +.Em Compatibility commands for USL-style VT's + +Release 3.00 of this +.Nm pcvt +driver supports a subset of the USL-style commands used to control +the virtual terminal interface. This feature is mainly intended to +allow +.Em XFree86 , +release 2.0 or higher, to switch between virtual screens even when +running an X server. They are ugly with respect to the implied semantics +.Pq i.\& e., they break Berkeley semantics +and are therefore not recommended for common use. See the file +.Pa i386/include/pcvt_ioctl.h +for their documentation. + +.Sh FILES +.Bl -tag -width /usr/include/machine/pcvt_ioctl.h +.It Pa /usr/include/machine/pcvt_ioctl.h +Definitions for +.Xr ioctl 2 +function calls +.It Pa /dev/ttyv? +.It Pa /dev/console +Device nodes to access the +.Nm pcvt +driver +.It Pa i386/isa/pcvt/pcvt_hdr.h +.Pq relative to the kernel source tree +Documents the various compile-time options to tailor +.Nm pcvt . +.Sh HISTORY +The +.Nm pcvt +driver has been developed for and contributed to 386BSD release 0.1. Since +release 3.00 explicit support is provided for NetBSD 0.9. It is expected +that no further development on pcvt is done for 386BSD 0.1 after release 3.00, +in fact, 386BSD support was dropped with release 3.20. +.Sh AUTHORS +.Bl -tag -width 30n -offset indent +.It Written by : +Hellmuth Michaelis +.Pq hm@hcshh.hcs.de +.It With much help from : +Brian Dunford-Shore +.Pq brian@morpheus.wustl.edu +.br +.if n Joerg Wunsch +.if t J\(:org Wunsch +.Pq joerg_wunsch@uriah.sax.de +.br +.It This driver is based on several people's previous +.It work, notably by : +William Jolitz' and Don Ahn's +.Xr pc 4 +implementation +.Pq ljolitz@cardio.ucsf.edu +.br +Holger Veit +.Pq veit@du9ds3.uni-duisburg.de, now veit@first.gmd.de +.Sh SEE ALSO +.Xr pc 4 , +.Xr config 8 , +.Xr intro 2 , +.Xr ioctl 2 . +.Sh BUGS +Certainly existent. See the file +.Pa BugList +in the Documentation directory for an up-to-date list. + +.Ss Tested Video Boards +.Bd -literal +Manufacturer Chipset Monitor + +2theMax (?) ET4000 VGA Color +Video7 Inc. Video 7 VGA Color +Diamond Stealth VRAM S3 NEC 3FGx +Trident TVGA 8800CS NEC 3D +Data General C&T P82C604 VGA Color +NoName Hercules W86855AF Mono +Kyocera (Mainboard) WD90C11 Sony Color +unknown ET3000 NEC 3D +.Ed + +.Ss Tested Keyboards +.Bd -literal +Manufacturer Type Layout + +Cherry MF II US +Cherry/Tandon MF II German +Hewlett-Packard MF II US +Hewlett-Packard MF II German +Tatung AT German +.Ed + +There is absolutely NO support for the ancient PC-keyboards +.Pq they had 83 keys . + +There is only limited support for AT-keyboards +.Bo +they have 84 keys, and a separate numeric keypad, +they don't have F11/F12 keys +.Bc +because the emulator needs F9 through F12 for control functions, and due to +the current design of the keyboard driver there is no +.Pq full +support for national keyboards because +of the lack of an ALtGr key. + +MF-keyboards are fully supported, 101- and 102-key versions.