From ba06fd388b742c0527177886d31d4c689450ea24 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 29 Sep 2005 09:43:00 +0000 Subject: [PATCH] Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at activekitten.com. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401155 --- VisualCE.zip | Bin 9350 -> 26984 bytes src/SDL_fatal.c | 4 ++ src/SDL_loadso.c | 50 ++++++++++++++++++++- src/cdrom/dummy/SDL_syscdrom.c | 4 ++ src/cpuinfo/SDL_cpuinfo.c | 6 +-- src/events/SDL_quit.c | 4 ++ src/joystick/dummy/SDL_sysjoystick.c | 2 + src/video/wincommon/SDL_sysevents.c | 49 ++++++++++++++++++++- src/video/wincommon/SDL_syswm.c | 39 +++++++++++++++++ src/video/windib/SDL_dibevents.c | 13 ++++++ src/video/windib/SDL_dibvideo.c | 62 +++++++++++++-------------- test/testalpha.c | 10 ++++- test/testwin.c | 9 +++- 13 files changed, 211 insertions(+), 41 deletions(-) diff --git a/VisualCE.zip b/VisualCE.zip index 834b4fb60d5828afe608600d36e7bf5023706464..4350a8702af16bd7c097bd8a39d4c705c3b8cad5 100644 GIT binary patch literal 26984 zcmZsCV{~Rs6K$;LiEZ1qIdL)*+cqY)olI=o6Wg|JCli}@&HH}$yF9(lT3uax@2X#Y zs&N!$z#-s3{yxDb{H*_U{`0_spo6GdIJp>Di;6R<{D1`kU&H1TEo$NwRdIs=IRQ5Y zQT#90{{P~_|L@%IVzU488~#6hG!QTl7!Yt1e%6>fX;l>w5Ri^s00`Ru&HpYY%b+T% z_)i)~SbU;?-~XA$pRBj<>myB9zFpthzXB1D-)oN-48T&6SXwt|dg2VO;%Wo;jcw)7 zO{^jLZUX;6$9kT^LYLd+Bi4#v7U9xkNV~Ib!TDI-u4`Oz8)Z$E%37UEPH)T-@Bdj zrK|g%(w9Vpb%%_`3RgNzYpHDYtxpV0(pcGv@rrPK8bXz`lYWiuL zFsXdGN|^e+WF0s8tZ3b%eUZ-POfcXokLC-f-2K!sf3^R{gfsThh|S!kMw(FJ>C53> zkF^;GKH$17*V);3{v1)JB=#pYyGNFM=Q>^V*EXSx*{9*r@aU#=O;^eg)amlt?r@{t zFUI!*P8#;J&AA;4^M)?LAjZuTm+t0ji9BMQjEwg4TwWj9rx$#)&*$5`1)!d#qwRZn zmWTO{bl!yYu3iixU#C_3B77*JX1%h#-ql7!;PwwaPp{^16?D&e#It4pcJy!UjlX zmx9c03CnucXy}*pUN`qY8E89PxIa3{?R4a0P2{5K8;i1u%w*c$x+kg=n5Bvh7E54; z>lRqEiv>oxf>;aJP=k!r_dZ#D@=)@U>mAs|Wzt`%V=sTf;f-(TAxKzaM|Uzo5@GOI zSt`Vd#NB=>k&Ii)_E~nsqO5 zVE*jC856Uxp?7>2tx>YeSqxqNP5D?s$dIkdPLU({tEkgO8(m1!3ovy&= zeKU%W_&6Oatq0XRczUxtk-<-xoommG?|pwrnc{^5Zzs_oDP5tb>FJ~RoZ5I|Lb+)$ za|JP}>WwAED8TpT=%7qp_3_i>=a>D{!_@9;?~GGsz3#2G z6~5P;RzU#(<)3TZeAdqX%g^ z5Oza7^*+~sNSn}%pSF&wnHsIweXSwbEx_1qSS$GYEdFWqRO_6psKfbeYI5kVt7~Qc z+}1o@)K|BAf4158aop)H{-W=MYwQ2)x3j`ba(!#qIwSC@&PF`{*gc_mkG!tl=MB;8 zcu?}h+WKm)GsW}1P$`z|Gk9m|x;b&YX2OEX+8#2S&hdFGx<7ONx_=zkB747M@zAeZvS>a0$;EfW@)&18NGl1gw-tJ|^up}b z0=w;HRiN#$2vG2PK_ckH#VstsEqq(=|NXmDqJ6#%dq9_h@4>OZ=I}<2u`An)&Q2!? z!`_arV0dv=k762t2%&JsjA3R{?m3^sFeIoe>-*Wk4_SX(nE6{UG=k^lLFV~2hcO}h z?r?u}w`6Q~-K?$ zz}F4OgQ*5bVLulBWB!Bbec9w0nzE=-&(|CMbN-BDt-zFPvl9>J9@nY6tIdWzaO=Hy z*F~_D^H*$F8%|AVvms}BYzrA9 z2xsk_A^M1p#RE@zFp%nT*S{e44Vo}!NTE6tuaaDmSU&KM5qfd@Ep(9@^Yi)fP9bL+ z@#!@>H9aU)re>`u`t472b6%Ck{m|qfxZM;&F*dfWlZ5kRi&y$|DVv$1MOW@zrf?Cq zc+nSI1Q;UG{bGzjCZWZPl>%)^S!bghq+OMxd(mapAR|L^!^i2W{ zCpuS3Jl1_ujXYo1x*%UygAKvA?y4C{3whgY*EXHj@#3B0&WTA>EzY_Xl16pno` zM*pHidCef0B{xg)p9_^Y^Qyl~i@WkE)aBP#y|v2lF0E_2t2(NpvLa?kSGl*~vm&aZ zIoolyLUA)f2Q}osYs$#zO3kA|04(SV>*A7w)skPvumNTo44E38%16T@8aJv#b1mwt zHGyS}0kEn)5y$%Bsy&Ix-3iNGs;ByOkArKNR(eC7bggECn#*uYZ5NLf8@lT>8-~d- zR_Ngq)2631UO{7RDtji3>*l;QoZGh6Hr3s$8(i5Q;C9;tc2%*I4a;x1N&C^wc9FH_ z?1Iv*cykf@D&r~|mQNSUAwmu)4TtYfZzY6HgkNOur+qCvX7?dRf`;~+=Hs1VH+>;Z z>rCFRho`GaDQ0HBu~=KSRP}srJP*YoqHSpDeww)l+D=F36%;9TP6bbsTZP?d^m=W%=raY3qb zK|&T$t@I4r(dio>^317Q*U5r@akWzdP>YGS#dNy=O3fxg73p8Apo?bEH<<7z5 zt@QeI#^JwzQt-`GQ$YBt8{&z>Jr_Fcs{v1P@y@qi_8+r67czO_nUT0z_8*&b$*s4? zH}9`=$z9Ou!{Fkly>SQDfTub5i`gR53R$T68Lpr$ycxugM2qLw(?*J!Y`UGVNh_~e zj#1mN_gc;l^)B7ao>%>OsLJYJK3~tUYhM0|7#p*U$f0*-8?1Tl@%6{nKzYrQhT5j_ zfSpuMIBu@#$Mx;aDkgOO8btw7olR@p`RFw7`Y3ZpqxJ8NreVRTXwFevs9&3CNR6y_ z^b*h|C_8jh&gUiebu0=N71SjSix80tgHE*&)Hdu%iA|cfC<`?BbT!Irw+}`2Sio?b zA=LHy+xkR)+T`abigxN94Vdn+cnB^})=g*a3b(g7>!q6P?1K7$#^*J&>HH4#S9Dz5 z!-qf7x3jO0kE$jgJLaB0I~^NZ9XdQ)ers%1q8Y%`I+RABe4~vbsWggy*!TH)%*2QG zx%N!{MxLiYNJIFf5IZ#-tCzuxeP{DSJL8vKJ8!vsI%~g+y$M~QN?oL?`%km*&4oxi z1>Y`=dI^(1=O6k%?`)_JpN8il8JAkbs#kylEE<@W!!F5?!J2CxV0kYPB2G|bS{SXy zjA?z8XwUSNL_akKEy5T8@d-3QK=hE7Ij$1F9ho$)1(pr-&ni#fe zE9gf2vKIWZd$GHLRr*<@2$aGPO^;8PWTHZiilHGd2Ss z{xq)-pTF7B)-3;QdZZ1l`PtMw4jmkJDvec|z%~aLkXpT<^>cB%JCgv7FaO*Dh)}J$ z_?BgYSuMiunF-gQLr}5-QDadaod#*+UHyc+yuNs&P*q3Xa{l03`4qTYx=rpXGhZYv z;tVBlPSOyxg2}09W#~fiWqW&9FwGKN@&cyd1Vx~w+B(=hK~|v)i+Q-`?v8qq)cniDhYF!up87>|4e*23vD;aPA)rl}!SGvV4GFilc+^h) z`svu}ae4@n{2FBqNi?%poCk%`-XJ6K(K_#2-n^2A@7>Yl(Cg#nXYcFfdf@W8)_SN` z((TYtuf$6W*J#w;->Fs8q4r%|nv^=47Ou&6b~DM8tNOQWQ$5-+RbTLkn>OX)>{jA% zxMZ^TlF>8P!@%%BB;X>}CgOv+=zjR+-0^03#E%R-0XTw}$>JgzHTYY_Ol)db3&C$?c}Iy1FJn zB}w zWxChB!B}8tw!avR>xR*&o77QIO_=1ap5pi;MIXJwO*fIKREE5m*8RaUNjLGXLXCq* zb`>E~vF0A2iQS^Surn=?JibfwuFCOKCks5O{fkYveQiTS+;8b9#?o1JF3AbroMT-4 zN;;KEk=&vXJqXYVTe8RX<;cOIWOdX$m%(`c5sR6bSvkqK+VZ;2Oq6BQ_@fi?*OSIk zv#PwV&(;R>?9t zJDGj`@p##p+i?R8!!b%Dw6i;vSdC2xGR9v9&m=O}qzdlIwsPIc%gMGJO}U$sJ0Lq4T4=Xt0{ zE8+`QOd#fQOpVx)d=rad7_BA-OI#6Bbi8a#0Ib1+W!!G(rF-4l{7b%G`Tb&EVRgs+ zeVd{={Kj4V7f#+2IE@&UJDYn!W2MZmFg8!~h1e-~K1~<=`kJ#`&3R$nS%d!I2n4tX zyr4xq4)r{0Q)n1k8oF9VqZ^TE;sN#Yn|3#U-b1(s@3f1^r1E5%Butu3`#i-mku+t4 z_&Io0lZZ7f=Lelwjm$b%2MX{G_3WF5>tgUCj*=Lek+uD~1$1thYR%2zaC46XqfS&h z%Ka>_g%ly`#zsCou_tvUgI0`6@)O7vn%ttmbxN4 zDF1K=b$gscBWZ@22l&YxbH=~%c6Xffxx9A&85^_yjEyPG`Ob0r>CwsI^m+4wxqaU6 z!RuqWhbzYblk;G7?bbUj=>48}KOore&$mhP{*u3i)nprZl2>Pj$?f>U1oZeYor%TE z;_{3q74F`S)Ma%!CJF6(AwSuYK;Y*Nj1LqH2p!k$+|Cr_atjk^K%M$E3*I?P#FIZ| zjONz)Te4oBvHjc&5F|>a;lB$atZNKEhy>J<`| zLlZH&3-ksSsfxl$hEmAJC}ltfWE~KNwksZ?jwo5!(4Zza$zeIm9I7RWy17=9Y5d+e zY%oA=^%~9!vI00An8BM$89KOAMN{G^2iGe;eJWMK~z?bk>!O~ zR8t+TA)b7jVe(Af9kT22v_vU^ApWlRg|ir}p;-YAGB3VL?DJ_@^?>{|t^9jH7zVu& z^t{@@kfBjsG+o^elu$WPD!3{@wY(v{?7(TkM&ewf6r(jY!gJ|?RsGh`*Dl7LRUzZk zZC1Uf>w}+oA4T1el6((hr11wt*g*gcjUhhKNhrEK%=cGeQbe{HpiC`Q0k&(Nzv&8V z@UkMpIf$@erJrav34p9sI3PwHG>ncMRmc$x;-l7F+RSBHS#}1+GYSL85SPF_l>JdU zaSwus8#KUY#i*+MB-F((mr%8bSaugAnr}vk)tdQ-v^th7cAP2H2+7q)Ol3;Y6s6=) zd7S=M5B;DVU{o>3q|9rfu<{H6Nbk*>BM+95j2?M91wGo z-rKLw5hXBG${4ioIXi(!BO)#%GH*a4+dxb~NYEz=NI=ddW}Dy#fTM_r0Ol0_F|MFc zL_~N|V)XyQ=HUqXM75MBc1W}vNShHT`owq>;QkTFKq2T8wVIP6CN*v#^TnVM5vN57 zB_{-2P2;i!zYLeULuxA)`=NuWbQy-U~a-zunl`7-Nx=a z_bRHST#$n7ytZs!*0-kEDZ7~p!a8d~*74zLpUOk8A|bCqXwe3DRSs z4vm0(jMjgS%^E z!xfJYNjC**e5OfuHL`@6fD)(7XiN7A3Ak+?4FOK*C=)%MGyyI|=L+{;Eu9y)B0cR@ zewT-lqq_<1AC#D)2CkJ9U5ykkIrH?Lu2$x^yyyB#$qxIb3uiu<)(lXarWFh;czArk zOO(0D646uVOUx_}f})*wmAALjb*wN3Sc5Pdd5M}9i%sZ1!piCQ@e{%dIIc}x)AkH`NLXMUqX zTmaQ10{sk$aq_AN4qI|IDkny$LJNvp_zpwmn>-i4LfkVXa?^9siYX12zB6-Mh55r& zBI4Vv5#bWzC-!m9%N_?NuEhAd*UCK6l?dF>^*a$H8-gBB?JfOez;iM+ZNU9p%7Bn- z**G^*TVfFmlJ*&!hgb>=BwjE5udb;3xsolC_QN@e_-z*ISSh2~o#F8G4v)S_4R7ia;U$Dm`jU^!;2Y3TgX-L2Vd=2@GX`47SfR@$j># z23;VTk9`@4um(gfRS)A3jwrE19G49jW`Yc1#6iUc3rxW(8?J;?eTq0zYMvCM#{J^m z`Z-e1rjLx@sr)fXt#c7Hk`&LJ95hkZi41sDjI$f46s1QINCB^oWY1jECqB`sG9_@v zxugU_y=^`VluqZ=2_!+@1qdP^YIy}-%&KzXKNs(D4RR`P;!^8eB*87!_WchoolaQ> zd_v5RTqr3@OK$K2RF(K&26Pg-0TnLMzvn=|ucDfFp%%IK&L)vG6P=p3u6XymGpH0C z#?3GA$_sU$$+T(=Hc#m2I9y!hZa?dC<#e2Zlnr2a@nJLUB~^3 z?tFm|4@sD@Z!SFis;@;<&qspk2Zz)IkXjmk1dD$F?GZ9|Ph?E;F2YyJ% zRK*}d6O0FrfR+-)A7$Yd7#x*IqgNT#W=ZeA1^RR!8%}V7%>#NQba`fHq-03hunnk( zVM%GCb9I7>@Ps2v@B1|3Q{=6w=jPz=#SA@^QbuGLAyC{;2S`ci|Lh2f6=Ro$_B8Yz zA*DzFar@=~RHC{(vpP~Tj0@!yKbNDiUP<)U;QRa*#fpLCCW3Yaw>$}17e*NI-}J+w?xWs?epkm6fa85P4dv6u z2~en0bjR?>mH zp}$i8(l zZfVASTd3{xg2!u%3(G2mB@7wHQ*YhsR!d((7hLdJa?Yx^Tz;f&3OtpC!PM^?jGiJU zDsp2AiekKt)iA58=3wbNu@p??xiC}#RNDmXLhxRS;0^|$4IuQ_5`a|L8PFP++zDAf zj9kbGh!c>UA$AIIG*EFQ6>ed8MR39ep}b5$xgX7Q5!?hURlslr5&cXcNiK{4HP{`f z<<3V5%WUxpSQ}9deK18X>=u{g1k4Gjhazbo41EtHO0u{pvLZwdn*R$3`}HPmISb+6 zG)nUcE&XtwbD{R;g3UoSccL+vP;*B6VHI51ok@iC`BSrNS$}tV zj6?@l_bJeWRlf98i(hR^VQ*ucocI{!>@E^IMRt0`bI8`7GlaYa3nJ@v(xoP+`oJM` z+~IOCH95cGIs%X$P>Tvv&^HAh^~nQUQ(H@N(&opIeoob7!nSPVJgfavryOVOoUiAk z=GXNYKn}Ey6{(Q`3`z%cM%+nC#wjI!xtZZr$N^izGcKY##89 zY=R9Mh$FfmFoR_TjMUL*PR2sOOzPiD6sH0PM+zHQGeIyg_>ZsXQ)#=w83hvC*S-BT z3^Aw!&<&yV@8&zI6BFYR^zVb+U|9hp0h`59Sv=|&5Rr8Q_AM*ht^>8g#y`WN_(O(* zAE|2x<5oaXj6(D5<2PXqcG1* zwQ++<*(8SbyX?lM^38_JK-ax-Qu<_koG1xvxhpW%5FB8*{+Ry3JtF$Vb1Kb)68faI$SW`%Fmw|AtywK{;6J1hyooUp6-!tWLC$8-D6)C3d)?1~- zQ2WZWuz=WMl4^*&Z&CnBM$;VV+z%1rb_i@J%63 zzGZk*csB6K8QEG9-Wi0e#=x|{!wo3pv+&OSPMi8mLaZ~u%^Abr@J4Ls+6cxcHrTz~4;? z^Tb(%^=lzs>+}gLs<7a=T+(Eae8qDZ#anPl{yGR03lmJDQ2>hbK>27^lAe{4@ONt# z9rJMSuv}sc4SItZmbe2*SRTV)ljZrO7$N~N>R@49UqC*`UhqG)!`fwe22AS`=|4zi zEN^%$#FJI?GuRF3Uce3~`w54WHKCwi>)?cB#kgY0-#P^)WXa+-+j;$fA}`LYbzGw+&N@(JhmswYp9m?9ECWy2;H*ap8i-+CIXgDfmKFm6f% zFrjML*f7E40}+rB_ISjb;~X|)?{cc^I z9EbLRB<2_I*w{@ta7^(>S}>y)L$dYwV7!g8mqOR8_HU7#U!($bZukJ>UufWQZ{sU0 zoJ(|fc$Q6W2(WKK?%k2(naG!T8r()Oj~bPp+l4yeUg2tu0q%P)mgo9tRcC7>tpT0Z zbr%YC?^ZH}R)+j0#R_*$x=pW~#tCBC9GQYKtE_|n4Ezi|vpfGG>p^sDgZ zq9u;y0%02hREN&Xg=nNqIuwD00Y5@$w}q&wlEkSA-5_fwmMH>MYR8=G$hja(CRAes zl$gfcl)?YP?&NdP5?OR>fq&J|SN<9q<Nu=ri&&b#s@aR5FpzmbOe#NRMViR;%s;xF+$U*t_%{Z~-w6qmWTO!K zSjwF0wH;Oi0%AtE!!mm%Q)#p(X1M}oSE-H1Y*!o7tvITVfC9IPsbGks$Wg{+Ai?-? z-#Mm)uiB0he$vB!(4D#A%@He&Xc<5sBs~7m`JPkG`V1qA7r~A5lTFf!j`rjj13Ag~ zYj(j_hZw%)`@9u%EpwfSE+MEZ{2a{0NBqTLXu!IAD` z{_o#!qCShKr<_HR43?q!=TL}&ql^F|fvnA^v{qY>gIfcv``5`zV41!!Y(^W?cPWdJ6rFpwT>3E=u(3Z== ztXqzKO0a-``+7^kpHFv}i|!YAex9qWBFSz3V0@jY$&ttauij0Yjak<#Sub>(C-k2U zo0JQ|urPj?OeZI;W=lE%N75uXQk3Ydm`Jr8=Y%NiZ+XHFL+R z{IFg{+5ILX)>4R&pl+MvomRDW-|lU}8I`=^B-Lr%IWT5+Hu$^Yobgm(citPa*yZy3 zYiOBHl(lJD-LD?9!T&asb29c%DU)o&|F(L=>~srLmOrNk_3FzdbZa#o&T|s6O)r^gxCg@lGOaYk&Ikq=_9kZ6!v3 zC@uX+%Rg)_U}_B!)xuaX1xi)$Z9}*Q) z_W+o6>)+rZ<&1`qbpc~0xWoYC+0rK%osPW7@X8xZDO=4aVNZP)t9NT;^g!F+Dp!^- zShGJnt*1Si)_|D^YO)8@gfVB)5;GWjf8yIr8+9-lV~aI=h?o(U z-@7n)$dpF?NLcxCzVLFn;cSOE2|_5}lG)MxN%{sXVZelqTNmshV#4N23}ArqCbIp= zTqN=dA;e5#shIG>L}5heI37ZX!jE?vs-x2m)K;uaaHG=SQ>tX;86wWoMsk~_uAk6gvl_)6p{aPtdRN*4#z#$ z-&8$79DA}B0MFK+P2CaVs16PDY5<9M+rdFJ3XkGE04HROtp$>RN^}w`{+*|yJ=riI zdBvz<2I=o-y|PX%{~Z}*6c*{epTJ5*T(A-x;-eM}!C*qr{J7-OJUh;&AEz33WvdM z2yz1KM;t_mD1==Y5%60mw9gHQ)eb*kOdZ^fNE*Zs(uX^o9SHU#j*MUEFGQi)4@i&z z+P=e$ZcI&~*vm_!k7|!&V!>Y9E6Jgcol0VP!P^7z4F#3&+R_!NNI@9#s?<+T-xjGj z>fi2lCQKh2x7!XTVl9*`K$DJ$o#}X?#|!7QQmB8@n98uN<8{mgDiEr#QZ{S{3|aOd za3});TMp)3W~%WP2XHjefCKUAt+_Y@^f0U>naqMc zLw46!1c9{ctC=366JZ{Vm70Pt1ZZNT2Rz5AkcYLTPX6YETayOxt80wqU0Yg}DndM> zc&4d5z_vg(*V9^nw(G08y0CPGQkr(8kXso~eEU4lmKsuasLDMG_+Zp#1H}|?+r!(h z(eMWU)}=tUjr1FZIq~*vO=_GVPxBFCvGASkoZg^{Dw&Dfw;0P#8wg7|_=LIZ4LG1& zj5v;5f;)($7?8x+af$5LGk8z-{MAa7Ia1Y2A>OQB!?l=i9^>}3Nly{Z5tucPog;A; zzxs6Iv$y<`tf4flOSzHnb|jQ9w*ZTf3RB9O}eB6p21ZVjj( znOj+c%4chE3LuKMnIMuDeG`D0GhP)fw5T2-tY_1jLvT;0+X-QlOQsb~KZ&SZYKS#5r+y8a&xW=hKm;E=m3f@H zm}4{dsjTr*-{7gF>K$cl3g(;JQPx62X2D<$t6_?Y&VJ@w!wFWPq@?#)F9oAE`fB^n z1f5x36^Bg_b3U9uz0EY zcLE%*pxDR4n_h_(a~TXW?Vw0kviLr+RC755hQF{vCQgLL4apDCR2Wnn zs%;R&-8}e3#x5?cPm+M--7_p$>C*3fMlm2VD$Cbu!|*ETy(mWERa9eO$i(^N>^8Y1 zKNp6tW5$|F9suRWQ4GU@T(FATWNp|c)VtS;Rz>PHSm zV#l~QQ6#=&c&cAos4U7gmh*%pah(NZ=rcIz7~hn@oH*t~yx<14$^k9dmq9{Rt*wb+@< zJksG2G}v*acn`E*6g^bCTXtG?RYSmEke-&t>PdIP@ z{)-&hZTclIgFX)5u4BrXjBDFIWTT;k`M+|RA)F;|3Wt+(8aY$7m!1n*y>o&H%ZjZd zb`_7p`KC5;E9MEWq8v=q$FxbJf_ynRB@td~*g(e5YpO8K%H<sD(dd^Xap`@3Fw324}2ejaKrVIghLv6@)M&SvgLT zO_fuC4_Zc&Ocn?MPwrDb_Y@IPma=rWlB9wY|8qG5BWh4O8I7?^`QFg3M*IxM48*$lT)kZEAT4NU}E?ID4GN)=_zT(2=r#TZ^$lAsc z(5Fu!qdh4Lqd{wxrY(NfWBaR3)m**H?~EVc=pXon&GBV$&$m z36?FUW0(1p{p<5Hl=ea6|sQ`;Dt<+>f>ADWG0A(77u+)X|3u4+uWjiV9 zstqhhWoq}}M6~8%0Ba;q#2MxvRG^(iCg`EI}zIiiXF<)VYSd@ zb#t)$?_nB3QqsM^sYvPys!++7RCwpov-}%tq+gCXgnGQMefbr|f^fD;M4(CnPL0<$ zXds4aD^PALX!u|_7?61&A?$SwLIz4w@cQbgt>9>`kTCwCat>0t23jqsVJqk=kOZ!f zcK)Gq%!auJI#f7u>KHdrM5>TWprPV7o_+>usYGroXwfh@u8{lzp>lOexduuwl=|wZ z)Np7^5QVDza8ivC;zN77N)(=bR=s`2RJt>@RO&5@u&+*}1cWU3G+y_ZH@`286BOt^u1+n#H{G!-)Tsf4?nFRz_i9jd z4|}iqo8Gp3cNgD3`o6SW3vQ*kawOwxr<><7@=)aRY#w$ zm=X0i)cg~Hp8cvVy!bJ0!6%VB;p<^~#p9DwGc%Ho<9r+98u*P(-_NY~`jhn1)b&o@ z=n6_l_4ntK!CgBw8)S>_Df`EN*Tme)iH>!ILw)LsLt-(ma-q|R?;=L6 zw=P9YN;AioHQ-Y)yD%ba+&XI)eVS+>b^Fz^tcZ~@`QUMk~W{XT+gmTu6$Fq$w9 zt)ko*skFq#42_7bh55iPXr1ZNbTs(=CTzI?2@sl5j9!f~HEvC{jYQQV=;v^Hk%MZL zwAPI|RrMrDap?7H;;I)kKj?!nb7fReRaEx^mX@HtCvB9$DnNmclY#9WnuI4Jz+FrQ!nEY&sG6|VX{=F)7Uigx%Oc9xBGDmt& za{~3DY9wq$8_3^yRA%hk&td?|*i&1Qfu_DPw+2T>clsL=NtNvb3`&M44m1e;&x~Jh z_LjB2flL8cTy2>ZzWK_$2qN9Z=`l1$6B{N3Yy}TKSg5!SCTM>;L7b4mH&JQ7+7ez0 z^_97DRI-axTsVv-HfBgz8J=>mAoM>v{=E^pzg1}8CZul>6Rwp{M6Iv`CxUhgBwd~N zAfdI^zygEV`6G_gnQ`IQ(4Bn<00LWO+9kXVwpJ$)bv0ezo4Bem+%1B;NEo6|egqW} z2t`!>Fyf0(^uVI1SB_2;Q`YQ_3X>t-LNc%jfgoY3D&-$2LRSxMVKdxDO15>wL79&v z64m7q)|HasM*wJ81WOY$M4M9t6`|V)wXhimASHXOAk-^IR|+ea_cBrjNBM+fD;gH+PxhA13eRU_jyKz3E0*gFY5a+l>YzL z8Nq-r_H>lwRCqSOSDRW5ce3numO#yOq zWM3{5Rg~&82TkBuE(?y*I~5Qvuu6Htx)i5R7cbn!LsP@%xa}lEyM?r-uvJ=VtRgO(eObulVOi0ZK@n*> z)l?@Jr|z8*dPqtvzR?|NJf#zje;d!C{VWz6RP<~`MATF+tL|x3_}&WY359b@MQABb zW%P%NBtEJxd0LX*)4fHBVm}|~gm!xhX~(^bW4z9qWtkL%$)qeqO1UG6p^SzgVsBA- ze#pw)@|=jP1uYG6tI63JQRn@lN}SFs4(oIEEEAUw1fHV|F7#p9!9-(3Hz0WF@0?jCtGQXxG~1KL5kUrty%kl;+9Tc{u(PbfYPwOA*fegf%N z)Q=`?+jjS}UcNeAIAd4*pfkRVyJ|2d!C+mAAhpJM)QJCjKQ+H-UjIYKECKcJf<7sD>B8~hzmPLFrcYvQ)b{qpwn?eH z&XI%lwMrUNY{Qlq`lyjH#j5F*eA*1$)_&YmCqXRG`h^|odvQ3DF?^#9yc{^Z=(jS> zVOK~H48r?H#eAhCK=RC!WdqZJaEt<0-JTYpe{M-YG}4xF2;EeDbnRa`kL}TOZvTnD z!;`H8-6MZI1zIzo=FoF)zlFQgmc0noXM0@fUo(zvk$Z02g}uU)B?r}ka2x?zJ)frE zb8erFxzm<02-#G9WbR*CfvxU)km$!wd6h(A-kRf=q-io?tYyHEIavgz8OmA&vYf$J z8YzG5v#MRn-Rrw5lRQ*U&8@+2${slCO18)K!srPn5S2G#b2m*><7|AG6ir9H#X|bH zSZ|`|c(0K>J?hBzt&VGzpWNw9RV%5p+Qha7_0fXWQ);ON=4Vws6MKL++I*~x=IS&| zsb!N?_%gTLxLm_+GN?p__mcEz*W9;_iIs`=$3Wf!6@;z@4ESOPR!f)eCl-cW<_qZl zp~mL|dlkZz>H6y~4c3P16bvkYdY)1QsJz<`R*2<`=znr(bMfKSFqK-mgD2?_jJyb$c{@^1^#BuJx9i8{ z>(SBX!^cPa`Bb}Vb7%3RczT1iZEnZBN&D7^!z|VV^#1hw0;jBI1Lw8tq~t37htIy2 zF7$^y)3a05{OKvD6X#n~yODA2{$A@iDH2UYTD$hb-y2l=XQluyQo z2OsIZRi|360WrvyQFd;tw(#)&4*y(lpV7o_)BC$!AiG)d^KRx$H?3`b{;Y}^sW@Z= zNv_YLbhRyWgY&%x7Cx=Z{JyK#W(FT2+2^oOOR#zhN0E;)w~X2}dy5tFvTX?9w8N z>OYt0*?zY72DXM%-M9Fr1{C~V>kd`w7A&9Mx5aXHv07vmXXu7NV0l3PkGjq}DDG@& z!#IO`aED;Q-Q7L7I|L8G-8HyNaEIV9xVyW%y99T>%I1E%+1-0<=G4qz&#%v%GgbX| zb-f+8${?H}R_I80P0z*M%n!f*#g(3OGZM2-SSeZN4u5pTvdPGNM|ah&f5!60#_vpJ z8S96Q5b_eZk?E0MZa&Y{L9^%UXJuO!KVVh8`^p!#Yd2=@>mU}x3kHVGOIeTeLR`Az zkn!*F+K{VR>lQrgjq}!Yy!Y7a&CD6eq+JaCn40d0 z4w9R$w($$wO)jgaa|_m-o3_mE=gQ(XJI4cFqdI!7qJt(xrb>C|}Ml&>$qzVUlF zFCMiW>mjV^)U~xg9q&;;dow)DYo2s&>y_NRsxWvwo_=3{qWKii{_6eH+v1lug{Cnt zbAmuu1U)DS2rd)|2=YI?Dd<#%)&B6M_>RdV{B!;3OQGB;)h&SBius5%?l!BypesZ( zW2)qDjk*-A8&ECVhm&>|M5al$vo0%BLP;Q^dD!V|vNmF5YPL?t4f7&WaLETQn}`m9 z-T^mFLC~4NB*mCC$Q98j&(IYzraxfZ&Fm7NmyNEFU{k-!)$74fCu5l>SZ}aMmu%Bi zSvawn+z5Xb!P&i%u{QRtGrE(Z|0Hjf8t%?gMVcZeYR3$Ri`jGKkj6Q`G;s?7|6BLw zYib4HR#jo@yjaba)v6Tv1A$?mauPP-;_20sCR;y z(I2IUdqvYwDKnqK=}h2*3C@AnMLbcqxPk>fYS+g+;h26taV@ZnBi!L5Z3HGy!@KKY zsO|)ret@&*Z->-5E05b$=pE+m`FvsdeUdqZ373FtHC1cdK>rzO!f7RR6BNIRdALgO zG-TJ)sQnEwp60V_KB&s!r-S`|q*wDYSI+{^zvuWvRW$87+z zR?rL4X!Nql0BE~6D{_OIx{{Q$n3jw&1aUT;6T=`k%T=6RHS*{V%JUaIhsur`7jfkFC)JRRH+t)vjr z41nl^hs6S#k#Vy`Pb50})Hmg~1qRkk!FVJvM@C0&B<=6tL8en=;N1bw?Pn`%lvQ?E z>frs(`m!YA{4&j7&@&#=n4t>{{1?$v=T=Ee8V(nn=U(t)g5^>8#V2m*P55W+b1ybf z;1zrQSlXM=z++Ga+Q5tQybX2Mt4v5SiEcqZ8^{zG-A9qB+|lwelDs-8cbz(=FOJ~c zBjRx;!kBF!s+crq2jQv|FVN_9GqRXgf_dR)y#;w~4-%ZqOO{t#>DkN^S@pr4ps^4I z-uRpwl@QEPAZzxia+T@$X7vea4l}a8n_3f0KY^Ll)8~JMku-W~)C(*2Hik~z!C7Ey z*?>Kk<19cx@nmoGw0cp}T91|zL7Ie1mZ2~nj-OYTq>f#VUUPevl{m!LQ$SnsL0*-$ z;h(!H{$7z!5V~E5xe(>-iF4dpL{)HPKuRMtydYIrgA1>?^(|)3=2=$e;TeU;vzQib z1Ip5!v&g2?-PntD?@r#KqM|8_lYpDQc_IN^wxolqHh6-KmP}=_P==!^A3C!i-l4 z2q(Lw?ygoz#2{CU)f&}-OWj=SR*B1qyVVJ}lWQ@O@Qj_qr@!opMAPKe*pP>2o+bn% z?1a2#X2UQ!tRlj|TOM0zbk6t)l+SS1900@N;=At!Wd=fNvH4x=;Br&!+T6|H$$vkz zs(__5Pe;P@M(L;md(`7f0$UeH<`BhFR5PfS_liZrX}Cq|iu4|Ge!VO@C%jGSpC=iv z9>?ZNA2o6)^vh&V3UgaUY91Rk5pVlAldxK*S0r=1XO-ZG6BgO#3EBVFbg|t31btdQ zquRgMwCQf$rs;B!2}(Tynvk1oblqP)`ojZ2v+FRB!F-E9*=%k; zFRP*Dw!J*>gEf1Vk(!J*PaHfmGk~Iy%hW(o*!MC*ULb}jAE9MUegl)=$1-zo3s=>{ z(6Pw8v&O->fpwXJ?q`N59dir}Mm0WM5j+Z$k*LOckSNDz?5cXtiY{6nDkE%8$(MtI zKeL1?#4|?}cEMqolk?{z^&4YPQtVE9oi-ApSC4g6g4vJB#(nC8~ z$xnodK^y#IxqCMbgVv-P*Jx7uz_9eT^=Qi;>BR)O#Ei}-;C_s5*$}IGhS3q;vMyNN z(KpTR+DdCwp^0g^GHnuO$%2FjAK7?WnsAyE~L zPuU}O5eB7dN<6NtsLLJBLh3@VM^Z#eYCr(Vj+cn?A&Q7HPW$-+kqzyZ+rTDC3c?p zsH<4%ccFL?1d8Cpu;Bx+)TCi8UA4-JhUgd(FJz52h9eXF^5`av8C4~5e)mojfDW^+a6P=`nB`i*}5}4)Y%3O`q zt%F<6iOTvmaGB|o8Tr)FFp<{mq&V3ye+ANZlM=iJWY-=P&!MdlB$>$hl9+tL0l(NA zQWGr`fATR}$Iwv~`7xBU;($S`>QsLAR>l-BY)MN*zPdgna$PF`!%{ZDJ+OHG_yeib z=sQwYO_d-_6I~Q_U@z?HrOW{88EuaE8ExzYzJn$(dE@cQn#MFSk!qX8T23zPi-O!V zu=hkThhouRr2ky-BOmPU1-cYVAZ{ZxO#Vdm$d;)f7KDuEp2jM?PW%L~27C`33^%Gc zJ|neqf)+IiLSRe+7mk;dN`^W0EOl-OkDjec0uDV;3eABmlryMwJisQ4xStHKlFGVE zEU(jZFaV$@%k^%$$HOlOvIjm?I0&msjjy0f1YQy>XpG6n&cwxXi zxKoDuGAgR;&!v;M@*y-cXuZE)eEc4~1{r+j#rwXWC{qk?cbWmGR%aKoe9nqNsFaS` zP^*l2RI@eWK%l6aHfCE?l}a{Qo;38zd=rNyn{@5?Vi9+g!rxC7(<0NBPO~(;^T!^M z68DZuFr?cat177lq{utgt%;l<1N+Fry&TWgJhbQ>R1!SmLl)gp`++oqI0o-u<5OoROp=4w0< zZdz6Cdm=7_(~XO-){RZYE9(SX?hWVgB2ea@uF|%Xr9Nzmd{%ReEo9t{0#=wU- z=BzB`TwrfYC1vJCZ&D}5*N=lJyowiaWiPJ9i+>x^o^ovbQTk=^u97-QUzW~E)P_p^ zpzflvm|Is53}dmVURWRrb}N%Sy>^4wFnzbXmdD;)hUiv$h`ZT8I#FGk%I_Iw6m4nk zfyBZ?SEy77tW*e<|6uSr3vCH;nLVWvB~?>~4+y{h+M&-6^|u zNOj!2rnIVc#Ki5`H#ZO6DIAKyln!$kn||ObIc7%Vm`B(Uhy8p&mUYCYm699P#aMDw zE1#4=7l`u6;dKuWBj#7Mc^>SpX0*E=>`3_!*Ul_2UQ7%v2+O!)o^h?EX_hmic=)S1 z{LJ$$HqNVe=TxV?~X5*&!;x&ztabY)= z`%@u!3oNIJ7UsU9Eb-?|w{u4^k24YG*z`#hk^$9r+)^Bf{J!#=lI-0po2q4fcoA-phKcV)>33)WeFRlJ3*lX&;i_f zx`hl`3>+L-0p5mbLcT(qKG_0K5U>H@P(lmAK2*q*$cXO%wftEO9QWBwI@VHE0#(S5 zyW&3|+Knz=E1t!X#W8UROBx1N^3{o-Nz7Nk_j9E{)(dE0XLcz`#4Yq6Pa$;5{`Hg- zPoRH}PtFE|qJTSCm~Zzx5p?jMFJ%NpbUcrucqd472y}>A`YZ;QB!-2BV9mPV<>p*E zdC0V?v(wQ>Y@7q^u=O-Y2c}dxd9km(gP*<_E*f>EtKZqalSFtSJocKY4#D z$yjV2;h*bIC8@1tyETC7wI=a^)Vk)G{5_}#E0%b(5_RFdKN~XofbrfytjP(Y%hvK^ zEOObHH~%afls`Qds;S-kDTW1|*;$p@*%uX7Cof?g6`*W?i!;huWMz&%q^Baj{M5t* z3oG=E^%Zxb&WtK+xKt6vVS`}ff*tv2ssuXA4f%s0j*-KQv3~Q9%%jX;==L%U_fTJr zFWHT|#i?6g-$IrO%B1NY{j9}V5geRkm_-%{y@}3nZpwp0_PK-`czK9MyZ1(SFSIhn zXVNW{v932GcNMP++yhb*^NXu@{E%TMr_rjlTD)L}vw z;RBk9xQWntnjh>C(2^Y9E3y@B8{gU%1RD%0zdzZ(p8qCYbD(Fbzqdye2+vxw-gmLf4|Y^;=cHDT?mm4FxOtU@9r2rp^Jd=?g| z4>SF2#}#OZS_=x5#HE!U2b|LaiK0_68<;so`L{GmiM4GzaybEe7gF$5QN-PEOXj2^ zFR!4g4=8~+5eRcyS*`TIS-gvbxlY6SQL&jc_9r^jikTSN#o>4NALcVGUCRfG*>bw< z^wBL+N{t#8=BjeQI?A_Ap6U&Qg=hFNg7{57HGM3Z!e~=2W700}RkI|Iq@O;;aaS#m zZ+t6rIP+In$hj5}Dsx>kUSe%>P%ZVOP8inCS1x7p2rZB|Z_+HCTTr!E=~AffcQKvt zLw8mH+RinR7m5QN`@TL`ZuzBwE?4dv@$?4d4%+$VW?`p)iUv_Ww0FqKS|;dU5Bad} z6S89lGmSzV;+(DxK*VEptF^u1RbZuFpsfz{qBC$1TmYjf&mdkfq?MzDb;&Q}s+Uj_xYksP-% z5JmeF1ZLIKvYNw}!Uty;RSIm6EQH1?l z-y_>pWZi_G^kw^;J_4bv0?otmQg-?oJv}Ta9pyA^T8^$?!BC=A`Fb9qS@>__b+ovl zXgB)$!rp1475dMsfAZ6M07#A-nfaN`G_pcS&{MieO*>%ou@oUilksa$D80QJT|~%L zZZ3^uLfACNT2!)k`_e3yn<zvYPJ*lTpLF&iGmt{gny3FJDmaZRM z1uMOIFDbTPgXmmjSG)(`|Jb_?1jD}m;<7;ceVItQ=~;7$NM))1xrk`#O$}}M(^we=eoPA>~(LXD0gn?or5&QW~%f-fUCv6aT_@YSMW>4L9hMD2wuj*9L)Ky z{jCyt&!lKsa+0-+zi4&2=GfN~^tgYWq6i2yMa3}K^2N>$76x`A{q;OB!T;%^&QEGU;WrmYQwg*;Z2msonxRk;ooG@UMeu_Y%_KPhQIJ9ZHw6FE_!?w0J#v0x6*KI zq?0dn)G8NtnK^AL{^YnIdW3fD?n%~&vWSu`va|7c3w2w)@q-{IxAIDuCd` z*%QUd*lqwRXf)`v%LN<;wsnUNzC7jBBXxzs+2@7;OxlnAsk{{A;UUAK*mEaVGZ;5@4*sLL!4?k2JrnzxpF9TC1arwKP_VT6;3OoCZ zxL%rJaFeL{^Xz#x_G73PrQQc$eKYVwT(*Lmz5WIdeVp;N@NlP{cUHD=NxmRq6Hjfn z#uQ2)*X-I0ekv9oN~LoTPOZyuwzb0l&hf&&-2Y~QR76NEM7$IkPJx*5eV{rPY}EkT zR_FVkZD|QuDq^az0GACwX%$INmvD$^KqU@@kkwk?f-+pyA_nSvW%U%{PocJ~T}Nk^ zmlRxU`;VhzH%C!{+%i;Zk$mj`cBgf;XIiqFO~5698{WTyYf^QDpKjvsQ8&`bU_d}9)c#TX|9{4R zKL5SD^`qNnM*5&EJsD&VgA9bMNcsH)2M9QoAkL9QdM#Ivk& zYtQbmuQ;iZitika!PT%axzFNEnFJ1ohWvSY4ju=4oNn%>2n#9Nzhk%sW>=knHJ+I_ z9l?1=;UroQ&^-oNi`U3FWEgRhoYb#Je~#dq_auWIpJ1WIy{hg@IyUm?DbU z+Pp2Q+-z>9V9hhfD(WN%@L!O82&W};yjRX?8t4t6YmE|h3l|a!cB)y*Te*2y zZMj%$xSuzF2(#W$B1Zwbr*AF~iqx`sI5=)yHD9U|TEstv2jN|?OM=Zi)Kows?A39% z@q{-5hjXvA8Ed+InCBj8il|tq^Q7cKh_cIxwPZjh*Oz#jbE^#d@k4jCEJjSyX-W)1 zjI~^W6lPx1bm(yj z$X*Wu#rbGrYLo^qhvYl7J zfksso8!AoeH&)h&@ruSsi2HpEF)+MN%pY)5a}rk+D_f5h3fLaF;Ah7LFt)e(v!)v; z)TO$4LN+}K9oJ=q*x-Mt!}Snp#9q9Mo|%FITJ_)DrD?mLE!dL_)}Ww8g6A^)P?eqT z1^TKW=sW0WwYk%?es85ntWYE)k3eyN2M@6HZ1;z(F3+jd9@#CD0uIjZI2ny z6=V#7I#l-+XP&ZV@#@QiFi-(GZ1GDdTFnRdzUurh#Ut~UUr`^cd3%)n_dYBM4z_6= zC&m*j&SBGEcKg9;j*exDmcuq&MR%jgq|QPRU#NCmRY}@e^A=iyH&j)XK+hwmZRL54 zfy3A&z{h3=j{)QxU8kqYvI8%TA9R>b0!$XcTGXL-@iD*DNjq(=w3{;NrwoSQy}Z?6nqsp=ir5s%-?ol0TL0MYwhXJH~)4)Z7IoG`!% z>L24Qv*Y(hprFBD;cspF569SmjZ=kk)suLgR66TbhBETq}Uzn8ZDGnSPM#U z6s7Z9bH->Dg{5ag3QrWKdDT!qLRHP8vCHCix#=J0Wmoc6vqzUE7}L2n?F0t5a(g$Ay1VSAbXpGSd`Fn#HXR^u?L)3Pr9J^s+pk# zf07y!F@%Y3W3v)haBt=@YA7CtWu?h)zH0H7*8BB z(+0l(mTnS=+V5GE3A3+V>;(u$tW7ufs4By~CAYuVb!3AKkU>QqYGPxd$5tOQrVVTW ztjVXL;eFE(chM(W?n4}d@6b}>@ux8tds5a^@}eLz`rh)M+%fHX&$@nfyyb|q^DX;{ zZX7D7&Jj$Gj;a}4zR3RPyX9=MW6WU%YRcL5!v<2!o{YX|H#pRFmxX|yJ&r)VEBJLp z*m`c~&8ntzK(7b2i=HloZKywP&MEZ_nFOb}q&NMbmF~cKF+y{|6S%;WC+JhUu%}d( zypQYV^LGUsmiv=nuw?+z(N<2U$smE7s!<@6yPX{oLp#AvlJN7-{4C@xldoF(l_6Xc zV*OO9Y4m0ZB%qwnjD4Z^4#5ji>D!YJ{1RS)v)4ezWeD%4&&!36 z+b-zSG+3} z0*fHfDdkb=wBG0gzug7lid4)p?ek!3ozK@Q_UGGVEtGQZ-LnJ<sh~6$I@#l&OuIODDKbDjY5y z1tT(>q1Nf2ucKvoSWiXi?f|7pmhY4&g4mpNA*Pi!g+%TJH?O=7-=Id^BQ40p5b;yM zaRDsO5CVG#q}QEdxC(w0TT1-H8P&po^U%>^+tNbwbk)oEv`QAp+-4G1*yDCW^?Hkm z>_MoVmsXHZ{MOqd%vpyJ(j6ckV&O~#YVl!ADauy)U_TV9Xc9}*^w*2R`_`$!7b6BD z0puj^^Y!eN?z>;~HlvE}S)UD1cYFCwCwy1SXgbemZhCd!${%m8cPQT9seIZM8#&R8 z#ZYtav5PIVPz`5tajG&YU5He~m<5JoK`sL^Z2buhFgO`e16bGyjq+^YeTS8G4M8Ei zxax?tc8odT>4#?3x9fvR-0z`f;=z1jX*h}u*936o(+feH}LNJ!4?I&(_@|* zMtVj%O-EI!I3n2uDQOUJ4U3fBCVLwrcN;4nxVHD$u>WYS@&;hWPd9T*e0#Xjsp+n_ zfn>a*XI57x>Qi~=7;5KUqpv~Mza6wECKO^wCx$jlgrknmjAO*YjAMh&{>~NMnHWIz zD#Sy#JuV!#C6*JvCkmEmDrT5uDAtv{B}$rVDCVDLDz^2_uunL{R6OS`f4#x=>q-3p zU)X@|{e>GR)A(?M>*uzM1&rpTY#Yj7nAX$H`C!mYT9BpqB-jzMg4fB#hUATKKf>(wZj#^Y(2LJTC2G zfUF_y1!~hVriVFzH?~H$sk@=m$^E>0$ zP#H*&KZeTu#ra?3WPWi#K|nzAd_Dfj`E$4oB*-6W;6HKy?g087hb8>m)_$SXRDPm< z^#c8UhyQME`F)3BB7aByr_luxnQ$RLH#{Qbfy1F`;+@CJBI}Mqn`Q~`d6U;mI}WI z8l?RX^e^E63G#<<_>1+|jrqG|_&v;_|Hk^8fcV?ZfrR>b-C;psK`_8UKzL1m{tx~S Dg$;nS literal 9350 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 YiA6yC@wuY{PyzUG0DwOAkN?5{0T553CjbBd diff --git a/src/SDL_fatal.c b/src/SDL_fatal.c index 74f90ed7d..3f1e1f6bb 100644 --- a/src/SDL_fatal.c +++ b/src/SDL_fatal.c @@ -25,6 +25,10 @@ static char rcsid = "@(#) $Id$"; #endif +#ifdef _WIN32_WCE +#define NO_SIGNAL_H +#endif + /* General fatal signal handling code for SDL */ #ifdef NO_SIGNAL_H diff --git a/src/SDL_loadso.c b/src/SDL_loadso.c index b38120743..9f87f87fc 100644 --- a/src/SDL_loadso.c +++ b/src/SDL_loadso.c @@ -31,7 +31,7 @@ static char rcsid = #include #if defined(USE_DLOPEN) # include -#elif defined(WIN32) +#elif defined(WIN32) || defined(_WIN32_WCE) # include #elif defined(__BEOS__) # include @@ -60,6 +60,30 @@ void *SDL_LoadObject(const char *sofile) /* * */ handle = dlopen(sofile, RTLD_NOW); loaderror = (char *)dlerror(); +#elif defined(_WIN32_WCE) +/* * */ + char errbuf[512]; + + wchar_t *errbuf_t = malloc(512 * sizeof(wchar_t)); + wchar_t *sofile_t = malloc((MAX_PATH+1) * sizeof(wchar_t)); + + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, sofile, -1, sofile_t, MAX_PATH); + handle = (void *)LoadLibrary(sofile_t); + + /* Generate an error message if all loads failed */ + if ( handle == NULL ) { + FormatMessage((FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM), + NULL, GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + errbuf_t, SDL_TABLESIZE(errbuf), NULL); + WideCharToMultiByte(CP_ACP, 0, errbuf_t, -1, errbuf, 511, NULL, NULL); + loaderror = errbuf; + } + + free(sofile_t); + free(errbuf_t); + #elif defined(WIN32) /* * */ char errbuf[512]; @@ -139,6 +163,30 @@ void *SDL_LoadFunction(void *handle, const char *name) if ( symbol == NULL ) { loaderror = (char *)dlerror(); } +#elif defined(_WIN32_WCE) +/* * */ + char errbuf[512]; + int length = strlen(name); + + wchar_t *name_t = malloc((length + 1) * sizeof(wchar_t)); + wchar_t *errbuf_t = malloc(512 * sizeof(wchar_t)); + + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, name_t, length); + + symbol = (void *)GetProcAddress((HMODULE)handle, name_t); + if ( symbol == NULL ) { + FormatMessage((FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM), + NULL, GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + errbuf_t, SDL_TABLESIZE(errbuf), NULL); + WideCharToMultiByte(CP_ACP, 0, errbuf_t, -1, errbuf, 511, NULL, NULL); + loaderror = errbuf; + } + + free(name_t); + free(errbuf_t); + #elif defined(WIN32) /* * */ char errbuf[512]; diff --git a/src/cdrom/dummy/SDL_syscdrom.c b/src/cdrom/dummy/SDL_syscdrom.c index cceb89592..adccd6608 100644 --- a/src/cdrom/dummy/SDL_syscdrom.c +++ b/src/cdrom/dummy/SDL_syscdrom.c @@ -40,3 +40,7 @@ void SDL_SYS_CDQuit(void) return; } +int SDL_CDROMInit(void) +{ + return 0; +} \ No newline at end of file diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index a8fa97203..cbb87371b 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -101,7 +101,7 @@ CPUid by definition. But it's nice to be able to prove it. :) */ : : "%rax", "%rcx" ); -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) __asm { pushfd ; Get original EFLAGS pop eax @@ -140,7 +140,7 @@ static __inline__ int CPU_getCPUIDFeatures() : : "%eax", "%ecx", "%edx", "%edi" ); -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) __asm { xor eax, eax ; Set up for CPUID instruction cpuid ; Get and save vendor ID @@ -175,7 +175,7 @@ static __inline__ int CPU_getCPUIDFeaturesExt() : : "%eax", "%ecx", "%edx", "%edi" ); -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) __asm { mov eax,80000000h ; Query for extended functions cpuid ; Get extended function limit diff --git a/src/events/SDL_quit.c b/src/events/SDL_quit.c index 1689df946..9204498da 100644 --- a/src/events/SDL_quit.c +++ b/src/events/SDL_quit.c @@ -27,6 +27,10 @@ static char rcsid = /* General quit handling code for SDL */ +#if defined (_WIN32_WCE) +#define NO_SIGNAL_H +#endif + #include #ifndef NO_SIGNAL_H #include diff --git a/src/joystick/dummy/SDL_sysjoystick.c b/src/joystick/dummy/SDL_sysjoystick.c index 2c1eeffb1..5f7d104b1 100644 --- a/src/joystick/dummy/SDL_sysjoystick.c +++ b/src/joystick/dummy/SDL_sysjoystick.c @@ -34,6 +34,8 @@ static char rcsid = #include "SDL_sysjoystick.h" #include "SDL_joystick_c.h" +Uint8 SDL_numjoysticks = 0; + /* Function to scan the system for joysticks. * This function should set SDL_numjoysticks to the number of available * joysticks. Joystick 0 should be the system default joystick. diff --git a/src/video/wincommon/SDL_sysevents.c b/src/video/wincommon/SDL_sysevents.c index 65472515f..16dcfb21a 100644 --- a/src/video/wincommon/SDL_sysevents.c +++ b/src/video/wincommon/SDL_sysevents.c @@ -40,6 +40,7 @@ static char rcsid = #include "SDL_lowvideo.h" #include "SDL_syswm_c.h" #include "SDL_main.h" +#include "SDL_loadso.h" #ifdef WMMSG_DEBUG #include "wmmsg.h" @@ -71,13 +72,37 @@ WORD *gamma_saved = NULL; /* Functions called by the message processing function */ -LONG -(*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)=NULL; +LONG (*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)=NULL; void (*WIN_RealizePalette)(_THIS); void (*WIN_PaletteChanged)(_THIS, HWND window); void (*WIN_WinPAINT)(_THIS, HDC hdc); extern void DIB_SwapGamma(_THIS); +#if defined(_WIN32_WCE) + +// dynamically load aygshell dll because we want SDL to work on HPC and be300 +HINSTANCE aygshell = NULL; +BOOL (WINAPI *SHFullScreen)(HWND hwndRequester, DWORD dwState) = 0; + +#define SHFS_SHOWTASKBAR 0x0001 +#define SHFS_HIDETASKBAR 0x0002 +#define SHFS_SHOWSIPBUTTON 0x0004 +#define SHFS_HIDESIPBUTTON 0x0008 +#define SHFS_SHOWSTARTICON 0x0010 +#define SHFS_HIDESTARTICON 0x0020 + +static void LoadAygshell(void) +{ + if( !aygshell ) + aygshell = SDL_LoadObject("aygshell.dll"); + if( aygshell ) + { + SHFullScreen = (int (WINAPI *)(struct HWND__ *,unsigned long)) SDL_LoadFunction(aygshell, "SHFullScreen"); + } +} + +#endif + static void SDL_RestoreGameMode(void) { #ifndef NO_CHANGEDISPLAYSETTINGS @@ -213,6 +238,18 @@ LONG CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) SDL_RestoreGameMode(); } } +#if defined(_WIN32_WCE) + if ( WINDIB_FULLSCREEN() ) + { + LoadAygshell(); + if( aygshell ) + SHFullScreen(SDL_Window, SHFS_HIDESTARTICON|SHFS_HIDETASKBAR|SHFS_HIDESIPBUTTON); + else + ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_HIDE); + + } +#endif + posted = SDL_PrivateAppActive(1, appstate); WIN_GetKeyboardState(); } else { @@ -230,6 +267,14 @@ LONG CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } if ( WINDIB_FULLSCREEN() ) { SDL_RestoreDesktopMode(); +#if defined(_WIN32_WCE) + LoadAygshell(); + if( aygshell ) + SHFullScreen(SDL_Window, SHFS_SHOWSTARTICON|SHFS_SHOWTASKBAR|SHFS_SHOWSIPBUTTON); + else + ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOW); + +#endif } } posted = SDL_PrivateAppActive(0, appstate); diff --git a/src/video/wincommon/SDL_syswm.c b/src/video/wincommon/SDL_syswm.c index bb329e35e..06d863aab 100644 --- a/src/video/wincommon/SDL_syswm.c +++ b/src/video/wincommon/SDL_syswm.c @@ -36,6 +36,8 @@ static char rcsid = #include "SDL_syswm_c.h" #include "SDL_wingl_c.h" #include "SDL_pixels_c.h" +#include "SDL_loadso.h" + #ifdef _WIN32_WCE #define DISABLE_ICON_SUPPORT @@ -48,6 +50,25 @@ static char rcsid = /* The screen icon -- needs to be freed on SDL_VideoQuit() */ HICON screen_icn = NULL; +#ifdef _WIN32_WCE + +BOOL (WINAPI *CoreCatchInput)(int flag) = NULL; +int input_catched = 0; +HINSTANCE coredll = NULL; + +// the same API call that gx.dll does to catch the input +void LoadInputCatchFunc() +{ + coredll = SDL_LoadObject("coredll.dll"); + if( coredll ) + { + CoreCatchInput = (int (WINAPI *)(int)) GetProcAddress(coredll, (const unsigned short *) 1453); + } +} + +#endif + + /* Win32 icon mask semantics are different from those of SDL: SDL applies the mask to the icon and copies result to desktop. Win32 applies the mask to the desktop and XORs the icon on. @@ -245,6 +266,15 @@ SDL_GrabMode WIN_GrabInput(_THIS, SDL_GrabMode mode) ClientToScreen(SDL_Window, &pt); SetCursorPos(pt.x,pt.y); } +#ifdef _WIN32_WCE + if( input_catched ) + { + if( !CoreCatchInput ) LoadInputCatchFunc(); + + if( CoreCatchInput ) + CoreCatchInput(0); + } +#endif } else { ClipCursor(&SDL_bounds); if ( !(SDL_cursorstate & CURSOR_VISIBLE) ) { @@ -257,6 +287,15 @@ SDL_GrabMode WIN_GrabInput(_THIS, SDL_GrabMode mode) ClientToScreen(SDL_Window, &pt); SetCursorPos(pt.x, pt.y); } +#ifdef _WIN32_WCE + if( !input_catched ) + { + if( !CoreCatchInput ) LoadInputCatchFunc(); + + if( CoreCatchInput ) + CoreCatchInput(1); + } +#endif } return(mode); } diff --git a/src/video/windib/SDL_dibevents.c b/src/video/windib/SDL_dibevents.c index 43b8a4ab6..a7c3f3622 100644 --- a/src/video/windib/SDL_dibevents.c +++ b/src/video/windib/SDL_dibevents.c @@ -360,12 +360,25 @@ static SDL_keysym *TranslateKey(UINT vkey, UINT scancode, SDL_keysym *keysym, in int DIB_CreateWindow(_THIS) { +#if defined(_WIN32_WCE) && (_WIN32_WCE < 300) + wchar_t *SDL_windowid_t; +#endif + #ifndef CS_BYTEALIGNCLIENT #define CS_BYTEALIGNCLIENT 0 #endif SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT, 0); if ( SDL_windowid ) { + +// wince 2.1 does not have strtol +#if defined(_WIN32_WCE) && (_WIN32_WCE < 300) + SDL_windowid_t = malloc((strlen(SDL_windowid) + 1) * sizeof(wchar_t)); + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, SDL_windowid, -1, SDL_windowid_t, strlen(SDL_windowid) + 1); + SDL_Window = (HWND)wcstol(SDL_windowid_t, NULL, 0); + free(SDL_windowid_t); +#else SDL_Window = (HWND)strtol(SDL_windowid, NULL, 0); +#endif if ( SDL_Window == NULL ) { SDL_SetError("Couldn't get user specified window"); return(-1); diff --git a/src/video/windib/SDL_dibvideo.c b/src/video/windib/SDL_dibvideo.c index aa74bf726..0945f667c 100644 --- a/src/video/windib/SDL_dibvideo.c +++ b/src/video/windib/SDL_dibvideo.c @@ -29,9 +29,13 @@ static char rcsid = #include #include #include -#if defined(WIN32_PLATFORM_PSPC) -#include // Add Pocket PC includes -#pragma comment( lib, "aygshell" ) // Link Pocket PC library + + +#if defined(_WIN32_WCE) + +// defined and used in SDL_sysevents.c +extern HINSTANCE aygshell; + #endif /* Not yet in the mingw32 cross-compile headers */ @@ -191,7 +195,7 @@ static SDL_VideoDevice *DIB_CreateDevice(int devindex) } VideoBootStrap WINDIB_bootstrap = { - "windib", "Win95/98/NT/2000 GDI", + "windib", "Win95/98/NT/2000/CE GDI", DIB_Available, DIB_CreateDevice }; @@ -389,12 +393,6 @@ static int DIB_SussScreenDepth() hdc = GetDC(SDL_Window); depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL); ReleaseDC(SDL_Window, hdc); -#ifndef _WIN32_WCE - // AFAIK 16 bit CE devices have indeed RGB 565 - if ( depth == 16 ) { - depth = 15; /* GDI defined as RGB 555 */ - } -#endif return(depth); #else int dib_size; @@ -518,23 +516,18 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, video->h = height; video->pitch = SDL_CalculatePitch(video); -#ifdef WIN32_PLATFORM_PSPC - /* Stuff to hide that $#!^%#$ WinCE taskbar in fullscreen... */ - if ( flags & SDL_FULLSCREEN ) { - if ( !(prev_flags & SDL_FULLSCREEN) ) { - SHFullScreen(SDL_Window, SHFS_HIDETASKBAR); - SHFullScreen(SDL_Window, SHFS_HIDESIPBUTTON); - ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_HIDE); - } + /* Small fix for WinCE/Win32 - when activating window + SDL_VideoSurface is equal to zero, so activating code + is not called properly for fullscreen windows because + macros WINDIB_FULLSCREEN uses SDL_VideoSurface + */ + SDL_VideoSurface = video; + +#if defined(_WIN32_WCE) + if ( flags & SDL_FULLSCREEN ) video->flags |= SDL_FULLSCREEN; - } else { - if ( prev_flags & SDL_FULLSCREEN ) { - SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR); - SHFullScreen(SDL_Window, SHFS_SHOWSIPBUTTON); - ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL); - } - } #endif + #ifndef NO_CHANGEDISPLAYSETTINGS /* Set fullscreen mode if appropriate */ if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { @@ -942,14 +935,6 @@ void DIB_VideoQuit(_THIS) if ( SDL_Window ) { /* Delete the screen bitmap (also frees screen->pixels) */ if ( this->screen ) { -#ifdef WIN32_PLATFORM_PSPC - if ( this->screen->flags & SDL_FULLSCREEN ) { - /* Unhide taskbar, etc. */ - SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR); - SHFullScreen(SDL_Window, SHFS_SHOWSIPBUTTON); - ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL); - } -#endif #ifndef NO_CHANGEDISPLAYSETTINGS if ( this->screen->flags & SDL_FULLSCREEN ) { ChangeDisplaySettings(NULL, 0); @@ -975,6 +960,17 @@ void DIB_VideoQuit(_THIS) FlushMessageQueue(); SDL_Window = NULL; + +#if defined(_WIN32_WCE) + +// Unload wince aygshell library to prevent leak + if( aygshell ) + { + FreeLibrary(aygshell); + aygshell = NULL; + } +#endif + } } diff --git a/test/testalpha.c b/test/testalpha.c index d817e44b7..5e926e775 100644 --- a/test/testalpha.c +++ b/test/testalpha.c @@ -339,12 +339,20 @@ int main(int argc, char *argv[]) } /* Set 640x480 video mode */ +#ifndef _WIN32_WCE if ( (screen=SDL_SetVideoMode(640,480,video_bpp,videoflags)) == NULL ) { fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n", video_bpp, SDL_GetError()); quit(2); } - +#else + /* Pocket PC */ + if ( (screen=SDL_SetVideoMode(240,320,video_bpp,SDL_FULLSCREEN)) == NULL ) { + fprintf(stderr, "Couldn't set 240x320x%d video mode: %s\n", + video_bpp, SDL_GetError()); + quit(2); + } +#endif /* Set the surface pixels and refresh! */ if ( SDL_LockSurface(screen) < 0 ) { fprintf(stderr, "Couldn't lock the display surface: %s\n", diff --git a/test/testwin.c b/test/testwin.c index 523573bf3..485963361 100644 --- a/test/testwin.c +++ b/test/testwin.c @@ -248,11 +248,18 @@ int main(int argc, char *argv[]) flip = 0; nofade = 0; delay = 1; + +#ifdef _WIN32_WCE + w = 640; + h = 320; + desired_bpp = 0; + video_flags = SDL_FULLSCREEN; +#else w = 640; h = 480; desired_bpp = 0; video_flags = 0; - +#endif if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());