From 53d918625e7c5e1e9da827755449d6a901e6d302 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Mon, 29 Jun 2015 00:54:59 -0500 Subject: [PATCH] input fully ported!! it is a bit buggy but it works!! modified: 16.LIB modified: GFX.LIB modified: emmtest.exe modified: emsdump.exe modified: exmmtest.exe modified: fmemtest.exe modified: inputest.exe modified: palettec.exe modified: src/inputest.c modified: src/lib/16_in.c modified: src/lib/16_in.h --- 16.LIB | Bin 76288 -> 76800 bytes GFX.LIB | Bin 28160 -> 27136 bytes emmtest.exe | Bin 32680 -> 32616 bytes emsdump.exe | Bin 30994 -> 30930 bytes exmmtest.exe | Bin 54824 -> 54842 bytes fmemtest.exe | Bin 25482 -> 25450 bytes inputest.exe | Bin 37049 -> 35680 bytes palettec.exe | Bin 33666 -> 33602 bytes src/inputest.c | 41 ++++++--- src/lib/16_in.c | 240 ++++++++++++++++++++++++++++++++---------------- src/lib/16_in.h | 175 +++-------------------------------- 11 files changed, 202 insertions(+), 254 deletions(-) diff --git a/16.LIB b/16.LIB index 45f43dea12a9473ab4d108992b6fd7885d20f8f9..4899d50af9a6051789d77e3befb67055b6d227f2 100644 GIT binary patch delta 15259 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 QTZwP2iXOIkHbjp9UvdF%q5uE@ delta 15112 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 diff --git a/GFX.LIB b/GFX.LIB index 30582814bf73bc28f0cebb0d5d447ac30285f027..8eac230995b237105220429997f900b802b27acf 100644 GIT binary patch delta 9168 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 delta 9534 zcmb_i3w%_?)t^Up_ujpCLt+RC?<5ci352`|NO**&yaQxO6eD4i>?I+|Zrm)8pnQwg z(na~IcrCubA5pCMz>2ZO0`)~Ksamkw(o$^IuhiDhinQXZMeYCG-6aV{Yk%Lj`|>rwW8G@Xw~#AI`cJ$1@l@YVJHhC1e8VZLPNK-Rsyf_GI{ z@a~oh(Y3Kcbl+JayB@5N&pj2-wDoH|<=)_8f1S6Q{n32Po)MbE?5(JSd+|_6qaG1b z2wbt<&R9BrZ%gmy%_s_XBPnU@r!s6X;NhLgtXrvw>l)_fU1>;{BbB&$zYZs}`yuuu z(%5a#fGTL4;|qEN)$Hxv2hC!~yE%9$Y>Vr&7v1sO|o|U5LT}Z8Fm3n3%A&s|q)_ALf zY&wWA{}@kxms#taoI<(AM|hlI@z5a57kNGFk@u8yOeW=Z^A^Z9X2K3$!?5$*fH$}< z;A7%es|n*%Q)nNRl_7f=H#l3rQ)OKYqb%HfH0iPsIc}s!IvmVSfc=BmpQ7p&pg!Mr z8S7^a{t|Cna4D3`t7f;DE6Ya=$dwnZzzbdmrawL2=c=T(7Q1=(ayQ>%=IcjCB(iv` zuJU^S2CA!?9qKs9?9@=0zlbL~Hr6$M2KA|+M)B1*y_pye)<>E?BonuLu;$SoHu(Ri3YZIyv`anfm~CncG_ zgdu~im2dz#HKN6mB2BI3G_do*gn^tNF`rE=x~kVmMB2E}L^t1nmYXBoddB4K86rZ| z`kVX#ixFqFve3rZ^Or)>2+UHm{jw3EOsGhXgVt5gdSkS} zERrnG%N~Tb7CGB%c-A#pHo?eXEoRJ0EaU0J$zv~~VT%=;ert3s&QgzWsSO6fn#{DM z{<$<_7JpWg*ArOoUDM$Av5zoi@TB(P9nUj6X&r`QtQoUWlT;X@J)s~5{Tvf8n3BO6n-2s+FG z{ZEA)aC+<^RGq-7!ERpDjP*%#qa&xAx3&ZtP#Q+q!cM>&nLxE<~D)GzDoE(i}H8TauI2C1}_{iQ78AoBR{56AbfL@x)M7 zrsPfjI-9c8<;|q5aU75SabqwSVNRok;?JiPCtOtg{!T~gejXa?pzigu&HycpsCfp! z@3GGS443*JnWsR+cI^==He8CO!3I=X6qk&)A0c0|0-daM^G&okUxRXO$o_QO0G8D3 zHzy8C(TTQY8;1T=)r8@r#`<)*XLM#bsS%p>wXA|93|&vyVq>37p!D+68YWmQjI6 zx^1k@SOJi2%Z6s`1kMdzsVF=MDIIBqo3~TPH=_DV$ob8t!38>@Fz><>U4CS6;WwV# zBPdc}y8=yxIrSRFQ-)mbh>X}~vvSA>Ax*^)qvEJ{`+uHWA8KE2E5$UvOLMylU0m(v zjnu`TQukDN3$?R*=#yOcLp03Oams*}TZT`J&MQunq+LYiR?^hkBCyCv)#k{~LH?Oc zFG@uWF)l(yrjfGk5k_>PiK7t5NJE=T?UO9K8bgPb_=@DNapsh?MWL&CvaOmAv(@l) zo0n(X3_jMjmgm}1?=sAfxX8daZy5lUG*Qf?YPR>~A9b7Wktd19oOqyL#{e4=?x z=Fq7FdrCKXTI4^P<6o{YS# zOOMWR2sAiuuqHZ7vxLuQBXyEt!Jr1jD>gw_3h?)VNR$2C$nOm=drWA4fLqI_L=mLHZ&jHWF;} zF{AI9?`CVh3sBeVj?s#t0=(n+vx6D=KxZ78ijfC!*70|Tk!gXm$Quvznd39)hfkRE zGv?gUmG;ZQ#kf5%x^R$H=@!t1id!+h4X|8Uj!9#;nrBCkR40J(9i;2bp;=-5f;utN?I&#E0$5`>1W1RTABUhv zxmuXYDzQVU7WXTw#rGAD*splS0p(s(%Sq3gf-Y@Qjw{9j08=p)X1IY4C*hcp02iO1x^k1aMwCADIz*yj97(u~`FcfP>UAmIJ0z)(O=vo!{%+ zI(7x;{mnPWWopwQRHV*=&=1XixkFS1bSct%W>IdAPKb8pI-2Fi-24!2?FrV)ST}E= zN;g5Gn_o*WGEooixi)&xiu!SbL#JixCmLRZX-!^u4ffD$uKXb?FizrehkA#~j6VSF zQg;Ep542C+2LuJ|ht(xJOIYXN@fr^q;>XGw@vKrWx|Ox!C8bduSN!6aN>IG1tP_7y z){FO)4dP>^O`KP*6GFXSsOlyWuihy7tKSlX)SJW@H7s(~t)fW1Sh5(cRV1)7kOP$-DMqWSolkGq-5w^q}pFgGF8PrsW z{KVY{8Fx6%Z3TIqkK~7WYR6%wHemGfs$|^oywx&pa9$nI9CLo*_d|S}&eYoaM(dTM znmyVPVs@&$}E~Ndh@M-Uh>$Ja$ZQ2=en|4k-pnWX%YM+UH+9zVa_IL4P?Q`*r zmL-pAx$=ZIUY^$S<-1y;{6s63Uuc(0hdx=l^b(n%PnCo8X);rvE=TL7GFzW1^YmG= zM4v6E>Q~6w`T{v$UntA;MRK{mM0)iyIc%+d-8O~U0v=yoHLImS0L@L9D+%bF*Sv3H zUXHbGI6&LE~Pq#me5*_qmL}p^f+Tv(OeBeur>9 zIsHF~mL(`GKGY z5}N?aBKC)14+51=Yy!**2E7ILU{Hm`Ccs9K^sm7l0;+`A1Xw1qy$N)h0r{Bu+LY%* zOJ$S3O#1b5*`~YYCVhnr=~u~{^lRi@`YO3gUoCg*9{HGFBM<0x@>jYc-_(8b9es^_ zS8tW?>+9rMy-l9i*Gu8rC{a7*AL`5*OT(Rt5dT01JW6PQ1*|XX68-Xt&_50-i#-v z@r`NOX-(9b`2O*R2f!Kcj7Q`Ks6SZ9U|Y>m)AL6A!0Do{6JW1*gqb=VdytgVWn7uu zG+5dz)1@44Hct=mljd8~y_3m;`>xqM%bH@I(i$~OpwiP2oQdcxo#gP5ouN`2w~-F7 zn_FjO*mj|zedZH0R@+4Utt-}=PgE}5pC)-|b2j^?G4opGUqk-?Y23Y5?;Al6U3|IF zJMP{StN+h01imV|e^GEhr-tqkE=2eL-3>-^(HDL7|2p;i-T>syX;UWPz=9iqw{Qbc zt{lTOA^N`n(f@pN%G_3d$b4dMa^}C>0bF84tQ&!Gn`1Wu6L2Fi4>tnK-0|xu{{Lgt ze5v?7c9@^f9~n9e1b(d#fyIK1 zohS;*ssuAZRf9B|JeafMj0YmQ_1H9V(!d-<#Zh@HjRr0rq9W^jYy5~^VmhZ}klC;y zGzh;$b>-;j2v{7QmzX`#EV?G&d|Xw{-!6C{M0pyYJAcs}_BuopI58rx5$Iy$Do_cW z3@7^-VDErx0Q7~>SwYMiqSqfqJu?~$s7B;_0;)81%zGiC8f0x&ThvT9nF?afXwdgN z(1rs+Ne5eqg8;xnd=c2DfZ2nHB0YrkIMNetK8L(E$+9b`?>C`C3aFoSdKTTlb%J5O z6;Dj%nZ*TV)VY6YDvbQAaCv650^GzNWJUns0eqpycK{!v%q;*1@ug3gBMR8YkD2}@ zV{BJ}5#PCMNxn#W1~PqL$euReUYfLsdT3D4?-h10H$H*X`}pFO1*}ng6lca5paLG? zMt^`Ad1MGm;PZ5v=7uShm`FSCb;PT(}=*;@g7 zPaI_xb6*fgSFGIF%mt%C&e+TaV^PqU6TlLPOy#5usuosb)!+@H_xY$Y%xPp0`NG1H zX6Et6pbS$pNn}~7o9TI716u`&tZufV3$Xb~ut*aTQ=$1tYS~3>UMYE0cOEm{n zX4qZ=??!WKrLXrXq2-&M5~AB(t>gc2N{H2=_1$H^_LOj8o9$cX>vrb<^k7li`>zJy z@MO{FV1fStAczCw)-`_Ey8qvPRf%#tM!TN|vvb9znD1S6OUWT@+u)I*;7JqDE_F59 z+n8e`M*k5gxgl~QaGsvvR&XNFa3XNEKh^jD0f(9GE6xYw;v@I_k?ranqwOk0{|SIA zZO02FZBPlE?#EK&vMsiC;Z0jYwsm^wegBaMfeTK2Qbw^wMwgERYtH(c!0HO_hh^L7 zh93J(M5yOd1T@aSC$S`KGa>OEq;H$ks?u`^U36IjR|e%M1Fu&$MdkO94DLzwnt|p6 zRhM~lF{-_t74_hPf(3mQ#BLeYCFYunGa~Xmy9^1?$XNd;fv5Tn=tOhSHGf$?6)h!j zY7e(FXta?SeS8IPB<+l?;A_msj4;4>)_`pQpn_Fn8vs~^uk|@s#ArOrm{MlS9BJx9>KlS zkc)YaDtI-h6YOJVtOWP~UwjtR_81SJn}C#pG|Or8>%%l~LPIg~QROx5Hqzxo^A|OPmAmlo z4}89BI^zd@1HXS^sbtkIcAf3x_iwCS)!XAO)?dR6+HKSELGd^etYNKd+zp@|7M;& zEf1fP11AFV8TunIRhCmuut1hlWw5}0v0sSqB$>fHDQRP{KyNG-f>sAJXkT!=tr?1w zWOW7&20gZ$p_#1Z4@x04!9%m31}-maZ)-2Usy%KlZLbUj8Y>$b{pGZ<_Fa1mSot;O z*ZE`>)z)SCFM{Dc841T=k8D5&qZt;vC=f;yKt3LfetC)m?;@(3)^`^So-tNn$XuR+ zdxW$oY4^bAV=0C7o8d&#j0w4teT~0hFBK2##`^#(@Cf4*pfny~8~_@`BaEMcsLk? zK1Uv*V14$u0Yvu8Rmdp^Xm$OS*=#U6p}(%biyHm%Rp!#Pv)-SL=7jMI^w0G}isN3u z$%dlIiaQDYxIV=uge%qAu}nA+AHX)qK}k0?FaEp|#&z!@ljQc=-Zxaq924J_l?84{*DzldX-43+Qz7FVKp#Ap! zcGaK6tdaYR#-a*Nb~bm6)&Fd?S`mSWOvhq}aTRw87^ZUzcRkU7haaGWlxO)}%By(w^){^Pm=}0r%43`b=7nFN8 zmK^Rsw$8ZGnpjQe^19`){j-@X)+%+>&CEiAUG76FS=>stbm7cVYnyO6;m#V%Q`~F0 zzqzn@RQEk_DI8m&+<7a|>ZG>f8Kcc?8eH1OCX{=E-LYq>wh}x08}XO7waw4!I|AHj zhGKD}(~MSx5+T8NZ8X$@n-ya>{_!H>?=V(8A5>+aI%aeVzKtpa&0$mU-BY_N9K($* zbU2nrI^$th_)@`Vbu69;MIzy4f^QBO$~(<)P1s0?W147Y1K7@`f^P;W^b)JO*6gt%DNHqBU)kl z`c{tQjhb^2B{|29?E2VIn#&1}u^1Xw12M(FbUmB#5)K>I4sW7EYkk@`IdnmHu5^>X+b7pi zYqwWEMO~2l=s{Q((5~(h`6>Mdyo4tAc;(YHx5uX)olGlxa%CRf-Q%t4nZm6GtGLAZ z!|LGc4w@!BkW!r1-9loVahNn__zxyr0%v|0+ImA}wQw3GEbm`o|NEWw@<8t|ntl)` F`ft>pHgNy| delta 2842 zcmai0X>3$g6u$TIW^IAN7I33O0Vz}K*fLZ$4I(XCp=0fowv?$jl=mt!OL;RLC?!-u zP4$O}$6%CNt^QGiMuKQ0kW>&PF&bmUxW}a~F)A3BP$lAb?$d(W!hP+T@0{3wfNh1Zg|b;T=3jAyz+Ujc}=#lzE{dk>)Iyc^EB<{e+N zDr#&Xvt)0@+VD*Up;A0kaGKKK%&B z?3Ra_>!Y69;KV-WUW5OEKA@5;n_9D4xX{0uHMts=3^kga|oBY8NliE zIEC2_G|xE?=s}>(&doqQK*yZNoT|QYm^E_mt1GSGWM^_G+5OMPs}=E~N4~4sW%6EL z=c;h2JS#a5)+D&Bq)^FjLBMiJx7iHvsp|_{_6^JWsB>9KvprlS6SFdiso~Cyu4Xpe z=wBm2p8E;6`4K?7yWK6!uYk6>ce+&_byz*FL$AML!TCopBarWQ=XuOpfN`F2IDc67 zqnxCV+UiTH&YxqrDqlx}0#5+hx@9pInk)LMzNGy8*~|dsrJnh!Ynr?E(c*@g_TjPM zS9yL_+&-Jz)=+A5ufX?sr+RrvHx?TQ>%E5A_ThKIzsg&qxCWb>);P!J>fx{QZc^Nf z%=J;aF;vWz4mYzskUZesrQ}6ea>(Cqy!-}xVoOu4HLZyKvzfPbD0jrooQ?zsy#p%Q zRy*0ESBP)18|9!X ztE-Y`O7Lw|SzT{fg72Q2+Kgmnb+yQca8W#!HrU}y1)o*PbS4&$8>Nx;5)gt(2fKzMOF2BZb7h8rQ_*JZqwZRqqx-Cm4Y=>VBe4}uj4|pV&RoLyK z=hu}>9}TRVDtD0E^5Z*g2JCUV!3uP3&lN(~=D-Tk!)B;m3Z#j>ihoz}p&^ce&A+dB z*JzGRWHZz%fHd)^;tLdiKc>uWqdr-E3bBb!SOK|&E>4H!TNF*$55II2JcE9|Rirf9#*nC>j zUZ9N`Pixx?WDnif9vD3^o~O){eOY(Xi4FPA2^@HVN;@yg2`l_0lXPoleBr&y@4b=> zE@Ly)rUPkW7tP8BP}VKk(3Cf^0J?V3OqL{ubPQ~*ej)A2&XDWrC*Ln znWC#8tJw+i@S$sBJ`=vP*niH;LdE+O zU-b8Ruw{1tI~70s8rA=Qe3vFpE5Y>(STI}xvnFu?OBJ6TW(96l{K0Fv|8X`$%`V`6 z#qVCoVZ4NAHEg1e9p6u{bp$l6fR1+*$YL6^F(7+s&PKmHOpUNV(*{J=(vurQ@;7=9 zc*}#GetCo@cLuc4g|wuzKwd|;clx6{3%SzpVjg15S>p)tI6Pc5uu`1Xy+We>Ehrv! kt{+fmemEZMjNP~rokmDA^PFk^_d9G)+ooSMeKJn=Uq%2zNB{**M09{G3Mldi;Uh7Q$fpnl0rA}XMjRs2W#|3Q@BHpL z=idA7&FlP~9=Sq$4!Y?@3?e zGlBA>lp2N>83`%&#~WJ%F1frh7AFP+F`OG5b;)vdAc*{OLl5%pR7|c1c9a*TaYApE zrQ*u8(;e6oO?1k6X}p5+DY|x6Bto}E2wZahI1#&rzLPa$Y)EUQv4NOzxQrgXP2nAR z{DgAE%h&;?lp)y4_A+HQf<0^xT3)IPpELm{<*9nD_s~De&Y*3l=Xk6K>~o&W5H0qj zf01Pwa4Q(^qn*Bun4W{SIZwCoZhEQPr#6HFxGzn>RA6H;-b*Wd!9Wa!A+EV^n+9aO zkn$F4ryDAaii%*Kq1Hf@MTj~K9f)2-)Mw~Jv>H*CF$)(Q>r;GCo^=?E_vV)9J=`m& zK2VM}aY`XLs=>I$sNBU|oyN6#E-%l8tJdkweM-pYAn}#4(xk`;@=S#$QSvyKCE%1d zw_Yz-9rtN*E<;$g2 zVyK@FO+a^Lq5gU;K)*|JnR(i7J$AJ+Uyp4@zt$WRu^T+r1JkRf>8Ill^jDZSh}bN& z7;CS3R*#jU|B3lK5&MY85^%iAF^PBjUo-mmV&L9r^8dZD{vJd|m(eNnuxA3#JTSjgA~9h|7ZL7m_}~{OsU^MstSU9S!rEtuz~2 znjP5H=4Kn+1qTr4!yUv6Aw#p#bua_%H&CzH*yVIsrdeq!tV5~<_M&|QPNHRS2kkV- zh}ozgW}r<#J=!nfm6)BHU=!lW@GasG;0oei7!kLz>lsiOpGZ}BA?{!|t*{22H(__& zMi0P=xZRRGj!)AxlXtvC%)up?Ho>%UX6$;w{3RHCDF*#shWeKDv~8;n8aZx@Ye*@)IK_vhH delta 2429 zcmai04Nz276u$TFuL6o<;Lpga1h|06e`;YVqO7p;vxq}2GTZKZz_5S3x9fysLRh%j zRK~GsaI}e;v~+UHaK?1Rs5I%%CTS+kF)b&xKhwq;qf$HfKAdDseGKP*=R4m$=iK++ zz59+`rd@x~cRnqlKf`AwNwgDwFG;11kYGzSuvvtB14XtZdIB13sVpN4Hri4QnOTIG zVL@>m9JR%=f-E>=i_c$631Ng^%=i@IqIu5cs-&n+M<}33&Y;s1P@UNYPE~O`C7%lpEbPJQgOut<=jjPq;0`sdl8WtRO=^hfbVN6FYqZ#IcSsG$x9j?m zk5IALet5YoFM$(U>ntAcT!bFR9%&DpDa%aYCFDcsTUnlnMWe-7vOQ~>h()1a#9Gjf zS`}#W5EIU?!!lk--iq3Jx(dC#7D0`!R!8Irq7AwYh`JCR)g48&1yQm-8SgmO zABO|wS)+lKXDrfsxLMABTRGayDLEErdGx#V@>m32`b}D{dY%jKno^!IUC34<@u9xb zAlD(tG~^gW$@5&+1Min-)M@1$A(s+DPL#XbVu!1r!vt=_C4+nt!C}K;1Cf73blUKX zR-hUO-bYErtcUMiL3VJt(QTBg5V(vkqv&#gvpuk8+UupD-)$^5@wEH3*kEOr7Tbq@tw|LzGg^H0 zCRaV6Z4VRrou=1BY=stUteT_6YS4ez^tp)b;jtdrTa}x}JN>_v^`hjA=^r6aH4FI! zM|z32u(CiyMFVm-A7*2#aBqKehi_8~CKzwdLmQ#%v}EfYId`nxfszulEacy5^0SWY zJIYU?WQ}=~kk7?a3RgD2Iy?PNE1QFoo#sPA{xp~4GuvF9Yvg))UGHG^-}kj$M(lGn z`EelRBm8HigA#H9?|nXw#de!t4iJ7i729hhh48beJSh3`03#D{n-+NkDxPw7!Vei7 zZGJW6@_Ho?;U@_aMR>}WNpgtX(0mLA+=L$#7_3?(X+Gb$=r2|ziSUhQcLmWUd~+@L z`!t7d1pMjXJb#@XE`Ge)iP;1%HRsa~IMSTN%u(=bb0W=xD6fUOARX;`C`G#yn!QWt zRp|BR($#R@TgalvK#DIh#x{l!JzImzD$=LHIA2`M$74Cu8N=^Ll3?OvIkQ7B>4JGg zFkcJiFV2`w3T8V@55+;dYNF%doG+1Pg28X4dtf%&vry}|(D~4c)&t#WH^M%&FTx45 zdtu0LjkyuWD{aBb9=%cIeP{w_c8a{$eMZ^@?tqoH!1DnMeG7J>{Sv-F#sOCYx%3jG z2Q4%eN`uyz%?W&FR5oA752EW6g85A_wSsA!$Tf>|xTan(U4q#rm{P&)7tAHWToBAf z!5q)!vnFzeStdb2OCntY%Ug1>t!G;-^f>H5Tmh#LN8lRTKA5Ul=s74x|nzBYM9LUt#+9@GI(H4uD&L diff --git a/exmmtest.exe b/exmmtest.exe index 355105363e3d0b7d0b8520120e7ef77e3c833ed3..d27e9afcd4a4ef46ce2fa5d6aae572ca4bb6a572 100644 GIT binary patch delta 2103 zcmY+Edr;I>6vyxV{dNVhRct{PO;;erWu>eoL_~86#ZU&tFm3X&u#2GVE-VN-fvc%y zS}L6eokc-MrgU_0VM!j!Qxq0?P12~-*u$EksmVu{WukS?6)E?R&))Mrk9*F&zu)ip zDY^cX?Aqkyi(s=egb%=BXDHtT7mzjZt20!&brxe&;f_-c(@T66pUq}W7|Tk=DvzV# z4Min>P*^fX=|am6JV~vxDH)R({iG3gs4Tf2{4C=)&>Y1rW=mGCo&Ai4uY89n`EbVc z*>L($lH(Byk=$zDl*^>(UnJa*g&}vx!Nu!R@g0 zn4g21ip0UpcDv2aqy@nwh*2}FX*MzGSEz^)bt7p+(s95UN@~?t8a{x>UToQf-i1ma zuS`choI5;{EH748qW?12P9d9ZD#+3Uguwv!U*YL7#!Wb#SA7T^?g2GC{I{lz{I+S{6dVQZSOS$trp={%{8z4N>ty zm|YRd2i>U^UL1`Lr(=<>)9)b-t{F&^%YZ!ST7kUdnuZ)-c?elk8Hv1EnTVWQ6^t}i zMIei-ijdRXI%JYN3|T1FpSxpl{iB=WBdW=}y4r~w->)v9jq}csbmRc-3(a`Fh2p(hskiXf9OThf%JsBP zMc!_u`1JF;k$2DUK|0!AN1ksp_yyus((5hmawoo^63cP>Tqx&bOhUpBCH|ub4HtF% z01RBz@+R6>vBJPE$uav;??g2%FQWEd%4 zUydiG6Sj2+;tBe9YWWm+rBlaG!Wvv(0|%~G!3kV{4W3S&DhPW}NNYlA-?3C7e7R7v zgc6G1uK#{CfW(T0|A3D4JkfirP*i$SZi&8b3uRC!3ZYEGt`!oSPB9t?>QwVYa9`5# zEpYu3_4N?>4@~URay`sJhQTUi5)^jnMmZ-_?oG@rfS?Y4uPegt#~Ib|UDpUn5d=SV zO~VTx+pXns@Dg%8EJYrK>~0UbLj^%?LylKXUcD~>)b*SgF4d}M(BD)*B9ey(^q HhOvJEVk?jl delta 2079 zcmZvdYfx2H6vy{I=N?2JfuTZ*T*MGAiV>GFMKY9^7UZOpgN`GC0i+QRk zGo4AnUNQt`&s8-(#k^%(`mQt+6S;1;bZJy_(sc!6*>IhuH1G!JvYlZnW2%~Dic4U! z9H5+<98WdHS)imr2~zHB3*V!`@|n>~l%FQ&scNbz14$wOpRTGF^G=fmLg>pvqQzuF zJREVVFL9SwDJ!X=*nLH`5|3R+62SRAtk|g$4evu}qT$$>b#Vy^qVlJT$aR*Zkn1K_ zOLVAwj!q}nNmN?uIx|5L$7RnGGR&3)_MNta5s8+UxZ2vt;u!Wx^r+m;E=lnocZ*A0 zvr?2OxPF}gpDxaJ>=>i~uQJqF%oE20L1Tf4n02a2Wzv!{9}Q}L$e6FjC8uhEP%WU{ zP;zRbS-YSltTVASRZXUnQ#QIZrBkNilG%7jj-_+tTqU2%PS2JP;@f(9j+}?@ozre! zhn0MEG%-8%bM@nxl{;`SM>HYSs-wP>9b7y^swCR|bIFDve-CWi0rl(ifatRRp$FEe0P~tpOvd zy}+dEAn-(WKKPc^0B*4QfjOF8VGV)(z$)^WT@udeNoZ9`MZQWilw=M$guM?~A`uD&U^$S3?USt+(?5P($kJK*$4GkN?oCa_3T!YB` zvEey*vk@DnXN^%{M3d+$yJ;bKp{We~sM!S8HV1=$HH&@CXc6_pS|Y)`7O{G3ivhw=NWEYr-3QHN*KOnuw7gr-!{`%`=nJrh ziople()}*qOHW~+A@?3VzfK`Ndg-YvZSL{lOKA^6Ur`Zgr6%x0`Wft_r{H69@6~e; z3h6cQa!Q1KopNEXr%KpEGzfbZjlf<*v-YYGM%X(RX>?FL<`09-{4eTJ+I54>b4 z%U|sF_Slw3KkoQQ?7F6JUL;~Sa6T`_sQyIL0|G?+$Sd?W^`d^u+d|(uO>lf@^S#(S zPm$moCc>-nb9*sHPyPeS={Ml?D*E+&kOuno(lbx`v)^}$;w2{jO?P|W;GwkSs-AD5 zSTLV5uNvmw(p2wAQEvB(ny^O8I#S0~1OJkK$Bb5T7!YT?5X_`#u#{53ZaO?*ViInF#n8L$w2b?`jns+xUP&3O^oHp*nqol;AsstT3z&>a zszQmi@r}KS^0*`){OluiuyeQ&m*SU-(YT+on2Brj9G`fg;tzWOwFyZ{w6LQv*&E2R z)3}$=#Og*A6LoYLU%Ax>)zm1BMpM!gbg?B|;6BgNHSY`WBoeJ`Ck(3lawqPg~pg~NeBt1r+{eUG_38a=~bE66`4U~BXSrY*^hEawqC<@_27wygQM!#QcZ d+1Xp^upZsHzFpNdW&eLJv!T9|D#kB5s_`Hge#&Xb&lJ0Wc;A+OMZiigtM_tJ8P<@J0y}qD_d#y-@ zwsxE)MG=Y}!WrTGP^WpuO64rGcXTM1GKbA`LzcOx!?bdPW;&b7j;5^9wn5B<7M)>U zPCsz5OWk#k_q(e4)@|eV5+!rzFDZ&M1CfQ;$E|cCq>q@2NZN^cb_6B%K7O$s*k(v7-~hXVupxzW1I7%MCh)+}=mp;Jz=N-B z5SyctvS?+e(alaF!@k5sR1-BDF&Ay7Bly6r9DYVMx{MvBq^Ho?5)!6HCdSPG{l)@! zny||D;xG3Xp~j?e)Z$pIneO01Owt0bv!5`_He!iAj?b)xns|VZ3&y3Wb|DtuOII)% zm-GaA_6v&a7L?f_T>X*;(9TYxhb>~5J&8&78uIKT6xkJ&`=!|AMqNUsQ|L@c8iSG0 zLf_o{vO?c)zhje4CG1Kl_4W3Amh*g7OJ!y!b|sW9yh>>F9N!ZGz8Y^*qh)j_B{d+! sxrw`+-@>z`+`i_qPnzkp_tx4}VgTi2qq@85|9()xJ8+n)AM%g<2c}Tc=Kufz diff --git a/inputest.exe b/inputest.exe index 2cd78ff59f8ef23c65efbab0af8c43c01ea5bac7..52f08c514095d2efa8bf13aeedead497773c618a 100644 GIT binary patch delta 18956 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[NWs4erDY`;>t zTJpo$QNdJfahrmK_vNYP0N*w0j*SEPO_S998;o9E_t1d-hN__& zkws1T_$2k4js7KToy}-x!}NE4K@749Q58Ht80(vAja4Q#TkQ+12@M54_zwml7JF3I zsYz<%ruZor!JN%i>}b$H2eW~#F=4rGzhHv_gO~0HhDeoB!M4289#CJ&>B_&^Edl!zp>tECuCNT-RS}qT&b7| zn60%)1pvmQ8&V?VPgYwW8IqytWWn~xzv)=eNA8D$dckD%{YT=;HEI?szNCGmkJ>P& zcHNRC%l#1}Tn%9Suztx9%Agx`>b*T#o%yJLZD?u0Qj57)M!M4UW*}%0fM`_kZADO@ zEvAi4*tyd_$Mm)J0ns`D)93)I=_51DQ$Kt(F-q%T6`iUm8}C$=dn|ELHH5?+7mbxajhK&OpCXz_l#KIBr1;s%#`KRDE)3jDueP z24C0Gt5g4nOSr(KH=C&XuNLW@BgNJ>+u7GX^wvyk?f-a+-f{urKkv1%lVy4h1>j9IdxIO_KS=n*{t=ojk(JvK+x-!E!?d|*n= z|9q?(wz<-g!YX(Xo=4~K-Cr6xCUB&kKPKR~k3H#lYyRSSC(5p{5ui!qPJ^bLiU@s~1^zapj^>n{hi(%jqs4jtL8j3tA zVx)G4PsE$*r1gaMM(asDN<-CIEit3dF=}=iN`3`s;L#L|!M0T7ap2jtEna706`XF4 zcgE|UWR;_X)J4wtd6~l~*=|_YBhbtrcr-TuokH<#4DUC;Mx)`o82#Nm_^J=P)k$XQ#1 z-Mfnlqx@MMh#X`grSE$*8@$K}*f|ba%Jm^p(D3>ZR1_Ty9|`6eZ??rduCNL{Qz7?^tbrq`UhNEDe-CEU z8J-@i;O?g1n9+nygL)!Q4>Jh93J-pm-g%^o5zsRX%@n7YH}DF2G*&M#O6aTkIs8jj zf1A;(#+K;VXfP3ZcD%r{#Jd`*pe5Ro1gnTVUjHFPmoYruffMow=B&V@$$p06>24ce zKL(H}Y4|RNU(E0!d!1aymybGUxJ(-_=`V-=C#ft@rV|8o!jzsB%%*Nji; z=&SG1+JDaQ1>;qR67LAb;1>B3M$9DMMLeG2>Gl|3h4kTQfjNa7XL!2RCFJ+`qq*YV zai0VBB2Ra+ggiuF^ihAYElk(MFvqjimywcw#wwSyS$;afDkO)-pY8^$tjiM?+W3taLD-8~3p8DA--( z>0S@+y$9aF@N|=h;ccT-eUE1Ty^J7xA_ZgN6!d8L;|x#tb%c}!Vg2#*CBq+Q_F$l-e>@3(G*uLar+YMdOBwuV&VPsD=^jkG ziu{mCqV{HwdVWXPurh=OqLtBn4KUS6o3pZEy`k#rmYA5&84car;2T!_O<)+zW{%}> zl*m8MFf7I>341gRw=g{2tZ3%ZaQ+%ke$DXf!SA?0bq+jQ4?bl0Q>?uRDjpW~^sOg| zy0#^3!b133({CS-lUH z=U4^nbptA=Sw)^gN24wbt`PZ{De5nk_#t(y;>A{wkko$Cs?;Mp6V>xoX9X*5AhRs}1k`S|?1RwV&3BnMtFC4lnUJ#1aU$tg(Cbg?|ESIJB zwkCuQhtLF*pc}5Hx(7S5YNnKz*9f7|rnDhGW5kq6*)vB>nVBtwW(nebIfAq;_4hTp*nDbYgckc4psIYiRt? z1!H4`7atujd?1b&guz0{#F*Hn562V=!u0z1k)y|q86!NpNJyC|gpLw~QS*ei$PkAh zWfi7O%B2PnhmTFA3b0=tezV33pKXGtV6nmU{Y!bUAP!Cv^aJh)bS)PuX@)$zL%52Zi(BquJMPsslP^8Xz0 delta 19377 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 ju}1^H3;&3aUN?WJdCLs@# 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 delta 4911 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 Ko6N_N','?',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4 + '2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7 + }, + far SpecialNames[] = // ASCII for 0xe0 prefixed codes + { +// 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 0 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,13 ,0 ,0 ,0 , // 1 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 2 + 0 ,0 ,0 ,0 ,0 ,'/',0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 3 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 4 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6 + 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7 + }, + *ScanNames[] = // Scan code names with single chars + { + "?","?","1","2","3","4","5","6","7","8","9","0","-","+","?","?", + "Q","W","E","R","T","Y","U","I","O","P","[","]","|","?","A","S", + "D","F","G","H","J","K","L",";","\"","?","?","?","Z","X","C","V", + "B","N","M",",",".","/","?","?","?","?","?","?","?","?","?","?", + "?","?","?","?","?","?","?","?","\xf","?","-","\x15","5","\x11","+","?", + "\x13","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?", + "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?", + "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?" + }, // DEBUG - consolidate these + far ExtScanCodes[] = // Scan codes with >1 char names + { + 1,0xe,0xf,0x1d,0x2a,0x39,0x3a,0x3b,0x3c,0x3d,0x3e, + 0x3f,0x40,0x41,0x42,0x43,0x44,0x57,0x59,0x46,0x1c,0x36, + 0x37,0x38,0x47,0x49,0x4f,0x51,0x52,0x53,0x45,0x48, + 0x50,0x4b,0x4d,0x00 + }, + *ExtScanNames[] = // Names corresponding to ExtScanCodes + { + "Esc","BkSp","Tab","Ctrl","LShft","Space","CapsLk","F1","F2","F3","F4", + "F5","F6","F7","F8","F9","F10","F11","F12","ScrlLk","Enter","RShft", + "PrtSc","Alt","Home","PgUp","End","PgDn","Ins","Del","NumLk","Up", + "Down","Left","Right","" + }; - //KeyboardDef KbdDefs = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51}; - //JoystickDef JoyDefs[MaxJoys]; - //ControlType Controls[MaxPlayers]; +static Direction DirTable[] = // Quick lookup for total direction + { + //dir_Nortinest, + dir_North, + //dir_NorthEast, + dir_West, dir_None, dir_East, + //dir_Soutinest, + dir_South//,dir_SouthEast + }; + +static boolean IN_Started; +static boolean CapsLock; +static ScanCode CurCode,LastCode; - //dword MouseDownCount; +static void (*INL_KeyHook)(void); +static void interrupt (*OldKeyVect)(void); +static char *ParmStringsIN[] = {"nojoys","nomouse",nil}; +#ifdef __cplusplus +} +#endif // Internal routines /////////////////////////////////////////////////////////////////////////// @@ -94,8 +166,8 @@ static boolean special; } else // Make code { - in->LastCode = in->CurCode; - in->CurCode = in->LastScan = k; + LastCode = CurCode; + CurCode = in->LastScan = k; in->Keyboard[k] = true; if (special) @@ -104,20 +176,20 @@ static boolean special; { if (k == sc_CapsLock) { - in->CapsLock ^= true; + CapsLock ^= true; // DEBUG - make caps lock light work } if (in->Keyboard[sc_LShift] || in->Keyboard[sc_RShift]) // If shifted { c = ShiftNames[k]; - if ((c >= 'A') && (c <= 'Z') && in->CapsLock) + if ((c >= 'A') && (c <= 'Z') && CapsLock) c += 'a' - 'A'; } else { c = ASCIINames[k]; - if ((c >= 'a') && (c <= 'z') && in->CapsLock) + if ((c >= 'a') && (c <= 'z') && CapsLock) c -= 'a' - 'A'; } } @@ -522,14 +594,16 @@ INL_ShutJoy(word joy, inconfig *in) // IN_Startup() - Starts up the Input Mgr // /////////////////////////////////////////////////////////////////////////// -void +boolean IN_Startup(inconfig *in) { boolean checkjoys,checkmouse; word i; - if (in->IN_Started) - return; + if (IN_Started) + { + return false; + } checkjoys = true; checkmouse = true; @@ -552,7 +626,8 @@ IN_Startup(inconfig *in) for (i = 0;i < MaxJoys;i++) in->JoysPresent[i] = checkjoys? INL_StartJoy(i, in) : false; - in->IN_Started = true; + IN_Started = true; + return true; } /////////////////////////////////////////////////////////////////////////// @@ -581,20 +656,23 @@ IN_Default(boolean gotit,player_t *player,ControlType nt, inconfig *in) // IN_Shutdown() - Shuts down the Input Mgr // /////////////////////////////////////////////////////////////////////////// -void +boolean IN_Shutdown(inconfig *in) { word i; - if (!in->IN_Started) - return; + if (!IN_Started) + { + return false; + } INL_ShutMouse(); for (i = 0;i < MaxJoys;i++) INL_ShutJoy(i, in); INL_ShutKbd(); - in->IN_Started = false; + IN_Started = false; + return true; } /////////////////////////////////////////////////////////////////////////// @@ -648,7 +726,7 @@ INL_AdjustCursor(CursorInfo *info,word buttons,int dx,int dy) // /////////////////////////////////////////////////////////////////////////// void -IN_ReadCursor(CursorInfo *info) +IN_ReadCursor(CursorInfo *info, inconfig *in) { word i, buttons; @@ -657,7 +735,7 @@ IN_ReadCursor(CursorInfo *info) info->x = info->y = 0; info->button0 = info->button1 = false; - if (MousePresent) + if (in->MousePresent) { buttons = INL_GetMouseButtons(); INL_GetMouseDelta(&dx,&dy); @@ -666,11 +744,11 @@ IN_ReadCursor(CursorInfo *info) for (i = 0;i < MaxJoys;i++) { - if (!JoysPresent[i]) + if (!in->JoysPresent[i]) continue; buttons = INL_GetJoyButtons(i); - INL_GetJoyDelta(i,&dx,&dy,true); + INL_GetJoyDelta(i,&dx,&dy,true, in); dx /= 64; dy /= 64; INL_AdjustCursor(info,buttons,dx,dy); @@ -684,7 +762,7 @@ IN_ReadCursor(CursorInfo *info) // /////////////////////////////////////////////////////////////////////////// void -IN_ReadControl(int playnum,player_t *player) +IN_ReadControl(int playnum,player_t *player, inconfig *in) { boolean realdelta; byte dbyte; @@ -720,11 +798,11 @@ register KeyboardDef *def; else { #endif - switch (type = player[playnum]->Controls) + switch (type = player[playnum].Controls) { case ctrl_Keyboard1: case ctrl_Keyboard2: - def = player[playnum]->KbdDefs[type - ctrl_Keyboard]; + def = &(in->KbdDefs[type - ctrl_Keyboard]); /* if (Keyboard[def->upleft]) mx = motion_Left,my = motion_Up; @@ -735,25 +813,25 @@ register KeyboardDef *def; else if (Keyboard[def->downright]) mx = motion_Right,my = motion_Down;*/ - if (Keyboard[def->up]) + if (in->Keyboard[def->up]) my = motion_Up; - else if (Keyboard[def->down]) + else if (in->Keyboard[def->down]) my = motion_Down; - if (Keyboard[def->left]) + if (in->Keyboard[def->left]) mx = motion_Left; - else if (Keyboard[def->right]) + else if (in->Keyboard[def->right]) mx = motion_Right; - if (Keyboard[def->button0]) + if (in->Keyboard[def->button0]) buttons += 1 << 0; - if (Keyboard[def->button1]) + if (in->Keyboard[def->button1]) buttons += 1 << 1; realdelta = false; break; case ctrl_Joystick1: case ctrl_Joystick2: - INL_GetJoyDelta(type - ctrl_Joystick,&dx,&dy,false); + INL_GetJoyDelta(type - ctrl_Joystick,&dx,&dy,false, in); buttons = INL_GetJoyButtons(type - ctrl_Joystick); realdelta = true; break; @@ -782,15 +860,15 @@ register KeyboardDef *def; dy = my * 127; } - player[playnum]->info.x = dx; - player[playnum]->info.xaxis = mx; - player[playnum]->info.y = dy; - player[playnum]->info.yaxis = my; - player[playnum]->info.button0 = buttons & (1 << 0); - player[playnum]->info.button1 = buttons & (1 << 1); - player[playnum]->info.button2 = buttons & (1 << 2); - player[playnum]->info.button3 = buttons & (1 << 3); - player[playnum]->info.dir = DirTable[((my + 1) * 3) + (mx + 1)]; + player[playnum].info.x = dx; + player[playnum].info.xaxis = mx; + player[playnum].info.y = dy; + player[playnum].info.yaxis = my; + player[playnum].info.button0 = buttons & (1 << 0); + player[playnum].info.button1 = buttons & (1 << 1); + player[playnum].info.button2 = buttons & (1 << 2); + player[playnum].info.button3 = buttons & (1 << 3); + player[playnum].info.dir = DirTable[((my + 1) * 3) + (mx + 1)]; #if DEMO0 if (DemoMode == demo_Record) @@ -829,7 +907,7 @@ void IN_SetControlType(word playnum,player_t *player,ControlType type) { // DEBUG - check that requested type is present? - player[playnum]->Controls = type; + player[playnum].Controls = type; } #if DEMO0 @@ -922,13 +1000,13 @@ IN_GetScanName(ScanCode scan) // /////////////////////////////////////////////////////////////////////////// ScanCode -IN_WaitForKey(void) +IN_WaitForKey(inconfig *in) { ScanCode result; - while (!(result = LastScan)) + while (!(result = in->LastScan)) ; - LastScan = 0; + in->LastScan = 0; return(result); } @@ -939,13 +1017,13 @@ IN_WaitForKey(void) // /////////////////////////////////////////////////////////////////////////// char -IN_WaitForASCII(void) +IN_WaitForASCII(inconfig *in) { char result; - while (!(result = LastASCII)) + while (!(result = in->LastASCII)) ; - LastASCII = '\0'; + in->LastASCII = '\0'; return(result); } @@ -955,13 +1033,13 @@ IN_WaitForASCII(void) // /////////////////////////////////////////////////////////////////////////// void -IN_AckBack(void) +IN_AckBack(inconfig *in) { word i; - while (!LastScan) + while (!in->LastScan) { - if (MousePresent) + if (in->MousePresent) { if (INL_GetMouseButtons()) { @@ -973,7 +1051,7 @@ IN_AckBack(void) for (i = 0;i < MaxJoys;i++) { - if (JoysPresent[i]) + if (in->JoysPresent[i]) { if (IN_GetJoyButtonsDB(i)) { @@ -985,8 +1063,8 @@ IN_AckBack(void) } } - IN_ClearKey(LastScan); - LastScan = sc_None; + IN_ClearKey(in->LastScan, in); + in->LastScan = sc_None; } /////////////////////////////////////////////////////////////////////////// @@ -995,22 +1073,22 @@ IN_AckBack(void) // /////////////////////////////////////////////////////////////////////////// void -IN_Ack(void) +IN_Ack(inconfig *in) { word i; - IN_ClearKey(LastScan); - LastScan = sc_None; + IN_ClearKey(in->LastScan, in); + in->LastScan = sc_None; - if (MousePresent) + if (in->MousePresent) while (INL_GetMouseButtons()) ; for (i = 0;i < MaxJoys;i++) - if (JoysPresent[i]) + if (in->JoysPresent[i]) while (IN_GetJoyButtonsDB(i)) ; - IN_AckBack(); + IN_AckBack(in); } /////////////////////////////////////////////////////////////////////////// @@ -1020,19 +1098,19 @@ IN_Ack(void) // /////////////////////////////////////////////////////////////////////////// boolean -IN_IsUserInput(void) +IN_IsUserInput(inconfig *in) { boolean result; word i; - result = LastScan; + result = in->LastScan; - if (MousePresent) + if (in->MousePresent) if (INL_GetMouseButtons()) result = true; for (i = 0;i < MaxJoys;i++) - if (JoysPresent[i]) + if (in->JoysPresent[i]) if (INL_GetJoyButtons(i)) result = true; @@ -1048,7 +1126,7 @@ IN_IsUserInput(void) // /////////////////////////////////////////////////////////////////////////// boolean -IN_UserInput(dword delay,boolean clear) +IN_UserInput(dword delay,boolean clear, inconfig *in) { dword TimeCount = *clockdw; dword lasttime; @@ -1056,18 +1134,24 @@ IN_UserInput(dword delay,boolean clear) lasttime = TimeCount; do { - if (IN_IsUserInput()) + if (IN_IsUserInput(in)) { if (clear) - IN_AckBack(); + IN_AckBack(in); return(true); } } while (TimeCount - lasttime < delay); return(false); } -boolean IN_qb(byte kee) +boolean IN_KeyDown(byte code, inconfig *in) { - if(Keyboard[kee]==true) return 1; - else return 0; + return in->Keyboard[(code)]; } + +void IN_ClearKey(byte code, inconfig *in) +{ + in->Keyboard[code] = false; + if(code == in->LastScan) + in->LastScan = sc_None; + } diff --git a/src/lib/16_in.h b/src/lib/16_in.h index 2d15828e..f14e8178 100644 --- a/src/lib/16_in.h +++ b/src/lib/16_in.h @@ -218,46 +218,11 @@ typedef struct char LastASCII; ScanCode LastScan; - boolean IN_Started; - boolean CapsLock; - ScanCode CurCode,LastCode; - KeyboardDef KbdDefs[MaxKbds]; JoystickDef JoyDefs[MaxJoys]; JoypadDef JoypadDefs[MaxPads]; } inconfig; - -/* -============================================================================= - - GLOBAL VARIABLES - -============================================================================= -*/ - -// -// configuration variables -// -//static boolean MousePresent; -//static boolean JoysPresent[MaxJoys]; -//static boolean JoyPadPresent[MaxPads]; - -// Global variables -// extern boolean JoystickCalibrated; // MDM (GAMERS EDGE) - added -// extern ControlType ControlTypeUsed; // MDM (GAMERS EDGE) - added - - //extern boolean Keyboard[NumCodes]; - //extern boolean Paused; - //extern char LastASCII; - //extern ScanCode LastScan; - - //extern KeyboardDef KbdDefs[]; - //static KeyboardDef KbdDefs[MaxKbds] = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51}; - //extern JoystickDef JoyDefs[MaxJoys]; - //extern ControlType Controls[MaxPlayers]; - - //extern dword MouseDownCount; - + #ifdef DEMO0 static Demo DemoMode = demo_Off; static byte /*_seg*/ *DemoBuffer; @@ -266,94 +231,6 @@ typedef struct extern dword far* clockdw; -/* -============================================================================= - - LOCAL VARIABLES - -============================================================================= -*/ -static byte far ASCIINames[] = // Unshifted ASCII for scan codes - { -// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0 ,27 ,'1','2','3','4','5','6','7','8','9','0','-','=',8 ,9 , // 0 - 'q','w','e','r','t','y','u','i','o','p','[',']',13 ,0 ,'a','s', // 1 - 'd','f','g','h','j','k','l',';',39 ,'`',0 ,92 ,'z','x','c','v', // 2 - 'b','n','m',',','.','/',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4 - '2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7 - }, - far ShiftNames[] = // Shifted ASCII for scan codes - { -// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0 ,27 ,'!','@','#','$','%','^','&','*','(',')','_','+',8 ,9 , // 0 - 'Q','W','E','R','T','Y','U','I','O','P','{','}',13 ,0 ,'A','S', // 1 - 'D','F','G','H','J','K','L',':',34 ,'~',0 ,'|','Z','X','C','V', // 2 - 'B','N','M','<','>','?',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4 - '2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7 - }, - far SpecialNames[] = // ASCII for 0xe0 prefixed codes - { -// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 0 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,13 ,0 ,0 ,0 , // 1 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 2 - 0 ,0 ,0 ,0 ,0 ,'/',0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 3 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 4 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7 - }, - *ScanNames[] = // Scan code names with single chars - { - "?","?","1","2","3","4","5","6","7","8","9","0","-","+","?","?", - "Q","W","E","R","T","Y","U","I","O","P","[","]","|","?","A","S", - "D","F","G","H","J","K","L",";","\"","?","?","?","Z","X","C","V", - "B","N","M",",",".","/","?","?","?","?","?","?","?","?","?","?", - "?","?","?","?","?","?","?","?","\xf","?","-","\x15","5","\x11","+","?", - "\x13","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?", - "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?", - "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?" - }, // DEBUG - consolidate these - far ExtScanCodes[] = // Scan codes with >1 char names - { - 1,0xe,0xf,0x1d,0x2a,0x39,0x3a,0x3b,0x3c,0x3d,0x3e, - 0x3f,0x40,0x41,0x42,0x43,0x44,0x57,0x59,0x46,0x1c,0x36, - 0x37,0x38,0x47,0x49,0x4f,0x51,0x52,0x53,0x45,0x48, - 0x50,0x4b,0x4d,0x00 - }, - *ExtScanNames[] = // Names corresponding to ExtScanCodes - { - "Esc","BkSp","Tab","Ctrl","LShft","Space","CapsLk","F1","F2","F3","F4", - "F5","F6","F7","F8","F9","F10","F11","F12","ScrlLk","Enter","RShft", - "PrtSc","Alt","Home","PgUp","End","PgDn","Ins","Del","NumLk","Up", - "Down","Left","Right","" - }; - -static Direction DirTable[] = // Quick lookup for total direction - { - //dir_Nortinest, - dir_North, - //dir_NorthEast, - dir_West, dir_None, dir_East, - //dir_Soutinest, - dir_South//,dir_SouthEast - }; - -static void (*INL_KeyHook)(void); -static void interrupt (*OldKeyVect)(void); - -static char *ParmStringsIN[] = {"nojoys","nomouse",nil}; - -// Function prototypes -#define IN_KeyDown(code) (Keyboard[(code)]) -#define IN_ClearKey(code) {Keyboard[code] = false; if (code == LastScan) LastScan = sc_None;} - // Internal routines void interrupt INL_KeyService(inconfig *in); void Mouse(int x); @@ -371,14 +248,14 @@ word IN_GetJoyButtonsDB(word joy); void IN_SetupJoy(word joy,word minx,word maxx,word miny,word maxy, inconfig *in); //static boolean INL_StartJoy(word joy); //static void INL_ShutJoy(word joy); -void IN_Startup(inconfig *in); +boolean IN_Startup(inconfig *in); void IN_Default(boolean gotit,player_t *player,ControlType nt, inconfig *in); -void IN_Shutdown(inconfig *in); +boolean IN_Shutdown(inconfig *in); void IN_SetKeyHook(void (*hook)()); void IN_ClearKeysDown(inconfig *in); //static void INL_AdjustCursor(CursorInfo *info,word buttons,int dx,int dy); -void IN_ReadCursor(CursorInfo *info); -void IN_ReadControl(int playnum,player_t *player); +void IN_ReadCursor(CursorInfo *info, inconfig *in); +void IN_ReadControl(int playnum,player_t *player, inconfig *in); void IN_SetControlType(word playnum,player_t *player,ControlType type); #if DEMO0 boolean IN_StartDemoRecord(word bufsize); @@ -387,39 +264,13 @@ void IN_StopDemo(void); void IN_FreeDemoBuffer(void); #endif byte *IN_GetScanName(ScanCode scan); -ScanCode IN_WaitForKey(void); -char IN_WaitForASCII(void); -void IN_AckBack(void); -void IN_Ack(void); -boolean IN_IsUserInput(void); -boolean IN_UserInput(dword delay,boolean clear); - -/*extern void IN_Startup(void),IN_Shutdown(void), - IN_Default(boolean gotit,ControlType in), - IN_SetKeyHook(void (*)()), - IN_ClearKeysDown(void), - IN_ReadCursor(CursorInfo *), - IN_ReadControl(int,ControlInfo *), - IN_SetControlType(int,ControlType), - IN_GetJoyAbs(word joy,word *xp,word *yp), - IN_SetupJoy(word joy,word minx,word maxx, - word miny,word maxy), - Mouse(int x), -#ifdef DEMO0 - IN_StartDemoPlayback(byte __segment *buffer,word bufsize), - IN_StopDemo(void),IN_FreeDemoBuffer(void), -#endif - IN_Ack(void),IN_AckBack(void); -extern boolean IN_UserInput(dword delay,boolean clear), - IN_IsUserInput(void) -#ifdef DEMO0 - , IN_StartDemoRecord(word bufsize) -#endif -; -extern byte *IN_GetScanName(ScanCode); -extern char IN_WaitForASCII(void); -extern ScanCode IN_WaitForKey(void); -extern word IN_GetJoyButtonsDB(word joy);*/ +ScanCode IN_WaitForKey(inconfig *in); +char IN_WaitForASCII(inconfig *in); +void IN_AckBack(inconfig *in); +void IN_Ack(inconfig *in); +boolean IN_IsUserInput(inconfig *in); +boolean IN_UserInput(dword delay,boolean clear, inconfig *in); +boolean IN_KeyDown(byte code, inconfig *in); +void IN_ClearKey(byte code, inconfig *in); -boolean IN_qb(byte kee); #endif -- 2.39.5