From 486beada1a90d7d49cdfa6c60f8d892f3106a36e Mon Sep 17 00:00:00 2001 From: rainy <1072874017@qq.com> Date: Fri, 26 Nov 2021 13:50:59 +0000 Subject: [PATCH 01/19] =?UTF-8?q?!2=20Complete=20README=20*=20Complete=20R?= =?UTF-8?q?EADME=20*=20!1=20=E6=B5=8B=E8=AF=95=20*=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 52 ++++++++++++++++------------------------------ pullTest/Lizn.test | 0 2 files changed, 18 insertions(+), 34 deletions(-) delete mode 100644 pullTest/Lizn.test diff --git a/README.md b/README.md index 6d6b47a..f33b4fa 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,23 @@ # MineSweeper #### 介绍 -{**以下是 Gitee 平台说明,您可以替换此简介** -Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 -无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} +扫雷捏。 #### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +基于 `PainterEngine` 实现。 + + +#### TODOList +~~一定会做的~~ + +- 基础交互 + - [ ] UI + - [ ] 逻辑处理 + - [ ] 局面选项(长宽等等) + - [ ] 存档、读档 +- 高级设计 + - 无猜 + - [ ] 强无猜 + - [ ] 弱无猜 + - [ ] 竞速无猜 + - [ ] 高级统计 <= 这东西要是做不出来就扔了吧,都不是专业选手 \ No newline at end of file diff --git a/pullTest/Lizn.test b/pullTest/Lizn.test deleted file mode 100644 index e69de29..0000000 -- Gitee From 488dd6272c6d2c32b6010d356975d742d189f8b1 Mon Sep 17 00:00:00 2001 From: Lizn <1219935161@qq.com> Date: Sat, 18 Dec 2021 16:10:56 +0800 Subject: [PATCH 02/19] feat operation logic left mid right mouse click open the map when all mine are flaged success conditin boom condition --- .vs/MineSweeper/project-colors.json | 16 +++ .vs/MineSweeper/v17/.suo | Bin 0 -> 37888 bytes .vs/MineSweeper/v17/Browse.VC.db | Bin 0 -> 1425408 bytes .../ipch/AutoPCH/26d7c07a6d50e7f3/OPT.ipch | Bin 0 -> 655360 bytes .../ipch/AutoPCH/98954ce38854ac1a/OPT.ipch | Bin 0 -> 655360 bytes .../AutoPCH/d788c3f2519d5322/RUN_APP.ipch | Bin 0 -> 2490368 bytes .vs/ProjectSettings.json | 3 + .vs/VSWorkspaceState.json | 8 ++ .vs/mine-sweeper/v17/.suo | Bin 0 -> 14336 bytes .vs/slnx.sqlite | Bin 0 -> 307200 bytes MineSweeper.sln | 31 +++++ MineSweeper.vcxproj | 111 ++++++++++++++++++ MineSweeper.vcxproj.filters | 33 ++++++ MineSweeper.vcxproj.user | 4 + lib/mine_map.h | 22 ++++ lib/opt.h | 9 ++ log/team.txt | 5 + pullTest/pull | 0 src/opt.c | 59 ++++++++++ src/run_app.cpp | 8 ++ x64/Debug/MineSweeper.exe | Bin 0 -> 61952 bytes x64/Debug/MineSweeper.exe.recipe | 11 ++ x64/Debug/MineSweeper.ilk | Bin 0 -> 585816 bytes x64/Debug/MineSweeper.log | 2 + x64/Debug/MineSweeper.pdb | Bin 0 -> 937984 bytes x64/Debug/MineSweeper.tlog/CL.command.1.tlog | Bin 0 -> 620 bytes x64/Debug/MineSweeper.tlog/CL.read.1.tlog | Bin 0 -> 1826 bytes x64/Debug/MineSweeper.tlog/CL.write.1.tlog | Bin 0 -> 488 bytes .../MineSweeper.lastbuildstate | 2 + .../MineSweeper.tlog/link.command.1.tlog | Bin 0 -> 1276 bytes x64/Debug/MineSweeper.tlog/link.read.1.tlog | Bin 0 -> 3244 bytes x64/Debug/MineSweeper.tlog/link.write.1.tlog | Bin 0 -> 532 bytes .../MineSweeper.vcxproj.FileListAbsolute.txt | 1 + x64/Debug/run_app.obj | Bin 0 -> 9058 bytes x64/Debug/vc143.idb | Bin 0 -> 27648 bytes x64/Debug/vc143.pdb | Bin 0 -> 86016 bytes 36 files changed, 325 insertions(+) create mode 100644 .vs/MineSweeper/project-colors.json create mode 100644 .vs/MineSweeper/v17/.suo create mode 100644 .vs/MineSweeper/v17/Browse.VC.db create mode 100644 .vs/MineSweeper/v17/ipch/AutoPCH/26d7c07a6d50e7f3/OPT.ipch create mode 100644 .vs/MineSweeper/v17/ipch/AutoPCH/98954ce38854ac1a/OPT.ipch create mode 100644 .vs/MineSweeper/v17/ipch/AutoPCH/d788c3f2519d5322/RUN_APP.ipch create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/mine-sweeper/v17/.suo create mode 100644 .vs/slnx.sqlite create mode 100644 MineSweeper.sln create mode 100644 MineSweeper.vcxproj create mode 100644 MineSweeper.vcxproj.filters create mode 100644 MineSweeper.vcxproj.user create mode 100644 lib/mine_map.h create mode 100644 lib/opt.h create mode 100644 log/team.txt delete mode 100644 pullTest/pull create mode 100644 src/opt.c create mode 100644 src/run_app.cpp create mode 100644 x64/Debug/MineSweeper.exe create mode 100644 x64/Debug/MineSweeper.exe.recipe create mode 100644 x64/Debug/MineSweeper.ilk create mode 100644 x64/Debug/MineSweeper.log create mode 100644 x64/Debug/MineSweeper.pdb create mode 100644 x64/Debug/MineSweeper.tlog/CL.command.1.tlog create mode 100644 x64/Debug/MineSweeper.tlog/CL.read.1.tlog create mode 100644 x64/Debug/MineSweeper.tlog/CL.write.1.tlog create mode 100644 x64/Debug/MineSweeper.tlog/MineSweeper.lastbuildstate create mode 100644 x64/Debug/MineSweeper.tlog/link.command.1.tlog create mode 100644 x64/Debug/MineSweeper.tlog/link.read.1.tlog create mode 100644 x64/Debug/MineSweeper.tlog/link.write.1.tlog create mode 100644 x64/Debug/MineSweeper.vcxproj.FileListAbsolute.txt create mode 100644 x64/Debug/run_app.obj create mode 100644 x64/Debug/vc143.idb create mode 100644 x64/Debug/vc143.pdb diff --git a/.vs/MineSweeper/project-colors.json b/.vs/MineSweeper/project-colors.json new file mode 100644 index 0000000..2581938 --- /dev/null +++ b/.vs/MineSweeper/project-colors.json @@ -0,0 +1,16 @@ +{ + "Version": 1, + "ProjectMap": { + "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": { + "ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3", + "DisplayName": "杂项文件", + "ColorIndex": -1 + }, + "3a42e008-5eea-42ae-8e6c-948ca05e164b": { + "ProjectGuid": "3a42e008-5eea-42ae-8e6c-948ca05e164b", + "DisplayName": "MineSweeper", + "ColorIndex": 0 + } + }, + "NextColorIndex": 1 +} \ No newline at end of file diff --git a/.vs/MineSweeper/v17/.suo b/.vs/MineSweeper/v17/.suo new file mode 100644 index 0000000000000000000000000000000000000000..bc5b80826dd386cf43d22529121cea27369ba862 GIT binary patch literal 37888 zcmeHQZh$uV)j5+0ivIE$sa1~b$HF!#O_8M@YvAL^rt$%$F$zWeCNc_Z` zSF)g>ps0XRv_%r2>g8%h>mA_Vf`|P?A56C>^T3i-GN?ac+JJcwDTP{y^>pID6xXW& zY=;KLwd}|6{U02-2=4>@pRob;YmVvjkjMBO#Kds{;35EvtVX;B@H+suCFR70fVF_j z0T%<_4`5ja@&@B`5%ZZ>B6b7T0j>gE4cGu+8DrRJk!H-dd%a12&Su1H|C<02z&1b> z5CaSX;(#H*R={?^B>=lPPRDZZ=J@yhbWeBugP%HS{7ast{Gc3=<6frow+wRpQyyFf zFpmF~_$|jj%ggakxp4)6Y3mW6uV2?1|3-Yg=e-{Pzo*knT7DbDAEJJr1RMi=3h+mO zPXq1&d=_vo;64ER<$lBu06qu!Jm3p}KL#*Q!o&Fe2;fVmbmspF(*6|iXMnE&9tS)D zcoOhcz}Em@2RsE}`KR?*KAZ7hBJBj=TYzT)&jG#-_$$D704(!7;=j?aUqF0Pzy4dq zFX`7T*A1smMWONJlo@3f+D-wnUA+g*sD-u4SuPi@Rsh(ZBDMbaab$C@XBY$CBJl2l zu2Y02G^*^^bg+_=(ln!@C|2_u`j6`@A9f4%kRxZ+oOl|FoGhYb$azc1o()DPMf zjH9<*&ur#7r!)SKVa1!qtW(lv-8&RFW@66B!XhMcn3ltg#91hVt2smC^gHPPXK+9D zYKCEDw{jb>j^eplZN?WE+*pNYkfMT?df{3J_`it4-e zfn_06;$P!8br1$S`1$Nwf%u!{zwhE<)VCQ1(ZZ8x_i0VnC}{RKTD|7L6)J#sG3r72 za^F|?N3R3?Y)`3wnensNiJSZ|4?V1r4u<}BajnUj9ytxdL~ z{@3AI0=qr@)V;|w4E5^22RJwqZUOf*=6EoNfP?yTtrXH9R1bd)BY=`Phj!nF_UDMm zD>qm5!xrEtD|3#v+x`@Nvi-+l`5eJoV_KPjJv60_@&(kC z$cOg73JKQ&?BX}_zY#xu0IV;$kTXqXzKNjr(;6K?6CId;Tvr44HBI1u2xX=GX$C)6 zh9!-PK$!}(zl&?xX87+x1AfuY9B&+XS;MR+Jrk
3vwTZMc`8f4fA{QXVhH@5$o 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 NIbO?`)T;mJ{{f|rp!fg) literal 0 HcmV?d00001 diff --git a/.vs/MineSweeper/v17/Browse.VC.db b/.vs/MineSweeper/v17/Browse.VC.db new file mode 100644 index 0000000000000000000000000000000000000000..4eff9a349387b9d97a572cfa9301d6e09c3c5927 GIT binary patch literal 1425408 zcmeEv2YeLO_Wzxo*`1x)of%qKAe5yiB!u+PBy5reqG=?d8eNuT11o9lZs?YPSWr+v z5ete9MJ$Ned+)vbY){dr&-!f7{{H8lJ3HAl5`NG3et!PHL36(6o_lUPbLW;bcV;VQ z7X>2$cWq;+-XC#ikY2=MA=BM%LWo8PR|OdTmkf*$4FGa6d{?YSQZn6Eh_z@xP@VDG zFWL`Ex$_n$aa`q?Wk1KBEdE7YWLs$c$hwgKoWF!G(0=SHGgEF_;Lm7*xqWS}G#3{R zHq-=G1y}iMgLQ$huP)%P^)>kG0~qX=U+(o(dfkO31>X7Yj!N#*5;rO)80ivA`q*4! zU0glp+q_)Q*T}N3p5>g9!r618Ik!=3&6FleT)(Wh=yJKZjad=@;yP9@EVGZEQ>7=b z$jhqXPH+cn+`)!OU`Zh4E-9^am&_?Da_5(pR8*FG3QH>8P0REOfnHg8VX>!tf%_Qm zf@F6jSRV*S{Pj)l#la;6>z^d51 z4ZF3E@JAw{;Ns>;Al#undW}N9CC$)^HW|h?wKm#RtiP^Z?w#Q+_m<>)D_FBa;e?pz z#KabRFVR&znrlgl_KT)a;|YQ4h%XeV4f|pOSb9u2+`D~eiH+=#l3wLlg@l*@W}O(; zL{~1xdP>cl4VwI+(WL`)b?2-YOhIv040yl^+>dn)oh1zzX|t(S)Ng^pb}MgzNF z2aQl5+*r3FP=hzUUg5;mis%pTb8ri?VJVsijnsLi{Z)?DiODf{>vqv> zTN~hx>2kWX%RYy_sLhxIV`pPy9gL8^U^vha4nTba4Uu4N5Qbo?nCylM`|2BOnqh*0 zakgP~+u=2^s=BVZCg5xGM>=U%xUo4@-Bl!OiZ9r3xEyq)+7R@hm5rfgJyUONiUb=Q z!tHGdcCPbB=)$v`Yz(!YmTM&FvSdBN2c^@|I1manR0ld%FxDD}*G*g~*<9m?aBxB3 zW`jvMdhuh&_ORT=-Q7l+-WgFr0-cu<7uvhXoA#ins?=TH*xh3D#(TOYRTN!AhH&dM zVn^w4G*^3@TP`Z?(LEPc?r_s}*6%yczsc_KQhz7_vvRv`p4c+jCb}w;xR#kwV^=pq zr-yA!y>A(a!Z-lKO#o{RHdnWc7rQW3JGBnkuraGmQEnU=lVi$CTrXHfS5gwUAy*&5 z+9YUKhOLc#+eP-s%D4ggTKAdX_L~og6o+wz85KR8ykz8e&N zbX=@F5^4^_ZP56{IK$h4F4ml^w6wSlYFl}ALnJ3HJw4mXC(f&Gtgi>}Eabloe6_PY z`Nve27L?8@DJU)R&S{7~3@8qSmIU(Q2}@nDI#MPGaVqVv z*{V>WsWDsykNX1S!z%*;@Fi5GtO!>XgP=kWuSmNx4AE$Xo*P%2fes++Q}d*Zc86Nk!$OIu-f@Jjye_ujBDc%;2nHCr~3jdV4GgC zg(@JhYJ-S&m9|Qor47kB$;`;hnKUsyH7|2kQAN?xx^P{JAQTVj zt!sO`(k_Nq25S89ZfwmsUMTL{SJ%(#O24q6C|FaMY!QlGQQh>ebn_?VCnZ%kH6`0< zy;HmS*U(&7NB?B)ZP@>hB-%*rc5NGY0P6pH7B)*VEnr%}w18;=(*mXiObeJ6FfCwO zz_fsA0n-A1A`6V-i@9!g)2TM9)Sa)u8l%*ui$I7`>e4U3$0&8_5TMWcM|D?m`usmv z5Q+AxwpTkztJFrT->Ubi+tkHshH6!wQ?@E)ispRXd5v?GGvBE?-gWGEtans6;^lAT zN96P6CGu2RmEM;2Nvot8Qk?ye{h)oleYSn1_z&?xajUpU%n&WM*KOC?PPUcX+}5wG z_gFVtE3Ko1?}P`1vxP-MCKPY}Gc90R;D65oNx1@vFNW_sRR@|P-HjRJrU_(Vaj?D# zzNgZy?om{ieX^=M-HfRMNh+?dt%gsyv3IM$`Pp5fv?&4^t5>EjxEQ{F(`}NJ$pRU! zC+U&?B&yHa&=dU$69qD|7%CI;hgSC_K~|1HCKT5M!%g&qi=kRSe5R`h?MTbUrXNX? z30bsi)s5A4{&2V_Wu#^bWHcnu-*xkcmvwhRk}_yl3NH&bH3e$AQ%+15h^shU4R7dm zr<#<;x+vD9JLSYwns1$daiH7YFku2UNi%%CbBWJi7xag_%R4EBRwS|-nir_;PI@Gn{GVN@7g1R2)C&lWAyES9#IC?=@{=r)KT3NR>N=_8W5Fd*f zg4B_%ZRpv!m^OmmyZU8dAKmM&kO{+St?K>Np++Bcr|vIYs+-n|B>?pvSSooKz0@^< zy1){Dq+7ct4y89)U#;t6Xh}1DYO=PI|Y!Dsa zhZ@O9)Lj`Vy=g-h`{A3IICXWWpWTaIyCs2!KqyF;6Aj@=$Pbficj%8pkI;eSq4)SflP_1!4W0Sa?*u_QR|-e*klLo zRMBMJHF3O5FI|rtlp@hf7ifTcC*+TGKlqNb-5DrB5J()hxI4{6o{pf+4L!J($62UZpc^+=ciW2-Iht*c zZWI~z9Jzv>I4T{3o!4rwS--aJvke#QvL^4ao~F%FtL38{H#^@DvV`x2hqN))du?x6 z=Sc5J*UR6^kE+|%`-RPd-#Xg4+F77xird78M8Ewb`zU+4_>DAET5Z48zCr3QFSVUw ztI)1fZOZe?Y^9g7P0Z9zR=*Q@$9qoAvEhGj<71X=TEMgbA<05~F}zdMqy2wwk}$BC z>)ASY8tV3J|9@1bkW|ba;r@SWx-d3cnI7){r%VurN0anq4?G$5d%pjllq!rY=8jInA#!?9LJvj2DErS9qee;D3mJ=*^dWqqiJ`~M*+!Z11>_Hh3{7&Gtb{y#oJ=nJz< z_xt}rIYL@7XYAv9y#F7FwKvjrcf$<8+V^z-??UaKZgu+OoznCDe;m%hN4Wp*hlz}> ze9!j(ebGopqV9~;2OHA!{eN$~c1OPd?=@Y>FXo~<;s3$@Uu&Dek?;T2slt@l8XVF7 zU%`chQT?9o|DD*WqRG0u77o00J>LJzcRJ=*{CXqKMs|1F8Is*-xN|EJIYdG#RCcBx+inEy-*m=-WC zU|PVmfN25K0;UB_3z!x#Enr%}w7{Rn0uu!*$tbp0RpnOADao&zIndvRbyp60MSZt@?->>kNS5$dQDhsPT zWn~4PN>5dJsi(NGWM)-yVSagOMd^&ns=0*~b38>Am2(OTORMOY^?hlno;+`Mny0D) zG>g153X8mj72c8xZ&?tbpOiP=o0U0nd}j8H)bW#Mq^6C}^JEm{WO{OP zW@P91;M@K4%gRfS_T+fdJsH{g8TnZmnfdv7d0FY+%=E16^bBu$L4haBZ?TaUzI|;g zO6Qd4d#lR5Wu+BR)e`Ucig{jdnYSDRIv*_}!;_irO--Gc<@EyR@lNz+=TFLJpKM(I{g0Mpg+weHY;LUz_fsA0n-Ae1xyQ=7BDSfTEMh`X#vv$rUm{> z7I5(yTqiCDp~WGrAISYV90>e$p@nZ(mm_iySlIr5E77)Uf6;FHFPYXX#lJp#a<|G!MMueEozm;dlum>HTD zFfCwOz_fsA0n-Ae1xyQ=7BDSfTEMh`X#vv${}~I&0vE^O8v{abfg8!iz8t`70ym6{ zc?E#J|4(}TXDVXmYFfawfN25K0;UB_3z!x#Enr%}w18;=(*mXiObh%uEI^1swkaPp6{(H_m-7bR23JNc*j@F^Lop?@(ME2vkNl3nR!_SlhU)i6Fr$3c{!6Nrl;m*ii=4Dlx|;6OTYF| zUhaYu|NgfVL~HJ(dH27y!g5bfOP%HQ6kxHlXtA@pDE7qutgTquUAI1$dusAU+wOg5 zMy|i%-lE^^ujXcdTDG;15EsugWhiE}m0TSh=8TZhlo|X=xF3 zg9>2NGE*{A;s2b}tg6D2{GvGpUeGP@dP+P+3n~gL^q%7>DJiY=R2G(&RHV#eovDqe zy9P)eav}bfPm6cFRNPr*n|qyT{_xU*S95oiZ^;k6Xs9MPOO?&SW-|ruflyyVP!>CTB_0A(o$1WQ_?1-W~Qa2R#nXMlzR)P zZkZ?l7|%@ajFvHq-sYS%d$I36&kMPgy;FXzd-lxSxkHqBeC_?dOG8|B)AGuBX5|18&ABc3ZpQcD;5} zM(VX&^z|*resI#qxlK~?^UFRw=?|@4e)$}jcZ$7G!B)1rIx4S{rNj?|KK;?JgwfWC@K z7=nFppU)_qN$>a0q}`dNWvHZAcS0iG0f%yr`yklAKpT}?+4MruLFLYWr@F0ooTsdC zMr-en33Xe+J~q9A!-whiTz&DgWv3j|FL%o=@AST}A@J{1FxH-i3A-QJVR2Z;#-s@_ z<@`|<@Xf<3YSe>;Tijyw3c)Ob9cumAi49vS`sJ>=XWIMPW&8iL<(GDEjuzFbS8+(Z zUd3~dK4tDpk?V6K*_RH#Z^zz$yNbGHbm+Fz*m-?*MaQGNt~ovTCP_G^h0_EO{Dj0Qqp0cu({Iaqbw!5mxj%$b}|4!6+=K*bua-aIV zw!*PY{#|>-k>#B3cvo4XC~8Oz{a@T~m~A#KU|PVmfN25K0;UB_3z!!8|IGr~{PG^J zv0FFV{j>PS9w#%L%>AbDYkQmu3u|?f_6Eb}^mH@8(ozp#FTc>@<^D+LMtiTFwp?fl z{J|w0-UF*H6k2kq9sfW-o4)f`76>g_e`sT(9xCTtp=H7!nlt()9aTchlz+<>u?~iI z4jUQk{KptN#-So%o&U%_8RKQM|J!wLW00uBLo5|qhW}x9PMKvZ7Fve<`}yhK2J4Xw zEbTl6ysQl+n)(aT613N}4cdd6rdicr;MV|FYe#8^v^wo(?NV)yHs}Ahk>6~OX#vv$ zrUgt3m=-WCU|PVmfN25K0;UB_3;dt4fW*5vJc8Lj%H{V{`Qcn!x0{UT6?^sL$8#N= zUoJj_>*PeB+MiG3Iv%1@ocs{Z@CeZ|nG~xIWhfky##kx=E&-ulAJXpn8 zYQtYaf8$Tj61)u#KAwyE3TX0};{m*^{y_Sw8;JIn_PBOXyIk9%?$wsUjz3SEpbgd} z^#%1Fb%XYW`k}T~-J$OIKhrzRhME>IEnr%}w18;=(*mXiObeJ6FfCwOz_h?0ZGk?$ zIF7#cV*Io8?;sLTBpE8eSfsv~uvN%e`pF$qT6%X73G_Hk-`KqDLNBV-nib7o>nKt? zij>Wj7N0F_g$Vx?adrXroJQKwJQ=FS=&@h`3mR5v!% z2ABA1gLQ#$EFYI&?)6l9-IboaBCk6(#+?ui25a1lgG+)95jVVm=`NX5ROAK^Ohsk6 zr?8~bUAxQ|n=BfDMCINYUizLPynV+s!U@5eM0aV4yTDuIg+lW^75VTAS+bi}%XehO zM3cl6f{p8{h+utFU9dVBaYup;t7F@e><$HL1ED}eb)b{D>c;ves9eoqqI~s@HO+O0 zOYB=3@Ye)FzUGEb%a4}fYpPz_NjZU4UDiCj)F0}!Zc73UfsjAaX`FGj8vJ#g6c=o$ zu4}Fd_?rBYrR}dfT&a-1KCrSew9I#Sy~d_Uu(2WBF@u<%)6`YZ!EQ?XLs@xYv8Q~2 z`xx&6cYTs`L7yj;)M$g;1VCA`}_dyd!5a&Dv6 znkh|`xPDo0(dBY+8?*4<#Nv?jX>&KC2yR0#1a#QIl0c}_8xYKhn(Yjh4A-_k5RUlk zn>t>FCVwa#pz+Z8p%+B&>twgTrlvD-O|Z7MGdXRJI}%vcIy5A^4ZF3E@JAw{;Ns>; zAl#un$!@Gs$hV{!TH7YWc4G}|YOHq52*AYQgqY~W#1?xm(N#Q}Ye|asi>6TH34!W} z4{rRhFD8Jc$ArVZ+jo}O$POv#RgP6ihzVfUiD6B24-sWWf4DyO{?%O6$eLySiiN4h6!E zbt?ijvC)aE718C1=UPTaZ(?Sk*6SZ+`np)vt2GHU*vX!LNwc$1hJz6>oHxf zJ~|u3B8`o8Fhcr*;Xp%}u1x|Bkzj2QhG054VTJX1KitV28d!C>IW*kZ9IEbWf@MwV zW_Hz;dO8{F>RrysO?CcAZDXjun^Fz6o|bDQ=(1!z!Uv_((O6%Gb-3qa*BXb{OXT*-u;b^Y*Hn&_<+M|0es@!3H&{@ClIR7TQyI5r=whXq3u8JhCWoFda z)s3)l3`PR=zGWZ^;{Xf`Nmy&JnY~@S*oCRusddPPjahAqa-$WKW6DZgFIYuaQWCcz zS0BRKBxqNLt&M%#MfS+d?b7tf+A-BV?4qZA-m&Ro2RgKL`{hppk0bf|v8-b;9hO5_ zXwz(62+fTxpv%=5EIjoTvDY|u(Vpz?tdE74HijZ>a&D7%;&{PE=V*f6DZIQ6dXmrI z9BIU`QC6B>sI^7mMAz`)TuUH&%QOW-kzjz{G&*N#+de}MP3%~+*hz)9&Cq6bjoFMO zyI1(@n%k{>6EiF}*UaHvR=+j7wAQS7*vH%HUS8I&Cw;Xui1wZKrS^&Tf%dj`p7w(F zl=g^rpLU0KK-&%P1)QP%tnJY*(za+@y4(Mo@ume#3z!x#Enr%}w18;=(*mXiObeJ6 zFfCwOz_dWu7O?UhXX#I=fYc%(-w)-zk*B8?Y(g)TXh>D03Q{Lh2T~a+OKV47L~287 zMaokO&;O;N#L2B9j);A)eX_M!_?xgs7{Xr)??HUYtx}gN0p~xR+nrgCGo(jA^%?R= z*KPP;j6q)p)bDziFO6#{Mb8a9WL@kBCwg_AKMc=X;E{DhB#Q8mDC(9A)^yZL()~Ba z)7p+IdWLN>q7K52n)I=(=iEYvtT+Tvsu2dM=|it8Si*w5DrYw-~RXkz1D!NT@Tn zlcyZ$yldmZOK#^v>!Nh@4#)Zl>BIfjCMCORf$bmeuN^G9yl|n0L@$()#OO=#2#=<0 zjTqMcQnf}!yN#ZvjY~NU&+u4Rfk${)mlNYf>e_1=)=A-YjVr;uP2GvUrSP1-wTPjI zDZO2yw#6s3i%mRs5FBh6-g>a1wG1q`H8|ujMWVwKpHu3l)}K5q8z{P_K-%>F7~$V(WQwSPjKPwb=I)9 zu77xd87*#*o_X}(Q&fIrzW#6rH-EHZ9iCwsHfVpxvhLo=k%+^dm+0ueh65j~o0v}; zp4mkF;A5|DtZS}s=p<_vT^DQ!bP^e8sOdT-jqD;F-U8he9HVo%Tn<|W%;PZi089Jp zeKmnve{)^L*XpUqLniHGe4SPJaGJ5z?p&{9<-6AFEVqW{`o-{|Ib83rgJ^iz+-^8% z`=}_fzCYZ*aHu5a{%t+$*LqjA$_944uUaFc3D}+0Do=>sTj98NXIP>Sqv_E?=r@=o zdIEu+OmZEzKqEZq5{p}52io-v{;EsZ;EJPtb@({z+1wi$*x#=~&bp`7*uNbIBwr!hNb(n*uLod2<_ zwqGS3d5QXHXNs;lPxkG3~4&;Nh!@&v#hI0JAIoB}YP|Nk$#ILx9=3z!x# zEnr%}w18;=(*mXiObeJ6FfCwO;Qt2;(5LbJEl34QCFJ`d-y8Yf0<_cC3ndy#RHO=0 zCsGGe8EHSHcBCRw8&WG$o>9RHnN}+|0p+T+U$pPFue49K54Cr+*R>b5r?p45`?Wi@ zTeKUrYv9{}7i;Hh=V)ib?*yEvt<;ul%d~*z(-vqITCp}$^Jr7FEcj|*qBc?+qPeu* zngf1I;9u%b>bL3_>fhAAs((>mRi9U%R3BFFRc}{sR`;n_tCy)4s@v7g>gj5Wx>jvg z8`Yp%tsbY&Q)jEks9rT!oup={WvIXXsdgXE8OIY!ALFi{lm%AS^AN# zHq8c$LHZf+L}r%1p{6cCD*=fwA44u5jFdi?@#M0K$4_XJmYU30TLW*4UB|J!986vTG38HInS|)mGO{n#v05*fXZIzdpUmg+s`NE~MBqrm)gG>ls*h`;vFc zVbu4-N5VGAxD5WJ&pTtTYlGMS#)$o#h2>Km0Qk!OPlgWAU zWZMX`jjBwV$O?B2Ym)Mku$nYxE&!sbtFta#kWa zi)u~I(#vmKb?BLyZS4jX7)MUaA*ZDwrG_iWWEB|JX$9~>WT!RQsFKr1kd5QWMyNsU zqzqPrj>b#tV7!(Iq$P<^%8Zw;SH8nQ1WDT)@02uhN)n-z8t1K zO9F80DXd#P#&RdCWWD?3(I?aRNvW*l;X`Or`VW)C6;GCZrFAtGZAQVdYp1TwfIq?4 zSXVQ7g5KUlmat9Ij$_H#H92cC;E$){$g~uec35X=={QnC-&Joj7L8p!WpxJpS?E}j zJ)WhHAJ(R9xY|(d*gC`29=mGNstowUTO=9M!LSWiTK{KQt2Pv%V^F7kZKb+y#L96i zsY-T|UUCP6jcHr5n=1<+7oG=yR$B7ZaV*`~&eD170`>3=G{3PKPO9m5SXrn#G!Om+ zU!X29C6T2beVEkr{xlLVU%Y%C{P8sLg1 zdgX}Drm3Xhlwc10v92|WrR~_YAZ_PeD`{!&(j53>U2CM?;tpL4(zokcNlT7ek^_JA z0#6&EH@TCp)n&)3RZkdEn^0Q|3R%PTa@$@du(Z2vxo$4bKinS=f3#SSn-x2}W3kae zztb+gNL@T)QPLu+lQoQ$Jg{xaVC{I>hkcSxS>xam_pNkS#>1ZgkJp+f4Q0uO3~zst zAXyo_L>q|?`Ixj~L`6LO@xG?UVD=D})YVziJUF|_1}#iiKCC<*{-8Jd!&!q_I+&LA ze{BB8n#NumsOs$Dv*Y29+NeApl0k3G?`R_*41!bzmU^_`!YoDWN2}h+h_9B(bB2~p zETf6y2VtIeMUglOKV!y562+R)yD)PgMsfp(NwM{W87+mcZE6hrB0l)`K_olV%@w)| zdl&XEq|(#@EY)zOP3s_)oA*@~m-&i4^L-Uo??F1eT5O-Hp1pq+m+_Dbkc)Q&7EEH|qIw$|v`qEKTk;nX0F1 zOue%URz$B4u3fAd?hGZPe?}ch#;aWy5KWObDosl3l}6Q*6sA59t`fKK_C7%8-L??u zoZE&0oqcO1(BfM)phX8~0iAWQAJ7@M%mbQ#iwmgdz;QsQ9T*IB>doaqv-h6_G z@4d7{^;!>5=QXQ<+OHV_RMh_C#KySMU+C>gtxD@Cu7p4Kdc_-A6?BAIS^roG3W4-T!V}S0xfF82H zdI$ZvyDN4;i^yf?Q~uKP=|1_A^Ps)tg6*_c=WXu=bo(}%!`7{|CY!f{ZONu{X+CG3 zvl{5>=Oh3*bbk$~>L+EU<7zv(Db69fLbfAkj(Hs_S8U)mLCR{;Mbw&i} z{4<6Dop(BIMaAi(fX+T`5zx}p+(3&q)&f0dBQ53VQ)v#fPNn(hZ&(X7Z^Lw;M{S_3 zo4o#Lpp(|qI!tWw0?lcmeD(|r(B2xAa0_7f|99;@?G^1wc=!Jn?OJV@woN--TL(M+ zTJ2b^O!NNP_x{RWdf&pV%RKIps)zJz$a^J?d%&I_F9I?r^jcdm6t zob}FHr_VXxIoo-(Gv7JYndMAzj&-`71D$=G4yWMw&GCcdE5|2}zdGJ>yzF?!@u=fI z$L)^&j=hd692Yyzb8L2;<~Z50%CX#Wf}`3|<(T6ram;i~cT94mJCYou977!a9h$@L z;N+j>Z{^SBkK}jd*X0-FC*_CayXAxO4e}oOGI^)GRo*0Tkk`r0a)Z1?UL-G&%jIL_ z0{JL8Tb>{%$iwA9a$nggTczKne@b6VpGqG{f0161o|PVx?w9V6ZkDc-u9Pm3&X=}G zr%R_utEG^%OsbKNljcgL(k#g%O_nmGWNEZCRB}nZBuTQ^f3bgO|HA&U{XP2|_809> z*&nvwW53mYqx~BDZu^DyZT7S5r`k`nudp}Tm)iaIh4u=2k=<*bX3w#w+7s;~?D6(~ zcExTJ|0Vt?{zLq`_@Vf=_^SAv__+9hc&B(k+$UZo?h<#1=ZI&BE#ew6EY^tu@py5b zSSA*VdEyi?Qyedj5r>Hb#NMJT^0r@X-`l>l{mu5i?M>TDwx?~6*zUF6X1mFDt?hE# zMYip>vuzt~C)rlonruPaV%xE{N?WmQhAr1N(UxW#XB%l7Y>Tt0Hql0`KUu%Aer7#n zeaHHm^?B#b|85o^7**6Op)x6Za6ZOyk%wPsmU ztYfWi>p*KCtHUY?zX?AGUkRTGe-+*mUKXAa9u@8rZWs0odxa~6i-q%q&BAHI$-*jO zxp0C|EmR3}gc4z}PNjgBuy#z~FiY z`xsouU@wDf8C=6)4}+^2T*cr@23Ih+oWX7emod1M!7c`uFu0h(MGP)vu#>?B40bR$ zpTT(ywlmnqU@L=j8Jxpl3xmxJ&Sr2HgG~(1WN-$9(;1w`U?YQ58Ejy%o3fa2$gw2FEg3$Y243`3&YUn9E=egGvS!49XeIW>ChU zltBrDVg^MFj$v>#gF*(g7|diagMpVp0fT%7c?>)ZrZdQ8Fpa@c45l)e!eBCkNem`3 z$YGGpAd5jJgA4}g4AK~+GMK<1g~50R$qbShjAM|#^6x~ zk1%+c!9xrlWbgok`x)HF;9dszFu0q+T@3DIa0i3i8QjL;Rt5(d+``}hgPR%bXK)jP z8yVcd;Ccr87+l9-FN13tT*F`wgR2=_#o$T?S1`Do!EOeZF}Re$E(Vt{xR}933@&7_ zlfeZHb}%@f!Fdd}GuXypD}!?xoWo!XgUt-iW^fjRO$^Rta0Y|Z8JxyoBZE^JY+$gS zK?{RZ=p$F_$w*H^dLq(wNY^4=gLF00RY+GNU4gV2X#{B)X$a|Zq)kX0kv1T$M_Pw; z8PXGw29YjBx&&!0(g4yLq}50lBlRO)gw%)hc%;W6twMS%(uGJDAf1nN9@4o;=OC>_ zT7k42>1?EBNK28HAT35(g!CAsM1d>* zkd8z;0_ku{Ve>qbb|iHWb*yAi);ZueU`J5a;c5idg>2mWz{<$>n+;2O9IG9D9s(8z zM@MgP#}FK_9NJaD;y__nse=S>Y|(iduz2g)3x6Is{E{csyqYF=r2_^D=QSAQVIL<1Z9xobpGyq-}#dB5$A2r-Of$U zbEWIJU1Yaz;O}bXPNIF$IUP_hv!0z>9*ts6CUuEB7Uu8eRUSmHV zcBU5b74b&cah@O+z}}MBK7d{1jka@bYiw1pS9HUviSMi*TOY7qVO?iE-a6en&gz6c z-W$S0u$yZT%7k%(lmC)`gTITv3ar-vzn-{Qo2M0NGqmY3=OOxNPR*tf^?UUz^^p3e z`m*{2oPs!@UZY+PzpHqbdJ3F1XL1>0Rk5=^p7uX}7dZ+9a)$B2pdr8|F$S(hO;ulr1Gl zZfSrdgP-AN`{(v|?JwA$us>kG!+xFp68m}f)9feNo9uJ#CH5KMQOLF@*xmL4_Fi_o z__O#8_!2%4-x8k@9}({n4~l!lOTmkVhh<$0AE3+t;jabmTgP1jj;`|^|INmKU+Vy zz6;)g=d6!e@38K-UTeL`y3M)?`~necowdd~*IHtoVV!7AwT`e30&jpI{3?7Yd@Q^x zydXRw+$9_kt^*&yMZ(#_slqxTBGd}U3v-28u=k%RqzWU1K|&uv;D6=6<3ENy{|o#R z`~&;}{yIXeyxqb*EAkc#_Z0Vxj!&cXDGWWvJ*ndpIzEoEk74Lx?ok~dLFvO7x}SSU z#|L$M0AugR(B0g9I^L_}Js5j8hHm5T((z6m@6hpf)Vd8r2e?~xJgDO>7<&LiH*h!W zxL?Pcbi5I@Zotqr-1R!{)A2eT_v&~pYF~q)tGGQnUX9YLFtnSyQpYQFyc}b9V`vw5 znU0sDbQgv$5pxI-aNFc8uMIp)K529naPA9E{z9 zp)e>x6z)_VH|V%t#}?E&1w$usu*`w}bP|Tv zaj?*V&^ipQ;@0Z8Mn_ogKuEjtx4( z0tjO3FcjpL=?IG;kOnan;FjvRL`PT(L2Lj+i@6#dVL1fS#TYuC^Xs@sM_3d=?C}^{ z$Q`F+m5#79g4l%^n!_#7alVf8bc7`mXwAXUY_3wr3LRmg1hKO*RK%6(SgK=*j<8?? zts)G~;*QbrXdPkM1hKO)l+Vr7afXgw9bx$dTKO27#^veg(Q&$tu#5t&X&9Qw9i`(` z9jE9xSw~nlmkFKaA~*A&u*!V{aYd>q}6&h9QYlbyRe8>gdo>Mr{d0 z0%zAz)X}D+6}1EmaU8EBoX>=kI2t1V;&2Wi|H9C35nM;f&3FgKOp@cW#5qRbo>^j-(ct~@(&%qM(I}=`ht9kp)WA>3He;d&vg8|j-R5| zCm8ye{0&1NW9Sh12t$W3^gj7e#}9P;E5^Q$p|{C!F218E~oNvif7kB~<(?hy<ZSEBR^4DBX3!;;+?+C?tY5ocJk3qu!^OEAU77`l+) z{7P_sB|FGYl44s3a&14IPaBd}Mk+V^H zCOJz-oLdRbt>koa2I`)UaT^KFtYjmGHjq;>4mVgQ5%e9LM9_C|5;=wL08ctu;O*Q= zlwEfsW!F)5&05N?q3jBnNrA3Hx{``lP&R~qgAh!hz=x?gMA=4|JApP)K_g|CH6Vpa z6ZkqRUPjp^Fkb=2Q2|Vj9CzIDltqWZ!YV3Q zcq|nxr0l!}Nas_*Jj%|QOIh?5R8&&7f=Wwa4g@+IX&DulQnsiBX)zU`tKjHkD0?)O z&MKtrEXvN9N!b~cE$~tn<~feb%cpD}Wph19r&9sUZX9>iG|HlnV9Hd=qKjbCWXevW z3fbr($j+exbP!}_Q8tstrNJZyG@T04D4UG#f#eCuryw0qBhfoB1|}|!8#4|L0C0n7 zZ{T3H0z8iSaTmm02pecZzN7tP5ZzdRM0NU9^*IjZk5PGlx;ejx$~C`Mjq*w=?{g=} z@&0q(>bw)>UMkm;Apen6f55u~-UA)HN8~%@dqJK{<@`{71jwW*Le|vekK) zV;?*lztR4nI8?hz+adl49)JYl4q>fbR@TcU@?c?~(4aOs6XbR3=kgVB24IwwBlfjz zhj$H*R@0S-VFx`^aX7z&XZ%~7E1iC4w&O>~`|x~zro#eWg-voT>|kx+O}J7zTN(zw zgNy9>;e@4>m}Bsg^%Dl?-}qUHwpXzck-L~1(r7~_gk*9oMy>a zAGVj-201@+z5>sf-*i^MF8d|xosL!TL^(@%NuDm8FFz(6EBy$&K$p6me~d4XmPpBb zFWW-ls3h^`B6vd^^)t=YxQi$av=grQGoEt39IO{D3 zVLw0A@vu5gy~A<2z;ACz0=ki0|gBmGsnP&!#zDb3M7m-^aow{NzG z;raYv@m6t@n6G_rdsL}VCfjbdoi4tBJtj(=e7wb15RSlMPfn%*dO#BnaB>pHuv2%O z-N6sEu)~6!*qa}1@#$w;>B&;g7MqDx=3Oik4jd?uxt;}Y=lenyOF0WFG&M)6IWAU# zpd8NLRg-_k$jR@tZ1%nf`7Ji$SB$_z_v9Bnck*)_Ki=Yl+*i^=hQ5Zzy2k2dju!iNZ2Vt38sn`F#(1+AKhmO~YoEw+$XI~MXvheBSC&GRKzZM>&+gTEM?;|uM2#Pdu)wo5!0tN$#EkL?rB z#Ku3(t}wnG6}8h-u?kNz1-xsb3Qxo;JdO=&ZlL!Kes7ID790I2R=73tk=V$G+qLE) zdWW+6fjmfWZ+y#yfJaKPkoz&EZu|QbeuyP{q>|i=3inV2kkNyo5s0Q&HX z#m%+k0A^L}Ulpuxt|vF6i6E}tzbYK52{w}bvDw@do6U{X1fWWDxdEGXJ(c)E_0Tf1 zFIM$B8W9Stgb!zuy(&M0z_Xx!CUvy#Bd=t+2T6-wY$ z4?}V#D+Ug)2FMj{^SYcx)izPlOLRWkKEJWP9$r2p=g}&{A#Qk=gKUq@Ya0fd z*mSU!-Kg|Uz2ZPP>|YWf=hB4mJ5C@X=fo!5frn5z>Nr$4s;26j;oS zqUq_&6@6}lP`_wMyH1`?;6x~OGxWAJrS&wO>aDSLh~XSLiHdjT8I8_2uvNud#G@Vi%+wZHNrXrUV^FdM1Q(<;N_rS5@Te3 z90&@r>CEaluQ_jb$p0WJZ7uwKacIC)$gvQ+g(tM6C>V~wq0C8SaI}naKTN@`W$c42 z3&!%ZVX7{#^udozd&^5aMZTiae4y}+zmm!saMZoB5PpPOZE&1U+)=B#iXb$KwkW3W z5H69H9ByFdvh0EQWLmP%hx4kxx*B?%kAD2FUmwTw^s10Yhw`}=9}HYR_=Q6H2~qe= z@Z!~xK()Wgx60S&S;!)75T65CG&VykZceT}v+w)qV=pwhiHr0=0_Df_&dRPe~;ln}?(AUSCmRp3ld>0vey-TnBvt zYqZ8kYtpC0c?D6>_A8)qpmhgUsub!(>%AtX&b{u3=$#l{h}ED9*d(lbFL;E>O&`op zVK&!`FDZrEl$R8i%&g#Fbv{ezv1oP+&CM^LQ&L$7?*q(I9s%iz*d;1yFHN(TDd}W% z+x|8gMA+ z4)V?Q_&nt^D||lrXRuBm+RNz5TW~9%5-FWuVxh;u&race(1rr+6`@TDrEE;y=#4yFhrzTOSGv( zTc|B0nx-|8!C-q(Xy1R=&O+JMG-k_u3(1 zr7tI(fdf?Qec+v6S?=)_6jpfhio6BJeKTM^=(hgDArCq{>v#C2;sESK_{%NoUgAI>R>?Rxbytq(lMeoaf!&ee|Ap3tVk8GuW*Z?r?|L)sE}Q~zR3P!DQu%O@HK zPp>ak3sjdf&3V9i0i18ok~d0E!wz$jz1f~`p9Ckl1vs6((^_gxcfRL*M7~|VP>Qo} zhtu3i@~c+WDyU!CYHj1Jr$|fSdHXEeH1&M-Y}k!&bZm8;ZeIqc$S2rGiyOtYaDqG2 zx=H>``Kuk?_qRW)G}&)fAA;W}cuE=R{MmVebB0_2XWkX*IHkAnwy;~Mf%DXae~#b7 zNBAOskmXm)E6!)_yX+_1iyfcadyAi1zjT&5ZWA9AZ?GN^FVy-vN*(dy647P*S^HSq zuU!VG9X3mx@RG1YSSTd$Kk%3Ed6sXKEa`UjPSvM8===wG433hYmd=s0w1>1i9ltx? z5`Pn4h4TV$sdMFA;cMZbu*&hh<3;gX@oDRi))(Y&)gR^elrrZ)d97F>Dz>ksucQZ^ znd%f(b&QraN{QC{zkUzNYZbN*fMF2ibgvY)IBf_D@4!s&?l&Jj-0 z@uA~>#|@4X9YIHL`BQi=V2SjT^eXr&9QJ?OKeRt@zZ-lnXWHk%se4g;PrO~cQd}+` zC+3R7Z7;K|s}pTy7QM`>PZ zt+ZSlCuYe>_Ai7PLO(d`u!v9LZSr#MY4u~(3f`Glv}=`bZSN>|D0`IiY)>ldmBq?T z+pTaCqC|Z~;kDt;Pn>t#E?4(EciT?2m8)xlE3=f54w% zd6#u~957)Fp{g+9qzH zp|=1zn%{inXu0!{qbcShw*pekL5|j-($K3g^vWp*Y9Vg6p;v|+&AAjgnsW(qH0NUE zXwF5*(VUMl^o}<43Mq#<&ocC8B1dzcfgH`*iyY0l06Cg-K5{hYJmhE!4{|icbmVA? zT;ynqX~@wOMFnd)^XfWe zs^;kQW1(IcE}qFC#USLst-=j7WCKtSoH3jWW$@V%u0P{yYq>Z>54Qn6aJX=N4L!EJ zXav39hF&kqfm(pm3>hw}>HEH%f-+iDCvr7lLx;i1l%u{8PC^-Nr5!n%Rz!}bwIN5- zS}BJq1eDPf%n1lqwqPV!628v@YG^cqGO#51S5!uRM;W*?$Zv-1SCqjpzC{i$J^99n{f80zHFC6wuZ-9)k)wru zVaPs54opElGq}Ga2g?@nDROY_$tTFs8vKpPA_4NTA^XUX9YPK+J^7GvwYB5}L+`Il zFB~B68+z{XC|iqx5hsxf^xBD@E=? zt|k~FcOnO#Cvu0u-Hsfr2+3{8!G|%(t;o^*53*RW%q^6oo+fgD>G@ZYn^`RMto_K* z6gM#$q_~lC)TtD8DPat_l*m3q=Q_$!ZxY#yGFsnjDMwvJ9T5aA2jMyD0qqaMr#WvQH^N<545ZR6#O}mZBpl57F4m>^NT*^_O4>`xs z+kzauXE!q$Tp!)pgJD|VO_T!_!_Q-+(fvDmd^OpKF|_nPh2g12SOodSu{|*D)sCxQyvULMKFZf>E8Nl!05maYAr zofjYjb)Jt=;3u31zlO%mW#YQ#ImkdBl~KitsH7YjaOKTL2C7*`8R|hRMG2U#1Q|$P z9E~cX*&l;q&^$UCUl@&_6_w0H2~1@(q7pAkpnDcXCHYL!Seu6uXpaXOXwP)U)HLSO z0;jQ1b=^_OK!v7KhJIpdN>nnLGWgvmCJC;Yhzv9=hca|<%VtrLP?j#K&190`nhaz> zIh``}Zb(B33=65qK&GbYJS?!-2-PvMJzzPa2SEcng8=%RW$5e_~yxaax|fKV=meD%IK@M;pal&EcP5Uzp{TPB19 z)zmtq7&ZM3{z25|#HQ^~AkqgK7afe7BN}zo_*n_zh+TjX8yq8%)z&v4bQ;D%lY}yh z_9=-|UzVX|M{8B;%kY-}7|o%61^fL|wKuevzxF?gGNi+vruJ3iSy)Rthg!87)4 z@Wyq5@FVQTuYj}DMZy@^+aKcZ-lmu>yE&*7VeFTl489@6dxr^*f59@xY0 z)V6Ay!1uFGYlf5gOSDDW0yyvgv-pYlKD>8+k9eK9Q(Pw&iG6IJ+a7~c;8(!u??tu( zn<^J*KWiVsI}qjCF|gar)RMJPTAXH6e^-BiZyCO)z7Ah9d>r0(*sorz?uPdr&Q#Z^ z%izm}mGI5NYRC-cqhUQ??n76e*>rUpOf!_bNM^vE%23q6W~n#T=2f9!wHT4 zvH<7tzlQVpuSgF``=v|abi*2HDZC?5B;`pHr4(tf)JL-0e~0%aK7jWno`bji57@7@ z?|`@aL-1z*@%Bo49=ta(2HxhE#jnNJ;MDyAaW|Z|KUEBgOW~YCCA_OYQA`m>iGxJD z?RVRE@J_`Ww&&oS{dKmT;CDC`d_7BTbK!*jWLv6jsP$KP_x=+&TmOpnAvjroqxC8{ zS$~H0Bsf=pf^`v`sxPokhEw%Jt^KUBmB5+$L-20>6YyUBLGV@V6t=*5`jD^`PSaNk zd2os%MHmbx>FwaL`J8_X&e1={ALOs&ck)~KQ~40T6g(P5d>%iMAHxsk`@r3x{}Tl} z`~oMpP7>%RAXmxUT7z3-aI1B#RZJ3=xs?XD!r+<>E~4v)nWRbPLI$^7k85I*I+<%U zxCVo(*R|@HBq(#s4DJLyF32PSnOkabOAM}7*9tJnVwtNkxN1FaF_RoGgMS3u58NVy z^XXd0Gs!}kJI>&$4DMK6Yax@&k+}s1H{amq8Qff5e-4w(mccWEWdm1XaOJwzY$hp^ zxiW(*HMkOkE7tXkm}Hg=UJ=X{xT6iOP}iEpB>6Ho)8J+poY&wAbp3oLnI?lr1ak$> zV{p?AE?3u|#v~JE@Q0v2a8nI#ios1bxJi1-iA<6%!~BCOfy*|yEQ8B5xC}jII+G;J z;0wW&z@-}81cOU4xbb?*WJEWYgy`bNF%3A>m8feZFv)0{8*6Z5^i-pnWP}V4AF*8E zM(S}Rn8Yn}!*z+9N#bSjfuJ^ULk(_-!41~+xHyCBr)%|P5>19jE2srrZ-eWlYiUd($((9%iorPz&S7w}o>F2GK?c7E<`0}` za5jUp>iPnca5BdmoJEi0P(uDCbA(C2${)+Imb z_#=z?K_>syB|qr+J&XB921f^$0Nl42*B{&*DEUf;wMmrwT95mRNxqQDm%8K&Ciz5$ zwF_zk_nE={-QYge^*>>fk7e>VUGg!L9FpNQC63DE5R<$wgL4D(1nvWa`>U??K9jsH zllKhnU4wf^*Ls^tUXx+5iFpC{mchMgaBmpg>w3!9nB+wn+!~k?xK|ABWrKT3*ME^o zo|D0;f%?Ebug5*dB+tm?SzYoBlRPDpr*+9wO!90at2f1J8WOARbbuW|LEyJl*X8*gHyrIUa)S&m49o$z8}+ywm;}C`e7!E& z$0U1Ya-A;O%Ouypw~lqmHB54~O!nxKtC{2q8P>~K25?vEaaSd6kYUS@a4FhU8`)VF3kdAvw&VLl|t7VeJIsM!AWJ8~-1BUjkT1RqlVz znY+#0HEGlI-Zaf5O`4=hmvnE^<=!l9(qj}z${tKNZxP5}suiZX@tUDFxFM;z;rBDCerQP01)*T9Tl;HLbC8GcK=)c{Xw;f~+ zD_#2UcFh?&M-Xb8a=d2UM%H7MPW|^d&G}feZdH!ae~;Fjw~}?UvPH9QCTqLWp;_C> z+M+-o2$E<~j?#Zywc9OZZB&}|-zLquk*ph)O`3HhS?iSs&00^^^~wg#x}L1HN}Xnf zeh#Emt<-4NYO=0VLi%q|bB5jx_*$c^)vRmCTBWSktW{)PrBrIxRb*YRtki#3XwJ*Y zx>Q-FS(lQvLV->UL|vgQ)|@NITCOb8e;4Y%3-sUlnm6dUK&ZJ2bX@Rld%gqFckVfg8+Tl2EsOJd z#d#ydxQ1dBRf<>(_q6svu_?+luxT~eai8M&G1#Ky(|(p>$AbWNklUc@+s`flDS~AT_O@#jq`*jac4W;4Wvd_TT6_M(LF=a=h%=>{t%(RG(${ z+V)!CuwH3hYdn68LyK>OvpcnY#>qOzth(7cN&zaE_?7 zT*bf@wATtEg6*uMv_p;d-+%=+NtLE}NsI=)X%T6@^o>~*x)daOYX=Avt;t+$C=hNO z(zacIIBBBnj&GMs6DBp8H=~7^@eP@_v~=`sN3d-!Wz$%9A_tScK8Ok)+yk#2Ht-TO;ttl~Ob!;!`D zx^NO~1KLft@^HL3K1kF*Hi4v3e@0!Jq}nDwZJ%IL1;kB_F=tJAfCSW?lfsz!-`8S{ zcHb*g#F$nh5Fbplmsmr%zAw@b zZ{9%5Mg=xPNhTyTxdm4ZZ-rMla95-5bCRbgPQl3cdcU0#IkvL2KXn93CLvOAUlLcE zMD2pcRWF1|twFa*#WHR+AJ-cR?^!7l===DvM2z?HB}f%3Q%pLnh9_HtNd-@o6`}bQQkWFG6gBbD6OouM?@?2W1p;70{?QXpXb>t&Db+``vi3UDQ#C9O)Y-$<*YCAp zmU2DULgeAD0U#kVvZMr*DvX=^%hfr!H@jRdD1g6;1&a%yz%~pIj_BB z8h|u?HeeC*GUr-&oOZ!VNw{xtM;O*Dx=R*OelChmhcqXO<$irLwZ65twyw3Ut|rt` zR}xO%=m}}o!smI~ha%l7srKYoKEkohpb)03KfYfZwnjo2ZGWUX4^2=e+E!rr4Z&{C zn0>KkUt9{WIkK~&ew3`jG4CTthW!YAS3IhH4}MT6LA-j}h^&U|_0&I{xFp`m(KZn8 zj5+pfKo}|L7p`kTL=65y7z-MMk^R&M1nDyeRN2s76WSBY9>I9 zTQnq*t2-=?`BT$U=!IzY(Cr^?xDMVUfrVtY6~d6iQ+`8>16`iADHb zQd*^+sz&y~(|JHGs3|Ke0IBhXrT(tbh`M?dXvMk=bRM=k$E#PI_n2Okggex^ zF{yN2PA+VX!^yIab4sb}l^lv27HL`Jyv0!Dmv>v=h!=Ts{fVc4M9Q7Y_5JJThbvMj zg7+=5e_;_#!P5tp6SSiE?uuRx_*Ou3OGkZM%T~~ySYC|Dh7Z?|_I1NEWn^@9tmdop zpm~Q@03UXw29#q%ErjA8fWPCS&DeV7SXUfg>s5hoIy5%4cYK&utfmI!iBXYYgf?RY ztnv3U63zO(6a@eu@88H_%XMt@Sj^KB%d{!0W2{ECL!WH2J|^j6T-RfQ6SG*y)Do(4 zrO=y%;M+i^DIQ`V%X>%qNsi-x30^>e@&8IV|L;%mBEoNAH}{j?$Gs23TKf0l`+wi? z-Ua*NZ-({s|Bx>Le&nwJaMwGo*Ih5WUUWSV-vRi!>rvN_T=%)Yj1J-Qr=bGR9;bDg6{)7t30JVt~{jt z0QSq@quiz31}8XNr(CUk2EGw+zH*jwy0TvxQFg;u0=ksrl+8*D?53}Q?*y!XnVB-B zNXb+D@TCB^Vu!OE-htB_UWRW4JTE^Z|6G0)-sQLtz83Ix`A+#(`3Ct5@>TG?fQ#jG zUhubcR0!5&yL?a zeho7|Pr#cAKZGv_d<)JVxWjR?<9f$6@a=%h;2eT;98t%~@ZQLvqtDUp*amMd9Oc*q z-w#;lSmjvanC~cdjeUi^!d_-Cg0Bhq?bGaT zyWP%h@4)v2Ubekxd*1ep?dP^f;fn(I!MhS)x7}&G)pi4XQ{XDwr)(G7&b6IkgHtVR zC)!T1MQmZ)F}8L%4`PEYWUI0*vn{lh!j}bdZP~UAo6}~sz6a+%yk`Bg_4n3aTc5T* z0bdvRq4i$tx2#{a-eJ8NzAtbM%&uK#z0i7&H40xC7_$yq`>fs8ZPu;uje$+@PR2Ux zD(e#KeE7;hzBR|1W%XKRs|4Q}c+>KVu|pD&UI)MV35^-!jdDJC>}H zkiAb4K1m3NDS^w+2%jMQDdD4p4->+{NZ{uILOAXO%-<)31CPKAuW$px@kW4ftP$Wn zgx?_iIw2fs1nyrYyqoYY!mkj*QATk04#L|AZz22=;SGe>6T%Th;1iA>0)(T60Iwpv zk`Rs(0+&w{ev0ri!b=G+B0QfE-q{78u!9ruEW$Gg#|cj*JehDm;aK*hjdNu!j(i;Q@Czfd>!{-vNZfcL0wggwuDxd<@~ygj)%>5N;-fLu9}Y z9KZtz2k-zMMc7IRC-8tv6X7O8IBW-8;D{N(8bUZ%2h4D!4j`PS16WD8f^ZojoR$Ob z6@+j^4w&JH9KiX6a7GT8%Lq#eiwTPe=Md%-<`K>!^b=+iW)Wr*dI{ZxPC}W`PG}{R z2n8WW^t?y-F5x?be>_hF;SR#>gki$t2}$QYr1KuqdC#%rPCD-)o%d`d7t(ppW-^n`d)moN zI`27(%uR$F2}#dAE6BW zCQbGP$UL1elQ4tOM@ahVCjE5(16|y25xzl4n(6)f*9l)De4cQKu$S<7!p(&Bglh5}XJQE=sVFp4L!gPdb2$={O2tEWaf(OBk z;DV986C=#}9`x|(k&t;Sn4Us6?>5-@&!%}EV&0eG%YP5UcmHmMcl|H+j>9+qc6i(2 zO8`r}1>OuexBg|%ufUsmnGBc=m<*TbP~Ym|iubDsJr%Gb;m?acirXwq*8_xV1%O zEmjxDt<55{BDW%zvR@L#?3?B6n_fFiL_mi9+{eCA!M+jmF!LYa;qG#Fcg(}gw|(p@ zi`ZA<9^L>Cx6fzr@)eB#y{9to-@UKF>i-Kc3-F}(QF!nFUU>8WE_nC<26+4bN_ey3 zd^iu_)c^S+HYG3_Fc~lzFc~lzFc~lzFc~lzFc~lzFc~lz_>W`2CJ7F674+lNe!SX` zNBePUKThpOp&yuKzySU&+RtX~r$hT`)qYyEpJwex61djy=NJrT2GBC|ZL+)}+}>?0 z!`sf_O!b#x^#4mZ@BiCydfrVi>i@L&0{9-le(z)6L2obY1%R^<&C6uKWWZ#=WWZ#= zWWZ#=WWZ#=WWZ#=WWZ#=WI$)YF%1qC{X{9K>R9XUS|_6%@xhXGuT&$%DZ>9^2cCetAao7hh+Ns zu>*gc%kA{D%!WVGm0tSU0LKr&Jb;8~5t1a!iuWoQ|9^^k-|@Zm<*T z;OT%u@qQl0|5q@0)Bie}19%3;{WuTse0&}NX8~^XUICuW%VfZ0z+}K=z+}K=z+}K= zz+}K=z+}K=z+}K=;D|DS!}ScD0;u;Z8ZLe{r^oc{;$UO|Nr9st@kPT2Ee_r@BdcswcgLb z`~Okz9&f+5%e&QE4Ia(QWWZ#=WWZ#=WWZ#=WWZ#=WWZ#=WWZ#=WZ?f>1{5p2ZcnfK z<8WPZaCqN;x(tqBx=&>2x8aR{pYC|K@MwF*v^T@6wF;*1uCX!fXGEX2kdY zW!;D`{%b~j^WUx;;njbeX2f^@y}A)z{Q07_y0j=$@>Q! z|Nj+!%*$lJWWZ#=WWZ#=WWZ#=WWZ#=WWZ#=WWZ#=WZ*xT0lOrG-{OZk03l|+JM$g- zeRJmP=J@|VxKK^eO$JN`Oa@E_Oa@E_Oa@E_Oa@E_Oa@E_Oa@XIFvtHXgqT*70h0lf z0h0lf0h0lf0h0lf0h0lf0h0lff&YUH(D)yA0MNSsJ2T&<-`8ipDIl-h{SM~%$L@C= zi)}TQ4$;oqJ~{4dJJaB|7Zqu1yGm`vLQr}u|wMh=$V5tpYI^JO>kym z_{SXJ=1`djeu69*WGdW+OR%MYix}s@amMm};O_AGW-`^sO2DUJXZz3_+`~x0|8_M9 zKM)~YK2|R{-Jc0Im9aUsaMuPd1>i*u@?fUVQHUNnfN(I&qAaKb7R$JRxFIgsiFRfdXG}oUy1-3$A4=3w#cX z!#d8!CkjM#g1dkLNNR!|oVfh*Ru#gLT#ApwmpmaF2lH9kI7q^nvv4J2g~4EmZG@dU zAP{r#pbCQerYnLKR*$QUTc=yM=Yx3PRpEY?sxsRa;bJPY)CPl$6+NmlNEz(hqVl@$ zp7-TyFvAt{WqcXP=KQ<2gH1h?of7m1Aum236F~{$6KtMEFpK5r5+>?dVJ17s_&7VS z5Cfx-*7`!@ zVdJcj1rIRrsai5I8Wl3fSP2H=jBN+ff^7T?11CLuaJ^4}5<6I-sAi=nrHIuudOd4k($boTI?*SeM=K{6c2JU`rZ|`i!pHR*Bt|tIZh)qNNaJWy!2ncav>d{Lr!!e5wh^j! z4~nZEgc}EEj1OFc3}~swxGm%0WMM8pm{rDFv8lk!)N)avq6=K0bPz9xVg!b;^r3n& z-=Pc!rELj1*cF+;88ieS5{IGkxMmBT&E2i)Sp z?O?z_+yTwABM7b&;4scq@C3i$Z=AJq3z*^h!8LQCc7MCk4vugw#b$f*!t|0aLFr%= zlh>pll^it`V3r_Jrl$m9xE@_0dD9?>x6$vo{-^z@@Dsmc34m9SUd2dLu5rz-lKPQZ zjVH{B7YG;BJQ?9QI)aAlbpaF97=^TAse@bmLZRWpA5<%*mlC?+1xczHgLYXGqks$q z;iiE5SYmMLagj}EPI07rcn4yfj1Y`^*d#aff)NDK03k{6xJPtk-_eWP#>UZl3j8G| z8GH-U0j1P#1<~TLFh@!2IK^sVv*8Y1;{`!zVkzqtCC^E3)ZxH@iys1;sMgUo|1Tiegty)y11^#On=;)8@S>>UcMe)8Fi7TL<9b9T zlcJ$1m|z9ZM7)Y2^(&r73&Xa!fT@&kzywOctm2Kd3;KKDHV*fK@TSLa?7+hk?J7P) z;ezgL5W5o2s%O*9r?fwS(B3XROyjo&f|qP^h*t%Q$NjY=VWLUXBY7 z^mdsF{_qc}9Vf!D%q$?yqRX*E2a(rizu7Ivluik%W- zGY_gENGu2s=kWv5c!A2GBUdkT=q3i)`1dTnMG)b&%=ca2dDXrHDmzr-144c3Vr(ds z2MScBpuR#t%ZBnhL>u!}au=FaF0QbRUk=@`aaQ63MzLaR#R5E8e2{0z#sUX)7A?V6 z&=IWast7t*Xq-dO81BLq^aZ)>;yvAgdFnVxe2KbaAh;oJoteGmtqbf=piIP;o%T#E9-)3*NT@Sa-%VfZ0z+}K=z+@naf$jzN?23FI<$VJ^k$qz)hIjQ1 zjD~yr`XeLZfv(+=N$cX8wz^P9ow~WX;i%1ZYD05v-O*}#0JWuAoeWfhag;{q&bMdh z=ktl|(XJi+32{z(tk7fc2vs-MB}AZ>sC_*u$Q0Qb8CIKHI@IRPjg4weOLKciTd1MA zLmfIHQD*Sm+Sbq%YCA^VRCi3dI@-58GBVn=dq~~Uw-cg?M^Ub#XzFNW-=teCij`W1lQ+QX`$gTwYB3)pO2Lr!IM1ubk3||^8Dzj(LnZqYCh>3*z z3C4v4z@$W6+v5RUE)ggy9awB;l9zxZqSf)UuCJKnC?Z7FexHrCf#R=mUNQO(&(IGd-ic4 z>xTD{Rg3F=C7pK|lBPv7g`8>rO3w(*g~qXhpFN*6F+FeTE~QEOn0_BrGA*4CP|oy7 z!s$^YXllG{NnOiT1O7jJibj#VPnyXJemFTWRH!87Ps_An*3xRlydrycS1ylslcvG* zimKc0uAwB21j|5g-%h9wvFaD|R-%_^>SHf<{{y0lw{(!AS`sfCNT@uXWI4qJZA)h% zJbrQ~A3yOlbPq9majM$KZp4I7Of}YOl0{Ef#``&MO@ABRb9?Z*R zz+}K=z+}K=z+}K=z+}K=z+}K=z+}K=z+~Xx#(+iQ@(cv{EFhP0tArK43dm(If(OBk z;6iXBC4GJT;Qxw6%R2i8y8Fj^B2`sKBC@X0{@uOZA2H6**uK90zOG@AwtX^+n##`B z;lZ85UAxuwxKyf^>|43Kv~w#={|)XPQ8)FCj&xQm>TJ-m0mcQ37F4WSw6tQuqRz4I z;nAw9s*e@L?vE8*TOs^dQNRi*>GiKq*Y?XKM04Xd=_Q8M=q4!3s?4#AD} zg9ZDRFYT<2>=@hG*;$}2+yEgvTGfS-;o-sIw#d-n@F+wxxO-^yj4cAvJtr?Rd*reo z-*t7}5mdU7;qFdQz9Xr}dX&45bevF4j!b<6{q6)IKV)P{6^())rgpUtjtzH54C~mX z+c^~MbxXc1t^CY`r=4pyO=i<{I4!hM({v=-gdKeYo%Mqwqerh?-q|(08(OEuiM^;K-XcmgQx;Y9SxB1u)7)Q zfmbg7Fbz0%>IMf^bdF+w?n7vFEL=-_uz$HjG&Mzy_Tb8SNlZ2Z9;(k)F* zaNI=4F=T3KUeVc5TZg-)x74(TYBq&7)U|ikw6-p&hvScM{hxbpWANX+Oa@E_Oa@E_ zOa@E_Oa@E_Oa@E_Oa@E_Oa@E_{&z6Y3R3{`ksSZy`oBd?Fng}G*76V-%*$lp-^zgb z{=fPD|3^3m!RRGh^Zoz#I}}5I|IB>x`43y`&HLuR2=bUlXzU{(s_8PO969DD8L;~u7VI0va+nqh-9ug!|R-Et&4P5&Pp1^A(8 zN;*hnGn}K?0pB-^pG_oSmr zbWF?+#^`YZTdLYHcI?N|Y z+R0X0&lZLFa5N=J5q~T~^yhY3p-*yIS?ncSbzy^Aa3mfHddCD#mOVld>ZS0}<4xiq zDVoD94dZSBj5V}Oeymt_fBZPK9>&Lyhh_*rel)Qa3@xS@cVn2*(2-RMs#VLE9>IwJ z6Jktkl|EYLlPW}VmJd^xF;H?RSs!`pW$}@t*^R?@JrYc0Eap&MQ>zw0w3|mF!y}!c zfziIs5$%NIVK}pTq;q%QKxF>N-biF9G7RTh)A--MiMc;v{~r99m&t(1fXRT#fXRT# zz=vaCOu-4$ZL#BgKJJ7mE)b?nn${S7ed7Eg8Pfgqn%K!fM{GQiGy*shBcA{D1C$Sy z$)wI`3N8WN$m5lTz;enJpapM{P>wq(rFs-#It;ux;({z zCmziasA7=B5g0wiC5nxn$iZOr6dD?;?HcXsY#Z!?vD41Uv;I4^k5lR2rm9%6U{SbY zQP+;h@`|p`cJSFB!EZY?v_}R;A~4cAYnlVv>GS-tL)|_U6H_cJ=&j9%oa>q*vgGFZ zL&lk;IdQQLQ)!GFKo}_>nOVG;I3G)z|D%grIR0PH?qlAc!Kwda-VNSN&+j~6^BnMO z_LRHdb3f+3-o3|N>&|k$;QFfTOjn1i(D{b*KIdi5ZO)+bC*>~XRHa&R$`8nw%16n5 z$5W209mhM0?JwE?+dgDpX?w%=ZQE(KYMb5qfb~Lao7H9ciRFAtt0hZ%T)IL!Mw%_2 z7I%qZv7Eobzs^tN>$nAk`LNfT_1TO&xa=?GLi>l=Vl2x#qqnzzY-Cs8z^EDyclSiP z`&BMH>~@8HIlykuW4Gh|Rdo=Yb2%qBDY%?vtyRM9qr;J|-Rm0~>(qHF_pn<6?3U?- z;gQkdHMLWxOdkqMP5EYp-5Ovw=dqi6;r^^Px*!byJ0#*#FVS5wUo0A@*ElL zO-=WU3cE4DzL?9t*b8^phO~6ElLPZC>pCUeGzdJwC(+dI!GV!c%(ahQtFmin5sL8c z!Jf*X7Jg24Dq|2HTfO?Ofu8;d3ITz?FqeH{7Gb!zuRpX-6Fg^OQdlgkaBmNMdu>1` zJF&nHD(t#h>|g;qh<*y!YRS8^FbW4;RNk`Nx<=VE*w<6Ut}bC$ht_Bbz-=E6U)$`cZ0e1Bqc6GS7yMNVcEunPHs7fuL40dHMyE2=QG^0vO-AE@X@zj*B zP}pY!?20^g1tdJUs&cB7SEZ+XSuVRQn;~M#!Btwyxn*etclSrShC%O;q@)V*NrhdW z!#-KSK8apdt<)0F&P$2`)MGg$-ggqrECRqM^Y|Qg;X-y{8KDS+>#7w~$qhlP$9h5Q zNw+|&=CBJY*ac;T;T>bWHOqCmE0R*h@*3SeG|;s>3{#rJ1A~z6q-tcc^F8dM0(O2W zJ0E>jF4NOb79HyH(q!I1fO+if73}N^LL{zssU|?4p#Y$|5n~C?^00FX*je+~Ss+30 zswJ8P>EuUK~u>auVCY43=zp&Q=!T3UkELkfIl8@0(VA6 zN5UgI>j})A?qL(^=|!jG{Z)&!l=E{jC|(pCO1xYNxAgb4C$)mbC$Bzv3H({YgZ({~ z3-$b#Y5|jirne=y$_%Alyl>UMCGba8q#VM*0|QE0zv6854o9#JGA!x6o>L0;&fAM#mY3-% zrx7+cIc1f%j%*v*3V&8idG$OkT(MEOy8g&+_{LPt;Ml-utcJA?cMorcKT9~$AE_$U zLKnSHXsn;{z$flFaVz{u7`U=T3p~dtu%=x}VTZbgw!)u4^;%YJm|Y+mva5xqHU)TY z9o#m!75+#o=Rz>x8QOXSp1XR&Bf6vsYB}H;%^xTp0Ft{Zi?meXF_jn`w6ehHF;&)A z)wcrvG}S89!ltVhgf&*JvR&(Tt$;sGwdUwKPE#!ipQ2i2JJ;-70e@J)YYX%&8>rTl ziq-4+L_u#!Z!dUQmanIqTuQ*Snw+l6v%2!Ta^Me>4XIkP`RU2V8ht~R-tO5^u)Sfk>yKO-jLmp(J-R{T^G&NLgl-YatEPQ zDcsT28g2?59d5VQ71p`yX4Hk@nX@ok3z26KVlqH&VXeD1s}}r+%V%f-azJYBinV{L zqz9-js+Oz0)#!UcRxJ8--{JOS+QTiaba}dl4%E62v zs(i&X&3}=BG}sqx4mH(bkae@x$?K-C!w2#FOf5*RL6G*kx=rEsx{lQ|R?Dk>t4AV{ z6Xs`pfcLuQ+Nv2MjS8$0%ZK_d)+Oo^_mUY) z`oU$sXX*rEAu0+h&s`9 z%jKSO@Z4YKd|%J&tJjy!D3i-PW#GBDSkXLBOA%ulC}v&D`qJs8a;dWvh8GpG=FzA? zLEh?cU2{iULtT4ucClPMy%^%&vB04P$xDfwl)kyWqpdE~6waTSFXw0EhhbP!W`7^S zn^9}>X6MOyp1kltZ(o^hYR}c1*S9wun>{^S&h}(O)gM`6CC}1)l4P<*!$ZfyME4+k zIeK_Bymw?2zDT}cmpjLePURLYkS6{Vffnp?O?RR1g_0&uzENfynrp)C9dMYRGF_3C zOa)qq?gc^%kmbi#1~0w7N;AanuD$_mn7NP~R>>iuy@YGxK>daQ3F1hY2VL|`{Ka^J z>{{l%&wGxy(W`iV>-jHFpQqIQ2luV+VfS*^8?Jj?`(5p>Oy?uci=9U~XDGi=u28lq zdGfF1YvnF^uH$!(>l`~Bh4x?DzhIBp3vAEYuCevn=2~B}UT@uLEw{XC`MPDVWwrF4 zbiZ_t)F|1+kHop6UfB4({A^y&o$NsnV9Ki~ilryGoIcuPXVGx4fUhXxE7nG}f|GO7 z$9vFFV=oeEn(S$K_=;k_BEVOud&@xf6Q)yh;h z7>{G*sYx$Z_|gDhoXZz$Nn-)0PeH)5_q5cMSMvEA`TSZ!3nm?mVrfHQ=u;+6e`tY? z`jjhqc`GlkC8Vz5x+v44fR5#qQ6zQ_SMstJURFyeuyeWYbUg#fH{Sf4hr{7MzRAeWaG@KW@$>Qr5XeZa9-rwa6yd?%-c@_2$}gnao-|_2;4mD{ z_7jrM?$PoKz4JtU)8=OInF@rbR+$+J4+Qv(0uJ*;BaszjQ)PKLCCeGPJR_SUQkGYa z>H+;pNkf(~AZ3}@<{8|V%YE5|T7E~S$}faW&966?d$Tzr=6Ch5mfw^KH_R{O1+tsc zGI2BBc4s z6ZE{NH%y?1IHWU}uY6D8(k%8~0ecVqRDMFwesaqMx!9S;JbPyjdncC=7y#<~reXlX zrZbSi-p*%l=MriR?3#)J2ye_l2K##v`+F`SF|cz=2K3ny0|wqw*gs~mw+h%>=%=!G zDh76>GEm80+rVB65o*u3h!!^e@djay9&eTG)h708h){dH^=L7qKiwu{NPN0gvR4|} zDhT6arC53fOy!;3j13w zdpV!IOp_p8hG~QHgj1=@U@y&KFXa-#gyQJ%y6t+{fIT0E)GIsnyr)&VW7BziHkUn{ z%@B#VRmV*wID}0WJcIp8WxvWMM8Q`ds|lXcV#OFs?Fh1G6!u(zJu{mHYQ1)Lk!Rj}^1Wf}6EuQY6(17}x9!7H1wSWse2eV+HK7FfQA5 zXz8SP*V|JI*ux$Uu!pA;Qlr|gC2sIMLkc1TIQNs--(n9b?2!O_NM#S9hsrj?q@kEv zQj?y;ez=hRu#}J*^i@Y`VWIbz*!9uEHg)Zb&$Ph;$paPafl@*!-L8GBS`Cwh(uHIb zsxvf0bJ!0SvLBQZQZv+|<=Chhf)Pmi@_>ikudoMavHMkae=qo0+pLS7pDK1^S|0?` z&tTupXW#V`YQ2x9sbq)nDZLMND32ZT6H;k4YO))Y7D|@h`(WQu*!KeLJ1YAQdMMna zC7rI28+C=era0;VgDXKD#4_5EI7n|2p=0=KY5E zlitlU`dLy|c$zth}gvQQ4_1lwXnWko)Cw z$8Q~1IgWK?*`KgqVsEi$+8(prWb3n)TmNFc(YhN(|1Vqau7VtaKPhAvO<{_;)$z38;h_7kS*w*1lZ{I#_FD6H0 z)A`Nw_{}OItuJke;xawNQ<@wP5(n|r_Q5>k=-}}F^cB$Q{HFQ*CY3PU(+7Hv%k|L3 z%uRn{hesnc{Y=8lOL(Hq;$KquE%W%7D)^VsQ$=)z9!W}xXIb-Ok;we|Y<|6u5ZzWq zam608kfLBn#h0OOBrHVEKmn5X0iYhWdqb`85^%n)!sZ zu2&VsReA`R^4QlCO@0c_<)2@|KR=(4)-fxixH_L68d*n?lO`?Z@~fBdtLGEab0~`I z^FXx0g9rw>dq9&@+G+kdg?}NyKd17~p@)@GT&0K9bCWZTsoxHn?%LP4dki)i!bsS| zKjY`0$t1)_e@zru=ppT*WObqb62uK&Xj(T_fKMy@iU9v~5&twS|BY5faj`x<`$*oc ziM17X{jA}iY~Y`)A=Jsk<@)r{C_aQvCT|VDw1Hn*L#UC5YxR%;e|l>Sk^y&VE%7A^ zzbuDeqVh}7Ls1kL?IHE_$2hy0DtSJ?u#jK4CW=e*n2-Te!@Hplr*d@RTz+AIUzo=) z48#4(C@#?(=kiObxy<0_=JIp13AJ3}3cYbIha>RfXir)$4=DV+9DYFM2hc-x6j$jX z^^|T1a(u&7UHIwzj1qo^N{A1&HBnryH>O~00QNkk%r|B72@gMWHlLWoC-8oC6xZ#I zg}8nyA$Q6@F@fpRDqe(Zl*^p(aI&%A>MgtAv{) zd)FK85b^PS#eCl^LJ=N_?5&H=F^mW~g@|B#%Ty8VE#`Y?aYWqdvL;%f<;Xy@h9j`Z zM@?4Z{O}%y?+@@jd3+Dvua4$xau}5D!KrB-F66_rIHFdz`bxi{5W5HWqzQ4N!bbx9 z#5{iDaAfyjRWwf%!l3=UI$ga7a``|uN2CtTvgm9rbV{?0R6^*jgTp=4d}Z+6Ied3E zVR-N0@aiZo^@Bzlba2Bk?uD9>G~VL<3Lgyc{@J`AZwI5e;*WJQxlUuUS0%Mu@%05C z-&w$S&LYG!xmH^Cta!(Fx!l%>AY+Ekhmdz3M zPH6U&vP0;aq%#SI7PC4dTeX=({%@#cKqoI|KR6twLJM&%zKGT027 z$(ua9Wj1drX4DW+OG-;2gI)!h@;dLsnLl2cv+__-P!-c6lWbo=-UY$*dJgkmt`xsKSf%-5o zo=Iy2LJF@5@X%}?!mTzdqqwudcsz4{>Ud_g%vW1EqBfqveGU-RU_5g!jAziR_P;uc zn;bBM>EoGm6I+_(@r)kY3CTfQQyJAZKnPfEOCQfbRwnmj;$TJ(tnk%%t0;SdI1J)ADOO{(L5le~mN9h)62v+{x;wR!3v0t=`T>dxyJ$@zM z$!oZuy}-T&BEVHXp|AB9xpC71UbN8x+6!)pPxj-$Lg1qF+zDLr$HGeX4z&`!*N%)< zkM)LoMn)G+;L^T>^K2O12r3ea7c@_mXc}G?>)5zhmm$_=iFN2wJb?@P>2aedJf`W? zzUEKh;yw7BmLkP8@>#PB+R=p*xJIuF0Dj?Lf&kc5%3^J=Seqf%W`O}5=1$;}e0uuW z;=C72A8XaZ=;`khH54&Ky{1d7$q;L@#2TC~nj1ZB%BbH>jCxTNm()ROf7+lBXrnhP zWU+dOSe+qO&k(E8Wo{Ig(v8J_Cpm6hEuSiGY7}KrwL?^8h^iT)3irh4M{$+hkZAUI ze2@Xrl~G&@hiK;;h)g{Vd{%@925|z&DweMi%iUu6EU_H#t&ZYyxP!yqA1opK7cV6T zld!(*O$xqjg;?em%VvpXcrQP?cS`x*(B)ed)mFZFS$Yz%ClVAPQM{$A#ZtFenj@Ct zt*R)ld4qTcVRiA6LN8e^mbk@|9I*tYtBT^nH`G`JVPwX6^pV7^-csX zenV)34iJQ{N$y05g{oMXO^BU{x~RVVoif)!4Zk*(rI$!bcS0;sL`6U>C>9G~M6k0e ziVNY!S$H`;3-fZtyljD}X8{+$jk5ruQ?pR2iqdR>h*_wK>Pz4$gAvLC7TXjVC{aXN zK$H}T5-h>WC@zGjX8AFrLIhTJg`#C+9+n#65=zuK8g$D zz-FnzteLjsNH0>Dt-^O*62^5RM-ghS$eAZ{!r-+siVNiFlwzsAkV+H}%oA;6X^Y}o>l2v`+8UJshKJ&9q^ z#QjOank%f?gnI6A(cC!q5H>aUmRw=U7KoVp+9O9RJ5r98sSt-D*e!HVGg^ zLIVX8tsD6}TlqUj5n|KS5XBXAD2g(prU^HV=tW`h`izIatq7LO-!9{ChoK)^6~%RS zl^s%Aws>m$2E52@_^7rTkkI6U^*{tNRHS*U& zgw)(uMsdA8Jrl?#M3Ky9C4Y4Te>FsiY;K6+f;%eq2e6sm&hu9k{zfi;rIf#-af$2i z>0+Q-Je-u=KOcnEFKgM!d0-4FgJmH#Q55W63>QCxnXs&-D@|KKkv z{4W9i(p>%$?TLxvDtvklkjNjW=ir50{z5iK)LICA9p12on7RYPf2Z)@2l(&i^55Yq zd1Vxri~bYm_Hi^f0a>Ot2Y+n zfm9(f_%Cw#FR}?WA@tRHLm_DBGKCONDg5aGf2x>2g>M&EMseNVScv=6h4^VM|7kWy z)JkJL1O|;LGI&_S?D>@I+m9>!i5&j;T>dytvg7!s7B=8}f9}22yU*L=E%dzZ`LX9( z&yZ(>C)fR&`&;hIVJ0Bx_PBoMy3KXAtIbvFeB1e`^9JW0XOnZ5@|N%|T+lRwHY63O8P&OfXil3aPAepo@a~3**v^Y|HX)j+*~}ED&J(8= z66$Q?HVhOfolS_zh|NrK$~Vl9S)yS`Pz8 zjR~DdBow!603im1u1qJiLhNl2d#eepsG@5p^z9lsb0C)FnhN1l3FQ@HPrcYvO=v;o z+%bXsIIu)cFp5B&0j_AwBKuCiLwcxyi#iY(pS)%Mfna9~m1M>DxIF!Lt}Z zckw;Y3Ng|kMyd(JgF~aO6Z+ zY!gX(?SlwDV)6CVi=JwMs288{UK4zbK_aQe*Ih5Vs|BK7e7M;JRXn}+LFo4>z8wu> zN3}r2;%lD3JtxpiRvmWjOPv|$QpC=H=vpMYu<#a7Xq!`buF>=_Rpg$CEZWLMTZU+x zDcZ1dFQ1sFNs+Q`2-<*bt@7)erDV}MOSDcGtvR9l0Fx`YLjFw2^CNhs`nlGAiMAKZ+6b=uCizkY;^itMiu+WNPg+>LG zKQUMHX|QGjK4~g{(S){v#BlXNn>Ch2{Z3JzA?jy{dUPqC(6@{j2vCqBfW9ZhKmhPb z0xX!&_IvOwgTlfwmn=3!#D)y9VY=9W_PG=K29K2FvC)s8-hfY{1rypP4#SvnBqfXW z+r|0}v3|N(kM`n;*shJ_H6~;hj#<#E0}a{dPUt%{{DwYhcew-wI#xb`TQZ=I7_7BH zl=|2n$L0E3TWkwPa=e%~lwi0UhT&oOxNOCQw$Xx$Ep4rhUgeZU9h`Vmmm%tAh&r5W zojaj#uP`9aAIlyRw`4-wO2Of%gT$@_Xeu0zfUiR0tD3T??Gd#ZqSh~J(Q)oXZ2v^M z?AeLYFPy-w6424abwcf5d;v(J*kw`EC2BH6O_r!ZhvEs`AAzlDa@1Hb)1alHcQ0vX zuXsY=3o(UHn%Sdyytxzlo`)2lNHxT%6}HBPwy|LfHuU!>Wl_CHRA-24zo^D3y5fo0 zUWRm$y(uE&#s%Zdq0dB-^&JWZB7@IKkrz&AI}nT+Mu}w+8WEuk5y}!FoOLaph;2DY z7gvr&O|yq{CvblOh-;ww;FDCJjw~sk&~_3SsXlm2P<@)gDw)uB56HQO62LOER!d-^ zdG3T_$QTwK#5}noy?8 z_X>DJ-~#X2-f{0q-cj#>cb9jEx6`}D+v?rut@W<;uJkVUmV4)VRd2vM-Rto>yu$Mj z&l{e*df^bvU-Y<-cOUI;b2qxz!(2wCd#QVY zyTo1Kp5>n5_PG_e#r03uTdr4Ke}Z!kpL6}f^;6fwt_NJ-bA8iwx9fJ-O|JiPecpA2 z>yxevUJ0m(>TU@QKjjmePTGvX~Vpq9qu1j?V;G74K%i$8vf52&p zf3;*;yy9i?ORL5CQ|ANDZ#r*re$IJ;^9<)n&J&%xoMGn{m`SO1Ryh|tOP#7S+sT!e zlqZz$D|af_D(5Ss$~Nhj($Ufnq#ALq(x$9c<|#8QpRiPj&s&bN)1v zhgqFRZ1>sjvE637-gcGkQrkJUQ(^B%pDk?LY};fD*;d)gY_d#~V$dwoPDuGE;(e z;{^+M!G!rj=*%tHmGh%)cmpNogkQpdt<^)|erT3dC7N5pH7!l8bsY`O8^Rs+aNzRyURf0PzP^hu7Wh*Gna|!MV{{070nJ}Ko zC>EwWEl78opXTHrO?MjcO8KI-Yj~7iM`RfEv}-id<3HEHZ3wFk z`t$FNn~p~wng?O6vv*S1kb$HBE+faUU=`AW`%g+RccG><4~DwCVW*+L!!Bij&EHJP z!q#X1H)1BwcjBgd;-;_0O?Spkx5Z62$4xiHP1nUu*ThX%kvyB5s_WXMyUBHPW1}Y{ zZt}%U(#3JpMII?nG>wgn*6fOOpWr`_T8O@ZEnWToTNBJTkU28CYp^G)1e>6yuKhbA z{uXlX+K1l%JHdP-DvjP8NniCy`8;-RQ+UMdl5*o#Pe58B8V2@s_4oCV1e0a5WXfCq z%cs6|8Q#(c+3>)JIjzYEE2g~Vzi8@P7h-PL_eJ`9vX;B0JRU!yYr0P=;^T=XEk^}t^XWD z*8v}_E+qK%A4qi=v`f=C99yMewW^II)s}VXZvHzA+-^teD6IdMN#hqMjn_^ZKR;<4 zn>2P(D?11$&FxEIa;uT6|CffYPosVV6+P5+_^(X1o}X+zu}EqH&pnaQKv)0%k-m|I z+Q*@~1_lO4yJ${w!LDgHV^*spa3;s3ZndPl`TuI*_Oc@Rxpt_Q4Ie-u+=B_baVBHh zWa#Ywk+JiGSZ<*NZW>Y?{P(9i+=o1cFh`M*$z(Shx%$6u==wE>G);t{RedXFcr9l5 zOU&?M%<$Wo;n|qs7cs*VF~d({h9AZZSH%pU)D2k+@fn~suO0h`BK~7i>_?~A+p#&) zo8$cn=IuGsDiLaJ4cFE|uL*h@b+uvW&9rZB?C^BsqunnPS`ladlkhFVmk9qz_#EN0 zgijFul<+~q9}<3(@E*b&2(KsnFT!gHzkujDlkg0}DB(EaX@sW|o=kWW;cmiy!nK5z zgxQGhdkMcy_%*^i32!C*5+TXpK1k+^2zL@5Pk1chR>F3|R>Dn$8wu+O*AcEHTtYaX zu!OLHFqd!!VHRNqp^K0@Rc?-E*Smyo55?)AnfN+BFG{P`p z8zE^0{}Y<|i-f-;{0-r+2!BCH^@x*foS5Xq9>0d}evXhdfq#n3Bm*ZIILW}zB=^$^ zslM>NWG+Qylt)IjlHEcs=Mz#`cD6-w^DPLQ5Y{3D6zF!}#{a>*fABu;{kHc@-b=mv zy-XAW^!}9RdoWu6tmkacpyy~$$W!6T_hfju`%M^uKj(fD#@`RPzY62- z&%&7dWcM!jG474-RWQ2tyA{{FuD`-~`X{bKFp9p`b-C*t7(4g5j)oEQYFDW%*X4D- zSKfGs9?Of_Ca?Wr%mA92YC{M!%faQ0xM zQUzmRzv7bLmS2z`lD{HfFMmotOCFPV%E!s|a+SP5&X=db!H2Ipe(AX1@eRiV1{4yS|J|7w5E{v-R{_Jj8G?0fA!_D1_sdyZY$-n9MM_6ys+w*Ru7 zZyT_6*jCtbZ4!)Qe`LMQ`bp~^>lSMTe97Q>%Qq~STLvtRmU$Mt^jqnW^f?%XA1|$i zuNwSKJSc7w=ZQWz=dghPBT$d+GmfCTMguBi{E4l*B9jkS|D!ne+uG0^YHbL&hT1wB zI^a}KJX*D*uE}$}@y)t681nivbEP%uAzL?X2yboP;$Qi`cd;*!mM8{ot!rCPBXCGy z!D0EzR$+3&Fs`Q7_Vz6`{*R(hISAW3$qEczIarn9|aNKBP%Z7Gf ztf8jPUw+s=v!+b5t{vj^FaLo1c{pk}%u{Vcdy{|3``?~5M`|z*UDE=O^SX}Bt^TEl z;U~91+Au{tO|=~@EsgE|#UJb?Cts?YB9_L@pr>vARUhc1U`k!8ZfWTVRX5hPZ`$my zI4oa*5~P9b4 z5haDt2BIfV;l2YUN%HSMHQlKP2O{LFdOwU?bRotKU3cP`deX0!{3%9`-8g2L^yxn> z#U9a#= zk*og-L)Xt>=G#a2_ecB}<2+aFRC8$o&gH~T6wi!XU|u*QZh;w69~NkPD11z0qaxVAe*>%2TmlI$TJ$T^TxRMyz<2`X ziI!gYz10sFej?D1%b9yhaye5#_$j*Lv^AhHx|H=F* z9g1TC{vUhq0bNDay^ZJ2nKQjmlaPo+AR>g0ln5b^P!f<{lxC!ZbP&aYA~)DU6u|~I zL_{oDPytaaDAk5wL2L*X#D>@q{qM8)zQYUm;`hG4cYSMp>%V^JdY(OJ?o4L(*=Od= z%sI~ix;b=2?ucO z=8>0FQZK2b?ujMU1|^jYOngr|!9fM7%d4$CN%{Y+&tPhJ%UNmHr-d8BtHQRy&%vX? zgrEt0U4H<+ndid%|J%J@UPbtBeY4xyHJz=_P$$d&(7w+;*Uq#)v?g11;hXVep!=U| zdYep8@xHi63>KBNZ?xOBGR=?ei!G0hNc%nQN%*73{mYH3 zIr=bq!>u9y9am}qYPLu62zZ#-LnEE1MI+!ve<=p%ivEp7f3-Gu zwvq@?u1!jq7rO$-0X7qTT8KV9W-DO;_$vj+A1ICkgkflKt%iQtC^dR);)P|Cre6qy z-cA_rDEhP#eX>NKCZdm;ZQNqEQV>u>a*m%0s!knL`LQda_7Dq1&kWJC5@Oj!L&x`+ zt#kxVaws4N_U{}@4@dOM5pCK*oyf^Y)YRmMPO}pl2FFjVQHKxPlc!RL zSB*kZBVQ;~^AqxCD>;LcoWw=kQgJE(OoM9UoZ3*FS_bP1W-B#=)F&}M`6QZ% z%3Va|Vnjicj1oEq$x#E_pE!m*x~Nqu6_tvGLQT!%7(H7l8YD-J@&)YX--((N=W#^W z;EJW9VzE$2lR1>?0XQqw^)qtTvFm3ADbjOAg~p-+xrNHx-9!sZDBROyrXMxiPVp_I`y? za~PR?4o$S5yJ$ZbBXX6G=5t7{a@hW4RjwT>)eaRSa+NE&gVa?HyZLXbT>Gh1`>7a_ zs$5AS{2!|P*ez50QEI>DYCksCexxc_S_r9I$gpI0)zS91)Ar{ha+N1E5R$7Lwm*55 z*U|PBYWwmL)oHYttrQX9G*a9FxXSSc3e(=cklNR|+824+7gXV_g^;4c&r3doCfWyG zv=53Axx$qkf~u+H3Wx1aTH)`PYVQ|o3c11)S_sGA8B`mG-TYS-{$8o}Ua_W7c`ARl zl1}(PTo4mib#0f_KFZa0HPm)db+dFr3TJ`j|A~`o>S$ZrXm*-x z|7F@;bo(jR@BZcf45J-Bb$7Yj z#FH?R{%&!R7%zsoFT2mVkGT)Hce?Z4tKG}psqPqYtGHgwf>Hn7^$Xqe+`euXx1HO< zt?$-!Gu^<|VPwP)&VJ`3P-NWXyx=?y<0I~M7CARMvz-|*Mq-3B5Of+lIc=P#&Kb_B zkV?{V((GUCZ|%?R_w6_ASM9a-D*Hiuv3-kut$l@kp?v|&6zFfCZ5P?CVDv<7JIk(M z8`hsNg5oRdW9waOi?zXe2F6j`584j%ta9s8c=t2P8f^8pN?^ppnc^L>$!cqzY1OlG zV049NY36U{cjg!7hvr-6Yv%Ky1@Vx1w|Og!w3uaHWR8dV1?QUG%?{>SW@Gbo^Axj^ zX~7JGpN(&fPmNv1HsfXEIpZ-HfpMoX-?-Yi+?Z;NG0uar7+s8ZMhm09QPapY0z;R7 z$RFf>`H_4_Zjvv^r{%-)Ub#r#C}+zVpg}o84wOA*Czx;0RGuMEl~tr8)AV2TZ}rdh z_w_gQS78jtD*Zuyv3`qwt$u~xA4YQ&>89mWv+D1&#~)<#+n)^m}?M+;^5M`gE1*8Ir2HnJ{_ ztcj6T7FoR`tAn!Cgp2I0k+p%=f|piBzq1pTc_gyFkF2jE>yyZOE3#gWtksdVBC>Gs zxH@xlVN}Nchq5_Q8IGUF-;ImP21izp$Z8*1XGT_?$jXQ;GhrFON7li}+8K^y{OwS4CFTqV%ZV z^vTiMQIU0CWc7=zlE^BEtSCD5C^~h%#=!Aaj(+DwRw81DW_IDSvZ{%_lvQmIm7N}0 zi6|+nnnh)BP5d^pzKpCdBI~or`Y5tKh^$?a^>$=&tAIUkjmkK#pp1PF7PlF&)?{ltj8jYYYTq&P@*hgUk#rcMCaxoN~{%sL>9O1;Zw!0QQ6_h`Z=xHYKt++J{fdpQORBt-D68^fWN{q8TCQ`jRz+*M_MxmwBLoW>Yx;AuT<`6EMnAtzF`X;Q( z?E9e;E59F=y};J^DvAA#uX0~hmL6H$riTu9+i+P~RX(GkWmOwTW%VN~kF2r@nZvPv za{%!h#Qz=t|G(q^|9AZV|NqDT``5%eX{&`_3&!hr^~?Ne{@?y#|A7CQ|DM0yf5l(p zKkhG+qva6UN0!P$^G9oqJ=`7uIRNK4k2*`eW-yMw28?^3CdP`p#CGwDSR+Ppt=6fUiV*7XddwZXeYaOsYv#&C;t+CcMMn&sp!?dP_ z584x~WmW^LmQ@XA-AnU`)zvD48TpS}@7cC}56oq_!4XcWQ|L5z@|@G0410xlL~ex- zpsV$ZohfE4xHy>L95p+GX2ZAP=i&R#A+J|3+_@|m;BEFBcm+WZud27&n(6qy^nMIF z2Ce<}eoJqpHwf}Pu7VtnpMbu=R_7&Sqq*8TY}YXhoFOoVW02FwoMgu3CvvBJNj@td zl}qIv@+LV)UM8pLEA)Hxh58NVO7lMRMe7xB2WUjR3Lnf{idv$Y2!+&+Xg_LS>Q@<0 zc=!3CKh~cao~`ZCc4(Wm7xfAHaD9NW&RycUUT1Hv7x!NDR(fB;Y?3-b^`LTKd$)Oe zyqNo|doVm-7KRsu4V^>g4o5&-9Dz95tRlmbIAnxwTO-G(Urg56i5Wv9>-@;#t}?70 z9F_4c56bFBW!yoAGQQb^#a$J!xT^vdcU49X&*1JAlyRp3EbbJH7@4t+_6*jR$a+0t zL73p{1CV*z5Lw(Ufi2!llx1)?0)7`geq?Z`1%Ag}))6BeBe4a9Tw>1$5|$fv^xcY4 zS(vagq6d}??jXaSpNiH#5m~oH)=iN$H?nSstmwfe<2ot>zl@Hok&!i=EU3YmQ5knj zU<*4cGb2kz7PL(D`UTE>X=L3ISvN-(9|8O>dbD!JM{CO>t50N=Mpj{DwT!Grk;QQU zd*;qH)KTPTn~xM;rbP8&an~ElzNWp5otVBSvUW$-hmpnIKlmL#6oIufTDv2%IGSMX zTU0i3csj=)lyUrlwTafkF+ZBHT=wpWk#2O%nNeA$Nc=A2ugLl}vc8S1Zz7A&2x5pI z?!e+R0_)xAcYO3v#zzkpKjMJ3Hu@buzQHlSmMC-9kOfiFFtWxZtn?^O9riP9`(?E4 zzR21eS$tFwiIHENgVEZk9i>NY!TB*-`#o9UT|TOjGt!S8^Py<%`pDw5ge{`B?;MWS zzDyPza}+radmPS}TP;{#w8esil~FOVts6^N&fk%BG_sB)EW1|1%FK?eYLS&0S^R)8 zVq|8OsO;EZI~FB;mhijkiQi?sn6NTWjjXiDvdJ1VG%Gs3%;@MdkHut8v_%kEd{u^) zcP5pAUn(coW<=i2jLtG6I`a(nF4V&9(H4>KGjpS|g^~3tS+K>OQQ4Bnx+}8oh^*TZ zmfbzF+9#|`u0e?QDAqFmjMg@Yta_1ECt+npwVLr&qAVkd?2ON&vQH!H*!|<@s4R-& z431)`H@?D+8Jc~p7V;BYWJXuQ%ob4@`yRG!8kIF63w-rLWJPV-<~uR8x8<~U)TGRg ziESaFG+*1(uS!@MeEox(zB*B6&q!Dq?~?_8ZGL3k6j}2k>&D39d(^0*nZ2nDTJ5!D zL48~kS#u(*JhEm-)~v|7GO}hy)@6}(>`13aWz!;SN@Purtcj7u-hjxyASzoCS?oVJ z<_Dv)2O{hK$htSO?j~zOS=G9c#nBFBwW$oou763^=;>L}b<&RZXD_0)P#^5)(IYd* zCbrGy>j8MTPok_UUoFN?tQsb^b=}C~tH9Wa*_9GoWLF?-{G@DdDd2-%(OQm;(bKcp z4=2i=3+-l*kacsaHJBoXYTO<69#}a>| zN<6Znh_yOU8QfR>gk|ymV9$M{va-as8U4eCX{VNzO&wW)s}U8RL1QC&M1m@>(Xc~N8R{I0mnF49NA!9PQL@|lE@lI*4T-a zKZz_ps?n1KAL*#+f?L$6v4Y$0$O#r-xkgTq`)Jz{BP%aUSZ=e(Y7$v|Z33T0S4TH5 zTFdbaYwJX1xses!1KiW1vKo<9J+iVRt6F4bL{?RJ^a%S?HKlW7o-j21LMU^fnkJ=B zqn|<*4}hQcECX$^^eI#ZYbQfl8&$>Wlc)^VveRMh1Xv3JFmZZ1H+m@JMg`WG#6e_o zD8S`zRN}9tk4RV<$3mZP+M~*_!X#ULzCxhbO`Qf>s_g50O1GT@#;TfRyml;+7rN6Y`H&6=r zD)4sWaXinq>t3Z6EXdUtsXyc^)z z^D=LmH_jXG4f6VUUA1$MhT+^y~_@MhpCccr`3 zy$jwi+yKgbm$}p64a0DEklV-Y3hx+NyUpA@w-&r*sO-9~aE>^KK*Mh@Xcz2&=j>OU zb)e<9(pd_b5*C1>U);IOndXdhhCA@Y?R0gDLC>HWJn7eRvYpC~>j?XZeaJpw?}fJt zJM68X=eN#&%3f(NwePYQ*f-d5`!ahPX!{KZwSzu(SGySAVl)GVzgl)SJczic^LGf| zJnXf0TRW_+p!c`Vddga9EroXs3#=QgxOJH|%^GJ7w+2~#;N3&9)!J%i<-z-iY^yRT zBM9?|dB{9q?lpJAyO^!!E9N>-1zc$^HSaPPm^YYl^D=XqInEqz4l?_gUCm;%HN3;g zGi!l*LS=ZLBa9=)A>)9t*Vt|BFt&n{!aCzAW2LbalmZukrb67f4738r8N-c1MjucM zEH+vj%|I`(mXU2#HeAqJI0E@14#>T7x7-1$3$Ms^@+rtExm4aI7swlA9NtGvljG!Y zISAfLb(O`kwQL6OoNCEzSy{q&Z~cgV2(nM^h4)T7^sV|U`a1n7eWkusze``B-=N3! z%k*jbICvv5NbjR})r;YsP%}MGucc?hn;%yf;s~fI9uRxQZm~mbg?C!(#7eOg-ft}s zad8>E>l!D9i$S7~=nC!D)Gd(k%<321oR+U;WI4E;5p*Vw)k99t{F?b=<{iwNOfyDMxjl0sa{+T}=6vR=#QuxSYnY#A zevJ8H=4H(HF)wCb#5|w*dgiN{uVS9bJcD@(^LXar%w^1jn9pVI%iN2(8*?Y-cFcT! z{+Ybokhv~%E#_01Gnp$f`^;2b=|0z!_ZO9WzcC+T{(<>hX0Cs4A1{B({2}wZ%x^Mp zW`31<1M@oO)y%7yxjww5ynHwF9n7~f&ttxZnd`y3l$WP6a~ydic$xk0vHv~xzsLUf zdh+kOGE@Agdqup=ap!Tod9Apd>%(iz%X!Rom}@eh!d#7+?7qRvTbMU8zr_4J^RvuPFt23hcI4j4 z%eOHvWWI%YKJ$&t*D-Uua^t)_i}?y>u3vXLFLOI{C-CwG%%hpP-rZrmd_FT@kK6&g z+@HA*a}Q>2hc3s1Tgv6!F5M2i%<Hdjdd#(%bC|Q4)0rzUJIvg^V@GH?_A~QA z=5LtyGw)^ogqhoOY!@%H|6|*Ec?OG9Zr8EPd3gr&H0H_7TyL?lyv+3$<8~c8kIT9KV*PlT@29b| zdAWqSn3>yKjN4bNDVNu0K7%;zC+6>&xn9z~;$^OvG;SAZpK|#}%v>*NZ}T!=XVbRv zGS^SqCSK-xN_&-;`TCo-o|n14(w^gGuCFw1M`>JdY22RDR`Bn*9@Ccb^8L(QpJ`m5 zX?Jls*J~QrYuW-XznS?a=DEyV&uQ22GS_!noVtZq5M54mDbYnlQ;8-KjUyUOG>oW> zXb90jqH~D)5%nSJL3B1z7orlPPDCAuiiiq{3W!=00%j$#9(XuEwwX7bz+>N;_b15@je6*~NyiCEXWwqz!LgoVI*39|L zEt%(TG4 z(nV3LT8o$ICZ$!a&dZs^F7Hp!%}5i6sa*WPOcx7H%;4n<9erVJq3DpN&(-JXGxh24 zopvOQJ-<qGQ@dN=r*ULYP34}kJr zUvakRptsN)>1XJt!Px1_x(9NNe?g|dAH>%%3VyeEH~c;PDLfE<5$*|hhTFr9;rehj zWF1@ZAtG!3PW!@5RA$-xEI!B$u&Ov9Nvj@K3Z+A92>z&mw24k7C#98Rfh4C0Oo$1a5 zXCx>j_Je$k9i0LgKhVI*b*ej69Ut;D9<>kK2km{3r*S8!CT@h$3acSgz%qLYj5wGJ z`iV0^L2-gT(jEdi1G>T3hyuI0-N4SZtJ_s=-#%ju+Gp*tcEWgwjn;Z=HDnT4 zW-YN6T63*A)=X=sQfz=#FIpkW^t*Vv};~b8fhs}fLJ{aM#)7)-u zG}oJ}%}32;<`Q!ujQp4bSqG+@6JQ*|5Xe2y&Fp9vn9U*kK(1LGMv3^QG>#gFL78!% zvB%hHY=`Uv>y6dMqmX}KiLua_Ys>-tiRs1!W27+zau9SgIvNE=bEAQg3+jzk4d0M3 zqU5kVDEG-dFuq~C+$h(})iB0knOq_l%DFJgVJ2iJm>@^OSeJgXo9rkHU?fWenJcTy zsxX#C>PJD<;-J1d2Lv4FYdJxJu`Oj}ea`$DGvCOvw&HSn*6YlCBg*0%P1Z^-=NnDd zQeM6fIU{Qv^99UfnO$aw_}B{vyprZrCaOeKk*ESuNCfjI;Eh9$PvjA~L=KTnWD%J} z29e+csK`t`vy7~emjh-G`Jdi^s5dC-nQQrX59+JaEG<2o@9+`7MC-F(hkHbhS`VBF z{1R{lU{$WROZ+a2e_x52jxWcj3d!-Q=aA!X#`QTq^&oP5s;C^FdJ;MQMqW=niX5LR zB*&);$?>T|a{Mv$J8w8M^{{eW>M7*7_fWY@J%t>%JukOorkhcYOFgR`mu@~eF5Pr; zT)H{rxOCIWap|U$G9)=eShA zIj+y;6o@&l&C4dUWTrUDabvXX{LOrn`3Upx%=846T$Q zt7FjbZ9Z?C&%^$h%im_+z)U^V9Gm0Grk-VveG{+0nwf6yIW`}sJ($b8GjrV8XYw+~ zht2hDbG=!7To(1Jb<|?Ghc6vCcK=(%-2gpqhT(Ghcu7!?dg)VBX8j?M~<3qom%dcYQIM&(!`eZI2#e5!fKjsqV0%ndIo#RG7h07~5d(0e1 zy5wc9FYyg63vRc9<6nHqrZey7F>_wQ~n*-r(pjGj!Utd*MGqL9`i2doy_b{ zv4fZ2Vdm?b;P?=4ayiGl*v`wZGjsfijl9hFW5M+!Ugq+bn7O@(7kPO-GsmA;%gbw+ z`8p+5^YT;7PcYxhd=K;8%-sIOVqU(B`A%lO&WYQ2nXlVoAun^>i(7d4X6E_KH!;s+ zzLA;ZP4IP7T*Kv8Gjlr<<-8ncp3OXkncJ7(>#dl;<>Q&hG4u69jOJyIV=zSB`F!RwW{!U`gqQjHDY$)$fn3hlD{(F_pTpdrncI)(%gcS3`Fre_jm5Tz4UC90w{@7km-OoONK+3-!j0_5nsDX0xk$gBNJ{1%W8 z?^W+QuZH`+yULvbr~jw=ieBi($*n z@I2K8W?HY&FVWkHqc93!8t6~|q&=h!)lQ4;k1dT2h*eAb82)gof1To~Q>81-m>2&^ zprMXFyigyWkBE9nag`|@gga8`C6!$?ZTQfMqax7`eVEk8wOClNn|3PNSB^0G68!^B{Gqx z_bJx<6d)>*iB@ryFg>*&E*eFCNN9HGy`_F`UA=b`y|-Fb5a%@LDg5wEvLEW`MeX#W zd_>ahh;t(J6q+5d{Yf-C>geqY_4fIQq}dTydC*g9cED~9aBYPHjAg&~V^ym1o(=NPdC`6^wLv5^Qm+0B;5h*QvTxBL# z4JD{h3^(uY0jaV@{g}+lu3n?8ZmYfWlW!#sI(JAQuTC4KP5{~Z=|QI zr0}_MPKKUBtMdWW>eMw?*R)P?l@MKd`1n{=x5Wn%9!@D8smBWSSUw`%7FC+`)VG6# zuxdgcOiz=#o~x%d(9_ha+&Je=PjRgGlCJ2FuJ}=Oh^yS`>R6MT=e^0{6e&dhP%3^X z779r{E}qD!o~#}RyWybfNwT!5qw1t8z2BFL?~8>(<&(4Gl#)HAXd0Zj(!HG=UDCyO zQXI+^-!&57kyki9dkU{CQC{)Io>1(88sy~cDQa*@;&f8gV4nD>SbS7~sE)Q}TqSRZ z8mykI8pQ{jxSxyNQhZWZ>~1V}t2McC&f}iqQ174$+~SHYP=P9qd+G|j;~y$;bE()| zEEIADCNjGxS0L=>zpB7ZrD9XDP)HR>sp0>r0*}dPiPxprmMdOwBwnWqd_;A$&EqO>JXBz{lT{$!HpMeitj!hA)DzE8 z^>G&Y6bE_>9VlcnT@KZk$RVHH{%-k)>U*$MJXkCga`mYU^Xhz)s}FYbUsd0-Qn9R9 zC{zw<6<1m5|M{Af5N}ke=T_v32O5Y6sPZ^XeF~qPPtWF(kZ8S%uSqebUPR)#pJqTToW-)ty0hbt(E@&8p!+C9!Bv$7hD!J zh57$0{VDz#-dFH_`vNb`T?6|61Kf0HoAUt7{I6|4XHT(9?aHAcwa<&*My*-Kjbr}|BLXWbUBiJ>A#`&65&b=1t*tFf}!sqplFTn2z%aiz}= z4Wj+=Z7Nl-YTCqqy~%+Z&4`i1$LGYfK=yFtIa#ttGucD+tP0|+<(}eE>*wT$j3%;c zsq9*WXegcQw(*35dvd23womF5H<4XRWS1gDsT8h<#g%@$x=@S*Jib#5JNS2+PI9kU zmX^rUB1BzXI@`rr>peHQR}6oI^6wTa&Hia)FCAH?vLVQlZnC5ZQK*C@t>Xz9_|Y5HTX&4J`g@9wH5|Z6JJwBPr&8Ie2vK#cd&ZTtJA^>tzYzi_i-3-f zJUdHvY$`ia1SqL@sDKm^a4=N_v@ezIi=;x10G4}C@mK`gr-*=dC9++SRLBvK(0fmg z0NBC*FaiooWMPq1$Pu8l;NdJ&L;(Delo8Ojn`~Po6>wk!VHl?ynkyNN6pnF^?!b1eK{ekf!%Oi(&PFxbz+bTPTgz%^@06lk5)41B7+WyYRmk%(tHP(r0VLhPon#= zgn>qta;4u;`em>#H?CCNQ+s7EdPV=s)&GL}W4-ni^|v>1I;raKbp2>s{b(yhb+Bi~ zm2f*8Y({d&9FLXz<@%qtOv}~(tgHX2igV*irakp>enQ82(A5t@?XfC*irV|+q_x*r z|F%T`wg?exZ&W-X&OSY<_Fy;1)!u(rclv=6{Xh|-a!1R!l5Yohqg(T7%_%wd)E?Q5El>X-)IWfp6ict4P;;txxjS(xscNpi{(cAj{kDkQlS+uN zAAj*sAq{&<)sw2Pzt=&3uPvgA?v`<-zMlGY6Yq5?0J8O6w!XWrzN@jmORdR`E7A4T zr@M;+V56&Vgg!aztEUKnT_+8IruwU0^jA9|VxN3$JR!4weDhUagWVh#0RL(8)nDnN zztRDb{hH8XPxdSPtyF$(s=wStf4Kvq^6Ob~CBhDVO(jX6aBOr9&|k9k*K_rk8tE^U z!OGmYl3!2l+IPscPrCY(5J{}Fo+6UoN%$mHB%Q85(N=$=6(XN;LUBF$jA2iy&iHhF zRa<>kD@1k1&EraH9nLt#13sN_;zIJctv{WsKVDCNoZ?97tEWEM?R2vDy868kN35lu zB96A7G>#hU_mt@O6d__9jgBWI)sMfBs5pY%92ZCb;f3Vx68-KXT_O84p}L;zQ}|1% zeA-xFQlc*@LR3C&6<2cW;L{Y(IVw<&yBaOF_4{-6#SQeuYE?m8$*hB0Q}hG3B=-aJ z^qV^9Hx(dKK94x-te+5D>e>R^lb=$>R-QhuSf5vbNEg&DbPg#lsQg7T@u;THmHI7p z^|_7pxoS;8y!51}@LKXI)X`_P(`V%);&-DC@eoQ+*Myl;kLT($8|gFY^K8eH zI^&g8&Y0RxpPH{LtHb)fdBl2~HSep)vWj?4so)-QY z{tBb>4}u23-tgn_gYez(&2S5h3fK^?3!e#}2p@Yp77fC9gz-vkr{a{U^hgIF0x`MkL3eO7=nJfOp9Sr~l`t3J z9`_E=7?|r`<6Z?S1Jm6}?pV+n7y?>`y+CQ8qgx1ihRtABKppoqP#dV~hAt!;hM57s zIzNKqz&=p+`v5ctwmYvoFM;a7YUgoh1?Ubeac*;N2IYY{&Xvw3pgk}F-r@`e^?`m) z56~GbhM58_ohG0_kn7ZNs(}W9@0d;uR0s}(is9FwL$Jqw4}|Ns!kmE@?KPl9@Tk2U zazNe%^9F9RuLC`TnV@($1r!NJ+GX|t&?M+)cedMuDnWC*kzE&b398!}c12Jokk;SU z@75uhMewEd8K@KNwBEEfgFeA}>sjjwP$*ai<4NuSje@z>HP%(2QZU_`1j>oSVMf6@ zRxeO0=x7yM`Jh$Mz^Y@N25JRWK|j$3y@I3WujY@SSg;QUcYXkx1>4Qn&6hy6V72+U zxdL?_}=&$bPV77f%!7+z#LG4EDo`ev zE+@&cpiMADo&)c|y23nyLYWWx1Px>zP{quKxdfrKL8IWP{;U2Ys1)qeKhZw`or3N9 z>-tNeRIplq+?WFD2qTR$V*uzQbTc{|?Li@-xzWg|3mOU4jSQnAs3b`FH@s;(1Tz}G zl%Ii8!cO@njJtUSW;Hx3p8&OlW%3?SZ(IPnjZ5_<`fd8npnNb#zY<2|OoLfIqxGSn ze$WpTF-t-Jpg?a4s+f83p|6HsEp27mBc@!Cw#Z&3g{9f|BQ8R`3Gr&g8HnQ%2P1Yz zY>#**VlBkVh*F{TJK|4>Un72nxF7Kg#Lp3TAZ|o_4)GC%#v6zm5T8O^j<^JI0pbma zam49}V-W`+c147YiLkdOh&hOm_6{Vh2RpwjSEm z5FyYY6~_@oJQowaZQ}8pc;x2GxOO$-3dDO57b1cLF6;r1-@F)Yc!LZjSmS07w6Vrb ztZ}mrmSiBB3Jt7r;~?7TNn?+)L9jz%4a5);Qr20Tei-op;$Fm$5#L4JhWH91d>ez` zuS7(T>3Gcg^;mKhB6>`pj`n24QHbXu_CqW|EI`Dw(D5wvQ?R5mqKAlQq#I~UL>*Be zYKU|eY04IVBBKArA86y*iJ#H_0TJs(eNl$rqnE_DXrl)N$Z zSOqaebP)~2G=Us z1Y=cu5bb4%7@r!(p>`{l%tO2m5u-)B675S7rz2uKXcz<97%agW*RX!IfmnjIqoLe)LP?O^qz(u)9PVKZNwbJY{YcLs)!X39Ymopb_DTf#Dj?6Anr%pi}(rRZbZD! z#L!oZLGDlSJ8e6aXli|UD|VK zKZ}Spn1=D6hV__+tsrd$uEjb{TZZ=ih*+~}ShHz&VF}i68rE;x0xY>1@g~H%h*;NY z*Px9xo)*`I6}v*g#VG7C=3{fyp!8r>0Dd?l1hk~;ebWu>E zpp$|Q3W^jIDkxCUT0y>o77ET(&_qFf1*a>hsUSx|wt_4L)f8kZ$WV~3psIo@3Mwn8 zq@bdL3JO96fdXHFrvRkOteB&~R$wVG6&MPn0$qVnpb25wPIyXepKheVGkS&43H9JF zctZav_%_%NT7Dk}?*?yxn%~R8^T9Kq=l5{%KyY_(dvHr|V{mmaE4Vbc5Y+s}1jB;C zLI0p<&;|7T+6JwHra}GS^dJWm{i*~(Ulz+ZI(C_Pa_e=aDzm4C*Z|v9eYx}4AnSLeT z^9?`E`@{R$`wqq^eC~bZ?egC8w!mzK7rf`ZC%s3!2fcf}JH1=IdET|&Z0~aKB5yK` zWEkO{=bh{I_RjV?dF{NjyfeLq-Wgs^?-VcHtKd1F4mtXMbANKbb@xM_z7O4Z-8bA# zke}~)_ZgT0@i64*yW73py~Vu|^7PGeFLf_;C%R+YVeVkJzuOaX^mTCCx~<%%kf-l- zH^Wp_r!90tBPG6_HQ{ogs9={e&W2c@|8*=$&I+YyHF(9AcANJ4oclKA1)9)jD zm;IK#1@ij60An+rv>$=oe)rmU+PB*CAiv*i`*Qmtdotws8)2VkpKJGqJb#_+cJ^5y zp4`wr!>(zcVy8pCKgZUszpURN=ij&1e(O`~L&*F0hPBCh*?Jyw|E;nfwjQwVhWvlG zST|Z%TeBbs;Dy#iYm7Av@&NX?dRkqq4v+(|mDSX$Z=DW#0JE$rR$y81u<)n(i}{23 z4des-*nHo7$J_=v0XLXy&8N-BATQwk=3;Y^IUjNZmYY|YGt8-wA8?d;zB$nB3poNy z%p$Xm*#hze)-!9Hr<$3NE6_6yGtKw|@&$fpd}VxYd;~cI-!irsuNp5v-oPh~M~nwy zB+8w}t;Rg#T4Ofk54^~jY+PWBfEN zoBo=<0kR1`tv{weq~8x21sCb__3QO=$SOEPpQ?}7N9pJ51NFXocfAC147LHSjK+FB z$TN7Vo~c*TJvmtRhg^kSWCz(+wt{?x_2ua@M`l6J!a!P5)Bl9Lg+J)u=wIj`L+-+N z!au^F!|&jI-RI#);Vw|^+!DSTz5u$NPr|#p2SK^>&hS=vQ+F-Q>$yC<2;S3O5RM4X z1O3k4;n`s)Q1Cnp-qAG#4bPh4DeB@G;6*jSn?is$@!&Ho$6I-@2W`Af1iR7x5b*=V z_Yij??m)zwNbn}w+Y#|55^O~KWyBW{*CIZHh_{U3F|;2>d=L?D5W(GO--(D_rT}jW z!7W&Vw}xQ8vO^ycyLlnrKtmHtB%(mn5b>58;4L-4TWWx})Bta(0d@!jyqN}v)bE2I z5%HE997Ov7;@60Hdkwxs8*j3~KD4o065tIhxDiWkK)fCiZ(+f;Xyc76xEgJ|odxA+ z&qllo@k+!i5V1=WT!!`~h}gXeE=Kzz#Oa6^B2Gh`iZ}%kyFkGtv?n4?Kpcm70peK1 zF^HoPMxX<7$EwH9-@or zAlir)qKRlAN<iJL;%A5-BYuSVA>#XpyAXFGzKgg6@g2ms z5#K_56Y&ki?TFhDw<2yq+>E#h@pZ)45H}*eiufYp8pNj&A47Z?aT(%$h>H;yA8Vo5K=Zit-_+aY4K`)8uv z5V0;I#;1>Q=x1UH#+#3E1;RTj9xy^Yj0f*GRpMbSdswp`)}x1Y=k3F_pCV!%c~~PJ zdfr3ddgw!M1O8?m;%dZIi0DIaDcW}<-hp^4;ylD_5Yc_rCpj{QQ zGGax<5E0v#i?IQp##B^bgt!uIij$bKoxc%}A|65f9r0Jh!-$6ve?#IF&* zMBInC7ZKa0^BUS~5FbTcig*X&&4||_V*NUJb#ltE1Z&DEMH@Zupl==Yp@aT$&;yR4 zeq-a2+jvwqMz#GmmgCjn|D{h(Ff@K~h|w7KQ%4x$6(hv+4SQorFGReCggwyihS(Lc z1hFGxF(O83h+YZ{umoc=M305dv7{Md6GZf3h}Y_{0hZK9%tNe;h%p&rOop|v1brUX zKpU@1VKuZd8bhp$5U);QsJ{O%mTl6)BjMrj`|xY{`oAZ9FMK=P3g7-;gjoSkfkNN% z@V@Xa(CE7fzWc{PrSIZ!3Vih+8J2|u!anfLzjN3=Yz# zx%v))V&9j+XOORN=l{ds`qRAMy`Lasz!&hPf0y^Bx5<0STMOU$9|3j0yCE~(eE7;g z8?pvm2>O1b;2ZzBUN5f;M#hGp3ZGrFh z&w~QsW7cx(UifN%3uG232MxfB;G6vzYbeYM>0_M@U+mjjEv?2@U8^R1udf0+fQI?E z`5Sz#{|534d<05>Z@{{ zSq9DoJ;2l98-1o((R3isz@PAi{yXDK<5S2b`3`)ae-$(VpD`Xc9)hp)cS5d#8$lKD z3gcpU_8)5ugKPtR;cI#)qtIw&G%@PIxAap$889$RBMrW!{{$Haz5s2&UGN=!6XZW! z3pocKfv@Oy%iH99d7YdM-}WyAeZWz&Or8s0_Papdfj018L-?+rBdf_uka<9dulm10 z#>=nt&-4%BoBlQ!@%e)OtiB4q!ru?s2W|zO&8y)X{0x1HegWhk7z|(FyTc5bb~;SU zhwtyT_3C=M9_p4J6MsMsf^Wq>@v(SMyd^e^mmv$m(yH>{DHAGC4u^mM35WP+G z7SWqTZxC%K+D5dMXbaJ1qD@4v6TL>Xk?2*TSBPFFdWmQQ(ThYc5UnSAo@gD>TB0>X z&k;RK^bFBzqNj2x`XI;qT7fT5iKOTm1qIcEkrjH%_q8vXdcmAq8o{B zAiAFDI-+Zdt|7XbXbw?1QJiQt(N#pVh^{2Mf@mhu62nnb4&+9pOjL=e zB2fjRkSHMXi98~g$RVW^bXP6L~jwjN%RKMcA{-WTZy(1Z6?}8 z^g7XNL>q}-C3=PEWuljeHW0l?^a9a(qUVX$5v?U!L-ZWcvqaAjttNV!=qaKniJl-@ zMf5n)V?>VS z5xl^N#pIQU@EQZ`nTVGoUWNz{zEFM%;ta%#5idfVj(8#BG{mWhQxGR3PC}fBH~|qJ zqhX)p5a9(0*kcjlB_G(M5l118M1&V7P(BlRRcCW1Ovhg8$fsz287o(fbc*J2(N7b;jtJHUfTe|!!aPdya8;D2oK6& z=Oe-^9I)Y`84zCK0K%g);F*Z<01b9iM0kt_yD=g>OoI&%(}3_W4G0g@fbcL4SPu~% zslh%25gx3;J{=JrufeX32oKp{*F=OzZLo6?;ei|MQxU5p!oxR|WFuxF!h<-JWFo@j zIN0fk@K6qR6~xMj@PG~_6%i{ShKK>8kLV$~hz_ESXd#-2@X`hLBN25(p-^bLh}pvN zzK+cki_-o@n|~LK{NEJ51exNWf-i~7!n?!UAP3-e@E!58@Iuh%9|h0-=Z3w)E-=!+ z4LtQX4C}xs|7u|+c;?q(g#RzW_mBzjGZ;OvBiIHi{V%}S{#C(>;QrvQ;8qyfe|2zW zFay3+ueYDEAGaTZapZSGR=XQPfBp&>MLyXcYY&6Gc70(Cc_+KjZe=&I>%j=}Q$T}0 zuuVG+#*hDG9k9Lt75ZH;dVG`hlC>7H+dTqf$M3dov*ugZfhNIa@MU^}HOeXjb;4fo zUAow616uSAVbpkzRn4jdIqq~AGyV%m1Ak?HW_}1G#`JMvB)4Rr+)@G%Xk>{s&~c`xbQRKZa4_ZyB47 zmm%NX(=bN-LE|3dcH?H_dKe*oIcU>QG)5ce!gkn^qssMEKA5#47Prx{t0_0EIw z+<(bm@WC=8( zvtV?2ebA{tRc6QvFt%KS{C7WtQvH4yS^mEMw!Q^2;5`rH${*90!_2We^jlygcsXQy zxJaL*kAZRE10f6E*^tYjEsO$htk>0RLLR&-y007JZ}A(5Iei0}@IDed#T(*vu|cd6 zPeL}l2gDMw2u5D)_TGhD2(Q7si08Z~yoVvj;$oN;G0(fko8?{NO@%oTBOo6_f3JsE z0y84cf;@}$AtS=6Fdw3VXL}lCTKpMiL+p1y0gcJG-7PQ|;(5r5@R+;Yy%%Oe+ydDa z%ONkqMKBLyj62jF2>BMzhFK78-Ii`+x2{_g=0H?|+z5vAxAPm!fcOS-E`9{r5#E6L z4;!2{&XbUJ@d23qu*kW|xz@SLxfJF;jE4*f=Q-y%Jz?fU5oBIG6LKV+4)Y!|or;bF zxflP0Sr6aYU)rDAAK35MTZ1XV1uz3;Fyxfz9&`@c!Tgh^L0(WBvPz`G>=P@9`G5F_ z{BL3I$;bYC{#*WL|7DnY@-$?Yc+kJcza8eCTn`y5FNfR`6JgfL`ThXEH{`7B0CP@S z_>KHC{L}m_m~rAkeu=-lU%el^uhXbIs8R1gquzl=y#tMU2O9MbH0m8_)H~3qcc4-4 zK%?G)M!f@#dIuWy4m9c=Xw*BK$m*JJ6_ipi%EYquzl=y#tMU2O9MbH0m8_)H~3qcc4-4K%?G) zM!f@#dIuWy4m9c=Xw*B^Xq6>+p5ltnULNu9Z646AW2}I+G#t~gWG?r)#(P*Mk zL?ekt5Dh09Ml_V@e4;X<^N5BJ4JH~yG>~Wj(YZwD5cMbON7R?74^eNTUPL{KdJuId z>PB=nQCFfaM5RO}M4gE`5p^W$KvYarMAV+B9Z?}sTcQG@Hbkw7&LYYuYDLtNs0C4T zqBDt_5j7=hLe!Y35m7^;21NCV@`&mY)g?NEs1DKTM7cz@iE0tmBsz^Kho}b8sYKO@ zP9e%B$|9;plu499lulHYs0vYKqDn*+i7F6E4%3MoM$B`Bl>g_NL>5)@K` zLP}6b2?{AeAtflJ1cj8KkP;M9f?o zwmc2S4PP3z41R^N{k?*U{tNy^ek+*$J|CXjLU=Bl=XP{HgxvLgoDBGed;@$Pj#*pb zS-TrNN3Vr1wFU4Dyb8Xt)`bbPkH}%NCgfhfS3d{7UoI0PMO|&bwnXcrRgUe9&5xZO z^U^+tKlz{hYgJB~=T^q?`g9;Vp*0K2`hc!oLfg)k2Yq>vunY?8l#|H0<@=!jaZKnc z&6ipu7D=qVs8X;PvWJw0tr~+;Zh>{HL%URO=1XWPbQc>Hd(3F75JqJVF z2Oz4X6qP4r%^MtdwCY4*AEe}_bVklNJttOo5T5yv=nP;lWlGJjT#1^)4389oTQC)7 z+P_NY#k6SaO7fsuS5VGE=E+hiTD@d9w3d7O%DvqXQJKASxl%C)H=ZDsqTB%6r*H#H zjkK1Z_mQ7>LqxgnPUWm=o_oAx4DTsf)-Kx7XXnb#x=Dp7PuH$IA#Q&Bj+9s7kdApZ zr(RC9k5Bu^PrFHl%BT6|O5PkM)}-+1i5|^{>EUvJUHM5<`3ZTHWy@1|w05#bTgvS{ z<@QoU)MoEc&cfx%$}Jjfe-f>amU3GUxvdlt723y?E8TKcF~^JfDtE$esA9@`{*##Y ziDH!OtO{~#54p7zk!y}6%~RAI{Hc@HTuZs7uiR3K$TgSHJWsBdAFQa$OrlQcx;Sh@mI@0``MRIK$MCFT?<*ag^ zQhkVA!Fn}vjg&9u$~E=n8j4|-I8Wh*>{M=ev{*jcMk=Iy4dn^x^CZ0*4Yof?4A+y7 z6v;>0AX2`DawUA8`r-n+`6q9#ERrkRNQLZ87D7MaYOSsbu&31Ce7HzH+(s%?-aM;Z zX{5t7A+>@LM^-|$TCR|CRjypoNUor`VrBFc4oy#XXlr>#UwKD2M83=_z4O$bfbCE2 ziPrM=KJxZ%h}>9N{5(Ztg*}lc{#8FVx+85qCRp_ zH$>&qR^_aVokB0?8Rxj0uYY#7>=rTwdN=UfvmztAX{~pq$0gQ+U)#_Gk-vK@WLB2_oO^lrp*s?Bpv2Y=4p~MGHB$yBu4B z$agyyNl$UNgWXWY{15MTW4g;RB~l^R9P6y7s5$skC#|^_a&#X#x&)DHE}^uZ+<>AT zomg|Dy30`|QlYB3*5yh;9cnI>{CQM!$8L5brJRr}M>dutsqU0`I`}?C-HGJ7Ya-7t zmFE{Bl3a2*%cm#HC2O$#iFF53(q$#GtO$|hlFJji>Pd3RY6t(5T8mYX=atCwiV#UI zxtt}}ljV}tA4#q+IL;y6V=i=;voL5>)kwj}m)Omq^b zYQJdjYENqOwTW6!t*KT8W)?pmE(&La10geDI*jChD|iyV;9ndJ)MDlnARCyaH-K@> z17P&>J^FR}cQD@hIrv6B6$Y-H2g5|#!cdDG7!|Fh(LX79qN>xa#o{a3tN{!Dj|f3EwSf4BRWInM0pw{&mw_PHIs zwXv6BCU`b{b^pq*;7&F^G`1Npz)XA3`3q*)f9|{sGwYvo9)=n9^PE{QlYWHLA7;>> z<2Q%D@tTSO|d#3gOvG?AAQB>O>`0UQ?lr6KH5JD0lEG2Y8LJfV> zAb}J}LKRp-2vR}tmgEMGF?Zg&rUMC zv%q`r_xtY`<@32^?wQ+nX70V`IN?P5G379vWPb+sKn(D9gtHD`x4B^F!!!DW`fd7E zu;1Zq&|z2w`U|Ik?!uvjUfyTjYu&#aR`i)%KAn&nwAIat81z&8>$xtJJ-dFee5%rRM%!Vf*$XMO^wwl#Y$9I z@*7>narT*oCD~I8gHyB1DhewKOG|=Nr%VdYC@)X$89TNhFL}^OV-vfJ`PPyv%CaX; zEX++FbIL1v#k``tqO>e~QhxHdQ(n=#k2uXbALaSE)64S9E1=lZrzQ_R&FhkSh?A`4 zmE{+gR^(4CPtH*85bm?ARO6E5G_lxP%GCU_iMgfIODgiqlG9J?s!o0}*IHKb)bjEf zxyj>CbwMBO81+jVD;L&O=d5e2Zb)7p9n_K}4z#RGtCjXb+rwR z$(v$?FYPD}GOo|Bsa{bH)+&;h#S$M%5l2Q{&hM}>cGMEfo1EtnyTS;{g`QqKRV*|4 zrkQ+Gy<&I!?COS+y5h=p3#*gMBK*@L{Kcx+fnA?G)hTwu>{chw=q!$k$~je9>q+8j z62-yM<2-2=Ym;Dh&6>(}4Z)==R@MYNeit1yBPyuF5?(T%P=7B&tO7A*#lfgPnwMWb zrJ{6dusm-{FndOJVNrHYQNDP+TkOmdOe)TvC2r!fre+rvPAW;d&g8q=PhWp#5!f`ejWhX1ntYk8 zBel(vwRQE?jZO8n!KAs#V3)QnVnyAeYF>>=%M-)_kugbiR)H(nkZhAdQ*dolO-*BU z{fecvm5ng_CRLu+RYB`!p5y8(Xs8qz$6)(8Jo(M`C3U@P@|ojaHO0MX@;zhn?KAlv zGx;7e`F5LpceVG4Vtb$cFO%P$XU``Ku|qOopjKU<|K-8_@e z)S9*mQ`}UOZ;Ht`$>hs{#j39KSTFX%xsN}fi`~F;sz)9jNir!*ryQ!j~ zY30iL>IN`N$ez@ymQ+_QXZBS(SF>N|s2Qc95}xev%FYXViBqC4z_{AF#^93b8o1ef zODT8}zhG``DQ!=Ub7EiAR<2p>nJbvh%h?dDt*foChF|dd%368~?L3bCwzXZ+083a< zA-puhQ^g7G;;PqH)igCMT^%m$P(JB~h4VC-r>bQbW|DX*Va`=mT+S+i~J zld?BF$qxQCqoopQ?RQ&X3(bDH~7PJ}Db4+9&1QF5;Nz zC(!cQH^;Pu(bt0VR z{z$n|S)_EA56YLz1+oe{$XguQa1Q$aq${LZQi`}+Tnak?zO&zAUu5rPd(_ro8!G%$ zxaU7v{^!?DY+=U1*f%%xr*^htQxpC&gkMbf0)??6*hju@f_&X5ME3P(Obas#7V{fv z6)oI^t#8UZ9P*86@{SC72Ye%~8rMRm!Ysa#F0uGRCSN>RzBm_=TW)A!7Q(E*Z$tW` zx~j?=ocb6whS#Gr<%JP|WG^h@`!=f$5cA)BC!=*8pL}7Vd|@skek^NY z7RR8v`dKcZ8r5ZdRF*Gr$XnCo3x>!S@CqYSV-^)w9bI94VR3|T=&wJ>91F;_LHAhfC>pX-n}rOD@}%iQ2d3mF)*C`4s+Au{FK z$#QKjBDFfRD`ws5kUnOsuPBsPs_7qhqXVMDO`AM6mvC+Vc~x2gnFp_Zi#5?2o~oAB(kUw&%xWF%>rbgp+rW z*}4xbgOXV?i>j=MuF47W^jY%sX^6OJH>o9TkIXzbv#Nyj7F9`;%>=n(rd%-%5f^82 zTgcj2x9COzNfDps4JqYdDr1_=P-GwIC$=zyV^F6SOL8D3x>*cCWpm}SX);4vk|X0| z7K^EdAo@&i$e1=$o;FQp$eLz!3$sfGBgvv^q8g^NJk=r3>L*VfDo=p~CpeZ`4 z!Ho2f3l=-BC8nh@`=sc)93zjakVh3G(nzwlG{!~}q_?O`>ULw~ta3T47?DO2Gc^Wd zz+xnUBB zy(yQ67bEh;ZDxBc=5JEO9M?%6=8(sx$-^?_VZ3FS!7->0i(VeEYMEZ;a<3wpAuev` zwUEs*i;W48KE_Y@7`bP;+_M-Fm$;X-giVh{Z^HvIyn+9_jR|s(a=Aw_BJ}`foXolh zz^!8SfbP@f?!_`g>H%b`%%TT?l#}!T|18;GEHk7Y5Vlzs-2)6kkv*VWx!kQ-X2?fp zfcF6FXHlaEv^|TaI^;fSa_SH{mG^-OG5f%n=sqw~j-M*W7b4PjpYc3>#5)KZosd5E z=o~4>mCA92h_q>B9G7HKs~{<6t&Ws^6|%1ok!p1;WhuH=4MFBw9VvTDWp5!O|AiU@ zBCLO*pw=SahjfSBF-_J7%Q}l3*D{*l-(pw|x2RIbpHm%w79!GqpHY0yBKE|*b z>G*f4i&nVpB&{$;**HttSd7S9p*6fOI=U4MLFQH%qcoQ*&BchU6-KtQ z{m#$|7W-<$kKXiNscdj4t!c`JfyxFJGo+PmaE4urT`hJkhLdW_+A+%7IAv{;vX+IV zwX!YEFt0~jHMie@Mq-tPE@h!3ua)*LTl`|(5OZjaP%2B5$^t|_v|7Vkn4^alh&i31 z70Xn(vYtHG-4JAM)Dg=35@mh? zBF>7f-FTx~JhunKO=Ao!Wu8M>l%~uZtjuGPX|1&1*`kTAUrc@|X3K6O5*tTZtsxt(ct8Sz+xm1~4 zh{&pLR4d!u4CBG#v_vrS_e3dlD5YsiVY*Vt;?i1aW3xrgZR0gJ%B75g&Q05vEjstM zn4Np1l2xi?6(UmS4sTkH?%W{ef9l*LOO=s@3PWlkwz(N9)}n>rRwrqp5f#daLWLo< z5Zmf(-9m<-$QBx2sthkw7_t@`)5`WeLkn5F=Crj?Tkjs`P{yPw!!nd%EHevV-nqmD*BSq(wbDLji;i#!>j-eAq6`qTTiIsi=-Ob< zWS4|n&@_Z>kkW;B0_5keT4~d=#Wxs`!JCH3X#Wky$SFwS69(J44BucZHm|F;aJMJ( z&PHO7GJr*;wbFiNi_)IYO6yTNdzH>GVbEq{izm?YElV4IAyZPy71;5`kh&x7Hn!-F zASq^d9HS)9Qj&`isXMYg$I%VI-s}uP=I%H~Nh(*8iV<1WWwo-6$Iu-usxG49IxC$V zO4oi$r%a_2uQ=LsY*BIN@%h35inU?B2yZQpe$G7aB=dz-sz`+jLz*vW^Kir$Sk~J> z%>OiBh^2~Hs4%1kqD{sY4FtD}*+3%|dxc^zM5G3y{l*qQhK3+>1C3N{rHZW(k8k;mS1)W$N7h zo0$iBY!a#krjDF%Ld*jJ4dg3P@fF16&!KM zU#H1O2FORSN4C)JV2je8#Y_99OMX+zYYA@wj_#3X#q5!p@*9Qn8@Y&hCTd9w?FF{z zks#)O>5=k*Lis>0A|0AKJLX7-TUpg=ru=%L{CX}TtJP60XYpD+*`q&5`^rxS*R9qE73g>oil|HCf)3i%75U4OD>WP7LW|yuN43 z_ZG_c<|5MTdp(JXehdRKr_+gJ9Zr?+DU|QYMWnV{#cyTNc5thhZI>zET_WF|i%4y^ zlJXqgc7`Bx+hxjk70P$zBC@s{*HQ-}pzTinJ*&!?Smiq%@_lLYokL`HiV(gw*YYe_ zv>vR9(;l*!L?G5%RcDL;&+ZnJA;1}UuxOrMDE$~{* zmq&2ERC8Qvj(uV)Tfb$`8Rp^3o->Yw`-s)>?W1N-P_suNvbD|8t!yzDYTfe9&REc< z0iy;SYF?Te7_0_@4OQ@FM=QA&xjoEto9R+B#k|(=Qf>6WI2?Oms2PQ7MlK>>@oi=6 zu&mJLfx!w5VoqmZ#CrKw2N$Y?a}imsjBRCWwoofppOT>9{9t(7rzADqp$<(`(=*j{ zUN3yz*6O3g$Gl#;xzujZinMBL(TX333uN7jsT0)HQ7S{0->g=)d<*%tcxGf7!u*EY zu&YDuo~Cvkq;}dsXe@}AAsaZlB=!#}U8%c1(xRM%kD#cCz1l`rC2z16)J@m2?hT)=ocB7dvn ztF~5eb#KC5*rojcv{qV~wW#_xS=Ga33Rrc|Zna)`WzX4fhU?7KO>B_Tg|`93nLg0U zR$igrE!Gr4M)XY2MEFnyAkOhQt$h8}YH{8W!Lng`F$@N+qb0f zt6?~~7n0+*BwC)esIphEw<l-6^8tWww0~PvhfrBLu&}a zzF>SF8>1XASB@7WvL+ba%9dqg4Gd%5h^7nWdx!E%n)3Z%<$K-$v?goO0MGIU_{61r zBImWzimSyZsb^zO7h{w|<;tOAM7~1UN=vR0Q$A})5c9uG7s|)w%E!fs)X=mjYthhf zt5^;F(RAgbVuc|!G+UQtX$eZ$ z3qynPw%|~1)s$N~@_jz7;WgIiaSn-jm76*}d}+Pag)#u?H#xj`8g=fOWgxmPnFt?> z0K{4x-5OptHH%=6#D)l}MN;f`Qubwg~8`1S-h=^5BS*;n682Xvz(=|;6 z5!K{@YQpE0!Ti1!)pR$X2(EG|SHT>bPWg*|Ub)+{nrIFkp=>Wvwih7M03F07SqxB+ z6kS<{pexIjD+?5cG(ZPZmdrhzbuB}Xd4P^kwv{N`3J_Tb%W53}B2KH~Iw@B;lxxzI zD+Vc7@QUlt?`~0XxABTQ&!wCP71xh)8C`L(Vr?-FjVG&3<;tdFg&|g)Q|@XTX@A(J zc)+sT=j!{QQU6)>G4(#M>2{rZ1?bY>pf;(?!J6Al(Dj$Aj#3A!X<)}KPE|mE{!hx+ z$|qpK?PcXDV9Ma#0Qwsa^hxB{EqQKSqC3=f~mcCM73>w1r@Er3T z@q7SU*`M<~4kzvJ@LccN2Kv~WLBC;*XQ5}7rvx;ykB0O1y**t#@g5a)u-~HHq+JbG z@mjRAz#73~be)nGc!}h1_FWcX-e`5d1 z{?;&#bPm6yidGcyw1H#yaIF&?9(1{UF52DO%=}o3- zu;>X^=e!OFX#4*``bzp3^e?<9JqddL@0M)~6@GO!&u!&wB{zWxs1Z2soB%&{3X?{9J~a&7@5C=FncBnZYq zrZ}>-dz4jJ+9Yk9Hq_n2ouu{Cx`CYr7ifq46}}oR zanE;GfStsEdxU!+*dz2gWzeqwqjpp~%IZ<+q)OgFQHVH@uHOyUiLlF+VYt!_7q#l@N>_g) ztgqqfZMb?Ft{#TVZ@5wo7qtw?OEJQd3|FGzN-$jUhRerYXEi2xxNA*)BDE^G&JKqq z+-$gZ8m^9pD=e?U{TL5hU8NTruE~b0z;K1@zDn1OFryU`Z=$fuM5AvcTp12aFj~e# zJ$7}a=ZkQxYnb60!d-PuiQj5(3&)vGAJ|?|Af#G`BaJ^}`UNu}V z8m?yy*FM9=YlGe6AtP+J;kqmA5;qwxK7JvE{jYGCosVP|#>WS9{bg? z+Ro%!QJLW2VYPLg@8quf>dsV?;JU&HyUcK1V7Rszu8`qsFn-#y+^H*MW;hd~IC^s-YE4346E{aP=qG@}$M&s!Y7aaNTIQC@(826B~^%n(H8} zHXN34o#EPHxUMl=R~fEthKuS7+LGolaJh_FK4vOw)^wzP0InGr3t=62U4ct~kB6OE zBR*}o_H$QNy;yFz$_&>u!!;FML6{@{MiU@3+;2P(T)!Hw);i3r|uKUIaJIY;a z>QiXgHmpnejE8}X562+54!eFA5`vYrl__svEOWhXxSljzdkq&2Gq{d7Axm+;5xbka zs#c|(Z@4xZE~6W#oQq+>)s-pqQw*+ZBdp4B1r66c!*vF^s*-ur1Y!E2l7ovTEO7DZ zhs9FK!F8CY1=lC!s!gKGud7We;bFB+N#hL{A8^6irbOya;HnA7CR}Z}E;n3G!=;d` zE|Dg87=$#rgNr&UD8S)U5=<+}cAjE&RkDq{8kZ!|&tFq*5)I|mRY~+i2(f&^g0xBh z45v-{nOv1gUmLDNhU+cE^@8Dg)NtKqxG2x7E0cD@JAZ1ha%E)_&oguJk~0@CdF7%- zNf%>U=DLu(YAciK3>TkjpuZ$7H^M3n7jJ16JJ$%CW4LCaE7;VKRBX74xT|h;QZ9Ej zu1m`1uKMbv3Eb7tlr)B1)jC}VkAmUYYP~IXlyO}Gxhi#GNJK3-q# zXmfoMzRvLxxq=;g8m=COtDE6U<*rpt9ey%g9~-Wxxoc&8;`4^M} zb{@Hc9lIK?E`}@Fa3zIZw!Yj|*VL)ha8dt*uqj4Zq2ZcnxTvqeb<~33nqb6ITS6H1 zKX7FkvHYhUX0A>{jj&9^m0`H-hKqhRU|#zx9G3W};i4G?Vrkw07yYJy>u2M-9}O3^ z2gH7FgdKCrJ8doESPAUd3GxZ~xO^0BsUK8kfyMO#uyvOOy7u}iez3Rh(-vs6w5ebj zJ^(iPGPJ&$UrPeJ@G4m3JE0y|kE(~kD*OSk$G1=2tL|3s0GsevgN1-CYO}glT?rQ9 z7l19kscL~5(D#Bpz&rGv@b@U|DUJXR4>b6Yylg`+Q%I z-;?C=c~pn*R|Vq2fQU;?b_o-YpScj6>w#NZMwcLzbnb*bE)tZp zqzbUvmnV&thDig#ZhRN8*yolc@elE5u)1&r?Df4Zz9K#&J}&MN?*VIlJH&0?6W-(A zqu#^t-Q@sSc-#jzA9jn2q$AQt(%WFE{u!_lxJSB2x<%RncIqzz3xVfIjZ%%YNSf=t z!@JXaHCTb%0;fdQdRKavIOc*T%_1=9ITnm=4g|xPUBGyy+aXDRfaSq&;S0_z?^JJr zI9IF?i{LcKF2`+->mA!cJ7mbQ-m%(I>sag!!1tXDG0$<#@ulOC<6XyVVDIn=Z(pz_ zndJ3}W93viQPyP{tRnv6RlS0KLLLtm6Vv71`f>fJJVP##C+dgwgJ4y0u{>Wt0Qx0Y z>o3S5eV=@Zyj{&wGt|Cd?J-I9sVeMGIiVZ}TaSm8gUSKr1!bSI7c4#Aq3l$yR<?Faobg zu%hetjVJC)>>+j%E1bQ5C!R+? z&m}&acpdQ?;wIvH;yU6L#LJ175}!%Dh`5qCNc=MK3&hV6KSR8qcpvc-#E%m{M*Jx8 zBgA`&A0~c?_(9@5#19bPNBnQ%e-Zyi{44R##6J)pBmM{RQQ|L%KPUc__!Hufh(GlD zxy#p!xF>Nqyc_wu5_cv}BJN1sfjExXOFWEt2yrHH25~y^K;r(y6N&SQ^N4eabBF`P z#l%I#Q-~)Mml01Ro=QwT+BcK@(}}5v_-I7aUq!r)_%h;4i7zI;keJ54kH)@_#=h@7ir+}Qf%shFvx(OcuOV(C zZXjMoOml&c<^tbx9*Xg!|%al}4io!CR{CUz0qhy~7` zzli@N{)6~;VjAn76Xd5c@A-xN|0MpI_$T5YiGLtIPW(MF%@LmO$p0jx;4ddcr0b`fjD3bBJ&B(@WW`y=&3{og!Xr{5Z# z`kzkyK&O77Q$NtDAL!H%bm|8>^#h&yfll+1PW?fr`AMgKq0>C2Q~%JZf9TXd^p7cD zG;irNuj(IA`1{1~5x+zH7V#UzuM@vY{1WlA#Pr*)({H-|D1|>nd_VCn;=71%Bfg3F zdg5z|uOPmR_)_9ah%Y9-koW@PEySCNL&UAbYl+touO@CHZX|9Xt|wkaypp(%xR!Vs z@lxU?#Agy$6IT&0Bwj!qB%V(^k9aQe8N_plXA{#rpwA>f%>(*$^3yz^my@670eu?z zONon#Clk~7*GH0nIPoyzA;cNPgNX+b(|FctJnQ`_oW`}@m;Akn(}?K_N~dwI_u%0^ zsy|;P`Kdm9R6ZY-&qw9)mC$vC#8e*NB=V0X9!;D@Jc76nG3C!k`SUp_oaO}|%?DnZ z54<1ncrT4F??Lj@IP<$> zFKpM_R@=r3Kfz7^qrZtEI?x@x#Y0Rz$rg_cEu~mX$w9;|9uq_CSU1~)W!^jiTRhqX znKm)e=7|g~xj;+KL1Y^}MuylCZ`kNzap)g*b2L;{)-I;~r0}UkOHI>~25LzxCM`sV zzN7bfh)KB5Lvw&>LPuVRj&w)wCxz=`ovq2xqykOKLBySMXNJNDx|<^Rd@(V!Q?8ul zm+c{6QP~)501E-2iFRdWedUUVVBc6L2sE)k6LS#xKAaFc_iecml-()jKAa5AUaZ-3 z5UG*q5V%Dn8G@`E$yT7*ax{jx-7CaSi9;hNnz~5S{Ce$SiF45);DpYn9o7>eqSd*W(fKeBH!Q_+WQ*-vmj#{;VY( z%~Ow#R~hoYNyob_`ep<6OxU$w3nzl?oz<^A>bL#WuQJrHSWH@oAMLg{#vyvKZ>sOQ z)OV%45I@IlVWtVLi`6%WsP9Zx-^oM7!;4EpbjZ8&x~RShVoZIr;Xmx1>f4jmxAPFG zcEbn7qiYxL6}xtasBcYH-^xQ|wL3b*PK!gQvfL(1)ob)B^-WDZn5MotSbZ}HHJlb= zr^I25SoA6vui&R$>eJAx=s>tduX2TJ#;Py$R`-ur_h%texvh_kvl$O0#V&Vm^{Mgd zQ(1_t+`~ic#5j~Y+2TYj7Mtcfb)Tj_o2KsTukPc0iVlcd6j|m)zR#uJ2Yrg20%ucm z)Xrd0j@hR&)ZGQ@?i@tyQ)hH8uQ2(BTNHrTiQy$%;;7+k? zHbdQ2pzg{+WHp-=VyDWXW-WJH@*ZWJ+PPO#A4pU09i-mN`cqbjpAxq?wIfRAQ#+b^ zqes1wBc9p`@pIu8r*=fa1=kt>j|;Km-_SDA=L|(5`kW!8^I>X0ZW}j52f!mX_OmGx z((@)Ub!HpL@S+Srtn7kN_;C0r(^SE_G02Fl?Dhw8jBi{n`>ES9)or{s=ty{U z&#?a*T^oJWO#yY&C`8;-p4ZCGgIkVymOjS$;Xdld3F^jCh&bjawbIdWi%JDCu`9KY z+B`vR9)(DiYJEtYZ2<;Ju`9KYx?zI4VH6^()G@8>j5t)PmC6L8R@;6i);rYJG>a)MepN@Yk@%8q?U zHx8>(kaV&tT`)miFiK^}s&rHa&!T_;UZ278 zlf0Ki9{IQV)Y+5N+1ZGAz%9_ajNilJ7zNye*K~VD4Uo-QMe3|9LJ|-iky}k@}Mu9pb8Gy3D(h%!ut7s*m-`tYX_{Hx4^o2 zjcX39m=AU(x+Le1utI(SR>ybS4modfZgYm5YhYD;wsW#`3|Q~$>eRKrU>*EZ?M>}z zZI5=Vwq4r{Yq3kgcHb0jtTsqX)x5A5;Rp3I^)2-o^+EME^(xqXuufg3o}m`0|J}lpmGPmA92=m4}quVfFWXaF)r(;xN@H+gT~qBMvKscwN#ZJF$0ck%Nt_*x zSw-G2uG}Z~vsYD5C}rlJhbOUBHBg8%|=@!=7_ji z?F22YWhFl=SXH?)SQYG0iKb2X_2H<6VC{~gtJ{eSM|U{0-OYI*ugJIx(|v+q{pL)v zCYA_xFpRP+t!*FGu`Xs*hijO@I;sI9mG_uALHkzxXY8m2F{2VLjU8n(=YR@YhNjr4 z)|k<`4(~>VJkBir@w^X#ZE}s7yrU(~vJUU~YK(A?b$G&twoDI!ZE4kTkIF@LwKeO4 z@tN(DKvekF71rS$UyKp1S%)W_-PQr%)^!a=*=EFu==gH12v>}VgmZOJmjcySRa3sQ zy2{zZ>`gR#HIrBS!|Xj~_I_&izHRnCZT3E3_TFmtUSsxNZuXvU_O3H~SD3v)vv-== zn`icpG<$oSz2?f%K#fPcnpDk|qyB7;{nqR~+w83~dl#C$)6L#VX76aTcaYiJ#q4#P zyvmJI_I_>lzG3!0Z}vW6_TF#y-e&f0 zH+#33z2}&{^=7ZRt{mpNa+sUjG0~jX++!W-=2-KLd^xXx_VT&W*{@%rk{^|&SWrTlzgnx2`f0EfR{1o9o9^rpI!q08n=7#exP`@?&SLtGRXzQ?l zzS(;Qvm*?#Vs6+mfgHBpVMouf!%hz2_pswvW~?rlTUk>B78e)S*R2RHZmO+nTng`q zRW)F(Hkj1Fvs+dH=700@gPsp?xWafuzvm+~l8fH#vXa7*Nx@<;(F?Y=#Rt)-EsL36 zo*%XyJTbetuxNI0YC&m9elUCLRPk>-1D01!$_82D4rXaPXe}pffS5_T?liBv7GE(? zUJ2wZPrSk?!t@d_YMx(GQIKC=I0wplgm+MuIa7@1OMLccGRiB;pwM{ryS#I@5A+x%e)#wTM;AjhhGCU8E0Y>;D1a6R!Vns#npUfK&7?&*z@oJ@Y*s z-7mXucGtScxPEor=UNKd|Newi{O34_Yd>i(YZq!Inp-`h-lVQj2g6(S9%X})4R6mM zzzObZxx3>-cr%{v@JTOAA!)kQOZ-WELcADugb%R)0w?A#v`@FE*gmoCv{l;tkb(bi z{>F#6N;})|NbUNvU&Kl&n4MErm^U@MBDa7Uwsr^?^$;%d2p9Q)7Dm;MtJ6fhT3E z?@mAIxmo9W&P_d+B^?@K>h2(E9}nHsX1;57QBi4bc13BKV@>BZo;As9cq*>C?le+0 zWi)x3lABnnAt9!-4(^o}<6dA*97>m4;aHWv%CjnI6;H&p)tyeFx|BLkT@rj#t8YvX zF~xO|2rM;3*Cjo@Xv`s+n$>1e%OOlrG1WaAssS+&izBq1i z(qfiiNQfz?i&c(xrqUgiJt{qwNtMA$mMyM~&bl0wNSl)~CvHyC9G-xwpNo~PaDrKb zXT{A*n#B_^J#?o^Fr)j7xEV<^Sc04oQ#S_*@~x_NI-B8GGnSU+2Xl+E;rAyz6KeVC z`EmIJ^Mg%H2-7zA-w4Sq&W+0*n9GGQO>-v|l2=&HW{Sw1j7uLEH*VlKE`;lvJ4tb3 z2pKVPOx%cpBbbo!A*OQN$uB$PF=NbRb|- z%u3ClRZ*55j24qRAk~xFFO^Bj4l!MHASE}Zl*shKVZ$+ zF*7kPaX=!Ikse|y=2V;5)1yIUz?mL3Tpc|m!M?hx9-h6IuBc95;!JchUs{M%$$2`m zr3E8_=5dJm&ee5G7tPf|K`k^kMEc@7MSoGRU(vV%t-!W@Krhfjm0D z>5J=Z*0IDEwsV}p@jl}(LnSeo`3Zrz}@&d^$CYppDHbSSJP&YWSk ziXMo}aFy0lr?o6aWceKvBK>d{w?4Bv`qnM0w3ZoK%WSQM#SRIPf;fxPj(5TXE|zwY zcHT1Wyd{WG+6f`1Ee=ZCHM+Emp+IcmC9=fl)oAC<(9WBuoyV?73z4EYi=HqRdqPm# zv{2hLA;h%2#kdn#Bwqqg(2;lAv`E`DL)$b@+q4+27##|$cZ;su(UEn#P}^9mZCrxL z>ULa+6uTu`6m)4#b!}bb%{Q*pHqOvCo}q1A4Do3p((GnY%q%Kq^Fpn8LWn7Gi&0Ey zCaVfk1*Etz<)s+zinYKyM1 zzFJ#9Lt8&zTfZ1C$q$h_x1Q$KWp$PTbq0l<3hOdU*P81sNn4Yyt?7jbmA14dH$*z! zx|`*&;R|x|meyBSHP+RyixjhZkhZ#)#xS^ODa`7m+$~~3oE50Cdd14x$`vS}f4hk! zUTe~|wSKLsx7Nh2$p|qmZ%`?nBcE&?-ART=Ta}`%NWv?{$^-d|! zrsQZ0X%{Qg;0CMn7F&%$QuLa!A!u^3HaSOQNV`}`pIh|K36`bU%lsKyVS!edgNV!g zA*S#R>e_0VKfH^TwkvglGum27npTjm74TiGeR*jt>aQoSzu_)zIBYiV!>^0z6Rd~! zj9$*CG7r&)P1c6xA>wA^rJ>#=CVE3Bh%qhd|EC)|wV{)>p?QeZP-*;L77YdWirG*@ zv>~P1kUT_cs9uz5bKha3$`E84QbzGJCu^B`8bjRk6Y2?qprNex{1^>o?D>I%^xDWY zEh9tA;7!$oXTzeYQh8H#acNzkt9Q4|E^8{-3mA;$2lAuTvqXjlqf%p#ldGLHO`up1-bTLk?18Ni=} zH(|-}4gnShe=H;2(bdd7=tl4}Wbrn^7ijh~SF<482ws~s4MHKnFBHt` z9msEI{d@!hCsxw3E5vFThF;VeqH+LTU$gb_@207x;WCyVwqSfIqtpfT!?b zFoXu6@DPkw`yrbDK^o()K+ycmgOZ>?c9s;II#1Xr*aOYv^8=$82(Sx%1$Hyz&(GuR zZ~`5heJ5~eXLoGFmUdrZh>wh81ecA=m)vuV{355n60;RwT0vcLdzU|)c_pc|S0)IhkYFg?f* zfOO`jk=u4Ti}1r-)%Mr!mH`N5|M;IDC15roAV8sgd4Qk1K+VjFWs;r=3xmw^KdMg_ zZfl|D-$HSMpH~(8P4sVKf$@Fm5+QtB2n>Y7P-e3L8c@Qwp_@Z`{PS~SsM-XF;DhU$ zDGYu@C@*xe5l#*y6b$!CjzN`fqAicZdsPY-N%%&orhfk)5)d<>{_3V z^&Aqxa>XVnY&R;OAABr`dGW`_5AvH?VE8_mm|x9;SaUnDd`uAg!wc~0KmY@br0jP5 zk4Mlfhd~(>!; z(@t?14zM*`y?!AeP`Ne1@As2vc4JBccY{Aaq6M_wgGEwa@w#S2jOR}D!xV27tdfJ2oEWy_p610}Sy`0u11FcB@R#RYX)2Ui@%W zfO;F&M}W<2P_&vEk*z)q8s|*8kl`y)@}bA0l!A! zKc2sUt(gLd4+{YZfDUaJ763?o$Q4ZAkTFTfw$nv$1?80HU&tJj2iLL)M(AqstHMqn zA00eQaGfW!D4TyF^df&VhO#Vg-P*h;DbBG8oVM=p47)d=t_8OP{#%k&Ipm2I;PE>{ z_AA9{MR8g15D3Gp!`AaNnnek${z&qcz*Zscv&%Pv7`VOackI7ow z+zrqPc-AU3g2^Y*R{{R2}{~Gu&YJh#W%@g(upy6$*H&K68ze1m__W;fLFMI9=4f%uI z$J~E+H@QpP39j#4uez>)T>$CMpPY|4FLhQpleJH@2SH2z1kDaR?k`j4s=btdz`pu( zl^msu{Hgqy+$_(L`#DZH_Bd8LMoNE4pMZ9`rBXWV1$bOsA^Pp_*|*p;Y~R`Lvdy#g z2Wx=)|MMbbZl+H+o&lzH9-BuNZ*;CWluQc$1@AT5l?{1rK z&)6LPHe;S z-8R>0TiDq)cc5)9yEw4fkHT!DB0sl=m-2I_7Z&9O+ijQ8Y=!-7g>kmR-nK%vf*sh* zG#|j{*Z)Msq<*$ZakfdlZIhUY>6^LE16!38&%%~7+Lq(7<&3oDfQs=IMVpyM1jyPnE4gd|IC_JTsifnE*~Z1$#tpHJW7(Xz znJG>Haj>9_O9O2+Py0Ti#o%{IBRH%B zR<2ySxN^nPnsw<*G~2-Lwt*}xYctn~VB^W!_sZ~|nC$Xk?yOmvBPE+Z)#i8G{K+;y zyJOa7rVs%Na5_m-Q*EhkTWYc`l_zC75>7K|N~$fzZA(eErSPOoDZ*(cO-i*Txot_w zwj`Fc>t?0~0S3C)!>Wh<;Rw{cvUr7a?b_j+nX&^A-7{wM;{Gv*ExxBM-eZgJWQ%8V zM{H)w42Wr_i%kc8?ZNELOx*z_gjN0Mgsh)WoL-X4 z#!WeFd6+i6uq;1MvuXWpS{&Hrv}x?-*_)Xfga1^9(%+`U*_1vug~>?Y%rzL;I$GqT zWO`ANCY&Sk*Atj$a{0f@EiQRNlc6@|IM?DF#bvI>vz{dD2`j>7jn1Tf0iSlM$kQ$_%7 zYjJ}M+TDPu9yrY#d^bt>uA}f>58*q01JXudaf2=GZorfcoYoCA;b@LBOQe!LD;=HWHZ+mVC!a`5VjkzM4$H;KG%fL z}dP;hUM307#f-bvKp}HjuF$i^5^Q za99%#CkTgGx*?mH&HzYfnaheY=;+xM`NAjNgikc#lQ`j%U}Jq##%87{01|b!x>55JLy(e6U+hd+Z@7&U4;)j2p@J4 zK4g)jHw%K;rki2=B)W?{^m7XNj{yTor)Yp}XnUwhpp*t|wTrt`YWv z!(wW+-_}KVv5)X#8lpYexGpQiwE(CQhoLnXALr^pzG0o^+i%l_7n6k-J0J!@T%Qm> z_8+abK^D((IfNJc3NLaT8RF;q?a}j;U4;$DZ5!j^`Xu2cxA0OY;U!jOSs{L`->PKm zPE|5~qTi}y>rPcNev03!WNRZz#!l&j28aKmWb9bJ-DXv?rc;${HBV~MW=*Fm89$D1 zRkFs2lCk6V|4qrdhWPnXQw3`!fwB?+av5w6?XIF?6~`XkbGCVu*)OtN)>joq+T|;y--Qp4HOccvcoS#zc?cIdi zCZq|gG6NQ_DYpUu-hN^i=%kGy8PeyDv zXvOq0D9R1pgd5_78@dWNz^V7ziJ?V2Wz463o;tU*tSmpbBFHvf7nNq`m21Lv>B4n! z!gT|M>v-m?PCE-bdI>w?gdJUl9V`peLkoFI%l9MxTggrb1gB1i&8)a1zp!FQ}hH~2Mzvq&?xu|=|2dutu+LZE$?=T!i~ybf z{XM-rsi0#Z-sASjpx6I*u*7!^v<-ab{s^q`9dN(oe#ZR-=pDG0{Fb;Df_B6ip!^O|phH2?w$)ShVMN0%*4o*!{{{(9eKdRrVUxGb{57f8S*VGr({p#cD zLtxY4F7+1mda&wnxq6Wr0=o`psf}ta=zv@ZUw&qQZHLKfo;n^h?+;N2s=Z<5DMd|C zb$I2nD}N}zfd2h&lq1R^(7^wu@`~~t=-_`8&W!8=E&MkrJCyC9hyMblMOhD;`0JG# zWwEkAnWI!FC18glM;WV(08148m0n6J*rJG6+=>kLDt?!LmXCqOiqGVa`JjF2*<{$RHuRZ5cLB{$epnBkb}m<$#b#yhecL%^m&Z-?KJ0#+4thw89{U4>ty zKV#PAlvw&3g%0 zY}n*I$GaMAHZ1cl^3Dgl3}s+jb0Sz@80{Sf_BH!@dw9DzMAaTY1aT!|En*GgGQ=f_ zixC$gE<{{_I3IB?;vB?Th%*o?5X%s!B99zc8z@fF0E5MM-m0r7dn=MbMod+qEPbII`mU;Wd2_(-33MSKhK0OG5NIF5YJqZ`MI?M!XU62E^+Sadh~uLN|^J-(~2&6!Buj3lYyp+>F?Ycpl|V&-=>JjeXuX4c*x1 zeWmEeKJP0=cM;+g#L0+-hy{p~5GNw$BjzFIBIY0l5XU2qMI4Qog*XCn7~&AbOvDVt zbi{#({So^j_Cf58n1d_YiS(c;7+y+lX%< zzJ~ZR;tPn+A>v5!?nn1N#3v9RM|=$NQN%|O_aZ)w_z>cQhC5RUy;yChdMt3XXd5F!3ID))qqkA3V z8pI|<{7v!V*zw}n@h-=396R1K(Y*)}M~xRpjTc9a7k@##XJG6c#My|m5N9IJK%9

V@jb+M5Z^+41MzjlR}o)E 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%0A0RqFjrS0} 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 z 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

I6KN19 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 literal 0 HcmV?d00001 diff --git a/.vs/MineSweeper/v17/ipch/AutoPCH/26d7c07a6d50e7f3/OPT.ipch b/.vs/MineSweeper/v17/ipch/AutoPCH/26d7c07a6d50e7f3/OPT.ipch new file mode 100644 index 0000000000000000000000000000000000000000..ef9bd9605a9803b03fe39632343a60f98f43a17b GIT binary patch literal 655360 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 z3JKQDnHf+B@uYjgWgr!4s?4gZ%OE_Sk*GV(~U8X;-H@--6c=E$xTqo5g z<=I1Vt`Fg%v`;Q6m%QKoAN0Kzr=NBEWlv{YaHm&Su^)XpKlINn>v0h=pTmF78Z+YF99Mf*_ z!)f;$R-dJPxuzu$MM`m2AsNDSl3yoIA`4jhjP8Jf2kL?+54Z_b<2#oy!V`X z6rB_tf86UXYu{vh+l?u^WLe_Gv?Jwm!+4+5hz8y=NB-k*VVaDmDD{#2SO)v&cJB5~ z{N3dj+4A2D-uRG%BrR{*Zoq_bo>DiotL!+QpNoq&4wsMXN5ZfL0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X 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 literal 0 HcmV?d00001 diff --git a/.vs/MineSweeper/v17/ipch/AutoPCH/d788c3f2519d5322/RUN_APP.ipch b/.vs/MineSweeper/v17/ipch/AutoPCH/d788c3f2519d5322/RUN_APP.ipch new file mode 100644 index 0000000000000000000000000000000000000000..6d4e6af05b2708cc0f98d0e1c1f10f2fe5fdc246 GIT binary patch literal 2490368 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�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

J%>V6Z)@bFf|HKjwV`@d?BykT}KdVmUI~wx5SZ zbH4WXseh&uTPr=kY|ihHoYmhdxqU+N_8w-HJnU4Bu=-skXNZB-?<)PfV63CQUA5U_ z8P@NgQy){m&&$Ups%yjAW-Z6DNn?Te6T1L&E+$SX{-|;dcT(N%jWU{FBj@W-!buRt-5K`oP4rc*=ViW{ts!akpHyz z3B)H5pTO%qvW~WPZ8|dBwx5SZ`|?2GpXtQbSxnmwaL0?>hYcRRsXWEzB!P?4@V{I!aznmO%-u9A3*L~fYb$$ zx&TraJ|iq!7wjrl;*PMl@|^DH>Aa{5oFfenRW7yuQ=048fv~m0^ULPau?G51i*I#d z>8AX;uszU&KVMXA2R*VjV4t-CxXdH#I`(NdLU!bz^?fdZKHA_Gw~OTnStyQ`@vT;!kWW^t8m;RNMn3(X_X#8pAU=Vt>p<3Z z)~-!QX504juxPCsIg`fBbYg3#=a)mh&W$iZ_|veums^2Jmb(l6!%*zNbJb?j5? zz^jD6FDzT@hJuS&|J4>Vb?pg{Pcrbtbn;uW+rFWCp*kp2Ehl6P9}M9^NURuLx2bmj z1MAmJtlO}@wqc`wtZn1E)o&hKTYKB;chugzw)VjKO{?!;dtL1o{i@r#5&aO{1Dn>Z ze@hMdM+*_Btk_pQ|3&JXq_>J|$f_4lllbFio(|VNx1UL#U4=O@$gXh6n5@XX!J_o_B??&xfCR&U1qBSw}u<}7a>wsXa|s^e>RzBQRC zIRV;xS?9c5`>>XpxAmXu7ad0o%TS}ajx}zqhqVJfPhP0L{)=_awcp6Mcpg6N>vpJ% zI9%}jvY+Xi)SAlX;c=}~ra$zIIb+)!tiiAw&mVdF<~Oo!T07Ysen__S)@=vo(e|!| zo%KDz+7!R=X_tJmbwT@N{<>{I$0G|h8;=h8!!-kI$z4yLy_U4k%?-<^3uoG$%~ogi z;y)+n(Wi^GH|7-0;Vq9#V`kcj-678}o5L+ycQ=#6eUfh`4>wD`nVca8^U=R&n3tM0D_d*TfL7Yd``O_(Q zl>8x1aoo$CI`U1fFv^&F#2!l=bCy~U+qpM0meSm6GD~uTGu1vn>(HN5l(W{M@IxXd z38i;ztOgnO`x=!VYcg|Vqj{3Gb}Y#{6yI9ac6rgww7_BnDY;D3cj>)&SM)jx^eK>d#jDYQF{+bJ=SFA#zylJYqnUD^$flp zf7<_B>zS^nU+k;PBhN2;PvV&5Y|h-QHAUWfW_w^CyYXC+w{LMqc0}*p+I)Mgz_Nwo^{VJn=gkY*G#^&>OJ~q`kZr^kN%mEAM`!Hdwo)U$nW6p^PeBU2GneRqoe9N zEB#1b`c|FgCwhxe(Ht3nW_FJ3@%*yu@I|_3O^)z+&|MlsuBPaR7#jJ1Iv}XFuQ%h)>S*`P9C5<$regeB{%=c%MMd7sMy<7LWZN<9LYO!g~my5k5iO z3+B0@ZSpDanXs)oheRsr$FF;zKx~5e1QMsXJ(RWWB3Lwsmt2|pXL>o$G0!iX!+RxX zpJ%R;!)GLKpJ%R;huxZ!?DNc3a)ub#GhtQw_oQ;-Oi&NQ&qM!{`k2o{w`mStuGg@( z`5cy@rT;md_10iK!*f*f^Uz0vd@~h>^sD&*^4t-~XOTfZ4-N8p=zkTK{XFzkP1o!? zALa+nN6@f#(UwI;^Y)D57t3>gyJl^b)b|Yj5uI{Wa3iQzie?)w%)d%HMUafA|@yJ5RU*dfN@ALck#6Hh? z#O-1^LKcc+WqhmEZSTpi)w?5~9`Ahui35mFAkTS#Jm+EU+H_>LZ9fl-=GVZp)0mk~ zY}Gx#Y`B+m87}hq| z34)fzi#zL^GsbG!?!<=k*|aa8|E3+PMaJ2{vCa@^<`K4_Y7@B z&bAQyI=eN^E8}PRfSt_Wzw`ZKvSzE%@84PO+VPDr{QbKX@2l|pcgllv$|YWds+dZ0HvYq#Nw>|T08((6-;hAr27on^?KrSA$Nn(q52Q5n6LQyGcU|q;+QjI_ z4G-$4=&r53OAp!(jjh`>QM2EJyFvWLwYP6rH=^dnwV|Q6uh}>;w0hH~wE`WyX=1fD z)@>SEzhPo%~+<6cXkchBEDU>cmGWOb^DS)5B@w`>v`^Hg50MA zSsQ|^kHJ?5?b>vNZ0n0V>(kMB!tWB_uG^>NQ{Hv^k;td#$R<94Z}5mu>~rrhZWqfD zws**O94q+y#JB7Aqw*>5`x#d0_(W@xBQ@_6NSr`?0=dTu_Isq=2-^^`O16@}#oS1Nt{4zg7^dyr?_1#M`qjh^RQ^n@3?OEIieR^$2`Am&bMp6v3m(s za(htnb}yky9&VGo-AkyFGn~KOW3AG^$CMMbV0?x5BCb{+bB}dgYx2E%4QrcgJ3-6A zC7t!9fgC(XCGW9zXY{A3qF>DikbA5k_Xa@jv4U3#pC=5j1LOS5x)%}DYH9F!^m3i2 z&XMa6&e8Z_Q7W3tBQMF$<^7&tHkW%|nyqiS_*TEqd_2E?p9}mVjxSSesR1B00Hg+h z)NkDED_)yEYw}ZQIYoqWN_=@XvH&>w@Q(&97dK z2dkA;@@Pu(Rx7LYIp<)tvP%Cp*H9NUghGSiRP*v7cIY<8a#zopsKWddGPR93L!7 zMe}jR^=a%)H|M?E^ULOA?G@SjmWprnZpkO}>)olqFZ{V(@g4NY`zP%4{t39uyd2aUnvN?Z9a#n+@vu9w+)BtdqN9wn=Yts?36F2H}7lA$+;BOV*>i1^( zlvlr(>Ud-!^?>i5yer#E?@K;i`A6G;6A zso&PFO-E+i_Vci4eoeeOjhX4h)?Uvqn_p)nXSK3Q9(8LxS*@(n=bVGp$}0U++uKo} zQXR8cgthKI^$oSItxunS(rZ}TtmQcN@N4wEejo?WQOR1jAfrD_75!p9fUH+RY8^!-rk%+co4@w_S}#Q#hibL z)6k}iV?U=*P9r*-d_W|}!lR>^I6e}eBbuFWO=e0?fKI<-ex4=znEE2?St9r$(Ps&z zPjAFEYS`DV^jMRb8yn55JTDbXULpp*b*U}y+346mbm3djPh;>P_=oP)b)@DS)}YKi z#s`a1qjQPhC*Ps9XV|DC@ET^#7apK;AYcY6FTkJo$T zckgKD-YH1C5who{>sWN2@Y|QCYtZxZDQ^vWF!Jg9yiXwOJrJM3J3QjEwQJK6wztZ5 z94q*{#kV!+^8b^+1|8J#iPj`{HhP~x;sD|kc(X_Dom#s#9bp?HR>@ZK*Z6i1VTXLm zd#>PA}M`qjh^RQ@s?Y=8JAErIO zY<_j!-CQ26l6*6LPF$MlALJLmsO8;Y9)&Tc4xCV}%aduQog6s$`p!CQMQYEX*CqBI zs@yoFIv4wkt@iIq_+@irtCtIPqHnkOwodH*t^9T3V4w&2pVgRQe1os|$oOV|nMcN! zwQJK6vbB5kzGQTs@Ry2j_bRu_r@VFIsmQ0F^FD$1Ngs$$AonWccCj2`d%tYQv4Vdz z@M&5;jdW}7(MPQt)t*TmpJ+|$=|{Xz;7T=s_ypop+#bpn1^Q^ir(yAJ?b`j> zbnV(|!V$LVcw-^I%lib7%kqK7sfI;uA=m;&!ndnQhz8!?1pY$Hv!d%U8@kM~=nTX3sA>4i8Dr)~;2?TZ`(B ztzD~(jlMv>N*-^Pysdq!BjpMBQ8;8ntp3Cpg1cdzQKb3V*JoR7fe zB3P7)=6&BA(iod=&TpINm(BaOmD&0hiEr~y?Q{9_&#}NS{P~pPNWB257a;WlT;`Ga z$J({&2-#h-JsIeu0saB;ZT=aTPkHmtNN{e*@Ap1|_xXK%VxJlow~OTn*(KlIS&w4{ ze?WZm>5zQNn}5znK7HEz1Tz1C_ypop+%A?QY(vB<*-HKz-{zn8-_4(Yw(1;A2lAis zK7sTdh)*E%56Jvu?b>u?wrxKTi{|{2?@9eLo!A=l{IWT}S8`VCtK{|>$y=?jl84=@ z5hhRW1cn`+u}y@s{T`dZM^wzji=+;6i#LnYt; zI}+sEj1Ip+znTwVkKdp9^iFMg(bPWbcEi#LJzXrzFh1%VbfuVZ0${|N9qrrHRc7c?rjjm0ktzP zaeu+u!|_RnC9KVxe(Kng_2Y~7&W%hfru zcIO<84;H1OxpYJ^jdkKf=i3r~*<6Zsv2Ss(x^VRG^XtM&Z{OtqPO;^)2H?#eukrXY zk4u7fZ8|dBwx5SZRMKNOxbtf63}h|? znP0(I2kqK)gee5tZn8W zj-7r$_g(`zc#cZehVhJenkwRIK7hQZ2~rzCY6D1Z_@=O#+8`B5 zU7L=~w(aL((Q!E9`z6$et(~4m zt$kH($xD{Jq;`GJ%a)I zwb9j^YHwb(DiM1QmS-SmJ z8`tjJ)@uK{+KLUe2R5yB{iY*F*3r$Y$7-R*$F_UkJwJWOXSuWb5PnGX;cM5e*|=fT zhWjUKZ(qA{lX^vWQrGG>>Mi%I7`p53yM}JL`>xyWzUQ@f+;#g*g}ayQq(>^PQmrB` zWhiT2xn2sg`T%}N&DXu=M`6_*IQ0JciPdKmkgQn24=L@J^qsnRJ~^lULnb{o)X;c4 zs}DJve2AsEKZ|cWHC``|8-sm(i2bA4e2eGFZq4f}_2L-hSSuOAgOGjfd3YC!IsXu+ z^lNhGJT$Wr`6i!e&eZ#8V-m-lN4p=kkTf%v(%fn?OLBrU{K5IDu|KCMXVqBvArX^= zX4lxT7KOhFZuQ9!S#+HHvCcZz5ZuS$I@9=IQEF6^v;9x`pV_VldXRsvYI?s%_Z__2=lfUSzuY711NLb* zLKf-{^s#SzySFkfpX|GYn4_|&GdkDjd7nURg7^g9;F0T0YuBbDv(3(T=-6j^>~gKC zZ+YWD9jId?mfnDT)5mtoaP#LC8LK{pmt6=O5w}{7}i9$2Mw2N0V0FFo$gd{TWbWu3*f~En?jwqFR*i!n5-~|=c8v?`QOD&;o#I%lQHIFE zKlw3zc0g-nu0dHZ8y_r6S+yG3_!@Nb#}oabUVJ#>`Il%Rk1lvwzuhS;uDBZAlINE*Pzy}O-I;<;#e7f$Lgomc^#HdyMCeF^?#aCiLCwY ziQ@kf*(6TjogVRtec}|ii{;2{v-46Ndxb~d=Z3=egfsWwqWO0|@ZU6ItHP6xW z>Lqh6uaG^is}12n*nRA}+J&O>A7a@2l}csvk61zCTJ`$v5gQbpSo34H`E0G)FMB^a zKWolruB)vE8iv=^#xo?3h&L2pS9fY1dPFbUIG%N^Av_4#$F8egDCYb_oYLQaoB4|Q zIc4T*L|>B^Pjjh%)U*-DxvwH0zECtXwr1s8lZlcSpWS=sr{;ZBq0YL_h944fNhrN4 zvbtp0@9S22tjWxcjjmg$>#-zn2sz)>##;A(-jnq%ZBir6FGF#z9bi?8+D#p~4zeYeRT*ZPL=AnZPNt?xon`42H{{_3f+`A4iEajkky z`G^gQPOSMc+kCcG?U$XuGC%9yX0G+E1{#Lf`o=RPkBB!EU+XW>I&_I%v~fJw`iAfz zWFNcMccGZ`4{_2r-q?51G=H%#eduiRGHy`ToOvJjI1^p9{hH)j^>sj|7qsVhv4@^-H8RcLu@E%({UiC@=u1uMRM_UEYP92_DZTV8tgtnWFv zSLf}%=Rn7F`r|m($j0fd`u$<3{TI{knC_Jgcq7umcTyO_gOD(uq49@?HcgDI+c30d z!`t4rVLdB{O>0)Kzn^9&*YR5#7xL$N?e961`tJ@X_@_~9<9pKQ{dt6H@qPJk_?n=b zlIVi>KmX$(JapDJ$L#(C{ob7XXO7?Y`>F5K(#Q7>^BO(hQ6ISOnKS(|ONrmv;_b7G z-nEMJGLQVm0sB23Z^~#F%Mr5B%HK?UN%j(*U{!<6NpbBaRP~xwQJK6 zvT=-PfZwegV?DvE?Z5nbLVU(z7M+NES|^*!bRdXNAU=UhJ%;UKIl^|2`i>eyjvxGd zn&TW`^T{FkWS<>;0u327rgJbhdf)1O0?Ba@pFnCs+%A?QWXn){gM;JR(DB*SKNG>$ zfahOQvNmj$Tr)M`sN^jVtBlt+&AT(-A6;Q=4M^VXR~ZLeCErZW(g)4tSNnf=)K>)c zK73}7If{GwW14SH=rycua=b+^a(rtbcTv9i1iy$c9YqOQ^8qC9ZQcaQS@7w??-ep{ z8-=px;f^)U&hiOb^8C9x_yws%X8vB7%2`%^}}gwOeeMudVblQydXKdzO0gyy{daAUnQ@mByZQJRdRzEG}FI*-|nc72je`f z_Z!s5&zJsHU+Apw&}&%RtlI@{-Chsm;5jP!{eGPp{b{P`SMven83~Z}8_2y7kni`K z5XSXh>=|C(&)U7 z1b%VM`xHagkRbI0WUPbKIFK4=?b>vN><-x;5A@Lhe_!C!sC=^Pf=1U*tAcYw{{6Cv zPar;l_ypn;h)>q8O-IN=ajcAQW9EQ-vYOcF`sr-sQ(ZRk3FMjt#3zuN7`Kb%$ZXqw z9u}>MJAN-aAC7r`+5BqPHF-06G#JQN>2u=JO#du++?DkMs#g}@u%^9NeMC*`(LIPU zy@uKL_Yqbc(>xu>nLPL096dGp-V47s(;RPfXY_|1Lk^e^V7K3=rm;^=1F2~r5SFcJ z>Dn-TOB0(Tf6`g!JX!a0o`Q$0-Yq_w#vVHmK1_Ok*?c_LKwsM*rfa(4$NPGx&S^Bx z4g`8Q=0_D@Y6{4@3S=CE)E1E1V(r>=gzOgC9uD-;0Do8D(?0o>x6T~U@yJ5R|Cnsz z6NpbBK7sfI;*+&&(-E>=f27Z;X85#3d|Q9Ev}$bhX#K4?HL7ClH@N z)}L{^SdQ=sB38*(^4It_#s}q-)!^3fz+ihq=U}_YZ}&cdtV=-p-oaC!rtVU^}X~uFX}hvXne3J70u<-ifOD9AC~@U!Y`Z4`@LMK6MaX;xBCIB zF3YdqlYt)Oe_pZe^LU%b7kT9OLuuzeEl9f&vdjOhvtA4I(FT85eDi6qe9EieZ8{!V z2>DNVpFnJa_ypn;h)>q8O-IN=ajcAQW9fo?vRc`we(#EW`lM|3NjG@AM|@(R+>P7C za%8q`KM#xM*Ye|O%uFY?HhX^A{5m8#tCdyqs72$+_53@o^^J{XL-u-5HX zA6+Z`C*@<8YQV6zS<4ApR{c$9eJYTH=cr_@n-22DR2b4P<^#xYRe;nq@M@3RY}unf zymxFA=TFu(_*~!9Hu>p=?l+x3CB4*EL-eD2(Vy!*a-IJQZLd^pjNkK=#_=>AJN`B~ zzR&AH_K3cZ{}MJttnp+2U4#CZ4nz3o~_MS}qg}?Vn zSJuPdsYQ>;nVy5*Mx)xodo?Cw*k&66V$b|GHv49$D2B3S{5Ls6%d@cmV*l*eM%XAO z@q2U!{vwU5>B82?UnTs!&$*qLPUYvrM{+#;P3H;a2Y$u6**|ec^R#k+b|@X2STq_VamtE)V~PA0bT;{PMZS?o z!4bqU=P{FqEeg$yui5$5WTxZR zpK;bjnq8xE+$_@ZwvYU8d!N8TzmHGs^WIF{E|w!?k4aY?EBL3yw>b4&k=}=GbkB2p zBom*}dH=-lB# ze(~3{_4SEwb#>*l^5>s3fnUV?PZUSqLjqsxk@p1Hf3?S(f_7~>LiV6+Zx8g*0ROo7 zHvjCAPkHmt=HT3r|5NW1c#q%5C-$kgal2TKkRANj&Uzdx_@m-moX*Q9dmpgT{L`W1 z6RpWP{h9X(Bu*ecfy4>C$s_GX*ghp)#L9Re{0rjS{ImS3{P|~3AkV>q_yqDkY1}TBBeQM$d02ED zo(lXko!IL7x5V$V<8YPato~OSZ#yM#^G}trF&)^ilE+=Ddp7@6$vI-!On#hJP965| z8KEnje~u|fn13$F$EDv$-W%op0**U&LH9lVHv2PFa{igj$OqF!UYHLcc?**JAoCB% z{PSgD+4)D`59uEIOz%jg^G|$Fs#9~-5xr!p8_nh1Yl|hhhp|hqR<(uSUl1RM59XI4$H1TIBYzhP-r2`rU1zT0 z+JL!6;En~0Qls;TuZbuB^WyWuha;Z<_^xu#-}nDlw!T&3+nRUjbMmhZ76f|m=alB1 zTRn1rgZ&rrSG`XlHbHy>@d?By zYuBbDY(sIZjL$lp*9rOL?gQ!AG}E2v%%7hBPUDUI*JP78f%pXC6Udr3ZWqgu*|z;W zESg^@0{=`Ww%UDOm(8z1$=RB>N*-+s_5EUsNyKj~`|y23T*->Z+FFW&gK zJL`M(8djLNPcW|a=lLgGU2ltW82Pf#kBnvXhts1!^o#ibUZ;JlSM0Oq1X*+bgE0Jz zNt{1fpU0b7a!MXDnTyt&s((lH;+SvBPDg<7AY>m~Z@N&-`G+{gai3G*|GCD?>pXAR z^QEhl59CCv^RV}_D_nl?44Aq6d2LKymOMkq{pFaR9x$dp+c6^td;i^uKAzdb9z68D zL;BvY9L&?#wR5(x45M!)%pzIRGry@0+w`hEy}Fgp4_$^Mw0KijS6YK{Lc>3gsA zQ8!|GvKaoW5oW#%$ByZG!ISDE()9;BANPysMz7i6`3RnK<7LM;vhg$>(CQC57#t6a z=iTf(c!+81C5gTtlE0UF8De6DuRKS_Gj2TZX`fdel^pV{A9%e_^4I8C=0vL@=rBIW z^GqPmGl9&oSk_OB{*@f=UWX=(X_Hl~zU zJe$Tj#T1UCI8SXH@mvqj79oqicT3-o70?%tqa}mMxa2u5^AUaDFMU5=Kwmu0!*Pj^ z=HGjyZ+iiKtMt7($Qbqbb0o%$A>(hBzHQQ%H!kgYNt5gU^S1g0`9)u$8@*;@M4wlq zPpw~(X=EcDmn(e#n+={}GQ0HAPT&61^4G>CF*bUFHh4aW=azUb(Z*%V6Oul*^%(hb zjgF1SrSU<=49J)PZ}v!@*}gU%F)l}BgMK#~oQO#D?u_(-8yWh-{Dx zb}y2=%Ccd6FzeYw%SRBKMm8?VVH^A8n%S`9K;wgqealJkmW+L5pw(aMd{_!kKOvxPD=h*gaTzJeL z#h2Kko0yvo-rKZ3u;Uxq2*+y66Vtvxj%RSpE-_v1+xN;}yXQ+xj2Nptx59HbJcDLq zb+6=*w{i6Il7EqojmN6-!K~-p;P*)myiI7tSZ&uc7xa_apwF{x7$3}fZq0H93~gNE zjgenAj>rSEVZMOI2eY0-v-|;X4+M$F1)awcphcnEJyrfA|&B56z*kLkC{c(&rA}tmoT8 zIktO`>wDWi*inC++9slWjF08{vjKgUKIX^!JkLh_EWTmRasEcsGoI10&&n@oNxoyp z+7JF!M}4dOd)&DTm&Cr!l@}(DeyiEcm8`dH&YWvr2=DjuOrYrlO<%~f?eIK}2QtqX z5u4TqG31$r&>sC|d1&%;A@bDJCk*|2%fbj;Uzpy$x3wpn>>_Cd23 z^4MM&F%Bvg5$hq@9cy5RYbD;(f2yqV{yxSBx)RK~{ynDeq~tSb%rmUn-0{yy@WdxZ z8m^i7EGx%Cf1uZosJ`0gXB{*66V4~`_3}=CAB)fL@fkwI(6?3k?6a+bDz_Qx8`f{c zhwU~$@p(S;5q%$&K0c4iIE*ROcTnGrAGR;}ysm3^JgdI@`kH%wo8S&2T_Mof}%+>%8=>_`*$^{KFmf4=hgdz>v?e-2eNn?zQ}xSJvD9@#*!Y z*A$zR2A}ql-<)29LFRweUEm9;N##wGX2Hq0YS?Dx<2w5G>W z;W6GDjG<6>Pp z8*foR`uo0>b)4@^Suf)2x66?{OG5HI7I{UG7e{%WrU{IWqqFtc@7uAq*W++Ga=QBY z8i1T#C!Z4NgFV7>aj<@R9IW^CI9!fo97x82WE@Dw;k-`Mggy3(gZ0kO%2=Q4akw1G zIJ}M{;mGGx0)4QylDHOlufuw3j;uEObUBje;a+!p1U0@-8ObzocAKFBY5u;-VY1l<*(xd*I419 zqxD-MyzK?>^81YV`iG9jd$;iXUM*#DitU%*2X*@Tr@b22D))Pj@OaPh1Q$edq|SZ) z^E>pe?$@){8Ny1RqjUY!xjFa_KD`D8z3J14qw4w>_K^b|dPm2+_kv#{c$<6-uv*5TO{vbJF)((69;kR^@o_O$Ki4$ zYk*@Hc}<?!g+_vl!N!}ab**@`0@v?Qhx-5@lF!&-Ov=gmBM?Z0A7Cm@OlJ}bp-Ey!h5s;UVeQW5p=>PzTX4;F5&$~cqfp_ zrFi}Ddv2n*YS4X!y#oq8Uky!}9*MjY|_u~U7FkK}zG^X}F2wXYtVts9mT z)n>)b!_s57`c8ZE(aHPNhW{6!S)#phEN7|HJB7zF^;qqfzBep+L*Q(NxBh9h`$_g| zuhm|XW2x|X{_Q<%GrYw=t=;cls!pF37RL_Z@r>xNa@^=m4gI2NgX;SH5G&G5z^UukPR_TwKE76*LXAAMf_NS`gX zYOnQ=$~z=^`~`LJCaBSBVR68BAn~%X4j%r!TUZ?Mv1hXGd42Nv5tC}i%l*O{VR68B zAn`Z14&D*M`zl(*pLAr4)RXx|p>x6f<%A2LhPp=*CJaziK zusGlY?~SGG|8#7Ix2O&t@w`!39Pk~;dbOnv9{&B3usGo3o(KI-Zl;{-$4;&tFZ%Tg zivzv`Szi{^!Mi{__X~>yKJd`*xB~iZtb>Psn}o#y-+{#6h?8o^%lh|#usGo3egyrB zT;Jx_!Q*cN{{Du%b< zl%ogs65dk~f8E*}aO{(QJKt8>lYl>1>V3HO`6TOer}hRMGoO+9*WZ5)hD9Ci-PV$L zIaOF3D-RHl_QtW~`qm*Vj@_zfz527)`z8v~-Z+-T-!p{8G4zb&Sws%`g_Ae(2i(`lI4rISZd*fIVFO!7DF}dTw@Mv!wOZI=q35#RV0piX6 zdF}H~{PBdIb#iPG-hn(nU42O9*|(pM6VE5=`8dZ|%^%h)*QsjIw6MdbI|c~&OdSFT*`wq>74_UX43x-D+uK9=Gn z$T#iz?nUHD<@B@i9AVpO0bAwY)A4=*?2~@a3hiPMKS#*lr~5eq?Uw{h@Ky=$9|iF8 z&k<$^494K+Az*(%cz+k(31o69( z&&rUzBa6H+Nc`x$PSfPMhVRXRkLq!_90>;!4kR2%IGopMnwTeCH^@v0&%romj?1n2?wkn{EsBhnFfb zi%pz}*}Vr%NERM4LEmRrVs^@u%qNZ~{7by#W7g$Jo)IH22=dAxFOBj#O%pM@QXKfn z9QeE*hs%+0AmKn>86+Ie>oiSX+tc{E6OI=o9QnM8(u6%cFJ^gN zSJ^flcPmbgEoJjc*{XDSl*`AR=LJpn%SK4>J|ev1O3m@|^P;460gM)1Z~W|<>>A;f zN`t*mO)EY3KD0WHm-if&?9*7eZl&159pKPAYQ*xuHBS8-al~;vJ6sD>LVfHSrFAs$ zVuO{T{^_O4eF-*kB96DJ&-$lLNR~de636@1kN%FaV@ukrt8G4xU5@11jyxwwVvGER zQC_EM8WJSFHwQkd$Ki4$97s5ja3JAuUZ-ht9B*rzkp5n%=c3G?JAz#Lj~C8%+j2PB zH|?-w{*e>X-=??7Clq%Dx$maMqe8Qq{X^T-5G!i%eH|ZFjGR@<=7jrL#xb0axmDp> zF<*F_&dxBw`~E`Zl)POKN6bp-F@!kbzEFMsWcuNCMhsC2w*g?CN?y!`jT%flE` z8%MGH3E`b7yk`5GNyk*rG4z=yf8i^z!8OOI3#2c;4F05TBaV2EZHU^_XPM%|ylv;! z-bY=cHnVgO#lgF$^f{2^`!P%QL&iH09NO|;jh`=Aa$ox~-ScqFm;T&Gxvm+0`H0Fh z3HM>0f3vVS)(fxWgwe^b<+zKQfvLW~&V3&Dwc~V;$I6qc^LH{+|k4~PVHVX=XE!TTS=C;IsPtki&9IK^Y-=<*$ZJI$cr#q%)F>!vWvbSJP zIgTly$)cLit0+yZ$#c)syL#gAI9P}3akw1GIFO73$vBXV z!+D*i344%O^ZY$JYg0WAmm?X6*Dxd;`MiqKq{vKDX?%9A=)XAg>6}Y4`JX!13OcMh zc0zhDo32I5ce5rb9dg+(c^sCea**C1Ej&MKL-7xEd{S%Um8EPiM_HWWYfFBu^|hr} zc;f>mc%Ks9vrEnK^4EfRzhxc4TPM7$3gG3hReKZ{>Ym!f*Ie?S7T&B<^J~Gf6Kbyo z3uIqx3pTbk2YUg0U_Zdqh$FrhYzqFOJ!y;lX~~E=QiFdgR$bG8f3R$48QPVs38}2Y&M0#^?1oT#jVEA;Cmm zUMH`jGe%N!d z5BB;4=4XX>qwr23lS?C&Cw56wPp+P4d(R)4Y!epyX|TaH2kRnp&3kY9H{v){b*(f| znmoPYTk@+il6XY2-$7m)<#n1SFs9DP{O);14AtXsIr3ulLxPFCrcPc(X&S1}RpKBPJPzWj z9*4`3j04FykcTs8pZB!eh9PD{Dd;XaYf$F}G4YVZOkcpHTGs#0^j{M?JLan=#M&k66<1@Q7~LvOgo zu}|=QsNh;YFT7U@?*uZr6wkf3&g!{G(^F2q#FU@@7n8m**t8ISnxg5zg0Xa3u zOM)y%d7Y+-xwkP>;jqNXCJj8YJT& zUykxRO%wJQ?6+!nma5mPtXJ)C)fUXG_}y*(U&yfyc)D-6=~nnGIp1-{goOAYHpx3( z@$2s_^tt7pfV)L)y|1S33z{o;l`7A(+#X2`c>5&Q7%=fwF%Ft%<H5i1b6r>DIA*txP7;;D1vWYik%7(-hwZdXWjmxJyerP0kPuh!lXp7qzTrL{kZVGl zrL!_zSA1Ezt}8Xx)p0vh{oKd0Q)O_0jSfQ&k=XjM3>wBg1J*CDvJAU`&IC^h9B-y1hxWGn-A(~8`i#nAm z`tDKrTImU2*EyNK=wN>2mnR=qqwk2&X18QKzOP8%drQsrU7O>8XNAh(0vjEy@03X2 zRVrU0J!wDt+)Q6|An){oYijk~7}~6Sc82Y?_e6;j>_Ny8y#5Bo~b(PI#2bpr6cV}ouBCn zKY6D&ud3CxC$yP;b%yJ<4@lShOU-p{Q$P0^kSc=~4`niwgT$RBEHag_z*nHKO%9&kv zO0t)L-~EwKz45qT#Cgsag*J1p&2U}+b?N$GskyFW)X#k^TU7=Z*yu1s6Y}(EtsSNM zwhJ>|w@RWb{O*suHyKm&bCF4IGbh7!`)^3s&86nLZgT(7acbx2WWCDZ0vjFjx^AS; zMVYR>lA@Bb)w(|MvWH(0AP2-Y`YCNx+jwl>6u{R@&2?Rr;{a=(%HT?|bv{I!tm~&= zGw1rto;~OKD=$p1rH=ul7Jtt#IsJ>gqASTQenaEJAlW~954lNParLgHqmmx+!UeW<=)Yt_a*P_nL;LkXe)~h0 zf8G7d;biB34o};3Jh!6%k5%^_>9oC+{oUlybU?(1CI>;-oZ zfP|C%!EWoszb>4^zg7G{DmCZNKidIz#O0Oe6XczyzW&c|_POQaFz)@5wgLR#75~Gf z=KT3*RV|-BY`{m12_EpiC%hjQz{@|!UL0(K5A9zt9}?aVg*TB*E{#;aHI(hXvN~qE zMjVo?6&A4oHn`?kcAb8QsJ!C_h(;Xov!xdG3v{XIxO9T{t`*+CtFk!_J`MVV{MNOH z-tT_paN>A$IdX@NZ5r>cQgeUg?Kdjo^gICb`@;K;@Qx#sOR@d-U0oT6o9z}Rx`WMF z%(3wKdY@By4!3Q@5!m!BWyRw3cWuhs5AZbNi2YmAZ~SOG zkmgKCV%|~D%lr#IZTf=jS@hh`x=-0BlH=8$7|o}jUGSE_<;%!-sy)wS^67PFj`(xF zjQmWse`=kI$4)-DroEr_PkTXSj6YT1hh_i2lv-MzTL&kOx4b{+1zRl>-kxv{-j9X% z*8+I?cv}`Qb_&lrg119>dkf&@=L5gjRQHw+`3N032k$4sd%V;=PNkqhy?Ga z!uwmPIbQy6dUOQ+h#{{NVE#;ae-_@cWO6B9?^a!3J0Erki&z93Tyw0OuQfq=$1Sjp zIO6%xd3_~T=rdpOX5NK=7?rHJA=|TpPkq}BnLPLvr(8^)R8BuD>s@bz`7_n+)Oi0@ z%AWm&rUN35zr6jt-i;FX!hi|h&xNK#VT{<=>kgQG!uzN2nysIGH`m6?2w~wXu)#IQw0CKbC!OtAcp7oU z@iIU7pZ27+ijSCg$1T|&9DM3m-^f*FV?&TqnCU-h(w> zo^|C@?2o+t_6ObIbR5wC5#fyxUbA@Kczd<|wx2pO*&!@+2OC^-v~1AYr@Y4rPa}@l zew|&_KHeaE#k}jg!~Ki!!R)>{lmGkndtOVPR8BuD@!T6>@}TEYjrUNEw^=;r?H9-M z!hi|hZ-v)Z053m3rbT)Ml~b`>cuyPDALX>&s+U#!qvhX+B@1K^Y>{HiM&_9HBH1a} z%v_B)Vt;H3_I01lvVY9G;^mn?QhYU9506skn&bcIKIL#yFP?v?y5DKMM{2xBxkDu5 zc+T5zYtRi&#{pe`FT5j!cT9xi)A)M6?v*+FsnJ?tp*z^%nq%25+UqLsae~)~Beq|Q z`k5QKR`!Z{*SsoQpTVcTKggc9eEt#gq;mRMxt@n?D*E*K2aR|9ld#{Yh|_)pbdT_k z5#Bg5xfI)P+yB(sZ?`bf9c;#8j>QYKCsdxpkc~KE`<2zt?U5T~FZ1qt_UL5GYqI-i z@Tu<$a&7sIH<2fm(@#C~iQ3rCRQ*xoEfpB=q}SDscZV?H0vm2~jCzUIKIN?!JdHTw z@pitrdb~R|zL$CeI@WJd3@>A!oDU&Ca(@(uqaa^_^>Wwget-8lF-boto_|PsE zgUvVZ*J!^mV1oB2;hj(bFTb8n3mA;SegnH-c*i%ui{o!fQtOWe!on6{gKLgiw<;Eu zx82}r#1Z>rllsusX@=|{^LD&>Lei>A@M*I?$VK11d8qr8!%4mM?>DOZv&Q=jjdzSY zL^AeA-hNwyZg4sd==vAoog}@!->@JID`z^6-1zryNe|+3!)+{axcdSL1EAf633^ zWkEMM?Ki0Q3GbW&_FK22+I~~se@L=GSm+KmxaQcebH?a#!qbQ&w%;c8p{>($*(>H< z^PcQ}27KDg@6P1&zjezS+@~B)wnlAiXR7|8@t$8`ye%uM$4lS2;)4rpxXsb~-?|r3 znf0P=BaV2y>x2HZCvDXDV%~l4%dWrRQ(t;%CMUPOt7gC9cv%?Q(tfv&e`>tbHQu8s z$fd#N8%=k-KeKnPTg&ECo_a~XY+A&-CyWdJe~Eua0sj1cyEkAkX8Re={ldGbfdAHf zpw@q5g@x_F2G<;`UZ!*DZ#%=&h$Hr2ckl=8Nu|5=?p?&Y>OsrKGw;fG4Je;X7dw#+LT|O$yFzgxXgXZ;Uu=7>$qt0?$gy8Z?pYa-hT69&PdOp z!kaC;X8WxN@a7Az*?O?_OV$3M?@ZYPTY!yi%+c{` zeJ7|g+l{u3IAVXS4)&!zX}#UnGMN64n)F?}AQ z@!q2G#&f}K;%u3$Vd8$DY?{?L9WC#0!wv9Mq|1JssqCIJe{2B9h{y6h5_|&((A(P_{AMrf$q;mQh?f*hs zivOZxtj7Ds2IGzWo423+J5PAMK~M0G7G6>SFYn)dr$p~R1RcQ}C%iWmz{|(qvY-<- zaoh{8AtG*BsN{C|^rw`vIOt9I=1r2Y=C?RF*$u-mN<` z|AJ5b>LABFbls`sN#*pj^8MPL2$LT%jMsSIuJP8qWUac`zj^z`&tFyrOzptah;_K16q=LCub?qAOJ2l>B`}@58fZg|-EFJ>I zfH-pV_L|2zivw?mbnFP{@R!8@t^)k|cz|rxuKN66ebt%g4=58(_DAEk4d6dk{3{CZ z=hvJ4!8h34^8l*jg!g|1;%CjH)$v2$9m2wQV1sLpd2i9RS$X@Jwv9OA`00Fe#n&mm z;>ElRKX!1kYIk-&0zUPdf}Fkkm(L^}KCZgsHQu{4-e%8V^Y(K*j1uR< zfC=6t;k~~AUOpaT|5``zP7vOz0(klO=Klv_=-9;biu{SfYxMuj#Ow8pJ+=PbC@gFX zHn`?kwN&^1%G(d{G~$T;+opcBby_cf#=O%W%hm_*(>8C-%;hn({TmnWZ`{Sc=f&?i|seNzt(>Hgo*Acw#H(PojPZX9B_~tam4nU9qf_y z&~skdE9RZ~mu!B3Pn+`FGWoUR_r1}5%HhQ8tILsp*Kv}@%l|`ip!S;=b4GeTLwFw- z-o%(FoX7T?zqi(YQ>8z;gUwjXF>0Ci#46)3Y$J}?e#?VB+-IKb74y#hTlRe___XN` za>xY!qDq#^LHhfF@o%r_uupX-YrLPkH_YzaL%|#)yp_r(m8Yymi8Bc7Hf! ze{H-h5Ei}y8(eeDdWXLIRNj7trx8aSFPqedwoVHaA2Dyo6XE?2;nQY)kpFZ4twY_X z98O~Ux$Yl2>C|}nf1;Yrx4iwf2HoIvoPzsI;eAec&Gv)kmWfqkTlZ*dvQ}8=4mP;v zn0BYWi&vh*x;Ns8?bo7yZjYQMd&Rs{hfYj?I|@GatAl*=d7taDqe1Yp0Ph7|OB+TSiPwCatK&h}&?!`p}8V#{U!U zKgOgsjeWrQot~nTxr)2qr)B;c(Xu~{6xXlO{|CwcQ8r}n{-Jr@2D7{SgYVxa@a{gp z9q~K-gZ=*DFat=A$l1(zQImnwc$@=;I$^)&gl%@dtG*4FsXXSxU)a%on@ReE&w+j5 zrT?Pfvsk~PexU#4Q4`a{{i|1z+PUj?jikqcj)VOTGxv9U%ltLJxcMcN! zV-BB~{zjc^0@z8A&t7oON6b|YC-wF;EQV7xkH3Cw^F2*|kGVRGA5LEzp*lx+n}yeO zPcx>nUIrCg77GjA!3NhH^WUrQC6xC#Y2Sz=zUFOLA7djY$zJ7%cj}Q7)4!tzKJ}Y} zeBfih?j=tur=R+p+^1EZ*@mKYAwE~*{g%dC8Yrxs#OrF_etkhVIPEujK1+C8gxBmI zwrgy){d#XcIO!D@x`Pd_IaaUKdtl0YobWW_i0wB<{b=hnQ}&8^=Z(wugy7Sr^?jLq z&Bxz7F!XZhTrd8H4ADMQH z`y$Mtvfud{@535zDYT2lVD|HO8nj;?Fu}V(ct0+Hm%oRdA21k$;{fck@P5<)FMg)5 z~ckG%cj`B4g(;9VrVz5;mp`OzQ7$`~A1 z=rCP)zYt!t^?Ck@)&AIX_+iO-VPOlf!8J$A2lUKQI@@mWG~$T;(G%=Td(u+bKjxh~ zIa^=Ar@kx5L;vr-mE=j~^t1juEv>TO42|~@jW@P^=u%adx8IVW8=Q^<`duu%T?Op7 z@EO(iqwhRnp*z^%nxp(djgPT$gw%*5w%>-RJ>3?_UNLW1M;6a1zUtS&qqM(XJcoB$ zsCODJ`(2{({$As)_Z@L;)4csQ1>NAZ-@v_8c)u%PzvZXa+HaMx&>d`W&C#-2&!v?2 zIN@o;5!-LC`q0*?NA@!Bl6|eo(#~vu1wL)Mg8b^S-8K6w>Q}lwnJ7&^|7Ukc+4QvY zLmB4!ASrx`>^)QV>6d+)tsi-N$Lq)ZfC=7Z!uxXpy!?995-=FE;|3is7v7(Q*KGY* zc}A`O<_Rmcov>3|29ENFWeaQ@>3Z&T0>PR9+PvxK*|fc@5-U2DHp!a{ej!8J$c zM-=byI{>fSyv-z@hTD8CToPAibOjxO{g`L_yaCEQH-bZyD9#bQZ*x$RN_Vn8)T<@B@ud^uS5o2~Kw=SkSFKj;Rh;|!{+h4(}O`|T)K+i&T? zhbLQwh3;U3YmW6F)pK~|Jx+KUam4nUq<*w@+Ae#=yt6OM<_q|=8S}ABezEntXSz>0 zocJ9ymm?36{jSk?pK{!R@8>%sPWuhaYlSylc+KvI7GF_qKl+Z6{^$-iV=+g+&KV;I z?MRI{V*7Okdt^OyPbYiDyz8&b><2z==6pPpzuH*Z;6CMW5?}9JH&XVSqw$W?cn|dY z*&T7(Z{Yry@J0%++5Py=tE%lc?IW$pEa{K#U^5nT^y!>2at!F+fFriwnqUw2*(7_# zyxXtN><2z=W~|NRTfW}$LH8+#ll4&>+nK88XuNIGrP+Gbac%W@={rq)aDffCIaYr{ z&mvT2y=dErBOdRHpg-+NyEML-ciWt7y=wb(HqM?P|MZ`)ugH2-)+_SK^D_IO5Bb(l zX7aM%fABQ&q;mRMc_(FdXiM=^6<^Plea6T>(?h#h47MMxdM+O@!J8|*BMRW<_ZQoO zZ5V_7j4sy+Z?y25#p|jURQs>@V(? z*~`3MFH7qxZ4Q+^=1KpO^gqR&A~~2n9M9dt+ZK4idx7wdEr6HbKlypoCgE8}@Lnjq z;|k#A-_eNw1`s+jEby)u-th(S@_*BBb(n9gF^*F(=L@f0c+LF3d_f)m3yZZ1Y;eud za<6<(4CsJ^)QF?X|51DT?7K<#vk~u zrSg1!e!v9pM&X@W052auEdhfu`?`WEHwmvpc+ZIR@@f1$bJuOv{$9D@kYt{)QrihT zwPoPw$F4pCSR;xQ_GPIXwk8kT{R~ zO#7ee{%%|J9R}-YIY3n41U=(-7?!-MqDxV{|G(a07%juRDDp{uc=6hhpUeDhwNW=$ z&lURLG6-J$4#W8SYWr?DRJJ=;?+K`Gea_!`-S#ZfyEYqYG4kyuzfSi7OFsQnd z^q;bLVtTlL^(si$$<+;bCjaZOWcKT`dor#G z@X!20CLf>ik&V`;98SFFbUE?}8RNy8$LH%BRWG*Vbs@iJ=!!UfZ3OcrgW$#2yvc8^ zte5m7m8CzrgUwjX(X&y%XI2?U*0QnA@ilK{u!sAMdW+&T;+^;Q%zoh0W=D`G4!^hN znUlY>oD|y7{zw_^R*m;k*)Ja-)DLDq-&4?Td(acSg~FRz055+JuqI$I2FC%|w+ZhO z;WgW1&%3kMAKQe5Ex-oX92>rN;+uVqX!XZghR|Azvf zHe5uMU zGZu5~)j4D2ukgwf37W{m~t4#$t{sz54%cRK^j8(~u*!-`Zdg_gO4^ z#k|W`X7^y=(`IFmXMgFO+uf%ePU_k3XxZ^DyK>(O{`Y7j5+dYWJV_6FVHwBMk5x$tf*V88wk*4l5Iu+SZBaLuvde#N5l9w$7F zIAZ%vRzKQ0ZI`{wyZ4gO$?nw?)Bkq?eA$GwEq_ODTkAK_B%%QdxggP;wKS* zQzB0L4XRfPZ$Sb3jsHls{Wf1ZI%$*s=nghxF~^Keiba)igyA&gi0!u^*u#BVK0Glo z@06LNlQAF7><2z=)&_ap5l_6yeahj)*Ymv*=6Km}k;Z$+ldxaxk2L`kyjKaYy8vE( zf7KH(7=z;g)n6^V+l%;PZM8qgPHu}7g}EJKIL%Y{b};G3g!ga?|(GjmutKixa26$S9}>x+M9wp3%Wj^MpUc&{vgmwzVCF!p?JT(a_pL(}8eCuaXIT>d`C z17#qZdmtPw{XlgmPk(Vos$>te=?B9(?Lc-^k>M=f8L0dyp~} zN{-2~o3l2QO_cqXXuPl0c(0})m*SYr+i%{y3}=Dxwgf%Fd%f^pR{$>`Lyqx{!n2Ox zy+L?O3g9)0@rAMtIx;ly-YC4+7r@KU!Is;`CA}-hC8htGkRIJpj0<)kxxA=!$Dulj zV;nnBht52Fe?tMCM}#;q=E~p~;==0{b#D^hYlPP<#``{38{=bzMSOt`t~pkHQ_ri! z?^uMV5l0;3-63XaPwG`no40rJuw=&%~joiAH>s$Blhp?;4kzd^~;|zZ`W5Q zCT%JQpZdNaU;EDq=a46r)6a^3cSe{c+3#%{@0}X&ll}V;9pYRTFu{Af@cy>|-eCT< zj^Hg5-tq!?`S_a`bV_X!jrkqIdx!9v`FH=OYX9#4(5PgG#)@sh2G<wrJnIPF z3gLaY0ABw35yuNUGA{7mExfx6;N|ylyl*l`NxdxZBv;WgWDY+aekLFP!fzY?R%cy=d4lZsK8<(Xldxax zk9h$Tyt{<==>mB9`Oy)L!EwNt-Y>jQ74XM~9o7Dz?_AjfTY!yi%(3hTTKiOHyV150 zN9>RF!M?O7?Unsw-gQ6C)<5v6?+^05U2ps-c~Uw3)IDPOd%)8|8;Vbq{Z?tbpM4Vc zi~X@D=n38jgm+&7y!`y=4H%5UafOZ_6y9eF_+!=2YyGiXSl9w=aLuv!huRY=Z@a8w=QEM~-8w_}8lpF0j#Ih%OfR^_5K=yHRbI zqr1j3>(|*B&?_E8J-_Z&KiVw&amMHNcWVq^EHH-N9LI9;_oxgmu+d>@Xfxm^ZMN`J z^_T{C)M8;Q)3HutL&rV83BM(^!a=tG{xSY^a#ia2;izQ4+G|KP>B^1Cz;6-a%C=qg z@%N9vx+8Aq^B%S5w^G=Vvi=~ieB~Lpx=lHp%!}H@KKh6h+$NhhyPw(fNS*ahm~ep& zw>j4BklmEGUZ~KBqiX$Azo2d^)@Xb&@ABVHO!VliCY^ZPlB;S8Rj^6zu|N96^~XGY z&+s_U`C_;ESvD5euMxnHWS{uGB-h33W#><-IcPINWpIIw4nt&Qt&q=XX}$jX?(46= z>5kiOyQAyobk#hG04fo2hs+FMls=UH`;{XJaY8j>Vb zh4-fdc#Yz(Q#L_I%mCg!!s{=9m!BVT{Gp@q?iJpj3*hDF@1|fgeCBln%=N|^1n)lK?JI!SDE`(9 z4;`@&cpHTGj{y$4reqq+&I_9~RL9(1+!JcPUvgx65Lfj$T#l5g1Mx>5 z4kR4T>oiTnf+U9h&Iqw)j!>Nnmm|lj#4(9HxlZ1FTf@nk*7o%Nfmora{Aecs{*L!g zb=z_{@wH-FXiIU2jNYr*eVX_NzK{&<5$Nocp9`M*%Y?T_Hl-bSUlHD+1@H!&tJV>` z`-Rt50589m^ah=4>_g zey5yzVj4-@AukA$xNu&lX#!)lIPjC_Dn75r;c{fB`XQegBpl@7K$3T2u9Ao^&m-c% z99eDl>2f5$@pZf)%XRWuugo6n=Z{X7AKae4&xs$Y+Y#ih{@*?3w&if*d6ewV+ERRq z46;daHC}v^Lc3VR^C%yuo=4k-Hzi<#_ch^7D1eurN4|zm(ip5Gcn=6~VgbDTJddxT z=;-l2D7^Lpc=i9##kkAyz0#g8a|xf4Mz0N!Jk0J@=RFsl>;rGWypQyQhfnJa>pBIy>d(g6IA=;dKT~ z@V+6uQw!h?Hdn19c;6J>X$A1|Ye`Gc37dFLWGq{R*CD+4I~0#G-tW#BT|HO#A8~N9 zSXilTg`L_uaBS??J145MAHZwG5zp1_!C&TIB7d3}n~r}h^VJmTdvIukO`Mpk3)H9Y zu=Zq9TV<{;Q9t^7uHs+fX_$_vd+K+}sXsNy(}J8HBymAKc_%P-i32}*uHy5094<#r zQ9tCFL4rvh4kURe<|>K!@;o9A%#qb*pDssoeRjMcXVl5N?=YS0y=Aoi=5Tfm#gEjD z|8pk)`?HO&po8z{~F$W`;3hW3N|Weph(YgxBmEI^yW+dAZ@m z`b~zg@DoiSZEEWfT_q-&A>T$Rn z$u$(oH53U45)S8enkMFDpE!sGUqgwjdK@lCat(F-A>qj9Qv!Vq3n#>|=RUD!4!1+P z9LY7*F^OcY$mi)pYSqzy>*%C)TzmQqiddn1OORh11shy*toys3ODS(Zz|)8$o~vUYulRyKo${x7vFZF!f35WOT*W3%%+;~# zvwVDevRzU`OVeicqrc}W{`LJ^)IIe(< z>v6ao$$co2>l_jeBplA`G)=yS5?`K2#DO{74(W0v_o0p#WVudWMQIuqWdFo$FNz;2 zYTK8|&ySlAY9aLuvipZZ== zcCa64+lV8cNArWfXipm7u6_i zj(>^WVLGDjsoyE5{@fs+6(j-VxIhjBl*+;A76*Rv^$4HW<8V3hLiKZOAi>P%Rg@;r zBjU^Rh&V8Z+aXS zk*w|ZC9+&6uc9CIYZIGlTJ->vbx?hGmW6B*{^;+yWm zNXBb>K8C!uPZj6NfC=7Dh4+dAc=@$Bj&bV<-p_>h$^v-#YtMq96E^W&WoSEv*CV`U zF}~~M>KNbfz+uTQVPRXa!8ON{mT?I_upi)Q#1Y5%v?nUQpigOXdtzQ}nuPkr($_JL zO`M4F5$dz#8STktNewMcyVZ~Wj&c0!H8JX*`kiv>S=*7U?MT*LrG>pw>) z_{nQKKCj2&a^!{T=h#5Pk%4*fWa8N9)S5v;U&U5iA*kyRGwHO?LVzL?kU?TENlTbxaQ~@HZH+twi|65 zal~;yWk_ac+LK0|(w>+X8!Qg>ZkTw&T?HWWD-2?)%h_{*HV6;pb9O z_ta06Q_r(6B+tH((}Tp1&g(Qy#=!Sp+wqY(+z#n-Br$7WB4^ae(}(1^-`AO~?bw*| zEkSPkT;sKU^U#W2&y=!#GRz9`O$Q*C;kT!TYuF z-ctZCf9;tObiyW{s|@cq!h4tSnyu}7rqssxCShS)u)#IQyr+yy@PYjRPa}>v#>ci+ zd_kYd&umZ3i%sW;`u9s;ukF~xi5PEFpQUHCCtD>ov@~s2Kl(ey@vqm!sC(*n%Bg2< zN3ymfS$C1sqr6Vj1jgjy;}ZPjwH=?=<8V3hLiKZOAmPa8Qv!WB#)&V_BjUguZijR^ zlC|COf@E#a=jlTlreoRA)@1jY+5InmqG$v%a(2la1=@xbIaz`aACNhxgP`_ta06 zQ_sE~Nn9b>wDWSxjPMD%J#f z>?ym`JY{7*l>GhR>Jb&Yo-Jj6E5qC?zUf)Bs?T_B&&QDO1NwzGJ79vhTX^dW;N@f7 z*9sJ{j^O=Hc%LbNm%sLuf=<}Pa~1603-2D`HH-27^J-&!m9Vfa*x;ID=D2YQKCmC) zX~Yr7_+Is)ty72mY2GEH#wFi4F^g?We)rwBpfx>O4jGqpoG?0hk=k5ofI;NGlk{$Y z+OiL_9HOTyx6f%!kJ-Z8`L=NbZ3cl#t7hCeCdvOjA?C&8J6h9YweYs|j7#1k&I!%H zRKM&ewRrR!FFcNZ;m!TS=;UGHU0ncg>?udr=*M^`35%mVa$LgSp7t1;LH3WS^#^z( zP!_B^GhPU$#qX%pq`{Qo;gQHJ){4U;g&G1$pdGr9cb-*8Eq#H-4;^{#A zL3`s^GTy_5#X)?s2Dq-7e$;y`mYRw!D>YV*ZNgh8n>B;!HQvSQcbBj@ zN~-VMG%Ptwc&xq6(xy6i^VDgTusGmjypL<)nA8kR^;3_kKi@tmEDrb%WWH_t>A2(` z4TNi*CBJR@^?O>=qwQ(gc&Dq)8M(N@SWxojg@1)^kcr+SKtqpx(~0#BmNc%i=*Yx1DhZ7N7s+%v5IAm*}`L=RWzR0 zpIhtSSsG9x-8fbYZ_6vkB?l?~+6EhFsN4RwF$3Jz;Str1mu?*W2dE$Go7Xl=zH2^C zYad6s?ZB=dD{eTZZoJ&Dc;O&nzXugBXQjEpKi1dr2l4!uTUyhjPx@`Yx8k$G(X<~| z{Ml}nKUb&U3y-7oux!5FD1S)BrYSl3nB+~GNQ}&q`LX!ht?98uc&t~8)#j;9(Xs{y z>kGsibZU92&gYLAo*uMVeD`6Ae&Ja6|9YT4PRo{!uF;S6>J8G5qon!6{@?>z4~py$ zdfq-}U~YPjGTv7!mN}S@tf#*}p_qTCJW#t{fwxoZ6~`vwE!6+9*Dd`HjtAD@ynkJ- zf7u`GlW#fN6i@6Az9jz^887q6abk&n<22VeST7D_Jy^A)cK)&+?3HdD#QTB7Gx2Y| zELs2hg~idL{m6mf(cUbbtXPWHP@<;~Lkx%JoQw<%UQRtG%CQZu~$ zZ>#JjtRMTAL*xq%_Fo6Gzk=V~mh7LGN;i)35!w8GUeWcrK|DXISmszRyzYL@ImNT4 zNYgY)^Uc?BOX6>pusHgJx8rZ)k_!vs?fP2%`S!4|I69Ba=G(=>E3!YBul>O!EtJen zOZ+kC(bn`>B0Sc=`vq3y`o?%XPD|qXF6qXxO?d2gUDwQjTwm>1OZ0n#e9OUpg!N^% z{LAy6W{K;eualPeqoivkN4N0M&#~DIkNM=bme;A%9?dllu2%=LUU82-YixGE_<7yG za$O>EkL>gmos7{v&rj4 z@N*Tg)&@-Q_6YC60(kl7DvJUJWAO7Ku>UB$uL-Z-S`~kf(|S?ubC5N{!WLkIYmVOW z;}UFUyTQ|lBYqCDUwvrnH0A<5>kGWtV8$_7{TAu#xW^_=#QlExtgozRed_DDU#ouf zciiI-Eq^V;bVS`#KT%G-wqL2_yBPAUDfXlDDoT?v@V(<6AJyYVQw1DY6@*EBB zF&XlQ(kp%r=r(a#KITS6I(qKV?@z+}f$+u|B$C8jYsmLrTpe>gzZ#W{)p!{z*o@sA z>vWDyY!@IJal|p#9qbn1X9x@}3CuS&ElGYrH?zc&CSUu^22~yyi_4=c<4S-d}|GvjTYeH8g&fY#qV- ztMGOfz{@}DUKn)3CXNHfwpVyR5ni)3bmOyY{kvOO*cNPX&5<0Z?@pArAK+=k5&O4X z%KS!q(q8$~yx4SUsQ;Dp^%{yzoLDP%s?VG&+mn@7RMyZv>PLUCq4>AnHP_`xCJ2(f z1Cnbla(a~4X_`=B_OW`$Kpb8}@p(NCmm}FbAlW-0;XqE0@;XhE*HGfidk5m69*4`3 z7pk}81qnw!pD|SS4jZn@-T}dn)a?#(D1n+Oc>o0(ppGO-424nDg0OsF?_n7cbB9lw;-eKD{)p5V#g$L`M z({Ty502^F$EI2_iro8P2Y$J|1?x!AK9rt~*zj?92l2HG+^gTG}icOq|`z`9T?&|g= znO%wdUFt`F$36aFPcTeJ)IIeR<<#>VE97ZGP7e}4Qcm8<82H|CkB{ncxE#scLNd3I z(}RS=d7Y-oaliH2Y;DKJRBR2he0SrueaobZUC)!U`{eUsld8v%u~hF5YGNq--Kw$T zTof?D`-kva3*hBrJYL(aBY6K5-tYo=`Mt`_pc6LnTxDGU65deZHCx*^J-0f>>AP82 z*cNPX%`t!SxC9^A543H>5y$xW6Dz);&wlySyx6oW)E^>!y|!Z$Ct`e;`pkPyd$M{? zCC0a?AN?KU__yAgI8d&7;*UJ>hh$Ae5{J&~G)<_`@pL^07l&gUpV#AXIg+&<$=Z&D z0||%oI!%*focQwEP8`(Za5?fq^>(}<;mGGR28}D6^v=z`Z^w@mZ4UB;LB4Nq3vFnB zz6`Qoado8ln%x)X<1}8|H_4{P`?v6pDu9=tN6P~SWAJ(a<`cp@LU_&Me#i4`D&9V0xdQVAt+YO#Z9C6%_IjK7Ccgz0f#Rl_2{dno?xW~p$#Qiq)+3-9)6S=Mu z_nXv@{*HV6QSYA31?%9y|(RrPw$tvJ`$2~r($Ki4$_k~De7YPRv4(D~6 zCdd8udD(sg8&fg&E|@t-ebEi3zW$IzP4mih~%?0@9*$>L#t<RKUMlVCR3Y)=EUS~`E2V8+mkiwE7PZGPRF=}{*D*?QEv@%Ig)h} z$vTN-4MXBb=XIJU$0WY@I*E_!akw0Lp?cewNI3HOjG^*A-k$l{vj=QU-KrozHSV4t zxNSL{I3`_=EKAv;^7*;qJJ5A)H8}xT_0`G2dOgS~Hzd-srhOmhfF|=Pco^_+{@zmEbL_Pf- zL)fq0n&WaLYYvh)K(gi_vAgp+O%p1NA2K@W=*oUm%lN6-8stO2{5Z>Fn#w`izhgri ziZ2vUtNd|=c$%#_`86V5bG8IKfj3-uvkKtluY)TC24irXqT^G9ce(JI#mmfF+EW|Q z$7!>$um#xQnq%EFwf9rrcB6eGjyPV%cUH&CT-o2e*q|%aUoCwdFWAJ1cqyyTq!;P^ zcuB|07WJdQ;{|`zTMt~0WX(ac<{&Q%52l;nQuZME{Ce>n=zVub#Ob*J<_O`v zP^wuy{#3@1^=`}&$I$#>5BKSoz05mLSZhOl zm-Lm|X~HH>=sH(@*1lMO^FW7Vhw4N4EFI#?&Q2UO33!+Zf0hQg)Plo`~;2_c^O& zM=;>@Tp<5c;k{9K&0=Wxf7iy)Vqu{>*x;I@`y74eqP)imPa}>vhPJB@ZJoBtUgq5< zj`3$_^>3BFjv;K~L=0_EpH}JG-Ccgn$o!hZGkIW9-C&p{FgNcK5M?C!iy(}W6B z_l-%WzN|gr9Y)4a#r7bNn$^)yo>Wdh^?W7#{rHxtl`&r|pr^?ncZui1&@LA7nv-86 z{A_r(@YV-Afp@6z-d_MOzt8bCZ#DV_9l>i8-l_t4`R97xhm~X#bYxuM9VWaF6u`^> zoh15qy`tL3l#w1eZ)eSSmi>W~`gBZ^@Ek@bJTLRHpPvyg_10gPBYA#?WN(OM{Y4UI&g(QysL&-2{O&cL7^=tNawKa!k~JO) z2NDkFb($ugpKTEbvEY3IaaE7Q}L#xK?@YuRA|$OZ}xX`q7Hr4dQDy_w#eX zbAP|^<^@df#tH9p1@H!&tJV>`V}$ql0(kkgq$B8rO}r*D=JCS2Pk7Dd>XtXw&egTT z!nR<8YmQwP={-H=?FV=oal~`ArCjj^eOi~aC+5YbGeiBCrLX5IHgRIE?okYMy+QYA z>g)Tnb?Qfd&sF^E_=~!yey5yz<|>l8iX_I7#D()ZO%oVx7wUdg9G3BbFUWG8eAX+Qt6Lu&nQTt7?@I9_bu*`D z^8Du>KCoRYhfbbHdo})0)G|{BnV`6OKzz;SQ9e#Rk7kH_O~3?iqVOIpfR~>~zJ{(4 zo^=GTU3i-d;N|Ced<{iM#tdFbcwaAom)|q=c#N{K*DElO72el`*KA%cdu#2yEDH-? zfsOCXvHTLP^U~RVg{KimJTF%U|I?ndSMgz9eAE}}zb$<|FR_Ue^Kz&9?0$>ht9esp zUe1`2`PlQ4cyT;O-P1Utoci?LL`mi)dFG7c%y|{135>Pk!0(=y#85pBmm`^%NaiIH z4kWScyiU`^yc~70-p|CY;r}ckuIh2P9LY7*@rQ&XpHB(&;cF-{?72^@nZxanE=Mx= z9h1m%oxFn@Ygk5lYEEWT#X5c6}v zbH6Ok)d3T{ z?yQ}wdxV8;!3NhHJ1*0A$I9Ce^l!uw&(#^1R(wI94f3aXvFWl<|8wapwbO)6oX~ZZ z`iyypo>{%UGFSW6kN%#k_?J0IY)0Kvzf(>%OEGpL63^B*)=pDr@rPb72a;y)Ob%9-fs)w z4K|OgBl=Ai-tGc;`FXxE=!8wYzM$ht!h1w`&8~S}@2Z|hJN|umGDTR}7Hn|Mv2B)~ z)5;F^13Zm5;(4?z_>1 z<6p1iQTNpElvB_32uU0wxmF;F3+Hv3CNNfs13&qCgwN}7xE#s#$gzQhBcD$R^x*&| zzC4eJ19P|?(&b35M~)X{xlUe1X<{Cc=C8=UN5_xkr(BuIpG^GV7s->#>8IAZ@Sfe0 z(3avWWRPbluJ($r**wa}X}s6#44B}ZEWF1H;N|C0OEd!wTT#uRSY*PT0hA6&*W;M}X^JO&X~Z?~%Gz zRmb><3tE#lVPRXa!8OOaYxuoxb_{?v;D}>8`i%r*u`Vqn!9vWd2r*v&s zpO*J)ZGT@S#>ZTp`NT1fe;t2O_tfu{Q%{T|iE$(`jwCLe*J+x-SR@YoZmM^1kzz z?8;i!&ZBvuE%jH*AkS1>9VWhJ_Zs;)jo0>30TaB_g?D%Xy!<@cDZii-WAJ)F{tV%@ z3GXB_xfI9!;?>o0zwHl)BqM}{Ex-oX9Gm`2&zhvO?FMWkjyUe;2m4x$WwO6{vBBC< zf0Xo<+G)ZjPQ-nW`po^1-qreGCGJPf(Rc0Y@3_Yw-cv{2Q$JBoJ^OYf`*tMzb|iju zUZ-g?2EKPp;v;jo9n$4U=9GPjoKYuF9};oD;H1`M(TB6Oed`M{e|EkwlegaA%b%7= zQ#nY)-j8Mbe0)NF(sMHTtZ^gHCr>J;pOyRNQfN!@vo*LWGImM&T@>2IV&H+B3iC1N zYfHEAw#f(d1Mf`X9a{h|KPP-`0mnLmcb4#uD}a~3R;>;?VH3}7u+J7=yYTd{CdG4N z*C(sz1dYcF3)_MXt~tg&U+*)^4)z0W8*#*Qq9^!^_N3Cs^>>2ly6;k-`MG&D%o zBkxaGH|lY?99dRBuP;bA^7#Ng@GP|NQ5o$vQ#t z;vg?8y?dZlIh^^q=9cGWZ7IG=2AryO>kR2PHMEOGyiVuWL9f%aUlcIGJ4bj^3gG3} z>6rn8G5C4|_PN44U3mIelj3!?YeVh2+9ND%0XDei;5vxSY&U=#am4HDR`rRM=#l-+ ziw(xi%j(aOvcp3|Y~sW`nWsMG`}7<1&sOHiBK4!c=L!DM^sJdDE=QiEdL-W+Ah|Fj z@uTxPO_No?_ns&Cs2+#Qk*BFQl2}K=frP_(ou-L-;uz})`wS{(i~L#g;l=7VBW+pz z5yx0QCLCjng|{=<7QAV~yQBbKK4#;+fOQ1#JmFnh0588+=?;4V_EVmFjP88l%@Cgc z)ucFPr+u+DW+w}aeHqx`nu9fgxaBZtBaS#`mxR5Z`z-pL-uno=*mO&%pCx67hep`M ziI|@R5@4ZPT3d8nT+ zeWiAqu!$3KJXL+h_v-(Nk@OyAulmv7ag0AY)HWZ-E=RI1B3T!a#1;}iIrz^_I+5oeMJgi)$}9%x%j)k=*cLW(Ryi zac_|CxaQX1yIDD$IOax#HWXi@!CfR{-!8qF6ZsU!a6abZwRq!=89#W_g?C2*y!@P4 z8Za1x_f6mgQmRgM%zXlaSV^@%En21 zQlIQ^UTiQY)b~i);aQW^#^E%5p14JQ)_q-n(_nKYhBvAo{T*NUqu&11K_9YUId_H5y)*Q!}%aH#i^2_DJkE(yOy;(jc#)tXIy5;LHm{$mIjqpw)lS^?- zta-RPCPq!rcmKj-{R10Zb8NUx@2SZTUMqoZ#1Y5Dim;|yjiuZ58?eB;TzES}{U@cb z)J_vNaUv$V)o0U>^nIv~cuh$Ahu?r z?#%)wcvlK^DRUe^EWBXa7w9ucokwSFph~N7AkDe#P(DhNlrnJf|0gIY4_- z$By>Iyqm<=)z_XJt#a_G-yP)pZ+>gdZ;1Sxx4jYO|Ht0@fLm3SdHh$s;Kfj{dQ$|n zLxV>s{}9*V=3EbMCXH zzh|ny-+U1I^PCyDMeoK2Oz`Fj?^`AC@;2l-vqpH95xi#!@7pEt@;2@@V88H?5&eL7 zmGE|zz{}4;&zXMd7#WTCY~g*U1YX`p#P*Dg#+xs^drIKteb~}42H1doCz#I>-cI3l zvgf(K7;ewI?>jx&CoF6UY;et^XQ}S3mA2i%rxlObo~OSg>nHUID`mgtyXcpvB(v{- zM1q{)Q@%LR?@w8OKWRce{cNlOJ0i^a8sF!tzxO@}{n?)TZdE@6CV0;i-cSj={P^0Q z2Zd)D!CN4_@0Y;K+aJF_P1m;w4;i@z@A<;}K?%H8^P~GV{U$|(_X6SlO9{OE{Pq0U zDm-Mgd{+x^PYJxdf5yJ&epcUCeO@h%{$1|;n&SMj6uAge-LN$UJ&=!17fR-TEg|!~ z(1vz|fnYb-t$i{1*9h->!s|2#d;V+q99;e%rzC^I!v4Vq*F5&TbbP`*@mzsVD<1J2 z+@?0vby%!9XTJ3x>wl5{cebX0Pn{Vr%jnuRYs&1~8<@|L{;pMjfBYcy=Q+4mc!z?V z;9V!YpOnDM+mPqr{lc@1;0+3IUkSXtjeAX*F5Ms_`T_5H;r&|)y!;&WoLMP6WHjCl z!ux3nyu6Qy*A!$l-V25Ivl4iDAGR}$0XAS?4CW%?-6yO5o+^ zQ*5uuXuKB-?>|c5<>x#9!wC$=%zlgX&BD81c=~G!@qPNPV`^!8SK4+)U$S3Vj6K-k zn#cXG(%G@nwiDX4;t|{Hj8`;lg*KCAZ|2LGC!zc|5_S|76wt8)_vyQJA8`LswPf&L z8~5q=s~zok3Xh2WasQov=HYxO=f%(`1$t$m*cthx9S~v8D>FMrm+B}Zd#b)uqwtNPKofh@O`B2`4fz|^>ZqoDv8utTP`R6E@h8o z&3Sc3@BRHH*OMmH(@)`tbBROhf5_^3o(A?7&5u8cUnl>PpKtb8v&DO3zyxoJ@ct~k zOU)#rvH#2a1N*DB!n2Ivy+n8%M0di=`>WW$AR}UccdPJ@DuI{xr^`Yg(XrPBFmDsy zAJt#|HHFx}tQs@izwA7#FBuRPV+A(2<}o>ujY?*ZE5NOI#QtSn7=H_LQ1)TIjM4s3 zK3e@B6)K?5rCvJ{;q8B2h6!W&-#FYoKU zb_@y6GJ^L~;Y}!kmtTwGwF4RH7I-fc-oz4k`L%MX{0J%$G5$-I>c2&f~`OpEigU$++evqagP|^-|+Ssty4s6Xl zTo3Ae=**A?lk~iTw6fCBtrc&m1-1py zmO$Ix7cYE6R+swE*C4%IwtlYUW1pK3v9HL_9nbB}!s`u~;Jre4=asFTr*wSW~?8AH+qdB4c@siiR0-ZRF*2NaJ*?zkG z#c2&+v03eCZ(o7EoTIvVU*UY{xhjXA7wAQSVrS%&c0h!_H)iARd5jGe@o+x$0=0wk z9R?_vP&t31?lDR4nUswuwnch%pj&!gd*l|b zPJx2=6|3IVu%{PjkX|iYf3oE3hPO1v;%as9b+VH=YJZt4M>JkT^LFR`_Cevz3z*>DA-pR} z;N|Cq=h=X4%rb(<4e6C7@bdH4Yw{Z5AtT)a?@r-8tpr|v&k(Q4$Y{LR3vX@-y!_cb z&l133pJabV`VGQ+s_;6^+u2ix&)ZGs_9b;;vEKq4T=T%sGIxpaAhhBU&)c`Xc{z}qsL@w~YC-j)n~`)IhD2y;`72Ol@wU(EmhDajJ;yV!GqjgK&oeSepwW5`xKPE;k^(9W=rbGrrS))Mn&jC$Xh z_2DMTE3wmnjvYqpVnA)?PLr(XHT=a=wWGcL1@_{5*r<7GN90q^{XUfYeJJtQ*+h1TqMLe7j<$m9`2IYP~pH3O*1Aj5&T{=?{5Bm%3s)&d4p#y3MofRnk zAWc7@q#f`V1Z>!I8Cx@ttTg*{K6IwCY?Dy@UOw%%jP;avk58_V(gv4|N^NpuKj*+l zb-mq#>dHB~>mN=^?%%9;LZSf9o7HZK_|p6aeg8ZT=@qqZmWnAx(PUAer(t+!^ z&8Ei>Z|}NuUN$N@8b)0`!?6CWKyHl>1B+txPpc&!?|B^r~sKG(5d&ig6*QQqHO95BIqYe~Fze$+C8x4I-= z-p}LX`f`4XKE16C9yg^&rz^LfDXCx7k3;SF@yX%u^(9BCY< zulKKOss60r*hc8T!)RR$Xfre z_v!2_eZSsr?K$#gLbYFz)0y#_m?;l-_U$O`!6%|0 z_|kq?;1|nRW*nxi%lL1&u$Ba;dd-*Km;6;tS133#X?Mr3|3;O~a zT=UrdVcn;TzipBFt$4(H`8C02sZUrbn>ODapC6y(^~moLoxP|#jqBBR=pP$(GKAKj z)X(EBQ1!{eBOXxsrq`X4yh*zGtJW|_N~oX5WB>d}VG-*e)c-%xyG!pA-lLARYJZW( z;|#JUEaGb6A>YS^cS?Jhw3PaJym1lUK9%$PTCURxl6k)PuFNi9FB!0Z0ygR}S{J=f z(7HCWrvF#bxVPG^cC`1s6+XxJ{!#PP7m-gnXE9LjE1;Y&Krf5Zx=aHY{U6GFhwrWM zLq$BC59JKQ{tC)HNj{x2&*VjZ z%pUIVcR#H!nJO&C3T$xAgZI)IQ;#crTJbnhWwyB_j6d}W69;OE`7%bkLiu|oul)-; zaTu+OZnf#XRL@{V{fuVXN3$`uf5BdC&r$Q#j>xAR{{qFoK$$bp%c8U{(*VXA@nGET zU$CJf9?pj{FQH&U@h|zbveJNmIV2v~g8d72Rm8*j(7M_|X9h|?NW&9K+5!JUz=l2d zu{HC^O0!SrLz(-wNhotapLScu+WXB-8yj=^1}X6avc?vLGNKFQ`=IbXTmmoeyS#s$t9gcu#=A>+ zA1Q&C->=ht{qrUqxp%vBO7Z^H`DH1%g#7*$J&=zMJ|vkxDw*eykqfc^ejv1Qm9_d_ z0M~r?#p?#?4Z{1N@H+Xkp1H&QS-;K{4ojary8;_r^VqRfXDTZ5_ifPczzHv++E+PK(!tONARXJ;DtND(4Q z)Q(dDZ~MhM=6uL-D0f>oN^s416Ni_k`{}iW^Ll(5S%*HE(bu-wbI;q{@MABO@qAc5cB}YwTBq|q+w1fO z;dKX0@IE5E&zHcS>epR}EkD$ULCFGWK9&6XvmGca}~YhL2V} z;x%vfr-sYeFMBgz#(Z@s|ElD*-J@fN(YlzZHrwXal0Bl{!yi;T+S?~$f1V#v^VBZM zryQRM#V10UA5iSpX&hP?7dxJpOb$k3(h~N-8aM+ z?EAH*$APiABV?= z@1cCgyI$wy?#GQ%%%*5eoNpTM|MR}kYYFG>{H6wN!25Vfyu7cr@2`JO`}_#+6D9HT zYf0?;kpZXQIdZZ#pHClNsCQ@7UyoO8bBvF}XkDz(Jez-YW}o?I#?wyHS|Ry(W}KHTf-zhZ1>b8K zdmQfPyw_>BUdGRiSLbwQye4MKi2E6rKP*b1o52=3>{EWskMXiyM-VM9X%9XT{lK^H z3(fa5rzwAm?%{|$Lum26A8(Df?^Vb!wY0A9(VFWQ@Kf z!1ubL?C0)OysB?h8mT{c&oRldDr4L`g(cq|pZrw&Gc9RdrrgU;yG8R&ap{+J#=iZS zBXv6AQQtVG$Z?*qh&xoyd~;bxyt~Jz{RM;mLb1QO>MxN%e_fVlwE5Wez6r^_kIwd^ zrn6Lk;<2OBNYmug6OvD>&RK16T(oA%gyaXRi~dZp=iS0164uT*DfvjKlV-H}n7A$* zU!H^0r>jM8P+XwC5(!gpIVl;Xva8Zm`;QIVo5$lmH90|JL7b=Zk*psF3-F#Jyk21u z;l~-l4`fqMZ!cO}I`GwI`R-K7$-*MSZzStS|6BWx*p_V!d+8Gv5q|T&(csxh#MS*1 zlF4E0Oz|(z{Y7^g*9ebi_TSd|JvPuOEcwy+NP9jp@bxqk1-7hTS zkjkfAb5inQ$#;AwFqPv!Jg%n5H&tUxoGgDa692L-%(vLTFn^z+xke;RJ?oTYbjkUa z?jLt#YlQth7-jb1gK9_nhw`@ycZvu1THD?;Dvg$rGmJPmzbtiI?&+s~UH{iyJp5jw zG2jv3M>xMMH4n?meWTApjNvlZb$(gucHO#Y_gA6bB2GV4*Q?v`Nv_M@ z`QUsJ{u{oT(PbCU|Fz|*hYQvME{EhJLsr*K8njQzc?`Ai>G7FCtMliT|D^lffC=8G zh4=juc=_kfq}Sckur2$5ylpwZEOlSO@fr7wow`?#WZoi~Tdixc4koLw#)FccBbhzt zEK}ZAonMxk2XoG6DF-Aox~2?0e?~I@O9?&i$;nLm@OO0Y@nXFXqG*}^QZnNQ;`17G zZJ9qSnfH{Cc~xjbI|A!^b~XI-bHckgSO%kpVc1>bIY1yoY595KeCS0ghh7}$vjb({Mm}i=MCkr@HXnSB&ipOn;e06Xx_F*L z+1KXN=7AkA5)bUxJeY4qJe&`Ohvy}f{b)XI9_VA2cwlcnt7m=`@o+wLw%S223l!au zMpw{SSKZ1ZFc-Z(VbA7~m1dvLht5)#?HAUSzWAnjg2>ws?4Z*DZTiZy8Nv zzMZa-Gd`>DiuzI(@1Z=aXPs~#UM$6YJ{l9}o5pKS-WRe5rXFi0ew=IYzEBb`zaDsf zc|drU5xg&!#LKUVvF}Gl%eSp8p7sH>alkLvbH0_bFSWso&+1qGb3^aO+&84NkAKy9 zxXPyG?Avur=eN-ntx)oh`o6d_h9v-jQ=Fq3ZXkF}=ZEkx>@mW3h?W-jpXZ3m6 zA{fIpQSiN%u^;4|-uuFK>t%daKO?6z<25l;M%>T1JU**OH@z)%xLs>+%#ZQ1UB`H> zu4xZG5&gh-d%@Wk&tA`$?;~#amy1$G!bi zghhnkNbn96;Qd^9bzu?VHxj(M=CAu=dYbSq5*87DBf-NT7{`?U4hV|~zmbfGnjV?A z#^dbTc<`f6*)Z+<&GND5xkR!N@wa8MsJEg3kNxFrVG-ds61?37c-Zsh!Xm;CA7@>3 z!mj2jznfRww&;3$0UrKfuCR#kD{9v&ulHY? z`-^^;lMx3B;Y`Q{0W2)|ac6yl9(cdA%nTpVjZvIX#hQ4cK4Vv-;H!Z^pYp4EGC*xLbIv zM`fQ)?3{Xf)3XHZ<*=}bH9cG5` zosevMboOk=l=W@b(WBA`@8x%$l)P7Ukh@dZ@|E$0&lbO@=ZZuE`ny_qy3OerX8%IJ zbrb5Erv6XQvaV8GxHs#s%Q^wh)%PiS^<0Ggv?={ssplrd&B9xA=;ZWS^mTxB>wl8} z;pCQcW_53Ke;JSM>MN1J_&!m6DD$jn#ZQ{Y7k|+8ZV93|_dcCx{qOkX4vp_w{;(bwc}YYly-ILj!0Pi+f$Mrl?|q;_8(hrZk7*! z|1HTzB(T2SE&2GKN~dt>=gs=VUV5ZE;_4q~`wc(W>x4&r*EL0dqlHD>7x12_@hCIC z)HjYP@^uS~I8Ecv_fcHdNj~bkt||M;qlHDpo;qQ~<=mf+-Iukozo)#+ef|=)qy0m9 z{yrog5A}12>HnrZmCkqkEYN!395z0uaDG{8J%dBwT*_yy#&B6yqxoLO^;%K4lecL5 zEYR&;-xS-9!voSqoPMaT*R|lo{~Wsi_UyYTJimbdra+5+f19YrwEBlC92 ze4vEP`$C%(P#^SRuD++~XLsI9ZCxYtS0(d*mymf)G(O-g41Hj1 zeWpkL*M#?HWuKq&i+nVMEEfV8?^55{m4#X5Kcsx_zA193ty5?*yGHyi+;}r*hs&@*d8V{?6APkH|id z{_@UJnSC~f{X5xDwv*8Rdt$?UKZ%ZQCgR20ArnaFmL=_LFRc859dQ?s-67-6dw6>%0M5? zQ35{2YYg+!JhIa4)A`URD9iH~dU-+GZPCa4$$iQ8S7g7D&b*?m|5q6;`afLu&nrS* z>MxN(?$$g%O18rPP0EMZKj-~M?1!cWOz?IH@8}YEdEd$Z6@x#0@H#{K>%!v)cslu^ zy{{VXho-+;zdR8jOW@`AG;4xP=)`js z8NVsK<>uq65b<(*U9ehfBkT~uYE-SgIfAP7ht0s^EmVytsj!vdV^0Z91b zu`4LP9m+U5t;;l61jgPr$r$Oc$+tTnif@O439T2Tm6ZnUe(Q<)zqD`2d^oy7d9gX?9;@8Qy=WU3yC~)e!FI*om!MjIz=askpYB(EcJT>eU?oE`Za-D>J)#qs%9*SC)rP7Us*QaoHsFBoJS^X` z?oHYoOIO}A%>JKjuKPVz{D#-ssCnv7$fvwN(8mXQS)lkE%1Jwbu}M6b|9*$`ycRs1 z51pxYP%xoCvRvMVMy}!%mtJeVhOHn_Z4`uHIW$yz;ZYVsR)@2%)uS>;)`Q^P2 z{-B75^P%*^egg`Rd^%;IkM3}R@9{dr{522PgE}9|-pBJC%HAiRrVRnx*nC=FvivRK z+)?w7{7r$rq|I;O%>RAEw=LDc-aAI`#)uz!%!l|MBJW?k&TJH3Prw9kNO%{Qz{~qs zuQP{)Wf{TyzVHT0;N{nu*q+DZyB0LDKc*Oqna8#c*n`9s6%NPy(A;Y^|^4hq3>kO(7i_4A zhx4J+)y}pComG%F5B$p#@xT`BU$Cnp9?pj{Z=vT0S`UIS^T{~Gppy9Q~GZ2cLM58s*(v9HL_9nb9{;q?bh@cvbJ&n$tLpWEKwA%kTE z?}x&hR{}5Zd%A;6=)^u0>>mm5>B8$Yx3|83_}r%L3SpsJu)#Ht1;^>TuS$CysN0H1 zJh%6#4Rsw3YCO$%_o>Buk+s@~5cjJs|99{e>Wk;Saf&GQKN0Gh^4#rR!XoznG5h}d zI@Mv_?G&hQ989PU$*{%+iT;Tbk}o|vd(H#p`3!iw_0A8Gz~0|=(u_7A z12^gZE#N_oSJV3&L;`rO(*`OnTCU$a@b40sVt?-y7LfqnH^i&Vy~#nn1LJWpcqh40 z8@j&$?+Vr5C@doU#{TN$WV-OmJnQQ}y1Bo6N8n?^BEpaH*eE={pVBEL1$fxsCSeib z$C_4lJcbJJ7>`c~iwHly5AW}#b&_xLG0pv*twx)LMTB4drt!%W)L-sNJB6hMcs$$u zl(2~KV|>fn%Z>uPp9^n`u!!&*30_}!bAOp{pA{Anek1AcU;!Te-6||1{6;b!YT9&O z)f3^tk2+;T_o(Ln&QjwqNH*dY;qm`SS8IIBJiDG(fQLPA6BZGEJX2jzoI`K&22* zx2$~o3-CA}{D!cI@T0%T$30G`(0^=mf3fGC!Xm;C|96e>%B)980UrAMmavHM;~nU- z{T(X6!~S*&iwHk{ucWNK^u4S3_f*uiu6u+U#!X*3CfO=1 zbOAQF=D~eFI^J^l!fCV16jSS@PQM(TM|gze8;{uCFC4{;py7 z+tiNswtL0{U&=T~&C_urpK_k1K{@Y$UKA+f=(H}=U<}6IcF!0U@o+x$0=0%R$Dr_l z!oz7@ronc<^R62I8og_9T+r1i8J++0<6)PEdZ0cVS+D!mkk$1v3HuWPw7S2JZ8C2| zu}#hmnBeUziI=x=%U3_XA>T6L{o8}YvwW+CcOb|I-cL*7<@@`<8%{o=H_Hg#&r0Iu z&z9WZX(u%L`*Pv!7ha-qzs!Ra(Re)acHCFuhwwW2u$7-5?!#!iTv(h# zf(@>DFu(9)KC`55D;}{A8&VtUI@CT>OU#!sn%J9_uadm>Vd%sGAGYFC`u`N4t0fP7 zvf;y4s2%O?!?2epsBYeeIUmZp3T0h|J}uD8qO>m4fC&4=gK_t{Ha1km!}-ul)y}pC zomY@f8R!EaHv6Or3ASKAiCq=(a6YuIcF>uD(ht(~14`P#Yd1FR{QA<0i8H7_Y$=^ysehhzu1_2ht-bu zo_mZhb1FagoDb#yAV4`gfj%=(#?fhArU4Na_Dx6_C(k{fx8`{`ANo|avu!}<7o<}L z`tbe%`|{kw4vPBWeCUAMLT3d^KS3#@b<1-_BV+vqiM{y z(=~F&ze%)UdqbA8cn{@o67dd{`>9rKYmh#G%csI zBY06AU&j4(9+Y*#0o`=B(BT&C!D4=lm+i*w+fmwsPeecP-BR#f8_sve>U%aszKb)G z=NH}Mo6ocG`6mdA2)}kR=F8?4;2~eHu!!(u9<|bK9&bYd9`cG(LT{D3{m8Ge&Hj=dJhX*&~s_cq~)d@oB34$BJnaj{IJP zzsm^TX#J)HG12o*o(Es87e&}RbPCirjw#P?yM;v@3V4?bPk$Z5jx(Bnj~jcQqi46o z$tq`lm{%vj6?z}R&w5R<=Vu6uxHRCotP@_}na%Qnccrk1$d7+1iwA$#HKo6Eg++uP z&qIEoy%;voDQr=F>&6uM9;vY)4yv4c5tnts>wZKt9`a2V77>0U!JAir$Mf5>g++uP z_E%QE4F!1YU8e|(2tVe>A{k%2&b8|I!2&#<-<~5ZBK#gWcS7_mb)~r9q zW2&%-@EeIeuPMM|JkApq5q|XdKuLSqUw}7Tc+-SMgdgMkNa;_I9Yg=5=KkXE&leUE zej~BxqyX>d!s{1S8dW|LyrBZT(}Z`S@QCmmNq;9lvbev~g++wlNX7#N+xAU+lxIBn z@qB8M#-ofs*ij%K_j*r~Y{aE1pP})6k?<{*zQ{3ML!Xm*@BK#QN#U;mgUI8BREfp3Kej~BJ4F!1E-%Eu> zgdhEVRmt&P(_(y=35y6n#uvOY<2(5U#rk`ru!sjke|@hg(c6Zh$28+%&kKb`9FY7Y zS>INiH2#RMw9iC;uMidyeax*-NRC#2OYL_H^oPB?Kv+cP594uDN&VGMZkCVre1))x z{nE$5C+b|iq5A}Cu+x=gjSSRt=pz}B^(>+?8eyFaewBghLt?YX-Jnw@4 zWSzZ0&$_GeDqWon1@_?3#pgBTezguYexj$=4iC;dC&wK@;rypD5u!v1?2&wWTQ|Kmx?MA-!P05-Vh zvFizX2SWU9JJfH*BYsA@G}svR33FtF=DS;EO?p(F9{DLEXM>!*+%Df&=IpQbxMn=o z^5cX>gx|hP8g){E+I%c2z++yI6&4YGBf;BVfX7+W3Bn@6ZzOoV=QsLdJtAMPu!!&* ziT)NA;Ia2RSy)8)jpQtLa{(UX(I+e-{O~iDU98%N3!3}OT6wCli10(c%VjV6>lo%1 z;PHEG0U!K?Q->yN$A znZhE%kG=C%>Tj8QBhGH!7gPFM6BZGEjEBoQDe&No=Cfy>eJs$qGm-y|$#|4KduE-P z`1s66ZkK=c{t2J!fG=FG--fJzr49DrrFEGGMA$DLtX+NwgLSZohx4JAs-4$MDDOYz((A3-vClc=#O**2W?p z&WG034mvYX`azn0KuJ4zePkW>`%kQ8MLe7jy;J~R^Pphn)8?U>n1+4-oPAH1wTO&q z(=&QpoA2pP4Rxvi8Y%tvn#kV~Kl+jn@%|;h*0Kku{&L~%l}@<^?~w5BDS?;YZ+QO# zj%5Vz55oKB5_tLj(54_0I`O^^?Ee+sF5wm3E5&<(-S-aP3($6ou+S~o;F`ypzn0&T z9y|`zZN=k6m3jPDgz=(2VeIZ&V!r5fXDA<%yq>G*#DTebP&Tmmd$nY<+Ip@|)%{l5 z{!foc=PTn|WPi?wGFPF@RVelc#V(xIWf~A+wRkX2o~w*`5fA4>FI79+29&v)Pp1s@ z!CWPz_Vwp8)A@=W6!CCAw5~SLnSs&|()0sL+JU(``xAZ1uAy4Ov)N_O$n1D;pkJNx z%cr_-JzOkP{RKbF{+}n~PWGWd-}|2n-xsQ-a&YbYh7C{3>XNrY3j9CW;lD|q*<|EG zJn!;$?Rj@lc=G}#c!!1e(-L^C=G}n$U>U*tqws!K0x$0u;ypbw(lzk@B)t74@bdRb zlLH1iwtoZj&%)a$yiW7D_LJfBc>3nPHa{9M}W>gw!&06#U)wzg7htS=XeP5jS+W1a5^ist~>bu=U z0{<_5vC4QSwNqeDZ+}W=Prs6VX9(FGa$EfV64}`D`)bM5A2s~`yAfiU)qeejlGx#KZYe_N?|zP~KV1r&9*{!0$gG z9{3LL(eOh>Je&_@-wv$@N<0@!mu}#A`*~cY3X;iRX%d3Eok{>n?$p z_wDf>%`$>_wD3liz{{^aoLkc$bmBFX^fAI~b)FsX(Z=o{?%Qd*OISnFE!g0i$JT)f z31i@Kpl&N3v2UMzQDZD{);ChjFaaoV_w9=`A{}Iwhid~f^^D2 zAIwz(_T{;X9Tf3!K6F5BptAy{AEfCAH2+Tf;Xmttu>3sx-W}tpYF!g&W%RdOUhrws zgnIhf*mI2wb;*966w)obI!*YqL%o>9^C)kpo=1y>w^KSb-YDUXD}mQ;9$7}@8!f!k zOW@__`Pv{8IL#KZYe z`~b8bDE%NkJ4)*^4fvJ*&!3(g{8e`EGWq$L9glr>MnBl*-euvXSsj4xkV1N7SFN6x z#q%g{r=CZfh1VM}!5dQ&uiZSdjNlzt5-&f`z5dRf-RLhbu0QNS;<>-;!3&t+jV+1S zs=o(>Wf{Rcz9e3LJmT-yrZQ@L!8@TOUjE(``&jy?>|Po_LAvj$8U5sse%^F1ZGCUQ ztfB8a#s5U{@0T543_vc#_Lb*vefNs@l7IJJ!VoW18p3}3X8D<8(i~PaHW1n zMlyR`so#o6?Dq%5_#1zf?8AH+qfMcFhUB&1M<)*W{WbrmGp?f~t7uOs=$(^|vHd>w zQuG@X&WHA^EtKEVfL<0TcILD$(|`y|#e;FT-^YfEcsL(AQ|)YPP<(Peoifk|et(a6 zU<>y9*i{h^=R;YypzO1t^aDyioYrL;@cRU8*!McvS`iQDL+OWY5(o_0!7?ne(23il4aU`F#10vMs>bZ`1c&_@HC-xtSnA!roDW4uFn51VFq?MHh@6oU? z&sFRItUM3rLz!pL^8>913QzJ$JAmUgaY+4f{u|VRak7)=tNw#M1DO1Decv!(f_J*` zUQhxrKQDNf8o8DV&oY8HUU+;bsgr#9dFy#LMK+6!V1qY7cneG5<@W$fUNa$Cba!Kn zcIn)0nlL>^E8m{YBj-c8AAm9@(Aj}r6s2{U28lN8y%qF80WwdN%-58Vng0=xf`t#> zkK>Z(4)&R(&k$a#_vYgJx8)}c_YEt)(w7Vgi{}?$gKHk_`|%Hc)&ZYZJYwH4^_jzE z?j18JF<`^<~+c#k2Mdt_3hjI=A<^BiC zy%iMOb6S^aK!h3dGF!E8!0wB9I3LPp)$;?&IY>U8GSCOUVZC@@zvkiZ=h^OD*ZEL* zc+NndRgiW&aJru*J&T9^5A&m_AI^sks2vpF21Qp;bmg=z)6g9#bJ2SR?74`C^P%*^ zb`OO|J{_P_+pv$@s{S~Cr3UIu+52rlHs_nhYkz+Jcnm2Mksibg!j@CczGYpJ5gZd!y|=vtMJas7buu z*nD?i(yem<&H%v1N0>+L_ADJkw&D@{iv{6a!R=O`I4Ln-#%Mz*f2HKLzd$Dr_={y~ zlbk#$>F;g$i=O$}7~5Z9FGcq0d?@|`iobwjpHSw2)4EIpA}kgU#@%xn8!F=Ad?<6k zwg$ytz4h!5zA;A^X+tvobm6COqR~vrYzn= z`FkV$zg^4oMk!`;G$zhBjs0@oPuVZ82QOfPcUDQfc7D_{f_HXFyu6>s$88M$*!_V% zstq2`cm4Y%^#u(*xjo<49Jofm5u&pGoISdZ>9U7UO2+E@Cr-DbJI|1PNPpIEY$NpF z0iW3;yB?gF*;D@aOZcuo-%sWDOY*WsFotWQ;Co%*+?ai(&yU-!Jtsv-2O`@d+jvox zBbRYMk7VkCwafwC>8Kc&t-z5f%}CMY6TZ>$|%6{gBndBEpY(*-E#0+`$4oW71TIk9X<2a_4043YqdgR{z*hX{7bwJ;x-6O5$yJQTBckHplx;&=rbv z^llQ7!0*FTAL{EaE{CBjPMwJO*DB0pAjuImJ*^6u^96XbfHu1&#v zuJDKi-cS02zg@yBWzTAB98>07U0B2|!b5*wDv3vZO=On(;>_yfVKxvZDZxd+qatMT8%} zzfsm7^xfDj-s7De_$?EF%0y;;)$R#xVtNy0D1w8;QT_mpyx4n2y#R9DX%kSZxps^+HzbX5UUaR+;^3X{E9{ueV77>2vZ=7U*a=vjvdZ+;JPSrbESVZ_S zKlV!zW&F$J7dQ78{q+fp2)~i+hn5!LVK1i&iwM7w;O!{D!=H{577>0U!Rx!Zxxe_+ z@xmg)ZzTE~EWo3`6NN>DAK&RLYcKqNJNp$=zEgaru!!)(UyYKz=oRyhVLuWP1^ z?@rAPA_0HpvQB{AZ|*x%*KO$U4q*`qBk_N%hwi5-zUv(ImB@aH_o7zIo-a<(+kYf4 zX~uiFnoJfJaf9&ie|vs749ueSr_-JuS5d#_Z_NJW`EEv{??l* zu)kfxA`?(|LC?n^>D#F;d1xVhTN;9&_^HF)%DgE{xN?3l7B89zi+xCV1jp!@LKuX7%%@0 z+uVRbAAIhQypIvyTO{9EByxfMAI}X4`~Rx(oQw37pX&e83kzL<4X$|%zD)L|wDm^) zRy^Y8&O>TLU5A6xzxkqri7(B{-x;kB=)?h82Tq@qY=5NQRhiUy?z}?nXzypKjK||t zH*fRKhw?rVlxMEc%L2VPO6xKW7J;$%yBCa65fA4>XR5Ww5(jhjqEJy6?ZNT%e?5_YP_{Db0Gvm=()mMFT74R zH04plZD{fSzGS3!s9y->X7{w0iCDu_>}lytNGAwd}E(;Fz5-q z#|rP$CGhe-Y)8PL54Ka}nI^nX3a^vB3_NDIy{!9%zW*&ObOAQF=CS9M`tG;V)*F0U z@rdnZ_A7?l%RK4de9^(`P`*|2+FsC!1NJgQZEELCN)Czkgo1-=M|;}~<5A=foDaq4 zK=C)P2bmf`lK{kroWWT zjI-B@A<2xc;ftOxl+1fe$h<8lGws)XrD2;}9-TcSwaj~0W%JJYQ2ZKnMxd7mIuNCG znFeI`dbCnwimoX@<|jzz`%1{n`{XHD^s!2|vG$r1(-`YHs?zjK&h=VRx25l#uQ-ja zxkl#clKICaWX68o9?JPBlsRd?OZthzt@bbQ7ZRjI9wjT%cDZ=}y@H(xR^%=wMWyJhr@E z@4+hVafMGS9UP4(fp{$os?96FhrU4Oli3j6u9@tP359dSS0fh$?9#D8Vt;;kp zA*S7_wNN~~ufwj2csL*W1hs>L357>Kt*kWQrwG`veId4H9$9Jj>3rz9%Cb#D>jmko zRm1l#P2sM*F{c;TYGghYQdBzEGF!w@c}NBilVFex2rielB?K4+?LG zbZWf1@cyR+Uc0$!8If2D?_2h_GF z6!fjk#>Df8@wNR$&C_uwpK|6Alz9Zj#-Z4S)4EIp7|X{`-!tr$-GG6P?XO5*D!ikF*J)l3T{3)LcF!H3 zY!nt_1va?m(Yt0s!kBto;nRvoJTJT6)EHaZ%#eMUFJm-2lpiN~JulI*1M_mS+Dw}@ zDcL956ACt|9qm15uov5N)I7B#@+oJ|K$$a8<_r|QJFUw!fYG}u8+Y@-hKhI`$yYf% zNW%jP4=6mG)@2%)mrKP1Tksl+T@~?gK9n`o_6LPWKAkeqhu2VS*mK{{eO>0d&WAGh zZIjS?LE7!Q!^Qg9*_ki4Le_$}Wb{ur-})Wbt%nQG{rPWh*vA?veYR}3)q4!_{ds;a zcY`qWAKZIs4bo&VNsOgxVm-^ZvC_7^oz$DMr2c|Hz(e4rNx$~clw+5wDh;=wqX z2V-8u!}(BnK;Z!e6ABNfb(sd{DgpcQJi-plBP-25oe#wi*j}Im1!=cM9~)OsNZzRq z`MYidPs_gR_H@}vyTJ46{CCs9nWJ`-#dnMvkJYp7IMAm%LdHt*iOaa2FInQec&xaN z+svLjyuIs|{jQs3G>!Rox<=0UyKbwlY{*g;@1gvz8|QrP!@H!IE21%RzG>`}@;<~q zjB&>_7GpdQ={JTOuYn%OB zT>me1y;VAIg|%sZ_Kft*duGjyF6BfD!8(i}k*raz7 zr3a4#^;_|X_w*~mcu}9QQsWu(T_rj3I;OL9J@pUzo{8c}L;q7IB;Oa_7&U|<2flK$ z-q9oyc<4Z1=%b9$$RT23v7k!T6JYf+D$oFye zw>M3-|5)(;3CVq-E|h2cjPFZ(Mx~L~d~eEi+M}s%z(d!xIYD%R;!@!e35@STl~Jct zI4r!qs{064G-Z5m6&8_z&wHurOiEMjKjwTO!-F??P{wzOu!sbFR9X4fwZOYsSVY3& z-=31ZHSkI^+I&1vfY+_v`C?%a34D*}D<$z}{9SQ>UnDFdf%&niB;Kk5JnUtWu!zR9 zZqtl5AA1Y%ShH^s7LmYsl-1wV_09d|jA2k%MB|m!-|_-H`g^Ughy?7pY=3tZ;L+cO z!XgrQW;#RT!FQoLg^3?*?r-X^g!O`e$NBL!CGi#);N2i076^+-;2wCX@QzPY?LW2^ z;L+db3X4c!{vuy3O|}0RdslOR!J98EB7yNJE8ha){ZPDl&%_k}a-Oh=1p147`s)}r z1w7tg0T0S}OcfT9fP5cQ*#&8;{m0>eM_urE?+^PsM_5Dxc$AgFoAaTpznqED2Ff}% zMOZ`v>qpu7wl3gtRt+8$e|5I7hy?DX%Fee30v>02;6ahECM+U>@j!o*(^UJ985^?x zQWrcenW_HH6c&*H9%W_lRt3CAsvT{h$Tv|~L;~Ycw!eD=9_uc6tYM7rcwrF<>oh+o zqfVzV^}|_z*$>eMihSdQMI_))%gVPr;4#<1!zUr%slp->n7@>j@dvwv_phqU?(~!=8JEMI^AEm-R2(3h>Sn z#tFhA5*GdY$;sbKzB2k7`_bn9BHvhH5edxSx0USgf&x7J>2bm$64?KJwItrAfcIFn zV?3b5!`j;u3A{sweArT_a5&(h8}Oiv@Ba#mNB|G{%HYk}nCUN%cSu;ok%n~zcN(lfjb~)b)sFUle#Lo7`Yc%ubwqI_I3LP0Whm=1l>0I$=PXX^ zG7Vtt6A#Wk%!4zOA|B3%!UGBqC_JF>a9WpXI66?yYy3Q$bCn_<&WG034hkj|9{IGg z(!eva?vM5*v#-l^xBZiuz9)YwqdkxL%+;Z4itFnwizX%Lo^urPHU@g;Ee~AcI`weD zn!@G5f5_@`{T?ass^ipN@=Yfr7vgiQ{5cV8ysK{rnBYBIc(Y32<YbjnAES-8B5%X~7>)N!AMsU4RX)d2mjM&a5{eTk+t$r#tXGq&DF)C3~fR z^F;^sk7wnVOJ2_tbmG8R?NFPIFPfCBxUn%$HmDu#ZNrSm*{X|OM9tH2BA;^B04R0{ zg4`-#EH+$~Uy9L5~ zmhd{+?1m-7ZI-t4gvGfv*x;H6J^{NWQjgGzM{Kj3!dZCMLjH2GzUvbBqSJ$+{P~jC zHj7Riu-TnzQ@=&ODg5Gw&CcJPjfw4v@jYL4^ET^zDEDqq?hT=r2Z~)dt;;kZ!Zz_> zoXmqUFXG{RC_JF>fWiX`52tmR25gpqec88T2Sq%b55=e3UZC*Er@Us(ZClSYzyTtk+5Sz zC3NC|9j{lLG@1O{l$XjPc-qXXNeJ`B2`ifpVS>#kQd6-DzE>!6GpB z=D`>h@o+vA9#D8d;Q@t*)4EK9?Rf9)*?X#cw`b#7|7u1jy!FIeT(|BE(ZjFIz8k`r zko`cQzy9~<&vmtWxUdcPZ^`PCy-uB5C>u#67jq&X+S%N?updc;w_jsGTkx(C-kl}z zTFr^+>Vstj?^@x#z64%=?IAt*J^A9BAD%}4&J=bL2j@eVssMU>pgc?@{jw;n%QP@% z@p^Z50-A zq+$B!n&soH<+H*f5;*&RXXrzk(dJ`i0Ur0_TZBa%Y1mVMhyFe#EFxjbH7AwU-;}M* z{hcC=&B7v%G%PE?qraaJ7LmZc>DNo@Z)X7>_x78FMI>M^wxu+q&BwUUH}@C)eN0%y zk%mPDc!veDQCLI*_ENULTMO_WC5(>9j7>;Ps4k(|cgno+2L3ht}2FYZMe7`E<%aAKl?%+iSD^#{3=Gm~IR7 zHwF6*n)JUR8&B36(t84Z%EsItQajpvPB6Yj_Ue2na{|hofMTyu=7iI_OamfJ|B8M)LOeXT z8S^3@&WG03&b9$%Zs*g=O2g5CVqfkDc2LB_`B3@+r5{lG0i_>K>oN`Tz2^h!kMlpE z4&Ep`Y4tv4JTLNg=Xo(hHoSUjqzH|i&et2jNsiQyw8@v%g@_* zPmPS0Z?W(`R{}48Z=8fZHTP2XKVZICc%K$tr+Kz}_3(K{+v&pMo(ybo%>%#4Tq9DC z(27Sq&sK-~ysU-r_4^Oz%NXqm<=Z5$=NUS7V4l^~X6jq@|0hLzLcxr$Wn*mn#9q!< zS^nPG`B2VZpq#%zFAo&Ea9WpXK!o+;!MJ;#VM9ecoDap;ZEMh{6{J%J`e2@Q->vsQ z(CeSiOe1zx#KZYe`T?aMQ2GI-A5QBs4PHaBVXvXsS`iQDL+OWY5(>yWc#X4+;4Kl} zJtgq+zG1TbFZ|gj_$-6;ON94r;dPpO8{gSH_qGU&{RY_Jn#bmE=&Vs`?@i#-ibp*6 z#(upq7PQ&_Hl0fazUXvbD8E|*^4#JmW!GHu6Z2PH9E82fM~@do~v8cCa_D% zw)g9|5hA{uKAL?m0DLOU|7J$NbkUxs`;8q@9giDrUaI~cb&j5AkjRC&zde87+~2w4 z2QRSUZ63+D^qfX{mJ8TcJmUUt4Dwry?do65_uxNf&yT^U&i#RI`~1s)={EInvHg*m zz4V7VWZxxwd71jl{{y-q)Qd@Me|dX}*NXi?PVklmyw}G-;X204+w+!yK_5JBG<$i# z>ogt*KQ(+jdVb!W>=PEc02^HMSo&@4*_5{4;DZi|c*Nr|UG1pr(7kz567zlF^O+9= zpE`R2o${?c~0FyRF@yv<|FF5UYnZMmr1 zibvevDQZXEBjF2^l9+G**E0J9pE~2dlhKcV_`d&gn|ip|`{%}Qd%0|b?B$i}FaNV) zkuxLO&R+T>p4Kx>mj}F}v5fV%a7VNLdL=)ygH2z|V}q{gBhliu`act~{uTv&xXpm{ z74x0{?aW@lr%um38NGYxg3H{d9xj$fb*yKKUZwtylKwjNcgwEk{&tBUyugOHdFcYctc`h>;mU(9#Yy;*<3r+oH5XY}jmZeqKhhI*jB1A|A2+)&_mJ%^vA1 z=3Bo{=O`)!pE|R@o6)y^`6h2|j_fxM{p6&y&Rsh$JZAUMG0DsTN_$>L>iPPG#}F6S zAC^4*`Pp->8$%t)_WQE--&LJ;n!DUb5#0X#Z(Mi`k@n9oXul$~zvS)fvH(ROiUJtL#qom+!q5$rAVX z(0>o_@1j#Rzr_z;V8h!yV2MnYi*zdP-&pjK&6371C<6U4OAMaG*D@v(mP-&pjK&6371C<6U4OAMaG*D@v(mP-&pjK&6371C<6U z4OAMaG*D@v(mP-&pjK&6371C<6U4OAMaG*D@v(mP-&pjK&6371C<6U4OAMaG*D@v(mP-&pjK&6371C<6U4OAMa zG*D@v(m zP-&pjK&6371C<6U4OAMaG*D@v(mP-&pjK&6371C<6U4OAMaG*D@v(mP-&pjK&6371C<6U4OAMaG*D@v z(m*8lUW7gGI zKJDsf&wR#}mtA@3Gta9%c(ML})Dk^D^ZM&+x7@t=#+$FNExLa3lG+Wo+$uFLz2?Tn zx1IO@Wml1H-l7|CtKD$>&DSxYH3|08Yi_+U9q1Qd^YYrY*Vk^p`L=6rxcNac@#YuSZhP5n*Ije-4Oidx|I$c0>1OJ~&q!>OWp&kCQ1SiBJF2VaNXeY{ zjgq~0b&(&32Crj|WdH6FU0r=jnGPItM%uPf_ej;Y7e#W>VAIhVUflR-C6KLKWhcc2 zxoc#wT&7eZKa3H{G=1>cGm?Xc#w8C^`q1dVY#)y5IyU9Q$A;@hB}==T`-Dt8LjExm zySmT^d4K+MN_15ms8b(Rj5lBTtIz9Aw#+&;S@GD@lf7?wc)~E#rYLkrIMg|$vHj~n zX9jw9pyvmAK~%2GG#GzVuAk1gOuHph-?URxnHbZeur?>tAA(F!WP&0S6q%sNn?8o3@y-{bSIYo> zjMARhq)!j!6GZ=4>9L{?`SJg=Lf7vPA3gWb;negf-!=A(g#O?I=nrl4?Z|5v%G%Ac zp5i&XGvtrdZU)8_<1J9W=iC0rb@l;05e|KSSgot;(m<~WlzB$}Qv&^)Kq+^i?H*xm z&h?Z01CdPq=Xdr2>vA%Utz|Mn;R!`1C^A8j33`R7gU2$jE9dWeZEv#wl2emJGHnfh zsj<=-C8N`hYv`Ny$Ja8Mpzwqu6LeOf=+Wi6OoMql-HDd9uRW1`#)MaIujI?$lFhmUt4;r_BQIz!_o=LTA{{UrPLZ=2gJuPu%GM*BzBGMS+8gd!6ZnV`tza$Tmuyq)eu%Z}y5U@I{m zyyk`ck&fjWwX+X-Fk^-sZvSBPyG~=WOM4afC-wogT36SjRj{;IYnI|dU9%q$>6$!2 z=K$fF^pP;az0KxmypLdn3-oFkppOgbF@c^DsJ1m-e^rzF5p|$#9EyCv)wkX3yV9!{ zhstg@`k13q``xqm#I(O_bzeDKK7(rgwXUvl5&eJIJ0JL{va{}I*sP+Z8kKHI4eVvh zZnJH=Ww+@r+otU-8(Ox_?#6{$+NNe$k~G)=5yCEQX^T24Dpp!iX`3o-QL&<;Vns!Z zii(P_s8mr=qf(`cl`1M~wD0eG&v`P3J9jeo&dhG#&s(2Q?)=Vu&Uv2moadbLoOAzV z1|EcLqu0l=f-jH{{FLVVMw^emCT}Y=TJ`@|a`>^{{guyGgPWOKH;lC=2TDEvj7P1x z|MX!wI_>@w{E+aAqnj*I6`xKkc9B^rJ6CkxL>N!Qg4|;Z&q;H^h;4fo*T4Ui7C*7A z(oZfL!#lQoX_+;LeHv?ypk?hy-nY2!<2!X2VZ+*IyL$7k?Wet*=>pMrQGDAIow~37 zK5cKH2l;y=cl`vu)}OER*yr)(9?3UCcEggT<&}Xx^59R3fAak|mxoqAyWFv=vwZox z-F>lI_n^8|9$5(a`yyu(IOxx@iSq|Na?NM?O2&lj73oU)3VwTM#ZM*KWcS4?Bi-q+ z&tnOjRz=Px5I=y}1mY(UKUuz#F;O>!uUyJ~8sDyokI5#xCT2+j%|gs8Jv}=C1_ynFw{Qcur$uenfJ%A8ll8AC^30u+edNDX71Z zF@q26n!1txZM(m-TngeyxSxJW=W_Rd!V9mqc#Ih#QI0Adq}pFsR%`AWuQb=!G8%sRdftVkaZ zXFWgf_*$g-VEfcY#?gS}ZJ*jmpW_#+zmfh~^vcfiw2w{b3ip`fHj9q7T|n4)%l&~q^5B=nx42f8P4(j1N|i?zLVhH2Hi3`%b8ORRRbdB^-N$yuyxWNe?1 zyv5o^#^Lp#{zk?OKCpWNjr8x7#>6>YWc}R-WEBVz}HG2h)p1IF_|w`Owg4NjXI zBX5tKO(1>%u?fUa;3|(vKZ%{0vc|_v5|3fPVyEP8|ib} zVD&fBKUdYKk@l44i!iP|8M(N2OmqHwxhnJQI5@Q&C-uH)&2ID1`4?gG@ zvjKdOKPRqnPFw@OTKEoO-njN2$xz379Yc@nS&4}Aj(fDvR@)e#ixm5eKe=(!Tchr1 za@%CYD-|)tHg4R$Rqw}lE8_-!bZvS0y-{1+SLveb%T)T@54d+uZ;;u!W88#7zW>*Y zmqxuWzNa_peaYQ?+^3KG?p~>n`(GUOuDVC5`|p1VANNN0th(>+`}w>lPTzB%(~3^B zTUGT$t8TQtTWux2^DJer(t_9rMWyir{F4EHgVM;rzZ&o-l|}~siWgV(oKhMY_!|N~ zI=?hnMXWF4I=#;&GDoz7`fi)!w6*PzoUPcizJ?68gfj2*GT6Geh75LwGT-B6Xvd)% zGON}uzo9+f=VkEAHOVC352ig2>Iezmt`$qlHwjI?Lt_U%1Rm*KT1F>h_E6x@)vtTi zx`*CKDOc{fBco&d^NHg}FS(n|sL$(qsIz>*%Q|l5^8-;^+n4BcLiNBUu2LuIg)fP* zK$)-5Ik;GO+3Sj*C+Hk9o84KyPh^j(F2)Y)R=cks{_rEOdT4+RwaA^XTmRUa2Ob`F zte9tQcV(mDM{X<ftqytbgpGHS3fW6a75br$K(iKSYSg?|yA(`B2cNIKzK@EOKow zs!romKk1VW3zWG<=isx2C%mp!wz;%QF-Ll7v-fpu`E5Ld0nk+weEdY@+S;MIj7`0y4>&APhPHzA>t3&`m2F-1QtgSP zm$rHzTU!Tev{n4Lt-WDeS3TTW9tqkab#wHSk!$O0kWal7*yFH38QKcc)+t}Mm2F+| zGVS-Im$rHzTU#Hg(N^(YzxGN7qF*not%KhFm>GN=i(FeT2l>=Xkx7RI%FtGjww8R^ zRkMXV+zNyCIOxl^vb_smu05di(q8Z98`?YUA4#XRSN{xZO_#Lm=&(Q;)*VoPZAD+Um2JMJy6`n^_P&nWyl%~!*ADCdn#GPO zY_sJ>cUSVRtF4i@-;2z_FGa3@PXzhYOM$*u#8{vVYc0rl?)CYtZ0n5b!pF4L`?%89 zHIMX*9aB|Xl@|s3#>0c1=Xf$mqjwo-<+g0waA`K@g0S=EJ) zX{+~frLF7MtQR|`si#bWqGUoej@!x(`H=@6UNijg0~?eTQ`p`xKN+uP)$U6{yG$PZ)yTDbuWMtR zg$*P+9&qiZ4AbURNvo`LOE3&$QS3Id1Rpx;LyFrd{GgVSDHD z675~TPX8-nZE#|9pQj_&-f`Eqm`~j#uKD&-hW3KAcgE{#WqS`ksC#PCOMBaV{j_cU z!-I3Z8@AQ+-M3Oa^vL?TLXx3e+xpJ($)HWJjD9_GZ5~pc#-o1HmmL-;Lz}_dg=f94 zRWyUJSC=xwk&@2(lYjakE^M{dpre#PTgoN=7jX(UB(W&7b zQ`<*3ZW(@j=h)cj_TkBGo3~DlZg-nnWRJa8_gUnpdzC)@i1`Q&*$H2#QTUEk>CGMG zgX-60Ic&J>`3tmYq6=P@@5q>allJa!cD9$_TCsiKLrcqpTb~slM>S@SJz2TGovfep z?zI)WsQY~6;ybw9pMRA{`V~I+Ni1K*ApIGr^Ts#)oS1F^o==pi$Vz-`8HWUBG zC2wQCk-2#!kZ)wp;DcuRcVI(j`Kn(x(G@<|WsO`W-d?SB*L0MWW{gd%{PnL&lKks}+ht1c%H`L#+TnOr?-b;~-XW(*wP8{Q$dx;>|aF(xROvvV;tp3@f zd6d*kT_-&M>Gsb)`E8$K<2@QESiA=+d-L*tKan;hNhgF&+Gl$npRj`fN4>0|w{=jR>khhC>= zh-aVWjyKki1($;QY2)8V?%gtw|Gfa|NANC>FY-vfQM3Np-F9o$e$&2l(&{j@x+1kT z-0$^j4-SvxtlB>N%8q#aE-=9a&ZwNR(D@IMYdiQ#e@@#u@Adc+kK`L6%XK9C&3l#J zRdRYmJF%(jO?r3a7u~gF&HcaH5bC`WIh(+jDFehN5Su`3vV0|DvbycO9%db{U9Yd$ zXF92Cz31m0uLmU8%y>O7`DXf@Hkf=P{WGCHz3O8Oy27=AcygO~$F&YbZ*Xe^V`N(8 zr-$Xo#N0!Ej#{)fm8{vFur>^@j&G2y z+x+%Xio~+RYbHjwjBcHpVoYeU|LKKsV>`P!~~DyYai zU-wAv>=V+fby?th6~-QY&)1F0K)okwi5d?jO|?kU|rI_K{t9N6Z32meT5(>~d> z(%V!kzOPq#r`7r6TI6g3A6Ev5P2lT1Vw2@7854DHc)PB%zrn3JM|W3j>eE_;k2o&M zrnTOtb}yTR%L$wQHF7qAn^YLYCJ>vF`C`R{P56j=VXT8E$0{~az^+kxzOJ$_xtWX< z+O0Mi8@>M)Ih#Pn4Tw!3;|5&sk$fX$^H4{P!pV8H;_E8*nFw_ad4Aq`H7&Vj=G8^X zTc0;FH@dVQnS3MTcqou>WX$2iX2!>Ejj2U`oTDpThd&#+>)Jl;%Z}(MDW5TVLh*lQ zROf+Q)p%*qI&3z8&r|&%YajS*k6dH_yUvsAu*sg0?X1J>9ZqO|(3bX%ZX6cHhm!WE zt;41d%xepEq+O$BSxall?)Gi?PuYV{3@H!MCgT|zU+Zvil~&z;%FRa|H8R8b&aIU&Sh|euw$(XEe zJFkaX$K;W~KGR8EGoGJ!Oh$@@&5X&CkZ)vc;DcuR_b6k+$0BrvYY1_N zYoR^b(_GO}QkrZ2qRJondL4mWRe!f=4KW))#v5qyl5086pCkO7Fu8`9?4q~0HH3Aq zPveBPtQAjUxvu3*ADGt`>PlNfvaAEOWKa1vELiS*Vn}(2J~5u5@%5U+j;HdTf194c zuOF|(66%GpX`kokovRBsOCQhnbxd!pe;sxuE#q(65A|a$(WFZ zF2Ap%%yC6^cYMY@Kdp5gwia7GA>XdLs2k*7B1qlfohkWZ#Z<6FM$8gN@!!?JK2uFy z-I~{&=k1$uTJfpeUEEh_45H;VH{)ZN8+u0tKJjTQBs;~wzA5f*sAa13*@T& z-J&>VHh{OQew&Zrv-~;FFK^a)GLD(-dD;F9l_B<))qk|5W5V@UQG6(Af7)Ky^nrP8 zp^mgTmL(R|lHKduuu%38+YKoX(I(>=8ejimF}8VP)IwQR`zbdcWtlJRg`+K%`E2^I zYlG+KoiFIHeMirx`g`GnLH*SGCGr(93}jCTvL=Bq^vJUd%U3d{f+aFyR{s<=kCG~> zYnSIg-Tv7vpC0n#3cJF1z!+j*vqAT?PU|Qs&HGjZDnGqL^D2<5@>h%Ef!P4kZ#J$$ z_B9~;nlBY5;{kcte@V6z4~SvsH9lxdG?_mhm_9JCEvh~>9%Px*wPX+aHhh`vAs!e~ z9xCWCo}uyGe_YLlgQqMWtkgY7>I@0H#yvmpc%Mbiub&em_4hVMg8HfV%jGNf7a(x~ zWPbs&w*lGPSiX`m74*4Z_d>bX%l*r}yIi~AL$)TLluh;aJbl|MK0&@ibz&39o(IGx zkUdW_U#yr4mdJ=%W7MUTJfpi$=9>__>0vFvc-2h!K5L zx=zzkQkp&Kj58ZR`rGCzNQ?uCabF=!#yIk@|BP%W#u1lyssCt8 z`%c$iMe(76gSpSNJ&)-F^V)*qv^`IjI8{q_w{OFPV$(WGMLs|XPt9g{vOI;J5|8)CjU`+RN{J6rdFdi_5zFNEi#rG3BN=ow_t*G+n z-l2IF$W{5PMe)FF0GZo1u0i?{>mgymxr>9b>4xG^xQS6m%1iB zKkr!Y`9^)8n)V&+IokF(-DbPRh`zVfj}gZLyO8f%?qUQ;i~t#1ATa_YMp(X*F%>M4 z5wrSjgXUIJC3Wrh{JefcS2O>)-NQXVSkFrK0Dhh31^I57d|so66SC)U0zeZ0F`^Y5`uE(>OzlUG`7 zd!@)_SZ*cr|#`hhWdTJvY6;#^5--eH+i`QEa|W*|rZ-9RmxQ)UCm^_Pte5TAj} zDUiLfQ9%iK*gq)SnN!4pJ@OxI+2`YSQGAHJu}pY-n_P;CT-o#GB0Y$wrd?C z@42#vIb{eB!e-+c8h?0fgy-;_#^rW@lfJu7eao8G@hwg-@_8uB7$*K7^LB^21 ziV4}vY9spuZ0h>Pd-ToPPtG?SS=(8{uFn;jajBFcFd@m`@8gxPPXk?$>)d=LO z{MDjZU^akUFWQ&}@i|EUy+D|Z1>|A>gls1k5Wj}xf7)`yuUAF!p@M_C&$L)z`oO%l zpg1iSWSP&kWFzef$h%AS5DN_9LA1$uhQ`+yXKdfLowMq;J8tdItYiJSw=dL$P3_;= z*jVrQZoLcO_ZuVcbvn=oS&ZnLs2?Nxef`KG|DxqCMu3bLkQf0HBS6NOgEI?xAMjM%-UevBCR^&^LT?{eMS@~C8d&V5SwJSzjaHUY^u zDp(>TX7yW#=2lWAb*=UMynaJhGyXX%pAH3m8O8|46?3dxG5dgylG60iLX|&yK)>G> z$W{5PMKQu`0GXFI)ZJhCq@w04r_eSma96%$`vC_ADGt`>Pm|d zS>|~y+41+eHry|Jh!KXAhYC83XK4H}y{Nj06A|U|P}Z?N>+K75Q`dmzI=sANec=am zO{o4OMqE7TbeQcn2TpFSA0zhp`mq7|mo9hDHbC}=Ao~Z9XB!|f!}67ksbGnWnALB+ znp;Vg)HUJxdHsg2X8f~gTW5Js(3fG1U|ccB1{AYT=qM>oAN5dPeY8K2tMXTiVuaZM z@_jls)XQ=Cq@w0&S-qlmc`%a`k^R3RB$l&nYNEGePCW&P@EPc zvdr^Zvip1+ULkvk5r&k9Xp`{_jXxX*iSdowVTh9Lcih^aS;zZ|?@u4^rn!;vZnE_- ztBq$`Y~!rv)M4K@*ci?!`hhWdNb_gW``w&ke>AA_hd-pT8OT-jNsH!`*#L6?%*FLw=W~dLnd2K;W+MLQVFKWro z_%^JTJsyHGrHC~k-sYZOxjrs^SbJvqm_F`3T=5fP z$a745gPyl|KP(_4h5F@JV^dfEa_1*dfAKkf;`|nm{6DbeD;ZP45*abgPl$&9*UCNQ zD}jBcnz~jfW^tZ(e2qxX_AQN!BkF9%zbDlv*Zo{aR~Vz2*TlGf&Dmo*N=nnmhgE*V zNA&hPWA8lFmgRZ}d;zI=o zbDwiDI(Xh<`oKsfL5q#`Y(a5ajLs5gYsr><8y@m@7*ZZ8=rEq4@rltcLRYt)GV@WE zxx%~6OB6Sgda!BG^YhM?OUU_mrjKr~|DOB)pnmFojr??{N8Tytoc9R8J3Kxw$X7BZ zWKV0X6XS?)2Y$@83;r(g?0M;|Y#Ql#wu=L?Wc9}il{YT(uT|aH1m5itn>fEcC10$V zkY!zBZN;YIk%~M@ETodDHiDF+feNG#i>7Qx!>9n8w=n7*t^PFeQ*Ja~~*5Q)UjFGh} zKk_5GrxnOm^;e5xw%Gtis^4M{$l47OvmX{FV>Wr%UzY8}Y}T1;8lSY~l;2kr#fJ(G z=04M6w&?>Sl>~{|U_Dz zc|NktHOBN=Z(pbio7#Wa*`0T;p~uGhzNtzqLT4KF`+CTu%-1Y;`(co^9OU^INdJM1 zCCgVbrh+9hVpjiL3G6e~)U`r$i}R=3KNscG!JyB=SitzfXYE=WCUumQW(}LwJUa0) zod;(+5V9 z1&IYPH5O!<&$VRxf7G?%b>0p`%0mSm#xpejaQysh?v>oQEO}We>v+HDZ4C8d zmr*0*-DK-wRvY(dEGKm}W8>MKdR`Q?JDgMW17mW7_JF5#l$2&4wov6KepX{MkPB^y z?Q7ATG8;hd71`JT@fpaR0+aWx;9>tI+0L9I4lLF|TcV>G=al52f)3LM=CuVKY3pm2 zd9mcD^?NlpVS(;zUv%H6G5AxmUwnA4mp$A^F@y&pv3`8>j%aM>)=k{Qh_-Eyp4hm3 z^Tx*~Mx!ko-xfVS8tvS=W8>K9UD1Qvw(i(GGP*t5xkJCX9U=dPLij2CKIi$`ed*ZJ zvg?WYO5K>3Hn+JiRfvBP#g(=1Glm}$bw!)E?wHb7iry8i-xm2FFpow?C%2Do+DNzd zsLw{-uXL?jqu*FuGyKS-!>@nfu}2J{Hk2VTWmAjP5cv8 z%7z+hr_<&lrJ2`BDel{1TTyxJziZWo4Q7{NSUN54ulKQg!*aJTGeizTr|}GpANM&Y zqE@v(y!XpB%w=z%tHpg%*D5_D;4JT6=)$k)|7TCQ`!^G(D}8rX`sUuDf1>hzgSFbV z%h!($lzGE)cMT1$@aOa~=e!35vInqyC1Wb+6MMMV#XY5wU#!?f0kdh*llA{^V$t!+ z*g@|bRVUZ=VB`^-IL9Usn=D_+mZ@9b)CW4m5pWB-uQ+bo^Z7`%dg^H15@s-79;@ zE2%A9%NoLi3ObBuX#BCsolp7uQC*5B)E5#qt@r%A^X#(Z?B46ZuFmq&cg_DlWe0-# zsduCN#PdQh^2qq(obL}v=8F|mL7$Q0EYE|9jZ>d+?Sc>4J+5ilWd8@kTA4=OKVR_) z@{g--Yyx>V3&bXnYZ#Dc!IrONOa)71#4NE9-<}KXGu70!P_csZynVJ-a?SJ^bvEPQ zE9#R&ex9H!jE&3*)}3yxbq92ml%|gdRQ}*E>setSSLN>(#YVFM5*s%O zld+LJ>_0BsiH*eb5%nK!xvE2~T(Qygfq8AAuC(};B}Ubf9Y5*XFeZD5Z-$hI3ObBu zX#C+gz&-WvcD4OdWj<3kgk7sVKks}&-sa22x7CkvyMp?u_bu`j;|1isaFBcEAmb^S zFIG$iOJu~X@g&kbN~)x;4W9pW`={sade_sBE9?s60b_{yv`X>)u#S?_?1_6+e*dp& zUIlVh{%TP?FdM+zRKJaD5TAqe@3=4-56Hv*)3Tj-Kny#s@j+YKPPu+4iVqbW%zdUk zKQnz`URzL{77wz_=~}Y8d>bZY5Anc|@(^t@o}uvx2T$cY56sy`x~8MPkg#dU^Yf1N zix>2p3%}|19LN65=|9gyFu6NXb7h*cF3;8X}-ChIa**?gg17!Sw#16|>GNyt) zv4_17`=D#TU9pJ*woXsTrh5CJmA_i?6?(U-PWC?_Hi6g#vJV2;2U)(7F%>M45wpgv z3xR#6nz}j^2RP5$mxGdPrq8Ie8ULPCpX~SZ2VG&@W3JHeD|H`YT1QD~`nXT!m#B{q z1#(sXZc*Gb8$k9RHh)3-3?%Mt6DH#xdDwqawiEY=)f4JJ+HzfoSh@B=rVq?(3w5Q% zy)3b-mh9xOyEbf>J;Xgj%0mSm#xpd2{M%cch$xqbvdk5J2dDivDs$QNQ&*qo=bbC( zBxk?xb98t8__jN!pL%yJZ)$ zJ^Rg{S=nU2U9}*Vtp4awdE+8KwcObR4)}9y;{25<`C`R{>_XWz@b}K9zJIOQbUmdcLPdcxZT(sv*>f%F|n-&wwrF%>M45wni%nZQ0%OhBh< zLuLc0zZ>Ez_lV%L4|!6UT!&1yU$(Ojv35>r{Lq#?I>gGg4w=42Y@x2SbtubP()Ih* z_c_;})A#3!kKVVd?d-`6;Xwr*jXt-F6?}nw;HTtoab;~fvQ0kR%v#m|*X8iz{7-p5 zf6Z@Z9?gxbCI?A9-yG~;){^%=J|s7%Jp+dy5m|Q)q)&Asj z(<|P-P#<-z_ygysynCTTlCx{#i|?xctb4@QL;cjdd%4>$fVcZ|`h@f6c;r5Y_(Q|%K2xvKtZ(H_@q0B@5m7N0n0 z9D&?xdABgR$2Hk*+0Gs}-j{29(v}e&V&&T7nm#bEEr(QJ@;%V3`&8^~GzQm_UGm4S z{okavaG%DI@=!sC@eGYWJhtP8?}UY)m9oy$qu#zyFE(BB{JitDr28Z`PfzZtAHP?q zywy#;-z+~d7r+%BX$$AP7X%VZEnmr)3i`Yj)V=5%>&NdyiMq?uP2FJRk-9mjZjiby zU&)vX`aGfgP2B(B-pA3ua&3YS*|WPL*>ves?)`*XalQ9XZuG~us7`DGnF}B`fy~Eb zzF098ERhkjj+cvpeWsea7AsD1o_D;gms~UB_)WEwrEZR-%&CC7uD}v&sW#nn4Ht%63CqXpzbFo+M6gg z?`hIz3Mao;Bh()%GnmCiPzD~y74=uW@5-3;enJkN`I`z2?4@-@3b^nsD|ffjS?*`ng9u|G@vt|fcSx8c3s4nxXA1s%pSG`?d0=vz4v zQ7#WV{n&ppsGl~zPk!Q^RFIef5=%g0KS=Did?jNl z=yUkdF_z1@^V$Egj7v0^IdbNJEio8Pk8eS;C_JX>W?kB!kkR%}GT_KQ8=qVHYsHq_eBw}0wJ z8xP19Yy`0p#72;3Ny&V%Vk%f7BW4|EM+5szHFaI`{Ji6Ag<@MX<7`Co&5Qxs&`kgA zR-c~nu>oCSOeYQy6Z`*8YqE}#(u|QQmG8fzXWxNbRe!Z8rkf2Q@1a<10_k&*nEt)O zWK1Uy`_IXCVmj+kQT|t#&q&!5MjAv+k-D^=$-+XT`3{kTEj$8XP>wN3_bR`~`HtJgM`FZEtImy|4oA}oH zas5D0KlOfKxx2Rk^1X8)@dzYlg2Z*pS2Cu8K1UQIyAR(SA176Jy?EWB@?Jdl?+2xu z`zj!HgVYTYBa``J#Z=HI>j&@U5TAQK>-55hZ2m9$w)*k;aKff()s0OcHi6g#5}%X# zV#QRjL`KXyUIzZ5;xkiCU1iVDJ6=vpu9@-Dt~l3BpVNkB`e%qf_46EEVSHvz6W=b$ z#zC#wC8Zf7YgK;ms^VNASJhuFiqB>P$UP2=Ga!8q5}!XLOvY#Ouzymv6Q5aAW;8x& z%Td1vDT)sj9L#;D#b?t8=CuXIY4JHrjIAZR;xle6e^~YqpA9Jw(I(>=8h>nR)P8O- zE(bp=WtnU2IZk-{LcQ2@)${YtHT2kA8`xVvHn04r%3P=3kH}BNL6E&7NGt-0%^(fY&BTL7{Bu!0T^saS7!MdjT%)wg)_J%3ytgmZgiRZ+H$K)wUGt@rHum^B z!{;FzcHUgx_3y2F9TLQ6Zxi^aGC*tsU+xi`Enmr)3i`xH++)S2iS~+3 zi~qA?(}ZkV`$ku1t$UZJ5;py$>ZVR`&?7c+j!nsYv0}m|e8m5(U{hD2ViN^yk9<-# z*?Vv8WTen~wZYivJ*K*`38e2pYyw~Au`kG1GNythGGf|zMl^iJMSsr*_L*wx>isWg zciuH|N^;GN?cFh)HYy8lbY5!cLC_Yqh zF!!0Z$2WaoURzL{wx(xUmutx`{vS8ye^&OerW;ZoqD{s#G=A_?T~%$T%zTt(u5u6R zh_^4)g-tV_pLedJ$Hw}s#;wINbf!`Cxf^5I$K@yX_aNf}WPcB`KLi;|mak+?1xsYa zto}I@*k`I;T`qn<-ToQ)F8%&*&}U&RVEl0JY)12bKomfEp8j}BM%Mrg`7R84O4(2}7Vu9%c^V)*q zv{;a3KG%|s7Pv9<3$lk;U`Tn0HW|;*_{0MH)|O=3DKj5s9qY%veW9+fu13assB6A- zRvR~H94GZOV`JZY^jo<>yTkcJA21$QYX3N`qog!@xJw#~m%nIPd2JvU+7R2PffQS7jWjphU7;r^4)0XQxC|l%1MEQ{B=96cJ`p_GR5861c zXA5f5=2MnAQA>96X4i&a@^%clpq{}<-fu@>9d^WFM?X5T-wGn`lS1>yU1QljTe-S{{oA9KK4@)ZuTX@l~)7x8kXEg!xSHqPqAzB?OzmNy?x zW-K?Kj%2^jSC%}pd*w5njZ^ZU`NGh2Q1-wg?UhvKKBbQYK3TE9v)u6+_g(OmM-K>@ zo@>5+wc;7q&Q7B8S$PY&!ov=;+qj%tJy|i7&11jG88UvMu>X?wxe~QMYxyL+=fUqL zUG@DGYND>_%bdR#EOBuK-se77<)*f2Uk>?J*qFS}xbm6Kj-+nR&wS;wGIJ-sFZHbS za@aK=)$&u@boJPwU)ptCy(g;szryp?Y2(Stq}f3G!vCW_{sGw|=Ct>R$(monxng-> zvaT>MOb_Uuv7MjP+#{W5u28;PbD87Bd)TRrp_#EWA>NkYR`+wwN|AcJkx{8=OB>&TvBYs~}6dx)$nERaDUkC4I zn?5kFEhuhup4XC%G-t>=BYU`}GK2@wCgT|ze{yvD_HElat8TmF*8a>g)_Hb*+}jsw z!lw3TH#XKgzFO;=#vCzXWU14EKFI#xx#Rmg%QK&z|NH9uef`KG|69u?@3F@tu>n3Y z1Ejw}@{J0X$cS0}b|tXSR8!Xq%{k5+i4o2CrzD@Q3i>jP5sWL|32ax)p43rNnm)Ru z`L(x8_cQ~!Du1;oMwks?MEydW55#)Td2aaI!eopv+5NJe7(rayBmdKuvpU48e@`=r z5vC7}BnxJ>g}TyWM3#A8OSb7oZgV=&2iZC~c(DFHV%*n{9P+=v+>LWkfAKl{ z2F`UU9wYzbVEIbMRIo%w%<8ue&8?(L>RRjhdHsg2X8dzVJ{=1BGK>+7E8=IjV)g+Y zC8g=3g(|;i`LgmvAXnwD7R3m&0bHT_ZLEXDdhizE9|)f*G%6@T9`+xX?ZgP;+F^|k z+HzF~Ws7`>C?8VVKEm{Yd2K;=T8zjt&uht!FLQ19r0gL+8d4sjO~x}c{_y17*XdNX zoig)Lma)#5ob~pFy0B?La~)pZvA*Pm+W)O^F=FCHP6zsCq|esL{qOHAw|{2-eZ)Rr zKQ9v%Du5pJCi%u0-h9IhmV)c;vkG5RaAy%%qXZparwoq4E+{+TXYRQ(K>)P-avWGpIA?2Zh z4&xabKloX%xE%bflx424H@fES3-w}Ck75P9ymRH0 z24WLPoC6u>mak+?1xsYatbKMQu+LOe*No@q?XyU6qM1I!hGzVGN`0~`7>8keV@_~? zrA_PAgpQJu^zjOnpLo8m{{p!xf43;UnGGQQZ}SwS&p_@E{gp6z?MEK=@00DsH)3+1 z`iZuj(IHl@_-6XRytYtRT71hAqiV?(yImVD$sXdHA?2Zh4&xabpZNAvzaMtq+ee*7 z*tF+HK(5MPEs6zZ0~o1( z8`B^@2kGCx6((Z=dDwqYwi65D_$B|-mh(Eq$`uPt9~em%v^iMM7V1ii1zF~EE!lw{ z*M?7fI}9lg6?7QS(D=bmdd217XQixTea71t>cys&x>kdicdXCcy{ychgZ;)-uhW4( z$oBhJHJ&fNXZ~xvNnby5$p8Iv_dRdmZT_4#a?br9ka1-BO2$;ML`KZ&w^~{ni4nxLqZ%Ky<+={Ba>WSK2j;bfy3%4qmU&)Fc5@oK?5oach5Oohys(t;}W9hE4sR zpLedHV{XmYxSf4vM?B}ynMUQHe#-poaP(g?B42{2ibnC_~K`a=4bYkRHnIad z$c6!@o3{6eXR)L75#4j~{vt1pP6c*R=0BIa*a1GzpEKq-Cw730FUwalrh-0)9~pfz z&7b3{gMAaW9)F->D}rY0jBK4XUyzYP6Kb2WsqepJ3*Ye#Vk?NPAhv?oYWYgWRIo%w z%o^twD?TJuQrCdz=k4Qtk~9A_(wEp`@{Ra+D~yxOEqptnefb3)C8g=( zwJLw1xU76SkgM`{i{hl&01}&QzJv4`NSvG%CgUV|*neHN6DNu7M>M`@OYbXOKNiJ@ z3J&Hz)AmfJ56o)|iqrN?Sz=u+*`vM<|08>dlZKRsXp`{_jX%7TSF+#AX;s@}<~$!+ z=SuOF>2qb5=jWX(m}Fx;I$VFxbRwu9Uwlq}B9?&cnLyeC5=%hFi{&dBQ^67$F{^({ znnOvI)OFDFpKkw5%BQFOn8L0w7BGJB%`V0EOFBwQvo=kt{O;H4er+IE<*ydS0C-@e+#0^-*-jSt#V6c4c?AEJVTxzDs%VEVvFB|)2m^=v_L zS}e#ipOMW4|pk7*(m!=%ICwMh`}& z?tjsHVE>xd{9b9l^o9RtH}Jumqw;kJ&rbQ+p0d?vT^HF+@UXx!h%n6 z`rNBp({AEITD#$gM7zUvGt5g%Q~s`~-mlH3Nj^QiGp}xq|JVzq`44_bEt>x|ho0}7 zx-OsH(3*CClNy)SZulY5Zby}GsI%B;Sn{#6Qr2YV$67I-zD-Il5Chx#l*fH%tWP7j zW|tx5taRGiwdx^P-_5tVwb#(}BWpZE(-~|<=jt%IdRVLd;s17XPx`F4FVu%kUAo4G zmv^r<@`#?V>sprU-4laOhxy0$sHGpOzegSN^gx0SynaJhGyXXypAH6n8SYUTSNNt&_e%EaC}~?rAGJNWtbFlN zod zk81kBytYISH@?TizD8q2E!l&zhrDN~E$p)m;X(Mrc!tK`KKkV5ts|UO`^|A{e`c8{ z{NG)V;z3diHtqKOyz}J18}%NK`kwf*aJ|!QeQwXl4*hWD8KmVUZ8#a&MVUqNAI~5` z;t9xF05U#7obDWi%cLxIO?!S`zoDxc|6IkVeypJ@j4zBUo+a;A zyuYlYq%?grr1CxMbPqm|tMXTi;)~e;MylV&I!Hf)Jl}q%FnJA39`-N%8W&%PiPtqg zXiL9%%4#d}Axhex7GF#s7)b`SxmnK^>PU+bS>|~y*^|Bv9o`N@%0sltc!tIw-o9mO z%Oq#jZFk(-pIOE_dyv7$(#N`KZe*;RY(30s> z<$#abMK6%Fe{Mbn`P6|vFt07BNt;hu=7fIJ@QKHFj>VQ>=SryFJM`mT?iJ2r29ON9Iv3gM^F=k?l6d3}XSd^7B>X#KWmWb=;LrFOGSu68%ch97)v z{qVXq55DfPHN%fQI{f+v9(&}WM_#?|uBcuWUl95D@&DDkG0n^!KbD#tBJ+FZ>W^2IbYeXJU34qRVVc zi_H^0o_>{&r-sNu$QsYk`08^D*>Sl`Z_@X}Xzk>BVb|BS)-U0`6s~oas4naX30ucK zKkq(f!l_K}!k)$Q>w_L2^7wL(MUM}7B;N?xLFwWe z44W=KUa=`IqwhT9`vM1LlfBE%I7y?vp^C52`z&u0NSz=yfkltlWcfkou(T=M}ob{U&pW>z_W&k0Uxt+G^3qGwjvW z$43LXDu1`=`ps+rBiUlHf^*^v$o1PT!sPXv$)1tz>^IpX?^6HKmiA%SUq$hur2TXI z&ER`eOdl9YCXX#e)z|1A5&IgAhqYu+`1W_IE$mGVDG%Wf;~5%%Siv;yd!&aS-neV? zmYrKD2PJ*#xV1mC%t5XT$4iwMVcMwckmu)}gXpmLuupxgvwYe6rk4FPLH(3@j(o^9 z56F8FApesG(xzm-STWVoZ}~~g>Yu$E)BSVG^Pg`2bo^Ln`JDGDZ3<%yV~cCJLy9Mh zHo0qB*0$X$zkhsLc{Y%%@>h#ujM)Hk&1&Nv#OEOW`_;l^j3E#Edt^H?hPc=zKhu_R z9k7agh?4fF#Te5E=Cy@7(&9vxxn4_l#<$^C*+ZN#q&!5MjAv+kFe_yp+an|CWBa)0 z=N;Q4Z`XTyqs!v&&*po&v6nWj70=e?a~i+)zbnZ;wDw&K?4nF0f4$J-i#^`q@lKD= z5Av0a30dr6kH=o>=#v$jE{e}SiX%E&e=oI{@}AJU+}i|V6NpV9Hi6h=`AWuw?6lgq zQu@{_eKzpZr0lfVIVqd$yI(3-Ax?*VcB#Cj(R-Wf#82Se9|x)D zpH6M9_=y7c+gGP#lYPH&I~gf-EMe1gy-grCf!GATz#}$WzLGIvQy$7X<~O{h;xp4v zUHd&h@0dR)xn{<8hvITG<8V;&&5Rj*&`ke!{J7R5f4>o3;d(?2Bc89+b=9KJVNcC7;1sO9S>(L5fay=ps`%lVt)+5%?D;nRl<+={B z+KPOLlH)aPJu-b@BpJ}wfqJ%3N7{OnWliDET>t7<4?q0C;P3+j1CMfD3SsjwU!1Jh z;bMm8o%s4?<+QpEiBGv6Z?|D6Ydk~p%r_hT?;jW2+`C=mT?=%w&qEG0Le_YO2c$X=jV+Z{S(2v_dn5DUgY)EvVWn~`u#Z=P==Cx(7>T5L4VPB*1Y{ky%`xiq~y3P?Fy)RK) zm`{fAApG&a&$wb&%=>|#^gw+~|9UsPW8RY0naDQzFr!-O7a#{e&i_>B^XHUi=F!}^ zYI2a&^G*3%TJy~7LvnN4GcWid;S)!dt4)hPhId zeMK@eIL8LF%aCldEiJB>e0;rE@s;(;5IG20;~5&?_dBO^b;KtbK5Df;d>+Czj?EQPQOwN z^h3zG)cl{jGnSiAOLAysoNwdENX!T@8XPxsw9{Wws(8g2Pf96*!Qx9wTBwPndZ|*41dLM@R zsO!i(oxkh-rrC;jRr;kBHZsN++6_6SPiTB#TT(aY$G%P1q8j7eM{fU)^m53CWPNG8 zG(Vv`+{f7O@U8GZF7wS*SQYOqdnfWlSFPxq)o)crt9t*~tWl+~;&u?VRCjIB?HSITI(tm@; zD{IG9rNe!N`Q?h@JX(r@s_t*sv(l9Lm*sc(&iHi$b^R&+uxhLi4B>}yg>&-E&a8+W z6zX-H?4QlnTlaVP^gC2rxAF6Q{)hOqvDWS927ih#5U%xOeBK}C!{jqJr@{G$wx9Uc z>V48xU5gzOpHi>Tx=A@hco4k*y*CrPV%`t@WW6?T!9*r8;>UXT9zI{5 zX=V=Dm}+v2%i~X8mAWeTWGwC&cKNteDI032oldih z(%g4SO0oCFwwZGMdopI1A-c@Av}?#~8RDwxG7NQ+&O)`?8}7Y%&bLeZ*Q7q|KjZm% z@4+12r?o?SK=#9{zT4?Gf7o;X10S!ve=?VsFk<1}id~d3Ut~p7S4+R;Co!wvjs^Ca z4(ht>`FZ^o>+tXAG~%C2^68+zc12gX|1+PR(O$1t*C-|3SE7$fDnIldJ%CHAcS@-uDO@2|OvULa}z+`WU~UEHiTSUImcw&kqqOWs$? zx?e(1qcNeDZ2xzEb>BHm&`hicJ)-ccoUGsJsWbfQ%HHP1v;7+XV8S0fFEB==pj3vP-e2nLfjgX8b#)J{bzeXBab?E4&LeD;vkPj+Kg}AP@WZ%64KVaekHhiME{f>vBZ6MaXFmo_B(Fv z&n)wW|J^$8Z45PG*P{12+w;yB^w@YG`T0sbN%o)BH{k2xoHFa=D`Ff-JOPO(An^nw zo>;z;G1by<`AN*`pKF1Arh~eAG`~21y8UxpK3yO5Sr`u(L;OF}BE|PzI!a2j4z;QL z!SB<&3goK%)uMP{Hh?Qszm027 z#0tw-GA66r&g)@TzeSp3NnO;n!SnO_4PDLn=bC&v67*#lD;QtQwN=`m9@bG(nm+1K z`O_cJ^N~QV%3m#t6=nl?hw8U657Lhyv0{TT87s)c{?oFZSV4R{&c2)d_CePVMe(7e z{b{kn^nrP8p^mgzk!8NulHKLoFeH136^4|DXp`{_jXyjV|7QH~)@_6gxYa&z+}fX6 z#ytDt#hTkmE!Z~V`FY3ut`F%wU-cug;_MGP-PV6L7cTu`{aA50unYM&%a6ngkXQjS z#z0~PNUX4YC1bL>?Ytgl_1l2vSW*{tl|4VN-_X^Je|k^q_c8pKLsu9p7+>tuM-;oy z=_n~pAN8sH)gRFR8wYY#{%TRIFdM+{a0l>v4Z$Eqwzso zdZzQo3eyMXwMEsZ#)>TSy_W1@--gF!53$0K@(_JuJVWCTkBv?2+%f*N#EPQkHuZ*t zZTmex@0dUQVZEQOek4|0|7d!wSn*5sW5v0^F6`MPKeD!f%RLesIA7wC|AV%CC1XN1 z4`q!NyEMm=da3J}=jZhsx-3>S;-4w`^rRni=n7*67Xqe#8XyVkq=SQ{zlH zLLF)QiY)WJmh3s-hH=?LtT3cJM4OCfX#C+Z?#12^Dyn=y+4(5zn4i$xPU^w7lb)Y< z%#ZxAt|K+i<5+PdJywkTa{X8_8`yN3TzlHLLF(b zBFlWQB|GceuvPXDD-0=8h?05 z*!;XEo9ufW7LbubClfYJdYeGv7l=(D@e3q=S-z4nVN)K;8ox$SSWQ{q zhAG)Y{4=CHM4OCfX#C-^?fR*jr#}Ai?*74#rO%mjo}YKljQp5>_wot-MuLvsU#b5d zOoz(TZU~?3l)oPE_-c4Rs?Wm-o1XACfdeWHViWjEkJxPaO2$OptOWzoN9?`w>lK^!DJGju=VjAcZ&T&X zFsH*lSE;suds=Kd`SFTP6tH-;_g5?HK|2{KbT(nr zE^iY^-+|Z!(sv+zXZcFTgiU!U%X)xsr+&QRGt*C9M?F99*uEmUX2y1p;k%=GJ-~qW7bkR-lxB>bQXHK5S*=HbTvdO!Xgx9;z&lmH z#Z{0!63Bk!ZNlVwL>~5EknOBTtf33l-?U}%F*lBi;zLRM)7B%?2j;bfI#So83~Nd) z*?qnZ@02~PM~0M#Xp`{_jeo;>y8nM_K1=_fMtI*^=kyowFAuXLI(jsCU52S98x|8{0#YElbwD)8!W_@Y@ zZPzCFd$jJDKTgOdTk~qIFFh(BE7b?`-{@@u-|Ww^iF0g9=8F{*vaG>e2Vv9NlNFmN zU@>vx*DGrtb0m#UC2aa8ZxhJ)0I>;Ve1MD(%U3ccY|2Af=g;`@iqA|xbsh5jyz^&9 za?Q-2NU`7gypcIj3gjCZ$A<#>M#daIY-W6%)R;Q#V=ubGHIq2YnzKiHuq!%BN;5_W zRes_Z<+nhtYP_^)%`_Xp7pQ)V{UB>5$eQ`h!sMDs9`-N#Ik#rA&d+Lo(3Z90DXXo> zhbU=(+L~$lz`V9lN7|a1W!x9~Z8Dyr@rTEDjE=tbslSHf{>0FU z^f`aP^YhO6j-Ri52jbD+sKmr%AJSInd{94SzD@q(UKPmr0J$#&a$g8!Oj*8?F(JE8 zb?^V^&G9j-y08Du{MTxOD(}VP{@5$s)D2QMNZlZHC-cRM$=YW3dj@_}zh!>O)m>}N zJe#Qd+kM?2b%WFmGMAG1amD(uy6wCkW?2hp$J8%Wd}BJP>!|1F9T!(5XR)x6anYlg z)=b~hhGzO_T77!K&uMgpv6%V$9Pt)uZ?H>8NolT=%PK#6O7AKJa#j7+qF8J;fZW5f zm;%!0AotV0Lzs-k&HU%7i~GOL#(zUAEKoFX|dS!fq8AAj!E(?eUE&`I|m@|wu8hakeCP(k1b!xn2_!I1ka>yj*p9~yIwq=N!0z_ z(oNkUb%WFm5~q{-V#P$=kj?j=->M&vhh(dha_!#l>jtSCq;8OSoXihpEu96kj*E81 zk)%G_+2{Fr$Hi{RH8UA;{jZfM#qC>2=8h?0fYII`a#$cTE0cGc-EOU;% z#;#vWpL54NKkuBwCYy5;zg<5TUk&P~jo&MO5%)m$h#)ZuBo>3jV#`-Drl-n32T!N_ z=bYz1-TpZ#pI-B0i-w0WfpNsUb;mUSyMDvP1nx5(Qu*%R(z{j(U&oHKj~2xQvjKdb zblcbl=|_;Y<@|Zb2i3`NC ze)*ZU?DzN2i{e8``_tlr=>zlHLLF&wAxVY86*0cGc-EMuN~)Q7#Dp)TsW=J|QY{G~tBZ>jyRd*-m~FPsn1xA&}`i~jr4 z__%Vm{xhjwl{cG^|3Ue&-y_c&IA7)Q0gtPLd?jN-w)d~~TOG2C=kNz-DmHb=PPlCq#wSDrOzB5=yNomH|S;hEEf2j9=1G%dHZqYhrHh|Ap{T6RQ z_N^fMjE@SF>lAs|KP%f=r&wEiG)`#Cs^53xs3<;^v_EZ~GJRlPTc{&#oyxM-)RH~s z+wjA(hjq%3@(^t@o}uxFtN*>B$_JF4kFv~J?zas5LHe96dw$+Ii%mA>yMC_{(~^B? zwx15_r_7JYU+i5$#s|pW6=d%NGNvqF$(U;CxBMh#_0NRnQc{+>4txI7?Vkzx^o$={ z*cHYE#u4|4%35Qt>L@AAS~#Wh$1mtTia@T)UoDCWW&?P;>bJ2C;&YJuTt|e-m_Q!( zcYM;t1makm4%#vxp0e7Ce29|vr^N)*2j;bfI?`f7mU&%E_Ox%qkI5clf+6K0+GIRK z;}2K=8$*>3C_5iz9rL9>N+0tFJwNZ5U;M|Fci)H3)&GBm3qk$($Q(RrK6-Yd+EI@KmF&+ z%GUz9Du1^qo|z3GF~sI2NS}ekv!4(q;~9C_KO@`O;}C=QtN&7C%c<%^3eQ7X=gdl7qbAi**SP2BoinqN zvpI9+_v^>ABSHPt`_u9l@eGVS5>q%Qo+b0eiV4|CT`O~q%Qg4@zjW<_57|8I`-A#% zuJ2;SC&>Sdw+ST9f!G8R=Ro3|CB=9Od?V9%b+Y$o;GhURO)~pw;NfpmEd>-O&C- z89xA?w0|!SM*wo`KiOIC3)&Sc^dBdDyRQfN+)pL@s7K1sZtyG_Wo7&w zuP0tVw$rV3{gEhB84wkhRF4Sf(_3LO{5p!SfAjVJXCAFYn!h8&avrRphUZlp-)70f8TDnf5+77onx_R++R9h zxB2a(rYq*H+rB9*Lta{J98x>UJ11YVk28b^q04xN#vdM@)US1H+p=Zb$PINLRzJ~a z#H}-b>-4wEcj5Q4AA8Nxa);JP>9C+ZdHN&qScy#px z1H)hYz+(?RuzFz4y5atZ9$WL^`hho4gR?Vj9?k7N{2YtApC3-S?mL5Z_UMJq@+t2h zr?v9=N$>A*A3w=qj)J?se>qs74Es3n1;X=QSLoBEzf~+VA-nR^%gT&JVrrYO-*l$= z`MNK2Nj5Ql3=xNrHJ+jIhlkmcZF6qjI{d`glAl+5e8}V7 z9*Z8se6eCe_KMoL_#bX;C;T4q?Aqy+Y^rw;?n1(*zx6hOYo!mwCa~AzOFWWqMBVu4 zNQzCT#IxUF@Ay;wFY-#~r<+VTffIoa^!}Z<38YRCo4}WPCKKkCJRU;caTCKpLsMv5~**Z33|g#3u0mlzg#bLU!a|mX(>C%!L#G=Jdjc4(hiy zIF8AtLqFOP*U4N=qXP+>KJ9G+8BZWKf$V9M`KHtAw)1+JWgTW7_WfhUXQq?7raV9I zJUlMBX6D;9$u~1MdbOT6GmfVu-^`f9hs}(Swm;MFh6b@Q+{X~lS&!B$HlNZ_QkpS( zQZf7DziLkq$W@J(7Tp&y8^D#S-_{tAF$Z#A;hs>X7?_4asBKmPeg`EIpG;v?t8N3iHI%oi&rWGDW)5<7|) z>#wUTRo;uoee)UBfo_oX0;Fz`brob?wR|OGqVCJmWpQV}>aMqb9!=E!Ptv_wdO+$1 zsT*Yd1X({VU&)xLd$-mqi&-Rv4!AmaeUCXjV9nJ-pMR=1tk!>sdUw|EaS=0MiTe-=STP}c zKy_Q}IHkJlU4L#+c`qLO_uo|qxrjF$T$G831pp2=8F}R)othX zFzY`UVmlmy)W&_CDWbqzk%z>&Ew56o)|b)>D6S=PF_JF&wPsHw6wX3q1Gb#8WlE`4s6 zJU{Q;+~0OPWD(j z)~N@)_=^X<_zT2eAkVkJE{}0OX%Vt}RX1_y(yMMM?^oUN+NZj2ic3^~45++ukuOL$ zb%W>zsT))`RppBnllj78*o^A7HLl$XCGbq5?ghSXkmoQUb%RShVw>eF8I#p*=k>7m zIQil^QSO;eE~xm%GN|i_=jWYAmnFv>YIGiTD^@e68XZ^Tl4o2rIyUe@GyS{ruRF^} ze7yd@?41vMU0GG{!%R8^EfBOorc=xvElh_ALx6&X36M@ROkgrYfuL22y=Bs&)i4v= z%uuvw)T`z_^R!CT3I&Qrt=i9fRjX938Z~O)vuf0;L914%8nt58KJ9z2%KLry*(+yv z=iHn>w|(>ZyqVSB`#Wdtv;OS8*Is*{eb2o?S2#!ghl1bZPOjy zjZ=XfJV%`hZ0I@P;J}}`E!Ju?1oRy@XYl-Nt;@`d&< zw_dq=6HIhp^C6t)9eq}JgE}&&QAfd2PT{x+6^-S-RoSsT<@se}x#N~>eKqk}hY{l! zFXYb^X9B-yr{}0`S!09z1~YhvNAeNpczs^2u`L&56je_sfw_ow7|kf&CuwiF3ZM z9G8pb$ZXqr9u|$S!_Ul)hqInvHon$qJXo%*5=X<5w_I7J&uN!d`sbYbbVhm1+BeK~ z&sHCi>o#iqkLgv{G53vJyX`sMjrl+ho}-evt~aAUOcgO;K7c%j0+Q=Maveynd!Ddt zu1nXs`}|5b8Hc-{+ufj^u z=)s?LYTxx9$#0yq<^fq7gRG6gc&#@j+arNKUFPaIBfjOkhJ13LQLM23+^Xx5h4AS` zvV~6|HbHy>i3yPProUHt`9>ClH@NP0tR) zaIj$Y}!tTawAP3J;$sB$nh&NMVNWYp7AnOm191fDhLB?xMST={- zdeuIdc5$?(yFnev-_%jy@&#CwipKIqwP~yqANo2Ie%V+)>E%M5=$jYc)~mf2^YizC zKo9aSQ`_H9c zPar;l_yn?V53+A>P+O*%Vm>x0tYj zSTw$dz94Ng(}}Hy=a-GIImubBtP)4<8c&uhtMoZ_Xr+H@|8Q$#I2dzbuIo`B-6{PS z3VhSn)Pbe+U^GRB;Qd_bjJG3PBSbTkLT2`u?|=7=O_HK@p#nBg*wqUE57Bs z{r{Ms??wYX$iH6gyWS(~FwR-?fUH+R)~jH=UhR89cVkVUPnWs&92Vd5-D&xhm+#ti zJ+cr!y+O9{3B)FdPayLj$a>Yvb?6A$dFhJV3jU(_wqEVJl)qk`j(mEfY~mA$Par;l ztXJc5u^eF=qOFpno; z(U_kP{4<@{>gcK#^MjJJ99$)~Cnaw=xJn$Jmb|T3tHca#&`STFR7~^-c_hr?ed=S@ zt4Ec`F6dR)@iu?$E-_%aPf(^E@mXUsnVF zOeeNB`nWC|U*nRqTv;WKPDtKzWtBds4z2Xhi2AfWh{Z71J)k}!*G+$s_EPn#>zK8i zpzZt@cQ<+iIe3mr=DLF!{b8!;7xMw+{tqPAf#f=nT=!OC`CONLq01Jl*t_^8-3{tU zuA`2E8@5)RR9;1YNcgbe`DJ5qxR$MNRD4?(p8D4`uV5>Sx&l31^Ob7bEgs+OkvsyQ zXUM>Nf^r=?LUvKQW}|vKySJz7!qxwlt_yGSvN0Tse0rDn3B)H5pTNx?w|J!7$l2CO z+*Zc7v9w)2*}Cv%6OOQ7bubq4+hrS@;9ET66X!fz7MF|V$ZXqr9v01Yi-CWp6I(SO z*Jb0YE;-9pRpRJ~-lBluEfUKWD)+!+DCy?=M z26R@)H+u}r#d3sgC~hm`+j!da?`gie zIT2a*KA<`n6Z!YcHa0=lKp;MWtbyWku^gFgJI}+S`RZcepXtQbdLP$i<7-56manSB z(TwD64OFGisY5IMGpRnkq+Dig5$3yb^%425q47VfS6#=f6S(&3%Qb$Y7=~Xq-%Vun zhts1s`o(+znR7w%9Z0?d$#?sOW%J!qx|2MFz0Oy3H>e}Ijyf72EJ{UVasSKGb~oMl zaN6_B#^S);+4{DNZ@KRL=kjx1N1z9PzEy3@XN=$$kIX%s^SLL;=bl!sLr2I$$D?{0 z-{Q8nZEfy4=y2rIx5*|xfdd}#iF5KxTrQR)vu)>jShOz(e5{1}uyw%m%l73d$yr{h z(r5V5O8ZWzPtI%1TYbX3&`=xSse;43-Hipk>N;kPz_k}Qb~jc>{SCitURVhF+sOxS zw5$05(%&HCALMgOkk2i@U0D8eOTQ14er)M-!_`-JH>fAMfqDvV*g9xhc?kU>QSS?$ zUpAiVuguoBUwq3A<2S8c+GB1uPSyu{xMo`IyTv1G4$kQhkaZBqItZlP2-(ZhbtbAO z{MD~Y*FkggDQ_KgGV4EEmfWwxPJKjBn#<&CO}Px;YV9_CBOK z7!&#LlWlB*tb;&&0$B&eCqeg zVm^SZgFx0nAnPEIbUaL$;vaveIdb~_o> z)A$y*t8Yp3O0#>unaHOf@;-t6vIgQ4$bL{aWR>N;kPz_piNuV-?i{)S&RFPsnh+sOxS z^r86xvPTS(7eMj?NM4u`md*?Q2M)u}!>+!eyFnev3)E3?!}7u*v`82;}|w(gR`>#3zt-8OXZK%5~@n+fdwA#2vB}Yp5#y)BmisjkX{b!(8`Y)koyIgBt&5^s4KaHG-h6{od|IPap@+ zQOVE4rZW1&RM9Wy14ym|$#o#P4kXw8lra5f`ttmgwFZiR%XR-2x<8b1Q={PYJ)OX(V%f{hQf4066@h#6Cy){42bq0Fy=U3IPtbah(KOk!jkY}90 zyMl5ZIzkpY8P(JHwkEqGpYrnDOytwA$tFI5_ypn;*z1uTW92$@WVY=*4~zEY(B|y6 zZ+L#$zMPYs<&-LYM!hVjRB7MAwQCy}HQud#!kq9cYGb$l(fBy8S6vseKH%C@_i6k@ z{SCkL`X}gbCm+1ghvoxF?1AJ2kemRL6Xt|vbArS&f0Lw7xq-6Z_qGh-LHK1nL*wt* zw`+WdzukKHvBw`B-=V*4p}%`TIfU%MfYw-QM}8CV(3=ul@OOOK&e6wr=|IGJ87dmT zt7SXZi>>XRUv~X|?k(L7aw&DW`sTDQ*s#B!GrDeVrXzU zcn##@7`6=Y*d9joOv~xFb~oq`>PCNHBd!O$m8fXk)gQU&*cc?#9FLE7qG(K3AipJv5)^x0xZhScG`DJ6V>uuTk zdd0U~cj5N@Tz4+;3xEDmZOii`;1-W}d1P-1KHo2~aveHC7HS0gI5)oKx{Y6)pXnb`vl?>h)*E-7bO2$xegtfZ9C7yqJ7!rVmz=^TKD|=jB>FYnQc4I!=mwZI`GeQI$J)j%f?r~&sez*9hq%A&%>g9S@W?H>ciGH&oA4Tha_itrAnXS zhvk(j?ORu$oYI)L`h4fFYV}VECzD$9F<%Loe28dR2b5( z<^#xD93(G*b~oMlaLV(` z#?q#*%GS44d>ezqFHOfFwzBAI;1}0yP}?%MgUsz9V-94!0kYn(aveG{{WF0+3XE^- zjT!l5&yO^F*6mO?(3J3B)IGb4IyXj?A{5=V8&l+~i{=)Q7Dx&oA4T$0cXu zx=NqnhpiW?wC`p0$ytqgt5290?ob<(7Y=HyoYAYUW9Cz??R{7n^*8*o>xDBxe>?f$ zjdnF3K%Q*`$qOKP0VFTHR9H4IBxymyB5d`KDA%ce1BFWLSw^x3CGWC)kch;d5x9TimkeinRmE$@V$CgVrMD`&r!*F zbtt1fOcm{7K7g$4K*kTq_yHL|_Xx|5AN$PFK4!t*w%xjqP#qaV)KRcB4{%(BipIj6 z+BDXO4{LTM{Iaod(94B7(RWmQ8$+k>&L2a=fga=^P}?$xfy`kbV+Lei1({c^T!)U3 zg|0^RG``KNT`$j{R~I9nhGY|;Kzsu63Eb>4EEmg>*|zgMEZUa`AIa{^)1F_pFFO=_ zHm3E)TZbU30pmT z5`NiO3ia5r`EGe(`z!ME!l<{84&-;JZTUO`WUPUAd1TL#bM_pqT!)U#ww>o;(J{Ej z_e-b`TSJ~-rQK`{R%xGOYSV$BFT*kPRcf0%9W(a`+GZZrZ!iXO@EnyK zLq~)DG8Klji}?Wd`txUbWbYn6d-ru=*ava{W$xYkL1bI^$eeggxk2?}3{gkH4I4wX z(d;oa=J{n~;bIeg?e9zH*1lKekD=p%9@=ED+Lo~cGLM1GV<2-Y$lPk>I&@@xur1I> zf$?o_osv&^_pAe|L!vd2-zS^+1mY8jPvB;cVYyh2%(k89VHi{4wee>#7X$z7I&7`? zF;uoMMJsLKuT>i}w+?8mOz2hDF>?>sE`F`{w*onM zj!Nc*iH!C%RkW-505Z3N%&j1EE6ChBE-X8@+M0Vz@(}j6?bCj~>P23lj>ZRzQqfr2 zG?uoz>Bfgi&o3KGrXxi3K{mI}zdAoJoDTd#zM;0|z7^!Y6}-b^uSdqDmFv)v*|zgM zEZS~kzF$Ip*gER@RoczQV3qc%y++?V)%Y-f!ZGwMYAeRjH~wJ)Cj>hOM6Q#BP=6a*ujh(}})W z@rK^N%Ds+%>DtE7-7j$M*Q{QnfexdLc(&`G zVe$BEj91$x|Jj%>Xtv+n7U)3lN4!tq{r()EIDeH#*5+2OLr2KcM)QF_3g9n_M=s;F zRX(}r0K~tU3o>Xr(1HA6?-PhmAU=WQIFPlDmFv(EvT++x0RN!kku?slBl5|ual~)u zf(+WA>y3^4M`d%fM||QOpTJES@M5#QVYc%%b_o&yRUOL1GNVPmr+~mzz$rZRdH|+2n$FEw=ytX*-$-wvKy# z*|B*^a;=QPUgh&v#><%GTZ!%C%qK0xA#K=7e2gikHU;@IoCnGAYo-67^7U1{>N+My zFKA9AM#loVW$|*IzB6M!fUG5L-T{d@kmvb7F67?R2!ANU|8-xNj4S5u)ruGDvQ0d$ z?dMGt`@i%&fAF0d(+8II1shq<^B0+O_4f$eY#RP10s4wk(XqMa>$At^kmr{jo2Mmb z&uP?Om;ao`RA8U}_#w43`5k0F1n=<3UOwmS7g@Ou9U(h#Aib|XF57v}o^|MYFYaPt zM!K;LVjILZNd5#_KU=vD9btP`y6pbB?Vj}hx!HWzh;09`bYmODHi&JI@2te-VmY!H zwtTQvw(Yle+wGzlKX`4ue?&I04fcD)Hs`EE<8rYanQc4I!=f>HH1N-KV(Yx;myOAq z@|Hb^QY9wqlDGSgDsgp0@^G4Dvrk{(s70z2wStBUp9{WzA0PZu=tj9x4$7j=e7lU@aKfumGKXf zdqBoNNX`YxxmK=2N65}g*U_k+@E66my^Le>DK8gKM?U?GY~mA$Par;lG%0z@lU4ehI<(S1LvLK$IHw$DZ4u_VpH?4{=XPuS&*)XxG523w zJN2LRo90mr!!P?>&qzjpI6Zo!U(5%P@dT3RK=K?&p8KS*Y@S(CLh z!{4s&D+l^0fIlj}tw{&&&0mvt>3U=#N{*6uNByVfgDltR-Tj}2miitVpXY@c}4*wPPF*&?PIc>LIbse*w6SVFB zPJO2}kb~!_%NLvIYoAK<_mTVZ^Y`&U5B~g-+LmWXKt59j$=4wF z4GGnd5WVmUI~cAket<7?u-q-|z8v31h( z%f{Cg$yu(f5=Wafo-9{Z>2vDPO8*>GpH3=|SzCm;?hn;RcdDRE<9}GMx{g`PaqY;5 z^toCf2hUN-T(>5pKTH+T|s3ZDfU1p;h7LCQ#2h(;pUD(?0`DJ5qp^3gr;#*!>98B{{vw9s4^l;5zt8H2D zfULnl);l2c4@lowxegs6JNn)F?Uz6w1@If<+q!Vmo6~jSOo;(fAtu zp0v$OC$?rhzifP6keubJDsi-4eF%MF>8x3*Zr0Hh;?1N#(%$F zbse+r;oAM*ukV=$a_}6L%yn%U{b8!;7xMumUO?7$AnQ7ib=}_zORwvq=OQK#>9?g+ zC-NNi6Wp*ocUkR;{*b8e!1pHnvT-=;yhjX)3nTvof1Q$TVG$oK`x zb0B%n%5~@nS*Rz_$GPz>W+&v6<&h)*CsfvkVxacz6^2u^l)Adi})6L!|uwOPnd;-Z;ak*HI%(k89VbS;+{YctorW0E;o?kY;E=bOD zRh2keukmE-pDKM$9a`z16YA4(0(KbG*z#^Ripi}jro-*VmRx98`&$v_YOJWp-QehtVT5_p$K_K-Md56Q}P=*Zfw zH_%6c@hxt*%O}e#&DKEcKAyG}@?YS60tfs#K5xE)F<^IKEu4wsW!e-`qzCzdzO0Db<7$;(01X+yBkx196U!Q z^TM`__B2(rtN8#j--3*PkUb! zN7P4pQT9c$(-j~*2z$f3_w1`Z^7x|8zCDk=w}$*vg=nW8QM;F|J34B69^E&-Yv;(_wc*EV zBYXC_W**r!ws+UVJ8AwNwe7CjjxBE=-tmt6w!HK0_w9J-tvkMa^V=VK^F#N)7n z8{fKA_B>-|AU?$YaT$E;qfrhx0#cTo>rUpPJ^Idp+`93eK4aLB1OUvNi)LH$wKJbj?Negx~&S z={m9Y&UBsFY)y7N^67Tj!Y2@$AU=WImx6pZ#>#c*2-{HHR>rq`;xYMT-~UY`J(0Ed z0oB2dk^f@Z#3vA+KzsuGJ%;6CIWpUJo`*%_>tf)a>BQE0AJ=8$YeaJPS!0zrnvuM% zGpqDDb+G%_D*ZF7KE3R76S~56X1DrC|Jxcr(cPHUtFC1o_h(aDbB>%)tVS`6eA#E? zCNlcN>CqegVm^TES6JTSocm9Z`_C^Cmi_LdEq5gD$YL&DXErpSY*Y^9qF2byngE@k z-jIEIooTJn9BHSx-J4&XmLS*Sq9IlG6h5LIS6)3md5zP`7_yjZF-BHwnu%Y%KI_WE zYT~SQCH#o;(fArT znYNkf#MS}NFPoQ6NzU?8l{mU8dCN;x`kXr0ePxyYIio(^ulq!6i!iSZsE_o&?VQGZ zmvTT|$E*jqw*MFPJs0^;`W53BPRIO?tUl-x2XGuU+1epVx*0J^1sLYDd-&;DE;-kF-C0 z))7{&Lr2I$m!oNU_X)%&5T8JDEl94laveG{+jgFZMRUmHsqDU- z_58AZ*{0aD98#svsF&rCD(yS1J~^+oinULe1HM9S%bNDQd|dZSNe*B=z_s(gp;(Lh z+vzB|wpo|ao=%V6=tJ`XB=$f)!vy&Z6XY|@?ZU7RyB#_VLK;}S@&k8|4E3|SQIx_u@KpzFhw|lyd zhtqpH`ZbHjg1RC9m~7$`h)*Csf&CuCaTJmrovsG)evES8iyajT|Ix4vy zI~Me}sW7Bn%?FTmxQ%VjxhDg;CmR#478=Fo$);(T;oe^*&^25Tb!4 z@68`C6M-K5`EIr2fJZ*#;hfKSz`^y#vt_OyGH1MRN$ZK$JS-fFFS@eD)wv)SLri+uzQp$?R!Rj z(x-b4t4o*z4yujyzio}i%2vJVI%b~X+L=GnUUx=Zm(2lNGujjV5bbI{fINr~uJT9@ z;G7)rAz|4Zux6pVL4C*p)JL!svm6(pqH%Ls?HB8#egl7)@XN+ctc!DtdCLI@_vGh* zhPQ9>Kdg3St^@}>a&O2vpV5GPMq}kVbY!;eJP(VuTaWLTP#?BNJiki2*?6ncKIhe@ zXEX~|W^wbvS*7nA&Q=H{ByjlKh)O8;)c z*w^I$?UD_;9$z5je_8F!+y}ndBi{k#yx(J3E|w!?uLQb0+v)856WQ3Q@A>I9E1%AN zr~ZbC=q9@;!c&1B^v-&pK=u+rd;DzX(te$Kzst(n~uxHa)j)m&u9-%`I|&9e8|3!JMzBt`_8u{Ma$k- zpS#wlIqwrljDz?Dy5BsF%1xo!w(~qJnj208{+Ui}UG)62xuNIJTFU{Wl5b_a9+P}4 zW9y>iTNwvEnh#rvS^A)r_&TAOyzJ*KbcORca}|HPWVPm-{d(1POpG7V^;`d1zwsN) z6U*Yw2lz6+bQC3I%?Gg8pRe*r%)25To7>_Obil)pq23ko*dgU%`HlVYyh2kX`@j zH1}MV?Yy5q$N8{BKD&^#WNF zfY=6^!{TzW93i_-bDib9Y1z)3`_D(V&v@G)^#-vGGWUbb{Z_6+N7z0t+m+lc{iNnnHQMjFUiO4TDR79OpJHx`VPhTWFWUJ-mcReZ$5zR zY1&)`60;z4{O=0mIi527KOomll7JVWCzo8uq#f6&}d@^O10w-Oc29}C{+P#3m3|2C;h+59mj zIh*6hzczo4-|FpPAG?2`wj<|*g|TWj{_&+&u!>IwNjly2$;GRK412ARX+a-PeyjQx(!remne_#F)7tBk=($+t3& zPD{R(n5Pe0iO-JlwT;1GE(zBy%yrEBN3}*-b17N3Fh(wG&OiIF`aCO;TNba^Y29Kz zfc*B3&A%Wq53+9g6Jfk=p$z{w%6HZ+thHt|KB>!?UShTN^CpV@&sw*bKCrAW*vMM9 z6j^&TlU?+6_%r#lN*5V&Jw%<1XK4Io>lVLk8RG&`+#U(H`Fqj)bMT+C^UrC|FPnb` z{yEJ*R}{;6f1ABS*IO;9gREOX)-6`9Lr2)|`dfOoN2C)sYb^uvBSh)@zVSD4{G+%CdB3&b_^4G+0C9?f# z>89Qwwn1!ztP$dJu^eF=vRpeU+qM>Hwmun`uZdJLo<8GkgTxw$ZIHDHN>{y(ZoUH|_jK#CqZDBmE(VS%K=_+GlSn{pJ^|a(|F0T@s^g%1} zwV;@63-W6?my`dQ3&*v#J+D_?$LzHo(;UL*#p?q(i*;R+&~=*2%?FVCew&j(VisgB zzaWg~a?0?(?MgD2v;H`)@kL$w#G|O6H&N_=)?9A-z_PwzBWo@%G9T-204(hg#DC{K z{?5X{ziX|f7xw-}e)9cMLwJxIuTTF5ZqgVlywgruZNGv@ZV@_Ld}uw_##7+}+HvKl z_n*90Xk~m|8*eQ}N=^ffKEHNdei!!#)zn$vZ-5^X?UGRXgpB1T!!e(`(rZm-Wo)*7 z;X53$?(5)xEUyE$4ty@*mtAu?XA8bH zYu9IlPqS+MwNbvr^^ea(lS}h!$kZ`1^MfyHoDS*??+SI59r#z?@9&#Bnz#8W-!`a6 z{%zaA;`V!A*cjaJ@0(Z<6hF1o?|SoQQ1yy|)cgZxGwy8$I@Wq}&MG zqtB?hwJFbUFUqz(8{cjhMcAwBjfMP0ZyQ86h;5L1$K_%bk5Y1^1iY)yH7*)e=Za*Tzl z<6*Vd@5FP}m>!b6J*QkHE~g}K-wUV`TeM*-@iD2GS{>w=@V;kJF{1x%qk2B}s9ts5 zYOvRTQ1=W|&(eKQAcr50N`CiwF^E@FVMtt<4`8p(ZT{i>R$qRb@UuFP?|Z~vB9~|N ztkl*kS6#Y7cRF_^m%$tP{91!Lvgb)1DS=;xijIZ)s_e0F-1Ezhg`Qio^$o!HbH>pF z`E$mlz%T0lA8K222uS_{$sr(f2FRRYp38e2pd;-}g zjLXGxWVY=*4~xe9aL2WEL@&0cJilzrpOKv9|0=P)T4UVuf0Z~KlDy^rN-?9lx6;3h ziiy+8&9oyF=I?*kSkV8rp3kc_cI#DF{ywK`FaJxev8GcP$RX>fZ2k`7%~TlDujT`I zw?ALyk^Bvx{C$(+v26Zc+76ODguQ{s+@U)j+4YG2PE2~fGkC7#eLElC>o0ZJJ{X-l z***Mao>cy^N7CbmAA9tX(LE23dzDVdJH~fDIz| zx*k~w`L(i%PvAC>_{8}G8RcR*LiU_=#cc)uGQRqIorZkMyVp4q`E;B238bAsd;$kN z-sh2WBWy#oRdSTP8{hKOS^1PV4{dx-sss6T-Y0O_pW_qfn={JAa%8scJP(V;{JFqC z(}}G$&rSR;8}q}Gvw5gWY)?zx=AkNacvkW@4^@d7+Mt#GUEf&SnA99&Z5hr(UFu_{ z`L+|vW0&-*>zH*m*N)s)YaGbPKV`pfIhN6%=!fW6^8tLBKVRjMc?kY(!WRk4&O^G7 zum>0IV~M3)9e*ydpuNUP<#w5ByGyqCT*43@guhS!mXd3V72jy5thQfKXoW)bwYbx~ zg7&9Q5$%|><^H5KMk{0MnpkTwQ1aSmrgnWkllX*MI_onD_#x3Q38g!#mX{3Mecnp1 zHJO#M*__PhF0mx{|M)h$rk4Aeg!yHNE__S-DfvhO-o@K%4dxuy)66*ncP&_yn$;uz zoMO`pm)8p)COyCG+M>NHTi-hPem&j!?fL8J(}7?3^D@mp>;Z%KdVHxz=1BP5vst+g z9U*&2w#Nc}6u>_&zO7yB^2ye&&GvP+2X#aKZtoL_Par;luky(AT~@9`N67ZvT5H5@ z1%E(%o-JXY^|*Yp{rfc16CL(`De~#%-X{>BKzst(_lnC+54IuNDmhBtm-y;C)?96q z`RnP1>R>vM@AW=`Tl_gbao(FzE|w#+ZRdGdH0FEOrv8~uY>jw+*_fY^oUNy;#P$Wr z+j_W49IjW6uzmR|F+&^Jdb&#gZY3sszC~BKp6*c}vz~5WS8Md^RoA`_`vn`Gr#5@B zVm**U)=|lQo!KDXOobu+YCeGceu?E^&RI``tfyZgEW4ggm(x-p!rsN7s5RoXbfzFqCkUpJdy zhUmgK>m$w~cylk&9;N0J*3HZ<#s`a1vwFnq=CLncUN3x@_58AHh`uk$);A2_ubcb6 zBY)l87U;pB*K4j}-3+oG1X+85teZjB%~q~MN65}g*U_k+@E66mb@P;b%3C*2M?Sql zHt`9>ClH@N*3BU6W-HgBBWy!)TN&ThFz4ix?fIsWp2*t!hV^NCBmYL(#3zt7Du_=Y zYt*=0EJtSB&hxNne9Z^`nNDnV__!_`UxSjfHENYOnv}e)QLFShb!er3dZyMk7JP0( zSGdOPQy;O$+^z9HqgP#POzxq_wcZ@;sWsZ87)HMAp6y6Re>gpQqhHJiut(>XuQ+Fo z39`oQ7nWUP4!o?^pg!a^>LYMA!J^r1?@IS5+Lx}n_Fy{l>8;);5St)AfwWUxZrZR7(N@V( z@@{;~FVphL@;{%OWYLC~raF+{>U{#Y`g45Z{Ph{-VmUI~cAket$Kib7pXtO_$6blv zWyj&5bJjU%LcAIM}4m_a~vaviT zpDfq6Cq>KN*YsZN(<9y|ka-%!CvdYz+R@5&=*Vo_c^($c^``>=OeeN3dw$uN->5Na zxxPwlk4xTieU&&oLC({6A9z)X8QP$g{#`S@wo%vG-`XHJ>SL)emz3Mt< zea*F<_o&_(`KRo?!q$xbL_b8onhzk~Nd?KtAit*#b_?Gte74Xij=!wu#JAjamtB4h zB71E07d6;>8T0lGxsdV&<$2nIF|k_5#^3$}&D+y-4D}_~_j^6aUi$Kyv&XR>mu@;| zm<~g(Ke|!BbFKauz$fp^q_=^uXI0L;#M;ct!}g)icZz{s2z|-X%I_BoUbm8#X5W)) zCS!gddv)UDCDqH?!q8;7w)0DC4f=}p>9*IW{j~6XTBCecpV4_jj~$zyF>j+;Zesp1 z8N=0f5Fmb--^S*A$xakw&G?~g8UIbrkhq4z{)_!fu4w+=tWDy*ztPvE?P}Vv)wL<% z-=q(B&;{>vpIg>UZBwsJ<*$d2#CS*BEqYIAgW`juSU2bG1GNTY$F1e=&Au+tlD=Et z87Hfq&>ikUpZKuiNX%*Pi^-Z#VVqhS7~2ZV!ef4a!p_IOU%!VSDif#E>Z=*`Bd^gz z$@;G@9p)eULfYp079Q7_pGDDhA=|0`XHCWHlx({-mG~CJcCF#r>u4LDHn*-;UbnSV zv;BmvQLGlNuU%(#2;0@l47nyOH<^_%D+Uui&s-AYJA7TQOUIfOU~8-AmmRAIB^Sp{ zV%M}^i*ek{OTLx9M|&&%cmBiaTt4v;{T89-N%PqHPu&yiBgh$a`8FO|%Es zWgQ;(^EhS4f_RFrwHPp@Jj~~uQ)Ye^MdYARZ^9}5-m2a4UGEzk-8sIi)>qrN=j(Ru z7_aSkhp_ereZ)AbZ+-~G+VL>ouc+CFTRZmEHq;*8y>qYNCAA&*KK{rfyY|-Zti8(% zzq=(|&$Ep!d%n16YZo2cm;Kr&)QfKeZ%E>| z?0wU$my7i+!1sFv7eAW6SI`Lb;LiuO7Ghr*WWN(+?FO<}4RZf!|)g@Z0*+y@DzEl($!K zEb{3ay-y(R1mY9e?{Txoc(3|^Y|~aMULt&&7T@-&&&elyo~~KW>euzA0Qm{;6NpU^ zpFr9vE*Hy@YY!dKR-SbY-*WiDkEe5Rv%TuGkx$>`eFC>iD~L}Z_d{{HGpslB$Viz;JdT=KSmQ6-K~NZ$6UtHd1b*Ghbx zS4@osxiOsM4=6_1tDfGX{SUqBI_7>-&~{=_-}eaQ;5jO}SKXNr52lK^FdsnnszG8O zWUm^$P58}1_C<{1_|4k?2<9IrhRpFdYcD}{Yfy_x(u0u!2E=t#IR8QBQZ%XH+ z^YSV0^V4IIPal#^d;*!1KzstpwQ;#vj<9_|w&S*fKP|rPU-$lS{+!gW>l3X>j7)o< zK-vk!C$Qh+W{>flB(`fS(8#ruPHcQn$S1o8YqyIcJRAA+z1}B~{14(2NdAw@O`X}c z^E@mX^9Sxv+st%g>xAc*jrq%xv;1Erwl`{wTmG*ShvSmB{9h$zXoFVzcV01ZNx9kD zGR)uKtv)7y4=bk~)T^#z_H?+mV{5IkE*h8c%kE!yX7s1iqc{51d;nkW&&l7MlfOao z_xB0Q=I?cHt2L+(xtjV2Zdk6~_?EPdu>(=RhUb@!+qMU?^>xAbxqAE2{9HX3_=P_| zsCMM@D3H&{Kyow4XN@4AHCnk29U(g{+oOR#3g90T-|iod$)~(ry)CF4@;@Y-_yqD< zBZyDn0~zIFIYM^BklG{AM*;kP@y(~J^2z<31Z{3M+nc%==sJM9+V?r9FoC%dO%3}(?9U2lAR`VsFFh)ocmK-wuT7t0Z{5N(wlCGWd*y@WSBuXynt6%Jz`TL3{%73Eb>4EEmg>*|zgMEIOxcedyXcq8D3}o?kXMoR*x; zX;pGS$6M1mt;%>E4CJeftx3t-oLFTXoR+-Z6IF>>+P{_fI-;1|?|(lSUE!Si3B?$5 z>QT)%7xb#@n0p36+mSC*zxiX%m#E}D(S;!1mvs08;>vsg`AisOJcG=s;BCUA!m@L! z?unLui&!cgVRPZjYYpnjTuVJExKZQjh~{CBDsT!}2L_uAPf~`Z?LeCy==o z#3zt^9hZyc2;0-L9k&(yV}VaI@+ohw-KOgktx1ghy!Q!Yt_AT4#HYACl-)2aU4cHz z@Tp&Xn`>29N z<%-5O-Rr9UjH#1q8{;4RWb^hk9h=^hT;DGt^dLL@)y1AwG989a_A6=)`h(}4c)=U@ zHfX~Ml{43}H)G}D_@>Wyi($_y4eNSza$AQzB2Lgu-ebs!qDtd$5ZdB zHE3h@r$!%6WE}s*wa+S{$K*`UI&Y&{Zevb08N)KqfS8@4Xg13FZ*qqAoJZJy=qy9c z+9ZBfsY~r2>&4dKyAyui^ADSLr1ICp$M{*LZQB$5v2M=$G$t84tWVqbWM3E8Ek1A7 zPHl&m#}56{uGjkK-=6z>F0q~P+~Uc2Sw2v|tmmcXe0!LzwM(<-rD9tq7i0Lm)bP)g ze_m=%@v>F1*B9iStKJ8_XjwMfmZF%hRNA<9mdqAw>BVdvBWe{wi`vh+H=lH}qpKHhEVmU(g zigd+o1;6u=)Thbc%->@=75Vf>-Y4)Yqz}X=5TD|5u^eH0O15b$&syToh;MsLeW&yH zn6~PA(}CVU_CA619f(ihphuozuyP$bLKdQ}lB49^_?G7{$tRoVo9!`Ohi(0qU_M)?W8?SzZu9mu9f!x0>-)VPWRL%Hu{|c!VTkO>uTkHqKiH?@1#iLIz}E{Z z=YE+zCMyryhdv(_!}gfahmJhDTJXA+^iSxhGvgC)*h`j=qvV^<{wXF z;O{v!26cR z61I*#mhkiL+YWziDt|qEjQ5yMDL$xotef+*U#HJ}6&LI=&3z#II%HR(X6>}n9@Er= zt?e;cJeglvK2X1`J*Ex5Urg58rP&@+Y|G?g4ELDYe!Ki0(}pqqew$*6*Hy`%`_AXP z`N;f>?OhD&!8PV*Q8azX&d9di>ks`-{vOkAT_4I9wQ1LdvNgrO?Gqf9?Yupv3)j&$ ze%RXLqHNpRv)vqwupW(7t4~ohbzz^zvRo6Eo6Jg>75|BzXD*5HeZUQS(|)r8Y}Gx# zY_2*Yxj1GMyQckGjAQn^iSVUtnog|huqG>42nk)12$B6S-q|X zesRq|>b{13B#=D`knh`oe8&UiSrjYRp(A9^$o5R2j{^7?#J6Wp2R@TNdur=Vt_$g4 zP&ec+$tFI5_ypn;xH+R-EJw&faa$SRa@ZC5WOLZfiO90|_50KIM*g3?PvBepIX-dD zJw;qDmLs!m=XqE(zRm>xnNDoA`}Jwr_!^L$?LSnBqlV<|+080_P90k5pTP@SkNNvL zbcOpDpH&~d7@pSgNA#-enEOFN+qn-4qZo!?_WKa^jQ((X^hUp!4`8o9XYY=4o{<50 zM&_S|>@yg}@sqWGk><5T3YkmapuC_ua?j%GD2#O_S2uqz8jIV$J{>Ej4O>S&zice7 zKaj1jPkhUDy^Hy|ZZYr+f1Yti^7maq_C7)VcSxUb&X~4x9XhghI~eGr!1xxo6Y|OO zO0!&dAgCMiH_7H}J@$LVC-^V(7?z9W$ZXqr9v1D(^^Avzu(jRu%l74A$yr{h(r38R zO8d^MPi8gdtx92Dp!3NK2Q*er>Q&b<_xfCW=9~3He&0uRBR5b_!BQ-9T!f0o)A%>0ZEt$!2!qP90k5pA+iS z1?4hpi!k3kTYW^n8`bzfs#jgdtP{9)@!M*RjwpuVmt6<#&gc)PM{o3t`2g}A7La@g zlJ7wB-SdR4Pf+kipP;g+Vd)rqyUT%J_)}B+vaSGG3xWFYu-7Bw+RAn4$lC32ppOFMTkLL^PnKJnt%W9ox*>nN z_X+Ix=lH}qYoWMYEJtSB&hxNnZt3;066(X&ZqF~;2o;T|iOIC>O)oyodw$t?8v0M!`bOaU zXOE6t%76B#Gth%SFH`%nt^iqgfaC&jqsLbVuuiW+iXW9#t6|ZOU6VuT+WSe#zUKwMxv;6{yyuJ20Q9y<`Wc6)x=@o=GuzN_&4ywve; z`Sa4zKo9=htM(zY5wiOa>N)>FA7$_lif{AMHu;n{FZJnqWFh3Y zc%Q)g{5d{xzA2+zEJw(${%(!C44>AEZ}ZYo`DEX5ZZ=B7t4{^w(~qJ zItQ%&p430niLC+8FB|g>$=MuGCAQ}zZ*xGEIBZvrusNVg%+Lm{^zY!6wT%PH&(@Y< z4&SUkCWl{;kG1JqqpoAt-CTR}quM(Q>+gUh47rD!tZZR>o#?F@MuImSm6ch+Y@JKmYIj#{QuT-(CLhP~29=x4o3J^2zp6(nwEa?Y--8+TO?y%O*a7_ypn; zxH+R-EJtSB&hxNne9Z>_nNDn7@%*y!wMpZ_)~r?HXusrb%~_?-se|o1ROz4fSGAw* za}&D4HRs#ZN31!wG5++=JN2yF+_V0CIjLE_76QMxX1Cgvzt;`k>yf|L%{iYZf%J=&>(G(up9u6( zV0_DSt3U6y+&niL)D8JP-X{>BKzsuEUK>abwsIXhGTU~Zhei8xjgOU3AGU@(zieMl zNzQUgl|I7{%PCdbcf0!JgvPtoC(H@&RojviMt@MBf9q9OPGEg-PREl!Ck*6FzU*G& z(V)MVboc|>)qDWivjVvf1<45@IpM2?6?4LleUgVPX1E817S1Jq_ibEj%=O9_@V?I5 zH-rZv@$@~YYl;=$Xs4xH&=s#-UWjaq_Y%vMJ_R|nLA5Ynye) zug^W_N7c?*_nh!UqD>M?SK^j`438*BaZP%y7s-KU^B(uru_*T@_*Vas{CiIG%Me}o zHuYnAUPAN6YjiyD6W7=0`2KR%=WJ{n;X|i<;JoZyed=fRjO$Nc+b-yvL7&!Lytc0P z>n`z|^~F|iA0N2J+NdZZ2O&H0Q~Hj&>PdUq=p)uw2TfL3gcd4Ac? z%G))^+gx?2!205NU?012-Sf`z7ee+*lQq;K`DF87|FiSg7X#G6Q>#8Te!kXV9m%}O zJ_Ksf3E5}z2j$b%i=D|jFDY8~zHl9VTBdvjM$tH$`02FGOda(+>G@^j=n8Uv%~K_g zHfep?N}p4Q>(M_)4rKWrzj#9?xs6@VhW8?G?9ky(ikXp?$D7d*pWmIp^6_kk6k$K7Rr!H$wKT zblEdxz0bKV_ZhN@$o98NC$>R;vjD_4c)!Q6Tr5Y}-ug*Bn;+#g_`Ag?w%JRakWcn` zTspfXI_!OouD4_4zfHEW2~uAWpTK^Pn?1(uA$A-0mY@+jA^SXTUOw69aqUUbviGBr zPv7o+0xf=#O?rOW7(OjI+dHok!yTGC>>08u zaX82xxZ$D-aW|P{iLw$-u%x>fgb$%h}!W%kNmA3&dI?be`g8gyK5ljM#%0y zRcrJI`Y3}xA-?76tMV!DdEXvgk1T}zVcEhbkl#@S@dj8Q*gC&==(A z>e=zpc9aGs)lY`LEJT9yLT6x(8-)VPWcTZDcG!Ng9wTU)UrmQ0vTJ^&)}TN5eO6xZ zPI(*n+OKkQ`0I6SXTB`oGYS*tOK5kb(SX&sHJ?ePi z*VHz;hPBwb|B=YRzq;nOM)-S?=rK9dbI#W-$?uAdiY3;ceLH2 z_k_CU(wHzFh^@=Nt9e>6z`Ezc?_^)cwJT9pJI%fA_Qu(n<*`$=etFkfJeglvKA5nH7d62P zemBs z*TbXZ9~j$((3>9H`@WsyQt$?y-PxnJYgKwR;>vq(xF-<1Q==m$k~rLD5`s(yyt)sKU37-}3W&$?p|3 zyj-mBFnoW%zV7b)`}M&<5B{9gI-dPEko`H3H6h3zD#(4QmFv(EvR!BN8$D4y;rEJf z_v@qbDer#$T;$Ww$tFI5^dX2(;Qb!MayRGqBV(; zpO>k2;%`>)#P$jlUByW2NRpM|)^0tRiC1z*?+gq*Dzq5*o zjluW|_aHv0K4x#Vp|$v|UUeOFPbX-b{{#JYN+1W%QOP}s{*3-KRrIU*0QUNG_5?U* zZxy^vcuE+qY2*0I+Ji`QwG@bu8T%9cy=2vq`wr@8e6T1LjphCG=~y$}_;A|u%f|A+ z?`7-T4&UeRbFazI-yMM-{P}IQEqMtf2Y}=Nko*mjzpY${j*wlDuH#WX;a?Kp@^{ad z=I8Ijkx#!PoA?Bhzd?Kg@Anv%i{%L0P~29=xBPuTKIP@_-rrB#8~NXrZES+H6Npb> zzsJoUv+}o!3Q^JcS_u3z#rWCjM!!P?e(r8A1I6Zo!U(5%P?;nBWI*?ok zlI!M$<#V0=%vt(l1lWY)-y)dSGfo4_gOvS+Z1GzJhVUR{pMLJqHN}c=w9}4#%iDfM zp%n_z*WwdyD`HF;Uc^2{$YUyx4)P9oyen_-S zLg~{gmX{1?mAkkmz1EB5K(jfO=RIRl_VDrTz(W4_L(DHjbm3dtPouCLulKyZf2=u& zwI_3q@xh|htRC?`<7J=UL%sMl@TZC0vTK7`FBj`ufbZ9y!>`LJE(n;JA_SXGXtw9~h-_((U z8x_kZG*_TMBy6?+WwltI@N%)fL-2k6p6Jid-vfaj{JD8U@>~>1t_0aD0C`pmBtKcX z4jm!8=F|EfVpLD~J>pybo|jK~`FkPqsa-aCRtw}=EfAl;2Rw%5VmZP#6t|V}ZSSDA zIX{1ost$>^Bt}+wpFr9P#3yjT<9#0gUp%X|<};~(GV6$X4tajr^}&?nELT>Eqcf7X zTv?^hset9mD*ZF2K3x~YVwmf0QXi4)j%my<>Q&bz3B4l83N2_K&p&btKnON8^JS%bypVmZP#6t|V}E!XXqPkC$AZK^|}Es335WqVKz zkahs^31lt+`#mmeC-I9?(fDff@f+%;o|`i{mn)F&Pk^{}=PxgIdQT9afZTcVb_e9MvLv*>m{ij-kxrDXA(7#+? zpO@`_`rM6eBYYURl-Mmh=g%Vdf39s8^ew>Gnvz%N{eDd;ezU%4c>DOoHP%K&5jn`& zZo9qF6X-MksM?t|C9k@Ca`(?Fqz|*GOV=B}RiCESM%+8l$7lXM(Q9qNnv&OX`Q+A= zx+aZk^B}=v*U_hIHLrZuY)r)QHT=(Mo0&%HIpz6fOZKpG`q2MM`qS(ghIXG`>sf0wN5+8uF7?s} z;?1wjFF{v}lXL}$uyAjb8p*V{u*x3+rd6|txt*~auBjzS})nWy;ZjJ)@pOt(RRFcG@p*i zCtC{~kxzMRwQa$=xYhQkwcp+t*1CZ;1p7_q6KKD=b4fngZz8o*kUW$#grA*UE)?|bac`JbPR zc{^rzqxMm^=mg|BYLMR@05^K%?~hoy4jtk1cHQd|pX{5@%68so!Zls*#aDnAHM(?N z|7*WQ*S=VUZpSrcf1UW2+fT`-yxe{| z^64$!C-6S$1MvymFOXB z!(2D0z9H8g*7#r0tFB}2O9X8Po^yL+Qy>S=QOR6)D2NwRVMxE24=e5Sx{Jge0(1Snk zRy*=cAjoqxAnPlT=NLhrU9oZ$2Z?Txst;7^KgKCOS7ey^kFh3@xK)19V7hrMsq^>&Q>4(}8APJfP1 zoa0kmE|w!?+gB_92X&+X{yOn3*N)34d)}y>3o__*jZkX3=)l!T8AU^ge<31mY7&JH_QYCrUcME!<36MosaKkemWedpo(`Dgb#^XH$bKo9=xQ#+E& zLGlGiz5tnjK;|DS*P$cVSI^UPd4WC(;E#)Mx&EYl%A0>`y51=@dD+CLaUt^$h)*Cn z3=GS~a)j+m(iOKA{Ejb3ed_qK{Q2iZ+ zr@Z-RP<22SLjDQw6G-2I_yi7kWd5;o9Xc}GcAketbN!{jKhue=4PRI-=66fZa($K9 zJ}P<3^;P0?b*z1Lo6?{kje@2Wm*+mncQ0XUZo+#CoXR-ZpQ)<0^GXq;?zX;Qrum!P1$RXxrcz z#+;3PhkX8yt8n-HidW8!^IGoxZ?T%|6ym3fZI5BHmp&8md-1<^+yXcZpZP#etGL= zIx8VQz;lOdxt-PZa@6K#+BhwpXnx1Fmgl!zy?tQ4%=6}Z)86*wc#?dr52ju@<9$B) z9oIH?zlc`a%ISApy={rk8{OY=jlMPV-*IhI8TYGjEYW?KWBGrfB%u-MpSQhOl$Sh~ zk$&biy4uyKi|0DM1KJL*HBms$BPlC!TmiPtI=OzM&p_MZKCcktIbZU+y;4rL!5vp& z5?RLOqRB04$DpaFShj3-k0OCgr~d-jRt&ChOh-Cjw1m!k+_0XU`tLn%#z22M`<`u` z&i+fgJ+z)EcgM-UK`Z-X+_`3K64{tF&R6x7xi>GrLE8uQ$vPof*&ot|jG;v4yVn$^ z$)ulojnvWHdQDE=|DJBU5&Z^j=z|Y~@dK_s`g9*;e#h1PEUW*dU!fh0Uuf-yAD1<( z>A)ca(*A$;)3hgjbW!r zloTJjj>yr+wiej@Nbj-Kt)|!44EgdtJv}Y-K0T-HI_UI^WuCzM6n=hzk)K~+@)U5?z84+eEmc4n}GH`4eN5>yFZRG=6m-5 z*09UrNqEioLI}QEHRA(Wj*fXji|{$$a%X=_6%skF(g#MqcW2~#cSgQ+@*XSGHEpbCBhN|ZlZ#2)k`5R1I&KS`{z;u|Yq!nM&$!7sn4j@U z#+Yu$`5}FA&!HI@li>X?981wSwvteY?+ID9SsmP0P>z8}?|(H@#)I|KI4;r$#tUqk z=Md98hZuPd%|gugIn*umgYRs!Q(ept*iN2D+)jk->j7Wq#qxSQEXTNd>ti2cYn%K? zkB4zq=hn&kW+PwDqpYFf&!Y}bJ=DL6@#VFQk=HUto;QrVzB2OqDjY9^MlJ1_XFDZd zuCLAR3x9px>FLv3Xp?C&tD$x*S_i{^IA4 zN>$v4(g#NFcSg<)jGP-7IX5gsJdL>lHJJ1N*hTRHZX@RfZlmNg=GF3gEN#Jtb5Y1DO}b+#h~k=wsU#{Ys22udj@}elqg<%2>}v?i=BF88m5I(&1uW z$1T?G7q>pP)zaqYXWZl*%+L62!I&mG`_es!KEfFB9IA!mDjA-H*Sz*1_&Qu3A4qX@ z%nMp&ml&hLySC!K1Pi69D>Z(ys+8Rv9E-l z6)eZLl5MeVNn{?43dxfw`Q7l}%_R37*saIF{{06Iz+3IXJ-QF*MQU`DF2&q~apQN? z>t12nF+B(t$_9&5wvnfl#I+16T{AL;je5}L#Z*niG1v5iB0Pr5ih!28GaJ|ijz z+FV#6*SV(z%1fWvpRX~_jcsgcBhO9d^PKf^WCcyeZJSdc0rRtv$9aRk7<~%<-`vR0 z>Amp`rw;13+CDM1uxa**Y0f8%TvrIk%b-!)5_P3s652)r=8r+1+^b9(8M;qhm<1H8 z@6kY3J~48f7&%VD@iJ)alXr{=n7;sh;<}5z5q%2Y*FZkcd(FB!+eQ7iXtS}6>=V=M z6C*#9?d8Y{8np{?ZtyzFV?41@=on`K`Ht9_^vZ!5FUJPQvM7OK2R(iI&i0A1CCW3h zPmG)kyj-eepCYl?9144%`%S8U^07b}+sd^0k@D%&`DVMFr;yikJFS6!ZqKv%k)GSNt~BQ+*O{vy z4FCDUeNOuv?;Y5uycRI>dd^tWM$Umua}6#WFM~$yY^UvtqeAQdoUY@2P~OUep5MocY50X33YS38QC@?+h*kFUA!Dw zL1WuAnGY7DZMoj$bX`tDUyaJlYvof zwi0cAq{n1Bbn?C@KgZ;9N1vbL%7=MV?p@^P*x(qP&i;*g2+y7E+{e1y`Tj@jW4>?O zjy_ho+RXP{x3e7A?J>^z$-JON_`YqbbG%6v61iWc4~!SuG}muTSF(}s+kQscJKrNa z+q7p3?whLr)$zI*C*gP*G`3Cij+Nxg`I3x2$$Xg8T%3w+FtwTa@Ce#upBNKuWS^MkeCXxK3YxSn z>2NWx^I^rrQ2(S(w$;JrM|ylsfKKMa{2WJ_jy^y8oZE0Z`)48cX(Q)Ybmy}}*hiet z7GUn$2T#IlzE4B&ZM+WeI~*PJf)?R?HqSX;qzZ}LFVY9bIyTMujA_nijGWJoB1Sr& zWv>fE|9x6;?Gn=x-|fS8a?Q)_MEIYr8Rz2O4(oS~+kMRDM|wP_HP!1IhkTh^N{kIZ z-!*XRVSftMHs>)T=N3ku$Bdj?7&*5H$IGBm8`CU4u-&tr%=aT-`qUMDlJ8*Tw8mWP z=~H2}$+?A*ePU#v7}+OA_DMKi290e`Mcdx7V*Wzp%d@9>=u^10XA;VrTFo&MjW*dQ zM)rx3ePZO=)60<+G`3CSSeaMmujI=)egb`xIXK!a=)BHy>Y%=e?Gt07O|wr-a}M@$ zWCcyymUOt7*Ex7<^OLuc^|GyvHb2s1z8ua`nS=9lY`8f_VpqDjievTP#|LN@C zHjmk;=E+hBeqme+H$!S(vKjIsHVo}1CF^!lnGU*`Up@!_vW ztDSyv+bd!$`Mn)RKFeq1`hbzYE5*or^TP2mXw*(Z+o?`{1k7LH^r;K_6z+P|)!8=c zE1^yHiIII`WSCr0*3I9>*gTAFvPBwyx+x#*M3{W-0_4|@7^4%%d&7@OJ1J~7Q} zqn9HqXwtT%!^ONFUz1wv$3v#gkM#J8#rYs}e}0am4vs!Q`<&x)I{W7s_bJY88DDqq zJ{$W8|9tgu{-?l`@S5`z%htOY>l8=Fyr4xmch^<+hg8L5K>EPQr?tZx9ox^(KhMS3NdC5`avo2qBc-z`pJ?l$ zmL}`Y7`*oOKUe^Nqz;M9Z`M9O!2QARD$L&6ld9aH(;HOGFD%) zF$UxBt%Gef=xFi_RW#3mnD@^=rwo&CUZ;@0Ao|E--2I+m%NtGo-nyAiy#v>29OGPz zaV>>#Y6qE_i)rK3wUYUsp;zYZ13B}&`QEg*9yy*QU+aUZSI&5Ru3!p|Wn?b2;~`pU zE2r-ndfO76H@e?5Jcx6TJd$%|A&!?s982_lPnz{w66%otu|C&^+T)9PEF=BQYm~aE zt%qZfYejk^%%+Uu9(1!HVXdh|&drzSG(T7qP)b3A!V$}u33 z+`XnSO(y-!Yow0m)@yR|{`Yj-jp%!Z*>9TVTZTOb4j7!4^LGt{-$XQJ&i7}3)9#+` z-BS8O)~)fN-fj4zwm+@Upn>hIweHH1ZvyRjJ z|12VH^8c6RIgYvh#~%OUR-exK31d7+bLAH4k|X1?sB6lTDfx3W)sfO9kN z-EvJJ`HXqBoVLUJUN6he=Wf01L$hwC-AKRVu-xjr^=(1E+`HX2Dg3?LfKw0qb1|+r zO>AswV?7)B?2MeBU1lT~qqb8LK7;7gN5=dV1Mz2=v@ORujk@@4%t`_=Gk$}LX6*q>&&w(vVkuPdf6cf% zKEUna9Kh{C$UbKIIxm*j1c`o;0S8ROW@ z##T1+|Jz}HLmT-lk!f-ViInn*&mvZKJ-k?Gq#0WMrQh*(XN! zNjP2xjar&_tR!FFSI$MB!o9DI9vB*L>bsy#juRvM#K=A|^8KWjBP(dqwxq+wydGck zoc>9jY-^{@kM#IT;Q5X3blkAZ8#%8r&3Ww>#7O70tReWU z47P#u8n*}Ge>Sfr3<{kWY=_3}OSAcr9(M z@iJ)Awxq+wyv`v9o&HIkY^#<%h9cdUeV~&$BtQF%eGq+q#&BtS6{Lpn4*2QR|3yWIX=A3Cg3$fFh6!U?#E&LnBT?8=j&=L zWbFZL1LrrEoeh_KiEN|mq?0x2R>QWJ=Afb8d%vvy{rD~coNN^8;B#4t%%icr|L&Is zha%TM94GCV$W@dBWL>9ue6};Yadw)=N$$flx?t|3&A>Qo z_tBW|8pp&~=sudvM-r3ld=)Ayn%tv%U2seCUZI=jYu-nj0r!K2dp;}uk_cIF&dlCN zDaEg!+}m12(OdXv{q$!E-~<+L5%dubWC-gxWenC-Ork*-maM(FhoMZT=Loy;#W()>;k|4*p;3&a1v zWQ#q0dKhi8PmFDCWS^K$w9)0r3L4uUgSNe6#rzq_mvIW9PqGFM9qFbH`P&BNB}P z{rns=+CH9nILvPekKsAA=e(po z(%)sSqU_ILJ@~`@Dt%z&?~lkF%rx%}F!J8O7{o~L4P?*XgHZuYj#=*-ItACrDwx+< z<~g*(HMB(L(Ww1z4ILbcT>o&KyyKp$zyqm2&GnF{#{Zj1j$`f%!+&pFPUl<-9b2b) zl!O_aDpLz)-8>z`tgV}w?;6L%SZFmNbCASIn5S4KRMtwugq*IuK3ktFFN6g9*5%>w z>t^YfMApN;$v$G5#ytNx{C**>CtNr4+9LUkd9|Fj!@Gu9Yv*#eUiP8N7}IW~Ylul! z=dEu6^0U{2OT(|5yE^r-KT~n7;o6FkYcEEwy%@P3WaN5KI9>*g+PY)$JF!lE1k7)S ze16Z7YnF}ZQ@H=n_n=b;_0!NM`^3m~Gb8)Nm}sNRkrgy*Y2LAtd>N;N_rtH71K0*r zo7tx6woi;4Cr0*(k>kY3aT1P~L6f#69WLhe_^SJ8sDDx?+e)_ikse>Op_4UgARouk zPUvNgnxB2nZIJf!vwzaCPwPA9oV&)Hf_=j^=1QLPm;;iqg5-PXOsqFECm`+U*pHw^ zc<*_+bG%3u61iWb4~%@~AoCT|Tw^kFjrlxcq-)HzPsRthJ)GCLJqW?`kTI{8*W+$B z#?M)Lj*(XMh6C=k-I9>*gZPPeb=9T#?`EoyC9Qq{B`lH=~ z&g+9t9n`;rHaSj=>=PsV#K>{-a%2Tf+Lm;8E~`}sL$xczcJAV2$e8;*%>&hsUAu6_&qm~(Y1=Cpb6B)sOj4Z%0} znfO2h&w0uGNbd*KRrY7F9{k~cl|C@?8qZk7M$XktbFN;D80lPH1<%~LJ;BckV0%!_ z|7@=A@RWYs&anBB9=BDV*6XW}e3^s#d=!4J-tP2^MJ0sUtj9gm@ z$IGBmy8vyEaq1&r{%YjQT)h~53O84$Ion44=V+6CV&oc>k$qxJw9)0r3L3RE?^sE` zj8n|Y@N;!cMrgdL|HAf(k>kY3J~48f7&%VD@iJ)Awxq+w*c=LY-{UNB`X>^$wcF-L zdVJNw`5^ORevYF)(967-pMB14koNPlf4X3wF2$Ns#=@P~KEuA@yw-9eKK}qu!fUSE zSa#kFJU_Runa;Kd*PzXm{ULR6zepb#d7qP!^BN=PHAc>BUm`|2uVsJ!!Sj7^RQInM zx4Yvl9lN#f(7c^=gn8AId-m!(pr>CLz7BsKUR49+Gw&$sDDFh&(WvOur>DO| z`;OOl@uPP={k;Yb!Vebo9qjLm4*L<4d!`QR*`s?}&*TgJ*W(8fdUj8)>mM?>Crb77 zU*EC4zp0;9{b!yL;MjH_knG3rllk#05g6D0-3O!v2l*<$r|kba$-Z=R55PP&NZp10 zFgHc>Sl9omSOFcwIqoVMw{YW-@M6K-8-54_rQI85zH8iWW1)M)-t&AR<^Yxnm9>&E zA*b~Q?|*xxg^hy={ z6ORkc+F%vGq?JZJpKYlHJ+F+2(H+_{e@pnMGW@lt#Kp-Avt zW6ZV!`oE>54~+a?o6HeRmq(hh0^)JRlG%-i&V4`fwxI8P|IT&$8045g~y9Q(b@;m=^dFj-4C*WF?i2UGopO5#x+xAqGT zMS=g}*ygyPDDc*DuaJG|)~iR#z`;Gcr=;XwR-@F1Tl;9b|Cf0MbS&q%%R=K9ek4*} zFPL@U!x%tq9msswxb4P5>p(fzB`(E$z%rq-RuU%Ubj{>i*DK}qo_))h6Mh{i{gTMK zq;J|hnBmN2*Rm|;GDb0KB~Kz5^Sy_@v_qa3%V`YUbpwC%vhLhd$HZ+b(se^#`X*)a z+Q-ZS?qe3#7W3@BVPD*}1^2_v$eW9GM7dYY+JbA^akx%qy%`@^?&#cc3T{&Ytu3Sv zjCY`7M!6QYvT5FgVt#V4Ve^Om5p8|+oofrOhmtXV+?G^0OD6IU%-jF$wS~b!F7+`+ z+Lw7~&%3tB>ouNT$nQBdWB#e_Zo&LE2KlVFkR4Bn%%gEU{##oFhoZp$aBOqDP!)J< zxmU=(bnBHoFtz7^+zVRD^5L(bd8+DvR;YlE-5ht39j~y%ki58H))AvHQrbF#`L1!h zjfK_`a$ZY}wQtY~tNIbEN)R`M#jj$q%mzZQNSA^nobx}Hg(E9y)Xv4W@Lm%8l(00^Cl-+V9QD`O zXR*lR@t|3T(x=fV$i9uUahQ#~KgoPr=+NfYy4_2gcjb z7e=o27+c%e#>Vl8V(gD-{pdT_dR(7o^7ul!E1YE$`3L6hfA(6>xsN3EF-F>#Nodcz z*30Xfi~Y;*yf^9HQ`^nNH7FhVthcZoPl?Qjj6R!2fV;b6iLicx$;=$i8&z z)w^dJfA>E3qNh-5!!CGEQT@NoD4^pw$K91Zc3}o$-tvN3_wl6F)_vZK61Uq}Xx%60 zxWp5f2UsRl)=I*JoUWBz+j^zE&NFk%JK@)T(l3duOZukGe;b`SjO#t>yz4&6lPGn1 z4|!>aJTI2h7`SUcUe{BWoH{0MTam68^3pdclh;1R;#w{miKo-Yw9hIB_St>I`rI`I z_XF1yyU}JRtP_*)Y>I2yjkrE0twcYZ@pAjXdVB@6rjR}`-i~S+xu#%jWh3t&G2H`E zjQwFA`=5rsb4|f@&}{UX+p@r}dlQjQ^Y%Y`O<{15OMQ%y_GKU1^R6lKdTnPH@_SBg zUvX-?6_K|Z&U&MUjA@kFMSx1b*U}@_J=DWu2HWpe($ayWXnLY1AWkr*F z%<1~XwUSrKbp-q72MhNbFVZiGtV{Z)&3RRDKZRvjp6dsR%%f2&c@ibxJkPK_k?D7&Yl!6=@VmEo@6LNQ6FxU}NZ)zCik`f-a$v!|x!*rZwC%HB zGDdyynq$N}$BcK{*waSdUlNX&L6f#69WLf|+;%(tlRDX!pX&@*q~k`->5R`pjA?ym zU%KlejtSQlKHSesfhS>I#C=rjef(dxYw?*kM|aA270|j!`oPHh8;o)tZ)MY57ct+R z*=66e|Kreiu8X*q8;52iOi#MJpNl31&5-*|8Q(`yyzBqYq?j*zI5xAf?uwT{3AQmhFu)w-u(ZZ z7SM5=QA3Fzx%8DlUnA5e6>p-uP zYb0hi0}HoCl72~KUD7vg{!7H%#xg9=HIhW;(WsR?iIVR<*3x7T^?<8WNdz4e?<7!;`S4;IqR-TpzQ( z!nN7axqS%suYlGR(g#M~-(cjLg0Yp2TvIUZz1PA#_J2G2&NT(sL9uXdOO-FoI3^;W z=Iwv>n!@1h1?_q7wdD2M&MxHloa%zLy0_g4nBNkS&w7huTR5H)nMdPz z{I{kE4n=|g;n?PQkt*=ka<7nm>DDWC$bZjoa{Vr2j=L*+?82-m{9FJ1HHDnx5|?5g z;L+io`*J^Ga1qF%0M|`kBx{OE>%y-oq+b$Qm-J1W|1z98jB5(&yw7hWPomW6J>=QW z@QwIv0#nA0)k9k=0FcX;b!TMKP|q~pfA zPG@{}Voc}RnDy4*9#dumNuL96ZcUD)&eQt#|O4Jx>LrhfYwja2S%=080C83 z%BHz~VtzkFG1>R*zaM?)`iX14SdKH&UEwU7$UiV||FhRm&OMpa>B}Uvm)~^^`c z_H#$2=SvtHPSh)K<(l3duOZukGskN{UVHuX^T1+DIXw*uc zM9FtgBWZ&yFP78xd)E(3ZU5Xl*;a|~Our*tKV#t$IGBe+ma3!^Ez%>PXDA%wpADF7^Wi~H)>92 ze0E|?6Pqx+Wh0zr6Zr?`?Z39}VjHZFG19)o{*eFm5Brzj zIpWw)r?y)UdE4QvHwN3n@s!9s8pq?mbysjG3j7bpHpdHYfwz`>h3rc=+_uVX-NhPM zF3d83#r{<*pkp@2T@xIqFoQ6B|G&Q$l5<&NS9`8=d?K-&u4!EFdFzq2P$RH#Ya!{E zMAjvJ)8@JQyFzmn*Fw~J?@vjdM5)s~w51KQyjV`#?_CS6w*7PKWLp)nreR)wuIXG4 zT>Nz&aHgfI5bdrsC+URm*1uZyksEhZ;xIWwX zd#Fz=AnT9h^`Z3{j|a{6DShJH!@i8L@opQ_Y#icnybM~fPm;((%&2YnD1Jst2x9plW8TuV~tT~kV)M5)s~oum!2yjV`#?_Ekw~U zxux^k$K?gw$JrYy2WHs)!v48y74C!Jy&SAPqp>DV!diuE|=-KIM8Qlg#}}~Y{K1g@huJ;Q@pStpX_mqRU{frgt?+nE%~#mz`4xpX1Z!vc zJcZu~*4y&e72X$Yq~-G!o(}em>tbDR``X{K3`Kf?R|eRWdGs# zH3z%Z@?{F|3U;^UA1M4@u%|5lP~jP1uUr0+!WV$8v3#Y%*Mc3i{9}ceE8_EA3a5SI z4~FbN+`cQpx>&wi;l03y!`Z}Ig)avik9m)L19(MzexTCUQX`U%ohZcmS7AX`CC2a_ z3hxQlskq^L6g~}X2~Hf=|C_>hfEB}uL;k12>w~Sbyiok9{W}15Ybm3TQTPjBSC%%s zl)^iJO}4ze!Z(9e#f6UjtE}*Azo{1-r7k;a@3yG}wO2zf*Xr1f0Kc*1uEXX<+YLzDME5!R|QE=np8oH`qeUvlPA# ztaS~e|3l%Oz-C$gx5EDh8(!1sqcIlV@p~F zTmGWLcY)p1(CA-P_&s1hTmFW^4}!%vLg!&`gS!@mL`|?eEPqGg$zT&LU##${U>hxe zSK;-VV*BA7zf5rN`MCmY2b}hmq94~Bzd6{#=yxjm=3qx#8op2ARj$YXo7T$k!wNqD z_9TALEqY4qh`*KgD}s?1LjTC;7LE%X{IL?>wgk6n8CausMqjczw<2U5-y>}eXL<6B zn7F{yT_Js6XiIl6`pSwvqrKtOlXoc<7pT8Cr0)Z5(Ho7vuA+bY2E(Z*Z&o%guzi0> z-x%7TI~si>MV|sjPCa={rMSS*-$MFwop61+$>>`v`u1St)RSjbjSD0k4(V5dC3iOZ zTNHg2Fmme2w^xe`q#O(Bp9K4?i_!O1^rOMZsVC2>5f?~49?~BJn|iC!rz!dy!N{p6 z-&rRv(DLt){xDeUu0|hF^e1jJoO<#T7sUkYCy%}|E>NXdNdFO7)SX8Ex}ra~yW!N6AG|s)5L+>%zYyA@ z$wt3I(bwo z`{aw;#Rb~|;3fE}Ybx1Z4$N^n~@_fLv|kyB5; zymMTjR*jJU>=Yc6{f)l7qAvqRPCfaS+u{QL+97@X0Ne*kHTs&0{-S|~Q%`=dTU=ma zosj+-XxHCu^j9kSLzYudUav=7;MfHr{Xfti8f^5f6n$wha_Y%j_Qv+t3+daWVgKA? z^ml0bA%;^=KJG4@|CfaHEud{U)adV4^qucDoO<%v12F&A59#|r8#T=6A5!%G`wXX^ zeD~d$KQ9mIWADfPf#J}DPX_lMzu$oE8ENXDrPSXUjGXn8Zyy;KNNNlP$Ds;{{Za3D5GDY=&uGNr=EP=*to##rXhW+hkU+W0i*v)(LW1D zPCfb1$KwJWT7>lR591!_Xrup0(ccP2PCa?@({X`GtwQ?GsU2hVhZOyaM+~Q)eCV@r zfeCFx`ir4mIM(Qc|4}E(iE(~N0VAiLJb7wdAgx14U-D6(FX=I(j|F#)`m$i;)RPaN zf#b7dNIwy*=;KCzuA)yEZ#ebjJ70+lEa(!_pAYRN6O8_1Mc?rW!>K1vUKkhHa$88> z4chrn8GSQF|JjpWX+z$uaJHWv}2|i{RBn-;&X;m zPoA~``aU83575q=X7sZa{Tovar=EQFrntb2yF&Wi(=lhvfF67qxOaXiITP!<7Ytvm z@cLkZIfk!S_{(6gzGV2f3f}>C*{k4K-~J5l8joN9D~7ZG7Rr4i6utQ`xLHm{1&`x zIQ8T$>-qz;CxrAd@8Nmt`$m7KqW@v3;nb67UF;8R%n0eXEyMGb6-GZ?(f_{OaO%mk zn)n0tW`*?Ue2DpBrO`jB=(l}jIQ8TUTlxbNUJU8)hj#ZTMn6;0|Fz0+>d9j|_ydWr zh4dG%#&N&K=-*NFUBSqyC!cY%KhWvTkbcfuy#M{u=r<_(U%oJ$dh+PL{(x^yNMCgw zt_d5A{#QkR?|Q?jCtrD=KQL)mNIw(W%^Qv0R}+OC!7*0KTY+?MrO07fsY0z%OlR#eoS}OV-c)(3gJ^6`Z_^p@rA$?W+f7q>y8huwq z-=>J+)RPY{h5s+RV@RI?ZSUenKS=EM1ARJ&^k1J5RNyDipuT?WXkT5i)e+Amfu}1%fqF-9taO%mM)xqaI zhK2MWLffv4(SM}qho5CQ_2gqNj1Np29@5`dHpV1#76jiz=uNhFNL;2C8Iy2=nqvioO<%u#_@r)M?(6Z(9XmMBzSy9)kY!5cz*0S z$8hS&H(nPXDDjx1uM*{pI@jpWR`hRHHJp0#32pHIl0F{N4~>iR?T$D4ixhoPFmme2 z+uRu+*!FTrU!q!+uUvxBH&OJLRX3b^^0oc&S)SKI`o_>cS;OdWQuME#XE^obvs2Ok z`62yYX#cKd^mi%xqG06Ilg~|y52U{t(mz`}%D1Sl(T`H}_tr6-dh+Gz_}ui8kp5d} zU%trbpHuV$E;O8a@`T6mnd4<4{T65sUt;ucDf(wGHk^9$%n9*Kjfy`P^sX0~J3G>8D>2<$D)SJE-V8H;D3;z7q9=^Z&&4or-eY8Zv*7e>$D*!1$jVDDMZ-^udwufb|JGJ5_VgqODf zn`$|~uju7Vz^Yzt^!&WLmp24Ux166b^YTYAv{T`QvHcVM_~V!vb@M)E8WLZlo^a(p zM1gPNi~L5%I-)SRMLEDQ>S@0tU9t$)cK%SgTaoStr%Aa{#eBYL@a_IkxhAE3z7}wr zlv@{%=NIs`@F?Wdn^Z?RI8DmEiZ$?W@Iuu>Ogj4Q1q+7$?a@!kWe!Cjanw@gzHud?c!`*V-ksc3U@05EJ>9=jULMY5_ z+k^D4Hm`8727Jz{89r+R|HjcijP#>$nv~n#8lTyMM^`s>k(F$N`>1f5v@r?kX*N%^ z%i3c9!pk_?UywckcePF1VZ8yTiMDHdpYMKnyrUh9^msT;+O5#R=c^2-iFVixcrOCK z*wMa(^s8{1XiMUGPZ>B(v-qitL=w$s?8H^yDqqY z5AWw_???IpxT{@{^k$nU+H-EjJ#YAZjLcr1*GTNJkc({4eM$67)QGw>EGb4 z_QtM0UuQT?v~QrUweSb6mSdfSGCe)z=H8BH&+ti38($&)HJm2<6BCG^A(QJkjn-!fzUO$Mww7mPPt(I8C%McjCN((?t6#^LpT!x1+6$ zbR3)}+LFmQPT{n|Cio8Y^!ZBl^7+1Vv{jJy!)c-|+Z%HZoF>{!`}lk}!hd(PNk}Kd zX`)T*i~S9!i8dZ}HG=xeq_@Hw zIojPw@3ZAZ`}N%zcetzFJP6wXZ|7*E2jd{ok^aZ#NxK`;urJ`<9j$K&=3Ka| zEqf34C7dSO80f0QZ?jtNk9d@+;VBn)ug`Z4e2CLV8>BnHY0|$YLvbC1)1-~vNEf>g zpDl5;<&mxgr-?RZ7>;K+O|)?%(Jp+hqiut92RKc%2a!H(^F&)d9iLZ$FLty|kiHI1 z6Yb=5pKm&xCfXvSus(%<;%F~H`f@m}5S(Lm1nJ{8PqeoMe7<4ut&VmK(&OMX(e6k3 zcbg~Lq7PyG;p-Dj{cPhn%REeFsDIT);~o)wuPsN`9_fy7nzZo}((`Pdv@!M(j3@l4 zqkS9cC2&`J<`}$3gVRJ?e=OR77dbCrg) zuC_PQDK<~EpQ5gv@RC-`aT$U#!#w4_ABSUYJocT_MkS=H!reAXK8`sNPLnoDJ%Rm8 zceE{$ZUd*uwp}>^$0VF4+R;zqnLhk_N4p&9m2jG9-+s#Hdk;<%?dGR(PQ!0^v}a}D znhd9jHsKkpE8sNIu0&nm!*8})j>{z|bA_i|`-%8&1pIENjj>3Nhts5u`=9ms(&02| z$uh0{cP=VaVBgwsUZ{W*N56`tW}ry%`2oF>{Qrl1U*CfYtz@g5!i zlB1o4^owwsXy2N~dz~gvw9`=6V)#s}<+!XsnN^;0yI;of@(R|JP8;Qst^}t^8;xGY z`39#+8@|_Yt%Vn^5jqzxK>A`hO|%(EPqulYorUz<@G~9lj`_If45vxC_us&MaQL}S zxxGmL3a3dMF>m4AfYU_#;X-^K5`KxJJ%IEfI8C&j7vX*zoF>{;Z{ry6hU&(N0`~@2kLRqMfr8=M21$qg{{mCOA#B*S(Lm zBb+AM*{JIS_#IZueg51s9BXizlv}bK>pJ*DP8&ZX{R^BXZERVA_aAVYXlH+fdu#A# z9ql@#zk<_5d*w>Z5pY^z6MP@9!W;&F+0p)v^bt5svmlMKSp|u%@ghXFYviN_*O@|4e9N0SKIYVoabt?mYB{DyGjVShPLp!i zuE)5;4>@h5Ae{=QN&g<$fM>99nrORk#GC_8=R ztIhld#|E4x+V01gDAiqu+7w2ENPD9z;3|P8031LwLRe zr-`;`7Ope!!;bdaBe?GmcguZz6!QkWSgp|c@jKE-;52Dt?=f7*;52FD&OhB#rF+}?+o&~Lew{^5zklqG& zwcp@*(RMgZwB_&|=u&tON81?b=5U&{dt=ckUuQT?w3o(2`EG;{b+k!HC&Ou?9f0RZ zgW)vMzJcdInee9^?RQB32&akmGdu^%gwsUZAJ2Zq!C!E+&mlb>P7`ea&w$3lX`&6_ zxz7vmMUM6jrr|Wv&cO4ZIdGb2o8g&H5BMradpFWU;55^ zT}bbR(?mNF&vmB2X`+1(&vLfHk2%`iNbiHwM0+is=`@4WMEmMFI5yzLYKM;JEl6*J z(?mPBa+L2iI8C(oRE_dI1Fzy}UqJdLI8C%Mcn(w&P803hsB0bkEUP8$jAuSw;cmGV z{wUub_+?HT$C3UAPLnnc#7FtE;52FDAf5qL#B-h&j`n<{FND)XTN%%K{BW9R`ZI`4zvPJlQwGO+0PB|8IHCG(!Jp{(Jr_M$32`T z+8Zy9@(qK(>uARzJpoP=?Fl?Pio!D>nrK_#na@CYrlWlj>4)Jo(f*3(Mu*@u(N?@X z%6AcbhokL;^eu3=+{bukbO`>tQ?7Y~C|@hMTdoS84Yh**<&=8>=>Xg<*BW&_3IElW zBOQA+&IPzz?%^W1rouD*<~$-@fHIk$a?c@uJ^Tzf%g`HMgJ;EXnrts$Gv_6EaJl_S z;lSC%A2b)^jMEOhJ4HZ6YE1jkA+C@=6oc4ys(b0D7ENq3s8=Z-DDxCJI z!k;XO&ws#a+Y~;(6z&PbX+J6aLFBz;^Y@1vLWsJVC zEoV|@{J#VH!}2o}KDR9H`NCvgM^N>??io(eAu z*2wbS3cm)dpXGfN{u0=B%TpA7pc;;w>Zbki3SS1c&GLx~=l572htsAjydUPRiE!Eq zh3^8Ze7@nU6h0Dcy5*lKd{14R_ZOJ`w;kO3oOu&i=?e|tqwq3dJuTm>@Vmg$E;9Ok z3V#o*X+6{bBjB!a|KC|3_xItnSe)ywk&n0x&w=2y@(SN|Ii9OtVR$u#kGc};cR1|| zg_pSs?`h$*YZX4?T6{hUPV1@gSzre&@1^iciMW2iX?+zwrU~9t!f7KEp3xN74>)bK z!ryC#`!3B5pP=yTuEV`YIBl}R&uNLzA;W1eD174em_OmPc?!R}HSR6LY40d}VjG;} zaM}k7|EewCx5H_x6~4M1t{ZU9KkF5K3@o9&;TsfQ6YM6-`I`@}@%ZWjHpcR=6#f|4 zdzNof_;RpkI+(e13wXI6C(p0s6T#Vka@W}Y6tH?X82$I)b5l>&lV1!@J-KVtUk-MM znMZg>M7Pg43exb=ss% zpW-{=yo6ImqmXrgtFH#u@OG2K-}7*d{cizwu)E2vt?(0Im-RNhzQP-W zmF;i%wF-{|TYb0TtrWfytmM6h-=y$LV80AEJW1h4!Dc*Yct3^D0~`E^;rA%~0kEjY z4Sz`Ce73Vc!|(|T|7i;D#Y{DPk;0><;kSaO8@^cK*MrS}-thMn{uWrnnT9V@__bi) z&oX?4!gqjOJKOM;3U3Pb{2aqSQTPjBaW5IZM&Z@Lmd-W&bA>MlJNB~SnF>DvcJr%- zZ&3IhU_<8_zD41~!9IM=@NX2p3hcu9hI1|KS`-qOfGu5Ma(__xaJRdx5Qd z%W(eQjccrbHCT;BCU>vG&j)+yZNv8~{8g}@-ZA{3!uNnRf7kFs3STe-_d?*bFR)g3 zjk!O8#m+SRONCbgYi@a_!rOuMwtSt!r-3b*W$OP*;cLKFzhL+lg>M0?F~{(46n;6_ zoEHuMPT`Bdn$IeBcUHggQaSCq_wsN)M)fB!7?9WdPuc7cW)_Sh!FJ1Be#*e#n4ze(YJ zzz%LPytBf6Uq|`AgwwhzymSeCMh9LPd|l~avFtxaWzMq&xChY#_Ze7DyAM$fb^P>` z`J8iZ^)xAj&)mTI+jLU@IHV`QX$;I?i5H*RJhn-zgmgprB&%h)wMeh?l&cRx7x+x4 z+-Rg9vlZFki^hGsYVZY4xn)Ry1gA;4-;s_ghRZPbTLk~uY2$vBnc*q-H}=uR zCGmLyr;S^Y9u0TfcpvE%P9E8hNdIi}q}|=9?aDGt%2Un&&o-N1z(R$+EZC^M|@*YEag3Xiq9>M+BsqlVI zeY=qU1x}N41CdUL-{qA173tq?IcX#7Ts#wiyV}2zE*^)u&1%VpAUzCDlQvST;j@YG zN1bxpk>+oJ(F(!2&nr~NeOWk7wEP{szVNY5|IS63>Yj47knRe9(rIG~(lb2e_!;?k z;LkYq@iXW6t?lzA!D-UJDM<5~Cr#Rz3Edj_>rNXl zpv+uPxz~{X9?s`U+&}cH=i~Ydr%8RSksb_ROW-$)m(%U7YkY(n}+`1ekIYcIfh1MZfaeG%3WaQ+^yY}@tq z@Vp03lRiImDfSbbCVjpSx@qt%NBbDcOz@QZ5%=KlxeWKZaBYw_W+OcpPLnn^A^nZb zlQy;^UHfv($5zYoHzM5`PLp!!NKc2yIpsDZ{f#Xr$H5O*U`*kzwkyiq2j?|S`nLyV ze)W`F*8um!;q{z0249KmDx4;5OhS5^&6EDU2i+R@MNS(tP-c#&+;XJX!W%hl6vi`z zVsN*OT1a1D^Q4VepnDhI&}pL{%3S6tcNNk-;7y%2(vg1HQ|{)5IRD`7oN^-?;q%9E znzZ`}(zD<VNH>Agq`nr3_#O&8#i?&T(hK1mO^sICD2{Yj_$a51N0EL4PAhDJ z?<1s3HN*Mplxu+W)o_}WyB+D_@bON$c}Op?<)qI$nqwUbcePDW=4SXfr_aBj%t24N zlGovQgimtHjX?TAIE`)4_?wrl;56x9N2DKt&v3Mz@jU4^I8C(YU61t^oF>}4kbW5c zs-yi9=?%7=XsfouJPvoYm!eEJ_$!XKHp*OJ%ZZl1vzg`5{)O}GHf4HZIt z-imu3wYHj3k~SW|{fQZHw~ecp;P=7cf7>?5>d(MEIXF$m^d;!Fc(mt1cRBnor+?p| z%yv&X*2CH=V8iOzjl(7XBqP5r8f$Dg&0aQ50)NTh0Qt{B$BaNie&10Ax7c|l$StO0r5vjX>(Jh=e*;25lx;Ixi--|ZUt z&tQqgO>Sp}Z$1-qADnit!Y?aW<5*)3gVSaxJROYh zQD`$2&NXUf%pbIu6kZdogXOO%oNEI448v;*p97w0^{*?uFwV1jaM~LR{|ro?fxWBn zT4ixu!f78Ud?MI;makO!O0eygf2{Dta`@gboF<>iGbwZaP61m2=P8`2=vRR4uza1u z_kx{S-ssmW{4KDxmTy&fiL*nWmHSEI?ZNMY)AlGl1MGFn_bdFdidgHyX~z^^rIOEg z6`b~u!lTZ?aSP}8oQdPO%daO2mHWBk2>w4dePDg0L4rx;-GRU{}p8uutF+WQuD75+NdhnCk@_zXY3#|Nj$?{Juu>3_|5 zY;SYnYvV63{*Mjl$$h1ckUKiJvYv4RS1}euN zby4u6IED`3ILqlcx)yctH(|onvj+vrV`J;vdRhOqNH^sGz+`RFAL&6hk9E>6#ETB_ zi}9L$q7Olt$)0l4k$wf<&?&bZ>5o0-M&Y_Y4&Kr!w+87i;51ny9YOlI&6B=VLi%br zmdC+4@8@3rM*I|^ZKP>kyXm}q~*n&cq7De`1H&On*co^qXHF!#W3zGWrlgmeS!25_*AD2et!7|yFQRM zrXoGl=1ChbBK;10wxi`|SNGd;qOFQ+y?iEAwEPU<2{^|`#^4fM*Dtr%eQIepBYm6A z6D>cV#m`W^?Xv(r{*FAp2UzN8tKwQ8Z?E^Fy$R`CZJua{A^jNq zBd5>1klt&{NuNvM`dt=I6Kyw?84Txsk?pO3GL=2$#vq*m|I#T}3fKBFaGJC+4(TUt zp0qI$>3Q(49qpG$|7gpJc0ArcJqdT~wuk3edi&4zFiwgxr>l) z3E%CM>xXozr`!;v$HVtI<>n*3&{OUR(j~FJ_|2AMKegvG15qX&e$=V&d8A)}(`0+s zBE8P$NuT*_rw{yyquq$~*Pe3UAzdEViNBq4jgU@+yKV6Q(Mqy;(ne3Dhry$9esQ1E zK1BKxPr0>7e+!SXS`{Qw=zuoI8~17+sGYdLMyK$$B&p3_Dq(mOomP9R+|4r^kkjq8za2d7DW9g!Xgzs4yy z1L--Qa#={1^5YqZQ|=0+pMle)&&&Kc-rzLm(SGscIt`~uyIWA-et1(`ANSiKKfZev z&r+dsrIGf-dHrD-`t?YUh0~;s*+{=<^Q4VytKnHC{AQ=me7^SPAdeDf-g+Kd*c9-RC6rKXM$nv%dkGcTk1E+OR`1fF~c(A}a zDSRr}KFd2ReB4F&oDrOMo5E+*!*fbFElJ@^FUI@^r}b2LjZ1KR!fAaJ-VbcP<$V?Y z7T8hC`zibnuxlWaN1CX@4FoD|E@6nL4`jK zR<(iQqZIxkSm`SbAFc4Sz=m1=h{9h4i@VC`$0Y`W#+6+QzjuA$LCuJCxU*_J<{ z@E5^KH8T1M3XcVQ-ts3EJ`?QjtBw9Cg%1X6eU0HyD||Fqv1<*Vr10Wkk6S)j;S7Xq7T`4ol6HNmw6PQypiPckNlf^D$;C53MW>)h1H?8nu!>tOL)z`nKo6-EC& zSkGog@~XmngZ*atJcSuSiBV2+m_=a?C4Afc`GeGETK;iJHs_BFh`!kdE?z02?l3XcK%&hoPrz8&oCenwwW z;Y+|qq!@mV!XE%@(%Re6Zo?DZByL8EJ;sPvW&t7b^T_u(rbtzewTj!LGaC@Olbw1$O>$!!J>I zU9b`(48K(2?Z7r#eucs}fz2Fg^bHg~2kgcN48Ka@oxqBu8_w^@xE6&(v2=WvA5Lqe z@Xyon{`V^37pnS;a82t`%^frt-`m0J@BaE z?G%3JWBC3QoOX-Ce+Ek%XZWoOUjWA62BzJv@XBCgEWbnHkAm&Dyqm(CJ&tFJa9R(A z$2@_1qi|X;h0g(NF~RWO3cns~ujPFdz7OolCylvXPVCA1Re2Bu&2J372Jqqs!_L1fH zD!lw8tYP7_VG17rw%zjk6@KAlJb!}IMk;(F*q@d^pzsr5J)blBbcOc?TVeSqg?|Lr zc#6?Kr0}L-A6OpzPvT6`;9t%kE5I60HJJ}9`bWTivV4rfe+FwY&FIG}{CcpLEq_$u zuY#4IZuE~S{A{p?Ea&$jU1R?r2K&wO@d`f#cH{F#^|-=2fi1H935D00f$x~WX-_M> z&rEz)08X2v@Jz4d82xmG4+1-6`SS`t3^sYT(a%u$6tJdq z44k5DFRU991+G2%gf)$x(_`3?P4c5)_ z4;0=V>^aMqD|{;0X3JM7y!mUmzQbv&6}||p_Und!s_;5slPzDP@F`%W=NtWJ3NH(G zpXHw`{C==KmVcq}_yu@|52vkD`0HTtZy3H_;nl(3vV4QW7lB>;rqORy_+?-pTE0o) zE5WXO%jh>Nydl`&c$Z{ztk zoVG{dSzv?TF?^rGhkzZke80j^fZes&=np7-6%dz5X!uNpw*mXq@>vT146Nl2qklo+t-wCBe73@i@5KFQIPE2cj|MC9li_m}UJPus z(?Z*30IBkK#FW-aDoxo`e z75*Mrlf8y7QuqU4e_Fm+;U~cE|HbIvRrm<76P7Pg_}^d;?lb!L6y9S$zB>V@Em!y+ zu)BXXe1*aXgB`d0LxukZHuiwgf28nFz}g-(e3io6gMDrJCkp=ttmkh=zgpqF!46yg zslqS$9oI)VZLPwWfHga0_~#104lL91FBHBWEGf(Azf|~jhjIS}PTQdH17Ob`F?^%K zr-HRVYWPg`W@hqvhKaz7uT5aijlM;akCm zo-lm7!iRxX`OEMh6n-w)O3Qy#_$si}zm0x}!qdPi{$u!03O@(zL(6w5d?i?F@JSEO zBZUtFs}{v8DV`H3d;nN%A;W)Bcp0$8mhV&e60qdLM!#R-y}-&v8~&@pmw?3=G5nCi ztAjmdd6vR6zzP>N`ojt@0yf<8BMMIk`^EBO3f~WwRLs=>hr;g!`^xe^6}}ma|Ca{s zxWbDRNB`ioe-u6v>@UlMUtkHAG=Hf22W+JM;2HnlUf0Oe!HS(}>Mx}5Gr>k%9ZDR2|j&NETg|7i?b(Y~}72XDHt>xtu{sq{LWsIKR>2Zy@ zH-l}o{A`790_#%N=qoDxRS5cD4<7BIz~Wp zkZzFfluqeJO1jYz5#H}+@5^&P^V`pQ)_VWmd#w#z=W~DW`^@I#oSAb%@HrG{s?3TH zgT)PH&!YG{uy4h)Dn1OBAT{T+DV`Yiy?74AN5B%M;r#oGCx(p@&#CwrSc zY=U?m#eaaMO2_%Uiif}^iRV-NM_5=G=kqIG6*gYHkm8ZB>*9qK&yCNQ>4&B&ruYEZ z0r3wNKLksgf%C-`4}$d?Ur%!P4YpZ>)Gj zSe#t!%@mIZTPyyl;_G3Zb927A;$30c^02p1ycH}-UiQ|CCxvYnZ=?85SnqtCZ>xA; zSpNL%?G*11tM~zXN5w0_LJP2erg$3IU2*pw6K^jJ_=8gSVcQFGzO$0w4T~(q-c|95 zu+Iv!f3A3ESVR%_Zi;^dOH-7+yW;6#55>Pw{4s2IG0yi?d=G5OhwSuwwBDjqr@?v_ zXYZ}}N?6Yl?EMt)4J%cWy}#mRVDU<^4^TWl?1cD0#m~TIl;-?bibugZm0=&Gco$f) z2=>8>7l$P%%RWT$#ITd%-za_>HtQqK`xT!J>spTeTgAJ<%9Ljxs`v%iv=PC52rE#HeUjpZVE>3uR{Ra@P<77#sCbbYLB9QHs%eTJgte;4K3(xPu&d%T z6u$v$SBvveig$oL6rZK|V_4_foc~Gj5wK)+*yk#q0yb5Ap5jC6;`&pM^UD-34tpxT zT=8M`gM1$};QT7Z3&O68uU7mfY*ItcuTlI*Sgl6vYZV^@E7h2NgW_di&%`$>{sOkR z3FkK{z7*E6Df?!{=fUbWW8bEDeb~F7vTs*B5p1XU4#juF1~=#YPQ?$vrnX@JMe*sd zo-Nt;DBc@ZwH5nb#jC+`v}WI@cy8Dm@dJtnwZUglqNxrlei62+E&CzG*TBZNV?V6; zL|Di6>_-*v1S{Wx{g~nvVPPHFk1L)5_DcL$#XtNEpJ&*K^QRP#4LdG=TJaOGnVmU* zM)6s&FS@XwRlE_?-QM;;CTQ#V;y;6Skon=PxO~1vacZ`xV8%hc)WK zepT@%u=l@U|4s2+us7n@6kpgApB>qY^S2c54lC80{ddL7z!LOfzpZ#e*ah)Bil^?2 z&-6r7-BI|+U0_ee|5p4t?8_mXf2H^!*lY2B6c7J8$hQSe z6+7HZ-_!wBm@7dETo*A}DJe}fOU=4FQJl}B_!HRd(d^k3p9^a?hCPSk&0(p=vcIo*2<(J- zPQ}}d!}ssTb3U))iD4VX^C`X=)_wx#^DEvFmL`(@1I3%d-uZ#Okm3no8^sGNz8ThO zBIk=J-UXIv5_?g_Tf>q}W-qRIQrHgh5{mDF_4twVB^B=pdw&XhDaHH2@=axrQ2Ybf z1M#woKY}fs#`%vFUkvLsoxPmmBVgHPuz#$01=t4hDvED{eK3>rRTbX~`y`6JhT_#> z*TicoegoEj7UydzJ`fiA6MJpN>%eY`*Hip=*r3^*udnzJSlT)44HOT9Z4qy%_%>Mm zxtwpLcth9=@y3eRnTO|RXsTw4KZcE)&;F_61sC9Rn$T3O6h92>w2-~E;&Wg{7O}Te zycq15czeZvg>_!c`3{PAg(X?S-cj-9WJ}pQD;^8BP`r!cX_f`~j-aW!DSiw#d^vk} z#Ye)*uVC+?ctu#8mF!%cMNJgb%1@g;(1_q#OEkJ?jWB3qp21u-s2E1A84v2ieH7*J=o*lMI ze5K-RU}cVS{%6I@!j6isQv5iq$uZ8aR=gSPp71B`ICxgxQy4w&{P){p9afth5eG^nPFSS zuPDA9*7_>vuPWXa7XLT)-xPlrwnqG#;u~NMuW|l{;*DWJ*V%6>9viku{FdTNU`=jt z{&&Tj!(NNuQQUVk$TuHNbyx9)u$s5n?O3SZO%VZyg4k% z9rnkHCxz`5f1>z7SpU16f2R0ASiyVj&lN8WyD$Di@rSUb_c{NE;wxdFJYbJjygKZO z_+N@YgH3$M`Im}MhLwB7{E!)}THqxfyun8%!dt@t=tu_x?r6fX|DBkqg$_G0w! zAC!6k>+zKHu@vtK3wp*LTk&eJ-Qw>mz6VzBIp-59UIDgGJdxrDV0B(_KC$BUU~|Qj zDE=sUEZ;jRV!i#EXDA*YmPLG~;#px8#G@3i2>VQYmf~Gt!^CGR{vB+N_#DOO!gh<# zRXhiNX+J`KalcmlfB$RW{)47g9@bX8j^gcL!^G*mw7o_7?_hJp>nT1LwnMzW;yYn~ ziZ@U^8kS1lSfHWe!LUN&jTA2o`$W94;?-d7#hWPJ0rr)6Q^kkCrig#4_*B>$@#c!J zg&h@dq4=+`hvKaie*{a|oG-tv6;A@oCEix?+^}lm?G&#L>m=S@@vgA(;vE&A09z|g z@5Amby8NtzT@>%6_!Zcn;$0Mvh9zskUw>D{lf!a}f3A3LSQYVZidThwCf;4~PO#zP zJro}WTP)sF@g=as;=L3<0(&gpTk$8b6fODd@1uB1SPAjIikF175$~sXTi7V^{)&%< zEf*iC_zKtw@h=rW35yp0O7Xv8@3rEuZ?NJ?VcErpD4qjWR{U$l%flLp`xS2t>mmNF z;$OfsHhlS+tauz)R`DMd z&jza^K1K0ru+HMs6z>8XBR*a6v9LAbGZbGBJ1rii_!(HV_$Y@s_Z`;`0>$1~y-Of#M5bN5vN^ehl_pe39ZWVCm$Iffg&C0ajXksp4f| zt;ClpJ`1*8e5K+$U>C)IR{Ry-G$pybG0Hayy!U?m^RXYpx`+=`d_LY3V=bEMi+BHT zeiQ7lcu&QDh20YGrT9JAYw_NS$6g-Gml{pgNAdKqBI11&F9EA6-cRwGu-4-J74HE1 zQhb2oU&CgK4^(^(Y_~Xl#*4S;@yCAH9r3Ree+Wykg1`PjiYI~P6(6j4L0BDe_xUpJ zJkaqQ!a9h5t>nAF28e&7_+Z!=alhh`uqEQ(D!vkSKzyj;M`1U_hbevs7HcKX=R3vU zfrX2IuXt8iCGp{kSA%sCAE9^;*l6*Qicf&e6Cb7cV%S;n(TZP!z4J4FePa|)0?R8t zPVs`U+T!CCZvgvJe1hU%!{&=eD!vSMMtq{;7h!Q%@%f*m`0uOn_;wBZT*W)X9*NIW z{0XeaTF%c`ycTSa_yWcE!OE@U{6fVmz~+lDQhXsSle{s|V#Tw-R*5fBd<`sE-Z*Hf z;-Ro{;>#4D086xy&;N48lfb%)uTZ=j?6&wy#qYv8Y~ua@toUcJXz^8wzl4q6%=y)d zkA)@M!oEiF6tF4cYZadc%ej^F>lDuoJ0-qe@iVYN+c>{L@gcDHx3h0lJQwVg_$I~A zz=rJL{AR_!fo0gqzD4njur1lW2}9O2g806->>)_ zSR#4jtOJTCfsGMAsQ5ToX?bI%smJKd$&2SX+5xuU{2!54$0LLh)O$jz{?TCl&7mJ0*Tf@iVZlM>&65@ounpjC*6K9puPNRJ_FDY9;=VJnd_SY9ZYaJQ*6u9( zO~pIF5}jkerFat9&*Hx;z8Y5JJm+sKUJG_#{Ep%eVT~_v{;uLpVeejKzo&R2*hcaD zif@MXzQp+liuZ*TxXk`g@j|fQ#UCkt2R7{r=N~IR16JZH`xC`W!JdjgRs1<@;cuLO zrubsm2iMr2D_#)xllTk8=fHAZ=lmav=Yg#j|5Nd`u!T1`AFcRe*o>R(e<>aXOK^+* zrQ!);6U6^k{0CUZ-#PzE@yxIt;{PbV3)c2F=U*${9`;iFjpDChWA1R?m+ZnEhSFlf(WLPpJ4`u**+4pGfhmus%=O6D!^imh>5W z62+6lE{MOU_$Ao9=bTTf_ySnk7wpLt4}&cbPp0aE6@Lhu{U_&B zDLxlgCz?H2@p`Z%f3b%so)orUJXG<6u(2;WpIY(pum*p#r%}8SEaVk?TE$bt&WNW| z{2Z*wKb#L!ycsOvYxeYtCx&ej&!G4gSfMwZ4_CYh>=*HjitmNh_wgGC(dQ9+>+ScC zU|ECMGb^4Q_C`F5;z6-u`_7@MvMPQ7woTrcGn?W&U~}b-Io)R^yYoorZ$8W)m-nAT z$q$9Kj>rDK;%#B+-(kzJbg~Lx9I%sft5|bo=5R=u+!ps6+a8> zByTL5Pw_6Wv_5J`9g~KfMrR-URd#L zup8n<6u$+V^B(7mDn1X^EGc_2#hb%|<&9H6R6Gh zVe9DwCsCyo-w5lUlAS)|-CK0|83-$!ik&{c-CN{EVUNWl6n_d^9L)K$iZ6wI6~g|J z;)7weLfOkHUI%tWyu9MaV69VgzJlUyVbS6h6@Lj^l7{p2`R3lDuYVb=MOyYsinoH@ z7O$-MU075)&R0?VCs@NU_Nt0EhNVl-{)yu0VOPbgDSiz$Jp<>fD?Ss}IGnwP;!RVX-xpS~LRy;54o_G_*AHWv9&-tc`FM)N<$=*!yZm=r3 z*gsYL6Iiy~?9CO=0b4BILh+@rN_jZnQt>LVo8qk$ACoV(?-81+tKv^!b@Q`-u6TXe z2Jvo+Z-OQJfb-oIPXX&D-b3*ou(RS{D1IImQh@j0Q}NWW`r^G5ZwT8V-dpiqumS~n z|9uoM1Y0NGSMd$7B852LPx1E($M)4kQ+=&?M3LCO?P#iziho=b^FvdOSG;&J+hPKUDHG7rGz*4*Qsd?f%<- z+;*MQ;`5}?HzY^dsaQv$sra1YGvcw{guac_XdCL^u)Y;zyQb;!{_5y>*nqa7qR+Zt zil%b=TY>cnbOPCqw*3q1*csk#_V0H0u>Ut`ddq3Izdyt9-m7RTdZtCE$44%CjBH7) z*P)Yoj`26val;Wnx$_b~+~*sPPAS`w9mD!On#yf=B^;kUnGv6l<=Ji|*5lArZoBH) z@Yz=A{IVVX@+HiU^MR&v+f7971Ug){BkP{U=j(;0a$j2td0I#_d=C%pwxjcM zr5%2515M@5OFmr2%cFlBNAlT!uB8ivFbI#$Sb>t3p$`Y;oL=G(Zo)^^~@uiiP`*L~{S(vbC{pDyO+@ zORT>_f9uH>#QjPsxo>gVomd}|(_Hoe)|qi1Ggh*6>>gMTl=~e%mp^f|-BgS^OuzrdD(R2Rt;J&G-+;_S2*97afa+*8F9^|g0Cwq?30o(M5vE3xB z7o%r+j&T|5+p?WIMk3tb1&KKFNAFqPp$ZN*mdzV zir;`GE5_$2t>VdHCB@SzUJBMmJWTPnu%Y7V6(0thE1p4d`ds=W;^B%Pg*_L~sQ3$5 ziVykg%cOWpSV{5BikE`563?P|YuIS|3LBcuxRlDivI=6UV^{=f{N#W z)fX?McmvoF@xqFK4O<~zMDdld>*7TfzX3~LlFwf;#Z$n_iGQegMOZ)a5{eIiEfz1S z_;T1?@zRRlhh-_n=dX<7IbapV%PQUsHcq^};^Sd^#49L%9QK!ZCB3LofogA_yyP#@!E<%g{3OP=f95P!LV}TbrmlU>ndJP z@y}rs#p^3R3ASFmf#MrrXT%#SewHkP&wnGugJ9Xj8!Mh2RzbXp;uT?C#hWVrIV@7V znc|aR8^oI{z7cj=yoKUdU~j}*D()+b&s{=OwNgAMEJD1s;$>kC#M>y|5Y|_`t>XP) zlf>I8J{h)0yuIRkVK2lxDEE}`$PP5 z#iL<)%klZ^rg)lIcs&eFkG|q0;_cj@LGlm!I~%sCiT(Vq?dXX?2<;F1q8xP&tP7&4 zC{L9ckBiEnQ{X(g?OI~p4o&5@tBl*P#^`dM?e=1Q2<_dj81~;2{f-=$EDiRRUiL?a zr{fgB*H9Eq<&IGj>uTtpo@3O(x*^)T-A3%-IQq5cv1>DI(>um?l%Zn{#~(B3AEU4f+yrK97s5#in<&j_oL znokW;ydG?{cv{785`T1yk+ApwrY5Cu|;Y$Yp zr?-MV6E6TyIqE;%mky7;!Z=?HzJB6=dQ$8^6PnIn7PzeaXOv0dycPh z1?KSIzRt`zMr!Qmza7WzrxmU*U!X@~RRtTPJ}zg1pH$o`UlT3>R~(gc@1tm zdVl1{=oy~vGUK}H-WSqsNAF`p?y{-!ZoH;kud> zz1*{1My#`;z5DBgbszK^&vr|&ULo7b$b46^zA2}<^O6he^5|8b>}{+c#Mmw`uG?kM zTV*>sKK)*?``unQ=b1Ro{XU;N##8Jo0Z!lSImUdfm!PTKcJzC0JJG**whPDYNfxF9%=^H&c)7dJ(IHqK?~wM_SVqC3yaaM~)l-EsR{kM+B_?>g(* z-!lCB8k)-OufThFJc#z57M2XJ>7%`;4NQ*b6=?5iyHet@INE#K1l)$rL%Y-HvO6Bv z#Yu9z3W+;cA8&qpS}5HuzG0P#Ru@otyB49dVM&q zf^Xd!{Y{zHu&Lrjk&k)55Cz+XrutAh{x7iG;>8ue3rkD~N0m@K87#keDaGmiCx1fI zCY9hZ&)+T>y+;mtHO1-uM|z;iYbrhgc1^sV;%{Id<2p$B#)`Lr4Hs{&_)!>LUn$>4 z@qMreT=&R3DgGra1FnbUJrt*(AE)aj`B#e5>$ls*{fhqv%ZKYK<-b?FCTyGdXvHtW z=(!-}BNgusOOERg`HzYhgeAjm0C|++d0|0G+2<>s2^N9d3(7B7ycz6`_&UYo<94Mr zn(|u|-vBF>f_=B*bz$?w4=V1%ZPZjW?f-=0uVJ%Nv0qf2t}`Rilz*Z4Qk<3*w^QUV z6|V@JDDK1GF|R-Ca9Up6#!)`5;x%A<#1kq$0Jnv?GjN{HN6h_KgZVPD=T$r->|`eP zqKdzOWy}hnn)J&ExVPx`Ykn4Xx-BLzR3+Fytw{<$t?6s3j_jFioOh33aq`=u{8$({ zZBHIvBiLW5c_1GrJNEfL=bI_VU!Q}W^5i$_2K%qJ3gky2TO=3fyDIscIoT;seymZj ze`LErzB{tB@^JnuC7%^WPI>ak=E43fp9S(qU`_LJew30=0VAh8xxY=Y|5%qm{(D%V z4>&(n$=}P*PI>Zf9fSR$-2?fS$j&an`Grcp8H}9r|8Es$r#$)C-ogI+{Q~*!$c7i={3+%5r;4&u zo_z2C%x_>IUk%yF4>^Bb$$tVPr#$)OLBalgg97;-uy^r&S-Si`hI@<7f3_0rlqdK5 zgZ&rB1@c9a4Z-&vDIXixV{cKuNGW#8lP~!$*ncuIkS~wyxCqXtQu2%OJwbBHlTRBJ z>|Z}AkiQFi`4Q)HD*3<5vQwUX^|)aFiYbA7;d1yHoeG>Ut>mYbXQw>*oQc8y$mxOn za%3Yv=6o$Bzp^4b<;gcs!SydHkl%sqhRU38t>jNvVy8U$$r-`^@Y#X9z%%9Hn8 z80MoxM1 zIXiLxur82a3wz#_^RMCFqU%>#7&+z1JM6>#!^S|qS~K{koKJ@DUwDi1b716@C$D=L zm(Q(%d`NTL{>qw*Hb|C^5NlqcW)EZCp&L?AyF*?XNiPd|g@Ey~A( zkyD<0S~PCoPX+SjyZC%9Kj(a;l5gFWo$};SuY&z!&j#|7kloRp^YfMb)o$#RCodE) z#9#M9Ab%6tWnXZ9gOWeigPro^pS&01-*+jHzkuxZUYtLu~#P4_M;xG;UM-T zivIw+HH1C2;+en3eXyTBtKy%+b`FE%{x=`oTXgwYGL)UZKJptCL;Sa&1-`z7-{EoD z2+mhf^0S7sQ=Yt7^$`F1=s^B7vOPz0zKN1g1|z3D`LVho{zLx+^2^5J`SEzp_f+yD zVdRu2uhc2TKQL~}e;YhBSZXGQwQ=xkqw>B`Bh4O>oj)ClMkE_;?JEvkZ+0XXEQm!Tgj({kyD;L;>QsG z$V`F!Dp>7VoIk1L-$b!fo;>%A5Pz|3f&5ftkId%$btT^iMoxM1`?Ev*$KDU*L+1E= zVe>ivOv#s;$4+^2|Dq6oy1apWe`L2U|oO?hWxr)C}a~ti=D%D$ZBZ@;|dv zp4@*Z#NVNAAio^h2dg>XM9D9MkyD<0+OZISiw1#wfi*a79p^hL`N?b9DNjD~REWQP z<3Rp5WHWEz{6HmtZ9O~X$rqdp@t15C$ah9|-6qZtSMtAZWT!m&%-)201 z+RFJEO8&Pk?35>Ocq7EWplcwXejDxscW{1{lFzc8o$}<}Zio2e^a$i@Ap6TM&hJt3 zCwH<_p1kP;+Myh~kZ*?U>2sWKqU3L$Wv4uO=Q5%Gt4jj; zH0Lp+OPuejYscqkWYRWkK68X{x>CmM4a;EeY=MGFWv~`?<0Ht0q377`M5B0%9BU-2=yoW zJ&@1w5RV@paXwxKY~(4r{NEC%Jo&|5q5hh80{K54hJtVARqJ(UYmT4JiHA&=JVHLZ*U(PgwM0U;3@ z`Q~3j{l3?M{Vzl|eQeGTQSxW;>OMK;$;TcD_3sNx{qN(m_OO+4IX_m(KaImqdGfl) zLj5h`2J$)aOCrbL;rtvWKLkcjdGd%;xO^oDC4s?35>O`ZUzPAYC9o7};0JIDbvar-qSJp8VLWQ2+Wofqcp2LB4AE zr4#!9`$NfhNx@Ee^5}SB{;T-|`H9Fr3FiE};n>JiZ|`4Vnenfh9%9D@G8sKNqpZH@Yj`P2^yMO~dLg&N2 zC`a80p-(A@lD~YNljF7)y~DFz#T1wk+PmG+G`L;G^V+1Td0%9^u-=EJa{CLzV|RM~ znA)>lW2~E_z1w}B1<$k4^tuq8H>zn^N1>@`PIP*XthhZzQ@LX_%!V1F>w2=^V*Ndu z%4IKOeO*p-*}*w5KXhwPb}7~?(cWx{_kF$yG?mLP%!#iT{e>rc8te0DDtFvcxo}^C zrgGWJ*jF2LC&|*+Ru$XSjIrH=+;|+42ao?f$4G;9dNh?g#saLD%4zNx7xLnJ*l7A$ z12@z7`LI8`<&n$Z0OSs4(7x7k$8!J%jZHv^QI- z2>w6NR4yBdeJw}tlI+|64{TF2#&*+-;`SbW-gArtSRX-CxvwpIF+68RQ@LZL{1A@` z(7$`KWwEY+rgGV-SVzfeF8i=JzTa5_ueGKQ%rq_58PMKrvXb~YIW(2azQ#JN6n<_K z*ID=fkqhg5XexKy^ri8f4Nc{;UzEY+2c5=~jly~kn#yG-N8tNiXeyW8Ru(_kjHcId z-Er?@{TNN>pjUd1k+>FKBS2HR zW5lVA@5`X6+%cA6eHgvdlf8iT71_>ZkJiEC1++K&ZbST>EBdA`|;w%4xBgd{5ip^3oPR_u$E9z&bOU%4NU7`a3zzWiMf0(dbH&4Z`;0u+796+r?{- z+a+{!&oLsfE{~>i$0*zZ|CeYgcZ|{<@wK75d$N789*CxL+0Q=1b0ajB%kJoepEpPQ zJ=wppeuJiR*{7ZH*bYtQvT3^FehWR>ldX$&Lo}7kcKF=q>w>0oSzj02ucF6EmgdqM z+YE@Y-PCTl4@58V9OD$$=g?H{82h^8x{9W9#~9HA-z!6J@nnC&dOw=VW!HRxpV38A zx$LH%cx;9~>dC&q`Y$w<%iisU$FXQCm)+YNr=hQTvT^(1`hcc#*^s_?9*m}P*=X!5 z1+o_-opP_&7WKUsz4(-kUG6|2>&{QtF z>_=R#&e&{Qs)Wj^j3(Nr#*Wg#9jq2CJ&TqbK_T@Ov= zvU{*TD5tq>0qm<9I-X?dI&%`+oQtttv8DLEGIUPQG1_9?5l!We(O?0| zxBuwUo@_I$TcW94b`RDE<+OjZKO>8-=FMW=679`)UxoimG?mNtUX9Bwy16Gi8|(RK zDtFxHSpOxbxonHIcr6{>)sr2C^*FRQJ9`~o4?$D8?4tF!okS1zWY1uI0ZrwOn{xvm zx1*_CcFIP)296%%$?nDaAezc$w{F61JDSR67jD6GSo9oE_B7V#(Nr#baVs7-p{ZQ< z{x*D%ayzbHo@{EY!_ZVNn|KF)))r0WveS0rIUf3;C%Yf(!)U5lXu4b-+J)Z-LsPlz z^L@C@-jC-Io@_>}v!bb7Hv0iQ2SZc2?6HHmuRzC5AGqBAgLTj$-p*yi4`Y95Dwi#c zebq$&BgdulmlxX@?_t=h{vL6Dwj=h3EyW%Q@QLnm+^D-=nR4)7GH+&!D8ovh+{a;Y!#yUTm%4JJm$L!HmE}Q!%zTbjg?>TNGtec^!T(-k4 zJeERJx$K79crJwg)swx2^<6ZT%bvW0+e9>#%TBzD-|0c$@ML#ky%$a8vdiw_u@suh zWe?xS>*(k|J=vF7zeZEJ?A-^rjH9VscG*K*x6lbP1TOa%u)cz(a@l>4upOGpWluiF z^D1m+<9(~*BUybsoZ&q!s`p$&_g}h!&o0jQ@Lzbyv~plP35v1@!G;U^h8hg zcdYNBsa$qFUZ2>4rgGT|cuk=VdZ8!V1MA*sDwjQr^(8sYW%poTzoDZfONm?9=3b2L zKEZ1bozS~I$LNRkmuT-Xa^p3K571QZ80GM~Lo4(dPqrJ@J<(L|{FTG&50%hVE_)Jh zcJ&H<+mlU#*C3Lksa!TTUVDg-rgGUFc)g(}n%*Oe1&>RyZil9F*}8b$p%I$OW%s5E z@;ySo7aqt4;kAdjXeyVD#`+&Q&1EC-IztC^7EiW6)?cB$+0l5tVFH@UW#i#BjEv}X z;e1@uY1n2~jP1V0YY~gkC1g8n=G%<*b~Kecf4lK|#(p%FJ4Qvk4$&1|D?ISE4aVA! zrgGVD@p{B?G?mL%$7>M1(H+7A+3&C(iKcSd(V6hIp{ZQi`i0?Uz% z_n$)XoUkv%Q!3sIwpBcp;@e>flJow96;BAOD;}bFW7u@@G>XrJT@!b|^UX)&%f}5^ z_7r?dIwhY2{|Uv>bP=H6EB6-t|4`B2CGbZ+?B{=NR|eY+K(EBUC`T2Af6SGIT-1Dv zu-=beu&suVyXXLg^f%Dc8{i|m?`b;ACxj$~Z zpAzCZ1p1NZywH1BK0{Nv?V_V$LVPAc0XZ#5S;**FPa_IZLA-}*p5zj zPJfpx-n3qw3bpGrEnB^A<)(FN)T>>tLett6YSyUJv|8or74p<+P@zK23bk=kou-tv zvI*D(Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B} z0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58# z6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0> zHUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+A zU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W| z0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKg zCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`% zYyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qL zz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)` z1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP} zO~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j z*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7g zfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh= z3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg` zn}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5 zunE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B} V0h@qLz$Rc5unE`%{{JWN{{Xed)sz4L literal 0 HcmV?d00001 diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..8bbbb4f --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,8 @@ +{ + "ExpandedNodes": [ + "", + "\\src" + ], + "SelectedNode": "\\MineSweeper.sln", + "PreviewInSolutionExplorer": true +} \ No newline at end of file diff --git a/.vs/mine-sweeper/v17/.suo b/.vs/mine-sweeper/v17/.suo new file mode 100644 index 0000000000000000000000000000000000000000..752622d7e847aba843328a69da27be0c6856eb88 GIT binary patch literal 14336 zcmeI3OLJ636vul&RPe<^Q7~wPh=?X8LlPeH3Q15(Bac9Eky0l!lMpkLnVOjZ*|~7- zUds&@Ww}tR`~X(*4RGgHtF+v^m-zely?1hFGWX`r48ldysWZ3Vr~91Kr%(6k{BnEC zZ#RD0`MaqL$IW_kXKAB()R&*|#m#18wvkreou#EE6)8@1Ej&OJxL^wWRZOQDHS>H+ zW>Kt+9JZScRi1BHrPU`l|NL^#-@hiFpx&)5PUUl8ESOKt8L&?i8#UKg>7}-KyIEJo zFS6H`Hcp);8}YTl!!Nu=lVb!WlLf}1MGDBe^@2WKW?jP1?x1@9{39gh+>Enk0W3K) z%lrj1KFlNJl>7}F#D)J6^49@T=YNX2-nxF4_&@#$5P#n7%gf&3rk~{d6!0|g3?Lec zjaz}8fb@W5K;Mmgw*%_qIX6%7wGb}~+{^WUYu6vu_5ay@T>qoU;hf_UIsdWSAgBX9-s?&71#^B2J8b~2lfMR0B-`_Ko9U1&NqvIp7wI({s++Kn{*!i)k8+Gvt=64d#?I>Pa%uy#05Kt|U7O zXU!DW=NQ;Z#=$L{Pn0N|2_p##54)Ma)`iEu@Y+u4Q9iQQ6o#373S7cA3+8JpM&Z;8 z`fbJjl+1hmor2y4tkFE9DDjPI_j>I+n7___+CQT5e~7wT+X@%$?B~q;%)SiO$ITVS zQz9m*6c@sS=D(gQ-X0TP+bKQi)>mo*3>Pg8a!5jfQ@}V}D4DB_Crxa%0RN5lKIzA( z^FKjd+3X5BcSzz&$Xp6pI1Sz$=`yR&IT>XcMd9dmn?AL`s za)|y(Xm8U#85O@|^`bkU`uU#%a~4UM<1|{ZywDo(kHl^0e)_?$eO9;?YD*iZJey3V z<49N9l{LwH#!5kt<-cDq_pm|>j4NX$alvXxwLjhh{fB8M8Ynb_UwX1)M4=S;(`X7~ zPPTx5gm&KfS7T^5IFxsO+wH5B_U+)Wmp@0+L}%wFWC%GdvOjA7mnEQFe;7pmgx@>s z`^$pjqP?g8q;0kHh?~M9%ooU$-q9|69xWujq`k3R-6fWLJ_P@D7vbGeESChw{OjMp zvc{}jrCd$e!>W)joCk9Ty(p=Zl~k(aq&0{f~L+q}pAhIK02 z;ckS#j$YsNb^41N&GwZ~l`Gj&$B9iU$vb)e?L*<;^SAqs5xRL*$HHQ%l<6`(`Y;C6rB(j(84)V`))7i^eiJcl9PDJq*jEuT;`jO9S!S8cijxKw&J#O>PIQtGjB)v zU5r*v{V3CDHR&UV|Hj;m@mOckrib9YIRAZ&$LaW7=b&tnRpqSqIO%wg+umx|$tV|l zs$NA(C9NgKI?Mfyq~OOGOM%8)vetrbxpltNh~uOS^a>%z$fgOuc+ePgRCfsm?8WB0x)dt=1b@?-Ihq34Y6ZLrYG%Po_r~~Q<=24 zE4o`$oxHVkvv}3YcpkF+6>WR*Dq3jw{Gr^n?dh~m+xwx3p0x(f?~ht>Zpnmi1l{`St1;ML!~dGfaA z|9i0gf6e$`{*V5jG4{htM)ygz?+`kDo>))T8+}{xKaSFo?hWr&@aw5&`>gl>wBY}> z??LaQ|JVAT^rlF3h%$e_|EGTb51aqDe*TxSU-b6k3U*)=2S8^F{;$I@$@4$e<8SQ$ z4(94U{9m#kw*pc5e~`K#xn0)d*Lw`v$+{B=e)Z%w=A-uy&91*e+Ijx(M);i8e-Cqt(yf;~I`43*(u<^``Jl!R&-;^v-j{m+vrsd*fP{Qo-u@dle?NZj zjhM7T(We=Cf0fXCnhqc;|8;`%@SpejrOq+4G%tUg7YHL(6Q|63(0-8?jl=#H=&znM aUWGOPe|!Fa@lo$jWO=mm{@{MUANUt0=a41< literal 0 HcmV?d00001 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..d00b983a9a583cdf27848e849af4a56b576f9750 GIT binary patch literal 307200 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 KcmiVL`2PWB$PT^$ literal 0 HcmV?d00001 diff --git a/MineSweeper.sln b/MineSweeper.sln new file mode 100644 index 0000000..720b2b8 --- /dev/null +++ b/MineSweeper.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31912.275 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MineSweeper", "MineSweeper.vcxproj", "{3A42E008-5EEA-42AE-8E6C-948CA05E164B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Debug|x64.ActiveCfg = Debug|x64 + {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Debug|x64.Build.0 = Debug|x64 + {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Debug|x86.ActiveCfg = Debug|Win32 + {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Debug|x86.Build.0 = Debug|Win32 + {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Release|x64.ActiveCfg = Release|x64 + {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Release|x64.Build.0 = Release|x64 + {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Release|x86.ActiveCfg = Release|Win32 + {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B633CF92-6B16-4432-BA91-07C25A21A250} + EndGlobalSection +EndGlobal diff --git a/MineSweeper.vcxproj b/MineSweeper.vcxproj new file mode 100644 index 0000000..5302e98 --- /dev/null +++ b/MineSweeper.vcxproj @@ -0,0 +1,111 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + {3A42E008-5EEA-42AE-8E6C-948CA05E164B} + Win32Proj + + + + Application + true + v143 + + + Application + false + v143 + + + Application + true + v143 + + + Application + false + v143 + + + + + + + + + + + + + + + + + + + + + true + + + true + + + + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + ProgramDatabase + Disabled + + + MachineX86 + true + Windows + + + + + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + ProgramDatabase + + + MachineX86 + true + Windows + true + true + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MineSweeper.vcxproj.filters b/MineSweeper.vcxproj.filters new file mode 100644 index 0000000..ec90da3 --- /dev/null +++ b/MineSweeper.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/MineSweeper.vcxproj.user b/MineSweeper.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/MineSweeper.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/lib/mine_map.h b/lib/mine_map.h new file mode 100644 index 0000000..3ab2ddb --- /dev/null +++ b/lib/mine_map.h @@ -0,0 +1,22 @@ +#pragma once + +#define UNCOVERED 0 +#define COVERED 1 +#define FLAGED 2 +#define MARKED 3 + +/* +*ɨ׵ͼ +*mineMap 0ʾף1ʾ +*mx, my ʾͼĸߣ +*mode ͼѶ +*stage ӵǰ״̬ δ/Ѿ/ӱ/ʺű +*cnt Ѿǵ +*/ +typedef struct map{ + int mineMap[105][105]; + int mx, my; + int mode; + int stage[105][105]; + int cnt; +}map; diff --git a/lib/opt.h b/lib/opt.h new file mode 100644 index 0000000..d53349d --- /dev/null +++ b/lib/opt.h @@ -0,0 +1,9 @@ +#pragma once +#include "mine_map.h" + + +#define BOOM 0//ըը +#define UNALLOWED 1//ΪѾ򿪵ĸӻߵ +#define ALLOWED 2//ɹ + +int count(map* map, int x, int y); \ No newline at end of file diff --git a/log/team.txt b/log/team.txt new file mode 100644 index 0000000..83115bf --- /dev/null +++ b/log/team.txt @@ -0,0 +1,5 @@ +map +record +opt +ui + diff --git a/pullTest/pull b/pullTest/pull deleted file mode 100644 index e69de29..0000000 diff --git a/src/opt.c b/src/opt.c new file mode 100644 index 0000000..1e4b803 --- /dev/null +++ b/src/opt.c @@ -0,0 +1,59 @@ +#include "../lib/mine_map.h" +#include "../lib/opt.h" + + +int opt(map* m) +{ +/* +* 变量名:optMode +* 作用: 操作类型 +* 说明: 1表示左键单击 +* 2表示右键单击 +* 3表示鼠标中键 +*/ + int optMode; +/* +* 变量名:optX,optY +* 说明: 表示该次操作的坐标 +* +**/ + int optX, optY; +/* +* 变量名:stageNow +* 说明: 当前格子状态 +* +**/ + int stageNow; + + return m; +} + +#ifndef COUNT +/* +* count函数 +* 作用:判断指定格子周围雷的数量 +* 参数:地图指针,指定格子坐标 +* 返回值:int 指定格子周围雷的数量 +*/ +int count(map* map, int x, int y) +{ + int cnt = 0; + for (int i = x - 1;i <= x + 1;i++) + { + for (int j = y - 1; j <= y + 1; j++) + { + if (i < 1 || j<1 || i>map->mx || j>map->my) + continue; + if (i == x && j == y) + continue; + if (map->mineMap[x][y]) + cnt++; + } + } + return cnt; +} +#define COUNT +#endif // !COUNT + + + diff --git a/src/run_app.cpp b/src/run_app.cpp new file mode 100644 index 0000000..1dd7971 --- /dev/null +++ b/src/run_app.cpp @@ -0,0 +1,8 @@ +#include + +int main() +{ + + getchar(); + return 0; +} \ No newline at end of file diff --git a/x64/Debug/MineSweeper.exe b/x64/Debug/MineSweeper.exe new file mode 100644 index 0000000000000000000000000000000000000000..3d6f8eac75cf1874c1a86b4e3f94a0423ef3ffba GIT binary patch literal 61952 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 I%X#4c0{1c`QUCw| literal 0 HcmV?d00001 diff --git a/x64/Debug/MineSweeper.exe.recipe b/x64/Debug/MineSweeper.exe.recipe new file mode 100644 index 0000000..af81997 --- /dev/null +++ b/x64/Debug/MineSweeper.exe.recipe @@ -0,0 +1,11 @@ + + + + + C:\Users\Anti\source\repos\mine-sweeper\x64\Debug\MineSweeper.exe + + + + + + \ No newline at end of file diff --git a/x64/Debug/MineSweeper.ilk b/x64/Debug/MineSweeper.ilk new file mode 100644 index 0000000000000000000000000000000000000000..a2fe47d8c2d0f9a0666b136e2348c4b7f7d9f6fa GIT binary patch literal 585816 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 C:\Users\Anti\source\repos\mine-sweeper\x64\Debug\MineSweeper.exe diff --git a/x64/Debug/MineSweeper.pdb b/x64/Debug/MineSweeper.pdb new file mode 100644 index 0000000000000000000000000000000000000000..9e74af1cb07c27db7f1903f28b3290c22a218f72 GIT binary patch literal 937984 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 &?YpI)-arSbb^< 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 literal 0 HcmV?d00001 diff --git a/x64/Debug/MineSweeper.tlog/CL.command.1.tlog b/x64/Debug/MineSweeper.tlog/CL.command.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..dcbfb7ca1fc895c435a62d3400447c473798cc8d GIT binary patch literal 620 zcmchUK}*9>5QOI}_#ec(ida14X45n(Gz~AcEhQ*YQw_uzVnu(w`fc(Q1(oeyvb}a$PA?BuC73rbIJcaLP1g;=n{yj+oLh%!GMDeL%G!+r;=i$`B4_q8rpw zoJgjIC?6;+^D;sYL9?za8W-{7ES z8|I|>#VGMqp;PTPD%{4)?@^h-X)kfZa$-k#kax#km&vfvK8Q(J&P z$3BcJq$L^~tQEl{Ho|(g8#MdlEX3sju>dW{KEZqON2VNX8mIu(gx<&OnAcAX1pJ-= literal 0 HcmV?d00001 diff --git a/x64/Debug/MineSweeper.tlog/CL.write.1.tlog b/x64/Debug/MineSweeper.tlog/CL.write.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..21f2deb54819fc783936fae1bb238d0776e61711 GIT binary patch literal 488 zcmc(bPYZ%T5XIkF=%W-!(ZO4q$Of&;YS}^Z`+o`TH+u6d$-?}5Z|2SHG=5bmQ?HjA zm5SJ2H+i*kM2%{Y2&W{A*g(ZNPjF9uBHW5XIlw#Q&k;;z@`f@zBIWTM;XzG_(~=h{g{{jDU%#f4=(LT?lET2QQLl zx7{~yXWqr_E}>oPiil4|~dbpVg4Jv6%g1 zjdY@8-e;^sc6aQ~680^gGoB_sLS1TCJ8Ibo1sWRvqGYYRs=A5R5u+gwMJBVzX4?ZZ zwFs1~EQz{S>rYw!<~wG0cjY@J--OX&c%Y_crjCh@bVy|qqK8=4=TSvFR5h+KhgNTH zPsaG(_=t$nV@E=?s-FP#%AQ8uTdoVMrmn|$Zr8jxEI?~fvy@;lF*aKItU{_<)v-n+ z)K@Jnl$$<`bxz!z27;}&X%&BF);eDdH?wKF0ebd)I+Dhu;dLy$LZo7}23YSTNve2G`uY;BL zYib(Uzc<1bP}#P%r1Zb*mkiWZJBF9x!*t}f^KvR&UZx8o`qbS({_4i@{&@3z0}uVQ AYXATM literal 0 HcmV?d00001 diff --git a/x64/Debug/MineSweeper.tlog/link.read.1.tlog b/x64/Debug/MineSweeper.tlog/link.read.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..ea2cf4aab950dec5277dcb05339f9a679b4a87a9 GIT binary patch literal 3244 zcmdUx%Wm5+5JhJlp#R`yx~O3%Zu8h#vK*_?!w{vo4TR+Xe#bxKtYxQzr-17C?pYB}&3*&@4eG$C9m$XO%YN93 zaRZ$pedm$`+|Ov<^UTqa*-!goXK$zPk!<1Y;HYh8TeMfm2j=H!yhi6&^c?)u4ZH{6 zyNB)_&(ap`SI`-wsJXvOyJ1|hB3l1h^Nkqq9kc$UvP-*wXVP$bWYHdJp}NDWWnwoq z`9yHfY_VTDHq7zUnj5R|?6mB-2GxT{V`|n6w)1FAEgt1rMPgQ*Fs;dHePYN4FqQaN zIIK+oxWkbGq@Guiinl z`hYE*12R1x(J%(D{e^cP>LhZn|B~3kGb1;Z@C-;*P=U1pJvwQmN-uaXm`(Y$X0Ktd zx8JNiusSktd326CmGHK@qz{;L&*}~Iz2f~2N9-D6R}dv8^v6D&Dq{WXhFehgq^{{R zV3wsix1D@QxKEuggr~bcm-a-t|3lRK4jw%>^tqMNyPs=jb%#nQYJ2i5ygImmuGIk_5V1X||I c{&M=)>#x(s8=N>!?jrhPadH>Q{|cjv4?^cpAOHXW literal 0 HcmV?d00001 diff --git a/x64/Debug/MineSweeper.vcxproj.FileListAbsolute.txt b/x64/Debug/MineSweeper.vcxproj.FileListAbsolute.txt new file mode 100644 index 0000000..7214faa --- /dev/null +++ b/x64/Debug/MineSweeper.vcxproj.FileListAbsolute.txt @@ -0,0 +1 @@ +C:\Users\Anti\source\repos\mine-sweeper\x64\Debug\MineSweeper.exe diff --git a/x64/Debug/run_app.obj b/x64/Debug/run_app.obj new file mode 100644 index 0000000000000000000000000000000000000000..fa66f59bfd5cb40c51fa06f6347af4e984236e60 GIT binary patch literal 9058 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 literal 0 HcmV?d00001 diff --git a/x64/Debug/vc143.idb b/x64/Debug/vc143.idb new file mode 100644 index 0000000000000000000000000000000000000000..41e4e8e7ca622165b13c11e3874391712df4d4fa GIT binary patch literal 27648 zcmeI3ONbmr7{`0!do{)vA}ZR5N@8%PXLqxkEKvv(T#^tWS#uBymPt?VZo4zxL)Y}q zF6c$YgMzH!Er$?@2SxOtcrZQ!;^QQHG9Wp4(SRU9@emQSe*d1S*&!JpAw9$F&i`Zo zQ{C0oUv>X#s;X!EtAoB9g*u$6*@awT`*!=_)Km6&)^Rou-Me?n61Hc4`yXc_xr zcQ+D#k^l*;a{@nDr&nntKmvnFz_LCW%p2!jlK=^$mNAVLn`6SB^7Q9G%C9kS;-h`^O{x!Ma>$q69buBLWp&E9Ehm{*vDskY~mehi)YGGK` zs-k5xKbjqJppao0ixjJ@bAMdgzYTP0}YVYeaOD=(uF! zxGlMNN(#G9bVPKsXikJD`cv`7un@3$7=^^idC z2(bV6jx}o{fqo;v{@-sc!s{V{-VtE`?;UH_L<0Rrfc?MUT7=g_0=*+pinNV)ddBc- zf0yWa(N@vBA{fSrXC!Tp6HX2^Kkz;e@Aq*2JG&d11=;yUbWHTVWL*&bD(@8ci;j!n z(~-P?@(C~SXY5MLoAa2G010#^aPj=b^XOyy@M2zqmtrj;c&aGja!QABq5zg~KF=*M{S)h{19yl4LNk8l_< zJBabY@%?|u$<1x-V;EWfR(3;VzV;hEu^@wW~vpF5KY9y28yDSW|z z213~nkDW})Ev1Q7lxuJHyZzlQzHv(EkzR_g~N8{JsqEmxQ;zVF_^kPkQT&E_)2ds;O=* zYU28z)|#c}(ju<^Nk%EI|JksEHE)arQYL`k@wO<<^*>nmgVl!kDZ53)^*;iEMgo0E v0R5jv0wge)1hC4VMgk;20wh2JBtQZrKmsH{0wh2JBtQZrKmsJNF$w$)%Fv0g literal 0 HcmV?d00001 diff --git a/x64/Debug/vc143.pdb b/x64/Debug/vc143.pdb new file mode 100644 index 0000000000000000000000000000000000000000..26022959966271755d54f9428831614f6d7e20a8 GIT binary patch literal 86016 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ðD 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 Date: Sat, 18 Dec 2021 16:20:17 +0800 Subject: [PATCH 03/19] feat basic operation left, right, mid mouse click judge wheater success or boom a function which can open all the remaining grid when all the mine are flaged --- .vs/MineSweeper/v17/.suo | Bin 37888 -> 41984 bytes .vs/MineSweeper/v17/Browse.VC.db | Bin 1425408 -> 1433600 bytes .../ipch/AutoPCH/98954ce38854ac1a/OPT.ipch | Bin 655360 -> 655360 bytes .vs/ProjectSettings.json | 2 +- .vs/VSWorkspaceState.json | 3 +- .vs/slnx.sqlite | Bin 307200 -> 307200 bytes MineSweeper.sln | 31 -- MineSweeper.vcxproj | 111 ------- MineSweeper.vcxproj.filters | 33 -- MineSweeper.vcxproj.user | 4 - README.md | 2 +- lib/mine_map.exe | Bin 0 -> 1794448 bytes lib/mine_map.h | 18 +- lib/opt.exe | Bin 0 -> 1806768 bytes lib/opt.h | 122 ++++++- src/opt.c | 237 +++++++++++-- src/run_app.cpp | 8 - test/opt/3 2 2.txt | 2 + test/opt/Tot.txt | 6 + test/opt/opt_test.c | 314 ++++++++++++++++++ test/opt/opt_test.exe | Bin 0 -> 290312 bytes test/opt/tempCodeRunnerFile.c | 1 + 22 files changed, 656 insertions(+), 238 deletions(-) delete mode 100644 MineSweeper.sln delete mode 100644 MineSweeper.vcxproj delete mode 100644 MineSweeper.vcxproj.filters delete mode 100644 MineSweeper.vcxproj.user create mode 100644 lib/mine_map.exe create mode 100644 lib/opt.exe delete mode 100644 src/run_app.cpp create mode 100644 test/opt/3 2 2.txt create mode 100644 test/opt/Tot.txt create mode 100644 test/opt/opt_test.c create mode 100644 test/opt/opt_test.exe create mode 100644 test/opt/tempCodeRunnerFile.c diff --git a/.vs/MineSweeper/v17/.suo b/.vs/MineSweeper/v17/.suo index bc5b80826dd386cf43d22529121cea27369ba862..88c2457aec708f480ad15602d3ac867f8d8eef43 100644 GIT binary patch delta 3550 zcmdT{eN2;A7k_Sf3eN+TRcvVi1&S34wB;#E0Y!%b8wj-J!>LK<2Fj)kkV)$V-)M31 zBeS~loPB>}k$?8#K6K5p%w-u)l9??Tnl0J(F4^KA@0RSJ`M$wryl-N6&eIQD=awz= zpZ95gx%d9g{W#~|bI!dDyrK$RRE4BvDlYbEIZnVTwXa7a5n|K8r2cN|{x4+JQ1+#k zZ>I0TL!hlA8NETj&zieSf{w}hR7NU>GI$28AWg^H@ z;%~N;IQqy^vYIT7GLc9=)(a8(7^lOs2vLrPl-(YS^T=WiZFwA^$*fx@<0^o72Js}~ zDa6wV>hvsJDP01-OmqFK$h;C`Npc$NugBVNV)<6AeiqBOV|D5mfyo2OHS%eBkVgG4q7*EDW{wwAUg(K7)4MQ))OsjMX0_yjf-f5kFx5taYf zR*4C#aO(}AE!Bq2rB*7>~3uA!H~7M__QP*eC0uTsgJz?e%(R!izqn)3%ZRWXT_>LrK3J5uf8C%bx2Z> z$7hE5)dBV#_}94Lg36(O9z_|jVEPnhRT9jXcmxwN%aaHAmU{#WBy|$0Zomc)3rqGV zsdD%aR54%VE0V^;yx9#+=Cu%5(aKYV#?@1H4cp2m+nYpIiB(D-@gCr_dw2s8G3SJN zyGN)&f};9HuPV2w#ITgY<{LqiUni_aG9y*s5h$-wx{A-i4#Ks3m&j2nD@*1NfWNbc zUy($q$qP7GSiE0-2I;4|tXq$+?$JrA?RlKKtgPbqwToEO$2M;SK0qWU#u@MKOC zMx6k&ISq1dD^FP|-XrYGbu;DUL}Yv6y@tW!C1=;Hm~Pwp#N*ocJnx=9vbiQ}yKC@N z)7;nJ6kPw`x-XvtHl~9rXC9n!YPF>+56auD2QFP2ICtXVWA~j7Uvf%JHqJtGfdn%> zJp5t|Fbj<5Z4?>W6rmg*UmOCBJk!8}-hFGGVBTPXrNw2@k(6)~BO9$e>?`hoS-pg& z;VQ-LBBRtwS6rf(&lH4y*ao4T5?o6V;z~luFG0Yng|ic=q*c#Tyg=SmS=M2^=qM$r zxpc^~{gds4MYc-Vc2o-{XBmvzM7CXF4mhiCv@(Wv^?P@Z`k>HRk>#{HYW{Io-_Y1V zztS`Nga|*?Ss^gq2)W~fs7vmj)aA%+)FrC5qKnhQJ62h%Ng=tgS)fBHN!hf*IdTZ_ z6$NE$qgF8m<%zwU%)vct=u!`HySRRMrglACtucvv2FASKKXv9`L$JQq6O(OeXooAd zBH7iNh^?6ro}24aXmU*QW?D57bd??2=(hcxrBJc$x5IzYZaP6!FvafQcst-`glDXc zY`QsJwpo6ly7UZ;eN= zVAqsfNl6axoSU);_;Ni0J<#Z}mC$NFH+D}Lnn*KsH0v#ten3E#bQc*)Sgn5(O$9eq-5jm;s|J8Y|}YggL(>z(zszB-3Auw$UUPU>^2I0zh{ znx4pq#laBX(U%Y3Ro>Im-Q!*F>TUD(xHok-wRpQ*JnkNEXPc|V*0Z^##naO5?P%NJ zbx#j7XdD)yV_X}~+f&APPp`cdej34q9PAa9E-|J8z8%wq?Z-?EpBBx^GPXax% z5!9Gb?K_zR9zJH#$1<#ar%%Fc6A19qKEt$+{R%{3Kl1

Y+OTUV&Cdew zMc5WJ#FSd@s3_HlJT?9xc6maPHEp!fL`yXB!3TqhiM|oD80!P|o6FvI5o+63I4otkaN5wH{}1oDApKnB3FJlIs8Etpy7D$Gux2q*?hfC_+Rl7j+fv)BkPnwI;LJDV|Y z0k#6$fF=?-Ihi{^`GID@e$Q(sd+qvh-@|&nIA8bLFo7*KhT%O&BM(URUdGz+p5+bi zIcfy}^GY#iCh3K|$9-8WJ2xKI{pCsbtpm7e5I6;pHND=>t{8X~%-4YP6i&}k-URg) zi>c|QW)>M^cF_l5T?Re`t^gka<3J3!3f!fe=>?WgKwZ~Y@5lw`Lbo+*vz&&tkx$|R z^;rWlCnnvjEJ2D{#2a+S8c;ZMIHq%wuTx)UKw;N8DGYYrD_H0Wjro7$m09Z&%GyPY9s;gZ1`oLkurvSr(1rPz~+3qt3-$PEhDDJZH9E&&jh34FDk=Eegruz;%gEIH8`3G|bsWH?_BSjvI z;BSEYKJnFsWb=6yZiC#+4WlVOBGa?JR;3V3?u~OB3E#B5m>EV!sH~#A{=Pglv#vIp z+0e9*3&busNo=1be{FL{ZMA#D@g3pAy^&4|dDhVN+FH6&VWWs=A2}+2{TG>ZI_L?T z^`qphagx6>uI-<&NR_aF8}q#3dC1%Y2(81F@h&#l35?k6?g3#d_ng!ouRbw77wwS) zUY0cLk~9w?!9L zT9|UZ^uW!wVz0u9%XK+tyjrYx3UQQc(<1m=thaz$V(ofE+8a^TCyzYQi^MG@e@8TrQ;Gx0=)U&3_H@B$ydA-VK*ji>XqNbv2D*KL&VK0j zN{vX^dQfg@gR~ZCKn2x-^6I-@owpvp4?95d%<$^xJdpNcT`xV48lmCtT)N)v7T=Mx z=f&36|4=(Ay?bNF`zK}7luQlLHEBY+NH<@2ihg$6C_b8dX+ThTbWd`*ntm8=ThbHh z-QUx97w^E$^+D8ASWBGppR!Bk` diff --git a/.vs/MineSweeper/v17/Browse.VC.db b/.vs/MineSweeper/v17/Browse.VC.db index 4eff9a349387b9d97a572cfa9301d6e09c3c5927..0f94a97de91a52b12eb8bdfbc729fb86573084be 100644 GIT binary patch delta 7111 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%0D(cMD^A6R{vi1#cu6k6(6DX^a)za zj~fN_E|yW~8_8bYqs2=29DN3N&`S3H9&Ht*53)Biv4HYOS$MX<&Eaj!N?xwpyXgQ0FhB==l|`&0x^M({+Wyu-#cqdk&;ID%~v zJY-{{v7MX4H-Gs7&0KyUs-PAp-~%q!;`2{6D+>I71P~u!KNR{$K_c?A(vv*WoLx1g z)Hr9Y&e>JmEq-GjpW-*%co)%KY-2VLWB96?1XxKHe#^|C;^OT#Lr>!Pu-8K!E;tejgYO*iD4noz#ltiJg zdF?@e31&?-3dW!mOlNhAv`5UFkNCIUBOC+_4RNtkmCAkQlp%pFQ2Wr+;@RN!c_pvQ z^PT6E=a@M#JMfsyuMHqHj#&GFjeI|_@u-cvjn5;vkK0KyJ~npQ-<`(U2%d@HX&a9i z-$wA82p%_Masur`aT?_9ub&t74(nIw@5xRK@$X_O*G9#&-SaesO?sciEE(z-*r|rV z_>gyvI##`1y+yrF?W=}Vj|#otc~5u`dq4N?_HOrXVn?42j51d}9k`&(jdm%}_={rv zRpv(|$hQzR1=`br*G1EwQv+*0EbMlU@w$ z2mHjsNK;^hpgin`%J0p*ra%MeHC3rb=_twjvG>pLsCS-swzt@u?H!=JrW7dUC?4rN z008WVWq}XOoy!7e1yt{PiEUdMccFxW9vKk@7>4^41KqdZPYREZE6Nr9J=(*3zkzGSVS3clH$ySii6=5H;jV!o#G=jgAb=WpbGYYC14CtU56VJG6u5G>h%-m(oK2|L_@YR)4!5WbbX(DH^(dnv-8ibZj;)(hH5b-l4AHu8l5lq8E7n=6TEWq-V4z&Es`{ z?4IYo*X>ijQC?DNlvG8KcgPF*?kh;2NXw;a={89h4~c8V--{E)YxwrJRah)c7y6Qm zJF+`uCSI`_Z3`N6Za3idTxiB7_1n+@|6TuxI;5zEsNO#dD zT261IUiE(-04>X7lUdB6jO$UF)81PUozA#rlIz z6D~EvA2g1zUCnyXnC379Q?6#ITSxsu#Y$E*RlA`dI{=h zj%9ak*1NO727L^hXX<^~+iUe+o}`fdpqdnOG+Vt^H~bIUR@aka?FT-XVdk)(*XhCN z0Qc(LF8nXlm*2Q2MJ4(8%Whbwr`(WqJxP+2tP^)XbEMPxUca1_fyAq>V_?w!G@I7x zJpen&JJmnK9OBeX_wsmGzG6aOu4_f?&PgE7y7Dm92E7WgeedZX@~92Gz%n-JA#>X% z{dQoanR6U*dMuZA#aQdHtR){sqZG5s>T@s{V{|IcY>Sga_G1}j_T|EeQFthBJ(f{s z*+wa`YF=R!IZF2Nm*=FLGi~K^kSlk7mlkKVWv41PVQxLu*a2w!4Tk0o)Fgx_nHXTE{no>FWP#jWk|8#abGO>%ZFi zv5DAqX-kT-wx<85hU@h!hO_?N1o<70bAJ;n ccTt*o@okR)SlTL&2>$b}5coe{=2U=x19Zmivj6}9 delta 4454 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 F`CsufzkC1y diff --git a/.vs/MineSweeper/v17/ipch/AutoPCH/98954ce38854ac1a/OPT.ipch b/.vs/MineSweeper/v17/ipch/AutoPCH/98954ce38854ac1a/OPT.ipch index 10d96fa203e162c9a03d7b86f8586a5bb18ea6d5..0550c6f2ba20f327453e0e4a7b00a5052fffe5a5 100644 GIT binary patch delta 2244 zcmb7FZ)j6j6o2>SzS|_V+M32xj5cxpEnQmcKdRL!M*M@i#w1PJrcKhO(P-*Yrubz- z=bls~4kf~=pVm=@Za8KTeGZg$;1@wQW&2R}sofluVWIsr$As;i_g-5!$6yyu&b{}X z^E>Ch^C$iN>-ziG-7eZnDGRcPGhKy;w&k8h^XIzva;JUAS4uKoF(g_$fwhZ< zD%7s)&7A6q_a<|`)(YsI_55efp92lIFd{HgdNVRMhExib}wTa34jY2u6dSN?Pt?cCD{4YUg*k zTsvc*ZZ-7$-GptI4qJ3HDQLQCVtim~M%JcgEZ(gpo40Lh*tWSrbFSxSYnTL=gZ%Tw zZ@gw44utqIwjYWiev(CDd6*B|E{04;@R*J{44LAqg)=R9jJ6oZO7KSbuzgp=IKGN# z-$uBdS*=k;os3%4!c|W*)VK2cii&}k6pD7oy*55>Vb@@ygMY_{v|=Z(X6%;sEKdA^ zHk07LS@;vw25*;Kd9R228JmWQxNtx;&G#&v|J)dkA3jTC=vJsWhEdhWj4)onLpr)U zjN=$&j`Lxecj7nlK~sj8EBxiw;Vmc!Im&d4}iN z5cHkkKP$U1gN$CHWlwS|V}3Z3VMkbOm;GV=tyjXr>Krp+ zP%6!;M&XOFaLJ*tf$$0u$QvQ#V0DYw&T1jqg7J)+*knvv#LeDd^s;g!;uT0uEe6_i z>>YAMXi+GOU_6x(J)T4a;~6nq3#AgN60e7I5sYV5L`SH}VzZDpLYVDD$_!2`($=#y zh|Tya0!O;Vl1B1Qk<^>Bg!Y7iOq!i9v}clCKhqbaby`bC#UfTVhPo6Ay~GOVT19-t z57>DGp{LJ;q7Zm`&MlO;3G31;m`}nYpM*nuS}$Qkn{X&JH)3$0O$@BRf-PEw5+bUA ze<@~T>gx68HS5i|B6VC8fkd5-Gzo!ru~xp{GgsCX`IMqAMGdd1>W7={;>e2}RAOv#`*W(b`gPTUQ>F-%ES%t-1ejvjg*rKBEyiHUdQ7Y0I8hp@h_nv;nv zNtHOq`GJhBz#pnx;yxq^`Z`3gYy`#Rj1b-MtOLtrtV54!JivK{4X?8X0@+9-(AX)e z*`#6o6eZ+`j5&OT5*y)d!J`KzIz^m?V0T=&*eYm^iveTaRHZ&r$zG}JUfIR|In+9xj5M^{AJBpMWraGu{;iq zDRHdg^-?9%Wl&6sWeR0<6Ff_aVYt>K%JE<8W{-GWDp{8PxbR%)56Qw{A|)IH`LsYP PL9%N3wC(hD^tkFTu?s%J delta 2755 zcmeHJ|4Um}6o2>SzUxaGZESTa#+sC_I@vU-R++P_P)oB?oz|E{jhbk*YHgP>OS>Ni zy1k)m?XaZV*`Tlv3+sksN@r8H4qA}X!rFDLgEHJ`nJ^g^6de0uU(b1YDZ2GP*e;xR z?!D*h{q{L;XsB>#sBmi9Y|WG;X>)OLNpE*J61!~9bJ|u-l)MlfEbiSb$vDT5sO>xz zF0mU1C5QSBcXu2LM~i!<`Aw4@5ktmf*KkYEZ z2i|0-U!39clgpNs=7f%?3u9E6YfZWZZ^Tg~cEys$)R70va{R%v$yt%&t}H99bi3l2 zPw=BfjKj%B{?P{7fz=C==HWRnKfw0Ew3i=bLC9<36Xr3m5eIJ2a1gVl)Ld}Hhr^&R zG0X<1pHEn7{E49yh~M&a3rn#E6m213iZzThfUB8bQbsZDl-RUoL!P6z%eiSrl!3_}(hFioH%Y2CwfCpD=5DyGMMJqIkL#Z4svHL}u*n z`n@n!#CbegFAC+yUHI1MttW}FfF2u-lL#Z>;}sRKv|rfV*Y_)0l1S$-Y{ci$j_x;h z_2$4YLE0o?P^rT}1IISkHn&ArSQ`Q+Tg9%u|AGh7B=2X?JJApldCfBBk?AcNnRHW- zRw!z2`t6pr>hrL}E1s8wUVM{}#m-uJj+vAVxFJu3jKl}ws#j#mQ7;_cCHALg8<_Jf zipJpSCh?5yX(A^u)+E%Y<_s&cOsX0%#T1-NM!*CE!Xcp@W?F5}r8Qc$wootCb<`<6|l?Me9X%Sbk zHXvi0@Usz#crg-hOWdGIlv7~x=75`Rc!TEJ^mRGfg_;^on4^$h^7eL-FE1LFcThx8 z$WnzF6q(6cIS#kL_wAyC2k?yGcD2Z4A*kyV)RwYO}XwuH1BxXBdXDa-HnrsSc z!=ivwy^KXm?CdJA`Ewl4^q8&oz~%yV0#|6 zN5p~j)z_6Y?eK9#50Y)s4XCF4AsX3ay4-ycLGK#SP0f bDd)SiSG>PnlSaHf0x1PajeC2{qwoF=21nf~ diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json index f8b4888..e257ff9 100644 --- a/.vs/ProjectSettings.json +++ b/.vs/ProjectSettings.json @@ -1,3 +1,3 @@ { - "CurrentProjectSetting": null + "CurrentProjectSetting": "无配置" } \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json index 8bbbb4f..435c591 100644 --- a/.vs/VSWorkspaceState.json +++ b/.vs/VSWorkspaceState.json @@ -1,7 +1,6 @@ { "ExpandedNodes": [ - "", - "\\src" + "" ], "SelectedNode": "\\MineSweeper.sln", "PreviewInSolutionExplorer": true diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index d00b983a9a583cdf27848e849af4a56b576f9750..5f9de85c138d7b908860d60adcdd8c98bc68a100 100644 GIT binary patch delta 4954 zcmeH~`*T#)9l-CoySdrByZ4?vNyvLifCQ4wlaPc*0wFw1vRMfb9w8wK%M!>w*xkGc zX5sJ>R1lBjwSyh`!RlD0f>G&I9r~~x9mlCoZLPH^V{NOYAg=%t3qALIvmuQCK!50D z^7-sN&+qqp@7;TM_xZTp=i?qv5fMI?wwUqsrnXE}O3!9ai=IKiImJ?1~ttePoBO0@N&^F`hLimi}@c)=v~ zbazHZ$CXP$B5Mk{f}u#8>9Q?z^Ce*;qR25t`|z5WASXvA z(W3fkQ9JqvOHf76vupkHtw5cfv%9A2V!gRL%%DP2M8td#XuidjbvH}}ea_{cxn#elQ zC<&=-PQ!}YI!AL|WO%FrVzBoGBTWgSBur&@j@{iIa=9X{aY(6aRf zZA+u&Z52lRdqJjwwtt$U4T-WIKJ94twy@fn`I@B`Ln<22-xzI(N9^mOLN`m^U^Yxe zkg;gSNkYClYQW#)oA@fei2sH^$8TXP`;L17zl-PNPqBm%ow2Fhtd6Op@Hb-1I;zfy zG9Xk@#aU@I2&h6wIo65w)`Sv#T99a}?z4$)u`WV5xO z71wFT4fr~~pggJkT6tMnig)5K@gJ=pTQ4b5$^w;ITWPMJ71xOi@oM}!eqQw{pQuaK zIIBk$m8VhDH{_7sIc;l5IZuo%gZXsuVhcRNCHAgV&&7XvJ3CLpvJPx zU2jT+CZA_?CVlRetf)P|-TKy7^u1T+v4uYp@EHDvovBg$Ek1`o!k^&xM{K8lijO&? zcY6Rwj~C`lD+{L{dWYt`Ewj7^ZBX zMb|e`%V?5Fis;E3PI}@>4t;vmDwD#pE1pdh28}<=h-4c5 z*BD#IMz?*xS0q{V+wb?uBr~!bj8CPv{=GNcDa^B91&7U`m7oVf zPEZrb0cr#_fa*aHfL4H(gO-7og6cp^K(&$~tQUVV94-RYfT}?YK?^|hLGwUWph{2$ zXfCK6GzU}$Dg~8*ikZS}`yx0j1ld6apnTA5&@50MC>JynGy^mplmp5JO#|6LS)fc^ z$qLGV!*oy@C{;VvjFR3cLO)l+gHZ-SL<5}toPC_VoFUF2XMl4Dr=Qcu>E-lr_Hb_J z+{W3>xs}t+xrNikxjD?$#o5W(!MTaEowJQ|BWEk;2F~@I>p0hPws5ZDT+O+Pvzc=x z=YyP1&Zelap1p$~G;%g@)^k3!=Q7TvoOPT_IBPi3?JM~~1?ODOa?UxNWt^p)C7i{aMVy74cFqFMe9qaNvpDlOb2(>nvgbV8cRFLG zh;sNrHs>@>8)p`0CT9j`I%gVZ>Y0nx=<}@qKZE|aocBL zLu!ih3&m!A-CAq;tHos=HSaW=_=r<)(#XclMV2cY}8KoqgC45`;k?9oOOs~y_PzR)@#>x zAoiGCr+u*>txu`#vDf-M9-r6l5BU5+V~DJU=^OOv?b>Gn#NG{Bw2J|BKqPCl{66H? z?lg-jQN}${WVJRHL5NDG0JbVQ;jp{MW-&vXD3DO*G&8 zd6GaDXlI8};!HB1kD1NK1YE(^$PZ@r19T52^C0>mc*C5gzf2{Fq>8;AZJ=kbTIu80 zqt9FqqY?ue)ILARayj3Ra<%X(-X1+>Nk=qTEuukS^Et>GX#hJ5Vcj`6U9u^jvPWUXuJ08A#@0B)AA0Z8K_%7uRGCJ{akD}xnT}J zpUv8_M_9~TCS@f)%Cd6l=U`*p_yvD2jm>bmeEBGfH+8`}P5R#Kx_Au5nL44Vnm0{k z?syZXY#DS^otL{sadA delta 4964 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 diff --git a/MineSweeper.sln b/MineSweeper.sln deleted file mode 100644 index 720b2b8..0000000 --- a/MineSweeper.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31912.275 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MineSweeper", "MineSweeper.vcxproj", "{3A42E008-5EEA-42AE-8E6C-948CA05E164B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Debug|x64.ActiveCfg = Debug|x64 - {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Debug|x64.Build.0 = Debug|x64 - {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Debug|x86.ActiveCfg = Debug|Win32 - {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Debug|x86.Build.0 = Debug|Win32 - {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Release|x64.ActiveCfg = Release|x64 - {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Release|x64.Build.0 = Release|x64 - {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Release|x86.ActiveCfg = Release|Win32 - {3A42E008-5EEA-42AE-8E6C-948CA05E164B}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B633CF92-6B16-4432-BA91-07C25A21A250} - EndGlobalSection -EndGlobal diff --git a/MineSweeper.vcxproj b/MineSweeper.vcxproj deleted file mode 100644 index 5302e98..0000000 --- a/MineSweeper.vcxproj +++ /dev/null @@ -1,111 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 17.0 - {3A42E008-5EEA-42AE-8E6C-948CA05E164B} - Win32Proj - - - - Application - true - v143 - - - Application - false - v143 - - - Application - true - v143 - - - Application - false - v143 - - - - - - - - - - - - - - - - - - - - - true - - - true - - - - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDebugDLL - Level3 - ProgramDatabase - Disabled - - - MachineX86 - true - Windows - - - - - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - Level3 - ProgramDatabase - - - MachineX86 - true - Windows - true - true - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MineSweeper.vcxproj.filters b/MineSweeper.vcxproj.filters deleted file mode 100644 index ec90da3..0000000 --- a/MineSweeper.vcxproj.filters +++ /dev/null @@ -1,33 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - \ No newline at end of file diff --git a/MineSweeper.vcxproj.user b/MineSweeper.vcxproj.user deleted file mode 100644 index 88a5509..0000000 --- a/MineSweeper.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/README.md b/README.md index f33b4fa..d985e98 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ - 基础交互 - [ ] UI - - [ ] 逻辑处理 + - [√] 逻辑处理 - [ ] 局面选项(长宽等等) - [ ] 存档、读档 - 高级设计 diff --git a/lib/mine_map.exe b/lib/mine_map.exe new file mode 100644 index 0000000000000000000000000000000000000000..e93a692c695a9df1ee270cfc41331bcdb04ee77e GIT binary patch literal 1794448 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�f5u~o zyW{^%NAU~;x^(NZ`)S~Ln@uD^!J{`Uez#EsDd^OkY#8jHX9u!=GEQ z+@}G5RX(lwC!Vu&>c3t7dO`eu`iHK+=>I;F^?y3(-=L_cR{Gak=pXw;=yv5+hId?! ze{RnoY3V`#D9m%!-u(H1edPT2CFr4ZSA^EdO8=cz4sVDDUv^doBJ8|v+CR@f_W#My z{-YgU|1>SzIsJdV&Gz4>{(mO>zn7u@$J`oO_5V$q_1~ju?D|)HA5K(X)E_^@)w+Ir z$m>|E_Fp&nkC5qv|LP5){R+F&u#0%HcRL-l(f>=S|0|%sKf?5Xs{{4N7qF>xveG~L z;PCplQy$yVTR-Jl*Z&)- z|7)Os?)=d8)QW$H5whv%U8nl!=6?pj4Vwc_7sp?~hTq07}K-8Rv?xo!X7 zO8&2d{&f+i|9fur=Ov2mA3vm{(#cBy*daS-{CBFq-u|1V{`H`LOlIhMYQ?`z#rz)~ zXmF~(82>j({zpTeV>UVCAF$BBUg6hmF?Dy?{#*Cr{r~rp{~MrxeT3=%zFYmd0NDPI zfqyEUtm=Qgh5l}JR;72UzdrxlBK3b0^!H>rtN*I}?danlIMiQ!4_@0W`HzRp2AZAm zj~N=i|BwAHv|qR7)5Br=*Zcn;CI7cT|3HN4zt*k(TmWqU_=z!Q>rvEzI`qTQq-v9k9`M(4FW3xlIQ!D*d`t0cAA3Ef(xBp)x|963Z zS%mTb$RU4S|80{0d%(Xj!uWsekiV|~uabWQ@Q=%htoq+*pFdmwZx#1{Kau>saQ~-F zai7+z{g<5^{{By+!mr!@;a&Upe}eh{F8R*_{&7z_TmNl6pWbh#;#02htBT*=U;q6f z`JV**D-`*(;$L%Nc>c`_zvlee#qT@RzoI+m|EJ`i2K*DB4y}_FfA2-%`By6Z+U0AG z|A9mPHDdjPJH+`fzA3rtaLw8N-^2e5d;im%?~cMR+rIvx_Mi45Z~uQu{Z9e?TNFB3 z>7RIUc>QBnhOSp`%VDj<_Fui4^Z!Tkp9lQCrOw9xv`fPC*Or9#>z4mIxBPhqu>PM0 z{8jn1(!arqzgwb;^iKKf>mS@N@-Kn^1x7k+|4r%P=Rb<zNBCObp3&iTUh@; z0RBx8#{W}?{Pp#pZj%36;GeJ{bUn4I|E?RdLkFKZ@NAQ1O62e#{YAN{Pp#Z z9+Lluz`r@d_l{vU(>l@X@@SGM&x?SJ1z@^1wGEfL1Q$szxgefahNu9E*Jz(4n@ z$ZG#zJLKQojq~44^8Xb0r{qNz|Md>}>-z65`F{rdt0Ij528aCh@vpb!|2gn)jWGV- zIOLxg!|VSZlK&UL-+M-6)&GqS`8NyxeI)-cfq!*`@&DE#|BC&%{?U^ESHNFe7+Lyn za>&1_2j|~c@^1qEm3KrI|7M5$%X@PECrke8fqzHocL{xttDFX!uDe1?tdALqdT zYDPGl|0h=LocVvf!})*t0bKt*rT!a0|C$KXf3t1t7&{`CGMvH!!+|IL8)f7NsPR_mW}7W+ST zRJF4E{J+q@EQ;$NBlZ6l^skLD{eQHtKU@DV8^HPRFZpi*{?UsftN+{TkiXvk50Lzu zfq!m<@o#a+U%&qCFZq85{Ocl&|4;V$2k-wf^nWv<|5NQ#v+DnoU+MZ!pZ^S!`u_;}2O>=W z-|Xwp`aiw>A1wKA1^x{Y#{YMR{Pp?I5Xrv<_{aJqtNpjy=1=Qi`u;D&{Kp6FU$sxm zs{J=x?El(P?ce_XFXFH7e>d=-1N>F{)UEiZTkQYdQT(0me{Xr2uYY!t^**DChu zS@AEwH2nH!ZXk5Ka$7DRIo$uP^Ec?90sK|@wBp}r!QU-UReIO_50U!M2mW;moviqK zFAJ}~f7y=F|KkqSKNI+?@@d7t%7VX2Kexx7^4Fh#;TgdDA14EU)pIIV{56Z`Kiu+E zrFZ=N%NpMQ9VY947V!5h4_!~K_$OW-zWz5T{Hl1h_jsej`d=aV^An-|*}z|wPb>Zv z7W~`G$8J2Q{L9|p`j3$M=K%k*Go9%lcSU&pGOXLZ}R#-O4k2;;NPOCr&jzmi~ZkK=kA#L|GC5Zuk+^uVEtbN z{8jn1;_tQK?^b73dZ+xo@m=XT-?38v0^sj03$2qC|JwJ%_kY@Xq5Z0OwfFcJw#Pry z{{Nwp|4*>~RTg3EUw_zM|1$0WA1C?$4E*C3ht|nT|Mu$D(eeIt$X~zzag^l$3-B+G zF#dlz94+~81O72rN0$D7JLIpge;*_H{|fy55yt-?hy3;X-{U3!-++I8gz?|* zkiUNa>sZPEci``-h^+emuT%bF|JQMne=G10L>PZ3d{2L>Te|NY1 zCrbYR0ROmaBdh-RaL8Z#j_aQ+`ELjQmsZE@5%YMX#4fRnLxURPqE7o?&vYBwe-Qmnuovtu3;C>pB<&ItzHC+ zK+z7re^57f=e+;y9ox@8(fYr>{$t=@*bRVUoyO|=-*c12`VT)(M+Z*Ve`3V=mm=$b z7pVUg5mx{Aw%z_o|CCXD{VzfC_k;d54)w3I&_DhB(EWaWj#XG;DhpnuGTq1&mI{w)^z*DL&rcI-54a@+n>CI6nFf65Kc_&d$N+jIxo z)}O||rv3T#Uq8wJYq(OZi?H{9eP?_9Uw!>o3iV%APp#^I#VtFh|8rXZ?j45Qp`@>?q#tQXKV`)~<<{{1U->1W z%hhf9tamv7)Ac`H^4}HouZ}SNhq=|C3xNIKGSFY8la>B~Ps8i)R%cau`}))PAL{!L z*FqsQq&R#3Tii7}hyRCe*T2$b{of7hzjjmTc50=+N}nBl{1Aurzu{=!|M?{UnEr>^)}O9_8^!fcw&dR%_}4@j z|KYazQ~wt@hS&cr$^R^<|CN_ItN(%9!`J_m%R>9LRe3{1{>EYbFPp*n=Scp0fc{aH zq4W7)?f-5%Bt)TvIph)FzZ3fNxH$fw4f?Bevf>|eM|l0iWXYAuwf?zM|3099dW7kJ zn?wEU$MgEXK=MBa^siF1Q!D*zE%a|y_;n>dB;M$7{;z-k3nc%3pnq0b$g+WA5BVEuVwZ2#wh{wkfU+JDNO zJE#4-*55Dn-xKt&i!l9f20`uoAUeJOPdxuxDEXfc`fFD>YyZs_`ll)U+R1yUxSJf_ z|Ipiik>tM@=pS>7Gyb9S_P;oGi^twsAbPO=JUO=i3qXIBPFC$d;jW$2{$1-|BK6-J z^!G=Y{wqLGJ3ojX-2WF#{uhG&HHvm>rGNc*;q{NYGIYDLllM?@o86B8OCzv( z)Bjcw)Xop02kXxhWBb1d^jGO*rN4G}c>V3<(N0{~`Uj-``(pq9TIhOe$=^<c1c8ABZsh@9@|wMTpMyj~mCY|Id{C z%R&EWhx`A^4+*b-^_`*HmA%}zjs3mb@&6pje}B+F_SVq(w5tDYbN0VEQsuFC9*7>S zKTnSB|5DIjrIQu^#KXetZ!eeakL_CjGO7Oopnq9}>3^rE{bhwQAv)8)MLhp@uH=6i z=pVSxS^f7v8GioPpzv!i_ibZucH92Xm;C#K{&BZC-2ZP7>)#hj z{sVx2d4%!5+ctly|N8S!7fAkBK>d%s-wl5tKM?e9 ziZK1}ajQQsQXK!T1pQSyS&e^b@!|Dvt6aw%ajpL)QvU-%|AgC})&GuRW8cfY9(!pZ zIvfA={jV2G{#Swian;WFM~@1xf4Rc1z1+8r{e#=~f2ri}0sSi?O#k~pP&>aix+n|3SdN>M3XX+sQ*m#;x|)^VWv{6;l7fz`r%Z_^))!|4PaKVBqh4Iy46zdFMBKWLjj@BhX7|9SJl_P+r8e~0hCFSB_6JwHu{2ln6pPy1i>`QO!2|DmA2 zRvTIM{~?dPB5l+ET_gDq1O5$%{u^=~(`x=_FBcsb`(d~Iua*2`fqzHmmr{u=xK zUCX0<{qs7>{}A9`6Jh+jION~x;m^NaFZmw|{G*_Dr&>u|FEZ0`(xW*{~`YR{h!OE{uRK# zNwH34#Xstq@ca{2hOSrbXBs-@kG9vpO#Hc9)c+dbuga$t|7r{Vp>yy4s0042|4$sl z=Rdbe{jUZ76$+iK_**e)R`|6_XJy}Nd;brOe>#7D0@VLH;IGQ3TmDu&oZ4OUzeDPO zJ@Bu5Aapx*%fCh8*C}t2uB8L@zXABG^68ep$Zto7PWe}iaX+X8Nl{`6Yy8%^S`RUYyNjj{VRcgl|m=C{96@%-Rl3dTmA2q{BHsN z-iJchQ@8x96@K0F|HUnTL;YU?{8jmM%ik?eReIO_@00r93jDQ)cZ~jN3co5|?LEG& z1NFZR_^a~yU)A3!|7J1&t(N-V4*Y8rI=ST^^+@P?)n1)d@qV?fzv=pah2$R(*Z=+q zyZ$d7tSXt%$J?xbJSh2(1pf6A#(#-J{`&Wy9+Lb=0e{c)q3fyJ`X5>i_eYBy@^9?V z-+%kCHZ-_Ac zdwW8ci|VN8|LO$)8p;1i;2--!WVQc29P-bd!}Whu@=pN%Wf8`|k3;^^CvpCdN&e%2 ze`AF4k9NqvR`7pZ@;?gr$GsR?^}nw}{^=)k{hyHhj|Tqb5yrotZT__WTX{3T|EbXr z*MBzRpI=AT_?PbR{hv{3T>mGf{>Om+O%bO5o*opf{Xa4O)d>DiOa9}5f5Pg>YX5tA z+Rq(h3jS$xx&F11|FOWoBEtCZwn%;dHa7s@;@H*Z;3Gd`-7l%eh{7ZzX|<$ zVr>6+g8nL<{;TcZzW%iTrFMMV`R{#D2r1K?z5hPpiJkNP$Mv@7zodWFJYN4-%lbb7 z>VL{hkv0BZ1QpuO52CaB-*hDB|Dxo77u5ggRXc`%uEMXKyoZYWyY2pu_y=Zk{x3`Z z6G8u~2-E*!5Y)~Oq6h2G6J!5(H|Vd@>A%|lIn`fp|F25@lR^L12-E)(5Y)~OqBH%= z6L|f9Me@G~^siI2Q@8rZ)P(L=?BqRE+*Y^k|24^f66o)JIdneV@(-2wjyP8CvF8P% z2kXz1WBb1s^jGQhU*+#q|J-}|{HI>(KN<9|jxhai0732iAbPO=uS@>-f&P9)J9Vpn zy~3}ZyoZYWhr{;oy@mIGZ%Y0tpuhG?WVQbrK~OtCh#sszPmJyVe$Zc~lUx1mOTeak9sw-^j|g7PHEx#FXLpJ4{`k)r2Z#@{?Thf*VF$h z|A*b`|DNRk0O%jsLG8am;kRvzws+(&hwWc`gzNu-%W_!E~KxIto;v}4%dI94(0sUO8p;#`XBq) zj_Lo)6n^dXc5P$-?XdrA74`ok$$vW3|HO}W4F9${@0cS_$3I~&aoY((Pr2aEN{}zY(r)&xT{I|-l+gkAA$Y@(GJpB4c*S}Hne+2YzRJ2pK z`o}#Ux?S1Ie2B>Z@b=%L?bid%=~`n?W2jX$F|4KU%Tjyz`!5q8=i}dJlD`-9uTos6 zS@DnlA-w)7zbsQO{=XI$80rsS7{;S1SD4rE8Ag#VvpC z5cPi=_^a}1#Xt6?@chmB?kMb(fBJ`9|BX`rTHxQJ(8-E_l?DG4#e1dQmP1#E`lo%& z`EQc^p9TJYhu?q8eL1}T^$Ndk`FFF=pWXk9@$&1xX376~;O}|eS^Kx*5m5NGN@r#7 z?v_740k;1afWIoAR`uU1pF7I#l)v{AUjM(7`o9SL8x%UZa{F}=|=hKq^?cv+MTb`=)8{(ar<~Uye zzmWBRCaiyW8=dK&Zn6HM^6R#Ep0Hp4S^r=4Dd)dg@~;E^%M|U@t^SP)zi#>Ww9lWl ze_j6{CI4BVzxIhU{mU)%SNV0z|4IA&gZ1Yb!2a(g&|jsKTm9YgRHb*Ve~Z+AHt1jD zQ2!bW{Z)QdyxM#GX@~mfuI252tK|PO=pXlnv-)q9--P9%?<-oRv$FTH%|Dv8e=Uj6 ze}9(zQ$hdqPj?J|m0v4|*{;z@lt!ITEr>*!$?Ge8HC%hTDU$x?AW#7di z|ES}5`~Oq&PXqluUxd!56@TxK;jjNyey#Xf*`IUBU)P_X0NelTIQ}bivf>|Sp}!Rm zr*^0MCk*8J|1I^O3;H)W)IVUMzsj#u-Xh)e4)xa>dHerM@~;Q|D;(-yW}$zx!mr@r zG~Cr8f4%*0m;6rw{mZ^|*8Zz3^jG3Xicems2tm%jh)Us?a(1pO1=a>l>a zLjOvI-}dHP6>m3({B`}iO8w`7{!I?`kJ%c2{8#x^@oMk!mmTug_2(zT_Wu^>uhPk? z{ij?Le*V{9K6c}|*1x;d|1{9QqRCnPZ^{qPU**>>UvvDI-0I&=@_!rjZ&9>UEB)*G zgy)~~cIa|7^RbI}x6MC_t$*v|e^1H(bkINX>(KeM;%}Aj7KLA{bXN8a4#)pc?f)In zU!{{3|MF|Y>u<%wsolQ*bp2m(2cQ2&N&S7Gf7NI zCHcP#`d2C1sipqW;q`A-_!T^yhP@ru|G2xj{<}*4>7c)NgEReWE%aCUb;?_$`_{Jp zRR8_=bN;(a{u#hu`^Fi6ksoEK@T-j9PQxbK`qTF>QpES4drSWFfq#u6pH}t1p(XtM zPvy6rG?mddk5QUJ8pQiwb^d!u{+Yl(eWNq|TP^sj{D#b=je}bq@~?P;*Z)3}e-`kM z{?-})x}U=9ukveyYRITt-13i>{Ih|7okRZ37W`FyLz1#_u*D(&rYE`neI@@K;P2n$ zO#kwq!|Si|YlCXYs6RO5ANMrpKYr`4+s>u;-{u1UhGu8{1HXjlukss`l#PQwy5+y8 z)ISgSmwo4qf0YG)m0ufFLq`4CHh)?#s_QG(zogrRz(1ivasMY;>#D&b!N2g6DXjmh z`0aOAzuNd^S7FxaJ35AkKmQhre?IUJ{G!m`A^(&X;@`&ae~|woZ2uk1znbgc#_!JK z&+h;0-@oP+4A;LdhwGn)`xN?Xp0M>l`l;~!Uq{zt;cv73?_aZ$4^{sQLI2oo3jPl3 zzvm~a|84y4JpGmY{lLGhgZbxj{%!pJ2l+1s{*4{XzmoHB<9Da=H?4md+W&jd{#EM~ zR@Z-x7V96Py>@iybp1nL|JhB>e;Rz1x9I=8eZ#N+R4e?tEss4Mu7BwK4f?+i z{8jn1(!a`rzgwQF^sf02kotcB{Iz$T>7Upyy#8qlzbansJ>I7S^RnXP>{R|2t6XzYh4l^D{f1mUkB>{3Gi3t(@OvJy?2iOuK5p@`hN=ia}_#S@o%)?U#IZvR{uRa zQ2)<>zbcb(CyTUf4v2NzrwFu{rBoX{l5VIs(f1UPuzFs z=IIPf9fstFH`sxe4U2-+Fbt;=ShS=sQvfUJn%P`|9??`ZQmWNKk&vM^4|dZ zt8}tz{}o5=oc8Zt|6c!T{nPi_!TOJq?f)ClzfsXnt@MvOI=udI>q7S{tn#_|UySSa zAN8NsKk9$j{x^dDDxIwKZ?Mqcg~VZ#y4PRR^{4Th=6lggY5W!;_K#NMztP^E=lZ6N zx3OUc(;Mdp=`Yg!P=shV&JREe_WNXmOmDPvv+clRp8p*w+yA$4(sD&RwbDQ3nDFht zN#WNv0aJqgI&l8~ztlf^HR&(Hou)r8Pdxu7&|jsKmHyG=!|QL7t;1lX>fhq0@lb?2 zP5+~1`)>yQ(++TU|D(o2{~Co~w-sUk2yOo{byUtG+-drA0r33af&MC;tlEFz zN2>l}+!x{hTK~oq`2O$XWc&Xf^pEQAto>J6=wJR%XuodT{{a!&{>8X2!kwnSq5W?L z{Z%?ywf~soc24_`RQ<)cFT$Os{{-3ow}Af9146e`EBz}h^siI+b=&^?M`-&OV zEZhH&puc~hv-V$Rp}*(A(0-{Dod17-&Gzr%>mO-{@%hhIxxRWFWTVmH^MAEN!`J`v z?|01lXHWazKV|zrb^g5QvHm5(KUF?0+yAie{P}4*JaEdt{3*WwcdD%aNszlHg-%xd zy^n_HU$J?|=-(^O_V*u{{yKlI2SwahVEBXyxMzwSKIoV`12E?{weTJl}{`EV-5??zrB3y#&gVH)c;he{}ecR+E!=! zH(BtHY6C1&ohASe>(hA<t( z>mRE8yFKo7{X^$}qOAWdz(1f^r?KMiPYSPppr^+6!@A{bPCwA$`j5_^J4F3|LjH<; zTJdkT;BU@%M`73ePm}up4E!5Cq5CN-{^`eu*T4Lr(0<*P!+~z~_euWSfPccE(D}6D z@0}2yf3w1`TmBxm{CNhj{{IU6Rr$2yUvI(REl*W?*Zk9^{=WhL#KF$=Pn;ND|L8tD zrvE#r1NHwM_^a}1rGKpjf0cf2k2~Pcp1i6U%h!K-2C)9$4E$Rk3_VY`;_sG+)AT>b z+e_);_doRUZ@#Smt-wF!U}yC|E;)StZ&moUm;1J{2X$cm{{!_`S2zkz>^ zLMJQ!(UZgL9}~S}#=nC*Q2&2`zbcJK*{wDtXM5zBP z_@~OJ75{n*{_W*sH=a}e2|c>gdQ^ebe>R*vAt7`-wc?)`7ry>iDE!*xYmOi7P=B32 zcZm9@!ar3$t@u}1@HgkXqp(x{+7JBt&oA|#1DR@8=w!t|EVGnvq*9@i75|ix;q@=;w`1nN{cP)R z;?D~f^-qI;s(f1UZ?@piPt)Onef~85>H9xQr2caucPU4OZl_lK(?^BZze?fPZGr4* zTYnROo&nVV6!@pgrxpK33;u3-s?s~=FWUbSssE{Pl2(OIR{Uc}hu7bGbm)4e;?>^c zdpXr#@aHE&{pZ0yRX(lw2Q2uvmyg|ePWkKi{{vG0)8ORQ3Z1O@drl0mzjn-y(SL7; z`s@68fusJX|X zIn1H{I)8)y-B5o;KCSdmKQ%mmg?z3LyXJq6)W19MFFVYc{*4y=;|>q)*KGmBcA)+} zfWIoAR{DGA?Hv7`@~^y*w|_(ZZ-h>;wIK9$nic=(z@O|rjc)a{oBl6{<9~G{U;ikR z^}i?R-=wIgeKalX_pe%ZlKzL-eE*k+-~ZP6Um*GS0{#`lL$^~a{)wmUoce#LTmBbH z{!zfc*&+Xmoy7kz+x%($BkCqz|1XmKcLDyMzN+^Bf7G1?oHEt-xUsRZv9Yn&#$FqH zZES38Z0yz7z{bX2du{Bsv9YnSv9Z_2{-0Sc_wePNGlw~M_jmuipAYQryfc^c%yZ72 zJ9h@~&i~*}cKk19%6|&-PXYYHOUUxS-xB}gru?TO|CGQ#u%wK?Zi#;h-~5g7fBhYm z|5@ap3i$haDE^3N|DWF3PW~?`fhU#!(~*A~;7PTn$5F_?Gw4qU=Ra!9{6~Rk*Y9|*ef^nzkN?{ERfEp?e-a*4oZR>~ zxse_JQhq)Ee|gT_TQZUKO6IZH{c&4@|5E*G5n#`-0Mp1e({g6 z(7*2g&qe+{Ac_y+c~+uYlK zKhZ9O$Nu+RLjQrq6#u2je;~YCg@}{m@7=3kf6tcQ{;Nd0VsN!#MC!lEuiA0^9}EvFPL6+&;a4v+ z>OZ9XgU$NC0{tHX(Z$wsuTzdcvX!_09MP`n4w*;jU-PQ~9RG*HgNl>mPc!_coYeMW z{$~DPh5iqN7pW1RIQ|;L-@CSZUQt|~E}vKGzsav&$nk$TJg7K1{^Zu)`QIsz-}R*Y z`u$H=qyHn|#q)$Gj=#e24-@VB#QQWj{vn3HZ(aAi>XegO zZ$Y7d&954E{2v1kDo&2SXIne|rTq2g`#*0$|HlIVAmNGQALRJg8yo*op?}Ta;{Q13 zcOp)XKf>Jqs$OQ)fB5HbyZ_+~^gk_J|1OjF|9D^jDp27d!R8jF4a7|8NWPPY3*=Wn}z)miU(y^6UG5Zbkm-fxjr^AF#x~oRDAN z|8pDi&j9@CWo7=uyV}YB<%Rq@|8GbB8G*kf}DtbR}}Ksn*4Vn|13`a3;D~I_*WA0>-@h9`NO~; z*;?j5vb!DsD+~E`{@;!KvpV%J?pAGoSLjIy9{#AwiI{)uQ{@H;) zx{WOVV|&=i|J8*2I{)uO{yBiZU&x=e#J{?bU+4e*$Ui6WSA_f(OZ>gQ`GX_h|J47I zI{ptK|6IV|laS^Az@FaupC#Hgoe)?<@ec=Poy2J?8K^j4>!*JP20kA7JJ2_?vp5h5 zH12=ynM{5D(;)I65C5MK&VQtt`Huq8?nqDuPYVm@e>A^(ZD;w7z>@sogLBv8d3$=2x%m_&*6ARGb|D0K+c^WHyxY4>$ck zivCZA*GdtdIR4&)y!{u6b{RbOzZVnw*Z2Pxk^fY9weSY+dCKu84)*3x6Ya8q%nD1G z@~ifp{LjLJij(6nGyDvO_`m)0H|GD7Z>sU1dS!?Ifr;Sy_kFU@zYjlAxAOT16Z#(i zHpYL2=Kar)WB#88`=Icl?EO#iL%j39G)DQqq%{AV{4M@Zhu^6k zb^WXP{;#Ld{}~WnWJ6j17dq72e}-t+bcgi#_TR>@0&wd8On6Xna{glszbPlRy_7%k z_W1qZL(u<~o{{x`(W$)sQ}LTFpU8Lrr~EhT{~65xvmlrPU$Dvl0Q!%>{7;pbr{VaM$9d;}Y}>K%zozf} zZ{t@x*6}|N@KbSe{1t|u@@Kl-KYw84`;QXiRR8w^`kxp0bA%`E^N*s(d;2%#q_$tn zxBo`}SAJRXzl8kr0e_9;_rCup-0#ibyWQC2|JqB3s9oc_Jfc4TO7p9=ocy03_^CL# z{LeA`uEC7LLIM9s{%5aN{$ED_3jlwf@Wk(9S@75Nte{`mIpb;|iqoZwymBDo!Gw4RVZQB(7uuOWXF_y>giWlQ{V zA^$)^@xPAz3j=>$$R9t^j{o(2^EZxvrLz?O8_2&1@b~Q?%l|yXKS;FOL5h2>vVkf8 zo5;T?@KbSe^>?re}9p|0@38GyC^pQg?FIZJ$N%DVs{Y?b|4RUWf$+qQ|NAWQZzQaL{rLyaA^$nB zllzHz3fBK&-u^2@yOh^XmoF`x|IqyEg`E7)!GnsE;Hxs{w&e1U*7ihm+|etjbAnB_&*OGRGggu)ZyOw-yZj9{q3K>G5*o-e|;bQ zpASJ*2~QmV5W^qa#67P}_rtQj{Wtja`(Hmq{tF?P91$nSpE$zXe~oC@lz%x>eieX| z{};i7ij(6XWcW=vsqLlw`u(3Dq5q5FMS3@N&r^=S&hY1nb}6n-moM+zf204?_dk4$ z{FlIs4ij;5{I!gC{>S^=_iLw|)OstJ@~eiO{J#_)RGb`t>_~5ZDt^=D{`njIpZ5O= z`o9c<86Z4y{8@&-PPA*vAM@?Mjb8=e_`e(;RGb`th2b~lq_!9HH?MzvhW@XB7wOx~ zy-qp)=uzJJKS;Doadob-;GVrf7On4>VE(plqW9#!$*7Pzj~Qb{~`6CT~_(8q5mH6pA`B} zoot7H6W{*T_@~+beTn>6gPj6Vr=0&B<3G5CdtI3(#LB|@k1eD8e~tW0f&U?)|EeYb zo0|Gp0-XB41|F0r&VTS2JNYm5uj~I?^uILt5AE!pryPIc6g&KVLjU^s{|)kA3;vTt zopSvBjQ=5`U6p>~AFBxKU(bJkkNnGk{}k!p`}%j;lK;(2{i{9i)cx_S~ zU}i(9e?9&iM*qu#|03x>;(7l={!}~lzqxP!ZRdYKApiBSuR~kP`oH+G-ux+|T}Cha z->VAiU-$n%A^&pVKb(~DhqB)MEQoN0ElmBZ*LCXu26#}OxcbjC{)Kq#W>Wup{Pzp` zUmpCYh5nP4{BLRM|7YaC5%zYGs8h~=jqx8QK39bm%&f4QY5o6({40R}lF)y}lK-tt z{j2@!)c+tnC{LXKkfr;drT+E(?{)Ma1OJg-Wc`2UG&}wO)>8k?^Z(zG|0eLCUtae9 zx7<12{G}7z_p3@j@sHJo^%x zW;T@i&n>OyfBr`QD}n#A(0}T5@BC*l#Q&WT`q$_Ge;GTmUm5&IcXf}G&3{Y&w>9;zGS8|1Tj4=@;`oDydw>6xdYMuG;opDb{I~BZ zb^mMNhmpK>_*Vh{{X+l!XL#3tXkGWZGTkBD3H|Hq-~VC$-v+_-kCWwpf6kk~=Op)b zP5IaGUH|R=8xc7ER|Wr+Coca78ULo7)b_^yRl^Sd?eL&HvHXmGDt^=DQvbuxsQRA} z>wh)yUlG=SY3VJz&~>Tdu%Q>{+ks2 z_X2-b$WO&L*2{PB?|+295>fm?a;V=5M_JThD(?f&6O$e@@6BI?KEN8>>3l*+2it=U>*Fy+b+dG?ulZGjj{gmTpNf<7 zpJ({n;~uTQjrpfX{~G~+o$$o*7a9J+?AZ9+1{rQ&@A^#ol;#Fdt!tvLc`Jdbv9skx8 z&i`ruYKJ@h-=^T7^2G7S82^5~cDlZ?{}%oN{7!k|_!E}q|NZ+{=l^S{EA8;_E%dLC|8pb% zz2HA|u={-qoc}U2{womYRVw|&Kh_b}f6oT0{^v#ht-ycuY?=S6CI9=F`d542ssH=n zL3!f**BSp}!OVvK{Wq?E1)Agk`O*K@;J+gDAH2#={qHOEukZhv5BcwheVr7Z{}h=1 zKQuB}?`1-@khQyG#GKGVFxhjI#6J!VGriKhHPK{}%r{ zK>kyC%K498W2gV~pa1IfkDA~Awj|d7Bd{;}h39|a3%vPzi1P}y`^7)j7y8%ZpC07j z5&RFHFYEsX82^b2+}jm{s|^qI-T$@uSM50c-=pxLJaPG-V*IO@8TB8={#8T{|4!ha z^2G6nul3IVQ3qEIiv2hH|79`%AA>flM4fW{LyZ3%ab97%UpDYv|Bd5cc5XHQxg7HE z4E}=`y4NYk-^=(PBHA_OPfP2+>0brlDcp9KGuCyqbG_*XA8 z>OZ9Z_4qf2`TsaX*GrtIbNmU$|1i<6=?>Y@cm0P(-v3j*S6%;_9^e1D*JN=1SCf7J zY2hdD?|-J+HRb+5B3b|EFN)Dy`ygTer}JNh;`Dz{ zz=O(DF8>Fa{2x8y|82>C{x^<)!PS-j)zJU0;6Hq^%>NM6|CNY#|Ch%9Uk6M5zpnUK zLH;M<@!v|cJaPQN>+Br=js3UqKLx*2 zo;d#aMRxcF{zv+Mef_r=^M7~npUKPWU+u>K^B;!@>p!rVs{b{R|7j%IA_M7yT^hY9On^Q!=y{7(Tt6({FE&+waaQrk=U2b;&g z_0j)x@FGPbPdWYylmF>48vpnC&VTj!56$zR4Um6t@ZWQ|?D`kwXRMbWF3f-JUj^vo z|MT#mJaPV`dGGoktNq~Lf202^ub}$BjnV%;;JDc|04WOdE)qo z8UIxLrpu-Nqs{u?6!U*S@Shd-|Ir)0>wn;iv8n%zu>PYPss67I`CkGV{ls}1=fC$7 zZ+=tH)b?BWuK&jIUw{8eOT!1i{C{!Y34Z(K_?Ct0*J(rE-+wax7L6sv;onC-Uvs>6 z8?!LfW@ENI5@_^)I{(!xIsM=MkpEPka{dRH{2wbIY5td+`M)LR|H}|$4{@Ht@ef(b z|1Evzf5U$!rs{tS(0soXI zjz4{~9e%0*z<28U=gye_Z@@l?3&+2aA@BabO3W)zUOQc$5Y~TsC3XByBLAV_e}Je{ z&VS)CZ~uMIk4^m_BdmYzU+rio|KEfM<%#1Twp9Pd{#*DD1OJpKjz3!T_OD)M)PG3* z>-WF!hWY;%MAt{0r*izgcQO29H2&RISpSt5RsXj;@*fWV124GODaT*3zYp?fz<=^Z_c*5wc>B*;@_)RkeqNQrjE*Z{dFrey2Qf{s$TVRQ#sPrT+ExzXLG; zj|TtYm)+}>e*foz$p1bB6aPrYAGyc7|BF4~eqG6we}^9Rd2Ssx zJ^>-?*n*Ho;dzA+8P!h( z@<0Eicm7Aq?(KGnNv?LHu>SS<{}AN=5MHH5)G6mb&&>Y~5d8`X*5QBbC_Mga|LS#| z{67x-Q=T~f8soo19N(+?_ushxq5mE={%hg?4}S0Y(mhW({tz?&=^L!W4G#3}UtRxf zp8vM+e+0i%dCKwEEcJiV{MXmN56AjH9`e6J^iv#v@+t5BFZ-%{UUjIMTy32H{%_>Y zGd=%x1oBtmRq8}P#qpB?s{iP#jt&1#zVp9P|JuKb&*}gA!9V4R<1aA&x&0&ke`EhG z{2#;blqZf~8o%jwQvdq;_tBXDCxHLhYwmf<@kgKbuKyg-t||XX{_B6_`#&?gs^i}= z$o~lh)BB+Nc?!oLyVsk4aE$7IXJP$o|4M*U|0jZf$`i+*Vf>qVrnWcs-@^YX{7!k| z__K_EDt^=DQvdq;_wktjtFjOLhyG6n{ydSV-288q z;U6a26=LhnPVt}rBga2I{yho#zkpT~M4oc~D@^}4Ow^SI5&p7^F#olG^}0^}p920V zPn`e6vv%^|*nbQEm+(8~iSr-5&kn!Tzn=d;1@r$@@IUZ|dq2(b55C}i|684CSM7fB zk5h&9@Amm$vrY(M5Z}|o@yD<7<`)Ap8!ogIvqIZ{M*`~epPHZlcq;m@!MX)u|JTRl zfAACcylM;2_n*58`#+uk>J^>-FAMok@02Hwe}M6?US`yP zNd4>i@6$2=PXqsbZ@T9x$6sdpzd@p1(;bra-~Ww_|MmI*naKY&1QUNqcK*+CB*&=! zcN5mX_OAkW>i=}`PkG|}hn}-j|Ni~A&3~SQ{?7pZz+1BXuQU0dAll{fhWr21eCL0I zUw{8s4*9=@7aI`ff965&1^=lE)&G0H|DkHh|C!SIZ+`yyrO5vi_%9O2 zDb9bM@gM%oeZNw9-Rbg_u>Q6GE0F&@@Lv@APrPU+|Iae@uXeQ4|NRUP$`j|m{{m@&%Ix9 zYs=5F^G*G$7jx?W4|q_XIR7cezaJ()>l*u4FXr%H0{$sa9Dj!K?}y3Hx?=y$@N562-Q;xsN`G3Uyyvh%&+q(M+>tBEW$1TWzDfsUv>XhRjX8iZO@4jE%nEWie zKwAGz|LVn@{Qt}Oo$$o*Cm!+c|J2Kj`VV9ODk6vfGVo7%;`n>ZcKD_K)61*Rzq}pu z|8Lj_38DWoXh@JXZ%y|tM(PV%gWOCKWqQ0O{f3A68ux1IR1Xdzf0(&vPkMbdavsL z?nD31`AtFC|7VB2=l`-59K&CG$~~`4`418L*ZeL1CjovcPL4nLo*n;E{$jKKA4dO^0)H~#K2G8I z`x*Y?_wIRR>iU8;GLjRgyy%3-WCWj{~PL99G@OR4NcReY8DyEMAMf5)f@JD}i_r&qX zKJfNmA=>rJ+rIwcLjRgyHR$-C5}v3yIsO8}-yZj9{VnC!-+%N3`kxB;vp>oFM?duT zAN$$8UDN%L5&GBsDgej-)bK>b$@w2(_)R&f?WO$s`%j)i|I+|}jqt?rXPDz({+F@w zf242!jnB(Wj8pSJ_agsQaQ+`7KmXhN{?EaW>>U3u7S8|GmQu(6XOVvZ_;Vz`_w~=Z zrTLG%kUzVu;x8fp)xaMXj(^IQ{9hvEk1eD4pF{p@fImWv)42LCzUJNkQ~j6e@=JyM z+W+&&e=YErh5U6({x1{q>-v8I`L6^1eqx-)`Om&?$N%L*e(nE7t8+1@BeuP`3Hf& zml&sU^&fuI+y5}pu4(^2V9KuoaK`^P0Y4Qd$Dg+3U%)@|`49Dz)%drJ{%;2UfnVLn z=^THK@o(yx+WzXLA!r}}BI@&RvM(t9*O31fXsYiw8GrCC@B9z^?%uAC&|O!(MwtJa zU$yGw|EAEf~-LyoLFH2jqX~4=Vq?=YL#-`#)HCz3=>Q_}AZm z`V8`iz<*qL{0~;W{nv?hO?S~z{^$Qj>c4+^)&ISN`~~n|B>j8Of5qSS<~QY}w!dNN zk?x%O@9~y5@Bh;N)f!I!Hyu1tp1At&XZ(*B$S5t4`p>+g#((dj|2x5d`cJCQ$Zm zzYF|Rp1AxkTB?6z|1JD8z)qk%as26z?eu?A|LIp%{eOV@e>eD#{3WaZ)TiF{Um2tN z9~9Pq&t&TQ|A)vwBlr&r$Nx3P{}9oxsOVcZI#yW!+J8&_-vj*MD1-jq0!d{Ws44YjddM-^ZB$_d5Om-?I8ISn_|9u>J>5RQ#VH|IFY& zB^>`2KJm`~Ffpz&O@`xq*ME3q{IC6gj{NsI^)K|FndGlA8Q*dH=Vnv?>IFc3U>10y zJaP3O_|)4!$07ZH|Na~Ie`x<-qW}BBf6qU%`j^IUy4@{8|M79E{=Y!}F!(PKb;|kA zF#gNLxXP6Oc;EHk@UQ28ze4^Y@E`lPyZqnk+kfNwU-2mA{~P3g0QhS{{=VPs)cs-&b#%|NZ{+f8_Yrvz+q(E%HAI{`3FI@_)dR z|JzOdD*?{&Z+7SSM|k4;zbfP3)HAic)c@c~>iqY6^#2g}j|XJeKZYi?Gyb_l=wILe z`yKMn0sgDPpwfUs{di+e;EA3X8`@?Hc!dre{bEJzf&H+ z>lK!69M3!5t~vj${i_X~`kxb?C{G-JnepFge16w6_Wu+5e+2vwP9XC?IGLULzf$`pZalY%nG5;~RhN}NxkpEHepO{eQKlq0?e{drA zcH4RU{(YCQ|JVN23p({bH#||ExcVGrv6V8`q%s|{uc&*Do)OS-I9MPzn=dL z43Av50`$Nl@YEA@_r&q1gWkvg$V6i^|9QI5Kk_#cz~NsMo~SrE{?O#!{3^{x{fB@4 z#{9pY|CkW{F9!Uv$z}eN41bMi*K~)R>DzxBzY4(dzc@TmadQ4E48JKSwY`*IpZ`vb z{+9s${1h_((J8$1KR%^k6HErq;XL_xxX*f7P&4|4TVfgeT5__Al@8FBQM(a%2BfVE#W2 z{wYr!f5Fo6PwGE1rMmxha^znc{1=4&d#3U}{w1dwoBTh=cm1pJ&y0$HD&&6x{HKZY zbk2YAPdoYlr0?rL4gUDH>iWkt$p0kpM}+6UF{b{bV|4!el(7HHOriWwjr_|({`bt_ zo~NAu&@|rppC#Hg?f-JZ{MY`cMgFJ2Kjn$zuQ2{iIjQZX{x$z}$p19(SBO02`1}6$ zuKz4CuRw8iy8LNj{+F8le+c=Phy3qd-+i8fII#l-wNT zPkG|_LjgPYe;NB%iRK*tR)r_Z6URSjss5$@vxlhqpBw$Z1pX7k`M(0=KR8D7f6oc) zU(bKeh5W05|G^Dq$G@JLz3V?eM)iN8u>Q6Gd655Q@K1T-@;^F(o%)yhuP>$E|1%%* zzXJS2M4oc|0}Ov^+Og^XpBLu8=AR$=%fL^?$?^A2Xve=X{{qPWD)2|=boa#Z4>A1x zM7y1ibEx%RF!jG6^1lZBRGb`ta3VYYrTl|itK;87$p1RPQJkD~uKz(3`Q^Iw?JPX0^% zYyL%$|4rcUnM>CHRT%y((XL#Vh&97d_ z@xK;4QE_tox!Jt=JLU1ao`3$v`~S=Hs{Vfk^uIRn$7gmwPILVA+3oP>efw|lN1OaB zBL6zTKOp3f&1r}K5+Q%!4duTj|KsreAHhdu{`;QuKK}d7>rU5SOZfdCnfVm|O6Y%G z@Lwa2Q(XS{&1J{`r9%Ia`4#^v$iE)&*M<2%%v}HI)TiI|E*J8bn*6IGe;oLWo5;pL zJrO(puMqO57f}9JL;m%Fzi$><{r6kqzf#B_UQqF`j{F+{|Dce+Zi)XYA%C&S-;4Yk z0)HSZ^Piu`PW})0=2!3kX@3958pyv9@aLzO)qjoQ&u;GCuHXKyef?`p`Bj6C`iP{N4_vBet_a%7X5z&^FQ%3(@#=wI{4k^d9mr{eto)xVU#mRA1PNB&QNzi-~L zssEwf#-{$?5c=2r8zBE@z)!{b|Eqr~fA6Kr|Axr_Iq(mTk^l4_W8?o#p?}T45%PZl z{8XI(zxtQ*m(EiDH%9(1fj=Yzw7zuZ=C-R9;ojB z-VFJ_0sbW6iQ`W){JFiyrvHD>xBoW&&5{3G;HTo`_zMibU$336FXc}>q5N-w{NDlp z5a~ZKVF1pL|AT*Su|;RIlmG884MF?(7YQ`{_nxNsw?zK$p{dXU?)?vu z{?+{t&H2x5F#k6P|HEI&_^ZtOe_T>`R2E$?foL;pJge|AUrev0Go+s@AM?{?q*8~pnI-#w6jXW-8W{r633$NwF^`5VW- zT66wqE9CzH=6_Pc`Jdj|?eKr-d;X{4U*G?`C-Nu3e_80icY8beUl97wov!Bp_Co$) z@Lv@AAF|~CBcXqN|8olYcLDz~;&U3f{%^>V|GR|#e`*E7%?_JMM z{#S+m_5I)bApfr5zq+uDKe2-y{=0?#t7jiH?D$`t(@y{YvCzN1|9wB? z-_5E2MP&ZVmi*r%^q)Ob`QIP;e+K_)Vf|O;vg7{~p?`h<{{hIqJNT~;$?`wFqn-M{ zSLnYwmzw`P5cz)r|0SXS=-hVv*L+|9ZjAr*`ybNCzX$m5dqC#DZ(%$9_nG=X2>E{n z|B;1c{apkm%KzcWp924Z z2W9<#W@kJ7--AN`;d2!K5y)S6`u~Gu{G|=;@PF&uf7|t+4D#;{{%gYiKevdT{_i27 z|NJcK`>&2f{y)HfG%7p(4_dna={uo+ef{SsT)i)K35Rn9#o-|DS;T|A7B2>EC<&pIXfh|Bpidy8k~B`40g91!4W?EY*Ke=wFZj z$07f};6EcA|5q*f|4HayfB)S{$bTUC9~RbsWHImjk1ysvu52G?`2G8Fp?}S|?_=CI1#(zUh{SShsq@~YE3r`CJQlwUOr=z+uGiHeis zuQ2>n{HDvr{LT759sM5x{P20ozx{Ij_)&5E{abkF{~(c9B~J_e>-s+v`Hysx zUaySVm|Ib1H#{&Og z%)L%I{&3Da{|jT}za;eEbDH8m7x|9|{@{`_{?gXo`5#`zyF zIRA?-;~ppHKe4(uf2TZt*ZWy`{-^z`7j){sAD$>r9Dj<*f4^Lvt}pek=l{<~|A9$h z9|-*qTJrykZ~yB4pOsbppNIS>fd8bh{)e`)lmE~AuKx!A@HoZalK-c`@5S|H?|&OQ z$jyGB^AxWC&s*~Uo6vu16;=P2ApbbpzW#A3@=pZ*v!s9T z>mQ*t?BxINzWuBFUnW=Qf0rTuN#H-!BlDl%)|)@HtNXlar{f%Iy_bak_4SX-k$+eYJ{~_d$ovQl3E0F&b$p8A9GXJ6Nyz@Ur)D@N2 zoi2Y_nE!hGe--ji3jS+C|9xwE^LNVQcfCJN{i_!Q^?_62iSoo9|C5Y=zg(TJFZHj- zzgMIG$-sZ_^0NFdS@Qpv(0{dA{{zUM1^;k8T{QonW&8)%ac{R%&(wOa2R;_xr~XfaC(097{}skR<GLQ?^)Xp|Gz^2 zdj4Y&`Og6VX`%m;CI7Dq{p<1nO~^kb_^%874_fm7pU}Ua|F{|X&vg9n=6;^a_5a}= z?BxGzLjQXFe+%+Y1^)Yl*Z(5x*x?T>QJ;UT@Bg_K`OgCXC1L%i82=ICz7l`Y zkH7ZoLjQXFe;e{o4gLcw%8q||Oa3Pi`q$&%JCJ`G;7Tk?i5|MmE{fc(>f{{rdXd;FWV3K{0CQZ&r^;+u%37RcTVJQ&54En_5FW$BLBJIKSR_h z#~(b``~IIY(XKz*@z;J+SpRzbdk^wY2mX^n{~1gEClUJBg9I@A9}*LUw%#?NSfOWqRZzaIbHkNh)$|Io_radP#aireY` zCNuS~cDJMc0(hc4as2U}?C|^d9~}Ao-~N}>=YO^E&+WYbFCn}Cr*|(q_y4Tn`~1Ig z{acU!AHe*d5%NDJ%>SyT{0|EAKQo2u|AvtNLdgGqqMzdOKhNZUg6LQM^>*X0{kE|G z)8qe#k$)!eUnKo|kN*?v+o}J_P5rmj|3%=R^2GVCG5*IlH#$qC{`L6(QS?7E_)in} zX>+_!{(0>^GM^<&uQ;t7yy7&37DJQl4 zRKEQ;u73`#s_uV!9QiK+{{`YW&G8qQ`lsSIUH*=+{`L9KQ^-Fn_|FLa$2PQ6|5FS7 zhnoJMM*d5|f0pQ{Iseh59sYNP{`L6(8RVZ0{FjCP3zqy(BlMqKP1XOi$bT95uL}KV zEct&==wFZjOUOSv_>Zne_5a@E|L8_`@_$;Pf8GB-hy0g=|KPQ<`LAJ1{@)k+*W>@^ zk$(>G-%tAYzW-&wlK+sjPhe{4f4|GoKByV%M94}|{p`2R)ZpA-C7g#N=D z+u@&1=wJ8$FCqVx;6EqyU$x}_L!o~?{(l+y=K}vd!uLPrEcu__xBs^HKbDbyZs4y9 z`Fl38lm9aa`StkkRpgHVf2>#5{|#E=pHaxK$3L$j|2)8-Bl*3@KXps|GYR?i@&9$? zpBMORB)|9ZFTJUq{GVCKuaAFkApd;8-@Aq^|7(``XA$!2{{KznpC9=1LjGi*9sgk= zzn=ei3;7oS{$U}1!4m(hLVn%j-w|Ed7s)IV?mJYt*3?*9oMVdwszWrgSe`uO)D`d=LUmo}&BpE>^RVW z|NS82Pk!v3|DE#qU2prP{B03Y@Bh>O)#eWWHSk1v;_|=F`1coO=W9#->-qoBF#oRw z{=6{%N@xP3QYZfYRazyaO!^$o~SrE{=z+W>R-yQ`@e6{|4qPO7y1u;@9n>Dld-A) z&xHOpe~bT{fuD+#^B=g^j(;h?{``aQ(ElyKUnJ_3<1aD(2gk_&=R*IQzs3Kpz)!`= z@nc7eVBj*1d;6EYE{}kiDK(woNzxcbI{``}c{4aoi$`e=r{rlU=f2n_c{p(ls-vj>3LjNgC{^u9^*Pnm!3-aFy z{?o*9it}G(>Oa`$eq0q7zS^)Rtbcv|?|0;13j9a6bdQtcAF||s0aO1i^?w)mr#x}| zJ@?z`|D^u)_0K=h|I*;UU+6!$mmU5Eh5q&UzmEKOga0H^r=0(O#(#z{ui|1#jeLi+c<{+Y1ke<4%@3QjO!ur?a|NoGGIq;tq z`mbB^zp$x)wNF8P;68YwJaP43{l!lGOa1Hd{{%mdd~d14zdZP_3jN1Zc8>px2>t8v ze*pRKhn*0)!F`^J^I!he+ka||>i-*I{p<1nM99Aa_>XPv-cND-c}xBmHTK`=0G#|E zf+xxo$6x%-+kfL#M*msrUyuJMLH{xEpA-78S@OS_(7zu4PmKHzfd3*SS5&YLk|K8*O*xq*f|HV!HD*;aZKL}5hC(i#s-P^yZXKH(? ze?9)69R05Z{(HBP_5WE*{+E#YZ;tAc{*}RhUg*DK$^Vk3{?(3l>i=PQqC9c+pZL?;f2ThEt|#@c$Ny8K|5d>Mu+V>W zA3ObjkI=s!|4)VdkAVN)o86Dood5V=-u?@Fxc94meYdawy|DiE_iQ^Cb?d`wa+i3mW^gkSMKD`X)uLG4yTYm=n-XHlpFfjYb zOGecEmmdF5hyGWC76yd=OP2gEE%pC|y8m+qmj(-$R9mN@y~?(Yd96Oos56T68~~S{@_}Qe`e%g6ZjKC{@{Lg@_%_D zf1$}g3-Yf8`~@L@!V>=qLjJ_s%6}O7*9QLJ_OkpRw8S5i@;CecS&@Go;7^kL-u-{w z690-q{=hoQ|7^&=F7OYL{NCrk@%`=8|4Kss!6yIg$iE)&hjx(Vf8G-R%0m9Wb(Q}) zkUtLmDItH&68|bf{(6&tPUK%7_=`gR*a3F(e^uZ7jn9A9=f5Lo1%ZHb{&OO{|8wwX zS^kH#6*o3;k~Z{=+-U__LP$ujbo-EMc}96`7>QE<=5|jS{VI5 z4g6`s6USd+_)A2)ru;t%{cHXf|IYwF6(`4^nb3}ZDZkGDMbZDWz#rM$y-qp)-if^V zGeook*^+JFicpjdpI63~}BzF8u`NK{BOQQc5ocy0$_Wtkeq~84fW90u=p?}Ta z;{Qe9r{d)N_f6)_-)TPkT~ErNT1D0WQt1CB;P2Vjy-qp)aL}7SOSJ2kw|)KJg#IPc3ze+Tx|9cIds66HJzxaq9erf(kHc|dp z!u;PH^1njnzxVa8;6Zly*A?c!9{;U~{I7%m-u-3yUt{{eJkf5a{T#L4AHx1m`(G9L zw*db=Ng02_lK=Hg{kPQr8{nVv#MOUjN;~5pWB;q8|1H6PR_K4wlK;5SfA7hv|62|D z-vs}|M4fW}lZ^lP0q%80)pe)K|1_=tHIRQR@Lv`BuUqoJzN!C~`hN@jQ=T~g1;&4; zKK-s|?0+rvzcu)e?c$!N9Dn>^JIDVGg#Pm@ShX<&s*}pq0oP7KK1<<>mh#v_-jJ`nkD{?g#5MU@o!z^e+Tlv z??74oCo|spKS;FOp3i>&{#%&;!ShxA$B}ni9F@_b4PjC{}9ox-+XUh|36{=*P8yfK>nS<|B%ps z_%Lt&_P9su?=4LIt3aINUlpDxPn`eY(RTQy{&O3u`riuuC&7Q}SXuq|oNR}GOQHY1 zqN@Kbk^f`xpE_8^AKJtF_*W#_HLZgQgx5doY2|+#&n`R{%HQ?}%PYoY(}YbyT}$p0z$47U_0#hc%hliGe8Q~xdX{~7qFJaP4(XZ%y~n=Y67 zA39h0-x2-q4*p9*|7lD96GH#-Clvn<$p1O`FA;Uh`5)TL`}iL@)V*IZ^*@oY{!0;c z{bOh3-vj(dj(3lf<1bqBzpbhNmiqq!{8OGd{^YTC`ah}v@;?6e z6YZMT|0Kft*XMtGA^+aszn}E)ef}57+R6VNP5rmj|JUH3^2F8uu%-I<@4qqs?e_ln zA7EdkK9#-yvuDUV|4s9p+I|n={CDXg)&K2{`M(e3e}&9{@AKb2OZmT(F#luEsQxd7 z{NFhFACdX*J>E|JPbTdD(hn>D`yv0n;J@btS^qy^$^Xtm|JA1d{gMA$@Sijs()30pg!>PM9}}uBRl?A*0eMJn|tX%&`%!{38?XJ^Zutp(Eksx6LP}* zAGDPJQwsCHuX+9VP~<-l@;@ic|Ei_@-_3Xax8479IPwpJ|C-Q$;KYw+v)$N5&Dm9q{cr-BL6|)zjvJM z_}6dA{~kjB`uhJ-$o~`g?>$?_U$j*J(+d4poBoeR{)55)u+V?mlK(x0{`K|WW03!6 z@Shj@uUYaR68g_>tm^+*wf8-21{r_G<|N8phamfD*_#YPfPo8Lpe>$Q6 z`u58I@yLHD_#Y7ZPh0Yz68hKIfBKRCSMVP{N0$FZOUM7|h5q9^D*q=S|6$<2F7#it z*o{ z{0|a!%K5Kf;LTq+&V5{Angufp>tDbB?+oNW3j7C8mDPWrCI1JQ`d0#+`u_`_C{LXK z+Rb+6|D^u)`~S{D|3`!Wq|pC>CI1IX{lBiRf1Qc^e>+KVt}OqH7kbx!f@s&Y{=>rh z*W>?lkpCF)KScWX9{&$p@}D;K-%|hofPcypSO2k#y#1ScrnZ;**W>?l(f_gFKa`c_ zfA86L_zx2L4=kqYKZpGPI{iOUr=0%+<3D(w`+lXocDj64Vg2jz|M|#&9QaQO{pT$C zKUn!64$KPC!|^LnnY8t1p#0g$-+{;sBfB&bX#4z&3z7eLXrUn9{*g7{3if^TFBpTiT^Mmzdruwk^e;CFOmG-$N#b= z{=-mq%kpE=hkDej( zU$n%3q>x|t|Cb~GDZt+^I`9t*`TH#KA1CD3{r}a- ze+KZ!FO~Tpu*847kYD%z*C79yz&{}5AGXBbFXY$#|Fy_}7Vy`F{JrPfss9s%{JQ_Y z4*Aap{=Uno{P*tvbC&o|^v$pC|9@@#_dnbK-+vXFWrE+_uH$j%znS0c_&?0|{Exc- zy*d9iGAj}YI8)#M!4ox4#qkF&w!<%-|I)|*>oNb&f&3pN^FQKw|3lSM{*M#pzyAKW z3y>cwJdo;lzfQ^d&oKUzV>JIcoA3N@%zx?e&mi*Wz<=O!s{ix$-@{!0Rb@8nKTb0B zuOf2le**ANdE)#JGyX>%Ts0{5ug8BkqyKZke?sWL-;)26h5iSd{r^qKKOy)ZBI=a$ zpUQjp|Dp5U>&i4QW*64K9{=8o{O5uHg3y22lK)do{VM@Z{ZHhKe+W;U{~^Y|sb^|? zsee8Gza9Ob5B`H!xaTRyAHU8!|Ec&*m!B&2-~9g9+mL@^=lC!5-*bsKe~}nhnDWmd ztbcv}Q$YR;z<-kT?|uH0x8y%->R$

nZQQs-1Y8#h03)`!PZnvvyT}>h`C9si!}Dle;*^6x$1x-;vww=Y?#1@$ zt1h7ODenDL=txGrQ={30Xnmpc!=65yt@v?UF%F)zIaW6f* zGJg{P$Lc9P=+VDD?8i5sakif14q^S0`9ItI&7xbUUZGziFoZ8I`>TcVBz(R+@+CPn^{)`q9>u$8j@7V~X!?tNe&`X+5_->}=g{ zfxJrZ*!n-`&`)@OYaQ+<&n{r+ZBB82e&i%p-YcH;z0UkDdb~cu``P-kUcK| zd_J=IF&f8mh>fS)_~cJ_r>6|hm-BX0lK0A_o}_k4+ z^s4;C{`d?%Ka2Kw8iDV}WY2fD{cSn?-c0O7HhyTg{c&-;v435qo$uS%PxN5>ey4G1 zpG@^MjM<5E_y%Wngm?_@`+3Nh(Zo-j;VQuUWo3F){EFuDzNjxVNA6dT?Mmlg;nm`K zi2mx*{Lk&{H28#lzpg!$Pb;3&ZC=FIMRx6Y{3xEy#xs5eYZv|1rkdXs3d4KX&`u=o z4R87Pdh-_Tj*Eu5=OdbD+51=ggnb?&tLXUrQ8Z2sr|;GC?dp{NtYGbuFqHT$|BH;yFtyqa5k=?{tX>{g%Caos0r z{3f(jZqr}1&uiyV+Mj#MnVqcW@ng~9d71W?sQuX1?7YByH65PEPr!NG zxa55ts82?F_&#C~XdWT>(@;<%xnPR*3+nnW-x8t>4 z+Q8j@MCvl?Z$WY0+^c`19-moC@z#N&{;*`f8T+%)U#^SuRJcLR$MG{oquWw^ZJ=nk z_;UL^$G5ZZM?Esyea?Q}l8saGb5%C3p(X76Nh-c8rP4p@{^a&-99x?2dDitO9%Jp{ z_%!z(IOOLldU?t=sC+ER<^lDE_80T9-={PJJ;i?JxZ)JPeP;91gZDzn@WkMG%&z1* zr)(VZ(;sK&Kk{dtu5}mZ*lX$hEdoUxS;>288h@tqF}|aC-s5-~t-OAo^d{ zPMd4PNzUGBIv2!8SU`F5Cl&a5VRo+~QZ z|0^FP_P28g8zAvUn7d|S~=A>YPohpj9+Fa_6=6P-m{NW^WXOUGCOmfZz%59 zj~>Uy3Gq}?>^x{bE{;!3aXc91-Y=4Rvse$>^(l=&_cL_;%`5KH3&Z}`q{l5PIX-V_qc-33D(%E+2s~xA~>x%c=sPwcP-XEA*rl^O9 zo#ihB_Ytf7!hS<>e=*7_=>moSN(Jr&a@_f@%0ABgXvLh#IrS=5)msOg>YZ)5CVaOr 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≶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

D3;DhW_~A8y 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�~;OK=)gt? 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

&0o4iMt}AxmiA`033e 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 literal 0 HcmV?d00001 diff --git a/lib/opt.h b/lib/opt.h index d53349d..288bc5b 100644 --- a/lib/opt.h +++ b/lib/opt.h @@ -1,9 +1,123 @@ #pragma once #include "mine_map.h" +/** + * @brief define status after click + * BOOM Indicates thunder + * UNALLOWED indicates that the behavior is not allowed + * ALLOWED indicates that the lattice was successfully opened + */ +#define BOOM 0 +#define UNALLOWED 1 +#define ALLOWED 2 -#define BOOM 0//ըը -#define UNALLOWED 1//ΪѾ򿪵ĸӻߵ -#define ALLOWED 2//ɹ +/** + * @brief define Mouse Action + * + */ +#define OPT_LEFT_CLICK 1 +#define OPT_MID_CLICK 2 +#define OPT_RIGTH_CLICK 3 +#define OPT_TOTAL_CLICK 4 +/** + * @brief 用于数周围有多少个雷 + * + * @param map + * @param x + * @param y + * @return int 返回周围雷的数量 + */ -int count(map* map, int x, int y); \ No newline at end of file +/** + * @brief 单次操作数据 + * + */ +typedef struct +{ + int x,y; + int mode; +}opt_t; + +/** + * @brief 统计周围雷数量 + * + * @param map + * @param x + * @param y + * @return int + */ +int opt_count(map *map, int x, int y); +/** + * @brief 单次鼠标操作 + * + * @param m 地图 + * @param opt 操作数据,包含坐标,操作类型等信息 + * @return int 操作后状态 + */ +int opt(map* m, opt_t opt); + +/** + * @brief 鼠标左击 + * + * @param x + * @param y + * @param m 指向地图的一个指针 + * @return int 当次操作状态 + */ +int fnOptLeftClick(int x,int y,map *m); + +/** + * @brief 鼠标右击 + * + * @param x + * @param y + * @param m 指向地图的一个指针 + * @return int 当次操作状态 + */ +int fnOptRightClick(int x,int y,map *m ); + +/** + * @brief 鼠标中击 + * + * @param x + * @param y + * @param m 指向地图的一个指针 + * @return int 当次操作状态 + */ +int fnOptMidClick(int x,int y,map *m); + +/** + * @brief 用于自动展开地图 + * + * @param x + * @param y + * @param m 地图指针 + */ +void fnOptAuto(int x,int y, map *m); + +/** + * @brief 用于统计周围旗子数量 + * + * @param map + * @param x + * @param y + * @return int 旗子数量 + */ +int opt_flag_count(map* map, int x, int y); + +/** + * @brief 用于判断是否扫雷成功 + * + * @param m + * @return true + * @return false + */ +bool opt_is_scuess(map m); + +/** + * @brief 如果全部雷标记 打开剩余格子 + * + * @param m + * @return int + */ +int fnTotalFlag(map *m); \ No newline at end of file diff --git a/src/opt.c b/src/opt.c index 1e4b803..06b863e 100644 --- a/src/opt.c +++ b/src/opt.c @@ -1,59 +1,226 @@ #include "../lib/mine_map.h" #include "../lib/opt.h" +#include - -int opt(map* m) +int opt(map *m, opt_t opt) { -/* -* 变量名:optMode -* 作用: 操作类型 -* 说明: 1表示左键单击 -* 2表示右键单击 -* 3表示鼠标中键 -*/ + /** + * @brief 操作类型 + * + */ int optMode; -/* -* 变量名:optX,optY -* 说明: 表示该次操作的坐标 -* -**/ + /** + * @brief 操作坐标 + * + */ int optX, optY; -/* -* 变量名:stageNow -* 说明: 当前格子状态 -* -**/ - int stageNow; + optX = opt.x; + optY = opt.y; + optMode = opt.mode; + if (optX < 1 || optX > m->mx || optY < 1 || optY > m->my) + return UNALLOWED; + switch (optMode) + { + case OPT_LEFT_CLICK: + return fnOptLeftClick(optX, optY, m); + break; + case OPT_MID_CLICK: + return fnOptMidClick(optX, optY, m); + break; + case OPT_RIGTH_CLICK: + return fnOptRightClick(optX, optY, m); + break; + case OPT_TOTAL_CLICK: + return fnTotalFlag(m); + break; + default: + return UNALLOWED; + break; + } +} - return m; +int opt_count(map *map, int x, int y) +{ + int cnt = 0; + for (int i = x - 1; i <= x + 1; i++) + { + for (int j = y - 1; j <= y + 1; j++) + { + if (i < 1 || j < 1 || i > map->mx || j > map->my) + continue; + if (i == x && j == y) + continue; + if (map->mineMap[i][j] == 1) + cnt++; + } + } + return cnt; } -#ifndef COUNT -/* -* count函数 -* 作用:判断指定格子周围雷的数量 -* 参数:地图指针,指定格子坐标 -* 返回值:int 指定格子周围雷的数量 -*/ -int count(map* map, int x, int y) +int opt_flag_count(map *map, int x, int y) { int cnt = 0; - for (int i = x - 1;i <= x + 1;i++) + for (int i = x - 1; i <= x + 1; i++) { for (int j = y - 1; j <= y + 1; j++) { - if (i < 1 || j<1 || i>map->mx || j>map->my) + if (i < 1 || j < 1 || i > map->mx || j > map->my) continue; - if (i == x && j == y) + if (i == x && j == y) continue; - if (map->mineMap[x][y]) + if (map->stage[i][j] == FLAGED) cnt++; } } return cnt; } -#define COUNT -#endif // !COUNT +int fnOptLeftClick(int x, int y, map *m) +{ + /** + * @brief 地图当前状态 + * + */ + int map_stage; + + map_stage = m->stage[x][y]; + /** + * @brief 判断当前格子是否是雷 + * + */ + bool map_mine; + map_mine = (m->mineMap[x][y] == 1) ? true : false; + /** + * @brief 左键实现 + * 如果当前格子被标记或者已经打开 + * 返回UNALLOWED + */ + if (map_stage == FLAGED || map_stage == COVERED || map_stage == MARKED) + return UNALLOWED; + + if (map_mine == true) + { + m->stage[x][y] = COVERED; + return BOOM; + } + + m->stage[x][y] = COVERED; + if (opt_count(m, x, y) == 0) + fnOptAuto(x, y, m); + return ALLOWED; +} + +int fnOptRightClick(int x, int y, map *m) +{ + + /** + * @brief 地图当前状态 + * + */ + int map_stage; + map_stage = m->stage[x][y]; + switch (map_stage) + { + case COVERED: + return UNALLOWED; + break; + case UNCOVERED: + m->stage[x][y] = FLAGED; + break; + case FLAGED: + m->stage[x][y] = MARKED; + break; + case MARKED: + m->stage[x][y] = UNCOVERED; + break; + default: + return ALLOWED; + break; + } +} +int fnOptMidClick(int x, int y, map *m) +{ + /** + * @brief 地图当前状态 + * + */ + int map_stage; + map_stage = m->stage[x][y]; + if (map_stage != COVERED) + return UNALLOWED; + if (opt_count(m, x, y) != opt_flag_count(m, x, y)) + return UNALLOWED; + fnOptAuto(x, y, m); + return ALLOWED; +} + +void fnOptAuto(int x, int y, map *m) +{ + + for (int i = -1; i <= 1; i++) + { + for (int j = -1; j <= 1; j++) + { + int fx = x + i, fy = y + j; + if (i == 0 && j == 0) + continue; + if (fx < 1 || fx > m->mx || fy < 1 || fy > m->my) + continue; + if (m->stage[fx][fy] = UNCOVERED) + { + m->stage[fx][fy] == COVERED; + if (opt_count(m, fx, fy) == 0) + fnOptAuto(fx, fy, m); + } + } + } + return; +} + +bool opt_is_scuess(map m) +{ + /** + * @brief 扫雷成功条件 + * 打开所有不是雷的格子 + * + */ + int coverCnt = 0; + for (int i = 1; i <= m.mx; i++) + { + for (int j = 1; j <= m.my; j++) + { + if (m.stage[i][j] == COVERED) + coverCnt++; + } + } + if (coverCnt == (m.mx * m.my - m.cnt)) + return true; + else + return false; +} + +int fnTotalFlag(map *m) +{ + int flagCnt = 0; + for (int i = 1; i <= m->mx; i++) + for (int j = 1; j <= m->my; j++) + if (m->stage[i][j] == FLAGED) + flagCnt++; + if (flagCnt != m->cnt) + return UNALLOWED; + + for (int i = 1; i <= m->mx; i++) + { + for (int j = 1; j <= m->my; j++) + { + if (m->stage[i][j] != UNCOVERED) + continue; + m->stage[i][j] = COVERED; + if (m->mineMap[i][j] == 1) + return BOOM; + } + } + return ALLOWED; +} \ No newline at end of file diff --git a/src/run_app.cpp b/src/run_app.cpp deleted file mode 100644 index 1dd7971..0000000 --- a/src/run_app.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -int main() -{ - - getchar(); - return 0; -} \ No newline at end of file diff --git a/test/opt/3 2 2.txt b/test/opt/3 2 2.txt new file mode 100644 index 0000000..04acc9d --- /dev/null +++ b/test/opt/3 2 2.txt @@ -0,0 +1,2 @@ +3 2 2 +2 1 3 \ No newline at end of file diff --git a/test/opt/Tot.txt b/test/opt/Tot.txt new file mode 100644 index 0000000..5a5a12d --- /dev/null +++ b/test/opt/Tot.txt @@ -0,0 +1,6 @@ +3 1 1 +3 2 2 +3 3 3 +3 4 4 +3 5 5 +3 6 6 \ No newline at end of file diff --git a/test/opt/opt_test.c b/test/opt/opt_test.c new file mode 100644 index 0000000..dcaaf39 --- /dev/null +++ b/test/opt/opt_test.c @@ -0,0 +1,314 @@ +#include +#include +#include +#include "../../lib/mine_map.h" +#include "../../lib/opt.h" + +#define DE printf("debug\n") + +map m; + +void initmap(map *m) +{ + m->mx = 6; + m->my = 6; + for (int i = 1; i <= 6; i++) + { + m->mineMap[i][i] = 1; + } + m->cnt = 6; +} +/** + * @brief 打印地图 + * + * @param m + * + * 未打开打印U + * 打开打印数字 + * 旗子打印F + * 标记打印? + */ +void printmap(map m) +{ + for (int i = 1; i <= m.mx; i++) + { + for (int j = 1; j <= m.my; j++) + { + if (m.mineMap[i][j] && m.stage[i][j] == COVERED) + { + printf("B"); + continue; + } + if (m.stage[i][j] == COVERED) + printf("%d", opt_count(&m, i, j)); + if (m.stage[i][j] == UNCOVERED) + printf("U"); + if (m.stage[i][j] == FLAGED) + printf("F"); + if (m.stage[i][j] == MARKED) + printf("?"); + } + printf("\n"); + } + return; +} +void printmine(map m) +{ + for (int i = 1; i <= m.mx; i++) + { + for (int j = 1; j <= m.my; j++) + { + printf("%d", opt_count(&m, i, j)); + } + printf("\n"); + } + return; +} +int main() +{ + initmap(&m); + // printmap(m); + // printmine(m); + fnOptAuto(1, 6, &m); + printmap(m); + int flag = 1; + while (flag) + { + opt_t tmp; + /** + * @brief #define OPT_LEFT_CLICK 1 + #define OPT_MID_CLICK 2 + #define OPT_RIGTH_CLICK 3 + * + */ + scanf("%d%d%d", &tmp.mode, &tmp.x, &tmp.y); + flag = opt(&m, tmp); + if (flag == UNALLOWED) + printf("ERROR OPPERATION\n"); + else + printmap(m); + if(opt_is_scuess(m)) + break; + } + return 0; +} +int opt(map *m, opt_t opt) +{ + /** + * @brief 操作类型 + * + */ + int optMode; + /** + * @brief 操作坐标 + * + */ + int optX, optY; + optX = opt.x; + optY = opt.y; + optMode = opt.mode; + if(optX<1||optX>m->mx||optY<1||optY>m->my) + return UNALLOWED; + switch (optMode) + { + case OPT_LEFT_CLICK: + return fnOptLeftClick(optX, optY, m); + break; + case OPT_MID_CLICK: + return fnOptMidClick(optX, optY, m); + break; + case OPT_RIGTH_CLICK: + return fnOptRightClick(optX, optY, m); + break; + case OPT_TOTAL_CLICK: + return fnTotalFlag(m); + break; + default: + return UNALLOWED; + break; + } +} + +int opt_count(map *map, int x, int y) +{ + int cnt = 0; + for (int i = x - 1; i <= x + 1; i++) + { + for (int j = y - 1; j <= y + 1; j++) + { + if (i < 1 || j < 1 || i > map->mx || j > map->my) + continue; + if (i == x && j == y) + continue; + if (map->mineMap[i][j] == 1) + cnt++; + } + } + return cnt; +} + +int opt_flag_count(map *map, int x, int y) +{ + int cnt = 0; + for (int i = x - 1; i <= x + 1; i++) + { + for (int j = y - 1; j <= y + 1; j++) + { + if (i < 1 || j < 1 || i > map->mx || j > map->my) + continue; + if (i == x && j == y) + continue; + if (map->stage[i][j] == FLAGED) + cnt++; + } + } + return cnt; +} + +int fnOptLeftClick(int x, int y, map *m) +{ + /** + * @brief 地图当前状态 + * + */ + int map_stage; + + map_stage = m->stage[x][y]; + /** + * @brief 判断当前格子是否是雷 + * + */ + bool map_mine; + map_mine = (m->mineMap[x][y] == 1) ? true : false; + /** + * @brief 左键实现 + * 如果当前格子被标记或者已经打开 + * 返回UNALLOWED + */ + if (map_stage == FLAGED || map_stage == COVERED || map_stage == MARKED) + return UNALLOWED; + + if (map_mine == true) + { + m->stage[x][y] = COVERED; + return BOOM; + } + m->stage[x][y] = COVERED; + if (opt_count(m, x, y) == 0) + fnOptAuto(x, y, m); + return ALLOWED; +} + +int fnOptRightClick(int x, int y, map *m) +{ + + /** + * @brief 地图当前状态 + * + */ + int map_stage; + DE; + map_stage = m->stage[x][y]; + switch (map_stage) + { + case COVERED: + return UNALLOWED; + break; + case UNCOVERED: + m->stage[x][y] = FLAGED; + break; + case FLAGED: + m->stage[x][y] = MARKED; + break; + case MARKED: + m->stage[x][y] = UNCOVERED; + break; + default: + return ALLOWED; + break; + } +} + +int fnOptMidClick(int x, int y, map *m) +{ + /** + * @brief 地图当前状态 + * + */ + int map_stage; + map_stage = m->stage[x][y]; + if (map_stage != COVERED) + return UNALLOWED; + if (opt_count(m, x, y) != opt_flag_count(m, x, y)) + return UNALLOWED; + fnOptAuto(x, y, m); + return ALLOWED; +} +void fnOptAuto(int x, int y, map *m) +{ + //DE; + if (m->autobook[x][y] == 1) + return; + m->autobook[x][y] = 1; + for (int i = -1; i <= 1; i++) + { + for (int j = -1; j <= 1; j++) + { + int fx = x + i, fy = y + j; + if (fx < 1 || fx > m->mx || fy < 1 || fy > m->my) + continue; + if (m->stage[fx][fy] == UNCOVERED) + { + // DE; + m->stage[fx][fy] = COVERED; + if (opt_count(m, fx, fy) == 0) + fnOptAuto(fx, fy, m); + } + } + } + return; +} + +bool opt_is_scuess(map m) +{ +/** + * @brief 扫雷成功条件 + * 打开所有不是雷的格子 + * + */ + int coverCnt = 0; + for(int i = 1;i<=m.mx;i++) + { + for(int j= 1;j<=m.my;j++) + { + if(m.stage[i][j]==COVERED) + coverCnt++; + } + } + printf("Cover = %d\n",coverCnt); + if(coverCnt==(m.mx*m.my-m.cnt)) + return true; + else + return false; +} +int fnTotalFlag(map *m) +{ + int flagCnt = 0; + for(int i = 1;i<=m->mx;i++) + for(int j = 1;j<=m->my;j++) + if(m->stage[i][j]==FLAGED) flagCnt++; + if(flagCnt!=m->cnt) + return UNALLOWED; + + for(int i = 1;i<=m->mx;i++) + { + for(int j = 1;j<=m->my;j++) + { + if(m->stage[i][j]!=UNCOVERED) + continue; + m->stage[i][j] = COVERED; + if(m->mineMap[i][j]==1) return BOOM; + } + } + return ALLOWED; +} \ No newline at end of file diff --git a/test/opt/opt_test.exe b/test/opt/opt_test.exe new file mode 100644 index 0000000000000000000000000000000000000000..c3f75313431195cb87425e6c9578c577859b0fb9 GIT binary patch literal 290312 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μ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 F`F{_Lw-5jT literal 0 HcmV?d00001 diff --git a/test/opt/tempCodeRunnerFile.c b/test/opt/tempCodeRunnerFile.c new file mode 100644 index 0000000..24e0fec --- /dev/null +++ b/test/opt/tempCodeRunnerFile.c @@ -0,0 +1 @@ +printf \ No newline at end of file -- Gitee From 4c13aabe2c6e33cecbe75946b17a1fd8b2dfa6d5 Mon Sep 17 00:00:00 2001 From: Lizn <9697148+antio2@user.noreply.gitee.com> Date: Sat, 18 Dec 2021 16:26:06 +0800 Subject: [PATCH 04/19] fix opt --- lib/mine_map.exe | Bin 1794448 -> 0 bytes lib/opt.exe | Bin 1806768 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/mine_map.exe delete mode 100644 lib/opt.exe diff --git a/lib/mine_map.exe b/lib/mine_map.exe deleted file mode 100644 index e93a692c695a9df1ee270cfc41331bcdb04ee77e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1794448 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�f5u~o zyW{^%NAU~;x^(NZ`)S~Ln@uD^!J{`Uez#EsDd^OkY#8jHX9u!=GEQ z+@}G5RX(lwC!Vu&>c3t7dO`eu`iHK+=>I;F^?y3(-=L_cR{Gak=pXw;=yv5+hId?! ze{RnoY3V`#D9m%!-u(H1edPT2CFr4ZSA^EdO8=cz4sVDDUv^doBJ8|v+CR@f_W#My z{-YgU|1>SzIsJdV&Gz4>{(mO>zn7u@$J`oO_5V$q_1~ju?D|)HA5K(X)E_^@)w+Ir z$m>|E_Fp&nkC5qv|LP5){R+F&u#0%HcRL-l(f>=S|0|%sKf?5Xs{{4N7qF>xveG~L z;PCplQy$yVTR-Jl*Z&)- z|7)Os?)=d8)QW$H5whv%U8nl!=6?pj4Vwc_7sp?~hTq07}K-8Rv?xo!X7 zO8&2d{&f+i|9fur=Ov2mA3vm{(#cBy*daS-{CBFq-u|1V{`H`LOlIhMYQ?`z#rz)~ zXmF~(82>j({zpTeV>UVCAF$BBUg6hmF?Dy?{#*Cr{r~rp{~MrxeT3=%zFYmd0NDPI zfqyEUtm=Qgh5l}JR;72UzdrxlBK3b0^!H>rtN*I}?danlIMiQ!4_@0W`HzRp2AZAm zj~N=i|BwAHv|qR7)5Br=*Zcn;CI7cT|3HN4zt*k(TmWqU_=z!Q>rvEzI`qTQq-v9k9`M(4FW3xlIQ!D*d`t0cAA3Ef(xBp)x|963Z zS%mTb$RU4S|80{0d%(Xj!uWsekiV|~uabWQ@Q=%htoq+*pFdmwZx#1{Kau>saQ~-F zai7+z{g<5^{{By+!mr!@;a&Upe}eh{F8R*_{&7z_TmNl6pWbh#;#02htBT*=U;q6f z`JV**D-`*(;$L%Nc>c`_zvlee#qT@RzoI+m|EJ`i2K*DB4y}_FfA2-%`By6Z+U0AG z|A9mPHDdjPJH+`fzA3rtaLw8N-^2e5d;im%?~cMR+rIvx_Mi45Z~uQu{Z9e?TNFB3 z>7RIUc>QBnhOSp`%VDj<_Fui4^Z!Tkp9lQCrOw9xv`fPC*Or9#>z4mIxBPhqu>PM0 z{8jn1(!arqzgwb;^iKKf>mS@N@-Kn^1x7k+|4r%P=Rb<zNBCObp3&iTUh@; z0RBx8#{W}?{Pp#pZj%36;GeJ{bUn4I|E?RdLkFKZ@NAQ1O62e#{YAN{Pp#Z z9+Lluz`r@d_l{vU(>l@X@@SGM&x?SJ1z@^1wGEfL1Q$szxgefahNu9E*Jz(4n@ z$ZG#zJLKQojq~44^8Xb0r{qNz|Md>}>-z65`F{rdt0Ij528aCh@vpb!|2gn)jWGV- zIOLxg!|VSZlK&UL-+M-6)&GqS`8NyxeI)-cfq!*`@&DE#|BC&%{?U^ESHNFe7+Lyn za>&1_2j|~c@^1qEm3KrI|7M5$%X@PECrke8fqzHocL{xttDFX!uDe1?tdALqdT zYDPGl|0h=LocVvf!})*t0bKt*rT!a0|C$KXf3t1t7&{`CGMvH!!+|IL8)f7NsPR_mW}7W+ST zRJF4E{J+q@EQ;$NBlZ6l^skLD{eQHtKU@DV8^HPRFZpi*{?UsftN+{TkiXvk50Lzu zfq!m<@o#a+U%&qCFZq85{Ocl&|4;V$2k-wf^nWv<|5NQ#v+DnoU+MZ!pZ^S!`u_;}2O>=W z-|Xwp`aiw>A1wKA1^x{Y#{YMR{Pp?I5Xrv<_{aJqtNpjy=1=Qi`u;D&{Kp6FU$sxm zs{J=x?El(P?ce_XFXFH7e>d=-1N>F{)UEiZTkQYdQT(0me{Xr2uYY!t^**DChu zS@AEwH2nH!ZXk5Ka$7DRIo$uP^Ec?90sK|@wBp}r!QU-UReIO_50U!M2mW;moviqK zFAJ}~f7y=F|KkqSKNI+?@@d7t%7VX2Kexx7^4Fh#;TgdDA14EU)pIIV{56Z`Kiu+E zrFZ=N%NpMQ9VY947V!5h4_!~K_$OW-zWz5T{Hl1h_jsej`d=aV^An-|*}z|wPb>Zv z7W~`G$8J2Q{L9|p`j3$M=K%k*Go9%lcSU&pGOXLZ}R#-O4k2;;NPOCr&jzmi~ZkK=kA#L|GC5Zuk+^uVEtbN z{8jn1;_tQK?^b73dZ+xo@m=XT-?38v0^sj03$2qC|JwJ%_kY@Xq5Z0OwfFcJw#Pry z{{Nwp|4*>~RTg3EUw_zM|1$0WA1C?$4E*C3ht|nT|Mu$D(eeIt$X~zzag^l$3-B+G zF#dlz94+~81O72rN0$D7JLIpge;*_H{|fy55yt-?hy3;X-{U3!-++I8gz?|* zkiUNa>sZPEci``-h^+emuT%bF|JQMne=G10L>PZ3d{2L>Te|NY1 zCrbYR0ROmaBdh-RaL8Z#j_aQ+`ELjQmsZE@5%YMX#4fRnLxURPqE7o?&vYBwe-Qmnuovtu3;C>pB<&ItzHC+ zK+z7re^57f=e+;y9ox@8(fYr>{$t=@*bRVUoyO|=-*c12`VT)(M+Z*Ve`3V=mm=$b z7pVUg5mx{Aw%z_o|CCXD{VzfC_k;d54)w3I&_DhB(EWaWj#XG;DhpnuGTq1&mI{w)^z*DL&rcI-54a@+n>CI6nFf65Kc_&d$N+jIxo z)}O||rv3T#Uq8wJYq(OZi?H{9eP?_9Uw!>o3iV%APp#^I#VtFh|8rXZ?j45Qp`@>?q#tQXKV`)~<<{{1U->1W z%hhf9tamv7)Ac`H^4}HouZ}SNhq=|C3xNIKGSFY8la>B~Ps8i)R%cau`}))PAL{!L z*FqsQq&R#3Tii7}hyRCe*T2$b{of7hzjjmTc50=+N}nBl{1Aurzu{=!|M?{UnEr>^)}O9_8^!fcw&dR%_}4@j z|KYazQ~wt@hS&cr$^R^<|CN_ItN(%9!`J_m%R>9LRe3{1{>EYbFPp*n=Scp0fc{aH zq4W7)?f-5%Bt)TvIph)FzZ3fNxH$fw4f?Bevf>|eM|l0iWXYAuwf?zM|3099dW7kJ zn?wEU$MgEXK=MBa^siF1Q!D*zE%a|y_;n>dB;M$7{;z-k3nc%3pnq0b$g+WA5BVEuVwZ2#wh{wkfU+JDNO zJE#4-*55Dn-xKt&i!l9f20`uoAUeJOPdxuxDEXfc`fFD>YyZs_`ll)U+R1yUxSJf_ z|Ipiik>tM@=pS>7Gyb9S_P;oGi^twsAbPO=JUO=i3qXIBPFC$d;jW$2{$1-|BK6-J z^!G=Y{wqLGJ3ojX-2WF#{uhG&HHvm>rGNc*;q{NYGIYDLllM?@o86B8OCzv( z)Bjcw)Xop02kXxhWBb1d^jGO*rN4G}c>V3<(N0{~`Uj-``(pq9TIhOe$=^<c1c8ABZsh@9@|wMTpMyj~mCY|Id{C z%R&EWhx`A^4+*b-^_`*HmA%}zjs3mb@&6pje}B+F_SVq(w5tDYbN0VEQsuFC9*7>S zKTnSB|5DIjrIQu^#KXetZ!eeakL_CjGO7Oopnq9}>3^rE{bhwQAv)8)MLhp@uH=6i z=pVSxS^f7v8GioPpzv!i_ibZucH92Xm;C#K{&BZC-2ZP7>)#hj z{sVx2d4%!5+ctly|N8S!7fAkBK>d%s-wl5tKM?e9 ziZK1}ajQQsQXK!T1pQSyS&e^b@!|Dvt6aw%ajpL)QvU-%|AgC})&GuRW8cfY9(!pZ zIvfA={jV2G{#Swian;WFM~@1xf4Rc1z1+8r{e#=~f2ri}0sSi?O#k~pP&>aix+n|3SdN>M3XX+sQ*m#;x|)^VWv{6;l7fz`r%Z_^))!|4PaKVBqh4Iy46zdFMBKWLjj@BhX7|9SJl_P+r8e~0hCFSB_6JwHu{2ln6pPy1i>`QO!2|DmA2 zRvTIM{~?dPB5l+ET_gDq1O5$%{u^=~(`x=_FBcsb`(d~Iua*2`fqzHmmr{u=xK zUCX0<{qs7>{}A9`6Jh+jION~x;m^NaFZmw|{G*_Dr&>u|FEZ0`(xW*{~`YR{h!OE{uRK# zNwH34#Xstq@ca{2hOSrbXBs-@kG9vpO#Hc9)c+dbuga$t|7r{Vp>yy4s0042|4$sl z=Rdbe{jUZ76$+iK_**e)R`|6_XJy}Nd;brOe>#7D0@VLH;IGQ3TmDu&oZ4OUzeDPO zJ@Bu5Aapx*%fCh8*C}t2uB8L@zXABG^68ep$Zto7PWe}iaX+X8Nl{`6Yy8%^S`RUYyNjj{VRcgl|m=C{96@%-Rl3dTmA2q{BHsN z-iJchQ@8x96@K0F|HUnTL;YU?{8jmM%ik?eReIO_@00r93jDQ)cZ~jN3co5|?LEG& z1NFZR_^a~yU)A3!|7J1&t(N-V4*Y8rI=ST^^+@P?)n1)d@qV?fzv=pah2$R(*Z=+q zyZ$d7tSXt%$J?xbJSh2(1pf6A#(#-J{`&Wy9+Lb=0e{c)q3fyJ`X5>i_eYBy@^9?V z-+%kCHZ-_Ac zdwW8ci|VN8|LO$)8p;1i;2--!WVQc29P-bd!}Whu@=pN%Wf8`|k3;^^CvpCdN&e%2 ze`AF4k9NqvR`7pZ@;?gr$GsR?^}nw}{^=)k{hyHhj|Tqb5yrotZT__WTX{3T|EbXr z*MBzRpI=AT_?PbR{hv{3T>mGf{>Om+O%bO5o*opf{Xa4O)d>DiOa9}5f5Pg>YX5tA z+Rq(h3jS$xx&F11|FOWoBEtCZwn%;dHa7s@;@H*Z;3Gd`-7l%eh{7ZzX|<$ zVr>6+g8nL<{;TcZzW%iTrFMMV`R{#D2r1K?z5hPpiJkNP$Mv@7zodWFJYN4-%lbb7 z>VL{hkv0BZ1QpuO52CaB-*hDB|Dxo77u5ggRXc`%uEMXKyoZYWyY2pu_y=Zk{x3`Z z6G8u~2-E*!5Y)~Oq6h2G6J!5(H|Vd@>A%|lIn`fp|F25@lR^L12-E)(5Y)~OqBH%= z6L|f9Me@G~^siI2Q@8rZ)P(L=?BqRE+*Y^k|24^f66o)JIdneV@(-2wjyP8CvF8P% z2kXz1WBb1s^jGQhU*+#q|J-}|{HI>(KN<9|jxhai0732iAbPO=uS@>-f&P9)J9Vpn zy~3}ZyoZYWhr{;oy@mIGZ%Y0tpuhG?WVQbrK~OtCh#sszPmJyVe$Zc~lUx1mOTeak9sw-^j|g7PHEx#FXLpJ4{`k)r2Z#@{?Thf*VF$h z|A*b`|DNRk0O%jsLG8am;kRvzws+(&hwWc`gzNu-%W_!E~KxIto;v}4%dI94(0sUO8p;#`XBq) zj_Lo)6n^dXc5P$-?XdrA74`ok$$vW3|HO}W4F9${@0cS_$3I~&aoY((Pr2aEN{}zY(r)&xT{I|-l+gkAA$Y@(GJpB4c*S}Hne+2YzRJ2pK z`o}#Ux?S1Ie2B>Z@b=%L?bid%=~`n?W2jX$F|4KU%Tjyz`!5q8=i}dJlD`-9uTos6 zS@DnlA-w)7zbsQO{=XI$80rsS7{;S1SD4rE8Ag#VvpC z5cPi=_^a}1#Xt6?@chmB?kMb(fBJ`9|BX`rTHxQJ(8-E_l?DG4#e1dQmP1#E`lo%& z`EQc^p9TJYhu?q8eL1}T^$Ndk`FFF=pWXk9@$&1xX376~;O}|eS^Kx*5m5NGN@r#7 z?v_740k;1afWIoAR`uU1pF7I#l)v{AUjM(7`o9SL8x%UZa{F}=|=hKq^?cv+MTb`=)8{(ar<~Uye zzmWBRCaiyW8=dK&Zn6HM^6R#Ep0Hp4S^r=4Dd)dg@~;E^%M|U@t^SP)zi#>Ww9lWl ze_j6{CI4BVzxIhU{mU)%SNV0z|4IA&gZ1Yb!2a(g&|jsKTm9YgRHb*Ve~Z+AHt1jD zQ2!bW{Z)QdyxM#GX@~mfuI252tK|PO=pXlnv-)q9--P9%?<-oRv$FTH%|Dv8e=Uj6 ze}9(zQ$hdqPj?J|m0v4|*{;z@lt!ITEr>*!$?Ge8HC%hTDU$x?AW#7di z|ES}5`~Oq&PXqluUxd!56@TxK;jjNyey#Xf*`IUBU)P_X0NelTIQ}bivf>|Sp}!Rm zr*^0MCk*8J|1I^O3;H)W)IVUMzsj#u-Xh)e4)xa>dHerM@~;Q|D;(-yW}$zx!mr@r zG~Cr8f4%*0m;6rw{mZ^|*8Zz3^jG3Xicems2tm%jh)Us?a(1pO1=a>l>a zLjOvI-}dHP6>m3({B`}iO8w`7{!I?`kJ%c2{8#x^@oMk!mmTug_2(zT_Wu^>uhPk? z{ij?Le*V{9K6c}|*1x;d|1{9QqRCnPZ^{qPU**>>UvvDI-0I&=@_!rjZ&9>UEB)*G zgy)~~cIa|7^RbI}x6MC_t$*v|e^1H(bkINX>(KeM;%}Aj7KLA{bXN8a4#)pc?f)In zU!{{3|MF|Y>u<%wsolQ*bp2m(2cQ2&N&S7Gf7NI zCHcP#`d2C1sipqW;q`A-_!T^yhP@ru|G2xj{<}*4>7c)NgEReWE%aCUb;?_$`_{Jp zRR8_=bN;(a{u#hu`^Fi6ksoEK@T-j9PQxbK`qTF>QpES4drSWFfq#u6pH}t1p(XtM zPvy6rG?mddk5QUJ8pQiwb^d!u{+Yl(eWNq|TP^sj{D#b=je}bq@~?P;*Z)3}e-`kM z{?-})x}U=9ukveyYRITt-13i>{Ih|7okRZ37W`FyLz1#_u*D(&rYE`neI@@K;P2n$ zO#kwq!|Si|YlCXYs6RO5ANMrpKYr`4+s>u;-{u1UhGu8{1HXjlukss`l#PQwy5+y8 z)ISgSmwo4qf0YG)m0ufFLq`4CHh)?#s_QG(zogrRz(1ivasMY;>#D&b!N2g6DXjmh z`0aOAzuNd^S7FxaJ35AkKmQhre?IUJ{G!m`A^(&X;@`&ae~|woZ2uk1znbgc#_!JK z&+h;0-@oP+4A;LdhwGn)`xN?Xp0M>l`l;~!Uq{zt;cv73?_aZ$4^{sQLI2oo3jPl3 zzvm~a|84y4JpGmY{lLGhgZbxj{%!pJ2l+1s{*4{XzmoHB<9Da=H?4md+W&jd{#EM~ zR@Z-x7V96Py>@iybp1nL|JhB>e;Rz1x9I=8eZ#N+R4e?tEss4Mu7BwK4f?+i z{8jn1(!a`rzgwQF^sf02kotcB{Iz$T>7Upyy#8qlzbansJ>I7S^RnXP>{R|2t6XzYh4l^D{f1mUkB>{3Gi3t(@OvJy?2iOuK5p@`hN=ia}_#S@o%)?U#IZvR{uRa zQ2)<>zbcb(CyTUf4v2NzrwFu{rBoX{l5VIs(f1UPuzFs z=IIPf9fstFH`sxe4U2-+Fbt;=ShS=sQvfUJn%P`|9??`ZQmWNKk&vM^4|dZ zt8}tz{}o5=oc8Zt|6c!T{nPi_!TOJq?f)ClzfsXnt@MvOI=udI>q7S{tn#_|UySSa zAN8NsKk9$j{x^dDDxIwKZ?Mqcg~VZ#y4PRR^{4Th=6lggY5W!;_K#NMztP^E=lZ6N zx3OUc(;Mdp=`Yg!P=shV&JREe_WNXmOmDPvv+clRp8p*w+yA$4(sD&RwbDQ3nDFht zN#WNv0aJqgI&l8~ztlf^HR&(Hou)r8Pdxu7&|jsKmHyG=!|QL7t;1lX>fhq0@lb?2 zP5+~1`)>yQ(++TU|D(o2{~Co~w-sUk2yOo{byUtG+-drA0r33af&MC;tlEFz zN2>l}+!x{hTK~oq`2O$XWc&Xf^pEQAto>J6=wJR%XuodT{{a!&{>8X2!kwnSq5W?L z{Z%?ywf~soc24_`RQ<)cFT$Os{{-3ow}Af9146e`EBz}h^siI+b=&^?M`-&OV zEZhH&puc~hv-V$Rp}*(A(0-{Dod17-&Gzr%>mO-{@%hhIxxRWFWTVmH^MAEN!`J`v z?|01lXHWazKV|zrb^g5QvHm5(KUF?0+yAie{P}4*JaEdt{3*WwcdD%aNszlHg-%xd zy^n_HU$J?|=-(^O_V*u{{yKlI2SwahVEBXyxMzwSKIoV`12E?{weTJl}{`EV-5??zrB3y#&gVH)c;he{}ecR+E!=! zH(BtHY6C1&ohASe>(hA<t( z>mRE8yFKo7{X^$}qOAWdz(1f^r?KMiPYSPppr^+6!@A{bPCwA$`j5_^J4F3|LjH<; zTJdkT;BU@%M`73ePm}up4E!5Cq5CN-{^`eu*T4Lr(0<*P!+~z~_euWSfPccE(D}6D z@0}2yf3w1`TmBxm{CNhj{{IU6Rr$2yUvI(REl*W?*Zk9^{=WhL#KF$=Pn;ND|L8tD zrvE#r1NHwM_^a}1rGKpjf0cf2k2~Pcp1i6U%h!K-2C)9$4E$Rk3_VY`;_sG+)AT>b z+e_);_doRUZ@#Smt-wF!U}yC|E;)StZ&moUm;1J{2X$cm{{!_`S2zkz>^ zLMJQ!(UZgL9}~S}#=nC*Q2&2`zbcJK*{wDtXM5zBP z_@~OJ75{n*{_W*sH=a}e2|c>gdQ^ebe>R*vAt7`-wc?)`7ry>iDE!*xYmOi7P=B32 zcZm9@!ar3$t@u}1@HgkXqp(x{+7JBt&oA|#1DR@8=w!t|EVGnvq*9@i75|ix;q@=;w`1nN{cP)R z;?D~f^-qI;s(f1UZ?@piPt)Onef~85>H9xQr2caucPU4OZl_lK(?^BZze?fPZGr4* zTYnROo&nVV6!@pgrxpK33;u3-s?s~=FWUbSssE{Pl2(OIR{Uc}hu7bGbm)4e;?>^c zdpXr#@aHE&{pZ0yRX(lw2Q2uvmyg|ePWkKi{{vG0)8ORQ3Z1O@drl0mzjn-y(SL7; z`s@68fusJX|X zIn1H{I)8)y-B5o;KCSdmKQ%mmg?z3LyXJq6)W19MFFVYc{*4y=;|>q)*KGmBcA)+} zfWIoAR{DGA?Hv7`@~^y*w|_(ZZ-h>;wIK9$nic=(z@O|rjc)a{oBl6{<9~G{U;ikR z^}i?R-=wIgeKalX_pe%ZlKzL-eE*k+-~ZP6Um*GS0{#`lL$^~a{)wmUoce#LTmBbH z{!zfc*&+Xmoy7kz+x%($BkCqz|1XmKcLDyMzN+^Bf7G1?oHEt-xUsRZv9Yn&#$FqH zZES38Z0yz7z{bX2du{Bsv9YnSv9Z_2{-0Sc_wePNGlw~M_jmuipAYQryfc^c%yZ72 zJ9h@~&i~*}cKk19%6|&-PXYYHOUUxS-xB}gru?TO|CGQ#u%wK?Zi#;h-~5g7fBhYm z|5@ap3i$haDE^3N|DWF3PW~?`fhU#!(~*A~;7PTn$5F_?Gw4qU=Ra!9{6~Rk*Y9|*ef^nzkN?{ERfEp?e-a*4oZR>~ zxse_JQhq)Ee|gT_TQZUKO6IZH{c&4@|5E*G5n#`-0Mp1e({g6 z(7*2g&qe+{Ac_y+c~+uYlK zKhZ9O$Nu+RLjQrq6#u2je;~YCg@}{m@7=3kf6tcQ{;Nd0VsN!#MC!lEuiA0^9}EvFPL6+&;a4v+ z>OZ9XgU$NC0{tHX(Z$wsuTzdcvX!_09MP`n4w*;jU-PQ~9RG*HgNl>mPc!_coYeMW z{$~DPh5iqN7pW1RIQ|;L-@CSZUQt|~E}vKGzsav&$nk$TJg7K1{^Zu)`QIsz-}R*Y z`u$H=qyHn|#q)$Gj=#e24-@VB#QQWj{vn3HZ(aAi>XegO zZ$Y7d&954E{2v1kDo&2SXIne|rTq2g`#*0$|HlIVAmNGQALRJg8yo*op?}Ta;{Q13 zcOp)XKf>Jqs$OQ)fB5HbyZ_+~^gk_J|1OjF|9D^jDp27d!R8jF4a7|8NWPPY3*=Wn}z)miU(y^6UG5Zbkm-fxjr^AF#x~oRDAN z|8pDi&j9@CWo7=uyV}YB<%Rq@|8GbB8G*kf}DtbR}}Ksn*4Vn|13`a3;D~I_*WA0>-@h9`NO~; z*;?j5vb!DsD+~E`{@;!KvpV%J?pAGoSLjIy9{#AwiI{)uQ{@H;) zx{WOVV|&=i|J8*2I{)uO{yBiZU&x=e#J{?bU+4e*$Ui6WSA_f(OZ>gQ`GX_h|J47I zI{ptK|6IV|laS^Az@FaupC#Hgoe)?<@ec=Poy2J?8K^j4>!*JP20kA7JJ2_?vp5h5 zH12=ynM{5D(;)I65C5MK&VQtt`Huq8?nqDuPYVm@e>A^(ZD;w7z>@sogLBv8d3$=2x%m_&*6ARGb|D0K+c^WHyxY4>$ck zivCZA*GdtdIR4&)y!{u6b{RbOzZVnw*Z2Pxk^fY9weSY+dCKu84)*3x6Ya8q%nD1G z@~ifp{LjLJij(6nGyDvO_`m)0H|GD7Z>sU1dS!?Ifr;Sy_kFU@zYjlAxAOT16Z#(i zHpYL2=Kar)WB#88`=Icl?EO#iL%j39G)DQqq%{AV{4M@Zhu^6k zb^WXP{;#Ld{}~WnWJ6j17dq72e}-t+bcgi#_TR>@0&wd8On6Xna{glszbPlRy_7%k z_W1qZL(u<~o{{x`(W$)sQ}LTFpU8Lrr~EhT{~65xvmlrPU$Dvl0Q!%>{7;pbr{VaM$9d;}Y}>K%zozf} zZ{t@x*6}|N@KbSe{1t|u@@Kl-KYw84`;QXiRR8w^`kxp0bA%`E^N*s(d;2%#q_$tn zxBo`}SAJRXzl8kr0e_9;_rCup-0#ibyWQC2|JqB3s9oc_Jfc4TO7p9=ocy03_^CL# z{LeA`uEC7LLIM9s{%5aN{$ED_3jlwf@Wk(9S@75Nte{`mIpb;|iqoZwymBDo!Gw4RVZQB(7uuOWXF_y>giWlQ{V zA^$)^@xPAz3j=>$$R9t^j{o(2^EZxvrLz?O8_2&1@b~Q?%l|yXKS;FOL5h2>vVkf8 zo5;T?@KbSe^>?re}9p|0@38GyC^pQg?FIZJ$N%DVs{Y?b|4RUWf$+qQ|NAWQZzQaL{rLyaA^$nB zllzHz3fBK&-u^2@yOh^XmoF`x|IqyEg`E7)!GnsE;Hxs{w&e1U*7ihm+|etjbAnB_&*OGRGggu)ZyOw-yZj9{q3K>G5*o-e|;bQ zpASJ*2~QmV5W^qa#67P}_rtQj{Wtja`(Hmq{tF?P91$nSpE$zXe~oC@lz%x>eieX| z{};i7ij(6XWcW=vsqLlw`u(3Dq5q5FMS3@N&r^=S&hY1nb}6n-moM+zf204?_dk4$ z{FlIs4ij;5{I!gC{>S^=_iLw|)OstJ@~eiO{J#_)RGb`t>_~5ZDt^=D{`njIpZ5O= z`o9c<86Z4y{8@&-PPA*vAM@?Mjb8=e_`e(;RGb`th2b~lq_!9HH?MzvhW@XB7wOx~ zy-qp)=uzJJKS;Doadob-;GVrf7On4>VE(plqW9#!$*7Pzj~Qb{~`6CT~_(8q5mH6pA`B} zoot7H6W{*T_@~+beTn>6gPj6Vr=0&B<3G5CdtI3(#LB|@k1eD8e~tW0f&U?)|EeYb zo0|Gp0-XB41|F0r&VTS2JNYm5uj~I?^uILt5AE!pryPIc6g&KVLjU^s{|)kA3;vTt zopSvBjQ=5`U6p>~AFBxKU(bJkkNnGk{}k!p`}%j;lK;(2{i{9i)cx_S~ zU}i(9e?9&iM*qu#|03x>;(7l={!}~lzqxP!ZRdYKApiBSuR~kP`oH+G-ux+|T}Cha z->VAiU-$n%A^&pVKb(~DhqB)MEQoN0ElmBZ*LCXu26#}OxcbjC{)Kq#W>Wup{Pzp` zUmpCYh5nP4{BLRM|7YaC5%zYGs8h~=jqx8QK39bm%&f4QY5o6({40R}lF)y}lK-tt z{j2@!)c+tnC{LXKkfr;drT+E(?{)Ma1OJg-Wc`2UG&}wO)>8k?^Z(zG|0eLCUtae9 zx7<12{G}7z_p3@j@sHJo^%x zW;T@i&n>OyfBr`QD}n#A(0}T5@BC*l#Q&WT`q$_Ge;GTmUm5&IcXf}G&3{Y&w>9;zGS8|1Tj4=@;`oDydw>6xdYMuG;opDb{I~BZ zb^mMNhmpK>_*Vh{{X+l!XL#3tXkGWZGTkBD3H|Hq-~VC$-v+_-kCWwpf6kk~=Op)b zP5IaGUH|R=8xc7ER|Wr+Coca78ULo7)b_^yRl^Sd?eL&HvHXmGDt^=DQvbuxsQRA} z>wh)yUlG=SY3VJz&~>Tdu%Q>{+ks2 z_X2-b$WO&L*2{PB?|+295>fm?a;V=5M_JThD(?f&6O$e@@6BI?KEN8>>3l*+2it=U>*Fy+b+dG?ulZGjj{gmTpNf<7 zpJ({n;~uTQjrpfX{~G~+o$$o*7a9J+?AZ9+1{rQ&@A^#ol;#Fdt!tvLc`Jdbv9skx8 z&i`ruYKJ@h-=^T7^2G7S82^5~cDlZ?{}%oN{7!k|_!E}q|NZ+{=l^S{EA8;_E%dLC|8pb% zz2HA|u={-qoc}U2{womYRVw|&Kh_b}f6oT0{^v#ht-ycuY?=S6CI9=F`d542ssH=n zL3!f**BSp}!OVvK{Wq?E1)Agk`O*K@;J+gDAH2#={qHOEukZhv5BcwheVr7Z{}h=1 zKQuB}?`1-@khQyG#GKGVFxhjI#6J!VGriKhHPK{}%r{ zK>kyC%K498W2gV~pa1IfkDA~Awj|d7Bd{;}h39|a3%vPzi1P}y`^7)j7y8%ZpC07j z5&RFHFYEsX82^b2+}jm{s|^qI-T$@uSM50c-=pxLJaPG-V*IO@8TB8={#8T{|4!ha z^2G6nul3IVQ3qEIiv2hH|79`%AA>flM4fW{LyZ3%ab97%UpDYv|Bd5cc5XHQxg7HE z4E}=`y4NYk-^=(PBHA_OPfP2+>0brlDcp9KGuCyqbG_*XA8 z>OZ9Z_4qf2`TsaX*GrtIbNmU$|1i<6=?>Y@cm0P(-v3j*S6%;_9^e1D*JN=1SCf7J zY2hdD?|-J+HRb+5B3b|EFN)Dy`ygTer}JNh;`Dz{ zz=O(DF8>Fa{2x8y|82>C{x^<)!PS-j)zJU0;6Hq^%>NM6|CNY#|Ch%9Uk6M5zpnUK zLH;M<@!v|cJaPQN>+Br=js3UqKLx*2 zo;d#aMRxcF{zv+Mef_r=^M7~npUKPWU+u>K^B;!@>p!rVs{b{R|7j%IA_M7yT^hY9On^Q!=y{7(Tt6({FE&+waaQrk=U2b;&g z_0j)x@FGPbPdWYylmF>48vpnC&VTj!56$zR4Um6t@ZWQ|?D`kwXRMbWF3f-JUj^vo z|MT#mJaPV`dGGoktNq~Lf202^ub}$BjnV%;;JDc|04WOdE)qo z8UIxLrpu-Nqs{u?6!U*S@Shd-|Ir)0>wn;iv8n%zu>PYPss67I`CkGV{ls}1=fC$7 zZ+=tH)b?BWuK&jIUw{8eOT!1i{C{!Y34Z(K_?Ct0*J(rE-+wax7L6sv;onC-Uvs>6 z8?!LfW@ENI5@_^)I{(!xIsM=MkpEPka{dRH{2wbIY5td+`M)LR|H}|$4{@Ht@ef(b z|1Evzf5U$!rs{tS(0soXI zjz4{~9e%0*z<28U=gye_Z@@l?3&+2aA@BabO3W)zUOQc$5Y~TsC3XByBLAV_e}Je{ z&VS)CZ~uMIk4^m_BdmYzU+rio|KEfM<%#1Twp9Pd{#*DD1OJpKjz3!T_OD)M)PG3* z>-WF!hWY;%MAt{0r*izgcQO29H2&RISpSt5RsXj;@*fWV124GODaT*3zYp?fz<=^Z_c*5wc>B*;@_)RkeqNQrjE*Z{dFrey2Qf{s$TVRQ#sPrT+ExzXLG; zj|TtYm)+}>e*foz$p1bB6aPrYAGyc7|BF4~eqG6we}^9Rd2Ssx zJ^>-?*n*Ho;dzA+8P!h( z@<0Eicm7Aq?(KGnNv?LHu>SS<{}AN=5MHH5)G6mb&&>Y~5d8`X*5QBbC_Mga|LS#| z{67x-Q=T~f8soo19N(+?_ushxq5mE={%hg?4}S0Y(mhW({tz?&=^L!W4G#3}UtRxf zp8vM+e+0i%dCKwEEcJiV{MXmN56AjH9`e6J^iv#v@+t5BFZ-%{UUjIMTy32H{%_>Y zGd=%x1oBtmRq8}P#qpB?s{iP#jt&1#zVp9P|JuKb&*}gA!9V4R<1aA&x&0&ke`EhG z{2#;blqZf~8o%jwQvdq;_tBXDCxHLhYwmf<@kgKbuKyg-t||XX{_B6_`#&?gs^i}= z$o~lh)BB+Nc?!oLyVsk4aE$7IXJP$o|4M*U|0jZf$`i+*Vf>qVrnWcs-@^YX{7!k| z__K_EDt^=DQvdq;_wktjtFjOLhyG6n{ydSV-288q z;U6a26=LhnPVt}rBga2I{yho#zkpT~M4oc~D@^}4Ow^SI5&p7^F#olG^}0^}p920V zPn`e6vv%^|*nbQEm+(8~iSr-5&kn!Tzn=d;1@r$@@IUZ|dq2(b55C}i|684CSM7fB zk5h&9@Amm$vrY(M5Z}|o@yD<7<`)Ap8!ogIvqIZ{M*`~epPHZlcq;m@!MX)u|JTRl zfAACcylM;2_n*58`#+uk>J^>-FAMok@02Hwe}M6?US`yP zNd4>i@6$2=PXqsbZ@T9x$6sdpzd@p1(;bra-~Ww_|MmI*naKY&1QUNqcK*+CB*&=! zcN5mX_OAkW>i=}`PkG|}hn}-j|Ni~A&3~SQ{?7pZz+1BXuQU0dAll{fhWr21eCL0I zUw{8s4*9=@7aI`ff965&1^=lE)&G0H|DkHh|C!SIZ+`yyrO5vi_%9O2 zDb9bM@gM%oeZNw9-Rbg_u>Q6GE0F&@@Lv@APrPU+|Iae@uXeQ4|NRUP$`j|m{{m@&%Ix9 zYs=5F^G*G$7jx?W4|q_XIR7cezaJ()>l*u4FXr%H0{$sa9Dj!K?}y3Hx?=y$@N562-Q;xsN`G3Uyyvh%&+q(M+>tBEW$1TWzDfsUv>XhRjX8iZO@4jE%nEWie zKwAGz|LVn@{Qt}Oo$$o*Cm!+c|J2Kj`VV9ODk6vfGVo7%;`n>ZcKD_K)61*Rzq}pu z|8Lj_38DWoXh@JXZ%y|tM(PV%gWOCKWqQ0O{f3A68ux1IR1Xdzf0(&vPkMbdavsL z?nD31`AtFC|7VB2=l`-59K&CG$~~`4`418L*ZeL1CjovcPL4nLo*n;E{$jKKA4dO^0)H~#K2G8I z`x*Y?_wIRR>iU8;GLjRgyy%3-WCWj{~PL99G@OR4NcReY8DyEMAMf5)f@JD}i_r&qX zKJfNmA=>rJ+rIwcLjRgyHR$-C5}v3yIsO8}-yZj9{VnC!-+%N3`kxB;vp>oFM?duT zAN$$8UDN%L5&GBsDgej-)bK>b$@w2(_)R&f?WO$s`%j)i|I+|}jqt?rXPDz({+F@w zf242!jnB(Wj8pSJ_agsQaQ+`7KmXhN{?EaW>>U3u7S8|GmQu(6XOVvZ_;Vz`_w~=Z zrTLG%kUzVu;x8fp)xaMXj(^IQ{9hvEk1eD4pF{p@fImWv)42LCzUJNkQ~j6e@=JyM z+W+&&e=YErh5U6({x1{q>-v8I`L6^1eqx-)`Om&?$N%L*e(nE7t8+1@BeuP`3Hf& zml&sU^&fuI+y5}pu4(^2V9KuoaK`^P0Y4Qd$Dg+3U%)@|`49Dz)%drJ{%;2UfnVLn z=^THK@o(yx+WzXLA!r}}BI@&RvM(t9*O31fXsYiw8GrCC@B9z^?%uAC&|O!(MwtJa zU$yGw|EAEf~-LyoLFH2jqX~4=Vq?=YL#-`#)HCz3=>Q_}AZm z`V8`iz<*qL{0~;W{nv?hO?S~z{^$Qj>c4+^)&ISN`~~n|B>j8Of5qSS<~QY}w!dNN zk?x%O@9~y5@Bh;N)f!I!Hyu1tp1At&XZ(*B$S5t4`p>+g#((dj|2x5d`cJCQ$Zm zzYF|Rp1AxkTB?6z|1JD8z)qk%as26z?eu?A|LIp%{eOV@e>eD#{3WaZ)TiF{Um2tN z9~9Pq&t&TQ|A)vwBlr&r$Nx3P{}9oxsOVcZI#yW!+J8&_-vj*MD1-jq0!d{Ws44YjddM-^ZB$_d5Om-?I8ISn_|9u>J>5RQ#VH|IFY& zB^>`2KJm`~Ffpz&O@`xq*ME3q{IC6gj{NsI^)K|FndGlA8Q*dH=Vnv?>IFc3U>10y zJaP3O_|)4!$07ZH|Na~Ie`x<-qW}BBf6qU%`j^IUy4@{8|M79E{=Y!}F!(PKb;|kA zF#gNLxXP6Oc;EHk@UQ28ze4^Y@E`lPyZqnk+kfNwU-2mA{~P3g0QhS{{=VPs)cs-&b#%|NZ{+f8_Yrvz+q(E%HAI{`3FI@_)dR z|JzOdD*?{&Z+7SSM|k4;zbfP3)HAic)c@c~>iqY6^#2g}j|XJeKZYi?Gyb_l=wILe z`yKMn0sgDPpwfUs{di+e;EA3X8`@?Hc!dre{bEJzf&H+ z>lK!69M3!5t~vj${i_X~`kxb?C{G-JnepFge16w6_Wu+5e+2vwP9XC?IGLULzf$`pZalY%nG5;~RhN}NxkpEHepO{eQKlq0?e{drA zcH4RU{(YCQ|JVN23p({bH#||ExcVGrv6V8`q%s|{uc&*Do)OS-I9MPzn=dL z43Av50`$Nl@YEA@_r&q1gWkvg$V6i^|9QI5Kk_#cz~NsMo~SrE{?O#!{3^{x{fB@4 z#{9pY|CkW{F9!Uv$z}eN41bMi*K~)R>DzxBzY4(dzc@TmadQ4E48JKSwY`*IpZ`vb z{+9s${1h_((J8$1KR%^k6HErq;XL_xxX*f7P&4|4TVfgeT5__Al@8FBQM(a%2BfVE#W2 z{wYr!f5Fo6PwGE1rMmxha^znc{1=4&d#3U}{w1dwoBTh=cm1pJ&y0$HD&&6x{HKZY zbk2YAPdoYlr0?rL4gUDH>iWkt$p0kpM}+6UF{b{bV|4!el(7HHOriWwjr_|({`bt_ zo~NAu&@|rppC#Hg?f-JZ{MY`cMgFJ2Kjn$zuQ2{iIjQZX{x$z}$p19(SBO02`1}6$ zuKz4CuRw8iy8LNj{+F8le+c=Phy3qd-+i8fII#l-wNT zPkG|_LjgPYe;NB%iRK*tR)r_Z6URSjss5$@vxlhqpBw$Z1pX7k`M(0=KR8D7f6oc) zU(bKeh5W05|G^Dq$G@JLz3V?eM)iN8u>Q6Gd655Q@K1T-@;^F(o%)yhuP>$E|1%%* zzXJS2M4oc|0}Ov^+Og^XpBLu8=AR$=%fL^?$?^A2Xve=X{{qPWD)2|=boa#Z4>A1x zM7y1ibEx%RF!jG6^1lZBRGb`ta3VYYrTl|itK;87$p1RPQJkD~uKz(3`Q^Iw?JPX0^% zYyL%$|4rcUnM>CHRT%y((XL#Vh&97d_ z@xK;4QE_tox!Jt=JLU1ao`3$v`~S=Hs{Vfk^uIRn$7gmwPILVA+3oP>efw|lN1OaB zBL6zTKOp3f&1r}K5+Q%!4duTj|KsreAHhdu{`;QuKK}d7>rU5SOZfdCnfVm|O6Y%G z@Lwa2Q(XS{&1J{`r9%Ia`4#^v$iE)&*M<2%%v}HI)TiI|E*J8bn*6IGe;oLWo5;pL zJrO(puMqO57f}9JL;m%Fzi$><{r6kqzf#B_UQqF`j{F+{|Dce+Zi)XYA%C&S-;4Yk z0)HSZ^Piu`PW})0=2!3kX@3958pyv9@aLzO)qjoQ&u;GCuHXKyef?`p`Bj6C`iP{N4_vBet_a%7X5z&^FQ%3(@#=wI{4k^d9mr{eto)xVU#mRA1PNB&QNzi-~L zssEwf#-{$?5c=2r8zBE@z)!{b|Eqr~fA6Kr|Axr_Iq(mTk^l4_W8?o#p?}T45%PZl z{8XI(zxtQ*m(EiDH%9(1fj=Yzw7zuZ=C-R9;ojB z-VFJ_0sbW6iQ`W){JFiyrvHD>xBoW&&5{3G;HTo`_zMibU$336FXc}>q5N-w{NDlp z5a~ZKVF1pL|AT*Su|;RIlmG884MF?(7YQ`{_nxNsw?zK$p{dXU?)?vu z{?+{t&H2x5F#k6P|HEI&_^ZtOe_T>`R2E$?foL;pJge|AUrev0Go+s@AM?{?q*8~pnI-#w6jXW-8W{r633$NwF^`5VW- zT66wqE9CzH=6_Pc`Jdj|?eKr-d;X{4U*G?`C-Nu3e_80icY8beUl97wov!Bp_Co$) z@Lv@AAF|~CBcXqN|8olYcLDz~;&U3f{%^>V|GR|#e`*E7%?_JMM z{#S+m_5I)bApfr5zq+uDKe2-y{=0?#t7jiH?D$`t(@y{YvCzN1|9wB? z-_5E2MP&ZVmi*r%^q)Ob`QIP;e+K_)Vf|O;vg7{~p?`h<{{hIqJNT~;$?`wFqn-M{ zSLnYwmzw`P5cz)r|0SXS=-hVv*L+|9ZjAr*`ybNCzX$m5dqC#DZ(%$9_nG=X2>E{n z|B;1c{apkm%KzcWp924Z z2W9<#W@kJ7--AN`;d2!K5y)S6`u~Gu{G|=;@PF&uf7|t+4D#;{{%gYiKevdT{_i27 z|NJcK`>&2f{y)HfG%7p(4_dna={uo+ef{SsT)i)K35Rn9#o-|DS;T|A7B2>EC<&pIXfh|Bpidy8k~B`40g91!4W?EY*Ke=wFZj z$07f};6EcA|5q*f|4HayfB)S{$bTUC9~RbsWHImjk1ysvu52G?`2G8Fp?}S|?_=CI1#(zUh{SShsq@~YE3r`CJQlwUOr=z+uGiHeis zuQ2>n{HDvr{LT759sM5x{P20ozx{Ij_)&5E{abkF{~(c9B~J_e>-s+v`Hysx zUaySVm|Ib1H#{&Og z%)L%I{&3Da{|jT}za;eEbDH8m7x|9|{@{`_{?gXo`5#`zyF zIRA?-;~ppHKe4(uf2TZt*ZWy`{-^z`7j){sAD$>r9Dj<*f4^Lvt}pek=l{<~|A9$h z9|-*qTJrykZ~yB4pOsbppNIS>fd8bh{)e`)lmE~AuKx!A@HoZalK-c`@5S|H?|&OQ z$jyGB^AxWC&s*~Uo6vu16;=P2ApbbpzW#A3@=pZ*v!s9T z>mQ*t?BxINzWuBFUnW=Qf0rTuN#H-!BlDl%)|)@HtNXlar{f%Iy_bak_4SX-k$+eYJ{~_d$ovQl3E0F&b$p8A9GXJ6Nyz@Ur)D@N2 zoi2Y_nE!hGe--ji3jS+C|9xwE^LNVQcfCJN{i_!Q^?_62iSoo9|C5Y=zg(TJFZHj- zzgMIG$-sZ_^0NFdS@Qpv(0{dA{{zUM1^;k8T{QonW&8)%ac{R%&(wOa2R;_xr~XfaC(097{}skR<GLQ?^)Xp|Gz^2 zdj4Y&`Og6VX`%m;CI7Dq{p<1nO~^kb_^%874_fm7pU}Ua|F{|X&vg9n=6;^a_5a}= z?BxGzLjQXFe+%+Y1^)Yl*Z(5x*x?T>QJ;UT@Bg_K`OgCXC1L%i82=ICz7l`Y zkH7ZoLjQXFe;e{o4gLcw%8q||Oa3Pi`q$&%JCJ`G;7Tk?i5|MmE{fc(>f{{rdXd;FWV3K{0CQZ&r^;+u%37RcTVJQ&54En_5FW$BLBJIKSR_h z#~(b``~IIY(XKz*@z;J+SpRzbdk^wY2mX^n{~1gEClUJBg9I@A9}*LUw%#?NSfOWqRZzaIbHkNh)$|Io_radP#aireY` zCNuS~cDJMc0(hc4as2U}?C|^d9~}Ao-~N}>=YO^E&+WYbFCn}Cr*|(q_y4Tn`~1Ig z{acU!AHe*d5%NDJ%>SyT{0|EAKQo2u|AvtNLdgGqqMzdOKhNZUg6LQM^>*X0{kE|G z)8qe#k$)!eUnKo|kN*?v+o}J_P5rmj|3%=R^2GVCG5*IlH#$qC{`L6(QS?7E_)in} zX>+_!{(0>^GM^<&uQ;t7yy7&37DJQl4 zRKEQ;u73`#s_uV!9QiK+{{`YW&G8qQ`lsSIUH*=+{`L9KQ^-Fn_|FLa$2PQ6|5FS7 zhnoJMM*d5|f0pQ{Iseh59sYNP{`L6(8RVZ0{FjCP3zqy(BlMqKP1XOi$bT95uL}KV zEct&==wFZjOUOSv_>Zne_5a@E|L8_`@_$;Pf8GB-hy0g=|KPQ<`LAJ1{@)k+*W>@^ zk$(>G-%tAYzW-&wlK+sjPhe{4f4|GoKByV%M94}|{p`2R)ZpA-C7g#N=D z+u@&1=wJ8$FCqVx;6EqyU$x}_L!o~?{(l+y=K}vd!uLPrEcu__xBs^HKbDbyZs4y9 z`Fl38lm9aa`StkkRpgHVf2>#5{|#E=pHaxK$3L$j|2)8-Bl*3@KXps|GYR?i@&9$? zpBMORB)|9ZFTJUq{GVCKuaAFkApd;8-@Aq^|7(``XA$!2{{KznpC9=1LjGi*9sgk= zzn=ei3;7oS{$U}1!4m(hLVn%j-w|Ed7s)IV?mJYt*3?*9oMVdwszWrgSe`uO)D`d=LUmo}&BpE>^RVW z|NS82Pk!v3|DE#qU2prP{B03Y@Bh>O)#eWWHSk1v;_|=F`1coO=W9#->-qoBF#oRw z{=6{%N@xP3QYZfYRazyaO!^$o~SrE{=z+W>R-yQ`@e6{|4qPO7y1u;@9n>Dld-A) z&xHOpe~bT{fuD+#^B=g^j(;h?{``aQ(ElyKUnJ_3<1aD(2gk_&=R*IQzs3Kpz)!`= z@nc7eVBj*1d;6EYE{}kiDK(woNzxcbI{``}c{4aoi$`e=r{rlU=f2n_c{p(ls-vj>3LjNgC{^u9^*Pnm!3-aFy z{?o*9it}G(>Oa`$eq0q7zS^)Rtbcv|?|0;13j9a6bdQtcAF||s0aO1i^?w)mr#x}| zJ@?z`|D^u)_0K=h|I*;UU+6!$mmU5Eh5q&UzmEKOga0H^r=0(O#(#z{ui|1#jeLi+c<{+Y1ke<4%@3QjO!ur?a|NoGGIq;tq z`mbB^zp$x)wNF8P;68YwJaP43{l!lGOa1Hd{{%mdd~d14zdZP_3jN1Zc8>px2>t8v ze*pRKhn*0)!F`^J^I!he+ka||>i-*I{p<1nM99Aa_>XPv-cND-c}xBmHTK`=0G#|E zf+xxo$6x%-+kfL#M*msrUyuJMLH{xEpA-78S@OS_(7zu4PmKHzfd3*SS5&YLk|K8*O*xq*f|HV!HD*;aZKL}5hC(i#s-P^yZXKH(? ze?9)69R05Z{(HBP_5WE*{+E#YZ;tAc{*}RhUg*DK$^Vk3{?(3l>i=PQqC9c+pZL?;f2ThEt|#@c$Ny8K|5d>Mu+V>W zA3ObjkI=s!|4)VdkAVN)o86Dood5V=-u?@Fxc94meYdawy|DiE_iQ^Cb?d`wa+i3mW^gkSMKD`X)uLG4yTYm=n-XHlpFfjYb zOGecEmmdF5hyGWC76yd=OP2gEE%pC|y8m+qmj(-$R9mN@y~?(Yd96Oos56T68~~S{@_}Qe`e%g6ZjKC{@{Lg@_%_D zf1$}g3-Yf8`~@L@!V>=qLjJ_s%6}O7*9QLJ_OkpRw8S5i@;CecS&@Go;7^kL-u-{w z690-q{=hoQ|7^&=F7OYL{NCrk@%`=8|4Kss!6yIg$iE)&hjx(Vf8G-R%0m9Wb(Q}) zkUtLmDItH&68|bf{(6&tPUK%7_=`gR*a3F(e^uZ7jn9A9=f5Lo1%ZHb{&OO{|8wwX zS^kH#6*o3;k~Z{=+-U__LP$ujbo-EMc}96`7>QE<=5|jS{VI5 z4g6`s6USd+_)A2)ru;t%{cHXf|IYwF6(`4^nb3}ZDZkGDMbZDWz#rM$y-qp)-if^V zGeook*^+JFicpjdpI63~}BzF8u`NK{BOQQc5ocy0$_Wtkeq~84fW90u=p?}Ta z;{Qe9r{d)N_f6)_-)TPkT~ErNT1D0WQt1CB;P2Vjy-qp)aL}7SOSJ2kw|)KJg#IPc3ze+Tx|9cIds66HJzxaq9erf(kHc|dp z!u;PH^1njnzxVa8;6Zly*A?c!9{;U~{I7%m-u-3yUt{{eJkf5a{T#L4AHx1m`(G9L zw*db=Ng02_lK=Hg{kPQr8{nVv#MOUjN;~5pWB;q8|1H6PR_K4wlK;5SfA7hv|62|D z-vs}|M4fW}lZ^lP0q%80)pe)K|1_=tHIRQR@Lv`BuUqoJzN!C~`hN@jQ=T~g1;&4; zKK-s|?0+rvzcu)e?c$!N9Dn>^JIDVGg#Pm@ShX<&s*}pq0oP7KK1<<>mh#v_-jJ`nkD{?g#5MU@o!z^e+Tlv z??74oCo|spKS;FOp3i>&{#%&;!ShxA$B}ni9F@_b4PjC{}9ox-+XUh|36{=*P8yfK>nS<|B%ps z_%Lt&_P9su?=4LIt3aINUlpDxPn`eY(RTQy{&O3u`riuuC&7Q}SXuq|oNR}GOQHY1 zqN@Kbk^f`xpE_8^AKJtF_*W#_HLZgQgx5doY2|+#&n`R{%HQ?}%PYoY(}YbyT}$p0z$47U_0#hc%hliGe8Q~xdX{~7qFJaP4(XZ%y~n=Y67 zA39h0-x2-q4*p9*|7lD96GH#-Clvn<$p1O`FA;Uh`5)TL`}iL@)V*IZ^*@oY{!0;c z{bOh3-vj(dj(3lf<1bqBzpbhNmiqq!{8OGd{^YTC`ah}v@;?6e z6YZMT|0Kft*XMtGA^+aszn}E)ef}57+R6VNP5rmj|JUH3^2F8uu%-I<@4qqs?e_ln zA7EdkK9#-yvuDUV|4s9p+I|n={CDXg)&K2{`M(e3e}&9{@AKb2OZmT(F#luEsQxd7 z{NFhFACdX*J>E|JPbTdD(hn>D`yv0n;J@btS^qy^$^Xtm|JA1d{gMA$@Sijs()30pg!>PM9}}uBRl?A*0eMJn|tX%&`%!{38?XJ^Zutp(Eksx6LP}* zAGDPJQwsCHuX+9VP~<-l@;@ic|Ei_@-_3Xax8479IPwpJ|C-Q$;KYw+v)$N5&Dm9q{cr-BL6|)zjvJM z_}6dA{~kjB`uhJ-$o~`g?>$?_U$j*J(+d4poBoeR{)55)u+V?mlK(x0{`K|WW03!6 z@Shj@uUYaR68g_>tm^+*wf8-21{r_G<|N8phamfD*_#YPfPo8Lpe>$Q6 z`u58I@yLHD_#Y7ZPh0Yz68hKIfBKRCSMVP{N0$FZOUM7|h5q9^D*q=S|6$<2F7#it z*o{ z{0|a!%K5Kf;LTq+&V5{Angufp>tDbB?+oNW3j7C8mDPWrCI1JQ`d0#+`u_`_C{LXK z+Rb+6|D^u)`~S{D|3`!Wq|pC>CI1IX{lBiRf1Qc^e>+KVt}OqH7kbx!f@s&Y{=>rh z*W>?lkpCF)KScWX9{&$p@}D;K-%|hofPcypSO2k#y#1ScrnZ;**W>?l(f_gFKa`c_ zfA86L_zx2L4=kqYKZpGPI{iOUr=0%+<3D(w`+lXocDj64Vg2jz|M|#&9QaQO{pT$C zKUn!64$KPC!|^LnnY8t1p#0g$-+{;sBfB&bX#4z&3z7eLXrUn9{*g7{3if^TFBpTiT^Mmzdruwk^e;CFOmG-$N#b= z{=-mq%kpE=hkDej( zU$n%3q>x|t|Cb~GDZt+^I`9t*`TH#KA1CD3{r}a- ze+KZ!FO~Tpu*847kYD%z*C79yz&{}5AGXBbFXY$#|Fy_}7Vy`F{JrPfss9s%{JQ_Y z4*Aap{=Uno{P*tvbC&o|^v$pC|9@@#_dnbK-+vXFWrE+_uH$j%znS0c_&?0|{Exc- zy*d9iGAj}YI8)#M!4ox4#qkF&w!<%-|I)|*>oNb&f&3pN^FQKw|3lSM{*M#pzyAKW z3y>cwJdo;lzfQ^d&oKUzV>JIcoA3N@%zx?e&mi*Wz<=O!s{ix$-@{!0Rb@8nKTb0B zuOf2le**ANdE)#JGyX>%Ts0{5ug8BkqyKZke?sWL-;)26h5iSd{r^qKKOy)ZBI=a$ zpUQjp|Dp5U>&i4QW*64K9{=8o{O5uHg3y22lK)do{VM@Z{ZHhKe+W;U{~^Y|sb^|? zsee8Gza9Ob5B`H!xaTRyAHU8!|Ec&*m!B&2-~9g9+mL@^=lC!5-*bsKe~}nhnDWmd ztbcv}Q$YR;z<-kT?|uH0x8y%->R$

VFdOPkG|Y3VJ>R*rl??V3e^ST4u>R|e|L_Iw{VL_P)8%ss>tB!m??L{Hz<=mU z_c*!yk6rKG|8>gacfHe1{i_#r>VGouPkG|_BbVCYm-^S^|NGGY#o#|B^q;ll{|ur3 z*d*%nKkr5UAox!cb;|iqGyY3NyMFV%ef_zG^{>bOL&%>8|3#tyiY5PNn)+|4|H;8W z<%#oOWc;^#8?C>k{`L6(LG*tK_zzzt>;I!S*y;by68aB(r{4eh0P;@({>ul+=D$Oi zdGkjublxzE!y?y<8h4rt;|4$+RmEgZD z^k22)|2$LwE%iSw_@_K^^`Bw3*0`nE#r; z#s74`PsPdk4`1P3|E8SO_ELU5|5-x+(*u9c#j^gdm*LM6?NVHwE}viMU-PRMa*qEq z06!Hc=Re2rcgo{;Jt@Eb{GaF1|BS#NInn(%#qn1e{^}U{UqI+z^SAh)3HYfvIsTq2 z?bN@2es%v_^ZI8Ce+hmMT_p3Lz1aKw$8TPDy8foZ@4wLB|M4Q`|IFY&mY4N^{fz${ z(Qc=l)Org_^S}A|KdND;|CdxoKMede!V|||XZ#0FbFVAP zYp2T>68hKIKVC)t*?>QNvn>DfS9$k;C8FIe}g}EsyhFF1Nr9!{`^<&b;|iK40z|isb^~Y zMTGp-CjXnrKNs+qh5n;g+u>i-H-F>)4}JaX8RWkT=0BoW%ksZx&<_9k!ubz<{pW4u z9{~P-lHdFKProJp3xxdo`bP!%uLk}K$?tvrW9S7tiX*$@0HqiT`pTzwZC5$bS>?=Y{;yTkPcj6+(X9|9_19Hv|8$kUwLI|4Jdh?*BhQ z{#$@Qe!VRJOP2Vr67uW*|5N0@75E28e((N2e5;-O9}x2E{{J)NzYX~7B)@n6pR&Y% zwUA%;|DPlO?ZDr6gDn4tEb(6>_uUtj?6(`4E8}jBKE#K|! zNclr6s{6mcL;ni_e~$3P@y8zU=C2X$w)6P?yGQ6>^Q#wh`u`~KQ*mwiC>|Am2n@EckGUt#!r?--l{KG`MetFy1Us~v2^Q#7(`d_QVTQjw?$P?&KY!!;zrO$P zXY{`~@W%`8b;|Ll9`err0is>g{jiL0|84v#0LT9lz)!`=@mCpsQ%-7oF~7_GZ@a^b zgjSRF|Gk^ox&9mWegC8K-{k)l^M6V3-*@%DuHWOv`5%1PJOArrl>f_0^S{Zj63fZ| z9^j|qFYr0&@ukU}XqyMEG|98szzdXY~NVIFpznsv&=2rnY{+9-RDo)OS z>`^=Z#r)0h|N0aCF9ZC6yJY?g41a=X*VO+CQvXf<7XQlvKNTnEKl+#*|5ASa{ZD_R z|K%M1Z)L~762o5@BmXg>f6d?Ge|g}i;^h3Nigx^q`J3)At zruDy~)PIw|#eWR=sW>_RiO22um-6e+KMnjeGTw8Je=7q25aEgAFEjk1d))KN)c;CC z|H$8nz~NsB_^CKK{`3=e{EPXU`9C50U)jn3?_~Xdjp0v?k^hyY{+s+N0UiIV06!Hc z=Rf(R9sg2(J^wK=`d=0Ji-aeRzryf`?;V@^UsdQ|^SAh44fv@zIsVL3cKkQ_$?tzm ze$e>-$J}fqq>(_|`TwNoe|6wb6P`H!VTQj%w5xW%_{VC#{WsqKq3{3u0>?jh!2K_S z!uwx>x7qQ3t?&C^+WfcVe=qo_JaPV0Put;_`q%eAPLBCs0RMp--TNtyKVixLbwdAo z{v(L|Yk>bD;qkx9_>bJ@zF)FXb}BLDi3 z|4E_$(sSPYA!5IB`OW?R+QR(Tiv@p67pkmi*sl>R;_(=laJ6;Ggou z)qmh+Z~vS}>Hkap>+%1b=>I|RA9-Bnf54Le+ok@S*T3dK{tdx@k*HJ7e}?g2BI-)& zy}8{w!ur?a|GAO>A@E-o`X9FB{|;0CYDYTtzY+MSJaPVq8UIaRqy1CrUypz1LH`ef z|NbXr_1}A^o&K-j+ka#Hqu>7-LH>=we@2-9*?qk4e~uFS)ifX06V|_;|DO-}9|8Y8 zPs;q~Ecw6F)V~to)c+>npYp`jf9@4K`S0IOno z{)~*jZpr_>{`rH>zSRB~LH;Lzzb@pD+-;}+@AJ*ysQ+N|{V$6m|C7K!_^ix-p5afF z+}ow{y3^&4`sNRe_|ML*>VGlhe+Kwd&%4LT9sfFwceK|#FXFF7xc_T}KhdlB7f1eQ zfj|60ck!QZ%D)8imw><2W&9Ti`O^z1|4SnObHHDIvAg{DoAUP{|MS4#|5A7HpCIJ# zU03;E3i)3E{+^e|hQCU*8!-HLqACB<$p0en=Uy2b{@${CyN39IaYBB5{c9QIe+l@9 zi8xJ?M4gZ1j`rCueg z{^gMW72q!raT@cFANr^)c_iYm8CZQ}{4;ce;$I&5%fO#}!`;*Wul$et=5LJu``%Ri zYWF$wKd-_3PcbID|05T&bN|O#!udb_`DgQ^|4o6vLd;Wg{wvJ#hh%Kr+;|0?8v=*{lR|HmT!b{(ufg|mhBuQqq`zYqLVo;d%}eeKNuNd4F5Q2tj! z|F41nVwd?ZMwGw~f57S^{`KeIt%&@af&Z9r{xie)?{{r_+NtDWccf13k8m8V?) zS7P$tk0U?pO7p+8iSoZ1=KmXz|B<)5EB~K}_}N>)r~1FjX^MYU+#Q8=>IM7-(Tsj`hN<9`uPW|kN6Kytv>&DP2}GS{Pzj3|MZ+#_rCvs zjIRG|D6D_&e;wq18~pdY(_Q|b2BCib!Rr6(Uv2Ev|JL9?KzQQnKfkh_`j`3-Hpjo~ zq5lf_uXdULXF;f+f3W(9|6;TL*G2wqz<)vLe~3B$C!ce#D?hQjt-F!1{o5V*9^XR*Lw06hC;@n0m`^%J|>x*MC;|HjDw9{3;bGXJlEP(S}*_5by+ zHg@WNJMd3=;_AO=fA8}@KQa1QSL#1@r#k=J6#c&s{s-RguKIr`;%9H+`M>`D^G%R{ zd+?tY-v3g1-MjzK5cie%i+=pIHxbsq_P-hOe*pgbKIkt0@0$8oyVR-w9l$^3iL3wU zs^0#`H#a&tAi`)c;Q4pYp`je{gkg|9)ch zv#zoKZP0%e{11K9UG@J##LwPxj{oZZ??+VrZ;kvrga0gXpC0%A_hPTN{}^#!oxkYE zU%StD{kQR}CY}6G0zVZe$Ddi#n}7VsM`wwYKe~eQza9GD1^8=(C$9dhYkBkMiTeso z_rhjE|C(O~;P~Ga_^CKK{`flH{HC1L_EP>#O!?md{qF|+apFErj=!+3H-DXIm*VPl z`Q}3ZnqR$;<9~PHr{d)J!*Or^PI>&UC*_ZLE-(c{p)-4Cy4t>{qnZ2 zzlG4h=2s0m{`UlaDo)OSZ3A!q_P9suZz+GN=|747_X7T)@c!4njlB7Xh;~i)!gqOx#ySado?#H(#uMwU&{=iAz*Z=awb=6KiQ|oQ(+kYE>i~oax zpNf;?4<_vR_s`!r{-uZ1_-{Y-e+cl$h1WmJ41b+ym-5=_^6h;4Z{u(Ae<<)%adQ5P zRXhHr{6j0M`#%pr|Aztppz!)<=womG>JRSo>YaL~*4tj_Km35o|1|O+0sOIH_c%HK z1%^LIv`cYyx_k#ye)U4m@h=1XRGb`t;1h5Eo$~ly&p*HF|C{5#gV6txz+WRgar_yE zzxPM?yzZFwt(i zPrrZft{OK;^|3t_?c(dyNjz#`2fWOpb{GSQ=>$fQWh9{Fp) zpXoCGFNFN@x0U~XqXT2AN2L#Bar`inEwduA>%JI^B?swn*T`(=YKT+$X*EqocW)A;HTo`=6@oed(VHV zml^dR{`nj8-|6gSM$uGS9Cx~`U z`FAztR{=Qre-iLhadP>eW%x}wsqMx5&H3Lm(f`T7Um!ej{1t{j_^W$fQCyua-%aYj z$**3>@qY^NQ*mq+@_|93X}KNa|sgeQ(a!|)Fg?fT_yUw?O@|HSKR z{F_7m(||wpn|q#e{Nb9n{}j<~JCEPL_cY~KFX-g|>A+9L$?>Nce!pCut}o@+-~W9s z`ac8si-aeRe~94^|L&ewopMs^?IrZD`BlS?|1*J~ij(6He&wD2RQ#sP#r)0hKRqA) zp9TDB!V|}zVE9W!yQcgpp@04T&le*9Ilv#OyXPs#UuXC;M7yT^dz_Q8pChONp0_+ zzwQ3#Jo-N$_$!1bj=%RX@BGjF`>*%sgHnLZ^8I}KZ{t_(JN18oQ~yMq9Dm^(Z+-?t z{NG~!=K0U1=>J0C@A=ccPC5SQx8D3&qFph#+HilV|0cg`$MJs=@KbSe`~wWXDJQkP znEy3({&P9{zZm$dgeQ(a{GGS|*kA5>MR9ey`~a!{Cck_Q9K+u!kKgsg z{LTEo68&ES{5irC$6samYec(#dE3`NQ0l+QuNrjxUkdzGoE(4Rd++>jk9)NKmh$WQ zp8@oL8SwZ1?OvxGf0^OW6YZMrhqTbY=2rnY{x1i9Do&0+{(~L=#{Acy|0{rhnDE5$ z7a9KeKkj*D>i?io^nWGrQ*mY8|4+bQ>oWe2g#48c6#tFL|1ksBFnViOh5XTv6#pRd{{sB^ zF5~}L$gln1g#5n(|8SS_es`kGxsX5fx#GVK`Tqd^!EL)M|GyCO>-@hR`Tqp|zFK$je<|eG`F{uU z|K<4aGX9#7U*~@T`Tqv~z*pVn|0^NC&i^}+{~zE_bQ%BGLVlh9cOn13z+dPx{%?f* z+W+0i{~z!NzwWO5|5nJa{ojN90k~5**=79S3Hi1Edy#(v;2-KT{_lnS+W&pXKOyjk zzUi*~|3S#F{ojxL69Ip!%lL#V+Ij(UkuID z3jFCV{QuRI{}JS$9QZR`#{Zis|D(u1 z1@M=(%Z{PxT7<6ocp|MmLUUqXJJ|4$rZ~Oee>yZB{xc^~*xKD%2|Hv=i_dnE$cE_(Ye@hPbeg8)rzk0a|;O7AFQ*mkF<=6MWmC*mSz#sTe=0EhScl`%vcJEhB_rRe-|C(O~;P}4|_^CKK|4D}5l#|-t zKY!c%AD&15*8_i&@Wk;4e)IMpnq_SKALiS?;&0afi^zW?@TZ74IsRdWzeu!8dF^!h z;imlRg`E5!1b!+`jz9IgxBpIg{H`bE*Y*Dr`o9VI!(sP4<@kejZ~ipVu3z5v^^Xwx z*ZitM$N$a1PsPdc_cQ$MagWyDV*cj)|6f7>w*Y^M@Wk=g8UDzu?s;XpAC8pzZ}O`E z9RIfhKNTm(pZ>!;|4lim?WO$s{qL`$|J#5+LwMr&iwu96XqV#Zboo(2|C(RDkmLV$ z;HTo`_+x+C@h{*Xx&K?w|2&QUr-SqV{w_QJ|975FGo`U!^Zs`||MMpDPY?W+F5~}C z$gk&r-a`HvfWK!F_kNnoe}5K6aqW5iwbk^m^Z#w+pAq=8UB*9wkYDG21^H(J{%V); zPblQq`Tq{`&kX#rNxLimClc}xHSd3Z7x`xa{#=*wPb}n5exdIFeh>M>z+dY!{z?4v zPvP{K@o|b@b)U}oXI6MB|Mj2i=Tvb0|L~{Y-+!oHX4HQi-{Y^zX8*7A|9$j7EBNo7 zth?%eQvd!N?|=MK`Tr34X9NCxm+?;~`NNzfX{VF5s_s8UK_*em(yC6#3@{{=Uh(EB~hw z@)w)$|N9L2Bfvk{W&Bh7=N}pW1e%|J_B!(4F(KUlFq_POftmm5C))KldKrK1qy5i+ zjU4~=@$Ylwp9lO0rjYTEAKCxSl4(r+t1zAMZvp&Mp1ARE^e;Q}e^USY`2QvPpBMZm zy3GHyLjU^nKfgf!JHda2s8i1W0OP-BcK5n6t&(Ge^{>Z2Um^c|;J?si{zInzTk8KV z@K1T-{D=RxQ~y%`di?hd`kx>CC#Q7JQ;y#>kEPpBC-vVv{(p`9cZ2^dQKuY#j`3e5 z+LdxQw>wr?|9brU9r7;#{)f8E|MaH*)sA$I|M!4@$`j|m=N~)uFZHj-|39Gr1;Kx4 zs_v@)8GQS1yZ`ljn1?C+8hrmDOiQ`W*{>O@6>R*rl zenYybZs|Ki|3(`EjbG4-!@v~&D_82nS7xcbjB{yX*QcRgeO z|DpdSz<;^R{4Xo@-yHw{i~Ns(|2k2poc{{rzi)2$e#Niv_Vve^*8c=QkKFI&n>pFK6ms1?uoW3jQfi9Dg+Mm+O6VW4#}m{>ktEPJaki;a~r(BR`t= zzv=#eBJ|$_YgW3<|MEirdi*~j@;?Ut2Z=i6{AW1-5%;8U1ee9pKuxPYC(L6L{BufoRu@t&{&dS?FK$s~2(n zKLPwyoSgp@!`}&uWF0AgHmlBmg6RKA;1AB@UZ))Y5W}A&+LbW3ZgYyzzvfqsIsTsl zekx9mKRBUx{^U8EzoGSFM`Beap|7U=o zij(6XWcW=vsqOvqH$MMhU@TUk*9DigY@BA+k?NVHwF3dh@4=c01*y);rCVUp4IH|MS34#mVuf7=9{#)8$hB*n7(VwCMi@ z;4cxLIR4;N-u@%=yXTcD|LH>inqLLr__QGQ)4mNo_CX?|W1EpAP-M1pFDo z6UQH)+S`AbXqV#Zbom)V|C(RDkmLVl;HTo`_+!&}^LNVQcRd0B$o<~~-zfi+p#P=d z{J$sUUZ)(t-?&F>{T1f**HUx-Ltp=z3Hg@>{%n`=$AtXxZ0a0)Kpl?()C7DgT_vzY_2dbQyoIDgRu^ zzcTRGyNrJgQ~tS;e-+@*N4qQk*EHpiApfesKip;fYnk%TgZ!%je|+KY^1rqz|Gdb* zI`9v48UH$_{PQ7yFYwp9jDKDK{3Gvw?^|4re`Y}bS0;q}KNgVXe}S3*=qK9sclJL1 z+Gk4Vf13QNNoW424E$7_-26xJMeqCn#*ch-mWcVA^M4DV|5t&(LU`i%OVfJKe-&fy zd1bm6&NB7C5c0nc{NWYd@EaEliAtX&A{wVn3-L&oZ${267Jv`E)91C!QdJ1 zcz*GYcf8{r6*MZ!*Dqa_m+t9){f=a2vitV;gPyLguB!jPs{7>~d9j>-`uwB+Y4H4C zPyP=jMUZ%=J^Uk&EzJ8bud@FB%g*QjZvK1l|Cr=omM2yHw-x!9)vr^z_59Q4U%L1I z57O)ZCj@_1Ql~2X`R5wfe?wx|DgJ9M*FT59C;vYs_+@db@F#r6_?_aE&9{!9uK)B? z=dSh`w69Ppk4T%g>($nb&CJZI{sq_{>qTyk2=Nw79Ibw1i$Zf!&U#sImQ209seqVKQ(0dk9Uectm9uz z@K=Wn|2n7mm+1J{5d8jwhO7S9JH>yLj(;t|pB^&&8=T@_s^gCm{Iwy&e}Z-V^!`8I z|2;&<|Fb>G=UiV;s=9T{(nR8%i>hwPrPtp@^2S^ z_xX=w_5A;q;4et>q{3fU;BQOp^7*vd&)dv@7k^Lwn*_fsP8I%G&G`8jtGLYSJI23S z&;RcT{%BadPF47QFE+0KqQtIQoHD(e`k4RU6a2C`RrqrX{Id9+%I)Ise*Rsn=l>4` z|Hu-1`A@vmIR7z;U8nfpZ8QH}{1AY)|NoKTm&K{de@TJgDNfmZ+xYSLcbuO8KN0*T zNuE^r11~eqzvn1%UCD5nmA}Vs{t-Vo((?ajf?pP=3V%U?-z*-hdN%O0_y3pa`9F?a z{|E%dc~arG8h5|+PkgC0OLOl3Z_x1{Pw;1k41dfi{u6Zk>j?h(kl{bcDgG06{Obw+ z;K9RH|0g@eAJg$~Ao#OGhW~9&@t>sQKY`$H3>p4YoZ>%O$A2QhA39{X>i_Ld@xM*S zA0zm4Lx%qyPVt|j<3EYuZw?v$xKsRZ*YTfB@P`i_uKG_n#s3Z+|Jw-u{E*=vb&5Z( z<3EMqZw(p#jZX0=bo_58_#=l6SN)GU#XqX!e+R)|7&82uoZ{c8k?IFWI?iBx+ zjz2;0M_)f&^}pFVe)j(VIvxLC_9XZJCD&&Z$iLG(%jVn7f9@}^{!i8Ozlr3(G-UZd)n@*?_rE7}{C_9;uSnLZD*tUo z{(Z~D`-&{DX65g%EJsqm*> zVZ8tM8#mgsoB!_bUv1O#znSDeF=Y9lbejLII{rsV{!@~5s>**;k^id1F6Pm0`vIHl zznlM*j(-cue|gCAztw5}fp~5G|AXXTmM2yI6R%vD_3t?U(|Z1sB>!H?d&*S!?bff; zdE0E}zx({l={o*@lKlIZ+dKZ16!}j}>^j9?u(|&IKZnnMvpW6>lK%UF%FUymv{sV!9S^swP@B1a>e}|s`Q%U|ktL@dl(>k_0f7)*T@%(?gj{jdI|24@v zRpq~+$bVpkm{+^Fao)`~*MB$vX&wJ*B>#ya%m0ki`~#8N`u{h{zbsFx{QF+DFzerL z{=57CnR@;wN&d@2mj7A1`N!|S?9}o9hvYvaS*NP}=M?#`OYGu0w%gv~bp4;L{hzDne;dhva?Nn%e}~=t zq+0(?MgCQJ zv^#D$|Jffy{x8wiB0!{xf^q!|xP_-T7xZ%|AHS*8iR)|FS%(>c4cL@&0cYpK6}n{0AO^ z{9mr;f0pDwJ!I?uY@7M-UjM&L$G;cJ|Hwvr^&fbxasFcxyQ=)E#y@Cz{mb9~{#LRG z^8494|A{=lFz)&qtPUoF#H~)D3<4PU>6G{F{l6^{*f8Xnj z_dm~=m{+IxKV*6Tqxnz%3-W)pj{gjj|N4;S|2(JphXiQr|4AhOvOKBspHt-DX`W^C z?dIS6Z^-|(dj8WS|H0$Mb*jQIi*L~KjLrOauYX*l<9{;Ae?qcORroyz8LxluCNZy0 z`6=35|7Fbo^*a8YB>&NU#c`_eJH=sl{`pSx5016guH73*J>N4w*9*j)dm#{mCL zI{vdr{&Pc?{|jyAKXMS@f47eRsU-i|SJE=?_U3c zz_jE4J|zG3E%xvyj#-%Xf1maIcfSAI{r$`L>-m2=!C$pm|4l{xHzfP2)4I6ZI{wb} zkJx`<|NnrF|6Ef4`5~+SOKjGEH~&5L{|u6US)Np%f67NMO#R!e>eZP>G(4w|E(cg|5@w# z@9cjeeE#KwI{xzs{=x=vo>c4KX&&v)zsxEA59#tg-!gaf5P$q4junR1b=bJ@W0b0{%-#7)bU?T@W=KWuKZtV6MuPc`2F9zbo`eP z{39n07yfrS#ecVs|57dgLx%qE;P;(8T=~DjDgKY>_^%@PQ$vRTMyL26)bZyC{_2q7&pXBckdFUqg1`Kn;i~_e zoZ|nej{h2hKmE4h!vAik_{%!}YYG0^kl}xiQ~VF>_^%`Q1E&mE{@?2q|HpLv*Ax7i zA;bSZr}#gvh4@E4ro|CEmZ zCW7B{(Qx6v*(v@{>-gVI@Rx@S|1D1OS9JXEA^5!)4_E$gb&CHpI{x<({K+B1f16YM zpVjfdkKp%RGFSUUbhz*rt>f>k z|L*fIkQi^T+H^ADNG!mNKA&%bo=hkgY2zi-#`?t0?c(o#|L<#h z{+~neHzavd;cp#lj6XCXt}Cbc|FF&cck%b+|G5OeEKU{v+$v-IPI1cS+r{7A|GuH; z-$(E_C3#Ze53V-GpBvEgulL)`e;0pG{`V*NWpS$T7Zvzr`Ex3_jUV^_nx6mXY5AAr zNrgYP#yJ1^QwOvDAF!K$#NU(u=M((0I92$)YmM3 zJ!Cikh`%TQFCq9xBypJ{rua|^Z#ms-)HmwZ}3Fp{LAhu%W#>M+qnNr?|X8-$y&H5Kz|9&mOFN;%E|M{44{>|pos-9i^-Oqo&)bsy3fy{@V%u(B;FG|9hO`|Gkd?g9Lwb$nf9m z6#pM|{2wCt^H&U4{_k^&|BpKUBEcVd=WyXKImQ1c9seB!e|yOAf7m*H_VYh{P|==$ zJCc0oT=*Zd ziQn@q!2gJj|2~30Ib`@hY7>8PAHe^pj=x0kSB4CK**gBt@xOch2M#dW@&6!l{Fhy) zQChdr@z+oA0+sLciLP3p=o3MS&3cM@m)3kDeIqqSo}TtKbYW` z#i`1FR)JrI!|u3U{N3+=wDtTSLhv^vc~ar8EAWTz64#Yo+&J&kHuK-b4~De$e<;B( zi&KR^I%8b_7;nE@yZF1`fBCnb|HBCWoFq>w{4E9kro^sOJ}Nfz-^C9BX!(CV!7qzb zg}*$zF!{HOzkC1hF+Kl>6a3-3#p_gsKe*i(e_mqOY5qTBGyh%uJ^4R^;Fraz!e3P2 zcZyRs-!^`{|M@>X{~?0ECCQTte?)QpLv~$7hRdwn#`O<+{pY*z{KLp2k3MqV$cVQ7 z-$3veY+nEIo?%@7rJKa-$}CQq-sk#Q|8FGtWpS$VU*BqsUlzYpxo!Md|9j~9e-pvq zwweEuBLC5Q2b2HL+s!}XhXiQ#|7L<;7N;uzBk6_7zg_&@^S{0H{J(|ZFG}*H!XH)P zzi%-4{{rN{HM0K`wNxfX>f|h5Z$~me>-0xbK21F0AECd0+1?k<|No)y{~sorsjJ0t zs_=J=FTnpEwt4;^JstN0|MTehA0YT^Lx%t3Ht~0_|2;*={}F;eaP4sA{}VRxclW=i z>i8cd`0GQ4|C2WHch~>Zbo>ty{MqY|+9v+)`hSLw zzfABqhYWwkCjM^zpQ+=2nBWiJFkJcnj7|LA{O_&f{}{oaA2R%(wTZu*f3J@J;{<=? z#^K8U=WOEd=Konb{!bA6?IFYed7JpV`G2;K|C0oNF+W`S|AI~Y-Td#PFFuUf}1z5oAKa{XsSa-Bw1 z|AC2xx&DRMf6T5oa{Y(J|3p3iVS+zq6Tfe#G5(UouGzR{dSA48{j+=h4-9M9f0hvZ zvN%=wPb%=s;&&>yi@$sS%ctl6D1zTpvbX=075EbpyH4?c$!7k$_#pr-|4RveS)8i; zHx}sruWkHz{r`D-{+AK_Wl5e?_={&6uYd1{#dYO0|5cm$@2>wB==fI<{7FfiD*XPl zjPVz59Sr_2JH_8q|3?%2vN%=vYv&o`cbaF}e5?3nc3ip3fXjf(fXjf(fXjf(z^=+b z<%53|KHspb;`QGSc%jWen}D_gZ2?;3p~3aL@>{7r|82AlLz{p$18oJ`2DCWeYU{^* zL7RX!3~d4047675yZXB~1C^q~{ooFmf2TP+1=Kf5djsqGL)5+>+Ay>UXfx0jpshgL zfOZ6M`k_rgTY$EK;}Bm0+Axlrj5`DRGI(K=cKG=f#k`DSoVVxpT?SkRTn1bQTn0=r z@cciE&l~oa$W=yPXLH_jxOvZm{(hWX<^Q=B^*8)Qj9=x)9d{X6L=1!>md2~;=V`ay zJ$YC}CFzDTj|_ytm%HwF&vlP^pU0AOT`eL8!VnAAf!pq$`@kY9NjH>vWFQQ_QZJ)* z@3y-q5A#@ZuB%1FKp0}l!1{Mvy8d@J9u`qax}nS?17Yyx9`|?8<38qn9!t)3wTKu9 zLoB=7@y^A|e$H7$CFzDTj|_ytR|B47bz8bFb~hg8vE*D=i->_R#)8kcyDfdLXLsWP z>%eVyD+a=V7S99ScK5svuv-?WuWg2c;D7`pNsE1tAjUKfa^bl_vCt5 zObmn}825TOdp&%2<6|+^q#KLNfXjf(fXjf(fXjf(fXjf(fXjf(fXhJt8OVT1_rBlm zdEd{?yPJ3I_paT4E(0zDyB`DOCmu%rBY<7oMDOF}#%UYf%-+{)aDCoH8RqkH?5Fo- z?V-Heg5Pf6;ven(6!sPNst)HX%)7(8I0J!wX#Itu-NoU$@LUEM27=F}^&f$j8FV{~ zh5_yP|Jb65#tp<}z-3@DFpzNg`Fk;7aAR;8a2b#=5ZtpfAUppry6ay;oGW%2a2aqJ za2aqJ7=8xa^Z((`p^Ly}px+F%+|U30rqs3PGO*|vke&Z075DcS9S}DlmjRanmjRan zmjRan(+tRt|84j9Z<<3_(PhA8z-7Q?z-3_A7?2(RV_Td(KR;|dxbeCSxD2=qxD2=q z>`n~Gj{jx%_`f@qfs55;z-7Q?z-3@JV?cKNuc*GCznk&o!gU#N8E_eJ8E_fcl^Bp6 z|Lbu4_qgxD*_G1mVsRO88E_eJ8E_fsFrXd(MeqMf!g1dZZ3z25`dmO1<=BTd39U=7 z%Ye&(&Or6q?(;M{8}45&11d-a%V0@Si%1_S0w6HhV5@Gw0AY z@UM|heUx|7e&cA`meRBxfz|`#G3W=T>39a(I?v!A$Tcm8_?#mv>(2Vwk>Fb zP#;-nqi0b2MQGdS(|+^QW*?D;<*{QgJA=5v5)#qWnC z6z>-ZIeh=H_c_jaKRXZ$T>?EUcFg!}eRZN>Uz$7vi^=Qnrr{9EN~ zSJMwT+&__z#B+D=eFS-MTbBWs0ha-n0ha-n0ha-n0ha-n0ha-n0ha-n0ha-n0ha-n z0ha-n0ha-n0ha-n0ha-n0ha-n0ha-n0ha-n0ha-n0ha-n0ha-n0hfV6Gmu#W-+x|C z+u9b|qTkG!Y#-&=dSPDp7*?-wEbXTvtUL&M1@P-#$&RDl-~=lV&d`2lCo6Akr~T+T zv`s+2YX|UTPNL(v(`j3qrfqNsZA%a@&g0tz=+~yGK0l8A+G=*Z#_?C$K*yseuzEP3 zZyQIO(`!lMPXNy&Z)5F*FQEO#X4)noZf}P6gP>oC(S9yPTa3?tB<+_@q-_D}AOZ6d zXH$7*DU3t@aDMnWDi5!sZ6!+E1k_6q;>vJwr?|c!>lX5e_OZ>Zpmwnzg?L(k6Xlh0 zRxbs5we?iq03J|31$a_N(edEo^MhrZ}F$ z5O0)=tHAM9fp}W5E>qCY%+mNXP*>;|TmM>?XOxF=y?~$q>m&+wj(R2VQ-V5ZNb=Nx zbyWkqel8CQ!0(l;-xkzw6!wAISv2k-te+9+V_evJx&1i7@!#V1DV&!&kJ?Y2!SWNt z^$dKVevQi;$}>>MHIC;3#tn)sSZ68VHw^ns0qnL;X5&En4Uk8X4_KcKs1GmaH_RP} z&`!4ne;M#!f_&z<{idsre?XmuCHr(3;;2C#h9TcL9oy0b;DoyJLyO}hiuk=?Kgg~B z4A?0^{<`+y4?omz0_v;aqpAcp-0o;H@%6^AP3svml2b{RDxZFyJV_ zz7_<3sF&i_y_Z`Ds8@sees2Bo*5^Y#}emEAZ{-;!gno=+_H45}aNX@{$5R zb6gxH;Hv`br#h7a~OE?0>7zK*f^uG&quj@`XP@a+`0`yKLtETAr3FpSqti<#>MBy`h$I* z=OcVPjjIHF;&=xAgMBaPjlk!&3h>bg(fKLJX9o6*68J@X*j9j_D93M*tJfU2U)D~d zelpxTE`hxY)Nc*ytOEOW80=Iye;AJ+KUbw7KX4vXfI17G338Ya27E23lQ8g+0s94R zT_?EwCS<%ooLyfjpIS!JqUgi zz<&nv-Qf1C64V3EZz2B>XA0Is2Ji&IUJi~2evUss=ocVQL8!wT>`N8yxRp7b;w}Ks z4dBxYaU{6UWhKDX06Z9X0@h&z>@^_2E!dwDP%nO{gB;kw`2{ZTUWmsF^%I5l6$E=x z@Q3rU%>jPwk6;}`-lE_)hx-HYg8D(=H3Rif0zW~h^B~qeOvrI{Py&BB*dKzh-cnE( zE#RlLg7V%1dkNTw3f%g^xUkJ_W9!rl$Bhi+H3P?0KkP#d@KfR9Mtcp&2lj(#2XJ{I zUL40Z1GunXg8eN4^ZkG)2mG}FR}1t;pe`$T90NmMsP7i;ry#FE9j1<>`2C#!5#YCg z{6k)IsK@0A)= z5O@kg9r>Ydy-@!ZE-o*`--7cU|AlOwU>q%Ozd?C|KTiT)GEiSpsHXy#mlV`j0`{vM z^wDl+2h=&VDcL>?^Kl-w71*aUQ`Alk_6aXnH>mH0`o})D6{rvFCqS=+=gYY7f;_>k zLqE5E3Wy8rhSBel5GU+I4X}%TYwKVf@)=CheglrfCH&k66B59G0oHwitD_(nXB6`0 zJ%!puzd_tzVSN_3a#odDXh~mBhxD&9RGAFbA;CyULuL7*lU>#TBI2-2nfgteJ0{g);DBcwC<%K#-K|U}(zD;cbo?yKs!2bx? zL;dI)u+Odg2CVx8%r8NGrC_~AfyW>mhr--COo4va4|m*80gf8zRo+PB$Ut6O+`6wo zz5219z;F)YM?VeN=PHuAMm@d_0^cR5uM*%1V_iZWRv@kn^c!3qqumzpG{W(UrNBFsYv;g@laJ=P!=L-0XA}>%^Dcn~efE+g;<4WzMxctC7%CT*6 z@*G^h8Hv()1&AB z3g}^+72F2^UxUMedeRo^DFgFLU=Q_Em=6&6;rO2dep+x`OW}SEdNtS&(N2!rM_Q1t zDB$q|KMlkS@)G1H$MJ=BQ{cY_^P;mfpS2KeQLnb0_FLcw~&Omlc zTgY=|TrBT<0Ioro0ha-nfq7;iEZO(wISkjG%Ye&(%Ye(kF3LdrWcPFQE}Gf}fmPne zt)~Sceiw6^+3eQQu9VW?zHUBurF^oQ=(K-T?yWJJ%rjYazO`KQ3`&+`Ug zo*d6bs-cGimX$J?u)O7%*h zUwo~(dAyy5q%L?pSwHnFwti~AX8ZiS*6)nRQNR5PHedcv%}<>K51t=Ch;y;EwI7XVEMPpNBC-r+q=hL>7#5su{&wr z3U{*d(#>pN6>sqcRKNTplko#QVC%m9sPQ`O#<9r$XuL?mmn6<)&{#jWukpCV>`3xdYy5e)i}l-IwC7(I zms5H02jX~&PqJ2znO}QSX?M? zPKoo6;|tv;r~Au8>%INKoB0Tv_l4$3=D+?yao$nivqL!Tdo0G!`r-)`GpZ4YN+1IuS7V9$=-xaVtL>#yc; zB_C$_$gXAk{f;;F4Ytk`e`5Pd?))VDI2{kc=YZ;+=5S%$p6|2vQLbw9Cizp@;l~48 z?Zv~}vD(i(+Zu0H?W2D5dgJ;D#OEgtjAya8wY;->@IOrFXYZlBHlRh^p?g`rGkdW4 z$#LU2uU~EWKI%WhU6+U+3&)RJ&EYSCKE_o(YJNU<#JKwknGDM(#>2OHxNpPD7i&Lo zGmEQe@_7aCwJ`5p=JHYeKXZEh;>oj_#g$sZ)_=eJlujHhF7Msu)(PUN$*x;~LiKfQ zyaCDiVC^8P7km?|@0FYn7T(J0VLWbY%s_NnoZoPotzX_s;d9pbj(vgEuYZN@^Y*cy zy`Nn-p$BNcD!Km=d63mdJ9gVd%v_vS?Ps4)?WPsa^Pt_(3#`S_g5w{~x7z0ZWX+#d z`@^CidDUQf2(6>`bI>9$L3nPaeyDgIhSv`^E{r2`px8f-J8jEHP#oS6izmtTc|Vo^ zvHJWt-}gVqcwg|HFWv`vJA6NXir8-JlVW?3Pl@HcT~)t!pxCc!9*zgD7;IkA54H`9 z=l9u*obgopr}6yUL)PjCamd>AmB#*L^Q_7%pJn}|?`8W|?S&6Fu7kv0?0EG=XLV;b zzWf_mKjnSczF9j~^{PK-@mifP)6Z|A@z;+tS9i6M{^Biv&0d|fzHM$^;4yQ0GJa5= zKhYfjfu~b`!jG8qn}_@3{>{exXOqU`7$>%&32XW|k8hL58s|F`wC2aZT%ymNFXrE6 zj&F?Df0c2ZjmucSo&#w=`C3+9JcIU&P3phQJ#XN9&^WHZG;0sz!!}Yj9!EX9ZT*Gf z_`)9@tY5qF4tieevlMr2l&;6*2~a0r6|c|e=UJWtiu1w1wXD8XJn4&QJc(Bs*Kc6E zIIrlhxYT$Y^<-^b^4wYw&Ifbf67$s_WBoQjAN{1B&yJ&=(G>3(8e(@uk*yl-WyNGFTpEer0lh$r+zAyYnq? z+-Z&1{N1d6F=EU^{)Mdm$d9-_0B+{Q>qo^$2A|(mDfVgH|15j;T>hE8dEKy6;`xy$ zviyf{p!|B5ih1tZgFo`1Uza?8$m`E{Kd89QSNx$loSvPmUixcdKIa>s%wHhK=2fOA zlgBJR&t9^qFY~**%VY5UyT-}J`D;j?mv+iuzqJ^}pS1Y>&DOZN_^if*`r)^jtB1&SH2%nsjd{qO zDUP@H4&!+k54Jh@e9?gKNueCuy2a;hn|*pdt^7B0d|{m4zf=9ppDF(Id14-tPf@H7 z?t6!5-)dV?`QZ$DIeq`5*6{m2Db|neDdvH5uk04SDYoPLw%D)IphCg(2C+Y!mbqAw zM^v=gM$Z%54;@71iHF4N&#Jrn6RhzUm}29K{F|NMhJNWjDz9_;p8vA?bK;`S)cn_DZ*#V50m@_dcO zjq-lA#cx@&UoQ0rSN2?LrvWYE37sdlpZP1T>zrg9=d0R;FoOS`NVippKr6rSj!jA&n*|nSO29wduUhH2D$w5`cZfvM8fR*Ab10P>ib_n zc__ZvTt0$pSw0hITjQ}Ev!*YDnU#Fs*ZUFHez8I8F7Pq7{$zFsB~STT-umq)vV-QY zc{y#XZ)bV1>d#we`3gnM)km^H{WcZ)t!c_f?&S&kYa5pX9hb&v%KV<%WHu1^q*_CI1#qyQ^m$`K_$KUtZ ze0dIF?atBPO$441V?JBl^KnV;eTY@BF^{Fk#p5M-?qt4cF3uVsH>&>>$7?puy3OzV zmiK4^h=EEmX9a! zQfvDBd{sYmI<+7EGh3f6u0O}l{VbpSc!7H#2S2XrCp;`}Z=Uw^s<>2!2Q_}RF&~!Q zUeafK5J2Ig!PpI(ykC>Ml+CMUUMx;1-Ne>4PWN!{F^OE(pSUV3`onMPLTmB(9-%n> z+pNt)KCrF7*4cct!?zX5`@wjrv$|@mqFYH8vllvm>X*3RgORaN==1k)3haa zvHMc=;=!!f)`j-$Hs8a>$K&sJzrNl$&g_wt*V;}ozs*lLi??p_d&@zH!z}*L8^rPA z{PL^BhQ}FSyuZ?sti1$0KiHOBe@eZH)kk|V$#t;6bJ={P z6wf)Ky?(dV!`V3cZNK04%G~pY8SZzhaxHNl_&B`WdvE#i))&m#!Fe^s`z$i2vi34t z*!o2~d|Sz~^HT7>wZxdY`Dia>^7%5kNx%Z&U;%P|s>CDQ(a6Z28;)B8vp9~ZAbr@Z78 z?+x`R&PSa3_kP&iI%>oF^eZOyt;Ut>(|xcCcbv|ed>(_3H)HbpQts8X?viWF@yPpG zto?Fq*TSRXIXWfYKUDK%mZTnZ#)=p z>Al8$pq|+_vXk1Yy?Ze6W-Hd#Me&37@D&_>pE1DwK6K-^^!QbW>rVc+8RH25jy>Lm ze`61aDsSb(jPvA^e6J?@4&!+$zgEZFmr_3b7T@n*;lA%^)i3IY@I9|rh;dggpz{37 z+3|Xa?V~+x!`%DzQO>tT#rbOGVp>l=cz8*FI$} zzP7{P9q_%&c->*%YZi}3I8WBLXUzGP&EM7JrL=M0t80zNc|QD6s^8>}E5ToDXv1Io;~xG;g^kwcGfwIs0=AfuOLNo!{`9tP7amlzm@N=5UeA!)LL4 zWNK{RY4~C8e6R)md5EJ9zlVqYezny;|8BWw)|kJ3#ckG3 z>o{7!%`=?wZ`L2`MI_&U!tq_Lt$d3;?#S@vxa)Q@J*V=}FU-Yb)=$df`C#^Tx(>3- zEbgDD8td2L{hoZ>4fx$RUOue-h{Nj@o@js8d-z)8e8~6>O_zV z+ABQ>`)Y#rW0L#KnYXb1gHNRKCf>)&&Bn1%dI81rDot)Z@Ns%3*u46=Jcqd7Bdss+ zdvE#pRsERaeQT=uvhn8k+4>IOWUp?jKVbRi{ng*d`r*gz_9OR*?fM+P|B;U;IcdCq z@%oFUALHJaDvPUj)o|jAJV5I%vqD@4Ud8tsJYTj~?=l`$@?2XSr)nOKN4f7Ig}-Sy}2kL*9$IKpwZ@6fz@`X|ltr8dNBOHO8$a zC7(67PWx-uk6+z2&YnjyI4o9_RgG-}h5vzo=)mO-Jm-W7SWN z`~4}i^Hbb)9<%exeZJoiwfS7P*?9Y<*ZLRK$+_%0>X-dN*-5N6uJ7>s={{0}=hy?M zu=*LUk8!r)J=N{2jO#qZU2ltBZLE*>{c!yW``ET6#}ORwcbj@p9B&MM$HlI{;AyPg z+&n#x5qS>l*KYi>dDR(f_M;!Mx1Pd^mZQyQe_~zK->Lw4*HK$Hw zkLPpdnH1FDWsc9_)h7LM@2@Lv5!+9heE(SC!#^MtV$lA8Y zn0MJctMcL+YwIMo)|!6H;`i68pJZ{@eirb-e14_!4KKXcfaF6d$Av}b&v90t&M!n9L}KR z{TuZ=%+0sTTksNE4;k(`zJ|r`9b5IAJ7{s$VE}$VF1x|r`bPXA$@8KmlkZN#z*2aDq?93z%z$HZ~9CHhX|lg$rs?@g*& z{9UM2+T^-;#9H1HitF+t7JpYmhM$*v?h@yP*HiXyHpz>^Q2pg>{Zzlha?Gk%gIFXH8#bXHfE#4SYfkfrM{11o#9C7kA#_{Sk~G+w9TKaOAn?+oC4V2hsn?P4@f; zB+p}Z?MnU#D9#7d2ic2-i4V zFK)6nPsU&7277iY{}9iMoh+97UPtSq_5ya?e}TBZYV-7bii{Vl@}$Y*ipp;KA(o%W zB6~l#Dt^^?@jPxHfcs^tc{tu&$L=o~#d#FYGuxJGtbNryujG5KX|AsQt6AJCyJp85 z3w&RpbSlMFd^%gVviK7we{ZG?zc<6%Nqx_pAAa7j_Y>Urws<_5bF9@ZKOg(ir%*e2 zo8NOqJ9gV*$Xb45M_SWwz0e#_1$e)#T^xZu?5%eXJkM{}Z@=bM;k|U;K7XGp^HO78 zlCL)&w~NoGc&|l{dml&YeDUWJyZ&)r<(I78+V`#1FWTYT+H!Msjq~!~X5(n=a2ALE zJZJMUu70&4c#jp@D~uS&=U3#R4f8YCQl35MTdPygMb`3zaSvNtc$C&vLvkNchNtlX zd;Fw6B%T-ktXMAdkMdB#-aMSY*xI_y<51slNX`eX+HZVyVe%47Q@^$6m|O2ThrgeV zyu{%B-@XAq_lN!l)yCenFnQ}Yp2m;awd8u)q&k72CjB9sq zvoE4~^Gfy!}~yGaeevz&DNp+K(U?-U+WI4pZTtFoyz9hl?NSO|FrAZ z>b%(N7FYdb9KO#rVe)-Oez-m%(Tdt{?=LZPyOL>(0p07AAtA01pZ+TU-fhB{)qk(?=;R!fSs4;`n;c(VjT5Tzhmv9+|PZE zLV4>HXME=mXZcA0ezY%Zs}QGeTpX`#UhFm2^nD3&9%S|dhq8F`CV%%W^fek+^$~G= z(F?@#^rK?AEIyQ{zHM(F&NthZY`(XmbT_Rl|6cauEFZw;!EC%{^&;H)ooZf;+rQFq zKG-ga^)is!vC{ydxyVt>Bc*hV&PmETa z8T2tOzRkmNrTGxc1FtvezW;P<{%Z>T7X02!!Q%TkVjr^>2hU4H^4xSF&F*9TJnZK_ zNc9r;&^&uzOxx;B#`RIXkB(PBAMIhAfcI(m?stX{?Wx)p_kEc30{sq5Me+TJ%pc~5 z4;f#{rP%rW(vAz69#dz8heY7{I zwkrAl1Ntj}QyedjW1BJgUS`yH+7{rw?6Jq${X%88JYo({^c-#-sSLw-;V^1H^+y_4 z={M&5nKW-(Ed|$&Y9`O;tU5|x!{Q7{&fBfpwW{BioQGzg$i|nQVf*OEdy2Js!g<){ zCC~8&juZRCd3>9(sL#)zuYT=3XMD|9oP+Wc`2o#qc}$$&5InDK)_>)0y6@B#-*Yu< z&#IpPUVHl<`th7i>mmCJ%11EK=lYPmw=rPyI$PtN#_=RyZaj`S%SB_o*5fRXp2NhS z2Yh!L+d+SerHy`<#bq@v{{iB4qO#M<(0P&bp@sWV1?c1a_B&boZEhU(7OG9+^Ktjl zIDL})TNqz;8H)$yR@=xm*78=tIITKzsGo;C%gkiB^TFuT2eW<>pJDm(9X%L7GMvLE z4{`738n*cR9dE?sb++bH+`6*DefD+Y<0#rleUk2%vF*lssBg9P|H3$5X?PDrb{o5Y zSoKr9!`XbR{&p4p68v6n=H;{wBImMo5QNXAJl@thRL}QwtuLj^2)x};*!}xdG$1V_1L(@TD_saVQZ^? z%D2BodCJ}?UI)3msJy%v5}m?<5uGeXtJ}$p1 zdj(H_dGtTY8c%7-dxR>P{?@;Whuv-5|9^{<-~3x>J+`0?!|zK)-fCQ@ZN>PY@|(Fr zTvdn(&7j&K0-(#)*Yp*oME%S%+9?Wd>=>a+2(L2zhzD@DET~$arUdtD(+M9ewtTWs|W9Qt?5@l zKRRnKe|)@rzqqe4|G_dFZ;X46pSRbqe&U(n7vAI8FT4G+)8LLP{j!U8D$k?%Q-2Zf z>!`=KX*hpGc@3Tqsb0tC5yywE^`9Z;BPaPCQN-8$yLcXsJ8g@9VC@J0(qF!tMSJT% z^A+Rujkp`HG8b>_jp8_3SD5pI{`%ck*4Xpk+CuTPB=75qaNo;Hlx&M zzonnE`yIwvwfOtWIB&k%$`#_c=gWV;{P=&(;>i4l?el&Lzc(J|_1(Uhf#l7`JXT-9 zu9xJ8#ru}ndjF*P*RXN$mcuV(<7yvhtk2KKezk1ON9Kcr*>`Jgd+|0d;o?zz&#ErD zZie{zHe~XAuyO{Cqx>CfIFj7?WBm(a{%hQM03WC4_hP?gi|@%zd|&LJ_vf_V+A5A0 z?KTf#>$xj8`FotGzgS!U55+v!9x~=dh9|W{Y!CHIigkf{*hbF~^N-_|GwFCN&aFRG zaM(s-_IPmUw(rw}w;SgL9kzemAG|3zUKKxW&M*4!R~x<6xNgk)3GPYjD)U*&OC{)x zpSI%t1XUl6yO1C^1<2*aIe;I2( zDEU1Sr+!rPqf5=@J@k5Wdg#w1dGBrVjbc0br;6piH&J?}j8kwK#ZfzIw26c;Wn>uNR-+KVq+*asFay>wh-K zbM)1N!CNk{>n2!Y`!b%2Pce?C{Wo*Cc>ASiu=4`v82iEbm5@0-)b}4`O+R+;avfpVQ9Md!kEw8pq4Wm4fp@UXK09$60%RI3L7u zS)07T+;QIr=Yv&v--Nfp`jgpL$vt1B`OHer2TOi&zEyV3j%VL$j3W%+TlG9@tY_9= z`A_WrP`Sg{ZWGQIqR%zfGwa{3US4wlnzz^H>X0Aj`;|WZ&IxaKzWcEcnafYb;`4dY z7Onpv{7yos#rpAljnAW(VcjH_ymQd-#*3rC~-cvg;yEJg?jDV#r|-dZ+(jIN#&0-_c@NYi~Rt6uNwPi+u(KP z@bdP8-=z6T9Au3Lw3Cp$cL&E+t?yjcZ;ShVfX4kSpScIvK5xJ9pm@A~pS3#V?Jjgb zwVxPQzvBwqyl&ij-eBU3{EDsX_Rqw5^qn{u|0;ex`^=Bu3&s& z_wMDPFT>x0@yzp#_c{OX>3C&YobLwrd94&+>zVf-;;!5JQmp^_R(tiIhB$eDcKd}J z*|=18QjbvmwBq+}WOmX8mfzq%t@)SP<>j@{uzm{fX8XMUV(%xuY%TuwbFAsh@aGlJ zcgp6Ol}G=N&3{sIf6lBut9s2g>t8m%e53Jt=jVlkRKF;@fA+HemF)VhK9TKv|G@TTaafh-_G0rBegf@R;rVRdUS>UwqZwuA z@p^newNb2JxYQhPO)gH}zS({Oo(s?X$eiEcxH#_cyR79S3g3@Nm&Eo0|6=VW9lk#? ze~CGKJa4%di1#60FI=Veo1A`blh|()ewUWFqwL#!?@a4QET2k0^Q2JY-n&}mjw>VM z{f)bHr#K%7Hv_*joH$=xm#Am94L`=l?|%o|H*2R~dQqFd50$vfn74k#C$rOjz?}b@ zV zA3uWJ{Z_mFtr@o?|C2*dlzmGd}-%CXk+S=vtZb2hIRRNh1L=zA}1 zqws#B6!f|9y4|W|JbVg`CwR>K<{^EcIo`7GHn-m*&mE@rTZ&c}hHujR)tC zNY3wk&k*b9PZi6%_P9R^r-}8`eR{8U_A;@3E{sLfjVbPr_-Vk}SfIOWp^ zarxl)>1FNRo_RaiPeWYT&w$^+hgtkMj;;SC zbiD9I>aQX>pUpo`^H>9YoNu-DUTGYUReNUjONSc!4V-F??-B036?_~a?tV@48tT9F zZPriX<7_?hcCep5!+4#c9^W?pY0f@B&urg&syMCy_d6r?y^Z4tr>C;B(Bsvo()#e9&EiqTRosK}6@DshL!Y4dqYoL^JK7EYSDZf_x7vn3 zM&pRCGw0u|{bHZ(ne~f$8I$LOs2`M^4@S1J^_{nQy$JpAZR)4y>c{shn)k*AHXh!d z)4m7ZbJTdyTwLfc^pG`uoM*Ldd(G8p$maXO^Xb9zYZdQe*Uv09mk-1dTxP8Af5;mD zr9ZO!VL|fzV&Ds`9>ybUBY(3Nhs=&udG0CZ{6=0v^&*neogXxiY)Got|;lDT?rbDw`?enTg)dEoWRlIIyx z|EBA;&HcVGKfmAoXx7|5k()HeWi_r$&K&Pn?ehA`Pdkgdd>~sdy#3fuS^GKeea)$J z*>Qfp|0rV~%Bzk2^Y*+Je=j8XadY|S{g~~yUt}$QwA=iTF>k0h=r#+_tMGm*uQi7& zc?!kRKFpjx@5gLEcLvK>coo}M*=d1(0-i6&GR~)L-a^ZBv*J3d{L37F3mv~%|MhFd zIL*#i>E*{4IbRPBHok`Bx}1u)evels+0QGr_tCru-p}Sg1O3!iRv+W3bNZz##CoVd zuvT$@#jM}ruUY(N=Pi_8E9InqIREt|YgB;z5*-FK4d1%fo5Aa`B3sCa*28?GA_ z!{+eF{G;3>dmaK6hOAA&`#5q3EX?|B!TlktwAJpV_1!+g+UJJyr>yB)jcc*#=k~Xk z*RbUM;#TqHpUtkj@*61s#f!yxsKW0F@P0g(iuFrAv7DdZ?|$9nb)|m$?YF)BC)wjf zdZ)d5=~rBVEo{B0>;~cYHPi357k7gDKCj9jKOX*wIltLIQd}+258SXYb&K)0cT)ew zkFfd2akFjsuVNgfs#uP8eN}6DPQ&xKIA7KJzQN)Oz1lb)w3n8=54NQEy_x(?V*Ax^ zTf>QQ413!+P0UBRPw(x_Z#U-E8x;Fj@!I5mZ#Ta}yuMrTJV|nt9k1+R9GA*Jj)#6| zFMgb_YIE@Wf~D`V>qIrr>Uid6ilel#KfGA=Z&yF}eQ~_uo5gawesEqyas9Zq7wgwA zc|H^Ec`d#V9Oo_C_Bv;En)to5_2j*n$s?|YHMS3zl$x<`d4_(T20(iVQaxZ;lW`S&vX5o3JG=ZVLg z*Bj@X&tG_@HGO`5;7qpO_;IKGLXlnXPVM3RQpKFzCigoD(VvKUN4v7tljtu`!S6ZC zn=H;j$;gW5qP=VH)f#n33K^sbMNOjwmNsTWbyN6`UP~| z)qY0f3tdjz9JJ^md<7eSem{1-=DBg4hi&4=?0l3*@36KWvfT4zVea~I?LXG+VI0^t zB=4mtUT(ZzniDKO5BHusv~RWzN#1)~I+^mGy2&^m^b^A49STgg={K|a#c9!hIO7-X zV4L6D91hg)R~v)(tNH#Y#@R1FgSL}}-2mg zxL*71M`h1*%;Jbc73Z!tp8uG=_0ztS&6npMwqJ&R8lEpJa_5gJc;7+!GwqUZ}jg}?!VofeXq&iU8+1m><{DVSL?mP zct7O*G=E}Fzb3g~oc*u4`Mh7g-#A*l|K^@)E)TrDLHApd@B5a&Px)vh29xg$d>_^K ziow|LH*dj{Y5x3hJ~qPrp0-!=9+JYF?BzXnDxK$jwYB*fct1?P@wZKW{^0%QOw|A&FQhytCHIASeb0;7yx@5DYOx&0vCZBhu5%p6Htq2G3);cfbA+hP zJ(v2FHxKu{lC0!;!a?yLJd3S^Qfgu9QHrn6&tpja%=19`a<-m$_a(`5N1+!x%+C_K z@5i7;za_4Za%??EvBwcVysssiGmfX=W$O#=VH-Wucs}Y`Z9NYe^UK@w9>>N}{2%T6 z*RgVb9^bElzUO*t{&_o2`?>!U$6a#zd?8l{PUDo#kG_YEKlL)U{$%qK&k^gj){Eud zV~y)m<|kO8_ClYbZFCPBZxi}BFMK~+2l>y6<3Rnz+ScoAKKdPJQ}Vu#JiT%mYCoKLBtjx~tA}{Y?*Q@ViY=5D6 zsL#{))2i^kPsCZ;&)RXIDf!(uv{x%wt6!Wq?5%h2!Qd`i+z*h)^m1!?%|)!~r+>(P zo^Zo%SOesQm)8Xs^xnQI2i&gu%vzeipi|OMag+mE`iu z1sdkw>%t8??goD2aQ&G4zIpET#yDj_>hQgj>^IEKk14+I)b&#{uDcNYUJ>dizGA3U;mM>`05IQ8wE9UMnHVa|@G|7@I0+BE04_GGc&BIoyHGWUocJ2)QSuoQCm*=k(KbmChY}hu9me5X!(?>f|PLBFfjtA7w zaQbf{0qlc8kQT?$PC{a*%Gr4*vUqEIn?+%Hx;MkrO-1 zm#mvBC;FNXU4O;OH7nOIkFQ>`J`!KMX4OeFCKBh$lb5eu5nr`-&C&FK9SB|dvb7tI zTD80jpeyg_>w{gnW-h+INB^jmM<2a>-TL^FRV$BPvwHa&Iu?(wJ$~8puUNHq$@=(-#2lDpzShEeLczfl6C7ty;FMR2Or)u&?7(e5Js-~ook53 zL*>1OdgX^7rW>O6SMcEwT$*`J-fKnU6Xi@eJ@Q`bntmtFISzW{jDsFIM`z*_+r}ohZyJwp8&A*D%8kd5j>Y0jj#`OJ2?{#iQ?Odr^mV5f@`)>#ky@uC zdft1bz=LLh6%)KYd0)MIN?Nvj>B`khRvmsAk>kFH#~YxhE63vj$_bxqHY|-tm#kkJ>D{rq z`;X>g!|I;>1onq@k+sL`%euo)XWyWKA^lK4opr$!5Y$6wptm4;>V(tpIdZ$GozE+wr`zdUz4YjqXPNH$CseDU}tjbjLxxI8|sa-gG->F+P-Z}WPc_#I!4)K?QBn_g!a=tf$Dx|r$%SSCMM?i zot+ZLIXfk@e?||{y8Ve6BJUE-$a{!p)Q<7#&16<@erL9C6w0@5pA^bx7(;qIGt2~CzFnff zopIcwFR?Q^IXN|k%d4l(M^mZEo$=A>Ei-KWZzOe+I{5H8b=Z*~dWcxw*=t!l@%Y%} z_~>+eY;-I+-s5+y6A+l`l~0b&%uH=p5u3HYTL~0=(gE-iuF4- zE76~vp4r&7r1LhW$#FYj;?d+dpzCiM+cG{oiwEEyd9S#~&ZaX)r#HvPHq#X7`s2y? z^!V)d>1`ckJ@WMU*klJ2i)&ny<2KV{Uz6{U=Cvs@ zaZ-%a<1;fo`V8D2xn^W^W2dMH03FxniER^b&=JVz9xtf=T>hzi6I3E^e-l*V9QnbA zgjhZ|r^cY-Soy?EZ=|}NiJ6IQo8vPRTRI8jd80lGesk8jgb-ucJK$^JhLAIKOv$u2oF7}GvG>hh_Lr;>e-EZ{S>P<44c zzIA--SZZf{EJ-GC@~z~^-x=WKDV)H`33+qv%*=Mx8T&-OO=O2KJvJ(|GmYw;o#|~j zp*J34M{J*daG!%~vqat_X8i8x86ZddorLu1sm&9UXmU|Jnp_l*CKtuiu`h^cO1s)9h<|EY3ukWpM6P{?n}dtUNjO5e zcHk80YabHl$VtwKx==3ULCdj-2Td;GL6eK}lBPt=iHFFAdC}yeyl8S!Jeph-k9Lq0 z;nn2C@tk-%@AjB8>wv~dFOTU~v^v4-Y|Le$9(k|zUVS3h!|c&#Xkg_+ z{oW{h?K3nGJ3ZI;dI0pu8OJ?x#z6tBCleCgWN(N)W1 zow_1dv*OE7Sh6aBvFqHGaP|gEGIS;H?-V3ZF@2o@tE=?}N1@bxZ!;0=rq;8*0B+7Zb z^13DKh}akMK;%Lmh+N~LcSWLKO+JSQa#F`vbVt7cw>@bNm%$H_I6u%}H#jnXl@gIJeIR1`YkQbEm zxTu}ExKJ+A7v)9M7va+6B3znW!v$m7L5b|c%a;oG6Ogm8di0s_yK*j^u6*5wqqMDF zJ4_Ob+I>=Dzq3yH^$v28-;Tb(FOduV61mW?a2*l9nw&EfCpV#wUb#-Y0~bI+cU_uR9O z$7i>1Bd6d~)8rcDj`ShA{f?a6)H-8)auTH)-mxiigLEtT-y}J)-!!p(YiCgVn7RDu zR{e~WY3X3_Sj>j^_nOALwk+|@5`V(@FFVT zgPIxP{{}hpGBdbdHpje{u9IDqoh zOT==tKf>{k`h1;WUGer&F4Nx&CSW|M|2X_ZImW}=3IAlzPCfH}(_h_7C`bPNFahs` zX;)Cmf8(QEJgD#EgbpE7w4765Pm8Yl>qqaFYL)B(ydo&%uZ^y?CA zVs!b|nRw5TF7ITtJA(GHZs}?t>FygSe*%XW<#ZRDtN$d>e=*s&d;e*0>2)x?t};3{ zHIo$FuNj@})K;8cMc3mWCHH-jlW4O?PHsLPB9V*q$HpfnHy?TkBwn|pUG&DgO4{)Y z<3u@iF;`Bn4GH8OAG&-zP0ok~c!_-L!2BPOqI#EhAt(&PfU0$xS4WsNQ2|Qo;k3qvIa?G{Hb9FQ1$DNm?i{(4)@; z+AHr3XpS5L>XqwHoAvTGNgq&~6DN6oO!(Z?jCRKaKd$ufgZE*np*h#*>1BJO&)tXW z+($TkB$z&;_i7{gd(|q-T+Fc}T0nPCc-4 z{XUddYod4+!I1JswuB$3t#bG2vkRy>cxap!baD?)n z`-56AOhCwIue^sJM!)Ai9V^%QVdXkMtX$_uTg}=SUq6hzCmvR==Zlr=@vw3|9#*c$ z)2Z&>fPf!XP686kyY~}0eeFI-r*1iUcO8)@WKJWGp^*pmX6OSPpx-O+trJGxQzwkP zr%o7oPn|IGo;uNjO-@g3qYr6x>S}a$YU{*Ue0F?>JU~EFMn3iR%E{-#a&!*y3hPn=zOryTS+b$KVIE-qc(iAf;u#3Yb+V(QAZ9ZnQa zSI)(w%h`BzIUA2IXXDZ3Y&^Y-l;I6`6E2>ve&?}^9^Sh8Y&^O?8;>q$VKwY`E!|CA&(+63MlIL~@NFPEM-56OKSG z@o4IuK)Lvdyc3Q?+PwR@97`CR@fpL6YNaxI)5J8+!`u59V{ zK|c3-(bN{<^=)!_@8BS4GxmvGc->5si}ZUhNA<=jxsJzNregH9?^oglI~^A}wCI<0 zd-OHAeqV{z?_TcZ^hMVvsU2<2Y5)G8z4HKftSg&E3wA{MidC35(^rAQDfzQPG)9r&g9I_ zWcTO0@AH3_=Lxwx_jA8fesg}OpA*uFJZ>4R>IA=$$1{CC@_fP6zD+3PcXQP7YSh6% z8NclS`i$Mbx$NAF=}cgReOl@W`*e&W?9)+*vIj{-*@IDtvInCe9S@A+gXCuI)h#Q} zpTCbLxNl`@pUVsFb9q&_`1drf+%(;A3G0JB5Q?$~Ld*8b#)~4Cucf?xNlp)7{6@+ zWA=#t3?0s&jeqtwYi{2b=#2h!+MqzWodV@{3Y6O^&}F-SxAwYoshl(MOzl+8IXfM& zU^?sQ#_u^hDlt3BaD9@Qvr|AbI{pUSxwP3e%Yz*=o8#x>0UqbXIUeW4c{_|i*uM7s zwf;Tu!GafQ_hX8*`!UVhH~43&gWeDR<8~S_ZjY$X1)C!Ke{*1`wwl!s?9^7=PHn~Q z)K)Y0Ez|Qv5dCcYV4sg4?DO$&+2r3$MEI}^Wju;8J3j>WZMX9>e%tM#VS8|wCI-4(PhTgv?J~*^rx2#US?2xq zzJEr2K3}+dGtwU1T{)*ey?b->YRq9-AMWam(%BSQhk%c&Ltx+LcBT%2eRG9Ys3E`p zu56^=4a>g>@#|KTOjzH)%ajre@xk4vQFYj`oB-puB@nhRI}X_^=Wd#R4ve4gOyNTO zav8$$`+qWD2fXVQe?j-aZruj_zgX_XVxyne_^OV%la3F5}vV# z5}UCL`qSeZt1k49!W>^&I}^_~`+0$#Unh{?2MQ6su9DWu%hw0ebp@$A0Ka9Ezq`6} z)t0sXA-u}gO%dZVz1}Zko?PkAW5)~j$axj6_nRB9>E%4M88Vaa)J~fr+`cWb<$BWb zKnN+qKD|~f!ans8VW0X~w)?Bc$m1uzef@C}^Z)evz=*u?dcwK=`sww7QP;Bt*8##o zMZb2-@tnW9yfL`uX?odU$nH<)k$iB+)e{CWB0EE z+*XEJ{podsw1Nro)oq)rVZIu*9e%$5d==lpd_9Bf0BLh|RwuaLFQRWlmwnCfQ#)Pu zHDjma(!Afc*;&7Bv$KBNW@r62y{<2!ui*MUN?^He)9d%hJQHVd{ob~=V)kui3)>@) zcdZqU`>ow}&1ujn%kfMve~XBJdYxXBeR^3OB`~8S>^I?cci6a`rwcS^?9+e{pN%sV z=qx`Q(5yWuM3hcor^N7nXL^3!wmYO}?t>29$UVIdO}wv}-CQ=UGu@v%dzWKS|LOg< z>~6ZiKD{n(dNRe12Vo{i1W%Zn!Xfd}F%4K6mq`&C^?!mive7=SA5!ZCrPOU@u48HwpZv zNIrNzAC?i)oyJogFU)yMLlOQpdMP>iG6Z9bbQQAQTZ#)cLZCuM^1! z_K5RqLHt{TKZwxZ8vFsb`#O>Q)E>e651CsR<=3~DqwLG)%|rcG@$J)n3?2`iNal9` z#B(rQbMgCo7^^Rc$aiXwh<|FI@AHapU$Z4zXU&#qoi$q`bo{3dZQgv*xpQ$&?S9Mg zynMSqF7y2Qpg|+_H~Zxe77VWA+ouaygnhceMA(DjiqsM8(-Y5gI-7)eHVN@;f(1TG zC(^I4BiMy_Rz}xn)5_@jY+4yz2cM7d>mO-Yzxf#v=WYFCBEjijUe8Uz!IIz?EMI>Y zeu{IuzaO-D^YQ)^%J|LYt>;JS`&|;L<1fCEc7HLAw4b;3!bp2CT}_Wc^LYH}C(7>Y zN7{Y;Nc(hg3_LS^-@Y!YZh?JuG`~jR*9iQE)ff0e^L{r>9Y@&%p$Plbag;rp_n%=G zsk8cmphELH>->(0v`?R^H_!Wd`F{{$p9)3U!_Re`uJ8Oh`*F_e`1=?^_2=U8_erAd zYc~YZNAZz%f3*;)6Ra+#zhLoi+ypq!*I!*k>iElVq+j1&j=Fxsx37!3-ec>A%Bp8X zT-PzRM_ktt9N$=bydM&aKUm(^9zS2_>AVr_8!$eYPNoSk`;-rU!R@Omk@;3uUbrUM z4B>oWkDL#K_50R{^`JlS(@O`L-->UK+&=LeD4O>hC2-7j{HNwlH?X)JCgS<^W-w7k z=uGF&U_xg)AmeY~GW&Gej^O?AI`4wx=Xtb8jc?_=GuPYP}Y$FQV+h`Xb66tS_SM!TKV~?(0X|gY`ueAFMB;?6AJ@ zf5YoJU0+1oR|k>K^Zv9QZ5Q}peKA*0Kb~NH5p55I=KXG%I*zhO^TGNeO2?n(Bjfj{ z`Dpv4-66}G{eEh-sV$L3{FZ^ic>L08xBJKV(5NY?PlPG(zz7Xu-n8oR@ z7N$6lKUiNx>G<=kmq*f6hML4-F24v3REYp@MySwN(UvL71Q3&rXM7X7s1W zSEt9`!u6jXURp;7_-6F|<7V6N867y@MGlVg-==f8FBp92*%E>NQT|(Ga{hPlnYAAq z%lMX9ta5L7&klVb8+%}+eb1?Np4aTdBSD|OiBG);?DQSP|9Ia=@R^M>uYFVTkzq0(zgYlu>FA8A-*m6aQmUYE%qYpmZ{&3$Ge8Tob>{Qe*%TQ2k;`s*J%Sho9*qS*HI=U`r%JtO4b3AeJk zeA3U??mc-DdXE*Ihl-`)IWYLxl}otY|I^?*5 z%Fizs$4)CBWj}uEl$JO8KGuITRq!AEo4${YogmnQ5sbx#@5bc|zmLVYVbO9$-^a$X zQ$B~w9ep1gJ8^0+p`E^IIi)!0o9rIW8}vfXvJ*$&WG9Zk$xiXn zH`(d$>6`4t(Kp$Nqi?d4KlKA8tR{w*{ZDJrO&_ zw*?<=f23~I$0|Hw|yEs2A9&W`47cGB?#KA10q z|45&BurAvRN5J-^$DZRCI}o=s@efFc_)D0b^riS|j7f*|c{~##p7BBW{6h?sbcpBi z5PvKFg7`c>SM%0e!86$@eqJ{k7usGSo^*Kp^t?FVK8=)kvioJ8Mnv|;(aYQOffm^* zo>XA;|06ravp1Nx*+~b@+w7Txv2H9Lvh#RG$3(|NcCJs)BSpJMagv?yr_ggLvHaWO ztlxiIoKvag<#G8uc=-6kHv2__J@Pn)e?X8O#{eDwfX?(F1os=90Ep7xxM_;d%rl_l zAJB=`@sE2)=>*5UqwM|x%B>OiKL*ER{p0p?$9eELZPany;Jn@(UkT3VM)?iS=L+`7 zx^4E)!$$J{`BT9z=&TfURz~aiv-f#^r||I#X7%7gfhc=$p#ZZ_&uc{J_{ZO-VRAmW zF5-fqL77g)f9T-3g5CET$p>!dbjtpb?BEZ$eqfJ?(|@m`f8={UuS(euG*ZX6N9y?Y zD4pQ^%O?L9Jf5J=LBezP;BF?t9u-e;8+=qe)2CwkD|n{wUv|58bua)C_H|nX`|4=> z8iAia(oa5kSO+5Lbbd4DS?((VTo zZJ*=UowvTaYV-VfZQc@XU%ztmGlFGoPTzl8;MUFl))(`;Ub^4>+;f+<23K7&esf?C zu7+K zPv3(UJZ>tudt#aQ{rS(#!p9QK+5ML!1`l+avBUi=OVgz#tmD6(YkdWOF{>Zk_c70J zg%{2H4z~I)TU+M+_efSY`d4DY4Ywh?|1K`NkC;CfH`tB}_Vpw?-+l;cAN;pz^?9rP z_ag?|{aZHpFNOqbEEe1?>c8wWNPeaNTu}dH(6(3K60-YycLjD=V0Q&}S73Jqc2{6` z1$I|pcLjD=V0Q&}S73Jqc30s4lL`dK6+-_#;P0X9r)ooZ{}kt%jO+a}noAuQ)*De5}%Z~iAR@7DK%^&MY-Bwh-6 zXv-1RPm8aFdamZlwo$L~Xjt#N@|%9yV&kjTrMjSA{)X+ZFMFuxYTS}9cbji{K|QTc zJE-R>-}o!s=387)Pg{SqP*3ZtzGJ_sS3+Ghzj@@W%bV8E4b*crzM}=>)AG%}YO#LN z@~xqst9%Cw#;4_*ezh&%$(e5F-OdT&{Wp4#G+%FZ&ocTw+r|})+}Oy``cm6}BTgHS z@lzlVjq{#n%eQ6Ztnp=+Y<>$RTOL-wecYesb=eyQ=zb{an>e~ZO8O>_?w69jiIe=1 zojA!K*@=_6^?bu-y(4_cHbQTH*qO;A07WUadbbO^i7<{?z7|nrsXT@o381P`rWK;dmP0P@W9a> z0kaBlA2eD1lN?`vkWXzpj5uvQoq3~eyNUF;U$WD;R6m|a%jkE4oOydq*>B9h3G&tI zLizCdndi|!JsuzZJ$=vi-1ho~?&}EtZkFSI`#-d8=a7GG+-CK+=eN|b^-CK$UYA)v z6kG7E#W%YYZZE#rn{DwGklWGtcpgoo-`-C8ovm5$v$bE6Z?V;-j2y2E_X}eH*4gpk zoHaiBJ8gN3zcsq=>F?>=wO>#0%lm-*^L~~%Z64~QU#%{wOQY)|`Q`CZ-1MEIAN=px z@#T6I^sB{3a{bo!&kGT!)n#P#n|<42b>Z<*JoIf{ztzyMR+qs}#>dBl;?(LFyUuN0 zg8S#`zwPx)^X=eQtIHTUJ`YLx@_v>$tuDED*y5`r=PJIT(QmxD*tof>OA-BQpZHcM_l|a(brM%>n)_~H+oD@x?W|>xSjPIyFHvobCpN^Jy2)Tldh-f zFm7k_h`%@NSGq1J!?>OG>oGm4Us{aYS-%seC-qC}ec`(7tltXLldfB8Fm7l4j+ma* zSBdxUSiVvoC8j5FHOA!*w#^5U-hk=VuZ_NLF4hX?D{*`tO5PN$S73V5d{s4a+;8)4 z(RJxDJ$k+a-(DLVIqr9S_h`Sl%fj`e=RR=1Wh2M^PLk1nJ4{bneuqYm`^^jaWVzuXZ2fRdeV5*7-y~X@V3$YGGKaA9Ft)F%KK=NB*ekHEKIbnJ0GESOb`1neG6CbnHFUvS-JEz1rYkboD z*JgSWH!yOskB9S>^mzTU*9qHyOi$vfMy_e(czjYGW2Pr@$xnpqB5mi;eyVo-fX65G zU!D1txDMl_<#)(9X@24HN$ZcyC&P7-{1zD}Egv4^r1klPanf>>`cybR$#0%mztBfLI=_&9X*3sqP&f~%pLt(N>xKO1 z!u=x6rxnIY{nB8Z6knHd()^tLd^kRdD=|*;TVtG*N1Jg{U3i_v_}KlI(($kX^DA+& z%foe%j+@bZOMONE=KbffzLNBKzEYi=EIw(z>KVB)YT4(OJFRYJB-Ed!}UJ@N2 z>1pf1K{nif);df5XZ1@Q)md8q7QP(LS6cs)o|Z2k52;Uk=$CXQj()HCC64k<9=3Di zHhO4y+|nzfwf$j@+MaANPFkP$8Mm|f zroL&*H_tdJ-wYcMDUSxz+u1xuOivoO#J9rvN_k`%CoLZ(#!30s7`Ln)GzNnDF@Ql0xoZerwGY&@j-fUnP``c=LcuCp{A4aP}& zT_ZO#a*6MU zvG)h_f7AXcebe6s|DL^1gnm!o|JOLao#+YorBeL#?K%(XK1lLM-&W2VUyg+R@7ZzV zbs>zO?;$&VyN(ZH0`=MW$RB-6_XX1L>3cS>?de(T=Q=*ueqHCgv+>Qw6O2id%|o=G zOyfo0()e<{^p)ZHl=L`PWt=pRceaM_Cm}tGi@v40aKAm~m*#uYp>L_LxL)dB;rOKa zzI;`9Dq<$50HjK}q8 zdxPSqZ|k`AnO|w#QiE{5QomToEzk6%?a2n?q&jzv+=y}Yx5DvfsvCXh=m-CMdwr1j zX}B&@{Ys3Z{e>Af(;vMV!}k1Ix331wFU2?GX8NPGUt(8>^QAuE{oK72IDUSC`?dB< z>Z{@7SCj|$+hg$&$Ni>e4BM;onCa2H!Tsib7OsmlzE;0wrbo*;_bc_mOnTEFXa8<{ z`3{+1s^9G22ZEWOhx4WN5$8JJ2#*^rzdSzcddp*ecUEt5MRa^TkJL5cd?mlu_7|+r7l@a`{UZ4- zTox`rI z%#Ql)Fg?j{{Q7Xd#OXnn-}^8TZK-qCzhH-zg)dfabC z;JDw^jA48I++cdtr`+#|ankr&{Z80?u(Nul8^iV6S-t$)@O(vm#p@FLMc6O(%S`#F zKU(X;|1NQ0^mQJb>mbMNxf#Ru`d|i|{wUq2#5w7FJm+X0nyViJY1}kUT0WRuOdK~3 z9tiJ`*ZfN7SGk-uKIwcJ*OTh({VLpl;{6|tv(`oOYmF~;Q#d~9x(usch3V~Vd|jp| z&3`;TX?zo-aK6^%$m&h=URt?s z?V1fsD>t0Cw0>oET6!KIjfa*;>636gTU*|&db^4n+-#dSc2#^)=A zzGBzE?5tjV9A4feJ!>9CrYGIE?HRe2k>l}6ey#mtS;r&7BeUPO;h3g`6te+*$8lRc_pKyHAdn40Eu3+T&xJiD^c_66G8?Dbo&woox zr=5KAQhvqRr!Jj&&KV~!o&31d3oD**>e7lcPFXthNh=CV$AJUudQjCn0rY@dan|Eb zf7HoKXPtWHS>W;1vzE?!!V^zDd&OfhFRNe9wb^#Nw7*rq1^U3cp2o0Z(*8&M&*8qJ z?F}9u>1gAYVR}*?q(|RUd_~mL@@+A{(t2USIBCC|;?nYM{3TpJY5#o0I4Qn7a$3F= zAAL*pquX#DZq1~-MbH>CN%Lp_R9 z;^_BU9xbLP^~;2DbljWI_kCl&sejn|z?w&F6t17tS6${;s$T;+ZQMpiz3e~3`AUAR z`IeZTG;THIv^@Csnxq%|m)ktjOfTDvKF-DClkTr5px&bSN_yt;VB7bSo;8o;zisn| zRc}Z0kdBKEcQ8Kbd`j`wa9>IF+tECvCxZV!tQ5N*bAANfYr{$Z*_()G0j}E@)S{n~~E{CQ!Hu@zUEsrF|N4%5=&sXXf zZ*N#G7tL4Fqqwv@cwGv@^1<_v`ZRwVTOM=u6Z(q#mHOVAZ<&poq?g^tmPg|iz-e{1 z#%JYfuQdAI*Oo^bx#Z7n=LfZXNl$xkF6E)UKc%@~9-1EctzYRjUrnzbUu--Y*Ka>Q zs&nuCw)co>a20`I{4M*js6`M zTQ0TrTWWusU&=$%s~Ghf$Z2)4`W+ellAg9c$|h`eDIsUgL-U)s^J4S3HXbp2zlPRV zY2>VVXnwPf^WewLq~ozYW4_4)Y|Bvz^U&&7HtJdXuY-D;-=Sl_nFDQoUqsGTzqE{g z`;Psl?rh69kDRM~8%Dof$9@xcvE`dZ&Q-oOqu;h;zp;aC`KFO`m2cJPx9QmL*yuNT zSE!4te9Ne(%~y5DeuqZCv>(skQ_Z)>X+K%xNUwU$_V>Fz++Wq!`r?<=j}}F}>3f97S9-re^+RD!>Vr0m zPa59=AZ`^C2%>f;(M2* z?E_lR5GQRnQTep}fX2NcU+eydrZ;k|m%WeM_-as)Mt1~**mdp6jwmgc+Y4LRytczCXzA?UuF+Lg(&2Rn~ zTU{#1X>}pL+Va*l>Qz1q@mc+9`DX8L%eRD_E5B`{-@$@@wK}JdwbifoX}BK5ny==! zY4l6|qRkt`X?~L#TfSDkvY^S*Kq496#N#m|PX6SVr3uH)%2zta7o zL&lLF)rr1g9~J(!z5P|7p_=OWT^Tj@A!>p@Uw@+%!*tGpyU9@71Oe0-() zr5+sCBaZ4o-#Plh|K48xQeO(!g~o%gKMJo3`<1vZi%+`mF53pyAzW{t0bezm$(kRx5G|GLIJNJpz*?kljoY3rlx!)(h@4LPmO*7ycSzp?+a z^}W?^0rj+Tt2*}EGx{An_M3aSZG6kfxfLH`;PslR@m~* zBj+mLhS6`=vERfaZ24x9bCqw+=(p|IZ|r1SzG>uKj*K_Q*Z}dBH>^J{N+j3Mv&Q)J^jebXt{boAWr90&=eMZ5sXd9Q#c^%9d{qIW6BI?k~`Gv~)a-AD5DjCvr~O4;@}%J1$W9 zW|$NA-`M-(rT1Ia*?ZTed{gYb+|qu0+xR}~LO+~`^jyED@whjQmo|^*9|QfO^#SQ= z#|0Xwr}^zV_M3RDt?#qQxyrX@^xJmqH+H%$-!yWr@~s;EHXZvN8~rBFaNEyi)YJO8 z?%40p=r{g2xA_)PPs`VH?6+_9J8|qcU$8Al=K0U4*G10Na+!F%Esrd6uKd=Fe%p@y z#-3oyH;tUDe5*#kO~-!6M!(53-OdMP)YImJx?{gXqu=;hZu2doo|doY*l*wHcjDM@ zZNcYxsM~)}v@Mrij*K_Q*Z}dAc`b{1L&s);+$Uk|p`f2A^8>pxG?K<|G zc#3U4$RcN*543!1M!#*xeq&Fy<(o#%ny>b}f-36K`E%MYkgiA4`k=R9e41YJX^Zu< zrdM82Puo7|pq}P;=-6-Ozis_eM9$hTTD~o#-~NJrwfa$CYJHkoa@#Lfzl~kwH&Jq% zZ_TmZz_DI>rQ3X~j`f-s+n$TqbL=;FuG_j;`@X)5{Ki-9ntVOSekYFg^5?m&OT)2V z=2^DoW8~OxX|>zBv=`K~J_lTT4o2*J$U}QBdjUCZy;?=ix_zMK(KE(3HpZ7+v)H(4 z+b?C*)9TWFwyjTTp49vft_`0LmCmp7^U2ctb_&mR8z1GNZC?#9vH4Bh7|vHbkByGC z`n8!}{jJgOna@AZ79ZuS`K>+QtzPp5pr`d;iM@YSx~_oopzrae(eF7+et)q%wD>xX z^&9`I@TLI)}!&)>SE=(C%NqxtKZT?ZGLn3ycW_O9kcgeZn-2D zZ_Vhp`>F8yO}f6R?Kr-4#a0({&mw}j8F zpt?wX72gDTxQfq1J#D^fIrcj-`b}+in{Ng6w0s*2`qlJCM!nH0+j@)oMDttPvRM5z zy|!b$*jBgk6&BRf)|XAx)9TW5>^FHK)J5}~L(V!MXnJ+WdPB#0nTy=^i|1Ic?^uto z&!y*Yq^gV6MeF+p>S_Jbb?i5Bp5yuN;>GHs<=b|w7kj4L_zI5onvV6x3+icontK-1 zPaC%~a@KiL^V>1{9Xj@#dA2RzB66v&$PJ3c;M zd#)Lf&)^1o@xn|9#)oWI6S-rG&!>Wzz*KSy|wDP?3Hm%;gIoM|9 z$7!tFvBYWbi{a}_>3KYbOCVo*-mvssaq_D@_qT_7T0f7G+^3dQZiU z_I>sRw!SYRXYG4!d21W}R?oI=#|{>ZPa9wBa#?+$t$t19to75DxAq?3m*SL`^RY3$ z+=~`lKD7AisHfGr1^j)|M%>R5om>Ab= z<(os!Rlaqj-_C-5wfFL*_k?_@52X1Z{&L{xdKKy)K5vkYwJugp%cH-Gx0}K!pphzo>tPM=NC)woy!WxEqLFPo)%x{)exVxF53M^R=-xR zShvNOxzM(sV)ffM`nBri_qXNYInKixU-vb(_*%OtzC^+nU+N;aePFF$>~*&ID!VAY zrZK*373!zW8)Kth8t*63^m4Da)o*Ons~hz?&$Q(`H0pVHe}I;6<_)%d^LQP%rso;; z63?;a+c)YBjC!dz+VXAUb>UjR6{B7mulLsUx<XRBZ0O}2ddM!k|zuY%W)Yx%Z~ zdI`LKT+@p+Z27j0dIh5%&ClBQS`+oOJbFgIxfj~{Ao*rnU95SOQBTXGZuHwR<}ozt zQ65@+nYS!f7fsLVx3!>O+JDo|t68_7cXKpS;csn!zjWzh{i5l$7u3_{m)P4NKCMsF z$nic{KJUD`T3Nkn%hE+_x0IJEn>L=i^4zuS)^52N%O&mSY4J6U@%4oGcGPe3?Y6q) zkmGgPQNMMg-_C-5weh8{*2W{AwDoi59k%*;$hoRt-{^PZ*l+b4;qxET^Ir2!TU{E+ zxvI;^=r{3B+xS}hrG$D~|J5A(9T@$_-sLvm0_th`Rvr888U2nI^lR-uE2q_^{_e%b zL(>~Bs7L1)r0u56dmuhK{~>X-d|2yZ<+S;^kMU`BnIPxNZ~nbd7tL=4Iqr9PJ7VpI zwOf|XyJ+R6^OyYV*p@c0edg+=Ei2Dmw|ZLA9bK=EjPWJjw^;va<55CAtu8gkeg{Us zvG=>pw}5(DzE#J5dq%%w$9{7yTi=(F<9)xQ{oFD79Xj@#xy+Vt5jj`+wv2xJj{T-S zV9Pg;oU44(`+{HEkEits@0a`=;CPPaH-p>lbp4-n-oD5OC)JDUJ^9JMr{}-t>ikw)-&e3MbbfkxaP+t}80Q@l%~4$1c$DrAe@}i> zheqoq_5nNTiup3VuAmqDP}pzh!_j_QZ@1O2&HPIB8!)af)USGvaC}l-vQ1lj!@a`w z>)~}ZykANm4EwF7qU(}nc}UkY(0FNm5Wg4r(Vj0w^M=Ny?hSg@>r1rwta%g<$2_it z<&pl5*Lm_8+qlu+yNa*(Fp0enf5Mh;zTV5H*G!BM?I~t zCPu#%%vaOPf6`Vz%0tt$a$U!M6Q6RMN6E2X+p%8k)3$uOj{Cl9^h_&3?(2 zZ^L-}w1#@F>eAU4`hdnydVXRV`^D;4J03>#XHLb=KB19b+CH$MF@vVjEu%IahTa8uKVz9ll;AcTM#3i>c1qc;vro%eR7@t9;|% zcDw#fe9e|e7CBdWWE|%)Fy;~ay4&Tv=s1ri#-}akJ;!-?j`Jvg!`4^DpNE%A>3MT? z)N|E;@hfccWsq~_*E9OH&O?1xKj}KWzR_>0=XUw1pq|#x)_l80y^-TQvfs4zi#3m$ zQLl}htNx39%WWP7qh1v`S9$b|ey!t?{I;zwIpkdB(Q4V&=aui+IBUM~@7VIqAm=Jy z&*-=Haa+Ev1AwEvrS(V4aUR2KZShfD+V*7QySDM@BIjy665q4=%_8T@Z~Qv9^&1%T zhAJ~?UB66m56X!Qb&dt)L$Dvv&QiR_Epou-)WJkNQfxzAig} z{Iu~cA*YRR4LL1eYkb6M+u5<7LLORtR=t8zuZo;CUoDTG(eK!?-`v%<`jwG$m2b!B zcj(w}=4ZBii^#dkw`KHe?bC@-FZFZC*Hs=B)YF!?hGV}Yqu<0eZu2dno|bQIC;eus znfsr=o&U0x;~w;Y> zcJj$f`4wlMx^(6_XPmrr^5ae~ta!qyODoPeW$DZ(ttc#IAv3D zS{_!vO{3qQW53B?*z(OG=PKX2(Qn7G-}o3szJeMQoBf}FGJN$-BzV^J~pldVV&~BYU0A@2=vk<6-Tq{87>GQ|EOV+-|SP_pWo!8lTk9 zso%nKPRo(CuTuL*$5&x`qkW?}o`;*Ss81!1=OJF#XY|YUr1e&69Imr9K8dR^z4W2B`Cj6v zZrbs2o^R~HXupX+hVzv;t|#^j(-XOq!t<4NeJRZw1LjxacplPrMEXzRx=0+?8w%Sm zRi-C#TulhSsgHQ$!eZyz~ppKAH0{%*^c z^3eLAV$^FOXU!vz&q=HA1@ZFz-x2E3butt$=bHO1_P#N#4@&=7Y&p{O+D5(B?cL^) z{-@hKsz$xS{)^?IJ^ycveziWJ{?NuF_b*#r`gd9^56y4K=$G=)mXG+qArGxCg*&^= z!$ZH;BDlEaXA;k&YAg4|1DtCm+lf}cu{|IUSAGkqr;S_nP}_L)kkj;f3+AEeCHHh&7wdS`jebY>vc;D=%vNWL zPn#z*d%5j<5B045r;S_f-VmS0O^kl?XF~lnz5L#`@kpFy)9c;GrZ+ZnG`?CMiQCxx zTJ=hf_1cd0y!%1El#g_Lt@&iza@0J+R=?&F=#gLP_;ca*;q4N7J~H2Kw;tc%oRn|U z`1~BMC*@IQdJ@O=q~kA~lg_^lnO`Yit|uKo&BSf}!u70vrQ>TY=2zmlU+MVTgy~5f z*Q*U}=i@WiM{||ihU+JB-0wipHM0`T|GGEuD8BeH4~cZMjSd z*HP5=3)jUuzS4CW1Eyyk-^#CSb&>j@aJwDLL(*$9J!>A)@g_dL5|_MvIFFt6TV{Gv zzC6CGoxGqv2JU&UU z!Stj&xL#H`pO@V~9G|ql!SK3b1+()K}<`IR`XS4c*muN^ZzYadvbH|e}-`A*^b#qSawAJ0R&UZAssdeZh} zcH^06%UH`Yt^%I4Wr*m z!FD{cod8bT|E=E1#?khlcD^V7M4MjUcs!zZs%<}%;?wet-37*1JO0u}zjVAaDV%2_ zznY$v8{u`E+w@9kHIdgOYD)*2d?X)<(p=HGkZgS^Zg#GGwmN`4vFTx zyF&j_9@_IBNKbk{Q=jQc@fBDenqO#X^W-90)F z&F@lW%cdYV?w9h_o^w(~zdSzG?{VN^NBxckzg#bQj~%Sb@zL=mPlNf2=ga-pchv6* z(SEJl8`g1)9}IONUfLeYAgASPjjtv6Rr^J_FWTyt^3?h{e+bmYRlXI})8?xNaug?R zXRCEN?m^Q(;r++!B8_jBUEd__ug3GXzUO``hehvK)X=Y17pjLg93W9Ve>h*M4{|A6oy*8k-cla)du@EJb+PJMxy)g< ze2YfT>bGyy<8_hx)H}iL{ucKu?RQhY>h>RA2cY$VRWD&Yf1X9oIuB`i@VZFLk@o}` z56Wj}k59(%{5k1K$HUS_&YDLFuLB^zQvVg6Xj^}fj@Ad(_&R5Y>nzPfR=x6lVLqTZ zrM|B-PO3|6AKUyw{gNgLq~&Og*F8{t636?% z%1L=N4iEQ>lt9;LJ`j~e5o`$JRgzFukhu;$T4J#G0&8?S4jKGEj; zD(Y!|M|i)a#`PS>mpl^2P4i3nYFruhtn-Ve*Kw?8&4c%qbe_|y=N;vC9=H0PIQE-A zde`L9b?i5B%&y6!X7n3h3G=wC<*0~#Kz$>fk5Atp>Y{Oc`H;>xR+*l}H5q5UZcf_1 z8Z$j^v{rFV=je>lo84K5M?xb&OS}XU$jI z&d!|>9$$$o8#!KQX}!>Ub-2!wU#=%z7ZiVBI1h=-Fiu)8aKF-io@dl+F-}^)r5+T{ zL*nv`v*uylua&NYO0wmH&R6i`?Yw@{bx>WFhs2E-XZ0)fU(T3E?UgV;)Am72xL$zg zD;@u9KR7(T5;tI+HDBp^uCg&-o`=*2)oeHqiEA>>nupW}UO()2^wH?+x#~NZuhcK) z6T^NbuFg1XzEU3ycQ6mB4>Au4=OJ-L#_en#@#lxXRBY{ z$XWf49P4FQ*z%zGT#Z}X=(mQPt8q&|!kDj>!@_9sH5b%#Rp;c%wtUAJpOy#pfyUL1 ze#=JA>NkFhEnm`eRcFuWw}_lpKZ;M|CPu$~BWLwnId#|6d1Un4MNX@qHQ&-BZTV)6 zoYn7OK|NRfTsX~^ZyGsQb?zDcHjSLM&bhoTU($0`=Z?{D9XVHZ&OFMNZ`{aHU9|XG z3+lP5a|(~&Yx_|Xj8DtMns4cNs59}>arBBYKGM&NZXo5^`D|6rajH z)|T(U7@yT|)##V>T-AAO^xH#Dtse%caplu(b*_FWe7r=uZ!Bljqxxy_#m}(CM|!Tt z!&}g=mPg;H7r%P3d^NxM$1SGks(xLg-v)A89yGohmn|%ouclXXtT!;~^&R&?;qh+k zVjYj3(QnhpS^egouxs+|82#3boHgIfnZ|taIwNhn$?DfN*Ei4jGWakajw=!>9e7JTAj(S#x+sTbzfQY)wtY~Z22aQTp2lQ zzFK^Bqu$UMU#94G`KZ_7ysp*m@Jk4#s*1A}^zT@~(|Lr#4ietU5QLp$KSkG9OU#(ARJhbJ!v}BuKYRFmR)BFyM zeq*J@##i&(TCmQVUK8Wf#-ryrkK{_*xaE*@HEwmI-;U95f5Gw4>YO=uv3}9?JjZ%{ z$9kz%Zu8CW1^2P=x-2c7cJj$f`4wlMx^(6_XPmrr^5ae~ta!qyODoPeW$DZ(ttc!B z&lRG1i0kp|>k=2k_N~TQ_1gaoUymtW?`YM_)@<=r9FIqAwcGJ6IM!=A)*Cz4%boAG zes#xsL&tiVHE#3u9P9NR>!r$W^Q}16>pIp;taY1j$+2GBv0m)yZu2cT)@wS}8#~s^ zJ;QDN>W=k>j`cF@+~(^!*6TagORaaCZ^f}**Rft=gWG&dj`iA(^{=38*A*L18m zcC44HxUFB^vEI798s} z9qWyadfDIF>e9IxIPJK~=npood1d&xiu61l>v5G#9geG5k56iOq+a7z&zeW}wKl&c zBWLwHaI9B-oh^^S?QEPikI_Z8ekMKbxO^9nW4h|AT6MAb=y?hhFF)QnS};B>U-F}I zg^L%+&6*mKLY_^kO37tF)zSIgHLpOtGp%k6k1_t`b$ zQF-=adHi1;kL+_6%R}pz;hM$fduv@(?zxNQq3U5nYx!FH-pchB%tMRMEAN`|s9*B` z$9NPyTOO&kyQa<)V|>>BbImoLXRBXh7u7HOd|Q03>tfX#V0_yCOzZ`=JVsb&O|M|o zv*wX_y4&SrjPYrCSmU#DR7MmSTFffxA~SG>vbIK#b4$&-=br^mSeq%W4-*# z-PW(+Sa0N5FZ&9&`PLlk4IJyGU+FgAs$;#LW4+|7+~!+$tk-d@7k{R7MmSTFfHxA~SG>vbIK#b56>-=br^ zmQk;c#~G~WCAH((sW(7fwEcZLE}-dEjCu{^T;(w``c1rXu|Cl9Euo%PznWveZG7&u ztNNwiWb1d~?WY`KIx?R$3p_je6GQZD`CR{${s*Uqn4EUvELb znqJ?i*TeD9#*ON%`OUv&vHEFx4aa&T$9mbfy3N;G=eBFVm%7cP;8?HeSZ{39D}Kc7 z`GxY^+}63{STFu|xA7Gn>sgnNzGJ_scet%f#j##@K|O7IEzyL0wfULGL(?l6^=imj z*GHP)fzfa5oo>gs;8?F|)GM{!&R5BIxvfjtv0lfqUi{r|^QGm(x*Ta-1>f^X@6nN- z3rl{r<%2lQZ|Xg6>r!#7*LAFyc(2=hOOEy0j`d>iv*p`h{ntMP<{N(9wY9IRM!#0Q zo@2e_`)zfx##eT%*Kw>DZ@JC4=vdEM=e}dVsmt8frQ%qx>sT-G0k`><9P70m>%~6k zHs69{y{2Qmv17g5huqe$?pSZ=STFNoxA|J~n7O9e>(3z6HmAdkgAm>+|I2 zp)T4ylta$CKG*!#jea`|`qlEFsV738#h z8~fRoBkQ=0jPWJDxY&H4^-Br$w0@~M_B$~8jeTjce6>8R<55MwnqG6k__XmD8~s}I zNOl*ipB7&o^|ZQl9Q%!b*|z*=sxA$q->zf7 ziLcu7%_8S2-{`SrD^orbL=o~qd&(;T7^JsJ zTfS-JT;*Fe`fWP)J2v{YZodq^Wb5bhmu;NYZ~rScz3x|STn<5jVpcA#-+by_UQZRD(dRXfn;H+E+uhmN(n zw39}?yV*z`e<}~!|%hmQ68yZMxP(#dE^_>dg()L{m1qC&1gN&NqMyT;XEquw&~UHzjx%g zO_*Ne9yYz=Wzk&z2jTd7#yV#&jn->0z0tnWT=||b9*g$NZ{sAr!jHoBllq00M{V4isHe@R*6|p#_+ke} z*V(F<`*Aqm{82W&>M**_b*3kARKMDF+dtn}e17QD4=RrJx=hcSuM}V6C*gd1*GKmO&sXGjP)}M9 za=*KZlj>I(gzG28S2c3he0w{nC-qD6r?xzJd{SM?JE$kE2RlZ+;u(;Kww~d6Nb_#y z>Tq2o&Z?IvfS$H~qxpW(Jf!iMuso#obn0i}d?k+OYvrWvza7;}PHgj)m9ysInv<5x z9j%Kr4{<#!C*@nX#%;eecTi92t1;7)I9`|H0nyuaxocUz0yn$^93P_R?x$Z0|K`Vi za_elzrSjjk9dD|A&&CzLZ{w1E8#gp^)_E=eL-4E3lZhYMxPg&t{@A9MyVAy4^R1lY zcD*nfE~cl|IqmrR$=dac#iy+Y2Mg+H*JY${fcP}O1?05)Q6JF#?B&CtfB1YroEBft z7~goo__TZ}J}uwejc&)c<5(~L3%BtV9qY9m>rEEa)A}#}OWX2MK~C!z>MPA}*XVb& zpkJ-;v%j+SOYub8@nXtX^V>H1wd%!gvgKjbD>&9`I@TLI*2|6D*01hZZ|GPr^J};H zdXDw_j`dQ%ahq?&v0isUJ#9Ws{1)=n<{_F7G`*5huZEnf^}@jDH}<>5##hU?fO=Z} zs*e5kjDE+C{pN1A^-CE!SL0jW>UP}XzqjR)LC#ekp3!g1vEPZ&Z|Vs&!SZTV<8 z_FG@DUwC{=OXqG~yKc+c4NI$5u3NWs(b_HLrOjJbZdto(X;pdU+6^=x^8L3GULU6Q zOZum_;|H~S+0J+Oe`eDgTmu}>m*+wGY4hLsTASbO4K~i|H+!^gJDVTZEBz+=e0=d( zo1TZ9tNN90vel)VvGoDZS9+g1=d#yD*M)P^`326^ueIrAZWn$0KJy2t3-yEbJbUBl z=;OB8v29-S-fiPrMvmgw`lWG;&97B&Nout$XD}QKu(+Qt$v$Ezdgr(lYh14n?p{^xBbU(A4tokwJsfFd_!Y=R==5vtu966 zw7OXRwv2xJj{T6#dds%{+`!`>&0$kJC2k_PThX_t1Z6f ztANw`v}yH=39I=UIez>~dj90tSikZ>)bWQH!{XYezkGS-gdEm(e(0vx7DTQ*l%n$LjW6Y)<=Zjl5xv?SZv#MSnv&LuThQ>TH_pmLO zapYXpxnp$X zd|Lft_ja2{0rfP$RmXmNM!#dneslM+^?eyRYu{`0X~*by=-6-OzP5ae$hpe5W%S#3 z>^F5kTfTYZT;gH-Zx%T%-@+el>&u!^&piJb^N6J(Uo8)--va8X^PgkC zJ)_^TW52m0Z2eM3&Q+Z|M!!SHelthf@+~6gD&LmTZ{M-s)KRv4^T@f%w_)_#b?i5R z_mOJLuXR2s8TD$&xvJm5=r?wZz4T*jdVD;j`~1B-g#Aj-4WPPc>ksZ%dal6`&m)qqlyC8LTfdC%7|vs7&)2s1 z59{sh{qfaASg-K==;b4Kr!XgtTj%k%K8PO>){EaI`Z*4K+@$xDq|UUBN5jYsjn97> z8TBd$hVv~R6rFElZ{XDV{)x7HsgJdJqwyNs^~&CpqQ{r~(07i0@V{s8cbPFyf6UDo zTyUOI@Bca%6Ydw9NpJci)C{cKt6yT~4_$C6L2vGUA>{b{JoD$%A5$}i?ZubdMVx2! z>zcFnfyCV{wr6aQz4nL|4~P4`Z)N{cTEq>H-99IcZ%w%mjr`De>AunTpY!=%T2FIM zdhY}0r1d%Hr0dZ+ml3v4IVWw$a&Bk0W4WHReagAw@1ocHoNL`|W!>hbO{>?e-MnS>rlnOI*RS7*Pmq=JP5ylQ?|E$A-FTb<2Sn5J4z}r~ z4grqFS?a6Aakk?dbv$mX9xp+M+HnwyOUsuyO)rzT^`S`Q{4YnuVL+#jhVpPy+VVSc9AEZv zw!UxReFT(;cY9%b67{tH>tnxY`3{VF6qhz0>4Gg^-Y?SrU;*{Ce68_SQIGia9ir>p zGv<*rp7$FfM}Bv9xvZm}Hon$6Q(W5k#-Cst-wblvxV7&cUSCT4q1O0X#`yZi_^f`d zT=#))=f9C-J!>A>2ifwd-X}c1JKOiQvuyp>Mo#NLYrcFrlGZa;y|%G_X*}Oex>EfH zsHe>bO{OQUr+dh`s$cGG+qjjH)BGmy>$b0k#`xmGbpSiMKT||KZQN-5wfVVa)ayIW z!@7K=inczeAgA>~9yzLyv>ide*XlPi#@A(jrR6Abj%}W_#>eX{<=aNTq$_a)#z}b; z?+449)~D$wyUn+XdYWI#QybsP;o*5h+TQ3H{U)E{Hs3PpY5CS2`^~0pbr~At%RJR> zT|Cs&>e6!TH+F=rE)!#X`KQ_H!k2UDIGnZb8|asKNzdvx@!yb#rk6Ex+^;kb)r@*= zBgg$pb%`y7^OddxNE^A_k-%Ohjt`bMsC zw9Rkn7#p{(kFVPP`6J@A^-OJjxL>68Z>=2Wl9TA;5%rB>ZgOQb*Lp^n8+|mI<9#Ld zL1kT7uR4s@>oP8TX*8E*b&>LjZ3z1v9~6BZK$CG3;r%Y{O`xZ(Ka#x8f*!A*G;Y~d z;XEWRUa@i9uT;M_^DA*&uXsRoonz;Pa`m#yx`oW3y*uy1#4rm?QqMGUxXb!PRR3> z<_*qC^G2U-CrTXG8|@oCzM~7F548C-#kLcz{U`ZtFg+SyHXbWiZ+^z=i`T5)uyXTe z|6;P^j?ZF4x*88@`KX*5UOuGxh1Xfqo8yG-;_OA>SDPo>Y z+wD~&*JbfZetSl}v618XO5>Je`xVyZP13Xa?J&RAd1Gh&X4rQ2&aU^Z`L>u}>-M;m z?}X_|eV@YZ5?aqm`6k%*kfc|`z+Yysw^gK@SYsWVRn1?pMWLDbN3nkoM z)AX$Ijc`72r5D?5%Oj1P=C^*aP0yNd(->dR7@yUzmCJ3h<(tOsY_0FhsHfFA^Gxuo zan?L0xPR$NuV~y4^^kMr*P3tN7+(sv|FrlfI3DWw;`X@4HH?0(`Q~wZQp+QO+f7=0 zR=*|OUeoky#_c)}x9>H*fl<$zN8PwwTJ@^N`M|2zGwO|v`};}byq3fHUh6As9#!K! z-gi9z#f{6aHIJfE&okyRG0s=k_$sdFmuK15gVy*OM!ha_uKF+WY+D{#;w!j~H z%T%ZJ?medZ-7f++6WQ#ed1JBu@1}hBW5Ac{a9l*>e*k>)=4rm^PeMFH zjejHbLuvx`>0^Bo&l39KuMm%i`ia*n`5p@K43MvA`~>tfpMvxluOZ*p_`iYv z5c$~al=#!2pZzq%lhOFUgMJ1zB_LBE0gSmR#>{m{Mz z`oX&ymY2-MLO=Wq;u)iU>h(%J9|-ZJFN63!jsG|37q-IvJZ+7?75LbNzz;Qk4~VCY zeBupC{D%Wyx(M`h8h-@v9poz-ey2fXK_nrm%U5&2;pLsU$V~sx!_#yJCH!1Zw z9{5QU^a~pQ0O0G-0p8R26M)Y>7x=cuKM43S@dQIzY_S`OCX-M#-9g#wg&uA<9`SI2>HZYm3-F#-*_qL=QMsT@cEYkU(xty z0N+HusqyQ9pCI4Y_>I69UJmiZE>-fq0QeU28I3<1`XT*Y=!e`b&=1}PLO*N<{n#rY zo|2}&75F0ZU5&p8_%`xmjlUT9_$wiv)Z3K$JPY^|@&%254)7i1J&nHv_{6Iqp0>t6 z5BSzQfgfu83xKb_5BS8}m3))GpYC7uk?Em%OIY*#=isjI`UnOZvsC; zeys8D1itYBh$q!l>hmt($H*5n{@uX$;i@7Lk0dq;Onmh{ls3t4NnsIGVtlG!1s~wK1ATp0={$s@b$e>KP&K$0Din4 z_`+>~i#=H2j|0AXTj;mMKES0ODDZ~^-#H)SM?Uuef!`bW6wZg<(ZH3C6Zk*E@u=A2 zKtB}+&O27%ZvwvYSm1}qH;)ncZv!8HH}q%ow!jrW3G?pU@xU(t?>!3iOZx#I`-H&1 z2l#FV`1b99ueSyMWxyAX0lt0*)c>%+zZCe%(ZDy~1IuIcLjwP7;B!Y|Ja+{B@dpI{ zLf~7Uh2sy2{edq@{C!~gt!~8m@J5V(`2b@0_~(6r?;~G&uQH$95BPKi^y?abBJdva zU5$ST@Rs z>az;?*qcDVr17hPFCt&p`165pBj45dGVt*R#530TrvqO?KJ_6b-*v!ukS}Qb2H+EK zhIl-UuK-_0zOC__fbSwd)c7sHC*K0`BtERJ_=J-0hk)-PU(xsv1E0Da;%{pFM}V&)-`Dsy@O|XFpHbrf81U&Y zKs=dGD*VTR_mD4X{3n1PAYa$`PXeF$BE-|x_#3=#(xg@5%NQg|2*)yF2s}gv=aXpfNvn5)A%m| zKSsWy@&EqA^!R7;Hn{zB7Z|VM!-etsC-9}cfbXNeC-FA}@BI_!|ARok`7lBMYT)yK z2EL1Y_auS8C-BXe0AIQ%=vV#$b)7r@_ED_Qi5QR8Z!O?sABOR2YR8i=1HOp-SX zHvvCJKK2DA-><^{R37(tG8#Vu{R-}nmo&Zy`aR_98vkq1PhA1^>1zCMfUhDy*7)B7 z-$y?6MWsGB1E20eJOz#a1MnX5p2q(X_yO{5jsG9uGv9=Gh8q88;Iq$!^>5-!O1^&u zzJ~fajsF|)L*y$O{}13N&xUxK8vieh|67o6U*m5DzK(pXtK_=}9#23%qw#wIpZhk% zQ_}d`0N+5quJQWdjod=dG?SCo7Y1HO%XPUG(leEj-tr_E(jB4+lQchxjuZp9a2+d`aVv0KSWSUE`0$_Jsv2QBz{1o`yRiIzc;{O@&W8_Pk{x!fiasRrm@xKSYFo1Zv8b1a; z_EX@;8viHY+sLQBrPSvZ;7eCyeKh_rz$bnNyr=OK;Je7THU96wS8#uGsPX>1pU}|lzijB=dK4n zqw)Iz-@F0%lE&X2_`;3A*ERkQz{h?8d{^V|2z(p)vBvKYeCd~vQ^S{nAIC)*Ev?TYtrV2>H@_X^v;>#|-kc-kamu`nQC9 z0@q7(JX^olk*D?c9M85Ny2#UZ!5q)FPsYg8cE=pgw|{8CnuLnN!VBli|CEpFe*O1R> z{6^r1$d@#}0(>?L@zgc`0^sY&cQt+!@FV2M8owF%9A1x+`l(W%Exe}(%E6aNMAbT$69 zpkGFQtnse{zKeY7=SqEE4}9|B5Klql-vE3Cc~9ft2z(Fuw#L5+_*4$!8ESk3_$u;= zYm|K7416E?oW{Qe`1A^hr=s!a!1anA@=c9@E9ei9?`!;}z-Jx-@x-oG@_ifdHRLlI z|90Sq$d@$!9l&Q#hIr~4-vqvnd{^V&3H%88vBtj(_}nQFPwG0QKJNy;fqX&Z_l4se zW8^)Je-G&APlb5e8vkD4o5&9}{(Zm?aD9{*D*3)2_`)M0o}9+FfNvpR(fG@NkDUhk zO^yE?@I~bN8vl9V+sMbRSMt3a_;?=T$!Po+fG;6m()cd|-$A~v@m~Ty@hFI=tMOgn z%gB#4{!K9dbdgWppw#Efpr3p+#8c4tuK-^`-qZN60pGqBuiw`AuLIvh{h`Kx1NhWq zApXRSO1@VBUqwEr@!tf#k9+pV!Ga#O>%7cC#`LV_ifgd5C`lV8z>w(Wb4&o_j{BQ7n z1mr!9zX9~e$hS5AM&R=Wh-awrzW~08eBxJ1zP|*1f_zTne+7Ku@eof%UHU3=SbN2@Q zuEwtdKCwU4XRPt7fzRIu^iw0HKIa2JLB62zYk+Uv7xX=iF9Tn^AMkCBUkiL2`Ju)? z9r$Dd>XZ1jlJ7Hs?;H;C4`2lyWHeT{!E@Tns~KlU3X z-%C&*>yy!V4|wk=&@XBH^MKDB4SZeWUjY0N`L4#l5cv8rpg-357Xd#)KJ{CrJ}(A7 zbtmYbg2ulD`0@QA9#7+Iz&DQtzOC^u1-_60e)#_gyYKk=$-4jJ5fzJwMsZXTjR;y7 z24xgvglQ3w$SgZ7tq2$qu_`0%vcoPrfMVHU7eow*TE!7TpddonWrtm+zx#K;-jSc@ z{63G1fAqe6^8UWBtLgckv^m$ub@^M!Z{!P?|1*Ag3;NV9{}+5N@3oHg{uMtbAG-YC@X?m^NnF0hPs-;m|95;V zU%C9P_>ryX)4Kd^_(DE-*0DeTz|YIaE`K{d-kLs{%in>Yk}qBUPQ14b`HjoZ;z#BE z=N#+33t!4dE?hk&pX!J;>YAemwygl$tN!V z0)8-|Pww(B;Zym_<>&D;@~z9iiVwD@Pw;|ce_qFr%f~MNCcc)>T;Ah(wxJ#9Q@Z>D z_)NZW`FG&`b@cxKMaOy<#Lp@}a`|`R!yW0Ly8HlsLcVbMh477h?eg!&5AQ@D?hjOy{Y~goxcrOwG5Ol%U&dGR-YbsvzJedr`{&T*U&Bu> z&+AFz@^9d0_Sg0A^8d!q?m~X$@^9n&tJe2p>+)~MXZn5&UUlrxJMrN`^p9QsBlt!> zbNP?r^MlDRU4AiqbO^q2`Ni?Ay#JbGy*=l9L@xg+^5Y5mbmxG)^@7mzJkqD}{vLdN z3s?S9`0_CFYnT5lJ~x zw=TadK0BKH;0?$AERPS5!N)E?jBn&KmtP5==j4|zzcM~L7T>u1YWP;(f77wv)$zq~ zc>Zr1Ddjzgo}R z-%tO-)+*b{K&7^|J>#8WPcLnS1x}% z`GxXZmp>6dt^8m?$Nrp*_a9`vvCDstzfZ^HGnYS={CV{+UH)`@d_DWwxcr&;N`3ry zIo4a?2Ona+k<0t|Vcow3n#*GTefoaXj;W4#~5&&!7{ z{~`R8?spQG|1f@3_b<8258?-O|5Ca9$MDngt;>HLKc@SaU?Io;d;&kH`F?;F8>+)ti1nj$9jkG6S{wiT>kU;Vcox^F8@XRoP6Q(OXDYX z|5Cerh#%4Yi?^_2y@Mf_(9#j#4f)EenviX`L*!lx_>EMejWUf?q3?0AHmPc`-?c%`wjer?sp=W zUk~5Nr!Kz%KJ4EAyZnauIo_{`;Z!WZ(T%YPdm|B3v@ z<;U>eEqLE|talfDDIdA~uK487Hu{tR9jL_~IY*iCq3D{JebX^2gxg+sQ9n{#g8!eC_hb z;k`S^_de)Y?+N%(`OxK0!k6-i%TMA5?xaud@~7Yv`O4)_!%xe%E`J7oY?eO3haCHJ z7QT{?UH)u*GtK>J=JMy_2k)X!>GHq8&&W3}|4V#uH~IdD9qTH;xqZ$<$LEN+`-TPySWE_=Lz)8UkE?K{&aH{`h3rPheW=c+tBBG=11i6 z-CT%1-!q@0lJDkD^!Y3Kc~Lhnqm}RGTJ-szc^ttY>+R-j^!dxl@8*5P^4%PdKHoD> zB$Myvg!K86{BB-JDIZ?R*R9X@%u{H({?{1(67swGDgH-w{ag7x^I0PKZthB7pWgW| z^4(mQKHoE6rjYOE#`O8q=-wn7yZKh7yl44i@ZJ2ZM!uVi)z{}}d^exV z|2XUI=5F=*qwxQk|0Une_3HCS;=B1`seCs#tj{mO^DW){vO?Z3jr}=-{BAy4E#J*O z>&x$%zveB@db_!5eZFVDTPWYnZR_(r^WzfvZZ2G(@0n+p%Xf3<`h3s4yh^^CgV*PK z=JB=i-JHEXzc2gQ&HD>J!Txk}{QCUf_->wHEFWHCe7$~(AJn{qOy0BnIKG>oSju;E z4*UA-h41DwHuBxv#Xi5M`kcynKK>_JZ#UPm&+mcn=1WHM-Q37NpW?gum8pC;m$J|A zj_>AU7V_QP%Rav=zMH>U%Xf1%`}{8WZoa1%u-)SJ*G?DM- zj`rp6O#Xl7pUQW0P5XS$eAP<6o15C_6Y{(Ht*v}Fm$lDti|^*c2A^Vo!V8V{ZiVmW z)yDGOT-m<-E%4nu+)TckbKB=P!*}y`OZje&ZlB)--_7%F+h5AeTMbsmR}M-E+5J#mR|xN$S3l_gPgIwR~!MA3wDVKG}`j@?S>&`|z=R_&N3`w)}hX^WRmze0z_P zzX-mN&*dx2zXv}eU&$wyUl>28{cPnu%fB1nj?q8(ysrO$8vPf-Ps+#gk>%fokK{A? z=58Z@LHyiz=u^u3mEqrs&*dBW%*uZUepufBg1)|%e>=YUHhm)b!14>=C*)K4_AaCU zOHcmq{L@grkgqKNB7Syf`qc8dVd}#US@bymgN#s4txA<}S zT)v()_UCDQAYaKhzcKui_?aE))5;fC{^R&T`QS_JPipx&e6<7lv3z9tNAP3vnY?fL zhw$|oeBP{-Z|*eK`v5+WZ{$nMH~92)^8KY*Z)W*>@q_Y_d~ErD;>S)SKa~$G|6$I@ zn?4m^$hUVG>-`|!I|U!?iOVg&D1K@Z?|oUPJKYm0$k@qa`<0nrd zKbNm>H`e<;d?a7V7nXl7e(pr_Tlv)Ti{OXlgOL4+EdL(-#0lib^1kI4#?Ky)&*Ynb z80&pEen`HQFD<_izCMopMn1Fr06viSmtnoJ7`Tu=AuX21U-`-}d z_eK1ed?8<1{sp`*U(4r~e;%J4Lm%%ey8bQy9KJjnAIgW8e-`h_C-R=%uV}IuGp?o7>TK-XdHbK6>EbGlI{|LT56d%dQmj44jkWb|U%l{6a9-{T` z!#dj=jP?E&KPX=-zp4#?6MpPq^1bC)Z*KV;@xFX0pIE-aPai~nA|G1*H~0bhT;8+% z4fxRm$*<&#ON{mY8XsL@)zL8<^2^L{V&4T@{!A5f**Q>KB>!>c<SBSz$YHxkEP51246j`>)+)o{LC|We%g^BlU&S{r z|2Td|-e1MB-hVy!zwhVk*T|1t{weaa*YT;#KcoH&@cmx6{ImGx4f1Q3e;%K|iT74@ ztoKEH^lyCV@-O3C`NZYt@rB3hVeay;;N!R9E0=#2?=7I$f0us^U&;roIrisueDZek zW0!veKlToM=JIdi2j7V=UH;$r8TrQLJbv@IvI*F8@yaoV>TXW4#OFC*Mte=<@Hvk1UK&Tz(<^ynOER3*)^-$gf;} z5qv4%x_rp{|Kz>o2WvR?$0t8r6d$|%vgA+5XD+`e`O&(1|Ksu>!Z*rqT>c~Y;SbW^ zU(>PPkK$YPiClg$eDMwXr!M~$zJGJ|DO~;&JzN(*q;^gBOliF@A50*3;E3D zSH{n2y`{^qf}dA@EB`8dBVV}uHTZgp z{-qmAL$U_@R6G{b}y< z_u~WIe^oC3AbwW)t;;{GKDu8E)^qI7qso_$UH&nAsQb0d<)6S0>wc|t`6uyn@{P+s zji1#0n!mndy)Ax3_iK^MKZl=}PhI{6{FLtR3YUKgKdSq++T{oM`))w@Yu*Nq^}ZWF zEg!o4d-V6I?(Y(pe=k1O{aWtw@52YWU#ndH{rDl>ueC1!0sO3d@J+}5d=NjO`@7iX zKa6kWGnXI4=el1jUH)VENcU@v%YPi-%KIBS*1I^q(EVEE@}I=V@8SJn>hhn$kLrG{ zaQRQ;2XwzyyZn;)X?ZVptamB=nC1tCF8>+)(BiB&arw{UGx^-*hw!uVmCJttAAW*9 z(Z2ki%=~@R7x5GF!M7ay^Cf&EAG`e0_~B2|Cv*8P<8%4aBEWVX5Tz(z=$fxL2yZqPX6ZXg3*sx0fnv0F+4X(x4Td_Zhd};Y<{J4BBpIQDI{Pc%){maLezZyTY zCBBspEPoX~l@B&&z3oNDdauL}%E$7R<*&e3ThJ$y&nJS z`j)={KeZYCL;2-x9+k@#`> zP`>%4vEIY++55;(-~;97@|ooi!Ov_+ekC7U{vdoR-^vG;KL9@{A8e!R|2$*8 z8GcMZKab@r%kPUHSeX8qd~W%@@zWdNOZmj|KgB2VjeKbNarKe+x7GD;`MvOC!}N*d z>t7iAvnSq{Pvr~C?}49Qf&4-~wS0XG8iV@}=cB!)Nlj zd}jGg@k8>Jd~Er(@b#DJ)5-^yUlTtrAMB{>zcALj20oCF<#Wrgj-OeYKAC)C`3RrN zm-3#ff+*1HOROg@q?EWa||mrvzW%YO|&{YCl|@{#3N z!YA^zyl?px@#PoD_jYEz&6&n}hw-EGp?qoi74V*XBA*{^Gs`cIACZsbW6OUW-+q8TseEAh#qg1QA>SThtoLL1x%ZP_ z%U6~k#1G5Ix{edee+1w7-$$QHzOek; z@k8>hd}{f(;p_L3AAFbfMwb6K&jXLk$MU}A-@pg*nS67YvEJA4GmFrtlrJs+3Oki$0}%Y5Du`lk$yxX8C*Zk-Wc~ zu7AtlgP&WFK9PK2`G4Yb`Bc6=*jVq~_+j}%zOwu*e&U_<$-38b%ioC)<-OfmZ)o{D z@U!nAKa}?@e>*;tPvq-^jP?EwKO~>a7nZ*nU+eksNut$bwpoA9$w^ZS?J z`|OWz`5W<>d@SD_Xsoxw56NfprR9Hvub-k%DW6&X2K=~uBOhD-*Z4r*Pg!qZ`RnmB zPtqrnZx1lm`zw4ZpUPL3zYaerU&!Z{zZPFTL7!SavHUcCOy2u}u7As4gZJe_dC&4! z6t$bwp%kiV~!5+H)Eq@u_laJ+_ z%vf)UpPHjjCSO|qQhY35%4e3pMEP5g-^j<7zZgINDBk~}u7As4gfHYH`F1~Jy%*v~ z|^5^3xAE8fGkegV33LnYW$`397OZ?o!LvUeEI9;dA*=zTVeZ?*x8WK9Mgh ze<;3rh(5V|YWYL(6Y`aOxSP@EV0CwN~zl&>tm1%CQI`XutXC%XQ}jPiYkVvEG&NzI-TOS$+k4@(=P8`P}l$z-yi>SnrqcV}Bw)k}oa)Mf}ts@Tq)Y`7hw-e~&NZ+ntO) zpU02L*YcI+KZl?E9r@lqtT(s(5I(;dAIc|||17@wEk2PCEx!~#l+Wco%YPc5-9&yR zU+-w_&!_P9jrdl+u>2?Sfqbwp`;%IJar|IKek>nZelh&mZ}6GCZ~2emr*FWQ^34v$ zdI$0T`S?b@wETyZKZW=AW4)Q>7sV&?k$i0V_u~iTQ~AL1@57hBq)#E=Zf~r25&Wop zEniuFVZ0~rWxD8d?jCRW9(0bpE-*@t$bnm8}O-o zaFDKl%U_Qll#k`B^^HE);j1(0lga0npT>{Lm-30_ug3fGjeKbNEAi83(8oWR^?H`S z9G}QX^7VSgdQ1F(d@5g9{t|q7I(-WH)bbbMN9Akz$nqE9J$dgC*6Uk-3O{ukeM0%> z8^(Hnfsf@A`O@+~$IqWielDL`{#<+^U&+UoKL%PvECE$WAcf7 zY5C*vzI-m9S^il3^r7^r zOg^{#q4=qT$uH#-%O8x7q zvwVu5kgw!p%kPd4H1&OSnqf7nS3l?S^hitA^A)`xBSlddO!M< z@`>el#E;82@}cFo#|QHM(YpREza4&NU;0Gy^%})-O5;-~i}Ka_7)H`co`K9Nu4OUrMBFMmdUE}vOG#*fNZ^0DQ= ziTC7N`M~n)<0p5ZPmt^SkBs$x10Tu9@|ERB@N?UfpULNz|2jUGFXa=sUoOXA1nbNSNppT-CBm3(ITCGa!b z(5ID;E&nNeDjyur{sfi}@PqQPe7lOV-cR7Gt?84=SC(HKKPF$w=a&CC-j{FW6U#4# zpWcc-{t2u%wEV~LiF_pQS^lH=0r|Acf0I9_Z{FD;zTA>Ng?#;n;Xi^Om9OPf%YPW} z$$KY~>s$Uq_;?HYg!1L8PHlr}DYw-{3rl*-f4WG%^ z%1hdYZ-;IyuOL^b&cj1dQ$ZzD! z=Z!wI_z`*kR9tNNJMr!6NtkLII z{II-t8ZNT@-|@|A^a$(pIiQFd?H`ShnBw*KOkSrdzQZ(U#>_W?@W3Z zPZ<46{HS~=9~^7EpScw8$tUu@m47il9;Qz&Up{X1xe!0U0=|;ZEPp<}kZ-&Gmj5Mw zL_Ro+9@S$;pI_kH<>?d4Czd}KAIWF(p5@QR&n-uODPPYSea^z?@{N3I`P1{EzVC@|k@7fYIlN>LXvur)_1uEjPt?=gZZ~ z@6L_uyC0A6Q_A;#?#S;s?=F<@&avyuU!8n!kp77)zvukDT)sP3uP=WM@+b9q>dKYh za~@zT-<|WGGT72R_PvHZDJkPvrgc9R0V% zw~z7j&&cJs!cQwdb@{FF{>SKFxcoNwG5Ol%x5ZcT-Y*^N-A?&Be=l_T1Rp=a{v<%YPd`uKd#F z$MCg$yDR_m>`&_QDSm#MK84Hgfse1n*Dk*&K35;_ z0>^sy!cQqbbop_-cO88am;Wh#PJMEh-y0u&LD#>_@2ftE=D)jqh98v=E_CeA0r*Mv ziCz96e5w4*z|#y7hE zs$BjU{Iu5Fx_piwRiEGz$Nn6PpVIw%?D8LEe@f+NE`J>P17Bu;N|!$YKiK{J$K_AL zC(8FPb*%Rk{Iq=J@~7b^^z*>f<3zdi#$CSNK)w)`ph@q4!nOAF1P$~cuzi(4=sNTKE9p&RK8x+=yN!}_y@j_Pc454e)2YaE$>_YK>XaT zc<*X@lpiqq?1vwg59MRa{|rA{lb^`9?>F-I!qNxrF{Kvqt6h2 z;uw4*pIZJi_}QcJ{;$Z5EWadvNIsJHEx!bQ{3!BM`DP)be}JDk5?{!dmj48PP`;MW zEdMe5^x@=t*V7}g{D<+Qhv7r{YQX6KLHzuo_(VRj{0H!phv0L0&+-cf` zT0XP+tH_z&n@5L z$K+f2#PUz$efgkbe?rSYiJ#tvxqM>zzu7Y)oBWB!ejY*o z=rZ(g)hD&`5664*@$boxEPoh24$05tealbai!b9#`NsM@#i96iX?!DJTK-LbpB4Xz z{qg=m|K%H0VpT`f%M}N|Ke{1+5{8&wXDxX{aGs@qe^%nA> z<(I@Ke zR!08Y@sWHbpIiRly#D8ZBEOXnE&nop;*a=9`;-30=<~dO{w5#)nf>uC{|r8xAwQEZ zZ!q$oz}J7km-4aYAHxUojePrSBYzH`{+@jQFZ9nX{~&(uN_^4n&-F(B{rF+|RQbN; z@54`Ap?vxBS4RFl_}R(#Qd~Er%@cH@pM!vOv9)1SC(a+C){ro(){2}s6g@egWI|On`4dqJMe*gET38aR(yIn`I&s18~HW9x(r{+=aygmh5vnia!kIFuWsOV zvG4hckK?CH^8GtlZ({k6;Roa+dC&5L_|Z$rPvwhW8-3o1pSlEJ$VZlc8@{+0U+MKB zyWYt6@a;u-?@rbmSpH4s!A0_+eDy0M|8;zRA^C}XV)<9`%?0>e-n0BXK9sNIi|dR& z5971*$#3N&%Rh*pN%6s~uK#O|{0H!Z^09no`367seeyH;!1DLvr+3Gf^3}A_=N|lk zd?TM&{%-te_xZ28Sg&XKS^U(l^oit)Ym7d3;EV6!Q~Aj9x8mnMi*LK@`D!D-mj5ok zR(@dlzv7!QymvS2t*$ci|BMgiL;1w=x8Sqyke|qVmj5HZ{x&|BFRnED`~p8NU&%+7 zKN~-@Gx@E2bA^$ACVo&p_$T{QTK;tW#AnEla%Z>iW z;maNHjeKtTqwt=*e-G;oEq@q3-k$tOzP`-pvp+t3hUb5R=WxE|_rYiDkY6ajERFo1 z;On*VwR~*(AK?Re?_aF9z0}D60X|)e{7^o({BHPaO?)CBTK>CuUp|))&NTXLj4xLw zKh}OGXBhrlcu&4nzGwLj@o_|ca4-8)oNnZAfG<{4ANk1g>*3o~@tJ&cnvuUQK9Vox zGs}M+pRYoGBOh4)EBJ|()u-FfQ;j}f#t+=b^&H*D{&<%E5B^T;L?>_mV%h1pOQN$ja~eJih;c*85iIf9Jo4 z{OM1TAIUc-8vT3D2k1WM|5m*B-}&z*e?a+#@-r*H=e&aM+yOIxfc(*b{@#PEH?Z=1 z&QIvhK``?dB!B9Y`LB{cxj6kZeng0^`a~~(aQGR6Q_nZgPo$F!d zKS%zs@}q~@pXNBDf6w_O-8my>{?p`7EJpuA`I(h}Jg*P`IWI-t%zvEx*^iO$J)-O1 z%0H3(?);YS92PVG5%PzWpD4dN*4Uq(^JKbnVa)v7$RGbG{VU}sR({XFoN8PzaZ^ie#{-2BQ&Qt2nMKb*ied0HH z|K{oEXo1z|7vy*6J9XzYnfbpbzj%ZE@GK|J9r{ZT{p-=P#>#cug^yxWotvff(>@!JzJx_kB z{M5?tIsdIY$IZ;|IbW_jC(iUI(kFdc>($TA%byzS?K$tRJGaivKc4*RCGwLe+0WR@ z?>T?3J4esVKbCx7`IYk9pBVkG=lUGe`F^dunV*xNyh#7xDf;JDe$RP>vAmgI(Wg7l zusfH~^heUidx1W&ey>xH8|%G^{O)|k?wmw3{|NHq=gIe3^rd5_(>jb{E~ z>c2Djsq%d*zvukP?i@)o|HtHyJV$=5{PM@f{`8!O*_~@?=J%Yp*`1qd`XAC~uBA_+ z-}AM58GU-r|Lo53H1mHz{;=|^XLNm9`90^6cIS$k`6>BR|Du1;k{??6J?Eo#=bW1P zyX)(95BZt$>mM2W({o;HckZg0e=FB#cOGnauB+*Hq0hu!^hx!5Xy58{8~NS&wB0$g zX8suYL$k_%mi;XEG}ikM^8a&QuDqH5ZSrUCAitK6t^C``@6PY-&fzulcOrl6cJjmL z=wJQN=zj$(&n)@fdC1+l#%BJujePS1qyIn2 z@6NC8&Y?E*@4quq_?o%T+ihMR-b>7-<{Xpox5%3f0KOwPvqAx==w~J z_1;Td z-8ued{>RBrZqWWKzuL{%pMR4dZi=tv&HRs&KlU`wD|++vkG3)Ld*&U4@@D=A$sf9g zK8bv@wUOU5f1#VBVCMVek6%rGrTomw@0kbD&2=#I-$VZNQ|wRhioU*9e$RZ0Zq9_6 zKR|wZ75y{iS6dnT(>pIi-ppT+{OU^b8~Mb_@0s7x&EYWf-$8z&{fS;>e>^L{XP!tm z7sSk8K>L3M{R`z6TN?Y*GvB1{`n>fA{P*jjNB)5Fz1MX8TlqcnR=T+N-gE`k`OlI+rSoPBrUzX8A|)Ll=>sFF|g#sgZvNzP=FODnGaU?f6NZZyfxa^(L182Yy`n zv3zLxzvJg7)qg2^r<)l4|ArryFO~0G{?GW}0QR$yFE=*w|AY@urjPI8V$1&yKXj7% z58?BTjQkt%<0s-%<%gF4HNMvQ^M!o!CZ#OjZPr#SQlAp`xmOm0dmE+?tl3Rb%$e+N^AA@g|pIZJP{M=9J zA1pwwZ}|i8Bg&8En+=RU`{E~$rjK_H&pl_B|0#ZEFZzV?(aJ{txcVPOe$(~0{15TN z@`>`xuNnD2z&A&dAH5xyS^oR@3Hek$w)}4ROrKXR9U@LuPYA6R}}eEfa#Tls1Q zBYz!yu{%C^CoZx4s`zL(<*R?Oypg{mKHn9eDL=COa`@(Z_)@-E&dC2NK9q0dGs}M& zUw>EYJ(ustYFQ)yOZY%OT2T9A`7hwpG4fM+&+?zck9`MU$QNHV`YeSX_%=RP|K=-( z_wkWFPv^Z0ms$Qj_`!|H59I^Pd-&-XpQ(?xjM3+H?#C1PT=_+4_<4N#3*HY`@{#3V zz>jW7pH{y4vXTD`zWO=&rTPb!e+oapf%boZ+-hkf{|S5{pUEede+*wAPJSuxS^gn> zv_8I3|L99bp9k=X&O7xN!ZrGPweRyXf5YeNksryImhU+qHI>h<y?5*Db%oKV_xxM=?p)ix{GRiEBlRyXH}bDyKfCjXbLDsE z3isvroQGV=cjp}U`JVHcTlwzXX>$zB^aGFaH?z@6P{Ug!Ojk-1qsT@ZI_Rp?r7lexL7| z7m&zza{&5$&-{g2U*B%7LZ9!M2T>`%oAc1;d*)5F^4%PXKHoFXB6u(R)6J>q^BMco z&C7`8yEzzrzGogsCLdgAe0_W7gLuEt`;!X{Kd!IWb$Xsn`Q2QRzCL^6yLl*~^1C@F zeSQyoH*Y0+AN$kIQR(wN^ITH-Zca;|-<|y7&-3?7A>Yk`>GQkDZ_9ei^VpwmE=`{w z!*}y>JfHsl`Nn>J8{f^}3FW)FI(_*&2bNz5Kff?Oldo1c`n&@_ypZ}_MSsuo3#k79zEOS=8TlT* zUJ&npi1kL6f0grWy#?^zHS`HqGxF#0g@;d-U#)8R7xB@*xtTd*%X^l8 z96$4_ex9cO(JDrtNAP2>$bXpqX;wD;1Neb?d?KG&{$BjlOZZ$qu>9}wbI&VZ{gba5 zeQw52Jcn4KY1PfGx_2jMxP8H z$(Qnx<@d(V-$(yOzInTm|6}~zwYvTnW4)Q>e~2GZek31Q{`>gJd+C$PR|^<@zNbF_ z!WZ(1<-dcE&&1dAp5=E`|1+eC?8pVEBx?j_(Z<(jQlO|vp-`0 zbNSNpo8!Y%$*<%y%Ws0uG>@Z|k1ZeL1I^^ED#*@(rWUviMB% zGE({2@?XXWN71K{Z(ld^zksifz}ND*asDe$D8!7(VLe zS?K+VZ~2eln}g_|E5Cfz$bUONI}l&V$Cm#$=Y`Jh!uMAz-@anxzlNV&9v=kkPj2~_ z@zo~uiRDAfKacn2Gx>Vn=<^Id*_ixNKDGQ4_;MqBBkx=OQM@Pbe~R^%FB^Rx!N=bs zKawvVG5kaLBF3lkk>wx2w;SRM`Q~9G|9*TVU(08fzYm{(lYCFl&jgmg2On;Lk2hd{ zl81~wkMaAj*^9V-Dm`x#Y{tLW_xgD^`Pus9C+g!_`G3UM>)|W;;z6U&@9}|rD<4_@ zW_)?CuK!QdyLrIKzY#z94egJ7X88&~wk|%C4=jHJetHC7%2)RreXhq3$T#wd<*&n! zew}=ON!IIGehNRe4nC4E8l%s7_}LGzpQ(Ig`JdxQ)+WD@Z|*bl&&5x!g|Fo^%b$&( zTNCds#d-tFpM@Wm59O{iheO-b~M5)teaC{~6>@tU;ed`H7W(8h&Q~g%{@l`3HU+zOg^*xarm)S$uH#t%O8uM zUIpLCSN}Bn9E~54_dm;e6U!foA6=RJNZzyjPw`V97a-A12r{QOGzLO!zmUicCD zTE4l<$lnt`xgzI3hEL_QCyo4P zIPY|P4qwOzmVW|2_$a=XubwdSAH`2UjQ75PODz8&e)J)HDDPSRKK%Rx_(Z;V{Quu) z_L>D=dSO4$3#a*h$-8_#kNrRIm%Ih8eCy%tc42(?|EU~);t_t%*yXqXAHT*D|MySP zKRMsOo}Ndo-bU|m!~cJOZvbC?i~h;GaMdz~?|FWvdk&`i%p#LwyZobEXu)Au|tl(q{8;x~mzm%5{8;YFf13RGn_O>|%lACb*1CL4 z{*>~&=ibcz&*D8jUl)Jbu|Ln@2lf13=JGwy@0Bk968WY2bkF&j{d=A#^g~DgSIHmH z^NQVbhh~1y^Np!1|4s5|v_IW*kY;|*^Om(Me*s>ve7#2-}C%=?(!k|L;87U_nf-fe;M^z zNbmn$`Cq|j$`6)vtheWR``G1|C4WNC=XcNLoBeyA|99oDK>qNq{QcN{PQc9X`8xd?sGL}e$VH3;$g>r z9>e|&{D7}-=JK1+Cy_5*elz^EeB<&xpI7o%boAen{7SzM>OR+G?oZF>r&3q`w&bV! zyjAx(D>J|6^IWwne+TjdeO|2l+?Sc(^ZBxHCCC1JoBUe&-RIEE{4xAc_xoR0{x0}T zzH<59d{F>wI z)${pEe`SZ?n?BLe^yxl_Y4%xx_w((C@X4a&2iEhGr}F#Fc|EU^>v@&NdcNgj^hvfN zKh*D=%sz|Zr{%p>9P9l!-rrjJF26W_Og?e>Pv9&0+~ouO;5PKBT>ew|RK9ijCGa!y z!K#k^`7}P*mOin|FNq(Q&s=_ad@WzP{4joKJNh&(zY;!^_g8bQcNP4seB|=0;lqSJ zsmrg9pO7zHeocHMU%UL;_~Gs8<3*13ejT67hb}*YpOa5q{u}sc2m0hLzdn9azH<3* z;=P}d-@1H^AC(VQckItb_)%YPT2 z$>%P=D}GkKa{1ly;r{e#T|UK6$OmgV_Gb@#BOkl`p7`Md=##npkMX&D>GD6p&&f9~ z|1*4aAbtF`9qZi(-^xcWzaM_&Ao5d}-ydJd7cPGweqO$I`GfKC!SwOgajf@H{FHp? z@`vHQLD{s??2pS%1~_<=*ouU!5Zd?Mev{IU3H`QYo0{W%`*PtYfJ`4jPD@|nw@ zgsUlco=;em!HI^^8Scpy{F)3z&4r$%ig~9lnxJT>g6e;92y^UH-lNd|h)?qw(dw{C=l9 z2hHrCT&%Ks&P;5c3XE`L6LOy|p0E`K3DQGRz0 zo!S3le0Sbm5IerUm*V~7>EE4;XXam~{_>eC{|bDi^>*jxYx%{v2Gs^GIB{cj08vmd34_*1c!3QU@|J^x>X8w)%?mR|M&t;nax9X$( z?%YPx{|?`s51F{~|A0^T=li!iN7Brn!FSJ>R<8U%;%D_dYWEzfng1tzcOGW2vEzEU z1wWzlGrMy$&HO*(yYo3SSN>n{jqB@f^KYR)O8<&3u-<@ylZ|=ArTKt^yBbR>`-<{8#y8Lta z=u-N3=Qx}D^E|#gU%GbXzkqL*?~OXv`y#$OA3JpUm+(bN|Lz=Zv;RCk*7@GKEB_Vz zyz;wqz|H(um46w1T37yS_$m2d3&;Mvj_=M_k6r!^{OINM>CRy{`@bo#^WjTZ{=f01 z^1E~7&HSG8?foqs>wTNf^S^@rk<0g-&!4*d+sXH@B)>by-|XKrU!Zp7zmxni<#%%k z%>17D2;o+a{dpJpgICeNo1*H%G+G@0oAnZ{t|+4Sav4`guj=`guZypOH^p z`8VN%Lf5~`-;5uZuU-E4_*&lE*0J6@@k3|RCv^E)d?uf`{9X82`P}92#)s$7r*ip! z;wR)=m%j(!$Oqdw_UB*t;dAK|yZpWQTt0L8`|xw}rOP+?=;!olT>gIiq`aRv*82dy zm5*HhLHx)s=##qqL-<0zaQTPv^YXRJKZ1|XqmQ?}W4#OUdNL&+y8Oa;@0a8!F24wV zR6ck4_u)(V%H`jWADE&~>+*}@6Zv2V$Nqc>KP?}-{2<;xpFWw(e@yu|;7gZZ3_tc8 zeB<(q;|D9ezoTQlpTq|@;v<*;6uy>EUH;Sf>?ZOHmtP7W{uW=m{Aclvytk8My+io? zX7WRq{~UhuclgBRKaU^zJwA8&FW~3pE0_Nwe(De8w+`@`mv%laY zm;VYr{3||n`LE*hzu^m)Ul!li_}b-{!^gMcz3({IyF9+U4IjGv3i#w7_{8N`!uz-5 zbC+KkU&&W4zbZbxgZ$RzSH}l;;)5~A{;Y|wdc)!8tF8@>fn0)2(Kf_n@t;_F?AH1JF!S@{dvkyL%k6nIW{EU3& z^84X~2k29}e1;#FZ(M$Vd@b+q>R9gq_@M{s6S@3>_)I=^`GfGY@`cMEj1M28Pwn!D z;3wq0-5l$EKcAQPzNhmdKF2wR{=NKredk$yO`ng}`_*nv>i_em;lKYr?U~=2yZU^B z{=VMdc5`0M{GR!C@@MpZxSLaJ=J(9cjdyqK=V!^|9@P*#r7B0UIzMBVKyZi{=o8kMV zn;UKR@119zI`(IM@)Nxu?&e;b`91Tvb60*$ex>)%mCN_c6K`F96Y|IPez==EZuZ{{ zKcx4=@edsPGm4*;&s@G|K6~l%TaiDk_s`uNceDT2_-?+uzlWp$Huy=s-|ptnoB7+~ zNB++Bmb&t{!_UhXE}!71^nSi}`R(zedOz>|(6Qbf@B?~3AG-XG`04Kbzsv80AM4)# zyZp}hLA{@^T>e8Zy!e057aBN~bAall`TMK7gLU`){q=3~XS(|ZSN?bK4ahg*E&@_XQO`P}7yh@X?MTz*e{^elZ^ zm;VudQa<>xV}JI-xAL*e{}?~=9DOpEAIBH+rOO|N_jV?~arwjX^UC+f9qT;;A3sli z}dD4}R*{pA+zdFViP>`4jP}eCG0BPYb?DD^V{(s+( z#hUk2EX(_`w&u_2-jA)g^op*3)?R*@WtUxRecpM8ONWksmRb8t|MM?=wfh&kH|(G1 z@Aq8uC(FY$BowaZW8 zqepc8@8{@qK7LX@bomSLt$gD07ve`A)%EZ47vT%}%H=P{&&#(ie+hnS3tj)2V}CBi z$8-4DEubNL(bnSAN;H{oaH8<+nre*EqHe84}*vEG~UwS46A zzrzo`gZ%%)-h0PKQGM^@gD8f+qCjXeDo9k60Z}6=j16O71T}B#sHnlZ)_3esX8B%#B94R{yvo(?|?@QsL1>+s(I-r5B87!x(+Z3KJ`;w>G1HsAxqJ39QgfG=+c zdXhT)cYseK-q+#32YeIaGdlc_fVVdVJ?8Zqf93$b7V&W%J^*|M@vaX46W}XKKu=1C z{~7Qe;sYIiF5sIHAG<+Q-d_M8Zx4EG9ey6*>kyyN;THhj=m7kl4!;oam55L4@QVPS zLcCF8N_FF_GGy33w0jaUH%t;F}Te>hLDuYs)}S zN{8PH@EODhI{emvuhyX@v3pF#-H7Q-`D~4TRQxQ!0#cyqr*=Jd^6&G9linZ@qcjq zufu-?_&UU!w`t1zG2o50z#rG)X8^vW2l(Ua@SgzQL3~Pwe*)%9V?BXC(BVG?{wl=B zlA7{<26!LwwhsR};7dzEPeO-J13rOxPlulg_y)wMb@(p;Z}tK`#_gK&ehK($#9KQ2 zSAb6=-qGRb1HP;`=t=7EO@Mb1@9Xft0=^OP86AEx;H^HO$Gk)1&r-nGAU>|cX8<1{ z-qqn(0KU90=t=4DD*>NGe4xXx0(=wVV|QxG+YETSALy}l_`d*Oi}-{N|2N<>i1&2( ze*j;xCFn`(@CM{(5Anubn(}T0_-4dgI{e0fkM{>Xjt<`r@O6k!>hPNa-Y|jR*WpV5 zUy1mP4&NT|Da4z1Yy9Z|_>!$aPh5xZ2zUqat`6S`@b!pK>F}KaAKM!A1Uh^dz*iwY zc8{jKJs{qE#M?T2SKu$*2J|F!_!!_5i1&2(%>dtk__Pk+4e;gw&|^&2ly`H$S0moi z;kN*M8u5+}KM?R`13^zxhu;?PF5-P1eh}ar5uefF%dvjTL62Fh@uv*TvLjiB?3HpuuH02!z_!`7pI{eOn4-oI@@cRSaLH$V`el+0A_X7RC z4u1gPlZemg@D+e>LcDpu#-9TLZ;u2$aUK33z}F())!`2Yd-qzs{2YlQHJqaB?4){96dpi6Wz#Dr5e_Dq>0`QfHHy+fKcP!vj zh_`h3aeyz`2lO~P{HcI<5TDfHPX~NG;(Z-{0^no&f}V^HADX{1s$e~UoR^a86LRYV zLeD$WXCoe;GvwjRK~E*l4h!vp~Q3h{m6z0Pi9`uEQS<_(sIL zI(#MIt)ZYNrNjRR@HL1JbogTcA0R$9MN{5m0bf20^w>K5aez-EKB2=O5BMg;dpi6H zfVX!BJ!u{OM8MY~-gs0~UI*|Q#9KQ2Nr0~y4tg9N{$#*=h)?S9rvSbg@xBf}9`Ny9 zKu<=8KMnA8h&Lb8_)`UVV^`ph>+oj)z7p}S4u2NlQ;1LL@aF)&WH-nRUk~^O#G6lQ{HX!F83#Ra9sWkZ zyIleA>hL!Mz8d*cI{a;bPa{6i;co|g*%;6htJ9SCPQW)J-qzvo2E26y@F#Tm$$*b< z0eDY`zZdZ3V*#Jm;qM2067j}Un({sf_$I_#I{d?cx5t4VM~9yR_*%p#b@;~sUx)tq zI{XuW&mezBhkp|A-jSf+d|KmA9pIZ0AJ^fZ0(|@^;CFTSrvYDw_>>O+4B#uf1Am~y zKMQ!{Xu!vw(UkW&+r7uz5($W9sYH|*Y^ND=5rc<>H%MU zEa2lh{8YfF5%22oZvejRIN(p|@NWX%MSP&czXkY4#K)f3l=pvtw~hxrwhsR`;47~M ze1gI!;Crgsuc{W^HqQPwdr#Q9oeBI^IKN@)?)T3IypMR}1xBWx5ueiGuLit@-&YNE_-he=0O*gss44G6z}FzZt;62{c+Ua;gbqIm@bQxX@9FS2 z0lp6LX&wF+z#At6zwwf$yh*@UBHq&B?*M!X@s19E7vM`y0X<0_{vN`11hZYqkacxDNji;7d;hysN`M0{8~Rr*!y70Uw~AK!<-E@YSb* zp4cmz@-_gzd=TJm9sVQ0r;$IQ!+#9;veSXz)8S_T-bH*`hxY*Ahe1Q0*4*xme%O`*yUx!Zvz6tRe9eyU@lUTpzYZ`yPKz_u>b@(p< zUwa1VcXjx$0G~m8N{9a%@D*nQf1tz90=$R#*z20|egpVs#M?T2BjD@K0zC;Gem3BZ zvjOkv@ZSQy67gvr{yV_ixIWgX*Od2rz?Yl@dMq9O2f#ascXaq40bh^!qz*p^@Ue42 zkFUcAfUiP)Mu-0i@IK_buLgYiGoZ(KQ&Zl* z0iQ&?rNgfQd=ugw9sVD{+s}fYqz=Cp@U@8db$A2rt1^hs=z>=8v#CbFYvoMd|SXbBY#SV-x%=m=Yc=a;Wq(%9pYpE)0DR-;Efl6-`3$v0bhyu zgbv>e@F~Q5I(%=ym!v>XT8Hlgcn9&u+nVzB1$;f?Egk-c#VzkQh`k7U938$N@K+%| zsl$H&@tL?D`2Dm-|5|vzfpsLT&-W(7^JS|U_Ib~jmjZwD&A{({q2Zqe{Iz=nf8svi z^;Z!5Zvnn)55U_G0xrIUz%K@z42UC#$=McYS8w2=~0f3J`j`$-9d>rtpZ2+J4 zp}fI30)IH*D-mzJ1Nan$KMe2&;w{9x6#h`aC-8pFL42IT9|HKgtwDbh@g{+<{SD$W zb0X}Gd3p6KorL|tz+W%#mytg+mhk5wz{gRK`7ZGL6#hWKH*baYh4>_euK>Jw zg+BoB6*zyALcB%cMB?emLMWCg_j72jxv4LHM&X;A;_YBi^I%!vJq1K7sfI zg&zv|rv9MEL%dDlE#${|NFzQ*;fDY|iTuXuhF9RP13-bcJi;luB@LA-q>lshl~mjQocKhSS}066(xoILy>z`KZ# zBi_gN=;YzI1$-IeUBo9T{6N50bp<^s#5)vz0O0Gp06svxMd7yrdK1ty_0KUF0;8TcqDEumTpI+rg zfDaIFQ23RAuWJMN*hf&_^dUrfR{*}*0KAQOkHTjFUxD}p;u92pDd20@!rx2v5N}iX z#ei@62mk&x;$swk5#Y-aZ+r~p4Gt#CyAbf!8sN7OpQ7*!0N?mG;2p%f6n-Ay%MhPL ze4N7n1bA~b@cW3*97O2<0q}{x0G~m8lEQxnc>hnpn=`;4hr-VWd<^k%#9I`87T}#` z;CB&kQ24I_pZWvvDa5A_B+C0G;NzpD@o@_O3E+4S-Mn0C*qq4uzi%_;SQ&5N}cVR{i2{PO{yM!Y#w&j3Dt3;H=tJt>a$-_!Q!eFE#wX0p7U{ z_$?iNCE#O8z&kqp?|`pDd{T#B1$ZCvz7F3G=2sK9gPx2IUjlgZ4#1mVY5Zvq_%!0< zI(!Gfm)!~ct`6T3@QsL1>F}KZUvn4m2ReLbz?a_*_}JH)@^%4y6XIIGGvbX|n(}TA__|u)w{-X|0B_*)9Y==`{e6n04&MX# z>+b_S^6yxX{oQvkZ(Vgi;4?b@9|2$b0N~AUH2wsDPar<7!~YC;^FiQub@*QZpGJI2 zho2Als*_>H1iXuQONaj*@QsLfbof<(w@w2+NgaM8c)nAEcwdKa3-|!>86AFO zz?b9mBUAVMXcNFE5g(`U*6%IP1=qBNmO4c|C{niR+2em@k8PSgmYp+g-8Kb&y9)e? z;q#qV0KT6*zAnG=`*nWI<8KfAwa6b(`ePCKI{<$M`R(tBcuN8QA3|Vu+X;5L|M$-R zBz!5seeM?>fxqfj@W-S09mt#P_0^q#zhVNmm+uMvUHb@qZt&yrsbJAiq!X%ktvh`)qYf zz78GE|JWP&>yh6K2!HU*)UP-W!~4g4!qAaEz#lss{Bbq>6^nqs;vm?k^6~3lpfB)O zA%BpMUuXWr>5`vdUR za{hCE@$&kJHy(rY;u?HqGvM6oF`sMj8N^#R06wL`*Zc|m0pbGF*_DKysg?N8F;C&6g;vc{{$e+>RQ&`@5#G4C?`%|$Q_!D~q zt`pbb1JqN6cvpk3UJJYd&S$1H_?Q8DeB=)__yF~nJ_*-}{aU=d)!i`u&j7rw!5ed6 z+}ivzw3kFaex3f;_zCcJa{=$^@N)rQ`3vCFI{ZAqm&^mau_&*+>*`qm_W0bjNd@aAHTKZh)Bxld?Bd|Zb= z6!0~_0>7)nUk2kh=N7=H)9~EXeGu+XviI)hI`{8~0e^t}DINdefKM(0{@4;tdE3;OhqgztsSKCKeKYP5^vrTfk?KKStq?2YhvZz?&Zd ze`-3xzX#xJz5@LL;?o}x_?-b?_9ftB9|M1k!Vf_`UjRO}4C*WOKEb~g;8ULg-k5>@ zyi4F$L;GsJ9LxI&;M3Cx`~tvdUIl*pQ@~sQBk=P8ZzDdD0sZN>2>h3TuYM8utm;(e`kt=`xQPfh=tBOB6Qxk!sk_OzV3N;_7YNy zi9f44<@%ti(DiiZb!Ek2%iJ-L3yIH0*@{<66foNs5jgii4%&R?2C+RV_&QXETEm;%UCk;XSE&4xVD(Sh;?~l%WTHG zp43v#Y_~G5OPTd9>(67>pNwmVnI~kNmFx_80$kF^r_^aO%O~q0#Vnunvz~dLjI#vO z7a3<2%s7*NI?VH=pJhxxrOsG?Uj50qZjRUq$SGL*oKF8{krl zi9f6PMgFdYsZ*@;6k9p7{-n+ZW?W01rKHX_hMCnPaBBIa&NO+wwnfjg$?|Pn^gNT) zX%sw9=oVW*>MVX<1*x<6d1XwUvi{-`(E5@#}fa>&bd(VqQwvFi03ttI*ZqPjG13#J@`zWGEX!x&y(@e%q*YOX^{8f z{fgFKtUJ};_Ah!~33)xU=y@^nyyErO$n;ajSt(h*;@2x>>Xh}6B->x%>*3e64U>7j z&N#j{#!~fH_ABA%BjQtw-3^PS+|MI=7ls$PNT{Bkdk z+u0wamZ;~M$f4$I$(e}Q-mQrBU`CCXB7PPspNyAkX8GiKWlWuNJRfJqiyUXUOr5g+ zY9gLzG0P{f*T5{FJg+k1dC7?7tBF{?+KAV4B9_l*#(GFth*8%Kj_Vj$CH>zF!a&hjIkmmuS_TTA^3ezpGOyiGlG-dnEEY8t)n zdMRVrx_Q?ezV7v8`6@Baa^t6MV1CP8&waKSEt{SFA2_=fEnhWrUQzl|L!Q^8==BFU#l)Z0IFtFs3*{Hx zd6Ki7nLlN{S1`|$`743vHn@w&eItaUA$o&8^y-Nc_&KjrU|WdBgO z{mFUZU_I)+(Dl5C>tYS&_)M0smRUY|UP;93)vZVQMrP|nelJA&=|$9;iC7P*_0U{dT)wY?|wu->zF!ap0AJS zOIgHvC}GyS)Y-uFMc(K5%<{?eVoaU#y!3kLRL2GOT6ph`+_$92?0-@>pKHtSADPVaq|P#?PFc5&5q+_k*OTMjV9RyyrwhfIS`XbZKdlzFh3d7jJ@PQ>!r%<@T{Rpj+HGR$n-7I{c*e{#O3kvy+U(er8}&iAu)%>14s38>g995J*xZfp$htj*g$0g7D>Zfp$$9Npq8AaSn9`iBaiMp3O4)R3ZOCGA+ z>wEm)=2_qRrEobtkK#I;hjBSh5G>Uo}H#|cdQKa$(-9IHy-af_CTUQ13)-y{K>pF(i zo7$1b>(+t~y|TO~&YUR1qTuE-c|C>qsG;*o-Z+ytiS11g4!(EdwFSjy55_z4;>=g{ zc3*odsn=xc4HVw`&%3=w>CFu0)thl|YrVZNTGwki1DIuZ_Io`($5q z{QX192Zzb)D7=F%TKYc4YcY9Uh4+DqZA^;SVDfqj@A4P>Zb|W`ci_c?kGy@dghR%j za{$HbF?j=p_s)@VhvH2zd5!xZeudr_{HX_0yf%~9MBctx!ncn;Y%IkaWAfUH-qmN0 zokZ~l+w0dY35_Z;Hw5D!iA?e&{BO*Jbj0ioaWbz3&|qZ=A^+AaCz1;p{&1 zo~3v*+wuH0?uR%Nyptc9`7_1qGkHzq75(OU=b!lo#hYaE+Q=*NElliqIeTb z-jWHe<1_p6WhAf7cv+rqQwljHR`leb*qt=r=^lGkMN#ueV_zkE#cX13+kn~na8 ze0Io^ujSWa@@)2*ypB?D_4B8Zzi5n7ma= zz4h7r?e8gGgURbEyx#_=k-X`Fym)ZOLOT}s$2FtpUQg;JenH)L*D8AdoHT{h>oN8E zO1<6i^CU9wB$&JbzTZZCuchC^Bfg``Mc9!0Ze#fOB?kB_zQ;c0{dcaC-$x1KsLw)2 zAuT5IiusZ`+4&Oj{@a}>k^;vm-ZJDB-?zEto`$vJdxS#@oKGDpq*Y*>6n{s~%AAvX zPcuanI!^Igs8`Ix+_m?#jk|`<(|x3PZN-PooegU@*Aaz&Pw`eLdP{@*mXirM#3w&e zym90e@%vAYL`uvbaW;xKgY_oj_l}L)REmCsvr)X}o~`qqi#zxDmEyFg^YWQtw&t@Q zhpc!_+;?&|N^b@JeNf@=_MbdR_Cv9|SGWA#)9^JZ-by7N20t}u6**BGCdAJaZ@J>{ z?p#3QQcQe8?z19QYaSLz?MB75X41JXaVi_a$T*=`VRcRAW4d{$kC&tH^nK z>Uxw9&FF*3JN~DauA$v3fw{IZ*^_l)QV}BvWIb$|o^RLB2t@ z@i61O8y=(d2F!SB-_fkx(f0Ud@OfKim zr#h%t7|?xw@2OJn`tB)zW0yj`iGFk6iN}(~Pc!{3I~MK(gbxSwU3mHW>XbNA?_RC< z7h`@XnIrMxeX2N0ez5N4#c!G7 z!+<%o4=&S(I?Ov_d{(yQwKGK-J&Mw-23r9#LlUjjt6!Jj8;>vyO3lGu$W|;n_v0aG# zFz)%bcddrpgz4~F=-}rrW zoE75ED0)5Adw2o8srkJAB7y#j`@$!;9(!T|%9cZ!nRGv2NUw2bYy6&Rfxqzr}dFSNxL@cgY&;JmPbK^?I$#D8yT-#KUPLZYRej z#shRb6yi;zUNQf@=JT(2D})ip9On2piQ`mpe{pbCra#Hc)Z3)Q*}YfOab_|7b(DBG z{V+NnGEBY3NErW$1UdCOTCc&>Tczl|VGOM|{va+YE;(4yfpb8@_sYTU0S)EkIt8&#pOa2>BQ%#pG>9UNKSq zX3a^DQa-p$-q;zC9|Z3UH_*IsCT|(?3LoYfCyQkT1vit)Yb$#DZoGD%f~47lnQeIW z=B)ao<$0Z$e=z$mm`(BeOx{Y=D|mbTGU8i`H_7BpD7=f;&L{OcOx_xWw~ayjU@>_; zg?DKYy#|xF9(hHaUHSSqT`7OlTl3-}t?-^%gx6#8HX*NQZ#S*Iki0ccFnNtLp&bh! z{(Jcj@o^VU-JmSpl;XTrF4+bm(_mQ4p!ybhDM5_z}D5`KBrMdWzWV)B~UF2s${ zPuJc-_QwX3w^6CLLo$bnWoQMrbbnqvWE9>3D`;Mi$y;((Yo6?0gg3$DH5J~ki}+wO zdCL{v4~y`|n7nc1744$zlBez~SZUdV!Ir#wa~0lEbKYA)@w!ajT7}mt!W(Du#+2s) z$y;t%E}oxqHfnw+rRdH4K>J`a^)@KHKNaE4^yAfAsp3QCU2Bz?SLJM!4*}{G{pKIn z?>mX&^qG2_72eZtIqy=6H_7CUoelXx=pA(%&Fe6E%M@O#2(QKDwH4k>5g!aDZ>7Tf zQxV>DUtXM*W1NX~6`tF)mYldJDwK*dSNYz|$(_%-mpDDUSca#!3iY%KUE^|Fh8)gUejEV(bBW z#f{sYb+3@T!QZ@kt5)XwMlPY}`(h9A<|qArkRQZ^{e^uxi!d&@B|GruC*%8o58}B~ zm)gO%6eP_av|i@<;O-B4#SP($r+)JY$;;GRf`30nwBG@D_a?`wvB!A+HYj@AT-SFB zrPprH^Vix0{1yG$f^loaFu35B*pbIu@(0Wt34c!=vU{B*l>_1GUE%L_$>ZTY)!tlu zUxip-@_zb})57P;&&i#5dOhS7E842N>{Kav!uxm$kGBH-72~H9pIZ56m`{FA4dL;+ zR%`r@xyyZA@`U%9O?kYIqW9qK#^>~UJJ`zWtnR4C6GtSPsU?agC8XKTSezE214g@k~EbukkR?-)f8pk38lMRgg4$&|>B@?-}UddS}o5 z>D*0Uqj-bQd2!||@o?hoJKvyqU8WBn`YYO7NoqCO-U23XBkC3RZ4SM0 z_$&I&)86m<0>x`T!ixtBc||<9mz`No@y3~Y>(F1(AK!Y)2jo1A$JFa%oQe7M%By}I zPwBOo>ox4t!C$d<^q!Ls`<3D~>v{g#ioeMs{+djGQ;NS274g?)>J1csYnFExw*v*Y z%xAoI?4S?A-w(gKa9nA#eH|Ldzalz@!C^)@lZ0V zbv*g$;LARtc#}-MzM{9|qK)pLcs-_G<5_4Iy|RS=i=8TN2MTTuQ?IMEi<@qqw7ejx zIQRz7UsLgS=*^uMk-W_OU@AULnCvuCyy*;Ye3nvt*lqKP?@+ux(}!~OLEIlde)(V5 zP`nni-Wo8@#Q67u1FznN;x*so)tim}it)oX&mJnmt?B(e@`{36`cqz>OryVITvA$WT*A~_g+7RJNzFG)$@^}PsW(6$#JJ?1T`LMLrET%W zev20m8Kqt9@#>5NT1X1~mtg93(Fbwkc4hT0@cI)=BG^N*J>a~^i53k-+FP6U++&t#Iy`%6RvHg3C3zB9J zCYZdg!n^%on%8FXdJ1o!BD^ssudncaSHy>)4=?W+54HC5E1%rr56WMc$(z9EIN~|) zt4$}qO!3Bc^uY#;)bPm z{|a)vo@DYGk3f49FDiaH)rIWe942p7C*T$Heai>#*%Q>_6MuTg}zkY@jkRv%_Q1n;XL2f+m{T8LA? zDp0SOfQeu5dUb(QTMnha;4enCm@L%KX{+XC{9rC^mc0X3oPjD)ZH;?Mlh-lljc~hX!SSXYw(B{Y>eNG4;C2 z{7&~j_I`lkHQ(mNS)k1Cw127(c^?~m!W%~g$~^5i7ftz&((5wyHY<8hJm#H4DBcuP zZmzyJqw!pQFc_ys;}FPl^X`Tfg_i zTa;dJ8ZXXllPh#Nw0_x(s8Or{UbN<5s?ZpLy-ufxofJ1D0+{XMe8-+;l)GM zmeAgWzjO8_LmE*HrXgweNP~@kqhVewP;y2}SP(z20^Tl4cLan9na9<@v?l^YTUh!e<*fHl8 zB+VZ5KIY}gaz*b}X5&^Aug}z*R`jOMI+4_yVCuCMy;tr&pVVu<&#Sj4MQ>%v&*c5Q z&D2|==-u|~s)3ZhE>o}ZXKTNCSG$8QqIiR4y!8)pMeoU9rU#L{OueP3S0u7|)AlCk z?Ndy>31u90%5jqpqx9Mz@Z!Nz{GGr5Z4DG}j2RD=iodUP>v0*y>oN6KD0-i`>y@u5 zUYF^wqv*Zxq&;dVUgJZazv(uuNz*OZ*NNHa zuUK&P{_fKsqj*zHy)L#3u>j?&-jWu-(~7eD($%cH8o`a zMqQ86>ni>p@%8a!{}yNJ^-yoiJi&H}cPL%daZ0a;dPRGC;fh;2QRkaXy(uLglJ+5E zDPHP0rPo*V?$v9+ZPfXhFL>=O(+2Xo$YUxx3U+FKd9rniy)cHxKUSlKhS1iCg@WFxd>xy~w9&_Dbfbk&m*`T@a zKAcC02OOqeU&#;FRtMfe@lwYre;d(X@%-YfH#+V}oo_MqmY}~P9&R~kftZddxcLY1 z?%y&>{LWrE!7WHC4l?x`R_i$Gj@|0WI5Q9C=`A@I`eQLc;7mK^3`%c$CNDq4P_Iak z6Y4LXPw`U6sdz9^uZV|s&%JgIb-u^cYocD!A73=3v4Y~Ij#GNe6@M#kyz^@6`~*|4 zr_9^mo_g$QikCW0>5ZdaF#+><`CNMZ%hYS3zhWKq@G_5FZ_m~19SiNEOZLPcFY9|c zbv|{R^1(*EU9%@%`p7ZQQ|D91Dc&k2e*g3IeIu#!V@!YJs8{$f?$U3``M%^1y!i)L ziQj8}{-Kf58>D&pp%U*e#Q5Qe2VPxE@uq*}={2T6Jc#v^O)Jj6h2l*y^*TyC9A)f8 zwhM>pZwBMHBrEj0{wI_9!R6{jf5rG=eA5k!DIcswOn;AS?T5a2|L2D&-Z)clLh-k< zh`$!oUsKWhRq08jza~>}Oc|e@R>a>V(_c%`JL7*pk^W{r=e4)m($?p^=H?x?rs~aL z`WsjD*8G=_U!SSB6#W(V^C!%_eF3F6!}Qlt^j_6>F6nQQskiFrR)4oG;%|C;UVC#D zz2k?{{yI#(rsD7TBL2pi@9|D5dXJq&=Ld_a*H!YvaYgcj$MiRW>)J#=v}Dp^vLB-2 zkLu^kl>Bf;k^GQi`kTUbEXHRwHGjWL=}Itts74<|fAO?M{~br_dXx`ItT!?4yJx|X z|D(>gmoVFfvL10mHZ;cWU3lI70UyFw-WxR9n%de5VX{HZJMelVliEoGU zHp+*T(%!Ca`(JXr6Jy4irL>FN7NzNN$x>cC_?UOZd)3-}-i}-^N4Z1!;43~{Tf~Q8 zJD%QJC4QH+DgTkuMIEQ~rj`8r!N+s%qt2&}Q@r)c{pLvv2JS+gpJMtDpk6Ug@YKhj zlJ7;Ku1D#$mHzGF$DjL)IzRReZyeR2jH6C3;)Bcd!8jhq)gn*+{QNuLQ+lc6ln)h( z504k|A;I*)Q}Rx5;Duy9!^wF$E^o849_IMHKVCzfPaPNj7VKbxPMN0hudV+zxf@em-dm`}Z8|4zB*o03--(3IXzj{KQ98zz23by%xmo&&EGic74iGU!y|I{EmCh) zL|$8ohqf0!`e#_L7m+ui@P6oDl4}=IZ)|upA3TNkgHd&PylzC^Myxl{F5;_=+2Z%?flwR2dn9q~QLP3W%}s9!i@W$wO3>PLzH#Y(x%+v^TRJNmZ=>SF zA0>}`EFF}*jS>A#D|+LL2GoanlN!AeZ)bmyTFmUvqCTM$en31bGb-+aa?8E^y{z|= zo8k9zFOQ3J)h&ZQh>rM)iG9R!v6f9v?_;O-m>TA7Zo9VS?>x%m)ZWhi zLTWLyKg)6&2KbP^4azC^^7pd5&Oz{dxzAFxYdF{kT#q+wv+u0xFIcD}}sYmLS?LqG4@1-u;9^_sg&r+?k znJZy@Ci?lwr~UMc{H46Mzv;i@uWV;>AJ!{jGZ%xGZ7FT%p-h1-l zVIR!)#eJak#_;`~B0qE}^8VBm@m_4H!_NL7>%`3dEd7)5Amdi<*b{0lD5U$G39S9@`~|fpEHtPSg+NwxL%33vp+~JX7*=U-!dL# zUXXkFd#Ovtf!xdES*mrm6zUb@hb?DKuaLi#*AD(Ay)rMzeORx|3vy5CZBX^r7;LXz|;u@FqrW@?Kc4-TB{%2bmY-KJ2fI1G%UCjs4!* zU-WtA*h9m5(-D0rQ+S6?z37WDuYbA`>Aoe7`9bt=PbVG_X}D#R^=1Uo>Mf!4^W$E) z=ASTcb;R+GjXsF`x7+uclYd{hMYO!*qF!;ox#;?HhJ^Kc5%XC+&i9G=l2N~|Su1(h zcTdGxCHf%pJnhy!&74t@ye0%*vVO~Gt_#vtI+o9vj7le76Bl3F4 zE1v7UKfUkqVP0!Qw0xFAUNOJE(Rm~C<`JtR^7@M2iBE6)Y*?=sk+(*vx0SW!mxXzg z5%YRlski6fyYa;^Z(~Hgfx-4w6deaek6H2{Z zJbBlB!@MPXMf2BHd^q%FH}C$!j>ucDi zuRip*FmEa%Zwh(EfO^h5i;fKQCYBW+|5D?JG>%Ke?|)mn_Fo&91jsAKAv>-5_jrBu zLFCCx-h4tV-)`CDc&90%ziH$Z{roFW%y}1SbN7zTy`uS>QO12ccl?L#ZxfzxX9bBe zih3G=`*?O=vJuSx%KEJ=1)bvaE{MzSjC#~B_YyCDr*3I%Z(>|MZp?&}7%80y8s8{g*xO7M!uVF1MI=@c&;3)62xxZaaAbkk$gO7OMKdw^N zWls3A%bj69`PpH<&!$>=ztP}>_S{?Yg!d_?-T>Q$81J;3+MM?sry*j!Wsq0&$D0j2 z_I;^S#+flHTAU>nA7)ITeQ=pR7$>zp*V{KaF)z-_BkFap0A8`a@4$A~k?Xe2>AZE@ zF-7mJ9a4LR{j~;1^S4g%_r*Eq>?3)@`#95IQ_*|bKB?U$pNxk@M1PZtze6s6ZMEbL z?_H+9zT!h>*0Z^BRG2r;eBYIgK8W$JH|f^%C7<*mFrw94T;bh$;M65y-qJSFc)g*m z-vcz;d?>n{f?K*RZyiXZ;_pkBH0)Q9G<(ow#+j@1Luc$`1dNxkui^_EfmT{QEi+#oE+;u$xb zoLm1Z_0~kxn^OFpaL$)GAEZvX_nH2d`~~y0E#rrk?qQNAy!V+t*tiZvtREiy)-Ad9 z;L?ZYh(1)HzumLEKXu4W@8rg*brIv&RD8JOoZGGR$+Mf1z2Uvd>^EJd-cGvdvAlY71{J@5E9ng5 zFgq(mcqbA}l>4j{-hatGm8hx|AHF+rGdVu9nC&g8#M#BKT$Z=4 zqI8F7{u)<8{E58t{DRlskv`<@f93gGtHjyMtKK*AZ1N zO7ZvD^3i$zmhV_RpHX?o#5fb<$!#~8wM|&3{OmL1tPJy~xbD1vaUQV&{T1utpKrR2 zd@qVeyhp(Nm-4zd82pxd%HKfIdw_lJ3)0W<-ebl?v%*uqVU1y6ieJCw~{2-op zzj)RWPf0SFAIdh4me)N+@5N)=Tqt?N``|-fey~ul=--yFs^~BIq+TbY-q>om9})}C zu70=O$&xp`PcijYpk6U>sM+r8XC$B0TN_cYulW1<5nKC`H@tV5dIRJY4`To5@t>2z zeDZUg$y=@X@Wx$h^Wv;zlW1|4L|)OqjaYR5YN=298;?3Jd9Jm+eLLzN@z|x{mbjf4 zzjcZahg#bYl%!Ix9nl99^@@6HG*g2mZ+P#2z|-q1{?1$Wzp0W>>aC8bw@hhoJ@y|n zN%DsGNv7UL#oy1aKjc-(C-tTx>a~@4`0T1FVi-|ybC`M^rQTlo;g@3yl4cKDOx_Io zAo66_GcNo@@=71fcG23Kt<>8oeSgZW)0O>T?>DM{aQLniug}!$pkDFi ztX0RpmFtJX{28X+KzR?*+eP#`Oubc#-oK0JjnC%ALq>^*ExOS0U@`Ru4?%nDlQp!< zM;rYb_Emn4asTf6P~a6Ee2*e}4W`~|C4L92qT@IAEzjR3C4RqshK}F#AYOZ`#{3}S zxAY7;eiKZ+%}V?RMf7@1y{;0!TNcrqX6lV8@zA?SJS3QUYm|5>D-sXZcf5EoQLpGP z4xT)h?1yZo-X!YXILmwB)VIm?J4vQqOYwL0UCH5D`hr`Gskc_~xBV5rE-gr!J(ywY zwH3W>?xyty+w$6*r|9ikL~s0iUOdE=c)0c>Iv!F?y{Vsn^9g z6E~W>KDw7!E>>_$GWEuKK|Bb(9k!?SI!wJuMQ_cAwB8I;Z-wIT4kyxjEv8;i(fibD zT5o&~FCNMie}l^=k@?JE>P;znPbi(4TgMa*iWF0?gZ_$v!-~^ZPYd(O&*=fo_J(@J zb3ONjskwD{l27hq0ncB*3&gK@?q9QWm)!lEoY$z|G1|OFus7TX2))-A(VJlEtww)^ z-rr`NaIP$Oc%NYUn?`@dy6wHkUvhMqPkv4_^;Tm13cYWCLhH4edILpor&DRY)=#{6 zNTR>uIoZ73KF`gk%JR#7jHx$+dc^{exjjDkMe>CANv7Te`YZJAb}X$o*oN2MjA0PJ zLhmjkXuTPx-a5tK$|S8f#nc;9^d5CCtvCKNFCI+f6&>cwi5)A$^(8;MOuY>_erTH| zXw!lIUPp?lw;rD(iu^C!8^V&rt>J{_Kw+!EQS$0=&OEdL4ir$Gu^!iM_HF%#T^xj!Suk{Nr z9ui7CTvj9=9H!ntiHA#y#6yy)*H!dZ?7NVR-}s@tcxY1ejz0B$vb|-PdXq{#46E&w z8<&KG&0_lNV}20vV7sSf!hG^`d>$_zJVkGL5xoXeZ$@cvql@TGG4-ZUugL3H-$m#3 z^j5rhXhyvvuYbNHo!4XYdH!Z_JSp<;ao;W>afvn_%kom3TO3 zYkRjWeZeik)LVjjMf_gg;lAYsNwWvjOucDE?}bJ5+DyGMMej95^ag+M;vqo2A|6gG z5)Uz^-lQ@wcYKj}u$y^$Gm73*i|7qZUVAH5;`fvydOfCIV`pd=B0u!Iht3Zvrd|{E ziu`cq5IR2?fAai|pUEX%55G4aK#r@^@AKA| zc*^>Rg~N8(IcrD3&13RbD(e*fzQCVTkTiQR!Q}N7AB+#*e3Ig|nY@AG!^eBJzAq@u zA7k<+6d#%&+F?|fPks*G zF0TI-?QQgg?Z|ZsaVBq7NAN-PZ{x;XORiJ!mhtj~hk8Xm8*vbw&rGJ?0LPOepViDQ z^1b{FPp@&+pDo`vACTppvDdYaXLkj+%)7ietHJmc-^dOgXzf|nmG#oyCAT#$SJdYC`P)Eg-NEWK8U>Y=^ML~ z>#j^DZw&LK=-=9(PuE*!8n51}m3ph&X875%p2B;d$s0p|MZK;0imtaLlh;)0ZSos) z$$E2`yq3bd&n0h@ycUx;iT;WSjm>6Xdvn;=+-D|l9rB8NHokuLr#YU`59zmg@!%`* zP%?5gc^}|0c^efUM$a95Sx9E?V}i+>L0<8E{?p@E|0hQj`oU)MIv5XPJ;A|$?L*H; z{m#qlC2OGH6ojX2`rCCOnYoWKre0gQ514#?>DD=-&=0}?c=2E=dQa>4%e^7G+{YA? z*Fn8oW*MFu{Jwa+S8#KgyaBEU7vsrq&Rv|#zw&vvv1zpD-5KN+`M3M~!*7yeC2x5| z-f~=TFPIR<(~74>qFa{T2CPpI;wX71mqPA)4M;2gnbiT^#h% zQDWD!$#`%h@_I_W{r9G8bL*HSZ+%4Glu~c|yDyc6^&0J>y}#O5cu${PJ2T9iiKy2` ze?>ej+T*G(!n|c2qt#m_@`~}pPrKG08Rm5&@}`w~yM5e{iZHJ+EZX}KjZ<3hvwB|W z=k70LJQ%x11yusEz6`>J|6LBhNXZf0(zV zQ#8FM`r9c>IQ5^kx$&g*!H&q=gnC6{_-5E?ABFYSMr?0J$JTMlPkRk}EzE0e8m%2$ z3hy7k^~-$^Tl$cS=!2!i??#)gniSUC6p^~=%UnC;x^^sTfLkk}%Z!a{8P5N6G@ja1^$Sd;M{Cyh5 zu)SrIybTfCagCCHzu)n+-2J@dt&RBiMKX%sl4IV^%R50te@i++J`?SD#oRGsnMung z^_F&x7{A!wgt6Bg{m@#Z&DC2?MBbFbYn=FQ9&ZqFTwRVnhqb^Z}yy^VvT`4Ct9 zUG+@7KFsS!^r1@Oy{_GRdA!XLdCU4kJcxFD$rhC#hxJ;qXg;{8w`Z2{%f?&t{?1BO zMBYG&ht=ElON8}$5qVQeJWS|!T;BbKQxdJ8Z^HM;ia0yD_ixy|G&Je$%e|vntnq-)_A|h`_ ziL>s%HC!6zbtCc`<6GyA?)+|J@Zzb}I{$kVPhUU#9 zW+L+1n0Ey4-LE~G$6MAdT0CSrfWPAT=7E1-dzbVfytk+E=D`!_gUFM2oO3{4oH-Ho zI>TD;FWzl8>gcde`8m$a4>hP)PmE!mHM7v0iygP5aULBD)ro@9k`2F3& zdQ%a3O@(*l@TNT8iiq*+?GEwVAuII0n|FO%>do69&Z{>I{T1=s?w?EkmVC0_nj-p8 zp?uGBR>kXAgn7*^qQyfc=5^67#y`5h`bK!75QxDtY=4td6N-&8!`V1-k$q? zI$!dJ_sKTAddpxui2I@1)!Y6Q=98a;IFHwBhUc-OpMUtSi*xx`^2vSrW8QO9cOQsf z@qB1ovzJ)zSa9=?;OVv6w)V%V4yk<#l4cM3%=OC72;ddZod!;yuph-6GkAJke2y-7 zJKuL~ECf}G9G}mN8>~r({&~677v7spe{J+vOlYh*{iEDGL73NN`s*s|NT+wanv7qQ`8_pD z`F=pp!|3k^_)LG}ioaJD@i+4pFF#bEzalXV+?D>`LBRC4M)CKpBL1c~<>|E*fBO~j zH_7zZQ}RR4BKg5*`WsjL-JyuT_G(@`PAd6fV3GV_mGJzHEBRsP(R6-DzRuHIrNr-` zIGrDoOn)nt{4lhN&JP~b-&!SpPwhhIha}VA@^-ELX2;pPJ{Qho^0PONmw#Qw-@Zls zb(sD-iod%R@z?m97Z0A|?=eOE%`p8-;7^0t_Sv5F!e<9;Gw`clWtHkef3wNM-nf@lw zUomggbJxhW%k1k>LX z<}>mAx4rkIzt8J+;I+3JCI22a>Z%nvfuSD)roSo7XX1YTrH&`(<~>8SM(_qtuc!Ds zx`@9v)8BgZSG*U{ZETto)|va@xk$ zVE-okec)T#-=H6_e``R0#eM9Y|4b&^vCs6^Q~W*SN!njyEiZm;{2rAUPd1ENLH0v& zroU;7Uoo$|>9^DO&+ZCtDW<<^C4N6V=~J>FGCT3|Lk#C9#rIn#Ufh-Bb(sD(VEz^J zzXQJOLC$-cOn*!Ef#-U{-~X(k{dJlCW|VxkDnZ9XW-8C$6!sUw-*4`v{q>ptHY)M3 z@(wy4Qp|X0QsVd0VGU&b#+m*GI6mv0_2I{vU(xfaOn-gF-{#L~e@%l|Z-Fv?IQZ_4 zOS7^IZb_zI6XRFp-)XPW`Pbz7i}4`(p z1T!8=F+YfYey=tO5pIPyrVmCZn5Px_Y~Lb2WSBk}!+}@acOUG0B$gEv+^mgwaaM`` zih<;;U0xyQcWkD=rVDz-0+8`Lo_}INvDt(1t~|Zf_}pLUo!s1~x(cIvwDk{3WnIPjS8ScPuFdZdZCy}}vQBr{#%;%k^(G?fHOIF4u=O7w z?G)y%i^yBjwRK(Q&8s{88s;tS5zSu{c||+kEqVIFFmFv%-X!=S63)SUJTNWH>qq2G zDsgu8y#1UoZ*xT6IQk&&FRuE}^`cvD*<}1yc8nHhuEP6B;;iSwyjIU>_2wx)-2Z$g zw{Au1ZH&m9Qh0m4w#AuYy>UC5-ex6!Z#m;o@n@-8HmTPwjmGQT(HdvZ_IcsmApcAD(^DJ3;cU@4gKIv{A3<=aY-;MoXCVx2#t*y%y#( z(QlSazTuxRuM?5i!@qkb`inzvr~e+Hy*=;#qEhj}{wV!(SZ_L_-WnwyKHj1Kabe!t zsPUlaUH-yoFU;%w+-B9vtK`xAJrxi23h(CA2OlWUl<{EqjusCoj9)Q;+Vi$U$o1gz zdf`2#H?8P>@6mDd>b-}Ou`<+TfAv(|j}$tmfRP;Tz~WF1nPLG+tTFMTaHu9iMj z_KD_0TKT((H?;llFsV1Zk2C*XXmBq0AZ}P*cBbza=F@$q;y0u8n@9aPF)x0T5q&W1 z*8ZY#)=7E14H0=um3VmQ=pUbu<(Bnk^o>?;jxz2`K0UvGn72G4uZ4O=dpql)X?Z?W z;P2)2!h5RTV(72v-*%p}$sO`M>4P1y9cO-nINLf)`0IP$Rfl=&BKqK;@>k1yLj~`m z0=z*)UVCM$-X#TiOZ!EOhhPq@*ARM_7vPOYmz{rQ-gvz^B5$DZ{;=P&d%}9HEu+<&aXaLlEwh9(2krY!n71k- zuZg^UvxHk+mAEF%>qX?Xkykut*mA3rM4D*XWIQxRqg{tm3m9g_%m-FramIChrD8)&B!Ac^a|_EMC7f*ye;lqX8iV) zq|N#3n9=<8mHzFgm3QZje`_Q1HsN?j=)JDj?8l{G8E5H;yp5<=e1CJ3rmyqbamiNE ze5mOR@hb+Xql^3+6~CE@dQpGjWj?>pVH`MtUOP043R^r05@ zih1Q-uD`5K@~!Wl(re=QK|JR@uIIy*VZQ2!dObyNtn!C4$t&Y56_M9Mz3sDv-CjH- zZ@#1{BCoCZu=&Jeo(=0Yw~iLSapV;@76TWK9u?-TjL2Kk4aPg7qqy*;re$H?hKRi7 z$Sd0Mr<0Rrn74eJXg&m(f5m+2f>U33EXZ%WAzW0$?L zcbGSb$Qwt0#r@{UGY7pF<}Do%&EG2I759a|zjIsOJZ(H8uZz6m`EL|z};n;7UEv%~$lb@9@NvWWeB0`-df%?~G^IX>(|V?@2K;=?n~ye)>o zEt}LE+cuiNNriW50p5y;ybVg6jTv(a2&ew?W0xStCofMLb~N4$>TQXKPbcNYnbc41DIbzbUhg)&>05bz&WC-X={1zUFFoO?ekbJd z?iY)Wzqb#mH7Q~@(DFzUOOUhDe4so{lxP+24UXnh`gra z!&_hF`%q&?^C7PIu;tg^=lPI|sJBe<;g0HjADSZa)++Zcb4JWQD(tVhT{Iso#ouwC z<@=kA$eU37z4)rL^89Ux$Xl-XyZ!n3{uzv`sqm3haE_`J|P9{M+-b@>zh6Ovax z_|^>sDZL40{p2IN((5N<%=MG86|L{}dFty$xqf~d6fWjFifxo$%LO0AIBLjF^t#Lx zb6sW)`XJ_wzF4}QnBFM31+Vkgd!{gch2G^~b=Xys%6Kr0XzeYI-=h-kBKhV|N^679`CcG?~1$ zn14keoH*tz^81_A^{D(%g6r2sKJ5A7S*xh?jm>!NB7yZL>S@hC^!Ko->rr}}u-?Q3 z;svFddg}blYdpQxir#8Q&ie0_lwODFuZwy`zp(k0OLFtz6o2?QpRmOc! z?6TbvoMZY9A z(~1^nj*`!QC~G$r*z*5Rzsl2FrsT6e3vMC%3y2 zr5*1%s?FK?&ccxdQ*Tmf$8UUBu`R{xF!k0cdN;Lcy*5*?r|6ydJ+0Sg>h)2t$U7g7 zAA1AkLyW06rR1G)$8AR5W}Dr4@lc8P$70-9dd07z+i2NjJ8s-LT03r3>TQR%^K#Ek zCBNJUukiF{6o23T`%pJgXAL?2^*-mVx35wBoiXZ_Kc!CTZ^iIv z{+g&)tS30Ma^w{cV%z_5ig+wgaI=}baYgT}>lY3$NSZwuWAgggF2whT z_WQh(m^LZ61)uTitsL{OxDVK8`2zAjAl-u(ziHGf8k*ez{MK=J`;C@gUYue)LC&-29H@lY5uxgNwW(pN-#c zzj=};ypJ<^YmrynUzFBQ8z1JApG_ujO3}M;%#2x*C%n&m%8Xy-JvncEbE~*bF1V%p z@OWeR{dqC&8*$;RX$48M2b0Y2&%4jSeM_(GxxXBGg`A$vqxYD4P1Gye+e;rk(kYJ+ z4`i5nEqw2RNH|YkcB)7}1-ArKuZ?06DHn1RR_F$?luf0_$?`f#oAw}l17*lUt zd7r|?H@2tee>djob(A=J=hl|NJuTaEdq09Q&fXnx!S57rauZ&?nabZgc=DjFpQd;-OkQ7kkIS4^*L+(LUa<^#r^GW6J?zEjn|J|MVTAmLM`YXo2i_1RRgYqG@8PA6#`XJid zdF3Nsmb}u3M0qqHV#A@{#JKvvkLtCv>uB%SNGSeJ82B6M zuOH+2TZul1`{OITsdq@dd3&Z0!T-nJd%#Cg{Qv(af<#0)5j9|2Q8bFc(KHCiVvPkn zd+dt^<446qEU}+riT!L48=fE5U739PgtOvH(PXvsh@ZWcKhP-#O@5#LL zJ;ndy$37k~nZ3K$J@cCPl%1K~2p=FGM*g|aV5uj|E!S#I!+quQyqZ$$SxLm(_Ny;G zR6i&4=~cnyCSSMRA0&(A{tVyO-~H!4t+?SDw&WhKoMb9rmt4*v-s>`z=Nlx@e+A3D zbyMiy_CI&SL*+~IyTff;=0lzE0meI*k35E)FG;Qp_JQIp?B6&)`SNoQR!CkojsF>} zE8l0kKgi$Fa(|ZonfhCBtLLvwDPBkLg1;YDTz9RT1RhR(FfXNBFZwrV82;S-roRJ4 z-IL+HdAc=X9tPT-%3WWcPwA$Kd6-%;PiDIx1b=~lXOTwTw4jw2zw-AgE%f3G@(|zh zd`g^`sXXt##dn1F^WveQeYmF8+W7Uo$<4%>{c%?K0JZQ%`p89Z{YF5{KFPUl#$n)AtrAGjn|`^@w&zIw@C0pyVI%rEAv!eWj-^H z*B^(4zhJ;{&3HXBkk{_mf*0DIBZuBTPV%W~lF4fef1#g0A!n&#Ex zLRX-qro#%Uqoy$?Z&J*cv~h(>ht6E8>dAb9>2DUT58W_z%;i!?O~VKC$}NigjcWXL zn183ORKx?c4<{e{))^|N%-c+V3q|~bzo%&Y%`yFr30`O?$CVUcC;8Mg%;YUX{ag13 zO3D5$&5Yj?(N9A^bjFr*$obSHGaf9|{{DH^m*lu4I*1o%6~bSbpWOMKd#_M^mHF&D z%zBLaw-p+H6HI??)IN0XbA5^AQ_~caw+Q+BdKv9+is^3>)wgleR&Jtl%6y#3Ym4}W zdVKGN5pq9)!}PZr#lxRNin6D`}X1^I~<&9IfbSX1mM4u0Ybx$Uk zyoE^j=BH0NfYNoCx{0$I=RKeJb}YGWnx4!1yGEHK8_VsKF7!Njh*>Wj(XMaf8gSgt z7xtulh%kMKpmFs{gXsD7$UeMwCnCxX#wGI~swVe)hM2qwH11orgdSICw&b-BC4v|F z`3_eeI-Bx0^A=CH7>)Z{y`vddGyQc0FSNg}e>-9AJfg~-Wb!7FzbiHVCYk=0qk8;p zdf@LWr_9HgyjAGBr9k6vj_Ge))Hm1<6T0NHZzP|Z+DzUk8uxX(bMDcqp3KLX{zgTA z0oR*T7iM}%9W@Ozd2KZA`~Bo$Fl-MzqC!#_xWGc$SpaRRkF15V%kNR?CO<4oQZ8uwi@dI;%5*yhD=mEhgV z1zR?3Ff{LhN0iB%MB|-NW0w6DC<-UP2kA~?O9CJH(2Lgx<}vlC|--{ zLmHLa`}ff07GsuMT9g~?+wT6uBy#>C_a?7>h@*OOagTbkUWA$cCWOD6y1WAp{`(Kg z-!zlA7WvTXut&&pOE7h_qTFD;``c~kadoy6&)+2SAv|^EJCqL&lQ)XS)n5{k>-` zrF0Wae+xEjTyNPb{_wYyZe}ho&O&IP!d)7FQ_T3yqIR;=srOE%c#}-th?p;db)09q zmmDi~<+vohLCfY#QfR!M)RbF}S#FjnH)wy4ytd!&l2=V*OdrCi+~(XlhO8HHX1OIr zy@2-DS$x~hDyPibOkM}oi}{z%C+kIYUtYUYjOs;~uO^O^d}a>{)64PHG?it7ug7Z>+=Xo1v`^`f>_3+n|MpKaNuA5238 z9`^SqcVE$Mh}2P2hq=ExBkCK}<99Uswj)g4 zI-v{eL!AyP_(kQE`AkQi525`V$LkfNcRx((sA-a^TeNMX?kD%qx-q71A>v*27Ok6k zidQde!3*{6*dO0HU;X`MKFs8;MD^{SDMxu*fu$Hqvy*x4S*aM80Pjf}-Yj!pd=l~A zui>>HWAY+@KYL~}d7Tw!@2TX4Do*alrsetmH)@7yf`Znys)mf&E><$ z^$Uy1>mVQQo;xw+hiuG6r|@{IP&~YM-R>7RD*1o1s(A5`ME>5V;Z0ZZcvFb?V-0Vd z$r~5r2be#5{MR+myayf*^FE0L(tS#!8)523(e>t&Wpl{;(NoOpw=lXceBz)PO9D-B zPsW+LWr7#316qAH`dmsk%G8Y`-FrsdPG4WV&g(bRX#Qbh`a9C!G*dT;_McsH!_DOV zI0>e1RFoUU?~Jp5NmKqhOx;T4Z;!XXC$C!~Ox-kEKi>4O851eq%xk=IO9&r2xPqTv z@(Fp}l4R;;QMp~zJ+=qM8)NFGQMo<4*$2;1x;9fch03jP`cE?{-7r(PM(A$k3ao9fe5$}SBFZqPhjWBg>!3z&!`su6<$56T-<0x~yUfbFGd$*RW`+l!kl2s>xxd zt|Qtr=#N*Q)O~7*}s}z`T>x-(Thv zOx=voh4%NBb2DVQIZWMZbX~aLk=f~zPfb&gF|P~7JR)3ouikw|M%9z~Ob1?nQHOX( z_M~}jrfw3=R}VU9GxB-5+0A&o>HWQa6Xr|iC10E+fA1#gWS+l~?L1xZcf{1`+cnV> zC!$Q=l<=Xw`}v-8ucG$_ZOZeZTFeu)a&>?Dn|_W<_(@(pP7B=)UEMt|q;+FV-Hh-7 z*1LcCq(`Zn1Rj}3dF7Tx{`S)Nn`G+NA|Ec*_>g#t=Wl2)Z@dmZ^!}9g!C}Tj9g2tD zHP88vKF#CJAs=Gb(eaRC>PC`6pAnPKp-~1qU>?zhAaJu#(b^G3#47 z@;4TrcR!_@+JqMmmf(eUeV6;LA4}=RnYzWuhiNCxe}K}pn7Uz9Za;T9W(1|1dWKhS zHK-mB(zIt8X1kt4?Rs}jdzN6fXQ4J;oWb}v^Ycsfln){1_^c4=F4X8|l01JSNcSU+ zZjz~6B6MN=d(d7p$bB|3rmiD&;X-JmoqCYt9h<3}MR9huCeCuqezRQg!us*<3om_; ziU*r{y_rC|-8H&lrVmv}w}(bI`!Fxg(nz)YowfJ{RH_qhE30=5;+o~6R-5q7>ro?_O;O%q38v44Msavp7V|&(Dqnn$+iw6to z_Sfj9xw>e4)>Sh;3o+aEV#GT@!<%68Mujf4laZ|!lu>c!Fm=m>F2vc)SLu0z2vawX zd|3F+qpK<25L34j>AtVg%{;`5vlP<(P@|h<>ee9LMH<~0R~PNe3|mFyevQ-|UVD}m zywDFFyXA#+Kg8t~`v&2<`(n*?R(Kk(-0B4{)QcacR?z!`n7m=Je+P7b)aYg(j++GcdBXz&I%NDPg+dfa-j?T z+tIs3$^G`Z2YBU{K)T0hbkj`TDx`ayMmNFK&7pb3%Qe^YHuJhWjd)Mg@H$N1TA>T^ zyH%@|;KGx=E&PG1A>z zqZ?=T7g40Uk487f9W=kQNHcGg zWzLsW3SQ`s2YqoFxi3C@A1}^QNO!PCH^tPgLApaUx^bp%7U}M%(Ty^7>xC}#7vY_Y zHlgCdV(J#4d9Lj=^OI@j{A3kc$C)&E4tc*wt{rdOSB0Kick+WPu9rUSBz_<}Qt>+V zTvq#PZ=QBz_kACH@&h@~WiRKgi&z_b?Jr!Xr!~pnr=eM?qKw9yW9RqE@s!pgVKp z^GRKY>2FN<0PVy68}zs>5Y|1Jc$OCrIn++>cHgNdQo11~ZzYPeUK-uZ#=Q17C3K;_ zg<3EFisDT&buIKf=#4bGF{W-2>feU!`{-E|Z@34~hho7C^|*7z#pjW_Ox`Riw;eRP z*-5;9s2H^mKOg<~4is;O>4S}Q`yJQWqI4rYnf^w+b`s+3z0IQ@0f9ZmH3A zn7T2f+gYO0U6?n@+|~(}8-fp}Zc^w%JdC>{{&%pb`<>%?@lcI?n7&WjK9sJ- zoR`ZW-DfqrNhWU{(w(8vjWKmYJ9+gD>cwo0uFcdf6uJ-(snfoJB=86`bt6I-=H;v# z%JvNubx&r;@#3Kb@wUF;Bl7t$DW=+0bPT54J`(#niQg zF3kV#b?bx+D1YNjU0diDx`J;l_;n1W8)fP`Lbr=6`1xXsoVT}_x^blYg+@1b7q8rs zNH?p|O*3`VNcU@vZi1 zP}DscW$HScc<})9a#MD>5T;EU4!KTNvuVrL_2Q>{?Zc+7TG{POmkHU%^}@|srfaot zjNd+y=TB92qa9kNTPbuQ&iX8T{ux!b&~BM-=v2=KFm}HuYoAqhqpe%^cXUIWHTtkH zUj3G;Yj4pq-uNJo7v_KGT6G6WT{X@8!mDrAAB}(CX_q~^J|^{KoRz)TvcE4~f#%P? z(9EBunDb|$;>L0d&86oNL(KWUgy4mN@9OXB)<_@JG~Aat-zRvX+)j9xp0|%O=k06J z^PtOS(({usCa;Bf9Sv`0qhKGTU$*;$j3LYY8TJG8cmL)4?=@GVI2)z$A;a_`g5s>T zCeD(C57hpLB#N_Eb#$CX`UU$->Dq|5orX8Y)+ay`pt@}^Kc z41T25%7%~&_%Fxgtrof)xmuHYr$z-xHk^v~=apM}Xk$NLuDO56V%|TLMe9!Ij47Hz z@rIfHrjZX*G(M!5KGY-L=@;!!@@Cuc{H;N}xxVwratrUt(+&6b$_>VS=f3sBVU)iq zCT~XY!aku+TIrkK2G#JjbQms#KHMEpX1+fu_D9>DY0>D$;o3^?!?n3f7WoE><&MWS7Y z>+U`~&-I3^0m=zxxrH|JcwzhyTQZES$1$c4HsbwT!|O143lQ(XuV~&3leZN0n@=9` zDO}bE9uX#QSnxu>dD-@-k@H-Uy?OBvL%gdmq1VDeTV-W{Hxc@xZf zY$4vCFQ$2OOx`$p&i@flzI;GnFt{hv+w#gSJ^9b&us?k#_p@gnG8v}B1CPjT-h4^X zYHz*-#!=`0HV>9Z0*_=hPq%tQuYG`iv*VSwEe#ZPPi8jY>Be^O#;H)z_S~)YNm5r{ zn-{ff*?#*fG0z3MrS=bN*9)a?@s=%{=W>QLw(H5&KlfC5b3Iz7n?t+>+jV?I)y=k$ zx447nFLXfDZ>gzNb&GnojJHzg!bJ6|gFYLn>XvQYGToHWh4p|#Pg%N~s+(+~ZWi&b z>F_Bm?=>7U9!d&Z#+wxJ3ma@+-MRfNA-i^Nsk()__EBD(!FclKJ5FEw90AE&*|}xB zv9K2pz`OU9=_6F$f-Wu7jf-^#h_k=C?R$sRRa1+(&QOVT=V)|ucktSs6w*y=bkj`T zC@QxH`b=MYpN}lJ@)r7AgLq%n@FtkNS)@Bxqw8>WMLP-cyIuF&oA{7wp%3+f7cN*n z|Mc*y)cBJ52$MG<*582lhR+YbPwF&DnYzx|UOk5S^{sEd;P@tb;zZ_lUi>BnFX(=9 z6Rn$M>ZXwHryAWDQ#XxtKiBBmOx+C9U98a!Gj+q=ymk_Q6`QKqhibeC#$EvBxG zbeCy#bGP!!%|W{L8r?KgH!gHx|KwNJ_773zmSE~;MZJLeouh`HRYd7JOx+?>FZRD` z{AHAGgsE#I-L@Lt5K}jIk{7>l$3e%=&mTBtcx)G*sTIfPN%y{Nx@;V^I)U6e|5D$CYu=UYu9LRj8f)@`to3GBGdHWSRErjY3 zc*K~x(E;B0492P3Yu5E_rmiD&;rh5=>sN;c!n!9N<~lF%x34KsN|eY|=M|PYEC3@2s46_znLleUK=VWb#@__Zy9F=t!OqapXhKAE!nUqVLCKh^HGtyg$u4 zogAMzOx{Yt3**V!8&|`$U*HjA@}`jP7aH9}5zhx(_yF@~dsv-e`9JWmj^gP?g)X#b zPaaM0m$R8Z6p4KxuwQQF&-8w|IFmPr_Br;Q_S)(|6Wo(orf!WWH&|zQv&*#aNZmEO z>x+o+0rqpXS+wUp$qkR+@6Kxb$61fTOoAe`goV;e>qbvFPV=qb(2CD#(gI&-}Wr2qoy`f zw;Ji5sL>5Gbu&o!WQ}h2I$pWeA>9!g-4s(dv|D3+8`b-szf@mkKF-uF6uQtpOqh3` zyOT2bh%$8}h_~I#$6XPu>OT93sat|{H__B(6ydkD;Ez;dnqno*w7Y{k4TddJd zGIa}fZ>-0IG`caSt|fFK9Nl$@U?84X@nF zknVjN-4s(dj&vW;=*F44l}Pttjc$~wn-aPZ4X^9bfKT0x8{%IDcxM0 zS8iFvYi<85xqm0k)U8LlJ8E1M z2r+d_g)X!YpPfec7n!Sh@emWbFfUiUU-z~9?bUcoGIcAE?f{K$jH#PMx&t-3HdD76 z=?>B8hMBrKF%JOcw%;oS3#G4eo*>b+W&78yj*b0WP2sU?_q9pg&`vGWjUDC9|HAr3 zt6g7zRpm`~YoV@~KZAACWH$@KE$~QmGGv-g+0YHBfcQ;7F54R3BWkGBMs+oPIt z%Q4HXUd;DFzxn=ltJcP^>O-O{FCNmu2Ur&wvE^)A)sy+?u{_<3(1rDjw&P+ssiUST zrfyNc#`fXxx2oH!dNQA2mRlC_ZmQu8AII~-7Q8U8Jpas#$Z@K}-+K2ZxCbv0;5=`Eh(1nGeM-rP+)9|4jQ#U-&>o1`Fy|3!I1J&}9`S@SFaw|u? zk860N$Medq0>#;&C0~3f`P9^6^44_le1LkFWB!zUYU-@wm768vp}-Zo;fV*Qt9mjYWAbJY?+LwW-Vl>FA)XHdytVUb-VBpB zf_(V1)kCBYkrR34W~2I+eIi5FH+v!Pt}w8Y!{xcJ=ycOvnvoe`vH{7LY}{t(1rQ4{R@|p?U~KgO^R_J_;7lBUy0WwO`ON$Ef@VJfbRO_ zb=Ni#lqZ<|W=71@LVY{%t|Q-v2mfzh`mpPFV@@N^x)3lm)F(z4rBJ(*8)dC_&&l-9L(NF6l| zpU;cmqxjC-Vs=ZyNbKTH|k=>2JC47uxkz-AioAr=|{*H;2Y0(abZ~ zt9mk@8o-N(6e_oAnsSRV%PoO?2ratqQOT#K5vC8dqTHY#8huWy-&H-CPfp<7FH(hg zPg%9kT~en>%H*vU{=z)skm8#rH_;O(GE9Hdf)}obZf!SyIjMUEFCKEjU$`FHwadi& zDBaw0o^Gw+h5LuDUGnnllx~vAn?&;ulV^T^B&8dP@!Fl3czzU&e-lFs$?FU1`>5;g zf<3))3HaMX<8OlLZ%#aS2F86a?t25dA0~Px&xaK9cdEwU1k>Npb&c~6qgQs_oANQv zwCfSBzaoC2+@|b0coxMQW5#b9wZG43+TR@0-+~@qoPiG`Hhpd(#cMNp zi-o_?{{E_Ie>2N??SmzFp*{O^+ZV|GBCO#Js&h3VFV0|I?#tw+KY$Md;XlJ8NE1F< zgWC0%H0^qHG_SseMZJLQ~^PF_* z`>6QMp!hxHmkIQE{Q_S6Mufj`T{uMZoQ5dV-?;D>+TVgXQPSV+@4R|ZC)RnPeHixB zHh)n*Qs+s3QNMY^iIwB1&&QblCeU*&4?V6MIiG4V{jEg)Zl>`!&h*z7@c`qJ?8G*3 z8OJ&(f3wKnTQ&Y>nEpmld-nIpRphuYcNs6vQo>)j?(TK;*W@~b#q>8S{DpDqh6fKO z$9CGxlZG}>Q>$(t4af)Ag5`O3qj4@;T#0`Ybk zR=0@KjWBsrVm$!vpWm(gvl}Vh9Mj(#!3*QmFFGxVQ@SB0Z$0w&$L$Y;?lbU+F#XM< z_`Q72ieCdo-IJM1dF2)s@eBSAm^G4IKaO9>Yai+n@4@#@T1xRIxx9OM*F#Wln|Az( zk_}~kWBSn3(}j9bHU4;#H^$_(gum@w-A#U5O!h-rroTmk7sl(?eRX&pWrWS-Ekgco zq477y^w&oIuIW6PeEvh2$s0lbZm#jyzK9pUrGgjYY{i>Llh?7?a$cO-f*1PvCvT*m z+Yzhe^=~o33-fZ5O1BtH#Y2k8TPv7fE2$e_%Hyp={5f0H|E^R#WG?2#gM)OhnLgni zN;k>WEl2)tq-iH(Ox*<19eOlfZZ=c5O6WpAKTp$6hMBr)q&wp)y8X>w#4ER2p$l<# zhbA6UOx+yv_t{TQAm@MMOx*(UcYnd(w>0f~l&NbW-PY&P?T*FNtvaaj`r-pkf04V8 zS8i#fTVGG}rkT36LKos;;clG=xk=!WVCv?CF3j&-zWnUB0!7`E4pXRQ@teJXS8iFPyMsnI#ni1wy6rW(ai(tg;Kq54 zlyxO6!v!8urfw0^eM6&bF?DUE`{`3>Zx;ybp3IHrm0Ky&&1rPgOx>8!h5l{3)STrM zZ-S{?fpq(5bRDK{66u~Yv1&TS8)52JBi%6?-4IhZBXk?aJD2nan*)zbj291eNO$bT zv~H5A8#=_RZ*W04uqieG}k>DX6lw8 zAC9rcl0Ib5=ariybRiIKzGc=U6mN>DTaI)e*67BWx(TFvt424<)GgiHi!+$#y5Zr! zUZs3Ue#Y}RhIDV$=vv%)0<=%zq3RFGc`k=J&lN-SQ6FmNqpTdyhaBRaq~T37d81Uob`dc7)VSmZH1^bfs9b}ojVWj(kM%OOqm0JRp+hdw?i~YijvqDsE zk7~*-$>dEU-d62aa_vtH-+LXYi(LWsD`5V@alzy;^CKq zv&cAen7nDk`>lpI{xdHgiV*KI4R4ysTY=j3(N4cnl)n~}HzIi9LTE^j7c5fuGG06+ z5$~W8G;jJRp1;M2w_Q(~H_qg(7Q8U-`)pW(#aW{j%`%@+doDb53 zx8;xzwe9{U%PqqJ6gjVV%9hNG_Re6{e3sh-eN7U99Tv+ZrO8OYBu)b0mcvAj+)SLKMoin zb!%Iwn-#jypilqd?X?%OQa9YLWxP3Yzdyu7_fuLO3amj#YHMD(6}4;h;lu0i-c@Q! z-r7#BRxG<(o^6^^{c#qRTZfa5THF3g-B7<@mbXN=0`dO3;Z?9Z)mGFt42~+@!HR`}5$#E|7YXx4eDxyn$tR zo>$+1cc=TO9SFL6NpXWTP}BWf2Klh;ts&o2QW=})Llv5zJaZa7pK3AZC(}sxGL3F- z6pyzS>7J$0O*3_~Xg}hyZ+`R(O5N4Vd`2)_ahB&gsE#I-OD!p znDimU)OC>Vw;gHS_yk`28%Me;HN2VgcyX2!akjNvZcnt@oSZmHGIa|M_1YcKo%?r~ z)QvH9Eu`y2x{$gyQ@2>?!g|ZtQ{SKECV@wosT&o#&|lme9!jqBX3yo7TN%=Qa1&ZL z#ng=>-3>d?x^bp%rO<`(&QB%uK7}Y#H-&T;X>={7ZVl4?R->CchgWV{n51G;lsRo4Ds8olGb&Yy7fmi>OObvCmt3&>F51mF%%%zyRNi=?lKR=*hnJ9=k&eRPJ z^Xf75n*$e2m>;AG=b}vAwBUss8IFByeuUDsn7S25Hnuy*UivU~84^mI#4EQ#;RCcg z?K+o|`y6v+Jl!JOce@tCrP>q1o% z@(xosbZ_JJ#Rie-uLNnrxd>C&Lb@+aJnRihH_9BZ+d{XCD>(bt1y54CAtrB$C^zUZ z&(y?k<}6;EMfddlg?aEFMy}eM;Su3H>bFAAT^y-DdNnY`slcfY+q|D4i|F?AD2 zcUGGzA5pqCQ@0A~E<0=zc^^ucsT(?~v3;oQ6(-w<*onM&C_%ch$xo2&L-Yh%H>hz< zp3^vQlp8hta`5+L%H)9aL7MQk#^iMn?*|&*>~}nW6NtB?hBw3HEf>77 zE^<)+UTf#URX^fPUPr_)%qzd~-o;Z?J(-W($%}^s;_bL6&1*4vV~97gkmgM=d8-63 z?5}?OtrN)cWcpiPJj4YrOq}(9rSJslr<&%NylKSy=T9`R!{kjM-W$KBd82pn;-MDt zcIkQ|>2HY1n?$@-oja5MrkK1bp$iv;+q``h+5RTK;l)FxXdhrbXc5)9y03-r=J}fz zys#hU*TwXH7@NtP6ui(;3~m@bxIY9OF(z*Y@h;c!X20h7TZMS{)9_}Pyjc_v+iKz= z&g4y@c=$vU50QI#@sL6LqxvkNRhb+K1hi((w>t@)jb0FS#WERGdmN zc`d}-OT(L7!i$F*6u(z$c*Em({ze2Z+<$TBHD8g>?Xa1=8Nmw^h<8kSc@5=ojLB;Y zUYLIv_RY=xDBbL0p1-w%7xv+uIR9&Moj1eejUwKoG`w*pZx->6(C|ja^WwolydN*8 z{k539b%^(y&uM=XOx~OrpM~9WJNc+n(o{U8v%Gl730}Bg2-*MN3Cz1zMszz6u*^a#>~&sL!O-^Nb6m7MpCf6DVWUEuLTeH&r7 z`<3DhKgWyT8lem2)}i+4J1E^4Q#Xfn$1ObaZb~;glgAqx=*0u(%(omk2j6xCl_nxX|p4FytPQT{Xlx2HpSGH^!^gL~xsar6-alY@R zVe~w0l&Nb8U6?<6bMGPK^_#`iEk?Sh-f=3an>&+NZc(ILT5$@gn`Y{kA>BgFJYs^W z8%MgEk2{Fub(p%2SjT~N$j*ha$yECgVd@r(dJOH^2Rrntq;$j2^XhS>@B!BKUPd{Pv@1JjdY6=bi0#c>Xsti9dDxBoj6lBj_UCe zO+Ah>bz`X9ZhnTYZx&Ox0_k?$h^}wB(|F~UM7rCoq3c_ksauV7+bpHyH^J1+2whlz zyMC(+$n{uPDElp=jgyVffZGZ-}W|h;%a=-pmMIJVcQ0V|Q*}L$y0e zrf!MQg?$PaEMIdfr5j`FIzksFG%BpC>L^{CsauYGIIz#_Us1YYrfw3oJ8$hYYZRrM zb$I2LK)ls^+)l=Cim6*AbfLc({obN|Dc(3!H;r^>fBPe;8)fR&3SHYHe?;hQa^4DSN z7Nh;YPyTVp%am?}sT)PQ%QX8ZLrmQ=p$qk*b%x&Om^pt#n(}~)Ol+D zEF|WQ+PWXS=Kei5p+28t`cRB~n62?4#Pq=u>mtB=qlPzpAFte^Xx{U5&AeykOJ2DZ zpn17RG;tPV^2X4*$c*dhb&({KH!OHzUF6xv>2;9|lebXl!hGtROTHo3FCzEz$}NG` z1LkO+ziu;qun_Nj4R3&h4$>#QAci1>4qQV z`I|z#D>b}vCT|JitK7+;NEfW13 zw3COo{+4bhAL7MB7Wuo)h^c8R&T^mg>RT!D_xK(9lI=r+$y<+jx6|-Ona{O!5buc^ z-W-!REY=}m+;`r{PtK+MO*8#1L-lQ7-x1_kpGBCwals4Yvx2wj@tKw4#X| zn7kE&7uvIpzWjx3&*Dtptk{PK`)pQfcr(oB=_U|wfrdBB9(-)_fk}WgB7loJ6{HF8t=z`b zg?%>L>^NjD^?9okFCIc0c>5}#eOM;0-{{KR^jj(3SnJ098b4n8?C(uK>79w~M~@$Z zvK2-HvJ~^Vb=ATLsK@uG9%_hR_&)VWYkW}O3;7xmza8D5pPO>P!l3uS zxr9bH$O~Ke3vI#!`*{BLp~M5u2Wi6FY;j*G+>cW>?KX0UYV-g)egnQPltS~9cWUM* z?NfNVHE5pJS^f8dpznrrVWw_Y=)!tdx3To|DzYcjyg?p^(Q~vG?CbOeHt6$Bk04F> zY#80=KI!JwfE{?mHM~I|2yg4vHxT^tpaODSVol>cFS7{o_R;W0nY=dA9kbzP+Xekj zaL!`tmI_^Hch0~51#>P4)W!AT++KAL zftNu?gsEGNeArgEj-$~HsvE_ddHwN5F68}tTsD-m3)V9osj7E?DZ#%B;`muxz0MNk>Qx%A__ct|1MR+{?*(#+?V zq)~s-PP4B#!PKo0yl{OnU9*qhVd`d)?jf3e{1K*ZJ<{DzvyVTzC$HSXXntoy%|3pM zsT)D}qu;lv2f5!U!E7Hg;(8u71YJ~fOclgx&=INQwL9heH_pqIACa9Nq}gze$!lHf zT@S&1*x`ZijHGm}H+Z}W^!J*(9D8+>=jKPZYW}(7K`b%EJ8-xCo)3CY!@1Xayk#94 z=QX~$Gxvhjl@p+m#T&Hf`S#ZNp1&}^zC-y(a4z=^llKzOUs%stty#~Cea35dB4|HBd(C=Q zXgZHKC3rV;c`uw#uW#B+-YQXUuzqpDuk`w+!{kjPe`mfjfm{*^GkH^Jz3}xZ_2fKa zn#r3R*%%KmYIw7s^5P*p*3*S@o3P>|vR${B^{pED@V3SW>sel$Wl*`z*7%TO`jFYG zu^&ooH0%l2j=&?w?B9}TpTbR=`_ZFJUR#tK^lvkNf0Qh@1h@S~{vK7DBI||4n3KzDl->gRdzSnuzx23L{=04%oiwx5JSfiWf>Y{#VOU?cM8Sef5 zsQq1Vz}H)-zrV~Un7p;9{hfc7w;n6Ca2lDxtH+`8#`f&Sp)Zqh<}i7)sNK1Dx58gB zBmOzTGmPU-RY4G84uZ7o(~p^hu$~s zPWD4NCT|S!?xx{QF?ov+?_L_-=xkoQ6GyyHyifZZXYxi6Z}khbzbPhfM6~O$4{zLv z#}@`x3io7`$y?gGv44Bid2b1+JCPS>bx3!?&o9+ex{*hCx@CPm-cGLIu8ZG2jMB}7 z=y(WP8;OejsW5NUcf?PxfbO9I;>quLx(?D^Ep&sRGfdr>(1rP(%MbZH4XDH5KlRXD z7Y6xI9rDI!u%F=44?fxnM z!#+pon@tZ&H!l2zaY@(5cXdGTG5F8$pmY;L7xoofx4g3wZ;cb*|4#h+56XP4=EHAo<_pnjBe-8}D z!GDGa#p~p}ai8Vtd{#C1R*)kXiQq-$pmgIWc>M*e>s38vH;i{ml+Wt2lx|q;w+Gz= z?mG*nk3xs&gp}7P-6Ek2ZP-h@9olex(NH;*&r?}S*A}|aCahX8e+T&d+Q}|T44tQR zONA~NPi4$X<7*D2kw(1m{fqkC%LvM4XQ1!CPF+Ot0g4(|@Su$SHR zpm;-PHughX?|aTqpl6$ky6>ZOBf^IQ_dPF`bRG_pXTX1k2c=t!#yb_K&ln1F4gdWg zb#27E@bjno=Sw$=bnjfX#a^Hbo|qn#5021<@$cQKGaKg5@}V0R@c`qU_M7*=1UUDD z{|pa`H;ncb|NZs6h9W!HP!rxp>1I(p)bIR7gKooM%21oqjiGXTb)h$+&WCOi>9&5Z zx2XvuMn;w)8IicGggf8sfu&+2Dx)Bk-(1z{4@Q>p`zTrRk!Qh~H>qPqi`{hQQ z)BXpLI>A6szJ=1wA>I4$^mI>@A2LWO-ITcQhQ59IcdHw&kGa<^L0?~l_KE$q3H@Bw zTz`6g2bk5PUibjl^FtQRY~Y2lkLeMl37@qQZx7A$Ueiq8LbQMK>KoSl4BxdU{AYMj zyrqH{)}5}=JV!R6;SEBFA>GcJ=g2xt-3p}JQS%(xh(w67-`y~%gdYqJ%7+Z%ZLfJg zZIa1rq4C+r?_Bd8Anq2x8U2=?PYrl`s1EV2(A47?leb9t3++yi=W80;ora5|Ac%l- zl)s^48|SMp);v$wX7WY^FU+Uz({^sdP!iZp4~n-C@z!rfKc_d$wqIv#rwl7`Z0x&`)NcR=Z^M6ws-5`&PM7@Br>i*|@4RJOg2!J>jqzP|z z5bt=+bA{tf-UzD4TYo;b9KMTtT?n61k8;5a#I@b1gsMg4L& zpUU#uorK_pdGJd$&q21ByiwHd)P7&r5D%>ac&SrVJXE20*h}+#=65=~ zK+kKQubkHC1~FUczWj5qv7uSZ%irBeBOj({p4*&Y@|L3Z_q3a~YiNIqsX_`kALIeN ztyb{Dyz;J^=PNr*UI(?mMK=s?2(gBX!vMCRQxtCw@gAyqZgYgmTZa6-`QD=Oz{H(@ z2>LxN5x+36ym?8VBZA)3a8AP;^qGR=8rK;T!xlt?-UH_{y?OP`Lb^9T)r;g!YIK9j zt{nM0>*G5g1-3olKf@zP6Fypucn`e1mh>UUe>1@DBLF;GlS;i1*B$ zJCXj{Ox_B?3w7+bPsTk1hz*UJ0V}+P;?11Z7-x4sH}@4vF0A1V`b-_ty}8q_uLivb z&SfKX{01@G==%7(2j(;kQF~D00q27>8{Ssd=)=KF7LY!qn7k3x4?R^9SpwfhGB9`x z5pUTon~?s-nY@)E&cN7C^I^8Yo$qS+-~V6sd)|1*7VTuAEAzsBw~xagZybhB$CU{{^a&CuiH|yAfUZZ$Jm5t--7ZMlt4Eijbi!gaDq&q$L0jV2e z>L!E_?Omq9v%lPt;-$`0K9r&TlYN)$Mea{cy~vASTlfI&S$v;~y(up1LY{6F8kd}Z zafjz9UFtmLgM)Yn9r3{))aNrjneC1!H)wPB*?0Gb{*BTOI#2ONME?do(9AbqqTUut zGI>*I95w&j{tfL}5Epfh0x3cL@xtw1yNLRHjLGW=U6|KM-f=U8Ti{_cb)%yi_f;Gd z9z>2G0>8{XN%>HY%5B_xTajDD!c1OA@Iss|n%im{iiG3PCUS2dic`s0$#JYAUQdhh}IK1)iR(oLi5x0jAM ztAhGGb)M37kPrPjZTSxMdFni+TZ4Efe)rB3)aOG7@y5Sdblv^QrN^wGbW`{6+TRj% z-{OOs`xY(ceT%l>g*o+4G=I-M#{7HkiE=N_VDJ8Gofq|^e8_#w^Vb&r8|)i=Z-c(% zcqhZ;b&$V1KL1|ORA0ldkY@6hAb(FSKmLBohsX=O@k2S{-BrVzVDd&0@0l9j1d}%@ z;sN^O4d>AJjXO-cfN)<^AWGzDM!4UXn12x z-ZUz=-8AKvWb(#Qob9EFvka3rgLtpM@e8tE#F)Gli1+UEi^+C9@-i@TV{ym2OP72=(%;Y~4lb12U2;$1(c+Vv=t zH-+lORV$u;kkSp`#q+mdP~&{+ff`{X4=-xsA@>2VzNJw-yse3c z(A_+LEx`-pv&X_;!t_Sqk!JGN2wrF(9_{md!@kTQVTZ{ZLH_=B*$8qAQ-aBxLH@2e z?S+Q>P=a{VOkNxDrjLJ{mB%SIRNYFaKv`<`qO_ZmERK=-}6tU@_Vwod%w>=m3pp)LWQ|M8lJl;^D<3{^R*&P z{pP)|UZnDUYU&Vr>igE`*E_J@f%OiocVN8(>m69{zjk%ZugkPS+WpUV|LMNB zT6|8Xs;)dQQ}uQEeKKADz3$qOYl8IY|JCx9aV%5m2c&SwIF_mUx{N28!a6D(|J3{$ zr7OSppPEmjbmjN{Q}b(-uIKW9x80EOBvUnRWIV}KeO<;WTRDE53 zpG-}^SGKz{RdwZgnX0eL?~|$N_sZW>rmC*|J!PuCF27Hv@_W~(>m69{z!@mz+bYGc3ohq9DUBY`9|C)$V=aUwQLWb6<7;oPzt5 zjqv<64f{H3XSHg0yQZ9b^x9bL>%Ymyp)KDMfd7RpAM%G7s z{{Ql`toM>D^`jS8s%G|NuUyshkhk4``Q`#$I3!oDjn{s8XT5$K+Nhcb*9})g+`9mk zdwA_vU7g1POs(91$=TXsN|4!%O&e0=7MK3C6eow ztFA{=zu*}tb?cbRvYK+iGof#A}cb0vB<<$|@V z+&bpUZPk__m(BsF;_I8U4?6l`gP0|+M;PWLf;&nv~J5WD89UT z6Bmv+Z1?;>-9O6fT8x0_Tkv`Lv+e%yPjdyeU+^qM-C?^g{?lAR{m|C#_vTJrxA7Ge z_vAx+g^B-$UqS5`JbPVt*zSw}bU6l%zq;t4+}HjMuAu%A?y1%tw)^5g?N{-aO|Q4N zbHBIZrga$ZsRNbeN!&D7LTuEF6W1)T)VnlwdeucrS85%%U(sKha&>pP3MQ}HxUUc3+Qa2apRsPalD{_ftB1?w ztYg1&xu#qZm#gftb?cYYt?Bh+ZOGkg58*+&3Xp zPjx-l|KI&exA*p0*lvMBd_lSIEK(d_>9`mFGKKfy`JV9J-aZzY!s}7@pFAKBN4kTz z{tJ0LFC+KA$h5|gD|U^?CDVVJtKpY$|FhkHYJJS-z9G5aB+}`>wGXD1Fd%HW4@SKG zANNa^MQ*GAmS1wOSmA$cpOy40_8*Hc8TTdsQNPOmV_Y)668|wS8DEwEQLdW*7?+Iu zs{dHKD&woba6hKpry%z?$@ah1bD_`}*r=d6Z1=T)>bj$=_+Gg$tyJundwr=px9W0L zi2YxZ`~SKxEu-w$lfO2#-z2ha)9a1`_d~_&c%MShx+wWDU-3)YZu(D^ql~YheG2fm zmtSLshp{o2jtDqY9(awP%tIXzvj z>UBKNWX)?jZ_>-<3a{gNlSDyNE_f();p6MJK9+TC%GJ;1vj6w*a@lP?4p|?A*3({h zJKKV{h<(WJCK=o1{-@j3p!K0QT(0VM#O40V4TtUiFUORY`!ihURbQ9$UNZGm|GjyD=zsJ&E%qN9N6Q!~Ddf!q$nspDu6JO)1M3}F@4$Ko z);qA?f%Ojj-yDFw{cvO_dE>Elm3kEJb+Y)udeq}tSExdpjSxAt}Fhd%BH+<$TLdiw3khM&Uk4sS?v3o17fFZmLfcY*`f z-S%zx$^V}$uYao^QQsq}Bo7t$|JHexhia$(t@A1m<>S9~Ugi0>e4xHZ<@vXKpuR`) ztWVcFu-<|74y<<|KMu$}zUqD1<>GlP36aK=-t(m*t>Ak*gkbNBZmlyiL0Q+0G~Gvl ze}m}GD+B+Io_vqwtP|_B^1R9!d&J}HZOEB@(9c=b3}@|5W}MCWSvt<++|7{Fj`=yG zz4d;EfBG{oepU)U`xtVne%3d`Y3gTl`YIx@I^Fe=(~^&G}inr>C=*A!oYY&zaa$ z?`L(MII9Hb07FhSK8yF#bLJ~PGlFyP7IJ3u#Hl`yLhauZFM07f(2z58rr*DcVt-z( z&(WvM>U(pXl|^2B_BG_J_{|@mkpX(nnxFGij|yJ)e&0ccoXH#fT(!+`7Jic-KkFax zboMah%wFL4GrqTpePG?`gpK4z6$+U7$vvN1(tT5y(*w4?Y<|Us@ zoxSqQd6OY$O5s%Vl5cHVoL|nH4LM8q_xq{l*Yb%UqK2I6^9-r@yv2|+bbz0;NnQc1 zG2~RAZ%A?8YRFloaH@F)Gh`1iD|hvIhZN^+hMds@{eG%>m9yHAv$^q-)Vl98kuX2_da+=ondkr}ghx+|g^D1Z7kkjWHLr4( zPBtrdQ_k^*oLPla&8wW5JabkWa#jrU`>Ezt&XUK>{ERK}&kIoP{4&Gq_sDQRrDz%8&5-speJA-1lbn-L(B&Y3QeQ zq@PpGtDM$pX60_mxyq2UM&VTRDrboyXZ?p}?b2U{oUx<)eyVwu(>c$~&$6%0IR7@} zEIiuJspeJAQp5Ug+8?bp*rMSDredGW}NEZ?Vva}Fl;}o6;3s;a#k6}r~3B{D9%=foX&B6Kh?a- znKks&w13~wkh7rF&#C5B&I-f$RR6vW>d&L(*UG-K#zX-EHa*eK2dL(VFNQ_U-wp_0*Newy}28yj*) zPxSk#=2gzLA*bnh=|02j&3c7X%{SpRyxue&C$}^7GkKEVPc^S{7Ug-Ie7~WeB`5ni z)x64C{J7b8-n5;6z>qViaH@HgGiAtWI-mTYA!p?&em~W`%2`xp=BMep;X{U;_NjhO zHLr3e^UOKHkh4zVRP!ol;gtOPnKa}~IDS9XyvkYdM1DCRG2|>B;pbHIDrY>;oD&T> zvkIr0S2;6=oTmNJBty=M)BJv_d6lzds#&?4az1Lv89Ck0speJAbe=gU8* zEPm3=Pt*0I#|$~+XZZb8^D1Y`kkfSi=y5|%b$@b^vR_%{%-8;8saw@TPL*5g$+X;X zAGPT?WQrlDb(X)}%SZb2l24{(Pn*T3Dd!U{79Kc6z>EIixqr<#|1GObIQ`Dx1ev>|6&;Z*aIPo@>m zm~oo6^V1AD%l_y0Q_V|0nHEjYFK5b-GklJpQ_V|0nbsI`*7Y!(4|&Frvs&R)^O8@d zrRSO5htk~r2vTplA*XY$-%m9!^<-M`oLRY>w)4*#a;DDna~3Fh$tTmQJaazRLQa)i z^2sz~$Z0xGo?*yYI?C^-nwNYstv%l?K26)DnTDL9^ZlGn@)A&_kqgW?P5qo@$XTUu zs(A%7R5Z)19+`4h8*)Ztem~W`%2|_V&e?{X^$Mq&S2@e7&HOZ-UwYny*}4LNfPr?|k-LyY?$&k~&(C=sE7=K>n ztjja!%Pr(oxmC{a3ub-NfTJO73uXQbTEspci0Ol!scp)#+g(ofTRG}n-`R^e3hDo5!+Ge1o^-!$Zm zU+VW$&8wV=SM%F`));aYUFPRh^D1ZLH8alU`ppt?zxFaZB|Guq^!mV=F7~ThM z+J3%e=x6!mem~W`%9+WNpHlZ7Lr&`oKc||PdNQqh-K^YA{hV*eS)*{OdC4c!vN!X~ z`JN$X>`K3%YF_fmH1&3VIo~(rEWFCkspci0Ov~owm-9nI&a}d*<|Us@OWrl(G;QZU zHsmb3+V7{DmwYm zj89X}uUp8eax0jjWS%*{G32aQ{8aNQXU>qbx$(Tz{nn6EeO{27mwGZaeg2Z^I>L8` zoFzB<<5SH`KAGBv&s#H%&pJcSoWiN*C7(>o^33_YA!lWU-%m9!`DB_fXGR< z`9?#|qC5PYYF_fmG;H{MFw^*4YRH*UIMux5lWC=)pQfC@8*-K>{C=u=$tTk~Lr&BF zeVHMrb*GbKk3_amr=c;aovu;oBvlE-V12u zW;jjn<7=+mYecypYRFl(nSZ}?X{FxJ(tc+5Yd6O!%i~YO{z$!!Ym%3OB8?ed$C+}j zG~}#Ot~b@Zf*Gp)!>r#l9f!0xyk9$dzrUQ-yvkYlgBho(pQ{Z0tXDYIyvmuY*K=+H zA8@}rQQ&Xyl4p3Is}`x$-PHBd4s{G|=AO{~eXi;)6uk%h{z^U5RJKc|e*R_XXUT(p zE;X<6MONzlYzH53zdP4P`TYq$H#77zr*Nuym9x3L^wYE+{cY%H!(S(RGjqdsd<&NxjZ*M!-jsU>u*_wTjeSdSn`(TNwITcDcWQw;uCz%kP(IwPAdku5-0E^s`3cQuC5eruJ&H z_S4kQ?G62mJ?{5U%}YL+W)0g<)8`hpG4!*r%Fn6hC7(>o^6Y0PLqF3Br<#|1GA;Pg ztlUkXtGSV(pJh}0eyVxNCsX_T{M7eS@%wIR=%+ef3P0iJmV7cb9WPa6{W{e10NWb+ zS*>uXdC4c!>O93~T==<_p`YsYku%lrgXEKGzORo84E-#4($A&lC7(gb*cVn2SYzgp7HCcdC4c!NG?D1UF!X5=x0vh zRP$0#ruBx;%{DFfO$|9Kr~Ca>^O8@d&IV@XZaQzXjbXXl&-yvlyyTN*Jl%G2q`k7U@)V#_WUTWrNbM+{)s~0~V4E-#+#qVduOur8* zXGI6I`T3HZUx)IutD&EfS$;h=uX5Hl}r_{h3c1V;LA6@;{7DsrTX3c>-vFVk4k%uiF!cMUmf z6fQL{`D9v9lV3j<7;?s5^!usiC7(>|^URqs}9{7YF_fm)LCH2`Ga4V>W}6(2pjzUqd9)Pu#%U2GA-FUzx`3I zp`X`__I`Sp4LLn=<9kvO*xwze-_{7`FW-xr@GI- zz8TJZ?enj{-{TzFLeAtHdOuA$n=AK>DEHG1ITNG(@mVrg&*}W+`JmP>nV0pwInH{) zc}5F4b9v%yu0N_i&HH^%Fy(ao{#Cx|&r6?VnyZ zaGqqyss7!Yx@I^{{|-)b^I+8(&(HrEa@xK9^(gUHGk)%4HvVj`9z`DYIL|WVtT@=u zS^T!1)7n2joTY-Ztc9G}JaIN#?jL%7o@>Y%?%*GHSG=S5vno&b%hY_}ah_wyss6pV z$UHr#>EDlQu78iFJA2m0gFB<7_o@~fjx2?Y(#pmn&bOxH$ zqvrPg#y<8q&oksypR-l;uAVbr&)rIjeUGOaa;oiTra4Z-_Om%ZD}|q<3^`Rl%NOLw z&*t`3CYN~E1?L-bs(+uy%IG;w|E^GT?Pqwb7oUzHr@DSr(+sES`cZR!)`@bD8FH$A z#@@@1pS6qqI_f-F{pDV{cQWLxJiy;B6)yDa%Wzm;;{kzr8`I!@b z9%jg?_V3A0^nRK?N20m-l;!lAvfd%jt7*xnel9hyzCR}Zu7P@9=4E^~cfBd!Utq|Y zQ#jSU)RSp+sn?#!yqZc*)B86!GvuuN%s&36&67Pu+w2TOe6_f3Ad?sM;a zYDziOd<^6W`<2+88|Nq)M?|4V5@{P|0gut?Fma-dQfxyBNdX}XG zqy(h|1qs#&2p6RUMU9FYdh8L~wO_1JEKw}6U$F&i>_JgN(+CKmhq4gr{w6c?#(kfg zGv~Q6zd!u!y?mB)pUK=a-#qVWGjq<2yhMxX%je6mln;9Q~Gyo-|+g9aBS)Jv5sS( zXH~pSbD);|B<-xW_V3>Ff{@cxk9Ki0X8I#+|4|Dcn@Ycl?XZb+1<8r+KWdgw_7hHQ zhfSQjlAPH7qn6{dsc_nk^;~)28e8e} zxP3j6)S$i(z~C2Lzlb{a)M%V|o@J`h>J{T<9LR9yT@FB9i8 zJCE@XPMIF-S2O>sAI z9_D5gb(UH=Qx9uS)FvL&c2nFPZQ^}JWjixE#O2w1SNEnseGC^pY3tl z{VYAI{X`uKHRMB6+)d-9que~w&i2;vXQHP$Q4c{0-DHZpiSuZWb89PS6F5LDnhn@r`?#Q9v0)9z>NNzI8m6l%zaa{fN+ zzH@NDa0>1lUh9pm?DrAsz=;}Ba(~q4wfMQIe45(%_D?I-F`s39Mk%BP9*#U7{KPiH;NIZF>=3EN~UpC-rnsNv?Qi$9vVry! z^^ik`Zt^(2v4!5v#CfvEY4>A+z4k75F{{ z{-5h*IAOp32|hPKBbTjQh@Va{UXZ^x`B`*#VEimZb=*!6X-ro~TooLulSkhiH`n7O z+c;U?w=3gB$=6gqU+3qq27ZkA8>+tQmsAam+#MJ{ksq}jhfOy&j6+PEZ}vF})=Y=F^4}3;#;xTO( z&g3%gI@m=dXJu<$9#ETjOxuOCvlqvCG0BDw;`1m>obM+&V=FW#>QOmy zJ(r2|10-i1I8l$viR-mZoF61P^Sf$4QIE=r>!3}XA0j!U3C)RmR8BlEHgSHKW3)<{lv{8=SABfD!()WRoem3(eCI}Z6M$yozV)WRoe zi}aK2-#<=r=JwEjq82_$(;J4bE0^4{Q6uLR z$;rn33X(IkkLE;;oNbbmjr$i#&Mt7GM$RPJ&a>B-zC?0PC$*obkux`D&M%Xk_`V6$ z$XOye+5Y`2BxeWSD})+3n`7quD#Ht!{c9v= z8#qxTXJ*WtUne=s`)NN>BWHo+WbY&VjO1+XuQ`*Tku&xzF77O6eMC;=M$R}^P&L(i8M$XQdIlo167E{_!)W{i4bM=Ug z`?pEX_(7TzHFBoL%=sOXvjLo_k#lm)oZlrm3kPdIQ6p!WauybH^@#QJ2P9|y5bY;wuOp zFs%V6YTUmxFviA{wL2~wh6E$+qkeuxG&tH<9m1k=|Q6p!YQyI;P8aaC;Cp+)r4nf{zUB`YT=VK+u`EQa^664MxU=aQ461>MUvB2 zK8wM7fsY-re9i#3@JY&+Pu9;Hy^QT~pL~J#6SeS38hL2EsiCXw1t&nkN z{k)mvtN|x#;ghsMa@xl8$@TrXoKKd|$#eDdEOIZ>{tBO@k?-o~?#OmYrJZNjAN|w& zLwosjUJP8Q1t3UccXI8L&Cgum=LIABS+#JE+s`)XXZ9u9Pt;(ilPCSOUH9%h?#JbI zq@S^KbouN7H*$7rT=`_rH~&TYS;=WXQ6uNnnEZ@B;rsde5&g`(RC6OI>t}X1y-weB zo#7VJ&n|GGM$Q@1Ph0<93&z_Ql799+q08s=N#TBWdtCYKF5&#VmGm=xvgSgKekSu= z`)TttyOrM`T{NPf9pFYz)=##7zm4>B>J;rKYUFH>seHDA@_8xgXZ#{vK2tB#+{jt~ zC09P#>r4M8{cHmlYUGUEHJ+;zGZscq|%9T&{ddTtQ`Fm+n`-vJkC$|qjKa%I1;QS5Kb56SM0hs5U z;Jgvk$Z69up0~xl5w!D{j2QQ(VZMv-v2nL?N`Ciwzu3<^8n4iCFTPxB$xqTI*)G|} z$=xUYdh`a;PaG%5fm`?_Wyf`_pZ9wi&)rY-SNJ6Djmgj0Q@)?)jp%3LjPSU#ezNBs zcaVO@&eU9}#Yah#q@UKfAMIa1e+%hn`aIpv*MVF3B<)-^-gds@Wo$2>`Lnd2sD)3` z9NBN$>bvB3C&?K-TXUk8{3Okhakp_sp7!g}8_BrW;rx9DxP?#B^0&CS<8!S|=bLwV z8QbGNnb&@z7CuQ!V~Tq+@bgV0`WZP#a|@rOte@<7{%$X0yPq}SLM?ofmdNsHYnMt( z{c+bjNI#2Hx?Re>GThJ39bEZj&o}QO{d8UhT&Ts!Agzwc&uZZ3J4f`hYT;!4w8dS% z{=KB1xPB{pF8C`Mil1bCw{a$de)DalpAMWK^(>t6N4WCI-q(JB^t1A6?H_8e)5!$q ziMU-fd)|=?%IDih^fU7s%`L~5l=ahgA3^ea(EG*Ses+Niwd5!1^qBl?27bPa^t1MA z-F{BLHr&rDdH={(kK}tlMEaR7XfD)}pQO=y{Be$GOxg0;3;ZmP=w}DGk%RS8Fh|<@o*kn@K zjamzzq_O)rKiTt+r%2Akn=}_{;ghsUj_cU*{2G$837n{fPtxlBoS*ExiwW|&ck#{I zPt?LEX{O6@vg6P7NzQmtbD|bLNz1Flug^>W&T?)w7J$eAZO*>(C0NzUj+ z+E3KT*(N#Jc`S=a&KclDjhwlMxwy0a`(l!F@?z~LYUJ#ZoNT|j1<4t?M027>&gs>h zpKQOm70FoxPSnVmdStwuOG(b$rP@!_$T_tU*Ke}rb8C{*DQV7G8bBivj+5=*w%=yW#gWiGU>;Wfg<^YUC`AIqtiXoKx@AexjbmN&3l_&)rDQ)Vnk% zYUFH?ezI}jgXC-jCu-!J+LSAwte^XkoaM6i6ZI_4Rb0Eo`ni(iOuk!lqDId6W}KgF zyR?erYyl@~XVvBj^6-I)UuzX4bo4xz8?ylavV$x@7MgOasSw2u6(ld{0}ENV;|6* zsF8Du8EuSwS zIjg{l8Ze#oaU3T*-}^-*XZB;-Pt?fSJU*OrV<(D#;_1d&{(Q`KkjhRUcIVr~orJTg zyJ3y{lbO~$vR@B4@qBjbk%>nhzEt+Mr*dDL9WT9v^fU6L=C6EQYa}b55bmd}kHhb8 zS|9fj*H31B9QuqJIc=KtGaJnNeK$GJYUT)i9@90H58-R>&$UZz+;e2ylPmT3Yx?r= zxOcPRacBLE$NcYm*@%9oKM~H!`q}xW&c`(V{3yxU0WQ=MZ%LEQ@VHAo!t*RsJvzya zJ5!JF{0_D7vFV~<#~wUKqH{(tpFMbfq2%{@*Ut@{qr6tP-+sz=OjDoI@j;FI+q9HV zb{^o#WIbvFCu-zsEf0^oaN5Qpg`gh2hb*7?-0||KwZF*8K8Kubmrf!5Onydlp+?T^ z&f$Ja`NaO$RF6LH`Z?j8#YqhHb*Ipe!>^_}(eeWaf=z=aw)(|_hTSwGJl z(NFXjIWuGS^Zlfsk*ba}YUIq1+0U~`Kb@~?&KhtdXUF2Fj6d=IyXpMsv#y^L&MDUO zquf_CCu-!hX=#_(@_F`%exkp~6-{vUi0zLmWcjQ@+)*QE;Tn#U_46FkPke4RYUFH< z+0QFTKYLf|@`)Nb>tpuwm874QuW3%y$mx*l_}Ke#A0YkAd|h**MozYWXYU`qiuAJ! zoTz7Up304v*m`s|>F4w}w4bPvvvwU<-&sG;CH+jpbxPF8*|PX4{SjVgF!e_tbp2e< zIoaAD;dvoyRXxIwRM#w=?0c(i z^DesY@XP5kk`tc`mHTP9pX_s@Z2e~b0^iTgNzPgCss33wC;Q%N+x^YRyL>;lV>vUr zzE>@r&4a`HBPpM@b>+DW{d~3{Iq`kk*?PF2?EAHC^*vtp{oJ19#QW_%3nzR3-4^%g zyM4|bNY2D67%yBM?q|g^-$vqYTc_W-$dCJ0BqzT2JM;5!PWCpLB}rj{fv>E_`dhlufsXV_5Sy2@cyi=Nltv< zd)vavzW?3!KIllv_j4PPGx{^#zn6a#?q_Bxcb(QYuB*S#ukR~JPJCW+vJuY7K0n!3 zk7nNEb1o-2asF4!!fBfiCjF+3vmJ2mJR)c5x8Z)WoVK`^-|zdmE6IuTrW3yl=Va$m z+c;|hXJSOo=6}iQUbl(3mp5kpn6BF_bN6KCsTO~){X;$LfUSpD_tzuUw({dv`NBP( zmi_wkq5D5L4l&&~Jiy!gz`;CfPY(HC{12KFb!M?{w}xb)HZ63Oe+^D;cJTaNK0V0& zCE{%B{`2R1%XUl~z=<07w`q@a$WEzXy;&C4ogL!t8+DdC{duEd>m~|+)PABKa>&q4 zCQeiNJkrfA?QCt0d+bk|6Ll!mkPl6qrgePBxp~B$9j(_D>%fV62ukRtKIgC>6X)~X zof*#jpS7Q;haEF)o5@d8+_P?GX=f*E+@np+i8_pF*k^K`7S|u;g6qkdrG9%Re|wJi z%Y?PQ&j2TC$xqVeLjApDyQIR2&yg^3zS{dkJLlvz`nag&_>$T<*>OnrQvW*Ysbs&I zUa2`Ff6-d_BrP4rjX!Z-rKz3&n3u8r{RlPSLM?oQ^bn5Ib{$Oenmi#15 zkes&bHj>{bNKWTk%{fa;hCx~+Ic?|flI^ER&MI)Cmi#1bkeuvujXpziX8)%BL@j)h z#tscHpE4gTvAwEs_)03z+)NuacY{;6yEagY>Ut`Gob= zCeABK&Z!%;pQs0X!7mAt({|rb^8LK`i@hGDZq%HpB|k}L$a=)a{cEJ3ZQw*Le3BMP zKMS|$?{A9xk4Vn)O*%i+!YAqU-?{RczfI?B;`}kmnY>x&hg$d~?U0;!-eKbWI?34r zPSnCDX)Ks8AsSO@=h^Yn7rYGY^{Dg@?I&vFh>+(U?D~#xkbWlqsX0+2XP)%4@h_dP zDegZbIh(+V8aY#zbrUlF#PfI4xUS}MuJ0UXz0Oc)M+Qx;S zOWZLZQ$6}F8TZ(&x_qKWj>zA*{s`k@;;fULb>KveoMp1U<9r)a+`sQ~PB>|6+_4`< zjhr?uamRd2e*S>;Gx~2Gchtz0Bje7tOEV><~rI>)X16WaPxlI zdh`Gpcjr#cIZFd*_8iVncHP-ONI$E^Voj2m-zkKTS-6D=jr>w*}K4B z0PS3*@BhHZgL&z=UKKgz?|x2l_J9ku+n`dM79{X~tN)1;ql`TR4<8Gl4`qDIa-$;tZp1R3`_v>y%N zM$Q>B?yR3TkbV{()qbKz&V;318eFH{Ltm#g%@4W8W-vblk0%=2W7M)Ao67kS z8}}!@jP3Ouo?i*`FGOK+LPK( z)W}&T{bbwu>qySrQ<@Vsa@I&r_PJZ`O&Ryc9(U(y%{fa0Xpf9Ld)<3IlCuh&r~%WN z?sDam<=lYe%&yUXqDIct1LNg<2Fck2PSnU*9y8~LBxl9Z;~Lb+IrS)cegyZmP5n`n zKveob}DP^2uIbI)LQN zZ>If3jhxX%9H;GhERt`EM;2B~Gf;^6)f zTn{nbKl-Q3xxRC>_5Kl_zoH)Sk-wOp!(;MuLpR@uvuMKh+!$GRRZa%+-$Ivz)C2I` z+$sM#Jk?-5Ne0%HNIk;uYvOE^ajyawYP2y=mQQvb%VA{uncY(RhZ;HK`*Zy!+b;c! z^s@(?sF8E>6&xp9-)|u~D_dzlQ6p!I&LEGhw;D)UUV0eoW6_>hB+Q z|Fb=R3D+~BF5D0GJ%DHh^*jR4eUkdlt~X4R^=Nvjjyr1froDK){n5Y4xTj;96E$)+ zEO8e<*?EAslbjvkM2(zj@;Vq>-|rwfr?%F9qDIasl9O%cpGB6>)Ha$EHF735=gKEL zPQH`$vkjc6kuyhLS7h&N-%WCsx7B{4M$U}odY!5LG(E?x|Gt5^vv}~lwaV7|KBgQW z??0oCFVyQlDjzjJzIZNAVPSnCD zY3cOvafloDp`kae-|Rm(a_#5vbhjBEcbq?tI(;AXn{9ubTnOS_HpHD>Z}=eTXA_>2 zgj#%*v}id$lDM<;f*v9{i#zDJqZU3%D;Cb7L3jVybRO4#-d)Mr!g?MTk84iU(R(58 z0dV@t;Q6HRoKo?Vy$_oq`=bVMq81+|t#1+DA8llK?yKoMZgV%|31YrYVMpyJ>Z$|n zXTz^Yt>8T|k>L5S@;$`Q_C7ja6X$bCKVv)T{7}pBC2cMX_tPt%_%a;#k4@wGE#1$U z@jQ;ZQ41fY`CuF$H;m^oE+#*ZBmK-T*M6c#zRq@|`DtqBm$(O5yPe15iNOr%f4nbRKF{0@oYOvM zJ>csCr?gA6+P7doeE!l4$#$u-yY>^c@JbqA6W-37>bq$ivay@-T*e{wVBCb`kO;=T z;`?bDhnV7SI)Cq9_gwq@J$46-BLjo*zAoz8T@d%C&shq_Nz*W1GWluZTmYQC*zogB z>EBu_{rHOxzJ}Ar@>%scdjVe!IHi1IKBoHqVzPXu_tNDPweU(>f1YmFWxJ$v^|SvR z__gDnF`U2S{9M$l39qEJ#AxFsQ@`0im16o$IWH{j>z7l}!d1od_qy+A zJviTtK2w)hH|~ymnQ+#R$I*cd@mbn`4m4{&R39}#r<@@i5fYpE5h5) zxpIEGe&50U0TO=pjeqKUy&HyKBObq>agI3lg5wiU{&v4#pR!5(Lwo(>Wcl3xEC2uh2N0La-2eap diff --git a/lib/opt.exe b/lib/opt.exe deleted file mode 100644 index e1c478bdc3196edd58be3da52a9884373f89124a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1806768 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%0ABgXvLh#IrS=5)msOg>YZ)5CVaOr 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≶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

D3;DhW_~A8y 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�~;OK=)gt? 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

&0o4iMt}AxmiA`033e zuWdN)cCa7Cc;BA4-AN*^)6J~BxyZ|&bJO~weFllV6^6Vi^q1)!_sovdMBbz!Zw(g@ ztE)?|7J2IpdDC1x>@xrP7e(H(ZO!}*I3M1bJNY(|H(|(|ibMUt{5|mf+C1LW&SrWu zsF#f|R(1U^Z@gJ+sMk8OS?~C_oHIoqGKRbn>Vv>~sL<&E{v7IZuNby07FVVpT! zzFj_L&jUr?qV3G`%|%}3!>E@M4~o35A#Xib@4O$0d?)f&8uCW4zs~v(kL~wn-u!PS zFl&$FTs)jnIqG*&Z-b%U82ZaP)Jxy|@o15^_!+Z&tB5ww_boj0GU@zp>^;5yj*s_u zvGVx)fB$W;en|@ZJFFkF>zWP68({x|)n~J=8oo~S*ZbZq9ugQ2jQ7gdo}}CGbNy<& zzgfQ3;C-R2-#2LUe>a%FwRnFWdk))S=eq}y58^%;wEq2`^!Hlsy+kaJSpN6HJ$oNj zQS0#cQ8C;eh|BJ*`YP~+_Og0CgY^R|$74pHa~ey_HtMI^JkP3UHlN!> z%JG&P@@BX=JL|9ghlsp&mze3bIlW*1vRj^BtIO*3-hW8PrM=AG1lBvOzteVRW8S>I zXXt~+wa1>0&4bf?9PR1vRIX?~j`s9>mTJ8%jXtn-kp~>yJ_n;? z2ZlaWpbu<9Bul!B>+^{g`Rh1!ck=;B$`Q5!2=k?cpL*5vc zV-{zvPT4;1dO-bUWF4%KVXHUI1*KU%(jfQ${^nuNTPn|V#v6yexK85wBH&A<= z#`i|jJ{OoI2=`G=@8NSUm`r~rA1ds^dS$$EZhU;fy2B0=d8;lrBIIrz-B5$OZnZFTE z?+K+N^7Ix@HseiU|Cjl{++cjsuz|`&{Up#&ds#f#oDctQKPJzII)x9J4W+k*{pvc5 z2R8rv;@Bgf7ULnIhzG*E*$-6q?d)gf59{Y|=yo&U%JFY&%C>JhMD{;AcIhr=an^{u zY#dP4@6%^R-dcqZvUn)z1??N-oi+KtJbz1io9V6N)`@Lj`dMB-s?Km8+(o^te%R;7 z2iA%{#0~4oa?XcQ&dz=Fcn$Ndio5QAzyVW^5P7RB&HRmXJ}m$Bjl6L{%rM`oI3GS3 zKk}74y@tHC$jjytJDz*#0+F|92Qwe)TSGgvX_oMwAJab(uekS7mE#)2cyKNSy{z9iJNX5(BXmn_8t#WoZ@`U*=I$~nZ=Hf`=x>r+|M1wrX?gRh zWmkslq?3~At?U3kY?1}OK6i$6-pGDbFW)kk123EB3bwdrDd2hVT6yb2THJg_+HS%BBqNUt=AKpdR@-n zwUfQUS^Cf|lhG`1oWJd^UHMBWY4*oJQ*V^h+v*;h-vG{)Qjr@sQNi8|VC;I`biEJj68h+MK^HKKiFL9;_$z{7rCrpDv)+(bQYQ z>3y|;-k7G|Dts>&8+R|*>a|B@<-*d`TaEF+uIt?&956=4>uc%_upMH0r)(|PoBma= zesIuVruWQmCNN$_B*dRDwH()V_egRB&WCP zUAf*sQ*Q~UxBn?}y{@iaj9=DI4X&Obtsf$qygui{$;BV#<~2m0lQnwr;Gz$#AzpRX z+BqU0eGk0w>)o<(RvPuP`QOCJGjrGVh%dK)T2HUfU59-Bty}Zf%S8;=bJ^VWx3>>Z zzDxROd=WET$5b`8xxYSqY@57!`_e1S#<5XO@4Y{^J73hBQmnJ7*+BEDbUlRjvUo^! z0v}jC`9RyMfb{0=AJMBPE89W8n$?r%e7xnPJU;v((<BQ!aW444>h)*7zv*wni~CgTaDEwY!1*x$9Jvok zO&>f??;&k(mg3wnO1;fPir|)r1y-7~*Zr99^&X+iw=;@7gZf-X-i>Kw* zBa%+qyPA4aoZbsAS^W?3hTp<7bZhbm6*uM5tR z>WymZ&2ag4{y8s7^;*;Q@-4~fol^1BF`*`8f3!9ATIV(UyUnJ9*|NmYEvBirmec$3 zSz~h7=SA|&gL>sS!s#8|=0Vonhi<;6-ZbiE{c1bYD6Q9hO}#eiW&P^sf0*%Rs91K) zm-OPHf%EsJHM35U@p_ti9nRm~C$;V-<4tJlO>zC-3woY$De>m|QHJZptgV{cE{ zKdMzOensB6E-(7aZg9V0ZrjsDKKkxz@+LUFA0FA;CmwMh(d11cFRK{->~h?xA|HJZ z?$^t=O3sIExBb2!@re7BCT{}!JFH%Rv42^v-K2V_&al7ZbN+rl^j>xuIdn^C>J2!5 z>+RGop`_U#qq@9U|FU*ym)Gyel?(DAYPjChOT6TOWY4%57ledQR;q>jk$vv+^i)-k(m^p1J!f>MU}xktElOqKh--&gb@W4NxZ0ePG5 ztJ~(qJiV2M>tP&RKglYFB^Um*Qq-F=99iM*wK4fAc+=6LvQ|Lw<$yfucr z9_AaHPu=Xzz5Wz=1H*NhNv^!zb?2}5h`hx+n)y(P@xbb{DUJQ}%5l_?H^HrksV%VX zDz3Tiss{D4dVTuJ_jBzgm5b;AGargE9$2|Jbow!D*R&CDqoEHzmv09prk9Akb%xIw zakz4E_LS<6MBa*>%zP-?p}AaqvuE|uB5%@=H^Z&F>Rn*{PEvDSTbe6x6UXe9n@^>D zvx?2`vkW-ijwc?K&%3P|Z-$G9u9y0G*U7By%y>&N-&i^Rwas-_`8BuRpiCO$sBQLwIxBmqvZ!hxthV_Fr2HGJu;W_i) z|85p}6NY*N)XOTIzYZCBvB+C%$lHj#Y+U%~?>%zkSjxAIA#VhIVC`}1PHS@GA>u9R zXO?e~K2YzlID6~V-cO4@G#chx4A+^napCv^*ZpIf*ZplS9zLG;>|LVXn4u5x)4>N; zE`FbX@`c1J?o+?$jSFMgUa+?9_^oj>iPntH9u=6dJ5F7GTO9&w-0)LV<| zf|%aDPLS)hHT6a~y?g8<*Bj{S<@_!8y-m?7(`7e}|{Wwj} z-zcZ|iUN9LntDrdo#Q51NtYGS8`IPqL%posynf_@!R(a7Hb+yh%dLC8WAKi@hHD zu8@|u^iO*AS(MW|;>@?DZI`-)6|>h;^Bhc?p|Vi(f5?5-U==ru4#Y&Z^R?+eNDZMIDf{* z^R;c|>%o(n>$U^Vhf53ikkIs@jw{DE7VshB>&00H^|ClSr9hlTHT9;sI6J98oW(Wu zT314Uo#{QZfL>cuZ=9>wPcNW1t*JMHdRe{G<6e2a6Puv7UZaw$ch1{QUhg<>>cxYN zdRaf};ZY|_%W-Ce^ji7-BChUz5;$MND&DoP zZO5hynl_q;DKdN>X*tI`q03!)yw0v>^E+|mWrWXf@erzQejbQxsJ9Av**JD}rw11i zG5Jtw$Xkx%P3CW7q5DuY$H%p(m(5RpKdhb=yQYow*6d(*oy@`O7i|9Q%K>K{hqSrp zt+;*6c+;HTqT^@J5P6e^@nH3Bp643q%sNHnjqGL?XHlG&W5(Wi?8CYK1NmDt!jSh8 zsMnh^?3B5Ayk&-Zi_r%b54C%Kf28O`!jRWNUKS5Gw|y(`IguGd-ZJE6C;+W-ICGxU<)WAivUKI7l40%1|W%+haj}!B*7uFk=w;JSS z`S$ZyBXaAbD1PI8&B}2M>j$Ryw!y<@iaw+beegNGZ6*&~BJx%m#zQ^wvi9PM;Z>f< zTeQ1bJS4gLVVmFUa_ch5U)PW~#qm!1`=>nKN<-eF9ig6N`L=JTbB`8%NE!0l$jjnv zvlDmETW6Cp%(p1=vijlf3l7f9H+!I2zEvPEs~=82e^B0fjdDZY1oE(Xm*v~yvRAJaeW)?ybvfQMruMr|itgid|uki*5M_&=ahZ*?;#&F9U}W59XoCKyf&9xr~60!!P4tEG0kamiih=zHkzR4{X!5$a9+BO5aNjF$GZs9F5_-1^^tF7cO&I&zJr@s+5BDERyy8ASPjB9+imT5qzP5K>za(v_ z*XQD4^`>=6Q73(mYxCB`jQ2_QUkkS|PL?#owQu{)JV)BTMK$9g#`UWY z+xNjaB$Iqd8u}354dQ{VPqlBG|2N}hb#Y5KnGZ!a`c%fsk)3 zes5SlJVvDCLyckm;Gz#K1`e6sc^Ko(4dUn^1@fcl(u>Fw)bSm|ON=7$-{^<$O5%I(aXQ3VB_D;$|9&$loy>{6&7SUG<6jKl9_$2^@su;OzVCreU+ z{<8Msx|g3$%V<1Je?2bF9*vKEj(Ex6z_7eUvAnU0A(@(aFykFU?&1I`0;rc*VV=snIY5co~)RnqEID#f^s^cs_G3 z@sbY-LmwJ8hdA3TOSodfUnPupL->bd%C^r*>)kTmk4_z-nD4$~ax z`VaNbOlj&*ZU`SzT)P=rb?0BKc6VmsvbCyaT*;mhj7(A-6ML z=|v3oM`4rs;Ghp|9&t{aIfI2{xv#FK4>tP1`VVvaba<7B$cLDr52e`OVb|XdIR4&S z8Sii+Z^2&XLmie2HqKf&Ywz4Vfk>IqeBM=(8*fhQ{=!7!BOjuM^+ObWVB?_<6U&?W zB_oKu1$&tfE>};syI5XNMl|E06yt%7FK$@-;7cTte5f+?p#ptiaaQx3`zzzk-Q-ON zDX^FM5ODQm%?^Xlmr(?h_1cRl`oQw-f=}l@M7-pK_q%$05vDo8`EbyEXEU3vLy5cv z`!G(HEXviB>pqd!lPOIfDmWj!pK5ZUOFmQ^)(_QOxp<@BVNL!v4F+1^0fWeVh;jAg zlv&?N>&b+s4*^~eVB?FTDYyJfGRcRup${qafsF&!ez-0Pyib@UJ&6A+rWCf!9@(Y{#4;L3WZ}Cqu9~!ZKVB_vipWW2d z9*b$&cU#kk1XnKH_tM`IC&hzrSWjB_!}wymEaB8UZu*Sz<`(hLK?>|;K18+we_5QJ zQTy3K8AWE2UOicjKCpUypQopvO1$JlqoEIVT)Fsrufv+wPf9O((?Pkt%!d;6fz|6p z`>$QfC0XyIujxYyePHqXe*f+BuKT-&4TZ!e5U5--I=$!fE9)8ob$iznChX1p81hXmG>%->HwU)e}{#l16I zKK~HraRTQ{*gU~s`ySq(@v&>2E#1O6S=w^UHx_3LPgx{$5 z@A5XAwhrCWckA^_T=ap}lM7BypGu_UgKyXlrEuPpm5YgMx7v&Gvd=BuWbshLtsDI1 zsu}HxkMvqcn8j}z^NkTsN}bu%@6**Ara6Q2;H+G%TehGn6vmS17VH^k7_Y~bx5hqS zH}MW@0UtqRygrw2a~B=m1m6(68P4A)=bbf)5wmNkE!|{#)7Z0IL0+~{W9Vn_zHxSqq@|louhjv{F}ogn{rLZWW_)|Llr)Qz z@uoPvtDlbmuu-G6*$?A%hZZaRD zTzMONgUjsLApMdmZoTqp6M8gt%}QG;Hj9(#jiA5m+)Ks}Va3jBYCPG87Hl%!V&r88 z+>w{I$3HwUhtXRD!iXimG0rgF7+0S?SLS@nl850Wv{I~x@xb)<-BbR2 zqsUwGcnH%`iuuM2*m@yMm+TxOF4IolUWCA{DEFMF9)}lr&eM4Ly4Nt?YR-rL1$>BW z`rx7u%-?&8HgBrZoiG8C-@?3Q&=^!**_JFT!-m zev|1<F4F!^aI;?ho5FZt{l0Aq_z-z6zA`V0{#XKdhKSEi?gDVS2tLk`CPp|rhvb3O@CA9FRORTyFbHh*4m{0Uff*X z+8i?EAuZA@SjHPif7yEQ-w)VDXDHt!LB`vN@yiGwd2;05P2iCK(whE8v7gH3ca|Li z^E)B5(w}5{oim!t#e<)}GhRlJ(2UoM>#e&MmC1Nr&3>x21;hjM_uQxC{yOvY z>IVh{B8U|?r*eCuN+5W zP@l2#HX`=sWiq|Krrs3B8SAIM{&#wgj5njn>v8q(t*^@KUr#gNe6C!KPW?Pjrq|v? zFCJ>RI2%1}wlvPXgx>ffz<6No@$J{h`|B}HAJSaDZ9Tf;LYWU%f$KwIY3i^a#pWMw zeRzSiesJH@i{F6L`{C|Aq?e>UO}$=eb3bbM5tH5yJ16#Ayhtw|(p-PC!?kxv`|C+f zA2R3zi-%kG9{s6IZ&FjQbrtx)*8FaA&mie|$kL3n60CRFK=X*dKYmxHH?66+2>Uy1 z9;R~vf35fR;><<8tiSHH9rcV%uhmX39(=4Hx@HN7w2CwO&@KJF9&b6P_k_*ldL2!@ z5sU{mou>SY6=5njpNp(bR1jA`n1aejyKR=*_Y^)z|QPHi3sY3VkfNiR4h-XDza=zz{nMa+V1cmkn%_!f zyt3bAK`^S}UeUXb_;&t{j<4tqC zKZfvD81ni@H0%8>gtw*z>wm+12t4qYP4vA}_qk0N@}b^PuQjomcin;8?j-U?hM4&q zyBm1ffaU6ouRB-d4Gev7Q7>C({?SecE)jVf4WH8+Ltb{jUa#xpH;TLoLmv{z%O23s zv)8G)d2q_NT0>q7-{;QOy|#bz$|ps=HT#(5n|%YsZ?7!j(ebB!k+;~;-+;?EZ~k9> zMBdo`W_m4*vmRN({g3{ko5)*j$ZI1nBRszU1G(!sly6Z(9~!v(8NOM4&mp4TDns64 zj0YBA+q^n*lE~}zG4!{8bHC)~Zl66N^45H(-jRh^C617Y(905@mJS~ysGaqy$-g=Z2s)Tu8)+9 zJg%YMx{gq4`=7VdTOzM@fEjNM^0JACKi<6SIgz*2kk?0E z*5A2j_h*-jym3R`3aH&!l&t$c8e=!0*VZ)vWbAG6a@Y&x-Nqd2QF)LYjL z>N8eP_IP)Sbp8Pkm$#GkcPgmFJ9x0cu}Sf;n0t0zAlHz{wvq_VeJe=^{F*mdxP-1;br z2dj^n4@F%3-qN#sUOQx^A--k)$b7H{K)R+lTR0)FT*&z7cNuSn^Y_Pnug~lMRvGqp zBB+z(H{d`>!Y{w^}}!RCB8=a?QR=kb1G#_MprQ@7sd$UNS~X1o!M2Uh>qEjn*R z9&f!FZxZ|KtV6QTfF-+&yp4wSq>H>gvxM)|CEpi$OGcX2lP>zp>YZCwbkD6WvxdE#~s={TpuHOXRIE)N6C~!-R!{*z{-9Mm|&<>Wy*n`|*^M zt3=+Uq23bI%Nn3lF4{a0dFu^%qdPROTe6 zdg5X+9<0yJ+MyJdV>XaqGVrYTMBbR;`y`_11M9c2K7{Tj?eAc@=#nKox<{o)yj1_X zhW@6AkLiURP6Z z38(k<0(w17y%{dfx)zADh^F2o7Y}_4#6w0?Z<_OWr>Hz0f{A+TA8NSwU!1w6JRYJS z>BU0>r+2#odTq_;M5Z{s#~09>($s6659NZb8yq`ae&228P`&l3wWya}e>?Xq`TeGm zMSA{PU7+8`>WAl6^v_-A70Yo-Gaj6^z}qWJG;3<7S42Mgp3vlV@i}|!y2!#V_kBY= z;y$X$8{>Fy-)-n+A|HLXHF*=r%dXG2y)E+{@re73r&r!07-ww$_xH!-&&~HWd3}sC zcK!H({p9!g#6H%Gvto=hwr+6x=BEu1&!4_~ntEg0JZ+-BVJY#5dtXzp&6VSQA1kmP zTvKlySC037TfT1F{zT7T2lcZ4&PNvwDHYG3zB`(F)2NsAOO_rtWfk#=`-G-mm-Dx7 z=&IbhAd%P7)LYN_`|ha=bJsUT-au2YgYnBQ1oZi$3$r71OW&nej-#9pYvOVrlA62$ z=fmo|R^Etmkix)7$j|?D_XA+wK~A4;12F}g%A&a5Mw=lce1``CRl-r#M$e5>JnxU7H= zQB5DL_E7Jz@^)YWA5xk=_^6jPK#TWyS=yhpHT5R2UT4>b&KPjM> zPY|!Tk45#`p*T0+*R$)aONo#CZ7|eZiM*^|{roHPezp4tls8v+FKa6jBJ8VhzMAP< z_ph8+NS6C5i15MItaqwWFYB27`^Y7fT>`88tIUTa zmv3|0Z8(2xke7|;CuREP`l%$`KHO|xIm4CXSD!y3Z#{U@upC!%?M2a?s5IX)Z|Suc zDfEGr*n0a*HrxFZ!c)GL^)f4OX)fQ^{kP%jhdBDc<`Fm9>{f^L zihFO3UU`dPzOnwp&-R1Tc{%q;y?hG}gm_@(;O`INJ*^pMNv<4s{p%?<%n04= zKlOY_adFo6SnI%0((I23UEXUU&e(dyFP6Ufh>X|KtS9TS{$;#B_8iG<4&O9+qZkhz zvTU7x`({o!Y4%=+qxIq;%{}+_;sVdT^$R?IGE7V9QQ$A@KYaM(;mgA??6=5Vy?7|; z1H5d!`SgyLvSQb?QT>qaXI4KXk+*Y}ZN;OdxvD+KYuI0R$27NZ6?d*$jdCsGt=QE} zZv*OO_2jDWMziio(?-1YhP-9?UKqx^=Gka1(&qHm?q;Uf<9t}#uSZ8;1-KQMn^Uvej#<_X=Bn$Lf*@i`5wzq8M!i>39X zulbw?`vEA&tfRhc)V0#~Ev~88;hr-x{k=z7^&Yy}^Y!K*YDPAfi>IzWGgnWFdqPuh2IGOn@4|}mvxrCBM>O?DQ7>Sg1h%WrM>H}QyjcY$6!*r=D4H@o-#xp9`ro6^)9N4>1P zJv@8dIFXOOCpGoDTzPZOc|aNumge)LO3??_zV-jL&$Xma+$S`B@VIiZ;Sw`o9<7yqCOv)6^TFUe*w&hRwN|X$#u|O}z!`UOGv7ebdqOH$c6t<9mZM`dRW*+&dlh^wy!jOz%M_%Jo{BdNZ8fkB^e; z^)&ScoZho0%Jn8Sq>p)VPdL2&h@B(_{ntGEFhzF*3SOL9} zPI~?}V*Il9?ch#3``KOS=4$F~MTv(IIdgSG|Sud z-LY#z#b$r>Khx_+MbQUVE-op~ny*15LfvoZeCA%k{dNdIL`H`~rI2FZALpg?d?kvUvXi2hn+p`-rCA3|Fr| zxyO&vad%QvZ!yLhs~^tX_IzpmV123QLmgKxzA9-uQ#^nAp1Mu1eyGIyjMWd_f4Db1FY+^c|IUsG=*S1$G&+Uk7rQ`|>2^+qm${sSw=v%Vre2%VJMK%l-h`&!64cAe@w;anbqk%hxX;|G7rzebW#g;&U^ZrddoQ5?itOffp zPL`~8C-8yQ4^@M<+>@wid{Nhe>*!(JvEI-gv+E+AZ|e3c;~hfeE!Z>8Fy7>Dz{}?4 zx(++9X*}e%fR7+D-T?Ko_N_ywJ+5H*11V7p_F-CCvY;RM%gV)8^L9CesL0>SQuX*P zjN9d&v$x61wN0VGu6?(3llc(kc;7qq?xy~)d{Cc%G#PIUc{{Kqm-b)FcFgORZZh6R z?s+TsPwdb%EWQF{C#+a zTyIL#UmN{p?fl^d=9Qyc>G>PQd2rUwA9~!0((AlYO})kFFN@#u17=9)5mTCaZI1Wk z0=$u}^?WGdqo)4Z-r3JB-NHCo+A54QHZHv9Qb*cf z_rB5dA&&9D#<5#f>B$LSq^j$Ci1fL`%f?0Xv5Yp`*^$=k}WlR29C=3u#CKAgCp{5n~*i(bB^xccGm zZ{_tvI?&@S<;ro8i(D%hkVqC%!v|c^TZQ$yiHlO~vn~W~5>95a~w;L`R zx*z+gURP6Z!0BE6o?LH6Q*Rkpj+YH7P>#FFeF)3D609d#;Qsdc zy)QCuYC=a3)bJ6Gw~8> ze>0@CERLs1?%>NZk{G@4f3*y^{xBAxgeA@`(sR#*GFEKZ$}<* z=e;ssN0T?;t_PIWbzCFkwKRF-xQ>an5j`H+=ZnxfPkONMxibcjbMxTipS|R2Da9bY zcnG-rupfK-&FgjMN|*-O`DHNQSh={jtn_A?-sE^ay-9A~C^OetBkfR14k*)Giu3D? z?~HBcwCgYUmMa{-$N*4bn}*ysZr&)@sP-)!1Cbc<-}jo^C; z*m(1pugB%CU(gsiYWQ62DC%Y9V$QX(Q$odNfAlq<6B+B$Jf6=?s{2oRfm3oonZFgB zzgs^Llh%`|aq@BzcE|`fPg@+^{~NoGp|i>KX1Mzc>ldGzmv5zp@83*w_3y7Q43u7n zOlbO0j6SgT;@>XuR977nvRIi93CuU<4|{rXAbrE*baST3qL zy|+Gp@h+>uKmWUzC`j>LrZ+&ntX_Zn`-i2MAY+<( z8@V|9-rx6knLJ06w}hLoo;MJ9b{4Vn$iRF!z<8L~Am#crNy!m*4y@Xa;Ke*V= zcVh{!_%c^d=J9Cy;BY>yyKha?ymB6AfgfZ()S?fp;=O#vRu>Zm`4Bg(*IjO1#mred zOV_8S_R%ZHNvwBRe{Xu#;!R0!OZPG#GTi!-!~Ps1okvXGq^CE*t=m3s=@jWaVqBBA zl&jCa-F5A>mYzT1WIjZ?H?M!#`}9sn5?)dXZ`!BQ>sjJ)=(|jB3F_^V z1+E@7gjH*yTSQZD#D?~b%^S6QHhn-SX@MVQdR^4Z`Xl{UPL=wQx=}CAoC`rO^LOt< z*8M4ymeAxa!#HCF?Wtd`UnS#}{VwyNF#+>~y|W2_4tcMA((wKB<($8*M?U(IOjlIX z2Or~?4TKJS?)C49m$myX*NQ%huGJM!hV4-}~yiJBjyysyEJ+x7mxo zxSM#zedY$u_#F=M%jPGy`F>kzKT13feV6%L#p&&mcqEr^l#cdZ0li_|4z9am^Xr2j z*z-`vb0U$oU?0ZGk|i-7SigGfQ|@^}MitZ4>-7SEncj~c2EEeGU&ukFdb#p;50pPUw|mdm{M2 z##dhr|MgztB}2-Fn62;gx%f@))+Wh#k05ex@3)of4f8k3mE-dq;Ei&8^f9B!8=zj+ zPp!Z7(}3|D$^H|z=w^C)W2l$${`EBQ9wl(HuL(`w4C-a=Mcq-KEMXjD*nchD!n|ck z6WsIV_B(a(1yVX+?n79bB*qz=cUXJgc|Kt%&N3~CGfKnnedOIP`{P5iS3E#}Bi@qz z)$vPd_*D+`i{H*Kj+{t>$=}MMX8y)dFKZ+Ap0K-g9x#^!x5o!;=P zs5g12pK(roc$q&>p$c0SJeFyM#Ac`_d|ntCg79W=|gKT0m5Fvz2~HS;Zl^#kkw zR*m>>d>*0V2U$B*!(BffRKSPmc6#|%iT<*FYQ?pEj*-brY4W-l53IjFaKs(b_>J_? z)XS|uTiJQUBAH&NQ7_Isj(5^EeTT|;y|4B3)*vsdf9K!xp)?+1y1W>_Z2ouagNuHV z>9sU@GpLu%M^#<4^GF$Q`YSyjiYj1Uj`4mzS&(%A}{5bzY8Lxk>Ui?P6dVTWKN9`fwjce*HMSod6d13**5lw%qxO)Bm z0(#S$dZV1)FJF8@I{y%Ssh4jR9PhUUcvG6Z366KkbFtSfe)TBn zP$;3P*W=2?6R0)44NudDB**()0p6G#}oIm{#o)uXy4et;+fW+*zhoPOAOKT z!HG9t&uY{0fF7Zw*&p3~^?0paA>UY>-9NAA_ry#7S`oAHTbi4fn^rNW>Aq&-=J#>U zdASTXul&rxuYAjM@t<8y-Ue>|xAm77jpe!c&k;>tD-Qm$>sgU~=by!M@t-}-^<36= z&2cvQ)I0m}T>R(YdcAmXIK7YgKS=W}rO6xP)(u`U{?>hYjr`|?Ca;TnS^U0o&M!XC z#ea@!@)mRc4tRgX9G;8+Y-{qyIe+)Oqx()z*LTaP!vtpnNO zpI08^&z=A5YwAs+59~VG7gu~P9T$3LJEkAjY=i)y*n!FAdzs1vkn!$6e_gRxS!^Q88okmFYrmxkDvoh4n#)W?` zc}sfzEvd}Rw=gxhJYx4SBJjAxTL|RX}n!GVC-)bfw_B61O=a6Sl<~chL7s3Dk%iPy>nAz-S z-}^bwdCr-0&dmP$a7~^VI><0}6T^ab2*!U8p1l8ONGk82xqW%O9`bk6BfE6X6GI0! zleZH2JL|zKNZtff*F*iN9nRaA%x50+ccTm^h+lXR(~m>fy99mpynmWZ-n8%m%I*7I z4{XR2LkGDLymCul75wgR2VbM(;7`ds=`wXq;R9S>On78pIu z{e^e)#Lz*KshbtLFfl*j{QaIpQhEQ3Gj&rVoBjR$?7h0@iQxmLZtR+7-A0XW_DWtn z)Fa)c8eNB}TWL4*F4yR$n7YOzL4AXDuO~k`Gmb6A|Bmg$^PzZDzzYq zEhcY9ka4m>!N&C z*<}{lPt7oO>xC}#OCCPOJ34PxR z74=U#CA|57Ml_y!=<(hZO4sh-km!)*GpYe1{kZz(Mt?Mv#EujnZ z7el(yKBSns&-SBIYm0UefH!0?EV0>raOKD!?X`Zf!cz@FHrmx_|Lyhnk zczbJjlT6;6;DvFG?$bst^LL?}%k(#c;$fjC9$Y4`adq=J_@1BB@sMWnR-kwouJPBL z!i$F(;_ac~O)`0FQ9N9u;kB8(rr?EmIA0SFnM-&+xF{a>SWeeBkI5TH{&x6*jtBcP zUVTfUct~AO^IFgFe6SF2iH0}MjE6cD50`6r9VTx=@WS}|*Y^%0*D)DPUgO-L-v|Au z%dX$*?$D&;pUi&3^S2o3j?m~jOx+~%;fZ}JNFP#{@Zu~h$_>^9y|~lse^5T8pXK=w zM?QSI(Gk^@Zi?wcC0hTm{j`~9P`WuLZyDnKTElBGdFzG0Fz>&UhBxsX&)+2CP1!T< zrF@7nc`Jo3To3Jb&*HR7GE;We1NIpHsir(U|_=49yF%zB(bydP_L zvsdtZNQrh6)@?6(;l%&?yU;Dk^tVp%Zttrdx!-dz%pSTqOx~jNf_@1MDBI43Q0+pu z1k+zn@Ph7!yLKh7=Tl5xPdrB!0-;C6+vIh3_6=s<85HClSa`NYb(fn%P4G{;%yMfK zKEOKjJ!TKTkJ7c6KA5Q7p5OQ)vfNB&-ihrT!~^i|so{+=d2LZIz~94KbtU~ZYkBpp z1o3v&@Oqc?bW4T5&|iOg@Fx#Z<(B)1r)weJ9va>ZlQ$uFp&zyTJp)docwHuMx!{F) zk^X3i;df@D=1d znaSj>7QE1I8tX5fNAV_^{yKRa2Y z%P*jGvmf%}%xE9P8RUoOU#I6c<4oR6Ea*Q#zxvw~m$j#O&5e2f77Jd;zq98*yqwZC zn7khHx4p(+hv{z|@qVD;&0fkYw?=f`vQXo%&Gfen@qVP?b(p+{c%C`rhxaSGTuqf* z>N}%#`k^c9Xev~{!dZ7DQ3M$3ts3~pS@k z>!sv`kNHIkawPWZZd>h=$0MEt8c|9?>wlTiQ;$DN9g=uGX1r$Y@W|r{>{{5L(PSgGkN3HY2-tx#)lNw2b6b?8bs$Ek6CUt zh(*-e$r*3qW;MYlea{~FU$|U_iga|n_=1x)8C?l zf;fZgx87e}*(*#F&e=@f9LnqOX!3fR>92`+57h7`n7nb6*XuQT-PnQ`zom$`kA~M| z@){$X^KVw;uglC23B-G-hBtQ+ufA0XUFcWGI+koo#hJ_0O^e@og?Z`Gmv6a((oIk2 zwL|sdxwo(mdVBZ}v1P{a;=w@U)rsuWqX}6fyA{u0Hyy+StXoMxzF_4ztweWM@po2I zdj$Cb^4a+hOr0-zrEZmYU7lC>)H)mIf`AvE%bI?9&QkS#@;F=1D>n=MzQ{d8-dQMh zqV6ePTf{Fk6ic?BLyn)NnekhV>P4Hk$ZBCEnYtOIyR}9)&eW|#y4z}W4W_P#blYll zvlsH}g@Jzm;*_3SllQlHH}P~E1uyhVvNvx7%lSh$hshi36Vx||v%9XcmxYS@CsRz_ z5}^zEcgjH<^`vyI{dxJ!Lb}iBbeX*6NcTC7Zj7m$Lb@+%biE6B@lYjnAs#Yk&4*p+ zmSO5TLKpgH<_#5xgo^qnZKiH5;$8pZkFTV36HMJK(%nF#Ych2kknTnr-Q4-Sax<); zzCnR)s?l|sx=A!n`%Sj}Zj`@irmih?+xddq4L<2$N;k>Wb%ZWFS7OlvLnlzWai*?| zbbr<88cbae=`PmjX3t~B!$U#81bp~Iqw6qrO`!`Nv*fKikD~ldF?B7WyQ43-(=d7o zw8hj-3SC&>*z4~9?n&{+n7TI7-Cv{Yoy#jX2kG|K=w_I@F4DC$x;9hS6S@#*`;B|x zV#?nHQ`eZ#d>!!ite-ETbWNtNDRg)61;3nQHd4B|b9m)uA>FSux-L^UiF7@UZknlU zBi(N_x=E(4Cv>46f4A+w$@!r;Q@2>OZ*cwg)()4vMU|Vu)Qt;W=$8!KZU8y{o2}r* zLmARNOQY*Bb(2WjS;sauJ3D>S+mQ#UPip}#)$qq$_c#hAJ^LKoH}b{pUOPbwa~ zp}cZ)kq^JTT1T$S%rJGc==m^D?6L`jTj*vpb?XH$tSjF2g~pFVMg5Zrt}c3x_dS~D z6~~#+ZFa=?`UXDJSDNw3By)T+CdLtA9Nd^jkAtU~hRVF4XYaOkN9>+xnVvGnl+(sN7mN(DMu)lQ)5QH_`BB z-{<9>1mZ2y@LDlmJS0&(bbqmio{wenW>7pF_)u$d+|yz5mZEvy!IzXwg6bT$rI@_s z!e5v`pV%XFVVGvqxvhBqCJ^s=8eWUZn?$^mG`vYBZw2C=a@k>|zcD6nt%wKkH@DXe z(qEU!YYSdz-_C#g`@U4U<>v9qtwQ(<3#0bGYZy7-Vz%MwRwLevHN0MymmgAy*V6FX zOy1aK!F3k2o7U9epscMpy5q2=Z|f~8`tnUOy0EMh4rc5cBR*+CYb)#iFkkshJB`M){$<* z^EV@SA%3?qwj<-$Wb#%Ce<6Oi?C=X2zey%<7V&Pc;mytB<%cxl-B!cvGI=woz3AC- z+CIJ=p_|L(&7$@qHTM{@zM0$d;-L=lF4OR)nY`7)UufSBm`C&4OkNMQ7f&AdIb6<$ zZgFOQa0D;3Z&&Vo7J1$6F?kyi@A6A&UW3V7FX91sXB&>kPV{(_%EMg5cRc%E+2$w558I_Pl^{`ESgYYyS*rj2HQx7PG`sL!L; zYsAofb?09^4kYQQyGdA2ji6FypsOj7LF&{Pym6E#+hE z8eX|sC_gOObvBuQv+wbI$cb?|7_a`T(;?$2UXwX4m%OIAzrM4k|KKoriw+Lz1@KPQ z@aBf_d@zx&tI>6ty0-8E^3MM2zfR5{TTCBH5%237-ZYcf84~yl0ai4Vj$e=Y`?2LH zeh1&T0~BBA7GwI5Kt4><_>g4!kV3ri`)S_nxx9K@A$Z{e;LFdC9T{qZe=^SGtrEOY zZf{ImLbjXUOkTan9u?GMxX!xa%VY1Mcnv16gLt?7p5}F!{(55m0_xlLH(q=y#hV?> z^Pv{;?%V!%(%%fz-yGuoY%I;|FnP0r7b@E88}>Pc^1){E8W%VBqdwR0rkK2GktgA~ zK8fXjeMs?|d+_R8gYW_B+s9K!enjaem_C@uhdCM_VoV>L5zYSoHuv;Wir1LKi(g0h z3+sRH7`N}Ml&;P6*B1E<`cX@^TuMH-!#kVDYaAQ2Lr`vCXv)oGmRkn-aIeM(kLiOs zF(@}!Ptfh`C$pr#Odl+y`^z9&H^J0(g%9w&;tP(w;arN>+LKq`l8ASahSy~B7K?a* z`T6~arJta9-5I<%vk~ua8s6L>o^BTTTbiK#b(sFfg%7ZPa{I$(E}(o!Gkx#`FSPTW zChj(e(lxs9;vp{bB#e8WaPZI)N;k>$w;JW0!$#gsuBVMNb#usvE2hytB$+;B5bs7B zUW3V-MDcLreRMp;nekAEc#AZ=*|V7SLR??KI9Kl0X(v+gkYQe57?A1Xz;LH}&WeV#~CKBSoa-$ul{g@!l9!3fc=s@`pWAd89U+ABG{nQQQ z{DsZ*w+8vpS>uDj%n#+l2k`fau;(bcPYcqLW<%7xOtrz}+ZvB|$ za2rPG7Gu`qTEPqT_|tyR!E{6DmP_)=Ei10y;QrVT?&$MfsHlH3UCh%>4hq^gxMOiQ zvn@ca;V(C(v+LStQQT4_W=!Wn#r5IrFq=*@~(~DL(TP1 z#ynoRB}9FLa_gcgH={eRz8Qx$UmrUfACg=j1TS0%Jb5C$t|G-Ow_?Qmu!c9z0j)tRq(yyarvAM(S@;WHOeKBRWw>E@8XbGw~EUdP%@ABqkO;up$o zo<=vp)HRXre2uQj)GbB2-)VGnXYl+@2wfPby|&Mwo>aNHOx+5h3+>yC(s4&px@o4a zEp*{JwkGo)Ilq}?>Q*D&NgCZaQ#XTjpU~(UOx-%9J6WTfJ)IX1p3sGQao4`ZX7hFT>CYZVo;@#xcQ?8 z_l`IEKSt@gV|eA3MZBA9c-{Uy-3Fw)l}0zle4dSQM02~@`-LSpQa+@ayv0Hn{C#?} zi^zCLGIirZ7vguHqYt}{;*B$P%aHEA8eM~_n?$;$8r|%vym+WYy1g~J4pTQRbfLYt zdeYZqJD+0e)(BmQhu*X3{9rM4UF1XcgwbSvh%t5RQGPh%!n` zubiiwL%RRg=w_I@MMnnt0qWa>8eN;IYYJV6vmsS~+(r4DVCt3%UFbi|Sn)f#{>)_R zCJ?W=^E3BTytz|&aA^`i99J*z3+?8&@%DBU5bZ!iwi`PeOHQo7z~o^B)J?WN&$ zn7pyF=KOGgMmNROEkU|{G`bd3w?T}1!i3WUNB&8!BaQW7j?0O0Wf-TO*vW*j2;FSv z_?d&otJnLO9UUp}qKE zr$5R2d~$E|>RVR$0P8gdZu_F;??SgElebjxLVz9hcI`%?qW(#j$!k8?yngbOg_m}t zbaU79eDH)1u&!dGyHYty*Jb)(wF-E_fE5!?Nm9DhdFno@1oHP-jlXH8zd7W?<{BT& zy?F6kC!YTc^0YPNHJG~f z!Uu@6<1Vnseu=d=uiT7LLHt5{@xiwxWP6dVW7ap6C*R)~q9S~An7lE;3-b)O*F1Yf zxT^oV>s(&+yy7QjXUTd0>~%aJa%g_@q4XA1nEQhWymG7V-rV0gvfX#&^(N&H1!5w9 z@6q_1V*1-4;sNGy9@F@cWcrXn^{w~ZuRfx_uf^oeq58JT^7 z876N+Ja-0o>u1uuo`yH9&N;gT`4@CAJA9j@zcV1WMcu+Q;k}Kh+(rzceXyB67#9V+ zaKFf+E_>1Q(%16h!9wxyN9+5^c(C@P<2TF;t9!r;{k{_~p7Aqy(+U0)aSPLgwIUD$Vm zb1suNiR#;mfx8|^>S}nyVj?Tz46ZkCIPN14bdQ7oD4V$v&);(7L*Hq%4{4?kDdfXD zXVE^Gy?Ak!LV5C)=iU#qpve(;6we0_=@!3UO{Ox(=IK_U=a&q$HfhR}N|7}kCLiPZ z&>()t9O}h~?YooXlgX!ey78gSd1uF6`b-OBg>wn!{X-RKz0nWDpZS&2P4CF_H!ao` z!}aF9nfoVFy1B1-x=G;!3S#ed`Jmh@WFXy896_cVd_>P z-G?-~HdD7=lpFZ_^^rwCQ9k6j&sRpg6E(aECT}g$eN3ZkGIg^;7Y0h)@`{^DA5P@O zgD37kZtDx~z5kZSP`Vzo9cmD~P;P(jS!PkXE|b?dD#*W}YkYeB!<25CsauS6&;0YC z+bG>6Q#USjVP0?CCU-BUbmL6jBwF|S{g6NRr*y3^dGSytc;Wu;Yv;cDCZ%gIc`b1t zHjL1w4=$cc>Jl%6_4(jW6G9jIeXksH13539IE2^ECxtFtzYSa3f%Mnr>I#3M-JI0< zz!&^o=$1W!S8kO;7v@a|ZvHIU9y?6kG>YFp+PzHHw-i%1h3?Cr^79I4jzTw!saqp> zLGWWuJ0D}}dg3`mFkanG^E@%{cwV`sMh5u|>f7zlPJ1oX1plP<2k&#)|rAo+p;!`hfD;k0oy(Kyjs+?R-M`0OP;M{J7&^lrD9i@*$0U zIQo=Mj|b0^+Ff= zJFhP}{R;}#Wa{RGF7zKB7=PlEly2@gUOg`QS5S|EceBYfuglamk?s!1G<-_&rkT2> zLKpfaUu`qXrgW1`-AqN`16;T4GUAvMDc!^uJbx2{7s_qK)FtFNL7d53fpm|$bK)Y3 z*I??}D4(6v=~ptJnM@yS#9MRssU&YU!SlCT=t8@B{k&rvC?6cAu2B=TLy&OH1NS4J zgW>+p%V!zn!-}?#koRwu?&rLC@I+pR>x;_cyeX7! zoT+Pzad7CD46?~$Gg5td*Kbu~+#d2-=O?efmgHrQ+ouula}#OaER)wkyk&D}UW3W& zAl{GbY2NrTJbyDn7p?=Ie)e7RK8fsGyf|~kxIOgOr{348HC1kDCU33q7vlH4BNFdW zx(<`K2+bExTEBigrJG~&W)bf&4R4CcTP@ZpK>uvmd98n?crB)GO!xrn#QKzueT35W z`tjndLHN+d7wo*lgnKC67?al(@eA_|k39d~@szH0ERQ#fbf3`ZI!xW-7p{-HpZLuTN;l2ab&>8; zjc$^uYhD}lt6}`Nc9;8}qjxCh|Q@S~( zZcg|M{p!uz{7A_f+1GjTUq+OswB&dVZ8i+G{u`@q93a571t0-OGKSQnr}9anxQM_xq7|Q@Zh!dA#N5dT66R z=NX&MH`I(17))KGZ;&4#9u7W{F1PG4ym%-Ux{xPlXvQBL zrfwYRJ~xjZ*GMsS%Y-h(*?3JnSWMj{^7om~`jhKyVocpiJuiVl|cl`@A zd55X%oZs9IeW)4Vv6;HHNVl<(<~5nRb>jkFh=5`-CKU4bq%JjaY5h%@D7@P3pwxP{EO#9G14uXN9$Tl-Bj;p-h29uCwXmV zyBSBk2lb_OGe_}!C_}niwg2{0DjpI{-6Yc8O{1GDEhxx;z9rqG3c$xfN6iz(hTQ@0f9_SERcnYsz2d**~1a-Jc3 z7|(|aqF+n>WY29=Flz1)U8Ik*IiEQW)9`~kP*5tFY?^DQRF;tf~i|4 zbfMk6;ypUA=MLfVdO{b*qvpT4!OfxO`X|#&-A3fYN#=E=4{@e$?4qC^Lm=FE(+dw# zyxD_!K9nHc2Q|7Wrmlr_$7yt9TwU?Ia_0mdRUz;^DWVp=6w;PUG=bpnNtgx%Y(>Z=A_nC+6oNpY`ebvPtP0 zr}KDI!UxdZq#Lc9X6jZ8AE5v6?Y7T-Lh)v&^6EuS!~Rnc_7vJl-^lhy671khFQabt0d^JmitL+})nyHJR~HEqLMn?$LeQll}D^lh;G- z=6R)$A4c)!{>zJBr)^Mf(7yHBpvUi&ZekSA-%=3|;KRrz|GAIS_1@s=mZLcPZ1_n_ zC|z?JPd9f+K;!cAGYG8KrA}$}6{WbbUN{GJQRtv3R;E zq-scWQ~$Jg(S9ZZhf8%*6|qd^l)jMe2BvZE@`OsksU2aY(k2i;Ox76rbOx>bk zLA`)DYp2om_T%xILKo&mKCC~DEH|5}TZ(i)|A5vtnYtCohi;SUa!c>a^T8InkbgJ) zv%_eA7rMony4A>sJ&m)-3&ZR_JYEmAL-tF(nugKBfU_mM{#i!w!o0`PKX;~db9?c4%}0Xk3%HSN<4Y=z zpmftrT}$Y~{e`XKQ^@<#<4j#!=Do-)a-{ph29rLfbWNsi3hDmVcOtpo(~a|daL;YN zE}VGa)M*s2{V`9s?3zFq@^5U*s6pdrX1@o?@w3>qyu2PeG4L10cix+_dsm7#$>g=f_!*3AY&PuaMU-xe$y7Ju>4Wktp^H1S|FdFxO-e5Q$qB$GFT=3{%# zrQ;#NfgYWb$TFJlvq+O^o5igNfqdR82hOUgFiaIPzil zMRd8jOx*-3w<~V)O(wQj70(9?@pjkndgt(TJydR2Yj{&k-h|+VdH-8S&4cDXbW1b+ zEf@a60L=J_udWCc^-pG*yh*_e^WDeHzmc5pPBM9uf*0ncPn-D-Io}c=%PY4O;yppb z8)x!1h4m_WXDG z(V-^zCv$UnKBSQD5{<6Q)U86}J99MSTuJ8mj)QbJJAfYNGMKuxNY~zw9_Mnp^ZbpY z-_L6O?(^jMLuNakZWi(W_ZWKo%wqC32wfOopT2(|dYr2pkJq>)h+ohhFn$23Ycq9= zk#2d_nWV1C)QuzE;`_@;UAHUGhccwQ)m=xDx@o4agU0RK7N;Je@ZXzI@yib-b+cV~oRq#g)Yp$ zjo$8Jay~1~)XgB>jkfGZ>L!`Gbx610_B3ytsp}!#tcKTM>NXNX(V*Y19eUSHCg7Z1jx&Ff2gymw+J%3qhO zdwFwyc=Gpuy-Mk(nYzVD_czV@s3cQ2E_9(@te>UVF~ym>WkMJ7&Ig)xOa@aoiFB_z zjsE?B>~6exXcXf{Fb;FSW*o+2j>BY64B`Rq4|rzgWb*mdDdsqgA%15N)@zKqci&C@ zUFc@r#2e>oK)f$%cr7Mx7Tsq#M#Jkcd5x0-e_@gS$*0GKhDohSy~B7Ng(aoT=e8 zZ|0SoiFCjEjrPH2>K3E;tvdNJH?$J_C*2AjZzUR6p0-W*8z^0m$s0$!H)?p(Ox_Yy z-|95H)-60A$^Uihze6U440B@a! z*BH;!twix~izXi8On*yJJj~F@lL`)64uuPfF^!Mcj28eW^p zn-u=SI)x$)Z~S3ix#dv&-tgdGuT%LU!Q`z#@%!c(*H=-xX(n$ax{ke7a~)*({1T#ni14x-jn9>AKHg7rI$YT^H#-do8USW9rr;-HA6YCwaY2ym5jY((S3y z%`kO~u4o=Nx@5gAb_zAuKWQ^{O`!|ph!>51xth{VFm+22@16a+le{KVH-U6d*4*!u z>&Pp&3gpA@OX>R-U8b%n#u0b$jXl46!~K-MX{N4?d}yZ|?_=s#BOh9CGncFvai(qt z>29UbHJG|}NVmFsj2u_a?#hb?59vPJlh$>Zx{XNpRgG?nscVTigZma^CtvUy6=xPx zH;Ht+oJ#A)n7XmbAfG|rS<;c75AZth%B=+HrXG2moDaw_b#3HB!@C>3MfqzpbseD# z_pxqv@-gEn-2_wD6}pgjUYY&uVoKL!>RQO(3pS+h6VC0zE4Ol_d%foVW0$Gxp>mtw zg}$FR&D2c^UYNhwShsGFsau6~_txAW8)xb|NVi6Ff2_gOtwp-?HTTD6OJ}s2|7g}v#+bTsp$qeRwYv3_?Rn)^hIA8} z^^+NUh_MNyK}UW?iPuOfz-sk?x_Ib(!{Z-hH<@q`RJGU1ox* zn?cXR8?yhc4^#CbHj`H`5~l|F4CX~%y#9K69n)jHcxW(!ID_$>^vz>_fjwuVZt<%V zKEV9NK?^r+LuuyTqkRa|ZWO#Q-gom|bt_;Zy*niyaz0EG{>-+UujjATTpxQs^5V>B z)$H#b2Txre#^*R2#akqF!3W1~SOIat*(lx2rU5UM+ik5|l|w(6vr)R0Xxy{Qq|Qso z0SMy5C|$c(z+2?MZ_f#H58st|KXsbYwVn!e;rgw|@^jCj-XHs(7Z2uPfiC>6XWNsH zg65vJQM~bMo8$NQUwV@En&0twT@ep(f9!EvFC*^*q`m~jTPx;8V7trWbFA1?lxo)^h5 zc{9l0=U;n(oEJ$md8-v}OH&$Z;e0F`jM(;{8O!o1M$kO^f)2{JX7&*R0{`=0v$cKAUy;H{|`tDQ3A< zqkJ}V=v1;DvYEWb;O6#X%)zhHamMu5L;amQcQ5`qJje{gWAerj@68%si|Ma}^4Y&N zyw)UMJlH6H%eQ%VCgnql>2D2+-@9fXe>I4K z@vxtU*J1Le5bxt3(Ehqi-g?Aa`!emX@f6R83~Jx*8u-|3DzB%RyhT?A{dE|p{cBVD z{%(_5k4>c8RdauLZW(W!pj7C>fW|1z{oO88H-U89YVPk&Gj%JFZX3=0-ASgd`B;!2 zVBG8j&A5G>scWNh8=<+s+hFQeBi*ev_jl+1;EgM1knU!h`@6G$@#3rw=`PX4ufx>! zgzh$exm~WgzdOa$ZA7|_ThRA+TTI>9h#)@zZy(M5-7%(a3DSK{bAPw@C$HQrq(7EbegG~MY>08?w3w7b(6y1c0TV`Wj&AcccELHsoQ{f)5pw8 zgo?sRrmk^SbN^w?Q{744>>s>%C`P(RjHoAh9j0y^=??C=4au8g>Q;?x_Tk2DI+N?n zV@%yzq+4;*rlfABk>{^1;tb}UUOx2Z1E_egnYs?roicGDsheQxdPsM~Jx|S`cyqt= zd@yU8`%&B9e|KL>H_g;dBHbyu54%yiai*>oTvqZ8T2sM%z!xahN!hw?XiNzwfu&iyVhB|HB(6@Q}Z|y!8Hu zln(}zHz(#9z~2Ftr`}8H+DzU?#M@cJn`Qnkt#^444_o@6W7fN(C&imx#Eah?inGBQ zA3UZHX*@nTl^&mTm_9TLUYMV6HHRLbv?lZ7%t7^HSIzGUrc1_Dtr8+Xji1+r3O3A!#GkGl( z58qyLAQ`_I<~VH@#Y3l_Z;|oqF?q`o??Mf)!~OkvRNwa0@Frj9m79n1@1^h2`8USo zEfKs;>!WgX{&ktWITXLouRoWJU;7N65A`VjzWL(;Wc-?M@N}KB=JvQ&!<##uryEE0 zZJLJHX7Z*`{92`*KWUi(f-^}bZ%kabKs$7VMmKvJ&xc0TKf7M@`{>r2JY8c*bGf~u zDL0GBYoT&`M^kPNlQ$-KVc!4I*w^H`AZsqqhcZ-;AMW`Qxh}|fi>GTMe}B1h;9gXm zCHnJpJyefZob~cTN;k>mjU!(7)OSc;_f#Hl0>#672Y395;&qw47UG?8>!0L!RGi6M zHnh1v`E$vz))cSz7te<>aor8;VP-DaXFp1pI#2aW%#qFYxc__i_MzUNoXxu)a%%!z zn1>wj{^+eJ-3;@0Cq1Nla*qY1uFcdnCN=YJyW$p7H^J03k#6m*HqTQ&m`q&@=}zu` z38|a=jW>RlM7kF)+mY0DnYy;ng@Lo#n=YP4`H*JnI!L$kWk0=1=_Z-FF4DcPY*&-g zjWcyUr2EU$?a1fA8BAT{@gRP8^g+9yaN&^@Z}wMSJeWxL_Ja~hO4niPT1a=Y`y%-} zuNG4`DRg0;?A25Hoj~!%n7TIN{qwvN#!|W-^LI!cq&wi0eI`)48K$m_bVq#pz)h5{ z&D8afza2h0^fpR2!PK?T@0;HJ(ED>KU6=X$rb(d-?a;7`&wGi|O*3_Ep$qwJ+_mSB z^*G7YO``dLFTPwpi{gzlbsglx=%Y4&h0={N=Z9RRd)DUX-$UsdOx{W~e=$Y#9Pez7 zm(M)J+d=ajZ-=RyM!Z*Qo->kS>ee7#>#CnSQ~p{^UE|5-{?3hiU4AB|8)NF4LKo`A zgvXDqpme>TdF5sy-3PC``Z!8A!_-Y8-B+gVFp$!C@27W$HSp+-et0rTddiT^H#-H+A9UP+0$D zlBw$<-Px^gno8-$nYu;dzHwN`wBy#VenIIPOkES{e&!7!b+Ze3@lc9%{}?-g)ODD; z2D)E*%-peLen>HO&B@LE>Mh=G{XOMxb`H;nDm0GxselmXT zX*^vA@%Gx1=8Z9VlVW@a=AEvXN%MM4-de=FX^iHzPvQAcfq0L4kLI1LU{4T$%iUyQ>j-4ydWD<%8|-l4CKA$jA>=lU4s z&Es;wK@jM^WD1OhnpXSXndDDn@m`C$^lX&Cn)rfcU12k{^U7im$i1*MrG_TF%HMVSy zhfxpGylEz{D|jJ4Jl5fa0aW~&OkM}&hs%Ec6y!s<9Fw;m`P=3<+F!SZ7Y{Wk9uiY% ze-kr!@sLCQ_OGU&`;}z!7KwO(cD`gV{d}$rleb7brwkHg$yFQE`HabH3SGE>T{i0@ zdj5^6n-X~)o+Ea2MXtTS3*A!8=e3oh=e6B4iY~V-^LcHxs9p^1N0(cc$s0rQFy=T~ zH?DbJTbOZ{Xy2d$-!z)`!S2Va7cTPQ)Z=O1G?TXim0QXjP3E%{v)oK{eSH1PFYF)Y z6`Zq}>s}M+dfu5fW)`W-yzZ_*x&!Wrle#gcZneMZDuQ-I#HJQ3);yxRL$mCk=0$saq~|A{ zaRbS9Ocql&D|BI8`NLC&Uqt!qF`wtyfPAnu&pFL7bq)0V$;F!IPufh~Vx+stBKo=e1Zin_6+k9fS~v54ed7`2eG**VN}&t+cf0)>$o$LIEkph;E{RibC(lzp*n$`4hc5cp zof%3X{T(mPa-!T|JoV=H-+GzSrOs2l#-QeSXn$?hWz_qr^OSB(=x*%4vBU1E*QobX z=P6xN=zi$mTbwKPV zUYx~IJj8c7id+ZH<*gRHkk4-Z*SF-nld&%^Pa5L62awNh+plIa#pN<}V?q}$+|H@J zd;z6Pou|sp6uJ<O9387rdMMZ``}Yxt4lAb)M3- zgf8?Su6(Hff2j9U=PBKU(1q*56R-SiYwG>pZ@f4w7xft0q2up+j%tXZ@GroX7ZXSe$A~n=|GiRf~lJnQdR|3Z_yGCru5VBJFBK2w<~$!VLKpJRF}HqB<{g*mZw1ObM?dpCnRjd^uZ!Yg zl;(LsX(q3W;$i#`*&iu?Jtl7!@m{ClO)`1w5bv!TUTX_pJfv=JZjT3k+i4%lhd7fr zh4R^hk36-M(ls33cu57yXG1l-29r07^4TLA-XxPZIU=}jf&N3{)YD5TAFOM5{a+ic zCwT6zTIi;QZ`|<`qF%h}b(p-ye}Zy@`=~zG z_>i2#<28})42^Dz$!iJSwm$D~k8SgNcrf_uOPIQiVq6Z!!Jlgw@C>CJW9r7PZysMi z@!MT?r*yq}yf`Zny3ih9^Wvw^Qo0$YZW8&M?ft=ll&;OxwU7@--8j#obQ4V7a-j?J z=+8E8-;UBXnYuQL-;!;uUnt$&Twb|3LKi@f|Ltr@m!X@>)O8VWyWzjz87k_ZOfz*; z*EHw#z1M&JU`jXj9xp$5$cG!Uo0m|!NhYr`xjCOrobpQ#N;l5bE%`8*@7~21+~SN6 z=1pk?tp5Y26f4*G9T0Ury^E71;S<>GGQ`bVe7k)?kU@~=+ zNcX_EY2Dn{ymGUJF4VW%=B$4y6=x>%I@UqFTUCxOr*w1c^RACwq`R;Ot?M#%V;48) z^)JU>d@99j4QA$bS8i2E z_m~}NU5lw}3LoHykE;(aBd=S$);wNI=)wa=p2=)MwwpFn*O(ZT8}!#l?|B+IUY$9c z7iZ<01iCOT_e-a4uD@e#)OfYoFVKbgi_6U?2C_u`Kc;jY)K5Kfdg2L6*JS#e5WnLH z*DV*N(xh%~2G8GG!3!Od+g^-!q+hMvPbaM=z500o8(9SmwdXilK;11%In=5o7PtG%UzCRS!KbdCg zmK_`T0REmcbmjs|H_41M>ySVf;^Fb*=AA?7dINbr*y#S2_=KAWP`VcL{+8k`gZu#V zrpqtfrVXW=n8h3Csz$u^U)@FW#+bZWbpOz!PwYhUW|+Jg!5i}psQZJy|IK@pS8nx! z7xMaswYNS@`5Vjf{H;U0^-F2q43oDA-G98@i!^VF$!lB{#2E|_j63QKay-=@$@9TO zaW?Dh9}<+mHq!?W#o7HmE?$q)%`$yR{yXqt2VZc`MH@X&=_Z)GjVK-le0uv!ly024 zj?@$PS;D;2CbyW7)PJ2g z#G23JjU#{48h?{a-ds@-58&?u8h^7)UI+PG^~<)f3@vnvGkFup-)SEXza>=EKbc;@ z^S4CQH)!8J|7_@VO4nfWHVS{CeQSHq&*LcF#J4meV`xjR`;>86;v8RWx$TaSK?(oKBN^S4~Y84Q3wa@A7udfsC48XE_B2l~~Q95srZ zpO5{(<2CMU?mz7M02d;h4}Z%j9)YKHEXlfAA*q>T!|q7cO9n zb@$Eu$n&>K_yE_1RiFG+9%_PrGQ;Hcgbz*Yg7z&tfznMZcH ze1HqAk(K*E^BKA&n7XlZg7}35`PVjAzZxp)pUg7X71yGAd}8mhWc->;-l7|VekzO` zT|4(nGM^>>;FVjk7>9vzuF-d1*^~0YVvfTk#kePo!`%GFWxXj~Zv~V0%3xjs?qj`c z|M#X)x;9hS7QB$i-t0A5?yH^tPgNB%xiI*-i1F{Z97=3C(U_^T1^hElxL zd1}5Thx|SD@p})V-k)K%Lzbu)Fiz00=z^Om-CQHD-2BP@rghWM&VSziEVA6vOx+mL zo&DzA2Pj^HsT)VS9~KWJd7a;RK3GWi-T%%Zc`c@H66sc5LHp}1;qj)B?ltY^k-Roj zH;r`9?m_dKOkD@*p7t>v5AI@~4^>+R@e9`%3&;LQu8XJQkE+KO8c%)lY3EGp{nU9% zH!XOfqyBiDeqJ$GH@;Qi1B{oP*!I|isP|LnDc+=*?*@Or>$`Nd`CEZ>ub%>=?7WTQ zjqelq0MC)_J-+W9JXLxgJtN{5bX(2ZkbJHh^?4L;wTK5Ox1U>;enq{XI#21w&uz}@ z_rCXa1@->yZ@l{E3Ll`ocVH%bjuXJIhD`;sr`Ki^k6`J}>e?Ry>N;mckkJmUY7>9uX+j!EByHmPpCU3Fu7vkZQ z%O-qI>1LU{#fW!6|JV9bx=AK)smSZV+qH8US&!3;c>cx(FVwe95BlppiZ{;WHBtN? z_1AS|yP5cv$D2ascIm(asz_e$`lwj*c;6lGw(mpf8cZJy(Qd*-VTU)qe1+1DG26{z z!3*QG?Rr*|<0UcXyi;80LVa_39Y*?)eTbLON>I67xZ%6MP(GwJ{q?XMoDl6X^dB~L zziV0t@)ji?az0EG{;Ul7u<*McXN0`9>6F9tAtw6OP>)}Jz801hgl-Au^-vP=j@!5= z$(v&G#!coJ zw+!(fyx=ex{tVqL=6GK{;(c=1sIx;w{gXDA7sbPs2Nl6Ed-%p2r_CYW2k*F?9RE!) zc@xOr3kEK07Y^(HmJ*Y+ihL+9ntQR-RrfB_ha@Vu z-9D=5r0U7zICGvXfq3uO@L!in9d(~(@>U?;vp&dnR`uj@j>%ggcp>r5pL+0}Qb*k< znY<}9zBB0bvHes%d7NR+$J)r>1&5EXlRD}?&g3me_2St!+l^55U_4Z}L46CWbGc)i>v2EP|DC22QeF$wgg>#x zI1J2hZn>4W+Qxqkk#}I+^VV)NpN7xkY!q)2jnm%PdB$qfO^pf44aT{a9{$ig4lDdE z#ak3*(ayfA=le%-Sg46lyOn?fpy_DJmbR<;BA986$_p z#%V`Az4a&Z@1yQ1-IRz27*GAr7f&57^>Yma~BHq0>>;I#C->&i>1@@F~ zTKEg``~7e^ebpM){By?HgRcUhre=GpQl-L-8v5V2e0| zayx#@yQ=0xZas>J;;X-h;%nL@Z*1#T<8_4(kRN70xPMO}Ye-#Z6?t96 zyWXV}|4?=7S5enGKd8r0FQ&P}SLPkbTegZmeV%Q>YpLd#SwEwyWlE0_hI!-m6B{jg_pL zZiUd@$``zJ|KC>5qe~wuSCQ8iy0C7$^9RG>a-eCGx|vnfEf@I#c$bwQ_O*~*84nGs zsB5Eo;dY<3zpCqXS~Y(Yq8>xNu$KR8BVT=U1@#khbxmirQMJzFmJB_ghqqMed|r|yeHJgMi`9j|j>odfF} zSm(ex2i7^T&Vh9ftaD(U1M3`E=fFA#{uc*e{2aEw>$;!Pm7n`}jRR1+!MF9tYW#n! zCk{-15A!&|AnaRBLpS9Qt!TP$Q|{&Ku!l{amwWYfXUE|Eav!{_@aGyk1@Du4RoC1l zcwO$**X8HQ{kqRJ4AVD3`sCkL^?$N_Wt_^r^aJ*=$@6lrzAocQ?t^#zbK_Zl54l&r zk328;>g)1*%KiVf?<@23-!*l|3;z&Z#1|L(wU;tQJ7S}*zSn*49u#XqdwPh5}YztnVO`Tt$vZy_(Owo~vK@?HSb z|F`VNt*+}hc^xhHQXlrP$^N0-SBrHdmj4=X!QXWhdpv%Sel_q-?&0rXjfmW0FV!_& zhsr&?o{%s4d-?g^$Y5Ox9Isqt|5;peOs?)9 z#wE+KF=9E&yy_jheqLT}{h|LHX1+!syA?@t`Q*LubXh%e1%`LD_N()`&fy`+|-{YT)Jb;5ea zRX$h6sexaTTgK)X+^$#P6Sl%FRK>DkJ-(&wr8Dk)X8n?%E4eDZ$}dNV zd-#8DEpauKqYq%68*rso1my@!t^NO(?H>3gxn+E=a@=$BJ>n`d0zTk^zHj3i;*#Ij z|H!6I`jvSh;BgQaS4a{A#-`<6icoB^T^B^#5Na=Kt||`ESerhxALHTU~p})o@LIeFS|!eHp3ZwVNjz zM192H7w$bT?zVQhWS+oWaBp?pTIMP}zhybXz1fxB*REgj3tMu*J*cT&*DhCm2p8NF zlwHeyc_HNp&mgelYuB%;3tE;V%>BoEtX;0Mik4h()3mpixpE;~a1U>~=i2qFaY#$Q zpfA&~mbsjvExDl2P`%eb&##p?OZ$9bo8_PUyW8!sxX1GbYl|x^f5E-Ky3O)m{JZ@M zYlq+&LfM+N8((2@55Fy<+bsXZzuT{{{MA+m<-fKjxWf8hg?_bQO>l*^kMJ8(y3O)m z{JYCBte*o9n{@VGyK$d*sb#+3$>*|nSi4+}AzVBAT-mm3m&t=c;~v?Q&K2Y00&V&y`!tTxGAcEJql-$Xy-G5BdLWv046^zdKKuR!hI&nOS9T ztle_Vh4|Ic=W^CESE<{w96R}3#Xr)|2eJIu|L$_EdaWfFjP;lc*DhE6>n*uD`&=bI ztzE9Laq<$MYi*B{m%Q21uibsFnzfzpL%82npWrFCg?e6=oQ zyJVm0HVOWyzN9W8CMmC#_w-QkS&!tB223 zEAIdE|Jh=*{4;-dJCvEzk_#R>ShtqTu_%NK9?oX&zjn*9>W7wo?d@|_u3@g)uLBO5 zzrwCN-t;Hb8paU)RezAv^11)+_zLSszvXjTRcn{azNlq6p6gGjrC(b+@#Pmq(`Nbq zRo9!~b;$DmH@Sy-Q+OTru*vgsuf8tVMa#YVx?C46_kn5l|3;!2b;gU~Urz zgUTlc<6Cx*mE&Bt?T>G%_uO^%<{e1a8e~q(!v;X<_#rflF zf6M3lA1eDL_I|3FYkwyI`Z!e?VG;8|3@p|*E9Hh zU)mn!f4;mgQR@8dpD#YhzuvO1T~ps5#h?@zbccdn`Lk3Qcn4dTyl-|V~n&tD_$KaT%i!RPz^3%hzv z`Hw$e#GijJfPIhu`D?oUw?+H6f&ckq*1-1{Uw7SZodfF}Sm(ex2mX&a;P*3{HtIS3 zYwEnTUGh-R?_X2rRUYbj)obd!%Cn}*h58(oXHAt0^*JifnkpCSb5tJ6$2E0c<)OIO z)cJopk8yjjUSzH9g+VeOnu2F-?bY%!?hyX0t-az;QuwpB_NqUY@MUf7RURsDuBr1X z&zj16)aR%?o`|2dwU<0bW^vQ+4#Av^KL(ulY~GcB6Y>x9_>Bzszb#&K->Gi;SM0rh zP5a!e*PE75!P+_-&X~dH_#e}>`Qr`7oBsdt8cBFT=AShcC)DQv%erly1M3`E=fFA# zR-Xg#3@T`A)J@K_%XxkI`U(C&EMqqVo)IPI{^e_V`$RB~zw(@Vyz+%;|B&rai|2$4 z44!LTEcR0E!lr+;GT_-?I?ft}OFfo)a$mMU`Cjq`v6pKZTRaD2f59pC@@-X3|Jc%i zXW;2L6UXI$u6iu>cdAXOIEuQm0aNgAP#=@M93a5H3KVR;na<+Kx1Hm~i zBByhFzMtx`UQ*W%WpNWUo%X@x&*$MgFl27h)Uo8##kMe}F zm*t-H6di@rTM%##jL2zL=X2%?a25|+J)A|~2ApTDB4_o9iVuokQ8`!6-^=$aepWXG zoP#5BR&AAkU$S+Qp0ljSpOMPF5NCa3z&T_UIU80JXQBA45#@e%M9z{!^5ZjoasfYg zjTWDU>U+cUfuH>&a;6sMbC#Z>=d`|FJ)FrG0?yMSau)xT&*>H5Os^)+dck>mL{3-X ztSZ<0S>#3YQ$8nIR(C_G?`5TbG}Xs*BXXv<&i6BZs-DxE8I;$`&sY8tHP1I10q4+& zoK<_|bJiE){ABfTnymuPidE#a`xo#tB4?p;HxCRr&yUENxisI;lGF5@_Oa38vrwLo z_YOGEi^!S%KA$sNfV2L~)x()>8*rWzk<;sx-)>f(uJ<#uU$l0!#q&6n`W}BNi1RZd za%Ps~bD3x4A1l?_h}!>b@tjVDv;LsK&kG`Q)^3pRXI%kKYwu`&7OF?y7lEGxB66zv zGj*okvcke^1Mz|RXKa;kn7572W)^|QruDwT3i2+oTlavHzo*LSx7XYDu9>U*Jb zH@u+SlMy*BdC!V7p;A7@w`8R^S+3j$+PnPQ;#K|+*iL7jkCq`*$B>w5jl$n<#VdXl27iP z8PPaf{Eh;_`FupqjKZlNOFp@;ogIy{VEz<>FGb`mKRe$~^;q)Bed7muPJi63h%^2P zL#39{rttXZ;CxO)IW{}y-&bPP{MK~6Ab%IdyjRSxi!VZPro``+sJ~kRX~{OWZkoT- zjVsnDT_UhJhl_!#s52ft;ai%<1=`08Tzi+<$a9-XOZ~5PgD8bPbxksPWX)&%vroh`8@H3$mzkx7=Z#5&K#3Yd(+ESAXwFJ+4;Ey*?;+Pxx4;_}RoM#nGOc--LNh+`h+t z3+Gh(HR^G41Lb{Az}YDHV#@F0QhrjL@LM>TGr3s#Jn>!Sb&Pp&@VY#fRy3-dUchMy zKD%YRDc_p6r`mUzw~f-itH0yX;&}b=@8<|Uw!+Lqa&I_8r!{aoTsup|!4?}p!8x7eum2-*dlKU=&} zoKV|I^_Y5}w%rWjr1BE{CJ@d`)aR*rNIj-w2A5m(=>L9#foDeOK34 zQty}Nk(P$0}##j;m?>QwV<-k+b5md_UD=mDAlh8mD?) zK>7JcM9$RV`Qyp4%k#Na&WhbuFXx{TIg5|T=d3NjS<^WhXN&fNs7K2pawf0H_fI`m z{cI?S#@V91AUIb<aYn80ty;k+6wXT-g;PCNIU9bDmY38#Ox2_H zB65}w&-YV3Ryn;rqxl(?bNz^%#+CV;EshmXyGu0AsPVaVM9vz8Q$1EN{om7!#u;_} zXS;};i4pmJs>dp4?8s=GQOkW23@AsaM~w=ndaQCf5!=n`!TEWasz)zHdMrO*?yCnxi_aFmDCM3U608py z9x*Q!J(Hj3N=M~$OFp@`8l!O*iqFdOfOA+x&KhNXh*yBKaeg$;LiN4&ihy%OM9y@_ z{Pjy!*XsRj*f-kxkV2e|l>z595jpMU`Q;wJPS4p`w0bzp1?SZfIjvpu{j4vfr(BsEC}6&*ztW$!I-ic6qdVRLIZV83E^I5jhi! z^EtBxII9;#<1AEXViAHke{+0J|$v5#8t+ZipT0X ziv~rjM^Ufi21VsmxLoB}es8(=hDPIz>gV8yoE10b`==gDKDjTiSiPJ>BXY)W%I8#% zC7;}z=S1U-I?ixOM9x};Q$3b^a$j5EKE93p*|o5Zn&-ORukWT&vT_|u(arh3Nv-6# z{PU_0Wn1LGF5gG(Vf~Chv1+Kg)I8T6K4+A9E|p(Brg*6H^7^PyJt`RyX|PJZt@BXSz!6+QJ>3W|MEvEENu z?*W^7eND}8PVhO`Hx6&AeY*8^H42w{9DHi@|H}9*)cBr}#pK9Kq>igY3XDg%s%5}fhw}*dzqu_FG4PKYW3SQ*HEk*u}%2};&mfaT4DfuMG z|H>)zr>aZ&d5_N-C4Z{?>apaHx|i`8wZ7l$b4D5W&M7{t$0}cWf%-1}RLh0(^WPEu zRO41XRyhkDOFyIbKktj^r*%hu+^WYaS4{ywxt#Y$jF(PM+^)N(xG%g}% z`p$em)nk=2>ivdMId6{0S$bDKr+Tb%R&1|tH)Xj;<-8>#r>AhL$0}#K0HbtZlS%kIFeQB4@qAsUEAG z4G}q`t`8X>k<-2>-%s^e<&0Y23-#xv?rRY_OO$@MdMx$iKG{)U?y?@K{Uxd%-Rg6; zHcl&8kJSExdMx>(?z#2owupXK{yV?i)nk>fm8z&UyUW<{6$ z>rXifrsmJMcy3)r`TI^_sNcdDdVXESgZbZEJq8uL75W}BKBLy7y_z@+udjUnuA{Zzkio$%39{M;>~pS237dMrO*?hE;;E=ez6+^Xq$ZdKy<;!%up z6M}M=zl$f2)xVR+4dQddnzyO;d4gGOUA?b zdQ^PK?@?$kIo0@~IQLvdPL;b5m-@QQOKSe4)&+HKD)+*9sYdZrJytmyj*YgSAu4CL zh@6d&;-scu>j=UYYOY}_?}zQdZN=PW63zqaHobRC!8G01Q2B63z9n$Ou#fU~N=^}FOO zv_83Fdf;c9h@54e@;TFw>;0^Z=x3qpxNN(?&z&N2R?o}lEPX=HS$9peyj18p&qZ~C zpIb-d%qf0)1vs6Eeiq7~*@uJgyK_X&vRm@~ta?)Kr!gd&pM{>!kQIJz6OmJW9z*;o zJ!hfkGst>WC_d|V4&t+YM9#)>`F_?H;EWB9=4aU}%J)^~J5p~4@wsh8&g$LrIqm-_ z`buKYMU2lvej4oqKh21os-Gp3^_)@tG_CyWL$y6BeJAj9yNH}t=X^i21vraW)ALl* zX5i;85jj;qD>JLd&w|gddpGcN`-q$kil64wdQNLK`B^?Y;Or2QQ}wg10B6+rEOnLd ztJL>8;b(C~&U8tBe5R%-`bvGTi0Eh4Yl@D-Sv(`~vu#Aq(%thpi=R>S70z@-&O-O; zrv>K@5jj1D(=EVR85Z|Z8 z`-l@w_ir}MS?2!%#o5mPvnZT33YU7E|7ma({BB^$&0>D*-}%oeh36%PZPa@2o%}z> z>%FW08(!{md_}I$mdEn5xa++sPRh@n{SUH?-B+&vv|bJ8lpkyEW->aogE=vZ>9<6snLNkmTdd9dnnAujcGs=iZses^EMG`g%@&)})o zf8qnw>q7OoXzNw0N2(6x=N>*slzOD{tH-Keg^npdDb78cIJ>TFkK(U~`=VaIs>jYM z`l;$roLwUNsq(AGh5S=rr~IVa&91(HZFF1N9@%e%`>9@MtH-6=guhSalgF~Yt2&gQ z-TXI3iBFYZJ^p{~-3PQQWw{36IR_4e9*`1x=%I%mdg!5tYE*=v2muiTQbLc47~rZ~ z#B0>6#sWq~je;5lB`PKK&_fSB2*{>~ev`?38^3qwpZ`5sb6M-IvyV&u{U);~&;I_I z$@G!WXWPMjaR>j{@1wXo^p;ceyBkOR2cNfqIk(K*)l;1KePrtQOEUVu)jYnP=Cw?Dgz5A{vj?m|iZR-AFVru%7@nBoHPCGD{$8_THBh&P`nG3S_ zd-Qtk#OzG!^KJ0Pp1<1(gx-`pL6z2BSQ#2jBv{~hSUEKXdHHTC-z?g+NF_Iv&Y z?ZDg|(}~9sO!eH7tY@UDotU!`{XW(Y^WeVXMSO9PVLz=5lIZ^sa+dA?-~YJ-4RB(X z@v*Jz9I^dwa&GN9SF}2FH|ly}W_>c;z&Y}tp`P3H2WILSzDYYVkNixZ7hUIE)N@DzTZF^|@mUo}mi zCg(1$(_YUWI5C?=qu(+0yJ`J%xBh67&MMaR`ASRI6Z2?|`BhWDo1DA5&gHGn)E(N1 z*(@6Uj$6+WZ<&@$ss6Cx{v1EpPW8Kw#3VQ|kN8O6mrVU`a_;Fm*R(pzcj|g#_C<|& z)70-K=U%SUUeDxR+KG7t#rGxGIbwaul{%}lk))A zxwh5W1}A1;)QC4t)2GRKpzE~Pv)I=4#5{uH`;w{OP5VO*?vJhLtYO`66T4qKG5exM zylLuplk*VQxsKJ@0w?AX6yKLj{cds|>N@T9EIgp=iP;x5;!W2%Vm>lCKk7Q|^^88K zotQ^Zd|#T|dS+bb3f6vaf)leZYQ&p!ThEWV&Q-0>{6o5)m`6~2Um7@zBZe^b`^Vkk z?e&a2teu!ge5CJ7u5&J?&ri5cdp#TA#O#Y2@g`okn|yD$f4}S<=g4_&+j~CVVeU9) zO?@9lc82rWz0b%!qU(uSK1WDx?{g(%JJ>Jm{`-s`uj%{fll_62<8k3f_4qJ*pE|9P z`w2)Z159224u3z^Q-(j>{o#Xp%InzHJ!k2;p;s~vC)xIQ$nj0QZ=tE4NAyQLs-ErV zb^YW#&8Byrm1J?vZOb}iHw=%Y4V=_m<4d^pJD=y_qAOsi*bw5wli&kmUQalGW!?$oD3GA4R?Ok2(y0tUJnC z*5j~~;KclaZ1|Jy?+CeTy!c!FY&Z^kT>q{AeBN%dtLr9XlIQeD#yU)UUXM3m%KKb= zUXM(lI9}6o{3(7 zvT6GKoaY?Oe}4PtC!W>Q1LnDPO25l_?(+MlelPR~VER1)_h-N?pTo9t9WvsTc2NKFrxnUrmWA(cuoC& zVt)Xp-*NpO*H7hh*jAjf{w=>}a-KA%6W#JTY`e7k&B6}tIA8DvmH9p9T?d6@D88Wk z71wjdy-o_pYpUnTeGt>{=*NtImn|>dKR01+{+;3tEcGnBsOu)b;GG6%{ zQ$0`Z55UwD{g~x**w*y?4wLgV*ZIM9Ql{lMesAFUx^sJ-)WU=HrT%gW*Jn)5)1jXE zmqz!y>|c<2;qpXYXIuH+#POP(XMof6Iq1i1`aRR@;>73enw)2n&dAHU&X`Re)9d2w z9;e4^a-Kyx8{ouj@|a#1CqB2@#|;l^)#*5{m$J-ZeOpfgA+4)I$!a>u3YMg_n$Y_^IWo?+1GSEF{9I##fkeXOwJ~V?g;GtUW4o6F{6XMUpo67+b@yM%p1DjF^}uSemB+g%cRrk zY3H;IP_~}a_5&F9hnz<`tKh^8Oow%{+nZk@o#{7qJu#2##OoqW{XRiDd*H-8t`pZo zOwRL3XXPzjPt4;w+3%yTlFroI+KG8wr)~O-de5;f&K`V%eff#cFP;Q9I@#wJ<930m z-!E`K!0s%+qw9$oo$UOM*YTO07n088yV{9)T&Jzyi{A5~&msFAp9kFqH#&Rd^Puti zI8!~pM%HuUJzY=C=w$mHua7f1zfL+6?`tRKah-TS3X}62q_YD~%;P$3>mgb1Ip8Og z(!}3Cq4%}KFi-3)N{a-hY#;xcPi<`=YY2@PWCzA?0WK5 z)bq--p7T7?iO(xt0JESwau&yU&@kyInX1Jas8C&Uh zyw8cLo@I9g_USXUh<0K|N9IPZ-|;>tCg*oaXAPW~(OD&(>~`GuNM~kIT~EyD?2%4( zJMR0W(^*VAr)7YqZsPhK?~i2a_aBhXDmXC%)9I4VY4=Bh^(7ha4@qZwaa~W$GCpY& zH*@vG`y-j^`6JTV11DzjNn0YF>~g+BIx9=)dSVuzv^CPn?yvhX=}d*S6SMfH+FQ7O zXTOhrLOLhGiFwNB{g5V|?0oby(pg?o*Ap{3CrKweA6-g1lS^qQW^^WR<@(*We@VuB z8R_hT6SIs@+KGUjKPR2|d|1rllh*cpSXp0U*OPxiIulFle#b06X^Z4~GVA;$>Fj_L zv-qTK1?>D4=`1ay>xo%>(nfFR<|DSAmy^!;vf7DReA4CvcK(`lw!w*6e9|^ZC%d2F z8qyhy=z12H(^-7dCL`ST5$kM>=|s2qq^;c(?DY8?(%FJ~ViupY*;cU5-;&P4^17cf zi%;5Gz|I=!jIN-an8i2M-Vtm)e@8l-;KV%T^L|JN?EF3H%&(~Hi5Z=hfSp&6&d5sI zi5Z>EfSp&8&IUL!qcd_RH+{1EY5zbvb1Un5Vn$~!VCSDmXLuFu#Ej0+U0glc{mFIG zSqCR(bY=o}{+V=USJm~zjLs_QWWV390%v7w?UBz9MfK~LWjJY5cXR!Y=hK?@+guG! z`5bI(;KYo>mq{nPp8QwRnORNO6Eixyq?6q){u}9ZR@csH8K4Pry^fte|4urq;KU3} z$045+$~yl+I@4?DdSXUrj$EH-_bdLBbmDWXF{6`xZZ*4K@mkVZSyR^&Gdj~`zq9)l zuOprK+-l6|WS?8j9_PBAbmH@%F{6`x9yELWs7X5Uxxkpw$vzjDJ$`f}>BQ&lVn!$X zyj}J@z?(=XKF1a_I@#ygvgf7WOgi!Tu$a*q)bn9wytj}}d_F8@8K1O4Js(!acPr_{ z=fh%_@ktxh^I>Itw~@}$dU`pJS;i-AhkTALyZ(7Q>5Q+hotVWZZK%zyC$sCHEz;Qr zCuZ?U8z-H3Uk=my{2ipTxPh)GX7NdzA)V}U=}yua+fX|(i%;4j>159Xyo+?Uz=>IW z(pE_)yPkXx=`3ud>xo%>()I#&-b*^88*3+K@ktxKpPS#=dfrDmo8ZJOK50{=lf9m+ zO*->&T~Ey7lQzFRciu1Syq|PNHqlPZ;*+)!u=4@Z*#IYI@ktwAA=r98NIG+y>Uv@p zpS0P4oez=D@MhYHS$xvg0(L%3I_u!XEWW9BMXul3>mnZ^o!QNGJuy%DydTPMaLZ5D z*&&^wEwmFeI-6uY+4axINM{Y4n9&(oiR<^?(fWEe(|X4aA1`kh^$e~NUb6S|(5(HSS5c%MDf^!YUD?12+A zIx`lh+?NB7o0#s)G1>nB<~~t)yaqEmZCTC-WB1c8FncgY`}y;!ZFIk5MpyWBZu(@m zi~sF@fZbW%Ry!xbjm|xmhi;Z?bMvdj7BNM~XP?Zk}EEa_ywH=ie+9dKesXN`2S z%cU1cC!VKP+ELdRoenv_v-=rdBAxN1c40IW(k9mBob36ZgL~OB+ef)QbUiVPPukde zoRj^2pG`W$Dec58K53Kd2kV?eI_u!XEIw(Y8wTrKfOKZ})b+$HK4}{PJ42*1w3l{b z7N4~3je@P`LZq_>PR!zywy<%q&V@;5W^Y|j%;J+a66c)kc5$0@I{Rqnv@AfcjjYAp z=Y(A@EkZie`)X$u-QZ00xZ?<{bI~!K=mw_KA^V;EK3a@)_Mo1a(V5wVn?Bk7w2PC@ z%6_`vF{86Y_B(sLV+qok+Fv^{qq9ZUlRe%MCY_Vu#Ej19rd+?X>z_-K&T?AU6Eiw% zWWTffmzE-($pf?#Gdjy;J=ycUmnNNEaAHPh?J}<4+2gRwkj{w%bv-eoGrL)^&Sgnw z;vntBjLyt%!8(^CogHvuMrSX^U0=-3M-kFlI#|~eGdf#jJ=x{b@}x657@aP=`0?q>xmhi4bsUT-&~n=#y+Z@n9-TogX?$pI+RsNXA7K| z(ODv$>~$!slFmX#*Ap{3+oY4d-&&M(Mn9&Vn9&(a`S<%0-Y?+wu%_pgU)n$ZKFdi> zJy$*daqW@MZ-NuE49B)|J_C-&bUwpneJ6811Nt$uJ{eBVXJD6~KPS&;h8yNO|NW-(tga%R*~9htFpE#xIC*@t{24u7lk;lQ89G9b z53~5BZIMoPf5@*%XAPW~#V2jma^9LOKiTs`enUDlSzS-e;*+*VI(whe<2CjBHKfxy z62^yFfL@!o950sdclP;)wZ3ycX9s8T{`mc#3tR;kW?)*Q^!v2&7|vh%9a+yb^bcl) zl`ZF4Nj-6W$+RBwH`lq7wVpT~VMeDdixc1=`% zGdjzplU;spKsxiE*Y(7V&MxU>>$wr>jO4WwGdfHAaQ)8Kb7Ruk04HX2wn-;DAH_*$ z?nGTr%;=2m%hi+Z_f1G=_$2MbjLrh-Wcz(n(pd*5W^`6aC)@9vk zq|-T7JEvuUrqWzJ+2@RGOFFCI#0*TQOgh=)aoeHuBB+}ONS~%($BfP{>15~k?a_%J z=;a&6CvviKG zCuVe(NhiDf+=Fz+&(%)M=9oi5Z>wBe;69%g=pDXW>h_o|w_u4cNIK>5P6^ zJ29g(k>%>i&hKf`*#swMbhZO_?oT@N=jnQ4MrVn1vilhhAf1t~XeVZL#*XCropl~a zIve1`jLrh-WS2_^k_9YQ+m;KYp19O-12 zONWxqY)RJ>Gdk;}lieSZBb|whwKH^q&gkqO%k?|!%#hB^h1ylKI5VFP*7>n9o#@7T z7A;P>9s&2Kna;ENc;CrfkKo{bJj@8SWI6AGy${bP$a+@6g&A4Vqk`@C!$@cPzx4Ep z8J%U)$$oEsl63aKi5Z>Y&v5l*zc&vjot3ZYdSXUriFC5dr6WjZ>g(Ex8J*72Ts_%- z&yvnbaAHPhfpoI{ekAEEe?!+3Gdd>&c7BR3T~Skj5>OPJ9aJ}y}2aip^Y>vfpX*(ROrdh%yU zXX#tIpE08|{aLP_tn+x%8NWn3F{85?u=8`Ivkgwn=u95Z)swy7#R;Ud_-$QJ%;>C> zPWFC5pC_HM|JF{-=nQ?1t0(Kslg<`6F{3k`=bUW6pGZ0j-_iBNjLs(MWVbs`BAwB) zc49_nXeJ(F~1f1vA$8Jz{v$u2+7BAuZhYA0rNMo#7G$u2+7CY?2KVn%0< zbh6v;=aA0Kk90jTqq7sR^IX#DRJ3zi259v(uHV^u7D;CnoS1>>G``Foe`k+t|A=&^ zf2`|?8J&}l1Y6IalFlADF{3ln3D$Wj>8$)j*Ap{3Q;%`Z*7x*&7Ss9j{~)j1P5o3m zF{86)xvpG}Be2(N|C4l1f)g`3owc}n;{6#+^}LpJmVc(}i5Z<~(#iJwb)++Ssdi#U zXL4<>o~-kF(%A(kW^{G}cHTfbCoa?V#Ej13I>FYnNjeih*G|mnjK+d>-bgw-;KYp1 z2I*wy_crM)RdqcvqqDmqS5Nl-AvclE_%E~*Gdi>Da!&R*!p)?!4NlDHtdY+AZ}i`9 zTF&23I*Y&5YbR!O)&q7vKsuY?#Ej0YWj-?9*T{6A(mVRj+0GtQ_bJ8ClZ?v` z%rYF?%6c-}?{|{*jQm#jJ7)BSHsIzXcD?Q{(%AqfW^`sq=d^w?+$ZX8(wVF2dSXUr zm2|S(NB5A<@b9z}Gdg>ulkN9=NoO6Ln9-Rc*O%D&=swb!{k^UyW^|TGCwrXh_vC(t z&=uN=8J)=#H z(DvJ$lijcQ7t&b;CuU$e`EPPgww_m$&h#I3Ju#y*^d9GA=cB)o&K@{1qq9dk*?#{! z>8$)o*Ap{36Bl#!WS##YovFHZVn%0fHg|p<>%5k9PJ$CNI;-<>PIf-Jo^+P~tm}yx zo#8p0ldWfybSD3zotV*?B(H~Mowt(CE;uoxb8?Yj>v=oroVZHY6Eixiiv{bvgLEdY z)=tdmtSu3&^Dffa0Vig3=6)LN^79_jS^BH4CuVeJm*(opE|=~jo$+F)w!ryg0F{3lGG3R8r-ybBm-=qJ~PR!_Z*yrt%#}OVPolS6JMrVa|vd@=!m~`g< zsq2Xuoyj=&eT2_xG98zhB%P6KwG;C+XUpFy`;+nc2&VnXkM^DOIlEi;CpW-}8J)H) z`;(`Q$FTpiL)J5QovtTlbk)gzXZO=SMmodSYbR!Oc5e3Xcc~{keLhY)>)^zU&iE~y zlbzq6Af4G8bUiVnvq(DG>GMg_8ER@LW^}elC)@8&k+(9&diOv zo|w^@C!K6PpCO&jP1-pv1GGUp+2vA~bXLKM8JJG^Hm={<^`&P?XZmJcPt54d2JHM7 z>Fj|MGdgRelReJ$9OI-B6cjLz8hTs>{)S=EjnUT1d(>BRG@@@-vTbh77J+3pk7%nY3;kXz1grhyIXSo&Mud}NPZvX9?vtLNmq}+GoS0>N(w0u=>d89KBb}j#bv?5W=`6mf_KaYiUm4Sh z?kS)5Lz;B5$6?PWoi(T@W^_i*^WRL+2=TXoph!i*G|mnY?Ds*IS$_-os;0ijL!7ATs>{;pEBMF(pi2&*AughPueEw zWasy9lFsCl+KE|w(k6>sJ=yvFV$#_KCuZ?UTYrFavh(}5Naw^;x}KQDCvE&e&dJX2 zmypiH)7ptye9{(4Cp*7?n{;--iCKKown!(t-SOX~v-FIvCuZ?U8-0lDch>nG(i!h+ zCuZ?Un-ADoCY^0?ViupYjewosC7s1*bv-eQPulRq!S?(2NN4O{+KE|w(q>5~yS@2+ z(%AwhX7NeeCY|i}`~Q&6!gIQwn8hb;>=CZt+3mO=kk07y+KE|w(iQ@C{*ZJw!HHRX z(pCa?R!C?51zk_f;*&P{Xt4eMW6~Md88PIi?fc;*+*QI@x~z73p-~_)+E+U0?A@TYr+P zC+oa?Oeea6`=?X7NcI z4fwtseGQ9o6Yp=)1-JO5ZN0}i z+3n41Naw^`x}KQDCvDc@&Szkq|0JD>x3v?q_@qtE3AUcsk(*Auh&q%ADKIoW={k#xr2)lSUflQtCMob3F56X`6zr=4wZi%;5Kz|Nb;bfQ~) z(nc5J>dE%|Eu=H{zOE-`@lCY>-#_Fw(%Awh<|&`|!^EP&*0V)A3ywZ-4Kq5+iwEnx zlXOOBX(wiMR>GWd z$u5^3BApFzVn%0kUCzl)pO28v-2A$pn907SZ*@jLsbCWX}V9j&!CL)lSUl zoFJX-d4SK8&Pi}$MrWOLvh#b7be31w^(-%@Gderu_d9$1=mpZ5TwJ>_Pjiy>WX}Wq zH|gwx6EiwPac+Hy?e`Z+XCkcYIkAM!=*$G{oE+1MZgds{cD_V9J5W!|=8J($3f}K8JA)WE1v=cKr%cPV2-h7pGw!w)Ron6w&u7|uvI*T9C^~8+M#HPXa z`|G4LwzPI)MrU&~&S|^8xW4ajJe!c$!&WcS`)OO?MrZUW?zoI?IUm|}=vlub%6X&URAQvuSaL0;*?pw_(4pKc+Lk zoPRxoa<)$xIyWbsv7L22BN2aRY7K7sw9QB5lZMVMNGGm$G%U`b)|VQdbIUQEx#j)q z8I&{Z-G?VZI`g~feh;tU@63_U3AOcm*Q@7Nq%*R+cGfMNp5dW+y4psLuGu@hPD{?mt<_^ zcpU3|i*zQ}(EW@V9X-;?-dFQgvfsPl#Ej0+9l@;6%Xr@=>xuWX!Yt#Hmc5@9dw=iO z$a*H$(*2HEe9{&JuID>sJv-pUEIw&#TXFLdd!PK*$$FO7*7d|JK52VoJ=y(r?~?V5 zucMuq#V2j@#9-&6H^_Rn!HHRX(w6TG*4ZPS#h9)qX7NeewKx|Z4A}2WJZ~qq^>95a z>9sPx_xr;pou!<``!D$2{}ay_!Yt!sTlqd>r_VRZdbZ%aCd}vy-^KMiyMMm_5b*v# z`~6f4>*;>SjLr^ue_Hmq_9EncU!&`5CuVf^PUV)LtaBDw&n7rAqccw4N0*&G-y)s) z4Rk#*qq9U#pX_-8vq@)UL+!+j&P>4de4BJOz=;{1&fVPn&OUeG9nzWGNY@iHIxD2p zwjC$qou71uH`Y$fGCpamWWTfbpMRHh*1?Hce9}&m^-TXo-{;!&9I-j1GaJ|S#4J8( zTVy@i?W6ZdXJ`}c#4J8(C+^|qBlbBC?~~3NI5CS)+Sa|CvvL*J?+cR7%%-}Yn8hb; zkL>pzIeqpY9@qb8Uk`CM)6QvGfL2OxClqg{~)Nbau&lvirg2BkP&kQadrDGu-CpBX;^+ zgskTzI5DF$LEg_FpKEFQ-khJTXL&1KPt54dlJ#Vrb4X`0p`Dn~StFh7^tk}(?1B?B zI-UEu>9cz-`MpUxC$`r0#Ei}u>9l=s#;zYecOXp8N0l}8@s7kc+KtZiz1(pw_Bmo9 zvYs7qVMb?#tfy^%Nc*Vaet;#&dM05yDsAgu&(a)nKf|YWKbe+G3z7AVZ>L?Dv7Qm~ zKDzAwkcCNS8=RQYnIZSv*p9=NFC8v7)+YNM&s!^Quj`9W_Ixng_hzjyoPL%i>lusa z=_s~?zcY23|Ma;K{$XBDZ#!I0+(~7<~Tz8c|E@TPP)G6v}HNok$Xgs*W_HBbVhd8F3dI;zCXA9z69Ct zxLj(08y&Xgk~nSO?=s$%NM~*rT~Ew1K51KL`Y%7lXCEn?>xWr<(w513vi-gk=?v|zotVWZZ6jdkM@VOS zU%ehu1Go63?FQ^zg>+{2(DlSDK56p-PoGPZPA8?E)3N})HsP%|!pl=p=6BolS@OoS z4C%z>QWf1(g5eMBa>?dwd(P!ZCr+Q~J)yqf3~c&5eYkv!kWOGYJ&QA_`90=2mmkwv z*~`D4K`lSio^ypUovFS3o$P!RyH>B)nYQ0oC7qMt!i>{JgIq4L>q{$=&hkFGewfi& z@%js2mn_RA+kVCDSBLY_UgY+B;$r=Ml-yUl<@2TO9?R`lY?1vQCF|J*7iRHETRWRu zUn*S3O`ofg&WZhW{VfkR zwl_C+hu*}x-=>t-^~7AYxZIEVkN>dqd-?ofzwArS@1c|R{2o6*yZ?jW{#f6So8PgX zxSVf$%ccFsbhbYvXTiH3VJFgw*O3>TmLZXNGJA=A^NYZoeI;OMvAvr5vzaKz4 za~JCG;ryZg^{gN0|GmjB=bN7Mz%iYXkA67Ly4UZ!kxsl%OvB;~>b^0xO^5xm`BQ}$?8p7<$!;In zzTd;%`ci64XXq2bIBoYSZPkYB_lJ;9yf10Z;>7h)%(DEnIeVV-&@r8v!~E-sF3jSz z^?SnW_dQ7`PM^*v{hjReX{%@C%3;4}NGCqeuxfDz^?bw16+`DoNhdxZGJUvzJ=y0) z+WNiZ_50qW6Sw1f7H3e~aW&7m&zR225&reGIc58O@@oA(mpy#g&xs?3t;~O0xj!VF zaKH6C?;@4eF3i1%{yZ7Ksa>r9MsdWOru_`N_J>V6%UjR8m;@*05g+OM(!e=5PXPa! zoO|>KOggJro#i8SJu&0w&E%O1%v4~e0y7nuslZGHW-2gKftd=-RA8n8GZmP3Dlpg# z9sJ+jwJ_q(9=z_JHsB4{A9@yUx(@RDgE!pYcmF#z$h3j`pVt3h|NZ{|M^gj zSP$nCZ+@9qTdyEdua)KOyxQXQF|V$t%ildy552u6^_XdADll#Zw&@?lKWqWVS#EG7 z+#AWE3l4wyNWU5UfAIPoukAPPKN(i?|EKog{vWen{|~#Vf5U@~`hSRA57hE*&^W*M z$1LHs*?zlp|Nnzp#N?!h{?CJx4%~D0y`THdR1N2NHC*VKj~w&p<=0+w%uPQmZ+XJb nYf0T+9}L|8_x7#l?OC|s@_nB@@uBlCIcUMF<^AEi!~gy-o+K2$ -- Gitee From 97f9b6698a8d6a49bbf43c564a8ff80357b56d73 Mon Sep 17 00:00:00 2001 From: Lizn <9697148+antio2@user.noreply.gitee.com> Date: Sat, 18 Dec 2021 16:37:35 +0800 Subject: [PATCH 05/19] fix opt.c --- bin/opt.o | Bin 0 -> 3358 bytes lib/opt.h | 1 + 2 files changed, 1 insertion(+) create mode 100644 bin/opt.o diff --git a/bin/opt.o b/bin/opt.o new file mode 100644 index 0000000000000000000000000000000000000000..4c969ae8571ae53d782c6cfaf941943754ce32f0 GIT binary patch literal 3358 zcmb7H-)~b@96z`1U=XC0jHI9sjV=n2)CGw$rpd^5+(kEOCO3kLW9$bkR7Tvb0c71w zhuQVus2Ldk01_9|gh%$^!(f_%##qsZCGxNbO*XrSKGdWM)$8Yb&h2fxAAl#h=YG%U z`@QFUf1LB_Y42z27`4APG8UAQkA=;?v!;|)H@}`SpH=}t46(?uaBsKST@9}oHM7V} z`1sJ!3dJ&DlU`jJlbnpun9V{Xm13S&y}R6C}%ZY|uz zm)V!Aph+*FXRDyA9zX$IbYvEOsexD{7t|Bq?S1d)tf50` z+kzM2ci?f{UQEas9M7ZD^DgQ6k!sK1sP?>Rndjj(Jl8+HUH1aAL;-l#2;lRo00vhH zph2a*9cjlpAz=h%h63dbmDjNl{OUF;i~cJ!roW{el?>v?*c@4+*TNzdXG@=LLnY<~pK~gaS=a;@OO>dgfr{-27QlYB7ypK3nir&e zA2LdeQ>bOY2dFy^3yC?To5eQLA@h&jfE67y|HKp|nJtF_^Zv_Mr7{PlaFvQQawATi zaxxpBiV{hbcP2hj6B=t7;V4|3F<%lLIRUnjyYddDsqTT?lG{OpC|(Y5|U z%u|5>ntx(D#mbAcgZvX3`6Zi=iG&J#EdI02$3;T@N{q*+#UzPJ?Z0tbOkO#xv7MPlektZ` zgBp1};a0Fr;US`Mhr3ZQ=}B9f=cPc0K0p~+#=m8DAr^yUMG&yG9d)QY{yj)cAbaZiI5(Q3UlwOf2%EyCCe zxpNhK`L`t-g+JrYxm$gUJh7jsL!&osAUd1$=3u2DWO^R}_0&VA_Z}Z(4Up;m8=hAo z)4PBlcO5dllenfGf=ur@+{cbVZfj}T7uwPGma#L`7~UPGDONOE+siPS^uo*NI<-Y& zq*2;{E7iGL@>6M_cBPQ3t#`2WQ!-(3yHe)BW!82yKM*&U`#2sra#5}a&S80A=R9$H! z_1n->jmrpShALe~UI9Y&E+cI~sOn|J07A7dBV9mf2b7TyfzUosNabyv-1Ta-KdM{h zO`U!ky{p7kc}s_rtJ_rE(BUL(qSXswRCzmx+l~$0$*bErXGs4)yxNo1N{q(vgg>I2 ze*O9L=NU@V)iW47ZAz&>+I_+q_Mbj@#%%BFH(R0uJ*Su)b`G34Svl?)=&jK1kC}sV bmVu$Jp`KVD{+;xnJ~U`{M_ /** * @brief define status after click -- Gitee From c293d83b80b24f5327449b0b1f6efaaccf854e8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B9=E4=BA=AE=E6=A0=B9?= <2868242582@qq.com> Date: Tue, 21 Dec 2021 16:17:10 +0000 Subject: [PATCH 06/19] =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- map.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 map.c diff --git a/map.c b/map.c new file mode 100644 index 0000000..2cfcad4 --- /dev/null +++ b/map.c @@ -0,0 +1,101 @@ +#include +#include +#include +#define ROW_1 10 +#define COL_1 10 +#define ROW_2 ROW_1 + 2 +#define COL_2 COL_1 + 2 +#define MINECOUNT 9 + +void InitBoard(char Board[ROW_2][COL_2],int row2,int col2,char a); +void PrintBoard(char Board[ROW_2][COL_2],int row1,int col1); +void Setmine(char Board[ROW_2][COL_2],int row2,int col2); + + + + + + + + + + +int main() +{ + + +char mine[ROW_2][COL_2]={0}; +char show[ROW_2][COL_2]={0}; +InitBoard(mine,ROW_2,COL_2,'0'); +InitBoard(show,ROW_2,COL_2,'*'); +//ӡ +PrintBoard(show,ROW_1,COL_1); +PrintBoard(mine,ROW_1,COL_1); +// +Setmine(mine,ROW_1,COL_1); +PrintBoard(mine,ROW_1,COL_1); +return 0; +} + +void InitBoard(char Board[ROW_2][COL_2],int row2,int col2,char a) +{ + for(int i=0;i Date: Wed, 22 Dec 2021 13:34:43 +0800 Subject: [PATCH 07/19] =?UTF-8?q?feat=20=E7=94=9F=E6=88=90=E9=9A=8F?= =?UTF-8?q?=E6=9C=BAmap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + .vs/MineSweeper/project-colors.json | 16 --- .vs/MineSweeper/v17/.suo | Bin 41984 -> 0 bytes .vs/MineSweeper/v17/Browse.VC.db | Bin 1433600 -> 0 bytes .../ipch/AutoPCH/26d7c07a6d50e7f3/OPT.ipch | Bin 655360 -> 0 bytes .../ipch/AutoPCH/98954ce38854ac1a/OPT.ipch | Bin 655360 -> 0 bytes .../AutoPCH/d788c3f2519d5322/RUN_APP.ipch | Bin 2490368 -> 0 bytes .vs/ProjectSettings.json | 3 - .vs/VSWorkspaceState.json | 7 -- .vs/mine-sweeper/v17/.suo | Bin 14336 -> 0 bytes .vs/slnx.sqlite | Bin 307200 -> 0 bytes include/map.h | 11 ++ {lib => include}/mine_map.h | 25 +++++ {lib => include}/opt.h | 0 map.c | 101 ------------------ src/app.c | 2 + src/map.c | 47 ++++++++ src/opt.c | 4 +- test.txt | 0 test/app | Bin 0 -> 17072 bytes test/make | 4 + test/map_test.c | 41 +++++++ test/opt/opt_test.c | 1 + test/test | Bin 0 -> 17008 bytes x64/Debug/MineSweeper.exe | Bin 61952 -> 0 bytes x64/Debug/MineSweeper.exe.recipe | 11 -- x64/Debug/MineSweeper.ilk | Bin 585816 -> 0 bytes x64/Debug/MineSweeper.log | 2 - x64/Debug/MineSweeper.pdb | Bin 937984 -> 0 bytes x64/Debug/MineSweeper.tlog/CL.command.1.tlog | Bin 620 -> 0 bytes x64/Debug/MineSweeper.tlog/CL.read.1.tlog | Bin 1826 -> 0 bytes x64/Debug/MineSweeper.tlog/CL.write.1.tlog | Bin 488 -> 0 bytes .../MineSweeper.lastbuildstate | 2 - .../MineSweeper.tlog/link.command.1.tlog | Bin 1276 -> 0 bytes x64/Debug/MineSweeper.tlog/link.read.1.tlog | Bin 3244 -> 0 bytes x64/Debug/MineSweeper.tlog/link.write.1.tlog | Bin 532 -> 0 bytes .../MineSweeper.vcxproj.FileListAbsolute.txt | 1 - x64/Debug/run_app.obj | Bin 9058 -> 0 bytes x64/Debug/vc143.idb | Bin 27648 -> 0 bytes x64/Debug/vc143.pdb | Bin 86016 -> 0 bytes 40 files changed, 137 insertions(+), 145 deletions(-) create mode 100644 .gitignore delete mode 100644 .vs/MineSweeper/project-colors.json delete mode 100644 .vs/MineSweeper/v17/.suo delete mode 100644 .vs/MineSweeper/v17/Browse.VC.db delete mode 100644 .vs/MineSweeper/v17/ipch/AutoPCH/26d7c07a6d50e7f3/OPT.ipch delete mode 100644 .vs/MineSweeper/v17/ipch/AutoPCH/98954ce38854ac1a/OPT.ipch delete mode 100644 .vs/MineSweeper/v17/ipch/AutoPCH/d788c3f2519d5322/RUN_APP.ipch delete mode 100644 .vs/ProjectSettings.json delete mode 100644 .vs/VSWorkspaceState.json delete mode 100644 .vs/mine-sweeper/v17/.suo delete mode 100644 .vs/slnx.sqlite create mode 100644 include/map.h rename {lib => include}/mine_map.h (57%) rename {lib => include}/opt.h (100%) delete mode 100644 map.c create mode 100644 src/app.c create mode 100644 src/map.c delete mode 100644 test.txt create mode 100644 test/app create mode 100644 test/make create mode 100644 test/map_test.c create mode 100644 test/test delete mode 100644 x64/Debug/MineSweeper.exe delete mode 100644 x64/Debug/MineSweeper.exe.recipe delete mode 100644 x64/Debug/MineSweeper.ilk delete mode 100644 x64/Debug/MineSweeper.log delete mode 100644 x64/Debug/MineSweeper.pdb delete mode 100644 x64/Debug/MineSweeper.tlog/CL.command.1.tlog delete mode 100644 x64/Debug/MineSweeper.tlog/CL.read.1.tlog delete mode 100644 x64/Debug/MineSweeper.tlog/CL.write.1.tlog delete mode 100644 x64/Debug/MineSweeper.tlog/MineSweeper.lastbuildstate delete mode 100644 x64/Debug/MineSweeper.tlog/link.command.1.tlog delete mode 100644 x64/Debug/MineSweeper.tlog/link.read.1.tlog delete mode 100644 x64/Debug/MineSweeper.tlog/link.write.1.tlog delete mode 100644 x64/Debug/MineSweeper.vcxproj.FileListAbsolute.txt delete mode 100644 x64/Debug/run_app.obj delete mode 100644 x64/Debug/vc143.idb delete mode 100644 x64/Debug/vc143.pdb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ef05e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.o +*.exe +.vs/ +.gitee/ \ No newline at end of file diff --git a/.vs/MineSweeper/project-colors.json b/.vs/MineSweeper/project-colors.json deleted file mode 100644 index 2581938..0000000 --- a/.vs/MineSweeper/project-colors.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "Version": 1, - "ProjectMap": { - "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": { - "ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3", - "DisplayName": "杂项文件", - "ColorIndex": -1 - }, - "3a42e008-5eea-42ae-8e6c-948ca05e164b": { - "ProjectGuid": "3a42e008-5eea-42ae-8e6c-948ca05e164b", - "DisplayName": "MineSweeper", - "ColorIndex": 0 - } - }, - "NextColorIndex": 1 -} \ No newline at end of file diff --git a/.vs/MineSweeper/v17/.suo b/.vs/MineSweeper/v17/.suo deleted file mode 100644 index 88c2457aec708f480ad15602d3ac867f8d8eef43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41984 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 BYxe*E diff --git a/.vs/MineSweeper/v17/Browse.VC.db b/.vs/MineSweeper/v17/Browse.VC.db deleted file mode 100644 index 0f94a97de91a52b12eb8bdfbc729fb86573084be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1433600 zcmeFa2VfIN_CG$WU1_x|?Jfq408>P_u`xDobR*jW9NciB#Y6~O1_d`HnVNzjq=y7Z z2q`3_hg3pH@4fe)OApBeioac7WT#9|>c+-^chKSH>p;BPVT7WhknKLP%t|F|e~2<%5vGu>8DuxLM0 zwQ<_7+K)=P^JXV;T<(}{KhvHf{!LtBTV(ynx`_XrzmPA`emX>cW|V1xznlf;^|86q zU0gWWSQ}UqT;r?vR9 zp5tAZ;*JCx0^x|iq1nAOxD0YIQm43^{h@Gx#=AoSe|=1ZzqYn3ac!`!t}8ihjyn=q z6PveTw~i71NF)?o+7bzbJGDozQOLKf1zOQA!`P<_p%wqzm^tWEG4goys<1k~Z?H=o&SO+f<0XEjII5UTfF) zVq>5S8o71sN*%6FY%*V4qL@p>gyFfw#yDcVoV%BHvTsg>KMxX;@$A+;w9# zu={n=2nE7T^{WE4c+=|@PFkyoE>8m2IwE=#>lHDsVvyjF7%yIM5glKz##^kzidAhG43g;)V+Q8k%Zb zV1j{hwsCFy;We%;A{3rx@cCosU=i%ut?SvU$F5|Ip|7tA?QJ?n?fskrry*X z2{tu`JK7TLTClJy85luk$EKq$~y6X;yQSZf?wH))Y%bB!C! z!3BYv4JP5}#g84^!}3Ay?sm%b&WH*U>AaM*$bOK#X%C93O5Np+-7Pk6yr)~!MA0>P zFt;%yc9afBbG5g-<)YFa-E&dpPB&dw{l4@3o8k^H_lE*7D|hJTNv(ryqN^gAYn>G} zc1;s>df3J^_*Q@@i~}&-1hCd%b9IM!@gSz^pw=lHHfFUe%8esqN=#Wv8wIQAN>1iB zhg|e@%sVz+>_CT>?zsF(stVJwW*_AVSin~7isdrw!E><4~|u> z&!&m|sQ6fUB-9d!-!zp^iZ{F+=wi*u%FKx0G^M?~rZJL}o;e}g$|udQX=-Qy?=0lM z0(`ZzJ^6DgOAAV?N(xF#yj6|ShXKWb(6T^2JYlI1)Z)*cF$gO3@T&Bj>by|X>Tn=+UVdur(tbRj zY>3Nj{U7i4%d^RfyiO~~?2^kin_}EHeHj*#qy3=t|rSAL*ju@qbx)J0UrGxqoq!^`xIt}df z`G2k;673ajk9M3^sf|*&H0-1D(4z!zEgF)MTEMix|DFYsa|M!64BvOE2{cE#8_32^7s!C( zU_&!}Po-PkX;hbevZ_1XjHv=iE^er+fls)xcdNkp*5={E&Gdtdp*lZ&rmF|-NYBQm zA5N0-S+r_3O*QrYaJVOBq-6?Z6eQ5!b@PW;baz3LGiX-|uLw3b2Wq=hPMRPPS8=!o z-q7n#H94JiQLIUK%1LQ7-+KSjK)1bN{CH}T7WjJSGM~Rb=nr?7cXBGNNMtQEFHqN= z^7wHy_vWUS##x!^HU4qmU+S&93^*zu}j@1u$YsR#(^n$YdgLUw=vTkdXk|dD9 zMvCt0KR&Uo!NIy7WS=&stwPNq|FQ;ucSWR*ZfkNqyd2q`{`gUCRSJYcO`&cRjBHDQ z9izJhX(QU&(6ezdeK@^$^~=CMy4PJH2&HTY{nO+M&O-CwvgH?0**0O~!kRLW3# zscQrEfo1+kw{}e$LT|FbDtP&{ySk?g#y-TpMYXm&?Qw$yG8D!`e|;1EE@^k_DG4<5 z27fbt1Fk#mF#`qChiZ4Hm_0xs>BYv^V}1V6vKIQrZ+Gd&^{2Hr(siev;-a-*2fuJupneRQUvUyz?*l zc+?G@Dw?djCXSQorR#BnQYCun0*!F*g#3~22j8)FTrmb3mUeIL3=vn1sO#(LO_64! z!(vP0ipHkZjlQ1T7UQh6#m3sKI|C&O0*S{Kcc+=e(-E|#u?M&ESPL}^bmNwqZhLVO zN3-qGjY6OQ=L&Y>sB{c+Uah@q{n~b|ZJ1z}HF<~iM6F7#k*7Isa=tEP2|oxAYNM_9 z*j~3*NpDNn$=}J3sN2>1gfj%cb(C|hvp~%hw}}sme)~uEk@j-&TWOZG)_#k9lhjXM zZrfn1(5_K!%5%zGrI)fz%+!uozZZGOyH3rq>3?tIW0q`Mz_bATxQCEX4DS^6X#by^ zEDR{-dbZA;j=DYD|4+*ll8d>+-2YFVAdHDtric6gDdUA<(Ih?D15ZZ%p6~xBr3oX7 zxx?81Ps|p^7juWb|IcAfKb-x4HdgI0_WxPw!YJA?dcOb9#IDrC{eQ+-!Bx!lX#YP! z@1i~0|EFWVJ=*`Lp-B#7|34lp(!>3KD&~F|`~Pv+*?PYJPid#${r(@^C~!d!Xa7HT zoG`d8MYl_umtgsPU-pnKOSe`!`%P( z#YDzdzGwUYK4>H(QFlh_jScDf{yz?{-Qn;5d(9B?i@E4d_}|$7Ywa^Q{QbW=RhSZ6 zgTvbYE4Yv_s^8Q7zY{xEG+B4o!hx5r$NPU7FI~^~{}Nj<_GtfaXDi0T+y9F=EFRAO z--a#j@&4bMB*YhUw8h<-Qos?kNBe&s&C;{|zaF7-fGw8lKkqa^GnO;RFrx0 zz0)%$OiY_NF(*HB;w1P?|3uHk^hr6BGC`D)ljljxoY0!W+sMWN#diAr{R(e+MYX4- zvas4yR#xDt^i-FZdWs86W>ps#=9iaNl+LWIo>y2=`C!-)I z)02}kGdsrz-|k;fR$h99C&x3vlaZaDk)M^3nV+ARmo>qgIUy^1LWXxjL4haBZ?Tb9 zzGH1GN~_BAz18L3veF8uYKeDT#eA=~%v+8DosSlg;mMrfO-q}Y<@EyR@lNz+=TFL< znD0r;@}_5J=F#W>JpKOP1o-{Gfq$7xY*xgyfN25K0;UB_3z!x#Enr%}w18;=(*mXi zObh%ES-{0-a9y|JaRB$%a3JtAgjT*oT@K4VU}5|Jtwh^OzyJ3?WLmQr(*mXi zObeJ6FfCwOz_fsA0n-Ae1xyQ=7BDUFf87G~t9{)aV-ToPcZUaf%&D8l{}w#|uWcvV zYudE{=0DQ{rUgt3m=-WCU|PVmfN25K0;UB_3z!x#Enr&Uf5rm+gg9d7;)%WOpFj^H zjOF8qjT@oZInGZ1fVTYb?iJ||=HJB^1eUfeJ7#{cF=K+wBHE=f7OFc`u}g;T+AALB zbCyi}yM^hl$`QGYsZ&_(Yb#Y;dcU;AMueZ!wUR_j} zhXP-*rz~|gjbdD0mUmKKLB@paf(&nFURJ@R30dBWp3IEAoJkWWq~&E=Q#hVh#J+w6 zt;kg;<>o(>Tyx}rhh`*pQo%WHNUJZhV8xzWCN`MGsXTd zbBon+_orODD7RA0UHsvDANRBd|E>v+>B}xflZ#s5i;cOfllE=+CM7XsZ=}=ZD+1)j^Rg7chug7i=*Shul zieD;RujC%tr}Z9z`yzLG#8=#~a`0i5-`3mPxNd7QU3Fl;Zw+L?Wxx8s@wxR+T0`R> z_vVIgT|f86AAa*rh8rrsytJZpW~F;xVMUdv$X!ucRZv)3Jt1wvgzEg#;^L~3!peo! z^YW`JOG}I3j;sJSJu@{U4gSwb%c?Fc$uFuZ@PclE*HhvtT3At7q2I)wl9JL&Pi0|g zNk!^xc3-y>b=LsNLq_0l`Lue+NyS}Nwk6UZjcsQg8!q;Y{hN|LJMER+(g&xFe&N^m zdun9b+3@oA>>4L)x@EoNbj$kRUK4*;MPlx%bz_&GGOwzu%KrP7Ey=GcFZY(@FRbts zrOwVTZ6EH=jIHqwy|&}&EphdM4Y{q~RsQ(m!dG&4lyAu^-gxw%SzD|klJ4r|IGI$l z%bSyq!$Mhk>8x^3v3q7=k+;H~xL{&-QuX}8l7iCt74A8Ol@-|_Rt)msa%{l4zV&A=<=W{FLQh%#|=9JudgO&N@+*hDy z{E6jxiVKStrp}J3fiCIJ2(1ZDy`ouz^^0?qD{snyeYBA|wsynpdhMprxs!ICC12ls#^yvh%($(_`=5Po06gg^(NwiDlotS%6@^f1+OYW0<-{mIZY$W^rdM#-P~DzuFL15JXH~#AAFrrU4;F59i_t3tvj}#mji)CyZmH;-yXNlc?`aqB{qL4v+Pyhi zRjXdb!3la5&pKkmycZ+aQfLkQ$t4`x1FJ3)T63r!|9rofvQTKv`coSd^-wwI39aM*)SS^b>8KW3r~F5@ zh;=Y@aM;LL=Re2LF%A_8>-=Z-$rvx2{XedAJA*_W9%8A`I_yugbLwncvCumBKhID1 zHdqg5VCmo~06zrm|JBclmZ-g|ZPFglH1%`Ms{X1CfnNkzt4-4mX!Y7n+C^HGR`p*U z{>{uy3z!x#Enr%}w18;=(*mXiObeJ6FfCwOz_h@>Z-HJh$6E)e{4lP~r{?UqOH4PtOv(4Gunmi~0&^@)(=&vbu@%QJabOruLY& zU%N!xqVCa_!)`xM8?O!0B=v6fN3~h|Lj6!%ukN7#{reZgOlexcw18;=(*mXiObeJ6 zFfCwOz_fsA0n-BicP!Am7st_8T#SE~{_69jj}fGdrC%p40Yy@*nnmh^d9?{S3%npo zI%XEvIkV0pi;HTtWkqYDbrz|eMM`Ipv$M$2StL_YY=i7V-_Bb0&LXk1$kth8r6RjM zrb!l_iDJqWct!h(^x+GLmZ3eQF4P32+ zW!?2u?I+9ku2G}7(?&)7OX~wQO^tQIWxl##eIOjm$LE)OJ(XT}r6;e*>yC|aCq{$8 zTKCf6vS4Gx4KHB2OR9>B+~9$!s4VvsmQ=dyR`_C*MFWti+&j}t-!p`_@0dn7F<6`A zE-i5vc#FJHXuhW+A6_9#anow~4zHMKl9)oUaR)0R*w9=btO-WkkznK6*tVp&LxH+L zD9~6F=pwGBsi7GvS9^#kUqe%EOZ}k|`<4g%wSkbYrLoKMqhRsUOtVFvf>qthrq>|n?*BBSq zfcdtp)blm6?4xH1?>5h^^14~h?bO;brHPU@u80#|E*G~s3-3)V4oUBJcO#16HUvXJ zhYc(Xgu1)|!HlTc!C)zHZ5smNh`*t^^Hpf}hr$6G51k)+LG->(ar*~6a z)8@D%fi-PILyFt5TgM20BoYcPZHWZJo!XP)#u|lu%UYnd?K12z*083=YR8NKOdL*( ziB3vtwf7QT#iO{^QW4mBMesEPRC#t-{q0$6%XI2_lpv&2SrN=dJBtU_W;0JBaC zYoaR`YNB;n6QhI2qzm^tWEG4goys<1k~Z?HNN0jgh1lC-Gmqu9c6~24<}hZ0*ku3K zOc0X+>kA!b9_T1-7Z301&Ye3H2shQQ3e?6%C#_XPmnVU19TB~WnSt7_e~{_xVpX?B z$9wu9si^t&D7SIhVWh&_z0_%QB`0t&gR)^Mng@;4d8Ol3j@60DJP|YWJ8Z6;1n&5b z8AeSLtksh{50-74W^Cqd(xlDVvgk@k;7-ktSw841hp?kvSJBJr(Lfb#R{OC%#l74g z?qafOt53&^++k3NW*d_rc2rdYvQVq49mTM$9 zXvunn4@#$_vAzuJbkE1GH4d$tv`DhK#tr6Ri3c|uOu~AX2*-}?Vfi3;cRS^nAvK&x z=cS}Y_Jib2dr&m3)Lq`#-P)##FuSK)(?roVcrdpyBX*PyM{~8eyXB(N9^G?MmZxxsz~NqXGM)&(*z60U?kAsTLGdl4#2RGgtZ2n**nCG2QgI# zwNBZvF{@osZnR=bOj$`A1*_;vPUbe{>O)w&1Rct-wX<)B$R3%wLz*60JEppaT=aCz zJ2qYHK!=v@xco`vaU|b3hIK5a!*U1@|*Ew5Pbc>SN*M zO`!;zoZID{G)}P5IhtU13a_k(p5*hlM4B*cl$EX*YHd|G(KT!s*BXf4GR=WdBp9GK zjm}xxx6hD66Fb)|c2c2jGqhPTlx?p6N!mJTc5qzsGAHEY;GtKXJgdRx{!?Bnfp zFE48+lRnx;qJ6J@sePh-puMG?tv#7|qXjf|IYg_1l-FX1a zc+&!=1xyQ=7BDSfTEMh`X#vv$rUgt3m=-WCU|OKF1*|;BS^8_ciOtfF@&ZzegnVDn zw^`zlM{04QzJ^pqsvvbDbs&|I_C;z(Dk8NZwIbyyh3Eg$5aQ(45J$wm$3EFwEc{(q zCk*B$NJe-8QuN%wL)N8! zaH7}L`@`_O1s+*9MxqE0iK1?~U~OluWZi#bJgx1lqG#AHBkCaRtVtgWLecFslOjXl zxe)k}`b4V=b!@8fQO8s}#WwMdn(A8`8oS7vMb`%#16@Q0 z8fy=pl13gR9o_=n6da>-s9X+N1CPT*01fZYLgA< zd|$OiMia0*t4*F5y|=>g9nP>sA4b!oh0t#>N%RB)JDKD(yB=u~TtLn>?dMS9&^k;y4_3I;ZI@ zNoqF?b&iMOs8cx|2awoF7fxe#&ZLVb9d!Q3uG(>xboeFeqn$C{(sA+-Wwt*R*pn7S z=kInU#5|&NcfLNInzngmUpyIQo{?q8aLqHa?09oZ^yG70@c(ybWH-eR6^#EF{>Cs{tRp+T-KZ230mD(d8?M7Dr^84Tlkm^qeRMT%#~ft+udHy|4^szg-oLfI ziFyA2%Rx>6TnT3Y=(B%%4gmi93+(pIDwq~9Enr%}w18;=(*mXiObeJ6FfCwOz_fsA zf&b50fIf%sZ=uis`&lU8PoPvnzOMkyvBe=DhjJJ48d4Rhg4BuBfmBA?7pWboh}4GE zij-$mutEVf%8fv|YVB9;2kk5EQ|&|TZS6Jf1??&A5$!(h4((>`dhIIsHsA%?Iog@p zDeyZ1$7-v!mD&m|p!u|gT7_1u&C)#D6fFzB8knSw&<1NRElzX5FA4lh{aO7^{X+e_ z`o8)%^%eCw^$GPM^&a&$^(OUN^$PW3^*nXEdWL$E+N!QsTht~ssMe^9)%ogNb&l#) zbJa;|hB{6iqYhIO)Ob}>C6!lxSN^GdqkN`(q`a%Vp}eF#qdcZOpxmY0qTHzLv2Ydz zyFt9QUtL{&OPD?%b^ClZwSk&?H)m1FUYYD0NcIjTdujY6uZwVC@`S-0B&Gjhaw*jskR`XYr#IH73;kkrme1CrV$CA8!~DAW|{Sn{1aj7hBI!O5KrTmvu3hoIk4BeiSxHkq8AK(-Ah+o;NTh-jFn}r4D*M_ATgDBgpCLkj?Xm*+AhOFEY*xuh!^!5cWHZ#DZc+xTL1*KocQRh< zc+#3oC}qZ*pjW=rKmqrN*0<&gwp3Jd9)(_~VQra9IG3J%x3v$5`%o zm27k$Kk9fIKPiosJZvycO8;SUxZ)|Yue83lqTMJsX8qLl8Sp3gn(AvOkJsCq#1ghk z+IcJ)vo2>{2K@1K9GRZV(hlt^EgeTn=)3Ce#-cH6r>xC@KMNg8vd6LX2}9eJ4Obhg z9b0F(+GEyCT9W~Pc#EV!IvBR$O6&g&Yt@AUbPVdUudP;(8NPb#YO0c*te4!$V58fY z?B>eCi^KEb&q_<4I+mpy(^WceeV_rJf#x^0z)3az4l4`QgyzGa;0x3TrX;b{qYjap z-k(O|l}lI7hd-Vso}9=MkLW5f>s{^AHv60B!=HtAudFd$HWv&H&1GqEOaVKWH7#zM z4}aJzM?*5OGmQ0J*x6s}3+pwF>6VRZWLV>vMliB}@+ej+OjEJRp;r#?YMM$8P6_6~ zAM08pS=!EB3(|JowUU?TF3*8K*0o0HE$-B{Abp3fmAq`)vK;uM7kK(`y~$m4t%G)~ zI`!z`b%}L#ppZ38FSq?w0!zEwm+R)@{lokT@JEaFxLL8oIu{!q^tY|z4VK%2a)VdH&^H?j4SL{NTq50S*l@5 zyVgM}H}9(~F7p+87WgWx-jQC#+t2HRIcL0!r5M^pinas=BMX#*_yW-PrSxM75}?-X zUv&I)^Lm23QF&6HmPfTyc)fFc72e9J{iaG& zdrb`o0xQPFb))VrDVWl4iZrFy6jblkje34n`Q(0+rOCY}Q}r~Bsdsh3is<#hwTm^w zouOp(%cuv*IQ8HKL{p@XOqbGorBn4}#YOisw%ZzEo3`jSH_-XFE&^J0>rkL`Z>a=Y ze2WIOX#Z@Wv-iWnac<_#^MU5y42e0P_W9v-chcG;MDN(9|32fhONL z0%+n53xJNg0Y0V24ZD6C(4p5wfDXQH7|?`k;b-8u{?|fvxPI4U0`0S>258(KTB3Tj z2dML^H9+lG4F@V*N$bE}33VgCT>-J==gY%Df4qD&(629pT9Gd_zT&xdxA{pT$Qdh>bdKyTU!H6(j?<^sKOC*5RUd+r>dd(Mpmdc_X5HQX-&@93brMuo<;LH<;=A}PdYOZ z=m}fEp5*u~HlSD&kW`->0lMJip+M)K zL|ajD(nz3lPh0}D^h7t%qRn+c=WM2>9B~58VfG0$|NKqsf#z+R0d(3X+PcXbj{rJp zBdx>4Rxi+;R?273v;d9MsDxVxyZ?V^?`kh=Pr$qXH)~gGyR>cEN!l^6)34Kx)XFsP zUw`kfT&C<&&Q-Q5rzxA27yu$ zs1WDR&TpNcIS)ABcE0L-&iT0W0q33YCB*BTS2!kDY_Bbwe zT;Mp{afahW$MKFej+Kt19W{<>N0p<*G0QQ-G08E(k?a`h80_fh&>VILC;uXUCx0$~ zB)=oSCOsBmUqfq?dRFI*-x{dU_aKr%HCvOZui?4*(>ZtcCUT9J;$DAPqGiUC)oSi6}wIRm-v(T zjrb4oL-8%~74cc|G4X!!4soA&t$4Y(OWYxzDV{90itEI%ST6>|qr~}QnOG?1iBrT( zahy0>94ht~<3w5HZNJ%muzhL!yX`&O8@3m1PuU)}-DA7ecBAcT+aGwj*towqn~%Tdr-QE!{TOHo`W@7H?B+qK#O8wtj2<%zD83w)Iu(bJoYL z4_NQC-fX?jdWH2O>$%pmtfyEvTGv}6)&^^x)n{E`oohY9ns1$I&9bIi$5`Fg0oLAD zhgA@M7k(7J57aASk7P>gE|HQ2DJ=o z7%XMrXRw5UkHJw47Bi@3a3q683>Gq2z+gUuc?_x;R5GYwP|jd3gE9uC3`!UjGbmy( zhrtmH3K`61FpI%V23`gQ4DuP|G4L>$!628xbOzHHOl2^I!DI%L7))f4!yubM7K2O% z84M;cNN147U_66V2ICl{Fi2)FmO&DOL~w;3;Clw&G5D6jHw?aJ@D+nE8GOOu za|WL=_y>be8GORv?+iX>@DYOp3_fJ=0fYA$yvN{O2JbLI=<25&HUoxy7i zUS;qKgO?e+#Nb5+FEDtX!E+3rW$+Axrx`rO;7JBgFnFB7V+u#Lf124^uilff1SXD~RO!D$RmWpE0ElNp@E;6w(S8Jxgi6N8NmS{ZDhk6f+C zBRvl3u}F_Wx*q8|q-&9`LAo00Dx@t)BS^zYLr7O5ZARLJv=M0o(t4yTkRFXRh;%v9 zWk~Cg29VYwtwFjJsUPVQq&}oaAzh5L8tIWp7a?7UbOF-&NarD~LRyKm0%nupYbbOzE~q|=d3Lpl}d6r_`pPC_~n zX%5nCq*+Kak!B#BfHWOx8q)DdQ<08Cnu0VL=~$#mNE4BcK{^`gD5N8ijzBsb=`c!R z^E``oBy}KltYlEu+5dN7hf~(!Y68}UZ2Wt`%EtZLwAkPyPF=zpDRG-&LQ5C;PXn*Q*z*Th$ZcX@0XBP%G7G>I8Ut z-%qtFzbKz7Ps20%i=c&$PoQ<%0dR=-EzF2UpbhUK8bb@r0lqU6t-RsA&bKPgZ+`h%W#(uQD)_xT1OfBNe;tjCl zJX$P(y(O`I0K3Q=Y-icl*{Wf$=!R1h-&;Sn-fz9sdW`ib>kR8ys}uHkuL}>tZmv-% z6UGWo{!9LK{!adKuwEnldg4-TzE-5o)Mmt-hv=<2HJe7%AJnhZ1L_; z1YgER@MF|Dk8+kd^PH2NDb69zUQUbSd&lRFcO1_<9(UaDxE+20;zGw3#|H3JG&`0$ z7CDL>(;aD!;f}rzoBW6Twfu?vp8UG}BzPt6l=sQk$QR0I%csl7$*aI0u>^b(1@crm zQ%;eG$h~B{^o#VZ^p5nTbhmVav|HLHohlt8MWlN0H_Vetq?yumDO*aE+){r@20z0u z_RsC_*q^sQZol7tyZsvbh4!=UC)$s*H{0jgOYAejqmXS+w7c#7?Y-=F@fY!1@Fjd8 zz9~K}J}llX?ia5VF9I*Z7IA~PMr;YYkY+u_xvAqdi zgC}iw+xFY8v|VJ|VLREj!4|R|4Zea(Taj(LE!&oA8*S@v>t(ZBf3bdUeFwY)&sra~ z-frD%z1n)db({56@C!t&_10SJJZp({rgfq<%{tsV5WE3`@SE_Z@UifY@VxN2aHp_O zxCVRx=L@F`CkV#~5ur{vN|-0ihQ0qpAx#)A3>10`0{=kMqD@z)Sy z6 zhVJ6-)$tx3@5b1>Fmx+-r;c~%c)O0bq1LS!+Q;3Z<9;1)#@Kxrx}Lj9$GtkF4plPlWu^Ftml+s^eKYo{6zrFmwuchK{G} zc$$u7EPX)QjG=n2NykPVVF3iO^%x3r zD|CcK5J-a<3UJGHT&5!|g&;P7p`~1{j<6g8=~4_G#rbtyq9ZJdAoeH>E#emISgj*0 zjUaXrhN`%QIxf(0zK*a&0<9_x&E+a}tk4k_N)S62Lq%Mfj-@)5=m-lY&?>^vY;KN@ zN9YL4CWxJlp?q$Zjx%-i>Ilmx(8|ZqbS_UvkB&2Rgk=B7Gn}QSY|;e z5ksT6F*?Fh3#6kkG@Ki$BP_Q-Ivhi84i;Pxa$_ig8>-_F9S7?;2(=P0G=Lk3p#d0j zas4sm!cZTspN{c5_Qlvf7}B`jI>zbP3u845Nt~*qqN7tshmJC8OBfP3yN;rcHXW^~ zC18l-cpc$x=Q@6-<3Du#6tzCV(8uKO82T7P z2gpYlI)I_~$cH+9pyT@(`yPhgBJb+>j*f3*>{}RmmHbV|H+6hN$Jcdy4Ygmz&KVWG4ud=NXG|JigPWwkKB*ad&qq{-ixvKVCXJ_b1k_GL${MVb-V+0Zby0>%Jz|4 zb-YE#{W{`IOZH)CFS!ZR?8VUa?*KX8f6iN+cc9!$ zA`@j zDKDHOTnIdT?jP$p5jb2+*srrl-;goVD{!EKTOgmI<;d^Kd*nMEinCSer_59?*3Q+A zk{3Id%CnvM>VuBcoP*^!^>bBFPtiE%-P#Sxt!k0uSI5iFZyh%{R={&-PWnOmPOf_y^G?UL@NE1B`vc+- z?Q(60_!D>l5{27^^>$g=D3{2CglmOHwb_{{AESOQUkYacMoKwiAKP|#*Wd_sg7OgT zpl2x#=lAf8e~WXq)9=i7{N#8Kp3l#6Siq}rs$2&t$`?q>q!hlFZIS&u`-?@Q-N$1AI)D(!QrkNr0L8TK$dpC2UNBAzPd zYd_c?Q7V+lwwr7xiO*w?i4rHDVDS}%BXHQ0lWBk+(1Zh=oP;s#)E#Gc@B=LDuplSK z@uMt0{Y)!8S<2aBGqK9Ni)F%r0|heIv*7J~AIM@kXF-MLmPif9#VQb#!`ZtU@~;>< z`Gc0t-uEEC$42~y5qRjH{Ho_peu?MDS$vTDYI?}f*Vt6wRI`Hoj8e$Eo%E+@qJQ?~ zlQB_jnjcX}>l2gF53v>aUgL++Ccy{7YT!sA`K}M2WPzV$q-mlhe;b?Nn+^%SMpIH# zMAg5FRsRyBV{`i=Hv044{21dx;6YCES;uQb{(&jjQC{*XR7d=Q)ReU>>rS{IY~d$Eb% zjZOScY~r_Bu{3eC*tcTi|JK1u7X4f^?YZQ2%tE)$Yk0v~|7XVWg~_Y2 zg}lIY)Yvj?`=tr=^ZIKVhMn2S`H4oA|l-&>H0eXAm zTP6fNQi_G#hbeX2->dM0Ezu*D%g5?CEQ2~RFZ3B2lING@Z=z~R*Z zxwL&=m$0aYrd0v5JGN>Uqs8Vog=)z~$kG9p>_Qd&3SKDj@fHw=$psyH!TD5;_GlO= z$$7Ea?(Cp>uAWB?+0k~1&OzJfH#IcC%V*?lT17a-4exT0?Xh`n!$32e4z{uzmAPZ_R;Qt&-ojI94xk5b-H=l-`eZaN zh>VVK63S1c$>=>wTf8~8uoGwtX$;vEE8fWJ8}ptBX~n!_rdhH97IPzMdiruj?^_|% zHyYBek!KJ%5lY<*ahB%vzCXeI{voYz9Tc{@#<2^+pW!W39*DGr8Y|)3p29Nu1rXnh zH`1!`>Sp>@W1X+rSMPjNZYK8rdANS{iHUjR#L? zULb?19z;d!(9aElsY7`W6;5&S>6Wr4SZBaXFtwiOPqz-Z1oTT{jLeS(K_NDsSsmv! z=WP!88=}(I!p|3n`cH)%3$a^xLd%MR;RqbcoJ0mi%P9B56x>z@9BSqY#_)4tsxGhe z!H-OP%S${(zM|56pzw{qlFFHI)V;D0euP?Wbeu%oQLDO&AT*M;D5mcaE{T>LZe-@N zTnX_hv}B(T=T(1A4fHr4{rFwq-j3(!RUwZI;d3oM7`S}!3x)I(qVSpErE4RB8h^8I zjj#7JkVX1HJ_oXBYKi#ZS3KcGA^Jta2-SCG!Nam_VjT<_oj07H1zPay&w)C4#UMtz zj$Rt7{UoSu8_Z7wwTjAueBXReNhKVchokLYUr}M6&&R(E8lT`?2Ymr+w9ZFs(!0cY zDN)e&tDte9bvst76zW9ly)LHCz3zkPofut+)u0O4B&>Tcc!bH#7{pIuHrIrKhC8Q(oZ1YE6KOc^60? z^-3b4Q6O;xG8KWEmQWySTX~nJzCyGFLJ!xU+-7$O-9CkG#wudP6;s4|GDgl0n;}%?Z+PS44v;)LSUrsm~2dK9D zz`LNb+~X@KtnlO&c?*pDrvFCJZTp8q9&~ut@9;~-0oaM~msr$2#HF4=y&H4X=i&Q) z*QuXrz2Q0bt6HjdmUe{pxHc8e09>Sfs~u1u)Rw`U`WI+|x?gi!KG8UMdVP^vpt_Xl z&V9~v;e30Ryjgk*c9@gwE%to-Bsj?}!0GIr)>7*P=ey2_<=f=*qmP0e-~eY^8#J(LVjFL7> zN!GJ9S$$i5O5LQcRFjn7lz+f;{$21c!&-Q4*i+;ZD)lqt`rxGx#BR}OSb!L z*V?wg`3ASm31{B#hG*HUtV^w4Ya%?az6MS;OciACWbEaS!Xg#trt1M4xhDNEq3I>*^>3zR}N8r zK)%enKt5AmEEmc=cz=T066sy(dhI9ZlNss+sX}#2`O;A96xqdpz@Kb+hjn-yFkuYi zYA8piC~hgr{Gnx>A34~Ua7zq5A9A3`9cAb(He#!hgO>xjBbi=ZGq=dlTZkOZZvk?& z-1*4S6!VZ<1u3eKqcx~B^ePO!a>{{Ph?{HZl_5uSE=7*!T!I|UxfnT`a}jbh=Q)Pn z5r$qNjhTbgXXwEZ{qd9w#qd6BKM{~|cj^><)98KXtj;5G_98Hmn98EDDIhtY` zax}$MKoxCl+jk&k)vrv6-@k26D8fuN&NJ$ibB)uOdh5{0ee3?aK!D5^^-{i^$OwFCa%# zJdYf;^K&e=xrIDy#6H7huup&5kUhm@b@k*)L-qud)zp*64cTMJfd_;2Fg*V zQq-k{G2l`n*BUz4P>y<&$R3o@`d&>r>M9~v8L}&pqt?3uxyHb1ayfGF5fE}2<=|(I z{Nz%U(OfQJvW6zI8)fwBUX0vo@U2{g9KBC=AxCR|A>}{>z9E#+YjD0Ut0Cv1jOMb_ zh&|Vc-GMS{yK`7Nj&c}1~V+6-jhRy=V zp#<_c78#fWj)_XvqYlgf>reutz*@%C)vbx@tVRZg^;J=wmZ(l7suQLR9r;5jfv*v) zj7BxzA-dtp$nq`!s9<)-FfZ0lrf#k)}s3MyE92A4* z5z+Xa`O0~6GD2`)0|FiF_j zhwh>KP!}H#G``i%0SA22fK10*2z+1m0jl~lfkRp7>4dlN^<^Sd)v-vcj?J$U3xfQ5 zods&6F^8H^gkKDy92$b(HComeJWgCMjDuCB`6~`u5ea6i(y~d3--aEJ05lHhxgsjazq>p;H-Y8qd%M){|B5Ge-z$ezZ6dEN8oh0 zTUMn{q^G4j;f($cIHMnev*4rQ!*DV-zt9B~*evZ*v z;AH+XZHcxJ&inr&ej>gH@15T*UL)=lj}eQ+-nP$ekHRVNOX2kQ5?g^yl?$|Aw2$B& zh;nTX>^3vC6m6syui4Z;)F0tnhVQDc!IumlgSQ>_s#mMK;eCfw)OG3#_;O(-e6uhc z-gg+P_EI_JTR64k8%U-i!V~nR5mCpm7uanDTj0VnXsoHti;0?2(0=!{ny~z z1CKdxckXpw;yll}6;A4}bB3HX&Pt~jzBQ2H91AX98=Tbt0N#gq)^WGv8plpJuW$^! z6R`xoBQO=-iEzU^5x>db!s+~H<-6fr{!V!dd?ny$IFmmQyzdj>ghoGEfb;lY!+HFd zr3a{r`&z}x*Hc(eZ~ zd!;=O-kTT=Z}ZFI*W#;i>VBWN8_wIGAcn-{a898T-qoKdrivrQfuh~^hwXcKr{Z`Ww7^{|TI}f7$vVoUFgWdO4h|KiPU5oU1?D zx&%(u7g#65srn(-zE;^v;7t7ic(?v>c&~mx_$qb^Ti`r>NLUW1=_`diI7N{v41$yN zcJSDI&c6xg=pW_x^Vje@`7Qhje28BT9*rVCkDtho<_Gb;;cn3XiGrQ8^y7|^1o{cc zH8Qu};MN)3T3u@mlZ0h%wZW}2xE6zp==xzMX_mQ=!L8Kenwg|t=9&zy(cl_%t$HR2 z%G?TrJ6ewmGD$$@mK)qMgR9fE0!*@0=4uVDMvq&{BuB~MAHntmx5VIly4F!lvPk9@ z8(g))9jR+AVv;JETWD|#3~s)`&C~U(m}IUDo)Ih?xC(^f(SBYWOTJ)|Ph?oTpf+%y8Qeb% z?o(a=6DIjsCV$r@A2Z1T8BSB;s7wwp$$K(5H!x4&J}|iVb*=Z95&Y3rzB?3{DNy2ktpN z?pY>zS|-ovlBb#ENtryQOP*ws$7S+_E_s|u9+k;sy5vzNc~~Zo=#qz-B$9(Oz9FmfA<*(ZY= z19gDA#o+cE+|7EreM|!1V!lb2>}8VcWpH6&4#3@@$6e1P@crcLbjh_$vPUM@=#o85 zaus~*SeIPIBv;7fN?mdVlUyppdKt?A?lL{@QYP6glS_2TZYJ3!gX03VfxAeL+r=ao z$mBv@asiW^2Ve5lCFe284jEh)m>#%u^|&2OvRwv;1;zn)wjQ^gNw&&ln=aYPBxlOx zEM0OYlbj)wExP3YvG*N-aTMqNGqcxruS&LjKFP9HvSdlNT;y)aTRHRsJ_-KcERtQ*PNs$#4w8Aw)a${lwRi3riW_%aXf2EL2E}<3#JG}T z6qSlt1^2Y}K(Q&xB(P~U*m0lY_&M03>lW93*MMuSE6?SHv+&MQ zBFbu|T*-o6^zX{g$Ul^Ckk5j5zC-d9S#iAWcpAp~cffgZy^bx8I>%z1;kZ7UYZda? z^31_-YiL7xxIEn2KQh=E373R%6B77%FX}=c{>+_*KF0SJ?G2ZyB{)Y^TBc&)a@uPJ z5y5uWVcMZa`)|Mko1{upyd*}0-n57`U;4%@3S9~ky}KO*idJVXFcb(k4r$viK%6vD zcEz{Lr3sUo%sbIS%=p?&TUt8$wjfxeFqOT>6DUxHMzGR36BYIwXg7+3H_S+V7Z#va8RFNJZj zOHmUaJpqa7@E$d>SRep4q))K-VuYD>b&8$BV- z8u&a<>p-MaCDk7P%11c185F{F^v3sV!`4U$qwSAWXQ2toMB54s*AVRHjM*1x_64Qz znjZC05{qzMSX!x`qDJ<@ z)45MAsGdE$0HnqjmU=seBkGD_pcU&bWNDSE(|OqH9Isw+-eY=E5^hsx#-!49Ik~Vk z4#&$n&MBp?S8^zBSfpid_jJNDWoURstmdn;pm~Q@03UXw z29#q%ErjBRj}x$Cqm9^l@};roBz@!kdd;ctQU z^#7PI0Di)+0C3m)uD4vTx?Xa<0N(-lwd+yW&s_Jpe&G5xdue`O3DYyJId?I%kX`G=ai?E$CZbapTK_kdz8DB z+u;O<>y>MiE8rUe=P73@rz!iCA!QeQC7?q&R@taD!EX9$_)fr5n3jPEfEVOv!n+*z!Pf%5E#E2MCf_K3NxmAs7jTh$j(oa&io8cY z0lpXzk;C#9xm9kE*TTF`rMy_4Czr}I>-{ z_$hoj;CpcPz#WcT95*MI32Iml*?T9)~g7-%H9X*at$5wcA;V8#?_Kr0L+}-WAKLGMa|~{WQ!uWF?+9FB zzr=nX%wU~n-v?h3*ah!)bl8uzZ?reT+b7lbmG-6fa{Fw15qwP`V4q}n+wFF4dmp|h z@T%=4+Y7d5ZNIiX3SShs58jpdw(U;aZMGZXn*vwcK5M(kc8=|I8=PukJHd9mEn*AX zw%A(XJczZnkgd|T*f!5r3SSn;wfSusHmA*M{SeN5c+>id^-tE{S)aB(0bdvRsr6p# z_pINv-eJ83zAtbs%&uK#y})|5H40xC7_s(Sd#s(-t=7%(je+&>PR45Ma_d6t9QevW zzBR|1W%XKRs|4Q}c*pX(98CN-y3MM)LW`8D=kYcX;fy?Iz zKTCKS;U$C@5}rp0@9ct4*ue>SCgJIXqlBjro>=Di*hL7(@PIpdZ;by{3gc}Lr5E<|T2k-#G0X%?5 z5jGRT2|VD^K)9X|4%-12IAR8{nh?&_0W%z_0|=+-09Ft#C0tAhr{#cqIUyX817Um?7Xko4U1c`{!{ zcnRS}grwE*b|12I9^tu!`w7n`Jd1EI;U2=>gd>E*ghPa++ny81JV4k_*hlyoLeg{3 zPBM2AZYSJE7$!W9kaXTdI`1K!_Z&m+r1KuqdCz8YA)WVZBs1x}r^3Lef?D@nohF zcTsloj%?%p(^n3nh!p zHbj|fx=hT-ly{l(A|Ir?Un3-WN#|usOC~*(8_Audl^2njG(nz3W-FqD zQgl#BIjAfg#EFBRN{%bZ&wj!a38{8C!enkCtRW=*bdWYW0^}ki+NlMzQ|a5Ol@T-K^5`LEO0>U#1sV>{8r0kSCdlR`+?(CF1JGIqzKe_O2Imt z%z1=fLXK#8i|}Q_7YGLky9tjY+(=kQxRQ{#wGg+KY2-rsV{wt0c$WTxW{LDiqEeRr zL@tzT>5pWldMyzH66v<|G`Um#l^!QE)nAEpULt0sN64MZOL~aRKOrQ>B+^xhv`G2^ zxqpxF+l1dDyo>No!aE2L5R#@zUnDc>xpW1Ysb)!^B{T6aT|(xI2`?hNknnuMa|x-A zNN1DzEJ7+Z=?pTH7D;1drV^BPk@_arO4+!5U{0HH?gj5&UTNa7SQxW_KQxLKcCL>Hj$VA9M@F92+JP2+C7mVzk7-80r zpodS7gv{H(^c1>zx5CDMHp%l4^S%mS{(Bg{`*$0>>wl4V6u$Yl-P;OZ0$AuR@Mgfd z^{;w<3*OA1$$-g#$$-g#$$-g#$$-g#$$-g#$$-g#$-w_S13o)^F$FgCXJ?4{{Pgww z^tgi$9LCo2vABa59HMJ@H16O5htYL>H16OMW&D(CeoEZI2@WR*`N?qy1sqNa@sm85 zEc^nSMPOyl%D8ot$XelF5w~s>lPjlG#;t8)YDIQM+}bQAEu6kEZfz1-3)BU1Yoo|4 z&n=Io9FRmY`)(QguGbC|5s={k_p$Gkv+u+_O#LT#xVwzq9rG~tJsR%`oc!ocDbA9>6~DW8Q9Wzqj7I+6$*4nm>~PlL3>wCQp~JITSKA3pX7m%-s(Om&1W>?w<>%!;U8B5}`P3 zWLgX%yl9fHf>)I+WLhg6b_vf%vy&vBE|CaX-mW%c9HO9=uFF$&Hsux47`)>2lJgS;33@ zA(<{eci_dj#7>vRHoQnzdFiqijvs(|0143|BuSRF@&854`@Z)r*a7eooc;G}*#G}C z?|m@-|F-u|I1k_jI`{8JI2GWtM7y%pio*2f@Wd=q7{{CBX%b_XAW2;gmrzI|$*VNif?8;S54B)9_!= z@Lvc#9Z)FVD`Eft`3&ClzaCEh!&!i5VdRf90WZX70&pJSCU_g*QnP?e222J_222J_ z222J_222J_222J_222J_222J%Edw}2_tW5iY8J$0%Yftk9URX6cW{~j@WYw^4o>5L zFOB~_H2$~I_}@+Ae;1AaoizSeX#8)Z@xM&te+P~K?KJ+k(fHr0c&lLiUxx4h|IPac z?^Ey%fO}!z|83suyjQ@8KkD7>?e%teH+vhrOTnA@GZ`=$Fc~lzFc~lzFc~lzFc~lz zFc~lzFd6ti&wyfu7whR||0%i=-uB0lx>I}If07Iy9QfwHUpL(+GIXEt#{Xp9@owSK z9Pyoh7`9`i_|m^iGvZtSPTdHv{VSRg-}{$!Bfj{r8S%}3yKaP6|81HP-~IRMMtJ$( zB3mH^eEVP0Oz`@@uv_8ve_4C~U-JGL$N#Uv#r&BJm<*T}Ghmm52v`Cz2Oz}M52n6P*LSAAh425HAqI#taVY^ur%g|CWToEZeEAO#1D zvT2O%7mkiX$eOC|FYpCN8H)|s_moQPs3NzUO#z)z?g%}uxwAO84mNOuz3RdvwgKH3sa8Jb~ z9HSO6gG^`lK?`tEyNtJ03llyzI=T&R1?$+NQMN#Za^WnK`7Y0gd}tx1+!d`h&|scJX8=Tdw+ojH!ZE`NTn{{d^VbQGNZD}Zo z8b7B@e%QST+Q)n*q@!vr8H^MS>U|HlaG;7DzCvW=-X;D3eAR z2(o{a6}i+=qzZHgvS=x^`BWjwL>b(kq!x~Xm^KI&0;QjfapP|c{^~NoO=av$sDtne zQtT?T2uCv~7j{6Bp{6*P3c^kuJ-|l69r>9$I*J}3O3hAGfcZhaxJekWQ(k7mg$J2s z6cVGF4mUv4K%`MLsbB!AF6@l7 z%!cZ}KO@uSXl5elW1|pTa5U%`g?KsB6E6@hsChENQFH_i*Xsf%s4)s@ z#Zm{i_z#7KA6`(cm|jZghCfJB#Tc}oB{2%fKoD*UxQ`_UKRqt83C$^vbPw-9jN=i4 zQ4gEshF&m&AQ~Vf2_E-|j_e0|aogA^T2F?*#3Y07LOP(7+N~g392Vv%X&$9mEo?g6 zq2Fjh5SmzuyZ{}z5Mp!&Q^7bI)D+#ZpW$PQ`$21H(Fh zX9m3DPZvP5pl{3z{8W%$Gl2!tvIvWAF993`vUnIjl5kv* z2}5nu;~J&wDhNg<3*;^TTzJr?s_f@A!U9k2Aok`N>voW50KxVbs?E$Y%31_; zJ3>$|M}-G^yG#Xt_y;@%M|B0kr@74LUydC*h`fe!RtV1x=t9)_AkfA5m|+$^V^p=U zGk_=yCB&v4P(zSd5FXB>`=!wWl|e_YPUg@}46@N5S$y*$!t0pthrV;GeEU^)u*3&y z?^73GL!mrSpehA*abXtNCNQLZLJQqFyDU4An>b6m_ zejD-;R7D1M7QqBP6ie_RW6zJO87d5yIFsgYV<2--1erYFq2hpwjWPzwxfx?#TabCr z@_gXA$TQphkXv=OD|ai3<1xo(`|b8d+YNBr{Fw}x444d<444cgG0-{J?k~^hQQp(n z71=v-LU?CS-*C9Qr#CVb?(5hU8MiK|ZmA8m)v6mC>yO%4tJXKx)E=#-2T+?D)$u?j z7)NPz<{Y~}KcA2JhdZ|SCd4`Jv0RV6EmXCkHX#DFMD6KPL8i!#$e`NT)TTCW+^|8d zZfb08YYEjiwy6WhC&~<-n_KD|LM>a=^|f2d)Zw08k)h#^T?6X&o*fWPJc=?EMN@|( zd&k{M!(}%A!Wn!IkX7G@C~!#h5^i2oLq_=<66B z83f%Rdrw!2^W0QYQtrosAvYn%WJuP!p;{t<|BL+A{TcUZ(p*4 z#bZ>r_x5j3(7a^rO_4grQJ7*)P-Znok(OX-sk*tot*&Wfo7&Q}xxOY^T4MKy%XzdZ zR%Y8fh9cq4-j1Q6@Brv>-*D_2?(FZ1gnNb~yFf$Iea%iS#dI%vgh>%0GwD7{w4{@K zmPTh3+x^FatZNS;s}|QGC7pE`lBPv7ft+dnN>2~XgvPO)pEZXxF+FeTE~QEOn0_Br zGA*5tP|oy7!s$^YXllG{NnOiS1O7jLibjzfBF$t4Kb#yGDpZp4r)AnOYiYG&R*~J` zk;|iRvD}imNK_cT#PAr|GL!>kAJ0+>{8>LZOzTKY-$%V%s6~J>W`a(T= ztxpkig({d>45@XY4DRZxkbaBefQM>IU!rucYWG*q;8A}p+tB9rcZP=sI{Jo^6ePiY zMr!60?j?o6{3qN?Qle6P|3AZf3xhBJz3qM7`&aLuyuXJp06yt`9KHnbQ}2(x-|^n% z{Th4`@D}e^k~)5-#bm%_z+}K=z+}K=z+}K=z+}K=z+}K=z+}K=;K(yz4Ok>DPequ5 z0N(=Sas~o?Adt&m1P_86!G+*NP!MDU2Z9~JhG0dIaA%e9zK!xO#yNl^FSr?_$-to) zIHS&DWwvvq`kTMBdh4Gzjn-DQH}rH4_7C-U538GchDJJi)z;yWuAct(1@jjyXs_#{{G&f_J&q4mM@ySa6bHBI)8C{PhV&6NLQq?@<>G1G2FYWyYmyq z85-H!)7#TA2-3EWM^RnT-aOd9W3XeFx(1g@)snr-mXx+{hUvflJwxjHp5dYP^7-xc zS~kEqcmCY+Sy}n1qS*DRf@>>;pDGGiA%$Fgnmlw43}}(WNE+Ey zIRed@ExPq#*AH&G{HDzf^E%aeo6F(v=sD`V+PWdIHq>;f^STEr1_mRYJwp+7-Z7mO zdpcp2Hatw`?*75n&i(^z44=M9K)Pq=MWzp3_Vc^0sXc;9H#FGU4$5~V^;nN`*O87Bs>zY5Z=m1pAmqo4 zEUBVV@Wa%u*8Y*f&WK?hyJQ=Og1vs>*QI4wJb3CkX47OgO^4G$8#PTwqD|P|)7M_t zKQw&wvL)>ugS()0S}=d{f+JFo6Qjmv@81(K$bIA^25J9YWN19Hndia^z?SMSC0(h7MS)bps8b57jOgVZHC=jO`BWCJFIgX zYunn_K))`s2NG-Fy$CvP3+FE^U*7)Tlq4uXVxs?@GJae_#%22$+)Ui(k2hgh2cUQk zzlbM}v$tnE#dSm?)5j5?EY76vO+1PTR6cbaf&P=KHjKv>*#Q<>aQ$ELp2oa)dJlU4 z?){DTH1GM|uXwNWKIHw=p+;@yJ(B^G0h0lf0h0lf0h0lf0h0lf0h0lf0h0lffx~9N zCE55R2bo$na%Go-mZ$etsLy8n{eBrOWtX4X^WJ+Mw>!{cE$P_ka$mIGj+Tq=-f~yY z$>(geq2=1!uO290_tj^tXo)SOTF??(36szgTb>e5$tK5^H1Pd@?)@r*|K`tRz+}K= zz+}K=z+}K=z+}K=z+}K=z+}K=z+~Wmnt_e5710tc>bU8JDY&ztzPhEUwP{V8x~aZ( zV`zig+P1N#z6mz|;121gh6XrpqHPPAni`k3*VokIZs|?c&7tb`p|!QG?bXfAbL-&v zBV7OI-rE`cH-9DrCIcn|CIcn|CIcn|CIcn|CIcn|CIcn|CIkOF7-)tm0QpFc|8f1_ zBF30K*IHwF2n^=WWZ=J*0rUNT^Zox%a14UcOSb0w|A#shLx2CweE&cBkPY+wfAeUP z#Pe1DJx7xqiMLVXZ@8N8|1WNjlcBw&5BTpoTHxOkvHAXg;!#eq_xR2C|KVJ#Pjlpe z`TqaW=KKF2`TjqiA*LN{fa8BjWHV>JxBxEZ&tyPn-~>A!rnWKm+R3LqOzm(EQoAI> z25DZG6??noNOYS1KR62TW6_j!kjO?jN3jjQZx%n9@GuV)iJiHZbf^d%!1rl_|F1n& z@MFm%ii>raPm;8gt+bvk3i0u1N|GY}ScK@$X}3b3|<kAV>dCrr1-j`R7n6Q;O8m@;WvZS?ht^NM6h_j4;_ zCkGv|@kG)H;7E*k{?`vsK2|1^I*0KQV-jhH*}IE%{gXS2=78rDeE27^&%bQRksk2; zFOTulXFf@%X}}ZD@?q-o1OuLUG)JI{K@vw`^c0sUHhLllgV9rHV4$XBxTC$LzXQfj zJI2rYZ`VFfrGJ~MeCgcz;qv(%+apWLJK9^pXKw_*?Nr|y=^Ki`NbAf=4rr&(4a5$0 z`&dj&u&kiBHXn1YYl6sU~1qTzJ^m6!!IO_O(3rHN3yP7J_pw=j0{@m$R%jO1O1+ zFw(JWP5p*ib(YFK?AB~{>tw?4(D2~Onu$}U4~3K3J3hCyk)m_rLw!f zr>lrvQ^KwZt<)0APtK&4P-k!dP^6=`HW&PHc5 zL?mxzxh8vH9<*cv{&>6z+z}Zb3J>Y5Cop%KhmEPH6`h9nm(SNy&d zskf^&sTC|fX~jtk;m;E8@9nCXr{}j+3z!r%y)7v|ap{Q*;ZMSLWYt_PY@ShAY)2a5 zOG?RYQSrXYeGB1FU|X_ejut*AFDY#(Z4f(AW+?6Az03D5gg>exWe^S?7*NvsFV0r? zUyekp{+xk;m?XGub8EUD>e#O+Z)*h-cb(^Lz> zr>NHK9V>S%g+DCdRRwyM4ODAF#p?Earl7l|yBj<#&ezjTE+t@EO-@(kSsnQuIq-+c zhEy%t{PbjFjlQ8uZ}V&~*fx6``dOT(r5s338Q9KI!laY<$eIO3JgH4>%Yi>jxU+v` z`E)H~UFT2LLgl-YatEPQDcsi39Bv359d5PO7S_6Jr__ewnKRF?g~&4qF&?0% zu*O}JRRjLRWmB{OIUu$6i?x5Mqz9-fs*LET+Qv{$NDgI$ z!bAIp=1!j2{~Gj*ISA$isai98%4~VIXEu25E><+plTyT( z1d3VPw5D`&sa)zTh2cfHta&slP>{DOT-(^zQeWFz>@Sv!Cl^E9+vhs8AbBZqlhQY~ zwzbrT8p8Qg^X2@E{4fklX4?-Tcq3{}-t;^<&yyGK>+YFto7i*J#x$ctw!vY3%49`WG8JecI_C;4Kvn=-8T{$>RhlApb@cRM!_0-`uu2XI z?Im0j2kJKjNDxQDJm{il;uYfwvg?@lKJVGy4PM3b2hW#1J)TncpWU~)2i;3tZ@cbs z?Q^xdGM$e&FLEB`oTB_jxl-AxykPeY^(^HTEKrrtzMJhc7MWOSAb>l`lmP6;UiiNGN@@ z$4*au_Ga*fxqP9Y5FZ?sQLRj6gYh^KxLUJBJgp*S_%;1pGB0nKgSaY(LxWULT+&vtDX@Vt-Vvp)X0SXm9 zb2=}a$qUij@{=YK;KXzR@^X2epCh6GD^Jt}@TZU2DgEC5z8y)bJ6+*w4xgUKr{n#l z`}CBP=VL$vcEj*(uxE$fL}Wl$ga-nIQn-Jxr*f|zFnPGF2kh=1f^Jc)i;}^o=JBZk zLJ{uo?q0rUqWnUttw|%s3=YF#e}Is5cDI&a=$$9(n>IIt&r~2hwaQFUcy>0QQov!J zXehFDWTGq&rerxImuL7nB4v5mupTgwlr&@+15%cWZJxn>x!mU`)bcwtQGOw0YJR=B z-0SCvnBNtHT7FX|+%Uh87szf(%j8jbW;XXs=N`OWbApy|-kemC`>~5X)H4jveXT<| zK53T$4FZgC2?g|Khn5daBtFEFD!!wLJMuUpiodE~6W^d|MHPX_Q!`*!xRTB7Dz~GD zrG0wRY5I9QB)xM@ZwF{7&J}V|z{NB|DLk~Zd(|#2U2*B%K0=xny3u* zYT;A#4B7+;Z#)Y0aaPFLG(wuMJYLUxdcy>Ih(kJq`N|I!E=^+}7O)S|PsL~S>?gNO zkc%B@%(M4ru=jHbfdQbtXCek5Y&ruO?7e*UUM``=z|M&nfbhl)WUzk}v47+e5(7IX zWI&%SF<{_bh5d6Hd$)kSi+(D)Ct_fGDgzbl&9&^!5TW*bi)dlfA8!!W=z zg2HpnpRPVQ#nF{E0pek=D(vsM?A3hsDouiP7^V%%6HcWrgS|Y1y_`!36N60U%c57e+CaIF!E%uVa{+i8Rn$BM8hTF@J z(~{3muJ(}pR+v$M4p~PhjIgQZd)Oax*dH|tCny|#nm1V5Vb*fj=i9;KW4KR z3fK!_NWG$6&wE;>J0_jC=W^L|euhZAEkAZ5!69t2;2G?+3pZ&pr1#f1Qg^+OJyy&f3vSesNs&}5 zU|h2^Se$vRls%Ts9xGsvg>l)gO-m=eyWW~wz#jH+HhXw7AvLP4TH*%JGo&EWhjTxP z{Vn#8!XC+H52@@S^ia`am^2hqQ)<#P*iYxNpOz9*gTDMIEiCl@61zTH*oKb1@tHPQ zAbFsiJy1#rrQ5N0d9z`%P`Z$8LUo2_Xa@VqJob}PLTZMZv>Y2XLofnKUmozV`xW-! zG<23Q0eUE0uO*$Xkn41Xyr-Dm6I`dIVyKW1i&2YnPbs@6o842u z?g>Le%j+k~VqJO`znROv>1T+T#T9j0;wkl>S`AD)RUPkE*tfFT-P76Kn8D?1CrWrt zYQkCUj(m1U4k0FtwxPxm+E}M zd4sddS**OId_~!z%#&Z2?~r@tGRGerS38bzWZ9pvUuC+xp+m~C(aZ>F@-bl|2o~Pw=aV)h;P)#0{%n449={jw zFN@+Tz2FXi@)Ho63-$vKt>fyQ4{qgm$^0%2aTT{Xx>^hBb|=+#nAT?BbArG4|ElOJ zEr&VDV-rl|dx?!w$xM}(9!sfijfZyfyRdOu8P%5R1*{es zBe_e23h^!N8QVM<>F(K!?ZxQCy~ncuJGwLE<2unjV;E9PS_7 zm%aizncqBz->edbyLv#+ak(D4n7Qds?C@}erk_ceSqV?HY5c1SzjYS>YB~QZdMb}D z)gwtM@hoe8EE1XD;O95^2+?hM6j$sa3n>bQRD2!kM#4hmOn#u8ADBZ3o%)^=mqc-) z9>bw1+@T&0JADUW?U(d4J#O#a1%{EKr4X&tj7imUVK zp^>7bhhA&%@FG1Ykg{E~=1^Ar8 zugvD3E8?Gn<-g&|C@$8gXCKMCEwQ%ZuAi0s(t3VrHK9%(F4w1rM)4tZGI=ZcCH4H0 zYC?@XT&sr+1kzh$kPNs>Yl$yb_+>f#VwGQv9*Uy4Xb-8UKgQWDRLS%C1%>>Al~G)p z$Ak=+8r%hSIF+LdX7UTN`2~6Wf-u~#h~g5xaW21_n#&A+PA)&kPpIV*SLls%IT(Q# zN4wH;xnJSu=J5S0-;W-uqPR*Asi$;9kmDOC>cUUvr# zWxgqsk9qhR)A`s8K8E+JqPT8vEW`~H3E|@>7xI&*5uy;QqD7hz2DK$@B!!2cr0`R+ z`AI522|cWd7HU$Ys5~m`bxOD~vS*Fq4iO*UTg>-PBNXAj$e!Bh48w?!Q-}z*w@eh# zo?^ad8b`#PE-Rx2T8<1fYcK+feAHwm&JXWa_`YnuJCE z8b{R1R$u8i6k=EZ?ld7zQ20}5-Oa|{(_|9zJoy&1p zK2#CKb$$@Qpd)uxYDdn)x99NfnS|JpTNTyz0i;TgZ8t=Y&*s$ZcPP9wn|G+Z13gqm zaZ3PZKe;D|HQ{sVWwte!Z}oFTy%Xx6P<9Aioiq=V!P`~d?k7aqE2G+00i$&-6fITo zV-P?hk~~Kz^MGg0|uKxGkJrDH%;dag}ebhtcl`=1W3I&orH^E4s>v^f3P7k zG}N&pWwYF5zNUUwkjAsgyDT~h$ijvRIBi{IlNZowdkQDiaQsKdAJ~z zhYVho%d7l^$is@LwvQoI8>kNhY#y4{SpOC8UwkogKL zN7TkMxX%HC8jNSof$kCVivEcj%r&V410tS(L_DMiZWi2%`1v{ z1(J&6{}8*7dB5#F*}KT|j^}pIpl3FW{%>@D#$D$6z3T?ocGq<0^Ulkio1Iz8W6Fg} zvm(nsmoJt#%1+0_j*A>^4wwBAd(>WI`-kmr+mLOZ^>ynl);?>ArlmWZW9`ipd{ zGyp6AZt)9otJo)+MK1q4{}I26@8H!uz+PnE0}D1GE?15})kH zfrY?D=b2-;>X+)daoH8t{UkMcMT2CAH$`62j_km-3TfYiWf9bm1r7X7OUB) zSe+qOXNlG5QapwW`ss0_C_JX=)V}7A;o?2`oRlKPB=T9k6WY;vW4K1I3jluMUxEPG zRLWviw^)@SR%L+!9A=K;l6-pl*y4N`OCM|1yy$6%h#HC*qF&h{R%VEmSz;wl7tM^G zI$_iwBt|_yic9Jsbs%j}2(;0g6|z{dU989uE2fAQ=rS{kOXg8u9i;}H#Lf~ zsN60pGeqSSQHguv^P{**Zb&ry2R_Jv=!z&Vg+sJ+3`C}$20kmoef>BAWED$RiY0Eb zWSUrl_f|x4Io!cv?+=y`{)?BAgGpFl_9O*gyi_c9i^bE#V!W3h-7}$lZ|m|ck7_I5 ze0F*guqP4}AyK?VE5stVSd=3c;jPLju6cua24Qval0q+BA{M&E!W^*>rK^nM!Z(&o zdMDzISjp(qA3Q_M&lU6ignB0e7r!C2K?evzS0{HO#5`5Z^AlnxqBg28f2YiKP{XfH zW$7i7(wz`<6;Ylo<`#>&Fe2Dd8O4Qg<1DRG@AaN{gM=+rEfs-n~{ z5HSnYQGE$KWiUcnz+#&q10{->oh?d=LOrcWg@ppU!yk;|syJpMy+Z_IK&uZs zc&RHB9}g@O)7FV;HH7$#u8ZQrIIvl2Fl(mmIMRz0W~=aBmxOVh$WervD{^LuoG^H; zh~ffyI;B{uFQ!tOA^f?*?aUmRw=+3q;I)O%&J5 zvG6C#{RCN;6k*R6(o7*?)+?j9be=8)7T~W^Wmv~Q+{`~bijdxp2}N=B96}p3FA&WEdS?G98sSt-E2q$HVGg^LIVX8t?T&voB8`k5n|I+AH@}PD2mxeO%rY!(Tl?1 z^%)O;PZ2Dazc-t|7lwXpWfa%hjmzWF)bgm{Z>{BTg$VWL9@p57%L76il}82tdjtP_ zh){3tak1UFJjUZlWV3?5xq-hKBBbWNB8uzn>6t(_A&O)+EBG60`5PfZWOHp47u->? zKZ4ElcAmek@V9gM>!tj4jZ0jAPZtB#;^9;-Gx#gH{1rc;-u=KOcnEFKgM!d0-4Fg( zmH*XGh~1BxC@#NGR68f`fAE(T{=itR${-U2FYAuAm z4sX~(OxywCe^mINviTop@;~A#c|{bLT2+m9>!i5&j;O#V1dvg7!s z1~%Y(f9<`^yVu*~E%dzQ`MKvh&wyvGC)fR^`+M%oVJ0Bx_PGA&y4`h_tHo97e9!r) z^G4@xXM=N^@~-l*a<#HYX;7^4v+|eaetEj%SB@(k3+->%zitoP{kErU!?uOiH?0S( zM_aQkcUguli==m?Z%Ch!W{4NW4Pv{P${*#I@XdTO2=a-4YsXMEkj=$_UgXil9aPAw#q z@b22N*v^Y|HX)jc*~}ED%o3**66$Q?HVhOfolS_zh|NrK@+@(3AtAC^Ifk1sU{F6J zolOyr@d=FJ$|*2Vl9S)-vW4LVtS`Pz8jR_q~Bow!603im1E=wo0TMQB0g+&+f;IIu*HH;O=`GTcnH3@bELd{iSilP5d?n@)EP zg-aHcs_6Feo#7nqeuFD2?r^YSOyV?>%?#sAwBJD$Mo$Txyi#i zY(pS)(*SPS9~$W!>eI0%&bk~dSDnh;Z za3={?p7h!W;SGu}QYRu+0#Pr%*d~(n+6NJQ!s6?y6J1pTQ7=B@y(ah=gG5q`ud_~c zRtZGC_;9lcs(5AB@T%+kodtS+vX+Eg7O^s%XK=y<}{bCPm7&A!q~qTIJU_OUa^nnrNOZnsY=m z-Y6O?)o4gxO5!E7lvE-bW{ZZ}u@WtTqB%+Jsn*C0z;qL~Fj^vso5(z(VUB3X5e+j% zLpVGTE*>k^(o0#7!9pvF6&e*#{@6^-r@@*D_@t@)`D5A!62sL8ZPr*8bvr~|hNzn& z>d>WlOy4qMAV5Ki0Q#N~0|CG%2{3m|+wZ}%3 z2pIaL-Q^M#=t$WZZpnZ;VzAZ*QR-uR9GB~BZLuvF$?;;|P=diu7>0-8^79y~2RFKrDMm+`=(!D+Pz64idW#ps8>;0=^1~ zuWHJorc2ahh?;xA0B_yUkbvCE>mLsVyo>MT)> z4#i`*KLT6R?_Sc(Uh$Z|7h(dRG_yzZcr(ZJJr5~9k!pxjD{PGoZDYd( zZ0PS%%A#twsLBvk0a1lhbj4$_y$tChds9TljSI$^L!XHv>pK(-L^oyXjChahc9hD8%yOUZ0`-D`0&+%43v7F0Si*qFJ``)*`uY3RMebM{8_cz{O zdLQ;a;Qf*JyWYFKU-RDV{j&Fq-Yek^f%Cm*c}Kk`dWXGz-ksj<-gfUMZ?kuux5m55 zyUe@5TjrhVRlV8X$zG4w;T4{LdfxWD=J^YpD)3v+lb*+5X5oI%LC<$Q-|+mG=O&nC z_=4wio{K%_dd~2i>e&lB4|+Y_o^76EJZ+vvPo1aAv%<5)Gv71IQ|OuQnd-^(xI8uw zbHC^QJM2*Sv-|h%XWYMX|HA#C`^WC@yT9fBy8Bl5SKJ5OpNBb%3*GzOWA2mT^uhs{ zzvyxw=RVrq;@;q119KS_?nUmo?hZgzdy^+nf}u1j6#!wkr%>qOVEtIxF)c1Es&RiRjy^O z1+FsJOqc4)hI1Y~E{97v{|TohzGlg?c*SetS*yizuk)AA2b|w^-s=2<^L*#&&J&#{ zICnb3&P_0vQsb<2E^wAQRj1#{m6w$#lpia1D%UCJDZ|QE=^5#0=_gV(oSbmE(xR+V zW+_uFpRtsSFItYWxgx`waL1|T58RJNgr9t z5>-u24LQHH#EpNODlHV%p>XTQ=H`~#*4A(XKxl1kcDqvwh&3C)Sd;TBmy{!_n>N+9 zfaTYCqaoC?9?VZ#GNd9gckVnm;dLH#=H~9q`I%*kG%x0aU&4T`)dS#uaGF#p8k@q^ zO%2VpZS{?7!) zljx}V{kmJq71gbw4b`Ex1v%Fz*vfMb97=}#L(8BV$&hC(!}Nqy7v#tZw(=aC753<4 zKScP`ENKq#+6ZUewA40MZvm;pb=f=fq!1R#+6_%r;E+}_-4hjA*GB|A&hi$U1@E#C zw{$>9E;J0o_3b0Wk-*KEHFR$ph&g(sJkiwL2Bo#Ju`TCmEdS7k4NaS&%wJ0=|34%s z$qR`}@_SG>?*tJ%?}vAkFu5u?gsm%xLPIJkM}LtZIg zGZuMkKOGSO(?vCD`E|OrpOcqXfD{%S5w=Tn5+8`Sq_%Nq69%1=} zw*nVVeCqEnuMgHgR=rPr*>~=WMFta`Lza) zf!`T9K94PPZ9@IZJ}T8E@K&13-?2qX=$uvK`Luzv4PE*`-Xak=4l^?>gen1AMT(z$+!0lB<3UKXEEgL?7LbwMLcH@l4wBFD;@H1oQ2eI5j3Eb4DI0Wub zb+`|C3So{SL*vPAG;$4m+tBq}4r!7IL96<1%^1|oqiDfXjN?5)@w>CN%J1oO5WX}JhBH-~F#q1OaG zjoO+p^k!N&ZfNs#;-ftv6Iv0c{)_Nk!j}pELijx4bA(S2{*v%P!k-d;m+&6K8wqb9 z{4(KngkM7RoI!XxVU%!`@KnN62u~tBk#HAbFX1Y}3PL}k`(DED6Ml>EPQu#=ze-3l zxDSx|Lc$${#}OVwxS6n(u$gc@;X1-v!qtS!2p1C0AuJ&*Aj~D4LYPIELFgi+PL-RZ z+4TY8JA_XX-b8pMVFw{e=pqSSB%zBWbT!dklFhY-%sGTp2`3X$x-K`F6+%kgCD81o z)Sdqz^WO}@5%6R_d75Gf8PBhjK3dne-p;tpNBE`N$#EQE$(&h+(9^cmBosESxR)Ll_fZ;XKvZ3-1|J zITtyLoKu`mUFO!@fXTq8PNfwq*?st{{QAhvmz!!qkLe zTn){wt(&R?t3Jv@F^&%nW2kSfZmkcj_=x*OrP4;@@U@%ZxX}$wYg>V_`s&(1*BVN0yxX*IY* zt&XQHK}bDJb3At~>A`gIk1_}rYwbMSaOOxSMUPX<*v5ovqTkSSMVxHHaYJ%A%+_X{ zWJz-N9F4=*%`oJ1hHwA|L;8_O;Io)47<;<((c;jCNZ*d(oq^LPy3vhOL`fmEf#^vS zxNk>ElKclwNq6ePfe87k+6UtnU5HUb*Bv;f9`~yyf3lHdCyp7$eFjcVu}5?wdb$F; z$BkQ2%{KPICK%W`15;0-UO1)=CZT$EM*7O&CuW<1F}04+%+z?Qi;Y|ZR~ourftha|-q#xm zT!iynu~W^Zxj2^-J5f9{Zh?8>jJO46NPSqKt)cLi$WUWH%^YRRI3&}YvK5Lm6yA&n z*=GB&5a15-)D`K@cIb9J2ic2K>{F0q@DI~HBb~$9c2rEXrp}5}4KliMG>+5ZMoVOP zWDsY*Mk3iZoL(WfjxJ3s$WTtqCEJUGYPj7z2=7M^4)4ph#vLLwLz`WZ>JS)rpvlwh zC8-WjW<&`bkds}KV9wNKiBJD#uSj#rPH@qpUzX-FRnGy&lU4&4UpfP|eIvU9 zAL#k5iS$Nxzw${ZKNxsl4`2QN*n98rDypw-IA`|k>4lz%Q0QIWw7Ad+nJ$Gkf1_!f<%U`v+H%dJ*zF2l(;#6PZ5!xO>UP(3j2Z ze!@}>`fKn`l&%GteNQgPp@ZvQG6jO6;GYZC5__7Wsv(sI#>%azklTCSw-zR;de z{A!cgCS`He<*ADwP@xDrIsS>KG_x?dtm=UjW&3%TCw{NVY?ZRO>eAH3OH|W@12}&3 zsGn3)FR7&N$t6{XB$W(Kd`~*bL3ydmtFAgld5X_qrJ0@76+vC>{^7W)2U8V(li2M^ zZpu}|Th30qJ}ul3UKO?rehwZDCI(I6>-q!m%{&L@|KINQ@yf$j>zmy!uIX%bhC7+| zNA`X8xps#2ku}At3tx*L1Ks}|<4gGR+fx1_pO;f*Q~ikkq~1kO6Ca3s#86Q|`$oH6 zE7APe{@9AxsI=eHo`gSo!oQrjnxhY+H~fl#$FsV{d>NbVG-}ky7K2?eSnn85Ow3On z;66Kf{30}1HBP>%7*s3<6(ZsQ_px!FwV!pd`g7_(9O|RSQowHhlTnOKP8vhZf2y1~ zw^*E8h)5&g<7)E18b)*CC_*(T1pX8a+u)hk(czv`EY2wu3e`xTHgTl}pk{j{kAR1X zJv7pJdNcxF43uJMju_ZP3{-1#<|v5(<=Ui#d9f>S9AI={(JxcOwp^U=%uvJa^@((fz{fSb68~{#XORkiNH8v>^Rq1ZP7kow9iH4nGZ^fAa%XNo>J9&ZIPcZ@^cYY zy|JtV{&Vn z{x7YmQL$)LC=^m_nxmu%)NYbn6YS=H)S4O=i-v_lA$v8UV{l@Ss*r*|mCCD4MT26| zpb$}cHFu5@Gl1YaBiXA_Yf8)}5%r~jR}%FbiTY|?-W;W60B4$F^23zm;n%fAc6*VX zi>Rr|51r>EGz?ChSfdUfwkJ=e4zKF@qI#}SsOBf+&QWp(r#Oj=xTWG$0GJXZPM4x) zjyS!MIK2ec<;_uQ2B}YCLh?y86&1URiiL=RCK)Ak43eV;wm*3cd2~^$P%J7G3Wb`Q z$1!G(QZz`88s!Vv&3_U#C(q-EuEFJtMfpOZkS22|)dO%=s_SRutmD_ua#B>u5#^eQ za^x;nJxEdK{&i>Xz4bH>s!q&SDtsMa+SmOr>b)8aIto{ z5Rt1~$sMGwa@fuPq{_9QinX5#5vj_R6vF?d%8%bNwI8MSYmW9~6YWQ;a;1fkx`m8L zc2{lfKzr>#E+SWXLIWYW%3=FcS9xu1f4;Uq7g3!?%Q;FB0Zt>u9e}GGZ=f*k?F*@W zouhqGU;Bb8oV5^ARQP$xXV6spu&efAAtG0}l0#56m0aPl{V6N_gJSK2LQNr8ctQ)| z#5;p(ti4~TDO8@youi}^{x28A#8q9}CAE)pv|Wv~T~ysHoshy=Ao+jt zq?+2=*7n-gTtswMmpMv3K{@Nh>Q=o;*#6(DdrQ8yC0A3(x3`3VLh|kHn+?TjDXq%+=W{$S0v9^h3OR{`I3Qr73_Cy73eSK|xEkvGw z%GwDj!UncKMc7o(UZ|(NPz#agpC$wpk{t@WIkiJ8XzS`}>uMpgLzS9>s+wen!k$v~ z7b$_j*i$NB)Yl#^)E>@5q`ni&DWvE- zMKf^|_aJSh)E=*^t!$>Pq`A#3ppe25-IEail`J4Hj`GxtB`L_AG`2uJ`JY?Q&-U_2E zW}6q86JTb+xn@tZqj|R3#5~hH&8%QrFtgxi;~QhIvCG(Iykb0OJO-mL?lcw{R~wfb z(~Pmkc`y#6tI^(QX*4iu7#T)j=<*NwgFGNVmhZ|<@L(tcTeenT11=OG<{1 z%$gUK-4Olmw8*LwS(OsM%RCZUha>ApbxeuD`cyh{TGb%3T(v$i)=xh_ZBz-o+qO2+ zda$00EIwK&yFV(sJ+c-=*0qs!X=F``tP*9Z=@waABWnY^;;RH@F!cf~c<%t#2HFC= zv^v_>PFUvA$of9AzKX0*BkS$RdL^>fMApj4!olO}%*{nn8T%i~=0;^Weja}}J}Mg; zS-m2wLu8#5S+yf8J+jP%W&9plha&4hWbKKpHzSKZG^*5iDk@tMSxX~pVPtU}!4~nT zY(`{_i>yJB)h)8xMOM?u%8smZk)s`6Inwdt50MVMpmoHsvlX^BP)!oSi;h|eT^#B4@PDCBI}dLdM~oJ zMb@j4g;NsL8R@H{vZzJrQT*xGM{BQ&tf)olQN8I?qP3$V>%7Ps5Lrc$l^0o2bm~!b z>U@oX#17Bs%4H>$6MHGC+%PITGqMskHNpQeDoY&I1poV}?7PU~>($7y8SS}jct*#B zRf+E!BZpVwdmLDN-34n!^tVKVoDR zj@aQdDn3AKhhG@*b#3^hjA2|hDPv${^-ow8+4sXIRs0|-dy%aPl@j}#Q0cy?tV(2Y zn;t&WZOdgPmHCW@msD;Nl{JX0`ec<%%ovINn}dkoAnrx{6cNWQXS|2@7R3J@|6fP> z!LNacqt^ZZ9sfT|dE`o|as1U`%=>gPPTVE7i&w>3*+SNr zXUKHvOQHV`836a|yY+YUH}v)TQ}SzLg|QSz*Y8tv$IZ&7Yc@CQntjYm%-hU)=9lIk zbBDRvY9)`!!`>y{WPgA-C_WSKhi8Q8p&yFi_u%_rf3Q1vCwL=RA3PPT4DJaQ1vdm& zIX9Wr-G%OT?v?Hgcf30sW)k#p3*B6|G0Y~&a?87>-b?SKx6zyGwe@N+KcJW03FZnk zh1`Z8!VH9s?mG7gcZGOdEY~aQw)k5dF%}xv8CO~ztO3?`>u=-{tP+@w|G4$OZQJ+2T!tGQ;S@XhP79~LbB2>{uk?<} zt?&VKjefB+)r@Ys0(a$UN$zGYpf%7Z8Ogq24gseIQ`7YW?X(McgmOL zv+_~7Ox_`Hl5^!{a;m;kzeiuB-(apX?=xSrUiEf>M#O9I!Mv5IDXNN4NbRWhqxPkK zmGOjkpC9_;{8?dlZI8A?+pN8$Pt-^1gN$|VQqT3ec=Not_ma2D`x0i8)DEfz6$9J5 z&D-O}++W>8;rTK@ydZ4k95#120^;H*#K~qA8J5H$BXrv;olxasvc^qHA0AofM;3RL zVeQbUjBj~RRyQi+4lO zyCtxN9hI4pB_j)3rh5GXXTB`5?ue|LBa4p!eiuDjITNC_C6U!HvWg=sKeAdyR^!Ox zIDkEK=NjrL^0UoH3NKTl`mng`4P{@`UdBzTvL~{3N7hG?#oa&n9X}L-wKH0~BeFP} zVC~yfRywi@#~+k&{DHNJ*1|DAny_5MWPx}2s7hy6IeyHCqqXZJi_a3ah}yn$ zBwG6lS#ZozFiyoh1;VoBHw4^L}iO2>ou}qi#wyTrIB@4WZe;2 zw zisE#RVyHL1!i^oCb-WgG6I*0NSHg^zQ5pLlwrv)bH6;st^<` zYsrH8xF)jZMpjv5&55kpk#%Kc&5EqcBJ22(&WOsUN7mHHni5%)B8$BNk$pi_wlcEV ze{jqXMr98~*8P!nZ)Dv~*2I#^bt8+T9m;A^8H`>3lB_W^GNbFH9qrFvOlzS&*w151 zGsY#h&Eo3;c(-4otTJCM#!admCbo6m$l|NOxJg+R5?f@IBWuFsEN&^_gFew(j*T%h zve@IWZ6>W9JtHe4@w;@sUcp}2L-0FpwGiV`tIgt83uWAD;jeLQz#Th^dy88m{Ef#F zf1^@7vZ9E!I#L7(L79Z7^$%2n`^bEl*YV@gT z>ql!jo?&h6s4OS4qI-aQMpRZkvZ_T^R%BI;tn|pL438e+K&qxH+?Xd0uW})jIZ#cL zt4yb#LKP2!pY|>RZLum-sSMUmfwH!$imObfGFZz_hqV)7Ed;=%8CAH^Lm4+Ju*N11 zB7;K#E_b67f33=>gq40g^!cVex}8jGFa?ju$nodTWpaiObdSte*g`Dz2OJp z+o1fnA$$&W{~ikO1=YU=;kBUoH#3|9iht*a=Yrl}QP>{T{+fh!KmS53#ec>JT4toc^ecoh}+NY25%YKxXs=AZcTX4P|p;tIm9q?TB`gF*zqoUmGu;{QjCA0c+v(;Mf}%llc-F7!WH}Wb*Aezn`>=h` z-Usg$cGz1%&2OFkl)cJcX5VEmv~RHE_GR{TQ1%-MdI$aNZgwHO$7l}vel_hZcocC_ zBS_W?!7Fsu0aqBW`x;5S!X$`UZ!P|#ItBuv%st<1@ zvaE`riy+LS=3(=oxzF4UZ)3KaubS&X5pb2c%)HB7Xx?DP&CAT`=6G|YImGN|b~6jj zHt-gwzF8Br6Dqr_)_$%+!beCtQ`!;pV+AG~?mp>Ne+)z|4y>8tc*`d#`$ z{RTa*U#3sj$HO~`A$mW(n_dWSg_`U2^_qGXy!&x=A&!EU;z6-b>=rx3R(PwmPOK8k z;0@P8aT&bp8ZSnQA)=q?2JP0=Es*fc91z@`)>KQ+bZ|L6=t3N;hg>D&YvxawcbI5s zS^JsaHeg4wDjKi9mw6a*Fo*d{WG(X?UcQ|966W#DotO)mJ22-n=P|co&SkDl?7zgk zmicMs$Cw{xUe0_U^AhI8%nO*WXTF;GD&|?tGnuC{PhcL&T*5qr`CR7y%zc=9Fn4Bd z&&=oNpT*0KnCmjvWImlagSi5;&rH=;#pinR{-Sd4H|E34KQMpG%=Pb4byxBBa`{Kh z?=io{yqWnm<_*m2nAb3`X6E|vmhtl4%y%%~$~>R>8fLBs?^0f##>{c#jpAkYzsLUf z*#92;-|Nl4>&8s+U&SlnWsW&g9`*MGvioB4g_9n5bsZ(-iZ{4(z7A;L@$#3@aitjvb}t z*w4&|n7?5@z`T$7Q)X_@v0c2({*P_v&xn9z~;$^OvG;SAZd%65$X0DgCcX*kv zvuWFSnd>KQ6EAZ;rMeEm&Z&&yn2Y0vR8*H;?1qcpC!G;U96EBSX^k7>(!`F>`u z&or*jw7a;R>otw*HEki6-^_dy^E_s*=d^2hnd>_(PTj&Qh%P6(l;|R&X+)EW#uJSp z8bMS-G>m94(K$o|i24!rBI-`mm8giQGf_vP0-}7PJfb#4xkN3A&LV0`)PU$rq8dcm zL|Ljso#+Hts7k@72Xyh$GW(%(v`h+4EwdLd_h9bET+B=tA1$*JFH`VpnH_jJpE-}Y z4RbDYD`vV_X_?J=xhXSUytK@Qyj-8TE^$?hIYylE2Qyuyw93?Yw93?Yw935S%DkV- z_2~DN>7uAruF1=ElhP_z=W~7NDR4#sCri+CpX7cidj=m&u?czchojytoh41%!^qu;0{ZW0XzDR5nuZb7L)A}%dfZhYXr{{@B z!~>vv*I#rO9rc!aW4(@k28^DrsCyvT_!s2*`$2pS7 z|2@IZV0*9;zW=WQ#e(I*QWya+FPIz5g0~A3gVJDFFd*mw-@WsK7D2-x2fi>@4t#jC za16#a9P;=3d;Fd7UST6-H(cXC>M!?~`iuN|{#<{SKf|Bsm-@r}0e%m^lb`3e@EiI$ zel@?cufC-p^Nx6jAQR#qZ>P82+vu(L)_9M4%e|%EBKW2~*PG?d@Fv1{_F>)tuZP#k z%kx@z4ZR#tI;`yZo^+47N8Cg1eo#Ez>28M+2kYH6?xXH($N&LL;Nvj@K4Z+A92>zy?)3S+sm)LG=rgAp0C zoEgqUrxY|22S7%~PEH<-AZY01IMtlWjt?0ckJ(4;L-u~i)VLFL6F0(mg*A{TV7a{% z#vIH81;tsQp*YblwTD5*fF3Y9BF}DNH?(u?YIbGYx21K=I$|BN_FH?boiHL|qqW{z z19=3NTT87));w#jHOrb|O|(j_VK8E%ht7aB8)^B26+d1n4Qc#vjyZG$T6$II1%5J#xdgv z=rZm%_82>j?T~k1y|Ko46fzGiH5M83jJcpdF~gW>lp4bz`#=w)laXh%Fd7;;pxs#6 z@C^xLN{+}wa=+XIBOJENjdHzQ1EU<4%cXLWoCo6^WaFAulH!qln3(`UWR%WuFv zB3rAHwGB7}_+{X7!0h0xU-);K%oUjF__BSfkZhlN4%z-@T%YaJab)|npKPCc650Mn zUQa!WY@aG5+ouZ2_NhX${ju~rZzMDIu(Dn1DP+6%P`OJzg>1J2FSlo=n^Cq)J*#Y& zZa&#A-E^{Dx;bRKbkoUp>86wI*5~c(GS_C#VWyi#wtEIIS7)Z1N4A^A%T<}vnJY6_ zWTtw~cBy`|U7yP-5VKvImrZ8LOmUL!#%S63oB0^?QRd&7=?N;^p_^AW37D zWINyU@*(Df%wIEq$-JL=AM<<6T(8brUZ#ea?JVQvJD6`~zK;1)<_XLt%>9^)nYkVv zu0MzC%VGaJ>{rL2-`jlNHlK(6375aayn&f|sM$8hlTAI#Z2Kl&e>F4R+_P;yPJ1Yq z_hja{v(MsXjt`sb+2(q)__!?U!Dn0SU+XK{&N{$MJ@;&jE`ZtA4lduw{2cQm%zXUT z?Yz8z`C4Z7vo(pA+0RyAUhc@u{}RtVFSDOPP?(N`+ohS#%iK;3_Orq9Y_MOAJ@h-{O=gY*<0)QV z!OYhaV<9i!z#M0u!90$65OX(XzTOy3c{!Vzua|~K%aX3E*^>P!`8XxFGs*QY*}w8* z-j4k&U+3j@%#Sm3yOVtUlKm?$;q{Z5$1o3J?!#Qj%<&-W^Ky0OkeRPP`Vm^z4>Ip# z=60v^bwa26PPYCkuYZPl6*I@N&hepN&*fJ!a~$jJe|-vr?}a~?Ctjm~kS zpT^}CnLTEXBVF<`*O&N)mIb$4!SOG?X1-sD zKD^wUxfgR!<{r%5nY%G}WiDps_9+_CvbLPLGI6Xva}IM2=4|FH=Bmu;%oUkKW}8`O z=Id74-?W@|jQJ?@@65k3|H6EPy6G82=|okCDic*wns;r}7NxYr;hfv37h%rf&V z<6D@s-PN$=W_X(F3Nx+O>X+#4#W5HKFdg)#f6^Y(hHGcU4#bwl2F0qTeFA?t)xXa1 z)Tz>yX3R_fCeTn@ADOR@%tb`Kq`1nI4#FKN^pZ+0nm%&)q|uRRhdx5;V{`No4fPRf zRbE_WNC%OK6v7JYl7$uO>jOIK1M(0_v?I<*(o=|b!1kvWnW(S#FVy?zA(F^MJdrLv zS!4qCluBfxzTU4;@0W+DL?&9tRl@Ytez<5f`5~d%q4$;gxpnovP4&KNRbHIapr`P| zGs%9atrxV{3vv-jvm?%l&{Jr3!1kxm?5M4G$k#jMB9dlDT;)Met=R#)Ikh`$>+SRP z_PL1cPELQGLJtP^l**m8_56H2KNnHCvrSxOKnHiGR1-`1^LS*nlX|Bdy>V^AsL^GL=W0x7VBJ>Iyls5}D1DrEy^Ue{)5%e7#w&u8>{9SJ6;1Q? zrn$O8<%*VZPH>(|o{Bud@>F^gskhA0o7C5vP+XlljrpUgyil{fUNcu$$Z?fOW1cKe z1>2u8u4?4#HF9-@99M~C=E=^4-Ta#~&&b!$$ki3HGZPuhlbb2*DYY}R^Y!dpU7>Pj zZd|1;hqy|it)n96#Oqacsh^pnS8t?Or>Ih?%2QvjR-iv8jGKPpMZ+N~l^$vnJ*!C1 z>VQaT;o~YZxoTj^Y2jh}ll=)h$n2tLc0k0m@WbOOOS#&?IKUGHRbdC@$&!9}4x>?7 zUY#=JuPd3Nbg!qE)HzwpFIG;k+C{J00gg{6_pe|C(g;xQ)qQQfLfip=IWZ(Ij$0-D-WL-tLnD+K*GZ*r6cuNz8=d( zq}!rOlb-r^kPuc)$b;!=khV5QPiv^BsZ}{~&YPa%SnnlW(H~v$qv#k{xzp9LCO6M} zlfx-ei2R{g{7@(ql6qV`kx@NaJq~umLDidNX;VklDOGyEFBaby3WdriXU8cedrHwX zIB}(WJ0-fLi|?d3oFl$#EWRVJaC-I>URkQV;)^|@*aJ1l$=OrX;L^nDq^iOC;^RW` zaUP;N+E#Iuyd7$=TC!>sA8g`&E_O@tXF@kV3u z22~(uh)>~_#pIReT=5)Kph^&*x(O~$oKC6=tSz3+7tiJ*s-tZYS9#;10;`^?0{ONn zo{{4D9Pvy&@eEZTXOT~FptsP0LMGD{P<@FU^2zP*mVc?f2aCmng+d`$pUN<=&NsRG zU^oAx>RVncmKO?z$|0@eDl7fJUy~BzjVkrr${g`PL-7Dr9;c~K;gk8~lSQsrB)Y^C zN$O9$ekzg1`H7QBU3s_Wi(7MrLcZ6lEcVJRC*A?nl^FJP!hI+q(kK?@i-oy}bgx%w z?csb=-RoJ}xg>EB7Lb$fwj6OwBXJArdB-`?eToylj!ro4ia1E6bDsMY7vbyvB?#se zi#dftA@-5R#@&=bp!^2A`5y(rRmI|}LZOfy>zvZD@TXEawyBt1EM^xXD#x~o+vM0( zo%6`C$FJm&OmA+ExUz}3l3Z)i0i$CVY}AmgEx%2S3tr8?#MVnU&qkcX&FxpiF9DW`bMO`LIbI~Xs;l)7SkQ!!qxQqTWwl>Yx( z$otm;M)5xvToyEg`Twi@seT>rEBLy7ftTj41^xd)ZWU*n^8n2JuVp`HPqmBf(As9r zu?Ab&=CkG$v&bxOY%=aOM#9a$F=x}12O4X~HKIxw~InZJoRXTD)c1#OoFGrq}DSI`Sy;RRCFV0%- zDIT?cPJYN}D!UcSZUu;j(z$LIPbj!2cZy;Aq)u^D*|kV^EkKk?;d(?|>9?y3#dyFI zJH@br|D@?8_ljk4kt{Ai)YYZ4eVn!4bCP?-@JA^BZlTibpFZx=(h`*oK^FCpMFogL zB_wGRPsqUk%PugS>#41~6v-|Hh??5EQ=HY`Q*^B108ZJlZYnz$%gzOes$<_icuq~4(dQbfR^R1wgjSav9o3ONE;?mfk05p16#0@@eJ z_61TQM?gaFJvjnk2mj3o$S;!l1yUhLfYO48vrG{I@JCWcK)W8YU4c}{5x|o0DITq& zT^x^qyds%bAQf^1upoSj2!O5sB?8(O%eDnlp^AW>ais_k5zyv8j)0S%tz;WV7G%mc zO=KH-wo=0H;F%QH^KbBaE^CIeCUopr;yp#r{F_8IrMjLskTp8W8to8OV{92$TJLZM zDPD-2_@YgoVauGl@{Gpv47DOBuC(1#AL#+SsmpS%EC)S17IIH(kYVK`J7tSWYARx9TC-*xpAfW z4lYU6)nT7R_hSjej4I?vzmfDyU|mjJsko>1%0Bdp{+Fx&1@*^z?J4SSU*dF9)!&)= zv3B~g)`;q0&x$MIb~xDdKWEBDLwKW&+oqyJe~|5Fv`#Fb2Y>f`*Bj`NVKAA;Ir zRrVCM_vtBXuZjL`k^XG~BG%sMctV_gMpEs;ZceDZ|61MY2aEKB1&GQWt>Q|)9o&)P zK~vSwKVP7KW9#4N=-)KZzoD8_a_p%+vKw2T{$Z$p2t6s5UO%bkRPS1kw;!1rz_30+w>rwz@>AP%wcU^r~ z6MdIjlM`2>>#0w77X`pZSKkPIa@JQ*5dgbR834`n*ShMjbwtEI`M7vOX8pwGtGoug zIUxZ4tIbz`wX6PWM@05(LW@1wukg20`L&t;N>}}rj)=;yXUCNYJNPw~Bz?lM(KSGS z+1B64(O+(?zgz+Q6!>vCevmNP0KnlT?v(rv5}b{fX9ye8vgI z_2e^#J*7J1GxgQ&^wq5q)fu;lE2(uj;}j40bi#=X$>X;EbdLUbJ^gWtBc-pN`ee7$ z$=>Vg_d*=8mU@af+J4G7YNFp$q~BA3h;cL~o{&^O@j{~F2zGNq9Q_wBBzG6-cNgdi z*{2EB^<DMeQ5!r@@eb1l3NF#rg+X#fpWstXo;=gpQA5ns4r2g^5RNn z9o(9tAGjsCA6Q?%siS^V9wO!Qh_lZ6NwKA_EwDZLDOGIM*XI}N^Yaktg4&hNA;kri zzepw?)%1B%zoo7|uZccSt;vfQpYjx5Pd|8|rZqzYeMBAr`7});gu59AH zg??qeeq}Bq-g-L6yYOyKeDYPEfZd$h6Seg#^7Sin5tS#-j&~+cq`D>~TygxGFiYz3 z9DP<}eHMM5?Q}|Kyqd}x)7tCPa&?7VpB+zm7O?%loyF9AeQK_*P@P4Kcp;rdigr#X zk!a^rq&_1@pHfesLbX|N$`gQZ+)2XydTD#TG#8O;vjd+%@(VuL{*<*jDqkO!t1HCX zbYKkgA^q{R@Xzp97@L0xGywL6pM)QV?}cxLTVPbchHzc@O!!3jNVp=rAI9n59xe>$ zhu4K=;g#W~Fj{{~I6fR54iATh=Y)M>%zjZ=7`6*@!?VK1VLceRpB-j}Rl@S27n-34 zs{2(`I4rBUjgI+)ujOq^qI}k9g|5yJBm4r;E4CV_cf>p?D5|B-T@tfji6e$7L)`Y^;UTIftJ7`?j0VpExg8{k607N|EGK9L03S!f4jefvcMttOZPL-7T5{8gPTEJ zV7>b+Xb-M}nE>~=cYwmcJog&+D$p31;ZAnPfy%%z&@$`;Is={De9$v&4s!x(yJvvb zKxH>{A<;0*3;5Of5%dQ3gRr@B)W6bO9BbYh@Ea0FBgzXlb8J@)$`T(=cw z47_Bo1to$ckpoiVX?f{wuE$qg2T~H;c zW~bZbL6<;Ue_Ov>hhYxEm)2*XO|a8?%i0X;1naG5ttUXAU^$E@xdRjm=2_QRSAj;s z3~MqdCys>q1m{?NK&POSm2c&OQb9wjwsi(*6;uZOL>tr!j+wujKZ0Jtei+>OAt)AX zH{UQ{2F-#s=Huo{P%T&r+LAYeZoyphO3)LW4s#5~n8QK4U;qr(EC%(0JhPSA6!Z&n z%<5)UP%!XK(~NGYe)Cgwh6uf@Aux`j4Pd zuwVaF{}5CPw(D=`FN03O8vSu&Drh5=8YRXcP)F!tbTK-BK0*tlu~8Qk5~>;LMtRUk zkn(SM({>ogZe?9-U?JP>%)h>>U!0*RcViya$(wHd$kmnX5Wvv81W{= zs}W}+PCy)r*b}h>;#r6_5i24}h1TzgKOugN_!Z&-#4iv(N8Ew95%D?1M-&=wB5pu@ z3ULMEQpAObHz39lXCRJ49E8{n5i%yi-kKt2BSP9YDA5!`B2$ImBjT~av=LQ;#|9Fa z%KjMfZN%3R*C9TRxC{}G2d0*&-(P|_8F38a5X3%+g@~;bTIh4@cC;5DUW<4s;v~cp z#J-3f5oz0cXjesqK!a2qM-lN{O!T&i$8X}1o3G&7HHa$_??GIII1dqz-@F)Yc!Lc4 z#2Pnyp^Y_eVvU=%u_PVQRA^w08;8(FPa1oa4RRd{t0RVpkh0Fw^dpD|5%(c}f(QcC zuyz~btBCMz3`$lZqQ`VRX8n3Bxe5_Irq4io3gT$Q^AHCh79r*#;#uf;7W!#eQW4QZ z#52+jv?ZdBC=fM7I*T-Ai$4+3|Kbm{@$AIUX#aqS^`gEg!|%~c;#;)Q0|Ml@p&VO^ zz`7G(VhMUuU`z^ZHR5wD-;0R#E6{HOy{$e2!+t(Qd>?Ta;!Z^Lt=NI~yNK@~VuXmd z(8hKrwxf-;Ahx0nlHjoC&4`;2-#~mFaUi3>VmrjPh-V|VMr?uD9I**v zW5h;?brEYKo{pG-SP3yibP)~2G=idlES6x6 zYgoV9U@XDf(a`f6`c^}KYHe^WdQU@-Y4xzA7GgGH7Gf2|%82C<9Ymopb`0YapV}W9ai(RV+zItcZxQ8ne;X5n~F|{zg28 zh;@MfF6}wApGCwPOvCt3!+K1^R*<$5*J7QfEl2x)M6B5~tl6}?umtNj4eK{; zA(q^XcoX70M6BzyYtY6TPmAlqid~`Las`(vxJbb?1(OwwS1?Aw2n8hyhA9}V;2Z@5 z6!cTjOF?%9T@@55=&Yclf&vBk3i1@RQIM;krGm2*G*!?*!I=tbD9Bcjr65y5RRtLe z(iK!uP+37G1r-%kP*7e$IR&ADK!LBoQvkwcR?JagE3g!p3Je8Ofv!L((1fsTCp;~- zUpLa=8NFQSgnIB7JfZ&-d>b49Ex(U~_kuS;&F_`qh2R;`^LsdWAh11O6Q`b23v&5oI29bvF(9Ac zANJ4oclKA1)9+(@m;JWA1@ij62xBvzv>$=oe)rmU+PB*CA-~@o`*QmtdkWo7my{)cRN5}!#+G=Jsu+D@$fSFb$ zE3hnhSoqWY#r(ni2J!)ZVt!!0Yi@&_fE&!`&8N-BATQwk<`Q$Uxd3tlmYG+WGtFs` zA8@pJzB$wL zd8xb*atw}@BXmRGroXOlfNX+K>yPOV>GwlM!NvLl{d&C&vI@@Br|A>)(faxNV7Ay;8n*-^HWts!4w19_&*mYI;VFp!qi^gkhQ z;Sc&Z`WN~qkh}2R@Q?84@H=>4_j&knxC>M}w}h{SFM@98lkl$YK~V0zGrSev)Ljen zdM*zyg73vQwZ=T9(;!7cqY14DE*zA4J3( zL~u9ScOqh!DZraTa0`~;tsz*T?9fNVZeEBt(9pyZi6{^?M7*U2cuNiNmKxwKHNabH zfE~gBZ>GUv_50vQM7*U2htNKV_%$NlUV|^u#+z)gA8qWG1bD*=Zp4xs5U)qXTUc-{ z+IS-iu0|VgXF(a-a}cjWyb|#WMC{T8m!W+LB6e?ri_yLaaR%arh|>|LAx=faE>JKT z?Ma9e5yvB5fH)3uEaDi%(TJspqYy_TjzBygu>|ov#9@d-5r-gRw<;Kf_PL1XAPz(v zfQVh$pdZ?O5&IzaM(l;y1Fm_PKek&3p${kkC=zp1~C`06=Dm-vk;phHbHER z*bosrbwPc!>mk-ftbtjUG!YF%iKruDTL`c%1k@JNRJs2*;$Mh=BL0Dh?ZU^drjM<| z{{_pBApVSqEye!{ZEP?84`_dn_#NUQ#BUJ~B7TGTHR4x@2N1tN{0#9E#E%g_Li_-6 z7vfID_Yij=zKi${;@gOCA-;*Y9dR4tR>Uocn-Mo5zJd5U;zq>R5MM%Ei}*C+V~7tU zE=Rl%aS7sL#07}gBVLVo72+&JY`Okav?m~rN4x-W9O76+Y-@fA+Srv9f-Fg&PTik5xwVKiuN=_ z^q4maZS<0dS0oR8<)N=U^p%Ic@_OShyCHT#EI`ah#H)nY8g2BO*97hQh_w-GAY%LV zs-lhU*FztIoVD_mi-?}|gtA@qq>F9J#kS*OOL5VYE_%{MPr9Gu?>|A@jrcwyM!5SX z+FKAYKHZnmegW}W#3v9}A!1~@_oICe;!?yr5pP3Wgm??$0>m2;uS3MRb?2fTN1Tm# z1tQjkI|FTuWOpLk7{l%uw6S*F5on)}h<68f5ZZYCcl)8;3lSsP#X53}u>_;q?TB^( zVh6|8Sy$qtX~JOPEHAyU`;v2Xrt#H z^sR$FbkIKzdcZN%Z)`kr8;{DysJ7q1a=aS+zx2rohQ==mF&e`G>Ig%;VuX0UVP7oi zgNWCVuov1r5W683A$CG6M8qf!(Mw?-mS9YV=&`T`mNZ9fiikc8@md`=#F7Sx^%3hL zVoZh@lVMFPL7#`!(Z=giSQTxI#t`cw#H&*ns_*|xWZSgxXm}+2KKvTK{_hFj58ny5 z!ngmIU{=6WpwG7=yf3^96#8z0@BVSn=({+a3Sa$8!;)}N*blz>cL_U$Z9u87aacF3 z30i&W@V(y!wZ6Y0SKndK>-#eJ4D$8u{D1gcf13BZ_Y>p`_yWH4@ABUAHhC|5&%<~A zM?l-}Zpcix0KW3ift&#sg1X;m_{M*(*T?G$Sp(X_7yd?GZ7Q#X6`#LE6{o;P_ zeg$9mKZ48w+d$**MfkSA+Fj}154i(wg)jS8Lw>@U?o{^z_^v+`bpCp}UEKEYRlgbJ z52yu7e^ua{zU9W8KOlp^x9~;(6X$*BZD+Id3VhFh8r1$CbnbC(hp+k9Ll%L{LGN!8 ze9J%I8RYbZJOUlzOMXkIu~P@K24=!{d=E7L{<43ye}J#}pF=Kz_w4QV>+lW#Ir|Cw zVaO)11is+Ux395h+n3nW;QRe3Q2rYTc@c}?>;2h~QJ?{6|D6us?#n@5Ld`mA{S063 z4_KdCA6V~LTj0C>3!wk^n6<*X7rxrx0(k|>KmqU~_+~%W8V>V9`dQuKi+ww*mDR+m zYt?}7^_4&c&@lfte}k{}-#~VOk3k3UP54&7!CY%T3Hb#cfG_on&6~_?&8y5y;XC~V z&;mTqJjd(}U+D`V$G};j26!fXqt7tQn+{|d_!GX+e`kDY?1fyC@51-_*FX{Q8RK!| zA^19fCuAD95i|j>FfN8?|8d3$$TiR(zNU9J@{QI;Q==YyOFs>C0RzJ{(%?(_Pmpim z3s45!1>ey(LH@(%A>+U!@D=@Td7E4yuak4&+x~^14mett$aCS#epkpk&=&q{1mE?u zWmQ=L@($?mRsR>rc=?t7nf?)c)87UoK3~+I)mOt;`1>LEz^$OOc{O~4pQ%sPFM#X= zL*Wa2PnaRoUWaM<@cq4(UQMr}hq|T5#2=7>;9Id@d?MZ#Z;Q?1705yGG|6Seu9dO( z3=z|0YzNW1MDGy2P4pJgn?&1*wh?V5+CsFMXcN&JM6VNVBzleLRiamjUMAW=^b*mF zMC*xOAX-QCJkeUB=ZKyqdWL8X(bGgv5j{!t1kq}u$B7;zdX(r9qE$o>6RjkAh-d}T zgG9@T9w1sqbU)F3ME4TiLv%M(f+@22aFh-9dCa(QQPFi53yvO0CdwAi9ufI?*(usYFwVCKF8}nn*N(XgtvcMB|9Y5{)4mO;k!WifAO!2%_Oc z=M$9>okui`XeiMTqQOLih|VQChiD+t0HXdx{fPP!^&#p_)QhMmQ4gZ-MBRwG5)~5_ z5p^NzOw@^}BT*qy0Z|8{_C)za?TGS-+7h)PI-4k$s5Mb5qLxH0h|VHvPSlL3DNz%m z#zc*X8WJ@is!vpps4h_*qS{1f66FxpBC1JLgXj#RY@+H!rxR5pI*llcD3hovQ3g>u zQ5B-fM3smt5>+57PgIU5BnpUpB9F)=a)@jqi^wE0h$N9tB#1Pk7*QHh+TTQf5gjA? zljtbXA4IHZeNXfq(IKL5i4GEdL-aM#S43YD9U$6I z^aasAqR)vwBic*!DbXiHdx$di)bg&dqg{k-X(g6=xw66h~6aH zPPC0^E72CB%|x4s-XMCNXd}^UM6VLPLi94x2BMdUUL;yi^a9a3qUVX$5(L+Qlh#n+bPV@lLGNSv5?jyRF=pLfG ziIx&AA-ap`PNF-AZYR2pXfe?uqFad;65T>{GtmN~n~3HU%_F*z=mw(eiLN8MmgpLy ztBK|kl@Y~><`7*)1TQdRF?l5-yv6`~7UJcImm$J~FO*+`I1}+=#ETGTAYO<#9dR1s zRKzKWlMyE&PDF&qXxQg?M0i00_Bcd%$p`ir#Ll3htBf?7*uuBln zLmY-U6mbaRV8lU)@B$2ee-0u%;DQYgxPb703kVOmfbf6|2oJb`@PG>l54eCm5#ccx z?Cyy0unTrqM0gDVHaz$Oc0q(!HDJR-Fd)3J0fa|kKzMBf2oJ=7@Y)6t9*Y6twGALV z90S738^AV*@SqHKE+V|b0UI8g0pS%6AUrw)o`nbx&|o)1gvV&Gn;^o&G}!Pk4G0g@ zfbcL42oKYM^$_8a8tgiV@L&!0nTYUs4R$R=c*q931|mFagPn~C58Pm%j#v#59=@R@ z3o#QB9>k#}0}&p_!LEV`59MH2Lac}g59m-*9ZDK3WcVNm@ORd>)3p;IPD+G{JUV}|EBO|$Q1t+d`Vm$-W}csIRLMN?}(R$7lJzf zXn5{FH|!I3g^~Vk;idjw>)>knhdJKOno zYrCmk4@Qum1`70nZQ5xte*7ovp!Ef4(C>oL+=P-6Jq|{BG+uYk_qgXcAlo zU#2HoqpcE9C+q{?r3g3IzX&=8 zt6{wO{gCDER?wrr8b*uHG^d&uK%TpyFjl;$*~M&c=9rdK{g?bz{vf}GA;!Dm%ky^mx_n7K2V=P(hP-!6CG(Jq#HZm%yxu`QA0&Z0{0p z8qA3p1=$b=dcC|Nm=SR{WLazg`4CQr`4Hti+tVP=;?FP};(+@pXiUE2Zh^TFFF;O& z$J`a}y)YBv7Ra?&23ZjY45c^wBNP222+CzU=n}Mt`6tbS`avzo zDNzMxpIAZ6|HD7*e+zR@KJnl8-}X2AufWWcry;MzgZ@4K?J)1;ddOFKIb@cY1hY=g z_XqiXA!B7nm~+z7Z|v9c&+s#0#)${nCI0e$^?vZaPNVLiM!f@#dIuWy4m9c=Xw*B< zsCS@I??9v8fkwRpjd}+f^$s-Z9ca`$(5QEyQSU&b-hoEF1C4qI8ubn|>K$m*JJ6_i zpi%EYquzl=y#tMU2O9MbH0m8_)H~3qcc4-4K%?G)M!f@#dIuWy4m9c=Xw*BK$m*JJ6_ipi%EY zquzlw8#@Wwl|)w%%_6#-=rW>9i7p|UNpvyMMMN`*E+m>xG>vE~(G;S|M3aan5=|f) zPjms%IHIvcV~9o*l@g628c8&QXgJaNL?uM$5e*|6N;HIMFwr2QbBWF&8b~yNs6SCZ zqP|3ZhE4%3MoM$B`Bl>g_NL>5)@K`LP}6b2?{AeAtflJ1cj8KkP;M9 zfPFO+sFPS>bR6x{$s6A0WQ9GhMqP9eBh|VU;C2CF7il`+~3!<}#niDl6YD(0E zs4-C^qJ~5bi0UK7D6;F^Et2KYK0v$n#sb`N-tejdKm=D{=YYWT)l7beU;B1gy?ka_)H{T%pyxm=Wry4nG4 zsn$=c7~2_J5bGZE(msbj`Cs|hx{Nf>t@IQ1=|FTsYaW#J16{j>ww)~x`SK892^7{Y zBaw5<_d);TxX@LaFSW)n>_+{R{?98@TIMM=LbS%ok_@m>IouQwB^f%Dv84G)s-U2y zqP9<=DFKsv4u!Z6KvYR7C`-tiH$35J)rrDBNXbp_gxxKgCUW|y^>>bNkxI9_8MT6~6q4m*9ZtEqt6(gcT``9w2TdpeRL@{6G zPS_1qOiAy56VpCfjFO#IPHycbw-zIE&9S6;ikgEzb;_D+CAajKTZ$36<`SCc$u$@4 z2z7U&nrkID_mZ275mn8#En~Iw+R2J;ASIJ%43W|d4E~UB=g3V>E0|J^6fr ze7-HB@&Zt7|Zn>SY#$W?8nLiQ#Lp`UcMR@VgBQ)+KM zTp%BAD-|klo?WIi(&3trTEU1TE1_B~S4z1$N3LuvS5jQDGI|P!R!Mef8+k{6c}EXK zzRW7U^VFVz?N9BAHuCm<^7bBx+*n!sJVj%LJ&`B=sUI6%B5yla-qu4Z;A@OxlLiRTip^Kzkk|P&2l#A4==4DD69TJ*WKj}ta zS!Ro9TU*Z0lk>~V`Bmk7RhU=CLg^{0p}RUsgP@qb=FhV9Q>(M)?7(@*P}N+UGNqsnHJ3{MJgT|lH@i|PC+5h~CbE?3PKl?3 z?^D#BNUpo4^88|XegPuMC6}>$da_)y2HT%pcOWHQQY1?X5J@h%ETOBOB$upq@ZYJm zSUGuKkvy*ek>rxgSaLmCE?NDNu7dQ$2NHExk9NT|1zQg- zl0yp+v7S4X>FnmDOf+iif00WbQY?oQNQEevT_&iq{|kcIm{Z`NlIepTIXqJiZYBq# zV0M{ystAZ3O%(wHi{-!qsnA5p^s*Q`CRs8awoefO1B&E;0;$kI$@H=`-a%3Xr~~+K zMnL}}*}p(4luETPFMcKck?Kj+r~XKf;WPhvzk>?w*H!i_K-5bn4xiaReg$ox96@UP zlo8aohwNJ*6|&&=EI!Yahd{eH9zlJIWS;`5kRm94Ic=Rna2pQbUm~b?vFu$S6{-kw z#JIGju~%ZEvp8M*MSD+sQd^)+(t2ynv`R3u_=RwBI5Qj!nE|W7NdC8jC*ceJ#lc`L zW^>^;M=e^|3 zya9Ii_xtZRkk2`{op<{y_ug|n%bdS~7PEt}>-ui_a_`fgp5FEDkG!+od%QQe|B#o< z`QDN4YdoL3^F4cQ`{5*bXIOPV=JmT*O7BarNKe2?dynf6IAQ;(>mZ!0-{ZO)PSjuK zYKD{ai(E6{1pR2&KsY(?ciG{@{1@sWI4S?Qx)V;wU!k_Z$@nGe95@j_Ud@1$@Cm8} zC*Z$UK7^C+`;-UZ#QQd73!HSXQRc%5_Z(#yoNP~0TyUcOxO@aovOfcRAO`q4!dZu} z+Bn$x@Qn75cDr^B>~}a9bQo5F{=zAsyKpGzElkn8ngA=tUx227^s1iULI2>Vp10vV!egGDpmFdjSXVy>&LAuR9fK1+qhKw) zTYqt;J(OKrS+lNTX+x;8p`mF-b*N!QWql(XP0K^|)iu?X4b_W6o$KPoKK7YQs%x_w zL67&srpD@&VmZn$`HimPIQz`PlI*F4p{dzr6@?Xrr6r-MQznIGl$R&>j2&8#mptf{ zp^4qad~3-SW!V!a7Um|8Icr%1<75+8Dk2h|{d|QJ$YWy)3`H0*XC- zYVzPSjF;3yoMbJpEWfz4B7b6ea)x}TaKB}x8c~wd#A0hHQ}fFv=9W$`smL!&PCuhq zodRO6wXEW)<>fPSlgFPfLLclH^-CKo7uHngtZS@pNM0W8)siF*wa;uHtEjs6?8YU@ zD>{jp=78L~+J?sDO)>nJb`%F0@$+k{S5$+wisWUn#D`PFkx|k46*k5WT4H&T3%p`i z7(uzv(~GByWhU1&lWVF^>~5c3-B40jT)A#xb#hsRds>9MSP?t0_{mdUVkgXQb@GhP z;;5*cQ>C?@BCIA+92`B)lV-6t31!!;sa)3(TDoFoO{n9y(Oxs6ygDr5CF2RTcQeE) z5K~qhit3|z`Q=k8N~ea(^QMHdXJi)^W#<&-i#K@0&Md*C;_O-CCN67gc2VJ^lBDZR zu4_%ME4XV?QE5(gk@&R9wV%~qC_66?24H#V#H33j+!x1*X%NoaDU@AQA(r#>^=B7> zO+(u_lWU~OmB~6%+bmgIS6|)OR9_oPnwt!EY1;x;)Gey!)tIzAK^zbnl2m8qxq=PJ zHW@Sp*EZGEG*;KISXx`z2(xcecV9t8rNB4_+t1<2Z?-R~`yG?Z9QLXy z>_wC78Ixmn;em1#&FuA@pxz?FnjV4#E$+g_% zI@{!0WOB_nxn`SOGz0KHW-l^@O*FYCm|UYxt|2BD7?EN#4$16ia`iO1x|v)lCRc*V zB_26DHSQlj|Xq>wc4~-sGw?xlHY6qxp)) zx~ctam8Nv_OfFMv+A2(8Q%$ZZCf6jBD+d;2+RiiW0@E9`*@G>cV-N%+po6QG%2=P8ZcEN6PDG z)IKRsTGnh^`=soNU1>)9q&#dXrLBEZcE^^|R=NjbM`|nAuG6(o%7wApCuQR)+b3m% zMf;?z?;?(gegZ9@U0#u2tj)I$%rBb(Pq^_h-yvp}%t+2UWoY-9PvY=gQ&Bd(ydt^( z>7#Ur`33<}iYFCUB#%68j6m#sLK%an4DA>58GmMePC3+4VQzkT@_;jnl@Rkv>}_r| zU;n>Xfc^gG`-W>TX%}d@n&f@jdyY2)_9E|scg*IwV~o6-Wx`Aa8MI!#U{xb6n||bybx$IQ22osINz7N|zK$m*gU%<%Y9c$X-~)_ia`iAm+dMPDblGe(B;u z>Ec{O{8-k)ERI2S^|M?+HLA<_s4QLNl(wcx7Y&gv;uS`w#w;qVI=aI8NE?FEhEa&z zR!0l7A7%8GyL<6Ko-)W6@uN znGB0B!5|_5MF8Tr+?*C>bc}V4=siD%2-d$%dw%qKfQ+zppRp~>{uu1}u~>^{dwxt7 zQ(@DOp1gy^)_q_Zl+2P@RAohURZftm&yuE3L&Qb9NiDiPGV|QbsuI#$R3%L|6Qqin zQpGexT%5^mA!}pZq8kMyMSPk!q?CiHjA;@>k$s?_*uo5sL7iGG$$^yUW-$bn&6Ucg zNepR8j*O34ET$TQ=rg?`W7B#WkrYM9Q_RHrnnpEPx-G?fKr zwQy5pRs*TbJdm7Ht}5kn`9QxREit z#R4j5ijHb9BR%ATg^p{9X=%(pDY`DlNTVvGQN@TflB_L_v5^GnE$WiG-54pWT*@j& zq>;o-jlmeO7)c<>dL)gJMoyPT79-L~BC}%_BMGELw~LXT5woNb#S%jrNxJ&mfCq>M0oupw-X>6J_EJGT`TZS1NgZi-ONIlA>9>s{% z1DJ6#>mC4?iq!+UPnWtEOAM(8kf}0@9sp8K(E|drq(HI6ka~b_vn;v?7=j{uK(}(K zTd~BDkIo?P0oKo=Mh|Fv7EN_ZebS`VAyO*u0~2EQficm2V5Ag3Rf;b}r0qWAdHRTV z5H>m?eeBUWQi>~;;tCOI)5th3$)Z+4Qp{Q%DfufTe<32(>R8HBbgdeK%(XgF@|8-y zLPUOt8UrG%?@&-{k?%vAQ|g!|X@ez=1&(VO&984UtcF`usq>Gi&OZtfX}`}X%765J zA4nf#SdDc4yVUvbLPXl{lSN{phZTtVUxtB5S&_EyF9u=CgK8>juGU8v=NzW!&t8)5(daaeP%_Y8JF11GSjySsp8xxav}xqh&Me!V&b z&fq@{E93dF68->aZZDP<(7v`^s+UH>B_0MnX?Cz>cBNycBSCyw+$hc#yV&1@y#;Bu z!?uTQ8*P(p4!G?9@|)O7yP_>x;r3Is!WenuEO}!wB5#FOeP48RD;R>ztuRJzE|;5& z5m_sYY-RhMp%pCl)#{Jl^j;}%aLTP|@`i!(1{N};m2Gf_U5i~Ub}i~jRe9|gd2O7$ zHc4K~{L)(4mS&jOqph0TZ$u-p@mJ?=VPEG)&CM_#EKW;=BJU@1p;InRlMB=3LKc?RN*kLkYVImtbEDkyDCpd@ zZP}u8Ulp@+kCd}Y<*Y(P>fHLK<><~0V*aPjJ+f3DStv847Gj&5p<*ps2rhMs78+3@ zk0_KGQVX%I&eknt2#Rc>;idBMLYX0Jp)sv&-!rt3#cNJm3$^v`VNQ8WnmjB+9>zkm zTKTSLtGCiCBHl{n0jfN}iHL8dt$dra)#shd+z`+BpVmtIm@PWOWvnAWOj#ZvX1B7< z%F(sKp2;rLThKIwY>?88R|4ecu3Bl+vc)$TkinaV$!Px##>gp1;S&bixeVW6EHiyL zxXyAXr`)xl+$mG;#4C>W99vY}1$@46f?{o$FZ8X&(a)I|oMOIkl**1mnIX*=w0St< z3oPqxAm)FXFT_$=ER-2i1JNd9iw1&A#cZIFvb{pK7a~#v(SBo#o1r1d+(08`Td8a- zMC9`YZ8bjCd;tsD`csbJl);*=kRc0vPN!YP7HzZv+erG-Eqy6YYSniSM}J1#pjWPG zC{yR|FMW|CeK8i1AMa_^w-HA_)Pbb70o``wufOzpj`aChL{{VxEgN{B>>R!BL48tR zD>&+uzDkph4v>ywk8Gjc!4{=GhnMzExAdkXuSMSi9Ni<&iPGfPhR;#00&f&Fssz(F88-cA~ z>0p}lTDtTa>qg^R*73_*ylOT@ziRfC_Ge4`MQ7}h0?vbh}3qg_@yk`4lWh5?J}i%N~C*o z5vlD~Ql6vR&Jbj7yG-fsLh0^YMAmlWTIxUqwB4z{XH^*!t8|xBx<5_2Yly^75yIEz zTAl@q)`K;1+GDo564Ey`25fz#8-mgeqY!azmA(Iu7g`11!(c0{+~?Px*VcokvlQ<~ z-s`+Gyy>77{~`DWknaB8{Q&4->kT^S8(l>%pZW?|eIKR9DQ_x&fn5NCd^Kpt>kYQj zZb9D%Fr|= zJyS{N^}^R}tv*V8#OtM-Tj>U^NUOFMt@x2%AnR64ouH(SQW&!QX0@{ATgb1)Gb76o z=2vgSu1=+Un$mTU(v|0xR&6cX@I9VaFx;p?8|q85(QWwNDcaCmsCaV~hSY{^an`yG zLCpWuhMq#jldCY~J)5oLo~~!>w^zmORQzd*d$8hWwUX7!7jdoL>fVibs{=zWV7wiX zzt!N-MJ#RsSZddWa^2Rrl;x>xEbLoc*R=XQpmqgOqN(3?R<* z!B)2N3iWQWrU){kXL=^Wk0JnZj?Zc3>#tUe^M(kP4bzLEURcNoo8`y0vX$6ai}P*Y zlJr+YJ-H8(xY2@?=;}AJ^ZhLO`(l|PztOg`HCZ-(qHnZ@ zAnXgq=dm&JiE{ZwF(PY%(XDJ*HrBu}){SVokiT=vKc~sx4VJ&-4M1zM77g$$Z-9^8 z^2btME3LR%e3E)L=5#SeK3pyzE=J@lgsrsX8ZqUwb_6m1%XA@sR4#v1j7SYli?S9C z4VQ}5&>v2hKP;9RQbV(KSvJnh?L!$pMMHluOa7o(W=IW9OSBdZ4cXy>A{+Ysa{2vY znIRu*Y?U_FUCd}`{zsH-JR%b1mdLM7<7v1uU@EL}dRwM3WtjPQH zHZo05`Wt}!LQsBTG$Os_$6j6qNii$0ul#(z{QPJ{s=V0CtA-$R<@J@H3(C)pM&zS} zmRBtwjP%OW-z4N`o$||R^0R~GXL;4p+Nwp>?d4VXkXwETKE&v2sL?moy)j2gro6jQ z-kpm`A7W?$)nb%@nEz>%JXk0{m@6}+CZZ))i~bFlirGY&@&hIE1G$LQL~NnedLlCf znVTq6zQ0huKNperZ?@cey8hkv!XWQ*%8#VUyE5fntdT~y(rRm`ZjcZB$KC-1)^8ue z7lsDoZNVwurpmW**bqUrXvzSqzfrBUU~2XK!FXHd_W`&v|F6lnvA3;75xW+AC19NCPNnLFt?T^@G zFIaZ_OnDD9>OZSIrrZxU-L6-z1YPay#_YR_xg5$z4Gn8E5KIy`CwsSnQwt_2G}Ui0j&e+zFxi*pWi2GziU5u zwt`)O!`eYOrLa$XSi2W23S6sQrnPA2Xe+hFprO4?E6~Pk!?gZd0Ccl^U?0Ot?{V)@ z@B5&Y{W_ltLk*L!w~SAy<=ed@#ROWd{Ysp5s=2G4cw zZD0>@jwkFnPi%6y!SdTL;g0}zf9bY;=0{sgwI-UeQ|Mxg1=t==oIa*kBb0-gC;u5?!~`LAH7uT?%*ou*Dw$Eia-Jv>QjKeZd!X>fyf$Y0>A z(Gt&mPX*XX40=X*27*08ze@t``ah`0)MKn3}&SnTT~bychFPum|ARI#HSw3SqAlZacHcs6m3wt)sW z#Ne_F?puSqL+9+G&e{HDa6jps`!<~u4;tK?I%oe<=RC^|Zjr%t(K+}126qqVR#&=? za;|Zy_?^KWr+8~TKN8pIU8QrLa}2JYb0FnsgQGly-w%f034-QV!*YjC{{ zu9v~}Ft~uhr5YTy49H6{{E`eV(clscF5ck$oI9s6!OOWd^@-G~z@4l6CEQ|gI}EO) z!RhiEJdbg|)m2)t!A&-}0)x}*zDiRKKcf{AZzjLWM5AvcT&?>h7%k(a9=p2I`?((K z9%gVuI9Jz{_>Fo{IKg!KxR0S9<9Lr{+$V~``P(OW`2BpFzyEg&CztHN+ z6uK1yS8e!J8C=NV<{8{s#8oBprU}9HLnQ}}CM@9i^ut1_h!yS?FBDZ;rvuLN3(QkW_4NMVzZ!os`SD#&t>AoU5-+n!ve+rlc{%RcjOv9tHK# zYOO7Flo2n1xJr#CiH1sTGxw{nPJGhfZZo(W4UYGF(4>{vWccwq0KbHrb-x57MFL$7 zLgVyME#Kgb5^2;E>#LP7^iYNRIQUT?udjBtaUbjPoF5Vw>e$oZdKg?cgG=Sys-_M< z8r(+)_cZ5L)+au1aL*dtZiD0VK?vf}bPF8a5`m)|9B`ZT6dh<@TUp=XeZ!C6Ey9Uf_f9igT ze;6FiAP`FP25@vw0q!Rw-VX*x?E#_R8GgrI(hggTIMxAn>;&ngbV51?w$u;Fv%und z0oc0B0$qE3LwAHJ~PeU3dj7@|{#pD94l|U={uV*yG!$ z>``_pcY;m$Yr#Um7NuEPtE>cz@C(2e-&CbQ32J-59^jqY4tRUts%_DlwYBj6zC>G~ z&C;gA8+=g9(lWHZ@D87(`N6)L0B`XpyvMvpyocaD{sr$o?;h_ic$41&TJyGgx4^sn zTJK8l60oc`%RALu;0=1S;C;TYH{eb3`n`%*@SFrq2FKuy{gCGXXwusUmg;tS?)2>N zTnqLMwt$_wwVsvmuDZZ8%QF?M)CE0Ro(xZ4Pr#D|HtH0Q;64d&&d1zGz(U;tcz53C z-s9foz7yV(uXS&AZ*e!n+xtqePPf24%RSXy;10U8z&2f9cfg(G_PZ7M3UU%O6CQIN zf$ty(TrYrKx;^kE-F2=XWVC zK|QISfOqC2pttaVc!}5|o+mbnHI53f*_Y=S>lo%32zKMUfW{TXzXU7)DUr3lmA)m;xu8k22n>3T1*4k- z!7yeQFkb0#Ivl@)<-u>@3(hRxR9}HOSF8|=;55ii=k3lLoZCPiY{p7Xf#3+G|yJI>d@-r*CzzF$fxN~uz!q)8H3Mf};P_yp~wG#)G_rc1rG z6WTFphEyU=)Q)I}z^dY6X})#<^h>VRUXa4tKIt-Po06quD1E`&W0K-m6xg3~Qa%B; z9*@X}1d5~UvP zpGofNM5%}PX+-#|$e((Yf2km-ON1;KV;@n-2Snc^`VP^zh#nyNDyQDJi5?_M@w{)6 z`wgO$&igvKzamO)?frt>M~PBfdk>SF+S>a*xepQ5^LHC}`)?t76VV%qUQhHoqSp|; zis<=dbOOWA9DxxYsD8jbp&M*Tpe zexOl5(5N41)DJZ32O9MQjrxH`^O8pWL8JLeqkf^$Jf%_p(5QcC)IYS3C|@*hX*92D z@00&~MBgR)Hqp0;zCrYLqOTHtiRiOL>E5oiLAbK6q zD~VoC^e;p&BYG*(i-}%DbPLhVM8iZ|iLNEOhUjXdO+*`sHV~~Rx{ByZqIE=Ti7q3$ zl;{$oXA`X^T19jr(FH_9MCTKoM|3XHvxv?iI-4lX1KLb-(>$O}CpXOlS~8jWYIKl#(R*7}mWH_hm6qJ4-`{`{0bzmxoFUhva= z;G_A#_dXBz(fINmA~%gQ-#g@{@#Z^7ZW?dC*T{V@(YuJ=LG(7Fw-CLFD2*TA-^l$} zqSvs!Kcj`a1z3Y$;_Ib-0=xgmdVhy^>^0s&o-aJNqyE45-PgJ2x;waDbZvswUs-)Z zZB&OTzbN;@TYX>o5BX_$gPI_{4ewoxrF7@#u!`K^90B&{H#$Z;;>APaU&MS+c>9U{ zT6?MObK4EJ)wZ$1k8sid=r=J;2fCxTc!;T|*y53)rWC6wIf%H$V`7*c>t=hf%$p}* zi$|Lv(Kp3>fhrcLVh$qThZAP!zAZO`vMa^hhm)b& zi&c9LA~g~n0=H-+Ly&bN*$Px!j>-_XdxhC4acCr~?OxPK#$HfWP*pii71C8WwaA)@ zj)q$_Qvz!yuky7|`C6P5rgPm9nT73MVuD`3R+$~Be3hqsH69Vq*G&xT2fL&DCP?D- zXD#Vio^ouw!jSh(I^J#3Hyf~L!mj;VI1yy;tbFNJzUilYnW22iLej$gXt%{N4$+5w zQ+da&yyM6V^K;x5W||;gtiCx!d3&<*b{--gUR)ZcL*AX&MfFV(W9pj?|6%V`4o+4M z<{?t;>IcQ6YZtB+yLN{tZ%tO-%0pzeJ37oxi$kZf+$KxaYxFARO;tIRro1^=c{2nx zoEB!M#9@qB^eQ*6;HTZn)6lEvK)6M(a_co?)fajz`^PK$vk&_VGSN2gEIkEb$`W?^f=IKE+Of zv#B|1XRs*6>{A)at^#FO4kGrcv%_>EymRz?2VzWp>OY(Bl)o1!f6qarn$^#gNB1bW zQtX<|P<9q5J97|O&1Qw!sdA`U%iWf|M;WJf?o*Wq)0F!LDfhAdlojTu#4S$khz|3q z9aXu>tK7s9Pwj;Hxp0e9JEGu*c*g&6VRrl*S|<9Op(sS3GlX=0Oby6wx>$7k# zq#4pk9H-pGg2uJ7bK#bCVgEh4E(R#q_FtlFqmQyFsB9XAhf=a_Eg(3Aab}F3JtGREmJ?N1BR25P`L8%|5Fr*5h z6XFq)ScQP3Q&q^S3CgNb3PV;QBU;%}ai|arg$h(3`u$_2Q(2v+tQ?@MyxWA?Fy6O@Ic6o%Bt^z+`)RSIHGRi%{^l*&;GL#k4C z>^r(~Se1gLQ&s7L3Ce;|3PV<UnM$6LLR88?oQQ(2s*gwmA|?_n!=CM;_8 z%jjCoP|hk)&dNsQ#vWU1s1Q-6{_K!GvQ}*w%A85coNPoq=T_OeoCGX|x-g$b0Rg-| zL*=JYD5%GXquyq-~hQ%=oxCXE3_KF%Ho3o0PS=oqasV}>ADP_}q zCV-73LxlO>m7&a>q|D4l#P^x})+Jmk3F zcag8bH`kZ%%k*{eiP~4%Ay}#30(QUl z*4}5qx_cI^xhKI6`jfEMehAjt_rMzaRi1M_3q6Ifo}L8j=*M9Fd_U|wzr(#9R?b^s z-Mq#<2Ug4nyA$0G*AK8legIa-ci9fRZgySe3cJ?8s`zZzWY-w5-q+Qosei&c_$TU{ z>eK3O^)_{zx*67DmxArSDe72tkeaIcU@yY=%BRX($}`GC%I(TEu=`-0vP?NkDN@EM z=}I?P3%1EW$e+mvY_d@v`urD|l^cRko2g6Q>IN2`!C>@2b8P7?Nz#8yh zrHiCIX60&I7^))oSv%rWldFOFL>3@xl{s$E1@!+t(RSY_<6gsrCt zv!gMq$m_+G`^BF2P@8w$jP~(XHe%k+3B}E2mfZAs1HsSI0poL)Vj)JS(iPM8SoZar?+>=*iT!ra6A+UaP zHdzx(1Unc;S(ete59(MKGpNH~nZY`$0V9>~xH&=lR{Uq|pan6568;i9$Y#y~6|@XZ zu~DrtqjMeJiSl`zS^DF79|GIt8Z&uEOPpox-|^KL{$6YUgbi((9s=9as^J=yi|T4? z)`j9T+b4k_{n8cI{vBV8;jdczC!E{X0pQYg4My2!#0cp4a;yM%jDUpo8mLQw>Z__L zUs+w{>S1;!nw_f2ss3(u9ydEbF*^^Moll#c51O5~nVo+%JFhT1FEl&XnVl=l&XCzT z&FsuGJ4c$Gz0FQ@<*1;>qg_oZ=E_liGKYR+cAjf?)|s6P&Ccm&=OnXpwAnex?CfH8 zdQ49F53}@-)qTxJe6SG#PkcDcVfa*EmMGC3u4wM!?=p~uY5 zBWCAnvvZl*IoIqgF*~!(&S7R}PqVXw+37Snoxhr$->d&7lsH({a-5G|xzmFVNOr z9$8?WVRB73xhl+0G%44$cV~t=mzdot*Whg_x4tpImf5i_Tr8d!<+C=*rx7RRT)3e$ zq9LZ`p_=N|)it5clVSvf_;z5OyJER=E}JL!uX&B@fNywOj7h)-%Tai~D}}QqcbQ2b|(R&ox~AQGHpxSS?XK%2DNJWrZ>r-l})Y8{}+wdww5I za92y+ogcuP@pPx(@v~}*P*r{7_%Ksy2kQCH zT);)+g^RqxMFHU=CSYusX}bdfnXz&(X?k{9UMX0N8!X_<3P=QZ9n$!mBjuDb3FQZ;2X zd7F}(SgIjmrn3&Nl@{Y#U`-rKms{anmA=ZmDrpr@#I)6&Nus)xI&WPPd{e7$Ob;`~ zb&v=wHAL4XJ-w*QQkKOnOIj9MR8^lIW*Y2Hmte`@C2>oVmhc2jUES#tEbhKIZgJ9L zmS9MjDW{87j&`Qfos~T*y_HFop-Pr5u8hvQ9F$0%lQJi6PSPBnfT^F0l`TENtiiM5 zW+lzy378(b(P7EO< zCXR_4F>nMEGCs_7&OuJbK%LmJ!?hbkSSKVT&!`UPAmQ3U-a$PFF#)+@ri=~*Oo~~l z`Lim@vP02gQU|1ZQ~RYdDcNDBiw>mZ#*`A7J~V7t<`6Y$P*PmdfFv%1DVh5(WF%%L z#w89&WHQpjOvRjH6MK49s0=vMqv+Mq!y(vLSJlI__tF*B=}TORF6K%LlPWoHN4B(J zBv8FhG2gYiZt0@AYB;2Z$A(E?T&L(S>h&ucSD+Qxwh!n9YPeDj&rrj2)G!Mk6DECe zoy|Iy*ur*>D^%VHZxJgd78d2h;;U_y+PYqCU4sak9UEZ)lNPxSolGkrY6nc6y9C$6 z7O1U@)z(FbU?qG^m??~dHGq!MIbPY+xQ3-^pW)UGYU>QOb++2dLPv*nEpg@yvsLt9 zWQMEMmO8a%DI&}7m@w&wv$*ux)zO!3S*5njP+MlJEi80Mm=wfWlyt9Og8+tHDAyHMR&t8QF^$m(`n zm=wDuTNHF@O?7Queaf?w*XeO%) zZC<1{&rqA^sm+TaMqZdyxUtO~{D)(a_4(oYx*Zck#*3lnpQCONE`h%=r??0@CQNGF zdPa195(8x_fLGj_YU~yZ)eS4v4T}*&P~Pk?>2XVjy+Zc3#Y46dws=w9%IaDgb?t}3 z2H`Sw!whx9Ss)4Gq=j{TZqakZP^_{A>iJdb`N1&L=LS_4p(PWqRaH~hP;JpQ&aYO_ zpP`;VUp;>@M9B}6I=7zY)@5~;0d)q2oeJwROV^s~ElFLIuCD2Y2$i<9CO1qv-MX9Q zu;B}G@|MS0x}auOVTk@C|MRR>rQtHhidbYJQ2T zuIQz%h*MW2sVf@RHH6Z_q}$D6^H@LJJf;@8)gs5Fu&%l-YIR=hXW1)_eZ5l()G0YC zL)yj4G`PX)yv0^ykQBXUYzUfMtWM5R8PYCR(&rYvbAn|l_A-BlT3DbK<{;uSf0!wJ zgSxg_=GS+z(srdza7J4#NmC2b)dIeYwJ$G?Mg8^U^*7wD4u{RgeR#ZxKEZlu&**G9 z4#`8LhU!I`HuoJistiGSqy>ig>QXQ=3v9+{9C;L-#{l>i0lxqP_&M+*EE!%Q z$o$~PGSVHnX6`^9A;6G@+XR2GIl#DPLAVK=HpevZ1&@GGFsoNUu;=w@7VOPiHU@7h z+|nVyOS2%?R#LQ72z2lVm5hUqzE^#ENGO18bPPHix!rBUu&8!_u-}$v7Am#_c~HQ> zR$&uMoGmDjQHPKq#7|cszy%i)GPgQ+Epq0FzzRZZv$Di?FGOeohaxn`s{+e`!@)wQ z+J-a>PMBW-L6*3D%IFODKBV^;u2QkA-h#yaNAh zkPZH`Vc#YPR6dW7s7Hag%@6?wNB~HiNH*f|2QnB9praRWLF5@IbSZXy_yrh%(gr9* zGh-RU`;sWYXbEB~1z7<8ngR28B<{i6i1`G0F$3T~m50H#`XYxRn;b#%=A;=f&MwD( zJh4M?HKSAaf+7Wh=b_*TumGW%6B{2h&CH8MYv$p0K?MdJ_~RF_LvbNF{Txs~%{CUo z{DRDvUjamjbPe!>2w@h+e=NE`0KjCm{~698W&whLVe)wQWXnKgdP9%VR<= zvrQo9SVTc-X49%69)z{~;RwT0GS47%V1JNt(2dMLC8#$QrU&^!kj{7-xoy!|Kmg{d zwqLtT2Emv8@m~NXU^c-cNWOi!M}V9_ni-2_ay+98gUs?D)hF|}wNUeKp)eu9tBTzd z1DlvXL_QMDmI~YU{BPqKa|M38t<x+9kyPW(JVT^ z>W@R(65J}JeR{=45CfN20?z$+?ou5A7t2df$nyv6dGNSkYqkf2@vNIcH<~C23I67( zf}hPB&F}{=54J=oCks}BczX*5;IddKMP#Dz*UX~Bb2r2bGS7em0LsnE!J>noy#+X) zUK z1MItPp0Hm44R2F@iQ22$mD+5r2WZZJ*?SLY$RFf6?)kf?$y4GyQLsj4Y7@5*_^nUDNX=!u%L`f18p@=`#z$@;ZCHE zwye>%tgg1KEL#>6GqodAN0&s>nP@u{P2$ave3uC^g#Z9|x_qRmV@!hc;zuPr^x zmfq2pKEjsH#0}fbbR@u%Xg|!GvBC+PJ9@w)IIII!u3Wmfa>de`b?Hk~+raL&fy^&! zGuMb<1gbts zywbIH?eNV^*#U^|8MAqD|CrMj-_sWFwZ(U`#WT4hHZ$c1kPdd8ME5V)VTF6ZVAGgt z)5hAgIGfhRrh&fpQ1)h~?f??Ps(y4r*3TzSFUe)&rX03BOq*Ur5kT8oT;QU17htLf&hP@?P7=QDD16&P z_?BOQv=LZbU`x9TFl7U0bOBX3mLnXC6ON?{$Jhl%Y-ZX6AZZ`38r>O;o-i{M5{{+| zM^)iyN8xA)c5e>Z%(VsBx>+ZL?FKB-XZ?lGRN=EY;WJ3Ibi`(+Cm`0HJjIyJOfLW= z>E1bVOr?vk`diOVy4BT$asUE0r|>~n;e!ss2VH~@Sm5Z*0;P`BX(6>wjf+2!_`NQ| zd-1}1orU*U;;b-N1)y~3Zo0IsgCwr^hAP%I!d`G#Osx*sx(F}!5nfC~w1*nkWrevG z043ruv*y-HcfajS$MGnVhF_b3G-wB(P|qc@jSOvc(JeWBFB+oey-mh zJx|#c*l^soF&^S42`_nsmpTbAu`0_7^JD#1C0lp8lJOJ$RwY|^x{~oz{8lAf8&NWL zN*^>h{1+u-$MWqqtCBUHu4JouQj0cgI$g>5aeS+iHAa+-9k>5)O4c>Z&)35>V2@PW zmM6h04V?lF+$&7S=sQJE$*WvdtgkW{8D^*DVLZY1O^a!XjVBfr_9{4q$9o8mdxgi7 zg~!=&=oO{|@)j4UYkvWD`u)rl_K25271>polLiQL^>PA@)PH$6?;cF;f^@rjuhbzCU#_aG0#mut9g88E}muK zM^uDc@`PJd;g&?jW(IN`>w!i{k1y>?=F z5l44DG>9Cm{ZU0UIF{iuNftPcD`#y z3fHh4O%GT8za;nSdBW9R;p&mX)l9C-*Twd^LlS(6U}ewcb7+5PC$%56Z?rE!xBB~F zYwtDf1#Q3fIN00UrQNOFs@(uu`>)V0(ZZm&{~WDRs|C&d3&Hl@4A9*_S<3_ads*5L zZ6N3i2xuu-Rt{26rke+{?qfJm9$(G#BphTnG9GE&~n!n>^=vR)dcJWu8S~k#3f!%v0o< z2zvfUdxm+^LDPQ^PZv)j==yhg9PU3r+y4*lZ@^OC5%>GlN2?py^<*Yqx7BSOT~itRij$TL2fiTEHgXT35ZR#V?3^+WX?^#E8FdQMdwYYsms-zZ;zJ%{&|gUV~l3(9`waphsK>2SAlt8xQab+|&gLXGr+dPWF=1-51RLfC(B1!lbgy)~v_ra1x(aksZjm-g z=Si!jmC`b4ku+bLC6!4<(nKjJjh2RiJ%PSb52*{-8t_Xl$pO{|PC9>ZegifMjyT_U z9t5idFF5x*9|s!-yPS7BZv`s`*E+9oUIKOunw{r38^Myn66ZpP9`pzC~R|VbzB5C6wY_7b<~3ug~g5qjyYhnp~O+($N{SjBODoy{$RHu)sf_gcX+^_ z!VKqB=VY*`Fy5Kv90E2KdOHKo6tJqGITfcJ>?-{1IN|sjtTh~V9CEzrc*Xad? zRv?xkPDLz1EJB=&Sb#VYF%K~ZF^D)GaV+9!#4N-Sh{F(vBHoC2J>uUG|B84G;?;;( zB3_R87sN{tFGSpexEZk(@dCt+h#L^sBc6-64si|QYQ!eQM#Or=OvDVt!HDUIgAfNI z4nXXW*cY)kVlTuVhylb@MBZvC$R{BtA|@clBl;0FL=U11Q9+at9f)>BfnnSqh`%HL zhIkV3XT+Zne?UBecpUK?#IF&LA%1~)6!BBUBZ!9)KSX>V@etxWhzAkhL_C1_8saO6 zFCo5&_yXedh|eKDi}(!U(}?>KpF-S+_ypqPhD@lM3s z5pPAj8F2^V4T#$juS2{RaU0@Qh*uzPMZ66062yxTw;+ZQTM#!PHY1*ocpl<8h-(p7 zBQ_$|Bd$cOMXW(whPVWAG2$Y`g@_9fLx}Sc=ONBTJPUCS;%vlOh%*sqAWlcDKrBZr zL!5><6|oet1hE)#3SuGRB*c8gT*Pd|35eqm#~_YE9Ems_5odrn9BXkn%HnW*#o@?` z>xXgrAf_SqMC^{(4Y4a?XT)U0PKX^5J0Qj(`ViqP35*vvqKYUZIuS)g8$p_&MTdh@T*SjQA1a2Z-+>zJvG{;sL~05pf*( zpGO|Yi~lL)pG5pW#K#aHMSKMDA;bp}???PQ;(dtsAl`*|2jXprw;4*an`y=*6?1R`FF%7X7Vo$^X zVmHLDh@BCW5IZ7vK#W85A$k#Ah%%xRQAD&c^!l1#19caKztwZJ;XzZ?;_&p@V$-vLBux@UqgHu@dd=^5OJjV_9MR!@d?Do z5g$X`i})zw9>hlwA4Yr#aW^84Bj5eV{~hsOL>xiBJCMH(@fO6J5N|;I8{%IPuR+{~ zcs1gch?gT?hIla|jw9b@9C0XOCgNa392dSp$Pa|I=nh+iUNe~ZWd z7LWZc9{XGTM;Q76;(LhiBEF6I7UCO-uOq&S_%h;)h|eQFi}*C+Q;1I@{vYCFh>s#Z zg7^^PgNXMd{vGi?#Cs6$Lc9acL9eXt3iZI6np3Za3Q{+Y#G7-(lb5zFU1QzJ>4((#t1l$Fu|RZQ(Ml z2EHH+fiDIEd?k1ez6xyhuJ+EgUFy8p@rU@KZMCz}@um2zE##c%I3Vuy=7P3CujdEP z+wi`Bi{}#9qcGo-?-}SxbpPA^sryCugYIqaHDHl%lsn1w3%qqd4e!~Pf}Oo`u&&n; z^a#ET@5mR!8*#b)8T)cD#lc{iH9N#R&ReLHVh@6v@-o4s`*3(elTkOk00sH1|k+O=0-7wRTv>k8tSA~L2T z5-jkteFasZ;4bcW)X%{aMuh8H?$(Cl{ilyr6^e)bO19CVyoN?cC$t~QIKRQUQ89*b z{Hz4lJcLJ4t%%|0-fVV@nW*!E=ME|pwDQFdZl_L=d9~A_*Wt!?_0tyS`zgYkRRKuK z5Cmy$TLY4^!?@|-T}j^1Bv>h28(@dw?Q{XQ1?lzFVN|>8v;}wQiCQ|Sib-Hw3#<)w z$WIm9^vI#QIO+$9lOp`7BP8ZU`0M)Xa?Cl<#f&$5>r%#;y>%g@+EqGNg%~%dU8OUx zc9ote#}4aQA3LnW_I6iqlj-|D!kaf%+*uJNrlNIhr$i8Ij>^{Y(TMm|xQ>ss6W=!A zIzDLj)}`z+d+S1WMhMr3?e7u(Bqrh42!E23@QYczF6KwGw=U&`*;^NKyr))QfMjkRSvZ7X0u3K2m!v;kP?XrGK-XGEnSi*lsUH)=67^Ll5g6I}~!38d(8tY2yJU2%~HyU-1WdM{T;{Hn0PTZXlBZSQ&Q0FTxyg|s4b}E=zBjTL1Afkra zsvZPA9y1Wc?T)CAwv=)AS_SdEHO2@6fi)4OHyUbDIaju&jr)Q>wWCIGdK8X(AyQiVr`dQ{>`<7`?UC1NOB?rF zyL-W_m9jqpOvZS{S-SC>hGJ#GPR|RI~ti|9@egH zPM$gj$UhNTCbNvVW07Uz;c+ioNp7oexc7Qa9Rupq;nG&wE)%y2?jmqlJ=xbAV?>bf4*tp5V`>o>a2aW%k- zb+v20YbIE*FNF2#F|J{*L9X7eZm?P%=W@A3^>_83uvYygSh0T(H2A-)Ez_!C*T8hG zM4JTG1xCS}{{XF*)>TW?e6VA{=Kan4qxT!IH*nbduJ?fVMely^W3XG`KCn4(qxV|x z<*--a0`Ga=CU33xY}hF<+gs+H;?47pgM9*n;mbgGZ;H1A>=JN#{_yuEN zeOUcFSaQD!*2S+>FHu|7^VK!5D!x=*sGg-(sKu}*K0(b=Gu8fTPgoJ}sA{SV76pEV z_3(dyp2Lrnca+y*HT)@Muks++KD-Uq!mm-bDi$l@4}as7p47h(qgxC zAFO%bC|xUE4i*b8fEDj1sa85$S|H7a_3kNBo-|GxAq|Gr?(R~G)Ist{PFU;y#d*T{ z6?~of09LwRg>N)Zf<=S-VV(OH=XU4S&dZ#eVU>HGv);MfxyU&WR;Wvz12|*Tm<=ed43y z1L8g6t>X3KHrVO$f#;y-RnK#tC*ix#{hqtw+s}5-)v(KBv!~g!&QtGM4tqT2d1iP@ zJq4a@*x@l0z6qsyQaznue~0R^yZ`0>2~M(n;r`ft$o+=?x8ouAPOwR_!~Iv- z*>N%0rC9G??XH7;9hG36qTKhZ?+4#Md`EpB!7BUfz88E?`S$uAgf;ftd^h;6@on{8 z2rKO8`Wk&Je2aY{SYMy!o9xT=jr9$O)%8BUfG^n>?{mY>nty9QYu~}wu1{cJ&0E?l z+Owc*^AY&+b(eOt_BZV+?NZoNvq4*{t%5HUU>-tpY~bX4PS$gB9w+B=atp`bFzw)m7LUZQp?E-PHH$=&dD-PmU6O$le0Nl%t$=cIy@a!$%Pna0UfPD(i`;iQ<8B2K1o zGMSS?P6{}g#K}ZX@;S-lB$tyMPO>=(ax#IF@tlm~WGp9RI2p~!C{D6C8Og~APKI+b zjFX|94B;e`lMGGCH(RC%ri7$w?1Rx^oiXq#Gxx zoOI=+3n!g9N#P`!lO#?$agxXhYEB2~0LDxyXr~6B{Rd{E2^}OZ33 z9O2|+P7ZVO5hovV@&PCBbMhW1hd6nclXp0Io0Ef_yv50zoV>xw0Zv}$VDk zUgqQ_PG02X1x}vlVPop5|mfCr@#*kCP`kd4iMwoOy{J6 zlX6bVIGM)DR8C4cDdD7;lOj&0a59;bLQV=enZ$@woXAN&CwZLYa+1SIHYY(&CUElq zu=gF{RTSOd*`3{6_BKN3MJ}Nvp{CJ`gd`M&B#_WVyo7KAku*~TtYAyQ-oWxIuZm(r z>?js&h#eIb5fQOrL+tpzmha4-xhK0f6N2db|G(e!eegW_{bu&;?980Av%7Q8oEeKS z24OV9D1?y+BM^oo3_}=-Fa#kTAq^oFAq62BVKBlVgn=9!8k&@bCZ(ZCX=qX!nv{kn zrJ+e_Xi^%Ql!hjyp-E|IQW~0+h9;$SCKf-4SpCWvM@G-(i2>TE|MA(b)0m2@H z_Yrm@yoaz0;a!BC2=5@gjqn!24um%m-avRAVLQTW2(Kc%g77lJO9(F_ynwI`;dz9u z2+turi|`D>(+E!?Y(aPu;R%Gt5gtR>i~vh(Vq!+cTp0sjHvbGv4fFwT|F!+Pv_vbME1AUdA0$+pYY5mz(Yy<3i*GGL!vnvny$VPu6SWoP8s>ZJV9 zU-`qQ{E?*m!Ryqoj)&uiB|N>FFTi@wfFF-b3yZ>K;c^HXU0FK0P6XgTzNO1T%zoS$ zA}c!&7PP=(%8=Og!KeIEto+hm`6W&H1ux7a^2;y$Zu1L^K>SB_;h)DVKetzYPE&ry z3-j>&@(aJy{K6tE|504nt^6=n`5{*MVX*Q8zwqR`nYdu4#j-@-S+>K7^qyNekfI!j zRSpbR4)C%v>O>&_78h+dFH2WG@1uO~Q$Fvde9p@lUsr(j86(psY%!9R31Qq}9jz#8 z%H;8(kgj}^pnT#}KIyG|!guQ&RVU*8r^swNG%?qHy0R}v+2>aFby4<(LW?R!*NMRY zY0|UJDp;?seArw0(5-yfRr!!#d}f{41|TeJ0ly8z$(eb1w6rRcm&3Pt5&M?t%AQfm z9-p#jxUz?L&Fng{T|mj7D!3pcCkuAY2-%B%e~j|JPkDc&@;)y*w@z#@elpI{`Pb z(Uo^bD)0Erzr5s}y5r3I#NAwDhbh^nu(wl`w|xr#%L|-YhZ`8Un=9-v1=_1B^!3&V zTp*BcXNFmX~DX(BTd=iGyn1;bL()E1EqQ6MQD!JZZTbXb+q!TPkA*( zd6kzqtB&u20EolZq(=rTkHjjEbW$F{lQIr-QeNar_jgh5k5%sPq}(5> zvC>z@=8@nkR@g%-m0;o>fCOT4P0Fb zb$r7F`NcLzU5syx@Fy>JeX4SOta5!{1yOOTtv9CMZC3(1r2aTK=Q^#jdFRv|I zFs2T-MSu;fBr!#JH;KJ-B73+g7fw+waw`{hQ_Kyodex=lbtFMg?x&z96YFq81irV7 zydT9tH92P{tUAwvH|y!pkI=PlWks5@GFDkJP+7rypjVyP7eR8pdo9=FyB>hvj^cV% zCn(jiO4UH6ieGPB9pCu?Y_>-)Tg`co-)V%VhpQnHS9oD9>^V_c!y|_&ZItqOrM!#z zSBG5{t265O#s^RY-~Iysn?Z#{5mQRa!#Ut!Rb8^EJiIVyZeGzwDeI+_bvOS)l>CzN z33YrY1YQl;y`p&;d^-q!qeg`<ds)zz?Zprl?WCn+cQQ25^v1op|U<69^|=(D8$ z(Pn6dKC4&~<~vhXSCmJEJyRCgR<$&9Llp%fP=#RHV$sY)?cBC>-*^fn<5cAHs=Axe0- z5}sDacTj*vANwaN5p`|95+139yDH%{1@;avKed0I*iOOMgPRFOu)^?mWTx$u!fr~T zKB%sb=&n98X^Ty^Q|9+j=4;$=$HlCU32Y5q4<7l${U7@q{lk5q`d0Z;VQu|G-WqQ* z{9^i`=M+yj<89*tqbK}=f0cWN+X)f>!mf_aea;(TopyW2tFY2K-_cHgOTPwwDfYlB z<@>ZcSo7>>AF>BoBP(JfSR3^T@U#!BBh@(Nb7hNiwNj>ZjX3~O|5is$1SHn;NOjGh zEO3iy-C&oK>Y4(GK*B-`t80?#c|+oU=FCHQg_1*QZgrzyeI!=hI7HnT3M~xxt>?ky;PO#p zIIn7)5h}>2T9oPv)f84G)bl`bAlS8eo46paVyZJ#Q?tBpJ&yr**dkLLSR{}7cK9Mw zbY5iddLHBrB%?-TQA_Uj&-*>Gz5|Lyy=gRwSyaRWxIu{$6+v^NRMZY-B`N~hXcdX@ zZAYu3RJXd$uWpD{*9}qEp^A85H+g@0QALsdsN1%Rj(bQUd#KlcfCAF z8@Cdtwed!ajYly{<3&_9N#j8@s_{HF8+4SU@gN)BcoB{5Xd9pGRxk0ZYhu+)hNzeD z#*e5MVcMehhJyf&gIHB{$!XzG4gQ6&Wa`SU>dJQN$}Z|kerQC!4poOYp8m2otb)l? zvqJ@949e2gGrOy2`qVSKs%M5^6TH#&8lKzPd*sm@pZ0ZN~pclOA z#T8Xh61FPbQ{)YUXnV`tIq4D&f~S2RClVV%`jPQ;LN7lSc<`_@S@_?d5P*g zE;qK0hn?eHFVnu+9#KL>e{OZI8fv4??XAw`by-kXg9VJqZAEvyC85gN1*IiLGWA&w zg9Zz_s&kk+r;9p=Uu0?>4_pV`pJxA}f`O79gd0v&v9t(W$QOny3l}xrefW8$&Q4Zm zcUNZ*R%dhJ%sLEor=-|-7K|#dY(c1~wklLsxXdi2vpQ?AI;*=nYmhpNmomMM$H9YI zB{eq+ORXx+z0)tUX(ncdZy{nVMf(2P1BA`cY8r!kt{j#hqHp6 z&ayI~&XN*x2dcRVYVH6vmv3)6q)tTA>)Nq-Ey7h*5NNl?RH>RXNXxNHH)ifW}OJL*L+I7c^Q!ib0IMuV*Rbc zt&TcY9TlsN8m*4v1<$VIf%u?u&F9n)SFnAm7AMu+YFdVx7OSR>RnvIUxpg9jpY+v+ zKayLUR}QHC#;W}~s{KZ({jfw4-tRAzm^fBV?5HM=QWJTJv+6|HzrQ?F?N)n?Q+vd! zJ;ta#c*)c17GlT#g_&x%+J22T4L=D8M-tMXwufb#f$*-|D>KgO0g-37=BS|%4RinFV@N4iLFMd(S z#RR?&d>VK+@N(cuh#$5tuqLo7a8}?Hh!{2tyqU)Yk^{XULZI9KD|j&P^S=dN0-OCC z{Qm^6M9)aiK!~*$2dfo+F}^ZBfarS98Jl2*!VSh{ z5KnKZak4QFRwZN_Nk$jL1M3jJcJFb&=HBAI*L@SL131rJ3tkMfV9(4E;P>Cv?REX; zI^g=iwH^HY?{nSky3%#N>r~ew@av!K8tLlq>gMu6%!6;h+u?QR)6V;yw>Yl?zx}1o z#m+g-zSBO^c4*IO4}l;38m&P)O9M_NbqhH&TZ`+gG?8(jc{MKe8v^v?rglCpX!XciEFS*^_JR$xH3Y zdV6xYJy~W?+Re;qH#6r1yRhBNoc--byV{fXd(dGwGsm|!VaMn8-OX`_T)qM z*^}SdlV8}A zZ`hOeJ5+zte)N8O@-};NwLRHjPo8N{R@;;IzS8H}kJ`;lpJYEe+MXP2PufR*J2d-6DY@>qLvs6ClvPab1Wwznt!_N3cfvMe_5hR^$w@D6rehy2ATH zMO9g0jqhn|;xTLDVQb=EYvL|z;x=pIW^3XGYvLMf;tFfxLTjSlnmE^*INO>y&6=pS zCd#deur*O=P0X_<=2#OmtcmH?M2oxEYhr*k(bt;jX-#ysCfZpO zZLA5yn$WF@7)!$YZ)@U5YvNmL;%jT-3v1$2YvLno;(cr4ZENBUYvN^V;(2SrYKh** ztw%Ol6ZcyacUu#;S`+`YCa$+8R$CL7TNA6SiSw+9v#g1w)p8oviJjKOTh_#O zYr<;E9;+#Pp0SEOVNE<@O*~*tY_KNQTN2DVhOhzr`@c#}iwXP;k;Fd;>Pzx)Y!-0H=89pM=!~X|(2t4Co2jBfC`zQImzGr+_`WE=IeSIJf z|I6MxA=-YWccQn4HvqBp8z3gYu||r~-f*}NL5%vR-0R#IKn(f}h&FGyesaC%+UmL& zzOGAMb6k^Py?j?#Bfksw4?NF#2CRW!0Dc8ioLLb2JsrNPdpo;1+c}s*%!=|d z_>U%cyU$J2;=;?|H<9vSd}jat@xjxBFed~){x#v?Xz{yWC?9?W91BiD;1d)MT7Hp) zod988E-O28N{~Lr6C;if!Nk6tCe1ZZpEn>Ves2Z@AA*!fIu+BYNx^7eUop1{H3CNm zaDa)r1{A>S#mkA5$9)r$Mg`9dp1E?ouDZ`)*&i|1%9BrMk zu0Bn5cV%DHEUv0pnwaE-RDgY+jJRLmX97P>!Te7|`s3u4lexBH**?<*$dxlxkUhH~ zF&JO4xTHE*ES$uG6;;7g3#&>B7nFvBiwmoR3&P>@V0CR}xT+|;5PaDdEDyqrX1FR? zTC$+3uxfcQJ{S+@RDeJsOt>!!Rxhsx6Q=?p5M|BsLBUMe?4@KOoK{=Sh2n#~xFaf` zAms%F<4elntipwZg8AWaumW#|#o^M*U@;WFFkDkuQd&JIKFNTlw`Y5jmrcm-2XqE| z¨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

-Gf>d_NGy?ZH^dx)(gwwBl$Vz(2cwp#BN3ZoWU zZ#jk0Q$f9JDC{a?%ZM!{b{VlH#1;{|gxGvybBWC+Hj7vZu_9tKh!qfVlNSUp4fB5o+0)Wu_uYq z-7i9SzX-LD2(^z$nVA27hG&-tzO-Hm@AuL0o8gV{?w)153%m3UHL^ktvsKDX$k+b%EiPe$N4Z8qe&RO%hkLmv9xn?jb-yE7sM?A$Y*(O;L%Es-mFcvdE}Q@vz>D*FG2~f<7o$mH3Y4=+ z$z)QGay9EotPNi?%_3hh#W@9Yd68!YFJipN;zeTB#jJ8M|H)awV^a__o*>cg3Tgo} zP?!k{GZ~+0@tH#5#4*g z3)Bi{^Fqc8>+wRFoH8*X$}u_SAC#QlWn$tJ#Oz!ZZ5f8^R`LSR9lU_?f=ph3Dq>2M zv&wHa6*2!Qp^C~hr7|50VZZD$d=3t)%DjDW3cJ6vn5RdJTq91X&j!*Pl&nGfIF~TQeVy3$$ z<{L^(&$4M4vsh=_IcC+7h#Jc$c$V=Aj891Cu-yoBC1q1xHNLWGOsP%7)+%_uX9>?| zJU^Yo<|Lv`OhyfdHt|LEN;t{Ym@jO`Osvfqm0(c``FQA{#xp)Xox`>#!k7uJ#vH6} zOunlz2W`fTugw^hGt!tmDB(QD^U`@9=6;^5#sSjkS~d^3w=P`a>J$@cci-xFAbB+21ih5w#sTj4} zq6u#6pA0#H4>9MmxRkIe_4zy}+Aa4SAohz%|qg37T5Ba&ilPvcXSo&QBJ` z^e-ETQ8+J_;j;co|CYSJ!TV?N{=$sbWdk4%c(ij^dt`UD#WMProt#L`WoeGS?Rj5= z_s!ycMLD!C>+h{8Yjqp4+S4&FP;dmFsB z$$N|W`@PHh;AM4Q6{c4+-pk;_2^%W^<`ammRm%Fi4U zV;S;`pV$i^D!+rn(Gsux0w&po>bw%K{1zs|Mp2mjDkj6u$FRcE@M*-N#N;x367$5E@pp`Q<)?PBew{iV1Nx5TUGCC|Ly^eSnz!(k_p#qcG_KBg3!&h3>6%bOkZ#?IO>+n!>IiwuIOv#O4r_ z-@fIw*eZnvRx82emuz`de!rFs8-O@^3dMqzM1-A8Vf~4zoP?t%QP_#Zr{c|IL2B}TP4 zgq@?v4XVYViFBUy(Gaod*T%whYBTy(6qYC6|Bp+Kc)Ux!-IG5}E{@y~X&&Aj?q_^x z%r$z$dTUpOI)ya-X??EV6lUKS^QQ2{eUkmnouPLm)v&b)A_U*r_K1m2`aM!2W z1o}D�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 diff --git a/.vs/MineSweeper/v17/ipch/AutoPCH/26d7c07a6d50e7f3/OPT.ipch b/.vs/MineSweeper/v17/ipch/AutoPCH/26d7c07a6d50e7f3/OPT.ipch deleted file mode 100644 index ef9bd9605a9803b03fe39632343a60f98f43a17b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655360 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 z3JKQDnHf+B@uYjgWgr!4s?4gZ%OE_Sk*GV(~U8X;-H@--6c=E$xTqo5g z<=I1Vt`Fg%v`;Q6m%QKoAN0Kzr=NBEWlv{YaHm&Su^)XpKlINn>v0h=pTmF78Z+YF99Mf*_ z!)f;$R-dJPxuzu$MM`m2AsNDSl3yoIA`4jhjP8Jf2kL?+54Z_b<2#oy!V`X z6rB_tf86UXYu{vh+l?u^WLe_Gv?Jwm!+4+5hz8y=NB-k*VVaDmDD{#2SO)v&cJB5~ z{N3dj+4A2D-uRG%BrR{*Zoq_bo>DiotL!+QpNoq&4wsMXN5ZfL0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X 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 b0|pEjFkrxd0RsjM7%*VKfB^#r4E%ur|Lmum diff --git a/.vs/MineSweeper/v17/ipch/AutoPCH/d788c3f2519d5322/RUN_APP.ipch b/.vs/MineSweeper/v17/ipch/AutoPCH/d788c3f2519d5322/RUN_APP.ipch deleted file mode 100644 index 6d4e6af05b2708cc0f98d0e1c1f10f2fe5fdc246..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2490368 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�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

Dey&^_N!VIxaF1c@fnjGULF5F%3lDkd(K+-;~ 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 z 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

J%>V6Z)@bFf|HKjwV`@d?BykT}KdVmUI~wx5SZ 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 zCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`% zYyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qL zz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)` z1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP} zO~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j z*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh=3D^W|0yY7g zfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg`n}AKgCSVh= z3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5unE`%Yyvg` zn}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5 zunE`%Yyvg`n}AKgCSVh=3D^W|0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6R-)`1Z)B} V0h@qLz$Rc5unE`%{{JWN{{Xed)sz4L diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json deleted file mode 100644 index e257ff9..0000000 --- a/.vs/ProjectSettings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "CurrentProjectSetting": "无配置" -} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json deleted file mode 100644 index 435c591..0000000 --- a/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ExpandedNodes": [ - "" - ], - "SelectedNode": "\\MineSweeper.sln", - "PreviewInSolutionExplorer": true -} \ No newline at end of file diff --git a/.vs/mine-sweeper/v17/.suo b/.vs/mine-sweeper/v17/.suo deleted file mode 100644 index 752622d7e847aba843328a69da27be0c6856eb88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14336 zcmeI3OLJ636vul&RPe<^Q7~wPh=?X8LlPeH3Q15(Bac9Eky0l!lMpkLnVOjZ*|~7- zUds&@Ww}tR`~X(*4RGgHtF+v^m-zely?1hFGWX`r48ldysWZ3Vr~91Kr%(6k{BnEC zZ#RD0`MaqL$IW_kXKAB()R&*|#m#18wvkreou#EE6)8@1Ej&OJxL^wWRZOQDHS>H+ zW>Kt+9JZScRi1BHrPU`l|NL^#-@hiFpx&)5PUUl8ESOKt8L&?i8#UKg>7}-KyIEJo zFS6H`Hcp);8}YTl!!Nu=lVb!WlLf}1MGDBe^@2WKW?jP1?x1@9{39gh+>Enk0W3K) z%lrj1KFlNJl>7}F#D)J6^49@T=YNX2-nxF4_&@#$5P#n7%gf&3rk~{d6!0|g3?Lec zjaz}8fb@W5K;Mmgw*%_qIX6%7wGb}~+{^WUYu6vu_5ay@T>qoU;hf_UIsdWSAgBX9-s?&71#^B2J8b~2lfMR0B-`_Ko9U1&NqvIp7wI({s++Kn{*!i)k8+Gvt=64d#?I>Pa%uy#05Kt|U7O zXU!DW=NQ;Z#=$L{Pn0N|2_p##54)Ma)`iEu@Y+u4Q9iQQ6o#373S7cA3+8JpM&Z;8 z`fbJjl+1hmor2y4tkFE9DDjPI_j>I+n7___+CQT5e~7wT+X@%$?B~q;%)SiO$ITVS zQz9m*6c@sS=D(gQ-X0TP+bKQi)>mo*3>Pg8a!5jfQ@}V}D4DB_Crxa%0RN5lKIzA( z^FKjd+3X5BcSzz&$Xp6pI1Sz$=`yR&IT>XcMd9dmn?AL`s za)|y(Xm8U#85O@|^`bkU`uU#%a~4UM<1|{ZywDo(kHl^0e)_?$eO9;?YD*iZJey3V z<49N9l{LwH#!5kt<-cDq_pm|>j4NX$alvXxwLjhh{fB8M8Ynb_UwX1)M4=S;(`X7~ zPPTx5gm&KfS7T^5IFxsO+wH5B_U+)Wmp@0+L}%wFWC%GdvOjA7mnEQFe;7pmgx@>s z`^$pjqP?g8q;0kHh?~M9%ooU$-q9|69xWujq`k3R-6fWLJ_P@D7vbGeESChw{OjMp zvc{}jrCd$e!>W)joCk9Ty(p=Zl~k(aq&0{f~L+q}pAhIK02 z;ckS#j$YsNb^41N&GwZ~l`Gj&$B9iU$vb)e?L*<;^SAqs5xRL*$HHQ%l<6`(`Y;C6rB(j(84)V`))7i^eiJcl9PDJq*jEuT;`jO9S!S8cijxKw&J#O>PIQtGjB)v zU5r*v{V3CDHR&UV|Hj;m@mOckrib9YIRAZ&$LaW7=b&tnRpqSqIO%wg+umx|$tV|l zs$NA(C9NgKI?Mfyq~OOGOM%8)vetrbxpltNh~uOS^a>%z$fgOuc+ePgRCfsm?8WB0x)dt=1b@?-Ihq34Y6ZLrYG%Po_r~~Q<=24 zE4o`$oxHVkvv}3YcpkF+6>WR*Dq3jw{Gr^n?dh~m+xwx3p0x(f?~ht>Zpnmi1l{`St1;ML!~dGfaA z|9i0gf6e$`{*V5jG4{htM)ygz?+`kDo>))T8+}{xKaSFo?hWr&@aw5&`>gl>wBY}> z??LaQ|JVAT^rlF3h%$e_|EGTb51aqDe*TxSU-b6k3U*)=2S8^F{;$I@$@4$e<8SQ$ z4(94U{9m#kw*pc5e~`K#xn0)d*Lw`v$+{B=e)Z%w=A-uy&91*e+Ijx(M);i8e-Cqt(yf;~I`43*(u<^``Jl!R&-;^v-j{m+vrsd*fP{Qo-u@dle?NZj zjhM7T(We=Cf0fXCnhqc;|8;`%@SpejrOq+4G%tUg7YHL(6Q|63(0-8?jl=#H=&znM aUWGOPe|!Fa@lo$jWO=mm{@{MUANUt0=a41< diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index 5f9de85c138d7b908860d60adcdd8c98bc68a100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307200 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 diff --git a/include/map.h b/include/map.h new file mode 100644 index 0000000..1596a12 --- /dev/null +++ b/include/map.h @@ -0,0 +1,11 @@ +#pragma once + +#include "mine_map.h" + +/** + * @brief 设置一个的雷 + * + * @param mode 难易度 + * @return map* 生成的地图的指针 + */ +map* Setmine(int mode); \ No newline at end of file diff --git a/lib/mine_map.h b/include/mine_map.h similarity index 57% rename from lib/mine_map.h rename to include/mine_map.h index b2f1198..d07856f 100644 --- a/lib/mine_map.h +++ b/include/mine_map.h @@ -22,3 +22,28 @@ typedef struct map{ int cnt; int autobook[105][105]; }map; + +#define ROW_1 10 +#define COL_1 10 +#define ROW_2 ROW_1 + 2 +#define COL_2 COL_1 + 2 +#define MINECOUNT 9 + +#define MODE_EASY 1 +#define MODE_MID 2 +#define MODE_HARD 3 + +#define MX_EASY 9 +#define MX_MID 16 +#define MX_HARD 16 + +#define MY_EASY 9 +#define MY_MID 16 +#define MY_HARD 30 + +#define NUM_EASY 10 +#define NUM_MID 40 +#define NUM_HARD 99 + + + diff --git a/lib/opt.h b/include/opt.h similarity index 100% rename from lib/opt.h rename to include/opt.h diff --git a/map.c b/map.c deleted file mode 100644 index 2cfcad4..0000000 --- a/map.c +++ /dev/null @@ -1,101 +0,0 @@ -#include -#include -#include -#define ROW_1 10 -#define COL_1 10 -#define ROW_2 ROW_1 + 2 -#define COL_2 COL_1 + 2 -#define MINECOUNT 9 - -void InitBoard(char Board[ROW_2][COL_2],int row2,int col2,char a); -void PrintBoard(char Board[ROW_2][COL_2],int row1,int col1); -void Setmine(char Board[ROW_2][COL_2],int row2,int col2); - - - - - - - - - - -int main() -{ - - -char mine[ROW_2][COL_2]={0}; -char show[ROW_2][COL_2]={0}; -InitBoard(mine,ROW_2,COL_2,'0'); -InitBoard(show,ROW_2,COL_2,'*'); -//ӡ -PrintBoard(show,ROW_1,COL_1); -PrintBoard(mine,ROW_1,COL_1); -// -Setmine(mine,ROW_1,COL_1); -PrintBoard(mine,ROW_1,COL_1); -return 0; -} - -void InitBoard(char Board[ROW_2][COL_2],int row2,int col2,char a) -{ - for(int i=0;i +#include +#include +#include "../include/map.h" +#include "../include/mine_map.h" + + +map *Setmine(int mode) +{ + map *Map = malloc(sizeof(map)); + if (Map == NULL) + return NULL; + switch (mode) + { + case MODE_EASY: + Map->mx = MX_EASY; + Map->my = MY_EASY; + Map->cnt = NUM_EASY; + break; + case MODE_MID: + Map->mx = MX_MID; + Map->my = MY_MID; + Map->cnt = NUM_MID; + break; + case MODE_HARD: + Map->mx = MX_HARD; + Map->my = MY_HARD; + Map->cnt = NUM_HARD; + break; + default: + break; + } + int cnt = 0; + srand((unsigned int)time(0)); + while (cnt < Map->cnt) + { + int x, y; + x = (rand() % (Map->mx)) + 1; + y = (rand() % (Map->my)) + 1; + if (Map->mineMap[x][y] == 0) + { + Map->mineMap[x][y] = 1; + cnt++; + } + } + return Map; +} diff --git a/src/opt.c b/src/opt.c index 06b863e..7494e29 100644 --- a/src/opt.c +++ b/src/opt.c @@ -1,5 +1,5 @@ -#include "../lib/mine_map.h" -#include "../lib/opt.h" +#include "../include/mine_map.h" +#include "../include/opt.h" #include int opt(map *m, opt_t opt) diff --git a/test.txt b/test.txt deleted file mode 100644 index e69de29..0000000 diff --git a/test/app b/test/app new file mode 100644 index 0000000000000000000000000000000000000000..2ee2aa5e2b90c2f73659fce4b4390d7b12d71536 GIT binary patch literal 17072 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 literal 0 HcmV?d00001 diff --git a/test/make b/test/make new file mode 100644 index 0000000..c3a60fa --- /dev/null +++ b/test/make @@ -0,0 +1,4 @@ +main:map_test.o + gcc map.o map_test.o -o app +map_test.o:map_test.c + gcc -c map_test.c -o map_test.o \ No newline at end of file diff --git a/test/map_test.c b/test/map_test.c new file mode 100644 index 0000000..4c157b5 --- /dev/null +++ b/test/map_test.c @@ -0,0 +1,41 @@ +#include "../include/map.h" +#include +int opt_count(map *map, int x, int y) +{ + int cnt = 0; + for (int i = x - 1; i <= x + 1; i++) + { + for (int j = y - 1; j <= y + 1; j++) + { + if (i < 1 || j < 1 || i > map->mx || j > map->my) + continue; + if (i == x && j == y) + continue; + if (map->mineMap[i][j] == 1) + cnt++; + } + } + return cnt; +} +void printmap(map m) +{ + for (int i = 1; i <= m.mx; i++) + { + for (int j = 1; j <= m.my; j++) + { + if(m.mineMap[i][j]==1) + printf("B"); + else + printf("%d",opt_count(&m, i,j)); + + } + printf("\n"); + } + return; +} + +int main() +{ + map* m = Setmine(MODE_HARD); + printmap(*m); +} \ No newline at end of file diff --git a/test/opt/opt_test.c b/test/opt/opt_test.c index dcaaf39..67587c8 100644 --- a/test/opt/opt_test.c +++ b/test/opt/opt_test.c @@ -305,6 +305,7 @@ int fnTotalFlag(map *m) for(int j = 1;j<=m->my;j++) { if(m->stage[i][j]!=UNCOVERED) + continue; m->stage[i][j] = COVERED; if(m->mineMap[i][j]==1) return BOOM; diff --git a/test/test b/test/test new file mode 100644 index 0000000000000000000000000000000000000000..6486ab2bce4b552dc86564c761131d5d4453cc07 GIT binary patch literal 17008 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 I%X#4c0{1c`QUCw| diff --git a/x64/Debug/MineSweeper.exe.recipe b/x64/Debug/MineSweeper.exe.recipe deleted file mode 100644 index af81997..0000000 --- a/x64/Debug/MineSweeper.exe.recipe +++ /dev/null @@ -1,11 +0,0 @@ - - - - - C:\Users\Anti\source\repos\mine-sweeper\x64\Debug\MineSweeper.exe - - - - - - \ No newline at end of file diff --git a/x64/Debug/MineSweeper.ilk b/x64/Debug/MineSweeper.ilk deleted file mode 100644 index a2fe47d8c2d0f9a0666b136e2348c4b7f7d9f6fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585816 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 C:\Users\Anti\source\repos\mine-sweeper\x64\Debug\MineSweeper.exe diff --git a/x64/Debug/MineSweeper.pdb b/x64/Debug/MineSweeper.pdb deleted file mode 100644 index 9e74af1cb07c27db7f1903f28b3290c22a218f72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937984 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 &?YpI)-arSbb^< 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 diff --git a/x64/Debug/MineSweeper.tlog/CL.command.1.tlog b/x64/Debug/MineSweeper.tlog/CL.command.1.tlog deleted file mode 100644 index dcbfb7ca1fc895c435a62d3400447c473798cc8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmchUK}*9>5QOI}_#ec(ida14X45n(Gz~AcEhQ*YQw_uzVnu(w`fc(Q1(oeyvb}a$PA?BuC73rbIJcaLP1g;=n{yj+oLh%!GMDeL%G!+r;=i$`B4_q8rpw zoJgjIC?6;+^D;sYL9?za8W-{7ES z8|I|>#VGMqp;PTPD%{4)?@^h-X)kfZa$-k#kax#km&vfvK8Q(J&P z$3BcJq$L^~tQEl{Ho|(g8#MdlEX3sju>dW{KEZqON2VNX8mIu(gx<&OnAcAX1pJ-= diff --git a/x64/Debug/MineSweeper.tlog/CL.write.1.tlog b/x64/Debug/MineSweeper.tlog/CL.write.1.tlog deleted file mode 100644 index 21f2deb54819fc783936fae1bb238d0776e61711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmc(bPYZ%T5XIkF=%W-!(ZO4q$Of&;YS}^Z`+o`TH+u6d$-?}5Z|2SHG=5bmQ?HjA zm5SJ2H+i*kM2%{Y2&W{A*g(ZNPjF9uBHW5XIlw#Q&k;;z@`f@zBIWTM;XzG_(~=h{g{{jDU%#f4=(LT?lET2QQLl zx7{~yXWqr_E}>oPiil4|~dbpVg4Jv6%g1 zjdY@8-e;^sc6aQ~680^gGoB_sLS1TCJ8Ibo1sWRvqGYYRs=A5R5u+gwMJBVzX4?ZZ zwFs1~EQz{S>rYw!<~wG0cjY@J--OX&c%Y_crjCh@bVy|qqK8=4=TSvFR5h+KhgNTH zPsaG(_=t$nV@E=?s-FP#%AQ8uTdoVMrmn|$Zr8jxEI?~fvy@;lF*aKItU{_<)v-n+ z)K@Jnl$$<`bxz!z27;}&X%&BF);eDdH?wKF0ebd)I+Dhu;dLy$LZo7}23YSTNve2G`uY;BL zYib(Uzc<1bP}#P%r1Zb*mkiWZJBF9x!*t}f^KvR&UZx8o`qbS({_4i@{&@3z0}uVQ AYXATM diff --git a/x64/Debug/MineSweeper.tlog/link.read.1.tlog b/x64/Debug/MineSweeper.tlog/link.read.1.tlog deleted file mode 100644 index ea2cf4aab950dec5277dcb05339f9a679b4a87a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3244 zcmdUx%Wm5+5JhJlp#R`yx~O3%Zu8h#vK*_?!w{vo4TR+Xe#bxKtYxQzr-17C?pYB}&3*&@4eG$C9m$XO%YN93 zaRZ$pedm$`+|Ov<^UTqa*-!goXK$zPk!<1Y;HYh8TeMfm2j=H!yhi6&^c?)u4ZH{6 zyNB)_&(ap`SI`-wsJXvOyJ1|hB3l1h^Nkqq9kc$UvP-*wXVP$bWYHdJp}NDWWnwoq z`9yHfY_VTDHq7zUnj5R|?6mB-2GxT{V`|n6w)1FAEgt1rMPgQ*Fs;dHePYN4FqQaN zIIK+oxWkbGq@Guiinl z`hYE*12R1x(J%(D{e^cP>LhZn|B~3kGb1;Z@C-;*P=U1pJvwQmN-uaXm`(Y$X0Ktd zx8JNiusSktd326CmGHK@qz{;L&*}~Iz2f~2N9-D6R}dv8^v6D&Dq{WXhFehgq^{{R zV3wsix1D@QxKEuggr~bcm-a-t|3lRK4jw%>^tqMNyPs=jb%#nQYJ2i5ygImmuGIk_5V1X||I c{&M=)>#x(s8=N>!?jrhPadH>Q{|cjv4?^cpAOHXW diff --git a/x64/Debug/MineSweeper.vcxproj.FileListAbsolute.txt b/x64/Debug/MineSweeper.vcxproj.FileListAbsolute.txt deleted file mode 100644 index 7214faa..0000000 --- a/x64/Debug/MineSweeper.vcxproj.FileListAbsolute.txt +++ /dev/null @@ -1 +0,0 @@ -C:\Users\Anti\source\repos\mine-sweeper\x64\Debug\MineSweeper.exe diff --git a/x64/Debug/run_app.obj b/x64/Debug/run_app.obj deleted file mode 100644 index fa66f59bfd5cb40c51fa06f6347af4e984236e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9058 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 diff --git a/x64/Debug/vc143.idb b/x64/Debug/vc143.idb deleted file mode 100644 index 41e4e8e7ca622165b13c11e3874391712df4d4fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27648 zcmeI3ONbmr7{`0!do{)vA}ZR5N@8%PXLqxkEKvv(T#^tWS#uBymPt?VZo4zxL)Y}q zF6c$YgMzH!Er$?@2SxOtcrZQ!;^QQHG9Wp4(SRU9@emQSe*d1S*&!JpAw9$F&i`Zo zQ{C0oUv>X#s;X!EtAoB9g*u$6*@awT`*!=_)Km6&)^Rou-Me?n61Hc4`yXc_xr zcQ+D#k^l*;a{@nDr&nntKmvnFz_LCW%p2!jlK=^$mNAVLn`6SB^7Q9G%C9kS;-h`^O{x!Ma>$q69buBLWp&E9Ehm{*vDskY~mehi)YGGK` zs-k5xKbjqJppao0ixjJ@bAMdgzYTP0}YVYeaOD=(uF! zxGlMNN(#G9bVPKsXikJD`cv`7un@3$7=^^idC z2(bV6jx}o{fqo;v{@-sc!s{V{-VtE`?;UH_L<0Rrfc?MUT7=g_0=*+pinNV)ddBc- zf0yWa(N@vBA{fSrXC!Tp6HX2^Kkz;e@Aq*2JG&d11=;yUbWHTVWL*&bD(@8ci;j!n z(~-P?@(C~SXY5MLoAa2G010#^aPj=b^XOyy@M2zqmtrj;c&aGja!QABq5zg~KF=*M{S)h{19yl4LNk8l_< zJBabY@%?|u$<1x-V;EWfR(3;VzV;hEu^@wW~vpF5KY9y28yDSW|z z213~nkDW})Ev1Q7lxuJHyZzlQzHv(EkzR_g~N8{JsqEmxQ;zVF_^kPkQT&E_)2ds;O=* zYU28z)|#c}(ju<^Nk%EI|JksEHE)arQYL`k@wO<<^*>nmgVl!kDZ53)^*;iEMgo0E v0R5jv0wge)1hC4VMgk;20wh2JBtQZrKmsH{0wh2JBtQZrKmsJNF$w$)%Fv0g diff --git a/x64/Debug/vc143.pdb b/x64/Debug/vc143.pdb deleted file mode 100644 index 26022959966271755d54f9428831614f6d7e20a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86016 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ðD zT-Sbu}+i&Pnu==5P~LjtNQO8{zq#n{e%ze%f8x62G5WFe&|lU{=h?8dP9GJ zUdkK-6aBvEao}I;eUbJF{?&k-YQHZE>5(U}+Rn=Ha>2vS*97@52nYg#z~2V~;{RX# z|BL_szmKshTnYk$fFK|U2m*qDARq_`0)l`bFcJig{r(&SpON#vhxP=1Cp`&10GsIW zVgBa&;luokI}tvw=LP;5m3;#8F*E!fUc%|k_j^B?M!ie?V0#en1k4sfW&S2A-b=Oc zcdPYxYLVlmFAt{|_NjEAd{_=z zQ>s^|ar-9TwjA%3u#|PSmO-U}fo||c~ zyjjcmeffh`TUn4C-KFtiNg?gA%wA}f=yA+|a-3IDH`pCxQuTQjo)u^L+)AXyi z(L@)cyq?Fy`LO5`l+ilFG{eg^(7Lj6y4~`*Y6HsYy(~UR@e z8fcg4Rpak6jWR*rAhN(bYf{w9w$^t+AAw)VC;=eEzA)7IXT$Ae-i5F?_N z8a-OMfmqh=n@U4ds9_T38RBumV_+-7073%cN`x1I$yGRy8YbHk>Cprwp2<{F1j-xm zbe`*3l6Dh4zP)5m*3LM&o)oq!wC1+i*a4U=2rZwAv~H%MNlO0Mk=m2Zr=zh#UZ*E(ruNP}FYf>Y{fn*;-3L%Yj22DJTsOQHfor3dJgc%5@A)JBmsjtEh5YCTmB>MeS zlZ+cIn!JeUS05t!^IVgbe%qwOU&8Nczr-%Oc_t0LYLGk4qG_*M^!k$~{p3ZH-hPWk z-+L0hpJdSe^NDT%y@3N39Sg&Px9>73xxu98-c9uKE`v@#VA4}7E&B8XlkWPZLGxe1 zPDVUg{pedn&-@8IJ!jDJZf{#u07#}j?xQIl@@i9yf4 zY|&<Ge=z8~XIb>n zJ3)7+LBIJggMPIInBvJ(4naT=5CjAPK|l}?1Ox#=KoAfF1OY){I0So^&G7 zm@@nSufvF&LoX;<0qG zDD2EUnv+nVL^kxLgDDdwG3 zmd7d> z9#_+iC%k%ixZ7uWa^%vAY^In=>+E!^EbAE6LHguk> zuK+!tSWz!jdEK3YE|sKn69JxAss0ogL!Rb&V@Y1I9Znz2rB(CA^6UNb1yZ_?stuK1 z+Q-s7zmK}!nv(XT9-caHt)CY!G#2PnSzd{*Y%Z;rsey&3>l%w5zg`8lCFu%VUFUMt z8O-@rask=(B0UvLcs}9ve6ob;t62x0&r?nsvxY_tbzzI@$$d*mIll=i=myi@YP)QF z3;*E0ZO&*|m?_h>p1~O0qUJE&19P5B**1!8)gM;#J=;ie{F{htzC-)xK|`=b^!qjy zb;>a)OduI5V6ZZ*oR1aNLyP&=<=!4ft1wIE3iK`tEmsgwfw$0pD&80?wi^p#b(M-U zR+^_8{fn|5)l)7LC^sgAcYQ}!9Lg2r5y3MNxbn?ugzKp=763b-@ZuKtXYwm z{#ps_9Wh)puzbu$yiI*D=sXM9bAJZGKihc!O09FQSMldn{Jko^TaBBWRQyI2zeUB* zz?zNe-J#-m{o=(xrs4+_y-%q4{VKj+#m`ps9#HXi75}t~&rtDyR`Ka7{;-My4J|Eu~Ru!ZGbuRs^puK{tOVP~^WmMu-Q zF8YIk<3?IX$NafyS3NrPD$J=%$@088)=>7)!&z*HT2yn#f%b@=@?h{hLLzK4Ju(uW zsWfTX_l=mIHdh`QR{^`{mG$bhwozwu=i0{kRJ4V!Vx}K_{(l1VmhAtR{r|52+kzdH z{r|H6zt+wpzPI2PG}-@O&ofX5q}jyUhB9fwe=L$d#0_WxJg ze=hs~V_DxpPGsiMI?D0C0U-PTiDdsj{|+Vl|2NI6zGJ_$;MFB;vwWxQ|IZa&kO7Ta ztMH+b?Ee@0f3g3^vQZ8}KoAfF1OY)n5D)|e0YN|z5CjB)w>Sd9_y1!5@9zf?`~Ong z>q&T*6xbV3V&7br=h-l8yJDTEjghtOWode;owc%`FIct)ZRF4L_$clT;F_9dnccnE z|7)x?_;_!ru@d`#*5{lu_AKg9sf~ZBUY6#G{Xg$I68rxm24es3?*-ALO6>nD_lW3y zGGhPl+vkh@e}yY!vHy4S*|;6% Date: Wed, 22 Dec 2021 13:35:02 +0800 Subject: [PATCH 08/19] =?UTF-8?q?feat=20=E7=94=9F=E6=88=90=E9=9A=8F?= =?UTF-8?q?=E6=9C=BAmap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5ef05e8..175c707 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.o *.exe .vs/ -.gitee/ \ No newline at end of file +.gitee/ +test/ \ No newline at end of file -- Gitee From 2c046444b45b90e5e7853524aff1bd552b8f0525 Mon Sep 17 00:00:00 2001 From: Lizn <9697148+antio2@user.noreply.gitee.com> Date: Wed, 22 Dec 2021 22:34:36 +0800 Subject: [PATCH 09/19] =?UTF-8?q?fix=20=E5=B7=A6=E9=94=AE=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=B1=95=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitee/ISSUE_TEMPLATE.zh-CN.md | 13 - .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md | 14 - LICENSE | 678 +++++++++++++------------- bin/opt.o | Bin 3358 -> 0 bytes src/map.c | 12 +- src/opt.c | 9 +- test/app | Bin 17072 -> 0 bytes test/make | 4 - test/map_test.c | 41 -- test/opt/3 2 2.txt | 2 - test/opt/Tot.txt | 6 - test/opt/opt_test.c | 315 ------------ test/opt/opt_test.exe | Bin 290312 -> 0 bytes test/opt/tempCodeRunnerFile.c | 1 - test/test | Bin 17008 -> 0 bytes 15 files changed, 355 insertions(+), 740 deletions(-) delete mode 100644 .gitee/ISSUE_TEMPLATE.zh-CN.md delete mode 100644 .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md delete mode 100644 bin/opt.o delete mode 100644 test/app delete mode 100644 test/make delete mode 100644 test/map_test.c delete mode 100644 test/opt/3 2 2.txt delete mode 100644 test/opt/Tot.txt delete mode 100644 test/opt/opt_test.c delete mode 100644 test/opt/opt_test.exe delete mode 100644 test/opt/tempCodeRunnerFile.c delete mode 100644 test/test diff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md deleted file mode 100644 index f09d98d..0000000 --- a/.gitee/ISSUE_TEMPLATE.zh-CN.md +++ /dev/null @@ -1,13 +0,0 @@ -### 该问题是怎么引起的? - - - -### 重现步骤 - - - -### 报错信息 - - - - diff --git a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md deleted file mode 100644 index 66d4332..0000000 --- a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md +++ /dev/null @@ -1,14 +0,0 @@ -### 相关的Issue - - -### 原因(目的、解决的问题等) - - -### 描述(做了什么,变更了什么) - - -### 测试用例(新增、改动、可能影响的功能) - - - - diff --git a/LICENSE b/LICENSE index 89e08fb..d159169 100644 --- a/LICENSE +++ b/LICENSE @@ -1,339 +1,339 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/bin/opt.o b/bin/opt.o deleted file mode 100644 index 4c969ae8571ae53d782c6cfaf941943754ce32f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3358 zcmb7H-)~b@96z`1U=XC0jHI9sjV=n2)CGw$rpd^5+(kEOCO3kLW9$bkR7Tvb0c71w zhuQVus2Ldk01_9|gh%$^!(f_%##qsZCGxNbO*XrSKGdWM)$8Yb&h2fxAAl#h=YG%U z`@QFUf1LB_Y42z27`4APG8UAQkA=;?v!;|)H@}`SpH=}t46(?uaBsKST@9}oHM7V} z`1sJ!3dJ&DlU`jJlbnpun9V{Xm13S&y}R6C}%ZY|uz zm)V!Aph+*FXRDyA9zX$IbYvEOsexD{7t|Bq?S1d)tf50` z+kzM2ci?f{UQEas9M7ZD^DgQ6k!sK1sP?>Rndjj(Jl8+HUH1aAL;-l#2;lRo00vhH zph2a*9cjlpAz=h%h63dbmDjNl{OUF;i~cJ!roW{el?>v?*c@4+*TNzdXG@=LLnY<~pK~gaS=a;@OO>dgfr{-27QlYB7ypK3nir&e zA2LdeQ>bOY2dFy^3yC?To5eQLA@h&jfE67y|HKp|nJtF_^Zv_Mr7{PlaFvQQawATi zaxxpBiV{hbcP2hj6B=t7;V4|3F<%lLIRUnjyYddDsqTT?lG{OpC|(Y5|U z%u|5>ntx(D#mbAcgZvX3`6Zi=iG&J#EdI02$3;T@N{q*+#UzPJ?Z0tbOkO#xv7MPlektZ` zgBp1};a0Fr;US`Mhr3ZQ=}B9f=cPc0K0p~+#=m8DAr^yUMG&yG9d)QY{yj)cAbaZiI5(Q3UlwOf2%EyCCe zxpNhK`L`t-g+JrYxm$gUJh7jsL!&osAUd1$=3u2DWO^R}_0&VA_Z}Z(4Up;m8=hAo z)4PBlcO5dllenfGf=ur@+{cbVZfj}T7uwPGma#L`7~UPGDONOE+siPS^uo*NI<-Y& zq*2;{E7iGL@>6M_cBPQ3t#`2WQ!-(3yHe)BW!82yKM*&U`#2sra#5}a&S80A=R9$H! z_1n->jmrpShALe~UI9Y&E+cI~sOn|J07A7dBV9mf2b7TyfzUosNabyv-1Ta-KdM{h zO`U!ky{p7kc}s_rtJ_rE(BUL(qSXswRCzmx+l~$0$*bErXGs4)yxNo1N{q(vgg>I2 ze*O9L=NU@V)iW47ZAz&>+I_+q_Mbj@#%%BFH(R0uJ*Su)b`G34Svl?)=&jK1kC}sV bmVu$Jp`KVD{+;xnJ~U`{M_mx; i++) + { + for (int j = 0; j <= Map->my; j++) + { + Map->autobook[i][j] = 0; + Map->mineMap[i][j] = 0; + Map->stage[i][j] = 0; + } + } int cnt = 0; srand((unsigned int)time(0)); while (cnt < Map->cnt) @@ -39,7 +47,7 @@ map *Setmine(int mode) y = (rand() % (Map->my)) + 1; if (Map->mineMap[x][y] == 0) { - Map->mineMap[x][y] = 1; + Map->mineMap[x][y] = 1; cnt++; } } diff --git a/src/opt.c b/src/opt.c index 7494e29..81cd61e 100644 --- a/src/opt.c +++ b/src/opt.c @@ -1,6 +1,7 @@ #include "../include/mine_map.h" #include "../include/opt.h" #include +#include int opt(map *m, opt_t opt) { @@ -158,7 +159,9 @@ int fnOptMidClick(int x, int y, map *m) void fnOptAuto(int x, int y, map *m) { - + if (m->autobook[x][y] == 1) + return; + m->autobook[x][y] = 1; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) @@ -168,9 +171,9 @@ void fnOptAuto(int x, int y, map *m) continue; if (fx < 1 || fx > m->mx || fy < 1 || fy > m->my) continue; - if (m->stage[fx][fy] = UNCOVERED) + if (m->stage[fx][fy] == UNCOVERED) { - m->stage[fx][fy] == COVERED; + m->stage[fx][fy] = COVERED; if (opt_count(m, fx, fy) == 0) fnOptAuto(fx, fy, m); } diff --git a/test/app b/test/app deleted file mode 100644 index 2ee2aa5e2b90c2f73659fce4b4390d7b12d71536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17072 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 diff --git a/test/make b/test/make deleted file mode 100644 index c3a60fa..0000000 --- a/test/make +++ /dev/null @@ -1,4 +0,0 @@ -main:map_test.o - gcc map.o map_test.o -o app -map_test.o:map_test.c - gcc -c map_test.c -o map_test.o \ No newline at end of file diff --git a/test/map_test.c b/test/map_test.c deleted file mode 100644 index 4c157b5..0000000 --- a/test/map_test.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "../include/map.h" -#include -int opt_count(map *map, int x, int y) -{ - int cnt = 0; - for (int i = x - 1; i <= x + 1; i++) - { - for (int j = y - 1; j <= y + 1; j++) - { - if (i < 1 || j < 1 || i > map->mx || j > map->my) - continue; - if (i == x && j == y) - continue; - if (map->mineMap[i][j] == 1) - cnt++; - } - } - return cnt; -} -void printmap(map m) -{ - for (int i = 1; i <= m.mx; i++) - { - for (int j = 1; j <= m.my; j++) - { - if(m.mineMap[i][j]==1) - printf("B"); - else - printf("%d",opt_count(&m, i,j)); - - } - printf("\n"); - } - return; -} - -int main() -{ - map* m = Setmine(MODE_HARD); - printmap(*m); -} \ No newline at end of file diff --git a/test/opt/3 2 2.txt b/test/opt/3 2 2.txt deleted file mode 100644 index 04acc9d..0000000 --- a/test/opt/3 2 2.txt +++ /dev/null @@ -1,2 +0,0 @@ -3 2 2 -2 1 3 \ No newline at end of file diff --git a/test/opt/Tot.txt b/test/opt/Tot.txt deleted file mode 100644 index 5a5a12d..0000000 --- a/test/opt/Tot.txt +++ /dev/null @@ -1,6 +0,0 @@ -3 1 1 -3 2 2 -3 3 3 -3 4 4 -3 5 5 -3 6 6 \ No newline at end of file diff --git a/test/opt/opt_test.c b/test/opt/opt_test.c deleted file mode 100644 index 67587c8..0000000 --- a/test/opt/opt_test.c +++ /dev/null @@ -1,315 +0,0 @@ -#include -#include -#include -#include "../../lib/mine_map.h" -#include "../../lib/opt.h" - -#define DE printf("debug\n") - -map m; - -void initmap(map *m) -{ - m->mx = 6; - m->my = 6; - for (int i = 1; i <= 6; i++) - { - m->mineMap[i][i] = 1; - } - m->cnt = 6; -} -/** - * @brief 打印地图 - * - * @param m - * - * 未打开打印U - * 打开打印数字 - * 旗子打印F - * 标记打印? - */ -void printmap(map m) -{ - for (int i = 1; i <= m.mx; i++) - { - for (int j = 1; j <= m.my; j++) - { - if (m.mineMap[i][j] && m.stage[i][j] == COVERED) - { - printf("B"); - continue; - } - if (m.stage[i][j] == COVERED) - printf("%d", opt_count(&m, i, j)); - if (m.stage[i][j] == UNCOVERED) - printf("U"); - if (m.stage[i][j] == FLAGED) - printf("F"); - if (m.stage[i][j] == MARKED) - printf("?"); - } - printf("\n"); - } - return; -} -void printmine(map m) -{ - for (int i = 1; i <= m.mx; i++) - { - for (int j = 1; j <= m.my; j++) - { - printf("%d", opt_count(&m, i, j)); - } - printf("\n"); - } - return; -} -int main() -{ - initmap(&m); - // printmap(m); - // printmine(m); - fnOptAuto(1, 6, &m); - printmap(m); - int flag = 1; - while (flag) - { - opt_t tmp; - /** - * @brief #define OPT_LEFT_CLICK 1 - #define OPT_MID_CLICK 2 - #define OPT_RIGTH_CLICK 3 - * - */ - scanf("%d%d%d", &tmp.mode, &tmp.x, &tmp.y); - flag = opt(&m, tmp); - if (flag == UNALLOWED) - printf("ERROR OPPERATION\n"); - else - printmap(m); - if(opt_is_scuess(m)) - break; - } - return 0; -} -int opt(map *m, opt_t opt) -{ - /** - * @brief 操作类型 - * - */ - int optMode; - /** - * @brief 操作坐标 - * - */ - int optX, optY; - optX = opt.x; - optY = opt.y; - optMode = opt.mode; - if(optX<1||optX>m->mx||optY<1||optY>m->my) - return UNALLOWED; - switch (optMode) - { - case OPT_LEFT_CLICK: - return fnOptLeftClick(optX, optY, m); - break; - case OPT_MID_CLICK: - return fnOptMidClick(optX, optY, m); - break; - case OPT_RIGTH_CLICK: - return fnOptRightClick(optX, optY, m); - break; - case OPT_TOTAL_CLICK: - return fnTotalFlag(m); - break; - default: - return UNALLOWED; - break; - } -} - -int opt_count(map *map, int x, int y) -{ - int cnt = 0; - for (int i = x - 1; i <= x + 1; i++) - { - for (int j = y - 1; j <= y + 1; j++) - { - if (i < 1 || j < 1 || i > map->mx || j > map->my) - continue; - if (i == x && j == y) - continue; - if (map->mineMap[i][j] == 1) - cnt++; - } - } - return cnt; -} - -int opt_flag_count(map *map, int x, int y) -{ - int cnt = 0; - for (int i = x - 1; i <= x + 1; i++) - { - for (int j = y - 1; j <= y + 1; j++) - { - if (i < 1 || j < 1 || i > map->mx || j > map->my) - continue; - if (i == x && j == y) - continue; - if (map->stage[i][j] == FLAGED) - cnt++; - } - } - return cnt; -} - -int fnOptLeftClick(int x, int y, map *m) -{ - /** - * @brief 地图当前状态 - * - */ - int map_stage; - - map_stage = m->stage[x][y]; - /** - * @brief 判断当前格子是否是雷 - * - */ - bool map_mine; - map_mine = (m->mineMap[x][y] == 1) ? true : false; - /** - * @brief 左键实现 - * 如果当前格子被标记或者已经打开 - * 返回UNALLOWED - */ - if (map_stage == FLAGED || map_stage == COVERED || map_stage == MARKED) - return UNALLOWED; - - if (map_mine == true) - { - m->stage[x][y] = COVERED; - return BOOM; - } - m->stage[x][y] = COVERED; - if (opt_count(m, x, y) == 0) - fnOptAuto(x, y, m); - return ALLOWED; -} - -int fnOptRightClick(int x, int y, map *m) -{ - - /** - * @brief 地图当前状态 - * - */ - int map_stage; - DE; - map_stage = m->stage[x][y]; - switch (map_stage) - { - case COVERED: - return UNALLOWED; - break; - case UNCOVERED: - m->stage[x][y] = FLAGED; - break; - case FLAGED: - m->stage[x][y] = MARKED; - break; - case MARKED: - m->stage[x][y] = UNCOVERED; - break; - default: - return ALLOWED; - break; - } -} - -int fnOptMidClick(int x, int y, map *m) -{ - /** - * @brief 地图当前状态 - * - */ - int map_stage; - map_stage = m->stage[x][y]; - if (map_stage != COVERED) - return UNALLOWED; - if (opt_count(m, x, y) != opt_flag_count(m, x, y)) - return UNALLOWED; - fnOptAuto(x, y, m); - return ALLOWED; -} -void fnOptAuto(int x, int y, map *m) -{ - //DE; - if (m->autobook[x][y] == 1) - return; - m->autobook[x][y] = 1; - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - int fx = x + i, fy = y + j; - if (fx < 1 || fx > m->mx || fy < 1 || fy > m->my) - continue; - if (m->stage[fx][fy] == UNCOVERED) - { - // DE; - m->stage[fx][fy] = COVERED; - if (opt_count(m, fx, fy) == 0) - fnOptAuto(fx, fy, m); - } - } - } - return; -} - -bool opt_is_scuess(map m) -{ -/** - * @brief 扫雷成功条件 - * 打开所有不是雷的格子 - * - */ - int coverCnt = 0; - for(int i = 1;i<=m.mx;i++) - { - for(int j= 1;j<=m.my;j++) - { - if(m.stage[i][j]==COVERED) - coverCnt++; - } - } - printf("Cover = %d\n",coverCnt); - if(coverCnt==(m.mx*m.my-m.cnt)) - return true; - else - return false; -} -int fnTotalFlag(map *m) -{ - int flagCnt = 0; - for(int i = 1;i<=m->mx;i++) - for(int j = 1;j<=m->my;j++) - if(m->stage[i][j]==FLAGED) flagCnt++; - if(flagCnt!=m->cnt) - return UNALLOWED; - - for(int i = 1;i<=m->mx;i++) - { - for(int j = 1;j<=m->my;j++) - { - if(m->stage[i][j]!=UNCOVERED) - - continue; - m->stage[i][j] = COVERED; - if(m->mineMap[i][j]==1) return BOOM; - } - } - return ALLOWED; -} \ No newline at end of file diff --git a/test/opt/opt_test.exe b/test/opt/opt_test.exe deleted file mode 100644 index c3f75313431195cb87425e6c9578c577859b0fb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290312 zcmeFa3w&EgnKnL>rDHjXEyXt}w_0hF)@hs6PLnq24a=4isgWcluIaub=K_?ptJ!B{+@Sc&N*|A zWT)``_W#@e_p95Zne)ES+~1iqGiT0|<{OW&BF2~t*USuK55uLu2L3zu&q1imYQ9{? z{-xyG%O7^czr8%UyKgi&JTlZf(m4?9>Kq&#$^>_%gCk>u!M?#@xHS1DJ`A1 zLPp&dVXXVD3mLobtDWrmBKDMiF z^K^YA{;b5cm>BXA?y_}4wv&v05;!Uc)sOOr`fI$bej}GO%m?rUa0}q_oS47{=4-s{ z@_H`t2H~87@tzNtN6y9khvU|*=l-X8`=Vi~ecwWvF#kAi{gqts0M$nWaMW%O+Hnny zmt9%MaeX}hz>%#yWXBW1|IF{ zS>vra#7pF@X<*Uu=WC-m_ZP#A)jxTh(TIiHhj44$JfhybNxexmG1hbEhUOc`ywR?< zYod-5cW$5oKC=UHGy<6|eeV!sId*t*?21Py?y2`&h@aw%D3z*H2%am?`lj~bd4Ld; zjf{disqsGc(>A7M&>lQ3YZ+v=}NqTI6hef2Pd))((Kexr0+YT;%X1 z1q?xE))DGw1G1JzR^t=y9}FU+6IDOtPU%TFIhJ)l$Zy>rBPSbP5d{7ZC`vfznfl^N z^ez-;0}68xsjyH-DA}=XYa)8*^Y6v&Bc=GMpNvl+SUh|D_t8&9bJu#1SUBg69DdS! z_yZ_^I+}B>r0yThExQI0M{~oT`WNE4l^;FmWYg8&8k8rx@p11VKfsSrCl1YgKboC7 z6ZL-X@+j*5*=TNk1p?N;kkiJ`I=qM60OmB5_fS84$KC%qzs)Q1S z*&QN>A*RfNNd4rOAw@OMoS6De6%-StXP00uQB{V_piy%K&N`=li3*4Aoqw5`nRz@=+k5x~%qrDD2l?jjk!jZX%n@ehs}9&b_(;c9nDA0a32>?UZDW#k2UW8YR?Ei%6b?H|uW4FD&BFNyL(? zx`yta@*a98#d+srWJ@>Qnz|))bLbY{Z@ga$uh@CIifmctd;LPB^;HLj=0!)INZk!=G*|jxuY>j|w8u4SblAk<=Mf4W>1{=)pM~#8JbQGe>e1Vs z?DSUL_8ggdKgH$#*q%b!B0J4hJ&8yW_vhgp*C;!E;IGTSCBS!tXk`UrjKV|=Xk`;rY;XB;3Lt*gDVaqnrQZ$$0H9? zgs1EAdptrhvC}2^%|#xFzBkwLV6^M0=$@zg5Pi-yjxKOnz9Q@ zim5jR5zoKDcMkaST*m{s$b+HmiR`gx_D55@V5#s;l)fMHsHy7^%N!A4NSgOZ2PIcJ zH*ox{6Ua@3{AJCYQI4N20ursxrpTseA`j%osqQyM9`N2Z1*3k1Mu4gR&2LYKlBXlGhNoB9ioM4vi+%qF#J<^<@*Uq5sa|AD^^VUPDL(AOSUh## zd1%vBk40tkPF;b_Mkn0gc>^`|(W!qx*TC&0Ze!WWFJrdG#M5*J6Hq*lK0&yN$cG;J ziOUJZ6BOoAiV`yNe+}V}AATp4+)TcS@X?9G2XP;rh`OQ^_X@9&j8A%E*(YP!6H(rt z|Bm_T)K-ctC-m9KhjNGCj<8u+8czVt?p`6YI)S*eJgM=o@&w1qU=&9vl0}GQ`XXfa z?6An1n%znzyFOmrs_zzny|7FKrBd~v9u7^8c|}6Zd$<;TblP#`VPt{EM5@{RHf=_^ zzLzV?Mjp&Hxln{$lP4RwfBg0b*&Qp;^G@V=2Zm|9xoZ6O2iP56A(XasNAbf{h0{ah zx8Lu|?4aK_--_R&%vJRJ=63u#G9LUoGgZ@JVJ&e)i~N2GA*Zjfh(3s3Gkt+YbT2Gw z8be9*iK#Ux;Ix}3NK*(hP-V2qb_BxNNDu=Hl{Xg&%si2eoSlACE)pc)i__`x+t0E) zwvXTbBD zd!EEd@{OG92n`h_7^kryes$&Ha0?|Ao27Fq9R_(+dmPn{ zbb`5#0IwmRSwm(zSroo7M${r6HgAvo86&=<DToF{&(9vqHT$MMf|wtMHR752 zSe;>eY8_0JK5;oZb^}fI3YXPVA5_51ZS?DX7fo2;b7HoKU+=r#F78>T6!(s?H;Hcc zrn#d<=_!BH9p{9hpRs8&jyW0)u>r-Vi+Q1^^@>FudL|1|6Nc40Dp~qj}=*K)mr$J=h|&%BfuBq->QFQwxwqy;YPU zL2Z^5JZX-3`(B?Ps8*#uiF30-bsD0g;n4ygD)N=p&A4Kd?~Q%(H=H zU&u9|$zkZ?CeELP$N$9b+mA67t$zk%93GLV|6_Ra^D*o!h8u_XuGLg9J_*B3CHzoI z)3?}wn0%oK`n+rU+T)S?siLMY%th{}+1CRohn#&`CRs%@kq2iY_v=%W`|tP;pQwn* z$OCsgj2RVw=wP=iJZQI(Vb%t%ICx#U&jb3BqGOW@AxNiOS#$@c_kx9 zuP^bsIYY^vzK8pt=SgQo($Djx(ToLKdCS}&*~+tk&K3`AGoWQE&Ykbnu=85JSJke~`XXzGp z`b$_1)+HQ=l|J8Lsrr3A*}OA*bo}g0X5--}Gr{Z=Gfze*mL7|)dLlZJId)dWTM-?f z_Cz=Se(VpJH{F43QDisWdOGoYzMoM)DdG)JG&r(HuOGkW7}krEV`rv6E#x`(^|xZ7 zHkr||48(ftxcds+^Okr6B0CbDS^4#0C)1ZNN9re)!a^!{C&r(z!)C*qsXz~}{m9Q( zzYhzA=y7aPpf$1A@My*#effLQ?6Ltu;PD{Vo{#n%iB7~<1ZS!q8KTXA40-Q@H~V$z z9-pcDIH`cD4P_sjsroG4U7lG{o1Kb&nVN=PN<{0=Wd9nie>|K$1#fiuiRi|YnUypj zefgcMg?`tap4r8c*I$XMicWN##3l!p_A^zNKpe{+rKRDa4^hDV0;GK7TD^kgJg<4wU`1s z5Ea$Y23|+B5j0cv+d--a_s^iB5X){MOxFE)C!B{%Tx^nB27-@~Am=VyMt2cdr@KOU z&(2hRk>Z#r9l4Zp`UGxfs@CH7%M={Xk(sLdaW^%eZ?8lGh-{b=nTWt7-EMeK--b%n z8=S0h{7*$0|KX=H75pKq8|xv;Hk-N$%Vkr3M7Lje#bvZP=gerw89j5y|K!Y6jQ`1z zX)(Yz-OAg4*&lDC{I35UIU9eL`MGG9ToLUbIni&%ABBDYZ0rR~Kz&bg>KQ!XEE==z zXrIS!uRMSIy{j@S8oaCCw4yESU4@O0@r|1IZQn*Va}KOGzJ;2LcDdeyweZX-xo;Gm zSk?>i@4{YRDEK?C??3=QZ}3HPZ}5mM$BJ^UU5G}GVJl~%>PCWl7rqH?ojn@M{uX}N z_tb3*v0ve>rSxl&e*I+FTZxmrJoUBH zUFLl!-6wDl-A}Qte|odhp3nT!-hcVCDwh3L6nl!>d0C>_dzW4vgK zcCG(HiemUyH2cGN_R+&HdGERvQNxx$2szAud@^t(n)Agret)Dgjv+IGEABXkd+%Eg zBO^0M0jb^i+p!n7KRYbew}x|?INCSh$lL+?xE<>Ul&CkXQJ8NL9weg^)#$D z*SsJ)kz5fBJ&dO(_EnA|<&_j78?Ot@RQ)5?>O8W=h%6Ug5uRw99Dnv}SgcLC#!vlu zY+%Oyd-VVDKYK;pUfV^Iy#zL;E!b&RBk*u@*5=-Z|5AwNd#Q6A@pzqMOw7} z0F6G`7OcL18_jO@%~U=2dM8G5?_siqnX0Y0!!U3UEFgPqsuGhI-XC5%{T+DG7^45? zinGszvaS`maLp^BY_gdSurpZm*B;XS^>jUS)V33)&#gkc(mnwy?FVL^S>)D#9-$7ul&OwRq#s80&`xCN z)=-MJBl&aaF6hb9rn2)<&i6(qTnBM|-OFqA)S0Qf(S-5b>Ss_sJbIpkbKHF^!q6Yz z8=;-`tUCcw91n|C*rq#Me8;pqa{B}E-1?6p`qNpwBG1>|*jpo`g%tbxT*mS<(xgq2FC3>-?+;63~aAfq`)=wW(`iRz2;+KM}# zh@!TpPW~B-hwmW>>?cPh#wJ$0Ip0mVCrr~6%8{dXz{S!x;@>14qo~`#C7@*I)RM8Hs`qZKE@`!Z@UaeacvIX zz1!V*AiQq;Y{|Z>@aVaca;rbU>YsXqYI*9*^B|;^++kX4@j+ZDJ`BawbAN>C;$f7X zL@xMbRM^9{Zc6FUy$G^*69CsDuF1^FYnPGu@Mj=K{L~;*H|p^pqRBKLIX?&wSI(SJ z;-*+&o(DtTdyVw;Oja3@&^kc$8y*#nX*|0;s?$l_@^(Z()C`;YNr@<3<_@a%Ra_{b zs{l3aUqpGDmTNq`FoDx9{a(}yFHjayBCn@uH`o|2m3r%w`X}=BJWDaDe?Zk6&%fZ* z4aLZE_VJwi)OPBTV=JQ=4q+puA6iLc+2fF+ec4nWnt%#bsZVo)@@XQU|BviIEz=_` zQvVzp|DO;pn*DinV)Y4h1H2)8BnTazvC&n3p!bE@A5LFk*2m+;C9#>usFP-gT)DOd z*~E)QSfFIjM#qnPqN~ni6KAtcuf)b*31(K%Q}$BqF(NZ#$D0p7=RNd#R9iUv>~xt~ zKa?1~-9_EhUvU`Z^R-o|my$Lo&293Wjdx@4KX3Q&-q~wJ_?R zaHAeuryF!ukMz(dfT9*yB#oIzHvKuOe{RW{52MSMZxf(ps3wt6bmr8Nml|E@akSHX znpTonKgmq!7Jq?EC6lHUz9em&r*Jxs5OUt9+xd%B|0rpumEdoeb}rz{09WkyNkGS+ zm^rOMY_<=Xl<4=LgkA)E4i+i`a>J$L9Tf1}5bFpM(=HONe-4`5{Fxuduu%H}Y@`e}k|~K|#~f8c3*ei42r>2(MD;NW%@?Y8@MDen zT?FO!A*KnzoO=%t+3!TN6wy4YGZ;PA3ttXU{&~L$QB`CgrFys~i-|>P8%3HO_F#R+ z^XRT2!9?i>E?>5gJ587B4BX(Kj_leR-nv z<2;I=APO^jG2UXv(g)@A(=t7tA1t1{hmIljeYJ=wo^!VVf>hQXcQ?RCwPB78V*Z3R z+t@VbvjX^wsdZ?}=^xX2yL1&~GgaG=`1IF~S*j#Cd}h@{5+4I(^Au;cDe!=b<9?oUbIOw}h-=>0pn8H@5w-G+S$C9~14 z&^6JCN>BadombIOkg@sLvAFY%f%#5sc%!|0?%asuA|=y5)cXO1W^Pa(3hy}T{ZgnB z3m8Yh`=ywM&63r$Rk9!(pNKzE%k3(hYgmAH&#{ds_IZk;SWtd<-+Wp<#5X=M_Dd`h z_4W@X`8+j<)&A5$>;j{&dG?Kr@zJLJMqC(vMGcQ~DvClgKp8V2{Ri zFgB5Staf?<>>>tZk8ON0bCHrkLRkY zcy1@3nKA&tgG>wc=pNos_(`e$3osOHC8rHgq;EMQRY^O z%r#HMCu>6(^P_loxAD6pC7~j0OKm(lvLJ?vX-367i^m^!i>RX-_Rn{xO7E?~gC7k= zjZ;2#rAW7gDg(;}k0wKess5g?MJ&i7>M(^+BFvVlA`zz1Qh~eyc?DjiS73M&4cNd! zFEv~g%y^p7w%*vxla#~Q#>ufMOAcjvNa+vQXM##3Hh=0qJP8j^#=ViFW^vT|Ed4t0 zfQP6+*zFzLhU%Nz$wOtf#852QPJGpqF~?C*k;QMy;@?aPE58|C2Cxj}!& zG1&i8W50~lKN-hcU~1;LhjY;d&5j@G z0o2Ja{5P~kuch;;G}R4^EQ;QFn%|9=u;^;;Gnu>t8_O>_X_D=DBWu5YSR6$n?(9Q zlkVfveMq_=m+o7oyO+EAc*4hTj3sn56hr4kWh{F1Sr>MeP}{+qu-}t&pT2=HWBiGt z9p2{t0f~6cLLXa->deh@KeO^YOL{Xae|@9K?+>K=xO5+q?#HEjpLE|U-M!N7k?vOM zZj$a5(!Ef+)za0Z`_c~CPSX8>bRU=QL(=`YbnlbyTe+*(*Xe)#iDf~BVV3_5Z)iXb znt!_7l)UEq@2CN+$1HyzI!8NDyQl#yH&D>Ng!*U4H(c4Es@YC?KP=sYHvJLXz5en+ zkL25OcVEAM&HdYIU}ZO3*-ihkNPBy0d$6^wEz%xJ##&ogcY4=YFKZgwn;r>X8(i7V zO{L**15aS*LE+Y|5H1%M`uS`lmwKf8iVWZIAt5gmM3r?6?in1~HyBKhj0}xH5gO?o z8%Pgkg55&{o%p7N%Y(Jy*5**GWffzs$Zb#m(7xbE=U{JISGR7Bv~P;HZd=9LI!7{n zo&CZ7q0!OcP)~5QuXnJorw`w%bftr}ZSmGb0zOAT~p zcB62$tF8*J9Hp;kR*u%L?7cL&vUgQ5SUZx=?CtEo7B^^>v)`MUc@S3^*SB!}1lRMp zzJjY63G7?F?}~Nw5l*IWARX-K?CT#JNna&;eyF<}IUEhH91ia891RW*1^Wg%d(*2& z(_NXqp+Oc5ZtWY%jCJguGl=|iH-P}fj@5N$e2f|cEC^zmx0 zaJ%|4XxBHURlJ_Br%uky*soWlY~PP&X2`!5uKr!j9nZ|n*slkqY$G0Jul+_t+D3kgl#-ICC3Y<|JlMf9JGc%Ys0^2yFX*Q-`v!6Rj_t*OUJ6< z#x-l#&^DXp?=}5v_4As2{Lk$lmd^Ux&EH-FSj#(b(KnqwxEJE>z6<_3xCd}8fd3%e zk5@8Q3IAu|K833me)=ZYS%t+b{64s=aP5Y_4(>I$hT(638^V==zYXrgxc0+O?lM0P zY{O6PyKo(WpWNRD82bSHlxnqkN`xp4hy#gl{CgCUdDlDMC1wXmpA$zU5~A)Gw_r9GhDC0Pws`w@#*OskY~8B$5jdcFx(&GS_=OuxHGtF;b-SF zR*dUX_Y%b%eP9^D$gu@~>d*GF(ac>)?J4*Uj)x!hICiZun2YePShJ z{p5%HJzR(2KLz*t3mJPm{B3Zr#f#4Oz~2COW4}TrpH{kjT{0HH_6W3$#AA!4h zHR6T84es@85I6bZ(zn8=;3szvt||D3$;EXR{xfh7)WZfa***w&=UUhR{N&z&s}lZ$ zaPPqtfd4~qr*JKW{|wx>;Q(+D{v&Wp)}gN8_rbjy*E;wc;C>3%HSm8H?nzu>_)o!2 zugA+=_=n*xzXJ6}_$wJp;kp_Aop5*K>Lv`_+vpztgK%@W`r$tU_x-qr39|vVf-3|6 zYk!4nzyYztF$E-^)Roaf_dtScWT4#HrJ%{M2W=Ip>8S6zf_{n;Ub$N*RFpK zvR9;@Tq6xik1kJ<+f(i;aq9GIS|f6`Q|4LE`#g=!YuD=BJ6*#?ZO%!@Jhyw^Q(93`opUEI&urnV zOIY>WHRjvzX7hKunD(p^cX1Ib-h~(@kru^&w-SF~-r+!zZ`Xpl`8($gmrNF)aGxqV zgF2yfJ|gp`r%7SgDq-=Vp0*ZwEOE1vMt7ZSXVEZEqu9lY*YX?>JMdwQd#$6+aP@MM z>v1v9T321sPQ;<7@oHT?UNt`Hhx6Ls|9~2}=7`hC#kzlRGUBOtMUg!W*@JhR7y}H? z2ksH_f06FDq28wlF6m~Z%fa|LB=0{U-3O)nuyh}n?hm9pCEZt~tKBEkt(5M0(yf*5I_X{~ z-A&SMlkRru?vn27rJIrN9nyWfbnlk#2c&zybRU%NL(-j;?l+{Xm-n^y`u|sZEpdd? z{pn1)3EP9%q3ln{J-OF8BG^$Jv5Q%)b8|Y=G&VAV4M%LdbzxtRt;(0hy4h+)n%q5- z?(Bw;?Imfvb2JkXo2~yr_lXR4Ovi>}gFQnb<|rb`fzeEQAc?)i(CDVV{xtbm4QY~n zU3;2_u+NCYgGI4H^*&Y|)WNgC@?$F2p?a1=T(j)9~S9_)( zTa}x}2KlyRvU68|njI%;Q|E97+nG&6s1h*f{5#3wLqmJUhIKG1Yvcf9Pm@M&W_Aqj z>l;LgN8E{Yrekn-=U{h#x;wJJD?Lm*k0=%Dm%YWE=ufAI*}L7z^vFQpU}q++S1bFN zJJ~;qB5&>NA4{_@xMz)oecvq;l{=w~{Xm!S;xe{@rBY3)(cyF#?L?19!i}fAfE^ z#RmL8w+h0xe7%UT@}q|S{00sx&WCb|zz062<9+8haCs5`&HoYjkN!c&2hVTdpp&$z zP~cDCOD=G5f;j->IQ3`&EQv(<>NgvB8&1Uc+o-PB-&dWr;q+U9{~EqV5%qg&Wdm15 z+&aSQ3jAL_rQ_=^5%`;}Fyl_(Q~#{vk4XHm%Yaxs0`FVs)a#?Jf$Mh)Bd}oUM&O^n zQpfLH+rTkLXK5gTzXB@{X-`)O{8}C=|3}n!w}H1KM0|IDQIAhQKZ32>f`0;k9lqTa z>Fei9uuWX>PvF1mDUx{o{K@=+XuUq>&(rbx`IOo4vqbYhM*J!CWML{E2j21on>KC~ zFG7Q>2XJU$^+0B9FnukK2JB1YRKx0l&XKO&*Y4kN#cERa23NPP4Xz%|bYI&$IJR*k zTd-!$W%z$|r0X)wm&L(@)tIMTMptiF7fof?bg`zZZpI2?_-06M-Zj?O-@V#E-)#6O zT*2YU>CpJ}(CI1e9~$h%Q4ai!4bt2YM-wpTWKNIU)R3TPI5X1S*VB`N?v@LlM(r2v zqd4fkH$bEYPG|AxZcJsZ5xKa^<>ryPM5N?*4`=wQ36t19ER2}*i;mhB#G-kU_$@Y+ zo&9OjV~RS~m0>#_&L>a|&$N3|N`v|1bd6Z6n z-yS6LW0ADSF>hd3s%vZn$4&M#=QBdOzyYLKOl0~~Bk7(lzNT~j#Nmk`9-por92-!y zKNZ@5t{oT}RJ1=6+Mv`j=g%DrKY_?<9rL?ps2H?0x#zdFiA%ezw| zhEzrdcYeiDRFBXLGM&Bgrc^AGQj485NVPQ-aD)Tr__*uyNVR>qMQ(H0>YU0P=d`01T+o7x2-Zh+Q85>|lkqRmet4Q?q^7~CR ztza$=2#MoTMVm{ff$^|1ina?^C96tN3;RV1)?!iwTj zzNv3yG?UuY7D>ehyZ5uAW+_KjNXm*@xS-lo6yDa_9%inIWt3f~%Z2lBof%Zy7Ti{0 z+hAZgm6H9)eaTWyqbjBDrR(;IKIXof>vZX`F5b+=WmNrPgso(*jc@=POz#tY(cN|) zX{3mEM)wW6XgH(y5_kI|>Lh>-XY_vJPAsBs0$FeW&@R4B09zf+bY{jznL8=Vtal+a zIZpX?Gk1rsp#2f-IvGi9t)&qe(U}S!9}UQS=yq>gOkI}{R4*xIJam84NA{2BjeNF< z$Bxr2o)q*TC{Jzfh=rL?tMKJ8#jOZ~ow=TAl~q*r;&v_5s(8Fzg@>P z|3V51lOfZ6KfJsv6tf~8wH7FP9b_(26vdF1w!Mt}u1}MoDV`wFP9gd?5^ZWulBidR zz6+7lSD!<9lW+w>0VZRo};1{p*7C{|D}`+#6AQB|hiyK8Wx_qCZ*en9;is9Y?JnC6-i=&(p)W!RBdBRaesp#^d(P2DaX}6IT zZ+9&EPxMSvg;R&D_!g@a+lE}cD^EPo`Fb2sE$+=%^bL}tUnr`u(YC994~{1?&wBqB zDl0W}syVbh)z-Q#(w<6$w#HgECs@hSO7{b3J*khi*!9a)eR4-ztSJq~tOz2ZM9-L@x3B_Z{9js)zilT9IYeeKg zfLY1;Dj*h)M^f#PL@XYQv^4E7a>Pn5m&UdnA;Iu#$`O(cxIL8QUfK`j8PD znG|J_m0YUAnp<09$<}shE;#I6vRYM#BU@w0urSEB)_4r9B`Tz`J+?WTY>6abple=T z5X!6?>@qc&h_$Jsy`2iJXG?|G<-?8Q!3x^qp&gd!>s5SHYfGXPR;L3K$xsqix>m)Y z2efW85W0D=lFL<)%%_Yl-rBUqY=Ctt(8!ypyv9fr{TVf_cRyCLUWK>7B8?!imbMPX z9|= zxmraf;*m(3QtWH;l_EE0D%V;d$xutUafeyW*Qwf$mQXSoX$hx9GDeYJr-GufMr_ri z#mz_>3hOt863N6m7(AIeD+#HnruJA;8C#R>p_T+B)M*-3Tw+He8EH;|5M@VmYZzA6 zq-uqgnaXg!62{3(%#9TNE0PasPd25tg|;B_P5DZh0n>svs~D+m>_{eIbEYLlRS<7X z36b;Ql9&qM)olY@uL3#}7_M8A_|hTN6tMxfsK9tE+=LG)BKmy0ByQ8TwngMKPxjho z70^iS->yDHS_-MrZJMH?_RV@SsXA8DIyW#L*&2xxu5E7Irg&&`f^av?jT7~ls%Itb za|1=fz$NC!iG+bm&W)1^uVp12a|1=fz-^ryClUs3+uS&r@a3#z``kd0FmOBO#)*W1 zyHUlpwYN6mK}3UVB$=d1lVa946-HuAYfUEcM9{nX&F8>jVis%eXl5n1oC_Fh5x`pu z1H}L!(?@1mNvbfAMn!J%Mjm$-24Z5g$qMY89cWA_)M0(s9QbfVOh8n8*Bp3#!eZpQ zdk(M>x!w%vIlxBDG|ID*o;jdKyaL)g2b2&g%z2x(u#(+#;2K+7@krG3*>_H)82eve z7{{M@!V(ggu5&ZkGY1sISEwcAXOwa|le;KGsSR(foj&*q^y(CCPE z_;6u(6U{5yLhV~<&Th7=namqrML4sO&2S^HBAk()-k77WB9M`o9w_rF0?}%Yii(H$ z*sFnKaVOz>Uj^JKhcNPeuOf(13K3-gs|XU>vl@sNrRxAei&VpDI zyiLXM1)#pT#B^HB$=|L*k@(xvx336gvEZGzl z4S{D>sAV%iITfT&gVA8LZ4kmlw>?7NLi3*TP8GU2-r9&ABATG5+Aubusu0_R3Q1r( zMSCQuBfhRC3+TWgc2^;gEuwd+7+&heP}3ILa>6Pt8A{+WdqjoUw5gWXWNZ`GSz=}N zZWS78LvA`+P!nQ7!AkB{)oo3&$aX3b=70GU!Fy(bh7xVf#$)|GDk#!I&)k%({7tQ> zS*$ao9Z9i~a<9a;QFvntCR#`Cp50R|w(hJD@sYZ0M~Qrof;1<7mdNf^AVzwLR5+9j z$w=-~5Jn^x#6Q>&Sada^VQ4&+alCg9L}a@Jy-xupqmlOJP@Fmemc;0B67#J|7wyz8 zytk|s=MEN|id1t)JQ<@QEEJA}vEyGA+txRj#QV(A#?H}nYHwYtK807aJ#@H}Ex5Sa zf$)VeqXy;@iNT(5Onw^AN;`SUs<8c^3XL8Z>@qc95M?G!tf{|qbaYc^SBBpDmTqt; zs^-p-(cL&XSr(9$!~?Vp8S<~G@=!01^|tPMJ0~i0`=F|f?8iA%9Q4GY-a&chx$KWBpc#A%eK*8d*)F#k zr>Gf2^*Kcqi_w8;#HiP3S(#=Aj79J!+tBQ?YZ4h8WbI{T|EVex={Jnwm^EHCL7na# zU}eL_N{qU2sYemE4|g@;h1FoXzj3SwRmjR#mdv3>J$_u(^YZ1#v3%Yfaa_*Ij@$H! z1B02){Vg~ffZXFaZrO+DTO+_Z<^2cr9R9|pOk~D(>AKhgC16`ZTAr@`k*byDj^bc8 zD~pyY;hOsUP>(p;K1L)MtgN<7Q6|zOc->+uA5@j7idKGHdz6*cd6iI``I|#S_pqu< z-~_->FE96EUtSn)COw^9X>q{3ETckDab3IdHj3WLmOVR*Cd!YJv$9PKmB^Klk-aD_ zD|^o@YC6V_GcsfwFU$gI9>YO*R(5^4l0Xw3mhW#)XLb*DH{tCkYUB&5o|{f{=O9i9 zAm)V?mZ1Ip`j}C+Pt~A)qv`%(3h_;g93LfMaFg9vG&d5wuu_S2TW4Q}_rzhmbu8Pj zs)%tUInvp+2c3$FJ2He}>HBsB&f@ov5$T5kxwJ}&zpZaL-3ay(R`xc#IF92$tnAlz zaag6!eN$ z@#;gtqpF%3X&35X8|YA4hT79G3J}(G9Y_v^hKKv{u?KyIfY}!-d*h;Nda70Nw}dSn z@i_CARz5-!nkvzY!}dfJuff`xw@k?S&~Atf#XY>Mbme>WAo#wORTfO&(8rnMh^OLSH5a;v-zTs?R$Gw=C|Jj{8TycgI- z((t@1ghJF%TLQV1k9O}$wHn$Iaww*6G`ttuRhU}n!7j4uVuNk{7&7Su%wB}7EvVgu ze-RwYRaRwqq_a0XGBnJ*7h4sL_&ld6v!8h{vC65M(<7aj;fylxrK%3!Dd8h241t|J zn7lCW>U?Fm4|cys%3%~u;hxd0L;Z-6c`sAp;U>^YbL?khUazW^2Mpy{JVCrys1O=SHjZU7IKkn) zI$ynOsBs8Qe2q<$#CKd=aji|!v^(9khik60Y2ux`(#ZVlY+^A5&~wmW)5dYSg~t}M zDH2_HCiOSs3nXu&O|^MsXl$4VYO-sn^LO@J>nmIc)JJ2gQmGLeXcJn{ir8dBG!69+ zjaVU@Z4h1~R!Gza(W}#nirG-IHLRfPZ6LLxt;j7lq^xu+C~gB;Ovegs&WCa{vZ7jS zD5FKKuvQyPZ(S>@&4$`8#z8CS1`7ziSXaw|uic`jexn0K&q`SIn@9SL2!uXq(Qiv! z9|DhESHC#)>Fuy+#Rr-q+*VZ+>!u}3=0L~bfLsrHw^{Uq$W+%Re6A;_FZ9sbt|Hp{ zy69`mlsV4sD5Q=I?luuO7DDi`_$Hy@Qyc8biTy_J%~gEDW2~fYt7zXU+bUY^$yfvAMG`C^Xk9+xq%0a@|TIS^LI#xt(`#R?0?gr*2 z7smoLa#Oj%kBj8ymJZo9G@T_AM9I}B`3c&_e#RZ7AT1epYlW%J)jsOP8N4u-o zqhO2ZrVSZhOrAt&QzX>h9@@c{&~20OFC{V+fN`p168G7`kwsGR2s?>6$+kiR{G z9px}vL4Ml&p}1GlO^1GWA>D0?#UuQkLj&D4VhfUm$cK0$p=Q=7{Cro3HJJ)*xV1K3 zA8AUmu#PZA5fV{UI%X3Inl`b`+~r3iqvXYIH*IIq?wv?3wvA^~n$fX^eF z`LWalzIHAD>M~^!q0e>7uc}d`G}F=N%jMSx6%7^~gY^BgoQ{=G*_D`82%T8Pmfy8p z35~C-N9kB+dEfc@QaNQT|2I`<A z1M215FI4a{H}n}fD-YG?Ym8vORh97}OazF0l9hjMl@f@O$9`=y`e?F=l}}!5(^1xF z-;|a2U!thmhlcQ-yUd^GQbiN$-rF~tPV^1#VdY;?6k@MQ)sC(%7!1AllWRl)b!~lW; z!~ULDb$ERC5}j%b_SSmP&$E{+0ppzqhQ>@g`!7}3h#gYe5TS@!`Q7W3V4P@Su$!VJ zLIkm4QvR|EX&t8Eh6T5*SAvK8MzDptjlR4e5wSn5syjyd(Z5-F^A$=MOi$9inCT97 zW20tpl(s6%zoG(?yT=B04T4A(JGI!#;g#gOQi&l9lRFTN;pISV5F0tP`YnH}3ZRJw zDoW(&SE|O?p`*<|6q%JrHz+aFW{jYf;3MhpR9$EoTouF)oY*~<;hQq$@7T!0@~!h2 zR@Rn2RPnMBF_cZ6UAxn);-I>7u8Y^QilypKxGvXQq+(Llf@XL$jlO{6 z-4dt3#yYKH*sc;=qO=aLc*dragG0r8^zCq*ZsqSAXckmwzH6xXnVV0O0x>JVm?l;H zTnEsr17rvLBx!liC=LmsEWuVRl)8p8*CN)a}yo8Jf|_XIj<631hGsxUxo8t8@E zuI`qbv4|;j#WHm>+|=rUe_2?a;MLfpZh}+3`vyVVQE{odyS=q9y-$zqw!#V+!TZ&1 zZQ8p?42_MzN-H+1yV|5k;`4@dhE;stt`H&Q7*SED?rGBl3=M{fOCzgzpU?=~mAwJ| zW-o@j5muR$wu_nwjb*@wO#{0$g?iN#s=6JzDa-;jjG`*7L&+$b@M0sArYQN|Xw|1w zTeK?IvZ@8@`xa9h$EHiwk5uci=n(LTY8upMIzj)zs`^!9pnB1#&{aXTr73$@FAlS+ zhwWmK>s!>O*9(JWKdCk($$3scqqc^W0{naR9Rg31e|g0BVn$h2vAS2!*>gnN{iu!s0yA)9Gf;(|6AR6 zhi&m~iN;Q7ej_yaE~*)?lv90~p47nT{(=5f9sX>CP4)8u{$g_utYKo+F9>Wr)(9JG zPHb7CPRQ1<*@<0IiR6j%vY)%jyy;U5z|!H<|{Cp;T-W8H+m@wR{hu6 zL9DvhSukqasbJN6i}IBi&+$0!#v*x`RevrYfR|nLP{eGBCdk!pS6&pM4Bjd3!iyYM z{SW!th$uO$_PO&y(sm51{zSfl_DpzLFVyk^$%ifG7qP)n{w*@i0joclk8GmZvCcD9 z9VpI=O0Qe8M^=4LJ^;g-Y_bKOywDN8{lKaZ&ZaV7Em!|BAH$!j+;~~_t`ar&WE`s^ z`otG?BNbtq$_ZoAGcCJo^>y<^Sg|DzYtsR&`j&YCdTkIeRJ0o+-Vvp{O<1Rd@#!KG ziDojx?et2RY-YD5deSD7ZHD&WZ9&6{R(%dp{j@!#sw|r?vZkjg%>e zQqYlPPhizsX3?x=)nBlw4D(yLz#5xWAjr5)quBGWZ7SJZ<)vzsQ?nRZyR1~L@Z-(bi#Apli3jGF)J0L&lH({EDM&3Wq0L&NyD70d`)@(`3j!UVMD z0cagz>f7@4&3jDk4S8Ccb??#F{r>hmePXC5gC}7I(`)8W zHSDBcRmq(bqmwLCCudTM><%;kmsJf#W|qRIuOeu=M=E+D<=<_W(z~^>QR8i;|3~Un zkAhhNk^Rj7eRal%`RQ&vo9MN6n)%=N2->*(0iEKf3FXn%vs_7W%V}7T)c7ViO zCix#!=bTVA68Q-x^Zq{-R_HT6|E=n@R2G0w?EFut8gBUdQ5ydh>ZDZ$B7_Kd-z-|% zZ@@mqDDzjVXIx}>zC@1p4U&FnPCeS>+Y&%;;HfgBU_xR3bqo0hznJZr;_KAeus%33 z|4wzTtBWa=D8=MlYBH#c)QPViUhe_4@yGlR%>`lpm^w$c$3RK^X)XZYJM@2EJ&t0J zgCOWZU3)mIrN3T1p`v3G*esz*oBtmRX~hI3fqz^FD<}WWeq~!jkDzU&Z-}3;@;_2o zEuJT$RyWDBDq}7Kf6>>>NzJ%&&!uz?)vlhT}>T0 z%-Wp7LGn<%In;zB>yaDrs-mNXj+Wysf`9vYN;lEtwbbn=&MT0zf}k>fPJO3PAeP8} zl<$-B4T5NH%jDyjIDsNMt3~rW^{qk^RysHZKx3+~p#AC_1X>5_6OkXPipU^%kMPV9 zN@KJezCaXAttf0IZi=-xi?>4b{tB<~{8JYwb+l~+bf^YsC3H zfBOoh?nt3O-P*BBOgpB`|9KTck5W1Zp>MJVzNu~!8d~DZ74H!OpH}w+_4gw9QVOrr zHnYIR>OdGfZ__9R;@ zhUh{uwKfZc7YNkIv*g3&pKJz0 zO!q$hS;UrnWd8SX^qf_6?P}}li>C*BGrQT6k8+`l73IaTRlTW^-b54L zyd>)om@Qqo=9pDnFT~ec#qFK@ggnmWyr;SndIm(s^%P1l~ zV$k`F;2)9j{RIo@G8h%xgNt~OQuLxV6~~MIREjx#3wJ^eX;_smsP_3=NY?=6&rBnQIhnICCeHWWg z6mtLFbbX+^#tIS~!+#53-;>DM-^0%bi$lGGj?d9_!Q-d|gPzaP8z6?US?Kw=>fH2v z4$$*m2Mf|XVf@Zc&*uO=-+xivE=Q6M(DPLQZl&jQfS&JaScaXR&jETqlB@K54$$+p zL8jC5IY7@hhI=bLp9A!Khapwy`5d63e)pB zek!zu>G>R>=cBL&J)Z;gd>??I06m`r^n8Rh>G>R>=lcjGCOw}6^n4FMV$$~DyyaOQJ)Z;ge9IA9q33gep6?qJp-Io@06ib)fHmp)9H8gp2CC5WIY7@xGJ~Ga z0eZgM5LIc=0eZewD7Q|}=Kwt)-JA4$4$$*m28l=5C+PWjdn@#O4$$+FjOh99M^Mc( z#ed0c^62@-Wwc!B-0rI%aEkz`8p)|9DV-+ zX+B5aHy|}Q`kakR&hXe?!tX*N>MQ4+vBJvH=M2wlhOScQ=yOIYs5Gona`ZVjl~6Dj z2hht#ETNp6OHTnq|Hcu5ayC9zt#b4^uRo6>Rb_&s&$*?HVpA2Iqt6+aavMjVvsubp zBuAgKg$w+iB2Lj)^v=a(43e;~Xkr=VT_NnF7OJ)q_PH)u>cLY<^H7J=b&{FSbv4)N zQk}5RwV8{()E1i%wu-r~h69*E*yn0Hk2F%m3Hw|(=pvJ_&(*$&x(#3^VV^6ph&m2r zz4?TFuB5C0J7J%zLsyu*e0}sGm}_e-jnRnCR9Ff7T-z2?XC{Q5u+Q~PA6frggndOF z@mBh%7pK+S^=r7%lYnV8j>^SI*e$;U)b4dGd>lrwKulNgX>I!s(EN2f%js}p$)%OcikgdO#JZO7{t>Ko6(_ zZDK(c=mAxrUBRgWJ)jCCMYTy4ShC(vW5H}xff}d+FQGE<6;5*=RiL&^)fc7;)Ib%; zX}w0yR(tnu+u8*$YqwYM=@SWG^5wq9CV;Kjjn+z(8LJl9vxv2t!bbN zG(mGv1!|xQG=WCmMAha~1!|xQG~shl1!|xQG=bdU4T3ifRDm{K0c!+Rpbf;kARXN% zGEEIsfj0dtRDl|(0&PfZIXQ`f2C6_4WupqzKow|Lirg4nA=a>x1680I!7NmP z8mIzIP(D?l2CBe9dMj0+2C6_4H9J+H2C6_4XQv9(Kow|eg_Rjpff}d+?MfJ@N)@Pq zD$ouwr~)-m1=^K%sz7bCikXEfPysz41?fhKM)sz41?frXHu^{`L{YM=_76Q?tQ49bweIoMFKowXBNTVWuPU%E88mIyb0S(?50|=_X*?@(J*)&iE&Wbmf z!AvqI4OD@%;tc{b$%~|cDsWb?5xEWqRp6{(BWC{1kp`;3S)oR}0@^zVln@}MA*w(P zRDrWbX`u?#KoxinB&Q10KowXB$Deq@5_GCSZO8ToY}}`I8X(iGn|p0Zgiju zJZB&yF+C8d0?!%9qzcqP6?ksAK^3ThD)5|eqa4D>K^1t;AVw)f5Ksl4Gsroq0yR(t z{_U|SqY0=2UwwF!R8Ip{;5oy!zFMk44OD@De{4!=ZvT7YQA!1>z`s2oO8TG*EEHbv zY*wm34OD@1q3O{g80we?s=&FRSYj2R3e-RqI9I3wRDl|(0t*IFsRA`n1FN>HBbeb7+z`{86eY+s1Tdh zN)@PqD$tBAk19|DRiLS!lPXXHRbWA=N)@PqD$oSYO%a{g4hSvKowX3 zQh+K@1681bG$($R$UqfnK#VD$N(88ZD$qa}kysF*3bY{dr~)-m1!W)7-A4OD@ITaao`##6>RJb`b!IiV$}=r^-EZGBDU1wriB z^UoKwD{2-zfsIx$_0yM5IPi%xctlNwGfds-{Y<-3=$+78{{?PsL(R%35Raz>r#JNP z7)SXRBihEA^3P!V-B*H-9Yzj_7f0GvHKk7@rCP_}lp(5%2Kg--k% z&)PNOzP50lqJ6!)nRczn*QF&1eDIj&uadOuglx?$HNa}Mwwg-Ha|!1Q;-|E<8)`22 zcZgUCeTOMC)Lye7f&6<)+UX#vpy1*;O$fz;lGc5LII|_r95O9gQ`X7LOK~L9_?Or4 z@93qmkQDL>EmWc5BVT5U@e);8QcW+vaF2?R7O5{2n09vmA#z+=Y-#+g4Ld5f#}R zoXz`G@Q+Xg<|2dCX&B~%Ig;DhTws$qaz2cdchoN)0m(4c)=WLDrF+z`2usKD(1|QUNA?RLL7#Z zaBjn1Fh`n7d@x~Wj`V^#(gf)AkX|rH8d6a+h6>D)hANLa(hKHDQ%fiJ^cwYoInt`Z z@p3v)?*((DsmNoF^ny83Q42arFPI}up~>bZ*%iHDj+|YMdIWQ%spsX(k7M~f1!Gr( zTJ5+^Z)cA5f;rMmMCXdra|q^0i&9~Z^ny9k)Y+LMyyP&1#_gS zq=RW`lR450=15bCtm^ELUNA?R3LCK(m?KS{@m)IT<9v#|FxwZHBbA^EbEFr{kp(r9 zInoQ}$bx#w`vvC6f@G9BHcPaG-u< z*9+!IQ-k`A3g$>Jm?IT=x)5`u7tE0+#=;!w1#_gSD#RS=1#_eok;feA1#_ecF_QrJk-qAJ zinYw=FQ~Yj`2s>A54{^t73N!1-O6jJ0CS{ov8uzPi1!a1EHVnUL;!eIiuzirWPn!y z^DR?E^a#07B*gM~TLccEQnGDrF@vg)kNk-pl3TEYGR)-R<|+7bqHBtLlQxk-jTbh{_!4yHeGt%#pqgHVsUj ze=)&%=zJS(T4KNxXUv)JDw~czWjC24eOKqJ1#_hD8kh zj`VG|LGqa+eNh`kuTEzxlpXK73N4G~9FklJh$OdcW9V2(7UlxuoBOp|Zk$D;;7?>kXC2dj)=Ew># zN1Ad<-eiufn7r7gqpWe}$O0vI5MJhC=K$soK%irZ#3Oz%>Tu z$XUZd4dzHgtujYefH~5tu(IBPInq>HnIkK}9LaUFGDlW`IdT`4M{_bqR)9HD0TpJB ztN?SQ0-A+6vI5MJ3Tigy$O^(P=GnI0?d&npa64Z1(+jE0BTBq z7R-^A zV2(87)WvIAC72`g<@&}@<)o_3V~(r@bEGw}!5mo$=18l`WR9!^bEHKlsSPW^94X{h zVo2j(sj38XB)x2yl{vB!%#i{>ZyHcaP=gT1V%Kb7Uc{UL#b7Ua}i~!7$rbc0otORqURUw%pD?e{nSePR#!5nFZqX(GI99aqGNYV(~mAwJ| zMleTKC1o%)-Q3KP)nJa4rZ5ZCc>7ch=19{hOo~VTj;0#Sk!DVzI1+PYHJBrESMv$a-LH# zN9IWZ26LoUOfNKg(>fI$m?KTKN&Z+3=15a+XO64}bEK)wV~(r_bEK(OnIo&g9BI|) zulK6K9BFFs>Q`rutOj$WsW6x$tHB&;iuDyKF-KN|Ig&K^K=0hlk^bicWHobP4HNUf zAh0TPr2j9~w4*%-bEF^4k#-1Yj`V{$(yq`+=?vybKbRwD12I3CBkf9xnx6ykgE=x! zsWM0U!5nD^SeYaJV2-pSOr||Qm?Q04ox0Bt=19AaGe`Qt9BEh3o(Ya5Fh7_h?K=6e z#kxRcj`V{$(vGw+NBY4WX$Rz#LgvMd834 zX)385P3Fh|m?LM=tz`i)N6w2|BLiTL%#YVnw_uK(6G3GJ zbL2TNC?A+3IY>0OW%6-MoIuHEjtqb~(u~>892o#}q^Tu36b!dG)X4&1jx-g8nIi*W zj^r4%q6#rb2EZI?MrLP@41hV()LNM%17MCcb^Hk{|1DpGIWhp|NE1SjQk6M!5tt(j zXietGMPQCJ0s4CpojGz5m?LM=3g*Z~V2&gJ-~7Sk1G_xnHspOo90jvbLlRd2TOytz z1=NB$a*5c7Dxf!+BbUf6CtmZGBsg>A67kF^5QUXFa)}uD3*aPkU%$XyXt-RJM zmdugMR>rxUPdW=RN1i9`!VZwTlB4WAX&I?5>_gB$=}{BloI%SPYF5r4zX7Eh8tvIV z*v)D#Ec+n}$?xf{U(H4H?#HdCav1*@ICzh1YWaOhW&aTUTUz)ROYlVnt69Yvz!q>R ztGT$^kNqa!d7xIzh}16Op&Z4I4d;yw_JNNUF<&ZV4z@u?zLwRjo=2J4$h?&3J@9f0 zBnK<%8|owGs+u+KX;hr|(@@b>g)bMr09W%6*r2Q0)ro)8Oaus5eniy_>++bCV=f7L zaQf%eSWS=Q%K~MW$ab$mpv76R_ECYsfy8QFUr8)SMtX*PXd%%e)j)@T5|a)#)V#y@ zHvF@Pi&H6-+juw9%_YV?P3s+i7y|HdI`JI~VyStjJB09M6bX_8UnKth=M?9R92+JV zWbZY1U2;!BHMJ3|dDo(+q18Ok;CHzhM|Xce@q4E5Rn8~~+iKn&+=Bd?`n_FU{rDos z(BIAV=l=w;1n2upidHl@x=Oa72JTlL0lq2%IjW<2Sp+ec6xDu6v}f_afmDCj(BNL40&^@}K#AJx z%<+Mj5z141egi2P-LR62@k5tm{u1^!bY&OYjjH``w*go?5up7|HsCwI0U5@O#f`C6TGX}qc!Zjt4{E)l3e9o zb%J*_1)0vf>ICoVA>3PeSDoNpeGjAx@2V5LtCX~rchw2rRg%uayXpk*Y8dep=3RAy zca^k-c~_m_T_vr-yXpk*>Zc$mz`N=M?UEHKgnfc{mAALTyXpk*DsN>}(H9U@ z^SsP|$!zSyXBnBRcL+ap`TiBa*?3o}tYo4R&v%lPm2A;}w( zU5`SV&%62~NDbcAqQ)gNJT^B*l!ZS0l=IGL<6SKZ&$}5qgLkzkQbDCLcvp)yl~6DX z?`qNJ(%%3B+DeMH7grUY>BQWMclkJQ#)_^#k0MoN;+xc>E&qqTHvyC5DDQ`>XL`DO zM!Tz-)!w>Rr)A5Mby>(Z7TQx+);gUykcV6aKJ zv5m14FoZ*#;f}ct<}jBb5CX}cgd+sL-&;pl^))N;effXS_dK5-&Fs|s{_5@Os_N?M zs<(e{4Ouf4oOdEmT>Och$aqEtTEiU8NRM6R5ed zMGAG6*}kR`45^Ms7o5^b-qp-?T&JXpcQtdEi&s)xj36&~S8vcHtC-=;;RV=rq@kHj z`4$ANBhgJtq^>Q3o@vgeyU8QH4An&RR z-qm+vz9V^8UGT0_Qt__3;9aFO@vh#6zb5ah3*J?dDc)6YRemkz!IF2?tE(6NR`9NR z^Dj%g( z6LQ|wEO=M{9l1f=%)jYKem=pwifg%{9#ejd|NNTy7`&^ws~c%7Na9^}!Ml1bodaJVi1Mzw;9b@Fc-~bPysI1&;azpXyUH~n zfr{Z>bz4p2oQ*Grchv>&sxAVtt%Z13UGT1I04L*!<6U*ZyP6CGc?0pTy5L>aAX-|g z%)9D>cU9vrf_K#g@2bua;$3yYyBbzTnJ!)Mu7*)j-c=X8s}WQp@2U&l)iB!RU3Ird z^)aNFE_he9nF#NyyTeo`lc*XDr!II`wZ-HtA>LINysJ9fvb?JT}*ET?`jCdFG1qoBHmROysII70`IB|-qjE?c%Gbh)dlaWMum7+ zUGT1km7+90d72B}RRa>@U3I~`sK=;M2YFXr@UChrKK+Mi(cz)C z{-OwI&YFLTa08HLh7rd)sh|jy~f_F8n4D+tK;9b?2 z1m0B_ysH|-Pcg`r>VkJw17dhrUGT1IKn31a_eK*K=3RBcyQV1@CGlpyFM1!Mj=sr+8Og@UB+ENfuJ@@Pl`?5>WB3y5L={gj2k$ zE_hcf;pBnA_z&LINVkK*5>D~1y5L={gp&tGYyt4DRst&CRTsRgm2ir8)dlaW z##Q27b-}wDhXhewfOpje?`lPyqO)|tyIL72c~@QVuEqhy03eS~ysIvFSL1**D$*N4 zU5ZZCJrNJ|Nw|CH!+OtBH7@4N{WKx!_$*1pCGn7`&^A zVBaz)jda1gnh5pn3MhD26QP8VysIvFR}*mo-c=X8tIHrc@2U&l)i@l#wMr{T{fS8Jk{yIySi*9|6nQ;cvqLrqIga`3J$ zo5ep1kp;Y~%Vt@Ychv>&>ZM!JOrb7#S1&%lW+-*RySi+?fs5r`b-}y(yIV8P2E416 zZpSz)@UC8Ze&hJyU5(2h&%5g0RvFFj7<^n|E_hcf8;;{$b-}w@DOU{dstexL*eoXR zstexLL{NZt)dlZr91=rnn0M6$@2ZBz^RBw!UDcRa-c=X8s~RF7i1~=G#t!hVYCx2C z)dlaW)+g|;x-T+8YMzS*i}J3z;9b@BVtH5H+f9g~R7D-}=W6N!BSq$dcU9X_pdjz6 z3*J?Y;b$FUR%I@DS2ZN04f3wK;9b?w2=A&3-c_xx$h+!-cQqDj@~*nzUDcq&Y78WXchv>&s*ltYKa+RW1@Ed4@uz$ytEvm$RUhFS2_V3`8bCyNS6%R~ zCL$E?stev#AC$nm>VkLG$53%&cvoHUuKJh?ysIvFR|!{{chv>&>Yi4t*YlTuT=1@b z84ImRysIvFS4kh`U3I~``eoRO;azpXyZT-%zXy0%UGT1c7nY*Dt1fs~NuzjIUGT0_ zx)SfI3*J>Km&v>8f_If<$-JvBcvq>+2Jfm1-qo)|Wb&@M;9Wh5@<(`AUGT1wBE-Au zf_HU}pKmW*X*BPu3*J?do4l(ocvlA@YsCsaHA6+-RTsRgsSUK)zblb<)dlY=8H)0* zu6S!JMW?(d-qkAbuJS&1alETl;9VtnhvtZ2|t&mEce1r^Qw311Cr)oVvzo-rHr)o@C4T3@Nrv~(4{?t79Qv(3F3ZFZ#N(lbcfYRVk&4WKx z>%#o0dGM!dZ3kXAo+(cqnVmhu^59Q3G(rBG z!C&X=z@MshK05=;gFjWvMIP?{ehSpvf_Wwn{!|SyNa|P~{Hd`T$)B1Be`>5=lH-9t zHCC@l?gfIqdcHLTM7sfEjex*&gQ zVOy+LaG-$u&S(^aKNX~R0R?}f1^lUn?Lj$Jv*J%JTxsg)9Z!QlwXh?qB+kCVPAL!a zrxva<;Zgq7!Y)%EyulQ9n>zHS*n3G~kBP#-L#Igdio#w~f$ZWIQP^jS(IJBTsfDXe zwQ+0GcaXw<6JqkG7M@~iO#alufsh7WoxeB4Ssn}5gtP{KYT??DjtCtze`?{ns9Nx+ z7M>c?DE`#K^&y2K{A7iLA&uZqEj%qGHfcRs;ZR7c_)`mQA%)Mj$qMZum15Xrg^sW$ zhCj8?83zjSrxvear~);n*tzQ#ma^p_=W=d z2!Cp!7|=)fQwzfZeTYA`FcQ!j{HcYbrY6dtS~wQa$MB~Xj+=-Ge`?|8IJL>2T6lUK zf{(?&Cp6q|&F4=oJfogZc#`;2YcCHyMThuPYsFKxc;mAVZ$-|I73a<~;;hv3FLi$* z&Ppw%yNe&^EoTED$H4_HJW^q z5oe{Z5YP9fc43FsMmQ@I^9jyMUmfPG3@Rd=m0BI;tmL|ioR!bPlyq6nN&}S4S!sYO za8??qN}QDjtP*FX0jtDWX~34_tmII=copQV)K!hX8se3XQc+9rUIOmTH~*Zn4FbbO%K39&PuI| z=d2`sB4?$}j7J^KSs4`z&dR7&3#wi46rPhQvD}xGyvoffNa8_zH-M~!FO41~9R*G!sOUrXs%C3+A^;i6f zvr>18AT1>$&PrXzxUQEtPt)cxh%+UpBWl+pl^Bcff z85Il8%Aj0vRz{?Pvoa{AMdScyrB(+yE44h1vr=ngIV-iAPE#=$5ocvkqqbCtvr=n9 zoRwM;;H=bQ^_ZYID@lWwn=Xp8l6p-gtl!1JS;?^>&PrNET!ynU4DmTD!wSXJ7vQW+ z0&&jDurk0|8BvBgE5iWv4TQ`DLkqn^#fY;qj4(LLWP zWmqR~wso=sXJtU;cRz4e#wi46Wk6%}XK+>qRGPDri$#@(IV+7SkLRp3^2TyjhV%ipLvU7x z)M3U$a8`y8A=X21R)zrd#EQ#Ga$173GNd=z55ZX((gryW!C4v72WX?fSs79XXb{0! z8CJ(oA%e3qgc2Je@tlXJu4Oxx`t3vocvt9SWS4QGmJve9p>b2ZQ zs*)#hR&pfYW4IX3%BbBy-GZ~SB7)8loR!O9aDL#dIXJw2w$XTfYYG1_UtW3~q z&PoD=I4kKIiQ!Cy>pSPH< zvoZk?;H*r*gg7e`P#v1HG69jySxFfZI4f`M1L;bTvy%L+Bb=2aOyI1%7A9=66T?|~ zS5T}tD}!RqS;^&m(wV?n$xl5DFgYtZz~rnXzLjR;to%$r&PsDuK8cewIV*`D%H*u1 zbdv1QenVZNvdz)C#R1Ia8~YzbmcGbMIYj< z{0;s(9)W$Tp8#j&k4=riSt;Z}&PqCq2I4kSoRvZ#8HB*pGO0K#i6O>6o-dy*5T(rO zr=aw%O-wA{to$5E;?_hsDeln#;)?t;V<{S)Ma z)DHO&`5?)fP(|-RR>%8i{!QH`LO%Em0O_;xeZVB}4%X0VQty^4n7EJly~r>g!Sz4*(G`q^y&9fd7IPAN_k$9l}(>4A&5W;Y`HAG zn5Pr2p_;lJ^95c`R7!vpEq(viX6S@)raV8-(hqE=Iw>fN7G7qic{( zq%_n8o`g%z$<*My!ls${GoGi~{HwZg%*k*(3>%vBp&PB^ZAd=?Q<$NPocvUUE z?bqlzUONic1RA#f;jZJu>`^=K{H?R)1d5g&+sXj) z&Ra!#U$$7D=)jrX=j5iLKS1eDr0*B$Ybo7@^aCROR7!Uv{Wg(4Na@2!KPb|NC|yMQ z?IPWt?UDs}NF1;;+d03BIS-3c9zkk1bN)`G29essoWB>T<4Emg&O1cv1XBB%^G=aE zjnq?^^N2{zWrr{}IqwpwbJ?LWq~0x3w`GUMk@^RbdSQ0xBvS7YsXMYm3vP@hM)CG}xFgtXBIUf*-N3uiLFz16JaUnaj8)x?+k@^@?IJ*yv z)T2n@>^>q=k0FJ#`>04gfz&?c{G&+y0I92)^D&Y7X?AE5<@&ft{i6AS0{SMX;g6Qb z7H8*&$`g|d6s5!YwzJ~ET&^wC@SkgQlu`es-EGpA^bRgwntMWY+Hs?S+um&;0|T{}`S%+ixE3V(yEY={A)< zMwhkw;ugBANrG7S_O&!dsXLKmg!Q(sc@4U%wa;$z2hMM#U zalZ=jZY~y*{rgz<10vl??Lg@d@^ohK=s-^=b1bVsqiu$B$2#DSU5z60l#u+;+VU8V zlHmssq90k@Lbd1o%Bp(~M$~NY>@65g7n$>4mKdbH7b1`IYpZG%)HVb3H&*8E0Q9#3 zC`(D`no=)kF2h-N9qt-pp7Tqq@ECHg?Z(%-C6qYj(m~hVv@|*{j+#!@Y=8vC4rF!g z6hCHNiI%ijKDR1=T@7w`w4At`G0$}mTN3fR@^YD zOW%l}e1@cmYI9BLpP&FXDb|d&+ul9s zL3!sdoZ9w04kt&2V+cRXoR^5vn`On8oDkk2gsJTC=!B5m>E!4bc6O+|K(DQiW3+pz zkY%!bM}AIOzM1oKaZkWacz%9%zKEABX-H$vD+IdAw~KM}FNLfo zOYJZq4g8fbkmo|3|1N>8^Yde*eWj2!s2kv4i>yr|UFsWMIK!M*3E`TJ-BYupi)w7e z?d)!6#jB~lTQ?q`o;KvKc2-amQ<7B8w@|*6p^3JE7 zhF4?A-gpGm{WOGs#_=efXB&IV6Qg72ne$JO_{YVa%`+`hAL22A$z9`c_Z9y9M*DuL5?k^DF7W-u>$a4X1dyh#$D;MC_ z_Z2DF#RYWx`>K>25)u^iaVZ%T5)|}nQgT8_P}HwW$()d&u-}l9+k^zg{ic-MVKLeN zQC+-g!vSqC)m5DckxC(nw3cP?nlmtD3Yq z|LkOF8kf%u8loDCdIs8!k$%n?);-cMrr1@^kDc1*V*ZzH$4z<0pHKd)=v0`I&W!uQ zp9rCy9ht$y!8mnl=KNF$J>rQ7TX+7=X?z8YJKh?6*L)76`CIXWpL`8w^Wh1y^Ua(~ zbLY%pRQ0Xg`X{(4vS3cG2M1_89V)WC^Pjo8?W-{G+({$!&vVTm0aT0LG~5WgUMOz&mbrbX=kSr?{;ncA zD43kJ#pEm@CT9ms&N|z&OwJCNoWpSc^c3TiSt>9&Ydi+0BHX!43P|rCbukA_&Ke_# z6&1o~a(2MvtU(o+oE5X7= z4uSY3==WAIIfwKKOwJCNoI}Xqd2%La2TaZy6=HIBz~mfOiqiOWj1HKb4M>Q|*#VQY z)+R7HJ799wpeU2G119GVQNJ$^O>9-Fgfe2lG`)L z7EWJ799Igp&ux z)D=w5m4J%L*#VPtC7fb%cEIGUag~^y9WXh^AtjTt&ywtb$+;p<5#%~xa;^-NOwJCN zoa2Dv8kff>CT9ms&T&8*75RNi5i~nsa*hM~w0=GiOwLKbI3{NYOwNgTP5!C}=&=fT zpI=teRytsEUf#F@gULA&>|3TA7jwYmoCwv0=1?#>CqnrnO2?6|jvJW+Cg((4fXUeb zlk+l2&gATX$vFw?`Z4g-QY|GD26Z2JF z4w#%1(NQL62Taa!@a34C9WXgBn@=~g?wMe6UN)cKk5s1vlk>8f{DY}XU~*nIlV);u zz~sC<+-Gujz~sCv+&>R-J%Gu1*)0B9h%8`oUN+0JOwJCNoG;yq<{oyyi*S$vM_8fdWj<4w#(dkQh?KOwJCN zoHaC_$=Lyuv&O_SIXhr-){qz`X9rBq8W3f2cEIGU^$ASQ&WlWtn&+ayqD;;Xn4Gn} zSSDxZb`zpVno&n4ld}URXKhD;f=td1n4C3+-{(SH&CCIlvxbDUK_+JhOwJk_VRClB zdnVcOkImbdxCT9ms&Kgvi$=LyuGsh+~IXhr-j)BB5IXhr-_K|wxXEHfEU~={$ z{*=$;X?DQm>?3?50R)(w1BeKdvjZmQM1*2;cEIH9gA$mW9WXij7%FZIld}URXCG66 z$=LyuGvVq=-95cs{MO~U->7|P8}^{aZ^5Pz7Kh99x(su_$v5#yOuIu`{sfm}N7c9B zek(Hz1BFTqza#xO_G4X-tpFV`FK8ujUr)!-KyjdZn5_UEFu~LP;NRgK=+^2Q+Q7Ta zv({&ybvgXlPA!%e#zqlcnOPg^X!nszgyWyJv5HO&WgTYLrt~i0FF#x?`P;~HZQ0t= zOsmrfP5pvHKnsxcX;6@@d0Ms4rcd0aA-a0ucx*A+X479d@ff7dUpM<08QOFxMNK0;}3Q) zYih-Jf&B<@A0q7J^hEpU0**A*K=SmRkKB5Bd0`Rn_e?IFF3$@>3u|gUDN}bI+Hq=Z z5wAugQm-{#Pa73Kg^?eSq0@2)!kWpF>r3j+BRgAU(LZn{_Ks1KtE?ei(QM~#ss0Sq z2ZcJd2+&Qbv!}1Jj$6Cf&IJj19FRW{5Nj87giGDhs;wclEp_%B{_IMfox`64l>MDD z`wx))&8RK#n_klHypz6rfNb3&~GaCW+e|A8#Fk*vf0Bds0RT+@2Z z&OJMKweFbSzYkxFOEcx`PmeC#Ql6SZa&&&|^!4Ws?B7AkiPjwhds=raERJ74F|%~d zHLPmq&a3c$VSel?9<6@IE&KQF7@J?biav`|3-GeOBoAx0`4Gx4t~dI7Z4M1+ITWlN zK9nwZnB-qeGYgXwGv)DCj5^R{w1x!fC49?(?}Jyq8;1U04)}f^wg3N2z<2VdH+`;e zMLOzp{Srt+KG)=RAN9E=X$7Ba3Zt9sbIpV7TDd6iW;5&S-dH-A{;QK?kj4B3v ze>N(aJ}c>hOY*sXWsoS&Kpvx{|y&r>am2%ldtamyawo1C}s#xzFAYFD5>-~qozypcQp2Vk) z)tfH6i1kiJO<5q;yQwf^z1NpQF1u+F>%G3DTy|xw_Xbb+lrg($EfqJ7rNv%mKYt~i zqK^DdD&O@y-7DP8>{k{ZMd2Lp259T0ySNSne-*rt9gi+VrPG1nNvEXB?GJ(ANnAq> zHH{y2%swe#zS|!H!IK6#%|P%{q}~2xAb7yE+n)>s4_S=cp9};KCEWVpy;s5=158fi z@Q~wy;GxjoecbI&27(VLf^L5@5IiCNZwG?sSA?i^7ruQ|>t-Z)p4Ps6E`0eYN3C>` zLoD}Sz_(--xvlKROLg_snj*P}saWn@yO*h0?mW4VA(lI3C7*KS@jQ9qDHl1!a=#C1 zn-s=73c*(s9Pb*a8*3J9#V$A%6|w5@WN!8o3?sZ}~SJNku;|>DcTS zxbma?`=9|)uOU!ub~2-~`mZ5SY<9}56h>@zI-nA(*AOT+I~_&Ijn@z;Haoqdrd2!$ zJ6=FArSb)YEM7neiFIuDu)>ecPKtW{0>VYaX0NBR3Xh+NM-Rnj*ZO#m9*WJ*F%gd* zip|b7*j|Y7=%Lu`+Bo0mjq&KA*z6h==9I=M~@4So-o?<=%Lu`VSS9d z1;u99u!u*GyTeo`yXP3bGZdR$TTIRp^5~)1>^j@B9z7JBJq-6xPpv$frGiI~#>ac~ zP;7RM5gTmEl<(0)vDr1Kf=3UwN~^p-=l|Ovxk*f1q{b#4?}#9 z9*WH#R)#%#C^oysBzW{tY<3OeohazhL$TR4AjYGIVzX;N1&3IW#~%+9z9VtE}O7N55;D$1XLb96q~&gPI>fDZ1zex-=l|OvsVHt zj~dMGw~C7kckL$TQ_0hLD&#b&RBQyx7Oo4pdw_voS6?3IAZqlaR%SHdZe z9*WJbag{uJC^mZ>5_^u3*z6T?%29%1vsVThvDxE*VgQiGSFzdSfc~D0a@3*N>~TPU zd&dXDqbCU%=g~v4*%R^F2|y3f@aRdz`+f$}^?_ouCxU(B3Ji~)M6hp}@99u%_C%;} zS3u#>lL#e*5t}^`7x3tz*zC(7{n+erIDW?yJ;994o(RS8<;P}E1o7dq(N88 z*)>Et>!6NIj~$Y+PgX4jCAHt5kqvDq~=;?YB~*|oZ&M-Rnj zkA<2ZJrtW=gDQLUP;7RNP4?)a*z7To7>^!`&F&-h#Lx8Tq1fy`#Gmq+{yG$!-ADLF z0tk5Y1P~FA9*WJLh)^Cq6r0@#C3y5uY<3?*#f|akq1fy`rh-Qg#bzg5X0WHP?QmCV zxVKn>A9OEu9p-*^b<2OR!xH!7_;S27VtwbE@Kty&*1Zcq#zH**h4(Ub=FT3_o(vBR z-HaFWx4EBRUH2_ypqI1f7v&qJ1E;{TN6Ycd{leXL&{0f|A?zkb0X)TvU!$p#(}*5%E#F_2BO2ipy0d1jnhSF9B( z&sUYsO_fHOb>((y_-y*Xy($kWp3AHqQZeW&s2EEN*fg@PTD`WFGM$hvOf99-xpA`g zw9QoFZ2Gv&BowfANGeW9MSZDbXt>k|pR2=Fv=i4{Dvh6?k!MQIEs~g&Sre;&!3%gu z9t%hmaEw`}WdRTQ1tbMZ_ZF!*q7>Zqf^Tq5EiR0MzrF;PoH2O7+@GOiXVbq>wHZXB zKoaI6RxdBG^>ko2@bdNY@@?Sd>gDCy zz{}Ii%d>G#80^oz7zQ`aEih}K`g?T1O?0?jvJihn68y97rt)rH1J!sMlw|m9-iE|y z@Z+PD*oOpl-Cg)>IfTTPetc~uTPLI~{|CIJ_&=1nT3IDlmcPb_Tm1@te3=qt)k2N_ zHxieT)q_Y}i_c|b{kiyY79Y0u^=74Ry9>2QAFDaf-h;n3`->IiH1a>}Cj=fA@ME4U zUy`TLZ&9+}!80hHYcUn2SqwAEAsyp*WO=?L68BM(uw;`Ue~tIo!okFJ1Kq)a2fS zD7#ZCE3!1UE%ln*6VwG35%P(p?#X&cFn0!AXDoGZfmEIgqQ2cM_1Y@RoTt zYI5hxi)TltSn6+ix)q1`AW$B8!A*=#v()YB8Zwy$ao{4HQQ`!O863!fFdd{%XyO4R5;fKSzqEr)P0#_j`h44-Oi$lAkdj!N+(Ty#@5 zeb-F_R}Ht*1)y$*^Jz7lPwoF`e9*#=ZT5dO@gKYF|7d;?N62{3$M?$n@I{~WU}OH& z+&rB3PBHa2y*;&(U3-FhGtsyGkB>%k3+1Kp*&Xv`c#>RFuYN+-Mi-5&_;-CZx-Yy{ zW|qcEXGcqL5{6$~)7pQ6Dvc}s<*doy&=;bn|2^?3ciu!lc!FRwPy;6;-pPaG(Cr`r`(0pa64`F$2an; z%y5+$ENxpjU6S0H^J!+tY%~~-=m*8&0(h~x^ zOQ~4;Th^-803WbcNN=t5x2@(4kQ^cjCs<2=$7;F^k|QMH{A%g%3dtZHvqUb^L^KNa z%;Isg%UR)xzP5n!O}N`SiQ2{Nu=wQygpQ zcU!gh@TT=G|ASRaE$?BJlrCF~GJE+gQeELH|W-~|FN`Kf&{|we^TGL;!(tkrn#qnACi`EKC!=jRW z$*Or1B%bJ>@Q>u}ox4T1@?%2QgeszI*7ZhFCfB2WY};<&;#o=EI8ReF`V{CI&JZX% zt>EWMT~vbdL-<{TCX(qY?s1F5kj(X{8eH#B`8Un;?C`84vjfs9_{Pa*ALkFQUI(P9 z(%_N)&fXzrx38Y$)@JctOEbh({9+98n%bSYk3#43n%Z5f=xlsmQ@cCM&)wuTwGUU{ zj65F8liAPW)4&={CrSH;b!60(2`5QVw~;kd!JQ=SUMUYbN!ooUfW_-=MRYUjqFH>IGo!i}Tc?8JFrT^DCGD z%=e~r2G@~BiugtD+@wU>o6;F-ri%|S?M>+vo9Xg{EXJGC8J5+kE=}c4>5M2v$eYqR zx{XG9nA3`&H>Go|g@yz|guN-9Pv+^m!p%?m^z*4SXadC@h;A?`&7|n=-bt5Es@U^% zEcGz=WtX96F-J6o2j@y^3x{(edLT}G8L-X~cue$mG4B;ZTV3kK>Tap4e|YF-miNX} zwJ(5)T=&%E%o*mDQ_YlQxpt90CDI-`K|dYI$m>m{G9*)6hS^p5A0a8Z46}9h;@Y5v zqCG5I&j&2UWteT?NyTNDZ7fh$TqM*({|i6)#qP2cr%B8%PYBUE67eA6EIT1YyCJfD4r)8--jf%*S`Fm;J`-Q?Y6ciH+G>^=?P+R?b zIDQ_?i4(}chf(hXwKcV{)Re>8=3<$79~7Y0oS*GOLb5r>LxXxB7RhbQNi4MYky`h0 zytdPlKtboNsmplO1_=(U9voJ+KHg!~gTpGvL>yKYI01Yt{M8HZI54y)SeML4W_a9GtD zLJq4Q99F~1sEeQnht)7D>agm;VKstEbXfJ^uo_024yzsS%jZ$b|as~Q$@SoL<8 z>SXUz!!^`{!>YEJoF(M2>cL@EXIs``)q}%o81A2*+E_D71&39Q?}(+K^Wdd!>YE+JG}3m=fPn$q>Jf|a99n2 z_$5eA3*@lsT@%qKIIMbbSPfYUo+o!$^{z8fA%|5D4y)RPP>Ry{UMC(LRt-qVVbz1f zs@5hrta@-*)u5=ust1SFIDODz)q}&TMkPC}dT?0PxUj>j2ZvRy6}`-NSoPqr8dioJ zR=ut$#CKTr;IJCWe{*rTs}G?FZW_VH97aqytZGbx!>R{|RSn{uDCn^2!C_ScVjNaI zIILY9ago)q}%oC7g8M#0yDqSgiz94yzsR{|)k-*dV7&SSht*0z<*@3(VYL!Y zIjnkcSgnMU2gXZQa9FJbR1T{i99Apgl*6hAhgFTMcL?(?$EyXf)9klY7#KcVbz1fY9e0y zxak2J4y%cH-;GXs_IYqvO$7VK6&MbyiD2I{_qOxku$l<R{|)kKQ|$sJa`XUF6C9Z&QG<*@3VsQ|_B#T{0?sS2Q=!>Tu30cxH!99H8_g%>g6 zuazKCBkP_Cht*~C`TaRZRK;&I%5zm!97^J{(r#^2a-@dT>~+gr-}IbXfJ^ zuv!Ud!>YEUKtYF94-Tsu!*3!XmsIB6VM0RMpu?&MhgEGY;;`z$VO6UuI;?tdSdE36 z4yzsR{|RgO(|SoPqr8Uu-OSoPqr>Lc~U&vaPz;IQgL{3)O5j_Sc-)kpY7 z0th&)1`rX4RSyoUi3sJe>cL^v2PHVHdT?0vF;v_bhgA;_t3IZJ!>R{|Rl?`3Vc!lC z9Ma6}HdpoI)LVURAg?F18*^coST8HAZpP+NZ1s4#=C#j6?YJIQd39-MxEEfVJ;Ob4 z9xkb>?CfeEIgFL~tJl|+H=*jpI{5zeyhtq9F<%~q-y`|$4$qH{m4$b&_Y|Q|L62a~ zXvZQJ;VH(WcVPXN+-9nDEU}Lv0AeqKEid$vZ-{rz`q~#^H9nu?tZ`xo)Vp>)Z;RF( zC*zwDkr#<#$-7QyHe=t4A})GQ73pp9W#aLzyz51|uFMtZM(4|X8`L`}WIGdT0KI5% zeI1oq#Ix(+LDOzpzbOw9%Tf7dQHR!7?LzrIY%##GV1dVoo;AE z!nxiUTGxp~GVj=Wmkg!C4bH0G+Ik%_w^VX$R$kE6pmO9Fd?m2(tY(ggG^!CmX79#%M+(KbcR_^P)Xs-7O=!-PduqlFqr zXYA?1;OA>jhBd`SIKfS@!VgVFvHYB+GDZN5CX2X&rdeUmH7qLO8qW|8&5dDP#3@a+ zFP%aavci^Z1vTpN4W^!-U)08iTm>6@S>Yc;`r`SS#nE&9@V`RovC&v~?TVlQ42I{< zs}lYsq%1Bjom9G>DkI}yQT9Bg{feoT=Y0e$k*si}+Q`>2HHmt}kjzO*Sz%j^p)68p zJw(S-%KJ-3Gzz=;o*;aZ?CM1rd^qi~Cd$(aeT!&u4H^(dkm0*1{LU2yod> zEs5Kfgj`u~*dLsnE4QDg-utIvaqlc$tWSo;og(CSp{v0#(=j_OZh$C@7>7RCXsG41 zpa(ATeo1#X8GvpCj~!Z?8K*(IaI2}2wFA3qDEN@6rdmIVIyg4Dc)EXfsEkfQF=)>Z z&$i9YO<|Hka|^7w;f1K?25PKEzC+(X(%Z{wtLvIc($O}I`$1pZQ1M7xFJ_pvHA2qE zS3OR!+Lb{$UBaw3ZwN`EdPi-+P{0Zw4OnfhA>|?;zsl68L4eiP8Dcg1_Tl0=gZ@-o zZzwx4!BinMYa3z}dsuB_tYR;#Z4wIZbyL!J6;|8aa3!y$-Xh&KC(sV+j>BqOOdS;b z`T&ife^RRjK;EjTzSbB8kae=w5Ya8GD5bo$*KRSZVX!ENV!Z#s zYPW_}m|Cc8mj!h_GlNqYGKqx|VJB<1#cBm1bM56pW#|0pMCbhM9IL$|sA$J4XdR2^ zSnc+poT|AzPqX|5R(qwXBd?jsF${sDr!aY8wL7B9&PlZ6PANyH=;%DPaCCMG7Fq38 zCcLv_ps#I=o(R-sU%SiH2X8R7yGlTe55CAE7@6b2qTMVeRC?ll$2E^ZOE`%E!9 z1RgZ$LRpmRt4+0WgVA@8+WjVkhF$+`o?>b`Iy$=%$oGIea zt~nUe^p2h^qwr4)iNzE^mEcfFOAmV7T3bj_9K$^cuYcl-Z4apq&(AK+@k||I4PE@B zQ^ES`i~~*5m}*pNR|wRNn_>{r9YS=>PR-5-A%{Z{UL!%skq|^xXAspBLdn($f^GoZww)2r3XR1AyA;}1fhLVDDOr=RDTHNw`dSH5Q3@J4Wb4^sN-TB41#V7fN&Kn zwH)|{0(!b`6hK^A#en|s{G@L{=!XOPW5pZV<}ut&3CH@{k$|=c()IGR$amD#^o-LZ z%i{TwnQ8evSbHp>pFyFR<|0O-n-W;dynmMfzPme?JvH16d zhEHvKYmv7=pJgL5Tl%1^q&4dfNJjSrsMxB@0Sm+YBpWy{v{3J-b<+Bk-dj zeqiz=e(YnbIOG7U6M_S*o(o{MK}hhck$!Pk_$K;AyO&s_V9k^mM1foAN3pHDt8Hkg z?Pj)`k{#mr8v0Eu?wwuTJ^fhESWAN5K|0TM;^#5?y`FyKt^9$ZPPUnTBXTmgy@e7Z zDz%kTepHS_lxpuCXlHHo3wFBN`dGX8Jun2W0M?-uU7e+Y_8YK*$~qN7i@HcerWB@| z1RdS%F#k&vK6ZqDVt=lPC0OK?hwEvjoJfe0{B|X!k8*wito2bs)C6ngz?+A)MZ-x{gDw&IOI2&-_G?IHn^a>=6)bN<<};@o*w|K7F6 zLxh^^)L*;akkU*?&6n$MXf-r=;FzJuQ#l>0|3O%ZS%uJvr`YW^*q%*+u_A z-j#-?ZT#%yLb*uqBGf-@D8yQmsa@C+n{5xPfAdbQ3Fm`)=T%zWLshEU^=Dy)IGlW# zsBhYBfSU-4KNx2bz(PTbbg%rXW)2a0aVX43LAICasbx0G(I^S2b&1M zj!ur3V_}m4SYLU3a+G>noW(N|%Aff7LMnfrp(hPizp%%sYFL;u`rj8#9d4f!ctl(1 z$J*K{T<3qb*T~pAdVY3E_p^UBb?q1#XhDPwv-+3rGqO?mqqdoGGC5XOGx++Sn~;Gy z%I^2z{;Q4bos;ueLOq79kMg{*{zX$gGCzguo7MO2H}YV5Ql7v}cV-+5H8TseR9XKX z6EJ)ldqXn__JfsLEamV@%0I=h(23r3{zwn@?R#dhkV8+u^?zalXrh6N5+(Ycsqt6n zXz>rH%<7LEFf7wz44yc!2**d#e>Zh)*hpEVC`HB7ON)F_rvA^b;d%Mec@Lhf1J_W) z&ke&+c8rdlF0+Q)%$0K`-oqN!m@DB*u3Dtwf~g(E{Hly=VQy;lJm2qYXfc<>DYL)Q z*Dx1Wi6v2b4sUooq?3a~!^_ojID((^{RWx^?b3S<4d2M{X;Mp15a3Uf8osFjcoL?X z!Nvuuj5XNiGB@Pd;5)+_&V-~rm|+^HaE-b6jZAV)V1y=d-0J7z0bUWB!vVu~l;QOg%GRfCQo8D^n#h`KzYpOE$ zTeP+pi!M!HF?&xyhm3caU4yQf(Z#XTtZB;Z3{)>_3f=c>5;Hll=_)w z)2oxgVc%>vB*}S6A23@(N&)`g<{kn+B#&vq*J2h}lWVTkcVUNNUL1SMl#BB=v_CMl z#icn4qGqVa%@uq)rdp&CZXDlH6`8_(6KHXw&p+bKM<%i!V#G zk3#bkp}{+%eQ@_EO)j1)O)s3Ao+|CaztCXQ{4Y&>W3vL*?_$kA7TDgNcJ#5n;_<#- z*8JZMw4yC`1|fhGOOFaTC*~{7mKA~Ye3R;s2WO;r_WAx`ILn_%^wbf>oQ?vL*yQ&)`(hofrp1EDLOwsyr6VarGa zB{t>C{?@zNb80!72z~nOjK4M2a!kT_cN81Ua(l1kM9@O8HAe%=U`w71=mM=c7Epy- za6F(5wO%=(47S{BtloK-%qAYm0UUT zFOs$9QMs43Tx(7Z@kr7$ zQ(mNgAlJKE-VxH{kp<7dvO-3BSWBZhi6lZBd3mvx=bD<4`AOE2GM^nF(T_l6#D zrNQ)Zk@@)}@{!3I($7}ZqfI_70ki{8m3d?qx5t)!1-`&9W_wzE(3}mc!HKn;Fz32T zOu58aT&Sd`4t1G1@m2ZN6+jDrtmPe*Aefb!bL6lEI>fIk0r=Ws%R{C+O4tTLa0QK> z;Z8>_yG;)jg)L&SgeGk*uZh!&2}<#nNqTZ>c}AnLtf34H&QH!#*k{)Au6VV$pNLxR zmcA-t7NkrlKP>-FaZ9s#V^*-hUE*8-A_pyu1q2e?QKu&90{DH2y^|>5+0Z%2j{9-_>{)rUuRq<%5I=;-?%R3$OeMW@$KfGLX4HJb2z^@ z%N+#K+=0o*2ZaZUblNnhCI4>jDs*7o8eRZ2rivbP&fGzu=O8r^`Le0#ngO>Q?m0r~ zk9KpL#EF>|g{8#qo}oUmD@6NO*urc1!6u`Qj?ItG&GEHqIWziCX@>Wy!{tRj)(HQ+ zmZ8l?-H}4w-G;DAOe?0WZaqKWQ!!`dUn<PqBcy zqjPAWkF6E!P%(PEzXdO5V!2r>mz<)97;YQvVr#`cBgVur`097zEv+t56fy9};EoRT zj`YEh80=#JeXuanCtgk&Vr#|l9)s)d9T*(EnXMILcMPDT(>EfQGNLDiOOSRR2M30R z*;+9~$5|Ta69_T%#vrgaNPEqt_K_l(tZ;%uZLrMNijlUig!gcVXqA=oCUg}+i?Qyt zwP%Z9ry9RS-HX_|zgaX`Cp{ zPZT?_^D?{(nc4a+J6{qM?-t_ggJQfhBILbX&aV{QDQ58WLD#doC|IlP7h!;0m0V!0 zvS)xSa(bE;W;Qf&VyX>?Hf&k(kzt(G?82$jU100?)yl3^>c9P z#NBJdHlEJb)0PGin4Q8K6>P)hoXW0>OWB4i8g7OoeSRZ6VHd^Gw)0$;YaQ6QG&4zz zm2AV6LT0f8()b>>VMmS%a}CSWLBEKfoM+2osma+%dYNLw&dd%-^FP5CeH!rQ!hhhe z>k-&zOglM>ohgx_v+ld5W=_d_q#SceO!8<`jBPk2DcisrCyG7cbGUILwp-|gLA1p- zJiCslwEW}w^4S7$Z*AHGj!yAX!iGQ3e|&_KaO1rFy^(P)@zXS|x4_fw3qY)%Vw=gz zh8Jg^kNhji2o5)c#hbHbut#DiWoeH7V#>bZFSdU%R!wchHoT;{@hH{MT6}NOHpZtw zehE@lxW_MG=Ca|=)(_j}G0u*SO<_jj>tCw$LnHnC9rD3q*GMN_Gq@!RmbenLc2!f$ z;V8+duKvyvkh>Lfl6D(QC+UR@i1%>u2G6=K`x6wnesmmOF<^3kYF1o*ICEOIx31@D zTzK~)nj`QlhM)wxx!ob=ZLo~U%yZu z6a9u+4`k;tk~P(z9$h%ithY7OdvC35Gab%)F#QP}`Z7EbmXHHRAF4fp!-IMIPY$7F zsUuNwE}I@bhZz*@Rs-{J6|vl9({&QFtu$Aj++UCikFm>d8O1U*t`TN^#%d4-^U~lI(>NFo^r)bj{TPb>QGB*jzK=+2sS{-CYgYOW z2(M(%z}HIpT7$10q}zD~e*GNTeuU3ePemeq=bLWb*@qu5a~V62&(1L5bHZ;_dYp2gT6>!#H6@O|9cCrx)!FVKdzz# znLdgi!}#nTl$nF3cT3anP^J%&>GxVyrA9JCK(`Gy=XEL^cg6y$|vgt>LgplptVyL<5HlzvR;EjUCVC{lx`+^&ujVUd6jh;PtbTls=buDjs^}Qro>=uRS%%LuETXY zj;8?6CSM zY32CnO``{mm99sFvFp(Ye@&@$3%Ng(rpwdxW*kn#vZ&6krQ%Vtkr#bo9+;vp zNlle!C~>uoLbK~J`e9lR3wT<=^XfQ_TykXkj%Dpatsb02m2=AMgBV9?7-iOzVhp_= z&NpXN4qg=goNv9uvZ%G6CQ9*+^{>Ej51wS!BWvzNZ#js8^Id%4B-8H}Y}|)Rxc$&J zVW~`;jLa%pis}5>C@1~1?(W6q-!{E~JAQF3{k|D3KY~yDWw^7UDPFqbXTYWIJifnr z>mka*K86N=0!2a30+sy!%cS@V5NG*Vg1-2~O#+L7#oA5d%8hLQej|UY08;)=DgFua zALL>=7J-MJ9k@Yie@(p%Erjn5x~vAJ{Kr(|_-EZsos(Zd_n`DI!G~X4&jgiwA3pr5 zTVDfKe0;8^HW-%{ME0ze-ZcPedL?7O1Y`$^uX+Ya?!5Qbou}~Qc~H&cvvUrKf5VR- z;j{k%X{P!Fu3d3fbbTCnT*{jv-~St#*n-3+loQoLW>GOIZx`GD;AMvx{i9Q8<7&tc z(UrCcOYf7~-6vq_Q!+t)VVXlx+sD=Ay?=weC`tWNrDjqsMtQdTdIQ9VhgOvzW$64A zYLq@353cR}5&qK0dVN*rOTO@obHr}!npG!?!SY+>D1xQWsSlg^cgM^B>nG4Y*y zskN=M9vb>sZ&=q!aZ2c8y|JeA7-aO>xOYwG4fso+%{y1KXMuRwX8)GQG~$0cmdO$v z)?@^RO9~#aOAfZ^l>FcMRk&Py!d?~VB>e#>|GyU!yQ|fGDBiex)q1`IQ|AgVvxz~sSz|vAHrf_UyxbZ##QJR8Lt`NInr;# zj}`O<;h!U2wXhh-kgNXPYnpEt*RSH)Q4mbK85*(DcnJ- zSCTMwXKPg%@wisjQQHnQYKERF5DX)=?aI$UbqQBk`j#<7Vxz1ROXD@oH{%(QRgnyFGg63~@kdB+=6Ufn&f{jJ5I5saNRRMn z8a!@B3UM>&(4Lhu;%1}}H-n^A7Lc8|BX1p7cBP8LJ`YFWCAju#d(}-dcRG5bYR@ zn^C2k)sLHzLfni6WXM9t7kW~NoADIhw7zA;&EPH1GK!pE#mz_|ZpI$uuF`QcQWr!Z zj;xNGkwV-I>WwVx$IVC~ZU*n5B$9D6Qiz*DGMi;Y+>8|BX1o~It6Niun{h49n@Wj} z$x?`$L1|c262#3o1c@j5C*o%C_Ri|K87aig;H``*qT$Bze#yV7+k_);)l9(@eOA)7 znIU~NWJV1I7ogrLK{Y=_`n5VOBDmlb0SX(;YF^JbXI{5N-KHZt4@E5C&kIgOiFHN&_ z*D5+2wyHQe!PDJY%4Tx_Ij3UbDt);6Ux4vg4VfLsr;gQ|Av4l9tRthQOfaRSZ>%9} zrh;$gsT=F<>3%M7yvJa_s?>G7qic|p3dy%`?y?`t)%_Ws8?ty` zzRbxGsMj$2E4k_~XK`LyE{JLDuL_0j{T!o}{djHzg?RKdtW7TU*k8+4zYvch`7Fu; z8X&k{!R-w`G7qcH0r96Vv zZf5_TNDU&jhuMEGQpb_n%j|cE)Cr{aGy9z)bsDLsF#8dan#&H2o@4gAMCx32Xbh=$ zi_~q|p>d@CL8M-o9Xg5BdqnDv?9jp-v)?OHcR`2L`$Xzq=q8!{evx_;tRQtkq#n!; z9boncMBLM3T%>-{bPSWEJhPgQ;z4|Np5iFrokz6jx1AMta8)`dRLZx` z{*K6cuPvyPeED~U{7rVQ7icA6`n6v{`0(!c&>*6$1L zg^}Bd=SRRx`>}C;jh^dx@5Ogo z$Ho!DUgW5kAwuNc7Ey3^$0SiRIp_?gW6P&+A+`ni8VrhXP3XT{_)r}T6hM9@-I71X1sgQdc>UNDN zI5cmga}c{C%HI4EhIQKNK@=Ri!4o1T3J%>7F(oyl;H1nbIHKA3YmbP6Lw7^bK>PPG z_k%p05n*s_gu$U9I>W=@*a(BO9p&OFA^D-TiDH)R)hH8Slrr9Xke z*Cs_8n|ol>uA$%d0TOV30Op+#q8<{7P&VF#5IqB;mQvsDJqOxYK5suevyGN&vb}hZ z#6FWLypxaXobAk>%H&^v_Pg3l_!N>)RC`dcbpV#c$0 zFnCT4O?`4$8{(FzY0cm{+55Nt3PyyG2hYhqu$el~TGa!1@SH4y=TPID(zAH8*IGp@ zPmVXnzv)OmLIlsrB6!YiT=^&bn`T`KqJrmS5j=;?D7hazCyU@Ylvycc@SH4y=gB6v<%!Gq^y5j=+! z^*VS??&?MwU=SIsuMe*lBR&gWy>8pP2NzJ@{tKs;R@L~87_I`1DO4C zaks_vhE_|9W%858s;T`7fv)oH;*Ru}LROQdi)=s|_$y%`&xJbwT>@L@=f^$ll|t5_ zrWSuKvNnlysc&@Q46|P)glpDyQ(QB3*TO{MZfC{Y&^Pm~>yA%P8}e5>E9lC|-wPf; zQ3bd`zQ)PX)p4)IR)=fczQ@U&t3ihK_gZ=T(@sM-ZiefQfZ~sCj-PQnO6S?S-txrg z*m-9EljG^*;-3AeY~GnSO%OxO;z5 zrhnRuG-fVel4;zzA;9G2%Tkc%0!%0#lY&+*z@*|UQm~5)XkzhIDLEu0DCXl*GAJY{ z=+~s=gpi=9Uzd_OAwglkAtkp735xqoDY?U9Viclj1|Li;)=Itk6HXmXFE(^fEfz4U!_s>92$yWWg~u-1`xF_kqz|p_H^}k++6ZQkJy_k!Ei*1Uu7eHm9|B$ zSa|dTIasj+)g?}$bKqEiiQFqFI**O`RT_U0@vCgauhJPp@vH31qDo#Z!DAwRRoFx{ zewB^*RS{HT{3;vqtHNkAewDpFs*edSWFvl+HWP_oW$!T6$-$_MNKrQ8S80pMSwiuv zY{ak9*_Mr8W$%i@{nJA)80>9BNV}n)!$*euyNbAM5Wh;B$6!>%JE!DC$bo`}#YX%p zjS=A_6vB`GVtRuL^ z1HHJyuMa>%@vCgauhIq*;#b*-U!_6O_*FLISHBs$@?d7*jdKuc`zT2L=xD zt198dfq_H(s!BL{V9Xd1zp4^Y92hvnud0L-2L=xDt198-fiW>f{HjVoabVyOzp4^W z92hvnuhO_m@vCgauZly0&w5~Z7bm(s){%jzsi2*azGis%0~REIE&&Mm&d30 zRW{;R#Q|wlBhxu#IH((>OynqLU4--wQMH;U@8;hS1p@K$FH&xziN57AHT{*{HkT) z{&|S&0r9Jr&ElVh$b$G)%Vt?NewB^*RhMo>M_jTIzv|-i>qt*F;#V!3Z{T9%SJ{YP z^}Aa$&gKt(7dysTA%4}Rm%}(d;#bAxA8Z@Cksgrw6-2c%)YFMU6!EJnq3PBl<5$^; zUsVZ;N359mRW{;RRmv3;zsi1oLKZWAm5umSv33a*h+kzRepMV2LuxpFm5umS8X6zJ z%KlRm6C1zEM*J#mMm`Yp5nqiRh+m}v(fCz1;#X;XLi{TGMJ7nibJ1YY_*FLIS802( z@vH3HO^6Cjg*x&dmq+jWcBJY{ajMg_`lJY{ak9pvv*9Y{akP*yQ+CHsV*sKw{!o*@$1|BlW~jyxk|4 z;t;>ehxk)IGdh)x_*Fi_HxfV~epLVwiC<+SepMnu#jmmvzsd(C#ILduzsko@abx0F z*@$1|V=Bb2vJt@5m_6TE zMGg-n89O;O$Ls|mNRa@^MUk{AIX{IAOG4mq{pkE@IMCZ?h0KEt&X}C#l-aikVUC2O z=cMqQ5LQ8m*NN=&B3VO89PGIwnMZPL0nR!0?+ZaK1hgIhJdv#9dS?HDNH!ojb!wEC z?hl2i38LAvGqcRTRR~%jfDb>0^u{WxfHedtPs6>={v(0dEG4utZ2z&4Z56rjEcg7z zs#}q58w5BMwzir5zZ$Fl3XA7YWi?cRq~&YqX_0=3N@rOn(hl|u8eM9sO}32?W8VgJ zb2!A9jSyqxsj}G&F=ivg829Q?ZL8v9sSsl}LX274(VCoc&_;-{|GbPEmxma$5n}Ak zIF^?Ug&4CDVvNjIWrHEcY=jsiIs9($sw2EBbcitJ|MZpkbHbRV1mA3lYKwg9xBkjhl&$0#2k4e0`Wh2BGS>24iir5fiHbRWG zqIMjQs@(Ce#P2QChS%Xo;nTD+kscf#7%Yh=ZoMf14rAItw6%Lq7tZf3z=J6 zDF~IKf38BrDt?Jq0_%uXRft$c@N_U@RdqXeFW4H6SVdd1t6ovF^Gdu+S0Q3mz0b29 z6S1o1iiRg}HgOoA(5+^>#1My!ilVe~loz$0-WL{}x4!0KanAfr;tn%n)k;LH;?==b ziqbBRh*esuBUa@Ru}aI$h*j{$4Qn*5SRN6pbhiJCws(P#?6}Ir>#8N)ZjDCjR=3pM zdd$e4hsWc2XdWJqpPANM9=%2_&5RSrZH?5@$fJ=IN%OKHF(l*xBse5M0JAtG3tc2 z2#Qr66jH28Lb1xA6fr>8XcCH5egt7{=#Aeb6srsnQmjfsvC4v_j8zhfRmNykWR$8? z5{gxoVbmiOs|?P^7tZ6R28$DfkBH>|3gAJ-sw5Pv%ucjMjV>V+t9+oPSe1lgmBE6F zRY@pT85F|{DRr@8RT7F-7UEZ|Nk6|0g^tTKoi+>oz|ij{<7m4T_& zZ%DB!3B@W(*2-)4EU=K;n&~G?P_Zi2B<(!ln}I;2n*DZGtV$&_a4F*R0}krmL3Kz1SEa14POAW10V369ndlOt6{}L)0)PrKpV}U< z>s}yI-4=r2G+sGw^4qmyRqAHTE)}a%JAx+F@lrb_AZy50tV->&tHGyOmD(MIjAB*l z7C+`!tV->PL}k?J)UAHdQ>;qu^#dG32#Qsy+x&K_X02G2+Gk@$xVBn~RjK`9kW^Aq z2b3MRQkG&>>Yz;zD^{g?Y}|i=Ngc8=^rpybN$Rl8!oWj^NcR<~BQ}8K@)D6cYMap^ z{EAhn+ilpoG?^<%>X=QTVOI}gsXJ`MR;)@L4b?LX6{}J&3z%&oC6PK2K(%63st^D?eIt?T z4M1AcNTm9LNQ7clsy~VpP^^N6qBT%)V+0hdQiB0TSg|TK6rh9^t5U-Oimpz76ORN~ zsx|zi`vWAqqW#R10cMn9RcbUq@^u}5eq&*3Sg|TK9$d$N`0xnDs?=GV z5mKy5JrD)kidCtXM=^LTeuYH%*2Yt;N{AO0kN5O2sPrMT%AY7m8K%mlUh`FBGfjFDX{hU#VC{zocRn+dRc8 z+ER*DOku?;`lZ9|H`0clve-%+SSXWp8D)|G7Rq_WEtC#}CDrtaX6&uE( zSS2m^m8D-&v5J1tdL=7X(FQA4(GN?piZ-=k75(-pR*^v|R>_}Iv5J0c#VY!(HL7;e zhEc4dEu&aPTT-!#erd%j`CBPg8NkR>^=pPP4UoyFSVaa>tm3~?v5J0%6{~Kgl$K%@ zZF`DUw4oKNn5Y!1=r^iSD^}5_QLM7IJjE)q*@{(NY7Ry#R%M`AWu67}y-o&-RmMtp zI{JP&1H~$X1Qe?>P^|KUxT}!L8&a_<1H~#sP(edQ28vZ7tGZ>(K(WeTUMZkhWvp7U zDg(tTW2I7)a{xtU%s{cqAUcv`28vb2s!BtVE=2~4RUyPn2E{4^jv`W;RIJKCvC7zK z_eQZQ^X%RLMnz-AstgpXOfp-sDg(tTgIJnW87NkHfShZxQ7Be<=!gLhiwqR2JS3P7 zFchmi*jB8{K(WdX_|$eXP^>brU$H6!#VW=sDpqBnSoH`VkGiTUR%M`AWsxX!L|CyZ z1H~$fR6(&S1H~$fRY|cb1H~$fR!Olc1H~$fR!Olc1H~$fR!y-g1H~$)@|nsLsVt_$ zG0-wltTI)NzG^8}WuRDPFkI7Z#i|Sxs|@H@tja*K%3walstgpX3>2wYm4RZFq4*W6 zGEl5CSV*xd1H~!>E5)h|6swF8w2#j7FMjvK(UH&o;nXHR<(ZHN{q*DsaVzexIJ^O z&4)!R6syd>v|T?_wLWX3A;qdzC|3Csdoz8lP^|JpMzN|Did8;LNh-BMu}a$gf>a1{ zv9N*2pQ06tRdgHFRY|d`6^d1oKr0P68iXV#ZK+l$R{8eGidC&ptnyh$5V6rbYPLeL z$`4BwYfrJN6^d0+1fOD6D-^4uNb(lC6^d0+sICzxRz<-a>bez*RR*MTvtm^%6swHc zQmkr)VpSA?P5{L!gIJ1Htx&A;1Jg3}Wh)e`{D4ofsuhY=2Br&`R;+4;Vih5>@2ax_ z=Z#dXYMWNc&~()mtFln6QeB|})mweaLb1wp3L`DWbE8=(R+*Ce!NVd8#i}TjbfB_O ztg3(^Arz|&=qXlZp;%?iR4@7#It#@rgRp!QDOP2nSmig%QbVySY{qV(Smn2KNugL3 zvVsi7D!-W)G#1NB0w)W_Dg*QDk#gTqtTOhXVpSH3RR#?yR%M}BWnf#eDhtIbKcbiS zvQVrt$W+-=tja>M$^cwKQmo2CvC5eB6DcWHWuaI_2;S$uzG7AGt2yd5)wo_4%Y999 zZN;kG3vD!`EpL;h$WTDBDhI`?AcYmHa!{-a0$L2mQ>@BCv8obDy{O(a!{-a5RXHeDF;H2tDhI_XrpPIATd^t!#VVSO>++yT#i|?>tC+^O zivh)|92Bdp>;sBbIVe{7l3JovIVe{7Q`#UDt9%JnH?b6}a!{<|^txEOwL}hzRgnnP z_@G$jgS_qs#i}R(NuXHeL#+M`#VQ}fV~xl`v5L*IUTwvy92BdpDldi7JZ%HUtS(vXCp;%=>!4`yKm4yac4~kV5=x;eFR#}+cYKuMu zGrAB_Gc69qDl478J)u}-VZO$KVwDX=G!zu8m|?0_&kyCHSY;qJbD}3_@=&ZYS8`=V zaiOUQ#VUhPX67iMSmlRkK`IZ$D!-N1)-1)UJQS;{5ulWkhhmkX*s@e255=lzh|)o^ z%7E04MzJan#i|MzMD(CoRRKIA@=&ZYARcrAidA_iR{8LtVpSfBRfa%8!L(vk9*R{4 zA;qdZ6svp|^O%%}VwDf-Rf<)4C{{%Q+A$*!#VUiV1K?ZCJQS-8!W~~LR^_2sWgwM^ z7&0Lgt0GZPu__P6su06ctja^NstS%afnpUCe2P_hC{~$d)E`;MDi6gfW7dO{$V0Iz zY^GH5D4e#i}qtp8>2`m4{+gWs1l{v8pmmyMSUzeDV}0g9*R{_u%%d)hhh~|azo6ZR$0&<5+u__P6s&LUgmhx}PL$T_*ENV9>R^0#( z{TPZ>hDe8JX>H}9SY<$6@+ifsJQS;#$?IL$Q>@BEu_~OeuWq4ORh2=<2*s-FaBzH3 ztYVUEZr{zvbJ7DvKAQOuC{~%A`w%0=R;Qqxs;a#v|Rj0gWL}cMttm>2le*{k{R&~n3K7!y^tm>4*djwA@ zR&~m;JAz;ot2)(GM);s?#i~v@L`UVM6stPr&>O+1pjg!@N7|MM#j37%w!9JA8)-|i zs_U0HoTf<6S&CI%?_whY8-^6Cy53#ahb(F-pVok4)wW#+-sv~9V%4@?_xjCBv1;3{ zQMU6qcGWL}1T`zUA-2n&5km|@2-z%_7FG~By1S=^!pL$=KwC5@o2NHATCfg& zW(4X&BjbY;2(;Xhd;t<0>C;kor?4_FqkKA@9EDM&aSCFH;gGLR7u%dPM~0nPkb#=$ zz6_!>+Zd}!^R%&!{)OyR7&2$OjOv(H@t!6Yyl9isc^8q?yAu>tm7+;nC3J3zy&MH> zqA*f7A(}nEp|V}JgJB6dPi_mvh`E|ox%L23>0IftSlP9BgsK8@e>&v~*0 z;f4K%FAMP8elq_&f=0awp960}6e;Ip4b)&4afBs&4$jVT%wFer3UwYh;LNH zqcW2ttp`u=(fqu&i=!`7rl+NeW6k%Jm5~bahxX2T#E~ls`@FV`p0``{|EJ7%t6l!G z!kSP|bUb&9o@XrjUS;MI9uhsDx3EElaTOdAxBp)Yx_3h1>@w|#M7Sc;LD zHhsvUsERtq`+vu8`sY0P$itAkpt!@%L&qrW@L!`9K90}+0Yv#cx4g6gQEs_%;*_>h z$jm=(72+fK9HV$)&cithmG(@V5Wj}cem(DAW+y?KWOQaZ)zeuap2WxN3v+oY&%1I$ zycr+aZRWY#{6ZeWBKXMuQRe<}S3A@^@ag&E+fGoq1vSeYlsD}D@%I+?8XH6Z_^QIV ze;n9nGI@_8>i#jTu;0>l(X(OEKW*oWuJAU6{iC*vp7&bx`iE7MtFG`n3d?IdI;%y$ zU72-P*uLKs^pwJMS9qC)*Ks|4~hI@7?b%wf>16pkzN0?v2NuL_+}_H$H^#xD4$t)W5Lo1xBz<+4fo+fQY)=Ki3YOA$u2uMOEiqb)<`xb(XfH-ot)N|Xm~BG z!w7d@n)4(YXxDLPOF*K5tc{Kgj2|JT(p1GRh{YBw^6k}c7& z6REfQB^v&SGW1I{P?v;_@7$mtMiLF&OUYzOG?1-U)EkM0S0k$?mT1_Azv!S z@SS=QUoCtdrb7}9CvkI-u_PMkXhf#yNi0gcPo~Tt{I<4!@w9{!$j9{Slx=$qOytu(Y?e&Ka&^b}h zLDpSFV(-F^>xT>Dh$bf7pK`bnwo0klf${072Ox7bU(@ot(Cus(TwYqaAl!0Io;F28 zuiRdc+i|qdTVSsrMdTDnKvPoWqgnzg21jqELFckgO4S(%j=lg)8g+1VYRR0gbuTzN z4@8z#21oxmQoHd#;cwcLm(B!7|0;w3!rwIBX^I^jowCt(UvP9vtN|-HI_*%K?cnIN z7i|v&M^B*N8%PI7x2;!9aP)xL1V;}7UT|~*+I+#$>7>r_R8Ba8v5N@C!&Fv@hawoe zT{a#a!PrFvW6mQK!PrFvV@428O@{yVMKE>|!PxAa<61^UFm@5a*sv&WVIYFBd$Ud8 zur^TmV7`upIZ1R)=1$9MFis@h&MXM`+E`D z9dC9F6orcj#zBe~!PrFv;~*G}VC*7-vEfvRVC*7-u_19M@<%Xs5y99HA|e>Oh+u38 zRU#O>Cv9Rdg0YJT#wMGH2*&Q1P0*p+%qf8g#wNXnaoPkU7`upIT#YD${PYMH5sa(x zbOdAfRCS(;=X*%Fh+teTL%Cz{5W%<_Pe(9z5y7|`Pwn`ya1p_{8d2^TJVY?A#?uju zT|_Xh##1{!B3wi;u11tQ1`iR8tMPOMV;2#O4X;`RV;2#OqnIj!uouDDMFiujJRKO; zedYCtDuS_#2*y!4$^k&_pF-EVh+rH=q*0NF03DdvMFit0q8HB2BO-!vC1O+rWA|JY zz6pA2253YuzJC5HT%(H!#udq4=9-KM#udr_h^;On7+0iv`EsOI7ZHprQi-7=7`upI zT#@ICVC*7-@pYIS!PrFv<0u|q@nlcH8Yo9Fb}v++V))_+#x5clSIkd#7O$gTtU|R9 z8WD^uW*LfL>>`43MRquXv5N@CQFLDTCH<7n9 zod^+(ubaq3Fm@5a`1*7&g0YJT#@D5rdZRGiE+QCTH;H!?^1MI<`0qtZu5 zFm@5axEh--Eh>VsiwMTmsL>IO-5;)=iULzkO-ziHtRp}K| z!8nSEAvGAm*hK_mLyeAL>>`4(;Y3C-b`inYP}Bo4kNA4*Km=n$2uCn>5y9Bt6(ShB zKW3BkeJ&a-9KqN{1Y?t5WCUaP%{D~`Cq^CF5sY0#FgE#Ul0Sm6iwMSs!$%#6Q7l|U zFgBC`>W^UTzSX9NA{e`fU~F=#8o}5_1mj4m9l_W|1Y<+09>Lf}1Y_n_j$rH}f^h^T zB7(7t2*w`M-1ylMj9o-9_9)&hpB64;brB3b|V%JFzw} zySO3Td*t?>=rXYks(Y_2*S?10+U$Cn^?lv@r0qb38W4Nj$?X{`vs5l-H*)vX_8lLB zNi>WivVWd$!xNat(ePH%5|H6JhKQ7m7aT|1BW z=3NgwR#?Wu>r?ZzZOHADSmmBw;kwtdHEL2~2nc2J|3!acLyrHo?11{Yg? zt^4zwxbr5g6W)Ta7Frw=xoTl@b$}X*smq%}XS$%XPYxDz^E+rNzR*Zn@e(tZ>x_TBM4 zH)A~rRN>r|piU+-^CVE}+}zNH6!FXoyEX0DM!Y1d^KW6zQ`ST)!D9-$xMc^SiP-b1 z6z$qGYkIVZe$PQ0h4ZNMd&vLsL$ajLV^{RgdGe2Tz_I3h|MIf*Bm}XGy2OXzO!E{z z9qS03i3L{Yu_h|tf9@3Gt@yx<&>9eA70wSde;2?{cM0*s_;h|(?cucCf#^a0T`2LI zaNe|=3VLmu5F7Y(q3CbgPnM5i>p6V3bsj#!smi;B*xsi$HnGu7jyt+3;L1pa{%y4* zNB>BxJvu+@o(F#OH}JLX4;AbEyMS`K=XE;$qgkhWz5A4x?i+Tx9e=I19!FW80momS zZ8NHPS(h7G3YAtlCImg+$6EUY{b(FbPckjA9yL<_bOc$G|9!XBQRJwBP zsOd@T<%_GA%U(XhDLAw)_f6%M^Cn&VCqIL{JGe6y_E2Me19kfMRMTtg<;#>_IDNd& zvp6Zo@#(@KA?^Ka|5Mn0ADUiIQ1NyJXHE_H|1#>$+tTx^qZl} zV@(~$Rqr@{4Q(ZlWA83Hj=Q?yZir8ZJU8|pqI2VmFnkK1F05$FW7yY9311KF)%fiA zMV0T7#{_)?M}7vC)n6~Qf;8{Ri+xwbv5&fNcr($c?w!q}!=+hQMpp>|{G(J}_|nmzme7@IG_-L3Wt zJRjC6>0&P7AZd-efvf9gx6fH8#*lP(vpwDFB0SwDkV}1>MD1PaA%!-8qeRHl?Zp~Y z_CMf=$kUA+F-3wr&}>h)QLISUN~_P)jqGu~fA*xt!$ZBMti!aB_U zZ=R1U%iy+US6}x^g+f(~XqZlNt_rx)GYwXvouz&~AmYr`vmA*yA)rdAbp| zM?>uC_C8pSI}Mhn+lOE|K^D)`?IW-Zlg0CNBg-W1GvMj=W!T~ArrXi;M}wzZ7EMzh z@51*M*^Yisw?@;fK2Ns|BuD`BJl*c#ruA}$ryIAtsMD@Dwx`=+q;B+kx_yo^^n1Ed zZ-k9+CzYogcTh4}o^E8T6?MkbjRuUZ?CEwFj+;uUJ>6&z070TYda5V681p4#SmbO2m3Q=%s}EcnvOJ$*uTG@p;%1 z@^pIuSlaS*qoWaN-M$J=Tr^R(^Y~=&whH9{0;1=M*!|lmQ`;t=4q_+S z-P#7UryK31wG{SrlXlC~jSOw^TFcXo3)uU>G~}{=EKgNa%g;1$d*e>hFSp*@MF-}& zz12?26i=jf)KfKm2?ee-u5k2jKz)1^Dfm5{H8`K~DJ>{ZGXE<_ET4&|+f-|J+c)=N> zS2pe)rD!iWL%)s}oFQ_DH!eT$f(u{~y%An;0TQ2rv=XYl-~xCRFSr2Hf1I8doMAVDqe7g6zv5Ug@?W149lC0l`T3wRTwXhOpi>A3-W?9yeKa? zgUVj!^MVV45ngaXiq8u!2u69q8BP^1I78w?412*DLIp24L%5C?oFPVe!THdM$$@co zX(G2kL0)i%pqKy5DFH9IFpSeC$_uU<(e{F?#*?mD@RoxYTs5BZ36oxM)rhtiTs5BD zG4g{KTs5BBvGjtgMzp=)s`2EGksrL^s`1p0r59W^qU{A&jVE`E{NM#=c-QlSi(+EY zePVig)aM0PmFGDZ!3(ZB(ei?eBFX_k?O%JrMG?JqOwYLuUT{%FZ%Nc6!V9hvv62^D zMZR&IF#|Nb;41Px-yFT<4==ciWG{0~h8J8#vX`@T;ei)iMXHytq{0iXB9$1H7hFYN z$P4Z|OwS80ipN(x*%NFpxQbK^U!E6SMN-%ct|HYwXn4U@!$Pik?wTxg1c@aZ)Z9Yyx^{z$nOPreY(#J?z(jEIAkY>7uC$3(!BwMH_JXUHs)83>WRjp4Tt!mI3oeR@AvMYi&QL3R!5L0PFE~S~ z;00$0(Oz%{ui^z~NcuJy4HoSMXQμ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 F`F{_Lw-5jT diff --git a/test/opt/tempCodeRunnerFile.c b/test/opt/tempCodeRunnerFile.c deleted file mode 100644 index 24e0fec..0000000 --- a/test/opt/tempCodeRunnerFile.c +++ /dev/null @@ -1 +0,0 @@ -printf \ No newline at end of file diff --git a/test/test b/test/test deleted file mode 100644 index 6486ab2bce4b552dc86564c761131d5d4453cc07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17008 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 y>J|>qiHYH65MoHEJ~aO>0F3Icx39cc Date: Thu, 23 Dec 2021 11:03:27 +0800 Subject: [PATCH 10/19] feat: UI --- .../architecture/PainterEngine_Console.c | 597 + .../architecture/PainterEngine_Console.h | 56 + .../architecture/PainterEngine_Designer.c | 1930 +++ .../architecture/PainterEngine_Designer.h | 96 + .../architecture/PainterEngine_Executer.c | 578 + .../architecture/PainterEngine_Executer.h | 46 + .../architecture/PainterEngine_FoxLogo.h | 1 + .../architecture/PainterEngine_Runtime.c | 118 + .../architecture/PainterEngine_Runtime.h | 36 + UI/PainterEngine/core/PX_3D.c | 1265 ++ UI/PainterEngine/core/PX_3D.h | 127 + UI/PainterEngine/core/PX_AES.c | 448 + UI/PainterEngine/core/PX_AES.h | 33 + UI/PainterEngine/core/PX_ANN.c | 489 + UI/PainterEngine/core/PX_ANN.h | 78 + UI/PainterEngine/core/PX_Arle.c | 163 + UI/PainterEngine/core/PX_Arle.h | 7 + UI/PainterEngine/core/PX_Base64.c | 175 + UI/PainterEngine/core/PX_Base64.h | 9 + UI/PainterEngine/core/PX_BaseGeo.c | 3478 +++++ UI/PainterEngine/core/PX_BaseGeo.h | 21 + UI/PainterEngine/core/PX_Bitmap.c | 331 + UI/PainterEngine/core/PX_Bitmap.h | 66 + UI/PainterEngine/core/PX_Core.h | 40 + UI/PainterEngine/core/PX_Delaunay.c | 513 + UI/PainterEngine/core/PX_Delaunay.h | 25 + UI/PainterEngine/core/PX_Effect.c | 89 + UI/PainterEngine/core/PX_Effect.h | 7 + UI/PainterEngine/core/PX_Font.c | 750 ++ UI/PainterEngine/core/PX_Font.h | 84 + UI/PainterEngine/core/PX_Hashmap.c | 185 + UI/PainterEngine/core/PX_Hashmap.h | 59 + UI/PainterEngine/core/PX_Huffman.c | 268 + UI/PainterEngine/core/PX_Huffman.h | 7 + UI/PainterEngine/core/PX_ImageFilter.c | 229 + UI/PainterEngine/core/PX_ImageFilter.h | 18 + UI/PainterEngine/core/PX_KalmanFilter.c | 28 + UI/PainterEngine/core/PX_KalmanFilter.h | 15 + UI/PainterEngine/core/PX_Linker.c | 19 + UI/PainterEngine/core/PX_Linker.h | 23 + UI/PainterEngine/core/PX_List.c | 204 + UI/PainterEngine/core/PX_List.h | 40 + UI/PainterEngine/core/PX_Log.c | 26 + UI/PainterEngine/core/PX_Log.h | 7 + UI/PainterEngine/core/PX_MFCC.c | 138 + UI/PainterEngine/core/PX_MFCC.h | 28 + UI/PainterEngine/core/PX_MathTable.h | 15 + UI/PainterEngine/core/PX_Memory.c | 158 + UI/PainterEngine/core/PX_Memory.h | 25 + UI/PainterEngine/core/PX_MemoryPool.c | 538 + UI/PainterEngine/core/PX_MemoryPool.h | 89 + UI/PainterEngine/core/PX_Packet.c | 100 + UI/PainterEngine/core/PX_Packet.h | 20 + UI/PainterEngine/core/PX_PointsMesh.c | 103 + UI/PainterEngine/core/PX_PointsMesh.h | 10 + UI/PainterEngine/core/PX_Quadtree.c | 257 + UI/PainterEngine/core/PX_Quadtree.h | 44 + UI/PainterEngine/core/PX_Quicksort.c | 74 + UI/PainterEngine/core/PX_Quicksort.h | 13 + UI/PainterEngine/core/PX_Sha256.c | 311 + UI/PainterEngine/core/PX_Sha256.h | 56 + UI/PainterEngine/core/PX_Sound.c | 398 + UI/PainterEngine/core/PX_Sound.h | 67 + UI/PainterEngine/core/PX_SoundModule.c | 250 + UI/PainterEngine/core/PX_SoundModule.h | 39 + UI/PainterEngine/core/PX_String.c | 697 + UI/PainterEngine/core/PX_String.h | 59 + UI/PainterEngine/core/PX_Surface.c | 174 + UI/PainterEngine/core/PX_Surface.h | 36 + UI/PainterEngine/core/PX_TRaw.c | 103 + UI/PainterEngine/core/PX_TRaw.h | 19 + UI/PainterEngine/core/PX_Texture.c | 2896 +++++ UI/PainterEngine/core/PX_Texture.h | 69 + UI/PainterEngine/core/PX_TriangleCross.c | 453 + UI/PainterEngine/core/PX_Tuning.c | 713 + UI/PainterEngine/core/PX_Tuning.h | 52 + UI/PainterEngine/core/PX_Typedef.c | 4431 +++++++ UI/PainterEngine/core/PX_Typedef.h | 615 + UI/PainterEngine/core/PX_Vector.c | 189 + UI/PainterEngine/core/PX_Vector.h | 36 + UI/PainterEngine/core/PX_Wave.c | 130 + UI/PainterEngine/core/PX_Wave.h | 44 + UI/PainterEngine/core/PX_curve25519.c | 867 ++ UI/PainterEngine/core/PX_curve25519.h | 20 + UI/PainterEngine/core/PX_rbtree.c | 453 + UI/PainterEngine/core/PX_rbtree.h | 135 + UI/PainterEngine/elsecode/include/map.h | 11 + UI/PainterEngine/elsecode/include/mine_map.h | 46 + UI/PainterEngine/elsecode/include/opt.h | 124 + UI/PainterEngine/elsecode/src/app.c | 2 + UI/PainterEngine/elsecode/src/map.c | 55 + UI/PainterEngine/elsecode/src/opt.c | 229 + UI/PainterEngine/kernel/PX_2dxCommon.h | 40 + UI/PainterEngine/kernel/PX_3D_ObjData.c | 356 + UI/PainterEngine/kernel/PX_3D_ObjData.h | 50 + UI/PainterEngine/kernel/PX_Animation.c | 483 + UI/PainterEngine/kernel/PX_Animation.h | 56 + UI/PainterEngine/kernel/PX_Compiler.c | 50 + UI/PainterEngine/kernel/PX_Compiler.h | 17 + UI/PainterEngine/kernel/PX_Json.c | 1170 ++ UI/PainterEngine/kernel/PX_Json.h | 84 + UI/PainterEngine/kernel/PX_Kernel.h | 27 + UI/PainterEngine/kernel/PX_Lexer.c | 710 + UI/PainterEngine/kernel/PX_Lexer.h | 116 + UI/PainterEngine/kernel/PX_LiveFramework.c | 2733 ++++ UI/PainterEngine/kernel/PX_LiveFramework.h | 267 + UI/PainterEngine/kernel/PX_MODBUS.c | 27 + UI/PainterEngine/kernel/PX_MODBUS.h | 26 + UI/PainterEngine/kernel/PX_MQTT.c | 1052 ++ UI/PainterEngine/kernel/PX_MQTT.h | 106 + UI/PainterEngine/kernel/PX_Object.c | 986 ++ UI/PainterEngine/kernel/PX_Object.h | 469 + UI/PainterEngine/kernel/PX_Object_Animation.c | 130 + UI/PainterEngine/kernel/PX_Object_Animation.h | 15 + UI/PainterEngine/kernel/PX_Object_AutoText.c | 231 + UI/PainterEngine/kernel/PX_Object_AutoText.h | 23 + UI/PainterEngine/kernel/PX_Object_COMBox.c | 202 + UI/PainterEngine/kernel/PX_Object_COMBox.h | 29 + UI/PainterEngine/kernel/PX_Object_CheckBox.c | 245 + UI/PainterEngine/kernel/PX_Object_CheckBox.h | 48 + .../kernel/PX_Object_Coordinate.c | 2445 ++++ .../kernel/PX_Object_Coordinate.h | 279 + .../kernel/PX_Object_CursorButton.c | 161 + .../kernel/PX_Object_CursorButton.h | 22 + .../kernel/PX_Object_DesignerBox.c | 249 + .../kernel/PX_Object_DesignerBox.h | 29 + UI/PainterEngine/kernel/PX_Object_Edit.c | 961 ++ UI/PainterEngine/kernel/PX_Object_Edit.h | 66 + UI/PainterEngine/kernel/PX_Object_Explorer.c | 681 + UI/PainterEngine/kernel/PX_Object_Explorer.h | 78 + UI/PainterEngine/kernel/PX_Object_IPBox.c | 79 + UI/PainterEngine/kernel/PX_Object_IPBox.h | 20 + UI/PainterEngine/kernel/PX_Object_Image.c | 212 + UI/PainterEngine/kernel/PX_Object_Image.h | 25 + UI/PainterEngine/kernel/PX_Object_Joystick.c | 184 + UI/PainterEngine/kernel/PX_Object_Joystick.h | 31 + UI/PainterEngine/kernel/PX_Object_Label.c | 250 + UI/PainterEngine/kernel/PX_Object_Label.h | 37 + UI/PainterEngine/kernel/PX_Object_List.c | 557 + UI/PainterEngine/kernel/PX_Object_List.h | 57 + .../kernel/PX_Object_MemoryView.c | 410 + .../kernel/PX_Object_MemoryView.h | 31 + UI/PainterEngine/kernel/PX_Object_Menu.c | 460 + UI/PainterEngine/kernel/PX_Object_Menu.h | 44 + .../kernel/PX_Object_MessageBox.c | 291 + .../kernel/PX_Object_MessageBox.h | 58 + UI/PainterEngine/kernel/PX_Object_Panc.c | 428 + UI/PainterEngine/kernel/PX_Object_Panc.h | 39 + .../kernel/PX_Object_Processbar.c | 162 + .../kernel/PX_Object_Processbar.h | 23 + .../kernel/PX_Object_Protractor.c | 173 + .../kernel/PX_Object_Protractor.h | 27 + .../kernel/PX_Object_PushButton.c | 392 + .../kernel/PX_Object_PushButton.h | 57 + UI/PainterEngine/kernel/PX_Object_RadioBox.c | 274 + UI/PainterEngine/kernel/PX_Object_RadioBox.h | 41 + .../kernel/PX_Object_RingProcessbar.c | 119 + .../kernel/PX_Object_RingProcessbar.h | 27 + UI/PainterEngine/kernel/PX_Object_ScaleBox.c | 385 + UI/PainterEngine/kernel/PX_Object_ScaleBox.h | 24 + .../kernel/PX_Object_ScrollArea.c | 354 + .../kernel/PX_Object_ScrollArea.h | 31 + UI/PainterEngine/kernel/PX_Object_Selectbar.c | 567 + UI/PainterEngine/kernel/PX_Object_Selectbar.h | 56 + UI/PainterEngine/kernel/PX_Object_Sliderbar.c | 710 + UI/PainterEngine/kernel/PX_Object_Sliderbar.h | 56 + .../kernel/PX_Object_TransformAdapter.c | 200 + .../kernel/PX_Object_TransformAdapter.h | 30 + UI/PainterEngine/kernel/PX_Object_VarBox.c | 164 + UI/PainterEngine/kernel/PX_Object_VarBox.h | 23 + UI/PainterEngine/kernel/PX_Object_Various.c | 363 + UI/PainterEngine/kernel/PX_Object_Various.h | 49 + .../kernel/PX_Object_VirtualKeyboard.c | 1122 ++ .../kernel/PX_Object_VirtualKeyboard.h | 56 + UI/PainterEngine/kernel/PX_Object_Widget.c | 356 + UI/PainterEngine/kernel/PX_Object_Widget.h | 40 + UI/PainterEngine/kernel/PX_Partical.c | 392 + UI/PainterEngine/kernel/PX_Partical.h | 101 + UI/PainterEngine/kernel/PX_Resource.c | 318 + UI/PainterEngine/kernel/PX_Resource.h | 63 + UI/PainterEngine/kernel/PX_ScriptCore.h | 343 + .../kernel/PX_Script_ASMCompiler.c | 2004 +++ .../kernel/PX_Script_ASMCompiler.h | 7 + .../kernel/PX_Script_Interpreter.c | 10755 ++++++++++++++++ .../kernel/PX_Script_Interpreter.h | 429 + UI/PainterEngine/kernel/PX_Script_VM.c | 4758 +++++++ UI/PainterEngine/kernel/PX_Script_VM.h | 123 + UI/PainterEngine/kernel/PX_Sync.c | 1179 ++ UI/PainterEngine/kernel/PX_Sync.h | 313 + UI/PainterEngine/kernel/PX_UI.c | 1049 ++ UI/PainterEngine/kernel/PX_UI.h | 31 + UI/PainterEngine/kernel/PX_World.c | 588 + UI/PainterEngine/kernel/PX_World.h | 66 + .../platform/android/AndroidManifest.xml | 31 + .../platform/android/CMakeLists.txt | 44 + UI/PainterEngine/platform/android/px_audio.c | 120 + .../platform/android/px_display.c | 220 + .../platform/android/px_display.h | 37 + UI/PainterEngine/platform/android/px_file.c | 368 + UI/PainterEngine/platform/android/px_main.c | 163 + .../platform/android/px_serialport.c | 167 + UI/PainterEngine/platform/android/px_tcp.c | 150 + UI/PainterEngine/platform/android/px_thread.c | 19 + UI/PainterEngine/platform/android/px_time.c | 77 + UI/PainterEngine/platform/android/px_udp.c | 158 + UI/PainterEngine/platform/linux/makefile | 51 + UI/PainterEngine/platform/linux/px_display.c | 33 + UI/PainterEngine/platform/linux/px_display.h | 9 + UI/PainterEngine/platform/linux/px_file.c | 311 + UI/PainterEngine/platform/linux/px_main.c | 147 + .../platform/linux/px_serialport.c | 167 + UI/PainterEngine/platform/linux/px_tcp.c | 149 + UI/PainterEngine/platform/linux/px_thread.c | 19 + UI/PainterEngine/platform/linux/px_time.c | 77 + UI/PainterEngine/platform/linux/px_udp.c | 157 + UI/PainterEngine/platform/macos/px_display.c | 33 + UI/PainterEngine/platform/macos/px_display.h | 12 + UI/PainterEngine/platform/macos/px_file.c | 311 + UI/PainterEngine/platform/macos/px_main.c | 147 + UI/PainterEngine/platform/macos/xmake.lua | 26 + UI/PainterEngine/platform/modules/px_audio.h | 11 + UI/PainterEngine/platform/modules/px_file.h | 36 + .../platform/modules/px_serialport.h | 21 + UI/PainterEngine/platform/modules/px_tcp.h | 36 + UI/PainterEngine/platform/modules/px_thread.h | 21 + UI/PainterEngine/platform/modules/px_time.h | 12 + UI/PainterEngine/platform/modules/px_udp.h | 33 + .../platform/webassembly/assets/readme.txt | 3 + .../platform/webassembly/index.html | 162 + UI/PainterEngine/platform/webassembly/main.c | 180 + .../platform/webassembly/makefile | 58 + .../platform/webassembly/px_audio.c | 44 + .../platform/webassembly/px_file.c | 311 + .../platform/webassembly/px_tcp.c | 149 + .../platform/webassembly/px_thread.c | 19 + .../platform/webassembly/px_time.c | 77 + .../platform/webassembly/px_udp.c | 157 + .../platform/windows gdi/px_display.c | 129 + .../platform/windows gdi/px_display.h | 8 + UI/PainterEngine/platform/windows/makefile | 61 + .../platform/windows/mingw_build.bat | 1 + .../platform/windows/px_audio.cpp | 394 + .../platform/windows/px_display.cpp | 691 + .../platform/windows/px_display.h | 46 + UI/PainterEngine/platform/windows/px_file.c | 351 + UI/PainterEngine/platform/windows/px_main.c | 323 + .../platform/windows/px_serialport.c | 273 + UI/PainterEngine/platform/windows/px_tcp.c | 216 + UI/PainterEngine/platform/windows/px_thread.c | 23 + UI/PainterEngine/platform/windows/px_time.c | 76 + UI/PainterEngine/platform/windows/px_udp.c | 178 + .../project/PainterEngine_Application.c | 530 + .../project/PainterEngine_Application.h | 24 + .../project/PainterEngine_Startup.c | 295 + .../project/PainterEngine_Startup.h | 39 + UI/PainterEngine/project/firstprize.traw | Bin 0 -> 22512 bytes UI/PainterEngine/project/flagpicture.traw | Bin 0 -> 8112 bytes UI/PainterEngine/project/minepicture.traw | Bin 0 -> 8472 bytes UI/PainterEngine/project/potatoboom.traw | Bin 0 -> 47684 bytes .../project/ranktitlepicture.traw | Bin 0 -> 49712 bytes UI/PainterEngine/project/secondprize.traw | Bin 0 -> 22512 bytes UI/PainterEngine/project/testimage.traw | Bin 0 -> 1048588 bytes UI/PainterEngine/project/thirdprize.traw | Bin 0 -> 22512 bytes UI/PainterEngine/project/titlepicture.traw | Bin 0 -> 3030012 bytes UI/PainterEngine/project/titlepicture2.traw | Bin 0 -> 3030012 bytes .../documents/PainterEngine API Manual.docx | Bin 0 -> 858719 bytes .../supports/logo/PainterEngineLogo.png | Bin 0 -> 86478 bytes UI/PainterEngine/supports/logo/logo_web.png | Bin 0 -> 18389 bytes .../supports/old/Platform_Windows_D2D.cbak | 540 + .../supports/old/Platform_Windows_D2D.hcbak | 182 + .../supports/old/Platform_Windows_D3D.cpp | 835 ++ .../supports/old/Platform_Windows_D3D.h | 181 + .../supports/old/Platform_Windows_WaveOut.c | 89 + 273 files changed, 84525 insertions(+) create mode 100644 UI/PainterEngine/architecture/PainterEngine_Console.c create mode 100644 UI/PainterEngine/architecture/PainterEngine_Console.h create mode 100644 UI/PainterEngine/architecture/PainterEngine_Designer.c create mode 100644 UI/PainterEngine/architecture/PainterEngine_Designer.h create mode 100644 UI/PainterEngine/architecture/PainterEngine_Executer.c create mode 100644 UI/PainterEngine/architecture/PainterEngine_Executer.h create mode 100644 UI/PainterEngine/architecture/PainterEngine_FoxLogo.h create mode 100644 UI/PainterEngine/architecture/PainterEngine_Runtime.c create mode 100644 UI/PainterEngine/architecture/PainterEngine_Runtime.h create mode 100644 UI/PainterEngine/core/PX_3D.c create mode 100644 UI/PainterEngine/core/PX_3D.h create mode 100644 UI/PainterEngine/core/PX_AES.c create mode 100644 UI/PainterEngine/core/PX_AES.h create mode 100644 UI/PainterEngine/core/PX_ANN.c create mode 100644 UI/PainterEngine/core/PX_ANN.h create mode 100644 UI/PainterEngine/core/PX_Arle.c create mode 100644 UI/PainterEngine/core/PX_Arle.h create mode 100644 UI/PainterEngine/core/PX_Base64.c create mode 100644 UI/PainterEngine/core/PX_Base64.h create mode 100644 UI/PainterEngine/core/PX_BaseGeo.c create mode 100644 UI/PainterEngine/core/PX_BaseGeo.h create mode 100644 UI/PainterEngine/core/PX_Bitmap.c create mode 100644 UI/PainterEngine/core/PX_Bitmap.h create mode 100644 UI/PainterEngine/core/PX_Core.h create mode 100644 UI/PainterEngine/core/PX_Delaunay.c create mode 100644 UI/PainterEngine/core/PX_Delaunay.h create mode 100644 UI/PainterEngine/core/PX_Effect.c create mode 100644 UI/PainterEngine/core/PX_Effect.h create mode 100644 UI/PainterEngine/core/PX_Font.c create mode 100644 UI/PainterEngine/core/PX_Font.h create mode 100644 UI/PainterEngine/core/PX_Hashmap.c create mode 100644 UI/PainterEngine/core/PX_Hashmap.h create mode 100644 UI/PainterEngine/core/PX_Huffman.c create mode 100644 UI/PainterEngine/core/PX_Huffman.h create mode 100644 UI/PainterEngine/core/PX_ImageFilter.c create mode 100644 UI/PainterEngine/core/PX_ImageFilter.h create mode 100644 UI/PainterEngine/core/PX_KalmanFilter.c create mode 100644 UI/PainterEngine/core/PX_KalmanFilter.h create mode 100644 UI/PainterEngine/core/PX_Linker.c create mode 100644 UI/PainterEngine/core/PX_Linker.h create mode 100644 UI/PainterEngine/core/PX_List.c create mode 100644 UI/PainterEngine/core/PX_List.h create mode 100644 UI/PainterEngine/core/PX_Log.c create mode 100644 UI/PainterEngine/core/PX_Log.h create mode 100644 UI/PainterEngine/core/PX_MFCC.c create mode 100644 UI/PainterEngine/core/PX_MFCC.h create mode 100644 UI/PainterEngine/core/PX_MathTable.h create mode 100644 UI/PainterEngine/core/PX_Memory.c create mode 100644 UI/PainterEngine/core/PX_Memory.h create mode 100644 UI/PainterEngine/core/PX_MemoryPool.c create mode 100644 UI/PainterEngine/core/PX_MemoryPool.h create mode 100644 UI/PainterEngine/core/PX_Packet.c create mode 100644 UI/PainterEngine/core/PX_Packet.h create mode 100644 UI/PainterEngine/core/PX_PointsMesh.c create mode 100644 UI/PainterEngine/core/PX_PointsMesh.h create mode 100644 UI/PainterEngine/core/PX_Quadtree.c create mode 100644 UI/PainterEngine/core/PX_Quadtree.h create mode 100644 UI/PainterEngine/core/PX_Quicksort.c create mode 100644 UI/PainterEngine/core/PX_Quicksort.h create mode 100644 UI/PainterEngine/core/PX_Sha256.c create mode 100644 UI/PainterEngine/core/PX_Sha256.h create mode 100644 UI/PainterEngine/core/PX_Sound.c create mode 100644 UI/PainterEngine/core/PX_Sound.h create mode 100644 UI/PainterEngine/core/PX_SoundModule.c create mode 100644 UI/PainterEngine/core/PX_SoundModule.h create mode 100644 UI/PainterEngine/core/PX_String.c create mode 100644 UI/PainterEngine/core/PX_String.h create mode 100644 UI/PainterEngine/core/PX_Surface.c create mode 100644 UI/PainterEngine/core/PX_Surface.h create mode 100644 UI/PainterEngine/core/PX_TRaw.c create mode 100644 UI/PainterEngine/core/PX_TRaw.h create mode 100644 UI/PainterEngine/core/PX_Texture.c create mode 100644 UI/PainterEngine/core/PX_Texture.h create mode 100644 UI/PainterEngine/core/PX_TriangleCross.c create mode 100644 UI/PainterEngine/core/PX_Tuning.c create mode 100644 UI/PainterEngine/core/PX_Tuning.h create mode 100644 UI/PainterEngine/core/PX_Typedef.c create mode 100644 UI/PainterEngine/core/PX_Typedef.h create mode 100644 UI/PainterEngine/core/PX_Vector.c create mode 100644 UI/PainterEngine/core/PX_Vector.h create mode 100644 UI/PainterEngine/core/PX_Wave.c create mode 100644 UI/PainterEngine/core/PX_Wave.h create mode 100644 UI/PainterEngine/core/PX_curve25519.c create mode 100644 UI/PainterEngine/core/PX_curve25519.h create mode 100644 UI/PainterEngine/core/PX_rbtree.c create mode 100644 UI/PainterEngine/core/PX_rbtree.h create mode 100644 UI/PainterEngine/elsecode/include/map.h create mode 100644 UI/PainterEngine/elsecode/include/mine_map.h create mode 100644 UI/PainterEngine/elsecode/include/opt.h create mode 100644 UI/PainterEngine/elsecode/src/app.c create mode 100644 UI/PainterEngine/elsecode/src/map.c create mode 100644 UI/PainterEngine/elsecode/src/opt.c create mode 100644 UI/PainterEngine/kernel/PX_2dxCommon.h create mode 100644 UI/PainterEngine/kernel/PX_3D_ObjData.c create mode 100644 UI/PainterEngine/kernel/PX_3D_ObjData.h create mode 100644 UI/PainterEngine/kernel/PX_Animation.c create mode 100644 UI/PainterEngine/kernel/PX_Animation.h create mode 100644 UI/PainterEngine/kernel/PX_Compiler.c create mode 100644 UI/PainterEngine/kernel/PX_Compiler.h create mode 100644 UI/PainterEngine/kernel/PX_Json.c create mode 100644 UI/PainterEngine/kernel/PX_Json.h create mode 100644 UI/PainterEngine/kernel/PX_Kernel.h create mode 100644 UI/PainterEngine/kernel/PX_Lexer.c create mode 100644 UI/PainterEngine/kernel/PX_Lexer.h create mode 100644 UI/PainterEngine/kernel/PX_LiveFramework.c create mode 100644 UI/PainterEngine/kernel/PX_LiveFramework.h create mode 100644 UI/PainterEngine/kernel/PX_MODBUS.c create mode 100644 UI/PainterEngine/kernel/PX_MODBUS.h create mode 100644 UI/PainterEngine/kernel/PX_MQTT.c create mode 100644 UI/PainterEngine/kernel/PX_MQTT.h create mode 100644 UI/PainterEngine/kernel/PX_Object.c create mode 100644 UI/PainterEngine/kernel/PX_Object.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Animation.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Animation.h create mode 100644 UI/PainterEngine/kernel/PX_Object_AutoText.c create mode 100644 UI/PainterEngine/kernel/PX_Object_AutoText.h create mode 100644 UI/PainterEngine/kernel/PX_Object_COMBox.c create mode 100644 UI/PainterEngine/kernel/PX_Object_COMBox.h create mode 100644 UI/PainterEngine/kernel/PX_Object_CheckBox.c create mode 100644 UI/PainterEngine/kernel/PX_Object_CheckBox.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Coordinate.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Coordinate.h create mode 100644 UI/PainterEngine/kernel/PX_Object_CursorButton.c create mode 100644 UI/PainterEngine/kernel/PX_Object_CursorButton.h create mode 100644 UI/PainterEngine/kernel/PX_Object_DesignerBox.c create mode 100644 UI/PainterEngine/kernel/PX_Object_DesignerBox.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Edit.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Edit.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Explorer.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Explorer.h create mode 100644 UI/PainterEngine/kernel/PX_Object_IPBox.c create mode 100644 UI/PainterEngine/kernel/PX_Object_IPBox.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Image.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Image.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Joystick.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Joystick.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Label.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Label.h create mode 100644 UI/PainterEngine/kernel/PX_Object_List.c create mode 100644 UI/PainterEngine/kernel/PX_Object_List.h create mode 100644 UI/PainterEngine/kernel/PX_Object_MemoryView.c create mode 100644 UI/PainterEngine/kernel/PX_Object_MemoryView.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Menu.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Menu.h create mode 100644 UI/PainterEngine/kernel/PX_Object_MessageBox.c create mode 100644 UI/PainterEngine/kernel/PX_Object_MessageBox.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Panc.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Panc.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Processbar.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Processbar.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Protractor.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Protractor.h create mode 100644 UI/PainterEngine/kernel/PX_Object_PushButton.c create mode 100644 UI/PainterEngine/kernel/PX_Object_PushButton.h create mode 100644 UI/PainterEngine/kernel/PX_Object_RadioBox.c create mode 100644 UI/PainterEngine/kernel/PX_Object_RadioBox.h create mode 100644 UI/PainterEngine/kernel/PX_Object_RingProcessbar.c create mode 100644 UI/PainterEngine/kernel/PX_Object_RingProcessbar.h create mode 100644 UI/PainterEngine/kernel/PX_Object_ScaleBox.c create mode 100644 UI/PainterEngine/kernel/PX_Object_ScaleBox.h create mode 100644 UI/PainterEngine/kernel/PX_Object_ScrollArea.c create mode 100644 UI/PainterEngine/kernel/PX_Object_ScrollArea.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Selectbar.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Selectbar.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Sliderbar.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Sliderbar.h create mode 100644 UI/PainterEngine/kernel/PX_Object_TransformAdapter.c create mode 100644 UI/PainterEngine/kernel/PX_Object_TransformAdapter.h create mode 100644 UI/PainterEngine/kernel/PX_Object_VarBox.c create mode 100644 UI/PainterEngine/kernel/PX_Object_VarBox.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Various.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Various.h create mode 100644 UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.c create mode 100644 UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.h create mode 100644 UI/PainterEngine/kernel/PX_Object_Widget.c create mode 100644 UI/PainterEngine/kernel/PX_Object_Widget.h create mode 100644 UI/PainterEngine/kernel/PX_Partical.c create mode 100644 UI/PainterEngine/kernel/PX_Partical.h create mode 100644 UI/PainterEngine/kernel/PX_Resource.c create mode 100644 UI/PainterEngine/kernel/PX_Resource.h create mode 100644 UI/PainterEngine/kernel/PX_ScriptCore.h create mode 100644 UI/PainterEngine/kernel/PX_Script_ASMCompiler.c create mode 100644 UI/PainterEngine/kernel/PX_Script_ASMCompiler.h create mode 100644 UI/PainterEngine/kernel/PX_Script_Interpreter.c create mode 100644 UI/PainterEngine/kernel/PX_Script_Interpreter.h create mode 100644 UI/PainterEngine/kernel/PX_Script_VM.c create mode 100644 UI/PainterEngine/kernel/PX_Script_VM.h create mode 100644 UI/PainterEngine/kernel/PX_Sync.c create mode 100644 UI/PainterEngine/kernel/PX_Sync.h create mode 100644 UI/PainterEngine/kernel/PX_UI.c create mode 100644 UI/PainterEngine/kernel/PX_UI.h create mode 100644 UI/PainterEngine/kernel/PX_World.c create mode 100644 UI/PainterEngine/kernel/PX_World.h create mode 100644 UI/PainterEngine/platform/android/AndroidManifest.xml create mode 100644 UI/PainterEngine/platform/android/CMakeLists.txt create mode 100644 UI/PainterEngine/platform/android/px_audio.c create mode 100644 UI/PainterEngine/platform/android/px_display.c create mode 100644 UI/PainterEngine/platform/android/px_display.h create mode 100644 UI/PainterEngine/platform/android/px_file.c create mode 100644 UI/PainterEngine/platform/android/px_main.c create mode 100644 UI/PainterEngine/platform/android/px_serialport.c create mode 100644 UI/PainterEngine/platform/android/px_tcp.c create mode 100644 UI/PainterEngine/platform/android/px_thread.c create mode 100644 UI/PainterEngine/platform/android/px_time.c create mode 100644 UI/PainterEngine/platform/android/px_udp.c create mode 100644 UI/PainterEngine/platform/linux/makefile create mode 100644 UI/PainterEngine/platform/linux/px_display.c create mode 100644 UI/PainterEngine/platform/linux/px_display.h create mode 100644 UI/PainterEngine/platform/linux/px_file.c create mode 100644 UI/PainterEngine/platform/linux/px_main.c create mode 100644 UI/PainterEngine/platform/linux/px_serialport.c create mode 100644 UI/PainterEngine/platform/linux/px_tcp.c create mode 100644 UI/PainterEngine/platform/linux/px_thread.c create mode 100644 UI/PainterEngine/platform/linux/px_time.c create mode 100644 UI/PainterEngine/platform/linux/px_udp.c create mode 100644 UI/PainterEngine/platform/macos/px_display.c create mode 100644 UI/PainterEngine/platform/macos/px_display.h create mode 100644 UI/PainterEngine/platform/macos/px_file.c create mode 100644 UI/PainterEngine/platform/macos/px_main.c create mode 100644 UI/PainterEngine/platform/macos/xmake.lua create mode 100644 UI/PainterEngine/platform/modules/px_audio.h create mode 100644 UI/PainterEngine/platform/modules/px_file.h create mode 100644 UI/PainterEngine/platform/modules/px_serialport.h create mode 100644 UI/PainterEngine/platform/modules/px_tcp.h create mode 100644 UI/PainterEngine/platform/modules/px_thread.h create mode 100644 UI/PainterEngine/platform/modules/px_time.h create mode 100644 UI/PainterEngine/platform/modules/px_udp.h create mode 100644 UI/PainterEngine/platform/webassembly/assets/readme.txt create mode 100644 UI/PainterEngine/platform/webassembly/index.html create mode 100644 UI/PainterEngine/platform/webassembly/main.c create mode 100644 UI/PainterEngine/platform/webassembly/makefile create mode 100644 UI/PainterEngine/platform/webassembly/px_audio.c create mode 100644 UI/PainterEngine/platform/webassembly/px_file.c create mode 100644 UI/PainterEngine/platform/webassembly/px_tcp.c create mode 100644 UI/PainterEngine/platform/webassembly/px_thread.c create mode 100644 UI/PainterEngine/platform/webassembly/px_time.c create mode 100644 UI/PainterEngine/platform/webassembly/px_udp.c create mode 100644 UI/PainterEngine/platform/windows gdi/px_display.c create mode 100644 UI/PainterEngine/platform/windows gdi/px_display.h create mode 100644 UI/PainterEngine/platform/windows/makefile create mode 100644 UI/PainterEngine/platform/windows/mingw_build.bat create mode 100644 UI/PainterEngine/platform/windows/px_audio.cpp create mode 100644 UI/PainterEngine/platform/windows/px_display.cpp create mode 100644 UI/PainterEngine/platform/windows/px_display.h create mode 100644 UI/PainterEngine/platform/windows/px_file.c create mode 100644 UI/PainterEngine/platform/windows/px_main.c create mode 100644 UI/PainterEngine/platform/windows/px_serialport.c create mode 100644 UI/PainterEngine/platform/windows/px_tcp.c create mode 100644 UI/PainterEngine/platform/windows/px_thread.c create mode 100644 UI/PainterEngine/platform/windows/px_time.c create mode 100644 UI/PainterEngine/platform/windows/px_udp.c create mode 100644 UI/PainterEngine/project/PainterEngine_Application.c create mode 100644 UI/PainterEngine/project/PainterEngine_Application.h create mode 100644 UI/PainterEngine/project/PainterEngine_Startup.c create mode 100644 UI/PainterEngine/project/PainterEngine_Startup.h create mode 100644 UI/PainterEngine/project/firstprize.traw create mode 100644 UI/PainterEngine/project/flagpicture.traw create mode 100644 UI/PainterEngine/project/minepicture.traw create mode 100644 UI/PainterEngine/project/potatoboom.traw create mode 100644 UI/PainterEngine/project/ranktitlepicture.traw create mode 100644 UI/PainterEngine/project/secondprize.traw create mode 100644 UI/PainterEngine/project/testimage.traw create mode 100644 UI/PainterEngine/project/thirdprize.traw create mode 100644 UI/PainterEngine/project/titlepicture.traw create mode 100644 UI/PainterEngine/project/titlepicture2.traw create mode 100644 UI/PainterEngine/supports/documents/PainterEngine API Manual.docx create mode 100644 UI/PainterEngine/supports/logo/PainterEngineLogo.png create mode 100644 UI/PainterEngine/supports/logo/logo_web.png create mode 100644 UI/PainterEngine/supports/old/Platform_Windows_D2D.cbak create mode 100644 UI/PainterEngine/supports/old/Platform_Windows_D2D.hcbak create mode 100644 UI/PainterEngine/supports/old/Platform_Windows_D3D.cpp create mode 100644 UI/PainterEngine/supports/old/Platform_Windows_D3D.h create mode 100644 UI/PainterEngine/supports/old/Platform_Windows_WaveOut.c diff --git a/UI/PainterEngine/architecture/PainterEngine_Console.c b/UI/PainterEngine/architecture/PainterEngine_Console.c new file mode 100644 index 0000000..571e282 --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_Console.c @@ -0,0 +1,597 @@ +#include "PainterEngine_Console.h" + +static char const fox_console_logo[]=\ +{ +#include "PainterEngine_FoxLogo.h" +}; + +static char const PC_ScriptPreload[]="#name \"shell\"\r\n\ + #runtime stack 1024\r\n\ + host int print(string s);\r\n\ + host int printimage(string s);\r\n\ + host int printanimation(string s);\r\n\ + host int playanimation(int id,string s);\r\n\ + host int runscriptfunction(string key,string func);\r\n\ + host int close();\r\n"; + + + +px_void PX_ConsoleUpdateEx(PX_Console *pc) +{ + px_int i,y=10; + PX_ConsoleColumn *pCc; + + while (pc->pObjects.size>pc->max_column) + { + pCc=(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,0)); + PX_ObjectDelete(pCc->Object); + PX_VectorErase(&pc->pObjects,0); + } + + for (i=0;ipObjects.size;i++) + { + pCc=(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i)); + + switch(pCc->Object->Type) + { + case PX_OBJECT_TYPE_AUTOTEXT: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=PX_Object_AutoTextGetHeight(pCc->Object); + } + break; + case PX_OBJECT_TYPE_IMAGE: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + case PX_OBJECT_TYPE_ANIMATION: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + default: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + } + } + PX_ObjectSetPosition(pc->Input,0,(px_float)y,0); +} +PX_Object * PX_ConsolePrintText(PX_Console *pc,const px_char *text) +{ + PX_ConsoleColumn obj; + PX_Object *pObject=PX_Object_AutoTextCreate(&pc->runtime->mp_ui,pc->Area,0,0,(px_int)pc->Area->Width-1,PX_NULL); + + if (pObject) + { + obj.Object=pObject; + obj.id=pc->id++; + PX_Object_AutoTextSetTextColor(pObject,PX_COLOR(255,0,255,0)); + PX_Object_AutoTextSetText(pObject,text); + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + return pObject; +} + +PX_Object * PX_ConsolePrintImage(PX_Console *pc,px_char *res_image_key) +{ + PX_ConsoleColumn obj; + PX_Resource *pimageRes; + PX_Object *pObject; + if((pimageRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,res_image_key))!=PX_NULL) + { + if (pimageRes->Type==PX_RESOURCE_TYPE_TEXTURE) + { + pObject=PX_Object_ImageCreate(&pc->runtime->mp_ui,pc->Area,0,0,pimageRes->texture.width,pimageRes->texture.height,&pimageRes->texture); + PX_Object_ImageSetAlign(pObject,PX_ALIGN_LEFTTOP); + PX_ObjectSetSize(pObject,(px_float)pimageRes->texture.width,(px_float)pimageRes->texture.height,0); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + + + +PX_Object * PX_ConsolePrintAnimation(PX_Console *pc,px_char *res_animation_key) +{ + PX_ConsoleColumn obj; + PX_Resource *pAnimationRes; + PX_Object *pObject; + px_rect rect; + if((pAnimationRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,res_animation_key))!=PX_NULL) + { + if (pAnimationRes->Type==PX_RESOURCE_TYPE_ANIMATIONLIBRARY) + { + pObject=PX_Object_AnimationCreate(&pc->runtime->mp_ui,pc->Area,0,0,&pAnimationRes->animationlibrary); + PX_Object_AnimationSetAlign(pObject,PX_ALIGN_LEFTTOP); + rect=PX_AnimationGetSize(&PX_Object_GetAnimation(pObject)->animation); + PX_ObjectSetSize(pObject,(px_float)rect.width,(px_float)rect.height,0); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + + + + +PX_Object * PX_ConsoleShowImage(PX_Console *pc,px_char *res_image_key) +{ + PX_ConsoleColumn obj; + PX_Resource *pimageRes; + PX_Object *pObject; + if((pimageRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,res_image_key))!=PX_NULL) + { + if (pimageRes->Type==PX_RESOURCE_TYPE_TEXTURE) + { + pObject=PX_Object_ImageCreate(&pc->runtime->mp_ui,pc->Area,0,0,pimageRes->texture.width,pimageRes->texture.height,&pimageRes->texture); + PX_Object_ImageSetAlign(pObject,PX_ALIGN_LEFTTOP); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + +px_void PX_ConsolePlayAnimation(PX_Console *pc,px_int id,px_char *animation_name) +{ + px_int i; + PX_ConsoleColumn *pCc; + + for (i=0;ipObjects.size;i++) + { + pCc=PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i); + if(pCc->id==id) + { + if (pCc->Object->Type==PX_OBJECT_TYPE_ANIMATION) + { + PX_AnimationSetCurrentPlayAnimationByName(&PX_Object_GetAnimation(pCc->Object)->animation,animation_name); + return; + } + } + } +} + +px_void PX_ConsoleSetImageMask(PX_Console *pc,px_int id,px_char *mask_key) +{ + px_int i; + PX_ConsoleColumn *pCc; + + for (i=0;ipObjects.size;i++) + { + pCc=PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i); + if(pCc->id==id) + { + if (pCc->Object->Type==PX_OBJECT_TYPE_IMAGE) + { + PX_Resource *pimageRes; + if((pimageRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,mask_key))!=PX_NULL) + { + if (pimageRes->Type==PX_RESOURCE_TYPE_TEXTURE) + { + PX_Object_ImageSetMask(pCc->Object,&pimageRes->texture); + } + } + + } + return; + } + } +} + + + + +px_bool PX_ConsoleVM_Print(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Console *pc=(PX_Console *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ConsolePrintText(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + return PX_TRUE; +} + +px_bool PX_ConsoleVM_PrintImage(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Console *pc=(PX_Console *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ConsolePrintImage(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + return PX_TRUE; +} + + +px_bool PX_ConsoleVM_PrintAnimation(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Console *pc=(PX_Console *)userptr; + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ConsolePrintAnimation(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + return PX_TRUE; +} + +px_bool PX_ConsoleVM_PlayAnimation(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Console *pc=(PX_Console *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,1).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + PX_ConsolePlayAnimation(pc,PX_ScriptVM_STACK(Ins,0)._int,PX_ScriptVM_STACK(Ins,1)._string.buffer); + + return PX_TRUE; +} + + +px_bool PX_ConsoleVM_Close(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Console *pc=(PX_Console *)userptr; + PX_ConsoleShow(pc,PX_FALSE); + return PX_TRUE; +} + + + + +px_void PX_ConsoleRunScriptFunction(PX_Console *pc,px_char *script_key,px_char *func_name) +{ + PX_Resource *pScriptRes; + if((pScriptRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,script_key))!=PX_NULL) + { + if (pScriptRes->Type==PX_RESOURCE_TYPE_SCRIPT) + { + PX_ScriptVM_RegistryHostFunction(&pScriptRes->Script,"PRINT",PX_ConsoleVM_Print,pc);//Print + PX_ScriptVM_RegistryHostFunction(&pScriptRes->Script,"PRINTIMAGE",PX_ConsoleVM_PrintImage,pc);//Print Image + PX_ScriptVM_RegistryHostFunction(&pScriptRes->Script,"PRINTANIMATION",PX_ConsoleVM_PrintAnimation,pc);//Print Animation + if(!PX_ScriptVM_InstanceRunFunction(&pScriptRes->Script,0,"_BOOT",PX_NULL,0)) + { + return; + } + if(!PX_ScriptVM_InstanceRunFunction(&pScriptRes->Script,0,func_name,PX_NULL,0)) + { + return ; + } + } + else + return; + } + else + { + return; + } + +} + +px_bool PC_ConsoleVM_RunScriptFunction(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Console *pc=(PX_Console *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,1).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + PX_ConsoleRunScriptFunction(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer,PX_ScriptVM_STACK(Ins,1)._string.buffer); + + return PX_TRUE; +} + +px_bool PX_ConsoleExecute(PX_Console *pc,char *pshellstr) +{ + px_memory bin; + px_string shell; + PX_ScriptVM_Instance Ins; + PX_SCRIPT_LIBRARY lib; + px_string asmcodeString; + px_memorypool mp_calc; + + mp_calc=MP_Create(MP_Malloc(&pc->runtime->mp,PE_MEMORY_CALC_SIZE),PE_MEMORY_CALC_SIZE); + if(mp_calc.StartAddr==PX_NULL) return PX_FALSE; + PX_ConsolePrintText(pc,pshellstr); + MP_Reset(&mp_calc); + PX_MemoryInitialize(&mp_calc,&bin); + PX_StringInitialize(&mp_calc,&shell); + PX_StringCat(&shell,(char *)PC_ScriptPreload); + if(pc->script_header_append) + PX_StringCat(&shell,(char *)pc->script_header_append); + PX_StringCat(&shell,"export void main(){\r\n"); + PX_StringCat(&shell,pshellstr); + PX_StringCat(&shell,"\r\n}"); + + if(!PX_ScriptCompilerInitialize(&lib,&mp_calc)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + if(!PX_ScriptCompilerLoad(&lib,(px_char *)shell.buffer)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + PX_StringFree(&shell); + + PX_StringInitialize(&mp_calc,&asmcodeString); + if(PX_ScriptCompilerCompile(&lib,"shell",&asmcodeString,32)) + { + PX_ScriptAsmOptimization(&asmcodeString); + + if(!PX_ScriptAsmCompile(&mp_calc,asmcodeString.buffer,&bin)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + } + else + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&lib); + + if(!PX_ScriptVM_InstanceInitialize(&Ins,&mp_calc,bin.buffer,bin.usedsize)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + PX_MemoryFree(&bin); + + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINT",PX_ConsoleVM_Print,pc);//Print + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINTIMAGE",PX_ConsoleVM_PrintImage,pc);//Print Image + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINTANIMATION",PX_ConsoleVM_PrintAnimation,pc);//Print Animation + PX_ScriptVM_RegistryHostFunction(&Ins,"PLAYANIMATION",PX_ConsoleVM_PlayAnimation,pc);//play Animation + PX_ScriptVM_RegistryHostFunction(&Ins,"RUNSCRIPTFUNCTION",PC_ConsoleVM_RunScriptFunction,pc);//Load PatricalScript + PX_ScriptVM_RegistryHostFunction(&Ins,"CLOSE",PX_ConsoleVM_Close,pc);//close + if (pc->registry_call) + { + pc->registry_call(&Ins); + } + if(!PX_ScriptVM_InstanceRunFunction(&Ins,0,"_BOOT",PX_NULL,0)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + if(!PX_ScriptVM_InstanceRunFunction(&Ins,0,"MAIN",PX_NULL,0)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + + PX_ScriptVM_InstanceFree(&Ins); +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + MP_UnreleaseInfo(&mp_calc); +#endif + + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + + return PX_TRUE; + +} + +px_void PX_ConsoleOnEnter(PX_Object *Obj,PX_Object_Event e,px_void *user_ptr) +{ + PX_Console *pc=(PX_Console *)Obj->User_ptr; + + PX_Object_Edit *pEdit=PX_Object_GetEdit(pc->Input); + + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (PX_Object_Event_GetKeyDown(e)=='\r') + { + if(!PX_ConsoleExecute(pc,pEdit->text.buffer)) + { + PX_Object_AutoTextSetTextColor(PX_ConsolePrintText(pc,"Invalid shell code."),PX_COLOR(255,255,0,0)); + } + PX_Object_EditSetText(pc->Input,""); + } + } + + if (e.Event==PX_OBJECT_EVENT_CURSORRDOWN) + { + PX_Object_EditSetFocus(pc->Input,PX_TRUE); + } +} + +px_void PX_ConsoleOnMouseDown(PX_Object *Obj,PX_Object_Event e,px_void *user_ptr) +{ + PX_Console *pc=(PX_Console *)Obj->User_ptr; + if (e.Event==PX_OBJECT_EVENT_CURSORDOWN) + { + PX_Object_EditSetFocus(pc->Input,PX_TRUE); + } +} + + +px_bool PX_ConsoleInitializeEx(PX_Runtime *runtime,PX_Console *pc,px_int x,px_int y,px_int width,px_int height) +{ + //console initialize + pc->runtime=runtime; + pc->registry_call=PX_NULL; + pc->script_header_append=PX_NULL; + + pc->show=PX_TRUE; + pc->max_column=PC_CONSOLE_DEFAULT_MAX_COLUMN; + pc->column=0; + if(!(pc->Root=PX_ObjectCreate(&pc->runtime->mp_ui,0,0,0,0,0,0,0))) return PX_FALSE; + if(!(pc->Area=PX_Object_ScrollAreaCreate(&pc->runtime->mp_ui,pc->Root,x,y,width,height))) return PX_FALSE; + + + pc->Area->User_ptr=pc; + PX_ObjectRegisterEvent(pc->Area,PX_OBJECT_EVENT_KEYDOWN,PX_ConsoleOnEnter,PX_NULL); + PX_ObjectRegisterEvent(pc->Area,PX_OBJECT_EVENT_CURSORDOWN,PX_ConsoleOnMouseDown,PX_NULL); + PX_Object_ScrollAreaSetBorder(pc->Area,PX_FALSE); + if(!(pc->Input=PX_Object_EditCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),0,0,width-1,PX_FontGetCharactorHeight()+4,PX_NULL))) return PX_FALSE; + PX_Object_EditSetTextColor(pc->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetCursorColor(pc->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetTextColor(pc->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetBorderColor(pc->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetOffset(pc->Input,2,3); + PX_Object_ScrollAreaSetBkColor(pc->Area,PX_COLOR(255,0,0,0)); + pc->id=1; + + PX_VectorInitialize(&pc->runtime->mp_ui,&pc->pObjects,sizeof(PX_ConsoleColumn),PC_CONSOLE_DEFAULT_MAX_COLUMN); + + + ////////////////////////////////////////////////////////////////////////// + //logo + + if(!PX_ResourceLibraryLoad(&pc->runtime->ResourceLibrary,PX_RESOURCE_TYPE_TEXTURE,(px_byte *)fox_console_logo,sizeof(fox_console_logo),"console_logo"))return PX_FALSE; + + PX_ConsoleShowImage(pc,"console_logo"); + PX_ConsolePrintText(pc,"----------------------------------------"); + PX_ConsolePrintText(pc,"-PainterEngine JIT Compilation Console -\n-Code By DBinary Build on 2019 -\n-Refer To:www.GitHub.com/matrixcascade -"); + PX_ConsolePrintText(pc,"----------------------------------------"); + return PX_TRUE; +} + + +px_bool PX_ConsoleInitialize(PX_Runtime *runtime,PX_Console *pc) +{ + return PX_ConsoleInitializeEx(runtime,pc,0,0,runtime->surface_width,runtime->surface_height); +} + +px_void PX_ConsolePostEvent(PX_Console *pc,PX_Object_Event e) +{ + if(pc->show) + { + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (PX_Object_Event_GetKeyDown(e)==36) + { + PX_ConsoleShow(pc,PX_FALSE); + return; + } + } + + if (e.Event!=PX_OBJECT_EVENT_CURSORMOVE) + { + PX_ObjectPostEvent(pc->Root,e); + } + } + else + { + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (PX_Object_Event_GetKeyDown(e)==36) + { + PX_ConsoleShow(pc,PX_TRUE); + } + } + } +} +px_void PX_ConsoleUpdate(PX_Console *pc,px_dword elapsed) +{ + PX_ObjectUpdate(pc->Area,elapsed); +} + + +px_void PX_ConsoleShow(PX_Console *pc,px_bool b) +{ + pc->show=b; +} + +px_void PX_ConsoleRender(px_surface *psurface,PX_Console *pc,px_dword elapsed) +{ + if(pc->show) + { + PX_ObjectRender(psurface,pc->Area,elapsed); + } +} + +px_void PX_ConsoleRegistryHostCall(PX_Console *pc,console_registry_hostcall call_func) +{ + pc->registry_call=call_func; +} + +px_void PX_ConsoleRegistryScriptHeader(PX_Console *pc,const px_char *header) +{ + pc->script_header_append=header; +} + +px_void PX_ConsoleClear(PX_Console *pc) +{ + PX_ConsoleColumn *pCc; + px_int i; + for (i=0;ipObjects.size;i++) + { + pCc=(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i)); + PX_ObjectDelete(pCc->Object); + } + PX_VectorClear(&pc->pObjects); +} + diff --git a/UI/PainterEngine/architecture/PainterEngine_Console.h b/UI/PainterEngine/architecture/PainterEngine_Console.h new file mode 100644 index 0000000..14525fd --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_Console.h @@ -0,0 +1,56 @@ +#ifndef PX_CONSOLE_H +#define PX_CONSOLE_H + + +#include "PainterEngine_Runtime.h" + +#define PC_CONSOLE_DEFAULT_MAX_COLUMN 48 + +typedef px_bool (*console_registry_hostcall)(PX_ScriptVM_Instance *Ins); +typedef struct +{ + PX_Object *Root; + PX_Object *Area; + PX_Object *Input; + px_int max_column; + px_int column; + px_bool show; + px_vector pObjects; + px_int id; + PX_Runtime *runtime; + union + { + px_void *user_ptr; + px_int user_int; + px_float user_float; + }; + + const px_char *script_header_append; + console_registry_hostcall registry_call; +}PX_Console; + +typedef struct +{ + px_int id; + PX_Object *Object; +}PX_ConsoleColumn; + + +px_bool PX_ConsoleInitializeEx(PX_Runtime *runtime,PX_Console *pc,px_int x,px_int y,px_int width,px_int height); +px_bool PX_ConsoleInitialize(PX_Runtime *runtime,PX_Console *pc); +px_void PX_ConsoleRegistryScriptHeader(PX_Console *pc,const px_char *header); +px_void PX_ConsoleRegistryHostCall(PX_Console *pc,console_registry_hostcall call_func); +px_void PX_ConsoleShow(PX_Console *pc,px_bool b); +px_void PX_ConsolePostEvent(PX_Console *pc,PX_Object_Event e); +px_void PX_ConsoleUpdate(PX_Console *pc,px_dword elapsed); +px_void PX_ConsoleRender(px_surface *psurface,PX_Console *pc,px_dword elapsed); +PX_Object * PX_ConsolePrintText(PX_Console *pc,const px_char *text); +PX_Object * PX_ConsolePrintImage(PX_Console *pc,px_char *res_image_key); +PX_Object * PX_ConsolePrintAnimation(PX_Console *pc,px_char *res_animation_key); +PX_Object * PX_ConsolePrintPartical(PX_Console *pc,px_int x,px_int y,px_char *res_texture,px_char *script,px_char *_init,px_char *_create,px_char *_updata); +PX_Object * PX_ConsoleShowImage(PX_Console *pc,px_char *res_image_key); +px_void PX_ConsoleClear(PX_Console *pc); +px_bool PX_ConsoleExecute(PX_Console *pc,char *pshellstr); + +#endif + diff --git a/UI/PainterEngine/architecture/PainterEngine_Designer.c b/UI/PainterEngine/architecture/PainterEngine_Designer.c new file mode 100644 index 0000000..4b20c7f --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_Designer.c @@ -0,0 +1,1930 @@ +#include "PainterEngine_Designer.h" + + +static px_void PX_Designer_RefreshProperties(PX_Object *pObject) +{ + px_int i; + PX_Designer *pDesignerDesc=PX_ObjectGetDesc(PX_Designer,pObject); + + for (i=0;iedit_propertys);i++) + { + PX_ObjectSetVisible(pDesignerDesc->edit_propertys[i],PX_FALSE); + PX_ObjectSetVisible(pDesignerDesc->label_propertys[i],PX_FALSE); + } + + if (PX_VectorCheckIndex(&pDesignerDesc->Objects,pDesignerDesc->selectObjectIndex)) + { + PX_Designer_Object *pdobject=PX_VECTORAT(PX_Designer_Object,&pDesignerDesc->Objects,pDesignerDesc->selectObjectIndex); + if (PX_VectorCheckIndex(&pDesignerDesc->ObjectDesc,pdobject->descIndex)) + { + px_int j; + PX_Designer_ObjectDesc *pObjectDesc=PX_VECTORAT(PX_Designer_ObjectDesc,&pDesignerDesc->ObjectDesc,pdobject->descIndex); + for (j=0;jproperties);j++) + { + if (!pObjectDesc->properties[j].Name[0]) + { + break; + } + PX_ObjectSetVisible(pDesignerDesc->label_propertys[j],PX_TRUE); + PX_ObjectSetVisible(pDesignerDesc->edit_propertys[j],PX_TRUE); + PX_Object_LabelSetText(pDesignerDesc->label_propertys[j],pObjectDesc->properties[j].Name); + + if(pObjectDesc->properties[j].getbool) + { + px_bool v=pObjectDesc->properties[j].getbool(pdobject->pObject); + if (v) + { + PX_Object_EditSetText(pDesignerDesc->edit_propertys[j],"1"); + } + else + { + PX_Object_EditSetText(pDesignerDesc->edit_propertys[j],"0"); + } + continue; + } + + if(pObjectDesc->properties[j].getfloat) + { + px_float v=pObjectDesc->properties[j].getfloat(pdobject->pObject); + px_char content[32]; + PX_ftoa(v,content,32,2); + if (v) + { + PX_Object_EditSetText(pDesignerDesc->edit_propertys[j],content); + } + else + { + PX_Object_EditSetText(pDesignerDesc->edit_propertys[j],content); + } + continue; + } + + if(pObjectDesc->properties[j].getint) + { + px_int v=pObjectDesc->properties[j].getint(pdobject->pObject); + px_char content[32]; + PX_itoa(v,content,32,10); + PX_Object_EditSetText(pDesignerDesc->edit_propertys[j],content); + continue; + } + + if(pObjectDesc->properties[j].getstring) + { + px_string str; + PX_StringInitialize(pDesignerDesc->mp, &str); + ; + if (pObjectDesc->properties[j].getstring(pdobject->pObject,&str)) + { + PX_Object_EditSetText(pDesignerDesc->edit_propertys[j],str.buffer); + } + else + { + PX_Object_EditSetText(pDesignerDesc->edit_propertys[j],""); + } + + PX_StringFree(&str); + + continue; + } + } + } + } + PX_Object_ScrollAreaUpdateRange(pDesignerDesc->widget_propertyscrollarea); +} +static px_void PX_Designer_UpdateProperties(PX_Object *pObject) +{ + + PX_Designer *pDesignerDesc=PX_ObjectGetDesc(PX_Designer,pObject); + + if (PX_VectorCheckIndex(&pDesignerDesc->Objects,pDesignerDesc->selectObjectIndex)) + { + PX_Designer_Object *pdobject=PX_VECTORAT(PX_Designer_Object,&pDesignerDesc->Objects,pDesignerDesc->selectObjectIndex); + if (PX_VectorCheckIndex(&pDesignerDesc->ObjectDesc,pdobject->descIndex)) + { + px_int j; + PX_Designer_ObjectDesc *pObjectDesc=PX_VECTORAT(PX_Designer_ObjectDesc,&pDesignerDesc->ObjectDesc,pdobject->descIndex); + for (j=0;jproperties);j++) + { + if (!pObjectDesc->properties[j].Name[0]) + { + break; + } + + if(pObjectDesc->properties[j].setbool) + { + const px_char *pContent=PX_Object_EditGetText(pDesignerDesc->edit_propertys[j]);; + if (pContent[0]=='0') + { + pObjectDesc->properties[j].setbool(pdobject->pObject,PX_FALSE); + } + else + { + pObjectDesc->properties[j].setbool(pdobject->pObject,PX_TRUE); + } + continue; + } + + if(pObjectDesc->properties[j].setfloat) + { + const px_char *pContent=PX_Object_EditGetText(pDesignerDesc->edit_propertys[j]);; + + pObjectDesc->properties[j].setfloat(pdobject->pObject,PX_atof(pContent)); + + continue; + } + + if(pObjectDesc->properties[j].setint) + { + const px_char *pContent=PX_Object_EditGetText(pDesignerDesc->edit_propertys[j]);; + pObjectDesc->properties[j].setint(pdobject->pObject,PX_atoi(pContent)); + continue; + } + + if(pObjectDesc->properties[j].setstring) + { + const px_char *pContent=PX_Object_EditGetText(pDesignerDesc->edit_propertys[j]);; + pObjectDesc->properties[j].setstring(pdobject->pObject,pContent); + continue; + } + } + } + } +} + +px_void PX_DesignerOnDesignerBoxValueChanged(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_DesignerBox *pDesignerBox=(PX_Object_DesignerBox *)pObject->pObject; + PX_Designer *pDesc=(PX_Designer *)((PX_Object *)ptr)->pObject; + + if (pDesc->selectObjectIndex>=0&&pDesc->selectObjectIndexObjects.size) + { + PX_Designer_Object *pdobject=PX_VECTORAT(PX_Designer_Object,&pDesc->Objects,pDesc->selectObjectIndex); + + switch (pdobject->type) + { + case PX_DESIGNER_OBJECT_TYPE_UI: + { + if (!pDesc->pLinkObject) + { + return; + } + pdobject->pObject->x = pDesc->designerbox->x; + pdobject->pObject->y = pDesc->designerbox->y; + pdobject->pObject->Width = pDesc->designerbox->Width; + pdobject->pObject->Height = pDesc->designerbox->Height; + } + break; + case PX_DESIGNER_OBJECT_TYPE_GAME: + { + if (!pDesc->pLinkWorld) + { + return; + } + pdobject->pObject->x = pDesc->designerbox->x+pDesc->pLinkWorld->offsetx; + pdobject->pObject->y = pDesc->designerbox->y + pDesc->pLinkWorld->offsety; + pdobject->pObject->Width = pDesc->designerbox->Width; + pdobject->pObject->Height = pDesc->designerbox->Height; + } + break; + default: + return; + } + + + PX_Designer_RefreshProperties((PX_Object *)ptr); + + } +} +px_void PX_DesignerUpdate(PX_Object *pObject,px_dword elapsed) +{ + px_int i,count; + PX_Designer *pDesc=(PX_Designer *)pObject->pObject; + + ////////////////////////////////////////////////////////////////////////// + //designer box + if (pDesc->selectObjectIndex!=-1) + { + PX_Designer_Object *pdobject=PX_VECTORAT(PX_Designer_Object,&pDesc->Objects,pDesc->selectObjectIndex); + + switch (pdobject->type) + { + case PX_DESIGNER_OBJECT_TYPE_UI: + { + if (!pDesc->pLinkObject) + { + return; + } + pDesc->designerbox->x = pdobject->pObject->x; + pDesc->designerbox->y = pdobject->pObject->y; + pDesc->designerbox->Width = pdobject->pObject->Width; + pDesc->designerbox->Height = pdobject->pObject->Height; + pDesc->designerbox->Visible = PX_TRUE; + } + break; + case PX_DESIGNER_OBJECT_TYPE_GAME: + { + if (!pDesc->pLinkWorld) + { + return; + } + pDesc->designerbox->x = pdobject->pObject->x-pDesc->pLinkWorld->offsetx; + pDesc->designerbox->y = pdobject->pObject->y - pDesc->pLinkWorld->offsety; + pDesc->designerbox->Width = pdobject->pObject->Width; + pDesc->designerbox->Height = pdobject->pObject->Height; + PX_ObjectSetVisible(pDesc->designerbox,PX_TRUE); + } + break; + default: + break; + } + + } + else + { + PX_ObjectSetVisible(pDesc->designerbox,PX_FALSE); + } + + ////////////////////////////////////////////////////////////////////////// + //delete button + if (pDesc->selectObjectIndex!=-1) + { + pDesc->button_delete->x=pDesc->designerbox->x+ pDesc->designerbox->Width-pDesc->button_delete->Width; + pDesc->button_delete->y= pDesc->designerbox->y-pDesc->button_delete->Height-8; + PX_ObjectSetVisible(pDesc->button_delete,PX_TRUE); + } + else + { + PX_ObjectSetVisible(pDesc->button_delete,PX_FALSE); + } + + ////////////////////////////////////////////////////////////////////////// + //properties + if (pDesc->selectObjectIndex==-1) + { + px_int i; + for (i=0;ilabel_propertys[i],PX_FALSE); + PX_ObjectSetVisible(pDesc->edit_propertys[i],PX_FALSE); + } + } + + + count= pDesc->ObjectDesc.size; + PX_Object_ListClear(pDesc->list_ObjectDesc); + for (i=0;iObjectDesc,i); + PX_Object_ListAdd(pDesc->list_ObjectDesc, pController); + } + +} + +px_void PX_Designer_ControllersListItemOnRender(px_surface* psurface,PX_Object *pObject, px_dword elapsed) +{ + PX_Designer_ObjectDesc*pDesc=(PX_Designer_ObjectDesc*)PX_Object_ListItemGetData(pObject); + PX_Designer *pDesignerDesc=PX_ObjectGetDesc(PX_Designer,(PX_Object *)pObject->User_ptr); + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + ////////////////////////////////////////////////////////////////////////// + //designer controller + ////////////////////////////////////////////////////////////////////////// + + switch (pDesc->type) + { + case PX_DESIGNER_OBJECT_TYPE_UI: + PX_GeoDrawBorder(psurface,(px_int)objx+1,(px_int)objy+1,(px_int)objx+64,(px_int)objy+PX_DESIGNER_CONTROLLER_ITEM_HEIGHT-2,1,PX_COLOR(255,192,64,255)); + PX_FontModuleDrawText(psurface,pDesignerDesc->fm,(px_int)objx+32,(px_int)objy+PX_DESIGNER_CONTROLLER_ITEM_HEIGHT/2,PX_ALIGN_CENTER,"UI",PX_COLOR(255,192,64,255)); + PX_FontModuleDrawText(psurface, pDesignerDesc->fm, (px_int)objx + 68, (px_int)objy + PX_DESIGNER_CONTROLLER_ITEM_HEIGHT / 2, PX_ALIGN_LEFTMID, pDesc->Name, PX_COLOR(255, 192, 64, 255)); + break; + case PX_DESIGNER_OBJECT_TYPE_GAME: + PX_GeoDrawBorder(psurface,(px_int)objx+1,(px_int)objy+1,(px_int)objx+64,(px_int)objy+PX_DESIGNER_CONTROLLER_ITEM_HEIGHT-2,1,PX_COLOR(255,128,255,64)); + PX_FontModuleDrawText(psurface,pDesignerDesc->fm,(px_int)objx+32,(px_int)objy+PX_DESIGNER_CONTROLLER_ITEM_HEIGHT/2,PX_ALIGN_CENTER,"Game",PX_COLOR(255,128,255,64)); + PX_FontModuleDrawText(psurface, pDesignerDesc->fm, (px_int)objx + 68, (px_int)objy + PX_DESIGNER_CONTROLLER_ITEM_HEIGHT / 2, PX_ALIGN_LEFTMID, pDesc->Name, PX_COLOR(255, 128, 255, 64)); + break; + case PX_DESIGNER_OBJECT_TYPE_FUNCTION: + PX_GeoDrawBorder(psurface,(px_int)objx+1,(px_int)objy+1,(px_int)objx+64,(px_int)objy+PX_DESIGNER_CONTROLLER_ITEM_HEIGHT-2,1,PX_COLOR(255,255,128,64)); + PX_FontModuleDrawText(psurface,pDesignerDesc->fm,(px_int)objx+32,(px_int)objy+PX_DESIGNER_CONTROLLER_ITEM_HEIGHT/2,PX_ALIGN_CENTER,"Function",PX_COLOR(255,255,128,64)); + PX_FontModuleDrawText(psurface, pDesignerDesc->fm, (px_int)objx + 68, (px_int)objy + PX_DESIGNER_CONTROLLER_ITEM_HEIGHT / 2, PX_ALIGN_LEFTMID, pDesc->Name, PX_COLOR(255, 255, 128, 64)); + break; + } + + +} + +px_bool PX_Designer_ControllersListItemOnCreate(px_memorypool* mp, PX_Object* ItemObject, px_void* userptr) +{ + ItemObject->Func_ObjectRender = PX_Designer_ControllersListItemOnRender; + ItemObject->User_ptr = userptr; + return PX_TRUE; +} + +px_void PX_DesignerRender(px_surface* psurface,PX_Object *pObject, px_dword elapsed) +{ + PX_Designer*pDesc=PX_ObjectGetDesc(PX_Designer,pObject); + PX_DesignerUpdate(pObject, elapsed); + if (pDesc->pLinkWorld&&pDesc->showsliderbar) + { + if (pDesc->pLinkWorld->world_width > pDesc->pLinkWorld->surface_width) + { + pDesc->world_hscroll->Visible = PX_TRUE; + pDesc->world_hscroll->x = 0; + pDesc->world_hscroll->y = pDesc->pLinkWorld->surface_height - 24.f; + pDesc->world_hscroll->Height = 24; + pDesc->world_hscroll->Width = pDesc->pLinkWorld->surface_width-24.f; + } + else + { + pDesc->world_hscroll->Visible = PX_FALSE; + } + + if (pDesc->pLinkWorld->world_height > pDesc->pLinkWorld->surface_height) + { + pDesc->world_vscroll->Visible = PX_TRUE; + pDesc->world_vscroll->x = pDesc->pLinkWorld->surface_width - 24.f; + pDesc->world_vscroll->y = 0; + pDesc->world_vscroll->Width = 24; + pDesc->world_vscroll->Height = pDesc->pLinkWorld->surface_height - 24.f; + } + else + { + pDesc->world_vscroll->Visible = PX_FALSE; + } + + } + else + { + pDesc->world_hscroll->Visible = PX_FALSE; + pDesc->world_vscroll->Visible = PX_FALSE; + } + + +} + +////////////////////////////////////////////////////////////////////////// +px_bool PX_Designer_GetID(PX_Object *pObject,px_string *str) +{ + PX_StringSet(str, pObject->id); + return PX_TRUE; +} + +px_void PX_Designer_SetID(PX_Object *pObject,const px_char id[]) +{ + PX_ObjectSetId(pObject,id); +} + +px_float PX_Designer_GetX(PX_Object *pObject) +{ + return pObject->x; +} + +px_float PX_Designer_GetY(PX_Object *pObject) +{ + return pObject->y; +} + +px_float PX_Designer_GetWidth(PX_Object *pObject) +{ + return pObject->Width; +} + +px_float PX_Designer_GetHeight(PX_Object *pObject) +{ + return pObject->Height; +} + +px_void PX_Designer_SetX(PX_Object *pObject,px_float v) +{ + pObject->x=v; +} + +px_void PX_Designer_SetY(PX_Object *pObject,px_float v) +{ + pObject->y=v; +} + +px_void PX_Designer_SetWidth(PX_Object *pObject,px_float v) +{ + pObject->Width=v; +} + +px_void PX_Designer_SetHeight(PX_Object *pObject,px_float v) +{ + pObject->Height=v; +} + +px_void PX_Designer_OnPropertyChanged(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Designer *pDesignerDesc=PX_ObjectGetDesc(PX_Designer,(PX_Object *)ptr); + PX_Designer_UpdateProperties((PX_Object *)ptr); +} + +px_void PX_Designer_OnPropertyRefresh(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Designer *pDesignerDesc=PX_ObjectGetDesc(PX_Designer,(PX_Object *)ptr); + PX_Designer_RefreshProperties((PX_Object *)ptr); +} + +px_void PX_Designer_OnDeleteCurrentObject(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Designer *pDesignerDesc=PX_ObjectGetDesc(PX_Designer,(PX_Object *)ptr); + if (PX_VectorCheckIndex(&pDesignerDesc->Objects,pDesignerDesc->selectObjectIndex)) + { + PX_Designer_Object *pdobject=PX_VECTORAT(PX_Designer_Object,&pDesignerDesc->Objects,pDesignerDesc->selectObjectIndex); + + switch(pdobject->type) + { + case PX_DESIGNER_OBJECT_TYPE_UI: + { + if (!pDesignerDesc->pLinkObject) + { + PX_ASSERT(); + return; + } + PX_ObjectDelete(pdobject->pObject); + } + break; + case PX_DESIGNER_OBJECT_TYPE_GAME: + { + if (!pDesignerDesc->pLinkWorld) + { + PX_ASSERT(); + return; + } + PX_WorldRemoveObject(pDesignerDesc->pLinkWorld,pdobject->pObject); + } + default: + break; + } + PX_VectorErase(&pDesignerDesc->Objects,pDesignerDesc->selectObjectIndex); + } + pDesignerDesc->selectObjectIndex=-1; +} + +px_void PX_Designer_OnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Designer *pDesignerDesc=PX_ObjectGetDesc(PX_Designer,pObject); + PX_Object *pSelectObject=PX_NULL; + px_int selectObjectIndex=-1; + + if (e.Event==PX_OBJECT_EVENT_CURSORDOWN) + { + px_int i; + px_float x,y; + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pDesignerDesc->selectObjectIndex!=-1) + { + if (PX_isXYInRegion(x,y,pDesignerDesc->designerbox->x-6,pDesignerDesc->designerbox->y-6,pDesignerDesc->designerbox->Width+12,pDesignerDesc->designerbox->Height+12)) + { + return; + } + + if (PX_ObjectIsCursorInRegion(pDesignerDesc->button_delete,e)) + { + return; + } + } + + if (pDesignerDesc->world_vscroll->Visible) + { + if (PX_ObjectIsCursorInRegion(pDesignerDesc->world_vscroll, e)) + { + return; + } + } + + if (pDesignerDesc->world_hscroll->Visible) + { + if (PX_ObjectIsCursorInRegion(pDesignerDesc->world_hscroll, e)) + { + return; + } + } + + + for (i=0;iObjects.size;i++) + { + PX_Designer_Object *pdobject=PX_VECTORAT(PX_Designer_Object,&pDesignerDesc->Objects,i); + + if (pDesignerDesc->pLinkWorld&&pdobject->type==PX_DESIGNER_OBJECT_TYPE_GAME) + { + px_rect rect; + rect.x=pdobject->pObject->x-pDesignerDesc->pLinkWorld->offsetx; + rect.y=pdobject->pObject->y-pDesignerDesc->pLinkWorld->offsety; + rect.width=pdobject->pObject->Width; + rect.height=pdobject->pObject->Height; + if(PX_isPointInRect(PX_POINT(x,y,0),rect)) + { + selectObjectIndex=i; + } + } + + if (pDesignerDesc->pLinkObject && pdobject->type==PX_DESIGNER_OBJECT_TYPE_UI) + { + if(PX_ObjectIsCursorInRegion(pdobject->pObject,e)) + { + selectObjectIndex=i; + } + } + + } + + + if (selectObjectIndex==-1&&pDesignerDesc->selectObjectIndex==-1) + { + px_int selectDescIndex=PX_Object_ListGetCurrentSelectIndex(pDesignerDesc->list_ObjectDesc); + PX_Designer_Object dobject; + if (selectDescIndex!=-1) + { + //create new object + PX_Designer_ObjectDesc *pObjectDesc=PX_VECTORAT(PX_Designer_ObjectDesc,&pDesignerDesc->ObjectDesc,selectDescIndex); + + switch (pObjectDesc->type) + { + case PX_DESIGNER_OBJECT_TYPE_UI: + { + if (pDesignerDesc->pLinkObject) + { + PX_Object* pNewObject = pObjectDesc->createfunc(pDesignerDesc->mp_ui, pDesignerDesc->pLinkObject, x, y, 100, 100, pDesignerDesc->fm); + PX_sprintf2(pNewObject->id, sizeof(pNewObject->id), "%1%2", PX_STRINGFORMAT_STRING(pObjectDesc->Name), PX_STRINGFORMAT_INT(pDesignerDesc->allocID++)); + + dobject.pObject = pNewObject; + dobject.type = PX_DESIGNER_OBJECT_TYPE_UI; + dobject.descIndex = selectDescIndex; + PX_VectorPushback(&pDesignerDesc->Objects, &dobject); + } + } + break; + case PX_DESIGNER_OBJECT_TYPE_GAME: + { + if (pDesignerDesc->pLinkWorld) + { + PX_Object* pNewObject = pObjectDesc->createfunc(pDesignerDesc->mp_game, PX_NULL, x + pDesignerDesc->pLinkWorld->offsetx, y + pDesignerDesc->pLinkWorld->offsety, 100, 100, pDesignerDesc->fm); + PX_sprintf2(pNewObject->id, sizeof(pNewObject->id), "%1%2", PX_STRINGFORMAT_STRING(pObjectDesc->Name), PX_STRINGFORMAT_INT(pDesignerDesc->allocID++)); + + PX_WorldAddObject(pDesignerDesc->pLinkWorld, pNewObject); + dobject.pObject = pNewObject; + dobject.type = PX_DESIGNER_OBJECT_TYPE_GAME; + dobject.descIndex = selectDescIndex; + PX_VectorPushback(&pDesignerDesc->Objects, &dobject); + } + } + break; + case PX_DESIGNER_OBJECT_TYPE_FUNCTION: + { + PX_Object *pNewObject=pObjectDesc->createfunc(pDesignerDesc->mp,PX_NULL,x,y,100,100,pDesignerDesc->fm); + if (pNewObject!=PX_NULL) + { + PX_ASSERT(); + } + } + break; + default: + break; + } + + } + else + { + pDesignerDesc->lastcursorx=x; + pDesignerDesc->lastcursory=y; + } + + } + + if (selectObjectIndex!=-1) + { + if (pDesignerDesc->selectObjectIndex!=selectObjectIndex) + { + PX_Designer_Object *pdobject=PX_VECTORAT(PX_Designer_Object,&pDesignerDesc->Objects,selectObjectIndex); + PX_Object_DesignerBox *pDesignerBox=PX_ObjectGetDesc(PX_Object_DesignerBox,pDesignerDesc->designerbox); + + pDesignerDesc->selectObjectIndex=selectObjectIndex; + + + pDesignerDesc->designerbox->x=pdobject->pObject->x; + pDesignerDesc->designerbox->y=pdobject->pObject->y; + pDesignerDesc->designerbox->Width=pdobject->pObject->Width; + pDesignerDesc->designerbox->Height=pdobject->pObject->Height; + + pDesignerBox->bselect=PX_Object_DesignerBox_bselect_center; + pDesignerBox->lastx = x; + pDesignerBox->lasty = y; + + PX_Designer_RefreshProperties(pObject); + } + } + else + { + pDesignerDesc->selectObjectIndex=-1; + } + + } + + +} +////////////////////////////////////////////////////////////////////////// +/* +typedef PX_Object *(*px_designer_createfunc)(px_memorypool *mp,PX_Object *pparent,px_float x,px_float y,px_float width,px_float height,PX_FontModule *fm); +typedef px_float (*px_designer_getproperty_float)(PX_Object *pObject); +typedef px_int (*px_designer_getproperty_int)(PX_Object *pObject); +typedef px_bool (*px_designer_getproperty_string)(PX_Object *pObject); +typedef px_bool (*px_designer_getproperty_bool)(PX_Object *pObject); + +typedef px_void (*px_designer_setproperty_float)(PX_Object *pObject,px_float v); +typedef px_void (*px_designer_setproperty_int)(PX_Object *pObject,px_int v); +typedef px_void (*px_designer_setproperty_string)(PX_Object *pObject,const px_char v[]); +typedef px_void (*px_designer_setproperty_bool)(PX_Object *pObject,px_bool v); +typedef struct +*/ + +////////////////////////////////////////////////////////////////////////// +//Label +////////////////////////////////////////////////////////////////////////// +PX_Object *PX_Designer_LabelCreate(px_memorypool *mp,PX_Object *pparent,px_float x,px_float y,px_float width,px_float height,PX_FontModule *fm) +{ + return PX_Object_LabelCreate(mp,pparent,(px_int)x,(px_int)y,128,32,"Label",fm,PX_OBJECT_UI_DEFAULT_FONTCOLOR); +} + +px_void PX_Designer_LabelSetText(PX_Object *pobject,const px_char text[]) +{ + PX_Object_LabelSetText(pobject,text); +} + +px_bool PX_Designer_LabelGetText(PX_Object *pobject,px_string *str) +{ + return PX_StringSet(str, PX_Object_LabelGetText(pobject)); +} + +px_void PX_Designer_LabelSetAlign(PX_Object *pobject,px_int align) +{ + switch(align) + { + case PX_ALIGN_LEFTTOP: + case PX_ALIGN_MIDTOP: + case PX_ALIGN_RIGHTTOP: + case PX_ALIGN_LEFTMID: + case PX_ALIGN_CENTER: + case PX_ALIGN_RIGHTMID: + case PX_ALIGN_LEFTBOTTOM: + case PX_ALIGN_MIDBOTTOM: + case PX_ALIGN_RIGHTBOTTOM: + { + PX_Object_LabelSetAlign(pobject,(PX_ALIGN)align); + } + default: + break; + } + +} + +px_int PX_Designer_LabelGetAlign(PX_Object *pobject) +{ + return PX_Object_GetLabel(pobject)->Align; +} + +////////////////////////////////////////////////////////////////////////// +//Push button +////////////////////////////////////////////////////////////////////////// +PX_Object *PX_Designer_PushButtonCreate(px_memorypool *mp,PX_Object *pparent,px_float x,px_float y,px_float width,px_float height,PX_FontModule *fm) +{ + return PX_Object_PushButtonCreate(mp,pparent,(px_int)x,(px_int)y,128,64,"PushButton",fm); +} + +px_void PX_Designer_PushButtonSetText(PX_Object *pobject,const px_char text[]) +{ + PX_Object_PushButtonSetText(pobject,text); +} + +px_bool PX_Designer_PushButtonGetText(PX_Object *pobject,px_string *str) +{ + return PX_StringSet(str,PX_Object_PushButtonGetText(pobject)); +} + + +////////////////////////////////////////////////////////////////////////// +//radiobox +////////////////////////////////////////////////////////////////////////// +PX_Object *PX_Designer_RadioBoxCreate(px_memorypool *mp,PX_Object *pparent,px_float x,px_float y,px_float width,px_float height,PX_FontModule *fm) +{ + return PX_Object_RadioBoxCreate(mp,pparent,(px_int)x,(px_int)y,108,28,"RadioButton",fm); +} + +px_void PX_Designer_RadioBoxSetText(PX_Object *pobject,const px_char text[]) +{ + PX_Object_RadioBoxSetText(pobject,text); +} + +px_bool PX_Designer_RadioBoxGetText(PX_Object *pobject,px_string *str) +{ + return PX_StringSet(str,PX_Object_RadioBoxGetText(pobject)); +} + +px_void PX_Designer_RadioBoxSetCheck(PX_Object *pobject,px_bool b) +{ + PX_Object_RadioBoxSetCheck(pobject,b); +} + +px_bool PX_Designer_RadioBoxGetCheck(PX_Object *pobject) +{ + return PX_Object_RadioBoxGetCheck(pobject); +} + +////////////////////////////////////////////////////////////////////////// +//checkbox +////////////////////////////////////////////////////////////////////////// +PX_Object *PX_Designer_CheckBoxCreate(px_memorypool *mp,PX_Object *pparent,px_float x,px_float y,px_float width,px_float height,PX_FontModule *fm) +{ + return PX_Object_CheckBoxCreate(mp,pparent,(px_int)x,(px_int)y,96,28,"CheckBox",fm); +} + +px_void PX_Designer_CheckBoxSetText(PX_Object *pobject,const px_char text[]) +{ + PX_Object_CheckBoxSetText(pobject,text); +} + +px_bool PX_Designer_CheckBoxGetText(PX_Object *pobject,px_string *str) +{ + return PX_StringSet(str,PX_Object_CheckBoxGetText(pobject)); +} + +px_void PX_Designer_CheckBoxSetCheck(PX_Object *pobject,px_bool b) +{ + PX_Object_CheckBoxSetCheck(pobject,b); +} + +px_bool PX_Designer_CheckBoxGetCheck(PX_Object *pobject) +{ + return PX_Object_CheckBoxGetCheck(pobject); +} + +////////////////////////////////////////////////////////////////////////// +//edit +////////////////////////////////////////////////////////////////////////// +PX_Object *PX_Designer_EditCreate(px_memorypool *mp,PX_Object *pparent,px_float x,px_float y,px_float width,px_float height,PX_FontModule *fm) +{ + return PX_Object_EditCreate(mp,pparent,(px_int)x,(px_int)y,128,28,fm); +} + +px_void PX_Designer_EditSetText(PX_Object *pobject,const px_char text[]) +{ + PX_Object_EditSetText(pobject,text); +} + +px_bool PX_Designer_EditGetText(PX_Object *pobject,px_string *str) +{ + return PX_StringSet(str,PX_Object_EditGetText(pobject)); +} + +////////////////////////////////////////////////////////////////////////// +//process bar +////////////////////////////////////////////////////////////////////////// +PX_Object* PX_Designer_ProcessBarCreate(px_memorypool* mp, PX_Object* pparent, px_float x, px_float y, px_float width, px_float height, PX_FontModule* fm) +{ + return PX_Object_ProcessBarCreate(mp, pparent, (px_int)x, (px_int)y, 192, 32); +} + +px_void PX_Designer_ProcessBarSetMax(PX_Object* pobject, px_int max) +{ + PX_Object_ProcessBarSetMax(pobject, max); +} + +px_int PX_Designer_ProcessBarGetMax(PX_Object* pobject) +{ + return PX_Object_ProcessBarGetMax(pobject); +} + +px_void PX_Designer_ProcessBarSetValue(PX_Object* pobject, px_int value) +{ + PX_Object_ProcessBarSetValue(pobject,value); +} + +px_int PX_Designer_ProcessBarGetValue(PX_Object* pobject) +{ + return PX_Object_ProcessBarGetValue(pobject); +} + + + +////////////////////////////////////////////////////////////////////////// +//list +////////////////////////////////////////////////////////////////////////// + +PX_Object* PX_Designer_ListCreate(px_memorypool* mp, PX_Object* pparent, px_float x, px_float y, px_float width, px_float height, PX_FontModule* fm) +{ + return PX_Object_ListContentCreate(mp, pparent, (px_int)x, (px_int)y, 256, 128, fm); +} + + +////////////////////////////////////////////////////////////////////////// +//SelectBar +////////////////////////////////////////////////////////////////////////// + +PX_Object* PX_Designer_SelectBarCreate(px_memorypool* mp, PX_Object* pparent, px_float x, px_float y, px_float width, px_float height, PX_FontModule* fm) +{ + return PX_Object_SelectBarCreate(mp, pparent, (px_int)x, (px_int)y, 96, 24, fm); +} + +px_void PX_Designer_SelectBarSetText(PX_Object* pobject, const px_char text[]) +{ + px_char content[64]; + px_int _strlen; + px_int i, j; + PX_Object_SelectBarClear(pobject); + i = 0; + _strlen = PX_strlen(text); + while (i < _strlen) + { + j = 0; + while (text[i] != '\n' && text[i] != '\0') + { + if (j >= PX_COUNTOF(content) - 1) + { + return; + } + content[j++] = text[i++]; + } + content[j] = '\0'; + if (text[i] == '\n') + { + i++; + } + PX_Object_SelectBarAddItem(pobject, content); + } +} + + +px_bool PX_Designer_SelectBarGetText(PX_Object* pobject,px_string *str) +{ + px_int i; + PX_Object_SelectBar* pdesc = PX_ObjectGetDesc(PX_Object_SelectBar, pobject); + for (i=0;i< pdesc->Items.size;i++) + { + PX_StringCat(str, PX_Object_SelectBarGetItemText(pobject, i)); + PX_StringCat(str, "\n"); + } + PX_StringBackspace(str); + return PX_TRUE; +} + + +////////////////////////////////////////////////////////////////////////// +//SliderBar +////////////////////////////////////////////////////////////////////////// +PX_Object* PX_Designer_SliderBarCreate(px_memorypool* mp, PX_Object* pparent, px_float x, px_float y, px_float width, px_float height, PX_FontModule* fm) +{ + return PX_Object_SliderBarCreate(mp, pparent, (px_int)x, (px_int)y, 192, 32,PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL,PX_OBJECT_SLIDERBAR_STYLE_LINER); +} + +px_void PX_Designer_SliderBarSetMax(PX_Object* pobject, px_int max) +{ + PX_Object_SliderBarSetRange(pobject,PX_ObjectGetDesc(PX_Object_SliderBar,pobject)->Min ,max); +} + +px_int PX_Designer_SliderBarGetMax(PX_Object* pobject) +{ + return PX_ObjectGetDesc(PX_Object_SliderBar, pobject)->Max; +} + +px_void PX_Designer_SliderBarSetMin(PX_Object* pobject, px_int min) +{ + PX_Object_SliderBarSetRange(pobject,min, PX_ObjectGetDesc(PX_Object_SliderBar, pobject)->Max); +} + +px_int PX_Designer_SliderBarGetMin(PX_Object* pobject) +{ + return PX_ObjectGetDesc(PX_Object_SliderBar, pobject)->Min; +} + +px_void PX_Designer_SliderBarSetType(PX_Object* pobject, px_int type) +{ + switch (type) + { + case PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL: + case PX_OBJECT_SLIDERBAR_TYPE_VERTICAL: + PX_ObjectGetDesc(PX_Object_SliderBar, pobject)->Type = (PX_OBJECT_SLIDERBAR_TYPE)type; + default: + break; + } + +} +px_int PX_Designer_SliderBarGetType(PX_Object* pobject) +{ + return (px_int)PX_ObjectGetDesc(PX_Object_SliderBar, pobject)->Type; +} + + +px_void PX_Designer_SliderBarSetStyle(PX_Object* pobject, px_int style) +{ + switch (style) + { + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + PX_ObjectGetDesc(PX_Object_SliderBar, pobject)->style = (PX_OBJECT_SLIDERBAR_STYLE)style; + default: + break; + } + +} +px_int PX_Designer_SliderBarGetStyle(PX_Object* pobject) +{ + return (px_int)PX_ObjectGetDesc(PX_Object_SliderBar, pobject)->style; +} + +px_void PX_Designer_SliderBarSetValue(PX_Object* pobject, px_int value) +{ + PX_Object_SliderBarSetValue(pobject, value); +} + +px_int PX_Designer_SliderBarGetValue(PX_Object* pobject) +{ + return PX_Object_SliderBarGetValue(pobject); +} + + +px_bool PX_DesignerStandardInitialize(PX_Designer *designer) +{ + + do + { + PX_Designer_ObjectDesc slabel; + px_int i=0; + PX_memset(&slabel,0,sizeof(slabel)); + PX_strcat(slabel.Name,"label"); + slabel.createfunc=PX_Designer_LabelCreate; + slabel.type=PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(slabel.properties[i].Name,"id"); + slabel.properties[i].getstring=PX_Designer_GetID; + slabel.properties[i].setstring=PX_Designer_SetID; + i++; + + PX_strcat(slabel.properties[i].Name,"x"); + slabel.properties[i].getfloat=PX_Designer_GetX; + slabel.properties[i].setfloat=PX_Designer_SetX; + i++; + + PX_strcat(slabel.properties[i].Name,"y"); + slabel.properties[i].getfloat=PX_Designer_GetY; + slabel.properties[i].setfloat=PX_Designer_SetY; + i++; + + PX_strcat(slabel.properties[i].Name,"width"); + slabel.properties[i].getfloat=PX_Designer_GetWidth; + slabel.properties[i].setfloat=PX_Designer_SetWidth; + i++; + + PX_strcat(slabel.properties[i].Name,"height"); + slabel.properties[i].getfloat=PX_Designer_GetHeight; + slabel.properties[i].setfloat=PX_Designer_SetHeight; + i++; + + PX_strcat(slabel.properties[i].Name,"text"); + slabel.properties[i].setstring=PX_Designer_LabelSetText; + slabel.properties[i].getstring=PX_Designer_LabelGetText; + i++; + + + PX_strcat(slabel.properties[i].Name,"align"); + slabel.properties[i].setint=PX_Designer_LabelSetAlign; + slabel.properties[i].getint=PX_Designer_LabelGetAlign; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &slabel); + } + if (designer->pLinkWorld) + { + slabel.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &slabel); + } + + } while (0); + + do + { + PX_Designer_ObjectDesc spushbutton; + px_int i=0; + PX_memset(&spushbutton,0,sizeof(spushbutton)); + PX_strcat(spushbutton.Name,"pushbutton"); + spushbutton.createfunc=PX_Designer_PushButtonCreate; + spushbutton.type=PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(spushbutton.properties[i].Name,"id"); + spushbutton.properties[i].getstring=PX_Designer_GetID; + spushbutton.properties[i].setstring=PX_Designer_SetID; + i++; + + PX_strcat(spushbutton.properties[i].Name,"x"); + spushbutton.properties[i].getfloat=PX_Designer_GetX; + spushbutton.properties[i].setfloat=PX_Designer_SetX; + i++; + + PX_strcat(spushbutton.properties[i].Name,"y"); + spushbutton.properties[i].getfloat=PX_Designer_GetY; + spushbutton.properties[i].setfloat=PX_Designer_SetY; + i++; + + PX_strcat(spushbutton.properties[i].Name,"width"); + spushbutton.properties[i].getfloat=PX_Designer_GetWidth; + spushbutton.properties[i].setfloat=PX_Designer_SetWidth; + i++; + + PX_strcat(spushbutton.properties[i].Name,"height"); + spushbutton.properties[i].getfloat=PX_Designer_GetHeight; + spushbutton.properties[i].setfloat=PX_Designer_SetHeight; + i++; + + PX_strcat(spushbutton.properties[i].Name,"text"); + spushbutton.properties[i].setstring=PX_Designer_PushButtonSetText; + spushbutton.properties[i].getstring=PX_Designer_PushButtonGetText; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &spushbutton); + } + + if (designer->pLinkWorld) + { + spushbutton.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &spushbutton); + } + + + } while (0); + + + do + { + PX_Designer_ObjectDesc sradiobutton; + px_int i = 0; + PX_memset(&sradiobutton, 0, sizeof(sradiobutton)); + PX_strcat(sradiobutton.Name, "radiobutton"); + + sradiobutton.createfunc = PX_Designer_RadioBoxCreate; + sradiobutton.type = PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(sradiobutton.properties[i].Name, "id"); + sradiobutton.properties[i].getstring = PX_Designer_GetID; + sradiobutton.properties[i].setstring = PX_Designer_SetID; + i++; + + PX_strcat(sradiobutton.properties[i].Name, "x"); + sradiobutton.properties[i].getfloat = PX_Designer_GetX; + sradiobutton.properties[i].setfloat = PX_Designer_SetX; + i++; + + PX_strcat(sradiobutton.properties[i].Name, "y"); + sradiobutton.properties[i].getfloat = PX_Designer_GetY; + sradiobutton.properties[i].setfloat = PX_Designer_SetY; + i++; + + PX_strcat(sradiobutton.properties[i].Name, "width"); + sradiobutton.properties[i].getfloat = PX_Designer_GetWidth; + sradiobutton.properties[i].setfloat = PX_Designer_SetWidth; + i++; + + PX_strcat(sradiobutton.properties[i].Name, "height"); + sradiobutton.properties[i].getfloat = PX_Designer_GetHeight; + sradiobutton.properties[i].setfloat = PX_Designer_SetHeight; + i++; + + PX_strcat(sradiobutton.properties[i].Name, "text"); + sradiobutton.properties[i].setstring = PX_Designer_RadioBoxSetText; + sradiobutton.properties[i].getstring = PX_Designer_RadioBoxGetText; + i++; + + PX_strcat(sradiobutton.properties[i].Name, "check"); + sradiobutton.properties[i].setbool = PX_Designer_RadioBoxSetCheck; + sradiobutton.properties[i].getbool = PX_Designer_RadioBoxGetCheck; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &sradiobutton); + } + if (designer->pLinkWorld) + { + sradiobutton.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &sradiobutton); + } + } while (0); + + + do + { + PX_Designer_ObjectDesc scheckbox; + px_int i = 0; + PX_memset(&scheckbox, 0, sizeof(scheckbox)); + PX_strcat(scheckbox.Name, "checkbox"); + + scheckbox.createfunc = PX_Designer_CheckBoxCreate; + scheckbox.type = PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(scheckbox.properties[i].Name, "id"); + scheckbox.properties[i].getstring = PX_Designer_GetID; + scheckbox.properties[i].setstring = PX_Designer_SetID; + i++; + + PX_strcat(scheckbox.properties[i].Name, "x"); + scheckbox.properties[i].getfloat = PX_Designer_GetX; + scheckbox.properties[i].setfloat = PX_Designer_SetX; + i++; + + PX_strcat(scheckbox.properties[i].Name, "y"); + scheckbox.properties[i].getfloat = PX_Designer_GetY; + scheckbox.properties[i].setfloat = PX_Designer_SetY; + i++; + + PX_strcat(scheckbox.properties[i].Name, "width"); + scheckbox.properties[i].getfloat = PX_Designer_GetWidth; + scheckbox.properties[i].setfloat = PX_Designer_SetWidth; + i++; + + PX_strcat(scheckbox.properties[i].Name, "height"); + scheckbox.properties[i].getfloat = PX_Designer_GetHeight; + scheckbox.properties[i].setfloat = PX_Designer_SetHeight; + i++; + + PX_strcat(scheckbox.properties[i].Name, "text"); + scheckbox.properties[i].setstring = PX_Designer_CheckBoxSetText; + scheckbox.properties[i].getstring = PX_Designer_CheckBoxGetText; + i++; + + PX_strcat(scheckbox.properties[i].Name, "check"); + scheckbox.properties[i].setbool = PX_Designer_CheckBoxSetCheck; + scheckbox.properties[i].getbool = PX_Designer_CheckBoxGetCheck; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &scheckbox); + } + if (designer->pLinkWorld) + { + scheckbox.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &scheckbox); + } + } while (0); + + + do + { + PX_Designer_ObjectDesc edit; + px_int i = 0; + PX_memset(&edit, 0, sizeof(edit)); + PX_strcat(edit.Name, "edit"); + + edit.createfunc = PX_Designer_EditCreate; + edit.type = PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(edit.properties[i].Name, "id"); + edit.properties[i].getstring = PX_Designer_GetID; + edit.properties[i].setstring = PX_Designer_SetID; + i++; + + PX_strcat(edit.properties[i].Name, "x"); + edit.properties[i].getfloat = PX_Designer_GetX; + edit.properties[i].setfloat = PX_Designer_SetX; + i++; + + PX_strcat(edit.properties[i].Name, "y"); + edit.properties[i].getfloat = PX_Designer_GetY; + edit.properties[i].setfloat = PX_Designer_SetY; + i++; + + PX_strcat(edit.properties[i].Name, "width"); + edit.properties[i].getfloat = PX_Designer_GetWidth; + edit.properties[i].setfloat = PX_Designer_SetWidth; + i++; + + PX_strcat(edit.properties[i].Name, "height"); + edit.properties[i].getfloat = PX_Designer_GetHeight; + edit.properties[i].setfloat = PX_Designer_SetHeight; + i++; + + PX_strcat(edit.properties[i].Name, "text"); + edit.properties[i].setstring = PX_Designer_EditSetText; + edit.properties[i].getstring = PX_Designer_EditGetText; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &edit); + } + if (designer->pLinkWorld) + { + edit.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &edit); + } + + + } while (0); + + + do + { + PX_Designer_ObjectDesc processbar; + px_int i = 0; + PX_memset(&processbar, 0, sizeof(processbar)); + PX_strcat(processbar.Name, "processbar"); + + processbar.createfunc = PX_Designer_ProcessBarCreate; + processbar.type = PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(processbar.properties[i].Name, "id"); + processbar.properties[i].getstring = PX_Designer_GetID; + processbar.properties[i].setstring = PX_Designer_SetID; + i++; + + PX_strcat(processbar.properties[i].Name, "x"); + processbar.properties[i].getfloat = PX_Designer_GetX; + processbar.properties[i].setfloat = PX_Designer_SetX; + i++; + + PX_strcat(processbar.properties[i].Name, "y"); + processbar.properties[i].getfloat = PX_Designer_GetY; + processbar.properties[i].setfloat = PX_Designer_SetY; + i++; + + PX_strcat(processbar.properties[i].Name, "width"); + processbar.properties[i].getfloat = PX_Designer_GetWidth; + processbar.properties[i].setfloat = PX_Designer_SetWidth; + i++; + + PX_strcat(processbar.properties[i].Name, "height"); + processbar.properties[i].getfloat = PX_Designer_GetHeight; + processbar.properties[i].setfloat = PX_Designer_SetHeight; + i++; + + PX_strcat(processbar.properties[i].Name, "max"); + processbar.properties[i].setint = PX_Designer_ProcessBarSetMax; + processbar.properties[i].getint = PX_Designer_ProcessBarGetMax; + i++; + + PX_strcat(processbar.properties[i].Name, "value"); + processbar.properties[i].setint = PX_Designer_ProcessBarSetValue; + processbar.properties[i].getint = PX_Designer_ProcessBarGetValue; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &processbar); + } + if (designer->pLinkWorld) + { + processbar.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &processbar); + } + } while (0); + + do + { + PX_Designer_ObjectDesc list; + px_int i = 0; + PX_memset(&list, 0, sizeof(list)); + PX_strcat(list.Name, "list"); + + list.createfunc = PX_Designer_ListCreate; + list.type = PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(list.properties[i].Name, "id"); + list.properties[i].getstring = PX_Designer_GetID; + list.properties[i].setstring = PX_Designer_SetID; + i++; + + PX_strcat(list.properties[i].Name, "x"); + list.properties[i].getfloat = PX_Designer_GetX; + list.properties[i].setfloat = PX_Designer_SetX; + i++; + + PX_strcat(list.properties[i].Name, "y"); + list.properties[i].getfloat = PX_Designer_GetY; + list.properties[i].setfloat = PX_Designer_SetY; + i++; + + PX_strcat(list.properties[i].Name, "width"); + list.properties[i].getfloat = PX_Designer_GetWidth; + list.properties[i].setfloat = PX_Designer_SetWidth; + i++; + + PX_strcat(list.properties[i].Name, "height"); + list.properties[i].getfloat = PX_Designer_GetHeight; + list.properties[i].setfloat = PX_Designer_SetHeight; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &list); + } + if (designer->pLinkWorld) + { + list.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &list); + } + + + } while (0); + + + do + { + PX_Designer_ObjectDesc selectbar; + px_int i = 0; + PX_memset(&selectbar, 0, sizeof(selectbar)); + PX_strcat(selectbar.Name, "selectbar"); + + selectbar.createfunc = PX_Designer_SelectBarCreate; + selectbar.type = PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(selectbar.properties[i].Name, "id"); + selectbar.properties[i].getstring = PX_Designer_GetID; + selectbar.properties[i].setstring = PX_Designer_SetID; + i++; + + PX_strcat(selectbar.properties[i].Name, "x"); + selectbar.properties[i].getfloat = PX_Designer_GetX; + selectbar.properties[i].setfloat = PX_Designer_SetX; + i++; + + PX_strcat(selectbar.properties[i].Name, "y"); + selectbar.properties[i].getfloat = PX_Designer_GetY; + selectbar.properties[i].setfloat = PX_Designer_SetY; + i++; + + PX_strcat(selectbar.properties[i].Name, "width"); + selectbar.properties[i].getfloat = PX_Designer_GetWidth; + selectbar.properties[i].setfloat = PX_Designer_SetWidth; + i++; + + PX_strcat(selectbar.properties[i].Name, "height"); + selectbar.properties[i].getfloat = PX_Designer_GetHeight; + selectbar.properties[i].setfloat = PX_Designer_SetHeight; + i++; + + PX_strcat(selectbar.properties[i].Name, "list"); + selectbar.properties[i].setstring = PX_Designer_SelectBarSetText; + selectbar.properties[i].getstring = PX_Designer_SelectBarGetText; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &selectbar); + } + if (designer->pLinkWorld) + { + selectbar.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &selectbar); + } + } while (0); + + do + { + PX_Designer_ObjectDesc sliderbar; + px_int i = 0; + PX_memset(&sliderbar, 0, sizeof(sliderbar)); + PX_strcat(sliderbar.Name, "sliderbar"); + + sliderbar.createfunc = PX_Designer_SliderBarCreate; + sliderbar.type = PX_DESIGNER_OBJECT_TYPE_UI; + + PX_strcat(sliderbar.properties[i].Name, "id"); + sliderbar.properties[i].getstring = PX_Designer_GetID; + sliderbar.properties[i].setstring = PX_Designer_SetID; + i++; + + PX_strcat(sliderbar.properties[i].Name, "x"); + sliderbar.properties[i].getfloat = PX_Designer_GetX; + sliderbar.properties[i].setfloat = PX_Designer_SetX; + i++; + + PX_strcat(sliderbar.properties[i].Name, "y"); + sliderbar.properties[i].getfloat = PX_Designer_GetY; + sliderbar.properties[i].setfloat = PX_Designer_SetY; + i++; + + PX_strcat(sliderbar.properties[i].Name, "width"); + sliderbar.properties[i].getfloat = PX_Designer_GetWidth; + sliderbar.properties[i].setfloat = PX_Designer_SetWidth; + i++; + + PX_strcat(sliderbar.properties[i].Name, "height"); + sliderbar.properties[i].getfloat = PX_Designer_GetHeight; + sliderbar.properties[i].setfloat = PX_Designer_SetHeight; + i++; + + PX_strcat(sliderbar.properties[i].Name, "min"); + sliderbar.properties[i].setint = PX_Designer_SliderBarSetMin; + sliderbar.properties[i].getint = PX_Designer_SliderBarGetMin; + i++; + + PX_strcat(sliderbar.properties[i].Name, "max"); + sliderbar.properties[i].setint = PX_Designer_SliderBarSetMax; + sliderbar.properties[i].getint = PX_Designer_SliderBarGetMax; + i++; + + + PX_strcat(sliderbar.properties[i].Name, "type"); + sliderbar.properties[i].setint = PX_Designer_SliderBarSetType; + sliderbar.properties[i].getint = PX_Designer_SliderBarGetType; + i++; + + PX_strcat(sliderbar.properties[i].Name, "style"); + sliderbar.properties[i].setint = PX_Designer_SliderBarSetStyle; + sliderbar.properties[i].getint = PX_Designer_SliderBarGetStyle; + i++; + + PX_strcat(sliderbar.properties[i].Name, "value"); + sliderbar.properties[i].setint = PX_Designer_SliderBarSetValue; + sliderbar.properties[i].getint = PX_Designer_SliderBarGetValue; + i++; + + if (designer->pLinkObject) + { + PX_VectorPushback(&designer->ObjectDesc, &sliderbar); + } + if (designer->pLinkWorld) + { + sliderbar.type = PX_DESIGNER_OBJECT_TYPE_GAME; + PX_VectorPushback(&designer->ObjectDesc, &sliderbar); + } + + + } while (0); + + return PX_TRUE; +} + +px_void PX_DesignerOnMenuExec(px_void *userPtr) +{ + PX_Object *pObject=(PX_Object *)userPtr; + PX_ObjectExecuteEvent(pObject,PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_EXECUTE)); +} + +px_void PX_DesignerOnMenuExit(px_void *userPtr) +{ + PX_Object *pObject=(PX_Object *)userPtr; + PX_ObjectExecuteEvent(pObject,PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_CLOSE)); + PX_DesignerClose(pObject); +} + +px_void PX_DesignerOnMenuWindowControllers(px_void *userPtr) +{ + PX_Object *pObject=(PX_Object *)userPtr; + PX_Designer *pDesc=PX_ObjectGetDesc(PX_Designer,pObject); + + if(pDesc->widget_controllers->Visible) + PX_Object_WidgetHide(pDesc->widget_controllers); + else + PX_Object_WidgetShow(pDesc->widget_controllers); +} + + +px_void PX_DesignerOnMenuViewScrollbar(px_void* userPtr) +{ + PX_Object* pObject = (PX_Object*)userPtr; + PX_Designer* pDesc = PX_ObjectGetDesc(PX_Designer, pObject); + + pDesc->showsliderbar = !pDesc->showsliderbar; +} + +px_void PX_DesignerOnMenuWindowProperties(px_void *userPtr) +{ + PX_Object *pObject=(PX_Object *)userPtr; + PX_Designer *pDesc=PX_ObjectGetDesc(PX_Designer,pObject); + if(pDesc->widget_property->Visible) + PX_Object_WidgetHide(pDesc->widget_property); + else + PX_Object_WidgetShow(pDesc->widget_property); +} + +px_void PX_Designer_OnScrollVChanged(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object* pDesignerObject = (PX_Object*)ptr; + PX_Designer* pDesc = PX_ObjectGetDesc(PX_Designer, pDesignerObject); + if (pDesc->pLinkWorld) + { + px_point camera = pDesc->pLinkWorld->camera_offset; + camera.y = PX_Object_SliderBarGetValue(pObject) * 1.0f; + PX_WorldSetCamera(pDesc->pLinkWorld, camera); + } +} + +px_void PX_Designer_OnScrollHChanged(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object* pDesignerObject = (PX_Object*)ptr; + PX_Designer* pDesc = PX_ObjectGetDesc(PX_Designer, pDesignerObject); + if (pDesc->pLinkWorld) + { + px_point camera = pDesc->pLinkWorld->camera_offset; + camera.x = PX_Object_SliderBarGetValue(pObject) * 1.0f; + PX_WorldSetCamera(pDesc->pLinkWorld, camera); + } +} + +PX_Object * PX_DesignerCreate(px_memorypool *mp,px_memorypool *mp_ui,px_memorypool *mp_world,PX_Object *pparent,PX_Object *pLinkObject,PX_World *pLinkWorld,PX_FontModule *fm) +{ + px_int i; + PX_Object *pObject; + PX_Designer desc,*pdesc; + PX_memset(&desc,0,sizeof(desc)); + + pObject=PX_ObjectCreateEx(mp,pparent,0,0,0,0,0,0,0x21080210,PX_DesignerUpdate,PX_DesignerRender,PX_NULL,&desc,sizeof(desc)); + pdesc=(PX_Designer *)pObject->pObject; + pdesc->pLinkWorld=pLinkWorld; + pdesc->pLinkObject=pLinkObject; + pdesc->showsliderbar = PX_TRUE; + pdesc->widget_property = PX_Object_WidgetCreate(mp, pObject, 5, 36 + 256, 192, 192, "properties", PX_NULL); + if (!pdesc->widget_property)return PX_FALSE; + if(pdesc->pLinkWorld) + pdesc->widget_property->x = pdesc->pLinkWorld->surface_width - pdesc->widget_property->Width - 25; + + pdesc->widget_propertyscrollarea=PX_Object_ScrollAreaCreate(mp,pdesc->widget_property,0,0,174, 162); + + do + { + PX_Object_Menu_Item *pItem; + pdesc->menu=PX_Object_MenuCreate(mp,pObject,0,0,64,PX_NULL); + + pItem=PX_Object_MenuAddItem(pdesc->menu,PX_Object_MenuGetRootItem(pdesc->menu),"debug",PX_NULL,PX_NULL); + PX_Object_MenuAddItem(pdesc->menu,pItem,"execute",PX_DesignerOnMenuExec,pObject); + PX_Object_MenuAddItem(pdesc->menu,pItem,"exit",PX_DesignerOnMenuExit,pObject); + + pItem=PX_Object_MenuAddItem(pdesc->menu,PX_Object_MenuGetRootItem(pdesc->menu),"window",PX_NULL,PX_NULL); + PX_Object_MenuAddItem(pdesc->menu,pItem,"controllers",PX_DesignerOnMenuWindowControllers,pObject); + PX_Object_MenuAddItem(pdesc->menu,pItem,"properties",PX_DesignerOnMenuWindowProperties,pObject); + + pItem = PX_Object_MenuAddItem(pdesc->menu, PX_Object_MenuGetRootItem(pdesc->menu), "View", PX_NULL, PX_NULL); + PX_Object_MenuAddItem(pdesc->menu, pItem, "ScrollBar", PX_DesignerOnMenuViewScrollbar, pObject); + + } while (0); + + + + for (i=0;ilabel_propertys[i]=PX_Object_LabelCreate(mp,pdesc->widget_propertyscrollarea,5,3+i*24,64,24,"property",fm,PX_OBJECT_UI_DEFAULT_FONTCOLOR); + PX_Object_LabelSetAlign(pdesc->label_propertys[i],PX_ALIGN_LEFTMID); + pdesc->label_propertys[i]->Visible=PX_FALSE; + pdesc->edit_propertys[i]=PX_Object_EditCreate(mp,pdesc->widget_propertyscrollarea,74,3+i*24,96,24,fm); + PX_Object_GetEdit(pdesc->edit_propertys[i])->multiLines = PX_TRUE; + pdesc->edit_propertys[i]->Visible=PX_FALSE; + PX_ObjectRegisterEvent(pdesc->edit_propertys[i],PX_OBJECT_EVENT_VALUECHANGED,PX_Designer_OnPropertyChanged,pObject); + //PX_ObjectRegisterEvent(pdesc->edit_propertys[i],PX_OBJECT_EVENT_LOSTFOCUS,PX_Designer_OnPropertyRefresh,pObject); + } + + + pdesc->widget_controllers=PX_Object_WidgetCreate(mp,pObject,5,25,192,256,"controllers",PX_NULL); + if(!pdesc->widget_controllers)return PX_FALSE; + if (pdesc->pLinkWorld) + pdesc->widget_controllers->x = pdesc->pLinkWorld->surface_width - pdesc->widget_controllers->Width - 25; + + + if (!PX_VectorInitialize(mp, &pdesc->ObjectDesc, sizeof(PX_Designer_ObjectDesc), 16))return PX_FALSE; + if (!PX_VectorInitialize(mp, &pdesc->Objects, sizeof(PX_Designer_Object), 16))return PX_FALSE; + pdesc->mp=mp; + pdesc->mp_ui=mp_ui; + pdesc->mp_game=mp_world; + pdesc->fm=fm; + pdesc->selectObjectIndex=-1; + pdesc->menu=PX_Object_MenuCreate(mp,pObject,0,0,64,fm); + if(!pdesc->menu)return PX_NULL; + pdesc->messagebox=PX_Object_MessageBoxCreate(mp,pObject,fm); + if(!pdesc->messagebox)return PX_NULL; + + pdesc->list_ObjectDesc=PX_Object_ListCreate(mp,PX_Object_WidgetGetRoot(pdesc->widget_controllers),0,1, + (px_int)PX_Object_GetWidget(pdesc->widget_controllers)->renderTarget.width-1, + (px_int)PX_Object_GetWidget(pdesc->widget_controllers)->renderTarget.height-1, + PX_DESIGNER_CONTROLLER_ITEM_HEIGHT, + PX_Designer_ControllersListItemOnCreate, + pObject + ); + pdesc->designerbox=PX_Object_DesignerBoxCreate(mp,pObject,0,0,100,100); + pdesc->designerbox->Visible=PX_FALSE; + + pdesc->button_delete=PX_Object_PushButtonCreate(mp,pObject,0,0,16,16,"x",PX_NULL); + pdesc->button_delete->Visible=PX_FALSE; + PX_ObjectRegisterEvent(pdesc->button_delete,PX_OBJECT_EVENT_EXECUTE,PX_Designer_OnDeleteCurrentObject,pObject); + + pdesc->world_hscroll = PX_Object_SliderBarCreate(mp, pObject, 0, 0, 10, 10, PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL, PX_OBJECT_SLIDERBAR_STYLE_BOX); + + if (pdesc->pLinkWorld&&pdesc->pLinkWorld->world_width > pdesc->pLinkWorld->surface_width) + { + PX_Object_SliderBarSetRange(pdesc->world_hscroll, (px_int)(pdesc->pLinkWorld->surface_width / 2) - 1, (px_int)(pdesc->pLinkWorld->world_width - pdesc->pLinkWorld->surface_width / 2) + 1); + } + else + { + pdesc->world_hscroll->Visible = PX_FALSE; + } + PX_ObjectRegisterEvent(pdesc->world_hscroll, PX_OBJECT_EVENT_VALUECHANGED, PX_Designer_OnScrollHChanged, pObject); + + + pdesc->world_vscroll = PX_Object_SliderBarCreate(mp, pObject, 0, 0, 10, 10, PX_OBJECT_SLIDERBAR_TYPE_VERTICAL, PX_OBJECT_SLIDERBAR_STYLE_BOX); + if (pdesc->pLinkWorld && pdesc->pLinkWorld->world_height > pdesc->pLinkWorld->surface_height) + { + PX_Object_SliderBarSetRange(pdesc->world_vscroll, (px_int)(pdesc->pLinkWorld->surface_height / 2) - 1, (px_int)(pdesc->pLinkWorld->world_height - pdesc->pLinkWorld->surface_height / 2) + 1); + } + else + { + pdesc->world_vscroll->Visible = PX_FALSE; + } + PX_ObjectRegisterEvent(pdesc->world_vscroll, PX_OBJECT_EVENT_VALUECHANGED, PX_Designer_OnScrollVChanged, pObject); + + if (!PX_DesignerStandardInitialize(pdesc)) + { + return PX_FALSE; + } + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Designer_OnCursorDown,pObject); + PX_ObjectRegisterEvent(pdesc->designerbox,PX_OBJECT_EVENT_VALUECHANGED,PX_DesignerOnDesignerBoxValueChanged,pObject); + + pObject->Visible = PX_FALSE; + + return pObject; +} + + + +px_void PX_DesignerActivate(PX_Object* pObject) +{ + if (pObject->Type== 0x21080210) + { + PX_ObjectSetVisible(pObject, PX_TRUE); + PX_ObjectSetFocus(pObject); + } +} + +px_void PX_DesignerClose(PX_Object* pObject) +{ + if (pObject->Type == 0x21080210) + { + PX_ObjectSetVisible(pObject, PX_FALSE); + PX_ObjectClearFocus(pObject); + } +} + + + +px_bool PX_DesignerExport(PX_Object *pObject, px_string* pText) +{ + px_int i; + PX_Designer* designer; + if (pObject->Type!=0x21080210) + { + PX_ASSERT(); + return PX_FALSE; + } + designer=PX_ObjectGetDesc(PX_Designer,pObject); + + if (designer->Objects.size==0) + { + return PX_TRUE; + } + + PX_StringCatEx(pText,"{\n"); + + for (i=0;iObjects.size;i++) + { + PX_Designer_Object* pdobject = PX_VECTORAT(PX_Designer_Object, &designer->Objects, i); + PX_Designer_ObjectDesc* pobjectdesc = PX_VECTORAT(PX_Designer_ObjectDesc, &designer->ObjectDesc, pdobject->descIndex); + px_int j; + if (!pobjectdesc) + { + PX_ASSERT(); + goto _ERROR;; + } + //Object Name + if(!PX_StringCatEx(pText,"\""))goto _ERROR; + if(!PX_StringCatEx(pText,pobjectdesc->Name))goto _ERROR; + if(!PX_StringCatEx(pText,"\":{\n"))goto _ERROR; + + //Object Type + switch (pdobject->type) + { + case PX_DESIGNER_OBJECT_TYPE_UI: + if(!PX_StringCatEx(pText,"\"type\":\"ui\",\n"))goto _ERROR; + break; + case PX_DESIGNER_OBJECT_TYPE_GAME: + if(!PX_StringCatEx(pText,"\"type\":\"game\",\n"))goto _ERROR; + break; + case PX_DESIGNER_OBJECT_TYPE_FUNCTION: + PX_ASSERT(); + break; + default: + return PX_FALSE; + } + + for (j=0;jproperties);j++) + { + if (!pobjectdesc->properties[j].Name[0]) + { + break; + } + + if (pobjectdesc->properties[j].getbool) + { + if (pobjectdesc->properties[j].getbool(pdobject->pObject)) + { + if(!PX_StringCatEx(pText,"\""))goto _ERROR; + if(!PX_StringCatEx(pText,pobjectdesc->properties[j].Name))goto _ERROR; + if(!PX_StringCatEx(pText,"\":true"))goto _ERROR; + } + else + { + if(!PX_StringCatEx(pText,"\""))goto _ERROR; + if(!PX_StringCatEx(pText,pobjectdesc->Name))goto _ERROR; + if(!PX_StringCatEx(pText,"\":false"))goto _ERROR; + } + } + else if (pobjectdesc->properties[j].getfloat) + { + if(!PX_StringCatEx(pText,"\""))goto _ERROR; + if(!PX_StringCatEx(pText,pobjectdesc->properties[j].Name))goto _ERROR; + if(!PX_StringCatEx(pText,"\":"))goto _ERROR; + + if(!PX_StringCatEx(pText,PX_ftos(pobjectdesc->properties[j].getfloat(pdobject->pObject),2).data))goto _ERROR; + } + else if (pobjectdesc->properties[j].getint) + { + if(!PX_StringCatEx(pText,"\""))goto _ERROR; + if(!PX_StringCatEx(pText,pobjectdesc->properties[j].Name))goto _ERROR; + if(!PX_StringCatEx(pText,"\":"))goto _ERROR; + + if(!PX_StringCatEx(pText,PX_itos(pobjectdesc->properties[j].getint(pdobject->pObject),10).data))goto _ERROR; + } + else if (pobjectdesc->properties[j].getstring) + { + px_string str; + if(!PX_StringCatEx(pText,"\""))goto _ERROR; + if(!PX_StringCatEx(pText,pobjectdesc->properties[j].Name))goto _ERROR; + if(!PX_StringCatEx(pText,"\":\""))goto _ERROR; + PX_StringInitialize(designer->mp, &str); + pobjectdesc->properties[j].getstring(pdobject->pObject, &str); + + if (!PX_StringCatEx(pText,str.buffer )) + { + PX_StringFree(&str); + goto _ERROR; + } + PX_StringFree(&str); + if(!PX_StringCatEx(pText,"\""))goto _ERROR; + } + if(!PX_StringCatEx(pText,",\n"))goto _ERROR; + } + PX_StringBackspaceEx(pText); + PX_StringBackspaceEx(pText); + PX_StringCatEx(pText,"\n},\n"); + } + PX_StringBackspaceEx(pText); + PX_StringBackspaceEx(pText); + + PX_StringCatEx(pText,"\n}\n"); + + return PX_TRUE; +_ERROR: + PX_StringClear(pText); + return PX_FALSE; + +} + +px_bool PX_DesignerImport(PX_Object* pObject, const px_char* pText) +{ + PX_Json Json; + px_int i; + PX_Designer * pdesigner=PX_ObjectGetDesc(PX_Designer,pObject); + if(!PX_JsonInitialize(pdesigner->mp,&Json))return PX_FALSE; + if (!PX_JsonParse(&Json,pText)) + { + goto _ERROR; + } + for (i=0;itype!=PX_JSON_VALUE_TYPE_OBJECT) + { + continue; + } + pObjectDesc=PX_NULL; + for (j=0;jObjectDesc.size;j++) + { + PX_Designer_ObjectDesc *pEnumObjectDesc=PX_VECTORAT(PX_Designer_ObjectDesc,&pdesigner->ObjectDesc,j); + if (PX_strequ(pJsonValue->name.buffer,pEnumObjectDesc->Name)) + { + pObjectDesc=pEnumObjectDesc; + descindex=j; + break; + } + } + if (pObjectDesc) + { + PX_Json_Value *TypeValue=PX_JsonGetObjectValue(pJsonValue,"type"); + PX_DESIGNER_OBJECT_TYPE type; + PX_Object *pNewObject=PX_NULL; + if (TypeValue&&TypeValue->type==PX_JSON_VALUE_TYPE_STRING) + { + if (PX_strequ(TypeValue->_string.buffer,"ui")) + { + type=PX_DESIGNER_OBJECT_TYPE_UI; + } + else if (PX_strequ(TypeValue->_string.buffer,"game")) + { + type=PX_DESIGNER_OBJECT_TYPE_GAME; + } + else + { + type=PX_DESIGNER_OBJECT_TYPE_FUNCTION; + } + } + + + switch (type) + { + case PX_DESIGNER_OBJECT_TYPE_UI: + { + PX_Designer_Object dobject; + pNewObject=pObjectDesc->createfunc(pdesigner->mp_ui,pdesigner->pLinkObject,0,0,100,100,pdesigner->fm); + dobject.pObject = pNewObject; + dobject.type = PX_DESIGNER_OBJECT_TYPE_UI; + dobject.descIndex = descindex; + PX_VectorPushback(&pdesigner->Objects, &dobject); + } + break; + case PX_DESIGNER_OBJECT_TYPE_GAME: + { + PX_Designer_Object dobject; + pNewObject=pObjectDesc->createfunc(pdesigner->mp_game,PX_NULL,0,0,100,100,pdesigner->fm); + PX_WorldAddObject(pdesigner->pLinkWorld, pNewObject); + dobject.pObject = pNewObject; + dobject.type = PX_DESIGNER_OBJECT_TYPE_GAME; + dobject.descIndex = descindex; + PX_VectorPushback(&pdesigner->Objects, &dobject); + } + break; + default: + break; + } + + if (pNewObject) + { + for(j=0;jproperties);j++) + { + if (pObjectDesc->properties[j].Name[0]=='\0') + { + break; + } + if (pObjectDesc->properties[j].setbool) + { + PX_Json_Value *pvalue=PX_JsonGetObjectValue(pJsonValue,pObjectDesc->properties[j].Name); + if (pvalue&&pvalue->type==PX_JSON_VALUE_TYPE_BOOLEAN) + { + pObjectDesc->properties[j].setbool(pNewObject,pvalue->_boolean); + } + } + else if(pObjectDesc->properties[j].setfloat) + { + PX_Json_Value *pvalue=PX_JsonGetObjectValue(pJsonValue,pObjectDesc->properties[j].Name); + if (pvalue&&pvalue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + pObjectDesc->properties[j].setfloat(pNewObject,(px_float)pvalue->_number); + } + } + else if(pObjectDesc->properties[j].setint) + { + PX_Json_Value *pvalue=PX_JsonGetObjectValue(pJsonValue,pObjectDesc->properties[j].Name); + if (pvalue&&pvalue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + pObjectDesc->properties[j].setint(pNewObject,(px_int)pvalue->_number); + } + } + else if(pObjectDesc->properties[j].setstring) + { + PX_Json_Value *pvalue=PX_JsonGetObjectValue(pJsonValue,pObjectDesc->properties[j].Name); + if (pvalue&&pvalue->type==PX_JSON_VALUE_TYPE_STRING) + { + pObjectDesc->properties[j].setstring(pNewObject,pvalue->_string.buffer); + } + } + } + } + + } + } + + PX_JsonFree(&Json); + return PX_TRUE; +_ERROR: + PX_JsonFree(&Json); + return PX_FALSE; +} diff --git a/UI/PainterEngine/architecture/PainterEngine_Designer.h b/UI/PainterEngine/architecture/PainterEngine_Designer.h new file mode 100644 index 0000000..41ad065 --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_Designer.h @@ -0,0 +1,96 @@ +#ifndef PX_DESIGNER_H +#define PX_DESIGNER_H + +#include "../kernel/PX_Kernel.h" + +#define PX_DESIGNER_NAME_LENGTH 48 +#define PX_DESIGNER_MAX_PROPERTYS 32 +#define PX_DESIGNER_CONTROLLER_ITEM_HEIGHT 20 +typedef enum +{ + PX_DESIGNER_OBJECT_TYPE_UI, + PX_DESIGNER_OBJECT_TYPE_GAME, + PX_DESIGNER_OBJECT_TYPE_FUNCTION, +}PX_DESIGNER_OBJECT_TYPE; + + +typedef PX_Object *(*px_designer_createfunc)(px_memorypool *mp,PX_Object *pparent,px_float x,px_float y,px_float width,px_float height,PX_FontModule *fm); + +typedef px_float (*px_designer_getproperty_float)(PX_Object *pObject); +typedef px_int (*px_designer_getproperty_int)(PX_Object *pObject); +typedef px_bool (*px_designer_getproperty_string)(PX_Object *pObject,px_string *str); +typedef px_bool (*px_designer_getproperty_bool)(PX_Object *pObject); + +typedef px_void (*px_designer_setproperty_float)(PX_Object *pObject,px_float v); +typedef px_void (*px_designer_setproperty_int)(PX_Object *pObject,px_int v); +typedef px_void (*px_designer_setproperty_string)(PX_Object *pObject,const px_char v[]); +typedef px_void (*px_designer_setproperty_bool)(PX_Object *pObject,px_bool v); + +typedef struct +{ + px_char Name[PX_DESIGNER_NAME_LENGTH]; + //get + px_designer_getproperty_float getfloat; + px_designer_getproperty_int getint; + px_designer_getproperty_string getstring; + px_designer_getproperty_bool getbool; + + //set + px_designer_setproperty_float setfloat; + px_designer_setproperty_int setint; + px_designer_setproperty_string setstring; + px_designer_setproperty_bool setbool; + +}PX_Designer_Object_property; + + + +typedef struct +{ + px_char Name[PX_DESIGNER_NAME_LENGTH]; + px_designer_createfunc createfunc; + PX_DESIGNER_OBJECT_TYPE type; + PX_Designer_Object_property properties[PX_DESIGNER_MAX_PROPERTYS]; +}PX_Designer_ObjectDesc; + + +typedef struct +{ + PX_Object *pObject; + px_int descIndex; + PX_DESIGNER_OBJECT_TYPE type; +}PX_Designer_Object; + + +typedef struct +{ + px_memorypool *mp,*mp_ui,*mp_game; + PX_Object *pLinkObject; + PX_World *pLinkWorld; + + PX_Object *widget_controllers; + PX_Object *widget_property,*widget_propertyscrollarea; + PX_Object* world_hscroll, *world_vscroll; + PX_Object* designerbox; + PX_Object* list_ObjectDesc; + PX_Object* button_delete; + PX_Object* messagebox; + PX_Object* menu,*menu_run,*menu_exit,menu_window_controllers,menu_window_properties; + PX_Object* label_propertys[PX_DESIGNER_MAX_PROPERTYS]; + PX_Object* edit_propertys[PX_DESIGNER_MAX_PROPERTYS]; + PX_FontModule *fm; + px_int allocID; + px_int selectObjectIndex; + px_bool showsliderbar; + px_float lastcursorx; + px_float lastcursory; + px_vector ObjectDesc; + px_vector Objects; +}PX_Designer; + +PX_Object * PX_DesignerCreate(px_memorypool *mp,px_memorypool *mp_ui,px_memorypool*mp_world,PX_Object *pparent,PX_Object *pLinkObject,PX_World *pLinkWorld,PX_FontModule *fm); +px_void PX_DesignerActivate(PX_Object* pObject); +px_void PX_DesignerClose(PX_Object* pObject); +px_bool PX_DesignerExport(PX_Object* pObject, px_string* pText); +px_bool PX_DesignerImport(PX_Object* pObject, const px_char* pText); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/architecture/PainterEngine_Executer.c b/UI/PainterEngine/architecture/PainterEngine_Executer.c new file mode 100644 index 0000000..cbb65f6 --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_Executer.c @@ -0,0 +1,578 @@ +#include "PainterEngine_Executer.h" + +static char const fox_executer_logo[]= +{ +#include "PainterEngine_FoxLogo.h" +}; + +px_void PX_ExecuterUpdateEx(PX_Executer *pExecute) +{ + px_int i,y=10; + PX_ExecuterColumn *pCc; + + while (pExecute->pObjects.size>pExecute->max_column) + { + pCc=(PX_VECTORAT(PX_ExecuterColumn,&pExecute->pObjects,0)); + PX_ObjectDelete(pCc->Object); + PX_VectorErase(&pExecute->pObjects,0); + } + + for (i=0;ipObjects.size;i++) + { + pCc=(PX_VECTORAT(PX_ExecuterColumn,&pExecute->pObjects,i)); + + switch(pCc->Object->Type) + { + case PX_OBJECT_TYPE_AUTOTEXT: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=PX_Object_AutoTextGetHeight(pCc->Object); + } + break; + case PX_OBJECT_TYPE_IMAGE: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + case PX_OBJECT_TYPE_ANIMATION: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + default: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + } + } + PX_ObjectSetPosition(pExecute->Input,0,(px_float)y,0); +} +PX_Object * PX_ExecuterPrintText(PX_Executer *pExecute,const px_char *text) +{ + PX_ExecuterColumn obj; + PX_Object *pObject=PX_Object_AutoTextCreate(&pExecute->runtime->mp_ui,(pExecute->Area),0,0,pExecute->runtime->surface_width-1,PX_NULL); + + if (pObject) + { + obj.Object=pObject; + obj.id=pExecute->id++; + PX_Object_AutoTextSetTextColor(pObject,PX_COLOR(255,0,255,0)); + PX_Object_AutoTextSetText(pObject,text); + PX_VectorPushback(&pExecute->pObjects,&obj); + PX_ExecuterUpdateEx(pExecute); + PX_Object_ScrollAreaMoveToBottom(pExecute->Area); + } + return pObject; +} + +PX_Object * PX_ExecuterLastPrintText(PX_Executer *pExecute,const px_char *text) +{ + PX_ExecuterColumn *pobjColumn; + PX_Object *pObject; + if (pExecute->pObjects.size==0) + { + return PX_NULL; + } + pobjColumn=PX_VECTORLAST(PX_ExecuterColumn,&pExecute->pObjects); + pObject=pobjColumn->Object; + if (pObject->Type==PX_OBJECT_TYPE_AUTOTEXT) + { + PX_Object_AutoTextSetTextColor(pObject,PX_COLOR(255,0,255,0)); + PX_Object_AutoTextSetText(pObject,text); + return pObject; + } + else + return PX_NULL; + +} + +PX_Object * PX_ExecuterPrintImage(PX_Executer *pExecute,const px_char *res_image_key) +{ + PX_ExecuterColumn obj; + PX_Resource *pimageRes; + PX_Object *pObject; + if((pimageRes=PX_ResourceLibraryGet(&pExecute->runtime->ResourceLibrary,res_image_key))!=PX_NULL) + { + if (pimageRes->Type==PX_RESOURCE_TYPE_TEXTURE) + { + pObject=PX_Object_ImageCreate(&pExecute->runtime->mp_ui,pExecute->Area,0,0,pimageRes->texture.width,pimageRes->texture.height,&pimageRes->texture); + PX_Object_ImageSetAlign(pObject,PX_ALIGN_LEFTTOP); + PX_ObjectSetSize(pObject,(px_float)pimageRes->texture.width,(px_float)pimageRes->texture.height,0); + obj.Object=pObject; + obj.id=pExecute->id++; + PX_VectorPushback(&pExecute->pObjects,&obj); + PX_ExecuterUpdateEx(pExecute); + PX_Object_ScrollAreaMoveToBottom(pExecute->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} +px_bool PX_ExecuterVM_LastPrint(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Executer *pExecute=(PX_Executer *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ExecuterLastPrintText(pExecute,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ExecuterColumn,&pExecute->pObjects,pExecute->pObjects.size-1)->id)); + return PX_TRUE; +} + +px_bool PX_ExecuterVM_Print(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Executer *pExecute=(PX_Executer *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ExecuterPrintText(pExecute,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ExecuterColumn,&pExecute->pObjects,pExecute->pObjects.size-1)->id)); + return PX_TRUE; +} +px_bool PX_ExecuterVM_PrintImage(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Executer *pExecute=(PX_Executer *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ExecuterPrintImage(pExecute,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ExecuterColumn,&pExecute->pObjects,pExecute->pObjects.size-1)->id)); + return PX_TRUE; +} + + +px_bool PX_ExecuterVM_Sleep(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Executer *pExecute=(PX_Executer *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + pExecute->Sleep[Ins->T]=PX_ScriptVM_STACK(Ins,0)._int; + PX_ScriptVM_ThreadSuspend(Ins,Ins->T); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; +} + +px_bool PX_ExecuterVM_Rand(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_rand()%0x7fffffff)); + return PX_TRUE; +} + +px_bool PX_ExecuterVM_Sin(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_float((px_float)PX_sind(PX_ScriptVM_STACK(Ins,0)._float))); + return PX_TRUE; +} + +px_bool PX_ExecuterVM_Cos(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_float((px_float)PX_cosd(PX_ScriptVM_STACK(Ins,0)._float))); + return PX_TRUE; +} + +px_bool PX_ExecuterVM_Gets(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Executer *pExecute=(PX_Executer *)userptr; + Ins->pThread[Ins->T].suspend=PX_TRUE; + pExecute->bInput=PX_TRUE; + return PX_TRUE; +} + +px_void PX_ExecuterClear(PX_Executer *pExecute) +{ + PX_ExecuterColumn *pCc; + px_int i; + for (i=0;ipObjects.size;i++) + { + pCc=(PX_VECTORAT(PX_ExecuterColumn,&pExecute->pObjects,i)); + PX_ObjectDelete(pCc->Object); + } + PX_VectorClear(&pExecute->pObjects); +} + +px_bool PX_ExecuterVM_Clear(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Executer *pExecute=(PX_Executer *)userptr; + PX_ExecuterClear(pExecute); + return PX_TRUE; +} + + +px_bool PX_ExecuterVM_CreateThread(PX_ScriptVM_Instance *Ins,px_void *userptr) +{ + PX_Executer *pExecute=(PX_Executer *)userptr; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if(!PX_ScriptVM_InstanceBeginThreadFunction(&pExecute->VM_Instance,PX_ScriptVM_InstanceGetFreeThreadId(Ins),PX_ScriptVM_STACK(Ins,0)._string.buffer,PX_NULL,0)) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + } + return PX_TRUE; +} + + + + +px_bool PX_ExecuterRunScipt(PX_Executer *pExecute,const px_char *pshellstr) +{ + px_memory bin; + PX_SCRIPT_LIBRARY lib; + px_string asmcodeString; + px_memorypool mp_calc; + const px_char stdio[]="#name \"stdlib.h\"\n\ + host int print(string s);\n\ + host int printImage(string key);\n\ + host string gets();\n\ + host void clear();\n\ + host void sleep(int millionsecond);\n\ + host int rand();\n\ + host float sin(float x);\n\ + host float cos(float x);\n\ + host int lastprint(string s);\n\ + host int createthread(string callname);\n\ + "; + mp_calc=MP_Create(MP_Malloc(&pExecute->runtime->mp,PE_MEMORY_CALC_SIZE),PE_MEMORY_CALC_SIZE); + if(mp_calc.StartAddr==PX_NULL) return PX_FALSE; + MP_Reset(&mp_calc); + PX_MemoryInitialize(&mp_calc,&bin); + + if(!PX_ScriptCompilerInitialize(&lib,&mp_calc)) + { + MP_Free(&pExecute->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + if(!PX_ScriptCompilerLoad(&lib,stdio)) + { + MP_Free(&pExecute->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + if(!PX_ScriptCompilerLoad(&lib,pshellstr)) + { + MP_Free(&pExecute->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + + PX_StringInitialize(&mp_calc,&asmcodeString); + if(PX_ScriptCompilerCompile(&lib,"main",&asmcodeString,128)) + { + PX_ScriptAsmOptimization(&asmcodeString); + + if(!PX_ScriptAsmCompile(&mp_calc,asmcodeString.buffer,&bin)) + { + MP_Free(&pExecute->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + } + else + { + MP_Free(&pExecute->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&lib); + + //Load + if(!PX_ScriptVM_InstanceInitialize(&pExecute->VM_Instance,&pExecute->runtime->mp_game,bin.buffer,bin.usedsize)) + { + MP_Free(&pExecute->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + PX_MemoryFree(&bin); + MP_Free(&pExecute->runtime->mp,mp_calc.StartAddr); + //RegistryFunctions + + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"print",PX_ExecuterVM_Print,pExecute);//Print + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"printImage",PX_ExecuterVM_PrintImage,pExecute);//Print Image + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"gets",PX_ExecuterVM_Gets,pExecute);//Gets + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"clear",PX_ExecuterVM_Clear,pExecute);//Clear + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"sleep",PX_ExecuterVM_Sleep,pExecute);//Sleep + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"rand",PX_ExecuterVM_Rand,pExecute);//Rand + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"sin",PX_ExecuterVM_Sin,pExecute);//Rand + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"cos",PX_ExecuterVM_Cos,pExecute);//Rand + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"lastprint",PX_ExecuterVM_LastPrint,pExecute);//lastprint + PX_ScriptVM_RegistryHostFunction(&pExecute->VM_Instance,"createthread",PX_ExecuterVM_CreateThread,pExecute);//lastprint + ////////////////////////////////////////////////////////////////////////// + //sleep + if (pExecute->Sleep) + { + MP_Free(&pExecute->runtime->mp_game,pExecute->Sleep); + } + pExecute->Sleep=(px_dword *)MP_Malloc(&pExecute->runtime->mp_game,pExecute->VM_Instance.maxThreadCount*sizeof(px_dword)); + + + ////////////////////////////////////////////////////////////////////////// + + if(!PX_ScriptVM_InstanceRunFunction(&pExecute->VM_Instance,0,"_BOOT",PX_NULL,0)) + { + + return PX_FALSE; + } + + if(!PX_ScriptVM_InstanceBeginThreadFunction(&pExecute->VM_Instance,0,"MAIN",PX_NULL,0)) + { + return PX_FALSE; + } + + + return PX_TRUE; + +} + + +px_bool PX_ExecuterLoadScipt(PX_Executer* pExecuter, const px_char* pshellstr) +{ + return PX_ExecuterRunScipt(pExecuter, pshellstr); +} + +px_bool PX_ExecuterRegistryHostFunction(PX_Executer *pExecuter,const px_char Name[],PX_ScriptVM_Function_Modules function,px_void *userptr) +{ + return PX_ScriptVM_RegistryHostFunction(&pExecuter->VM_Instance,Name,function,userptr); +} + +px_void PX_ExecuterOnEnter(PX_Object *Obj,PX_Object_Event e,px_void *user_ptr) +{ + PX_Executer *pExecute=(PX_Executer *)Obj->User_ptr; + PX_Object_Edit *pEdit=PX_Object_GetEdit(pExecute->Input); + + if (!pExecute->Input->Visible) + { + return; + } + + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (PX_Object_Event_GetKeyDown(e)=='\r') + { + PX_ScriptVM_RET(&pExecute->VM_Instance,PX_ScriptVM_Variable_const_string(pEdit->text.buffer)); + PX_ExecuterPrintText(pExecute,pEdit->text.buffer); + PX_Object_EditSetText(pExecute->Input,""); + pExecute->bInput=PX_FALSE; + pExecute->VM_Instance.pThread[0].suspend=PX_FALSE; + + } + } + + if (e.Event==PX_OBJECT_EVENT_CURSORRDOWN) + { + PX_Object_EditSetFocus(pExecute->Input,PX_TRUE); + } +} + +px_void PX_ExecuterOnMouseDown(PX_Object *Obj,PX_Object_Event e,px_void *user_ptr) +{ + PX_Executer *pExecute=(PX_Executer *)Obj->User_ptr; + if (e.Event==PX_OBJECT_EVENT_CURSORDOWN) + { + PX_Object_EditSetFocus(pExecute->Input,PX_TRUE); + } +} + + +PX_Object * PX_ExecuterShowImage(PX_Executer *pExecute,const px_char *res_image_key) +{ + PX_ExecuterColumn obj; + PX_Resource *pimageRes; + PX_Object *pObject; + if((pimageRes=PX_ResourceLibraryGet(&pExecute->runtime->ResourceLibrary,res_image_key))!=PX_NULL) + { + if (pimageRes->Type==PX_RESOURCE_TYPE_TEXTURE) + { + pObject=PX_Object_ImageCreate(&pExecute->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pExecute->Area),0,0,pimageRes->texture.width,pimageRes->texture.height,&pimageRes->texture); + PX_Object_ImageSetAlign(pObject,PX_ALIGN_LEFTTOP); + obj.Object=pObject; + obj.id=pExecute->id++; + PX_VectorPushback(&pExecute->pObjects,&obj); + PX_ExecuterUpdateEx(pExecute); + PX_Object_ScrollAreaMoveToBottom(pExecute->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + + + +px_bool PX_ExecuterInitialize(PX_Runtime *runtime,PX_Executer *pExecute) +{ + //console initialize + PX_memset(pExecute,0,sizeof(PX_Executer)); + + pExecute->runtime=runtime; + pExecute->show=PX_TRUE; + pExecute->max_column=PX_EXECUTER_DEFAULT_MAX_COLUMN; + pExecute->column=0; + if(!(pExecute->Root=PX_ObjectCreate(&pExecute->runtime->mp_ui,0,0,0,0,0,0,0))) return PX_FALSE; + if(!(pExecute->Area=PX_Object_ScrollAreaCreate(&pExecute->runtime->mp_ui,pExecute->Root,0,0,pExecute->runtime->surface_width,pExecute->runtime->surface_height))) return PX_FALSE; + + + pExecute->Area->User_ptr=pExecute; + PX_ObjectRegisterEvent(pExecute->Area,PX_OBJECT_EVENT_KEYDOWN,PX_ExecuterOnEnter,PX_NULL); + PX_ObjectRegisterEvent(pExecute->Area,PX_OBJECT_EVENT_CURSORDOWN,PX_ExecuterOnMouseDown,PX_NULL); + PX_Object_ScrollAreaSetBorder(pExecute->Area,PX_FALSE); + if(!(pExecute->Input=PX_Object_EditCreate(&pExecute->runtime->mp_ui,(pExecute->Area),0,0,pExecute->runtime->surface_width-1,PX_FontGetCharactorHeight()+4,PX_NULL))) return PX_FALSE; + PX_Object_EditSetTextColor(pExecute->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetCursorColor(pExecute->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetTextColor(pExecute->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetBorderColor(pExecute->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetOffset(pExecute->Input,2,3); + PX_Object_EditSetLimit(pExecute->Input,"zxcvbnm,./asdfghjkl;'qwertyyuiop[]\\`1234567890-=ZXCVBNM<>?ASDFGHJKL:\"QWERTYUIOP{}|~!@#$%^&*()_+"); + PX_Object_ScrollAreaSetBkColor(pExecute->Area,PX_COLOR(255,0,0,0)); + pExecute->id=1; + + PX_VectorInitialize(&pExecute->runtime->mp_ui,&pExecute->pObjects,sizeof(PX_ExecuterColumn),PX_EXECUTER_DEFAULT_MAX_COLUMN); + + + ////////////////////////////////////////////////////////////////////////// + //logo + + if(!PX_ResourceLibraryLoad(&pExecute->runtime->ResourceLibrary,PX_RESOURCE_TYPE_TEXTURE,(px_byte *)fox_executer_logo,sizeof(fox_executer_logo),"fox_executer_logo"))return PX_FALSE; + + PX_ExecuterShowImage(pExecute,"fox_executer_logo"); + PX_ExecuterShowImage(pExecute,"console_logo"); + PX_ExecuterPrintText(pExecute,"----------------------------------------"); + PX_ExecuterPrintText(pExecute,"-PainterEngine Script Executer -\n-Code By DBinary Build on v2021 -\n-Refer To:www.GitHub.com/matrixcascade -"); + PX_ExecuterPrintText(pExecute,"----------------------------------------"); + + + return PX_TRUE; +} +px_void PX_ExecuterPostEvent(PX_Executer *pExecute,PX_Object_Event e) +{ + if(pExecute->show) + { + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (PX_Object_Event_GetKeyDown(e)==36) + { + PX_ExecuterShow(pExecute,PX_FALSE); + return; + } + } + + if (e.Event!=PX_OBJECT_EVENT_CURSORMOVE) + { + PX_ObjectPostEvent(pExecute->Root,e); + } + } + else + { + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (PX_Object_Event_GetKeyDown(e)==36) + { + PX_ExecuterShow(pExecute,PX_TRUE); + } + } + } +} +px_void PX_ExecuterUpdate(PX_Executer *pExecute,px_dword elapsed) +{ + px_int i; + + pExecute->Area->Width=(px_float)pExecute->runtime->surface_width; + pExecute->Area->Height=(px_float)pExecute->runtime->surface_height; + pExecute->Input->Width=(px_float)pExecute->runtime->surface_width-1; + PX_ObjectUpdate(pExecute->Area,elapsed); + + if (pExecute->bInput) + { + pExecute->Input->Visible=PX_TRUE; + } + else + { + pExecute->Input->Visible=PX_FALSE; + } + + if (pExecute->VM_Instance.binsize) + { + for (i=0;iVM_Instance.maxThreadCount;i++) + { + if (pExecute->VM_Instance.pThread[i].Activated) + { + if (pExecute->Sleep[i]==0) + { + PX_ScriptVM_InstanceRun(&pExecute->VM_Instance,0xffff); + } + else + { + if (pExecute->Sleep[i]<=elapsed) + { + pExecute->VM_Instance.pThread[i].suspend=PX_FALSE; + pExecute->Sleep[i]=0; + } + else + { + pExecute->VM_Instance.pThread[i].suspend=PX_TRUE; + pExecute->Sleep[i]-=elapsed; + } + } + + } + } + + } + +} + + +px_void PX_ExecuterShow(PX_Executer *pExecute,px_bool b) +{ + pExecute->show=b; +} + +px_void PX_ExecuterRender(PX_Executer *pExecute,px_dword elapsed) +{ + if(pExecute->show) + { + PX_ObjectRender(&pExecute->runtime->RenderSurface,pExecute->Area,elapsed); + } +} + diff --git a/UI/PainterEngine/architecture/PainterEngine_Executer.h b/UI/PainterEngine/architecture/PainterEngine_Executer.h new file mode 100644 index 0000000..244b5b2 --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_Executer.h @@ -0,0 +1,46 @@ +#ifndef PX_EXECUTER_H +#define PX_EXECUTER_H + +#include "PainterEngine_Runtime.h" + +#define PX_EXECUTER_DEFAULT_MAX_COLUMN 48 +#define PX_EXECUTER_INPUT_CONTENT_SIZE 1024 +#define PX_EXECUTER_THREAD_FRAMEINSTR 1024 +typedef struct +{ + PX_Object *Root; + PX_Object *Area; + PX_Object *Input; + px_int max_column; + px_int column; + px_bool show; + px_vector pObjects; + px_int id; + PX_Runtime *runtime; + px_char Input_Content[PX_EXECUTER_INPUT_CONTENT_SIZE]; + px_dword *Sleep; + px_bool bInput; + PX_ScriptVM_Instance VM_Instance; +}PX_Executer; + +typedef struct +{ + px_int id; + PX_Object *Object; +}PX_ExecuterColumn; + + +px_bool PX_ExecuterInitialize(PX_Runtime *runtime,PX_Executer *pExecuter); +px_void PX_ExecuterShow(PX_Executer *pExecuter,px_bool bShow); +px_void PX_ExecuterPostEvent(PX_Executer *pExecuter,PX_Object_Event e); +px_void PX_ExecuterUpdate(PX_Executer *pExecuter,px_dword elapsed); +px_void PX_ExecuterRender(PX_Executer *pExecuter,px_dword elapsed); +PX_Object * PX_ExecuterPrintText(PX_Executer *pExecuter,const px_char *text); +PX_Object * PX_ExecuterPrintImage(PX_Executer *pExecuter,const px_char *res_image_key); +px_void PX_ExecuterClear(PX_Executer *pExecuter); +px_bool PX_ExecuterRunScipt(PX_Executer *pExecuter,const px_char *pshellstr); +px_bool PX_ExecuterLoadScipt(PX_Executer* pExecuter, const px_char* pshellstr); +px_bool PX_ExecuterRegistryHostFunction(PX_Executer *pExecuter,const px_char Name[],PX_ScriptVM_Function_Modules function,px_void *userptr); + +#endif + diff --git a/UI/PainterEngine/architecture/PainterEngine_FoxLogo.h b/UI/PainterEngine/architecture/PainterEngine_FoxLogo.h new file mode 100644 index 0000000..86a3d7f --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_FoxLogo.h @@ -0,0 +1 @@ +0x54,0x52,0x41,0x57,0x40,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3a,0x1,0x1,0x3d,0x19,0x2,0x1,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e,0x0,0x0,0x31,0xca,0x89,0x5e,0xff,0xed,0xb7,0x7d,0xff,0x7c,0x38,0x26,0xaa,0x11,0x0,0x0,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x59,0x1f,0x15,0x6c,0xff,0xe6,0x9d,0xff,0xff,0xfb,0xab,0xff,0xff,0xf3,0xa5,0xff,0xd2,0x91,0x63,0xff,0x32,0xa,0x7,0x65,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x86,0x42,0x2d,0x9d,0xff,0xe8,0x9e,0xff,0xfb,0xcb,0x8b,0xff,0xfd,0xd1,0x8f,0xff,0xff,0xf7,0xa9,0xff,0xff,0xd4,0x91,0xff,0x80,0x3b,0x28,0xba,0x3,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4e,0x4,0x3,0x26,0x52,0x1a,0x11,0x6f,0x48,0x16,0xf,0x63,0x37,0x5,0x3,0x4d,0x28,0x0,0x0,0x34,0x7,0x0,0x0,0x15,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8d,0x5b,0x3e,0xaf,0xff,0xfc,0xab,0xff,0xfc,0xcc,0x8b,0xff,0xf9,0xcb,0x8a,0xff,0xfa,0xc8,0x89,0xff,0xff,0xe6,0x9d,0xff,0xff,0xf4,0xa6,0xff,0x89,0x5d,0x3f,0xdb,0x34,0x0,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x49,0xe,0x9,0x7a,0xf3,0xbc,0x81,0xff,0xff,0xe4,0x9b,0xff,0xff,0xd2,0x8d,0xff,0xec,0xb7,0x7c,0xff,0xc8,0x90,0x62,0xfa,0xb3,0x79,0x52,0xe5,0x99,0x61,0x42,0xc3,0x56,0x1c,0x13,0x83,0x7f,0x40,0x2c,0xd7,0xeb,0xb8,0x7e,0xff,0xff,0xda,0x94,0xff,0xff,0xe2,0x99,0xff,0xfc,0xce,0x8c,0xff,0xf9,0xc7,0x88,0xff,0xff,0xdc,0x95,0xff,0xff,0xf7,0xa9,0xff,0x92,0x52,0x38,0xc7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x31,0x0,0x0,0xd,0xa1,0x61,0x42,0xe1,0xff,0xf9,0xa9,0xff,0xed,0xc7,0x86,0xff,0xd7,0xa0,0x6b,0xff,0xf0,0xb9,0x78,0xff,0xff,0xe0,0x90,0xff,0xff,0xff,0xb1,0xff,0xff,0xfc,0xae,0xff,0xff,0xe3,0x9b,0xff,0xe2,0xad,0x77,0xff,0xb9,0x81,0x58,0xff,0xb9,0x83,0x59,0xff,0xd1,0x9b,0x6a,0xff,0xfc,0xd6,0x92,0xff,0xff,0xde,0x97,0xff,0xf9,0xc7,0x87,0xff,0xff,0xde,0x97,0xff,0xff,0xec,0xa1,0xff,0x6a,0x33,0x23,0x9f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x35,0x0,0x0,0x33,0xe2,0xbc,0x80,0xff,0xff,0xe4,0x97,0xff,0xa7,0x6e,0x59,0xff,0xc9,0xa1,0x95,0xff,0xce,0xa4,0x8e,0xff,0xc5,0x95,0x79,0xff,0xbb,0x82,0x57,0xff,0xe0,0xaa,0x6a,0xff,0xff,0xe9,0x9b,0xff,0xff,0xea,0xa1,0xff,0xff,0xdd,0x97,0xff,0xe8,0xb4,0x7b,0xff,0xc1,0x8a,0x5e,0xff,0xb4,0x7b,0x54,0xff,0xe1,0xb1,0x78,0xff,0xff,0xe5,0x9c,0xff,0xfb,0xca,0x8a,0xff,0xff,0xed,0xa2,0xff,0xe7,0xbd,0x81,0xff,0x1f,0x0,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x52,0x2,0x1,0x48,0xed,0xc5,0x85,0xff,0xe1,0xab,0x70,0xff,0xc9,0xa1,0x90,0xff,0xff,0xff,0xea,0xff,0xff,0xf5,0xd9,0xff,0xff,0xe4,0xcf,0xff,0xd0,0xa7,0x99,0xff,0xa8,0x74,0x60,0xff,0xc1,0x89,0x5b,0xff,0xf3,0xc7,0x80,0xff,0xff,0xdc,0x96,0xff,0xff,0xd4,0x91,0xff,0xff,0xe6,0x9d,0xff,0xe7,0xb7,0x7d,0xff,0xb1,0x77,0x51,0xff,0xc5,0x8e,0x61,0xff,0xff,0xda,0x95,0xff,0xff,0xe3,0x9b,0xff,0xff,0xff,0xb8,0xff,0x94,0x63,0x43,0xbb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x71,0x17,0x10,0x5c,0xf4,0xd2,0x8d,0xff,0xdd,0xaa,0x72,0xff,0xd1,0xaa,0x97,0xff,0xff,0xf0,0xd3,0xff,0xfb,0xdb,0xbf,0xff,0xfe,0xdc,0xc0,0xff,0xff,0xf7,0xd8,0xff,0xff,0xf0,0xd8,0xff,0xd0,0xa4,0x96,0xff,0xb2,0x7a,0x5c,0xff,0xeb,0xbc,0x7c,0xff,0xff,0xd9,0x94,0xff,0xf9,0xc8,0x89,0xff,0xff,0xdd,0x97,0xff,0xff,0xdb,0x96,0xff,0xbd,0x82,0x59,0xff,0xb4,0x7b,0x54,0xf7,0xca,0x96,0x66,0xfd,0xda,0xa7,0x72,0xff,0xd0,0x8e,0x61,0xff,0x13,0x0,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x58,0x23,0x18,0x63,0xff,0xd5,0x8f,0xff,0xdd,0xaa,0x70,0xff,0xcf,0xa6,0x92,0xff,0xff,0xf0,0xd3,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdb,0xbf,0xff,0xfe,0xdb,0xbf,0xff,0xff,0xfd,0xdd,0xff,0xef,0xe0,0xd2,0xff,0xaf,0x77,0x64,0xff,0xef,0xbd,0x7a,0xff,0xff,0xd3,0x90,0xff,0xf9,0xca,0x8a,0xff,0xfd,0xd2,0x8e,0xff,0xff,0xdc,0x96,0xff,0xe5,0xb3,0x7a,0xfc,0xd6,0xa1,0x6e,0xfe,0xc8,0x92,0x64,0xff,0xd0,0x92,0x64,0xff,0x63,0x25,0x19,0xa9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3a,0x0,0x0,0x3,0x4b,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x36,0x6,0x4,0x4d,0xfb,0xc7,0x87,0xff,0xe8,0xb5,0x76,0xff,0xc9,0xa0,0x8a,0xff,0xff,0xf2,0xd6,0xff,0xfc,0xdb,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xd9,0xbd,0xff,0xff,0xed,0xcf,0xff,0xf4,0xdc,0xc8,0xff,0xd1,0xa6,0x91,0xff,0xd6,0xa5,0x77,0xff,0xf5,0xc5,0x84,0xff,0xfe,0xd0,0x8e,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xcb,0x8b,0xff,0xfb,0xcc,0x8b,0xff,0xff,0xd5,0x91,0xff,0xff,0xdb,0x96,0xff,0xff,0xe4,0x9c,0xff,0xff,0xea,0x9f,0xff,0xf9,0xba,0x7f,0xff,0x4e,0x25,0x19,0x8a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8e,0x50,0x45,0x6b,0x4a,0x0,0x0,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x32,0xe4,0xac,0x76,0xff,0xf9,0xc9,0x81,0xff,0xc2,0x97,0x7d,0xff,0xff,0xec,0xd3,0xff,0xfc,0xdb,0xc0,0xff,0xfc,0xd9,0xbd,0xff,0xff,0xef,0xd1,0xff,0xed,0xd3,0xc1,0xff,0xbe,0x8a,0x70,0xff,0xdb,0xa5,0x67,0xff,0xff,0xdb,0x90,0xff,0xfd,0xd2,0x90,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xcb,0x8a,0xff,0xfb,0xc9,0x89,0xff,0xff,0xf3,0xa6,0xff,0xff,0xda,0x94,0xff,0x5c,0x13,0xd,0x68,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2c,0x0,0x0,0x4,0x9d,0x63,0x56,0xba,0xcd,0xa1,0x8c,0xff,0x4e,0x7,0x7,0x3d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17,0x0,0x0,0x19,0xc9,0x92,0x63,0xf9,0xff,0xe2,0x92,0xff,0xc1,0x92,0x74,0xff,0xf9,0xdd,0xc8,0xff,0xfd,0xda,0xbe,0xff,0xff,0xef,0xd1,0xff,0xeb,0xd3,0xc1,0xff,0xb6,0x7e,0x63,0xff,0xec,0xbb,0x75,0xff,0xff,0xe0,0x97,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xc8,0x88,0xff,0xff,0xfa,0xaa,0xff,0xbc,0x8f,0x62,0xec,0xd,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x3e,0xb8,0x80,0x6f,0xf0,0xff,0xff,0xf0,0xff,0xc5,0xa8,0x93,0xd9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa8,0x6e,0x4b,0xd5,0xff,0xfb,0xa6,0xff,0xc1,0x8e,0x68,0xff,0xe3,0xc4,0xb3,0xff,0xff,0xf3,0xd3,0xff,0xed,0xd3,0xbf,0xff,0xb4,0x7c,0x61,0xff,0xec,0xbe,0x78,0xff,0xff,0xde,0x96,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xff,0xd8,0x93,0xff,0xff,0xd8,0x93,0xff,0x55,0x1d,0x14,0x6a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x1e,0x1a,0x8a,0xe8,0xc4,0xab,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xee,0xff,0xad,0x7a,0x6b,0xb1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7a,0x41,0x2c,0x9a,0xff,0xff,0xad,0xff,0xca,0x92,0x61,0xff,0xce,0xaa,0x98,0xff,0xff,0xff,0xe7,0xff,0xba,0x89,0x70,0xff,0xe3,0xb2,0x6e,0xff,0xff,0xdf,0x98,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xca,0x8a,0xff,0xff,0xf5,0xa7,0xff,0x9d,0x6a,0x48,0xc9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7a,0x3c,0x33,0xb5,0xff,0xef,0xd1,0xff,0xff,0xff,0xe1,0xff,0xfe,0xdc,0xc0,0xff,0xff,0xff,0xe0,0xff,0x9b,0x65,0x58,0xa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5c,0x15,0xe,0x3e,0xfb,0xd4,0x91,0xff,0xf3,0xc5,0x7e,0xff,0xc7,0x9f,0x86,0xff,0xd5,0xb7,0xaa,0xff,0xcd,0x99,0x64,0xff,0xff,0xe3,0x98,0xff,0xf9,0xc9,0x89,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xff,0xe4,0x9c,0xff,0xe9,0xb6,0x7c,0xff,0x2b,0x0,0x0,0x48,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7d,0x40,0x38,0xc0,0xff,0xfa,0xda,0xff,0xff,0xf8,0xd9,0xff,0xfc,0xd8,0xbd,0xff,0xfc,0xdc,0xc0,0xff,0xff,0xff,0xe1,0xff,0x9a,0x67,0x5a,0xa8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8f,0x5b,0x3c,0xb5,0xff,0xff,0xb2,0xff,0xb6,0x80,0x5e,0xff,0x9b,0x61,0x4c,0xff,0xff,0xd8,0x8e,0xff,0xfe,0xd0,0x8e,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xc9,0x89,0xff,0xfd,0xd5,0x92,0xff,0xff,0xeb,0xa1,0xff,0xfe,0xe0,0x98,0xff,0xfa,0xc7,0x87,0xff,0xfc,0xcd,0x8c,0xff,0xff,0xeb,0xa1,0xff,0x75,0x42,0x2d,0xa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x33,0x2c,0xbb,0xff,0xf6,0xd7,0xff,0xff,0xf7,0xd7,0xff,0xfc,0xd8,0xbc,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xff,0xff,0xe2,0xff,0xb0,0x88,0x76,0xd6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x51,0xc,0x12,0x4b,0xec,0xc1,0x85,0xff,0xf5,0xca,0x86,0xff,0xd8,0xa6,0x6d,0xff,0xff,0xdd,0x97,0xff,0xf9,0xcb,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xff,0xd3,0x90,0xff,0xf2,0xc3,0x85,0xff,0xba,0x83,0x5a,0xff,0xdb,0xa9,0x74,0xff,0xff,0xd9,0x94,0xff,0xf9,0xca,0x8a,0xff,0xff,0xf1,0xa5,0xff,0xad,0x80,0x57,0xe2,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5e,0x1f,0x1a,0x9f,0xfe,0xea,0xcd,0xff,0xff,0xfa,0xda,0xff,0xfc,0xd7,0xbc,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xff,0xf2,0xd3,0xff,0xe2,0xc2,0xaa,0xff,0x46,0x0,0x0,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x63,0x4e,0x5,0xbf,0x88,0x5d,0xe6,0xff,0xee,0xa1,0xff,0xfe,0xda,0x94,0xff,0xf9,0xc8,0x89,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfb,0xcd,0x8c,0xff,0xff,0xe3,0x9a,0xff,0x9f,0x61,0x42,0xff,0x3b,0x0,0x0,0xff,0x6b,0x35,0x24,0xff,0xff,0xe3,0x9b,0xff,0xfd,0xcf,0x8d,0xff,0xff,0xdf,0x98,0xff,0xf2,0xc0,0x83,0xff,0x39,0x7,0x5,0x52,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x6,0x5,0x6f,0xed,0xd4,0xb9,0xff,0xff,0xff,0xe1,0xff,0xfc,0xd7,0xbc,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xfe,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xff,0xdd,0xc1,0xff,0xff,0xff,0xdf,0xff,0x6c,0x36,0x33,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc1,0x8b,0x5f,0x9e,0xf0,0xc3,0x85,0xff,0xfe,0xd0,0x8e,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfb,0xcc,0x8b,0xff,0xff,0xec,0xa1,0xff,0x9f,0x62,0x43,0xff,0x1f,0x0,0x0,0xff,0xa1,0x65,0x45,0xff,0xff,0xe5,0x9c,0xff,0xfc,0xce,0x8c,0xff,0xfb,0xcb,0x8a,0xff,0xff,0xf0,0xa3,0xff,0x97,0x67,0x46,0xd1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2c,0x0,0x0,0x2c,0xc0,0x9e,0x8a,0xfd,0xff,0xff,0xeb,0xff,0xfc,0xd8,0xbd,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xfe,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xda,0xbe,0xff,0xff,0xff,0xe0,0xff,0xb7,0x8f,0x81,0xff,0x80,0x37,0x20,0x65,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbf,0x87,0x5c,0x79,0xdb,0xa9,0x74,0xff,0xff,0xda,0x94,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfd,0xd0,0x8e,0xff,0xf5,0xcd,0x8c,0xff,0xdd,0xaf,0x77,0xff,0xfa,0xd7,0x93,0xff,0xfc,0xd0,0x8d,0xff,0xfa,0xcb,0x8b,0xff,0xf9,0xcb,0x8a,0xff,0xff,0xd8,0x93,0xff,0xff,0xe3,0x9b,0xff,0x80,0x3b,0x28,0xb0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x87,0x5b,0x4f,0xc7,0xff,0xff,0xe5,0xff,0xff,0xe0,0xc3,0xff,0xfc,0xdb,0xbf,0xff,0xfc,0xdc,0xc0,0xfc,0xfc,0xdd,0xc1,0xf5,0xff,0xe4,0xc7,0xf7,0xfd,0xdd,0xc1,0xfc,0xfc,0xdb,0xbf,0xff,0xfc,0xdc,0xc0,0xff,0xff,0xf0,0xd3,0xff,0xe4,0xc0,0xa6,0xff,0x76,0x30,0x1f,0xff,0xac,0x71,0x4b,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc7,0x90,0x62,0x5d,0xd2,0x9d,0x6b,0xff,0xff,0xde,0x97,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xc9,0x89,0xff,0xfc,0xd3,0x90,0xff,0xff,0xe5,0x9c,0xff,0xfc,0xd1,0x8e,0xff,0xf9,0xc9,0x89,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xc8,0x88,0xff,0xff,0xdf,0x98,0xff,0xff,0xe9,0x9e,0xff,0xa6,0x6a,0x49,0xe6,0x3c,0x2,0x1,0x58,0x45,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4c,0xc,0xb,0x5f,0xf2,0xdf,0xc3,0xff,0xff,0xf6,0xd7,0xff,0xfc,0xd9,0xbe,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdb,0xbf,0xfb,0xfe,0xdf,0xc2,0xf7,0xf4,0xd3,0xbd,0xfc,0xfb,0xeb,0xd2,0xff,0xff,0xef,0xd0,0xff,0xfd,0xdb,0xbf,0xff,0xff,0xec,0xce,0xff,0xd7,0xb0,0x9f,0xff,0xcd,0xa1,0x70,0xff,0xc0,0x89,0x5b,0xff,0xbb,0x84,0x5a,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd3,0xa1,0x6d,0x3c,0xcb,0x95,0x65,0xff,0xff,0xdd,0x97,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xc8,0x88,0xff,0xff,0xf9,0xaa,0xff,0xc2,0x95,0x66,0xff,0x78,0x24,0x19,0xff,0x58,0x1a,0x12,0x4e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x29,0x0,0x0,0x6,0xa9,0x86,0x76,0xdc,0xff,0xff,0xe9,0xff,0xfc,0xd8,0xbd,0xfc,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xff,0xe3,0xc7,0xff,0xf3,0xd2,0xba,0xff,0xa3,0x6d,0x56,0xff,0xb6,0x84,0x6d,0xff,0xdd,0xb6,0xa7,0xff,0xff,0xee,0xd6,0xff,0xff,0xff,0xe3,0xff,0xd9,0xb3,0xa3,0xff,0xbf,0x8c,0x62,0xff,0xff,0xf6,0xa5,0xff,0xae,0x71,0x4e,0xff,0xbd,0x88,0x5c,0x55,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe4,0xbd,0x80,0x2f,0xc4,0x8c,0x5f,0xff,0xff,0xd9,0x94,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xff,0xdf,0x98,0xff,0xdf,0xac,0x75,0xff,0x75,0x2d,0x1f,0xee,0x2a,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x58,0x1e,0x1a,0x72,0xfe,0xea,0xcc,0xff,0xff,0xea,0xcd,0xfb,0xfc,0xdb,0xbf,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xff,0xee,0xd1,0xff,0xd2,0xad,0x9d,0xff,0xc0,0x89,0x58,0xff,0xeb,0xb9,0x72,0xff,0xb8,0x81,0x5a,0xff,0xb7,0x84,0x6e,0xff,0xdf,0xba,0xa9,0xff,0xd4,0xae,0xa4,0xff,0xbe,0x89,0x60,0xff,0xff,0xe9,0x9b,0xff,0xff,0xdc,0x96,0xff,0xa4,0x64,0x45,0xff,0xd4,0xa8,0x73,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe7,0xbe,0x81,0x26,0xc4,0x8b,0x5f,0xff,0xff,0xd7,0x92,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcb,0x8a,0xff,0xff,0xd4,0x91,0xff,0xff,0xf6,0xa7,0xff,0x67,0x3b,0x28,0x82,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x29,0x0,0x0,0x17,0xaf,0x8d,0x7b,0xe3,0xff,0xff,0xe8,0xff,0xfc,0xd9,0xbd,0xfe,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xfc,0xdc,0xc0,0xff,0xff,0xf6,0xd8,0xff,0xc4,0x9d,0x8b,0xff,0xcb,0x93,0x60,0xff,0xff,0xf3,0xa5,0xff,0xff,0xe1,0x95,0xff,0xe5,0xaf,0x6d,0xff,0xc4,0x8f,0x62,0xff,0x9c,0x64,0x52,0xff,0xd0,0x9e,0x6e,0xff,0xff,0xe0,0x98,0xff,0xff,0xdc,0x95,0xff,0xec,0xc4,0x86,0xff,0xa7,0x6a,0x49,0xd4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe5,0xbf,0x82,0x35,0xc4,0x8b,0x5f,0xff,0xff,0xd8,0x93,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xcb,0x8a,0xff,0xfb,0xcd,0x8c,0xff,0xff,0xd2,0x8f,0xff,0xff,0xd6,0x92,0xff,0xfc,0xd0,0x8e,0xff,0xf9,0xc9,0x89,0xff,0xfc,0xcd,0x8c,0xff,0xff,0xff,0xad,0xff,0xa8,0x78,0x52,0xdc,0x18,0x0,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x62,0x28,0x23,0x82,0xff,0xf1,0xd2,0xff,0xff,0xf8,0xdb,0xff,0xff,0xf1,0xd6,0xff,0xfe,0xe6,0xc8,0xff,0xfc,0xda,0xbe,0xff,0xfc,0xdb,0xbf,0xff,0xff,0xf4,0xd8,0xff,0xbe,0x94,0x7e,0xff,0xd9,0xa3,0x67,0xff,0xff,0xd8,0x93,0xff,0xfb,0xca,0x8a,0xff,0xff,0xd8,0x93,0xff,0xff,0xdf,0x95,0xff,0xee,0xbf,0x7c,0xff,0xf7,0xca,0x89,0xff,0xfb,0xcd,0x8c,0xff,0xf9,0xc9,0x89,0xff,0xff,0xe9,0x9f,0xff,0xc4,0x8f,0x63,0xff,0xb8,0x82,0x58,0x79,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0xb6,0x7c,0x55,0xc3,0x8c,0x60,0xff,0xff,0xdc,0x96,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfc,0xce,0x8d,0xff,0xf6,0xc8,0x88,0xff,0xea,0xba,0x7f,0xff,0xe0,0xaf,0x77,0xff,0xf0,0xc1,0x84,0xff,0xff,0xcf,0x8d,0xff,0xff,0xf7,0xa9,0xff,0xcf,0x9f,0x6c,0xff,0x33,0x0,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2c,0x0,0x0,0xe,0xb9,0x9c,0x88,0xe4,0xff,0xff,0xfb,0xff,0xc7,0x99,0x85,0xff,0xbb,0x8a,0x75,0xff,0xec,0xcf,0xbc,0xff,0xff,0xf8,0xdb,0xff,0xff,0xe2,0xc4,0xff,0xf5,0xdb,0xc6,0xff,0xb6,0x88,0x6b,0xff,0xf5,0xc3,0x7e,0xff,0xfc,0xce,0x8c,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcb,0x8a,0xff,0xff,0xd3,0x90,0xff,0xfc,0xd0,0x8e,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfc,0xcd,0x8c,0xff,0xff,0xdc,0x97,0xff,0xab,0x6f,0x4d,0xfb,0xdb,0xae,0x75,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xde,0xaf,0x77,0x62,0xc7,0x90,0x62,0xff,0xff,0xdd,0x97,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfb,0xcd,0x8c,0xff,0xfc,0xce,0x8c,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xff,0xd5,0x91,0xff,0xed,0xbd,0x81,0xff,0xbb,0x83,0x59,0xff,0xc1,0x8a,0x5e,0xff,0xf2,0xbf,0x82,0xff,0xff,0xfc,0xac,0xff,0xe5,0xb1,0x79,0xff,0x40,0x0,0x0,0x53,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5b,0x1c,0x18,0x61,0xff,0xfb,0xe2,0xff,0xce,0xa9,0x98,0xff,0xc3,0x89,0x56,0xff,0xdd,0xa6,0x66,0xff,0xb7,0x83,0x62,0xff,0xcb,0xa1,0x91,0xff,0xff,0xef,0xd9,0xff,0xd9,0xc1,0xb2,0xff,0xb6,0x82,0x59,0xff,0xff,0xe2,0x96,0xff,0xfa,0xcb,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xcb,0x8a,0xff,0xff,0xe1,0x99,0xff,0xd4,0xa2,0x70,0xff,0xae,0x73,0x4f,0xa8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd6,0xaa,0x74,0x70,0xca,0x93,0x64,0xff,0xff,0xde,0x97,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfb,0xcd,0x8c,0xff,0xf6,0xc6,0x87,0xff,0xf8,0xcf,0x8d,0xff,0xff,0xde,0x97,0xff,0xfd,0xcd,0x8c,0xff,0xf9,0xcb,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xcb,0x8a,0xff,0xfb,0xcd,0x8c,0xff,0xff,0xd1,0x8e,0xff,0xff,0xd5,0x91,0xff,0xff,0xfc,0xac,0xff,0xed,0xbe,0x82,0xff,0x32,0x8,0x6,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xac,0x87,0x7a,0xba,0xe9,0xd1,0xc0,0xff,0xbb,0x80,0x52,0xff,0xff,0xdf,0x92,0xff,0xff,0xe5,0x9d,0xff,0xf9,0xce,0x84,0xff,0xca,0x91,0x5e,0xff,0xc7,0x9a,0x7d,0xff,0x9f,0x6c,0x5e,0xff,0xd4,0xa4,0x6c,0xff,0xff,0xe1,0x99,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xca,0x8a,0xff,0xff,0xe4,0x9b,0xff,0xb6,0x80,0x58,0xff,0xd8,0xa5,0x72,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xcb,0x97,0x67,0x80,0xd3,0x9e,0x6c,0xff,0xff,0xdc,0x96,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfc,0xcf,0x8d,0xff,0xfa,0xcd,0x8b,0xff,0xcf,0x9a,0x68,0xff,0xd2,0x9c,0x6a,0xff,0xf9,0xd0,0x8e,0xff,0xff,0xea,0xa0,0xff,0xff,0xe4,0x9c,0xff,0xff,0xdb,0x96,0xff,0xff,0xd9,0x94,0xff,0xff,0xd9,0x94,0xff,0xff,0xdf,0x98,0xff,0xff,0xfd,0xad,0xff,0xec,0xb5,0x7c,0xff,0x46,0xc,0x9,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x4,0x3,0x2e,0xc3,0xa5,0x99,0xff,0xd0,0x9e,0x76,0xff,0xfd,0xd4,0x89,0xff,0xff,0xd3,0x90,0xff,0xf9,0xc9,0x89,0xff,0xfc,0xd0,0x8e,0xff,0xff,0xe2,0x98,0xff,0xef,0xc0,0x7b,0xff,0xd7,0xa5,0x6b,0xff,0xfa,0xcf,0x8e,0xff,0xfb,0xcd,0x8c,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xff,0xe0,0x99,0xff,0xd0,0x9f,0x6d,0xff,0xc1,0x87,0x5e,0x8a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb9,0x81,0x58,0x94,0xde,0xad,0x76,0xff,0xff,0xd8,0x93,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xff,0xd4,0x91,0xff,0xf2,0xc4,0x85,0xff,0xc6,0x8e,0x60,0xff,0xb4,0x71,0x4c,0xff,0xba,0x7e,0x55,0xff,0xc5,0x95,0x66,0xff,0xd6,0xaa,0x75,0xff,0xdd,0xb1,0x79,0xff,0xdc,0xaf,0x79,0xff,0xe3,0xb6,0x7d,0xff,0xc7,0x89,0x5d,0xff,0x48,0x8,0x6,0x53,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x67,0x2c,0x2d,0x8e,0xc8,0x9a,0x81,0xff,0xef,0xc3,0x7d,0xff,0xff,0xdb,0x95,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xca,0x8a,0xff,0xfd,0xd0,0x8d,0xff,0xff,0xdd,0x96,0xff,0xfb,0xcf,0x8d,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xff,0xd0,0x8e,0xff,0xed,0xc1,0x84,0xff,0xba,0x81,0x59,0xc4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xba,0x82,0x59,0xbc,0xea,0xba,0x7f,0xff,0xff,0xd2,0x8f,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xca,0x89,0xff,0xfd,0xd4,0x90,0xff,0xff,0xe4,0x9b,0xff,0xf4,0xbd,0x7f,0xff,0xc2,0x7a,0x51,0xff,0xa9,0x5a,0x39,0xff,0xab,0x5a,0x39,0xff,0xb0,0x60,0x3d,0xff,0xbc,0x6a,0x44,0xff,0xa5,0x55,0x37,0xff,0x26,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x1f,0x7c,0x41,0x3b,0xfb,0xf7,0xcd,0x91,0xff,0xff,0xdc,0x93,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfb,0xcb,0x8b,0xff,0xff,0xd5,0x91,0xff,0xbb,0x84,0x5a,0xe6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb8,0x80,0x57,0xf0,0xff,0xd3,0x90,0xff,0xfb,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xf9,0xc9,0x8a,0xff,0xfd,0xd4,0x92,0xff,0xff,0xe2,0x9b,0xff,0xff,0xd4,0x8f,0xff,0xfd,0xbc,0x7d,0xff,0xf7,0xb0,0x74,0xff,0xff,0xb3,0x75,0xff,0xf5,0x9d,0x65,0xff,0x2e,0xb,0x7,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x77,0xc6,0x94,0x64,0xff,0xff,0xe8,0x9c,0xff,0xfc,0xcd,0x8d,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xff,0xde,0x98,0xff,0xcb,0x96,0x66,0xff,0xbc,0x83,0x59,0x5,0xa7,0x68,0x47,0x1f,0xc8,0x93,0x65,0xff,0xff,0xe3,0x9b,0xff,0xfa,0xcb,0x8a,0xff,0xfa,0xcb,0x8b,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xfb,0xcf,0x8f,0xff,0xfe,0xd4,0x93,0xff,0xfd,0xd3,0x92,0xff,0xff,0xd6,0x94,0xff,0xff,0xda,0x96,0xff,0x5c,0x2d,0x1f,0x76,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x77,0x38,0x26,0xd5,0xff,0xeb,0x9f,0xff,0xff,0xd3,0x90,0xff,0xfa,0xcb,0x8a,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcc,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xfa,0xcb,0x8b,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xca,0x8b,0xff,0xf9,0xca,0x8a,0xff,0xfa,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xff,0xde,0x98,0xff,0xd7,0xa3,0x70,0xff,0x97,0x57,0x3c,0x13,0x8b,0x4a,0x33,0x51,0xe5,0xb5,0x7d,0xff,0xff,0xd6,0x93,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x89,0xff,0xf9,0xc8,0x8a,0xff,0xf8,0xc7,0x8a,0xff,0xf9,0xc7,0x8a,0xff,0xf9,0xc7,0x89,0xff,0xf9,0xc7,0x89,0xff,0xf9,0xc7,0x8a,0xff,0xfb,0xca,0x8c,0xff,0xff,0xe4,0x9e,0xff,0x7d,0x47,0x31,0x9a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x0,0x2d,0xb6,0x82,0x59,0xff,0xff,0xf2,0xa5,0xff,0xf9,0xc8,0x89,0xff,0xfa,0xca,0x8a,0xff,0xfa,0xca,0x8b,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xca,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc9,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x89,0xff,0xff,0xd9,0x95,0xff,0xdb,0xa7,0x73,0xff,0x9c,0x5c,0x40,0x50,0xb9,0x80,0x59,0xb4,0xff,0xd2,0x91,0xff,0xf9,0xc7,0x8a,0xff,0xf9,0xc7,0x89,0xff,0xf9,0xc7,0x89,0xff,0xf9,0xc7,0x8a,0xff,0xf8,0xc7,0x89,0xff,0xf8,0xc7,0x89,0xff,0xf9,0xc7,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc6,0x89,0xff,0xff,0xe5,0x9f,0xff,0x94,0x5a,0x3e,0xba,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x39,0x0,0x0,0x56,0xe5,0xb0,0x78,0xff,0xff,0xdf,0x9a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x8a,0xff,0xf9,0xc8,0x89,0xff,0xf9,0xc7,0x8a,0xff,0xf9,0xc7,0x8a,0xff,0xf8,0xc7,0x89,0xff,0xf9,0xc7,0x89,0xff,0xf9,0xc7,0x8a,0xff,0xf9,0xc7,0x8a,0xff,0xf9,0xc7,0x89,0xff,0xf9,0xc7,0x89,0xff,0xf9,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc7,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf9,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xff,0xd4,0x93,0xff,0xea,0xb7,0x7f,0xf3,0x97,0x55,0x3b,0xb0,0xc9,0x93,0x66,0xfc,0xff,0xde,0x9a,0xff,0xf8,0xc4,0x88,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x88,0xff,0xf8,0xc4,0x88,0xff,0xf8,0xc3,0x88,0xff,0xf8,0xc4,0x89,0xff,0xf7,0xc3,0x88,0xff,0xff,0xe6,0xa0,0xff,0xa7,0x6c,0x4b,0xd4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x67,0x25,0x1a,0x8e,0xff,0xd3,0x91,0xff,0xfe,0xcd,0x8e,0xff,0xf9,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc6,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xff,0xd5,0x95,0xff,0xd6,0xa0,0x70,0xf2,0x8c,0x4b,0x34,0xeb,0xf7,0xc6,0x8b,0xff,0xfe,0xc9,0x8d,0xff,0xf8,0xc4,0x88,0xff,0xf8,0xc3,0x89,0xff,0xf8,0xc3,0x88,0xff,0xf8,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf8,0xc3,0x88,0xff,0xf8,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xff,0xe2,0x9f,0xff,0xb2,0x79,0x55,0xe4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x83,0x45,0x30,0xb5,0xff,0xe2,0x9d,0xff,0xfa,0xc6,0x89,0xff,0xf8,0xc5,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x88,0xff,0xf8,0xc4,0x88,0xff,0xf8,0xc4,0x88,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc4,0x89,0xff,0xf8,0xc3,0x89,0xff,0xf7,0xc3,0x88,0xff,0xf8,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf6,0xc1,0x87,0xff,0xff,0xe2,0x9e,0xff,0xb0,0x77,0x54,0xfe,0xa6,0x68,0x49,0xfe,0xff,0xe0,0x9d,0xff,0xf6,0xc0,0x87,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x87,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc0,0x88,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xc0,0x88,0xff,0xf7,0xc0,0x88,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf6,0xc0,0x87,0xff,0xff,0xdf,0x9d,0xff,0xc1,0x81,0x5b,0xf2,0x7,0x0,0x0,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa2,0x67,0x48,0xde,0xff,0xe6,0xa1,0xff,0xf8,0xc3,0x88,0xff,0xf7,0xc3,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc2,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc0,0x87,0xff,0xf8,0xc0,0x87,0xff,0xfd,0xcc,0x90,0xff,0xa7,0x6c,0x4c,0xff,0xe4,0xaf,0x7c,0xff,0xff,0xc9,0x8d,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xbf,0x87,0xff,0xf6,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xff,0xd9,0x9a,0xff,0xcf,0x8d,0x65,0xff,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2c,0x0,0x0,0x1b,0xba,0x83,0x5c,0xfc,0xff,0xe4,0xa0,0xff,0xf7,0xc0,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc1,0x88,0xff,0xf7,0xc0,0x88,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf6,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xc0,0x87,0xff,0xf7,0xbf,0x87,0xff,0xf7,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbe,0x86,0xff,0xff,0xd5,0x97,0xff,0xc9,0x8e,0x65,0xff,0xb0,0x75,0x53,0xff,0xff,0xdb,0x9b,0xff,0xf5,0xbb,0x85,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf5,0xbd,0x86,0xff,0xfc,0xc4,0x8b,0xff,0xff,0xcc,0x91,0xff,0xff,0xcb,0x90,0xff,0xfe,0xc7,0x8d,0xff,0xfe,0xc8,0x8d,0xff,0xff,0xcd,0x92,0xff,0xfc,0xc5,0x8c,0xff,0xf5,0xbc,0x85,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf6,0xbc,0x86,0xff,0xff,0xd2,0x96,0xff,0xd6,0x9b,0x6f,0xff,0x2f,0x0,0x0,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2f,0x0,0x0,0x37,0xd2,0x96,0x6b,0xff,0xff,0xdb,0x9b,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf7,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbf,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbe,0x87,0xff,0xf6,0xbd,0x87,0xff,0xf6,0xbd,0x87,0xff,0xf6,0xbd,0x87,0xff,0xf6,0xbd,0x86,0xff,0xf7,0xbd,0x87,0xff,0xff,0xcd,0x92,0xff,0xa9,0x6b,0x4c,0xff,0xdd,0xa6,0x76,0xff,0xff,0xc9,0x8f,0xff,0xf6,0xbc,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf7,0xbe,0x87,0xff,0xfb,0xc3,0x8b,0xff,0xe6,0xab,0x7a,0xff,0xd6,0x99,0x6d,0xff,0xd0,0x92,0x68,0xff,0xcd,0x8f,0x66,0xff,0xcb,0x8d,0x64,0xff,0xcb,0x8c,0x64,0xff,0xe6,0xab,0x7a,0xff,0xff,0xce,0x93,0xff,0xf8,0xbf,0x88,0xff,0xf4,0xba,0x85,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xba,0x86,0xff,0xf5,0xbb,0x86,0xff,0xff,0xcd,0x93,0xff,0xe3,0xa6,0x77,0xff,0x49,0x1,0x1,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x0,0x4f,0xe3,0xa5,0x75,0xff,0xff,0xd2,0x95,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x87,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x87,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbd,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf5,0xbc,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf5,0xbc,0x86,0xff,0xf5,0xbc,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf5,0xbc,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf4,0xba,0x85,0xff,0xff,0xd4,0x98,0xff,0xbc,0x7d,0x5a,0xff,0xae,0x6f,0x50,0xff,0xff,0xd6,0x99,0xff,0xf4,0xb8,0x84,0xff,0xf5,0xbb,0x86,0xff,0xf6,0xbc,0x86,0xff,0xf9,0xbf,0x89,0xff,0xdc,0x9e,0x72,0xff,0xcd,0x8e,0x65,0xff,0xd4,0x95,0x6c,0xff,0xdc,0x9f,0x72,0xff,0xe4,0xa7,0x78,0xff,0xe4,0xa7,0x78,0xff,0xd4,0x96,0x6c,0xff,0xbc,0x7b,0x59,0xff,0xc7,0x88,0x61,0xff,0xfb,0xc3,0x8d,0xff,0xf9,0xbe,0x89,0xff,0xf4,0xb8,0x84,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf4,0xb9,0x85,0xff,0xff,0xc7,0x8f,0xff,0xf1,0xae,0x7d,0xff,0x42,0x9,0x7,0x52,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x43,0x6,0x4,0x5d,0xeb,0xad,0x7b,0xff,0xff,0xcc,0x92,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x86,0xff,0xf5,0xbb,0x85,0xff,0xf5,0xba,0x86,0xff,0xf5,0xba,0x86,0xff,0xf5,0xba,0x85,0xff,0xf5,0xba,0x86,0xff,0xf5,0xba,0x86,0xff,0xf5,0xba,0x85,0xff,0xf5,0xba,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xba,0x85,0xff,0xf8,0xbc,0x87,0xff,0xf4,0xbc,0x88,0xff,0xa5,0x65,0x48,0xff,0xe9,0xaf,0x7e,0xff,0xfd,0xc2,0x8b,0xff,0xf4,0xb8,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf3,0xb8,0x84,0xff,0xeb,0xad,0x7d,0xff,0xfa,0xc0,0x8a,0xff,0xff,0xc9,0x91,0xff,0xfd,0xc2,0x8c,0xff,0xfa,0xbe,0x89,0xff,0xfb,0xbf,0x8a,0xff,0xff,0xca,0x92,0xff,0xfd,0xc2,0x8d,0xff,0xbc,0x79,0x58,0xff,0xc3,0x83,0x5f,0xff,0xff,0xc7,0x90,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xff,0xc3,0x8e,0xff,0xf4,0xb1,0x81,0xff,0x4b,0xf,0xb,0x5c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x45,0x6,0x4,0x5a,0xea,0xab,0x7b,0xff,0xff,0xca,0x91,0xff,0xf5,0xba,0x86,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb8,0x85,0xff,0xf5,0xb8,0x85,0xff,0xf5,0xb9,0x85,0xff,0xf5,0xb8,0x85,0xff,0xf5,0xb8,0x85,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb7,0x84,0xff,0xff,0xcd,0x94,0xff,0xc2,0x84,0x60,0xff,0xb7,0x78,0x57,0xff,0xff,0xd4,0x99,0xff,0xf3,0xb5,0x83,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x84,0xff,0xf4,0xb7,0x85,0xff,0xf7,0xba,0x87,0xff,0xf5,0xb7,0x85,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf3,0xb5,0x84,0xff,0xf7,0xb9,0x87,0xff,0xff,0xcd,0x95,0xff,0xb7,0x74,0x55,0xff,0xd7,0x98,0x6f,0xff,0xff,0xc3,0x8e,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xfd,0xbf,0x8b,0xff,0xff,0xb4,0x84,0xff,0x3a,0x14,0xf,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x4a,0xdb,0x9d,0x71,0xff,0xff,0xce,0x94,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb8,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb7,0x85,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x85,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb5,0x83,0xff,0xff,0xc8,0x91,0xff,0xac,0x6c,0x4f,0xff,0xd8,0x9a,0x70,0xff,0xfe,0xc0,0x8c,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf3,0xb5,0x84,0xff,0xf3,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf3,0xb5,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb5,0x84,0xff,0xf3,0xb3,0x83,0xff,0xff,0xc3,0x8e,0xff,0xd6,0x95,0x6d,0xff,0xbe,0x7b,0x5a,0xff,0xff,0xc7,0x92,0xff,0xf2,0xb3,0x83,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x84,0xff,0xfa,0xbb,0x89,0xff,0xff,0xb9,0x87,0xff,0x45,0x1d,0x15,0x7b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x36,0x0,0x0,0x2a,0xc3,0x85,0x61,0xff,0xff,0xd5,0x9b,0xff,0xf4,0xb5,0x83,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb6,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf3,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf3,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb5,0x84,0xff,0xf4,0xb4,0x84,0xff,0xf4,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xfe,0xc0,0x8c,0xff,0xd5,0x95,0x6d,0xff,0xb0,0x6e,0x50,0xff,0xff,0xc7,0x91,0xff,0xf2,0xb2,0x83,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x83,0xff,0xf4,0xb2,0x83,0xff,0xf5,0xb6,0x86,0xff,0xbf,0x7b,0x5a,0xff,0xeb,0xa8,0x7c,0xff,0xf6,0xb6,0x86,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf9,0xb8,0x88,0xff,0xff,0xbd,0x8c,0xff,0x6b,0x2f,0x23,0xa4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98,0x5a,0x42,0xd6,0xff,0xd7,0x9d,0xff,0xf2,0xb3,0x83,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb4,0x83,0xff,0xf3,0xb4,0x84,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x84,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb3,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf2,0xb1,0x82,0xff,0xff,0xcb,0x95,0xff,0xb9,0x75,0x56,0xff,0xc7,0x86,0x63,0xff,0xff,0xc5,0x91,0xff,0xf3,0xb1,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf2,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf2,0xb1,0x83,0xff,0xf2,0xb1,0x83,0xff,0xf2,0xb0,0x82,0xff,0xff,0xc2,0x90,0xff,0xc3,0x80,0x5e,0xff,0xd0,0x88,0x65,0xff,0xff,0xbd,0x8c,0xff,0xf6,0xb5,0x86,0xff,0xf1,0xae,0x81,0xff,0xf2,0xb0,0x82,0xff,0xf2,0xb0,0x82,0xff,0xf6,0xb4,0x86,0xff,0xff,0xbe,0x8d,0xff,0x88,0x41,0x31,0xde,0x9,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5a,0x23,0x1a,0x91,0xff,0xc1,0x8f,0xff,0xf8,0xb7,0x87,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb2,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf2,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf2,0xb1,0x83,0xff,0xf2,0xb1,0x83,0xff,0xf3,0xb1,0x83,0xff,0xf5,0xb3,0x84,0xff,0xf1,0xaf,0x82,0xff,0xb0,0x6b,0x4f,0xff,0xe9,0xa8,0x7d,0xff,0xf6,0xb3,0x85,0xff,0xf2,0xb0,0x82,0xff,0xf2,0xb0,0x83,0xff,0xf2,0xb0,0x82,0xff,0xf2,0xb0,0x83,0xff,0xf2,0xb0,0x83,0xff,0xf2,0xb0,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xff,0xbf,0x8e,0xff,0xc8,0x84,0x62,0xff,0xcb,0x82,0x61,0xff,0xf4,0xae,0x82,0xff,0xe9,0xa6,0x7c,0xff,0xf6,0xb2,0x85,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf4,0xb1,0x84,0xff,0xfc,0xbb,0x8b,0xff,0xac,0x5b,0x45,0xff,0x44,0x0,0x0,0x46,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x31,0x0,0x0,0x43,0xd5,0x98,0x70,0xff,0xff,0xc8,0x94,0xff,0xf2,0xb0,0x82,0xff,0xf2,0xb0,0x83,0xff,0xf2,0xb0,0x83,0xff,0xf2,0xb0,0x83,0xff,0xf2,0xb0,0x82,0xff,0xf2,0xb0,0x83,0xff,0xf2,0xb0,0x83,0xff,0xf2,0xb0,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xb0,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xfe,0xbb,0x8b,0xff,0xcf,0x89,0x66,0xff,0xaa,0x64,0x4a,0xff,0xff,0xc1,0x90,0xff,0xf1,0xad,0x81,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xad,0x82,0xff,0xf2,0xad,0x82,0xff,0xf1,0xad,0x81,0xff,0xf2,0xad,0x82,0xff,0xf2,0xad,0x82,0xff,0xf2,0xad,0x82,0xff,0xff,0xbd,0x8e,0xff,0xc7,0x81,0x61,0xff,0xcf,0x86,0x65,0xff,0xe6,0x9d,0x76,0xff,0xd2,0x8b,0x69,0xff,0xfd,0xb9,0x8b,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf2,0xad,0x82,0xff,0xf4,0xb3,0x86,0xff,0xd4,0x7c,0x5f,0xff,0x59,0x14,0x10,0x7b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x0,0x0,0x4,0x9d,0x60,0x48,0xe2,0xff,0xd5,0x9e,0xff,0xf1,0xac,0x80,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xaf,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf1,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf2,0xae,0x82,0xff,0xf1,0xae,0x82,0xff,0xf1,0xae,0x82,0xff,0xf1,0xad,0x82,0xff,0xf2,0xad,0x82,0xff,0xf1,0xad,0x82,0xff,0xff,0xbf,0x8f,0xff,0xc1,0x7a,0x5b,0xff,0xbb,0x74,0x57,0xff,0xff,0xc1,0x91,0xff,0xf1,0xac,0x82,0xff,0xf1,0xad,0x82,0xff,0xf1,0xad,0x82,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xab,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xab,0x81,0xff,0xff,0xbc,0x8e,0xff,0xc1,0x7a,0x5c,0xff,0xd2,0x86,0x66,0xff,0xeb,0x9e,0x78,0xff,0xcb,0x82,0x63,0xff,0xfa,0xb5,0x89,0xff,0xf0,0xaa,0x80,0xff,0xf1,0xab,0x81,0xff,0xf2,0xac,0x82,0xff,0xf5,0xb2,0x86,0xff,0xdf,0x85,0x66,0xff,0x6d,0x28,0x20,0xa2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5a,0x17,0x12,0x86,0xff,0xba,0x8c,0xff,0xfb,0xb8,0x8a,0xff,0xf1,0xac,0x82,0xff,0xf1,0xad,0x81,0xff,0xf1,0xad,0x81,0xff,0xf1,0xad,0x81,0xff,0xf1,0xad,0x82,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xab,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xac,0x81,0xff,0xf1,0xab,0x81,0xff,0xf1,0xab,0x81,0xff,0xff,0xbd,0x8e,0xff,0xbd,0x76,0x59,0xff,0xcb,0x84,0x64,0xff,0xff,0xb9,0x8c,0xff,0xf1,0xab,0x81,0xff,0xf1,0xab,0x81,0xff,0xf1,0xab,0x81,0xff,0xf1,0xab,0x81,0xff,0xf1,0xab,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf0,0xaa,0x81,0xff,0xf0,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa9,0x80,0xff,0xf9,0xb3,0x87,0xff,0xbc,0x73,0x57,0xff,0xdc,0x8c,0x6b,0xff,0xf3,0xa2,0x7c,0xff,0xc4,0x77,0x5b,0xff,0xe5,0x9f,0x79,0xff,0xf4,0xac,0x83,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf9,0xb5,0x89,0xff,0xd9,0x85,0x66,0xff,0x83,0x35,0x2a,0xc6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x0,0x1b,0xa5,0x65,0x4c,0xf9,0xff,0xd0,0x9d,0xff,0xef,0xa8,0x7f,0xff,0xf1,0xab,0x81,0xff,0xf1,0xab,0x81,0xff,0xf1,0xab,0x81,0xff,0xf0,0xaa,0x81,0xff,0xf0,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf0,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf1,0xaa,0x81,0xff,0xf1,0xaa,0x80,0xff,0xf0,0xaa,0x81,0xff,0xf0,0xaa,0x81,0xff,0xf0,0xaa,0x80,0xff,0xf0,0xa9,0x81,0xff,0xff,0xb9,0x8d,0xff,0xbe,0x75,0x59,0xff,0xcf,0x87,0x67,0xff,0xfc,0xb5,0x8a,0xff,0xf0,0xa9,0x81,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf4,0xac,0x83,0xff,0xe5,0x9e,0x78,0xff,0xb9,0x6d,0x54,0xff,0xec,0x9a,0x77,0xff,0xf8,0xa4,0x7e,0xff,0xbc,0x66,0x50,0xff,0xcb,0x82,0x64,0xff,0xff,0xb7,0x8c,0xff,0xf0,0xa7,0x80,0xff,0xef,0xa7,0x80,0xff,0xfc,0xb5,0x8b,0xff,0xd3,0x83,0x66,0xff,0x9b,0x46,0x37,0xea,0x26,0x0,0x0,0xa,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0xa,0x8,0x7a,0xf7,0xae,0x84,0xff,0xff,0xbd,0x8f,0xff,0xee,0xa7,0x7f,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa9,0x81,0xff,0xf0,0xa9,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xf0,0xa8,0x80,0xff,0xff,0xb9,0x8d,0xff,0xbd,0x73,0x58,0xff,0xcc,0x83,0x64,0xff,0xfd,0xb5,0x8a,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xef,0xa6,0x80,0xff,0xef,0xa6,0x80,0xff,0xef,0xa6,0x80,0xff,0xef,0xa6,0x80,0xff,0xef,0xa6,0x7f,0xff,0xef,0xa6,0x80,0xff,0xf0,0xa6,0x80,0xff,0xfa,0xb0,0x87,0xff,0xd3,0x8b,0x6b,0xff,0xb7,0x66,0x4f,0xff,0xf7,0xa2,0x7e,0xff,0xf1,0x9d,0x7b,0xff,0xc4,0x67,0x52,0xff,0xb9,0x6b,0x53,0xff,0xff,0xb8,0x8d,0xff,0xee,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xfe,0xb4,0x8b,0xff,0xcc,0x7e,0x62,0xff,0xae,0x56,0x44,0xff,0x3e,0x5,0x4,0x2e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8f,0x47,0x36,0xd3,0xff,0xcd,0x9d,0xff,0xf5,0xac,0x84,0xff,0xee,0xa6,0x7f,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xf0,0xa7,0x80,0xff,0xef,0xa7,0x80,0xff,0xef,0xa6,0x7f,0xff,0xef,0xa6,0x7f,0xff,0xef,0xa6,0x80,0xff,0xef,0xa6,0x80,0xff,0xef,0xa6,0x7f,0xff,0xff,0xb8,0x8d,0xff,0xbd,0x73,0x58,0xff,0xb9,0x6f,0x55,0xff,0xff,0xba,0x8f,0xff,0xef,0xa6,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xff,0xb4,0x8c,0xff,0xc4,0x79,0x5d,0xff,0xbc,0x65,0x4f,0xff,0xf5,0x9e,0x7c,0xff,0xea,0x92,0x74,0xff,0xd4,0x73,0x5d,0xff,0xb2,0x5d,0x4a,0xff,0xf4,0xac,0x85,0xff,0xf0,0xa4,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xff,0xb4,0x8c,0xff,0xc5,0x79,0x5e,0xff,0xbb,0x60,0x4c,0xff,0x50,0x16,0x11,0x4e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x25,0x0,0x0,0x2c,0xae,0x66,0x4e,0xfd,0xff,0xce,0x9e,0xff,0xf3,0xaa,0x83,0xff,0xed,0xa3,0x7e,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa5,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xfb,0xb0,0x88,0xff,0xcb,0x7f,0x62,0xff,0xa7,0x5e,0x48,0xff,0xff,0xb8,0x8e,0xff,0xee,0xa3,0x7e,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa4,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7e,0xff,0xee,0xa3,0x7e,0xff,0xef,0xa2,0x7f,0xff,0xef,0xa3,0x7e,0xff,0xef,0xa2,0x7e,0xff,0xff,0xb4,0x8c,0xff,0xba,0x6b,0x54,0xff,0xc8,0x6a,0x55,0xff,0xec,0x92,0x74,0xff,0xe4,0x89,0x6d,0xff,0xe4,0x81,0x68,0xff,0x92,0x40,0x32,0xe8,0xda,0x90,0x70,0xf9,0xf7,0xab,0x85,0xff,0xee,0xa2,0x7e,0xff,0xff,0xb2,0x8b,0xff,0xc2,0x77,0x5d,0xff,0xc6,0x69,0x54,0xff,0x6e,0x28,0x20,0x76,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x29,0x0,0x0,0x45,0xb5,0x68,0x50,0xff,0xff,0xcd,0x9f,0xff,0xfa,0xb1,0x89,0xff,0xed,0xa1,0x7d,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xef,0xa3,0x7f,0xff,0xee,0xa3,0x7e,0xff,0xee,0xa3,0x7e,0xff,0xee,0xa2,0x7e,0xff,0xee,0xa2,0x7e,0xff,0xee,0xa2,0x7e,0xff,0xee,0xa2,0x7e,0xff,0xef,0xa3,0x7f,0xff,0xf2,0xa6,0x81,0xff,0xad,0x61,0x4c,0xff,0xe4,0x99,0x77,0xff,0xf3,0xa6,0x81,0xff,0xee,0xa2,0x7e,0xff,0xee,0xa2,0x7e,0xff,0xee,0xa2,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xff,0xb1,0x8b,0xff,0xbc,0x71,0x58,0xff,0xb6,0x57,0x47,0xff,0xf9,0x93,0x77,0xff,0xec,0x8c,0x71,0xff,0xdb,0x77,0x60,0xff,0x36,0x0,0x0,0x78,0xb3,0x6f,0x57,0xd6,0xff,0xb8,0x91,0xff,0xee,0x9f,0x7d,0xff,0xfd,0xaf,0x89,0xff,0xc3,0x78,0x5e,0xff,0xd3,0x71,0x5a,0xff,0x88,0x3e,0x31,0xa5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1a,0x0,0x0,0x34,0x9e,0x4b,0x3b,0xef,0xff,0xb5,0x8d,0xff,0xff,0xbd,0x94,0xff,0xef,0xa2,0x7e,0xff,0xed,0xa0,0x7d,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa1,0x7e,0xff,0xee,0xa0,0x7e,0xff,0xee,0xa0,0x7e,0xff,0xee,0xa0,0x7e,0xff,0xed,0x9f,0x7d,0xff,0xff,0xb6,0x8f,0xff,0xb9,0x6c,0x55,0xff,0xba,0x6e,0x57,0xff,0xff,0xb6,0x8f,0xff,0xed,0x9e,0x7d,0xff,0xee,0xa0,0x7e,0xff,0xee,0xa0,0x7e,0xff,0xed,0x9f,0x7d,0xff,0xed,0xa0,0x7d,0xff,0xee,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xee,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xed,0x9f,0x7e,0xff,0xee,0x9f,0x7d,0xff,0xee,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xf2,0xa3,0x80,0xff,0xed,0xa1,0x7e,0xff,0xa9,0x5b,0x48,0xff,0xb0,0x4f,0x41,0xff,0xf3,0x88,0x6f,0xff,0xde,0x73,0x5d,0xff,0x0,0x0,0x0,0x2d,0x79,0x4b,0x3c,0x94,0xff,0xbc,0x95,0xff,0xec,0x9d,0x7c,0xff,0xfa,0xab,0x88,0xff,0xc9,0x7d,0x63,0xff,0xd4,0x6f,0x5b,0xff,0xa0,0x4e,0x3f,0xc7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2e,0x0,0x0,0x6,0x5c,0x12,0xe,0xa7,0xd0,0x82,0x66,0xff,0xff,0xc5,0x9b,0xff,0xfc,0xb0,0x8b,0xff,0xed,0x9d,0x7c,0xff,0xed,0x9e,0x7c,0xff,0xee,0x9f,0x7d,0xff,0xee,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xee,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xed,0x9f,0x7d,0xff,0xf2,0xa3,0x81,0xff,0xe5,0x97,0x77,0xff,0xa5,0x58,0x45,0xff,0xf1,0xa3,0x81,0xff,0xf1,0xa2,0x80,0xff,0xed,0x9e,0x7d,0xff,0xed,0x9e,0x7d,0xff,0xed,0x9e,0x7d,0xff,0xed,0x9e,0x7d,0xff,0xed,0x9e,0x7d,0xff,0xed,0x9e,0x7d,0xff,0xed,0x9e,0x7d,0xff,0xed,0x9e,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xeb,0x9b,0x7b,0xff,0xf8,0xa8,0x86,0xff,0xef,0xa2,0x80,0xff,0xb2,0x66,0x51,0xff,0xa2,0x49,0x3c,0xff,0xc9,0x5f,0x4e,0xff,0x72,0x28,0x21,0xa7,0x5b,0x21,0x1b,0xa6,0xfb,0xa6,0x85,0xff,0xf1,0xa0,0x7f,0xff,0xf7,0xa6,0x84,0xff,0xd1,0x84,0x69,0xff,0xcf,0x6b,0x57,0xff,0xba,0x5a,0x49,0xeb,0x4,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x41,0x96,0x43,0x35,0xe8,0xf1,0x9e,0x7d,0xff,0xff,0xc0,0x98,0xff,0xff,0xb5,0x90,0xff,0xf3,0xa2,0x81,0xff,0xeb,0x9c,0x7c,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xed,0x9d,0x7d,0xff,0xeb,0x9b,0x7b,0xff,0xff,0xb2,0x8d,0xff,0xb8,0x6a,0x54,0xff,0xb0,0x61,0x4e,0xff,0xff,0xb8,0x93,0xff,0xed,0x9c,0x7c,0xff,0xec,0x9b,0x7c,0xff,0xed,0x9c,0x7d,0xff,0xec,0x9c,0x7c,0xff,0xec,0x9c,0x7c,0xff,0xed,0x9c,0x7c,0xff,0xed,0x9c,0x7c,0xff,0xed,0x9c,0x7c,0xff,0xed,0x9c,0x7c,0xff,0xec,0x9c,0x7c,0xff,0xec,0x9c,0x7c,0xff,0xed,0x9c,0x7c,0xff,0xed,0x9b,0x7c,0xff,0xec,0x9b,0x7c,0xff,0xea,0x99,0x7a,0xff,0xf3,0xa1,0x81,0xff,0xff,0xb2,0x8e,0xff,0xde,0x92,0x74,0xff,0xb0,0x62,0x4f,0xff,0xcc,0x61,0x50,0xff,0xa2,0x3f,0x34,0xff,0xc7,0x7c,0x63,0xff,0xfb,0xaa,0x88,0xff,0xf1,0x9f,0x80,0xff,0xdd,0x90,0x73,0xff,0xc5,0x65,0x52,0xff,0xd0,0x62,0x51,0xff,0x20,0x0,0x0,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17,0x0,0x0,0x1,0x43,0x6,0x5,0x69,0x95,0x45,0x37,0xdf,0xd7,0x82,0x68,0xff,0xff,0xab,0x88,0xff,0xff,0xbb,0x96,0xff,0xff,0xb5,0x91,0xff,0xfe,0xac,0x8a,0xff,0xfa,0xa8,0x87,0xff,0xfa,0xa8,0x86,0xff,0xfa,0xa8,0x87,0xff,0xf9,0xa8,0x86,0xff,0xf9,0xa7,0x86,0xff,0xfd,0xaa,0x88,0xff,0xff,0xb1,0x8f,0xff,0xae,0x60,0x4e,0xff,0xc8,0x77,0x5f,0xff,0xff,0xb8,0x94,0xff,0xff,0xae,0x8c,0xff,0xfe,0xab,0x89,0xff,0xfe,0xab,0x89,0xff,0xfd,0xaa,0x89,0xff,0xfc,0xa9,0x88,0xff,0xfa,0xa7,0x86,0xff,0xf7,0xa4,0x84,0xff,0xf5,0xa2,0x83,0xff,0xf4,0xa1,0x82,0xff,0xf3,0xa1,0x82,0xff,0xf3,0xa0,0x81,0xff,0xf3,0x9f,0x80,0xff,0xf2,0x9f,0x80,0xff,0xf2,0x9f,0x80,0xff,0xf2,0x9f,0x81,0xff,0xf2,0x9f,0x80,0xff,0xfd,0xab,0x8a,0xff,0xff,0xbe,0x99,0xff,0xd1,0x7f,0x67,0xff,0x94,0x30,0x29,0xff,0xcf,0x7a,0x63,0xff,0xff,0xb5,0x92,0xff,0xf0,0x9d,0x7f,0xff,0xeb,0x9c,0x7e,0xff,0xbc,0x5f,0x4e,0xff,0xe2,0x6a,0x59,0xff,0x4e,0x12,0xf,0x6c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x0,0x0,0x3c,0x64,0x1c,0x17,0x95,0x95,0x4b,0x3c,0xdf,0xc4,0x72,0x5c,0xff,0xdc,0x89,0x6f,0xff,0xe2,0x90,0x74,0xff,0xe3,0x90,0x74,0xff,0xe1,0x8f,0x73,0xff,0xe3,0x91,0x75,0xff,0xe4,0x91,0x75,0xff,0xe1,0x8e,0x73,0xff,0xf0,0x9b,0x7e,0xff,0xec,0x97,0x7a,0xff,0x99,0x48,0x3b,0xff,0xa8,0x58,0x47,0xff,0xdb,0x88,0x6e,0xff,0xd8,0x85,0x6c,0xff,0xd6,0x84,0x6b,0xff,0xd8,0x85,0x6c,0xff,0xdc,0x89,0x6e,0xff,0xe1,0x8e,0x73,0xff,0xe8,0x95,0x79,0xff,0xed,0x9a,0x7d,0xff,0xef,0x9c,0x7f,0xff,0xf1,0x9d,0x80,0xff,0xf2,0x9f,0x80,0xff,0xf3,0x9f,0x81,0xff,0xf4,0xa0,0x82,0xff,0xf4,0xa0,0x82,0xff,0xf4,0x9e,0x81,0xff,0xf1,0x9c,0x7f,0xff,0xef,0x9a,0x7d,0xff,0xf8,0xa2,0x84,0xff,0xdd,0x8f,0x74,0xff,0xa3,0x3e,0x34,0xff,0xbc,0x5a,0x4b,0xff,0xf2,0xa2,0x84,0xff,0xff,0xa9,0x8a,0xff,0xff,0xaf,0x8f,0xff,0xc2,0x69,0x56,0xff,0xef,0x73,0x60,0xff,0x76,0x2a,0x23,0xb2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x0,0x4a,0x4d,0x0,0x0,0x8d,0x54,0x5,0x4,0x96,0x56,0x8,0x7,0x88,0x55,0x7,0x6,0x7d,0x57,0x9,0x7,0x7a,0x55,0x8,0x7,0x78,0x53,0x7,0x5,0x7b,0x54,0x8,0x7,0x80,0x58,0xe,0xb,0x87,0x57,0xe,0xb,0x90,0x3b,0x0,0x0,0x96,0x47,0x0,0x0,0x96,0x4b,0x0,0x0,0x8e,0x49,0x0,0x0,0x83,0x4a,0x0,0x0,0x7b,0x4c,0x1,0x1,0x77,0x52,0x7,0x6,0x77,0x5b,0xf,0xc,0x7b,0x60,0x15,0x11,0x83,0x64,0x17,0x13,0x8d,0x65,0x18,0x14,0x97,0x66,0x1a,0x16,0xa1,0x68,0x1c,0x17,0xa9,0x6a,0x1c,0x17,0xaf,0x6a,0x1c,0x17,0xb2,0x69,0x1b,0x16,0xb6,0x67,0x19,0x14,0xbb,0x65,0x16,0x13,0xb6,0x65,0x17,0x13,0xaf,0x5a,0xe,0xc,0xac,0x65,0x11,0xe,0xac,0x5c,0xc,0xa,0xb3,0x60,0x15,0x11,0xbc,0x77,0x29,0x21,0xc4,0x79,0x2c,0x25,0xc9,0x68,0x1c,0x17,0xc9,0x72,0x1f,0x1a,0xe1,0x5b,0xd,0xb,0x85,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 \ No newline at end of file diff --git a/UI/PainterEngine/architecture/PainterEngine_Runtime.c b/UI/PainterEngine/architecture/PainterEngine_Runtime.c new file mode 100644 index 0000000..1e80fcf --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_Runtime.c @@ -0,0 +1,118 @@ +#include "PainterEngine_Runtime.h" + + +px_void PE_MP_ErrorCall(PX_MEMORYPOOL_ERROR err) +{ + switch(err) + { + case PX_MEMORYPOOL_ERROR_INVALID_ACCESS: + PX_ERROR("Memory access error"); + break; + case PX_MEMORYPOOL_ERROR_INVALID_ADDRESS: + PX_ERROR("Memory address error"); + break; + case PX_MEMORYPOOL_ERROR_OUTOFMEMORY: + PX_ERROR("Out of memory"); + break; + } +} + + + +px_bool PX_RuntimeInitialize(PX_Runtime *pe,px_int surface_width,px_int surface_height,px_int window_width,px_int window_height,px_void *runtime_memoryPtr,px_uint size,px_uint ui_size,px_uint resource_size,px_uint game_size) +{ + PX_memset(pe,0,sizeof(PX_Runtime)); + pe->surface_width=surface_width; + pe->surface_height=surface_height; + pe->window_width=window_width; + pe->window_height=window_height; + + pe->mp=MP_Create(runtime_memoryPtr,size); + pe->mp_ui=MP_Create(MP_Malloc(&pe->mp,ui_size),ui_size); + pe->mp_resources=MP_Create(MP_Malloc(&pe->mp,resource_size),resource_size); + pe->mp_game=MP_Create(MP_Malloc(&pe->mp,game_size),game_size); + + + MP_ErrorCatch(&pe->mp_ui,PE_MP_ErrorCall); + MP_ErrorCatch(&pe->mp_resources,PE_MP_ErrorCall); + MP_ErrorCatch(&pe->mp_game,PE_MP_ErrorCall); + + //resources + if(!PX_ResourceLibraryInitialize(&pe->mp_resources,&pe->ResourceLibrary))return PX_FALSE; + //surface + if (pe->surface_width==0||pe->surface_height==0) + { + pe->RenderSurface.height=0; + pe->RenderSurface.width=0; + pe->RenderSurface.surfaceBuffer=PX_NULL; + pe->RenderSurface.MP=PX_NULL; + } + else + { + if(!PX_SurfaceCreate(&pe->mp,surface_width,surface_height,&pe->RenderSurface)) + { + return PX_FALSE; + } + PX_SurfaceClear(&pe->RenderSurface,0,0,pe->RenderSurface.width-1,pe->RenderSurface.height-1,PX_COLOR(255,255,255,255)); + } + + + + return PX_TRUE; +} + + +px_bool PX_RuntimeResize(PX_Runtime *pe,px_int surface_width,px_int surface_height,px_int window_width,px_int window_height) +{ + if (PX_SurfaceMemorySize(surface_width,surface_height)+64>(px_int)pe->mp.FreeSize) + { + return PX_FALSE; + } + + PX_SurfaceFree(&pe->RenderSurface); + + pe->surface_width=surface_width; + pe->surface_height=surface_height; + pe->window_width=window_width; + pe->window_height=window_height; + + if(!PX_SurfaceCreate(&pe->mp,surface_width,surface_height,&pe->RenderSurface)) + { + PX_ASSERT(); + return PX_FALSE; + } + PX_SurfaceClear(&pe->RenderSurface,0,0,pe->RenderSurface.width-1,pe->RenderSurface.height-1,PX_COLOR(255,255,255,255)); + + return PX_TRUE; +} + + +px_void PX_RuntimeReset(PX_Runtime *pe) +{ + MP_Reset(&pe->mp_game); + MP_Reset(&pe->mp_resources); + MP_Reset(&pe->mp_ui); + PX_ResourceLibraryInitialize(&pe->mp_resources,&pe->ResourceLibrary); + PX_SurfaceClear(&pe->RenderSurface,0,0,pe->RenderSurface.width-1,pe->RenderSurface.height-1,PX_COLOR(0,0,0,0)); +} + +px_memorypool PX_RuntimeCreateCalcMemoryPool(PX_Runtime *pe) +{ + return MP_Create(MP_Malloc(&pe->mp,PE_MEMORY_CALC_SIZE),PE_MEMORY_CALC_SIZE); +} + +px_void PX_RuntimeFreeCalcMemoryPool(PX_Runtime *pe,px_memorypool mp) +{ + MP_Free(&pe->mp,mp.StartAddr); +} + + +px_surface * PX_RuntimeGetRenderSurface(PX_Runtime *pe) +{ + return &pe->RenderSurface; +} + +px_void PX_RuntimeRenderClear(PX_Runtime *runtime,px_color color) +{ + PX_SurfaceClear(&runtime->RenderSurface,0,0,runtime->RenderSurface.width-1,runtime->RenderSurface.height-1,color); +} diff --git a/UI/PainterEngine/architecture/PainterEngine_Runtime.h b/UI/PainterEngine/architecture/PainterEngine_Runtime.h new file mode 100644 index 0000000..678cec1 --- /dev/null +++ b/UI/PainterEngine/architecture/PainterEngine_Runtime.h @@ -0,0 +1,36 @@ +#ifndef PAINTERENGINE_RUNTIME_H +#define PAINTERENGINE_RUNTIME_H + +#include "../kernel/PX_Kernel.h" + +#define PE_MEMORY_CALC_SIZE 1024*1024*2//2M + +typedef struct +{ + px_int window_width; + px_int window_height; + px_int surface_width; + px_int surface_height; + px_memorypool mp; + px_memorypool mp_ui; + px_memorypool mp_resources; + px_memorypool mp_game; + PX_ResourceLibrary ResourceLibrary; + px_surface RenderSurface; + + ////////////////////////////////////////////////////////////////////////// + PX_FontModule fontmodule; + PX_SoundPlay soundplay; + + +}PX_Runtime; + + +px_bool PX_RuntimeInitialize(PX_Runtime *pe,px_int surface_width,px_int surface_height,px_int window_width,px_int window_height,px_void *runtime_memoryPtr,px_uint size,px_uint ui_size,px_uint resource_size,px_uint game_size); +px_bool PX_RuntimeResize(PX_Runtime *pe,px_int surface_width,px_int surface_height,px_int window_width,px_int window_height); +px_void PX_RuntimeReset(PX_Runtime *pe); +px_memorypool PX_RuntimeCreateCalcMemoryPool(PX_Runtime *pe); +px_void PX_RuntimeFreeCalcMemoryPool(PX_Runtime *pe,px_memorypool mp); +px_surface *PX_RuntimeGetRenderSurface(PX_Runtime *pe); +px_void PX_RuntimeRenderClear(PX_Runtime *runtime,px_color color); +#endif diff --git a/UI/PainterEngine/core/PX_3D.c b/UI/PainterEngine/core/PX_3D.c new file mode 100644 index 0000000..26abb99 --- /dev/null +++ b/UI/PainterEngine/core/PX_3D.c @@ -0,0 +1,1265 @@ +#include "PX_3D.h" + +px_void PX_3D_RenderListTransform_LocalToGlobal(PX_3D_RenderList *list,PX_3D_World *world); +px_void PX_3D_RenderListTransform_Camera(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListCullRegion(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListCalculateNormal(PX_3D_RenderList *list); +px_void PX_3D_RenderListUpdateBackFace(PX_3D_RenderList *list,PX_3D_CULLMODE cullmode); +px_void PX_3D_RenderListTransform_Perspective(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListCullOutSide(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListTransform_Screen(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_CameraBuildEulerMatrix(PX_3D_Camera *camera,PX_3D_CAMERAROTMODE rotmode); +px_void PX_3D_CameraBuildUVNMatrix(PX_3D_Camera *camera); + + +px_void PX_3D_WorldInitialize(PX_3D_World *world,px_float x,px_float y,px_float z,px_float rotX,px_float rotY,px_float rotZ,px_float scale) +{ + px_matrix mrotx,mroty,mrotz,mscale,mtrans; + PX_MatrixIdentity(&world->mat); + PX_MatrixRotateX(&mrotx,rotX); + PX_MatrixRotateY(&mroty,rotY); + PX_MatrixRotateZ(&mrotz,rotZ); + PX_MatrixScale(&mscale,scale,scale,scale); + PX_MatrixTranslation(&mtrans,x,y,z); + + world->mat=PX_MatrixMultiply(world->mat,mscale); + world->mat=PX_MatrixMultiply(world->mat,mrotx); + world->mat=PX_MatrixMultiply(world->mat,mroty); + world->mat=PX_MatrixMultiply(world->mat,mrotz); + world->mat=PX_MatrixMultiply(world->mat,mtrans); + +} + +px_bool PX_3D_CameraEulerInitialize(px_memorypool *mp,PX_3D_Camera *camera,px_point4D cameraPosition,px_float rotX,px_float rotY,px_float rotZ,px_float near,px_float far,px_float fov,px_float viewPortWidth,px_float viewPortHeight) +{ + PX_memset(camera,0,sizeof(PX_3D_Camera)); + camera->mp=mp; + camera->type=PX_3D_CAMERA_TYPE_EULER; + camera->position=cameraPosition; + camera->rotDirection.x=rotX; + camera->rotDirection.y=rotY; + camera->rotDirection.z=rotZ; + + camera->near_z=near; + camera->far_z=far; + + camera->viewport_width=viewPortWidth; + camera->viewport_height=viewPortHeight; + + camera->viewport_center_x=(viewPortWidth-1)/2; + camera->viewport_center_y=(viewPortHeight-1)/2; + + camera->aspect_ratio=viewPortWidth/(px_float)viewPortHeight; + + PX_MatrixIdentity(&camera->mat_cam); + PX_MatrixIdentity(&camera->mat_per); + PX_MatrixIdentity(&camera->mat_scr); + + camera->fov=fov; + camera->viewplane_width=2.0f; + camera->viewplane_height=2.0f/camera->aspect_ratio; + + + if (fov==90) + { + camera->d=1; + } + else + { + camera->d=(0.5f)*(camera->viewplane_width)*PX_tan_angle(fov); + } + camera->zbuffer=(px_float *)MP_Malloc(mp,(px_int)(sizeof(px_float)*camera->viewport_height*camera->viewport_width)); + return camera->zbuffer!=PX_NULL; +} + +px_bool PX_3D_CameraUVNInitialize(px_memorypool *mp,PX_3D_Camera *camera,px_point4D cameraPosition,px_point4D cameraTarget,px_float near,px_float far,px_float fov,px_float viewPortWidth,px_float viewPortHeight) +{ + PX_memset(camera,0,sizeof(PX_3D_Camera)); + camera->type=PX_3D_CAMERA_TYPE_UVN; + camera->position=cameraPosition; + camera->targetDirection=cameraTarget; + camera->near_z=near; + camera->far_z=far; + camera->mp=mp; + camera->viewport_width=viewPortWidth; + camera->viewport_height=viewPortHeight; + + camera->viewport_center_x=(viewPortWidth-1)/2; + camera->viewport_center_y=(viewPortHeight-1)/2; + + camera->aspect_ratio=viewPortWidth/(px_float)viewPortHeight; + + PX_MatrixIdentity(&camera->mat_cam); + PX_MatrixIdentity(&camera->mat_per); + PX_MatrixIdentity(&camera->mat_scr); + + camera->fov=fov; + camera->viewplane_width=2.0f; + camera->viewplane_height=2.0f/camera->aspect_ratio; + + if (fov==90) + { + camera->d=1; + } + else + { + camera->d=(0.5f)*(camera->viewplane_width)*PX_tan_angle(fov); + } + camera->zbuffer=(px_float *)MP_Malloc(mp,(px_int)(sizeof(px_float)*camera->viewport_height*camera->viewport_width)); + return camera->zbuffer!=PX_NULL; +} + +px_void PX_3D_CameraSetPosition(PX_3D_Camera *camera,px_point4D cameraPosition,px_point4D cameraTarget) +{ + camera->position=cameraPosition; + camera->targetDirection=cameraTarget; +} + +px_void PX_3D_CameraBuildEulerMatrix(PX_3D_Camera *camera,PX_3D_CAMERAROTMODE rotmode) +{ + px_matrix mt_inv,mx_inv,my_inv,mz_inv,mrot,mtmp; + px_float theta_x=camera->rotDirection.x; + px_float theta_y=camera->rotDirection.y; + px_float theta_z=camera->rotDirection.z; + + PX_MatrixIdentity(&mt_inv); + mt_inv._41=-camera->position.x; + mt_inv._42=-camera->position.y; + mt_inv._43=-camera->position.z; + + + PX_MatrixRotateX(&mx_inv,-theta_x); + PX_MatrixRotateY(&my_inv,-theta_y); + PX_MatrixRotateZ(&mz_inv,-theta_z); + + + switch(rotmode) + { + case PX_3D_CAMERAROTMODE_XYZ: + { + mtmp=PX_MatrixMultiply(mx_inv,my_inv); + mrot=PX_MatrixMultiply(mtmp,mz_inv); + } + break; + case PX_3D_CAMERAROTMODE_YXZ: + { + mtmp=PX_MatrixMultiply(my_inv,mx_inv); + mrot=PX_MatrixMultiply(mtmp,mz_inv); + } + break; + case PX_3D_CAMERAROTMODE_XZY: + { + mtmp=PX_MatrixMultiply(mx_inv,mz_inv); + mrot=PX_MatrixMultiply(mtmp,my_inv); + } + break; + case PX_3D_CAMERAROTMODE_YZX: + { + mtmp=PX_MatrixMultiply(my_inv,mz_inv); + mrot=PX_MatrixMultiply(mtmp,mx_inv); + } + break; + case PX_3D_CAMERAROTMODE_ZYX: + { + mtmp=PX_MatrixMultiply(mz_inv,my_inv); + mrot=PX_MatrixMultiply(mtmp,mx_inv); + } + break; + case PX_3D_CAMERAROTMODE_ZXY: + { + mtmp=PX_MatrixMultiply(mz_inv,mx_inv); + mrot=PX_MatrixMultiply(mtmp,my_inv); + } + break; + default: + { + PX_MatrixIdentity(&mrot); + } + break; + } + camera->mat_cam=PX_MatrixMultiply(mt_inv,mrot); +} + +px_void PX_3D_CameraBuildUVNMatrix(PX_3D_Camera *camera) +{ + px_matrix mt_inv; + px_matrix mt_uvn; + px_point4D u,v,n; + + PX_MatrixIdentity(&mt_inv); + mt_inv._41=-camera->position.x; + mt_inv._42=-camera->position.y; + mt_inv._43=-camera->position.z; + + n.x=camera->targetDirection.x-camera->position.x; + n.y=camera->targetDirection.y-camera->position.y; + n.z=camera->targetDirection.z-camera->position.z; + n.w=1; + + n=PX_Point4DUnit(n); + v=PX_POINT4D(0,1,0); + u=PX_Point4DCross(v,n); + + PX_MatrixZero(&mt_uvn); + mt_uvn._11=u.x; + mt_uvn._12=v.x; + mt_uvn._13=n.x; + + mt_uvn._21=u.y; + mt_uvn._22=v.y; + mt_uvn._23=n.y; + + mt_uvn._31=u.z; + mt_uvn._32=v.z; + mt_uvn._33=n.z; + + mt_uvn._44=1; + camera->mat_cam=PX_MatrixMultiply(mt_inv,mt_uvn); +} + +px_void PX_3D_RenderListUpdateBackFace(PX_3D_RenderList *list,PX_3D_CULLMODE cullmode) +{ + px_int i,j; + PX_3D_Face *pface=PX_NULL; + px_float dot; + px_bool bBackFace; + px_vector4D v1,v2; + for (i=0;ifacestream.size;i++) + { + bBackFace=PX_TRUE; + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + v1=pface->transform_vertex[0].normal; + for (j=0;j<3;j++) + { + v2=pface->transform_vertex[j].position; + dot=PX_Point4DDot(v1,v2); + if (cullmode==PX_3D_CULLMODE_NONE) + { + bBackFace=PX_FALSE; + } + else + { + if (dot>0) + { + if (cullmode!=PX_3D_CULLMODE_CCW) + { + bBackFace=PX_FALSE; + break; + } + } + else + { + if (cullmode!=PX_3D_CULLMODE_CW) + { + bBackFace=PX_FALSE; + break; + } + } + } + } + if (bBackFace) + { + pface->state|=PX_3D_FACESTATE_BACKFACE; + } + else + { + pface->state&=~PX_3D_FACESTATE_BACKFACE; + } + } +} + +px_void PX_3D_RenderListCalculateNormal(PX_3D_RenderList *list) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + px_vector4D v1,v2; + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + v1=PX_Point4DSub(pface->transform_vertex[1].position,pface->transform_vertex[0].position); + v2=PX_Point4DSub(pface->transform_vertex[2].position,pface->transform_vertex[1].position); + pface->transform_vertex[0].normal=PX_Point4DUnit(PX_Point4DCross(v1,v2)); + pface->transform_vertex[1].normal=pface->transform_vertex[0].normal; + pface->transform_vertex[2].normal=pface->transform_vertex[0].normal; + } +} + +px_void PX_3D_RenderListTransform_Screen(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + px_float alpha=(0.5f*camera->viewport_width-0.5f); + px_float beta=(0.5f*camera->viewport_height-0.5f); + + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + + pface->transform_vertex[0].position.x=alpha+alpha*pface->transform_vertex[0].position.x; + pface->transform_vertex[0].position.y=beta+beta*pface->transform_vertex[0].position.y; + + pface->transform_vertex[1].position.x=alpha+alpha*pface->transform_vertex[1].position.x; + pface->transform_vertex[1].position.y=beta+beta*pface->transform_vertex[1].position.y; + + pface->transform_vertex[2].position.x=alpha+alpha*pface->transform_vertex[2].position.x; + pface->transform_vertex[2].position.y=beta+beta*pface->transform_vertex[2].position.y; + + //inv y + pface->transform_vertex[0].position.y=-pface->transform_vertex[0].position.y+camera->viewport_height; + pface->transform_vertex[1].position.y=-pface->transform_vertex[1].position.y+camera->viewport_height; + pface->transform_vertex[2].position.y=-pface->transform_vertex[2].position.y+camera->viewport_height; + } +} + + + +px_void PX_3D_RenderListPixelShader(px_surface *psurface,px_int x,px_int y,px_float z,px_float u,px_float v,px_point4D normal,px_texture *pTexture,px_color color/*px_float *zbuffer,px_int zw*/) +{ + //texture mapping + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_color sampleColor; + px_int resWidth; + px_int resHeight; + + + + if (pTexture) + { + resWidth=pTexture->width; + resHeight=pTexture->height; + u=PX_ABS(u); + v=PX_ABS(v); + u-=(px_int)u; + v-=(px_int)v; + + mapX=u*resWidth; + mapY=v*resHeight; + + if (mapX<-0.5||mapX>resWidth+0.5) + { + return; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + return; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + + PX_SurfaceDrawPixel(psurface,x,y,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + + } + + if (color._argb.ucolor!=0) + { + PX_SurfaceDrawPixel(psurface,x,y,color); + + } +} + + +static px_void PX_3D_RenderListRasterization(px_surface *psurface,PX_3D_RenderList *pList,PX_3D_Vertex p0,PX_3D_Vertex p1,PX_3D_Vertex p2,px_texture *ptexture,px_color color,px_int view_width,px_int view_height,px_float zbuffer[],px_int zw) +{ + px_int ix,iy; + px_bool k01infinite=PX_FALSE; + px_bool k02infinite=PX_FALSE; + px_bool k12infinite=PX_FALSE; + px_float k01,b01,k02,b02,k12,b12; + px_float x0; + px_float y0; + px_float z0; + px_float s0; + px_float t0; + + px_float x1; + px_float y1; + px_float z1; + px_float s1; + px_float t1; + + px_float x2; + px_float y2; + px_float z2; + px_float s2; + px_float t2; + + + px_float y, xleft, xright; + px_float oneoverz_left, oneoverz_right; + px_float oneoverz_top, oneoverz_bottom; + px_float oneoverz, oneoverz_step; + px_float soverz_top, soverz_bottom; + px_float toverz_top, toverz_bottom; + px_float soverz_left, soverz_right; + px_float toverz_left, toverz_right; + px_float soverz, soverz_step; + px_float toverz, toverz_step; + px_float s, t; + px_float btmy,midy; + px_float originalZ; + + px_float a,b,c; + px_point position; + a=(px_float)PX_sqrtd((p1.position.x-p2.position.x)*(p1.position.x-p2.position.x)); + b=(px_float)PX_sqrtd((p0.position.x-p2.position.x)*(p0.position.x-p2.position.x)); + c=(px_float)PX_sqrtd((p1.position.x-p0.position.x)*(p1.position.x-p0.position.x)); + + position.x=(a*p0.position.x+b*p1.position.x+c*p2.position.x)/(a+b+c); + position.y=(a*p0.position.y+b*p1.position.y+c*p2.position.y)/(a+b+c); + + // p0 + // p1 p2 + + if (p1.position.ybtmy) + { + midy=p1.position.y; + btmy=p2.position.y; + } + + + + do + { + px_float x01m; + + x0=p0.position.x; + y0=p0.position.y; + x1=p1.position.x; + y1=p1.position.y; + x2=p2.position.x; + y2=p2.position.y; + + + if (x0==x1) + { + x01m=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + x01m=(y2-b01)/k01; + } + + if (x01m>x2) + { + PX_3D_Vertex t; + t=p2; + p2=p1; + p1=t; + } + } while (0); + + + + x0=p0.position.x; + y0=p0.position.y; + z0=p0.position.z; + s0=p0.u; + t0=p0.v; + + x1=p1.position.x; + y1=p1.position.y; + z1=p1.position.z; + s1=p1.u; + t1=p1.v; + + x2=p2.position.x; + y2=p2.position.y; + z2=p2.position.z; + s2=p2.u; + t2=p2.v; + + k01infinite=PX_FALSE; + k02infinite=PX_FALSE; + k12infinite=PX_FALSE; + if (x0==x1) + { + k01infinite=PX_TRUE; + k01 = 1; + b01=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + } + + if (x0==x2) + { + k02infinite=PX_TRUE; + k02 = 1; + b02=x0; + } + else + { + k02=(y0-y2)/(x0-x2); + b02=y0-k02*x0; + } + + if (x1==x2) + { + k12infinite=PX_TRUE; + b12=x0; + } + else + { + k12=(y1-y2)/(x1-x2); + b12=y1-k12*x1; + } + + + for(y = (px_int)(y0+0.5f)+0.5f; y <=midy; y++) + { + if (k01infinite==PX_TRUE) + { + xleft=b01; + } + else + { + xleft = (y-b01)/k01; + } + + if (k02infinite==PX_TRUE) + { + xright=b02; + } + else + { + xright = (y-b02)/k02; + } + + + oneoverz_top = 1.0f / z0; + oneoverz_bottom = 1.0f/z1; + oneoverz_left = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y1-y0) + oneoverz_top; + oneoverz_bottom = 1.0f / z2; + oneoverz_right = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y2-y0) + oneoverz_top; + oneoverz_step = (oneoverz_right-oneoverz_left) / (xright-xleft); + soverz_top = s0 / z0; + soverz_bottom = s1 / z1; + soverz_left = (y-y0) * (soverz_bottom-soverz_top) / (y1-y0) + soverz_top; + soverz_bottom = s2 / z2; + soverz_right = (y-y0) * (soverz_bottom-soverz_top) / (y2-y0) + soverz_top; + soverz_step = (soverz_right-soverz_left) / (xright-xleft); + toverz_top = t0 / z0; + toverz_bottom = t1 / z1; + toverz_left = (y-y0) * (toverz_bottom-toverz_top) / (y1-y0) + toverz_top; + toverz_bottom = t2 / z2; + toverz_right = (y-y0) * (toverz_bottom-toverz_top) / (y2-y0) + toverz_top; + toverz_step = (toverz_right-toverz_left) / (xright-xleft); + oneoverz = oneoverz_left,soverz = soverz_left, toverz = toverz_left; + + for(ix = (px_int)(xleft+0.5);ix < (px_int)(xright+0.5f); ++ix) + { + s = soverz / oneoverz; + t = toverz / oneoverz; + originalZ=1.0f/oneoverz; + + iy=(px_int)y; + + if (ix>0&&ix=0&&iypixelShader) + { + position.z=originalZ; + pList->pixelShader(psurface,ix,iy,position,s,t,p0.normal,ptexture,color/*,zbuffer,zw*/); + } + else + { + PX_3D_RenderListPixelShader(psurface,ix,iy,originalZ,s,t,p0.normal,ptexture,color/*,zbuffer,zw*/); + } + } + + oneoverz += oneoverz_step; + soverz += soverz_step; + toverz += toverz_step; + } + } + + // p1 p2 + // p0 + if (p1.position.y>p0.position.y) + { + PX_3D_Vertex vt; + vt=p1; + p1=p0; + p0=vt; + } + + if (p2.position.y>p0.position.y) + { + PX_3D_Vertex vt; + vt=p2; + p2=p0; + p0=vt; + } + + btmy=p1.position.y; + midy=p2.position.y; + if (p2.position.yx2) + { + PX_3D_Vertex t; + t=p2; + p2=p1; + p1=t; + } + } while (0); + + + + x0=p0.position.x; + y0=p0.position.y; + z0=p0.position.z; + s0=p0.u; + t0=p0.v; + + x1=p1.position.x; + y1=p1.position.y; + z1=p1.position.z; + s1=p1.u; + t1=p1.v; + + x2=p2.position.x; + y2=p2.position.y; + z2=p2.position.z; + s2=p2.u; + t2=p2.v; + + k01infinite=PX_FALSE; + k02infinite=PX_FALSE; + k12infinite=PX_FALSE; + if (x0==x1) + { + k01infinite=PX_TRUE; + b01=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + } + + if (x0==x2) + { + k02infinite=PX_TRUE; + b02=x0; + } + else + { + k02=(y0-y2)/(x0-x2); + b02=y0-k02*x0; + } + + if (x1==x2) + { + k12infinite=PX_TRUE; + b12=x0; + } + else + { + k12=(y1-y2)/(x1-x2); + b12=y1-k12*x1; + } + + + for(y = (px_int)(midy+0.5f)+0.5f; y < y0; y++) + { + if (k01infinite) + { + xleft=b01; + } + else + { + xleft = (y-b01)/k01; + } + + if (k02infinite) + { + xright=b02; + } + else + { + xright = (y-b02)/k02; + } + + + oneoverz_top = 1.0f / z0; + oneoverz_bottom = 1.0f/z1; + oneoverz_left = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y1-y0) + oneoverz_top; + oneoverz_bottom = 1.0f / z2; + oneoverz_right = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y2-y0) + oneoverz_top; + oneoverz_step = (oneoverz_right-oneoverz_left) / (xright-xleft); + soverz_top = s0 / z0; + soverz_bottom = s1 / z1; + soverz_left = (y-y0) * (soverz_bottom-soverz_top) / (y1-y0) + soverz_top; + soverz_bottom = s2 / z2; + soverz_right = (y-y0) * (soverz_bottom-soverz_top) / (y2-y0) + soverz_top; + soverz_step = (soverz_right-soverz_left) / (xright-xleft); + toverz_top = t0 / z0; + toverz_bottom = t1 / z1; + toverz_left = (y-y0) * (toverz_bottom-toverz_top) / (y1-y0) + toverz_top; + toverz_bottom = t2 / z2; + toverz_right = (y-y0) * (toverz_bottom-toverz_top) / (y2-y0) + toverz_top; + toverz_step = (toverz_right-toverz_left) / (xright-xleft); + oneoverz = oneoverz_left,soverz = soverz_left, toverz = toverz_left; + + for(ix = (px_int)(xleft+0.5);ix < (px_int)(xright+0.5f); ++ix) + { + s = soverz / oneoverz; + t = toverz / oneoverz; + originalZ=1.0f/oneoverz; + + iy=(px_int)y; + + if (ix>0&&ix=0&&iypixelShader) + { + position.z=originalZ; + pList->pixelShader(psurface,ix,iy,position,s,t,p0.normal,ptexture,color/*,zbuffer,zw*/); + } + else + { + PX_3D_RenderListPixelShader(psurface,ix,iy,originalZ,s,t,p0.normal,ptexture,color/*,zbuffer,zw*/); + } + } + oneoverz += oneoverz_step; + soverz += soverz_step; + toverz += toverz_step; + } + } + +} + + +px_void PX_3D_Scene(PX_3D_RenderList *list,PX_3D_World *world,PX_3D_Camera *camera) +{ + PX_3D_CULLMODE cullmode; + PX_memset(camera->zbuffer,0,(px_int)(sizeof(px_float)*camera->viewport_height*camera->viewport_width)); + cullmode=list->cullmode; + PX_3D_RenderListTransform_LocalToGlobal(list,world); + switch (camera->type) + { + case PX_3D_CAMERA_TYPE_EULER: + PX_3D_CameraBuildEulerMatrix(camera,PX_3D_CAMERAROTMODE_XYZ); + break; + case PX_3D_CAMERA_TYPE_UVN: + PX_3D_CameraBuildUVNMatrix(camera); + break; + } + PX_3D_RenderListTransform_Camera(list,camera); + PX_3D_RenderListCullRegion(list,camera); + PX_3D_RenderListCalculateNormal(list); + PX_3D_RenderListUpdateBackFace(list,cullmode); + PX_3D_RenderListTransform_Perspective(list,camera); + PX_3D_RenderListCullOutSide(list,camera); + PX_3D_RenderListTransform_Screen(list,camera); +} + +px_void PX_3D_Present(px_surface *psurface, PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + px_texture *ptex; + px_color clr; + + + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_PURE) + { + if (list->facestream.size) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,0); + clr=pface->transform_vertex[0].clr; + } + else + { + clr._argb.ucolor=0; + } + } + else + { + clr._argb.ucolor=0; + } + + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_TEXTURE) + { + ptex=list->ptexture; + } + else + { + ptex=PX_NULL; + } + + if (ptex||clr._argb.ucolor) + { + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + if (!(pface->state&PX_3D_FACESTATE_BACKFACE||pface->state&PX_3D_FACESTATE_CLIPPED)) + { + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_PURE) + { + PX_3D_RenderListRasterization(psurface,list,pface->transform_vertex[0],pface->transform_vertex[1],pface->transform_vertex[2],list->ptexture,clr,(px_int)camera->viewport_width,(px_int)camera->viewport_height,camera->zbuffer,(px_int)camera->viewport_width); + } + else + { + PX_3D_RenderListRasterization(psurface,list,pface->transform_vertex[0],pface->transform_vertex[1],pface->transform_vertex[2],ptex,PX_COLOR(0,0,0,0),(px_int)camera->viewport_width,(px_int)camera->viewport_height,camera->zbuffer,(px_int)camera->viewport_width); + } + + } + + } + } + + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_POINT) + { + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + PX_GeoDrawSolidCircle(psurface,(px_int)pface->transform_vertex[0].position.x,(px_int)pface->transform_vertex[0].position.y,2,pface->transform_vertex[0].clr); + PX_GeoDrawSolidCircle(psurface,(px_int)pface->transform_vertex[1].position.x,(px_int)pface->transform_vertex[1].position.y,2,pface->transform_vertex[1].clr); + PX_GeoDrawSolidCircle(psurface,(px_int)pface->transform_vertex[2].position.x,(px_int)pface->transform_vertex[2].position.y,2,pface->transform_vertex[2].clr); + + } + } + + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_LINE) + { + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + if (!(pface->state&PX_3D_FACESTATE_BACKFACE||pface->state&PX_3D_FACESTATE_CLIPPED)) + { + PX_GeoDrawLine(psurface,(px_int)pface->transform_vertex[0].position.x,(px_int)pface->transform_vertex[0].position.y,(px_int)pface->transform_vertex[1].position.x,(px_int)pface->transform_vertex[1].position.y,1,pface->transform_vertex[0].clr); + PX_GeoDrawLine(psurface,(px_int)pface->transform_vertex[1].position.x,(px_int)pface->transform_vertex[1].position.y,(px_int)pface->transform_vertex[2].position.x,(px_int)pface->transform_vertex[2].position.y,1,pface->transform_vertex[1].clr); + PX_GeoDrawLine(psurface,(px_int)pface->transform_vertex[2].position.x,(px_int)pface->transform_vertex[2].position.y,(px_int)pface->transform_vertex[0].position.x,(px_int)pface->transform_vertex[0].position.y,1,pface->transform_vertex[2].clr); + } + + } + } + + +} + +px_void PX_3D_RenderListSetPixelShader(PX_3D_RenderList *list,PX_3D_PixelShader func) +{ + list->pixelShader=func; +} + +px_void PX_3D_RenderListTransform_Perspective(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + for (i=0;ifacestream.size;i++) + { + px_float z; + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + z=pface->transform_vertex[0].position.z; + pface->transform_vertex[0].position.x=camera->d*pface->transform_vertex[0].position.x/z; + pface->transform_vertex[0].position.y=camera->d*pface->transform_vertex[0].position.y/z; + + z=pface->transform_vertex[1].position.z; + pface->transform_vertex[1].position.x=camera->d*pface->transform_vertex[1].position.x/z; + pface->transform_vertex[1].position.y=camera->d*pface->transform_vertex[1].position.y/z; + + z=pface->transform_vertex[2].position.z; + pface->transform_vertex[2].position.x=camera->d*pface->transform_vertex[2].position.x/z; + pface->transform_vertex[2].position.y=camera->d*pface->transform_vertex[2].position.y/z; + + } +} + +px_void PX_3D_RenderListCullOutSide(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + px_bool outside; + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + outside=PX_FALSE; + + if (pface->transform_vertex[0].position.y>camera->viewplane_height/2&&\ + pface->transform_vertex[1].position.y>camera->viewplane_height/2&&\ + pface->transform_vertex[2].position.y>camera->viewplane_height/2) + { + //up + outside=PX_TRUE; + } + else\ + if (pface->transform_vertex[0].position.y<-camera->viewplane_height/2&&\ + pface->transform_vertex[1].position.y<-camera->viewplane_height/2&&\ + pface->transform_vertex[2].position.y<-camera->viewplane_height/2) + { + //down + outside=PX_TRUE; + } + else \ + if (pface->transform_vertex[0].position.x<-camera->viewplane_width/2&&\ + pface->transform_vertex[1].position.x<-camera->viewplane_width/2&&\ + pface->transform_vertex[2].position.x<-camera->viewplane_width/2) + { + //left + outside=PX_TRUE; + } + else \ + if (pface->transform_vertex[0].position.x>camera->viewplane_width/2&&\ + pface->transform_vertex[1].position.x>camera->viewplane_width/2&&\ + pface->transform_vertex[2].position.x>camera->viewplane_width/2) + { + //right + outside=PX_TRUE; + } + + + if (outside) + { + pface->state|=PX_3D_FACESTATE_CLIPPED; + } + else + { + pface->state&=~PX_3D_FACESTATE_CLIPPED; + } + } +} + +px_void PX_3D_RenderListTransform_Camera(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + PX_3D_RenderListTransform(list,camera->mat_cam,PX_3D_RENDERLIST_TRANSFORM_GLOBAL_TO_GLOBAL); +} + +px_void PX_3D_RenderListCullRegion(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i,j; + PX_3D_Face *pface=PX_NULL; + px_bool outside; + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + outside=PX_FALSE; + for (j=0;j<3;j++) + { + //behind + if (pface->transform_vertex[j].position.z<=camera->near_z) + { + outside=PX_TRUE; + break; + } + } + if (pface->transform_vertex[0].position.z>camera->far_z&&\ + pface->transform_vertex[1].position.z>camera->far_z&&\ + pface->transform_vertex[2].position.z>camera->far_z) + { + outside=PX_TRUE; + } + if (outside) + { + pface->state|=PX_3D_FACESTATE_CLIPPED; + } + else + { + pface->state&=~PX_3D_FACESTATE_CLIPPED; + } + } +} + +px_void PX_3D_RenderListTransform(PX_3D_RenderList *list,px_matrix mat,PX_3D_RENDERLIST_TRANSFORM t) +{ + switch (t) + { + case PX_3D_RENDERLIST_TRANSFORM_LOCAL_TO_LOCAL: + { + px_int i; + PX_3D_Face *pface=PX_NULL; + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + pface->vertex[0].position=PX_Point4DMulMatrix(pface->vertex[0].position,mat); + pface->vertex[1].position=PX_Point4DMulMatrix(pface->vertex[1].position,mat); + pface->vertex[2].position=PX_Point4DMulMatrix(pface->vertex[2].position,mat); + } + } + break; + case PX_3D_RENDERLIST_TRANSFORM_LOACL_TO_GLOBAL: + { + px_int i; + PX_3D_Face *pface=PX_NULL; + + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + pface->transform_vertex[0]=pface->vertex[0]; + pface->transform_vertex[1]=pface->vertex[1]; + pface->transform_vertex[2]=pface->vertex[2]; + pface->transform_vertex[0].position=PX_Point4DMulMatrix(pface->vertex[0].position,mat); + pface->transform_vertex[1].position=PX_Point4DMulMatrix(pface->vertex[1].position,mat); + pface->transform_vertex[2].position=PX_Point4DMulMatrix(pface->vertex[2].position,mat); + } + } + break; + case PX_3D_RENDERLIST_TRANSFORM_GLOBAL_TO_GLOBAL: + { + px_int i; + PX_3D_Face *pface=PX_NULL; + + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + pface->transform_vertex[0].position=PX_Point4DMulMatrix(pface->transform_vertex[0].position,mat); + pface->transform_vertex[1].position=PX_Point4DMulMatrix(pface->transform_vertex[1].position,mat); + pface->transform_vertex[2].position=PX_Point4DMulMatrix(pface->transform_vertex[2].position,mat); + } + } + break; + } +} + + + +px_void PX_3D_RenderListReset(PX_3D_RenderList *list) +{ + PX_VectorClear(&list->facestream); +} + +px_void PX_3D_RenderListFree(PX_3D_RenderList *list) +{ + PX_VectorFree(&list->facestream); +} + +px_bool PX_3D_RenderListInitialize(px_memorypool *mp,PX_3D_RenderList *list,px_dword PX_3D_PRESENTMODE,PX_3D_CULLMODE cullmode,px_texture *ptexture) +{ + list->mp=mp; + list->ptexture=ptexture; + list->PX_3D_PRESENTMODE=PX_3D_PRESENTMODE; + list->cullmode=cullmode; + list->pixelShader=PX_NULL; + if(!PX_VectorInitialize(mp,&list->facestream,sizeof(PX_3D_Face),64)) + { + return PX_FALSE; + } + return PX_TRUE; + +} + +px_void PX_3D_CameraFree(PX_3D_Camera *camera) +{ + MP_Free(camera->mp,camera->zbuffer); +} + +px_bool PX_3D_RenderListPush(PX_3D_RenderList *list,PX_3D_Face face) +{ + if(!PX_VectorPushback(&list->facestream,&face))return PX_FALSE; + return PX_TRUE; +} + +px_void PX_3D_RenderListTransform_LocalToGlobal(PX_3D_RenderList *list,PX_3D_World *world) +{ + PX_3D_RenderListTransform(list,world->mat,PX_3D_RENDERLIST_TRANSFORM_LOACL_TO_GLOBAL); +} + +px_point *PX_3D_CreateTextureNormal(px_memorypool *mp,px_texture *pTexture) +{ + px_int i,j; + px_point *pmatrix=(px_point *)MP_Malloc(mp,sizeof(px_point)*pTexture->width*pTexture->height); + px_float *gradient_x=(px_float *)MP_Malloc(mp,sizeof(px_float)*pTexture->width*pTexture->height); + px_float *gradient_y=(px_float *)MP_Malloc(mp,sizeof(px_float)*pTexture->width*pTexture->height); + + PX_ImageFilter_SobelX(pTexture,gradient_x); + PX_ImageFilter_SobelY(pTexture,gradient_y); + + for(j=0;jheight;j++) + { + for (i=0;iwidth;i++) + { + pmatrix[j*pTexture->width+i].x=(px_float)(-gradient_x[j*pTexture->width+i]/PX_sqrtd(gradient_x[j*pTexture->width+i]*gradient_x[j*pTexture->width+i]+gradient_y[j*pTexture->width+i]*gradient_y[j*pTexture->width+i]+1)); + pmatrix[j*pTexture->width+i].y=(px_float)(-gradient_y[j*pTexture->width+i]/PX_sqrtd(gradient_x[j*pTexture->width+i]*gradient_x[j*pTexture->width+i]+gradient_y[j*pTexture->width+i]*gradient_y[j*pTexture->width+i]+1)); + pmatrix[j*pTexture->width+i].z=(px_float)(1/PX_sqrtd(gradient_x[j*pTexture->width+i]*gradient_x[j*pTexture->width+i]+gradient_y[j*pTexture->width+i]*gradient_y[j*pTexture->width+i]+1)); + } + } + MP_Free(mp,gradient_x); + MP_Free(mp,gradient_y); + return pmatrix; +} + + +px_point *PX_3D_CreateBumpTextureNormal(px_memorypool *mp,px_texture *pTexture) +{ + px_int i,j; + px_point *pmatrix=(px_point *)MP_Malloc(mp,sizeof(px_point)*pTexture->width*pTexture->height); + px_float *gradient_x=(px_float *)MP_Malloc(mp,sizeof(px_float)*pTexture->width*pTexture->height); + px_float *gradient_y=(px_float *)MP_Malloc(mp,sizeof(px_float)*pTexture->width*pTexture->height); + + PX_ImageFilter_SobelX(pTexture,gradient_x); + PX_ImageFilter_SobelY(pTexture,gradient_y); + + for(j=0;jheight;j++) + { + for (i=0;iwidth;i++) + { + px_point v; + if (gradient_x[j*pTexture->width+i]==0&&gradient_y[j*pTexture->width+i]==0) + { + + v=PX_POINT(0,0,-1); + + } + else + { + px_float rad,scale; + px_color clr; + + clr=pTexture->surfaceBuffer[j*pTexture->width+i]; + v.x=-gradient_x[j*pTexture->width+i]; + v.y=-gradient_y[j*pTexture->width+i]; + v=PX_PointNormalization(v); + + rad=(clr._argb.r+clr._argb.g+clr._argb.b)/3/255.0f; + v.z=-(px_float)PX_sind(rad*PX_PI/2); + scale=(px_float)PX_cosd(rad*PX_PI/2); + v.x*=scale; + v.y*=scale; + } + + + pmatrix[j*pTexture->width+i]=v; +// px_point v1,v2; +// v1.z=0; +// v1.x=(px_float)PX_cosd(gradient_x[j*pTexture->width+i]*PX_PI/2); +// v1.y=(px_float)PX_sind(gradient_x[j*pTexture->width+i]*PX_PI/2); +// +// v2.z=-(px_float)PX_sind(gradient_y[j*pTexture->width+i]*PX_PI/2); +// v2.x=0; +// v2.y=-(px_float)PX_cosd(gradient_y[j*pTexture->width+i]*PX_PI/2); +// +// pmatrix[j*pTexture->width+i]=PX_PointUnit(PX_PointCross(v1,v2)); + } + } + MP_Free(mp,gradient_x); + MP_Free(mp,gradient_y); + return pmatrix; +} diff --git a/UI/PainterEngine/core/PX_3D.h b/UI/PainterEngine/core/PX_3D.h new file mode 100644 index 0000000..3acca5e --- /dev/null +++ b/UI/PainterEngine/core/PX_3D.h @@ -0,0 +1,127 @@ +#ifndef PX_3D_H +#define PX_3D_H + + +#include "PX_BaseGeo.h" +#include "PX_Vector.h" +#include "PX_Texture.h" +#include "PX_ImageFilter.h" + +#define PX_3D_FACESTATE_ACTIVE 1 +#define PX_3D_FACESTATE_CLIPPED 2 +#define PX_3D_FACESTATE_BACKFACE 4 + +typedef enum +{ + PX_3D_RENDERLIST_TRANSFORM_LOCAL_TO_LOCAL, + PX_3D_RENDERLIST_TRANSFORM_LOACL_TO_GLOBAL, + PX_3D_RENDERLIST_TRANSFORM_GLOBAL_TO_GLOBAL, +}PX_3D_RENDERLIST_TRANSFORM; + +typedef enum +{ + PX_3D_CAMERAROTMODE_XYZ, + PX_3D_CAMERAROTMODE_YXZ, + PX_3D_CAMERAROTMODE_XZY, + PX_3D_CAMERAROTMODE_YZX, + PX_3D_CAMERAROTMODE_ZYX, + PX_3D_CAMERAROTMODE_ZXY, +}PX_3D_CAMERAROTMODE; + +typedef enum +{ + PX_3D_CULLMODE_NONE, + PX_3D_CULLMODE_CW, + PX_3D_CULLMODE_CCW, +}PX_3D_CULLMODE; + +#define PX_3D_PRESENTMODE_POINT 1 +#define PX_3D_PRESENTMODE_LINE 2 +#define PX_3D_PRESENTMODE_TEXTURE 4 +#define PX_3D_PRESENTMODE_PURE 8 + +typedef px_void (*PX_3D_PixelShader)(px_surface *psurface,px_int x,px_int y,px_point position,px_float u,px_float v,px_point4D normal,px_texture *pTexture,px_color color); + + + +typedef struct +{ + px_point4D position; + px_vector4D normal; + px_color clr; + px_float u,v; +}PX_3D_Vertex; + +typedef struct +{ + px_dword state; + PX_3D_Vertex vertex[3]; + PX_3D_Vertex transform_vertex[3]; +}PX_3D_Face; + +typedef struct +{ + px_memorypool *mp; + px_texture *ptexture; + px_vector facestream; + px_dword PX_3D_PRESENTMODE; + PX_3D_CULLMODE cullmode; + PX_3D_PixelShader pixelShader; +}PX_3D_RenderList; + +typedef struct +{ + px_matrix mat; +}PX_3D_World; + +typedef enum +{ + PX_3D_CAMERA_TYPE_EULER, + PX_3D_CAMERA_TYPE_UVN, +}PX_3D_CAMERA_TYPE; + +typedef struct +{ + PX_3D_CAMERA_TYPE type; + px_memorypool *mp; + px_float near_z,far_z; + + px_float fov; + px_float d; + + px_point4D position; + union + { + px_point4D targetDirection; + px_point4D rotDirection; + }; + px_float viewplane_width,viewplane_height; + px_float viewport_width,viewport_height,viewport_center_x,viewport_center_y; + px_float aspect_ratio; + + px_matrix mat_cam,mat_per,mat_scr; + + px_float *zbuffer; +}PX_3D_Camera; + + + +px_void PX_3D_WorldInitialize(PX_3D_World *world,px_float x,px_float y,px_float z,px_float rotX,px_float rotY,px_float rotZ,px_float scale); +px_bool PX_3D_CameraEulerInitialize(px_memorypool *mp,PX_3D_Camera *camera,px_point4D cameraPosition,px_float rotX,px_float rotY,px_float rotZ,px_float near,px_float far,px_float fov,px_float viewPortWidth,px_float viewPortHeight); +px_bool PX_3D_CameraUVNInitialize(px_memorypool *mp,PX_3D_Camera *camera,px_point4D cameraPosition,px_point4D cameraTarget,px_float near,px_float far,px_float fov,px_float viewPortWidth,px_float viewPortHeight); +px_void PX_3D_CameraSetPosition(PX_3D_Camera *camera,px_point4D cameraPosition,px_point4D cameraTarget); +px_bool PX_3D_RenderListInitialize(px_memorypool *mp,PX_3D_RenderList *list,px_dword PX_3D_PRESENTMODE,PX_3D_CULLMODE cullmode,px_texture *ptexture); +px_void PX_3D_CameraFree(PX_3D_Camera *camera); +px_bool PX_3D_RenderListPush(PX_3D_RenderList *list,PX_3D_Face face); +px_point *PX_3D_CreateTextureNormal(px_memorypool *mp,px_texture *pTexture); +px_point *PX_3D_CreateBumpTextureNormal(px_memorypool *mp,px_texture *pTexture); +px_void PX_3D_RenderListTransform(PX_3D_RenderList *list,px_matrix mat,PX_3D_RENDERLIST_TRANSFORM t); +px_void PX_3D_RenderListReset(PX_3D_RenderList *list); +px_void PX_3D_RenderListFree(PX_3D_RenderList *list); +px_void PX_3D_Scene(PX_3D_RenderList *list,PX_3D_World *world,PX_3D_Camera *camera); +px_void PX_3D_Present(px_surface *psurface, PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListSetPixelShader(PX_3D_RenderList *list,PX_3D_PixelShader func); + + + +#endif diff --git a/UI/PainterEngine/core/PX_AES.c b/UI/PainterEngine/core/PX_AES.c new file mode 100644 index 0000000..c029170 --- /dev/null +++ b/UI/PainterEngine/core/PX_AES.c @@ -0,0 +1,448 @@ +#include "PX_AES.h" + +const AES_BYTE Sbox[][16]= +{ // populate the Sbox matrix + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /*0*/ {0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76}, + /*1*/ {0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0}, + /*2*/ {0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15}, + /*3*/ {0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75}, + /*4*/ {0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84}, + /*5*/ {0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf}, + /*6*/ {0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8}, + /*7*/ {0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2}, + /*8*/ {0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73}, + /*9*/ {0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb}, + /*a*/ {0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79}, + /*b*/ {0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08}, + /*c*/ {0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a}, + /*d*/ {0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e}, + /*e*/ {0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf}, + /*f*/ {0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16}, +}; + +const AES_BYTE iSbox[][16]= +{ // populate the iSbox matrix + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /*0*/ {0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb}, + /*1*/ {0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb}, + /*2*/ {0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e}, + /*3*/ {0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25}, + /*4*/ {0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92}, + /*5*/ {0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84}, + /*6*/ {0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06}, + /*7*/ {0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b}, + /*8*/ {0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73}, + /*9*/ {0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e}, + /*a*/ {0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b}, + /*b*/ {0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4}, + /*c*/ {0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f}, + /*d*/ {0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef}, + /*e*/ {0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61}, + /*f*/ {0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d} +}; + +const AES_BYTE Rcon[][4]= +{ + {0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00}, + {0x04, 0x00, 0x00, 0x00}, + {0x08, 0x00, 0x00, 0x00}, + {0x10, 0x00, 0x00, 0x00}, + {0x20, 0x00, 0x00, 0x00}, + {0x40, 0x00, 0x00, 0x00}, + {0x80, 0x00, 0x00, 0x00}, + {0x1b, 0x00, 0x00, 0x00}, + {0x36, 0x00, 0x00, 0x00} +}; + +static px_bool PX_AES_i_Cipher(PX_AES *aesStruct,AES_BYTE input[PX_AES_BLOCK_BYTES_SIZE], AES_BYTE output[PX_AES_BLOCK_BYTES_SIZE]) /* encipher 16-bit input */; +static px_void PX_AES_i_InvCipher(PX_AES *aesStruct,AES_BYTE input[PX_AES_BLOCK_BYTES_SIZE], AES_BYTE output[PX_AES_BLOCK_BYTES_SIZE]) /* decipher 16-bit input */; +AES_BYTE* PX_AES_SubWord(PX_AES *aesStruct,AES_BYTE* word); +AES_BYTE* PX_AES_RotWord(PX_AES *aesStruct,AES_BYTE* word); + +px_void PX_AES_SetNbNkNr(PX_AES *aesStruct,PX_AES_KeySize keySize); +px_void PX_AES_KeyExpansion(PX_AES *aesStruct); +px_void PX_AES_AddRoundKey(PX_AES *aesStruct,px_int round); +px_void PX_AES_SubBytes(PX_AES *aesStruct); +px_void PX_AES_ShiftRows(PX_AES *aesStruct); +px_void PX_AES_InvShiftRows(PX_AES *aesStruct); +px_void PX_AES_MixColumns(PX_AES *aesStruct); +px_void PX_AES_InvSubBytes(PX_AES *aesStruct); +px_void PX_AES_InvMixColumns(PX_AES *aesStruct); + + +px_void PX_AES_Initialize(PX_AES *aesStruct,PX_AES_KeySize keySize,AES_BYTE keyByte[]) +{ + PX_AES_SetNbNkNr(aesStruct,keySize); + /*Bytes copied*/ + PX_memcpy(aesStruct->key,keyByte,aesStruct->Nk*4); + + PX_AES_KeyExpansion(aesStruct); // expand the seed key into a key schedule and store in w +} + +px_void PX_AES_SetNbNkNr(PX_AES *aesStruct, PX_AES_KeySize keySize ) +{ + aesStruct->Nb = 4; // block size always = 4 words = 16 bytes = 128 bits for AES + + if (keySize == PX_AES_KeySize_Bits128) + { + aesStruct->Nk = 4; // key size = 4 words = 16 bytes = 128 bits + aesStruct->Nr = 10; // rounds for algorithm = 10 + } + else if (keySize == PX_AES_KeySize_Bits192) + { + aesStruct->Nk = 6; // 6 words = 24 bytes = 192 bits + aesStruct->Nr = 12; + } + else if (keySize == PX_AES_KeySize_Bits256) + { + aesStruct->Nk = 8; // 8 words = 32 bytes = 256 bits + aesStruct->Nr = 14; + } +} + +px_void PX_AES_AddRoundKey(PX_AES *aesStruct, px_int round ) +{ + px_int r,c; + for (r = 0; r < 4; ++r) + { + for (c = 0; c < 4; ++c) + { + aesStruct->State[r][c] = (AES_BYTE) ( (px_int)aesStruct->State[r][c] ^ (px_int)aesStruct->w[(round*4)+c][r] ); + } + } +} + +px_void PX_AES_KeyExpansion(PX_AES *aesStruct) +{ + px_int row; + AES_BYTE temp[4]; + for (row = 0; row < aesStruct->Nk; ++row) + { + aesStruct->w[row][0] = aesStruct->key[4*row]; + aesStruct->w[row][1] = aesStruct->key[4*row+1]; + aesStruct->w[row][2] = aesStruct->key[4*row+2]; + aesStruct->w[row][3] = aesStruct->key[4*row+3]; + } + + + + for (row = aesStruct->Nk; row < aesStruct->Nb * (aesStruct->Nr+1); ++row) + { + temp[0] = aesStruct->w[row-1][0]; temp[1] = aesStruct->w[row-1][1]; + temp[2] = aesStruct->w[row-1][2]; temp[3] = aesStruct->w[row-1][3]; + + if (row % aesStruct->Nk == 0) + { + PX_memcpy(temp ,PX_AES_SubWord(aesStruct,PX_AES_RotWord(aesStruct,temp)),4); + + temp[0] = (AES_BYTE)( (px_int)temp[0] ^ (px_int)Rcon[row/aesStruct->Nk][0] ); + temp[1] = (AES_BYTE)( (px_int)temp[1] ^ (px_int)Rcon[row/aesStruct->Nk][1] ); + temp[2] = (AES_BYTE)( (px_int)temp[2] ^ (px_int)Rcon[row/aesStruct->Nk][2] ); + temp[3] = (AES_BYTE)( (px_int)temp[3] ^ (px_int)Rcon[row/aesStruct->Nk][3] ); + } + else if ( aesStruct->Nk > 6 && (row % aesStruct->Nk == 4) ) + { + PX_memcpy(temp,PX_AES_SubWord(aesStruct,temp),4); + } + + // w[row] = w[row-Nk] xor temp + aesStruct->w[row][0] = (AES_BYTE) ( (px_int)aesStruct->w[row-aesStruct->Nk][0] ^ (px_int)temp[0] ); + aesStruct->w[row][1] = (AES_BYTE) ( (px_int)aesStruct->w[row-aesStruct->Nk][1] ^ (px_int)temp[1] ); + aesStruct->w[row][2] = (AES_BYTE) ( (px_int)aesStruct->w[row-aesStruct->Nk][2] ^ (px_int)temp[2] ); + aesStruct->w[row][3] = (AES_BYTE) ( (px_int)aesStruct->w[row-aesStruct->Nk][3] ^ (px_int)temp[3] ); + + } // for loop +} + + +AES_BYTE* PX_AES_SubWord(PX_AES *aesStruct,AES_BYTE* word) +{ + static AES_BYTE result[4]; + result[0] = Sbox[ word[0] >> 4][word[0] & 0x0f ]; + result[1] = Sbox[ word[1] >> 4][word[1] & 0x0f ]; + result[2] = Sbox[ word[2] >> 4][word[2] & 0x0f ]; + result[3] = Sbox[ word[3] >> 4][word[3] & 0x0f ]; + return result; +} + +AES_BYTE* PX_AES_RotWord(PX_AES *aesStruct,AES_BYTE* word) +{ + static AES_BYTE result[4]; + result[0] = word[1]; + result[1] = word[2]; + result[2] = word[3]; + result[3] = word[0]; + return result; +} + + +static px_bool PX_AES_i_Cipher(PX_AES *aesStruct,AES_BYTE input[PX_AES_BLOCK_BYTES_SIZE], AES_BYTE output[PX_AES_BLOCK_BYTES_SIZE]) // encipher 16-bit input +{ + px_int i,round; + for ( i = 0; i < (4 * aesStruct->Nb); ++i) + { + aesStruct->State[i % 4][i / 4] = input[i]; + } + + PX_AES_AddRoundKey(aesStruct,0); + + for (round = 1; round <= (aesStruct->Nr - 1); ++round) // main round loop + { + PX_AES_SubBytes(aesStruct); + PX_AES_ShiftRows(aesStruct); + PX_AES_MixColumns(aesStruct); + PX_AES_AddRoundKey(aesStruct,round); + } // main round loop + + PX_AES_SubBytes(aesStruct); + PX_AES_ShiftRows(aesStruct); + PX_AES_AddRoundKey(aesStruct,aesStruct->Nr); + + // output = state + for (i = 0; i < (4 * aesStruct->Nb); ++i) + { + output[i] = aesStruct->State[i % 4][i / 4]; + } + return PX_TRUE; +} // Cipher() + +px_bool PX_AES_Cipher(PX_AES *aesStruct,px_byte input[16], px_byte output[16]) /* encipher 16-bit input */ +{ + return PX_AES_i_Cipher(aesStruct,(AES_BYTE *)input,(AES_BYTE *)output); +} + + + +px_void PX_AES_SubBytes(PX_AES *aesStruct) +{ + px_int r,c; + for ( r = 0; r < 4; ++r) + { + for (c = 0; c < 4; ++c) + { + aesStruct->State[r][c] = Sbox[ (aesStruct->State[r][c] >> 4)][(aesStruct->State[r][c] & 0x0f) ]; + } + } +} + + +px_void PX_AES_ShiftRows(PX_AES *aesStruct) +{ + AES_BYTE temp[4][4]; + px_int r,c; + for ( r = 0; r < 4; ++r) // copy State into temp[] + { + for ( c = 0; c < 4; ++c) + { + temp[r][c] = aesStruct->State[r][c]; + } + } + + for ( r = 1; r < 4; ++r) // shift temp into State + { + for ( c = 0; c < 4; ++c) + { + aesStruct->State[r][c] = temp[ r][ (c + r) % aesStruct->Nb ]; + } + } +} // ShiftRows() + + +px_void PX_AES_InvShiftRows(PX_AES *aesStruct) +{ + AES_BYTE temp[4][4]; + px_int r,c; + for (r = 0; r < 4; ++r) // copy State into temp[] + { + for (c = 0; c < 4; ++c) + { + temp[r][c] = aesStruct->State[r][c]; + } + } + for ( r = 1; r < 4; ++r) // shift temp into State + { + for ( c = 0; c < 4; ++c) + { + aesStruct->State[r][(c + r) % aesStruct->Nb ] = temp[r][c]; + } + } +} // InvShiftRows() + +/////////////////////////////////////////////////////////////////////////// +// GF(2^8) Operation.... +////////////////////////////////////////////////////////////////////////// +AES_BYTE PX_AES_gfmultby01(AES_BYTE b) +{ + return b; +} + +AES_BYTE PX_AES_gfmultby02(AES_BYTE b) +{ + if (b < 0x80) + return (AES_BYTE)(px_int)(b <<1); + else + return (AES_BYTE)( (px_int)(b << 1) ^ (px_int)(0x1b) ); +} + +AES_BYTE PX_AES_gfmultby03(AES_BYTE b) +{ + return (AES_BYTE) ( (px_int)PX_AES_gfmultby02(b) ^ (px_int)b ); +} + +AES_BYTE PX_AES_gfmultby09(AES_BYTE b) +{ + return (AES_BYTE)( (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(PX_AES_gfmultby02(b))) ^ + (px_int)b ); +} + +AES_BYTE PX_AES_gfmultby0b(AES_BYTE b) +{ + return (AES_BYTE)( (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(PX_AES_gfmultby02(b))) ^ + (px_int)PX_AES_gfmultby02(b) ^ + (px_int)b ); +} + +AES_BYTE PX_AES_gfmultby0d(AES_BYTE b) +{ + return (AES_BYTE)( (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(PX_AES_gfmultby02(b))) ^ + (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(b)) ^ + (px_int)(b) ); +} + +AES_BYTE PX_AES_gfmultby0e(AES_BYTE b) +{ + return (AES_BYTE)( (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(PX_AES_gfmultby02(b))) ^ + (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(b)) ^ + (px_int)PX_AES_gfmultby02(b) ); +} + +px_void PX_AES_MixColumns(PX_AES *aesStruct) +{ + AES_BYTE temp[4][4]; + px_int r,c; + for ( r = 0; r < 4; ++r) // copy State into temp[] + { + for ( c = 0; c < 4; ++c) + { + temp[r][c] = aesStruct->State[r][c]; + } + } + + for ( c = 0; c < 4; ++c) + { + aesStruct->State[0][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby02(temp[0][c]) ^ (px_int)PX_AES_gfmultby03(temp[1][c]) ^ + (px_int)PX_AES_gfmultby01(temp[2][c]) ^ (px_int)PX_AES_gfmultby01(temp[3][c]) ); + aesStruct->State[1][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby01(temp[0][c]) ^ (px_int)PX_AES_gfmultby02(temp[1][c]) ^ + (px_int)PX_AES_gfmultby03(temp[2][c]) ^ (px_int)PX_AES_gfmultby01(temp[3][c]) ); + aesStruct->State[2][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby01(temp[0][c]) ^ (px_int)PX_AES_gfmultby01(temp[1][c]) ^ + (px_int)PX_AES_gfmultby02(temp[2][c]) ^ (px_int)PX_AES_gfmultby03(temp[3][c]) ); + aesStruct->State[3][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby03(temp[0][c]) ^ (px_int)PX_AES_gfmultby01(temp[1][c]) ^ + (px_int)PX_AES_gfmultby01(temp[2][c]) ^ (px_int)PX_AES_gfmultby02(temp[3][c]) ); + } +} // MixColumns + +px_void PX_AES_InvMixColumns(PX_AES *aesStruct) +{ + AES_BYTE temp[4][4]; + px_int r,c; + for ( r = 0; r < 4; ++r) // copy State into temp[] + { + for ( c = 0; c < 4; ++c) + { + temp[r][c] =aesStruct->State[r][c]; + } + } + + for ( c = 0; c < 4; ++c) + { + aesStruct->State[0][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby0e(temp[0][c]) ^ (px_int)PX_AES_gfmultby0b(temp[1][c]) ^ + (px_int)PX_AES_gfmultby0d(temp[2][c]) ^ (px_int)PX_AES_gfmultby09(temp[3][c]) ); + aesStruct->State[1][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby09(temp[0][c]) ^ (px_int)PX_AES_gfmultby0e(temp[1][c]) ^ + (px_int)PX_AES_gfmultby0b(temp[2][c]) ^ (px_int)PX_AES_gfmultby0d(temp[3][c]) ); + aesStruct->State[2][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby0d(temp[0][c]) ^ (px_int)PX_AES_gfmultby09(temp[1][c]) ^ + (px_int)PX_AES_gfmultby0e(temp[2][c]) ^ (px_int)PX_AES_gfmultby0b(temp[3][c]) ); + aesStruct->State[3][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby0b(temp[0][c]) ^ (px_int)PX_AES_gfmultby0d(temp[1][c]) ^ + (px_int)PX_AES_gfmultby09(temp[2][c]) ^ (px_int)PX_AES_gfmultby0e(temp[3][c]) ); + } +} // InvMixColumns + +static px_void PX_AES_i_InvCipher(PX_AES *aesStruct,AES_BYTE input[PX_AES_BLOCK_BYTES_SIZE], AES_BYTE output[PX_AES_BLOCK_BYTES_SIZE]) // decipher 16-bit input +{ + px_int i,round; + + for (i = 0; i < (4 * aesStruct->Nb); ++i) + { + aesStruct->State[i % 4][i / 4] = input[i]; + } + + PX_AES_AddRoundKey(aesStruct,aesStruct->Nr); + + for (round = aesStruct->Nr-1; round >= 1; --round) // main round loop + { + PX_AES_InvShiftRows(aesStruct); + PX_AES_InvSubBytes(aesStruct); + PX_AES_AddRoundKey(aesStruct,round); + PX_AES_InvMixColumns(aesStruct); + } // end main round loop for InvCipher + + PX_AES_InvShiftRows(aesStruct); + PX_AES_InvSubBytes(aesStruct); + PX_AES_AddRoundKey(aesStruct,0); + + // output = state + for ( i = 0; i < (4 * aesStruct->Nb); ++i) + { + output[i] = aesStruct->State[i % 4][i / 4]; + } + +} // InvCipher() + + + +px_void PX_AES_InvCipher(PX_AES *aesStruct,px_byte input[16], px_byte output[16]) /* decipher 16-bit input */ +{ + PX_AES_i_InvCipher(aesStruct,(AES_BYTE *)input,(AES_BYTE *)output); +} + +px_void PX_AES_InvSubBytes(PX_AES *aesStruct) +{ + px_int r,c; + for (r = 0; r < 4; ++r) + { + for (c = 0; c < 4; ++c) + { + aesStruct->State[r][c] = iSbox[ (aesStruct->State[r][c] >> 4)][(aesStruct->State[r][c] & 0x0f) ]; + } + } +} // InvSubBytes + +px_bool PX_AES_CipherBuffer(PX_AES *aesStruct,px_byte input[],px_int size,px_byte output[]) +{ + px_int i; + if (size%16) + { + return PX_FALSE; + } + for (i=0;imp=mp; + pANN->LayerCount=0; + pANN->Layer=PX_NULL; + pANN->learningRate=learningRate; + pANN->regularzation=regularzation; + pANN->regularization_rate=regularization_rate; + return PX_TRUE; +} + +px_bool PX_ANNAddLayer(PX_ANN *pAnn,px_int Neurals,px_double bias,PX_ANN_ACTIVATION_FUNCTION activation,PX_ANN_LAYER_WEIGHT_INITMODE mode,px_double weight_c) +{ + px_int i; + PX_ANN_Layer *newLayer,*p; + + + newLayer=(PX_ANN_Layer *)MP_Malloc(pAnn->mp,sizeof(PX_ANN_Layer)); + + newLayer->out=PX_NULL; + newLayer->net=PX_NULL; + newLayer->w=PX_NULL; + newLayer->back=PX_NULL; + newLayer->weight_init=weight_c; + if(!newLayer) return PX_FALSE; + + newLayer->activation=activation; + newLayer->Neurals=Neurals; + + newLayer->out=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*Neurals); + if(!newLayer->out) goto _ERROR; + + newLayer->back=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*Neurals); + if(!newLayer->back) goto _ERROR; + + newLayer->net=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*Neurals); + if(!newLayer->net) goto _ERROR; + + newLayer->bias=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*Neurals); + if(!newLayer->bias) goto _ERROR; + + for (i=0;ibias[i]=bias; + } + + newLayer->pNext=PX_NULL; + newLayer->w_initMode=mode; + + if (pAnn->Layer==PX_NULL) + { + newLayer->pPrevious=PX_NULL; + newLayer->w_count=0; + newLayer->w=PX_NULL; + pAnn->Layer=newLayer; + } + else + { + p=pAnn->Layer; + while (p->pNext) p=p->pNext; + + newLayer->pPrevious=p; + newLayer->w_count=p->Neurals*Neurals; + + newLayer->w=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*newLayer->w_count); + if(!newLayer->w) goto _ERROR; + + switch(mode) + { + + case PX_ANN_LAYER_WEIGHT_INITMODE_RAND: + for (i=0;iw_count;i++) + { + newLayer->w[i]=PX_rand()/1.0/PX_RAND_MAX; + } + break; + case PX_ANN_LAYER_WEIGHT_INITMODE_GAUSSRAND: + for (i=0;iw_count;i++) + { + newLayer->w[i]=PX_GaussRand(); + } + break; + + case PX_ANN_LAYER_WEIGHT_INITMODE_CONST: + default: + for (i=0;iw_count;i++) + { + newLayer->w[i]=weight_c; + } + break; + } + p->pNext=newLayer; + } + pAnn->LayerCount++; + return PX_TRUE; +_ERROR: + MP_Free(pAnn->mp,newLayer); + if(newLayer->out) MP_Free(pAnn->mp,newLayer->out); + if(newLayer->net) MP_Free(pAnn->mp,newLayer->net); + if(newLayer->w) MP_Free(pAnn->mp,newLayer->w); + if(newLayer->back) MP_Free(pAnn->mp,newLayer->back); + if(newLayer->back) MP_Free(pAnn->mp,newLayer->bias); + return PX_FALSE; + +} +px_double PX_ANNBackward(PX_ANN *pAnn,px_double *expect) +{ + PX_ANN_Layer *p; + px_int i,j; + px_double e=0; + p=pAnn->Layer; + while(p->pNext) p=p->pNext; + + //output layer + for (i=0;iNeurals;i++) + { + switch(p->activation) + { + case PX_ANN_ACTIVATION_FUNCTION_TANH: + p->net[i]=(1-PX_tanh(p->net[i])*PX_tanh(p->net[i])); + break; + case PX_ANN_ACTIVATION_FUNCTION_SIGMOID: + p->net[i]=PX_sigmoid(p->net[i])*(1-PX_sigmoid(p->net[i])); + break; + case PX_ANN_ACTIVATION_FUNCTION_RELU: + if (p->net[i]<0) + { + p->net[i]=0; + } + else + { + p->net[i]=1; + } + break; + default: + case PX_ANN_ACTIVATION_FUNCTION_LINEAR: + p->net[i]=1; + break; + } + p->net[i]*=-(expect[i]-p->out[i]); + e+=(expect[i]-p->out[i])*(expect[i]-p->out[i]); + } + + p=p->pPrevious; + //hidden + while (p->pPrevious) + { + for (i=0;iNeurals;i++) + { + p->back[i]=0; + for (j=0;jpNext->Neurals;j++) + { + p->back[i]+=p->pNext->net[j]*p->pNext->w[i*p->pNext->Neurals+j]; + } + + switch(p->activation) + { + case PX_ANN_ACTIVATION_FUNCTION_TANH: + p->net[i]=(1-PX_tanh(p->net[i])*PX_tanh(p->net[i])); + break; + case PX_ANN_ACTIVATION_FUNCTION_SIGMOID: + p->net[i]=PX_sigmoid(p->net[i])*(1-PX_sigmoid(p->net[i])); + break; + case PX_ANN_ACTIVATION_FUNCTION_RELU: + if (p->net[i]<0) + { + p->net[i]=0; + } + else + { + p->net[i]=1; + } + break; + default: + case PX_ANN_ACTIVATION_FUNCTION_LINEAR: + break; + } + p->net[i]*=p->back[i]; + } + p=p->pPrevious; + } + return e; +} + +px_double PX_ANNTrain(PX_ANN *pAnn,px_double *input,px_double *expect) +{ + px_int i,j; + px_double delta,e; + PX_ANN_Layer *p=pAnn->Layer; + + if (!p) return -1; + + PX_ANNForward(pAnn,input); + e=PX_ANNBackward(pAnn,expect); + //update weight + //input layer + p=p->pNext; + + while (p) + { + for (i=0;iNeurals;i++) + { + for (j=0;jpPrevious->Neurals;j++) + { + delta=p->net[i]*p->pPrevious->out[j]; + switch(pAnn->regularzation) + { + case PX_ANN_REGULARZATION_L1: + delta=delta-delta*pAnn->regularization_rate/pAnn->Layer->Neurals; + break; + case PX_ANN_REGULARZATION_L2: + delta=delta-delta*pAnn->regularization_rate/pAnn->Layer->Neurals*p->w[i*p->pPrevious->Neurals+j]; + break; + case PX_ANN_REGULARZATION_NONE: + default: + break; + } + p->w[i*p->pPrevious->Neurals+j]-=delta*pAnn->learningRate; + } + } + p=p->pNext; + } + + return e; +} + + + +px_void PX_ANNForward(PX_ANN *pAnn,px_double *input) +{ + px_int i,j; + PX_ANN_Layer *pPre,*p; + px_int inputCount; + + p=pAnn->Layer; + if (!p) return; + + + inputCount=pAnn->Layer->Neurals; + + for (i=0;iLayer->net[i]=input[i]; + } + + + while (PX_TRUE) + { + if (p->pPrevious==PX_NULL) + { + for (i=0;iNeurals;i++) + { + switch(p->activation) + { + case PX_ANN_ACTIVATION_FUNCTION_SIGMOID: + p->out[i]=PX_sigmoid(p->net[i]); + break; + case PX_ANN_ACTIVATION_FUNCTION_TANH: + p->out[i]=PX_tanh(p->net[i]); + break; + case PX_ANN_ACTIVATION_FUNCTION_RELU: + p->out[i]=PX_ReLU(p->net[i]); + break; + default: + case PX_ANN_ACTIVATION_FUNCTION_LINEAR: + p->out[i]=p->net[i]; + break; + } + } + p=p->pNext; + continue; + } + pPre=p->pPrevious; + + for (i=0;iNeurals;i++) + { + p->net[i]=0; + for (j=0;jNeurals;j++) + { + p->net[i]+=pPre->out[j]*p->w[i*pPre->Neurals+j]; + } + p->net[i]+=p->bias[i]; + + switch(p->activation) + { + case PX_ANN_ACTIVATION_FUNCTION_SIGMOID: + p->out[i]=PX_sigmoid(p->net[i]); + break; + case PX_ANN_ACTIVATION_FUNCTION_TANH: + p->out[i]=PX_tanh(p->net[i]); + break; + case PX_ANN_ACTIVATION_FUNCTION_RELU: + p->out[i]=PX_ReLU(p->net[i]); + break; + default: + case PX_ANN_ACTIVATION_FUNCTION_LINEAR: + p->out[i]=p->net[i]; + break; + } + } + if (p->pNext) + { + p=p->pNext; + } + else + break; + } +} + +px_void PX_LayerFree(PX_ANN *pANN,PX_ANN_Layer *layer) +{ + MP_Free(pANN->mp,layer->back); + MP_Free(pANN->mp,layer->net); + MP_Free(pANN->mp,layer->out); + if(layer->w) + MP_Free(pANN->mp,layer->w); + if(layer->bias) + MP_Free(pANN->mp,layer->bias); +} + +px_void PX_ANNFree(PX_ANN *pANN) +{ + PX_ANN_Layer *p=pANN->Layer,*pnext; + while (p) + { + pnext=p->pNext; + PX_LayerFree(pANN,p); + MP_Free(pANN->mp,p); + p=pnext; + } + pANN->mp=PX_NULL; + pANN->LayerCount=0; + pANN->Layer=PX_NULL; +} + + +px_bool PX_ANNExport(PX_ANN *pAnn,px_void *buffer,px_int *size) +{ + PX_ANN_Layer *pLayer; + px_byte *wBuffer=(px_byte *)buffer; + PX_ANN_Data_Header dataheader; + PX_ANN_Data_LayerHeader Layerheader; + + *size=0; + + pLayer=pAnn->Layer; + + dataheader.LayerCount=pAnn->LayerCount; + dataheader.learningRate=pAnn->LayerCount; + dataheader.regularization_rate=pAnn->regularization_rate; + dataheader.regularzation=pAnn->regularzation; + + //write dataheader + if (wBuffer) + { + PX_memcpy(wBuffer,&dataheader,sizeof(dataheader)); + wBuffer+=sizeof(dataheader); + } + + *size+=sizeof(dataheader); + //write layers + while (pLayer) + { + //layer headers + Layerheader.NeuralsCount=pLayer->Neurals; + Layerheader.weight_count=pLayer->w_count; + Layerheader.activation=pLayer->activation; + + if (wBuffer) + { + PX_memcpy(wBuffer,&Layerheader,sizeof(Layerheader)); + wBuffer+=sizeof(Layerheader); + } + + *size+=sizeof(Layerheader); + + //weights + if (wBuffer) + { + PX_memcpy(wBuffer,pLayer->w,sizeof(pLayer->w[0])*pLayer->w_count); + wBuffer+=sizeof(pLayer->w[0])*pLayer->w_count; + } + *size+=sizeof(pLayer->w[0])*pLayer->w_count; + + //bias + if (wBuffer) + { + PX_memcpy(wBuffer,pLayer->bias,sizeof(pLayer->bias[0])*pLayer->Neurals); + wBuffer+=sizeof(pLayer->bias[0])*pLayer->Neurals; + } + *size+=sizeof(pLayer->bias[0])*pLayer->Neurals; + + pLayer=pLayer->pNext; + } + return PX_TRUE; +} + + +px_bool PX_ANNImport(px_memorypool *mp,PX_ANN *pAnn,px_void *buffer,px_int size) +{ + px_int i; + px_byte *rBuffer=(px_byte *)buffer; + PX_ANN_Data_Header dataheader; + PX_ANN_Data_LayerHeader Layerheader; + PX_ANN_Layer *pLastLayer; + PX_memcpy(&dataheader,rBuffer,sizeof(dataheader)); + rBuffer+=sizeof(PX_ANN_Data_Header); + size-=sizeof(PX_ANN_Data_Header); + if (size<=0){return PX_FALSE;} + + if(!PX_ANNInitialize(mp,pAnn,dataheader.learningRate,(PX_ANN_REGULARZATION)dataheader.regularzation,dataheader.regularization_rate)) + return PX_FALSE; + + for (i=0;i<(px_int)dataheader.LayerCount;i++) + { + PX_memcpy(&Layerheader,rBuffer,sizeof(Layerheader)); + rBuffer+=sizeof(Layerheader); + size-=sizeof(Layerheader); + if (size<=0){PX_ANNFree(pAnn); return PX_FALSE;} + + if(!PX_ANNAddLayer(pAnn,Layerheader.NeuralsCount,0,(PX_ANN_ACTIVATION_FUNCTION)Layerheader.activation,PX_ANN_LAYER_WEIGHT_INITMODE_CONST,0)) + { + PX_ANNFree(pAnn); + return PX_FALSE; + } + pLastLayer=pAnn->Layer; + while (pLastLayer->pNext) + { + pLastLayer=pLastLayer->pNext; + } + + PX_memcpy(pLastLayer->w,rBuffer,Layerheader.weight_count*sizeof(px_double)); + rBuffer+=Layerheader.weight_count*sizeof(px_double); + size-=Layerheader.weight_count*sizeof(px_double); + if (size<=0){PX_ANNFree(pAnn); return PX_FALSE;} + + PX_memcpy(pLastLayer->bias,rBuffer,Layerheader.NeuralsCount*sizeof(px_double)); + rBuffer+=Layerheader.NeuralsCount*sizeof(px_double); + size-=Layerheader.NeuralsCount*sizeof(px_double); + if (size<0){PX_ANNFree(pAnn); return PX_FALSE;} + + } + return PX_TRUE; +} + +px_void PX_ANNGetOutput(PX_ANN *pAnn,px_double *result) +{ + PX_ANN_Layer *p=pAnn->Layer; + if(!p) return; + while (p->pNext) p=p->pNext; + PX_memcpy(result,p->out,p->Neurals*sizeof(px_double)); +} + +px_void PX_ANNReset(PX_ANN *pANN) +{ + PX_ANN_Layer *pLayer=pANN->Layer; + px_int i; + while (pLayer) + { + switch(pLayer->w_initMode) + { + + case PX_ANN_LAYER_WEIGHT_INITMODE_RAND: + for (i=0;iw_count;i++) + { + pLayer->w[i]=PX_rand()/1.0/PX_RAND_MAX; + } + break; + case PX_ANN_LAYER_WEIGHT_INITMODE_GAUSSRAND: + for (i=0;iw_count;i++) + { + pLayer->w[i]=PX_GaussRand(); + } + break; + + case PX_ANN_LAYER_WEIGHT_INITMODE_CONST: + default: + for (i=0;iw_count;i++) + { + pLayer->w[i]=pLayer->weight_init; + } + break; + } + pLayer=pLayer->pNext; + } +} + diff --git a/UI/PainterEngine/core/PX_ANN.h b/UI/PainterEngine/core/PX_ANN.h new file mode 100644 index 0000000..34f53ef --- /dev/null +++ b/UI/PainterEngine/core/PX_ANN.h @@ -0,0 +1,78 @@ +#ifndef PX_ANN_H +#define PX_ANN_H + +#include "PX_MemoryPool.h" + +typedef enum +{ + PX_ANN_LAYER_WEIGHT_INITMODE_CONST, + PX_ANN_LAYER_WEIGHT_INITMODE_RAND, + PX_ANN_LAYER_WEIGHT_INITMODE_GAUSSRAND, +}PX_ANN_LAYER_WEIGHT_INITMODE; + +typedef enum +{ + PX_ANN_ACTIVATION_FUNCTION_SIGMOID, + PX_ANN_ACTIVATION_FUNCTION_TANH, + PX_ANN_ACTIVATION_FUNCTION_LINEAR, + PX_ANN_ACTIVATION_FUNCTION_RELU, +}PX_ANN_ACTIVATION_FUNCTION; + +typedef enum +{ + PX_ANN_REGULARZATION_NONE, + PX_ANN_REGULARZATION_L1, + PX_ANN_REGULARZATION_L2 +}PX_ANN_REGULARZATION; + +typedef struct __PX_ANN_Layer +{ + px_double *net; + px_double *out; + px_double *back; + px_double *w; + px_double *bias; + px_int Neurals; + px_int w_count; + px_double weight_init; + PX_ANN_ACTIVATION_FUNCTION activation; + PX_ANN_LAYER_WEIGHT_INITMODE w_initMode; + struct __PX_ANN_Layer *pNext,*pPrevious; +}PX_ANN_Layer; + +typedef struct +{ + px_int LayerCount; + PX_ANN_Layer *Layer; + px_double learningRate; + px_double regularization_rate; + PX_ANN_REGULARZATION regularzation; + px_memorypool *mp; +}PX_ANN; + + +typedef struct +{ + px_dword LayerCount; + px_double learningRate; + px_double regularization_rate; + px_dword regularzation; +}PX_ANN_Data_Header; + +typedef struct +{ + px_int weight_count; + px_dword NeuralsCount; + px_dword activation; +}PX_ANN_Data_LayerHeader; + +px_bool PX_ANNInitialize(px_memorypool *mp,PX_ANN *ann,px_double learningRate,PX_ANN_REGULARZATION regularzation,px_double regularization_rate); +px_bool PX_ANNAddLayer(PX_ANN *pAnn,px_int Neurals,px_double bias,PX_ANN_ACTIVATION_FUNCTION activation,PX_ANN_LAYER_WEIGHT_INITMODE mode,px_double weight_c); +px_double PX_ANNTrain(PX_ANN *pAnn,px_double *input,px_double *expect); +px_void PX_ANNForward(PX_ANN *pAnn,px_double *input); +px_void PX_ANNGetOutput(PX_ANN *pAnn,px_double *result); +px_void PX_ANNReset(PX_ANN *pANN); +px_void PX_ANNFree(PX_ANN *pAnn); +px_bool PX_ANNExport(PX_ANN *pAnn,px_void *buffer,px_int *size); +px_bool PX_ANNImport(px_memorypool *mp,PX_ANN *pAnn,px_void *buffer,px_int size); +#endif diff --git a/UI/PainterEngine/core/PX_Arle.c b/UI/PainterEngine/core/PX_Arle.c new file mode 100644 index 0000000..5ce616b --- /dev/null +++ b/UI/PainterEngine/core/PX_Arle.c @@ -0,0 +1,163 @@ +#include "PX_Arle.h" + +typedef enum +{ + PX_ARLE_TYPE_UNKNOW, + PX_ARLE_TYPE_UNEQUAL, + PX_ARLE_TYPE_EQUAL, +}PX_ARLE_TYPE; + + +px_int PX_ArleCompressData(px_byte *_in,px_uchar size,PX_ARLE_TYPE type,px_byte *_out) +{ + px_uchar ecode; + if (size==0) + { + return 0; + } + switch (type) + { + case PX_ARLE_TYPE_UNKNOW: + { + if (_out) + { + ecode=1;//0000 0001 + _out[0]=ecode; + _out[1]=_in[0]; + } + return 2; + } + break; + case PX_ARLE_TYPE_UNEQUAL: + { + if (_out) + { + ecode=0; + ecode|=size; + _out[0]=ecode; + PX_memcpy(_out+1,_in,size); + } + return size+1; + + } + break; + case PX_ARLE_TYPE_EQUAL: + { + if (_out) + { + ecode&=0x80; + ecode|=size; + _out[0]=ecode; + _out[1]=_in[0]; + } + return 2; + } + break; + } + return 0; +} + +px_void PX_ArleCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *_outsize) +{ + PX_ARLE_TYPE type=PX_ARLE_TYPE_UNKNOW; + px_uint wsize; + px_byte rlv=_in[0];//last value of read + px_uint p_cursor=0,r_cursor=1,w_cursor=0; + *_outsize=0; + + while (r_cursor=127) + { + wsize=PX_ArleCompressData(_in+p_cursor,r_cursor-p_cursor,type,_out?_out+w_cursor:PX_NULL); + *_outsize+=wsize; + w_cursor+=wsize; + p_cursor=r_cursor; + type=PX_ARLE_TYPE_UNKNOW; + rlv=_in[r_cursor]; + r_cursor++; + continue; + } + + switch (type) + { + case PX_ARLE_TYPE_UNKNOW: + { + if (rlv==_in[r_cursor]) + { + type=PX_ARLE_TYPE_EQUAL; + } + else + { + type=PX_ARLE_TYPE_UNEQUAL; + } + } + break; + case PX_ARLE_TYPE_UNEQUAL: + { + if (rlv==_in[r_cursor]) + { + //rollback + r_cursor--; + wsize=PX_ArleCompressData(_in+p_cursor,r_cursor-p_cursor,type,_out?_out+w_cursor:PX_NULL); + *_outsize+=wsize; + w_cursor+=wsize; + p_cursor=r_cursor; + type=PX_ARLE_TYPE_EQUAL; + } + } + break; + case PX_ARLE_TYPE_EQUAL: + { + if (rlv!=_in[r_cursor]) + { + //rollback + wsize=PX_ArleCompressData(_in+p_cursor,r_cursor-p_cursor,type,_out?_out+w_cursor:PX_NULL); + *_outsize+=wsize; + w_cursor+=wsize; + p_cursor=r_cursor; + type=PX_ARLE_TYPE_UNEQUAL; + } + } + break; + } + rlv=_in[r_cursor]; + r_cursor++; + } + //encode last token + *_outsize+=PX_ArleCompressData(_in+p_cursor,r_cursor-p_cursor,type,_out?_out+w_cursor:PX_NULL); + return; +} + +px_void PX_ArleDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *_outsize) +{ + px_uint r_cursor=0,w_cursor=0; + px_uchar rep,size; + *_outsize=0; + while (r_cursor', '?', */ + 60, 61, 255, 255, 255, 255, 255, 255, + + /* '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', */ + 255, 0, 1, 2, 3, 4, 5, 6, + + /* 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', */ + 7, 8, 9, 10, 11, 12, 13, 14, + + /* 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', */ + 15, 16, 17, 18, 19, 20, 21, 22, + + /* 'X', 'Y', 'Z', '[', '\', ']', '^', '_', */ + 23, 24, 25, 255, 255, 255, 255, 255, + + /* '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', */ + 255, 26, 27, 28, 29, 30, 31, 32, + + /* 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', */ + 33, 34, 35, 36, 37, 38, 39, 40, + + /* 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', */ + 41, 42, 43, 44, 45, 46, 47, 48, + + /* 'x', 'y', 'z', '{', '|', '}', '~', del, */ + 49, 50, 51, 255, 255, 255, 255, 255 +}; + +px_uint PX_Base64Encode(const px_byte *in, px_uint inlen, px_char *out) +{ + int s; + px_uint i; + px_uint j; + px_byte c; + px_byte l; + + s = 0; + l = 0; + for (i = j = 0; i < inlen; i++) { + c = in[i]; + + switch (s) { + case 0: + s = 1; + out[j++] = base64en[(c >> 2) & 0x3F]; + break; + case 1: + s = 2; + out[j++] = base64en[((l & 0x3) << 4) | ((c >> 4) & 0xF)]; + break; + case 2: + s = 0; + out[j++] = base64en[((l & 0xF) << 2) | ((c >> 6) & 0x3)]; + out[j++] = base64en[c & 0x3F]; + break; + } + l = c; + } + + switch (s) { + case 1: + out[j++] = base64en[(l & 0x3) << 4]; + out[j++] = BASE64_PAD; + out[j++] = BASE64_PAD; + break; + case 2: + out[j++] = base64en[(l & 0xF) << 2]; + out[j++] = BASE64_PAD; + break; + } + + out[j] = 0; + + return j; +} + +px_uint PX_Base64Decode(const px_char *in, px_uint inlen, px_byte *out) +{ + px_uint i; + px_uint j; + px_byte c; + + if (inlen & 0x3) { + return 0; + } + + for (i = j = 0; i < inlen; i++) { + if (in[i] == BASE64_PAD) { + break; + } + if (in[i] < 0) { + return 0; + } + + c = base64de[(px_byte)in[i]]; + if (c == 255) { + return 0; + } + + switch (i & 0x3) { + case 0: + out[j] = (c << 2) & 0xFF; + break; + case 1: + out[j++] |= (c >> 4) & 0x3; + out[j] = (c & 0xF) << 4; + break; + case 2: + out[j++] |= (c >> 2) & 0xF; + out[j] = (c & 0x3) << 6; + break; + case 3: + out[j++] |= c; + break; + } + } + + return j; +} + +px_uint PX_Base64GetEncodeLen(px_uint beforeEncodeLen) +{ + if(beforeEncodeLen%3) + return (beforeEncodeLen/3+1)*4; + else + return (beforeEncodeLen/3)*4; +} + +px_uint PX_Base64GetDecodeLen(px_uint beforeEncodeLen) +{ + if(beforeEncodeLen%4) + return 0; + return (beforeEncodeLen/4)*3; +} \ No newline at end of file diff --git a/UI/PainterEngine/core/PX_Base64.h b/UI/PainterEngine/core/PX_Base64.h new file mode 100644 index 0000000..db7b932 --- /dev/null +++ b/UI/PainterEngine/core/PX_Base64.h @@ -0,0 +1,9 @@ +#ifndef PX_BASE64_H +#define PX_BASE64_H +#include "PX_Typedef.h" +px_uint PX_Base64Encode(const px_byte *_in, px_uint input_size, px_char *out); +px_uint PX_Base64Decode(const px_char *_in, px_uint input_size, px_byte *out); +px_uint PX_Base64GetEncodeLen(px_uint codeLen); +px_uint PX_Base64GetDecodeLen(px_uint codeLen); + +#endif diff --git a/UI/PainterEngine/core/PX_BaseGeo.c b/UI/PainterEngine/core/PX_BaseGeo.c new file mode 100644 index 0000000..eff99ce --- /dev/null +++ b/UI/PainterEngine/core/PX_BaseGeo.c @@ -0,0 +1,3478 @@ +#include "PX_BaseGeo.h" +static px_int st_symmetry_axis; + +#define PX_ABS_FRAC(x) ((x)>0?PX_FRAC(x):PX_FRAC(-(x))) + +static px_void PX_DrawLinePixel_RecK(px_surface *psurface,px_int x,px_int y,px_color color) +{ + PX_SurfaceDrawPixel(psurface,y,x,color); +} + +static px_void PX_DrawLinePixel_InvK(px_surface *psurface,px_int x,px_int y,px_color color) +{ + PX_SurfaceDrawPixel(psurface,2*st_symmetry_axis-x,y,color); +} + +static px_void PX_DrawLinePixel_InvRecK(px_surface *psurface,px_int x,px_int y,px_color color) +{ + PX_SurfaceDrawPixel(psurface,2*st_symmetry_axis-y,x,color); +} +px_void PX_GeoDrawLine(px_surface *psurface, px_int x0, px_int y0, px_int x1, px_int y1 ,px_int lineWidth, px_color color) +{ + px_int i,len,lm,x,y,temp1,temp2,xleft,xright; + px_float p0x,p0y,p1x,p1y,p2x,p2y,p3x,p3y,vx,vy,rx,ry,xlen,ylen,S,ftemp,ryL,ryR,rxL,rxR; + px_float k,recK; + px_color clr; + px_void (*func_DrawPixel)(px_surface *psurface,px_int x,px_int y,px_color color); + + if (lineWidth==0) + { + return; + } + + ////////////////////////////////////////////////////////////////////////// + //Trim + do + { + px_int trimTop,trimRight,trimLeft,trimBottom; + px_int vector_x,vector_y; + px_float step; + trimTop=0-lineWidth; + trimBottom=psurface->height+lineWidth; + trimLeft=0-lineWidth; + trimRight=psurface->width+lineWidth; + + ////////////////////////////////////////////////////////////////////////// + //Trim top/bottom + if (y0>y1) + { + //swap p0<-->p1 + lm=x0; + x0=x1; + x1=lm; + + lm=y0; + y0=y1; + y1=lm; + } + //trim top + if (y10&&step<1) + { + x0=(px_int)(x0+vector_x*step); + y0=(px_int)(y0+vector_y*step); + } + } + + //trim bottom + if (y0>trimBottom) + { + return; + } + + vector_x=x1-x0; + vector_y=y1-y0; + + if (vector_y!=0) + { + step=(trimBottom-y0)*1.0f/vector_y; + if (step>0&&step<1) + { + x1=(px_int)(x1+vector_x*step); + y1=(px_int)(y1+vector_y*step); + } + } + + ////////////////////////////////////////////////////////////////////////// + //Trim left/right + if (x0>x1) + { + //swap p0<-->p1 + lm=x0; + x0=x1; + x1=lm; + + lm=y0; + y0=y1; + y1=lm; + } + + //trim left + if (x10&&step<1) + { + x0=(px_int)(x0+vector_x*step); + y0=(px_int)(y0+vector_y*step); + } + } + + //trim right + if (x0>trimRight) + { + return; + } + + vector_x=x1-x0; + vector_y=y1-y0; + + if (vector_x!=0) + { + step=(trimRight-x0)*1.0f/vector_x; + if (step>0&&step<1) + { + x1=(px_int)(x0+vector_x*step); + y1=(px_int)(y0+vector_y*step); + } + } + + } while (0); + + ////////////////////////////////////////////////////////////////////////// + + + + ////////////////////////////////////////////////////////////////////////// + //Draw Point + if (x0==x1&&y0==y1) + { + PX_SurfaceDrawPixel(psurface,x0,y0,color); + return; + } + + + if (x0==x1) + { + if (y0<0) + { + y0=0; + } + if (y1<0) + { + y1=0; + } + if (y0>psurface->height-1) + { + y0=psurface->height-1; + } + if (y1>psurface->height-1) + { + y1=psurface->height-1; + } + if (lineWidth&1) + { + PX_GeoDrawRect(psurface,x0-lineWidth/2,y0,x1+lineWidth/2,y1,color); + } + else + { + PX_GeoDrawRect(psurface,x0-lineWidth/2+1,y0,x1+lineWidth/2-1,y1,color); + len=PX_ABS(y0-y1)+1; + y0>y1?(lm=y1):(lm=y0); + color._argb.a=(color._argb.a>>1); + for (i=0;i=psurface->height) + { + break; + } + PX_SurfaceDrawPixel(psurface,x0-lineWidth/2,lm+i,color); + PX_SurfaceDrawPixel(psurface,x0+lineWidth/2,lm+i,color); + } + } + return; + } + + if (y0==y1) + { + if (x0<0) + { + x0=0; + } + if (x1<0) + { + x1=0; + } + if (x0>psurface->width-1) + { + x0=psurface->width-1; + } + if (x1>psurface->width-1) + { + x1=psurface->width-1; + } + if (lineWidth&1) + { + PX_GeoDrawRect(psurface,x0,y0-lineWidth/2,x1,y1+lineWidth/2,color); + } + else + { + PX_GeoDrawRect(psurface,x0,y0-lineWidth/2+1,x1,y1+lineWidth/2-1,color); + len=PX_ABS(x0-x1)+1; + x0>x1?(lm=x1):(lm=x0); + color._argb.a=(color._argb.a>>1); + for (i=0;i0) + { + if(k<1.f) + { + func_DrawPixel=PX_SurfaceDrawPixel; + } + else + { + lm=x0; + x0=y0; + y0=lm; + + lm=x1; + x1=y1; + y1=lm; + + k=((px_float)(y1-y0))/(x1-x0); + recK=1/k; + + func_DrawPixel=PX_DrawLinePixel_RecK; + } + } + else + { + if (k>-1.f) + { + lm=x0; + x0=x1; + x1=lm; + + lm=y0; + y0=y1; + y1=lm; + + st_symmetry_axis=x0; + x1=2*x0-x1; + + k=((px_float)(y1-y0))/(x1-x0); + recK=1/k; + + func_DrawPixel=PX_DrawLinePixel_InvK; + } + else + { + lm=x0; + x0=x1; + x1=lm; + + lm=y0; + y0=y1; + y1=lm; + + st_symmetry_axis=x0; + x1=2*x0-x1; + + lm=x0; + x0=y0; + y0=lm; + + lm=x1; + x1=y1; + y1=lm; + + k=((px_float)(y1-y0))/(x1-x0); + recK=1/k; + + func_DrawPixel=PX_DrawLinePixel_InvRecK; + } + } + + vx=(lineWidth/(2*PX_sqrt(1+recK*recK))); + vy=(lineWidth*recK/(2*PX_sqrt(1+recK*recK))); + + p0x=x0+vx+0.5f; + p0y=y0-vy+0.5f; + + p1x=x0-vx+0.5f; + p1y=y0+vy+0.5f; + + p2x=x1+vx+0.5f; + p2y=y1-vy+0.5f; + + p3x=x1-vx+0.5f; + p3y=y1+vy+0.5f; + + + if (p1y<=p2y) + { + + //p0-->p1 draw triangle + xlen=k; + + rx=p0x-(1-PX_ABS_FRAC(p0y))*k; + y=PX_TRUNC(p0y)+1; + temp1=PX_TRUNC(p0x); + temp2=PX_TRUNC(p1y); + while (p1y>y) + { + //Draw full color + for (x=PX_TRUNC(rx)+1;x<=temp1;x++) + { + func_DrawPixel(psurface,x,y,color); + } + //Draw edge point + ftemp=PX_FRAC(rx); + x=PX_TRUNC(rx); + if (PX_TRUNC(rx-xlen)p2 draw triangle + //Draw full color + y=PX_TRUNC(ry); + if(PX_TRUNC(ry+ylen)>PX_TRUNC(ry)) + { + //top + ftemp=1-PX_FRAC(ry); + S=ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y,clr); + + if (yPX_TRUNC(p2x)) + { + break; + } + } + xright=x; + ryR=ry; + + ryL=p1y+(1-PX_ABS_FRAC(p1x))*k; + xleft=PX_TRUNC(p1x)+1; + + y=PX_TRUNC(p1y)+1; + while(PX_TRUNC(ryL)=p2x) + { + break; + } + + if(PX_TRUNC(ryR+ylen)==y) + { + S=1-PX_FRAC(ryR)-ylen/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,xright,y,clr); + } + else + { + ftemp=1-PX_FRAC(ryR); + S=ftemp*ftemp/2/k; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,xright,y,clr); + } + xright++; + ryR+=ylen; + } + + } + else + { + while (PX_TRUNC(ryR)==y) + { + if(PX_TRUNC(ryR+ylen)==y) + { + S=1-PX_FRAC(ryR)-ylen/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,xright,y,clr); + } + else + { + ftemp=1-PX_FRAC(ryR); + S=ftemp*ftemp/2/k; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,xright,y,clr); + } + xright++; + ryR+=ylen; + } + } + + + //draw horizontal + for (x=xleft;xp1 triangle + ry=p3y-(1-PX_ABS_FRAC(p3x))*k; + x=PX_TRUNC(p3x)-1; + temp2=PX_TRUNC(p2y); + temp1=PX_TRUNC(p3x-(p3y-p2y)/k); + + while (x>temp1) + { + //Draw full color + y=PX_TRUNC(ry); + if(PX_TRUNC(ry-ylen)!=PX_TRUNC(ry)) + { + //bottom + ftemp=PX_FRAC(ry); + S=ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y,clr); + + //top + ftemp=1-PX_FRAC(ry-ylen); + S=1-ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y-1,clr); + + for (i=y-2;i>temp2;i--) + { + func_DrawPixel(psurface,x,i,color); + } + + } + else + { + ftemp=PX_FRAC(ry-ylen); + ftemp+=ylen/2; + + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*ftemp); + + func_DrawPixel(psurface,x,y,clr); + + for (i=y-1;i>temp2;i--) + { + func_DrawPixel(psurface,x,i,color); + } + } + ry-=ylen; + x--; + + if (xp3 draw triangle + rx=p2x-(1-PX_ABS_FRAC(p2y))*k; + y=PX_TRUNC(p2y)+1; + temp1=PX_TRUNC(p3x); + + //while() + + while (ytemp1-1;x--) + { + func_DrawPixel(psurface,x,y,color); + + } + //Draw edge point + ftemp=PX_FRAC(rx); + x=PX_TRUNC(rx); + if (PX_TRUNC(rx-xlen)p2 draw triangle + + //Draw full color + temp2=PX_TRUNC(p2y); + y=PX_TRUNC(ry); + if(PX_TRUNC(ry+ylen)>PX_TRUNC(ry)) + { + //top + ftemp=1-PX_FRAC(ry); + S=ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y,clr); + + //bottom + if(yPX_TRUNC(p2x)) + { + break; + } + } + + //p0-->p1 draw triangle + xlen=k; + + rx=p0x-(1-PX_ABS_FRAC(p0y))*k; + y=PX_TRUNC(p0y)+1; + temp1=PX_TRUNC(p0x); + while (y<=PX_TRUNC(p2y)) + { + //Draw full color + for (x=PX_TRUNC(rx)+1;x<=temp1;x++) + { + func_DrawPixel(psurface,x,y,color); + + } + //Draw edge point + ftemp=PX_FRAC(rx); + x=PX_TRUNC(rx); + if (PX_TRUNC(rx-xlen)p3 draw triangle + while (yp1 triangle + ry=p3y-(1-PX_ABS_FRAC(p3x))*k; + x=PX_TRUNC(p3x)-1; + + temp2=PX_TRUNC(p1y)+1; + while (x>PX_TRUNC(p1x)) + { + //Draw full color + y=PX_TRUNC(ry); + if(PX_TRUNC(ry-ylen)!=PX_TRUNC(ry)) + { + //bottom + ftemp=PX_FRAC(ry); + S=ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y,clr); + + //top + if(y>temp2) + { + ftemp=1-PX_FRAC(ry-ylen); + S=1-ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y-1,clr); + } + for (i=temp2;i0) + lineWidth-=1; + else + return; + + + + PX_GeoDrawRect(psurface,left,top,right,top+lineWidth,color); + PX_GeoDrawRect(psurface,left,bottom-lineWidth,right,bottom,color); + PX_GeoDrawRect(psurface,left,top+lineWidth+1,left+lineWidth,bottom-lineWidth-1,color); + PX_GeoDrawRect(psurface,right-lineWidth,top+lineWidth+1,right,bottom-lineWidth-1,color); +} + + + +px_void PX_GeoDrawRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color) +{ + px_int i,j,mid; + if(color._argb.a==0) + { + return; + } + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + + if (left<0) + { + left=0; + } + if (leftlimit_left) + { + left=psurface->limit_left; + } + + if (top<0) + { + top=0; + } + if (toplimit_top) + { + top=psurface->limit_top; + } + + if (right>psurface->width-1) + { + right=psurface->width-1; + } + if (right>psurface->limit_right) + { + right=psurface->limit_right; + } + + if (bottom>psurface->height-1) + { + bottom=psurface->height-1; + } + if (bottom>psurface->limit_bottom) + { + bottom=psurface->limit_bottom; + } + + if (left>psurface->width-1) + { + return; + } + + if (bottom<0) + { + return; + } + + if (right<0) + { + return; + } + + if (top>psurface->height-1) + { + return; + } + + + + + + + if(color._argb.a==0xff) + { + for (i=top;i<=bottom;i++) + { + PX_memdwordset(psurface->surfaceBuffer+i*psurface->width+left,color._argb.ucolor,right-left+1); + } + } + else + for (i=top;i<=bottom;i++) + { + for (j=left;j<=right;j++) + { + PX_SurfaceDrawPixel(psurface,j,i,color); + } + } +} + +static px_void PX_GeoDrawSolidCircle_Ex1(px_surface *psurface, px_int x,px_int y,px_int Radius,px_color color ) +{ + px_int ry,dy,i,xleft,xright,Sy,cY,drx,dry; + px_float rad2,xoft1,xoft2,S,fy,fdis; + px_color clr; + + if (Radius==0) + { + return; + } + //Draw origin + PX_SurfaceDrawPixel(psurface,x,y,color); + + //Draw cross + + if (x>=0-Radius&&y>=0-Radius&&xwidth+Radius&&yheight+Radius) + { + clr=color; + clr._argb.a>>=1; + dy=Radius; + PX_SurfaceDrawPixel(psurface,x,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y,clr); + + for (i=1;i0.5f) + { + fdis=1-PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y-dy,clr); + } + else + { + fdis=PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y-dy,clr); + } + + + for (i=ry+1;ipsurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + bottom=psurface->height-1; + } + + if (left>psurface->width-1) + { + return; + } + + if (bottom<0) + { + return; + } + + if (right<0) + { + return; + } + + if (top>psurface->height-1) + { + return; + } + + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + + for (i=top;i<=bottom;i++) + { + for (j=left;j<=right;j++) + { + d=PX_sqrt((px_float)((i-y)*(i-y)+(j-x)*(j-x))); + if (dpsurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + bottom=psurface->height-1; + } + + if (left>psurface->width-1) + { + return; + } + + if (bottom<0) + { + return; + } + + if (right<0) + { + return; + } + + if (top>psurface->height-1) + { + return; + } + + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + + Sc=(px_int)(PX_PI*Radius*Radius); + Sr=(right-left+1)*(bottom-top+1); + if (SrRadius*2) + { + lineWidth=Radius*2; + } + + if (x>=0-Radius&&y>=0-Radius&&xwidth+Radius&&yheight+Radius) + { + i=x*x+y*y; + + if (i<(x-psurface->width)*(x-psurface->width)+y*y) + { + i=(x-psurface->width)*(x-psurface->width)+y*y; + } + + if (i<(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height)) + { + i=(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height); + } + + if (iheight)*(y-psurface->height)) + { + i=x*x+(y-psurface->height)*(y-psurface->height); + } + + if (i<(Radius-lineWidth/2)*(Radius-lineWidth/2)&&!PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT(0,0,(px_float)psurface->width,(px_float)psurface->height))) + { + return; + } + } + else + { + return; + } + + + + + + + if (lineWidth&1) + { + ry=Radius+(lineWidth>>1); + for (rx=Radius-(lineWidth>>1);rx<=ry;rx++) + { + PX_SurfaceDrawPixel(psurface,x+rx,y,color); + PX_SurfaceDrawPixel(psurface,x-rx,y,color); + PX_SurfaceDrawPixel(psurface,x,rx+y,color); + PX_SurfaceDrawPixel(psurface,x,-rx+y,color); + } + } + else + { + clr=color; + clr._argb.a>>=1; + dy=Radius+(lineWidth>>1); + PX_SurfaceDrawPixel(psurface,x,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y,clr); + + ry=Radius-(lineWidth>>1); + PX_SurfaceDrawPixel(psurface,x,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x,y-ry,clr); + PX_SurfaceDrawPixel(psurface,x+ry,y,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y,clr); + + for (i=ry+1;i0.5f) + { + fdis=1-PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+ry,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x+ry,y-ry,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y-ry,clr); + } + else + { + fdis=PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+ry,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x+ry,y-ry,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y-ry,clr); + } + + + //out side + rad2=Radius+lineWidth/2.0f; + dy=PX_TRUNC(rad2/1.4142135623731f+0.5f); + fy=rad2/1.4142135623731f+0.5f; + if (PX_FRAC(fy)>0.5f) + { + fdis=1-PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y-dy,clr); + } + else + { + fdis=PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y-dy,clr); + } + + + for (i=ry+1;i0) + { + if (vy<0) + { + math_region+=4; + } + } + else + math_region=2-math_region; + + if ((math_region>s_r&&math_regionend_angle) + { + px_int temp=start_angle; + start_angle=end_angle; + end_angle=temp; + } + + if (start_angle<0) + { + repeat=start_angle/360; + repeat-=1; + start_angle-=repeat*360; + end_angle-=repeat*360; + } + + repeat=start_angle/360; + start_angle-=repeat*360; + end_angle-=repeat*360; + + s_quadrant=(start_angle%360)/90+1; + e_quadrant=(end_angle%360)/90+1; + + start_mathRegion=PX_sin_angle((px_float)start_angle); + end_mathRegion=PX_sin_angle((px_float)end_angle); + + switch (s_quadrant) + { + case 1: + break; + case 2: + case 3: + start_mathRegion=2-start_mathRegion; + break; + case 4: + start_mathRegion+=4; + break; + default: + PX_ASSERT(); + } + start_mathRegion+=4*(start_angle/360); + + switch (e_quadrant) + { + case 1: + break; + case 2: + case 3: + end_mathRegion=2-end_mathRegion; + break; + case 4: + end_mathRegion+=4; + break; + default: + PX_ASSERT(); + } + end_mathRegion+=4*(end_angle/360); + + if (end_mathRegionRadius*2) + { + lineWidth=Radius*2; + } + + if (x>=0-Radius&&y>=0-Radius&&xwidth+Radius&&yheight+Radius) + { + i=x*x+y*y; + + if (i<(x-psurface->width)*(x-psurface->width)+y*y) + { + i=(x-psurface->width)*(x-psurface->width)+y*y; + } + + if (i<(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height)) + { + i=(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height); + } + + if (iheight)*(y-psurface->height)) + { + i=x*x+(y-psurface->height)*(y-psurface->height); + } + + if (i<(Radius-lineWidth/2)*(Radius-lineWidth/2)&&!PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT(0,0,(px_float)psurface->width,(px_float)psurface->height))) + { + return; + } + } + else + { + return; + } + + + + if (lineWidth&1) + { + ry=Radius+(lineWidth>>1); + for (rx=Radius-(lineWidth>>1);rx<=ry;rx++) + { + PX_GeoDrawRingPoint(psurface,x+rx,y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-rx,y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,rx+y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,-rx+y,color,x,y,start_mathRegion,end_mathRegion); + } + } + else + { + clr=color; + clr._argb.a>>=1; + dy=Radius+(lineWidth>>1); + PX_GeoDrawRingPoint(psurface,x,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y,clr,x,y,start_mathRegion,end_mathRegion); + + ry=Radius-(lineWidth>>1); + PX_GeoDrawRingPoint(psurface,x,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y,clr,x,y,start_mathRegion,end_mathRegion); + + for (i=ry+1;i0.5f) + { + fdis=1-PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + } + else + { + fdis=PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + } + + + //out side + rad2=Radius+lineWidth/2.0f; + dy=PX_TRUNC(rad2/1.4142135623731f+0.5f); + fy=rad2/1.4142135623731f+0.5f; + if (PX_FRAC(fy)>0.5f) + { + fdis=1-PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + } + else + { + fdis=PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + } + + + for (i=ry+1;iend_angle) + { + px_int temp=start_angle; + start_angle=end_angle; + end_angle=temp; + } + + if (start_angle<0) + { + repeat=start_angle/360; + repeat-=1; + start_angle-=repeat*360; + end_angle-=repeat*360; + } + + repeat=start_angle/360; + start_angle-=repeat*360; + end_angle-=repeat*360; + + + s_quadrant=(start_angle%360)/90+1; + e_quadrant=(end_angle%360)/90+1; + + start_mathRegion=PX_sin_angle((px_float)start_angle); + end_mathRegion=PX_sin_angle((px_float)end_angle); + + switch (s_quadrant) + { + case 1: + break; + case 2: + case 3: + start_mathRegion=2-start_mathRegion; + break; + case 4: + start_mathRegion+=4; + break; + default: + PX_ASSERT(); + } + start_mathRegion+=4*(start_angle/360); + + switch (e_quadrant) + { + case 1: + break; + case 2: + case 3: + end_mathRegion=2-end_mathRegion; + break; + case 4: + end_mathRegion+=4; + break; + default: + PX_ASSERT(); + } + end_mathRegion+=4*(end_angle/360); + + if (end_mathRegion=0-Radius_outside&&y>=0-Radius_outside&&xwidth+Radius_outside&&yheight+Radius_outside) + { + i=x*x+y*y; + + if (i<(x-psurface->width)*(x-psurface->width)+y*y) + { + i=(x-psurface->width)*(x-psurface->width)+y*y; + } + + if (i<(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height)) + { + i=(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height); + } + + if (iheight)*(y-psurface->height)) + { + i=x*x+(y-psurface->height)*(y-psurface->height); + } + + if (iwidth,(px_float)psurface->height))) + { + return; + } + } + else + { + return; + } + + ry=Radius_outside; + for (rx=Radius_inside;rx<=ry;rx++) + { + PX_GeoDrawRingPoint(psurface,x+rx,y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-rx,y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,rx+y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,-rx+y,color,x,y,start_mathRegion,end_mathRegion); + } + + // Draw 45-degree cross + //inside + rad=(px_float)Radius_inside; + ry=PX_TRUNC(rad/1.4142135623731f+0.5f); + fy=rad/1.4142135623731f+0.5f; + if (PX_FRAC(fy)>0.5f) + { + fdis=1-PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + } + else + { + fdis=PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + } + + + //outside + rad2=(px_float)Radius_outside; + dy=PX_TRUNC(rad2/1.4142135623731f+0.5f); + fy=rad2/1.4142135623731f+0.5f; + if (PX_FRAC(fy)>0.5f) + { + fdis=1-PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + } + else + { + fdis=PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + } + + + for (i=ry+1;iright) + { + Height=left; + left=right; + right=Height; + } + if (top>bottom) + { + Height=top; + top=bottom; + bottom=Height; + } + Height=(bottom-top)+1; + Width=(right-left)+1; + + r_y=roundRaduis; + r_x=roundRaduis; + for (y=0;y<(px_int)roundRaduis;y++) + { + if (Height&1) + { + if (y>Height/2) + { + break; + } + } + else + { + if (y>Height/2-1) + { + break; + } + } + + x=(px_int)roundRaduis-(px_int)(PX_sqrt(roundRaduis*roundRaduis-(roundRaduis-y-1)*(roundRaduis-y-1)))-1; + if(x<0) x=0; + for (;x<(px_int)roundRaduis;x++) + { + if (Width&1) + { + if (x>Width/2) + { + break; + } + } + else + { + if (x>Width/2-1) + { + break; + } + } + + if (x>Width/2) + { + break; + } + + dis=PX_sqrt((x-r_x)*(x-r_x)+(y-r_y)*(y-r_y)); + if (disroundRaduis) + drawColor._argb.a=(px_uchar)(color._argb.a*(dis-roundRaduis+0.5f)); + + PX_SurfaceDrawPixel(psurface,left+x,top+y,drawColor); + + if(2*xHeight/2) + { + drawHeight=(px_int)roundRaduis-Height/2; + } + else + { + drawHeight=(px_int)roundRaduis; + } + + + if (Width>2*(px_int)roundRaduis) + { + drawWidth=Width-2*(px_int)roundRaduis; + + if(drawWidth>0&&drawHeight>0) + { + PX_GeoDrawRect(psurface,left+(px_int)roundRaduis,top,left+(px_int)roundRaduis+drawWidth-1,top+drawHeight-1,color); + PX_GeoDrawRect(psurface,left+(px_int)roundRaduis,bottom-drawHeight+1,left+(px_int)roundRaduis+drawWidth-1,bottom,color); + } + } + + if(Height>2*(px_int)roundRaduis) + PX_GeoDrawRect(psurface,left,top+(px_int)roundRaduis,right,bottom-(px_int)roundRaduis,color); + +} + +px_void PX_GeoDrawRoundRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_float roundRaduis,px_float linewidth,px_color color) +{ + px_int y,x,Height,Width; + px_float r_x,r_y,dis; + px_int drawWidth; + px_int drawHeight; + px_int drawlinewidth_int; + px_color drawColor; + if(color._argb.a==0) + { + return; + } + + if (left>right) + { + Height=left; + left=right; + right=Height; + } + if (top>bottom) + { + Height=top; + top=bottom; + bottom=Height; + } + Height=(bottom-top)+1; + Width=(right-left)+1; + + r_y=roundRaduis; + r_x=roundRaduis; + for (y=0;y<(px_int)roundRaduis;y++) + { + if (Height&1) + { + if (y>Height/2) + { + break; + } + } + else + { + if (y>Height/2-1) + { + break; + } + } + + x=(px_int)roundRaduis-(px_int)(PX_sqrt(roundRaduis*roundRaduis-(roundRaduis-y-1)*(roundRaduis-y-1)))-1; + if(x<0)x=0; + for (;x<(px_int)roundRaduis;x++) + { + if (Width&1) + { + if (x>Width/2) + { + break; + } + } + else + { + if (x>Width/2-1) + { + break; + } + } + + if (x>Width/2) + { + break; + } + + dis=PX_sqrt((x-r_x)*(x-r_x)+(y-r_y)*(y-r_y)); + if (disroundRaduis-linewidth-0.5f) + { + drawColor=color; + + if (dis>roundRaduis) + drawColor._argb.a=(px_uchar)(color._argb.a*(dis-roundRaduis+0.5f)); + + if (disHeight/2) + { + drawHeight=(px_int)roundRaduis-Height/2; + } + else + { + drawHeight=(px_int)roundRaduis; + } + if (drawHeight>linewidth) + { + drawHeight=drawlinewidth_int; + } + + if (Width>2*(px_int)roundRaduis) + { + drawWidth=Width-2*(px_int)roundRaduis; + if(drawWidth>0&&drawHeight>0) + { + PX_GeoDrawRect(psurface,left+(px_int)roundRaduis,top,left+(px_int)roundRaduis+drawWidth-1,top+drawHeight-1,color); + PX_GeoDrawRect(psurface,left+(px_int)roundRaduis,bottom-drawHeight+1,left+(px_int)roundRaduis+drawWidth-1,bottom,color); + } + } + + if(Height>2*(px_int)roundRaduis) + { + PX_GeoDrawRect(psurface,left,top+(px_int)roundRaduis,left+drawlinewidth_int-1,bottom-(px_int)roundRaduis,color); + PX_GeoDrawRect(psurface,right-drawlinewidth_int+1,top+(px_int)roundRaduis,right,bottom-(px_int)roundRaduis,color); + } +} + + +px_void PX_GeoDrawBezierCurvePoint(px_surface *rendersurface,px_point pt[],px_int pt_count,px_float t,px_float radius,px_color clr) +{ + px_int i; + + if (pt_count<=0) + { + return; + } + + if (pt_count==1) + { + if(rendersurface) + PX_GeoDrawPenCircle(rendersurface,pt[0].x,pt[0].y,radius,clr); + return; + } + + //update path + for (i=0;ipsurface->height-1) + { + y0=psurface->height-1; + } + if (y1>psurface->height-1) + { + y1=psurface->height-1; + } + PX_GeoDrawRect(psurface,x0,y0,x1,y1,color); + return; + } + + if (y0==y1) + { + if (x0<0) + { + x0=0; + } + if (x1<0) + { + x1=0; + } + if (x0>psurface->width-1) + { + x0=psurface->width-1; + } + if (x1>psurface->width-1) + { + x1=psurface->width-1; + } + PX_GeoDrawRect(psurface,x0,y0,x1,y1,color); + return; + } + + if (x0>x1) + { + lm=x0; + x0=x1; + x1=lm; + + lm=y0; + y0=y1; + y1=lm; + } + + k=((px_float)(y1-y0))/(x1-x0); + recK=1/k; + + //trim + trimLX=0-1; + trimRX=psurface->width+1; + trimTY=0-1; + trimBY=psurface->height+1; + + //calculate c + //TrimLX + fconst=y0-k*x0; + ftemp=trimLX*k+fconst; + + do + { + if (ftemp>=trimTY&&ftemp<=trimBY) + { + Cross2points[CrossCount].x=(px_float)trimLX; + Cross2points[CrossCount].y=ftemp; + CrossCount++; + } + + //TrimRX + ftemp=trimRX*k+fconst; + + if (ftemp>=trimTY&&ftemp<=trimBY) + { + Cross2points[CrossCount].x=(px_float)trimRX; + Cross2points[CrossCount].y=ftemp; + CrossCount++; + if (CrossCount==2) + { + break; + } + } + + //trimBY + ftemp=(trimBY-fconst)/k; + if (ftemp>trimLX&&ftemptrimLX&&ftempCross2points[1].x) + { + ftemp=Cross2points[0].x; + Cross2points[0].x=Cross2points[1].x; + Cross2points[1].x=ftemp; + + ftemp=Cross2points[0].y; + Cross2points[0].y=Cross2points[1].y; + Cross2points[1].y=ftemp; + } + + + if (x0Cross2points[1].x) + { + return; + } + + + if (x1Cross2points[1].x) + { + x1=(px_int)Cross2points[1].x; + y1=(px_int)Cross2points[1].y; + } + + if (x1==x0&&y1==y0) + { + return; + } + + + do + { + int dx = PX_ABS(x1-x0), sx = x0dy ? dx : -dy)/2, e2; + while(PX_TRUE) + { + PX_SurfaceDrawPixel(psurface,x0,y0,color); + if (x0==x1 && y0==y1) break; + e2 = err; + if (e2 >-dx) { err -= dy; x0 += sx; } + if (e2 < dy) { err += dx; y0 += sy; } + } + } while (0); + +} + +px_void PX_GeoDrawTriangle(px_surface *psurface,px_point2D p0,px_point2D p1,px_point2D p2,px_color color) +{ + px_int ix,iy; + px_bool k01infinite=PX_FALSE; + px_bool k02infinite=PX_FALSE; + px_bool k12infinite=PX_FALSE; + px_float k01,b01,k02,b02,k12,b12; + + px_float lAlpha=1,rAlpha=1; + + px_float x0; + px_float y0; + + px_float x1; + px_float y1; + + px_float x2; + px_float y2; + + + + px_float x, y, xleft, xright; + px_float btmy,midy; + + px_float a,b,c; + a=(px_float)PX_sqrtd((p1.x-p2.x)*(p1.x-p2.x)); + b=(px_float)PX_sqrtd((p0.x-p2.x)*(p0.x-p2.x)); + c=(px_float)PX_sqrtd((p1.x-p0.x)*(p1.x-p0.x)); + + x=(a*p0.x+b*p1.x+c*p2.x)/(a+b+c); + y=(a*p0.y+b*p1.y+c*p2.y)/(a+b+c); + + // p0 + // p1 p2 + + if (p1.ybtmy) + { + midy=p1.y; + btmy=p2.y; + } + + + + do + { + px_float x01m; + + x0=p0.x; + y0=p0.y; + x1=p1.x; + y1=p1.y; + x2=p2.x; + y2=p2.y; + + + if (x0==x1) + { + x01m=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + x01m=(y2-b01)/k01; + } + + if (x01m>x2) + { + px_point2D t; + t=p2; + p2=p1; + p1=t; + } + } while (0); + + + + x0=p0.x; + y0=p0.y; + + x1=p1.x; + y1=p1.y; + + x2=p2.x; + y2=p2.y; + + + k01infinite=PX_FALSE; + k02infinite=PX_FALSE; + k12infinite=PX_FALSE; + if (x0==x1) + { + k01infinite=PX_TRUE; + b01=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + } + + if (x0==x2) + { + k02infinite=PX_TRUE; + b02=x0; + } + else + { + k02=(y0-y2)/(x0-x2); + b02=y0-k02*x0; + } + + if (x1==x2) + { + k12infinite=PX_TRUE; + b12=x0; + } + else + { + k12=(y1-y2)/(x1-x2); + b12=y1-k12*x1; + } + + + for(y = (px_int)(y0+0.5f)+0.5f; y <=midy; y++) + { + if (k01infinite) + { + xleft=b01; + lAlpha=1; + } + else + { + xleft = (y-b01)/k01; + lAlpha=PX_ABS_FRAC(xleft); + } + + if (k02infinite) + { + xright=b02; + rAlpha=1; + } + else + { + xright = (y-b02)/k02; + rAlpha=PX_ABS_FRAC(xright); + } + + ix = (px_int)xleft; + iy=(px_int)y; + do + { + px_color aClr=color; + aClr._argb.a=(px_byte)(aClr._argb.a*lAlpha); + PX_SurfaceDrawPixel(psurface,ix,iy,color); + } while (0); + + for(ix = (px_int)xleft+1;ix < (px_int)xright; ++ix) + { + PX_SurfaceDrawPixel(psurface,ix,iy,color); + } + +// do +// { +// px_color aClr=color; +// aClr._argb.a=(px_byte)(aClr._argb.a*rAlpha); +// PX_SurfaceDrawPixel(psurface,ix,iy,color); +// } while (0); + } + + // p1 p2 + // p0 + if (p1.y>p0.y) + { + px_point2D t; + t=p1; + p1=p0; + p0=t; + } + + if (p2.y>p0.y) + { + px_point2D t; + t=p2; + p2=p0; + p0=t; + } + + btmy=p1.y; + midy=p2.y; + if (p2.yx2) + { + px_point2D t; + t=p2; + p2=p1; + p1=t; + } + } while (0); + + + + x0=p0.x; + y0=p0.y; + + x1=p1.x; + y1=p1.y; + + x2=p2.x; + y2=p2.y; + + + k01infinite=PX_FALSE; + k02infinite=PX_FALSE; + k12infinite=PX_FALSE; + if (x0==x1) + { + k01infinite=PX_TRUE; + b01=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + } + + if (x0==x2) + { + k02infinite=PX_TRUE; + b02=x0; + } + else + { + k02=(y0-y2)/(x0-x2); + b02=y0-k02*x0; + } + + if (x1==x2) + { + k12infinite=PX_TRUE; + b12=x0; + } + else + { + k12=(y1-y2)/(x1-x2); + b12=y1-k12*x1; + } + + + for(y = (px_int)(midy+0.5f)+0.5f; y < y0; y++) + { + if (k01infinite) + { + xleft=b01; + lAlpha=1; + } + else + { + xleft = (y-b01)/k01; + lAlpha=PX_ABS_FRAC(xleft); + } + + if (k02infinite) + { + xright=b02; + rAlpha=1; + } + else + { + xright = (y-b02)/k02; + rAlpha=PX_ABS_FRAC(xright); + } + + ix = (px_int)xleft; + iy=(px_int)y; + do + { + px_color aClr=color; + aClr._argb.a=(px_byte)(aClr._argb.a*lAlpha); + PX_SurfaceDrawPixel(psurface,ix,iy,color); + } while (0); + + for(ix = (px_int)xleft+1;ix < (px_int)xright; ++ix) + { + PX_SurfaceDrawPixel(psurface,ix,iy,color); + } + +// do +// { +// px_color aClr=color; +// aClr._argb.a=(px_byte)(aClr._argb.a*rAlpha); +// PX_SurfaceDrawPixel(psurface,ix,iy,color); +// } while (0); + } + +} + +px_void PX_GeoDrawArrow(px_surface *psurface,px_point2D p0,px_point2D p1,px_float size,px_color color) +{ + px_point2D p0_5,v,vn; + px_float arrowsize,distance; + + if (size<1) + { + return; + } + + arrowsize=size*5; + + + + //draw line + v=PX_Point2DNormalization(PX_Point2DSub(p1,p0)); + distance=PX_Point2DMod(PX_Point2DSub(p1,p0)); + distance-=arrowsize; + p0_5=PX_Point2DAdd(p0,PX_Point2DMul(v,distance)); + PX_GeoDrawLine(psurface,(px_int)p0.x,(px_int)p0.y,(px_int)p0_5.x,(px_int)p0_5.y,(px_int)size,color); + + //normal + vn.x=-v.y; + vn.y=v.x; + + PX_GeoDrawTriangle(psurface,p0_5,p1,PX_Point2DAdd(p0_5,PX_Point2DMul(vn,arrowsize)),color); + PX_GeoDrawTriangle(psurface,p0_5,p1,PX_Point2DAdd(p0_5,PX_Point2DMul(vn,-arrowsize)),color); +} + diff --git a/UI/PainterEngine/core/PX_BaseGeo.h b/UI/PainterEngine/core/PX_BaseGeo.h new file mode 100644 index 0000000..c167dbf --- /dev/null +++ b/UI/PainterEngine/core/PX_BaseGeo.h @@ -0,0 +1,21 @@ +#ifndef PIXELSES_BASEGEO +#define PIXELSES_BASEGEO + +#include "PX_Surface.h" + +px_void PX_GeoDrawLine(px_surface *psurface, px_int x0, px_int y0, px_int x1, px_int y1 ,px_int lineWidth, px_color color); +px_void PX_GeoDrawBorder(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom ,px_int lineWidth,px_color color); +px_void PX_GeoDrawRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color); +px_void PX_GeoDrawSolidCircle(px_surface *psurface, px_int x,px_int y,px_int Radius,px_color color ); +px_void PX_GeoDrawPenCircle(px_surface *psurface, px_float x,px_float y,px_float Radius,px_color color ); +px_void PX_GeoDrawPath(px_surface *psurface, px_point path[],px_int pathCount,px_float linewidth,px_color color); +px_void PX_GeoDrawCircle(px_surface *psurface,px_int x,px_int y,px_int Radius,px_int lineWidth,px_color color); +px_void PX_GeoDrawRing(px_surface *psurface, px_int x,px_int y,px_int Radius,px_int lineWidth,px_color color,px_int start_angle,px_int end_angle); +px_void PX_GeoDrawSector(px_surface *psurface, px_int x,px_int y,px_int Radius_outside,px_int Radius_inside,px_color color,px_int start_angle,px_int end_angle); +px_void PX_GeoDrawSolidRoundRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_float roundRaduis,px_color color); +px_void PX_GeoDrawRoundRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_float roundRaduis,px_float linewidth,px_color color); +px_void PX_GeoDrawBezierCurvePoint(px_surface *rendersurface,px_point pt[],px_int pt_count,px_float t,px_float radius,px_color clr); +px_void PX_GeoDrawBresenhamLine(px_surface *psurface,int x0, int y0, int x1, int y1,px_color clr); +px_void PX_GeoDrawTriangle(px_surface *psurface,px_point2D p0,px_point2D p1,px_point2D p2,px_color color); +px_void PX_GeoDrawArrow(px_surface *psurface,px_point2D p0,px_point2D p1,px_float size,px_color color); +#endif diff --git a/UI/PainterEngine/core/PX_Bitmap.c b/UI/PainterEngine/core/PX_Bitmap.c new file mode 100644 index 0000000..a84fefe --- /dev/null +++ b/UI/PainterEngine/core/PX_Bitmap.c @@ -0,0 +1,331 @@ +#include "PX_Bitmap.h" + +px_uint PX_BitmapGetHeight( void *BitmapBuffer ) +{ + return (px_dword)(*(px_dword *)((px_char *)BitmapBuffer+22)); +} + +px_uint PX_BitmapGetWidth( void *BitmapBuffer ) +{ + return (px_dword)(*(px_dword *)((px_char *)BitmapBuffer+18)); +} + +px_word PX_BitmapGetBitCount( void *BitmapBuffer ) +{ + return (px_word)(*(px_word *)((px_char *)BitmapBuffer+28)); +} + +px_dword PX_BitmapGetDataOffset(void *BitmapBuffer) +{ + return (px_dword)(*(px_dword *)((px_char *)BitmapBuffer+10)); +} + +px_void PX_BitmapRender(px_surface *psurface, void *BitmapBuffer,px_int BufferSize,px_int x,px_int y ) +{ + px_int i,j; + px_int Height; + px_int Width; + px_int RowBytes; + px_word bitCount; + px_char *ByteColor; + PX_BITMAP_RGB32 *rgb32; + PX_BITMAP_RGB24 *rgb24; + px_word *rgb16; + px_color PXcolor32; + if (x>psurface->width||y>psurface->height) + { + return; + } + + Height=PX_BitmapGetHeight(BitmapBuffer); + Width=PX_BitmapGetWidth(BitmapBuffer); + bitCount=PX_BitmapGetBitCount(BitmapBuffer); + if (Height>0) + { + if (x<-Width||y<-Height) + { + return; + } + } + else + { + if (x<-Width||yBufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return; + } + if(Height>0) + { + for (i=0;iBufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return; + } + if(Height>0) + { + for (i=0;iwidth&&i+yheight) + PX_SurfaceSetPixel(psurface,j+x,i+y,PXcolor32); + } + } + } + else + { + for (i=0;i<-Height;i++) + { + rgb24=(PX_BITMAP_RGB24 *)(ByteColor+RowBytes*(i)); + for (j=0;j0&&i+y>0&&j+xwidth&&i+yheight) + PX_SurfaceSetPixel(psurface,j+x,i+y,PXcolor32); + } + } + } + return; + } + + //16bit Color for R5G6B5 + if(bitCount==16) + { + //Translate buffer as format + rgb16=(px_word *)ByteColor; + if((Width*2)%4) + RowBytes=Width*2+4-((Width*2)%4); + else + RowBytes=Width*2; + + if (Height*RowBytes>BufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return; + } + if(Height>0) + { + for (i=0;i>5)&0x1F) *255)/31; + PXcolor32._argb.r=(((rgb16[j]>>10)&0x1F)*255)/31; + if(j+x>0&&i+y>0&&j+xwidth&&i+yheight) + PX_SurfaceSetPixel(psurface,j+x,i+y,PXcolor32); + } + } + } + else + { + for (i=0;i<-Height;i++) + { + rgb16=(px_word *)(ByteColor+RowBytes*(i)); + for (j=0;j>5)&0x1F) *255)/31; + PXcolor32._argb.r=(((rgb16[j]>>10)&0x1F)*255)/31; + if(j+x>0&&i+y>0&&j+xwidth&&i+yheight) + PX_SurfaceSetPixel(psurface,j+x,i+y,PXcolor32); + } + } + } + return; + } + + //Other bit format is no support + return; +} + +px_bool PX_BitmapVerify(void *BitmapBuffer,px_int BufferSize) +{ + + px_int Height; + px_int Width; + px_int RowBytes; + px_word bitCount; + + if (BufferSize<54) + { + return PX_FALSE; + } + if (((px_char *)BitmapBuffer)[0]!='B') + { + return PX_FALSE; + } + + if (((px_char *)BitmapBuffer)[1]!='M') + { + return PX_FALSE; + } + + + Height=PX_BitmapGetHeight(BitmapBuffer); + Width=PX_BitmapGetWidth(BitmapBuffer); + bitCount=PX_BitmapGetBitCount(BitmapBuffer); + + //32bit Color for A8R8G8B8(X8R8G8B8) + if(bitCount==32) + { + if (Height*Width>BufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return PX_FALSE; + } + } + + + //24bit Color for R8G8B8 + if(bitCount==24) + { + //Translate buffer as format + + if((Width*3)%4) + RowBytes=Width*3+4-((Width*3)%4); + else + RowBytes=Width*3; + + if (Height*RowBytes>BufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return PX_FALSE; + } + } + + //16bit Color for R5G6B5 + if(bitCount==16) + { + //Translate buffer as format + if((Width*2)%4) + RowBytes=Width*2+4-((Width*2)%4); + else + RowBytes=Width*2; + + if (Height*RowBytes>BufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return PX_FALSE; + } + } + + return PX_TRUE; +} + +px_bool PX_BitmapBuild(px_surface *psurface,px_char *BitmapBuffer,px_int *size) +{ + px_int _outsize,x,y,rowAppendSize; + PX_BITMAPFILEHEADER fileheader; + PX_BITMAPINFOHEADER infoheader; + PX_BITMAP_RGB24 *pdata; + + rowAppendSize=psurface->width%4; + + + _outsize=psurface->height*psurface->width*3+sizeof(PX_BITMAPFILEHEADER)+sizeof(PX_BITMAPINFOHEADER)+rowAppendSize*psurface->height; + + *size=_outsize; + if (BitmapBuffer) + { + px_dword bfoftsize=sizeof(PX_BITMAPFILEHEADER)+sizeof(PX_BITMAPINFOHEADER); + fileheader.bfType[0]='B'; + fileheader.bfType[1]='M'; + PX_memcpy(fileheader.bfSize,&_outsize,4); + fileheader.bfReserbed[0]=0; + fileheader.bfReserbed[1]=0; + fileheader.bfReserbed[2]=0; + fileheader.bfReserbed[3]=0; + PX_memcpy(fileheader.bfOffbits,&bfoftsize,4); + + infoheader.biBitCount=24; + infoheader.biClrImportant=0; + infoheader.biClrUsed=0; + infoheader.biCompression=0; + infoheader.biHeight=psurface->height; + infoheader.biWidth=psurface->width; + infoheader.biPlanes=1; + infoheader.biSize=40; + infoheader.biSizeImage=psurface->height*psurface->width*3; + infoheader.biXPelsPerMeter=2834; + infoheader.biYPelsPerMeter=2834; + + PX_memcpy(BitmapBuffer,&fileheader,sizeof(fileheader)); + PX_memcpy(BitmapBuffer+14,&infoheader,sizeof(infoheader)); + + pdata=(PX_BITMAP_RGB24 *)(BitmapBuffer+sizeof(PX_BITMAPFILEHEADER)+sizeof(PX_BITMAPINFOHEADER)); + for (y=psurface->height-1;y>=0;y--) + { + for (x=0;xwidth;x++) + { + (*pdata).R=(px_char)(PX_SURFACECOLOR(psurface,x,y)._argb.r*PX_SURFACECOLOR(psurface,x,y)._argb.a/256); + (*pdata).G= (px_char)(PX_SURFACECOLOR(psurface,x,y)._argb.g*PX_SURFACECOLOR(psurface,x,y)._argb.a/256); + (*pdata).B= (px_char)(PX_SURFACECOLOR(psurface,x,y)._argb.b*PX_SURFACECOLOR(psurface,x,y)._argb.a/256); + pdata++; + } + pdata=(PX_BITMAP_RGB24 *)(((px_char *)pdata)+rowAppendSize); + } + return PX_TRUE; + } + else + return PX_TRUE; +} diff --git a/UI/PainterEngine/core/PX_Bitmap.h b/UI/PainterEngine/core/PX_Bitmap.h new file mode 100644 index 0000000..a33d472 --- /dev/null +++ b/UI/PainterEngine/core/PX_Bitmap.h @@ -0,0 +1,66 @@ +#ifndef PIXELSES_BITMAP +#define PIXELSES_BITMAP + +#include "PX_Surface.h" + +typedef struct PX_BITMAPFILEHEADER { + px_char bfType[2]; //Must be "BM" offset 0-1 + px_char bfSize[4]; //offset 2-5 + px_char bfReserbed[4]; //offset 6-13 + px_uchar bfOffbits[4]; +} PX_BITMAPFILEHEADER; //14 Byte + +typedef struct PX_BITMAPINFOHEADER{ + px_dword biSize; //offset 14-17 + px_dword biWidth; //offset 18-21 + px_dword biHeight; //offset 22-25 + px_word biPlanes; //offset 26-27 + px_word biBitCount; //offset 28-29 + px_dword biCompression; + px_dword biSizeImage; + px_dword biXPelsPerMeter; + px_dword biYPelsPerMeter; + px_dword biClrUsed; + px_dword biClrImportant; +} PX_BITMAPINFOHEADER; + +typedef struct PX_BITMAP_tagRBG24 +{ + px_char B; + px_char G; + px_char R; +}PX_BITMAP_RGB24; + +typedef struct PX_BITMAP_tagRBG32 +{ + px_char B; + px_char G; + px_char R; + px_char A; +}PX_BITMAP_RGB32; + +//Bitmap Verify +px_bool PX_BitmapVerify(void *BitmapBuffer,px_int size); + +//Get bitmap height +px_uint PX_BitmapGetHeight(void *BitmapBuffer); +//Get bitmap width +px_uint PX_BitmapGetWidth(void *BitmapBuffer); +//Get bitmap BitCount +px_word PX_BitmapGetBitCount(void *BitmapBuffer); +////////////////////////////////////////////////////////////////////////// +// Draw bitmap to panel +// param:void *BitmapBuffer -Point to buffer of bitmap +// param:int x -Offset of X +// param:int y -Offset of Y +///////////////////////////////////////////////////////////////////////// +px_void PX_BitmapRender(px_surface *psurface,void *BitmapBuffer,px_int BufferSize,int x,int y); + +////////////////////////////////////////////////////////////////////////// +// build bitmap from surface +// param:px_memory *BitmapBuffer -Pointer of px_buffer to save bmpfile data +///////////////////////////////////////////////////////////////////////// + +px_bool PX_BitmapBuild(px_surface *psurface,px_char *BitmapBuffer,px_int *size); + +#endif diff --git a/UI/PainterEngine/core/PX_Core.h b/UI/PainterEngine/core/PX_Core.h new file mode 100644 index 0000000..f69455c --- /dev/null +++ b/UI/PainterEngine/core/PX_Core.h @@ -0,0 +1,40 @@ +////////////////////////////////////////////////////////////////////////// +/* + PainterEngine Core + (C)2019 DBinary + + This program is free software; you can redistribute it and/or modify + it under the terms of the BSD General Public License +*/ +////////////////////////////////////////////////////////////////////////// + +#ifndef __PX_CORE_H +#define __PX_CORE_H +#include "PX_Texture.h" +#include "PX_BaseGeo.h" +#include "PX_Font.h" +#include "PX_String.h" +#include "PX_Memory.h" +#include "PX_Hashmap.h" +#include "PX_Vector.h" +#include "PX_List.h" +#include "PX_AES.h" +#include "PX_ANN.h" +#include "PX_Sound.h" +#include "PX_Effect.h" +#include "PX_Quicksort.h" +#include "PX_Quadtree.h" +#include "PX_curve25519.h" +#include "PX_Sha256.h" +#include "PX_Arle.h" +#include "PX_Huffman.h" +#include "PX_Packet.h" +#include "PX_Base64.h" +#include "PX_3D.h" +#include "PX_PointsMesh.h" +#include "PX_MFCC.h" +#include "PX_KalmanFilter.h" +#include "PX_ImageFilter.h" +#include "PX_Linker.h" +#include "PX_Tuning.h" +#endif diff --git a/UI/PainterEngine/core/PX_Delaunay.c b/UI/PainterEngine/core/PX_Delaunay.c new file mode 100644 index 0000000..4d9f257 --- /dev/null +++ b/UI/PainterEngine/core/PX_Delaunay.c @@ -0,0 +1,513 @@ +#include "PX_Delaunay.h" +#include "PX_Quicksort.h" + + +typedef enum +{ + PX_DELAUNAY_ROUND_TEST_INSIDE, + PX_DELAUNAY_ROUND_TEST_OUTSIDE, + PX_DELAUNAY_ROUND_TEST_DELAUNAY, +}PX_DELAUNAY_ROUND_TEST; + +px_bool PX_DelaunaryVerifyCircle(px_point2D pt[],px_int p1,px_int p2,px_int p3) +{ + if (pt[p1].x==pt[p2].x&&pt[p1].x==pt[p3].x) + { + return PX_FALSE; + } + if ((pt[p1].y-pt[p2].y)/(pt[p1].x-pt[p2].x)==(pt[p1].y-pt[p3].y)/(pt[p1].x-pt[p3].x)) + { + return PX_FALSE; + } + return PX_TRUE; +} + +PX_DELAUNAY_ROUND_TEST PX_DelaunaryTest(px_point2D pt_array[],px_int testIndex,PX_Delaunay_Triangle triangle) +{ + px_float x,y,r; + px_float x1,x2,x3,y1,y2,y3; + px_float testx,testy; + px_float d; + x1=pt_array[triangle.index1].x; + y1=pt_array[triangle.index1].y; + + x2=pt_array[triangle.index2].x; + y2=pt_array[triangle.index2].y; + + + x3=pt_array[triangle.index3].x; + y3=pt_array[triangle.index3].y; + + testx=pt_array[testIndex].x; + testy=pt_array[testIndex].y; + + x=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2.0f*((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1))); + y=((x2-x1)*(x3*x3-x1*x1+y3*y3-y1*y1)-(x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1))/(2.0f*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1))); + r=PX_sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y)); + + d=((testx-x)*(testx-x)+(testy-y)*(testy-y)); + + if (d>r*r) + { + if (testx>x+r) + { + return PX_DELAUNAY_ROUND_TEST_DELAUNAY; + } + else + { + return PX_DELAUNAY_ROUND_TEST_OUTSIDE; + } + } + else + { + return PX_DELAUNAY_ROUND_TEST_INSIDE; + } +} + +px_bool PX_DelaunaryTriangleNeighbor(PX_Delaunay_Triangle *t1,PX_Delaunay_Triangle *t2) +{ + px_int c1_3[3]; + px_int c2_3[3]; + px_int i,j,k=0; + c1_3[0]=t1->index1; + c1_3[1]=t1->index2; + c1_3[2]=t1->index3; + + c2_3[0]=t2->index1; + c2_3[1]=t2->index2; + c2_3[2]=t2->index3; + + for (i=0;i<3;i++) + { + for (j=0;j<3;j++) + { + if (c1_3[i]==c2_3[j]) + { + k++; + } + } + } + return k==2; +} + +px_void PX_DelaunaryTriangleSwitch(PX_Delaunay_Triangle *t1,PX_Delaunay_Triangle *t2) +{ + px_int c1_3[3]; + px_int c2_3[3]; + px_int c[3],d[3]; + px_int j,k; + c1_3[0]=t1->index1; + c1_3[1]=t1->index2; + c1_3[2]=t1->index3; + + c2_3[0]=t2->index1; + c2_3[1]=t2->index2; + c2_3[2]=t2->index3; + + j=0;k=0; + if (c1_3[0]==c2_3[0]||c1_3[0]==c2_3[1]||c1_3[0]==c2_3[2]) + { + c[j]=c1_3[0]; + j++; + } + else + { + d[k]=c1_3[0]; + k++; + } + + if (c1_3[1]==c2_3[0]||c1_3[1]==c2_3[1]||c1_3[1]==c2_3[2]) + { + c[j]=c1_3[1]; + j++; + } + else + { + d[k]=c1_3[1]; + k++; + } + + if (c1_3[2]==c2_3[0]||c1_3[2]==c2_3[1]||c1_3[2]==c2_3[2]) + { + c[j]=c1_3[2]; + j++; + } + else + { + d[k]=c1_3[2]; + k++; + } + + if (c2_3[0]!=c1_3[0]&&c2_3[0]!=c1_3[1]&&c2_3[0]!=c1_3[2]) + { + d[k]=c2_3[0]; + } + + if (c2_3[1]!=c1_3[0]&&c2_3[1]!=c1_3[1]&&c2_3[1]!=c1_3[2]) + { + d[k]=c2_3[1]; + } + + if (c2_3[2]!=c1_3[0]&&c2_3[2]!=c1_3[1]&&c2_3[2]!=c1_3[2]) + { + d[k]=c2_3[2]; + } + + t1->index1=c[0]; + t1->index2=d[1]; + t1->index3=d[2]; + + t2->index1=c[1]; + t2->index2=d[1]; + t2->index3=d[2]; + +} + +px_bool PX_DelaunaryPointsBuild(px_memorypool *mp,px_point2D pt[],px_int count,px_vector *out_triangles,PX_DELAUNAY_RETURN_TYPE type) +{ + + PX_QuickSortAtom *pAtoms; + px_point2D *sortPt; + px_int *mapPt; + //edge + px_float minx,miny,maxx,maxy=0; + px_int i,j; + px_vector edges; + px_vector triangles; + px_vector DelaunaryTriangle; + + + PX_VectorInitialize(mp,&triangles,sizeof(PX_Delaunay_Triangle),1); + PX_VectorInitialize(mp,&DelaunaryTriangle,sizeof(PX_Delaunay_Triangle),1); + PX_VectorInitialize(mp,&edges,sizeof(PX_Delaunay_Edge),1); + + pAtoms=(PX_QuickSortAtom *)MP_Malloc(mp,sizeof(PX_QuickSortAtom)*count); + sortPt=(px_point2D *)MP_Malloc(mp,sizeof(px_point2D)*(count+3)); + mapPt=(px_int *)MP_Malloc(mp,sizeof(px_int)*(count)); + + if (!pAtoms) + { + return PX_FALSE; + } + for (i=0;imaxy) + { + maxy=sortPt[i].y; + } + + if (sortPt[i].yindex1==pCompareEdge->index1&&pEdge->index2==pCompareEdge->index2) + { + PX_VectorErase(&edges,k); + k--; + bremove=PX_TRUE; + } + if (pEdge->index1==pCompareEdge->index2&&pEdge->index2==pCompareEdge->index1) + { + PX_VectorErase(&edges,k); + k--; + bremove=PX_TRUE; + } + } + if (bremove) + { + PX_VectorErase(&edges,j); + j--; + } + } + + //generate triangles + for (j=0;jindex1,pEdge->index2)) + { + gtrianle.index1=i; + gtrianle.index2=pEdge->index1; + gtrianle.index3=pEdge->index2; + + PX_VectorPushback(&triangles,>rianle); + } + } + } + + for (i=0;iindex1-count>=0) + { + k++; + } + if (pTriangle->index2-count>=0) + { + k++; + } + if (pTriangle->index3-count>=0) + { + k++; + } + if (k==1) + { + PX_VectorPushback(&sortTriangles,&pTriangle); + } + } + + index=0; + + while (indexindex1!=pTriangle2->index1&&pTriangle1->index1!=pTriangle2->index2&&pTriangle1->index1!=pTriangle2->index3) + pA=pTriangle1->index1; + else + if(pTriangle1->index2!=pTriangle2->index1&&pTriangle1->index2!=pTriangle2->index2&&pTriangle1->index2!=pTriangle2->index3) + pA=pTriangle1->index2; + else + pA=pTriangle1->index3; + + if(pTriangle2->index1!=pTriangle1->index1&&pTriangle2->index1!=pTriangle1->index2&&pTriangle2->index1!=pTriangle1->index3) + pB=pTriangle2->index1; + else + if(pTriangle2->index2!=pTriangle1->index1&&pTriangle2->index2!=pTriangle1->index2&&pTriangle2->index2!=pTriangle1->index3) + pB=pTriangle2->index2; + else + pB=pTriangle2->index3; + + if(pTriangle1->index1-count>=0) + pC=pTriangle1->index1; + + if(pTriangle1->index2-count>=0) + pC=pTriangle1->index2; + + if(pTriangle1->index3-count>=0) + pC=pTriangle1->index3; + + + if(pTriangle1->index1-count<0&&pTriangle1->index1!=pA) + pO=pTriangle1->index1; + + if(pTriangle1->index2-count<0&&pTriangle1->index2!=pA) + pO=pTriangle1->index2; + + if(pTriangle1->index3-count<0&&pTriangle1->index3!=pA) + pO=pTriangle1->index3; + + t1v.x=sortPt[pO].x-sortPt[pA].x; + t1v.y=sortPt[pO].y-sortPt[pA].y; + t1v.z=0; + + t2v.x=sortPt[pB].x-sortPt[pO].x; + t2v.y=sortPt[pB].y-sortPt[pO].y; + t2v.z=0; + + t3v.x=sortPt[pC].x-sortPt[pB].x; + t3v.y=sortPt[pC].y-sortPt[pB].y; + t3v.z=0; + + if (PX_PointCross(t1v,t2v).z*PX_PointCross(t2v,t3v).z>0) + { + pTriangle1->index1=pC; + pTriangle1->index2=pA; + pTriangle1->index3=pB; + + pTriangle2->index1=pO; + pTriangle2->index2=pA; + pTriangle2->index3=pB; + + + PX_VectorErase(&sortTriangles,i); + index=-1; + break; + } + } + } + index++; + } + PX_VectorFree(&sortTriangles); + } while (0); + + + + for (i=0;iindex1-count>=0||pTriangle->index2-count>=0||pTriangle->index3-count>=0) + { + PX_VectorErase(&DelaunaryTriangle,i); + i--; + } + else + { + switch (type) + { + case PX_DELAUNAY_RETURN_TYPE_TRIANGLE: + { + px_triangle dtriangle; + dtriangle.Vertex_1.x=sortPt[pTriangle->index1].x; + dtriangle.Vertex_1.y=sortPt[pTriangle->index1].y; + dtriangle.Vertex_1.z=0; + + dtriangle.Vertex_2.x=sortPt[pTriangle->index2].x; + dtriangle.Vertex_2.y=sortPt[pTriangle->index2].y; + dtriangle.Vertex_2.z=0; + + dtriangle.Vertex_3.x=sortPt[pTriangle->index3].x; + dtriangle.Vertex_3.y=sortPt[pTriangle->index3].y; + dtriangle.Vertex_3.z=0; + + PX_VectorPushback(out_triangles,&dtriangle); + } + break; + case PX_DELAUNAY_RETURN_TYPE_TRIANGLE_INDEX: + { + PX_Delaunay_Triangle mapTriangleIndex; + mapTriangleIndex.index1=mapPt[pTriangle->index1]; + mapTriangleIndex.index2=mapPt[pTriangle->index2]; + mapTriangleIndex.index3=mapPt[pTriangle->index3]; + PX_VectorPushback(out_triangles,&mapTriangleIndex); + } + break; + default: + break; + } + + } + } + + PX_VectorFree(&triangles); + PX_VectorFree(&DelaunaryTriangle); + PX_VectorFree(&edges); + MP_Free(mp,mapPt); + MP_Free(mp,sortPt); + return PX_TRUE; +} + diff --git a/UI/PainterEngine/core/PX_Delaunay.h b/UI/PainterEngine/core/PX_Delaunay.h new file mode 100644 index 0000000..c1f21cf --- /dev/null +++ b/UI/PainterEngine/core/PX_Delaunay.h @@ -0,0 +1,25 @@ +#ifndef PX_DELAUNAY_H +#define PX_DELAUNAY_H +#include "PX_3D.h" + +typedef struct +{ + px_int index1; + px_int index2; +}PX_Delaunay_Edge; + +typedef struct +{ + px_int index1; + px_int index2; + px_int index3; +}PX_Delaunay_Triangle; + +typedef enum +{ + PX_DELAUNAY_RETURN_TYPE_TRIANGLE, + PX_DELAUNAY_RETURN_TYPE_TRIANGLE_INDEX, +}PX_DELAUNAY_RETURN_TYPE; +px_bool PX_DelaunaryPointsBuild(px_memorypool *mp,px_point2D pt[],px_int count,px_vector *out_triangles,PX_DELAUNAY_RETURN_TYPE type); + +#endif diff --git a/UI/PainterEngine/core/PX_Effect.c b/UI/PainterEngine/core/PX_Effect.c new file mode 100644 index 0000000..8f19c14 --- /dev/null +++ b/UI/PainterEngine/core/PX_Effect.c @@ -0,0 +1,89 @@ +#include "PX_Effect.h" + + + +px_bool PX_EffectShine(px_surface *s,px_int radius,px_color color,px_float intension) +{ + px_int x,y,sampleX,sampleY; + px_surface ns; + px_int alpha; + px_color bindColor; + if(!PX_SurfaceCreate(s->MP,s->width,s->height,&ns)) + return PX_FALSE; + + for(y=0;yheight;y++) + for (x=0;xwidth;x++) + { + if(PX_SurfaceGetPixel(s,x,y)._argb.a==0) + { + alpha=0; + for (sampleY=y-radius;sampleY<=y+radius;sampleY++) + { + for (sampleX=x-radius;sampleX<=x+radius;sampleX++) + { + if(sampleX>=0&&sampleXwidth&&sampleY>=0&&sampleY<=s->height-1) + alpha+=PX_SurfaceGetPixel(s,sampleX,sampleY)._argb.a; + } + } + alpha/=((radius*2-1)*(radius*2-1)); + alpha=(px_int)(alpha*intension); + alpha=alpha>255?255:alpha; + bindColor=color; + if(alpha!=0) + { + bindColor._argb.a=(px_uchar)alpha; + PX_SurfaceSetPixel(&ns,x,y,bindColor); + } + } + else + { + PX_SurfaceSetPixel(&ns,x,y,PX_SurfaceGetPixel(s,x,y)); + } + } + PX_memcpy(s->surfaceBuffer,ns.surfaceBuffer,s->width*s->height*sizeof(px_color)); + PX_SurfaceFree(&ns); + return PX_TRUE; +} + +px_bool PX_EffectOutline(px_surface *s,px_int radius,px_color color) +{ + px_int x,y,sampleX,sampleY; + px_surface ns; + px_int alpha; + px_color bindColor; + if(!PX_SurfaceCreate(s->MP,s->width,s->height,&ns)) + return PX_FALSE; + + for(y=0;yheight;y++) + for (x=0;xwidth;x++) + { + if(PX_SurfaceGetPixel(s,x,y)._argb.a==0) + { + alpha=0; + for (sampleY=y-radius;sampleY<=y+radius;sampleY++) + { + for (sampleX=x-radius;sampleX<=x+radius;sampleX++) + { + if(sampleX>=0&&sampleXwidth&&sampleY>=0&&sampleY<=s->height-1) + alpha+=PX_SurfaceGetPixel(s,sampleX,sampleY)._argb.a; + } + } + alpha/=((radius*2-1)*(radius-1)); + alpha=alpha>255?255:alpha; + bindColor=color; + if(alpha!=0) + { + bindColor._argb.a= (px_uchar)alpha; + PX_SurfaceSetPixel(&ns,x,y,bindColor); + } + } + else + { + PX_SurfaceSetPixel(&ns,x,y,PX_SurfaceGetPixel(s,x,y)); + } + + } + PX_memcpy(s->surfaceBuffer,ns.surfaceBuffer,s->width*s->height*sizeof(px_color)); + PX_SurfaceFree(&ns); + return PX_TRUE; +} diff --git a/UI/PainterEngine/core/PX_Effect.h b/UI/PainterEngine/core/PX_Effect.h new file mode 100644 index 0000000..e16286d --- /dev/null +++ b/UI/PainterEngine/core/PX_Effect.h @@ -0,0 +1,7 @@ +#ifndef PX_EFFECT_H +#define PX_EFFECT_H +#include "PX_Surface.h" + +px_bool PX_EffectShine(px_surface *s,px_int radius,px_color color,px_float intension); +px_bool PX_EffectOutline(px_surface *s,px_int radius,px_color color); +#endif diff --git a/UI/PainterEngine/core/PX_Font.c b/UI/PainterEngine/core/PX_Font.c new file mode 100644 index 0000000..e8e0809 --- /dev/null +++ b/UI/PainterEngine/core/PX_Font.c @@ -0,0 +1,750 @@ + +#include "PX_Font.h" + +static px_uchar const AsciiLib[95][16] = { + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ + + {0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},/*"!",1*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ + + {0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00},/*"#",3*/ + + {0x00,0x18,0x18,0x3C,0x66,0x60,0x30,0x18,0x0C,0x06,0x66,0x3C,0x18,0x18,0x00,0x00},/*"$",4*/ + + {0x00,0x00,0x70,0xD8,0xDA,0x76,0x0C,0x18,0x30,0x6E,0x5B,0x1B,0x0E,0x00,0x00,0x00},/*"%",5*/ + + {0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x60,0x6F,0x66,0x66,0x3B,0x00,0x00,0x00,0x00},/*"&",6*/ + + {0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ + + {0x00,0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00},/*"(",8*/ + + {0x00,0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x00,0x00},/*")",9*/ + + {0x00,0x00,0x00,0x00,0x00,0x36,0x1C,0x7F,0x1C,0x36,0x00,0x00,0x00,0x00,0x00,0x00},/*"*",10*/ + + {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00},/*"+",11*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00},/*",",12*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00},/*".",14*/ + + {0x00,0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00},/*"/",15*/ + + {0x00,0x00,0x00,0x1E,0x33,0x37,0x37,0x33,0x3B,0x3B,0x33,0x1E,0x00,0x00,0x00,0x00},/*"0",16*/ + + {0x00,0x00,0x00,0x0C,0x1C,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00},/*"1",17*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00},/*"2",18*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x1C,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"3",19*/ + + {0x00,0x00,0x00,0x30,0x30,0x36,0x36,0x36,0x66,0x7F,0x06,0x06,0x00,0x00,0x00,0x00},/*"4",20*/ + + {0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00},/*"5",21*/ + + {0x00,0x00,0x00,0x1C,0x18,0x30,0x7C,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"6",22*/ + + {0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x30,0x00,0x00,0x00,0x00},/*"7",23*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x76,0x3C,0x6E,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"8",24*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3E,0x0C,0x18,0x38,0x00,0x00,0x00,0x00},/*"9",25*/ + + {0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00},/*":",26*/ + + {0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00},/*";",27*/ + + {0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00},/*"<",28*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ + + {0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00},/*">",30*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x0C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},/*"?",31*/ + + {0x00,0x00,0x00,0x7E,0xC3,0xC3,0xCF,0xDB,0xDB,0xCF,0xC0,0x7F,0x00,0x00,0x00,0x00},/*"@",32*/ + + {0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"A",33*/ + + {0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},/*"B",34*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"C",35*/ + + {0x00,0x00,0x00,0x78,0x6C,0x66,0x66,0x66,0x66,0x66,0x6C,0x78,0x00,0x00,0x00,0x00},/*"D",36*/ + + {0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"E",37*/ + + {0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"F",38*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,0x6E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"G",39*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"H",40*/ + + {0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00},/*"I",41*/ + + {0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"J",42*/ + + {0x00,0x00,0x00,0x66,0x66,0x6C,0x6C,0x78,0x6C,0x6C,0x66,0x66,0x00,0x00,0x00,0x00},/*"K",43*/ + + {0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"L",44*/ + + {0x00,0x00,0x00,0x63,0x63,0x77,0x6B,0x6B,0x6B,0x63,0x63,0x63,0x00,0x00,0x00,0x00},/*"M",45*/ + + {0x00,0x00,0x00,0x63,0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x63,0x00,0x00,0x00,0x00},/*"N",46*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"O",47*/ + + {0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"P",48*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x0C,0x06,0x00,0x00},/*"Q",49*/ + + {0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x6C,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"R",50*/ + + {0x00,0x00,0x00,0x3C,0x66,0x60,0x30,0x18,0x0C,0x06,0x66,0x3C,0x00,0x00,0x00,0x00},/*"S",51*/ + + {0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*"T",52*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"U",53*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},/*"V",54*/ + + {0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,0x6B,0x36,0x36,0x36,0x00,0x00,0x00,0x00},/*"W",55*/ + + {0x00,0x00,0x00,0x66,0x66,0x34,0x18,0x18,0x2C,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"X",56*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*"Y",57*/ + + {0x00,0x00,0x00,0x7E,0x06,0x06,0x0C,0x18,0x30,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"Z",58*/ + + {0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00},/*"[",59*/ + + {0x00,0x00,0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0x06,0x06,0x00,0x00,0x00},/*"\",60*/ + + {0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00},/*"]",61*/ + + {0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00},/*"_",63*/ + + {0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",64*/ + + {0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"a",65*/ + + {0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},/*"b",66*/ + + {0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00},/*"c",67*/ + + {0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"d",68*/ + + {0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7E,0x60,0x60,0x3C,0x00,0x00,0x00,0x00},/*"e",69*/ + + {0x00,0x00,0x00,0x1E,0x30,0x30,0x30,0x7E,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00},/*"f",70*/ + + {0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x7C,0x00},/*"g",71*/ + + {0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"h",72*/ + + {0x00,0x00,0x18,0x18,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},/*"i",73*/ + + {0x00,0x00,0x0C,0x0C,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x78,0x00},/*"j",74*/ + + {0x00,0x00,0x00,0x60,0x60,0x66,0x66,0x6C,0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00},/*"k",75*/ + + {0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},/*"l",76*/ + + {0x00,0x00,0x00,0x00,0x00,0x7E,0x6B,0x6B,0x6B,0x6B,0x6B,0x63,0x00,0x00,0x00,0x00},/*"m",77*/ + + {0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"n",78*/ + + {0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"o",79*/ + + {0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00},/*"p",80*/ + + {0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x00},/*"q",81*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x6E,0x70,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"r",82*/ + + {0x00,0x00,0x00,0x00,0x00,0x3E,0x60,0x60,0x3C,0x06,0x06,0x7C,0x00,0x00,0x00,0x00},/*"s",83*/ + + {0x00,0x00,0x00,0x30,0x30,0x7E,0x30,0x30,0x30,0x30,0x30,0x1E,0x00,0x00,0x00,0x00},/*"t",84*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"u",85*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},/*"v",86*/ + + {0x00,0x00,0x00,0x00,0x00,0x63,0x6B,0x6B,0x6B,0x6B,0x36,0x36,0x00,0x00,0x00,0x00},/*"w",87*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,0x00,0x00},/*"x",88*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x0C,0x18,0xF0,0x00},/*"y",89*/ + + {0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00},/*"z",90*/ + + {0x00,0x00,0x00,0x0C,0x18,0x18,0x18,0x30,0x60,0x30,0x18,0x18,0x18,0x0C,0x00,0x00},/*"{",91*/ + + {0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00},/*"|",92*/ + + {0x00,0x00,0x00,0x30,0x18,0x18,0x18,0x0C,0x06,0x0C,0x18,0x18,0x18,0x30,0x00,0x00},/*"}",93*/ + + {0x00,0x00,0x00,0x71,0xDB,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ +}; + +px_void PX_GetASCIICode(px_uchar* pBuffer,px_uchar ASCII) +{ + if(ASCII-32<95) + PX_memcpy(pBuffer,(px_void *)AsciiLib[(ASCII - 32)] ,16); + else + PX_memset(pBuffer,0xff,16); +} + + +px_int PX_FontDrawChar(px_surface *psurface, px_int x,px_int y,px_uchar ASCI,px_color Color ) +{ + unsigned short i, j; + px_uchar buffer[16], tmp_char; + + if (ASCI==' ') + { + return 0; + } + + PX_GetASCIICode(buffer,ASCI); + + for( i=0; i<16; i++ ) + { + tmp_char = buffer[i]; + for( j=0; j<8; j++ ) + { + if( (tmp_char >> (7 - j)) & 0x01 ) + { + PX_SurfaceDrawPixel(psurface,x+j,y+i,Color); + } + } + } + return 16; +} + +px_int PX_FontDrawText(px_surface *psurface,px_int x,px_int y,PX_ALIGN align,const px_char *Text,px_color Color) +{ + px_uchar TempChar; + px_int resX=x; + px_int xlen=0; + px_int frWidth,frHeight; + const px_char *CalcText=Text; + + PX_FontTextGetRenderWidthHeight(Text,&frWidth,&frHeight); + + switch (align) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=frWidth/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=frWidth; + break; + case PX_ALIGN_LEFTMID: + y-=frHeight/2; + break; + case PX_ALIGN_CENTER: + y-=frHeight/2; + x-=frWidth/2; + break; + case PX_ALIGN_RIGHTMID: + y-=frHeight/2; + x-=frWidth; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=frHeight; + break; + case PX_ALIGN_MIDBOTTOM: + y-=frHeight; + x-=frWidth/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=frHeight; + x-=frWidth; + break; + } + + + while(*Text!=0) + { + if (*Text=='\r'||*Text=='\n') + { + y+=__PX_FONT_HEIGHT+4; + x=resX; + Text++; + continue; + } + + TempChar = *Text++; + PX_FontDrawChar(psurface, x, y, TempChar, Color); + x += __PX_FONT_ASCSIZE; + continue; + } + return x-resX+1; +} + + + + + +px_void PX_FontTextGetRenderWidthHeight(const px_char *Text,px_int *width,px_int *height) +{ + px_int x=0,y=0; + px_int max_width=0,max_height=0; + + while(*Text!=0) + { + if (*Text=='\r'||*Text=='\n') + { + y+=__PX_FONT_HEIGHT+4; + if (y>max_height) + { + max_height=y; + } + Text++; + continue; + } + + if((*Text)&0x80) + { + //not support + Text++; + continue; + } + + if (*Text==' ') + { + Text++; + x += __PX_FONT_ASCSIZE; + if (x>max_width) + { + max_width=x; + } + continue; + } + + Text++; + + x += __PX_FONT_ASCSIZE; + if (x>max_width) + { + max_width=x; + } + if (y+__PX_FONT_HEIGHT>max_height) + { + max_height=y+__PX_FONT_HEIGHT; + } + } + *width=max_width; + *height=max_height; +} + + +px_int PX_FontModuleGetCharacterCode(PX_FONTMODULE_CODEPAGE codePage,const px_char *Text,px_dword *code) +{ + const px_uchar *uText=(const px_uchar *)Text; + + switch(codePage) + { + case PX_FONTMODULE_CODEPAGE_GBK: + if (*uText==0) + { + *code=0; + return 0; + } + if ((*uText)&0x80) + { + *code=(px_dword)((*uText)+*(uText+1)*256); + return 2; + } + else + { + *code=(px_dword)(*uText); + return 1; + } + break; + case PX_FONTMODULE_CODEPAGE_UTF8: + { + px_dword bc=1; + px_dword rcode=0; + px_uchar pageHead=(px_uchar)(*uText); + px_uchar oftbit=0x80; + if (pageHead==0) + { + return 0; + } + + rcode=(*uText); + while (1) + { + if ((pageHead&oftbit)==0) + { + break; + } + + oftbit>>=1; + + if ((pageHead&oftbit)==0) + { + break; + } + uText++; + rcode+=((*uText)<<(bc*8)); + bc++; + }; + *code=rcode; + return bc; + } + break; + case PX_FONTMODULE_CODEPAGE_UTF16: + { + *code=(px_dword)((*uText)+*(uText+1)*256); + if (*code==0) + { + return 0; + } + return 2; + } + break; + default: + return 0; + break; + } + *code=0; + return 0; +} + +px_bool PX_FontModuleInitialize(px_memorypool *mp,PX_FontModule *module) +{ + module->mp=mp; + module->codePage=PX_FONTMODULE_CODEPAGE_UNDEFINED; + module->max_BearingY=0; + module->max_Height=0; + module->max_Width=0; + return PX_MapInitialize(mp,&module->characters_map); +} + +px_bool PX_FontModuleLoad(PX_FontModule *module,px_byte *buffer,px_int size) +{ + px_int offset=0; + PX_FontModule_Charactor *cpy; + + if(module->mp==PX_NULL) + { + PX_ASSERT(); + return PX_FALSE; + } + + while (offsetc_magic[0]!='P') + goto _ERROR; + if(pcHeader->c_magic[1]!='X') + goto _ERROR; + if(pcHeader->c_magic[2]!='F') + goto _ERROR; + if(pcHeader->c_magic[3]!='M') + goto _ERROR; + + if (module->codePage==PX_FONTMODULE_CODEPAGE_UNDEFINED) + { + module->codePage=(PX_FONTMODULE_CODEPAGE)pcHeader->codePage; + } + else + { + if (pcHeader->codePage!=(px_dword)module->codePage) + { + offset+=pcHeader->Font_Width*pcHeader->Font_Height; + continue; + } + } + + + PX_Base64Encode((px_byte *)&pcHeader->charactor_code,sizeof(pcHeader->charactor_code),hex); + + //PX_itoa(pcHeader->charactor_code,hex,sizeof(hex),16); + + + if (PX_MapGet(&module->characters_map,hex)) + { + offset+=pcHeader->Font_Width*pcHeader->Font_Height; + continue; + } + if ((px_int)pcHeader->BearingY>module->max_BearingY) + { + module->max_BearingY=pcHeader->BearingY; + } + if ((px_int)pcHeader->Font_Height>module->max_Height) + { + module->max_Height=pcHeader->Font_Height; + } + + if ((px_int)pcHeader->Font_Width>module->max_Width) + { + module->max_Width=pcHeader->Font_Width; + + } + cpy=(PX_FontModule_Charactor *)MP_Malloc(module->mp,sizeof(PX_FontModule_Charactor)); + + if (!cpy) + { + goto _ERROR; + } + + PX_memcpy(cpy,pcHeader,sizeof(PX_FontModule_Charactor_Header)); + + if(!PX_ShapeCreate(module->mp,&cpy->shape,cpy->header.Font_Width,cpy->header.Font_Height)) + { + goto _ERROR; + } + PX_memcpy(cpy->shape.alpha,pData,cpy->header.Font_Width*cpy->header.Font_Height); + offset+=cpy->header.Font_Width*cpy->header.Font_Height; + PX_MapPut(&module->characters_map,hex,cpy); + } + return PX_TRUE; +_ERROR: + //PX_FontModuleFree(module); + return PX_FALSE; +} + +px_void PX_FontModuleFree(PX_FontModule *module) +{ + px_map_element *pme; + pme=PX_MapFirst(&module->characters_map); + while (pme) + { + PX_FontModule_Charactor *pmc=(PX_FontModule_Charactor *)pme->Ptr; + PX_ShapeFree(&pmc->shape); + MP_Free(module->mp,pmc); + pme=PX_MapNext(&module->characters_map,pme); + } + PX_MapFree(&module->characters_map); +} + + + + +px_int PX_FontModuleGetCharacterDesc(PX_FontModule *module,const px_char *Text,px_dword *code,px_int *advance,px_int *height) +{ + px_char hex[16]; + px_int f_size; + PX_FontModule_Charactor *pChar=PX_NULL; + + if(!(f_size=PX_FontModuleGetCharacterCode(module->codePage,Text,code))) + { + return 0; + } + + if (*code==' ') + { + *advance=module->max_Width/2; + *height=module->max_Height; + return f_size; + } + + PX_Base64Encode((px_byte *)code,sizeof(px_dword),hex); + + pChar=(PX_FontModule_Charactor *)PX_MapGet(&module->characters_map,hex); + if (pChar) + { + *advance=(px_int)pChar->header.Advance; + *height=(px_int)pChar->header.Font_Height; + } + else + { + *advance=0; + *height=0; + } + + return f_size; +} + +px_void PX_FontModuleTextGetRenderWidthHeight(PX_FontModule *module,const px_char *Text,px_int *width,px_int *height) +{ + px_int dx=0; + px_int dy=0; + px_int max_width=0,max_height=0; + const px_char *pTextPointer=Text; + + if (module==PX_NULL) + { + PX_FontTextGetRenderWidthHeight(pTextPointer,width,height); + return; + } + + + while (PX_TRUE) + { + px_dword code=0; + px_char hex[16]; + px_int f_size; + PX_FontModule_Charactor *pChar=PX_NULL; + + if(!(f_size=PX_FontModuleGetCharacterCode(module->codePage,pTextPointer,&code))) + { + break; + } + pTextPointer+=f_size; + + if (code==' ') + { + dx+=module->max_Width/2; + } + else if(code=='\n') + { + dx=0; + dy+=module->max_Height; + } + else + { + PX_Base64Encode((px_byte *)&code,sizeof(code),hex); + + pChar=(PX_FontModule_Charactor *)PX_MapGet(&module->characters_map,hex); + if (pChar) + { + // + dx+=pChar->header.Advance; + } + } + + if (dx>max_width) + { + max_width=dx; + } + + if (pChar) + { + if ((px_int)(dy+module->max_BearingY-pChar->header.BearingY+pChar->shape.height)>max_height) + { + max_height=dy+module->max_BearingY-pChar->header.BearingY+pChar->shape.height; + } + } + } + *width=max_width; + *height=max_height; +} + +px_int PX_FontModuleDrawCharacter(px_surface *psurface,PX_FontModule *mod,int x,int y,const px_dword code,px_color Color) +{ + px_char hex[16]; + PX_FontModule_Charactor *pChar; + PX_Base64Encode((px_byte *)&code,sizeof(code),hex); + pChar=(PX_FontModule_Charactor *)PX_MapGet(&mod->characters_map,hex); + if (pChar) + { + PX_ShapeRender(psurface,&pChar->shape,x+pChar->header.BearingX,y+mod->max_BearingY-pChar->header.BearingY,PX_ALIGN_LEFTTOP,Color); + return pChar->header.Advance; + } + + return 0; +} + +px_int PX_FontModuleDrawText(px_surface *psurface,PX_FontModule *mod,int x,int y,PX_ALIGN align,const px_char *Text,px_color Color) +{ + px_int dx,dy,content_width=0; + px_int frWidth,frHeight; + const px_char *pTextPointer=Text; + + if (!Text) + { + PX_ASSERT(); + return 0; + } + + if (mod==PX_NULL) + { + return PX_FontDrawText(psurface,x,y,align,Text,Color); + } + + + PX_FontModuleTextGetRenderWidthHeight(mod,Text,&frWidth,&frHeight); + + switch (align) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=frWidth/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=frWidth; + break; + case PX_ALIGN_LEFTMID: + y-=frHeight/2; + break; + case PX_ALIGN_CENTER: + y-=frHeight/2; + x-=frWidth/2; + break; + case PX_ALIGN_RIGHTMID: + y-=frHeight/2; + x-=frWidth; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=frHeight; + break; + case PX_ALIGN_MIDBOTTOM: + y-=frHeight; + x-=frWidth/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=frHeight; + x-=frWidth; + break; + } + + dx=x; + dy=y; + pTextPointer=Text; + + while (PX_TRUE) + { + px_dword code=0; + px_char hex[16]; + px_int f_size; + PX_FontModule_Charactor *pChar; + + if(!(f_size=PX_FontModuleGetCharacterCode(mod->codePage,pTextPointer,&code))) + { + break; + } + pTextPointer+=f_size; + + if (code==' ') + { + dx+=mod->max_Width/2; + } + else if(code=='\n') + { + dy+=mod->max_Height; + dx=x; + } + else + { + PX_Base64Encode((px_byte *)&code,sizeof(code),hex); + //PX_itoa(code,hex,sizeof(hex),16); + pChar=(PX_FontModule_Charactor *)PX_MapGet(&mod->characters_map,hex); + if (pChar) + { + PX_ShapeRender(psurface,&pChar->shape,dx+pChar->header.BearingX,dy+mod->max_BearingY-pChar->header.BearingY,PX_ALIGN_LEFTTOP,Color); + dx+=pChar->header.Advance; + } + } + } + return dx-x+1; +} + diff --git a/UI/PainterEngine/core/PX_Font.h b/UI/PainterEngine/core/PX_Font.h new file mode 100644 index 0000000..79a3d58 --- /dev/null +++ b/UI/PainterEngine/core/PX_Font.h @@ -0,0 +1,84 @@ +#ifndef PIXELSES_FONT +#define PIXELSES_FONT + +#include "../core/PX_Surface.h" +#include "../core/PX_Texture.h" +#include "../core/PX_Base64.h" + +#include "PX_Hashmap.h" + +//#define __PX_FONT_GBKSIZE 13 +#define __PX_FONT_ASCSIZE 8 +#define __PX_FONT_HEIGHT 15 +#define __PX_FONT_MODULE_XSPACE_SIZE 0 +#define __PX_FONT_MODULE_YSPACE_SIZE 0 +//////////////////////////////////////////////////////////////////////////////////////////// +/////// Private function //// +////// //// +//////////////////////////////////////////////////////////////////////////////////////////// + +#define PX_FontGetCharactorHeight() (__PX_FONT_HEIGHT) +#define PX_FontGetAscCharactorWidth() (__PX_FONT_ASCSIZE) +//#define PX_FontGetGbkCharactorWidth() (__PX_FONT_GBKSIZE) + +typedef struct +{ + union + { + px_char c_magic[4];//PXFM + px_dword magic; + }; + px_dword codePage; + px_dword charactor_code; + px_dword BearingX; + px_dword BearingY; + px_dword Advance; + px_dword Font_Width; + px_dword Font_Height; +}PX_FontModule_Charactor_Header; + +typedef struct +{ + PX_FontModule_Charactor_Header header; + px_shape shape; +}PX_FontModule_Charactor; + +typedef enum +{ + PX_FONTMODULE_CODEPAGE_GBK, + PX_FONTMODULE_CODEPAGE_UTF8, + PX_FONTMODULE_CODEPAGE_UTF16, + PX_FONTMODULE_CODEPAGE_UNDEFINED, +}PX_FONTMODULE_CODEPAGE; + +typedef struct +{ + px_memorypool *mp; + px_map characters_map; + + px_int max_BearingY; + px_int max_Height; + px_int max_Width; + PX_FONTMODULE_CODEPAGE codePage; +}PX_FontModule; + + + +px_int PX_FontDrawChar(px_surface *psurface, px_int x,px_int y,px_uchar chr,px_color Color ); +px_int PX_FontDrawText(px_surface *psurface,int x,int y,PX_ALIGN align,const px_char *Text,px_color Color); +px_void PX_FontTextGetRenderWidthHeight(const px_char *Text,px_int *width,px_int *height); + + + +px_int PX_FontModuleGetCharacterCode(PX_FONTMODULE_CODEPAGE codePage,const px_char *Text,px_dword *code); +px_bool PX_FontModuleInitialize(px_memorypool *mp,PX_FontModule *module); +px_bool PX_FontModuleLoad(PX_FontModule *module,px_byte *buffer,px_int size); +px_void PX_FontModuleFree(PX_FontModule *module); +px_int PX_FontModuleGetCharacterDesc(PX_FontModule *module,const px_char *Text,px_dword *code,px_int *width,px_int *height); +px_void PX_FontModuleTextGetRenderWidthHeight(PX_FontModule *module,const px_char *Text,px_int *advance,px_int *height); +px_int PX_FontModuleDrawCharacter(px_surface *psurface,PX_FontModule *mod,int x,int y,const px_dword code,px_color Color); +px_int PX_FontModuleDrawText(px_surface *psurface,PX_FontModule *mod,int x,int y,PX_ALIGN align,const px_char *Text,px_color Color); + + +#endif + diff --git a/UI/PainterEngine/core/PX_Hashmap.c b/UI/PainterEngine/core/PX_Hashmap.c new file mode 100644 index 0000000..78b2d0b --- /dev/null +++ b/UI/PainterEngine/core/PX_Hashmap.c @@ -0,0 +1,185 @@ +/* + * Generic map implementation. + */ +#include "PX_Hashmap.h" + + +px_bool PX_MapInitialize(px_memorypool *mp,px_map *m) +{ + m->mp=mp; + m->root.rb_node = PX_NULL; + m->size = 0; + + return PX_TRUE; +} + + + + +px_map_element * px_rbtree_search(struct px_rb_root *root,const char string[]) +{ + struct px_rb_node *node = root->rb_node; + + while (node) { + px_map_element *data =(px_map_element *)node; + int result; + + result = PX_strcmp(string, data->string); + + if (result < 0) + node = node->rb_left; + else if (result > 0) + node = node->rb_right; + else + return data; + } + return PX_NULL; +} + +px_bool px_rbtree_insert(struct px_rb_root *root, px_map_element *data) +{ + struct px_rb_node **newnode = &(root->rb_node), *parent = PX_NULL; + + /* Figure out where to put new node */ + while (*newnode) { + px_map_element *__this = (px_map_element *)(*newnode); + int result = PX_strcmp(data->string, __this->string); + + parent = *newnode; + if (result < 0) + newnode = &((*newnode)->rb_left); + else if (result > 0) + newnode = &((*newnode)->rb_right); + else + return PX_FALSE; + } + + /* Add new node and rebalance tree. */ + rb_link_node(&data->node, parent, newnode); + rb_insert_color(&data->node, root); + + return PX_TRUE; +} + + + +PX_HASHMAP_RETURN PX_MapPut(px_map * m,const px_char stringkey[], px_void * value) +{ + px_map_element *newnode = (px_map_element *)MP_Malloc(m->mp,sizeof(px_map_element)); + newnode->Ptr=value; + PX_strcpy(newnode->string,stringkey,sizeof(newnode->string)); + if(px_rbtree_insert(&m->root,newnode)) + { + m->size++; + return PX_HASHMAP_RETURN_OK; + } + else + return PX_HASHMAP_RETURN_NULL; +} + +PX_HASHMAP_RETURN PX_MapPutInt(px_map * m,const px_char stringkey[], px_int value) +{ + px_map_element *newnode = (px_map_element *)MP_Malloc(m->mp,sizeof(px_map_element)); + newnode->_int=value; + PX_strcpy(newnode->string,stringkey,sizeof(newnode->string)); + if(px_rbtree_insert(&m->root,newnode)) + { + m->size++; + return PX_HASHMAP_RETURN_OK; + } + else + return PX_HASHMAP_RETURN_NULL; +} + +PX_HASHMAP_RETURN PX_MapPutFloat(px_map * m,const px_char stringkey[], px_float value) +{ + px_map_element *newnode = (px_map_element *)MP_Malloc(m->mp,sizeof(px_map_element)); + newnode->_float=value; + PX_strcpy(newnode->string,stringkey,sizeof(newnode->string)); + if(px_rbtree_insert(&m->root,newnode)) + { + m->size++; + return PX_HASHMAP_RETURN_OK; + } + else + return PX_HASHMAP_RETURN_NULL; +} + +px_void * PX_MapGet(px_map * m, const px_char stringkey[]) +{ + px_map_element *p=px_rbtree_search(&m->root,stringkey); + if (p) + { + return p->Ptr; + } + return PX_NULL; +} + +px_void PX_MapFree(px_map * m) +{ + struct px_rb_node *node; + m->size=0; + node = rb_first(&m->root); + while (node) + { + struct px_rb_node *p_delete_node; + p_delete_node=node; + node = rb_next(node); + rb_erase(p_delete_node,&m->root); + MP_Free(m->mp,p_delete_node); + } + m->size=0; +} + +px_int PX_MapGetSize(px_map * m) +{ + return m->size; +} + +PX_HASHMAP_RETURN PX_MapErase(px_map * m,const px_char stringkey[]) +{ + px_map_element *data = px_rbtree_search(&m->root,stringkey); + if (data) { + m->size--; + rb_erase(&data->node, &m->root); + MP_Free(m->mp,data); + return PX_HASHMAP_RETURN_OK; + } + return PX_HASHMAP_RETURN_NULL; +} + +px_map_element * PX_MapFirst(px_map * m) +{ + struct px_rb_node *node; + m->size=0; + node = rb_first(&m->root); + return (px_map_element *)node; +} + +px_map_element * PX_MapNext(px_map * m,px_map_element *node) +{ + return (px_map_element *)rb_next((struct px_rb_node *)node); +} + +px_bool PX_MapGetInt(px_map * m, const px_char stringkey[],px_int *v) +{ + px_map_element *p=px_rbtree_search(&m->root,stringkey); + if (p) + { + *v= p->_int; + return PX_TRUE; + } + return PX_FALSE; +} + + +px_bool PX_MapGetFloat(px_map * m, const px_char stringkey[],px_float *v) +{ + px_map_element *p=px_rbtree_search(&m->root,stringkey); + if (p) + { + *v= p->_float; + return PX_TRUE; + } + return PX_FALSE; +} diff --git a/UI/PainterEngine/core/PX_Hashmap.h b/UI/PainterEngine/core/PX_Hashmap.h new file mode 100644 index 0000000..3d3e29d --- /dev/null +++ b/UI/PainterEngine/core/PX_Hashmap.h @@ -0,0 +1,59 @@ + +#ifndef PX_HASHMAP_H__ +#define PX_HASHMAP_H__ + +#include "PX_MemoryPool.h" +#include "PX_rbtree.h" + +#define PX_HASHMAP_STRINGKEY_LEN 64 + + +typedef enum +{ + PX_HASHMAP_RETURN_OK, + PX_HASHMAP_RETURN_NULL, + PX_HASHMAP_RETURN_KEYEXIST, + PX_HASHMAP_RETURN_OUTOFMEMORY, + PX_HASHMAP_RETURN_FULL, +}PX_HASHMAP_RETURN; + + + +typedef struct +{ + px_memorypool *mp; + px_int size; + struct px_rb_root root; +}px_map; + +typedef struct __px_map_element +{ + struct px_rb_node node;//must be first member + px_char string[PX_HASHMAP_STRINGKEY_LEN]; + union + { + px_void *Ptr; + px_int _int; + px_float _float; + }; + +}px_map_element; + + + +px_bool PX_MapInitialize(px_memorypool *mp,px_map *hashmap); + +PX_HASHMAP_RETURN PX_MapPut(px_map * m,const px_char stringkey[], px_void * value); +PX_HASHMAP_RETURN PX_MapPutInt(px_map * m,const px_char stringkey[], px_int value); +PX_HASHMAP_RETURN PX_MapPutFloat(px_map * m,const px_char stringkey[], px_float value); +PX_HASHMAP_RETURN PX_MapErase(px_map * m,const px_char stringkey[]); +px_map_element * PX_MapFirst(px_map * m); +px_map_element * PX_MapNext(px_map * m,px_map_element *node); +px_void *PX_MapGet(px_map * m, const px_char stringkey[]); +px_bool PX_MapGetInt(px_map * m, const px_char stringkey[],px_int *_int); +px_bool PX_MapGetFloat(px_map * m, const px_char stringkey[],px_float *_float); +px_void PX_MapFree(px_map * m); +px_int PX_MapGetSize(px_map * m); + + +#endif diff --git a/UI/PainterEngine/core/PX_Huffman.c b/UI/PainterEngine/core/PX_Huffman.c new file mode 100644 index 0000000..dc9ea7c --- /dev/null +++ b/UI/PainterEngine/core/PX_Huffman.c @@ -0,0 +1,268 @@ +#include "PX_Huffman.h" + +struct _huffman_node +{ + px_word left,right; + px_uint weight; + px_byte data; +}; +typedef struct _huffman_node huffman_node; + +typedef struct +{ + union + { + px_word left; + px_word bNode; + }; + union + { + px_word right; + px_byte data; + }; +}huffman_snode; + +typedef struct +{ + px_dword len; + px_byte encode[32]; +}huffman_map; + +px_void px_huffmanTraversalTree(huffman_node *pNodeHead,huffman_node *node,huffman_map map,huffman_map *pTable) +{ + huffman_map genMap; + if (node->left) + { + genMap=map; + genMap.len++; + px_huffmanTraversalTree(pNodeHead,&pNodeHead[node->left],genMap,pTable); + genMap=map; + genMap.encode[genMap.len/8]|=(1<<(genMap.len%8)); + genMap.len++; + px_huffmanTraversalTree(pNodeHead,&pNodeHead[node->right],genMap,pTable); + } + else + { + pTable[node->data]=map; + } +} + +px_void PX_huffmanCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size) +{ + px_uint i,j; + huffman_node nodes[511]; + huffman_snode snodes[511]; + px_uint sortCursor=255; + huffman_map huffmanMap[256]={0}; + px_uint encodeNecessaryNodeCount; + px_uint sortIndex; + px_uint w_size=0; + huffman_map mapnode; + px_byte w_byte=0; + px_uchar w_byte_offset=0; + + PX_memset(nodes,0,sizeof(nodes)); + for (i=0;i<256;i++) + { + nodes[i].data=(px_byte)i; + } + for (i=0;i0) + { + huffman_node newNode; + //move node to end + nodes[sortCursor*2]=nodes[sortCursor]; + nodes[sortCursor*2-1]=nodes[sortCursor-1]; + newNode.left=sortCursor*2; + newNode.right=sortCursor*2-1; + newNode.data=0; + newNode.weight=nodes[sortCursor*2].weight+nodes[sortCursor*2-1].weight; + nodes[sortCursor-1]=newNode; + sortCursor--; + //re-sort + sortIndex=sortCursor; + while (sortIndex>0) + { + if (nodes[sortIndex].weight>nodes[sortIndex-1].weight) + { + huffman_node temp=nodes[sortIndex-1]; + nodes[sortIndex-1]=nodes[sortIndex]; + nodes[sortIndex]=temp; + } + else + { + break; + } + sortIndex--; + } + } + + PX_memset(snodes,0,sizeof(snodes)); + for (i=0;i=8) + { + w_byte_offset=0; + if(_out) + _out[w_size]=w_byte; + w_byte=0; + w_size++; + } + } + } + //last + if(_out) + _out[w_size]=w_byte; + w_size++; + *out_size=w_size; +} + +px_void PX_huffmanDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size) +{ + px_uint r_offset/*read*/,w_offset; + px_uchar leaf; + px_uint bit_offset; + px_uint bit; + px_dword datasize; + huffman_snode *pheader,*pNode; + *out_size=*(px_dword *)(_in+1); + if (!_out) + { + return; + } + + datasize=*(px_dword *)(_in+1); + pheader=(huffman_snode *)(_in+1+4); + if (!pheader->bNode) + { + //only one node + if(_out) + PX_memset(_out,pheader->data,datasize); + } + + leaf=_in[0]; + bit_offset=0; + w_offset=0; + pNode=pheader; + r_offset=1+4+((leaf+1)*2-1)*sizeof(huffman_snode); + + while (r_offsetright]; + if (!pNode->bNode) + { + _out[w_offset]=pNode->data; + w_offset++; + pNode=pheader; + if (w_offset>=datasize) + { + return; + } + } + + } + else + { + pNode=&pheader[pNode->left]; + if (!pNode->bNode) + { + _out[w_offset]=pNode->data; + w_offset++; + pNode=pheader; + if (w_offset>=datasize) + { + return; + } + } + } + + bit_offset++; + if (bit_offset>=8) + { + r_offset++; + bit_offset=0; + } + } + //error + PX_ASSERT(); +} + diff --git a/UI/PainterEngine/core/PX_Huffman.h b/UI/PainterEngine/core/PX_Huffman.h new file mode 100644 index 0000000..7575245 --- /dev/null +++ b/UI/PainterEngine/core/PX_Huffman.h @@ -0,0 +1,7 @@ +#ifndef PX_HUFFMAN_H +#define PX_HUFFMAN_H +#include "PX_Quicksort.h" + +px_void PX_huffmanCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size); +px_void PX_huffmanDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size); +#endif diff --git a/UI/PainterEngine/core/PX_ImageFilter.c b/UI/PainterEngine/core/PX_ImageFilter.c new file mode 100644 index 0000000..a2b1975 --- /dev/null +++ b/UI/PainterEngine/core/PX_ImageFilter.c @@ -0,0 +1,229 @@ +#include "PX_ImageFilter.h" + +px_void PX_ImageFilter_Convolution(px_texture *ptexture,px_float out[],px_float matrix_operator[3][3],px_bool raw) +{ + px_int i,j; + px_float uniform=0; + px_float maxGray=0; + for (i=0;i<3;i++) + { + for (j=0;j<3;j++) + { + if (matrix_operator[i][j]>0) + { + uniform+=matrix_operator[i][j]; + } + } + } + + for (j=0;jheight-1;j++) + { + for (i=0;iwidth-1;i++) + { + px_color clr; + px_float Gray; + clr=PX_SurfaceGetPixel(ptexture,i-1,j-1); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + if (Gray>maxGray) + { + maxGray=Gray; + } + } + } + + for (j=1;jheight-1;j++) + { + for (i=1;iwidth-1;i++) + { + px_color clr; + px_float Gray; + px_float weight=0; + clr=PX_SurfaceGetPixel(ptexture,i-1,j-1); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + + weight+=Gray*matrix_operator[0][0]; + + clr=PX_SurfaceGetPixel(ptexture,i,j-1); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + weight+=Gray*matrix_operator[0][1]; + + clr=PX_SurfaceGetPixel(ptexture,i+1,j-1); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + weight+=Gray*matrix_operator[0][2]; + + + clr=PX_SurfaceGetPixel(ptexture,i-1,j); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + weight+=Gray*matrix_operator[1][0]; + + clr=PX_SurfaceGetPixel(ptexture,i,j); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + weight+=Gray*matrix_operator[1][1]; + + clr=PX_SurfaceGetPixel(ptexture,i+1,j); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + weight+=Gray*matrix_operator[1][2]; + + + + clr=PX_SurfaceGetPixel(ptexture,i-1,j+1); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + weight+=Gray*matrix_operator[2][0]; + + clr=PX_SurfaceGetPixel(ptexture,i,j+1); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + weight+=Gray*matrix_operator[2][1]; + + clr=PX_SurfaceGetPixel(ptexture,i+1,j+1); + Gray = clr._argb.r*0.299f+ clr._argb.g*0.587f + clr._argb.b*0.114f; + Gray*=clr._argb.a/255.f; + weight+=Gray*matrix_operator[2][2]; + + if (raw) + { + out[j*ptexture->width+i]+=(weight)/(uniform*maxGray); + } + else + { + out[j*ptexture->width+i]+=PX_ABS(weight)/(uniform*maxGray); + } + + } + } + +} + +px_void PX_ImageFilter_PriwittX(px_texture *ptexture,px_float out[]) +{ + px_float Priwitt_h[3][3]={{-1,0,1},{-1,0,1},{-1,0,1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Priwitt_h,PX_TRUE); +} + +px_void PX_ImageFilter_PriwittY(px_texture *ptexture,px_float out[]) +{ + px_float Priwitt_v[3][3]={{-1,-1,-1},{0,0,0},{1,1,1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Priwitt_v,PX_TRUE); +} + + +px_void PX_ImageFilter_Priwitt(px_texture *ptexture,px_float out[]) +{ + px_float Priwitt_h[3][3]={{-1,0,1},{-1,0,1},{-1,0,1}}; + px_float Priwitt_v[3][3]={{-1,-1,-1},{0,0,0},{1,1,1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Priwitt_h,PX_FALSE); + PX_ImageFilter_Convolution(ptexture,out,Priwitt_v,PX_FALSE); + + do + { + px_int i; + for (i=0;iwidth*ptexture->height;i++) + { + out[i]/=2; + } + } while (0); +} + + +px_void PX_ImageFilter_SobelX(px_texture *ptexture,px_float out[]) +{ + px_float Sobel_h[3][3]={{-1,0,1},{-2,0,2},{-1,0,1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Sobel_h,PX_TRUE); +} +px_void PX_ImageFilter_SobelY(px_texture *ptexture,px_float out[]) +{ + px_float Sobel_v[3][3]={{-1,-2,-1},{0,0,0},{1,2,1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Sobel_v,PX_TRUE); +} +px_void PX_ImageFilter_Sobel(px_texture *ptexture,px_float out[]) +{ + px_float Sobel_h[3][3]={{-1,0,1},{-2,0,2},{-1,0,1}}; + px_float Sobel_v[3][3]={{-1,-2,-1},{0,0,0},{1,2,1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Sobel_h,PX_FALSE); + PX_ImageFilter_Convolution(ptexture,out,Sobel_v,PX_FALSE); + do + { + px_int i; + for (i=0;iwidth*ptexture->height;i++) + { + out[i]/=2; + } + } while (0); +} + +px_void PX_ImageFilter_RobertsX(px_texture *ptexture,px_float out[]) +{ + px_float Roberts_h[3][3]={{0,0,0},{0,-1,0},{0,0,1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Roberts_h,PX_TRUE); +} +px_void PX_ImageFilter_RobertsY(px_texture *ptexture,px_float out[]) +{ + px_float Roberts_v[3][3]={{0,0,0},{0,0,-1},{0,1,0}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Roberts_v,PX_TRUE); +} + +px_void PX_ImageFilter_Roberts(px_texture *ptexture,px_float out[]) +{ + px_float Roberts_h[3][3]={{0,0,0},{0,-1,0},{0,0,1}}; + px_float Roberts_v[3][3]={{0,0,0},{0,0,-1},{0,1,0}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Roberts_h,PX_FALSE); + PX_ImageFilter_Convolution(ptexture,out,Roberts_v,PX_FALSE); + do + { + px_int i; + for (i=0;iwidth*ptexture->height;i++) + { + out[i]/=2; + } + } while (0); +} + +px_void PX_ImageFilter_LaplacianX(px_texture *ptexture,px_float out[]) +{ + px_float Roberts_h[3][3]={{0,-1,0},{-1,4,-1},{0,-1,0}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Roberts_h,PX_TRUE); +} + + +px_void PX_ImageFilter_LaplacianY(px_texture *ptexture,px_float out[]) +{ + px_float Roberts_v[3][3]={{-1,-1,-1},{-1,8,-1},{-1,-1,-1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Roberts_v,PX_TRUE); +} + +px_void PX_ImageFilter_Laplacian(px_texture *ptexture,px_float out[]) +{ + px_float Roberts_h[3][3]={{0,-1,0},{-1,4,-1},{0,-1,0}}; + px_float Roberts_v[3][3]={{-1,-1,-1},{-1,8,-1},{-1,-1,-1}}; + PX_memset(out,0,ptexture->width*ptexture->height*sizeof(px_float)); + PX_ImageFilter_Convolution(ptexture,out,Roberts_h,PX_FALSE); + PX_ImageFilter_Convolution(ptexture,out,Roberts_v,PX_FALSE); + do + { + px_int i; + for (i=0;iwidth*ptexture->height;i++) + { + out[i]/=2; + } + } while (0); +} + + diff --git a/UI/PainterEngine/core/PX_ImageFilter.h b/UI/PainterEngine/core/PX_ImageFilter.h new file mode 100644 index 0000000..fe88191 --- /dev/null +++ b/UI/PainterEngine/core/PX_ImageFilter.h @@ -0,0 +1,18 @@ +#ifndef __PX_IMAGEFILTER_H +#define __PX_IMAGEFILTER_H +#include "PX_Texture.h" + +px_void PX_ImageFilter_PriwittX(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_PriwittY(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_Priwitt(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_SobelX(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_SobelY(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_Sobel(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_RobertsX(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_RobertsY(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_Roberts(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_LaplacianX(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_LaplacianY(px_texture *ptexture,px_float out[]); +px_void PX_ImageFilter_Laplacian(px_texture *ptexture,px_float out[]); + +#endif diff --git a/UI/PainterEngine/core/PX_KalmanFilter.c b/UI/PainterEngine/core/PX_KalmanFilter.c new file mode 100644 index 0000000..cc7a648 --- /dev/null +++ b/UI/PainterEngine/core/PX_KalmanFilter.c @@ -0,0 +1,28 @@ +#include "PX_KalmanFilter.h" + +px_void PX_KalmanFilterInitialize(PX_KalmanFilter *filter,px_double A,px_double B,px_double Q,px_double H,px_double R) +{ + filter->A=A; + filter->B=B; + filter->H=H; + filter->Kk=0; + filter->Pk=1; + filter->Q=Q; + filter->R=R; + filter->Xk=0; +} + +px_void PX_KalmanFilterUpdate(PX_KalmanFilter *filter,px_double Zk,px_double uk,px_double wk) +{ + filter->Xk=filter->A*filter->Xk+filter->B*uk; + filter->Pk=filter->A*filter->Pk*filter->A+filter->Q; + + filter->Kk=filter->Pk/(filter->H*filter->Pk*filter->H+filter->R); + filter->Xk=filter->Xk+filter->Kk*(Zk-filter->Xk); + filter->Pk=(1-filter->Kk*filter->H)*filter->Pk; +} + +px_double PX_KalmanFilterGetGuess(PX_KalmanFilter *filter) +{ + return filter->Xk; +} diff --git a/UI/PainterEngine/core/PX_KalmanFilter.h b/UI/PainterEngine/core/PX_KalmanFilter.h new file mode 100644 index 0000000..f193b6e --- /dev/null +++ b/UI/PainterEngine/core/PX_KalmanFilter.h @@ -0,0 +1,15 @@ +#ifndef PX_KALMANFILTER_H +#define PX_KALMANFILTER_H +#include "PX_Typedef.h" + +typedef struct +{ + px_double Xk,Kk,Pk; + px_double A,B,Q,H,R; +}PX_KalmanFilter; + +px_void PX_KalmanFilterInitialize(PX_KalmanFilter *filter,px_double A,px_double B,px_double Q,px_double H,px_double R); +px_void PX_KalmanFilterUpdate(PX_KalmanFilter *filter,px_double Zk,px_double uk,px_double wk); +px_double PX_KalmanFilterGetGuess(PX_KalmanFilter *filter); + +#endif diff --git a/UI/PainterEngine/core/PX_Linker.c b/UI/PainterEngine/core/PX_Linker.c new file mode 100644 index 0000000..15300e2 --- /dev/null +++ b/UI/PainterEngine/core/PX_Linker.c @@ -0,0 +1,19 @@ +#include "PX_Linker.h" +px_void PX_LinkerInitialize(PX_Linker *linker,PX_LinkerRead_func read,px_void *readUserPtr,PX_LinkerWrite_func write,px_void *writeUserPtr) +{ + linker->read=read; + linker->write=write; + linker->readUserPtr=readUserPtr; + linker->writeUserPtr=writeUserPtr; +} + +px_int PX_LinkerRead(PX_Linker *linker,px_void *data,px_int datasize) +{ + return linker->read(linker->readUserPtr,data,datasize); +} + +px_int PX_LinkerWrite(PX_Linker *linker,px_void *data,px_int datasize) +{ + return linker->write(linker->readUserPtr,data,datasize); +} + diff --git a/UI/PainterEngine/core/PX_Linker.h b/UI/PainterEngine/core/PX_Linker.h new file mode 100644 index 0000000..6285cd9 --- /dev/null +++ b/UI/PainterEngine/core/PX_Linker.h @@ -0,0 +1,23 @@ +#ifndef PX_LINKER_H +#define PX_LINKER_H + +#include "PX_Typedef.h" + +typedef px_int (*PX_LinkerRead_func)(px_void *userPtr,px_void *data,px_int datasize); +typedef px_int (*PX_LinkerWrite_func)(px_void *userPtr,px_void *data,px_int datasize); + + +typedef struct +{ + PX_LinkerRead_func read; + px_void *readUserPtr; + PX_LinkerWrite_func write; + px_void *writeUserPtr; +}PX_Linker; + +px_void PX_LinkerInitialize(PX_Linker *linker,PX_LinkerRead_func read,px_void *readUserPtr,PX_LinkerWrite_func write,px_void *writeUserPtr); +px_int PX_LinkerRead(PX_Linker *linker,px_void *data,px_int datasize); +px_int PX_LinkerWrite(PX_Linker *linker,px_void *data,px_int datasize); + + +#endif diff --git a/UI/PainterEngine/core/PX_List.c b/UI/PainterEngine/core/PX_List.c new file mode 100644 index 0000000..dd12d8f --- /dev/null +++ b/UI/PainterEngine/core/PX_List.c @@ -0,0 +1,204 @@ +#include "PX_List.h" + +px_void PX_ListInitialize(px_memorypool *mp,px_list *list) +{ + list->end=PX_NULL; + list->head=PX_NULL; + list->size=0; + list->mp=mp; +} + +px_void *PX_ListPush(px_list *list,px_void *data,px_int size) +{ + px_list_node *node; + if (list->head==PX_NULL) + { + list->head=(px_list_node *)MP_Malloc(list->mp,sizeof(px_list_node)); + list->head->pdata=MP_Malloc(list->mp,size); + PX_memcpy(list->head->pdata,data,size); + list->head->pnext=PX_NULL; + list->head->ppre=PX_NULL; + list->end=list->head; + list->size++; + return list->head->pdata; + } + else + { + node=(px_list_node *)MP_Malloc(list->mp,sizeof(px_list_node)); + node->pdata=MP_Malloc(list->mp,size); + PX_memcpy(node->pdata,data,size); + node->pnext=PX_NULL; + node->ppre=list->end; + list->end->pnext=node; + list->end=node; + list->size++; + return node->pdata; + } +} + +px_bool PX_ListPop(px_list *list,px_list_node *node) +{ + if (!node) + { + PX_ERROR("Error List node pop"); + return PX_FALSE; + } + MP_Free(list->mp,node->pdata); + if (node==list->head) + { + list->head=list->head->pnext; + if (list->head) + { + list->head->ppre=PX_NULL; + } + MP_Free(list->mp,node); + list->size--; + if (list->size==0) + { + list->head=PX_NULL; + list->end=PX_NULL; + } + return PX_TRUE; + } + + if (node==list->end) + { + list->end=list->end->ppre; + if (list->end) + { + list->end->pnext=PX_NULL; + } + MP_Free(list->mp,node); + list->size--; + if (list->size==0) + { + list->head=PX_NULL; + list->end=PX_NULL; + } + return PX_TRUE; + } + node->ppre->pnext=node->pnext; + node->pnext->ppre=node->ppre; + MP_Free(list->mp,node); + list->size--; + + return PX_TRUE; +} + + +px_bool PX_ListErase(px_list *list,px_int i) +{ + return PX_ListPop(list,PX_ListNodeAt(list,i)); +} + +px_list_node* PX_ListNodeAt(px_list *list,px_int index) +{ + px_list_node *node=list->head; + if (index>=list->size) + { + return PX_NULL; + } + while (index--) + { + node=node->pnext; + } + return node; +} + + +px_list_node* PX_ListNodeNext(px_list_node* node) +{ + return node->pnext; +} + +px_void PX_ListMove(px_list *list,px_int index,px_int moveto) +{ + px_list_node *pNode=list->head; + px_list_node *pMoveToNode=list->head; + if (index>=list->size||index==moveto) + { + return; + } + + while (index) + { + pNode=pNode->pnext; + index--; + } + + while (moveto) + { + pMoveToNode=pMoveToNode->pnext; + moveto--; + } + + //disconnect + if (pNode==list->head) + { + list->head=pNode->pnext; + pNode->pnext->ppre=pNode->ppre; + } + else if (pNode==list->end) + { + pNode->ppre->pnext=PX_NULL; + list->end=pNode->ppre; + } + else + { + pNode->ppre->pnext=pNode->pnext; + pNode->pnext->ppre=pNode->ppre; + } + + //insert + if (pMoveToNode==list->head) + { + pNode->pnext=list->head; + pNode->ppre=PX_NULL; + + list->head->ppre=pNode; + list->head=pNode; + } + else if (pMoveToNode==list->end) + { + pNode->ppre=list->end; + pNode->pnext=PX_NULL; + + list->end->pnext=pNode; + list->end=pNode; + } + else + { + pNode->pnext=pMoveToNode; + pNode->ppre=pMoveToNode->ppre; + pMoveToNode->ppre->pnext=pNode; + pMoveToNode->ppre=pNode; + } + + +} + +px_int PX_ListSize(px_list *list) +{ + return list->size; +} + +px_void PX_ListClear(px_list *list) +{ + px_list_node *node=list->head; + px_list_node *pn; + while (node) + { + pn=node; + node=node->pnext; + MP_Free(list->mp,pn->pdata); + MP_Free(list->mp,pn); + } + list->end=PX_NULL; + list->head=PX_NULL; + list->size=0; +} + +px_void PX_ListFree(px_list *list) +{ + PX_ListClear(list); +} diff --git a/UI/PainterEngine/core/PX_List.h b/UI/PainterEngine/core/PX_List.h new file mode 100644 index 0000000..2e924f5 --- /dev/null +++ b/UI/PainterEngine/core/PX_List.h @@ -0,0 +1,40 @@ +#ifndef __PX_LIST_H +#define __PX_LIST_H +#include "PX_MemoryPool.h" +typedef struct __px_list_node +{ + px_void *pdata; + struct __px_list_node *pnext; + struct __px_list_node *ppre; +}px_list_node; + +typedef struct __px_list +{ + px_memorypool *mp; + px_int size; + struct __px_list_node *head; + struct __px_list_node *end; +}px_list; + + + + +////////////////////////////////////////////////////////////////////////// +//List +px_void PX_ListInitialize(px_memorypool *mp,px_list *list); +px_void *PX_ListPush(px_list *list,px_void *data,px_int size); +px_bool PX_ListPop(px_list *list,px_list_node *node); +px_bool PX_ListErase(px_list *list,px_int i); +px_list_node* PX_ListNodeAt(px_list *list,px_int index); +px_list_node* PX_ListNodeNext(px_list_node* node); + + +px_void PX_ListMove(px_list *list,px_int index,px_int moveto); +px_int PX_ListSize(px_list *list); +px_void PX_ListClear(px_list *list); +px_void PX_ListFree(px_list *list); + +#define PX_LIST_NODEDATA(x) ((x)->pdata) +#define PX_LIST_NODETDATA(t,x) ((t *)(x->pdata)) +#define PX_LISTAT(t,x,i) ((t *)(PX_ListNodeAt(x,i)->pdata)) +#endif diff --git a/UI/PainterEngine/core/PX_Log.c b/UI/PainterEngine/core/PX_Log.c new file mode 100644 index 0000000..182336f --- /dev/null +++ b/UI/PainterEngine/core/PX_Log.c @@ -0,0 +1,26 @@ +#include "PX_Typedef.h" + + +void PX_ASSERT(void) +{ +#ifdef PX_DEBUG_MODE + while(1) *(char *)(0)=1; +#endif +} + +void PX_ERROR(px_char fmt[]) +{ + PX_ASSERT(); +} + + +px_char * PX_GETLOG(void) +{ + return ""; +} + +void PX_LOG(px_char fmt[]) +{ + + //while(1); +} diff --git a/UI/PainterEngine/core/PX_Log.h b/UI/PainterEngine/core/PX_Log.h new file mode 100644 index 0000000..1539be5 --- /dev/null +++ b/UI/PainterEngine/core/PX_Log.h @@ -0,0 +1,7 @@ +#ifndef __PX_LOG_H +#define __PX_LOG_H +void PX_LOG(char fmt[]); +void PX_ERROR(char fmt[]); +char *PX_GETLOG(void); +void PX_ASSERT(void); +#endif diff --git a/UI/PainterEngine/core/PX_MFCC.c b/UI/PainterEngine/core/PX_MFCC.c new file mode 100644 index 0000000..b3bc7e9 --- /dev/null +++ b/UI/PainterEngine/core/PX_MFCC.c @@ -0,0 +1,138 @@ +#include "PX_MFCC.h" + + +static px_double PX_HzToMel(px_double freq) +{ + return 1127*PX_log(1.0 + freq/700); +} + +static px_double PX_MelToHz(px_double freq) +{ + return 700 * (PX_exp(freq/1127) - 1); +} + + +void PX_liftwindow(px_double* p, int m) +{ + int i; + px_double max_value = 0.0f; + for(i = 1; i <= m; i++) + { + p[i-1] = 1+ 0.5 * m * PX_sind( PX_PI * i/m ); + if( p[i-1] > max_value) + { + max_value = p[i-1]; + } + } + for(i = 1; i <= m; i++) + { + p[i-1] /= max_value; + } +} + +px_void PX_MFCCInitialize(PX_MFCC *mfcc,px_int framesize,px_int sampleRate,px_int low,px_int high) +{ + px_int i,j; + px_double fre_bin = (px_double)sampleRate / framesize; + px_double low_mel = PX_HzToMel(low); + px_double high_mel = PX_HzToMel(high); + px_double mel_bw = (high_mel - low_mel)/(PX_MFCC_DCT_FACTOR_SIZE + 1); + px_int valid_nfft = framesize/2 + 1; + + mfcc->N=framesize; + PX_memset(mfcc->filter,0,sizeof(mfcc->filter)); + + for(j = 1; j <= PX_MFCC_DCT_FACTOR_SIZE; j++) + { + px_double mel_cent = j * mel_bw + low_mel; + px_double mel_left = mel_cent - mel_bw; + px_double mel_right = mel_cent + mel_bw; + px_double freq_cent = PX_MelToHz(mel_cent); + px_double freq_left = PX_MelToHz(mel_left); + px_double freq_bw_left = freq_cent - freq_left; + px_double freq_right = PX_MelToHz(mel_right); + px_double freq_bw_right = freq_right - freq_cent; + for(i = 1; i <= valid_nfft; i++) + { + px_double freq = (i-1) * fre_bin ; + if( freq > freq_left && freq < freq_right ) + { + if( freq <= freq_cent) + { + mfcc->filter[j-1].w[i-1] = (freq - freq_left) / freq_bw_left; + } + else + { + mfcc->filter[j-1].w[i-1] = (freq_right - freq) / freq_bw_right; + } + } + } + } + +} + +px_bool PX_MFCCParse(PX_MFCC *mfcc,px_double *data,PX_MFCC_FEATURE *out) +{ + px_int i,j; + px_complex cal[PX_MFCC_FRAME_MAX_SIZE]; + px_double window[PX_MFCC_FRAME_MAX_SIZE]; + px_double dct_data[PX_MFCC_DCT_FACTOR_SIZE]; + px_double dct_rdata[PX_MFCC_DCT_FACTOR_SIZE]; + + PX_WindowFunction_hamming(window,mfcc->N); + + for(i = mfcc->N - 1; i >= 1; i--) + { + cal[i].re = data[i] - 0.9375 * data[i-1]; + cal[i].im=0; + } + cal[0].re = data[0]; + cal[0].im=0; + + for (i=0;iN;i++) + { + cal[i].re*=window[i]; + } + + PX_FFT(cal,cal,mfcc->N); + + //re,im->power,phase + for (i=0;iN;i++) + { + px_double pw,phase; + pw=(cal[i].re*cal[i].re+cal[i].im*cal[i].im)/mfcc->N; + phase=PX_atan2(cal[i].re,cal[i].im); + cal[i].re=pw; + cal[i].im=phase; + } + + PX_memset(dct_data,0,sizeof(dct_data)); + + //filter bank + for (i=0;iN;j++) + { + dct_data[i]+=cal[i].re*mfcc->filter[i].w[j]; + } + if (dct_data[i]>1) + { + dct_data[i]=PX_ln(dct_data[i]); + } + else + { + dct_data[i]=0; + } + } + + + //dct + PX_DCT(dct_data,dct_rdata,PX_MFCC_DCT_FACTOR_SIZE); + + for (i=0;ifactor[i]=dct_rdata[i]; + } + + return PX_TRUE; +} diff --git a/UI/PainterEngine/core/PX_MFCC.h b/UI/PainterEngine/core/PX_MFCC.h new file mode 100644 index 0000000..8980dba --- /dev/null +++ b/UI/PainterEngine/core/PX_MFCC.h @@ -0,0 +1,28 @@ +#ifndef PX_MFCC_H +#define PX_MFCC_H +#include "PX_MemoryPool.h" + +#define PX_MFCC_FRAME_MAX_SIZE 2048 +#define PX_MFCC_DCT_FACTOR_SIZE 32 +typedef struct +{ + px_double w[PX_MFCC_FRAME_MAX_SIZE]; +}PX_MFCC_Filter; + + +typedef struct +{ + PX_MFCC_Filter filter[PX_MFCC_DCT_FACTOR_SIZE]; + px_int N; +}PX_MFCC; + +typedef struct +{ + px_double factor[PX_MFCC_DCT_FACTOR_SIZE]; +}PX_MFCC_FEATURE; + +px_void PX_MFCCInitialize(PX_MFCC *mfcc,px_int framesize,px_int sampleRate,px_int low,px_int high); +px_bool PX_MFCCParse(PX_MFCC *mfcc,px_double *data,PX_MFCC_FEATURE *out); +#endif + + diff --git a/UI/PainterEngine/core/PX_MathTable.h b/UI/PainterEngine/core/PX_MathTable.h new file mode 100644 index 0000000..e93b457 --- /dev/null +++ b/UI/PainterEngine/core/PX_MathTable.h @@ -0,0 +1,15 @@ +#ifndef __PX_MATH_TABLE_H +#define __PX_MATH_TABLE_H +static int const px_hex_to_dex_table[]={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,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,2,3,4,5,6, + 7,8,9,0,0,0,0,0,0, + 0,10,11,12,13,14,15,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,10, + 11,12,13,14,15}; +#endif diff --git a/UI/PainterEngine/core/PX_Memory.c b/UI/PainterEngine/core/PX_Memory.c new file mode 100644 index 0000000..f27b222 --- /dev/null +++ b/UI/PainterEngine/core/PX_Memory.c @@ -0,0 +1,158 @@ +#include "PX_Memory.h" +px_void PX_MemoryInitialize(px_memorypool *mp,px_memory *memory) +{ + memory->buffer=PX_NULL; + memory->allocsize=0; + memory->usedsize=0; + memory->mp=mp; +} + +px_bool PX_MemoryCat(px_memory *memory,const px_void *buffer,px_int size) +{ + px_byte *old; + px_int length,shl; + + if (size==0) + { + return PX_TRUE; + } + + if (memory->usedsize+size>memory->allocsize) + { + shl=0; + old=memory->buffer; + length=memory->usedsize+size; + while ((px_int)(1<<++shl)<=length); + memory->allocsize=(1<buffer=(px_byte*)MP_Malloc(memory->mp,memory->allocsize); + if(!memory->buffer) return PX_FALSE; + if(old) + PX_memcpy(memory->buffer,old,memory->usedsize); + + PX_memcpy(memory->buffer+memory->usedsize,buffer,size); + + if(old) + MP_Free(memory->mp,old); + } + else + { + PX_memcpy(memory->buffer+memory->usedsize,buffer,size); + } + memory->usedsize+=size; + return PX_TRUE; +} + +px_void PX_MemoryFree(px_memory *memory) +{ + if (memory->allocsize==0||memory->buffer==PX_NULL) + { + return; + } + MP_Free(memory->mp,memory->buffer); + memory->buffer=PX_NULL; + memory->usedsize=0; + memory->allocsize=0; +} + +px_byte * PX_MemoryData(px_memory *memory) +{ + return memory->buffer; +} + +px_bool PX_MemoryAlloc(px_memory *memory,px_int size) +{ + PX_MemoryFree(memory); + memory->allocsize=size; + memory->usedsize=0; + if (size==0) + { + memory->buffer=PX_NULL; + return PX_TRUE; + } + else + { + return (memory->buffer=(px_byte *)MP_Malloc(memory->mp,size))!=0; + } + +} + +px_bool PX_MemoryResize(px_memory *memory,px_int size) +{ + return PX_MemoryAlloc(memory,size); +} + + +px_byte *PX_MemoryFind(px_memory *memory,const px_void *buffer,px_int size) +{ + px_int offest; + if (memory->usedsizeusedsize-size+1;offest++) + { + if (PX_memequ(memory->buffer+offest,buffer,size)) + { + return (memory->buffer+offest); + } + } + return PX_NULL; +} + + +px_void PX_MemoryRemove(px_memory *memory,px_int start,px_int end) +{ + if (start<0||start=memory->usedsize) + { + return; + } + PX_memcpy(memory->buffer+start,memory->buffer+end+1,start-end+1); +} + + +px_void PX_MemoryClear(px_memory *memory) +{ + memory->usedsize=0; +} + +px_bool PX_MemoryCopy(px_memory *memory,const px_void *buffer,px_int startoffset,px_int size) +{ + px_byte *old; + px_int length,shl; + + if (startoffset+size>memory->allocsize) + { + shl=0; + old=memory->buffer; + length=startoffset+size; + while ((px_int)(1<<++shl)<=length); + memory->allocsize=(1<buffer=(px_byte*)MP_Malloc(memory->mp,memory->allocsize); + if (!memory->buffer) + { + MP_Free(memory->mp,old); + return PX_FALSE; + } + if(old) + PX_memcpy(memory->buffer,old,memory->usedsize); + + PX_memcpy(memory->buffer+startoffset,buffer,size); + + if(old) + MP_Free(memory->mp,old); + + memory->usedsize=startoffset+size; + } + else + { + if (startoffset+size>memory->usedsize) + { + memory->usedsize=startoffset+size; + } + + PX_memcpy(memory->buffer+startoffset,buffer,size); + + } + return PX_TRUE; +} + diff --git a/UI/PainterEngine/core/PX_Memory.h b/UI/PainterEngine/core/PX_Memory.h new file mode 100644 index 0000000..8b620e7 --- /dev/null +++ b/UI/PainterEngine/core/PX_Memory.h @@ -0,0 +1,25 @@ +#ifndef __PX_MEMORY_H +#define __PX_MEMORY_H + +#include "PX_MemoryPool.h" + +typedef struct __PX_memroy +{ + px_byte *buffer; + px_memorypool *mp; + px_int usedsize; + px_int allocsize; +}px_memory; + +px_void PX_MemoryInitialize(px_memorypool *mp,px_memory *memory); +px_void PX_MemoryClear(px_memory *memory); +px_bool PX_MemoryAlloc(px_memory *memory,px_int size); +px_bool PX_MemoryResize(px_memory *memory,px_int size); +px_bool PX_MemoryCat(px_memory *memory,const px_void *buffer,px_int size); +px_bool PX_MemoryCopy(px_memory *memory,const px_void *buffer,px_int startoffset,px_int size); +px_byte *PX_MemoryFind(px_memory *memory,const px_void *buffer,px_int size); +px_void PX_MemoryRemove(px_memory *memory,px_int start,px_int end); +px_void PX_MemoryFree(px_memory *memory); +px_byte *PX_MemoryData(px_memory *memory); + +#endif diff --git a/UI/PainterEngine/core/PX_MemoryPool.c b/UI/PainterEngine/core/PX_MemoryPool.c new file mode 100644 index 0000000..ebe1300 --- /dev/null +++ b/UI/PainterEngine/core/PX_MemoryPool.c @@ -0,0 +1,538 @@ +#include "PX_MemoryPool.h" + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + +#include "stdio.h" +static px_int DEBUG_i; +static px_int DEBUG_assert; +px_void MP_UnreleaseInfo(px_memorypool *mp) +{ + px_int i; + for (i=0;iDEBUG_allocdata)/sizeof(mp->DEBUG_allocdata[0]);i++) + { + if(mp->DEBUG_allocdata[i].addr) + printf("Warning:Unreleased memory in MID %p\n",mp->DEBUG_allocdata[i].addr); + + } +} + +#endif + + +typedef struct _MemoryNode +{ + px_void *StartAddr; + px_void *EndAddr; +}MemoryNode; + + + + + MemoryNode * PX_MemoryPool_GetFreeTableAddr(px_memorypool *MP) +{ + return (MemoryNode *)((px_uchar *)MP->EndAddr-(sizeof(MemoryNode)*MP->FreeTableCount)+1); +} + + MemoryNode *PX_MemoryPool_GetFreeTable(px_memorypool *MP,px_uint Index) +{ + Index++; + return (MemoryNode *)((px_uchar *)MP->EndAddr-(sizeof(MemoryNode)*Index)+1); +} + +MemoryNode *PX_AllocFromFree(px_memorypool *MP,px_uint Size) +{ + MemoryNode *Node; + if (Size+2*sizeof(MemoryNode)>MP->FreeSize) + { + return 0; + } + Node=(MemoryNode *)MP->AllocAddr; + (*Node).StartAddr=(px_uchar *)MP->AllocAddr+sizeof(MemoryNode); + (*Node).EndAddr=(px_uchar *)Node->StartAddr+Size-1; + + + MP->FreeSize-=(Size+2*sizeof(MemoryNode)); + MP->AllocAddr=(px_char *)MP->AllocAddr+Size+sizeof(MemoryNode); + + return Node; +} + + + + +px_void PX_MemoryPoolRemoveFreeNode(px_memorypool *MP,px_uint Index) +{ + px_uint i; + MemoryNode *pFreeNode=PX_MemoryPool_GetFreeTable(MP,Index); + + + for (i=Index;iFreeTableCount;i++) + { + (*pFreeNode)=*(pFreeNode-1); + pFreeNode--; + } + + MP->FreeTableCount--; + if (MP->FreeTableCount==0) + { + MP->MaxMemoryfragSize=0; + } + +} + +MemoryNode *PX_AllocFreeMemoryNode(px_memorypool *MP) +{ + MP->FreeTableCount++; + return PX_MemoryPool_GetFreeTable(MP,MP->FreeTableCount-1); +} + +px_void PX_UpdateMaxFreqSize(px_memorypool *MP) +{ + MemoryNode *itNode; + px_uint i,Size; + + MP->MaxMemoryfragSize=0; + + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + if ((Size=(px_uint)(((px_char *)itNode->EndAddr-(px_char *)itNode->StartAddr)+1))>MP->MaxMemoryfragSize) + { + MP->MaxMemoryfragSize=Size; + } + } +} + +MemoryNode *PX_AllocFromFreq(px_memorypool *MP,px_uint Size) +{ + px_uint i,fSize; + MemoryNode *itNode,*allocNode; + + Size+=sizeof(MemoryNode); + + if (MP->MaxMemoryfragSize>=Size) + { + + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + fSize=(px_uint)((px_char *)itNode->EndAddr-(px_char *)itNode->StartAddr+1); + + if (Size<=fSize&&(Size+sizeof(MemoryNode)>=fSize)) + { + allocNode=(MemoryNode *)itNode->StartAddr; + + + allocNode->StartAddr=(px_char *)itNode->StartAddr+sizeof(MemoryNode); + allocNode->EndAddr=itNode->EndAddr; + + + PX_MemoryPoolRemoveFreeNode(MP,i); + PX_UpdateMaxFreqSize(MP); + return allocNode; + } + else + { + if(SizeFreeSizeStartAddr; + allocNode->StartAddr=(px_char *)itNode->StartAddr+sizeof(MemoryNode); + allocNode->EndAddr=(px_char *)itNode->StartAddr+Size-1; + + itNode->StartAddr=(px_char *)allocNode->EndAddr+1; + MP->FreeSize-=sizeof(MemoryNode); + PX_UpdateMaxFreqSize(MP); + return allocNode; + } + } + + } + return 0; + } + else + { + return 0; + } +} + + + + + +px_memorypool MP_Create( px_void *MemoryAddr,px_uint MemorySize ) +{ + px_uint Index=0; + px_memorypool MP; + MP.StartAddr=MemoryAddr; + MP.AllocAddr=MemoryAddr; + if(MemorySize) + MP.EndAddr=((px_uchar*)MemoryAddr)+MemorySize-1; + else + MP.EndAddr=MP.StartAddr; + + MP.Size=MemorySize; + MP.FreeSize=MemorySize; + MP.FreeTableCount=0; + MP.MaxMemoryfragSize=0; + MP.nodeCount=0; + MP.ErrorCall_Ptr=PX_NULL; + PX_memset(MemoryAddr,0,MemorySize); + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if (MP->DEBUG_allocdata[DEBUG_i].addr!=PX_NULL) + { + MP_Append_data *pAppend; + pAppend=(MP_Append_data *)((px_uchar *)MP->DEBUG_allocdata[DEBUG_i].endAddr-sizeof(MP_Append_data)+1); + itNode=(MemoryNode *)((px_uchar *)MP->DEBUG_allocdata[DEBUG_i].addr-sizeof(MemoryNode)); + if(MP->DEBUG_allocdata[DEBUG_i].startAddr!=itNode->StartAddr) + { + PX_ASSERT(); + return PX_NULL; + } + if(MP->DEBUG_allocdata[DEBUG_i].endAddr!=itNode->EndAddr) + { + PX_ASSERT(); + return PX_NULL; + } + if(pAppend->append!=MP_APPENDDATA_MAGIC) + { + PX_ASSERT(); + return PX_NULL; + } + } + } + +#endif + if (Size==0) + { + return PX_NULL; + } +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + Size+=sizeof(MP_Append_data); +#endif + if (Size%__PX_MEMORYPOOL_ALIGN_BYTES) + { + Size=(Size/__PX_MEMORYPOOL_ALIGN_BYTES+1)*__PX_MEMORYPOOL_ALIGN_BYTES; + } + //Allocate from freq + + MemNode=PX_AllocFromFreq(MP,Size); + if (MemNode!=0) + { +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if(MP->DEBUG_allocdata[DEBUG_i].addr==0) + { + MP->DEBUG_allocdata[DEBUG_i].addr=MemNode->StartAddr; + MP->DEBUG_allocdata[DEBUG_i].startAddr=MemNode->StartAddr; + MP->DEBUG_allocdata[DEBUG_i].endAddr=MemNode->EndAddr; + break; + } + } + pAppend=(MP_Append_data *)((px_uchar *)MemNode->EndAddr-sizeof(MP_Append_data)+1); + pAppend->append=MP_APPENDDATA_MAGIC; + #endif + MP->nodeCount++; + return MemNode->StartAddr; + } + + //Allocate from free + + MemNode=PX_AllocFromFree(MP,Size); + if (MemNode!=0) + { +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if(MP->DEBUG_allocdata[DEBUG_i].addr==0) + { + MP->DEBUG_allocdata[DEBUG_i].addr=MemNode->StartAddr; + MP->DEBUG_allocdata[DEBUG_i].startAddr=MemNode->StartAddr; + MP->DEBUG_allocdata[DEBUG_i].endAddr=MemNode->EndAddr; + break; + } + } + pAppend=(MP_Append_data *)((px_uchar *)MemNode->EndAddr-sizeof(MP_Append_data)+1); + pAppend->append=MP_APPENDDATA_MAGIC; + #endif + MP->nodeCount++; + return MemNode->StartAddr; + } + + if(MP->ErrorCall_Ptr==PX_NULL) + PX_ERROR("MemoryPool Out Of Memory!"); + else + MP->ErrorCall_Ptr(PX_MEMORYPOOL_ERROR_OUTOFMEMORY); + + return PX_NULL; + +} + + + +px_void MP_Free(px_memorypool *MP, px_void *pAddress ) +{ + px_uint32 i,sIndex; + MemoryNode *itNode; + MemoryNode FreeNode; + px_uchar *pcTempStart,*pcTempEnd; + px_uchar bExist; + px_void *TempPointer; + MemoryNode *TempNode; + MP->nodeCount--; + bExist=0; + #if defined(PX_DEBUG_MODE) + if (!pAddress) + { + PX_ASSERT(); + return; + } + #endif + //Get Memory node information + TempPointer=(px_uchar *)pAddress-sizeof(MemoryNode); + TempNode=(MemoryNode *)TempPointer; + FreeNode.StartAddr=TempNode->StartAddr; + FreeNode.EndAddr=TempNode->EndAddr; + + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + if(FreeNode.StartAddr!=pAddress) PX_ASSERT(); + + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if(MP->DEBUG_allocdata[DEBUG_i].addr==pAddress) + { + MP_Append_data *pAppend; + pAppend=(MP_Append_data *)((px_uchar *)MP->DEBUG_allocdata[DEBUG_i].endAddr-sizeof(MP_Append_data)+1); + if(MP->DEBUG_allocdata[DEBUG_i].startAddr!=FreeNode.StartAddr) PX_ASSERT(); + if(MP->DEBUG_allocdata[DEBUG_i].endAddr!=FreeNode.EndAddr) PX_ASSERT(); + if(pAppend->append!=MP_APPENDDATA_MAGIC)PX_ASSERT(); + MP->DEBUG_allocdata[DEBUG_i].addr=PX_NULL; + MP->DEBUG_allocdata[DEBUG_i].startAddr=PX_NULL; + MP->DEBUG_allocdata[DEBUG_i].endAddr=PX_NULL; + break; + } + } + + if (MP->DEBUG_allocdata[PX_COUNTOF(MP->DEBUG_allocdata)-1].addr==PX_NULL) + { + if(DEBUG_i==sizeof(MP->DEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0])) + { + if(MP->ErrorCall_Ptr==PX_NULL) + PX_LOG("Invalid address free"); + else + MP->ErrorCall_Ptr(PX_MEMORYPOOL_ERROR_INVALID_ADDRESS); + + PX_ASSERT(); + goto _END; + } + } + + + + +#endif + + //px_memset(FreeNode.StartAddr,0xff,(px_int)FreeNode.EndAddr-(px_int)FreeNode.StartAddr+1); + //Reset address + FreeNode.StartAddr=(px_uchar *)FreeNode.StartAddr-sizeof(MemoryNode); + + //If this memory node is last + if ((px_char *)FreeNode.EndAddr+1==(px_char *)MP->AllocAddr) + { + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + if ((px_char *)itNode->EndAddr+1==(px_char *)FreeNode.StartAddr) + { + MP->AllocAddr=itNode->StartAddr; + MP->FreeSize+=(px_uint32)((px_char *)FreeNode.EndAddr-(px_char *)FreeNode.StartAddr+sizeof(MemoryNode)+1); + MP->FreeSize+=(px_uint32)((px_char *)itNode->EndAddr-(px_char *)itNode->StartAddr+1+sizeof(MemoryNode)); + PX_MemoryPoolRemoveFreeNode(MP,i); + goto _END; + + } + } + + //just reset allocAddr to release this memory node + MP->AllocAddr=(px_char *)FreeNode.StartAddr; + MP->FreeSize+=(px_uint32)((px_char *)FreeNode.EndAddr-(px_char *)FreeNode.StartAddr+sizeof(MemoryNode)+1); + + goto _END; + } + + + + //Search memory node which can be combine + sIndex=0xffffffff; + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + pcTempStart=(px_uchar *)itNode->StartAddr; + pcTempEnd=(px_uchar *)itNode->EndAddr; + + + if (pcTempStart==(px_uchar *)FreeNode.EndAddr+1) + { + if(sIndex==0xffffffff) + { + sIndex=i; + //Refresh this node + itNode->StartAddr=FreeNode.StartAddr; + FreeNode=*itNode; + MP->FreeSize+=sizeof(MemoryNode); + } + else + { + MP->FreeSize+=sizeof(MemoryNode); + itNode->StartAddr=FreeNode.StartAddr; + PX_MemoryPoolRemoveFreeNode(MP,sIndex); + } + bExist=1; + } + + + if (pcTempEnd+1==(px_uchar *)FreeNode.StartAddr) + { + if(sIndex==0xffffffff) + { + sIndex=i; + //Refresh this node + itNode->EndAddr=FreeNode.EndAddr; + FreeNode=*itNode; + MP->FreeSize+=sizeof(MemoryNode); + } + else + { + itNode->EndAddr=FreeNode.EndAddr; + MP->FreeSize+=sizeof(MemoryNode); + PX_MemoryPoolRemoveFreeNode(MP,sIndex); + + } + bExist=1; + } + } + if(bExist==0) + { +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + if (FreeNode.StartAddr>=itNode->StartAddr&&FreeNode.StartAddr<=itNode->EndAddr) + { + //alloc error + PX_ASSERT(); + goto _END; + } + if (FreeNode.EndAddr>=itNode->StartAddr&&FreeNode.EndAddr<=itNode->EndAddr) + { + PX_ASSERT(); + goto _END; + } + } +#endif + *PX_AllocFreeMemoryNode(MP)=FreeNode; + } + +_END: + PX_UpdateMaxFreqSize(MP); + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if(MP->DEBUG_allocdata[DEBUG_i].addr!=PX_NULL) + { + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + if (MP->DEBUG_allocdata[DEBUG_i].startAddr>=itNode->StartAddr&&MP->DEBUG_allocdata[DEBUG_i].startAddr<=itNode->EndAddr) + { + //error free + PX_ASSERT(); + } + if (MP->DEBUG_allocdata[DEBUG_i].endAddr>=itNode->StartAddr&&MP->DEBUG_allocdata[DEBUG_i].endAddr<=itNode->EndAddr) + { + PX_ASSERT(); + } + } + } + } +#endif + return; +} + +px_void MP_Release(px_memorypool *Node) +{ + //free(G_MemoryPool.StartAddr); +} + +px_void MP_ErrorCatch(px_memorypool *Pool,PX_MP_ErrorCall ErrorCall) +{ + Pool->ErrorCall_Ptr=ErrorCall; +} + +px_uint MP_Size(px_memorypool *Pool,px_void *pAddress) +{ + px_void *TempPointer; + MemoryNode *TempNode; + //Get Memory node information + if (pAddress==PX_NULL) + { + PX_ASSERT(); + return 0; + } + TempPointer=(px_uchar *)pAddress-sizeof(MemoryNode); + TempNode=(MemoryNode *)TempPointer; +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) +return (px_uint)(((px_char *)(TempNode->EndAddr)-(px_char *)(TempNode->StartAddr))+1-sizeof(MP_Append_data)); +#else + return (px_uint32)((px_char *)(TempNode->EndAddr)-(px_char *)(TempNode->StartAddr))+1; +#endif + +} + +px_void MP_Reset(px_memorypool *Pool) +{ + Pool->AllocAddr=Pool->StartAddr; + Pool->EndAddr=((px_uchar*)Pool->StartAddr)+Pool->Size-1; + Pool->FreeSize=Pool->Size; + Pool->FreeTableCount=0; + Pool->MaxMemoryfragSize=0; + Pool->nodeCount=0; +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + PX_memset(Pool->DEBUG_allocdata,0,sizeof(Pool->DEBUG_allocdata)); +#endif +} + diff --git a/UI/PainterEngine/core/PX_MemoryPool.h b/UI/PainterEngine/core/PX_MemoryPool.h new file mode 100644 index 0000000..7a1c37f --- /dev/null +++ b/UI/PainterEngine/core/PX_MemoryPool.h @@ -0,0 +1,89 @@ +#ifndef PIXELSES_MEMORYPOOL +#define PIXELSES_MEMORYPOOL +#include "PX_Typedef.h" + +#define __PX_MEMORYPOOL_ALIGN_BYTES (sizeof(void *)) +#define PX_MEMORYPOOL_DEBUG_CHECK + + +typedef enum +{ + PX_MEMORYPOOL_ERROR_OUTOFMEMORY, + PX_MEMORYPOOL_ERROR_INVALID_ACCESS, + PX_MEMORYPOOL_ERROR_INVALID_ADDRESS +}PX_MEMORYPOOL_ERROR; + +typedef px_void (*PX_MP_ErrorCall)(PX_MEMORYPOOL_ERROR); + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) +typedef struct +{ + px_void *addr; + px_void *startAddr; + px_void *endAddr; +}MP_alloc_debug; + + +typedef struct +{ + px_dword append; +}MP_Append_data; +#define MP_APPENDDATA_MAGIC 0x31415926 +#endif + +typedef struct _memoryPool +{ + px_void *AllocAddr; + px_void *StartAddr; + px_void *EndAddr; + px_uint32 Size; + px_uint32 FreeSize; + px_uint32 nodeCount; + px_uint32 FreeTableCount; + px_uint32 MaxMemoryfragSize; + PX_MP_ErrorCall ErrorCall_Ptr; +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + MP_alloc_debug DEBUG_allocdata[1024]; +#endif +}px_memorypool; + + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) +px_void MP_UnreleaseInfo(px_memorypool *mp); +#define MP_DEBUG_AID(x) MP_UnreleaseInfo(x) +#else +#define MP_DEBUG_AID(x) +#endif + + +//Create a memory pool & return a MemoryPool structure +//MemoryAddr :Start address of memory +//MemorySize :Size of memory pool +px_memorypool MP_Create (px_void *MemoryAddr,px_uint MemorySize); + +//Get memory size of Ptr +//Pool: Pool MemoryPool structure pointer +//Ptr: memory pointer +//Return - if succeeded return the size of Ptr,else return zero +px_uint MP_Size(px_memorypool *Pool,px_void *Ptr); + +//Alloc a memory from memory pool +//Pool: Pool MemoryPool structure pointer +//Size: Size of alloc +//Return - if succeeded return the begin address of memories +// if faith return null +px_void *MP_Malloc (px_memorypool *Pool,px_uint Size); + +//Free the memory from memory pool +//Pool: Pool MemoryPool structure pointer +//pAddress: Pointer memory need to be free +px_void MP_Free (px_memorypool *Pool,px_void *pAddress); +px_void MP_Release (px_memorypool *Pool); +px_void MP_Reset (px_memorypool *Pool); + + +//Register memoryPool error +px_void MP_ErrorCatch(px_memorypool *Pool,PX_MP_ErrorCall ErrorCall); + +#endif + diff --git a/UI/PainterEngine/core/PX_Packet.c b/UI/PainterEngine/core/PX_Packet.c new file mode 100644 index 0000000..0577f3e --- /dev/null +++ b/UI/PainterEngine/core/PX_Packet.c @@ -0,0 +1,100 @@ +#include "PX_Packet.h" + + +px_bool PX_PacketCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size,px_dword algorithm) +{ + PX_Packet_Header *pHeader=(PX_Packet_Header *)_out; + px_byte *pw=PX_NULL; + + if (!_out) + { + switch (algorithm) + { + case PX_PACKET_ALOGRITHM_HUFFMAN: + { + PX_huffmanCompress(_in,input_size,_out,out_size); + *out_size+=sizeof(PX_Packet_Header); + } + break; + case PX_PACKET_ALOGRITHM_ARLE: + { + PX_ArleCompress(_in,input_size,_out,out_size); + *out_size+=sizeof(PX_Packet_Header); + } + break; + } + return PX_TRUE; + } + + pHeader->algorithm=algorithm; + PX_memcpy(pHeader->magic,"PACK",4); + pHeader->CRC=PX_crc32(_in,input_size); + + switch (algorithm) + { + case PX_PACKET_ALOGRITHM_HUFFMAN: + { + PX_huffmanCompress(_in,input_size,_out+sizeof(PX_Packet_Header),out_size); + *out_size+=sizeof(PX_Packet_Header); + } + break; + case PX_PACKET_ALOGRITHM_ARLE: + { + PX_ArleCompress(_in,input_size,_out+sizeof(PX_Packet_Header),out_size); + *out_size+=sizeof(PX_Packet_Header); + } + break; + } + return PX_TRUE; +} + +px_bool PX_PacketDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size) +{ + PX_Packet_Header *pHeader=(PX_Packet_Header *)_in; + px_byte *pw=PX_NULL; + + if (!_out) + { + switch (pHeader->algorithm) + { + case PX_PACKET_ALOGRITHM_HUFFMAN: + { + PX_huffmanDecompress(_in+sizeof(PX_Packet_Header),input_size-sizeof(PX_Packet_Header),_out,out_size); + } + break; + case PX_PACKET_ALOGRITHM_ARLE: + { + PX_ArleDecompress(_in+sizeof(PX_Packet_Header),input_size-sizeof(PX_Packet_Header),_out,out_size); + } + break; + } + return PX_TRUE; + } + + + switch (pHeader->algorithm) + { + case PX_PACKET_ALOGRITHM_HUFFMAN: + { + PX_huffmanDecompress(_in+sizeof(PX_Packet_Header),input_size-sizeof(PX_Packet_Header),_out,out_size); + if (PX_crc32(_out,*out_size)!=pHeader->CRC) + { + return PX_FALSE; + } + return PX_TRUE; + } + break; + case PX_PACKET_ALOGRITHM_ARLE: + { + PX_ArleDecompress(_in+sizeof(PX_Packet_Header),input_size-sizeof(PX_Packet_Header),_out,out_size); + if (PX_crc32(_out,*out_size)!=pHeader->CRC) + { + return PX_FALSE; + } + return PX_TRUE; + } + break; + } + return PX_FALSE; +} + diff --git a/UI/PainterEngine/core/PX_Packet.h b/UI/PainterEngine/core/PX_Packet.h new file mode 100644 index 0000000..30ca642 --- /dev/null +++ b/UI/PainterEngine/core/PX_Packet.h @@ -0,0 +1,20 @@ +#ifndef PX_PACKET_H +#define PX_PACKET_H + +#include "PX_Arle.h" +#include "PX_Huffman.h" + +#define PX_PACKET_ALOGRITHM_HUFFMAN 0 +#define PX_PACKET_ALOGRITHM_ARLE 1 + + +typedef struct +{ + px_char magic[4];//PACK + px_dword algorithm; + px_dword CRC; +}PX_Packet_Header; + +px_bool PX_PacketCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size,px_dword algotithm); +px_bool PX_PacketDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size); +#endif diff --git a/UI/PainterEngine/core/PX_PointsMesh.c b/UI/PainterEngine/core/PX_PointsMesh.c new file mode 100644 index 0000000..9caf84a --- /dev/null +++ b/UI/PainterEngine/core/PX_PointsMesh.c @@ -0,0 +1,103 @@ +#include "PX_PointsMesh.h" + + +px_bool PX_PointsMeshBuild(px_memorypool *mp,px_point2D limit_line_pt[],px_int line_pt_count,px_point2D pt[],px_int pt_count,px_vector *out_triangles,PX_DELAUNAY_RETURN_TYPE type) +{ + px_int i; + px_float left=0,top=0,right=0,bottom=0; + px_float offsetx,offsety,width,height; + px_texture testTexture; + if (pt_count<2) + { + return PX_FALSE; + } + + left=pt[0].x; + right=pt[0].x; + bottom=pt[0].y; + top=pt[0].y; + + + for (i=0;iright) + { + right=pt[i].x; + } + + if (pt[i].ybottom) + { + bottom=pt[i].y; + } + } + + left-=2; + top-=2; + right+=2; + bottom+=2; + + offsetx=-left; + offsety=-top; + + width=right-left; + height=bottom-top; + + + PX_TextureCreate(mp,&testTexture,(px_int)(width+1),(px_int)(height+1)); + for (i=1;isize;i++) + { + px_int testx=0,testy=0; + + switch(type) + { + case PX_DELAUNAY_RETURN_TYPE_TRIANGLE: + { + px_triangle *ptriangle=PX_VECTORAT(px_triangle,out_triangles,i); + testx=(px_int)((ptriangle->Vertex_1.x+ptriangle->Vertex_2.x+ptriangle->Vertex_3.x)/3+offsetx); + testy=(px_int)((ptriangle->Vertex_1.y+ptriangle->Vertex_2.y+ptriangle->Vertex_3.y)/3+offsety); + } + break; + case PX_DELAUNAY_RETURN_TYPE_TRIANGLE_INDEX: + { + PX_Delaunay_Triangle *ptriangle=PX_VECTORAT(PX_Delaunay_Triangle,out_triangles,i); + px_point2D v1,v2,v3; + v1=pt[ptriangle->index1]; + v2=pt[ptriangle->index2]; + v3=pt[ptriangle->index3]; + testx=(px_int)((v1.x+v2.x+v3.x)/3+offsetx); + testy=(px_int)((v1.y+v2.y+v3.y)/3+offsety); + } + break; + } + + if (PX_SurfaceGetPixel(&testTexture,testx,testy)._argb.ucolor==0x00ffffff) + { + //remove + PX_VectorErase(out_triangles,i); + i--; + } + } + PX_TextureFree(&testTexture); + return PX_TRUE; +} + diff --git a/UI/PainterEngine/core/PX_PointsMesh.h b/UI/PainterEngine/core/PX_PointsMesh.h new file mode 100644 index 0000000..e06fee5 --- /dev/null +++ b/UI/PainterEngine/core/PX_PointsMesh.h @@ -0,0 +1,10 @@ +#ifndef PX_POINTSMESH_H +#define PX_POINTSMESH_H + +#include "PX_Delaunay.h" +#include "PX_Texture.h" + +px_bool PX_PointsMeshBuild(px_memorypool *mp,px_point2D limit_line_pt[],px_int line_pt_count,px_point2D pt[],px_int pt_count,px_vector *out_triangles,PX_DELAUNAY_RETURN_TYPE type); + + +#endif diff --git a/UI/PainterEngine/core/PX_Quadtree.c b/UI/PainterEngine/core/PX_Quadtree.c new file mode 100644 index 0000000..4b4e004 --- /dev/null +++ b/UI/PainterEngine/core/PX_Quadtree.c @@ -0,0 +1,257 @@ +#include "PX_Quadtree.h" + +//#include "stdio.h" + +static px_bool PX_Quadtree_InitAABB(px_memorypool *mp,px_int PX_AABB_MAX_DEEP,PX_Quadtree_AABB *aabb) +{ + if (aabb) + { + if (aabb->deep>=PX_AABB_MAX_DEEP) + { + PX_ListInitialize(mp,&aabb->dataList); + return PX_TRUE; + } + else + { + aabb->Area1=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + aabb->Area1->deep=aabb->deep+1; + aabb->Area1->Left=aabb->Left; + aabb->Area1->Right=(aabb->Left+aabb->Right)/2; + aabb->Area1->Top=aabb->Top; + aabb->Area1->Bottom=(aabb->Top+aabb->Bottom)/2; + aabb->Area1->objectCount=0; + aabb->Area1->Area1=PX_NULL; + aabb->Area1->Area2=PX_NULL; + aabb->Area1->Area3=PX_NULL; + aabb->Area1->Area4=PX_NULL; + aabb->Area1->dataList.size=0; + aabb->Area1->dataList.head=PX_NULL; + aabb->Area1->dataList.end=PX_NULL; + aabb->Area1->dataList.mp=PX_NULL; + if(!PX_Quadtree_InitAABB(mp,PX_AABB_MAX_DEEP,aabb->Area1)) return PX_FALSE; + + aabb->Area2=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + aabb->Area2->deep=aabb->deep+1; + aabb->Area2->Left=aabb->Area1->Left+(aabb->Right-aabb->Left)/2; + aabb->Area2->Right=aabb->Area1->Right+(aabb->Right-aabb->Left)/2; + aabb->Area2->Top=aabb->Area1->Top; + aabb->Area2->Bottom=aabb->Area1->Bottom; + aabb->Area2->objectCount=0; + aabb->Area2->Area1=PX_NULL; + aabb->Area2->Area2=PX_NULL; + aabb->Area2->Area3=PX_NULL; + aabb->Area2->Area4=PX_NULL; + aabb->Area2->dataList.size=0; + aabb->Area2->dataList.head=PX_NULL; + aabb->Area2->dataList.end=PX_NULL; + aabb->Area2->dataList.mp=PX_NULL; + if(!PX_Quadtree_InitAABB(mp,PX_AABB_MAX_DEEP,aabb->Area2)) return PX_FALSE; + + aabb->Area3=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + aabb->Area3->deep=aabb->deep+1; + aabb->Area3->Left=aabb->Area1->Left; + aabb->Area3->Right=aabb->Area1->Right; + aabb->Area3->Top=aabb->Area1->Top+(aabb->Bottom-aabb->Top)/2; + aabb->Area3->Bottom=aabb->Area1->Bottom+(aabb->Bottom-aabb->Top)/2;; + aabb->Area3->objectCount=0; + aabb->Area3->Area1=PX_NULL; + aabb->Area3->Area2=PX_NULL; + aabb->Area3->Area3=PX_NULL; + aabb->Area3->Area4=PX_NULL; + aabb->Area3->dataList.size=0; + aabb->Area3->dataList.head=PX_NULL; + aabb->Area3->dataList.end=PX_NULL; + aabb->Area3->dataList.mp=PX_NULL; + if(!PX_Quadtree_InitAABB(mp,PX_AABB_MAX_DEEP,aabb->Area3)) return PX_FALSE; + + aabb->Area4=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + aabb->Area4->deep=aabb->deep+1; + aabb->Area4->Left=aabb->Area1->Left+(aabb->Right-aabb->Left)/2; + aabb->Area4->Right=aabb->Area1->Right+(aabb->Right-aabb->Left)/2; + aabb->Area4->Top=aabb->Area1->Top+(aabb->Bottom-aabb->Top)/2; + aabb->Area4->Bottom=aabb->Area1->Bottom+(aabb->Bottom-aabb->Top)/2; + aabb->Area4->objectCount=0; + aabb->Area4->Area1=PX_NULL; + aabb->Area4->Area2=PX_NULL; + aabb->Area4->Area3=PX_NULL; + aabb->Area4->Area4=PX_NULL; + aabb->Area4->dataList.size=0; + aabb->Area4->dataList.head=PX_NULL; + aabb->Area4->dataList.end=PX_NULL; + aabb->Area4->dataList.mp=PX_NULL; + if(!PX_Quadtree_InitAABB(mp,PX_AABB_MAX_DEEP,aabb->Area4)) return PX_FALSE; + + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_bool PX_QuadtreeCreate(px_memorypool *mp,PX_Quadtree *pQuadtree,px_float mapStartX,px_float mapStartY,px_float mapWidth,px_float mapHeight,px_int ObjectsCount,px_int deep) +{ + + pQuadtree->mp=mp; + pQuadtree->PX_AABB_MAX_DEEP=deep; + if(!PX_VectorInitialize(mp,&pQuadtree->boxes,sizeof(PX_Quadtree_AABB_BOX),ObjectsCount)) + { + PX_ASSERT(); + return PX_FALSE; + } + if(!PX_VectorInitialize(mp,&pQuadtree->Impacts,sizeof(PX_Quadtree_UserData),ObjectsCount)) + { + PX_ASSERT(); + PX_VectorFree(&pQuadtree->boxes); + return PX_FALSE; + } + pQuadtree->AABB=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + pQuadtree->AABB->deep=0; + pQuadtree->AABB->Area1=PX_NULL; + pQuadtree->AABB->Area2=PX_NULL; + pQuadtree->AABB->Area3=PX_NULL; + pQuadtree->AABB->Area4=PX_NULL; + pQuadtree->AABB->Left=mapStartX; + pQuadtree->AABB->Right=mapStartX+mapWidth; + pQuadtree->AABB->Top=mapStartY; + pQuadtree->AABB->Bottom=mapStartY+mapHeight; + pQuadtree->AABB->objectCount=0; + pQuadtree->AABB->dataList.size=0; + pQuadtree->AABB->dataList.head=PX_NULL; + pQuadtree->AABB->dataList.end=PX_NULL; + pQuadtree->AABB->dataList.mp=PX_NULL; + return PX_Quadtree_InitAABB(mp,pQuadtree->PX_AABB_MAX_DEEP,pQuadtree->AABB); +} + +static px_void PX_QuadtreeTest(PX_Quadtree *pQuadtree,PX_Quadtree_AABB *aabb,PX_Quadtree_AABB_BOX testBox) +{ + px_list_node *pnode=aabb->dataList.head; + px_rect r1,r2; + PX_Quadtree_AABB_BOX *pBox; + + + while (pnode) + { + pBox=PX_VECTORAT(PX_Quadtree_AABB_BOX,&pQuadtree->boxes,*(px_int *)pnode->pdata); + if (pBox->userdata.ptr!=testBox.userdata.ptr) + { + r1.x=pBox->x-pBox->width/2; + r1.y=pBox->y-pBox->height/2; + r1.width=pBox->width; + r1.height=pBox->height; + + r2.x=testBox.x-testBox.width/2; + r2.y=testBox.y-testBox.height/2; + r2.width=testBox.width; + r2.height=testBox.height; + + if (PX_isRectCrossRect(r1,r2)) + { + px_int i; + for (i=0;iImpacts.size;i++) + { + if (PX_VECTORAT(PX_Quadtree_UserData,&pQuadtree->Impacts,i)->ptr==pBox->userdata.ptr) + { + break; + } + } + + if(i==pQuadtree->Impacts.size) + PX_VectorPushback(&pQuadtree->Impacts,&pBox->userdata); + + } + } + pnode=pnode->pnext; + } + +} + +static px_void PX_QuadtreeSortBox(PX_Quadtree *pQuadtree,PX_Quadtree_AABB *aabb,px_int index) +{ + px_rect r1,r2; + PX_Quadtree_AABB_BOX *pBox; + pBox=PX_VECTORAT(PX_Quadtree_AABB_BOX,&pQuadtree->boxes,index); + r1.x=pBox->x-pBox->width/2; + r1.y=pBox->y-pBox->height/2; + r1.width=pBox->width; + r1.height=pBox->height; + + r2.x=aabb->Left; + r2.y=aabb->Top; + r2.width=aabb->Right-aabb->Left+1; + r2.height=aabb->Bottom-aabb->Top+1; + if (PX_isRectCrossRect(r1,r2)) + { + if (aabb->deep>=pQuadtree->PX_AABB_MAX_DEEP) + { + PX_ListPush(&aabb->dataList,&index,sizeof(px_int)); + } + else + { + PX_QuadtreeSortBox(pQuadtree,aabb->Area1,index); + PX_QuadtreeSortBox(pQuadtree,aabb->Area2,index); + PX_QuadtreeSortBox(pQuadtree,aabb->Area3,index); + PX_QuadtreeSortBox(pQuadtree,aabb->Area4,index); + } + } +} + + +static px_void PX_QuadtreeTestBox(PX_Quadtree *pQuadtree,PX_Quadtree_AABB *aabb,PX_Quadtree_AABB_BOX Box) +{ + px_rect r1,r2; + r1.x=Box.x-Box.width/2; + r1.y=Box.y-Box.height/2; + r1.width=Box.width; + r1.height=Box.height; + + r2.x=aabb->Left; + r2.y=aabb->Top; + r2.width=aabb->Right-aabb->Left+1; + r2.height=aabb->Bottom-aabb->Top+1; + if (PX_isRectCrossRect(r1,r2)) + { + if (aabb->deep>=pQuadtree->PX_AABB_MAX_DEEP) + { + PX_QuadtreeTest(pQuadtree,aabb,Box); + } + else + { + PX_QuadtreeTestBox(pQuadtree,aabb->Area1,Box); + PX_QuadtreeTestBox(pQuadtree,aabb->Area2,Box); + PX_QuadtreeTestBox(pQuadtree,aabb->Area3,Box); + PX_QuadtreeTestBox(pQuadtree,aabb->Area4,Box); + } + } +} + + +px_void PX_QuadtreeAddNode(PX_Quadtree *pQuadtree,px_float x,px_float y,px_float width,px_float height,PX_Quadtree_UserData userData) +{ + PX_Quadtree_AABB_BOX box; + box.height=height; + box.width=width; + box.x=x; + box.y=y; + box.userdata=userData; + PX_VectorPushback(&pQuadtree->boxes,&box); + + PX_QuadtreeSortBox(pQuadtree,pQuadtree->AABB,pQuadtree->boxes.size-1); +} + +px_void PX_QuadtreeTestNode(PX_Quadtree *pQuadtree,px_float x,px_float y,px_float width,px_float height,PX_Quadtree_UserData userData) +{ + PX_Quadtree_AABB_BOX box; + box.height=height; + box.width=width; + box.x=x; + box.y=y; + box.userdata=userData; + if (pQuadtree->boxes.size) + { + PX_QuadtreeTestBox(pQuadtree,pQuadtree->AABB,box); + } +} + +px_void PX_QuadtreeResetTest(PX_Quadtree *pQuadtree) +{ + PX_VectorClear(&pQuadtree->Impacts); +} diff --git a/UI/PainterEngine/core/PX_Quadtree.h b/UI/PainterEngine/core/PX_Quadtree.h new file mode 100644 index 0000000..66fa202 --- /dev/null +++ b/UI/PainterEngine/core/PX_Quadtree.h @@ -0,0 +1,44 @@ +#ifndef PX_QUADTREE_H +#define PX_QUADTREE_H +#include "PX_List.h" +#include "PX_Vector.h" + +#define PX_AABB_TEST_COUNT 32 + +typedef struct _PX_AABB +{ + px_float Left,Right,Bottom,Top; + px_int objectCount; + px_int deep; + px_list dataList; + struct _PX_AABB *Area1; + struct _PX_AABB *Area2; + struct _PX_AABB *Area3; + struct _PX_AABB *Area4; +}PX_Quadtree_AABB; + +typedef struct +{ + px_void *ptr; +}PX_Quadtree_UserData; +typedef struct +{ + px_float x,y,height,width; + PX_Quadtree_UserData userdata; +}PX_Quadtree_AABB_BOX; + + +typedef struct +{ + px_memorypool *mp; + px_int PX_AABB_MAX_DEEP; + PX_Quadtree_AABB *AABB; + px_vector boxes; + px_vector Impacts; +}PX_Quadtree; + +px_bool PX_QuadtreeCreate(px_memorypool *mp,PX_Quadtree *pQuadtree,px_float mapStartX,px_float mapStartY,px_float mapWidth,px_float mapHeight,px_int ObjectsCount,px_int deep); +px_void PX_QuadtreeAddNode(PX_Quadtree *pQuadtree,px_float CenterX,px_float CenterY,px_float width,px_float height,PX_Quadtree_UserData userData); +px_void PX_QuadtreeTestNode(PX_Quadtree *pQuadtree,px_float CenterX,px_float CenterY,px_float width,px_float height,PX_Quadtree_UserData user); +px_void PX_QuadtreeResetTest(PX_Quadtree *pQuadtree); +#endif diff --git a/UI/PainterEngine/core/PX_Quicksort.c b/UI/PainterEngine/core/PX_Quicksort.c new file mode 100644 index 0000000..8d0925d --- /dev/null +++ b/UI/PainterEngine/core/PX_Quicksort.c @@ -0,0 +1,74 @@ +#include "PX_Quicksort.h" + +static void swap(PX_QuickSortAtom array[], px_int left, px_int right) +{ + PX_QuickSortAtom temp; + temp = array[left]; + array[left] = array[right]; + array[right] = temp; +} + + +static px_int partition_l(PX_QuickSortAtom array[], px_int left, px_int right, px_int pivot_index) +{ + px_float pivot_value = array[pivot_index].weight; + px_int store_index = left; + px_int i; + + swap(array, pivot_index, right); + for (i = left; i < right; i++) + if (array[i].weight < pivot_value) { + swap(array, i, store_index); + ++store_index; + } + swap(array, store_index, right); + return store_index; +} + +static px_int partition_m(PX_QuickSortAtom array[], px_int left, px_int right, px_int pivot_index) +{ + px_float pivot_value = array[pivot_index].weight; + px_int store_index = left; + px_int i; + + swap(array, pivot_index, right); + for (i = left; i < right; i++) + if (array[i].weight > pivot_value) { + swap(array, i, store_index); + ++store_index; + } + swap(array, store_index, right); + return store_index; +} + +void PX_Quicksort_MinToMax(PX_QuickSortAtom array[], px_int left, px_int right) +{ + px_int pivot_index = left; + px_int pivot_new_index; + + + while (right > left) + { + pivot_new_index = partition_l(array, left, right, pivot_index); + PX_Quicksort_MinToMax(array, left, pivot_new_index - 1); + pivot_index = left = pivot_new_index + 1; + + } +} + +void PX_Quicksort_MaxToMin(PX_QuickSortAtom array[], px_int left, px_int right) +{ + px_int pivot_index = left; + px_int pivot_new_index; + + + while (right > left) + { + pivot_new_index = partition_m(array, left, right, pivot_index); + PX_Quicksort_MaxToMin(array, left, pivot_new_index - 1); + pivot_index = left = pivot_new_index + 1; + + } +} + + diff --git a/UI/PainterEngine/core/PX_Quicksort.h b/UI/PainterEngine/core/PX_Quicksort.h new file mode 100644 index 0000000..efc2798 --- /dev/null +++ b/UI/PainterEngine/core/PX_Quicksort.h @@ -0,0 +1,13 @@ +#ifndef PX_QUICKSORT_H +#define PX_QUICKSORT_H + +#include "PX_Typedef.h" + +typedef struct +{ + px_float weight; + px_void *pData; +}PX_QuickSortAtom; +void PX_Quicksort_MinToMax(PX_QuickSortAtom array[], px_int left, px_int right); +void PX_Quicksort_MaxToMin(PX_QuickSortAtom array[], px_int left, px_int right); +#endif diff --git a/UI/PainterEngine/core/PX_Sha256.c b/UI/PainterEngine/core/PX_Sha256.c new file mode 100644 index 0000000..936ad25 --- /dev/null +++ b/UI/PainterEngine/core/PX_Sha256.c @@ -0,0 +1,311 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PX_Sha256 +// +// Implementation of SHA256 hash function. +// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org +// Modified by WaterJuice retaining Public Domain license. +// +// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org +// Modified by DBinary retaining Public Domain license. 2019-3-11 matrixcascade@gmail.com 0-0i.com +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IMPORTS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#include "PX_Sha256.h" + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// MACROS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#define ror(value, bits) (((value) >> (bits)) | ((value) << (32 - (bits)))) + +#define MIN(x, y) ( ((x)<(y))?(x):(y) ) + +#define STORE32H(x, y) \ + { (y)[0] = (px_uchar)(((x)>>24)&255); (y)[1] = (px_uchar)(((x)>>16)&255); \ + (y)[2] = (px_uchar)(((x)>>8)&255); (y)[3] = (px_uchar)((x)&255); } + +#define LOAD32H(x, y) \ + { x = ((px_uint32)((y)[0] & 255)<<24) | \ + ((px_uint32)((y)[1] & 255)<<16) | \ + ((px_uint32)((y)[2] & 255)<<8) | \ + ((px_uint32)((y)[3] & 255)); } + +#define STORE64H(x, y) \ + { (y)[0] = (px_uchar)(((x)>>56)&255); (y)[1] = (px_uchar)(((x)>>48)&255); \ + (y)[2] = (px_uchar)(((x)>>40)&255); (y)[3] = (px_uchar)(((x)>>32)&255); \ + (y)[4] = (px_uchar)(((x)>>24)&255); (y)[5] = (px_uchar)(((x)>>16)&255); \ + (y)[6] = (px_uchar)(((x)>>8)&255); (y)[7] = (px_uchar)((x)&255); } + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// CONSTANTS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// The K array +static const px_uint32 K[64] = { + 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, + 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, + 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, + 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, + 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, + 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, + 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, + 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, + 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, + 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, + 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, + 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, + 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +}; + +#define BLOCK_SIZE 64 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// INTERNAL FUNCTIONS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Various logical functions +#define Ch( x, y, z ) (z ^ (x & (y ^ z))) +#define Maj( x, y, z ) (((x | y) & z) | (x & y)) +#define S( x, n ) ror((x),(n)) +#define R( x, n ) (((x)&0xFFFFFFFFUL)>>(n)) +#define Sigma0( x ) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) +#define Sigma1( x ) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) +#define Gamma0( x ) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) +#define Gamma1( x ) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) + +#define Sha256Round( a, b, c, d, e, f, g, h, i ) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// TransformFunction +// +// Compress 512-bits +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static +void + TransformFunction + ( + PX_Sha256Context* Context, + px_uchar const* Buffer + ) +{ + px_uint32 S[8]; + px_uint32 W[64]; + px_uint32 t0; + px_uint32 t1; + px_uint32 t; + int i; + + // Copy state into S + for( i=0; i<8; i++ ) + { + S[i] = Context->state[i]; + } + + // Copy the state into 512-bits into W[0..15] + for( i=0; i<16; i++ ) + { + LOAD32H( W[i], Buffer + (4*i) ); + } + + // Fill W[16..63] + for( i=16; i<64; i++ ) + { + W[i] = Gamma1( W[i-2]) + W[i-7] + Gamma0( W[i-15] ) + W[i-16]; + } + + // Compress + for( i=0; i<64; i++ ) + { + Sha256Round( S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], i ); + t = S[7]; + S[7] = S[6]; + S[6] = S[5]; + S[5] = S[4]; + S[4] = S[3]; + S[3] = S[2]; + S[2] = S[1]; + S[1] = S[0]; + S[0] = t; + } + + // Feedback + for( i=0; i<8; i++ ) + { + Context->state[i] = Context->state[i] + S[i]; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC FUNCTIONS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Initialise +// +// Initialises a SHA256 Context. Use this to initialise/reset a context. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Initialise + ( + PX_Sha256Context* Context // [out] + ) +{ + Context->curlen = 0; + Context->length = 0; + Context->state[0] = 0x6A09E667UL; + Context->state[1] = 0xBB67AE85UL; + Context->state[2] = 0x3C6EF372UL; + Context->state[3] = 0xA54FF53AUL; + Context->state[4] = 0x510E527FUL; + Context->state[5] = 0x9B05688CUL; + Context->state[6] = 0x1F83D9ABUL; + Context->state[7] = 0x5BE0CD19UL; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Update +// +// Adds data to the SHA256 context. This will process the data and update the internal state of the context. Keep on +// calling this function until all the data has been added. Then call Sha256Finalise to calculate the hash. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Update + ( + PX_Sha256Context* Context, // [in out] + void * Buffer, // [in] + px_uint32 BufferSize // [in] + ) +{ + px_uint32 n; + + if( Context->curlen > sizeof(Context->buf) ) + { + return; + } + + while( BufferSize > 0 ) + { + if( Context->curlen == 0 && BufferSize >= BLOCK_SIZE ) + { + TransformFunction( Context, (px_uchar*)Buffer ); + Context->length += BLOCK_SIZE * 8; + Buffer = (px_uchar*)Buffer + BLOCK_SIZE; + BufferSize -= BLOCK_SIZE; + } + else + { + n = MIN( BufferSize, (BLOCK_SIZE - Context->curlen) ); + PX_memcpy( Context->buf + Context->curlen, (px_void *)Buffer, (px_int)n ); + Context->curlen += n; + Buffer = (px_uchar*)Buffer + n; + BufferSize -= n; + if( Context->curlen == BLOCK_SIZE ) + { + TransformFunction( Context, Context->buf ); + Context->length += 8*BLOCK_SIZE; + Context->curlen = 0; + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Finalise +// +// Performs the final calculation of the hash and returns the digest (32 byte buffer containing 256bit hash). After +// calling this, Sha256Initialised must be used to reuse the context. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Finalise + ( + PX_Sha256Context* Context, // [in out] + PX_SHA256_HASH* Digest // [out] + ) +{ + int i; + + if( Context->curlen >= sizeof(Context->buf) ) + { + return; + } + + // Increase the length of the message + Context->length += Context->curlen * 8; + + // Append the '1' bit + Context->buf[Context->curlen++] = (px_uchar)0x80; + + // if the length is currently above 56 bytes we append zeros + // then compress. Then we can fall back to padding zeros and length + // encoding like normal. + if( Context->curlen > 56 ) + { + while( Context->curlen < 64 ) + { + Context->buf[Context->curlen++] = (px_uchar)0; + } + TransformFunction(Context, Context->buf); + Context->curlen = 0; + } + + // Pad up to 56 bytes of zeroes + while( Context->curlen < 56 ) + { + Context->buf[Context->curlen++] = (px_uchar)0; + } + + // Store length + STORE64H( Context->length, Context->buf+56 ); + TransformFunction( Context, Context->buf ); + + // Copy output + for( i=0; i<8; i++ ) + { + STORE32H( Context->state[i], Digest->bytes+(4*i) ); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Calculate +// +// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the +// buffer. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Calculate + ( + px_void* Buffer, // [in] + px_uint32 BufferSize, // [in] + PX_SHA256_HASH* Digest // [in] + ) +{ + PX_Sha256Context context; + + PX_Sha256Initialise( &context ); + PX_Sha256Update( &context, Buffer, BufferSize ); + PX_Sha256Finalise( &context, Digest ); +} + +void PX_Sha256CalculateHashString(px_void *buffer,px_uint32 bufferSize,px_char stringKey[32]) +{ + px_int i; + PX_SHA256_HASH hash; + PX_Sha256Calculate(buffer,bufferSize,&hash); + for (i=0;i<31;i++) + { + if (hash.bytes[i]==0) + { + hash.bytes[i]=1; + } + } + hash.bytes[31]=0; + PX_memcpy(stringKey,hash.bytes,sizeof(hash.bytes)); +} diff --git a/UI/PainterEngine/core/PX_Sha256.h b/UI/PainterEngine/core/PX_Sha256.h new file mode 100644 index 0000000..1674ed2 --- /dev/null +++ b/UI/PainterEngine/core/PX_Sha256.h @@ -0,0 +1,56 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// WjCryptLib_Sha256 +// +// Implementation of SHA256 hash function. +// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org +// Modified by WaterJuice retaining Public Domain license. +// +// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef PX_SHA256 +#define PX_SHA256 +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IMPORTS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#include "PX_Typedef.h" + +typedef struct +{ + px_uint64 length; + px_uint32 state[8]; + px_uint32 curlen; + px_uchar buf[64]; +} PX_Sha256Context; + +#define SHA256_HASH_SIZE ( 256 / 8 ) + +typedef struct +{ + px_uchar bytes [SHA256_HASH_SIZE]; +} PX_SHA256_HASH; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC FUNCTIONS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Calculate +// +// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the +// buffer. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Calculate + ( + void* Buffer, // [in] + px_uint32 BufferSize, // [in] + PX_SHA256_HASH* Digest // [in] + ); + +void PX_Sha256CalculateHashString(px_void *buffer,px_uint32 bufferSize,px_char stringKey[32]); +#endif + diff --git a/UI/PainterEngine/core/PX_Sound.c b/UI/PainterEngine/core/PX_Sound.c new file mode 100644 index 0000000..a85494a --- /dev/null +++ b/UI/PainterEngine/core/PX_Sound.c @@ -0,0 +1,398 @@ +#include "PX_Sound.h" + +px_bool PX_SoundPlayInitialize(px_memorypool *mp, PX_SoundPlay *pSoundPlay) +{ + PX_memset(pSoundPlay,0,sizeof(PX_SoundPlay)); + pSoundPlay->mp=mp; + pSoundPlay->bLock=PX_FALSE; + pSoundPlay->mix_mode=PX_SOUND_MIX_MODE_PARALLEL; + pSoundPlay->parallel=PX_SOUND_DEFAULT_PARALLEL; + pSoundPlay->pause=PX_FALSE; + PX_memset(pSoundPlay->Sounds, 0, sizeof(pSoundPlay->Sounds)); + return PX_TRUE; +} + + +px_void PX_SoundPlaySetUserRead(PX_SoundPlay *pSoundPlay,px_void (*userread)(px_void *userptr,px_byte *pBuffer,px_int readSize),px_void *ptr) +{ + pSoundPlay->userread=userread; + pSoundPlay->userptr=ptr; +} + +px_void PX_SoundPlayPause(PX_SoundPlay *pSoundPlay,px_bool pause) +{ + pSoundPlay->pause=pause; +} + +px_bool PX_SoundPlayAdd(PX_SoundPlay *pSound,PX_Sound sounddata) +{ + px_int i; + px_int min_size=0,index=-1; + while(pSound->bLock); + pSound->bLock=PX_TRUE; + + for (i=0;iSounds);i++) + { + if (pSound->Sounds[i].data==PX_NULL) + { + index=i; + break; + } + else + { + if (min_size==0&&!pSound->Sounds[i].loop) + { + min_size=pSound->Sounds[i].data->size-pSound->Sounds[i].offset; + index=i; + } + else + { + if (!pSound->Sounds[i].loop && pSound->Sounds[i].data->size-pSound->Sounds[i].offsetSounds[i].data->size-pSound->Sounds[i].offset; + index=i; + } + } + } + } + if (indexSounds)) + { + pSound->Sounds[index]=sounddata; + pSound->bLock=PX_FALSE; + return PX_TRUE; + } + else + { + pSound->bLock=PX_FALSE; + return PX_FALSE; + } + +} + + +px_bool PX_SoundPlayRead(PX_SoundPlay *pSoundPlay,px_byte *pBuffer,px_int readSize) +{ + px_int i,j,CpySize,ReadblockSize,SourceblockLen; + PX_Sound *pSound; + px_short *pSourcePCM16,*pTargetPCM16=(px_short *)pBuffer; + px_short div; + if (readSize%4) + { + return PX_FALSE; + } + + if (pSoundPlay->userread) + { + pSoundPlay->userread(pSoundPlay->userptr,pBuffer,readSize); + return PX_TRUE; + } + + while(pSoundPlay->bLock); + pSoundPlay->bLock=PX_TRUE; + + PX_memset(pBuffer,0,readSize); + + if (pSoundPlay->pause) + { + pSoundPlay->bLock=PX_FALSE; + return PX_TRUE; + } + + div=PX_COUNTOF(pSoundPlay->Sounds); + + for (j=0;jSounds);j++) + { + pSound=pSoundPlay->Sounds+j; + if (!pSound->data) + { + continue; + } + + pSourcePCM16=(px_short *)pSound->data->buffer; + + if (!pSound->loop) + { + px_int resvSize=pSound->data->size-pSound->offset; + if (pSound->data->channel==PX_SOUND_CHANNEL_ONE) + { + if (resvSize*2>readSize) + { + CpySize=readSize; + } + else + { + CpySize=resvSize*2; + } + } + else + { + if (resvSize>readSize) + { + CpySize=readSize; + } + else + { + CpySize=resvSize; + } + } + } + else + { + CpySize=readSize; + } + + ReadblockSize=CpySize/2; + SourceblockLen=pSound->data->size/2; + + if (pSound->data->channel==PX_SOUND_CHANNEL_ONE) + { + for (i=0;imix_mode) + { + case PX_SOUND_MIX_MODE_PARALLEL: + pTargetPCM16[i]+=pSourcePCM16[pSound->offset/2]/pSoundPlay->parallel; + pTargetPCM16[i+1]+=pSourcePCM16[pSound->offset/2]/pSoundPlay->parallel; + pSound->offset+=2; + break; + case PX_SOUND_MIX_MODE_AVG: + pTargetPCM16[i]+=pSourcePCM16[pSound->offset/2]/div; + pTargetPCM16[i+1]+=pSourcePCM16[pSound->offset/2+1]/div; + pSound->offset+=2; + break; + } + + if (pSound->offset>=pSound->data->size) + { + if (pSound->loop) + { + pSound->offset=0; + } + else + { + break; + } + } + } + } + else + { + for (i=0;imix_mode) + { + case PX_SOUND_MIX_MODE_PARALLEL: + pTargetPCM16[i]+=pSourcePCM16[pSound->offset/2]/pSoundPlay->parallel; + pSound->offset+=2; + break; + case PX_SOUND_MIX_MODE_AVG: + pTargetPCM16[i]+=pSourcePCM16[pSound->offset/2]/div; + pSound->offset+=2; + break; + } + if (pSound->offset>=pSound->data->size) + { + if (pSound->loop) + { + pSound->offset=0; + } + else + { + break; + } + } + } + } + + if (pSound->offset>=pSound->data->size) + { + if (!pSoundPlay->Sounds[j].loop) + { + pSoundPlay->Sounds[j].data=PX_NULL; + } + continue; + } + } + + pSoundPlay->bLock=PX_FALSE; + return PX_TRUE; +} + + +px_bool PX_SoundPlayReadCurrentPlayingData(PX_SoundPlay *pSoundPlay,px_int soundIndex,px_int channel,px_int16 *out,px_int count) +{ + PX_SoundData *pData; + px_int offset; + if (soundIndex>=PX_COUNTOF(pSoundPlay->Sounds)||soundIndex<0) + { + return PX_FALSE; + } + if (pSoundPlay->Sounds[soundIndex].data==PX_NULL) + { + return PX_FALSE; + } + if (channel<0||channel>=2) + { + return PX_FALSE; + } + + pData=pSoundPlay->Sounds[soundIndex].data; + offset=pSoundPlay->Sounds[soundIndex].offset; + switch (pData->channel) + { + case PX_SOUND_CHANNEL_ONE: + { + if (pData->size-offsetbuffer+offset,count*2); + } + break; + case PX_SOUND_CHANNEL_DOUBLE: + { + px_int i; + px_int16 *pdptr; + if (pData->size-offset<2*count*2) + { + return PX_FALSE; + } + pdptr=(px_int16 *)(pData->buffer+offset); + for (i=0;iSounds);j++) + { + pSoundPlay->Sounds[j].data=PX_NULL; + pSoundPlay->Sounds[j].offset=0; + } +} + +px_int PX_SoundPlayGetDataCount(PX_SoundPlay *pSoundPlay) +{ + px_int count=0,j; + if (pSoundPlay->userread) + { + return 1; + } + + for (j=0;jSounds);j++) + { + if (pSoundPlay->Sounds[j].data) + { + count++; + } + } + return count; +} + +PX_Sound PX_SoundCreate(PX_SoundData *data,px_bool loop) +{ + PX_Sound sound; + sound.data=data; + sound.offset=0; + sound.loop=loop; + return sound; +} + + +px_bool PX_SoundStaticDataCopy(px_memorypool *mp,PX_SoundData *resSounddata,PX_SoundData *targetSounddata) +{ + targetSounddata->buffer=(px_byte *)MP_Malloc(mp,resSounddata->size); + if(!targetSounddata->buffer) + { + return PX_FALSE; + } + targetSounddata->channel=resSounddata->channel; + targetSounddata->mp=mp; + targetSounddata->size=resSounddata->size; + PX_memcpy(targetSounddata->buffer,resSounddata->buffer,resSounddata->size); + return PX_TRUE; +} + +px_bool PX_SoundStaticDataCreate(PX_SoundData *sounddata,px_memorypool *mp,px_byte *data,px_int datasize) +{ + if (PX_WaveVerify(data,datasize)) + { + px_uint offset=0,pcmSize,woffset; + + pcmSize=PX_WaveGetPCMSize(data,datasize); + + if (pcmSize!=0) + { + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)data; + PX_WAVE_FMT_BLOCK *pfmt_block; + sounddata->buffer=(px_byte *)MP_Malloc(mp,pcmSize); + sounddata->size=pcmSize; + sounddata->channel=PX_WaveGetChannel(data,pcmSize)==1?PX_SOUND_CHANNEL_ONE:PX_SOUND_CHANNEL_DOUBLE; + if (!sounddata->buffer) + { + goto _ERROR; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(data+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=sizeof(PX_WAVE_RIFF_HEADER); + offset+=8; + offset+=pfmt_block->dwFmtSize; + + pcmSize=0; + woffset=0; + while (offset<(px_uint)datasize) + { + pBlock=(PX_WAVE_DATA_BLOCK*)(data+offset); + if(!PX_memequ(pBlock->szDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + PX_memcpy(sounddata->buffer+woffset,data+offset,pBlock->dwDataSize); + offset+=pBlock->dwDataSize; + woffset+=pBlock->dwDataSize; + } + } + else + goto _ERROR; + } + else + { + goto _ERROR; + } + sounddata->mp=mp; + return PX_TRUE; +_ERROR: + sounddata->mp=PX_NULL; + sounddata->size=0; + sounddata->buffer=PX_NULL; + return PX_FALSE; +} + +px_void PX_SoundStaticDataFree(PX_SoundData *sounddata) +{ + if (sounddata->mp) + { + MP_Free(sounddata->mp,sounddata->buffer); + sounddata->buffer=PX_NULL; + sounddata->size=0; + sounddata->mp=PX_NULL; + } + +} + diff --git a/UI/PainterEngine/core/PX_Sound.h b/UI/PainterEngine/core/PX_Sound.h new file mode 100644 index 0000000..4d74172 --- /dev/null +++ b/UI/PainterEngine/core/PX_Sound.h @@ -0,0 +1,67 @@ +#ifndef PX_SOUND_H +#define PX_SOUND_H +//painter engine sound-mixer +//44100HZ +//16bit +//1/2-channel supported +#include "PX_Wave.h" +#include "PX_Vector.h" +#include "PX_Tuning.h" + +#define PX_SOUND_DEFAULT_PARALLEL 8 + +typedef enum +{ + PX_SOUND_CHANNEL_ONE, + PX_SOUND_CHANNEL_DOUBLE +}PX_SOUND_CHANNEL; + +typedef enum +{ + PX_SOUND_MIX_MODE_AVG, + PX_SOUND_MIX_MODE_PARALLEL, +}PX_SOUND_MIX_MODE; + +typedef struct +{ + px_memorypool *mp; + px_byte *buffer; + px_int size; + PX_SOUND_CHANNEL channel; +}PX_SoundData; + +typedef struct +{ + px_int offset; + px_bool loop; + PX_SoundData *data; +}PX_Sound; + +typedef px_void (*px_soundplay_userread)(px_void *userptr,px_byte *pBuffer,px_int readSize); + +typedef struct +{ + px_memorypool *mp; + px_int parallel; + px_bool pause; + volatile px_bool bLock; + PX_SOUND_MIX_MODE mix_mode; + px_soundplay_userread userread; + px_void *userptr; + PX_Sound Sounds[PX_SOUND_DEFAULT_PARALLEL]; +}PX_SoundPlay; + +px_bool PX_SoundPlayInitialize(px_memorypool *mp, PX_SoundPlay *pSoundPlay); +px_void PX_SoundPlaySetUserRead(PX_SoundPlay *pSoundPlay,px_void (*userread)(px_void *userptr,px_byte *pBuffer,px_int readSize),px_void *ptr); +px_void PX_SoundPlayPause(PX_SoundPlay *pSoundPlay,px_bool pause); +px_bool PX_SoundPlayAdd(PX_SoundPlay *pSoundPlay,PX_Sound sound); +px_bool PX_SoundPlayRead(PX_SoundPlay *pSoundPlay,px_byte *pBuffer,px_int readSize); +px_bool PX_SoundPlayReadCurrentPlayingData(PX_SoundPlay *pSoundPlay,px_int soundIndex,px_int channel,px_int16 *out,px_int count); +px_void PX_SoundPlayFree(PX_SoundPlay *pSoundPlay); +px_void PX_SoundPlayClear(PX_SoundPlay *pSoundPlay); +px_int PX_SoundPlayGetDataCount(PX_SoundPlay *pSoundPlay); +PX_Sound PX_SoundCreate(PX_SoundData *data,px_bool loop); +px_bool PX_SoundStaticDataCopy(px_memorypool *mp,PX_SoundData *resSounddata,PX_SoundData *targetSounddata); +px_bool PX_SoundStaticDataCreate(PX_SoundData *sounddata,px_memorypool *mp,px_byte *data,px_int datasize); +px_void PX_SoundStaticDataFree(PX_SoundData *sounddata); +#endif diff --git a/UI/PainterEngine/core/PX_SoundModule.c b/UI/PainterEngine/core/PX_SoundModule.c new file mode 100644 index 0000000..408cfcf --- /dev/null +++ b/UI/PainterEngine/core/PX_SoundModule.c @@ -0,0 +1,250 @@ +#include "PX_SoundModule.h" + +px_void PX_SoundModuleSortSpectrum(PX_SoundModule *SoundModule,px_complex AnalysisFrame[]) +{ + px_int i; + px_double amplitude=0,phase=0; + PX_FFT(AnalysisFrame,AnalysisFrame,PX_SOUNDMODULE_N); + + //re,im to amplitude,phase + + //DC sort + if (AnalysisFrame[0].re>0) + { + AnalysisFrame[0].im=0; + } + else + { + AnalysisFrame[0].re=PX_ABS(AnalysisFrame[0].re); + AnalysisFrame[0].im=PX_PI; + } + + //others + for (i=1;i0) + { + AnalysisFrame[PX_SOUNDMODULE_N/2].im=0; + } + else + { + AnalysisFrame[PX_SOUNDMODULE_N/2].re=PX_ABS(AnalysisFrame[0].re); + AnalysisFrame[PX_SOUNDMODULE_N/2].im=PX_PI; + } +} + + +px_void PX_SoundModuleInitialize(px_memorypool *mp,PX_SoundModule *SoundModule,px_int SampleRate,px_double pitchShift,PX_SoundModule_Formant Formant[],px_int FormantCount) +{ + PX_memset(SoundModule,0,sizeof(PX_SoundModule)); + if (FormantCount>PX_COUNTOF(SoundModule->Formant)) + { + return; + } + PX_memcpy(SoundModule->Formant,Formant,FormantCount*sizeof(PX_SoundModule_Formant)); + SoundModule->mp=mp; + SoundModule->pitchShift=pitchShift; + SoundModule->SampleRate=SampleRate; + SoundModule->searchHzW=PX_SOUNDMODULE_DEFALUT_SEARCH_HZ; + SoundModule->ZCR_High=100; + SoundModule->Pitch_threshold_High=800; + SoundModule->amp_max=32768.0; +} + +px_int PX_SoundModuleFilter(PX_SoundModule *SoundModule,_IN px_double _in[],px_int count,_OUT px_double _out[]) +{ + px_complex Frame[PX_SOUNDMODULE_N]; + px_double InstantaneousPhase[PX_SOUNDMODULE_N]; + px_double sincWindow[PX_SOUNDMODULE_N]; + px_double ModuleAmplitude[PX_SOUNDMODULE_FORMANT_COUNT]; + px_double Pitch; + px_double ZCR; + px_double *Data; + px_double durHZ=SoundModule->SampleRate*1.0/PX_SOUNDMODULE_N; + px_int blkCount,dataCount,remian; + px_int blk; + px_int blkSize=PX_SOUNDMODULE_N/2; + + dataCount=count+SoundModule->remainCount; + + Data=(px_double *)MP_Malloc(SoundModule->mp,dataCount*sizeof(px_double)); + + PX_memcpy(Data,SoundModule->remian,SoundModule->remainCount*sizeof(px_double)); + PX_memcpy(Data+SoundModule->remainCount,_in,count*sizeof(px_double)); + + blkCount=dataCount/(blkSize); + + if (blkCount>1) + { + remian=dataCount%(blkSize)+blkSize; + PX_memcpy(SoundModule->remian,Data+(blkCount-1)*blkSize,remian*sizeof(px_double)); + SoundModule->remainCount=remian; + } + else + { + remian=dataCount; + PX_memcpy(SoundModule->remian,Data,remian*sizeof(px_double)); + MP_Free(SoundModule->mp,Data); + return 0; + } + + PX_WindowFunction_sinc(sincWindow,PX_SOUNDMODULE_N); + + for (blk=0;blkSampleRate,100,300); + + for (i=0;iamp_max*sincWindow[i]; + Frame[i].im=0; + } + + if (Pitch!=0&&!(ZCRZCR_Low||ZCR>SoundModule->ZCR_High||PitchPitch_threshold_Low||Pitch>SoundModule->Pitch_threshold_High)) + { + PX_SoundModuleSortSpectrum(SoundModule,Frame); + + //Instantaneous frequency + for (i=0;ilastPhase[i]; + SoundModule->lastPhase[i]=Frame[i].im; + } + + //Build sound module + for (i=0;isearchHzW/2)/durHZ); + + if (HZindex<0) + { + HZindex=0; + } + + max=Frame[HZindex].re; + + while (PX_TRUE) + { + HZindex++; + if (HZindex>=PX_SOUNDMODULE_FORMANT_COUNT) + { + break; + } + if (HZindex*durHZ>Pitch*i+SoundModule->searchHzW/2) + { + break; + } + if (Frame[HZindex].re>max) + { + max=Frame[HZindex].re; + } + } + + ModuleAmplitude[HZindex]=max; + } + + //now rebuild signal + + PX_memset(Frame,0,sizeof(Frame)); + for (i=0;isearchHzW/2)/durHZ); + if (HZindex<0) + { + HZindex=0; + } + + while (PX_TRUE) + { + px_double distanceHZ; + if (HZindex>=PX_SOUNDMODULE_FORMANT_COUNT) + { + break; + } + if (HZindex*durHZ>Pitch*i+SoundModule->Formant[i].W/2) + { + break; + } + distanceHZ=PX_ABS(HZindex*durHZ-Pitch*i); + Frame[HZindex].re=SoundModule->Formant[i].A*PX_sind(PX_PI/2*(1-PX_ABS(distanceHZ-Pitch*i)/SoundModule->Formant[i].W*2)); + + HZindex++; + } + } + + //rebuild instantaneous phase + for (i=0;ire im + for (i=0;ire,im + Frame[i].re=amp*PX_cosd(phase); + Frame[i].im=amp*PX_sind(phase); + } + + PX_FT_Symmetry(Frame,Frame,PX_SOUNDMODULE_N); + PX_IFFT(Frame,Frame,PX_SOUNDMODULE_N); + } + + for (i=0;ihalfRebuild[i]; + if ((_out+blk*blkSize)[i]<-1) + { + (_out+blk*blkSize)[i]=-1; + } + if ((_out+blk*blkSize)[i]>1) + { + (_out+blk*blkSize)[i]=1; + } + (_out+blk*blkSize)[i]*=SoundModule->amp_max; + SoundModule->halfRebuild[i]=Frame[i+blkSize].re*sincWindow[i+blkSize]; + } + } + + MP_Free(SoundModule->mp,Data); + + return blkCount*blkSize; +} + +px_void PX_SoundModulePitchShift(PX_SoundModule *SoundModule,px_double pitchShift) +{ + SoundModule->pitchShift=pitchShift; +} + +px_void PX_SoundModuleSetZCR(PX_SoundModule *SoundModule,px_double low,px_double high) +{ + SoundModule->ZCR_Low=low; + SoundModule->ZCR_High=high; +} diff --git a/UI/PainterEngine/core/PX_SoundModule.h b/UI/PainterEngine/core/PX_SoundModule.h new file mode 100644 index 0000000..a7b6516 --- /dev/null +++ b/UI/PainterEngine/core/PX_SoundModule.h @@ -0,0 +1,39 @@ +#ifndef PX_SOUNDMODULE +#define PX_SOUNDMODULE + +#include "../core/PX_Core.h" + +#define PX_SOUNDMODULE_N 1024 +#define PX_SOUNDMODULE_FORMANT_COUNT 32 +#define PX_SOUNDMODULE_DEFALUT_SEARCH_HZ 90 + +typedef struct +{ + px_double A,W; +}PX_SoundModule_Formant; + +typedef struct +{ + px_memorypool *mp; + px_double lastPhase[PX_SOUNDMODULE_N/2]; + px_double remian[PX_SOUNDMODULE_N*2]; + px_double halfRebuild[PX_SOUNDMODULE_N/2]; + PX_SoundModule_Formant Formant[PX_SOUNDMODULE_FORMANT_COUNT]; + + px_int remainCount; + px_int SampleRate; + px_double searchHzW; + px_double pitchShift; + px_double ZCR_Low,ZCR_High; + px_double amp_threshold; + px_double amp_max; + px_double Pitch_threshold_Low,Pitch_threshold_High; +}PX_SoundModule; + + +px_void PX_SoundModuleInitialize(px_memorypool *mp,PX_SoundModule *SoundModule,px_int SampleRate,px_double pitchShift,PX_SoundModule_Formant Formant[],px_int FormantCount); +px_int PX_SoundModuleFilter(PX_SoundModule *SoundModule,_IN px_double _in[],px_int count,_OUT px_double _out[]); +px_void PX_SoundModulePitchShift(PX_SoundModule *SoundModule,px_double pitchShift); +px_void PX_SoundModuleSetZCR(PX_SoundModule *SoundModule,px_double low,px_double high); + +#endif diff --git a/UI/PainterEngine/core/PX_String.c b/UI/PainterEngine/core/PX_String.c new file mode 100644 index 0000000..576b6ef --- /dev/null +++ b/UI/PainterEngine/core/PX_String.c @@ -0,0 +1,697 @@ +#include "PX_String.h" + +px_int PX_StringToInteger(px_string *str) +{ + if (str->buffer[0]=='0'&&(str->buffer[1]=='x'||str->buffer[1]=='X')) + { + return PX_htoi(str->buffer+2); + } + else + return PX_atoi(str->buffer); +} + +px_void PX_StringTrim(px_string *str) +{ + if (str->buffer) + { + px_int loft=0; + px_int i; + while (str->buffer[loft]==' ') + { + loft++; + } + i=0; + while(PX_TRUE) + { + if (str->buffer[loft]=='\0'||loft>=str->bufferlen) + { + break; + } + str->buffer[i++]=str->buffer[loft++]; + } + str->buffer[i]='\0'; + i=PX_strlen(str->buffer); + if (i) + { + i--; + } + else + return; + + while (i&&str->buffer[i]==' ') + { + str->buffer[i--]='\0'; + } + } + PX_StringUpdateExReg(str); +} + +px_void PX_StringTrimLeft(px_string *str,px_int leftCount) +{ + px_int i; + if (leftCount==0) + { + return; + } + if (leftCount>=PX_strlen(str->buffer)) + { + PX_StringClear(str); + } + else + { + for (i=0;str->buffer[i+leftCount];i++) + { + str->buffer[i]=str->buffer[i+leftCount]; + } + str->buffer[i]='\0'; + } + PX_StringUpdateExReg(str); +} + +px_void PX_StringTrimRight(px_string *str,px_int RightCount) +{ + if (RightCount==0) + { + return; + } + if (RightCount>=PX_strlen(str->buffer)) + { + PX_StringClear(str); + } + else + { + str->buffer[PX_strlen(str->buffer)-RightCount]='\0'; + } + PX_StringUpdateExReg(str); +} + +px_void PX_StringFree(px_string *str) +{ + if(str->buffer&&str->bufferlen) + MP_Free(str->mp,str->buffer); + + str->buffer=PX_NULL; + str->bufferlen=0; + str->exreg_strlen = 0; +} + +px_bool PX_StringInitialize(px_memorypool *mp,px_string *str) +{ + str->buffer=(px_char *)MP_Malloc(mp,16); + if(!str->buffer)return PX_FALSE; + str->bufferlen=16; + PX_memset(str->buffer,0,16); + str->mp=mp; + str->exreg_strlen = 0; + return PX_TRUE; +} + +px_void PX_StringInitAlloc(px_memorypool *mp,px_string *str,px_int allocSize) +{ + int size=16; + while(sizebuffer=(px_char *)MP_Malloc(mp,allocSize); + str->bufferlen=allocSize; + PX_memset(str->buffer,0,size); + str->mp=mp; + str->exreg_strlen = 0; +} + + +px_bool PX_StringFormat8(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7, px_stringformat _8) +{ + px_char *oldptr; + px_uint finalLen=0; + px_uchar shl=0; + + finalLen=PX_sprintf8(PX_NULL,0,fmt,_1,_2,_3,_4,_5,_6,_7,_8); + + oldptr=str->buffer; + + while ((px_uint)(1<<++shl)<=finalLen); + str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); + if (!str->buffer) + { + PX_StringUpdateExReg(str); + return PX_FALSE; + } + + finalLen=PX_sprintf8(str->buffer,str->bufferlen,fmt,_1,_2,_3,_4,_5,_6,_7,_8); + + if(oldptr) + MP_Free(str->mp,oldptr); + + PX_StringUpdateExReg(str); + return PX_TRUE; +} +px_bool PX_StringFormat7(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,_4,_5,_6,_7,PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat6(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,_4,_5,_6,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat5(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,_4,_5,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat4(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,_4,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat3(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat2(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2) +{ + return PX_StringFormat8(str,fmt,_1,_2,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat1(px_string *str,const px_char fmt[],px_stringformat _1) +{ + return PX_StringFormat8(str,fmt,_1,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringSet(px_string *str,const px_char fmt[]) +{ + px_char *oldptr; + px_uint finalLen=0; + px_uchar shl=0; + + finalLen=PX_strlen(fmt); + + if (finalLen<(px_uint)str->bufferlen) + { + PX_strset(str->buffer,fmt); + PX_StringUpdateExReg(str); + return PX_TRUE; + } + + oldptr=str->buffer; + + while ((px_uint)(1<<++shl)<=finalLen); + str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); + if (!str->buffer) + { + return PX_FALSE; + } + PX_strset(str->buffer,fmt); + + if(oldptr) + MP_Free(str->mp,oldptr); + + PX_StringUpdateExReg(str); + return PX_TRUE; +} + +px_float PX_StringToFloat(px_string *str) +{ + return PX_atof(PX_STRING_DATA(str)); +} + +px_bool PX_StringIsNumeric(px_string *str) +{ + return PX_strIsNumeric(str->buffer); +} + +px_bool PX_StringIsFloat(px_string *str) +{ + return PX_strIsFloat(str->buffer); +} + +px_bool PX_StringCat(px_string *str,const px_char *str2) +{ + px_uchar shl=0; + px_char *old=str->buffer; + px_int length=PX_strlen(str->buffer)+PX_strlen(str2); + if (lengthbufferlen) + { + PX_strcat(str->buffer,str2); + PX_StringUpdateExReg(str); + return PX_TRUE; + } + + while ((px_int)(1<<++shl)<=length); + str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); + if(!str->buffer)return PX_FALSE; + str->buffer[0]='\0'; + PX_strcat(str->buffer,old); + PX_strcat(str->buffer,str2); + if(old) + MP_Free(str->mp,old); + PX_StringUpdateExReg(str); + return PX_TRUE; +} + +px_void PX_StringClear(px_string *str) +{ + str->buffer[0]='\0'; + str->exreg_strlen = 0; +} + +px_bool PX_StringCatChar(px_string *str,px_char ch) +{ + px_uchar shl=0; + px_char *old=str->buffer; + px_int length=PX_strlen(str->buffer)+1; + if (lengthbufferlen) + { + str->buffer[length-1]=ch; + str->buffer[length]='\0'; + PX_StringUpdateExReg(str); + return PX_TRUE; + } + + while ((px_int)(1<<++shl)<=length); + str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); + if(!str->buffer)return PX_FALSE; + str->buffer[0]='\0'; + PX_strcat(str->buffer,old); + str->buffer[length-1]=ch; + str->buffer[length]='\0'; + if(old) + MP_Free(str->mp,old); + + PX_StringUpdateExReg(str); + return PX_TRUE; +} + +px_int PX_StringLen(px_string *str) +{ + return PX_strlen(str->buffer); +} + +px_bool PX_StringCopy(px_string *dest,px_string *res) +{ + if (res==dest) + { + PX_ERROR("px_sting Self-copied error"); + return PX_FALSE; + } + dest->buffer[0]='\0'; + return PX_StringCat(dest,res->buffer); +} + +px_bool PX_StringInsertChar(px_string *str,px_int index,px_char ch) +{ + px_int cpysize=PX_strlen(str->buffer+index); + if (PX_StringCatChar(str,' ')) + { + PX_memcpy(str->buffer+index+1,str->buffer+index,cpysize); + str->buffer[index]=ch; + str->exreg_strlen++; + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_StringRemoveChar(px_string *str,px_int index) +{ + if (index>=0&&indexbuffer)) + { + PX_memcpy(str->buffer+index,str->buffer+index+1,PX_strlen(str->buffer+index)); + str->exreg_strlen--; + return PX_TRUE; + } + return PX_FALSE; +} + +px_void PX_StringReplace(px_string *str,px_char *source,px_char *replaceto) +{ + px_string tempstr; + int i; + if (PX_StringLen(str)==0) + { + return; + } + PX_StringInitialize(str->mp,&tempstr); + PX_StringCopy(&tempstr,str); + PX_StringClear(str); + + for (i=0;i<=PX_StringLen(&tempstr)-PX_strlen(source);i++) + { + if (PX_memequ(tempstr.buffer+i,source,PX_strlen(source))) + { + PX_StringCat(str,replaceto); + i+=PX_strlen(source)-1; + } + else + { + PX_StringCatChar(str,tempstr.buffer[i]); + } + } + PX_StringCat(str,tempstr.buffer+i); + PX_StringFree(&tempstr); + +} + +px_bool PX_StringInsert(px_string *str,px_int insertIndex,const px_char *InstrString) +{ + px_int length=PX_strlen(InstrString); + px_int resLen=PX_strlen(str->buffer+insertIndex); + if (!PX_StringCat(str, InstrString)) + { + return PX_FALSE; + } + PX_memcpy(str->buffer+insertIndex+length,str->buffer+insertIndex,resLen); + PX_memcpy(str->buffer+insertIndex,InstrString,length); + PX_StringUpdateExReg(str); + return PX_TRUE; +} + + +px_void PX_StringReplaceRange(px_string *str,px_int startindex,px_int endindex,px_char *replaceto) +{ + px_string tempStr; + + if (startindex>endindex) + { + PX_ERROR("string trim error"); + return; + } + + if (endindex>=PX_strlen(str->buffer)) + { + PX_ERROR("string trim error"); + return; + } + + PX_StringInitialize(str->mp,&tempStr); + PX_StringCopy(&tempStr,str); + + PX_StringClear(str); + + tempStr.buffer[startindex]=0; + PX_StringCat(str,tempStr.buffer); + PX_StringCat(str,replaceto); + PX_StringCat(str,tempStr.buffer+endindex+1); + PX_StringFree(&tempStr); +} + +#define PX_STRING_TRIMER_REG_COUNT 16 + +px_bool PX_StringTrimer_Solve(px_string *pstring,px_char *parseCode,px_char *ReplaceCode) +{ + px_int oft,j,k,resi,repj,regindex; + px_char regbuf[3]; + px_char endc; + px_bool ret; + px_string reg[PX_STRING_TRIMER_REG_COUNT],matchedString,replaceString; + px_bool mark[PX_STRING_TRIMER_REG_COUNT],matchd; + ret=PX_FALSE; + for (oft=0;oftmp,reg+oft); + mark[oft]=PX_FALSE; + } + + PX_StringInitialize(pstring->mp,&matchedString); + + oft=0; + + while(pstring->buffer[oft]) + { + repj=0; + resi=oft; + matchd=PX_FALSE; + + while(PX_TRUE) + { + + if (parseCode[repj]=='%') + { + j=0; + repj++; + + PX_StringClear(&matchedString); + + while(PX_TRUE) + { + if (parseCode[repj]>='0'&&parseCode[repj]<='9') + { + regbuf[j++]=parseCode[repj++]; + if (j>2) + { + goto _DONE; + } + regbuf[j]=0; + + } + else + break; + + } + if (j==0) + { + goto _DONE; + } + regindex=PX_atoi(regbuf); + if (regindex>=PX_STRING_TRIMER_REG_COUNT) + { + goto _DONE; + } + endc=parseCode[repj]; + + while (PX_TRUE) + { + if (pstring->buffer[resi]==endc) + { + break; + } + if (pstring->buffer[resi]=='\0') + { + goto _DONE; + } + PX_StringCatChar(&matchedString,pstring->buffer[resi]); + resi++; + } + + if (mark[regindex]) + { + //reg 0 as wildcard + if (PX_strequ(reg[regindex].buffer,matchedString.buffer)||!regindex) + { + matchd=PX_TRUE; + } + else + { + matchd=PX_FALSE; + break; + } + } + else + { + PX_StringCopy(®[regindex],&matchedString); + mark[regindex]=PX_TRUE; + } + + } + else + { + if (parseCode[repj]=='\0') + { + matchd=PX_TRUE; + break; + } + if (pstring->buffer[resi]=='\0') + { + break; + } + if (pstring->buffer[resi]==parseCode[repj]) + { + resi++; + repj++; + } + else + break; + } + } + + + + if (matchd) + { + PX_StringInitialize(pstring->mp,&replaceString); + j=0; + k=0; + while(PX_TRUE) + { + if (ReplaceCode[j]==0) + { + break; + } + if (ReplaceCode[j]=='%') + { + j++; + k=0; + while(PX_TRUE) + { + if (ReplaceCode[j]>='0'&&ReplaceCode[j]<='9') + { + regbuf[k++]=ReplaceCode[j++]; + + if (k>2) + { + PX_StringFree(&replaceString); + goto _DONE; + } + + regbuf[k]='\0'; + + regindex=PX_atoi(regbuf); + if (regindex>=PX_STRING_TRIMER_REG_COUNT) + { + PX_StringFree(&replaceString); + goto _DONE; + } + PX_StringCat(&replaceString,reg[regindex].buffer); + } + else + break; + } + } + else + { + PX_StringCatChar(&replaceString,ReplaceCode[j++]); + } + } + + + PX_StringReplaceRange(pstring,oft,resi-1,replaceString.buffer); + ret=PX_TRUE; + + oft+=PX_strlen(replaceString.buffer); + + PX_StringFree(&replaceString); + } + else + { + oft++; + } + + for (k=0;kbuffer=(px_char *)constchar; + str->mp=PX_NULL; + str->bufferlen=0; + +} + + +px_void PX_StringUpdateExReg(px_string *text) +{ + if (text->buffer) + { + text->exreg_strlen =PX_strlen(text->buffer); + } + else + text->exreg_strlen =0; +} + +px_bool PX_StringCatEx(px_string* text, const px_char* str2) +{ + px_uchar shl = 0; + px_int len2 = PX_strlen(str2); + px_char* old = text->buffer; + px_int length = text->exreg_strlen + len2; + if (length < text->bufferlen) + { + PX_strcat(text->buffer + text->exreg_strlen, str2); + text->exreg_strlen += len2; + return PX_TRUE; + } + + while ((px_int)(1 << ++shl) <= length); + text->bufferlen = (1 << shl); + text->buffer = (px_char*)MP_Malloc(text->mp, text->bufferlen); + if (!text->buffer) + { + return PX_FALSE; + } + + text->buffer[0] = '\0'; + + PX_strcat(text->buffer, old); + PX_strcat(text->buffer + text->exreg_strlen, str2); + + if (old) + MP_Free(text->mp, old); + + text->exreg_strlen += len2; + return PX_TRUE; +} + +px_void PX_StringBackspace(px_string* text) +{ + px_int len = PX_strlen(text->buffer); + if (len) + { + text->buffer[len - 1] = '\0'; + } +} + + +px_void PX_StringBackspaceEx(px_string* text) +{ + if (text->exreg_strlen > 0) + { + text->buffer[text->exreg_strlen - 1] = '\0'; + text->exreg_strlen--; + } +} + +px_bool PX_StringCatCharEx(px_string* text, px_char ch) +{ + px_uchar shl = 0; + px_char* old = text->buffer; + px_int length = text->exreg_strlen + 1; + if (length < text->bufferlen) + { + text->buffer[length - 1] = ch; + text->buffer[length] = '\0'; + text->exreg_strlen++; + return PX_TRUE; + } + + while ((px_int)(1 << ++shl) <= length); + text->bufferlen = (1 << shl); + text->buffer = (px_char*)MP_Malloc(text->mp, text->bufferlen); + if (!text->buffer)return PX_FALSE; + text->buffer[0] = '\0'; + PX_strcat(text->buffer, old); + text->buffer[length - 1] = ch; + text->buffer[length] = '\0'; + text->exreg_strlen++; + if (old) + MP_Free(text->mp, old); + return PX_TRUE; +} diff --git a/UI/PainterEngine/core/PX_String.h b/UI/PainterEngine/core/PX_String.h new file mode 100644 index 0000000..bfa4c8e --- /dev/null +++ b/UI/PainterEngine/core/PX_String.h @@ -0,0 +1,59 @@ +#ifndef __PX_STRING_H +#define __PX_STRING_H +#include "PX_MemoryPool.h" + +typedef struct __px_string +{ + px_char *buffer; + px_memorypool *mp; + px_int bufferlen; + px_int exreg_strlen; +}px_string; + + +#define PX_STRING_DATA(x) (x->buffer) + +px_bool PX_StringInitialize(px_memorypool *mp,px_string *str); +px_void PX_StringInitFromConst(px_string *str,const px_char *constchar); +px_void PX_StringUpdateExReg(px_string* text); +px_int PX_StringToInteger(px_string* str); +px_float PX_StringToFloat(px_string *str); +px_void PX_StringTrim(px_string *str); +px_bool PX_StringCat(px_string *str,const px_char *str2); +px_void PX_StringClear(px_string *str); +px_bool PX_StringCatChar(px_string *str,px_char ch); +px_int PX_StringLen(px_string *str); +px_void PX_StringFree(px_string *str); +px_bool PX_StringCopy(px_string *dest,px_string *res); +px_bool PX_StringInsertChar(px_string *str,px_int index,px_char ch); +px_bool PX_StringRemoveChar(px_string *str,px_int index); +px_void PX_StringReplaceRange(px_string *str,px_int startindex,px_int endindex,px_char *replaceto); +px_void PX_StringTrimLeft(px_string *str,px_int leftCount); +px_void PX_StringTrimRight(px_string *str,px_int RightCount); + +px_bool PX_StringIsNumeric(px_string *str); +px_bool PX_StringIsFloat(px_string *str); + +//px_void PX_StringFormat(px_string *str,px_char fmt[],...); +px_void PX_StringReplace(px_string *str,px_char *source,px_char *replaceto); +px_bool PX_StringInsert(px_string *str,px_int insertIndex,const px_char *InstrString); +px_bool PX_StringTrimer_Solve(px_string *pstring,px_char *parseCode,px_char *ReplaceCode); +px_void PX_StringInitAlloc(px_memorypool *mp,px_string *str,px_int allocSize); + +px_bool PX_StringFormat8(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7, px_stringformat _8); +px_bool PX_StringFormat7(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7); +px_bool PX_StringFormat6(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6); +px_bool PX_StringFormat5(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5); +px_bool PX_StringFormat4(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4); +px_bool PX_StringFormat3(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3); +px_bool PX_StringFormat2(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2); +px_bool PX_StringFormat1(px_string *str,const px_char fmt[],px_stringformat _1); +px_bool PX_StringSet(px_string *str,const px_char fmt[]); + +px_bool PX_StringCatEx(px_string *text,const px_char *str2); +px_void PX_StringBackspace(px_string *text); +px_void PX_StringBackspaceEx(px_string* text); +px_bool PX_StringCatCharEx(px_string* text, px_char ch); + + +#endif diff --git a/UI/PainterEngine/core/PX_Surface.c b/UI/PainterEngine/core/PX_Surface.c new file mode 100644 index 0000000..a5ffc69 --- /dev/null +++ b/UI/PainterEngine/core/PX_Surface.c @@ -0,0 +1,174 @@ +#include "PX_Surface.h" + +px_bool PX_SurfaceCreate(px_memorypool *mp,px_uint width,px_uint height,px_surface *surface) +{ + px_void *p=MP_Malloc(mp,height*width*sizeof(px_color)); + if (p!=PX_NULL) + { + surface->height=height; + surface->width=width; + surface->surfaceBuffer=(px_color *)p; + surface->MP=mp; + surface->limit_left=0; + surface->limit_top=0; + surface->limit_right=width-1; + surface->limit_bottom=height-1; + PX_memdwordset(p,0,height*width); + return PX_TRUE; + } + return PX_FALSE; +} + +px_void PX_SurfaceFree(px_surface *psurface) +{ + if (psurface->surfaceBuffer==PX_NULL) + { + return; + } + MP_Free(psurface->MP,psurface->surfaceBuffer); + psurface->surfaceBuffer=PX_NULL; + psurface->MP=0; + psurface->height=0; + psurface->width=0; +} + + +px_int PX_SurfaceMemorySize(px_uint width,px_uint height) +{ + return width*height*sizeof(px_color); +} + + +PX_SurfaceLimitInfo PX_SurfaceGetLimit(px_surface *ps) +{ + PX_SurfaceLimitInfo info; + info.limit_bottom=ps->limit_bottom; + info.limit_left=ps->limit_left; + info.limit_right=ps->limit_right; + info.limit_top=ps->limit_top; + return info; +} + + +px_void PX_SurfaceSetLimitInfo(px_surface *ps,PX_SurfaceLimitInfo info) +{ + PX_SurfaceSetLimit(ps,info.limit_left,info.limit_top,info.limit_right,info.limit_bottom); +} + +px_void PX_SurfaceSetLimit(px_surface *ps,px_int limit_left,px_int limit_top,px_int limit_right,px_int limit_bottom) +{ + + + if (limit_left<0) + { + limit_left=0; + } + + if (limit_top<0) + { + limit_top=0; + } + + if (limit_right>ps->width-1) + { + limit_right=ps->width-1; + } + + + if (limit_bottom>ps->height-1) + { + limit_bottom=ps->height-1; + } + + ps->limit_left=limit_left; + ps->limit_right=limit_right; + ps->limit_top=limit_top; + ps->limit_bottom=limit_bottom; +} + + +px_void PX_SurfaceSetPixel(px_surface *psurface,px_int X,px_int Y,px_color color) +{ + if(X<=psurface->limit_right&&X>=psurface->limit_left&&Y<=psurface->limit_bottom&&Y>=psurface->limit_top) + { + psurface->surfaceBuffer[X+psurface->width*Y]=color; + } +} + +px_void PX_SurfaceDrawPixel(px_surface *psurface,px_int X,px_int Y,px_color COLOR) +{ + px_color c; + if (COLOR._argb.a==0) + { + return; + } + if(X<=psurface->limit_right&&X>=psurface->limit_left&&Y<=psurface->limit_bottom&&Y>=psurface->limit_top) + { + if(COLOR._argb.a==0xff) + { + psurface->surfaceBuffer[X+psurface->width*Y]=COLOR; + } + else + { + c=psurface->surfaceBuffer[X+psurface->width*Y]; + c._argb.r=(px_uchar)(((255-COLOR._argb.a)*c._argb.r+COLOR._argb.r*COLOR._argb.a)/255); + c._argb.g=(px_uchar)(((255-COLOR._argb.a)*c._argb.g+COLOR._argb.g*COLOR._argb.a)/255); + c._argb.b=(px_uchar)(((255-COLOR._argb.a)*c._argb.b+COLOR._argb.b*COLOR._argb.a)/255); + c._argb.a=255-(255-c._argb.a)*(255-COLOR._argb.a)/255; + psurface->surfaceBuffer[X+psurface->width*Y]=c; + } + } +} + +px_void PX_SurfaceClear(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color) +{ + px_int i,mid; + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + if (left<0) + { + left=0; + } + if (top<0) + { + top=0; + } + + if (left>psurface->width-1) + { + return; + } + + if (bottom<0) + { + return; + } + + if (right>psurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + bottom=psurface->height-1; + } + + + for (i=top;i<=bottom;i++) + { + PX_memdwordset(psurface->surfaceBuffer+i*psurface->width+left,color._argb.ucolor,right-left+1); + } + +} diff --git a/UI/PainterEngine/core/PX_Surface.h b/UI/PainterEngine/core/PX_Surface.h new file mode 100644 index 0000000..b462415 --- /dev/null +++ b/UI/PainterEngine/core/PX_Surface.h @@ -0,0 +1,36 @@ +#ifndef __PX_SURFACE_H +#define __PX_SURFACE_H +#include "PX_MemoryPool.h" + +typedef struct _PX_Surface +{ + px_memorypool *MP; + px_color *surfaceBuffer; + px_int height; + px_int width; + px_int limit_left; + px_int limit_top; + px_int limit_right; + px_int limit_bottom; +}px_surface; +#define PX_SURFACECOLOR(main_pSurface,X,Y) ((main_pSurface)->surfaceBuffer[(X)+(main_pSurface)->width*(Y)]) +#define PX_SurfaceGetPixel(main_pSurface,X,Y) PX_SURFACECOLOR(main_pSurface,X,Y) + +typedef struct +{ + px_int limit_left; + px_int limit_top; + px_int limit_right; + px_int limit_bottom; +}PX_SurfaceLimitInfo; + +PX_SurfaceLimitInfo PX_SurfaceGetLimit(px_surface *ps); +px_void PX_SurfaceSetLimitInfo(px_surface *ps,PX_SurfaceLimitInfo info); +px_void PX_SurfaceSetLimit(px_surface *ps,px_int limit_left,px_int limit_top,px_int limit_right,px_int limit_bottom); +px_void PX_SurfaceSetPixel(px_surface *ps,px_int x,px_int y,px_color color); +px_void PX_SurfaceDrawPixel(px_surface *ps,px_int x,px_int y,px_color color); +px_bool PX_SurfaceCreate(px_memorypool *mp,px_uint width,px_uint height,_OUT px_surface *surface); +px_void PX_SurfaceClear(px_surface *ps, px_int left, px_int top, px_int right, px_int bottom,px_color color); +px_void PX_SurfaceFree(px_surface *psurface); +px_int PX_SurfaceMemorySize(px_uint width,px_uint height); +#endif diff --git a/UI/PainterEngine/core/PX_TRaw.c b/UI/PainterEngine/core/PX_TRaw.c new file mode 100644 index 0000000..d627e3c --- /dev/null +++ b/UI/PainterEngine/core/PX_TRaw.c @@ -0,0 +1,103 @@ +#include "PX_TRaw.h" + +px_bool PX_TRawVerify(px_void *data,px_int size) +{ + PX_TRaw_Header *pHeader=(PX_TRaw_Header *)data; + if (sizeMagic[0]!='T'||pHeader->Magic[1]!='R'||pHeader->Magic[2]!='A'||pHeader->Magic[3]!='W') + { + return PX_FALSE; + } + + if (size-sizeof(PX_TRaw_Header)Height*pHeader->Width*sizeof(px_color)) + { + return PX_FALSE; + } + + return PX_TRUE; +} + +px_int PX_TRawGetWidth(px_void *data) +{ + PX_TRaw_Header *pHeader=(PX_TRaw_Header *)data; + return pHeader->Width; +} + +px_int PX_TRawGetHeight(px_void *data) +{ + PX_TRaw_Header *pHeader=(PX_TRaw_Header *)data; + return pHeader->Height; +} + +px_void PX_TRawRender(px_surface *psurface,px_void *data,px_int x,px_int y) +{ + px_int i,j; + px_int Height; + px_int Width; + px_color *pdataColor=(px_color *)((px_char *)data+sizeof(PX_TRaw_Header)); + if (x>psurface->width||y>psurface->height) + { + return; + } + + Height=PX_TRawGetHeight(data); + Width=PX_TRawGetWidth(data); + + if (Height>0&&Width>0) + { + if (x<-Width||y<-Height) + { + return; + } + } + else + { + return; + } + + for (i=0;iheight*psurface->width*sizeof(px_color)+sizeof(header); + *size=_outsize; + header.Magic[0]='T'; + header.Magic[1]='R'; + header.Magic[2]='A'; + header.Magic[3]='W'; + + header.Height=psurface->height; + header.Width=psurface->width; + + if (TRawBuffer) + { + PX_memcpy(TRawBuffer,&header,sizeof(header)); + PX_memcpy(TRawBuffer+sizeof(header),psurface->surfaceBuffer,psurface->height*psurface->width*sizeof(px_color)); + return PX_TRUE; + } + else + return PX_FALSE; +} + +px_uint PX_TRawGetSize(PX_TRaw_Header *header) +{ + return header->Height*header->Width*sizeof(px_color)+sizeof(PX_TRaw_Header); +} diff --git a/UI/PainterEngine/core/PX_TRaw.h b/UI/PainterEngine/core/PX_TRaw.h new file mode 100644 index 0000000..7f06edc --- /dev/null +++ b/UI/PainterEngine/core/PX_TRaw.h @@ -0,0 +1,19 @@ +#ifndef _PX_TRAW_H +#define _PX_TRAW_H + +#include "../core/PX_Surface.h" + +typedef struct _PX_TRaw_Header +{ + px_byte Magic[4];//TRAW 0x57415254 + px_int32 Width; + px_int32 Height; +}PX_TRaw_Header; + +px_bool PX_TRawVerify(px_void *data,px_int size); +px_int PX_TRawGetWidth(px_void *data); +px_int PX_TRawGetHeight(px_void *data); +px_uint PX_TRawGetSize(PX_TRaw_Header *header); +px_void PX_TRawRender(px_surface *psurface,px_void *data,px_int x,px_int y); +px_bool PX_TRawBuild(px_surface *psurface,px_byte *TRawBuffer,px_int *size); +#endif diff --git a/UI/PainterEngine/core/PX_Texture.c b/UI/PainterEngine/core/PX_Texture.c new file mode 100644 index 0000000..d4ed368 --- /dev/null +++ b/UI/PainterEngine/core/PX_Texture.c @@ -0,0 +1,2896 @@ +#include "PX_Texture.h" + +px_bool PX_TextureCreate(px_memorypool *mp,px_texture *tex,px_int width,px_int height) +{ + return PX_SurfaceCreate(mp,width,height,tex); +} + + +px_bool PX_TextureCreateFromMemory(px_memorypool *mp,px_void *data,px_int size,px_texture *tex) +{ + px_int width; + px_int height; + if (PX_BitmapVerify(data,size)) + { + width=PX_BitmapGetWidth(data); + height=PX_BitmapGetHeight(data); + if(PX_TextureCreate(mp,tex,width,height)) + { + PX_BitmapRender(tex,data,size,0,0); + return PX_TRUE; + } + else + { + return PX_FALSE; + } + + } + + if (PX_TRawVerify(data,size)) + { + width=PX_TRawGetWidth(data); + height=PX_TRawGetHeight(data); + if(PX_TextureCreate(mp,tex,width,height)) + { + PX_TRawRender(tex,data,0,0); + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + + //image-format not supported + return PX_FALSE; +} + +typedef struct +{ + px_surface *psurface; + px_texture *Server; + px_int x,y,top,bottom,left,right; + PX_ALIGN refPoint; + PX_TEXTURERENDER_BLEND *blend; +}PX_TEXTURERENDER_PARALLEL_DATA; + + +static px_int PX_TextureRenderParallel(px_void *parallel_data) +{ + PX_TEXTURERENDER_PARALLEL_DATA *param_data=(PX_TEXTURERENDER_PARALLEL_DATA *)parallel_data; + px_int i,j; + px_int bR,bG,bB,bA; + px_color clr; + + px_color *pdata=(px_color *)param_data->Server->surfaceBuffer; + if (param_data->blend) + { + for (j=param_data->top;j<=param_data->bottom;j++) + { + for (i=param_data->left;i<=param_data->right;i++) + { + clr=pdata[j*param_data->Server->width+i]; + bA=(px_int)(clr._argb.a*param_data->blend->alpha); + bR=(px_int)(clr._argb.r*param_data->blend->hdr_R); + bG=(px_int)(clr._argb.g*param_data->blend->hdr_G); + bB=(px_int)(clr._argb.b*param_data->blend->hdr_B); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(param_data->psurface,param_data->x+i,param_data->y+j,clr); + } + } + } + else + { + for (j=param_data->top;j<=param_data->bottom;j++) + { + for (i=param_data->left;i<=param_data->right;i++) + { + clr=pdata[j*param_data->Server->width+i]; + PX_SurfaceDrawPixel(param_data->psurface,param_data->x+i,param_data->y+j,clr); + } + } + } + return 0; +} + +px_void PX_TextureRender(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_int left,right,top,bottom,i,j; + px_int bR,bG,bB,bA; + px_color *pdata; + px_color clr; + + pdata=(px_color *)tex->surfaceBuffer; + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=tex->width; + break; + case PX_ALIGN_LEFTMID: + y-=tex->height/2; + break; + case PX_ALIGN_CENTER: + y-=tex->height/2; + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTMID: + y-=tex->height/2; + x-=tex->width; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=tex->height; + break; + case PX_ALIGN_MIDBOTTOM: + y-=tex->height; + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=tex->height; + x-=tex->width; + break; + } + + + if (x<-tex->width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-tex->height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=tex->width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=tex->height-1; + } + + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[j*tex->width+i]; + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[j*tex->width+i]; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + +} + + + +px_void PX_TextureCover(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint) +{ + px_int left,right,top,bottom,j; + + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=tex->width; + break; + case PX_ALIGN_LEFTMID: + y-=tex->height/2; + break; + case PX_ALIGN_CENTER: + y-=tex->height/2; + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTMID: + y-=tex->height/2; + x-=tex->width; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=tex->height; + break; + case PX_ALIGN_MIDBOTTOM: + y-=tex->height; + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=tex->height; + x-=tex->width; + break; + } + + + if (x<-tex->width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-tex->height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=tex->width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=tex->height-1; + } + + + for (j=top;j<=bottom;j++) + { + PX_memcpy(&psurface->surfaceBuffer[x+left+psurface->width*(y+j)],&tex->surfaceBuffer[tex->width*(j)+left],sizeof(px_color)*(right-left+1)); + } + + +} + +px_void PX_TextureGetVisibleRange(px_texture *ptexture,px_int *pLeft,px_int *pRight,px_int *pTop,px_int *pBottom) +{ + px_int x=0,y=0; + px_int left=ptexture->width-1,right=0,top=ptexture->height-1,bottom=0; + for (y=0;yheight-1;y++) + { + for (x=0;xwidth-1;x++) + { + if (PX_SurfaceGetPixel(ptexture,x,y)._argb.a) + { + if (xright) + { + right=x; + } + if (ybottom) + { + bottom=y; + } + } + } + } + *pLeft=left; + *pRight=right; + *pTop=top; + *pBottom=bottom; +} + +px_void PX_TextureRenderPixelShader(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TexturePixelShader shader,px_void *ptr) +{ + px_int left,right,top,bottom,i,j; + px_color *pdata; + px_color clr; + + pdata=(px_color *)tex->surfaceBuffer; + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=tex->width; + break; + case PX_ALIGN_LEFTMID: + y-=tex->height/2; + break; + case PX_ALIGN_CENTER: + y-=tex->height/2; + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTMID: + y-=tex->height/2; + x-=tex->width; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=tex->height; + break; + case PX_ALIGN_MIDBOTTOM: + y-=tex->height; + x-=tex->width/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=tex->height; + x-=tex->width; + break; + } + + + if (x<-tex->width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-tex->height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=tex->width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=tex->height-1; + } + + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[j*tex->width+i]; + shader(psurface,x+i,y+j,clr,ptr); + } + } +} + +px_void PX_TextureRenderRotation(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_int Angle) +{ + PX_TextureRenderRotation_sincos(psurface,tex,x,y,refPoint,blend,PX_sin_angle((px_float)Angle),PX_cos_angle((px_float)Angle)); +} + +px_void PX_TextureRenderRotation_vector(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_point p_vector) +{ + PX_TextureRenderRotation_sincos(psurface,tex,x,y,refPoint,blend,PX_Point_sin(p_vector),PX_Point_cos(p_vector)); +} + +px_void PX_TextureRenderRotation_sincos(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float sinx,px_float cosx) +{ + px_int newheight,newwidth,i,j,resHeight,resWidth; + px_point CornerPoint[4]; + px_matrix rotMat; + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_float invCosAgl,invSinAgl; + px_color sampleColor; + px_int left,right,top,bottom; + + + + resHeight=tex->height; + resWidth=tex->width; + + CornerPoint[0].x=-tex->width/2.f; + CornerPoint[0].y=-tex->height/2.f; + CornerPoint[0].z=0; + + CornerPoint[1].x=tex->width/2.f; + CornerPoint[1].y=-tex->height/2.f; + CornerPoint[1].z=0; + + CornerPoint[2].x=-tex->width/2.f; + CornerPoint[2].y=tex->height/2.f; + CornerPoint[2].z=0; + + CornerPoint[3].x=tex->width/2.f; + CornerPoint[3].y=tex->height/2.f; + CornerPoint[3].z=0; + + rotMat._11=cosx; rotMat._12=sinx; rotMat._13=0.0f; rotMat._14=0.0f; + rotMat._21=-sinx; rotMat._22=cosx; rotMat._23=0.0f; rotMat._24=0.0f; + rotMat._31=0.0f; rotMat._32=0.0f; rotMat._33=1.0f; rotMat._34=0.0f; + rotMat._41=0.0f; rotMat._42=0.0f; rotMat._43=0.0f; rotMat._44=1.0f; + + + CornerPoint[0]=PX_PointMulMatrix(CornerPoint[0],rotMat); + CornerPoint[1]=PX_PointMulMatrix(CornerPoint[1],rotMat); + CornerPoint[2]=PX_PointMulMatrix(CornerPoint[2],rotMat); + CornerPoint[3]=PX_PointMulMatrix(CornerPoint[3],rotMat); + + newheight=0; + newwidth=0; + for (i=0;i<4;i++) + { + if (CornerPoint[i].y>newheight) + { + newheight=(px_int)CornerPoint[i].y; + } + if (CornerPoint[i].x>newwidth) + { + newwidth=(px_int)CornerPoint[i].x; + } + } + newheight=PX_TRUNC(newheight*2+2); + newwidth=PX_TRUNC(newwidth*2+2); + + + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=newwidth/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=newwidth; + break; + case PX_ALIGN_LEFTMID: + y-=newheight/2; + break; + case PX_ALIGN_CENTER: + y-=newheight/2; + x-=newwidth/2; + break; + case PX_ALIGN_RIGHTMID: + y-=newheight/2; + x-=newwidth; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=newheight; + break; + case PX_ALIGN_MIDBOTTOM: + y-=newheight; + x-=newwidth/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=newheight; + x-=newwidth; + break; + } + + + if (x<-newwidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newheight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newwidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newwidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newheight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newheight-1; + } + + + + + + invCosAgl=cosx; + invSinAgl=-sinx; + + + for (j=top;jresWidth+0.5) + { + continue; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + continue; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + if (blend) + { + px_int bA,bR,bG,bB; + px_color clr=PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb); + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + + PX_SurfaceDrawPixel(psurface,i+x,j+y,clr); + } + else + { + PX_SurfaceDrawPixel(psurface,i+x,j+y,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + } + + } + } + return; +} + +px_void PX_TextureRenderMask(px_surface *psurface,px_texture *mask_tex,px_texture *map_tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_int left,right,top,bottom,i,j; + px_int bR,bG,bB,bA; + px_color *pmapdata,*pmaskdata; + px_color clr; + + pmaskdata=(px_color *)mask_tex->surfaceBuffer; + pmapdata=(px_color *)map_tex->surfaceBuffer; + + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=mask_tex->width/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=mask_tex->width; + break; + case PX_ALIGN_LEFTMID: + y-=mask_tex->height/2; + break; + case PX_ALIGN_CENTER: + y-=mask_tex->height/2; + x-=mask_tex->width/2; + break; + case PX_ALIGN_RIGHTMID: + y-=mask_tex->height/2; + x-=mask_tex->width; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=mask_tex->height; + break; + case PX_ALIGN_MIDBOTTOM: + y-=mask_tex->height; + x-=mask_tex->width/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=mask_tex->height; + x-=mask_tex->width; + break; + } + + if (mask_tex->width>map_tex->width) + { + if (x<-map_tex->width) + { + return; + } + } + else + { + if (x<-mask_tex->width) + { + return; + } + } + + if (x>psurface->width-1) + { + return; + } + if (mask_tex->height>map_tex->height) + { + if (y<-map_tex->height) + { + return; + } + } + else + { + if (y<-mask_tex->height) + { + return; + } + } + + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + if (mask_tex->width>map_tex->width) + { + if (x+mask_tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=mask_tex->width-1; + } + } + else + { + if (x+map_tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=map_tex->width-1; + } + } + + + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + if (mask_tex->height>map_tex->height) + { + if (y+mask_tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=mask_tex->height-1; + } + } + else + { + if (y+map_tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=map_tex->height-1; + } + } + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pmapdata[j*map_tex->width+i]; + clr._argb.a=1*clr._argb.a*pmaskdata[j*mask_tex->width+i]._argb.a/255; + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pmapdata[j*map_tex->width+i]; + clr._argb.a=1*clr._argb.a*pmaskdata[j*mask_tex->width+i]._argb.a/255; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + +} + + +px_bool PX_TextureCreateScale(px_memorypool *mp,px_texture *resTexture,px_int newWidth,px_int newHeight,px_texture *out) +{ + px_double SampleWidth=(px_double)(resTexture->width)/(newWidth); + px_double SampleHeight=(px_double)(resTexture->height)/(newHeight); + px_double SampleX,SampleY,SampleArea,u,v,cellw,cellh,mixa,mixr,mixg,mixb; + px_color *Dst,*Src=(px_color *)resTexture->surfaceBuffer; + px_color SampleColor,MixColor; + px_int xoft,yoft,horz,vcl; + + if (newWidth<0||newHeight<0) + { + return PX_FALSE; + } + if (!(newHeight&&newWidth)) + { + return PX_FALSE; + } + + if (!PX_TextureCreate(mp,out,newWidth,newHeight)) + { + return PX_FALSE; + } + + Dst=(px_color *)out->surfaceBuffer; + + SampleArea=SampleHeight*SampleWidth; + + for (yoft=0;yoftwidth&&vclheight) + SampleColor=PX_SURFACECOLOR(resTexture,horz,vcl); + else + SampleColor._argb.ucolor=0; + + mixa+=SampleColor._argb.a*cellh*cellw/SampleArea; + mixr+=SampleColor._argb.r*cellh*cellw/SampleArea; + mixg+=SampleColor._argb.g*cellh*cellw/SampleArea; + mixb+=SampleColor._argb.b*cellh*cellw/SampleArea; + + + vcl++; + v=(px_double)vcl; + } + horz++; + u=(px_double)horz; + } + mixa>255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + Dst[xoft+yoft*newWidth]=PX_COLOR((px_uchar)PX_APO(mixa),(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb);; + } + } + return PX_TRUE; +} + +px_bool PX_TextureCreateRotationRadian(px_memorypool *mp,px_texture *resTexture,px_float radian,px_texture *out) +{ + return PX_TextureCreateRotationAngle(mp,resTexture,(px_float)(radian*180/PX_PI),out); +} + +px_bool PX_TextureCreateRotationAngle(px_memorypool *mp,px_texture *resTexture,px_float Angle,px_texture *out) +{ + px_int height,width,i,j,resHeight,resWidth; + px_point CornerPoint[4]; + px_matrix rotMat; + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_float invCosAgl,invSinAgl; + px_color sampleColor; + + resHeight=resTexture->height; + resWidth=resTexture->width; + CornerPoint[0].x=-resTexture->width/2.f; + CornerPoint[0].y=-resTexture->height/2.f; + CornerPoint[0].z=0; + + CornerPoint[1].x=resTexture->width/2.f; + CornerPoint[1].y=-resTexture->height/2.f; + CornerPoint[1].z=0; + + CornerPoint[2].x=-resTexture->width/2.f; + CornerPoint[2].y=resTexture->height/2.f; + CornerPoint[2].z=0; + + CornerPoint[3].x=resTexture->width/2.f; + CornerPoint[3].y=resTexture->height/2.f; + CornerPoint[3].z=0; + + PX_MatrixRotateZ(&rotMat,Angle); + CornerPoint[0]=PX_PointMulMatrix(CornerPoint[0],rotMat); + CornerPoint[1]=PX_PointMulMatrix(CornerPoint[1],rotMat); + CornerPoint[2]=PX_PointMulMatrix(CornerPoint[2],rotMat); + CornerPoint[3]=PX_PointMulMatrix(CornerPoint[3],rotMat); + + height=0; + width=0; + for (i=0;i<4;i++) + { + if (CornerPoint[i].y>height) + { + height=(px_int)CornerPoint[i].y; + } + if (CornerPoint[i].x>width) + { + width=(px_int)CornerPoint[i].x; + } + } + height=PX_TRUNC(height*2+2); + width=PX_TRUNC(width*2+2); + if (!PX_TextureCreate(mp,out,width,height)) + { + return PX_FALSE; + } + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + for (j=0;jresWidth+0.5) + { + continue; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + continue; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + + PX_SurfaceSetPixel(out,i,j,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + + } + } + return PX_TRUE; +} + +px_bool PX_TextureRotationAngleToTexture(px_texture *resTexture,px_float Angle,px_texture *out) +{ + px_int height,width,i,j,resHeight,resWidth; + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_float invCosAgl,invSinAgl; + px_color sampleColor; + + resHeight=resTexture->height; + resWidth=resTexture->width; + + height=out->height; + width=out->width; + + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + for (j=0;jresWidth+0.5) + { + continue; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + continue; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + + PX_SurfaceSetPixel(out,i,j,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + + } + } + return PX_TRUE; +} + +px_void PX_TextureFree(px_texture *tex) +{ + PX_SurfaceFree(tex); +} + + +px_void PX_SurfaceRender(px_surface *psurface,px_surface *surface,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + PX_TextureRender(psurface,surface,x,y,refPoint,blend); +} + +px_void PX_SurfaceCover(px_surface *pdestSurface,px_surface *pResSurface,px_int x,px_int y,PX_ALIGN refPoint) +{ + PX_TextureCover(pdestSurface,pResSurface,x,y,refPoint); +} + +px_void PX_SurfaceSetRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color) +{ + px_int i,mid; + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + if (left<0) + { + left=0; + } + if (top<0) + { + top=0; + } + if (left>psurface->width-1) + { + return; + } + + if (bottom>psurface->height-1) + { + return; + } + + if (right>psurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + right=psurface->height-1; + } + + for (i=top;i<=bottom;i++) + { + PX_memdwordset(psurface->surfaceBuffer+i*psurface->width+left,color._argb.ucolor,right-left+1); + } +} + + + +px_void PX_TextureRenderEx(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float Angle) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color clr; + px_int bA,bR,bG,bB; + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + resHeight=resTexture->height; + resWidth=resTexture->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=newWidth; + break; + case PX_ALIGN_LEFTMID: + y-=newHeight/2; + break; + case PX_ALIGN_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=newHeight; + break; + case PX_ALIGN_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + ////////////////////////////////////////////////////////////////////////// + + + + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + clr=PX_SURFACECOLOR(resTexture,mapX,mapY); + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + + } + + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + PX_SurfaceDrawPixel(psurface,x+i,y+j,PX_SURFACECOLOR(resTexture,mapX,mapY)); + } + + } + } +} + +px_void PX_TextureRenderMaskEx(px_surface *psurface,px_texture *mask_tex,px_texture *map_tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float Angle) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + px_int bA,bB,bG,bR; + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color *pmapdata,*pmaskdata; + px_color clr; + + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + + pmaskdata=(px_color *)mask_tex->surfaceBuffer; + pmapdata=(px_color *)map_tex->surfaceBuffer; + + resHeight=mask_tex->height; + resWidth=mask_tex->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=newWidth; + break; + case PX_ALIGN_LEFTMID: + y-=newHeight/2; + break; + case PX_ALIGN_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=newHeight; + break; + case PX_ALIGN_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (newWidth>map_tex->width) + { + if (x+map_tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=map_tex->width-1; + } + } + else + { + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + } + + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (newHeight>map_tex->height) + { + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + } + else + { + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + } + + ////////////////////////////////////////////////////////////////////////// + + + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + clr=pmapdata[j*map_tex->width+i]; + clr._argb.a=1*clr._argb.a*pmaskdata[j*mask_tex->width+i]._argb.a/255; + + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + + } + + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + clr=pmapdata[j*map_tex->width+i]; + clr._argb.a=1*clr._argb.a*pmaskdata[j*mask_tex->width+i]._argb.a/255; + + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + + } + } + +} + + + +px_void PX_TextureFill(px_memorypool *mp,px_texture *ptexture,px_int x,px_int y,px_color test_color,px_color fill_color) +{ + typedef struct + { + px_int x,y; + }__PX_POINT; + px_vector pstack; + PX_VectorInitialize(mp,&pstack,sizeof(__PX_POINT),8); + + do + { + __PX_POINT pt; + pt.x=x; + pt.y=y; + PX_VectorPushback(&pstack,&pt); + } while (0); + + while (pstack.size) + { + __PX_POINT retPt=*PX_VECTORLAST(__PX_POINT,&pstack); + PX_VectorPop(&pstack); + + x=retPt.x; + y=retPt.y; + + //xo mark + while (x>0&&(PX_SurfaceGetPixel(ptexture,x-1,y)._argb.ucolor==test_color._argb.ucolor)) + { + x--; + } + + //up + if (y>0) + { + if (PX_SurfaceGetPixel(ptexture,x,y-1)._argb.ucolor==test_color._argb.ucolor) + { + __PX_POINT pt; + pt.x=x; + pt.y=y-1; + PX_VectorPushback(&pstack,&pt); + } + } + + //down + if (yheight-1) + { + if (PX_SurfaceGetPixel(ptexture,x,y+1)._argb.ucolor==test_color._argb.ucolor) + { + __PX_POINT pt; + pt.x=x; + pt.y=y+1; + PX_VectorPushback(&pstack,&pt); + } + } + + PX_SurfaceSetPixel(ptexture,x,y,fill_color); + x++; + + //left top + while (xwidth) + { + if (PX_SurfaceGetPixel(ptexture,x,y)._argb.ucolor!=test_color._argb.ucolor) + { + break; + } + + PX_SurfaceSetPixel(ptexture,x,y,fill_color); + + if (x>0) + { + //up + if (y>0) + { + if (PX_SurfaceGetPixel(ptexture,x-1,y-1)._argb.ucolor!=test_color._argb.ucolor&&PX_SurfaceGetPixel(ptexture,x,y-1)._argb.ucolor==test_color._argb.ucolor) + { + __PX_POINT pt; + pt.x=x; + pt.y=y-1; + PX_VectorPushback(&pstack,&pt); + } + } + + //down + if (yheight-1) + { + if (PX_SurfaceGetPixel(ptexture,x-1,y+1)._argb.ucolor!=test_color._argb.ucolor&&PX_SurfaceGetPixel(ptexture,x,y+1)._argb.ucolor==test_color._argb.ucolor) + { + __PX_POINT pt; + pt.x=x; + pt.y=y+1; + PX_VectorPushback(&pstack,&pt); + } + } + + } + else + { + //up + if (y>0) + { + if (PX_SurfaceGetPixel(ptexture,x,y-1)._argb.ucolor==test_color._argb.ucolor) + { + __PX_POINT pt; + pt.x=x; + pt.y=y-1; + PX_VectorPushback(&pstack,&pt); + } + } + + //down + if (yheight-1) + { + if (PX_SurfaceGetPixel(ptexture,x,y+1)._argb.ucolor==test_color._argb.ucolor) + { + __PX_POINT pt; + pt.x=x; + pt.y=y+1; + PX_VectorPushback(&pstack,&pt); + } + } + + } + x++; + } + } + +} + +px_void PX_TextureRegionRender(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,px_int oft_left,px_int oft_top,px_int oft_right,px_int oft_bottom,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_int left,right,top,bottom,i,j; + px_int bR,bG,bB,bA; + px_color *pdata; + px_color clr; + px_int width=oft_right-oft_left+1; + px_int height=oft_bottom-oft_top+1; + + pdata=(px_color *)resTexture->surfaceBuffer; + + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=width/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=width; + break; + case PX_ALIGN_LEFTMID: + y-=height/2; + break; + case PX_ALIGN_CENTER: + y-=height/2; + x-=width/2; + break; + case PX_ALIGN_RIGHTMID: + y-=height/2; + x-=width; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=height; + break; + case PX_ALIGN_MIDBOTTOM: + y-=height; + x-=width/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=height; + x-=width; + break; + } + + + if (x<-width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=height-1; + } + + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[(j+oft_top)*resTexture->width+i+oft_left]; + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[(j+oft_top)*resTexture->width+i+oft_left]; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } +} +px_void PX_TextureRegionCopy(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,px_int oft_left,px_int oft_top,px_int oft_right,px_int oft_bottom,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_int left,right,top,bottom,i,j; + px_int bR,bG,bB,bA; + px_color *pdata; + px_color clr; + px_int width=oft_right-oft_left+1; + px_int height=oft_bottom-oft_top+1; + + pdata=(px_color *)resTexture->surfaceBuffer; + + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=width/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=width; + break; + case PX_ALIGN_LEFTMID: + y-=height/2; + break; + case PX_ALIGN_CENTER: + y-=height/2; + x-=width/2; + break; + case PX_ALIGN_RIGHTMID: + y-=height/2; + x-=width; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=height; + break; + case PX_ALIGN_MIDBOTTOM: + y-=height; + x-=width/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=height; + x-=width; + break; + } + + + if (x<-width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=height-1; + } + + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[(j+oft_top)*resTexture->width+i+oft_left]; + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceSetPixel(psurface,x+i,y+j,clr); + } + } + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[(j+oft_top)*resTexture->width+i+oft_left]; + PX_SurfaceSetPixel(psurface,x+i,y+j,clr); + } + } + } +} + +px_bool PX_ShapeCreate(px_memorypool *mp,px_shape *shape,px_int width,px_int height) +{ + px_void *p=MP_Malloc(mp,height*width*sizeof(px_uchar)); + if (p!=PX_NULL) + { + shape->height=height; + shape->width=width; + shape->alpha=(px_uchar *)p; + shape->MP=mp; + PX_memset(p,0,height*width); + return PX_TRUE; + } + return PX_FALSE; +} + + + +px_bool PX_ShapeCreateFromTexture(px_memorypool *mp,px_shape *shape,px_texture *texture) +{ + px_int x,y; + px_void *p=MP_Malloc(mp,texture->height*texture->width*sizeof(px_uchar)); + if (p!=PX_NULL) + { + shape->height=texture->height; + shape->width=texture->width; + shape->alpha=(px_uchar *)p; + shape->MP=mp; + PX_memdwordset(p,0,texture->height*texture->width); + + //Map texture to shape + for (y=0;yheight;y++) + { + for (x=0;xwidth;x++) + { + shape->alpha[y*shape->width+x]=((px_color *)texture->surfaceBuffer)[y*texture->width+x]._argb.a; + } + } + return PX_TRUE; + } + return PX_FALSE; +} + +px_void PX_ShapeFree(px_shape *shape) +{ + MP_Free(shape->MP,shape->alpha); +} + +px_void PX_ShapeRender(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_ALIGN refPoint,px_color blendColor) +{ + px_int left,right,top,bottom,i,j; + px_uchar *pdata; + px_color clr; + + pdata=(px_uchar *)shape->alpha; + + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=shape->width/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=shape->width; + break; + case PX_ALIGN_LEFTMID: + y-=shape->height/2; + break; + case PX_ALIGN_CENTER: + y-=shape->height/2; + x-=shape->width/2; + break; + case PX_ALIGN_RIGHTMID: + y-=shape->height/2; + x-=shape->width; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=shape->height; + break; + case PX_ALIGN_MIDBOTTOM: + y-=shape->height; + x-=shape->width/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=shape->height; + x-=shape->width; + break; + } + + + if (x<-shape->width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-shape->height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+shape->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=shape->width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+shape->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=shape->height-1; + } + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + if (pdata[j*shape->width+i]!=0) + { + clr=blendColor; + clr._argb.a=1*clr._argb.a*pdata[j*shape->width+i]/255; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + + } + } + +} + + + +px_void PX_ShapeRenderEx(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_ALIGN refPoint,px_color blendColor,px_float scale,px_float Angle) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color clr; + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + resHeight=shape->height; + resWidth=shape->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=newWidth; + break; + case PX_ALIGN_LEFTMID: + y-=newHeight/2; + break; + case PX_ALIGN_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=newHeight; + break; + case PX_ALIGN_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + ////////////////////////////////////////////////////////////////////////// + + + + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + clr=blendColor; + clr._argb.a=1*clr._argb.a*shape->alpha[mapY*shape->width+mapX]/255; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + + } + +} + +px_bool PX_ShapeCreateFromMemory(px_memorypool *mp,px_void *data,px_int size,px_shape *shape) +{ + px_int width; + px_int height; + if (PX_BitmapVerify(data,size)) + { + return PX_FALSE; + } + + if (PX_TRawVerify(data,size)) + { + width=PX_TRawGetWidth(data); + height=PX_TRawGetHeight(data); + if(PX_ShapeCreate(mp,shape,width,height)) + { + px_int i,j; + px_color *pdataColor=(px_color *)((px_char *)data+sizeof(PX_TRaw_Header)); + + for (i=0;ialpha[width*i+j]=pdataColor[width*i+j]._argb.a; + } + } + } + else + { + return PX_FALSE; + } + } + + return PX_TRUE; +} + +px_void PX_ShapeRenderEx_sincos(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_ALIGN refPoint,px_color blendColor,px_float scale,px_float sinx,px_float cosx) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color clr; + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + resHeight=shape->height; + resWidth=shape->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=newWidth; + break; + case PX_ALIGN_LEFTMID: + y-=newHeight/2; + break; + case PX_ALIGN_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=newHeight; + break; + case PX_ALIGN_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + ////////////////////////////////////////////////////////////////////////// + + + + invCosAgl=cosx; + invSinAgl=sinx; + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + clr=blendColor; + clr._argb.a=1*clr._argb.a*shape->alpha[shape->width*mapY+mapX]/255; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + + } +} + +px_void PX_ShapeRenderEx_vector(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_ALIGN refPoint,px_color blendColor,px_float scale,px_point p_vector) +{ + PX_ShapeRenderEx_sincos(psurface,shape,x,y,refPoint,blendColor,scale,PX_Point_sin(p_vector),PX_Point_cos(p_vector)); +} + +px_void PX_TextureRenderEx_sincos(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float sinx,px_float cosx) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color clr; + px_int bA,bR,bG,bB; + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + resHeight=resTexture->height; + resWidth=resTexture->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=newWidth; + break; + case PX_ALIGN_LEFTMID: + y-=newHeight/2; + break; + case PX_ALIGN_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=newHeight; + break; + case PX_ALIGN_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + ////////////////////////////////////////////////////////////////////////// + + + + invCosAgl=cosx; + invSinAgl=-sinx; + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + clr=PX_SURFACECOLOR(resTexture,mapX,mapY); + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + + } + + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + PX_SurfaceDrawPixel(psurface,x+i,y+j,PX_SURFACECOLOR(resTexture,mapX,mapY)); + } + + } + } +} + + +px_void PX_TextureRenderEx_vector(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_point p_vector) +{ + PX_TextureRenderEx_sincos(psurface,resTexture,x,y,refPoint,blend,scale,PX_Point_sin(p_vector),PX_Point_cos(p_vector)); +} + + + +px_bool PX_TextureCopy(px_memorypool *mp,px_texture *restexture,px_texture *dest) +{ + if(!PX_TextureCreate(mp,dest,restexture->width,restexture->height)) return PX_FALSE; + PX_memcpy(dest->surfaceBuffer,restexture->surfaceBuffer,restexture->width*restexture->height*sizeof(px_color)); + return PX_TRUE; +} + diff --git a/UI/PainterEngine/core/PX_Texture.h b/UI/PainterEngine/core/PX_Texture.h new file mode 100644 index 0000000..cc0b5d5 --- /dev/null +++ b/UI/PainterEngine/core/PX_Texture.h @@ -0,0 +1,69 @@ +#ifndef __PX_TEXTURE_H +#define __PX_TEXTURE_H + +#include "PX_Vector.h" +#include "PX_Surface.h" +#include "PX_Bitmap.h" +#include "PX_TRaw.h" + +typedef px_surface px_texture; + + +typedef struct +{ + float hdr_R; + float hdr_G; + float hdr_B; + float alpha; +}PX_TEXTURERENDER_BLEND; + +typedef struct +{ + px_uchar *alpha; + px_int height; + px_int width; + px_memorypool *MP; +}px_shape; + + +px_bool PX_TextureCreate(px_memorypool *mp,px_texture *tex,px_int width,px_int height); +px_bool PX_TextureCreateFromMemory(px_memorypool *mp,px_void *data,px_int size,px_texture *tex); +px_bool PX_TextureCopy(px_memorypool *mp,px_texture *restexture,px_texture *dest); +px_bool PX_TextureCreateScale(px_memorypool *mp,px_texture *resTexture,px_int newWidth,px_int newHeight,px_texture *out); +px_void PX_TextureRender(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_TextureCover(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint); +px_void PX_TextureGetVisibleRange(px_texture *ptexture,px_int *pLeft,px_int *pRight,px_int *pTop,px_int *pBottom); +typedef px_void (*PX_TexturePixelShader)(px_surface *psurface,px_int x,px_int y,px_color clr,px_void *ptr); +px_void PX_TextureRenderPixelShader(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TexturePixelShader shader,px_void *ptr); +px_void PX_TextureRenderRotation(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_int Angle); +px_void PX_TextureRenderRotation_vector(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_point p_vector); +px_void PX_TextureRenderRotation_sincos(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float sin,px_float cos); + +px_void PX_TextureRenderEx(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float Angle); +px_void PX_TextureRenderEx_sincos(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float sin,px_float cos); +px_void PX_TextureRenderEx_vector(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_point p_vector); +px_void PX_TextureRenderMask(px_surface *psurface,px_texture *mask_tex,px_texture *map_tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_TextureRenderMaskEx(px_surface *psurface,px_texture *mask_tex,px_texture *map_tex,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float Angle); +px_void PX_TextureFill(px_memorypool *mp,px_texture *ptexture,px_int x,px_int y,px_color test_color,px_color fill_color); +px_void PX_TextureRegionRender(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,px_int left,px_int top,px_int right,px_int bottom,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_TextureRegionCopy(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,px_int oft_left,px_int oft_top,px_int oft_right,px_int oft_bottom,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_SurfaceRender(px_surface *pdestSurface,px_surface *pResSurface,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_SurfaceCover(px_surface *pdestSurface,px_surface *pResSurface,px_int x,px_int y,PX_ALIGN refPoint); +px_void PX_SurfaceSetRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color); +px_bool PX_TextureCreateRotationAngle(px_memorypool *mp,px_texture *resTexture,px_float Angle,px_texture *out); +px_bool PX_TextureRotationAngleToTexture(px_texture *resTexture,px_float Angle,px_texture *out); +px_bool PX_TextureCreateRotationRadian(px_memorypool *mp,px_texture *resTexture,px_float Angle,px_texture *out); +px_void PX_TextureFree(px_texture *tex); + +px_bool PX_ShapeCreate(px_memorypool *mp,px_shape *shape,px_int width,px_int height); +px_bool PX_ShapeCreateFromTexture(px_memorypool *mp,px_shape *shape,px_texture *texture); +px_bool PX_ShapeCreateFromMemory(px_memorypool *mp,px_void *data,px_int size,px_shape *shape); +px_void PX_ShapeRender(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_ALIGN refPoint,px_color blendColor); +px_void PX_ShapeRenderEx(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_ALIGN refPoint,px_color blendColor,px_float scale,px_float Angle); +px_void PX_ShapeRenderEx_sincos(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_ALIGN refPoint,px_color blendColor,px_float scale,px_float sinx,px_float cosx); +px_void PX_ShapeRenderEx_vector(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_ALIGN refPoint,px_color blendcolor,px_float scale,px_point p_vector); +px_void PX_ShapeFree(px_shape *shape); + + + +#endif diff --git a/UI/PainterEngine/core/PX_TriangleCross.c b/UI/PainterEngine/core/PX_TriangleCross.c new file mode 100644 index 0000000..a7d0014 --- /dev/null +++ b/UI/PainterEngine/core/PX_TriangleCross.c @@ -0,0 +1,453 @@ +#include "PX_Typedef.h" + + +static void px_triangle_copy_point( px_point2D* p, px_point f ) +{ + p->x = f.x; + p->y = f.y; +} + + +static px_float px_triangleget_vector4_det( px_point v1, px_point v2, px_point v3, px_point v4 ) +{ + px_float a[3][3]; + + a[0][0] = v1.x - v4.x; + a[1][0] = v2.x - v4.x; + a[2][0] = v3.x - v4.x; + + a[0][1] = v1.y - v4.y; + a[1][1] = v2.y - v4.y; + a[2][1] = v3.y - v4.y; + + a[0][2] = v1.z - v4.z; + a[1][2] = v2.z - v4.z; + a[2][2] = v3.z - v4.z; + + + return a[0][0] * a[1][1] * a[2][2] + + a[0][1] * a[1][2] * a[2][0] + + a[0][2] * a[1][0] * a[2][1] + - a[0][2] * a[1][1] * a[2][0] + - a[0][1] * a[1][0] * a[2][2] + - a[0][0] * a[1][2] * a[2][1]; +} + + +static px_double px_triangle_direction( px_point2D p1, px_point2D p2, px_point2D p ){ + return ( p.x - p1.x ) * ( p2.y - p1.y ) - ( p2.x - p1.x ) * ( p.y - p1.y ) ; +} + + +static px_int px_triangle_on_segment( px_point2D p1, px_point2D p2, px_point2D p ){ + px_double max = p1.x > p2.x ? p1.x : p2.x ; + px_double min = p1.x < p2.x ? p1.x : p2.x ; + px_double max1 = p1.y > p2.y ? p1.y : p2.y ; + px_double min1 = p1.y < p2.y ? p1.y : p2.y ; + if ( p.x >= min && p.x <= max && p.y >= min1 && p.y <= max1 ) + { + return 1; + } + else + { + return 0; + } +} + + +static px_int px_triangle_segments_intersert( px_point2D p1, px_point2D p2, px_point2D p3, px_point2D p4 ){ + px_double d1, d2, d3, d4; + d1 = px_triangle_direction( p3, p4, p1 ); + d2 = px_triangle_direction( p3, p4, p2 ); + d3 = px_triangle_direction( p1, p2, p3 ); + d4 = px_triangle_direction( p1, p2, p4 ); + if ( d1 * d2 < 0 && d3 * d4 < 0 ) + { + return 1; + } + else if ( d1 == 0 && px_triangle_on_segment( p3, p4, p1 ) == 1 ) + { + return 1; + } + else if ( d2 == 0 && px_triangle_on_segment( p3, p4, p2 ) == 1 ) + { + return 1; + } + else if ( d3 == 0 && px_triangle_on_segment( p1, p2, p3 ) == 1 ) + { + return 1; + } + else if ( d4 == 0 && px_triangle_on_segment( p1, p2, p4 ) == 1 ) + { + return 1; + } + return 0; +} + +static px_bool px_triangle_line_triangle_intersert_inSamePlane( px_triangle* tri, px_point f1, px_point f2 ) +{ + px_point2D p1, p2, p3, p4; + + px_triangle_copy_point( &p1, f1 ); + + px_triangle_copy_point( &p2, f2 ); + + px_triangle_copy_point( &p3, tri->Vertex_1 ); + + px_triangle_copy_point( &p4, tri->Vertex_2 ); + + if ( px_triangle_segments_intersert( p1, p2, p3, p4 ) ) + { + return PX_TRUE; + } + + px_triangle_copy_point( &p3, tri->Vertex_2 ); + + px_triangle_copy_point( &p4, tri->Vertex_3 ); + + if ( px_triangle_segments_intersert( p1, p2, p3, p4 ) ) + { + return PX_TRUE; + } + + px_triangle_copy_point( &p3, tri->Vertex_1 ); + + px_triangle_copy_point( &p4, tri->Vertex_3 ); + + if ( px_triangle_segments_intersert( p1, p2, p3, p4 ) ) + { + return PX_TRUE; + } + + return PX_FALSE; +} + + +static void px_triangle_get_central_point(px_point *centralPoint,px_triangle* tri) +{ + centralPoint->x=(tri->Vertex_1.x+tri->Vertex_2.x+tri->Vertex_3.x)/3; + + centralPoint->y=(tri->Vertex_1.y+tri->Vertex_2.y+tri->Vertex_3.y)/3; + + centralPoint->z=(tri->Vertex_1.z+tri->Vertex_2.z+tri->Vertex_3.z)/3; +} + + + +static px_point px_triangle_get_vector_diff( const px_point a, const px_point b ) +{ + px_point result; + + result.x = b.x - a.x ; + + result.y = b.y - a.y; + + result.z = b.z - a.z; + return result; +} + +static px_bool px_triangle_is_point_within_triangle( px_triangle* tri, px_point pt ) +{ + px_point v0=px_triangle_get_vector_diff( tri->Vertex_1, tri->Vertex_3 ); + px_point v1=px_triangle_get_vector_diff( tri->Vertex_1, tri->Vertex_2 ); + px_point v2=px_triangle_get_vector_diff( tri->Vertex_1, pt ); + + px_float dot00 = PX_PointDot( v0, v0 ) ; + px_float dot01 = PX_PointDot( v0, v1 ) ; + px_float dot02 = PX_PointDot( v0, v2 ) ; + px_float dot11 = PX_PointDot( v1, v1 ) ; + px_float dot12 = PX_PointDot( v1, v2 ) ; + px_float inverDeno = 1 / ( dot00* dot11 - dot01* dot01 ) ; + px_float u = ( dot11* dot02 - dot01* dot12 ) * inverDeno ; + px_float v; + if ( u < 0 || u > 1 ) // if u out of range, return directly + { + return PX_FALSE ; + } + v = ( dot00* dot12 - dot01* dot02 ) * inverDeno ; + if ( v < 0 || v > 1 ) // if v out of range, return directly + { + return PX_FALSE ; + } + return u + v <= 1 ; +} + + +static px_bool px_triangle_intersert_inSamePlane( px_triangle* tri1, px_triangle* tri2 ) +{ + if ( px_triangle_line_triangle_intersert_inSamePlane( tri2, tri1->Vertex_1, tri1->Vertex_2 ) ) + { + return PX_TRUE; + } + else if ( px_triangle_line_triangle_intersert_inSamePlane( tri2, tri1->Vertex_2, tri1->Vertex_3 ) ) + { + return PX_TRUE; + } + else if ( px_triangle_line_triangle_intersert_inSamePlane( tri2, tri1->Vertex_1, tri1->Vertex_3 ) ) + { + return PX_TRUE; + } + else + { + px_point centralPoint1,centralPoint2; + + px_triangle_get_central_point(¢ralPoint1,tri1); + + px_triangle_get_central_point(¢ralPoint2,tri2); + + if(px_triangle_is_point_within_triangle( tri2, centralPoint1 ) || px_triangle_is_point_within_triangle( tri1, centralPoint2 ) ) + { + return PX_TRUE; + } + + return PX_FALSE; + } +} + +px_bool PX_TriangleIsCross( px_triangle* tri1, px_triangle* tri2 ) +{ + px_float p1_tri2_vertex1 = px_triangleget_vector4_det( tri1->Vertex_1, tri1->Vertex_2, tri1->Vertex_3, tri2->Vertex_1 ); + + px_float p1_tri2_vertex2 = px_triangleget_vector4_det( tri1->Vertex_1, tri1->Vertex_2, tri1->Vertex_3, tri2->Vertex_2 ); + + px_float p1_tri2_vertex3 = px_triangleget_vector4_det( tri1->Vertex_1, tri1->Vertex_2, tri1->Vertex_3, tri2->Vertex_3 ); + + + px_float p2_tri1_vertex1; + + px_float p2_tri1_vertex2; + + px_float p2_tri1_vertex3; + + px_point tri1_a , tri1_b , tri1_c , tri2_a , tri2_b, tri2_c ; + + px_point m; + px_float im; + + + if ( p1_tri2_vertex1 > 0 && p1_tri2_vertex2 > 0 && p1_tri2_vertex3 > 0 ) + { + return PX_FALSE; + } + + if ( p1_tri2_vertex1 < 0 && p1_tri2_vertex2 < 0 && p1_tri2_vertex3 < 0 ) + { + return PX_FALSE; + } + + + if ( p1_tri2_vertex1 == 0 && p1_tri2_vertex2 == 0 && p1_tri2_vertex3 == 0 ) + { + if ( px_triangle_intersert_inSamePlane( tri1, tri2 ) ) + { + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + + + if ( p1_tri2_vertex1 == 0 && p1_tri2_vertex2 * p1_tri2_vertex3 > 0 ) + { + if ( px_triangle_is_point_within_triangle( tri1, tri2->Vertex_1 ) ) + { + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + else if ( p1_tri2_vertex2 == 0 && p1_tri2_vertex1 * p1_tri2_vertex3 > 0 ) + { + if ( px_triangle_is_point_within_triangle( tri1, tri2->Vertex_2 ) ) + { + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + else if ( p1_tri2_vertex3 == 0 && p1_tri2_vertex1 * p1_tri2_vertex2 > 0 ) + { + if ( px_triangle_is_point_within_triangle( tri1, tri2->Vertex_3 ) ) + { + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + + + + p2_tri1_vertex1 = px_triangleget_vector4_det( tri2->Vertex_1, tri2->Vertex_2, tri2->Vertex_3, tri1->Vertex_1 ); + + p2_tri1_vertex2 = px_triangleget_vector4_det( tri2->Vertex_1, tri2->Vertex_2, tri2->Vertex_3, tri1->Vertex_2 ); + + p2_tri1_vertex3 = px_triangleget_vector4_det( tri2->Vertex_1, tri2->Vertex_2, tri2->Vertex_3, tri1->Vertex_3 ); + + + if ( p2_tri1_vertex1 > 0 && p2_tri1_vertex2 > 0 && p2_tri1_vertex3 > 0 ) + { + return PX_FALSE; + } + + if ( p2_tri1_vertex1 < 0 && p2_tri1_vertex2 < 0 && p2_tri1_vertex3 < 0 ) + { + return PX_FALSE; + } + + + if ( p2_tri1_vertex1 == 0 && p2_tri1_vertex2 * p2_tri1_vertex3 > 0 ) + { + if ( px_triangle_is_point_within_triangle( tri2, tri1->Vertex_1 ) ) + { + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + + if ( p2_tri1_vertex2 == 0 && p2_tri1_vertex1 * p2_tri1_vertex3 > 0 ) + { + if ( px_triangle_is_point_within_triangle( tri2, tri1->Vertex_2 ) ) + { + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + + if ( p2_tri1_vertex3 == 0 && p2_tri1_vertex1 * p2_tri1_vertex2 > 0 ) + { + if ( px_triangle_is_point_within_triangle( tri2, tri1->Vertex_3 ) ) + { + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + + + + tri1_a = tri1->Vertex_1, tri1_b = tri1->Vertex_2, tri1_c = tri1->Vertex_3 + , tri2_a = tri2->Vertex_1, tri2_b = tri2->Vertex_2, tri2_c = tri2->Vertex_3; + + + if ( p2_tri1_vertex2 * p2_tri1_vertex3 >= 0 && p2_tri1_vertex1 != 0 ) + { + if ( p2_tri1_vertex1 < 0 ) + { + m = tri2_b; + tri2_b = tri2_c; + tri2_c = m; + + im = p1_tri2_vertex2; + p1_tri2_vertex2 = p1_tri2_vertex3; + p1_tri2_vertex3 = im; + } + } + else if ( p2_tri1_vertex1 * p2_tri1_vertex3 >= 0 && p2_tri1_vertex2 != 0 ) + { + m = tri1_a; + tri1_a = tri1_b; + tri1_b = tri1_c; + tri1_c = m; + + if ( p2_tri1_vertex2 < 0 ) + { + m = tri2_b; + tri2_b = tri2_c; + tri2_c = m; + + im = p1_tri2_vertex2; + p1_tri2_vertex2 = p1_tri2_vertex3; + p1_tri2_vertex3 = im; + } + } + else if ( p2_tri1_vertex1 * p2_tri1_vertex2 >= 0 && p2_tri1_vertex3 != 0 ) + { + m = tri1_a; + + tri1_a = tri1_c; + + tri1_c = tri1_b; + + tri1_b = m; + + if ( p2_tri1_vertex3 < 0 ) + { + m = tri2_b; + tri2_b = tri2_c; + tri2_c = m; + + im = p1_tri2_vertex2; + p1_tri2_vertex2 = p1_tri2_vertex3; + p1_tri2_vertex3 = im; + } + } + + if ( p1_tri2_vertex2 * p1_tri2_vertex3 >= 0 && p1_tri2_vertex1 != 0 ) + { + if ( p1_tri2_vertex1 < 0 ) + { + m = tri1_b; + tri1_b = tri1_c; + tri1_c = m; + } + } + else if ( p1_tri2_vertex1 * p1_tri2_vertex3 >= 0 && p1_tri2_vertex2 != 0 ) + { + m = tri2_a; + + tri2_a = tri2_b; + + tri2_b = tri2_c; + + tri2_c = m; + + if ( p1_tri2_vertex2 < 0 ) + { + m = tri1_b; + tri1_b = tri1_c; + tri1_c = m; + } + } + else if ( p1_tri2_vertex1 * p1_tri2_vertex2 >= 0 && p1_tri2_vertex3 != 0 ) + { + m = tri2_a; + + tri2_a = tri2_c; + + tri2_c = tri2_b; + + tri2_b = m; + + if ( p1_tri2_vertex3 < 0 ) + { + m = tri1_b; + tri1_b = tri1_c; + tri1_c = m; + } + } + + if ( px_triangleget_vector4_det( tri1_a, tri1_b, tri2_a, tri2_b ) <= 0 && px_triangleget_vector4_det( tri1_a, tri1_c, tri2_c, tri2_a ) <= 0 ) + { + return PX_TRUE; + } + else + { + return PX_TRUE; + } +} \ No newline at end of file diff --git a/UI/PainterEngine/core/PX_Tuning.c b/UI/PainterEngine/core/PX_Tuning.c new file mode 100644 index 0000000..986e2df --- /dev/null +++ b/UI/PainterEngine/core/PX_Tuning.c @@ -0,0 +1,713 @@ +#include "PX_Tuning.h" + + +px_void PX_TuningInitialize(px_memorypool *mp,PX_Tuning *tuning,px_int SampleRate,px_double pitchShift,px_double timeShift,px_double window[],px_double filter[],px_double fix[],PX_TUNING_WINDOW_SIZE windowsize) +{ + px_int i; + px_int N; + + switch (windowsize) + { + case PX_TUNING_WINDOW_SIZE_8: + N=8; + break; + case PX_TUNING_WINDOW_SIZE_128: + N=128; + break; + case PX_TUNING_WINDOW_SIZE_256: + N=256; + break; + case PX_TUNING_WINDOW_SIZE_512: + N=512; + break; + case PX_TUNING_WINDOW_SIZE_1024: + N=1024; + break; + case PX_TUNING_WINDOW_SIZE_2048: + N=2048; + break; + default: + PX_ASSERT(); + return; + } + + tuning->mp=mp; + tuning->pitchShift=pitchShift; + tuning->timeScale=timeShift; + tuning->N=N; + tuning->remainCount=0; + tuning->previousInterpolationOffset=0; + tuning->previousInterpolationValue=0; + tuning->spectrumInterpolationOffset=2; + tuning->spectrumInterpolationFactor=1/(pitchShift*timeShift); + tuning->interpolationFactor=pitchShift; + tuning->ZCR_Low=0; + tuning->ZCR_High=1; + tuning->amp_threshold=0; + tuning->SampleRate=SampleRate; + PX_memset(tuning->lastphase,0,sizeof(tuning->lastphase)); + PX_memset(tuning->previous_frame,0,sizeof(tuning->previous_frame)); + PX_memset(tuning->half_previous_out,0,sizeof(tuning->half_previous_out)); + PX_memset(tuning->remian,0,sizeof(tuning->remian)); + + if(filter) + { + PX_memcpy(tuning->filter,filter,sizeof(px_double)*N); + } + else + { + for (i=0;ifilter[i]=1; + } + } + + if(window) + { + PX_memcpy(tuning->window,window,sizeof(px_double)*N); + } + else + { + PX_WindowFunction_sinc(tuning->window,N); + } + + if(fix) + { + PX_memcpy(tuning->fix,fix,sizeof(px_double)*N); + } + else + { + PX_memset(tuning->fix,0,sizeof(px_double)*PX_TUNING_MAX_FRAME_SIZE); + } + + +} + +px_void PX_TuningSortSpectrum(PX_Tuning *tuning,px_complex AnalysisFrame[]) +{ + px_int i; + px_double amplitude=0,phase=0; + PX_FFT(AnalysisFrame,AnalysisFrame,tuning->N); + + //re,im to amplitude,phase + + //DC sort + if (AnalysisFrame[0].re>0) + { + AnalysisFrame[0].im=0; + } + else + { + AnalysisFrame[0].re=PX_ABS(AnalysisFrame[0].re); + AnalysisFrame[0].im=PX_PI; + } + + //others + for (i=1;iN;i++) + { + amplitude=PX_sqrtd(AnalysisFrame[i].re*AnalysisFrame[i].re+AnalysisFrame[i].im*AnalysisFrame[i].im); + phase=PX_atan2(AnalysisFrame[i].im,AnalysisFrame[i].re); + AnalysisFrame[i].re=amplitude; + AnalysisFrame[i].im=phase; + } + + if (AnalysisFrame[tuning->N/2].re>0) + { + AnalysisFrame[tuning->N/2].im=0; + } + else + { + AnalysisFrame[tuning->N/2].re=PX_ABS(AnalysisFrame[0].re); + AnalysisFrame[tuning->N/2].im=PX_PI; + } +} + + + +px_int PX_TuningFilter(PX_Tuning *tuning,_IN px_double frame_unit[],px_int Size,_OUT px_double out_unit[]) +{ + px_int oft=0,i=0,remainCount=0,outSize=0,resampleAllocSize=0; + px_double AmpAvg; + px_double ZCR; + px_int blockCount; + px_int blocksize; + px_complex *AnalysisFrame; + px_complex *Frame0; + px_complex *Frame1; + px_complex *Frame2; + + px_double *resampledFrame; + + blocksize=tuning->N/2; + AnalysisFrame=(px_complex *)MP_Malloc(tuning->mp,tuning->N*sizeof(px_complex)); + + Frame0=(px_complex *)MP_Malloc(tuning->mp,tuning->N*sizeof(px_complex)); + Frame1=(px_complex *)MP_Malloc(tuning->mp,tuning->N*sizeof(px_complex)); + Frame2=(px_complex *)MP_Malloc(tuning->mp,tuning->N*sizeof(px_complex)); + + if (tuning->pitchShift<1) + { + resampleAllocSize+=(px_int)(Size/tuning->pitchShift); + } + else + { + resampleAllocSize+=(Size); + } + + resampleAllocSize+=tuning->remainCount; + resampleAllocSize+=blocksize*3; + resampleAllocSize+=(px_int)((1-PX_FRAC(tuning->previousInterpolationOffset))/tuning->interpolationFactor); + resampleAllocSize+=1; + resampleAllocSize*=sizeof(px_double); + resampledFrame=(px_double *)MP_Malloc(tuning->mp,resampleAllocSize); + + //copy previous + PX_memcpy(resampledFrame+oft,tuning->previous_frame,sizeof(px_double)*blocksize*3); + oft+=blocksize*3; + + //copy remain + PX_memcpy(resampledFrame+oft,tuning->remian,sizeof(px_double)*tuning->remainCount); + oft+=tuning->remainCount; + + ZCR=PX_ZeroCrossingRate(frame_unit,Size); + AmpAvg=0; + for (i=0;iZCR_Low||ZCR>tuning->ZCR_High||AmpAvgamp_threshold) + { + for (i=0;ipreviousInterpolationOffset+=tuning->interpolationFactor; + + if (tuning->previousInterpolationOffset>Size) + { + tuning->previousInterpolationOffset-=tuning->interpolationFactor; + tuning->previousInterpolationOffset=tuning->previousInterpolationOffset-Size; + break; + } + + if (oft>PX_TUNING_MAX_EXECUTE_SIZE-1) + { + break; + } + + index=(px_int)tuning->previousInterpolationOffset; + + if (index) + { + d1=frame_unit[index-1]; + } + else + { + d1=tuning->previousInterpolationValue; + } + + d2=frame_unit[index]; + + fraction=tuning->previousInterpolationOffset-(px_int)tuning->previousInterpolationOffset; + + dm=d1+fraction*(d2-d1); + + resampledFrame[oft]=dm; + + oft++; + } + } + + + tuning->previousInterpolationValue=frame_unit[Size-1]; + + + //spectrum + blockCount=oft/blocksize; + remainCount=oft%blocksize; + + //save remain + PX_memcpy(tuning->remian,resampledFrame+oft-remainCount,remainCount*sizeof(px_double)); + tuning->remainCount=remainCount; + + while (PX_TRUE) + { + px_double d1=0,d2=0,dm,fraction=0; + px_int index; + px_double unitMaxAmp=0; + + if (tuning->spectrumInterpolationOffset>=blockCount-1) + { + PX_memcpy(tuning->previous_frame,resampledFrame+(blockCount-3)*blocksize,blocksize*3*sizeof(px_double)); + tuning->spectrumInterpolationOffset=tuning->spectrumInterpolationOffset+3-blockCount; + break; + } + + index=(px_int)tuning->spectrumInterpolationOffset; + + //frame0 + + for (i=0;iN;i++) + { + AnalysisFrame[i].re=*(resampledFrame+(index-2)*blocksize+i); + //apply window + AnalysisFrame[i].re*=tuning->window[i]; + AnalysisFrame[i].im=0; + } + + PX_TuningSortSpectrum(tuning,AnalysisFrame); + PX_memcpy(Frame0,AnalysisFrame,tuning->N*sizeof(px_complex)); + + //frame1 + + for (i=0;iN;i++) + { + AnalysisFrame[i].re=*(resampledFrame+(index-1)*blocksize+i); + //apply window + AnalysisFrame[i].re*=tuning->window[i]; + AnalysisFrame[i].im=0; + } + + PX_TuningSortSpectrum(tuning,AnalysisFrame); + PX_memcpy(Frame1,AnalysisFrame,tuning->N*sizeof(px_complex)); + + //frame2 + for (i=0;iN;i++) + { + AnalysisFrame[i].re=*(resampledFrame+(index)*blocksize+i); + //apply window + AnalysisFrame[i].re*=tuning->window[i]; + AnalysisFrame[i].im=0; + } + + PX_TuningSortSpectrum(tuning,AnalysisFrame); + PX_memcpy(Frame2,AnalysisFrame,tuning->N*sizeof(px_complex)); + + + //instantaneous frequency + for (i=0;i<=tuning->N/2;i++) + { + Frame2[i].im-=Frame1[i].im; + if (Frame2[i].im>PX_PI) + { + Frame2[i].im-=PX_PI*2; + } + else if(Frame2[i].im<-PX_PI) + { + Frame2[i].im+=PX_PI*2; + } + + Frame1[i].im-=Frame0[i].im; + + if (Frame1[i].im>PX_PI) + { + Frame1[i].im-=PX_PI*2; + } + else if(Frame1[i].im<-PX_PI) + { + Frame1[i].im+=PX_PI*2; + } + } + + fraction=tuning->spectrumInterpolationOffset-(px_int)tuning->spectrumInterpolationOffset; + + for (i=0;i<=tuning->N/2;i++) + { + px_double distance; + + //amplitude + d1=Frame1[i].re; + d2=Frame2[i].re; + dm=d1+fraction*(d2-d1); + AnalysisFrame[i].re=dm; + + //phase + d1=Frame1[i].im; + d2=Frame2[i].im; + + distance=d2-d1; + + if (distance<-PX_PI) + { + d2+=PX_PI*2; + } + else if (distance>PX_PI) + { + d2-=PX_PI*2; + } + + + dm=d1+fraction*(d2-d1); + dm=tuning->lastphase[i]+dm; + + if (dm>PX_PI) + { + dm-=PX_PI*2; + } + else if(dm<-PX_PI) + { + dm+=PX_PI*2; + } + + + //rebuild signal + AnalysisFrame[i].im=dm; + + //update last phase + tuning->lastphase[i]=dm; + } + + AmpAvg=0; + + for (i=0;i<=tuning->N/2;i++) + { + AmpAvg+=AnalysisFrame[i].re; + } + + AmpAvg/=(tuning->N/2+1); + + + + + //filter & fix + for (i=0;i<=tuning->N/2;i++) + { + px_double amp,phase; + amp=AnalysisFrame[i].re; + phase=AnalysisFrame[i].im; + + //filter + amp*=tuning->filter[i]; + amp+=(tuning->fix[i]*AmpAvg); + + + if (amp<0) + { + amp=0; + } + + //amp,phase->re,im + AnalysisFrame[i].re=amp*PX_cosd(phase); + AnalysisFrame[i].im=amp*PX_sind(phase); + } + + + AnalysisFrame[0].im=0; + AnalysisFrame[tuning->N/2].im=0; + PX_FT_Symmetry(AnalysisFrame,AnalysisFrame,tuning->N); + PX_IFFT(AnalysisFrame,AnalysisFrame,tuning->N); + + for (i=0;iwindow[i]+tuning->half_previous_out[i]*tuning->window[i+blocksize]; + outSize++; + tuning->half_previous_out[i]=AnalysisFrame[i+tuning->N/2].re; + } + + tuning->spectrumInterpolationOffset+=tuning->spectrumInterpolationFactor; + } + + MP_Free(tuning->mp,Frame0); + MP_Free(tuning->mp,resampledFrame); + MP_Free(tuning->mp,Frame1); + MP_Free(tuning->mp,Frame2); + MP_Free(tuning->mp,AnalysisFrame); + return outSize; +} + +px_void PX_TuningTimeScale(px_double timescale,px_double in[],px_int count,px_memory *out) +{ + px_int i,index,blockcount,blocksize; + px_double d1,d2,dm,fraction; + px_double amplitude,phase,lastphase[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_double lastwindow[PX_TUNING_DEFAULT_FRAME_SIZE/2]; + px_complex Frame0[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_complex Frame1[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_complex Frame2[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_complex AnalysisFrame[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_double window[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_double step=0; + px_double offset=0;; + + PX_memset(lastphase,0,sizeof(lastphase)); + PX_memset(lastwindow,0,sizeof(lastwindow)); + PX_memset(Frame0,0,sizeof(Frame0)); + PX_memset(Frame1,0,sizeof(Frame1)); + PX_memset(Frame2,0,sizeof(Frame2)); + PX_memset(AnalysisFrame,0,sizeof(AnalysisFrame)); + + PX_WindowFunction_sinc(window,PX_TUNING_DEFAULT_FRAME_SIZE); + + + + step=1/timescale; + offset=2.0; + blocksize=PX_TUNING_DEFAULT_FRAME_SIZE/2; + blockcount=count/blocksize; + + while (PX_TRUE) + { + index=(px_int)offset; + if (index>=blockcount-1) + { + break; + } + + //Frame 0 + for (i=0;iamplitude phase + if (Frame0[0].re>=0) + { + Frame0[0].im=0; + } + else + { + Frame0[0].re=-Frame0[0].re; + Frame0[0].im=PX_PI; + } + + for (i=1;i=0) + { + Frame0[i].im=0; + } + else + { + Frame0[i].re=-Frame0[i].re; + Frame0[i].im=PX_PI; + } + + + + + Frame1[0].im=0; + if (Frame1[0].re>=0) + { + Frame1[0].im=0; + } + else + { + Frame1[0].re=-Frame1[0].re; + Frame1[0].im=PX_PI; + } + + for (i=1;i=0) + { + Frame1[i].im=0; + } + else + { + Frame1[i].re=-Frame1[i].re; + Frame1[i].im=PX_PI; + } + + + + Frame2[0].im=0; + if (Frame2[0].re>=0) + { + Frame2[0].im=0; + } + else + { + Frame2[0].re=-Frame2[0].re; + Frame2[0].im=PX_PI; + } + + for (i=1;i=0) + { + Frame2[i].im=0; + } + else + { + Frame2[i].re=-Frame2[i].re; + Frame2[i].im=PX_PI; + } + + //Instantaneous Frequency + for (i=0;i<=blocksize;i++) + { + Frame2[i].im-=Frame1[i].im; + if (Frame2[i].im<-PX_PI) + { + Frame2[i].im+=PX_PI*2; + } + else if (Frame2[i].im>PX_PI) + { + Frame2[i].im-=PX_PI*2; + } + + Frame1[i].im-=Frame0[i].im; + if (Frame1[i].im<-PX_PI) + { + Frame1[i].im+=PX_PI*2; + } + else if (Frame1[i].im>PX_PI) + { + Frame1[i].im-=PX_PI*2; + } + } + + fraction=PX_FRAC(offset); + + for (i=0;i<=blocksize;i++) + { + px_double distance; + px_double amp,phase; + + //amplitude + d1=Frame1[i].re; + d2=Frame2[i].re; + dm=d1+fraction*(d2-d1); + AnalysisFrame[i].re=dm; + + //phase + d1=Frame1[i].im; + d2=Frame2[i].im; + + distance=d2-d1; + + if (distance<-PX_PI) + { + d2+=PX_PI*2; + } + else if (distance>PX_PI) + { + d2-=PX_PI*2; + } + + + dm=d1+fraction*(d2-d1); + dm=lastphase[i]+dm; + + if (dm>PX_PI) + { + dm-=PX_PI*2; + } + else if(dm<-PX_PI) + { + dm+=PX_PI*2; + } + + + //rebuild signal + AnalysisFrame[i].im=dm; + + //update last phase + lastphase[i]=dm; + + amp=AnalysisFrame[i].re; + phase=AnalysisFrame[i].im; + + + //amplitude phase->real imaginary + AnalysisFrame[i].re=amp*PX_cosd(phase); + AnalysisFrame[i].im=amp*PX_sind(phase); + + } + AnalysisFrame[0].im=0; + AnalysisFrame[blocksize].im=0; + PX_FT_Symmetry(AnalysisFrame,AnalysisFrame,PX_TUNING_DEFAULT_FRAME_SIZE); + + PX_IFFT(AnalysisFrame,AnalysisFrame,PX_TUNING_DEFAULT_FRAME_SIZE); + + for (i=0;i=0.999999) + { + val=0.999999; + } + PX_MemoryCat(out,&val,sizeof(px_double)); + } + + offset+=step; + } + +} + +px_void PX_TuningSetPitchShift(PX_Tuning *tuning,px_double pitchShift) +{ + tuning->pitchShift=pitchShift; + tuning->spectrumInterpolationFactor=1/(pitchShift*tuning->timeScale); + tuning->interpolationFactor=pitchShift; +} + +px_void PX_TuningSetTimeScale(PX_Tuning *tuning,px_double TimeScale) +{ + tuning->timeScale=TimeScale; +} + +px_void PX_TuningSetFilter(PX_Tuning *tuning,px_double filter[]) +{ + PX_memcpy(tuning->filter,filter,sizeof(px_double)*tuning->N); +} + +px_void PX_TuningSetFix(PX_Tuning *tuning,px_double fix[]) +{ + PX_memcpy(tuning->fix,fix,sizeof(px_double)*tuning->N); +} + +px_void PX_TuningSetZCR(PX_Tuning *tuning,px_double low,px_double high) +{ + tuning->ZCR_Low=low; + tuning->ZCR_High=high; +} diff --git a/UI/PainterEngine/core/PX_Tuning.h b/UI/PainterEngine/core/PX_Tuning.h new file mode 100644 index 0000000..59e68e8 --- /dev/null +++ b/UI/PainterEngine/core/PX_Tuning.h @@ -0,0 +1,52 @@ +#ifndef PX_TUNING +#define PX_TUNING + +#include "../core/PX_Core.h" + +#define PX_TUNING_MAX_EXECUTE_SIZE 8192 +#define PX_TUNING_DEFAULT_FRAME_SIZE 1024 +#define PX_TUNING_MAX_FRAME_SIZE 2048 + + +typedef struct +{ + px_memorypool *mp; + px_double previous_frame[PX_TUNING_MAX_FRAME_SIZE/2*3]; + px_double half_previous_out[PX_TUNING_MAX_FRAME_SIZE/2]; + px_double filter[PX_TUNING_MAX_FRAME_SIZE]; + px_double window[PX_TUNING_MAX_FRAME_SIZE]; + px_double fix[PX_TUNING_MAX_FRAME_SIZE]; + px_double remian[PX_TUNING_MAX_EXECUTE_SIZE]; + px_int SampleRate; + px_int remainCount; + px_double pitchShift,timeScale; + px_double previousInterpolationValue; + px_double previousInterpolationOffset; + px_double spectrumInterpolationOffset; + px_double spectrumInterpolationFactor; + px_double interpolationFactor; + px_double ZCR_Low,ZCR_High; + px_double amp_threshold; + px_double lastphase[PX_TUNING_MAX_FRAME_SIZE]; + px_int N; +}PX_Tuning; + +typedef enum +{ + PX_TUNING_WINDOW_SIZE_8, + PX_TUNING_WINDOW_SIZE_128, + PX_TUNING_WINDOW_SIZE_256, + PX_TUNING_WINDOW_SIZE_512, + PX_TUNING_WINDOW_SIZE_1024, + PX_TUNING_WINDOW_SIZE_2048, +}PX_TUNING_WINDOW_SIZE; + +px_void PX_TuningInitialize(px_memorypool *mp,PX_Tuning *tuning,px_int SampleRate,px_double pitchShift,px_double timeShift,px_double window[],px_double filter[],px_double fix[],PX_TUNING_WINDOW_SIZE windowsize); +px_int PX_TuningFilter(PX_Tuning *tuning,_IN px_double frame_unit[],px_int Size,_OUT px_double out_unit[]); +px_void PX_TuningTimeScale(px_double timescale,px_double in[],px_int count,px_memory *out); +px_void PX_TuningSetPitchShift(PX_Tuning *tuning,px_double pitchShift); +px_void PX_TuningSetTimeScale(PX_Tuning *tuning,px_double TimeScale); +px_void PX_TuningSetFilter(PX_Tuning *tuning,px_double filter[]); +px_void PX_TuningSetFix(PX_Tuning *tuning,px_double fix[]); +px_void PX_TuningSetZCR(PX_Tuning *tuning,px_double low,px_double high); +#endif diff --git a/UI/PainterEngine/core/PX_Typedef.c b/UI/PainterEngine/core/PX_Typedef.c new file mode 100644 index 0000000..f7ee1e3 --- /dev/null +++ b/UI/PainterEngine/core/PX_Typedef.c @@ -0,0 +1,4431 @@ +#include "PX_Typedef.h" + +static px_bool PX_isBigEndianCPU() +{ + union{ + px_dword i; + unsigned char s[4]; + }c; + c.i = 0x12345678; + return (0x12 == c.s[0]); + +} + +px_uint PX_htoi(const px_char hex_str[]) +{ + px_char ch; + px_uint iret=0; + while((ch=*hex_str++)!=0) + { + iret=(iret<<4)|px_hex_to_dex_table[ch]; + } + return iret; +} + + +px_int PX_atoi(const px_char s[]) +{ + px_int i,n,sign=1; + for(i=0;s[i]==' ';i++); + if(s[i]=='+'||s[i]=='-') + { + sign=(s[i]=='-')?-1:1; + i++; + } + for(n=0;s[i]>='0'&&s[i]<='9';i++) + n=10*n+(s[i]-'0'); + return sign *n; +} + + +px_float PX_atof(const px_char fstr[]) +{ + px_double temp=10; + px_bool ispnum=PX_TRUE; + px_double ans=0; + px_bool be=PX_FALSE; + if(*fstr=='-') + { + ispnum=PX_FALSE; + fstr++; + } + else if(*fstr=='+') + { + fstr++; + } + + while(*fstr!='\0') + { + if(*fstr=='.'){ fstr++;break;} + if(*fstr=='e'||*fstr=='E'){ fstr++;be=PX_TRUE;break;} + ans=ans*10+(*fstr-'0'); + fstr++; + } + if (be) + { + int e=PX_atoi(fstr); + float e10=1; + if (e>0) + { + while (e) + { + e10*=10; + e--; + } + } + else + { + while(e) + { + e10/=10; + e++; + } + } + ans*=e10; + } + else + { + while(*fstr!='\0') + { + ans=ans+(*fstr-'0')/temp; + temp*=10; + fstr++; + } + } + + if(ispnum) return (px_float)ans; + else return (px_float)ans*(-1); +} + + +PX_RETURN_STRING PX_ftos(px_float f, px_int precision) +{ + PX_RETURN_STRING str; + PX_ftoa(f,str.data,sizeof(str.data),precision); + return str; +} + + +PX_RETURN_STRING PX_itos(px_int num,px_int radix) +{ + PX_RETURN_STRING str; + PX_itoa(num,str.data,sizeof(str.data),radix); + return str; +} + + +px_void PX_AscToWord(const px_char *asc,px_word *u16) +{ + while(*asc) + { + *u16=*asc; + u16++; + asc++; + + } + *u16=0; +} + +px_int PX_ftoa(px_float f, char *outbuf, px_int maxlen, px_int precision) +{ + px_int i_value; + px_int f_value; + px_int shl=10; + px_int len; + px_int zero_oft=0; + if (maxlen==0) + { + return 0; + } + shl=PX_pow_ii(shl,precision); + i_value=(px_int)f; + f_value=(px_int)PX_ABS(shl*(f-(px_int)f)); + if (i_value==0&&f<0) + { + outbuf[0]='-'; + PX_itoa(i_value,outbuf+1,maxlen-1,10); + } + else + { + PX_itoa(i_value,outbuf,maxlen,10); + } + + len=PX_strlen(outbuf); + + if (precision==0) + { + return len; + } + + if (len>maxlen-3) + { + return len; + } + outbuf[len]='.'; + outbuf[len+1]='\0'; + + while (f_value> 8)&0x00FF00FF); + return (val << 16)|(val >> 16); +} + +px_dword PX_SwapEndian(px_dword val) +{ + val = ((val << 8)&0xFF00FF00) | ((val >> 8)&0x00FF00FF); + return (val << 16)|(val >> 16); +} + +static px_int64 PX_i64SwapEndian(px_int64 val) +{ + px_int32 u32_host_h, u32_host_l; + px_int64 u64_net; + u32_host_l = val & 0xffffffff; + u32_host_h = (val >> 32) & 0xffffffff; + + u64_net = PX_i32SwapEndian(u32_host_l); + u64_net = ( u64_net << 32 ) | PX_i32SwapEndian(u32_host_h); + return u64_net; +} + + + +px_float PX_sqrt( px_float number ) +{ + px_int32 i; + px_float x2, y; + const px_float threehalfs = 1.5F; + x2 = number * 0.5F; + y = number; + i = * ( px_int32 * ) &y; + + if (PX_isBigEndianCPU()) + { + i=PX_i32SwapEndian(i); + } + + i = 0x5f375a86 - ( i >> 1 ); + y = * ( px_float * ) &i; + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + return number*y; +} + +//0x5fe6ec85e7de30da + +px_double PX_sqrtd( px_double number ) +{ + px_int64 i; + px_double x2, y; + const px_double threehalfs = 1.5; + x2 = number * 0.5; + y = number; + i = * ( px_int64 * ) &y; + + if (PX_isBigEndianCPU()) + { + i=PX_i64SwapEndian(i); + } + + i = 0x5fe6ec85e7de30da - ( i / 2 ); + y = * ( px_double * ) &i; + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + return number*y; +} + +px_float PX_SqrtRec( px_float number ) +{ + px_int i; + px_float x2, y; + const px_float threehalfs = 1.5F; + + x2 = number * 0.5F; + y = number; + i = * ( px_int * ) &y; + if (PX_isBigEndianCPU()) + { + i=PX_i32SwapEndian(i); + } + i = 0x5f375a86 - ( i >> 1 ); + y = * ( px_float * ) &i; + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + return y; +} + +px_double PX_fast_exp(px_double x) { + x = 1.0 + x / (65536); + x *= x; x *= x; x *= x; x *= x; + x *= x; x *= x; x *= x; x *= x; + x *= x; x *= x; x *= x; x *= x; + x *= x; x *= x; x *= x; x *= x; + return x; +} + +px_double PX_exp(px_double x) +{ + return PX_pow_dd(PX_e,x); +} + +px_double PX_tanh(px_double x) +{ + px_double ex,eix; + ex=PX_exp(x); + eix=1/ex; + return (ex-eix)/(ex+eix); +} + + +px_double PX_sigmoid(px_double x) +{ + px_double eix; + eix=PX_exp(-x); + return 1/(1+eix); +} + +px_double PX_ReLU(px_double x) +{ + return x<=0?0:x; +} + +px_double PX_sind(px_double x) +{ + px_double it; + px_double term; + px_double result; + + it=x/(2*PX_PI); + x=x-(2*PX_PI)*PX_TRUNC(it); + + term=x; + result=0; + + result+=term; + term*=(-x*x)/(2*3); + result+=term; + term*=(-x*x)/(4*5); + result+=term; + term*=(-x*x)/(6*7); + result+=term; + term*=(-x*x)/(8*9); + result+=term; + term*=(-x*x)/(10*11); + result+=term; + term*=(-x*x)/(12*13); + result+=term; + term*=(-x*x)/(14*15); + result+=term; + term*=(-x*x)/(16*17); + result+=term; + term*=(-x*x)/(18*19); + result+=term; + term*=(-x*x)/(20*21); + result+=term; + term*=(-x*x)/(22*23); + result+=term; + term*=(-x*x)/(24*25); + result+=term; + term*=(-x*x)/(26*27); + result+=term; + term*=(-x*x)/(28*29); + result+=term; + term*=(-x*x)/(30*31); + result+=term; + term*=(-x*x)/(32*33); + return result; + +} + +px_double PX_cosd(px_double radian) +{ + return PX_sind((PX_PI/2-radian)); +} + +px_float PX_sin_radian(px_float radian) +{ + return (px_float)PX_sind(radian); +} + + +px_float PX_cos_radian(px_float radian) +{ + return PX_sin_radian((px_float)(PX_PI/2-radian)); +} + +px_float PX_tan_radian(px_float radian) +{ + return PX_sin_radian(radian)/PX_cos_radian(radian); +} + +px_float PX_sin_angle(px_float angle) +{ + angle-=((px_int)angle/360)*360; + return (px_float)PX_sin_radian((angle*0.0174532925f)); +} +px_float PX_cos_angle(px_float angle) +{ + angle-=((px_int)angle/360)*360; + return PX_cos_radian((angle*0.0174532925f)); +} + + +px_float PX_tan_angle(px_float angle) +{ + return PX_sin_angle(angle)/PX_cos_angle(angle); +} + +px_float PX_Point_sin(px_point v) +{ + return v.y/PX_sqrt(v.x*v.x+v.y*v.y); +} + + +px_float PX_Point_cos(px_point v) +{ + return v.x/PX_sqrt(v.x*v.x+v.y*v.y); +} + +px_void PX_BufferToHexString(px_byte data[],px_int size,px_char hex_str[]) +{ + px_int i; + hex_str[0]=0; + for (i=0;i0) + { + return PX_atan(y/x);; + } + else if (y >= 0 && x < 0) + { + return PX_atan(y/x) + PX_PI; + } + else if (y < 0 && x < 0) + { + return PX_atan(y/x) - PX_PI; + } + else if (y > 0 && x == 0) + { + return PX_PI / 2; + } + else if (y < 0 && x == 0) + { + return -1 * PX_PI / 2; + } + else + { + return 0; + } + +} + +px_double PX_asin(px_double x) +{ + return PX_atan2 (x, PX_sqrtd (1.0 - x * x)); +} + +px_double PX_acos(px_double x) +{ + return PX_atan2 (PX_sqrtd (1.0 - x * x), x); +} + +px_stringformat PX_STRINGFORMAT_INT(px_int _i) +{ + px_stringformat fmt; + fmt.type=PX_STRINGFORMAT_TYPE_INT; + fmt._int=_i; + return fmt; +} + + +px_stringformat PX_STRINGFORMAT_FLOAT(px_float _f) +{ + px_stringformat fmt; + fmt.type=PX_STRINGFORMAT_TYPE_FLOAT; + fmt._float=_f; + return fmt; +} + + +px_stringformat PX_STRINGFORMAT_STRING(const px_char *_s) +{ + px_stringformat fmt; + fmt.type=PX_STRINGFORMAT_TYPE_STRING; + fmt._pstring=_s; + return fmt; +} + + +px_int PX_sprintf8(px_char *_out_str,px_int str_size,const px_char fmt[], px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7, px_stringformat _8) +{ + px_int length=0; + const px_char *p=PX_NULL; + PX_RETURN_STRING tret; + px_stringformat pstringfmt; + px_int precision=3; + + if (!_out_str||!str_size) + { + for (p = fmt;*p; p++) + { + if(*p != '%') { + length++; + continue; + } + switch(*(p+1)) + { + case '1': pstringfmt=_1; break; + case '2': pstringfmt=_2; break; + case '3': pstringfmt=_3; break; + case '4': pstringfmt=_4; break; + case '5': pstringfmt=_5; break; + case '6': pstringfmt=_6; break; + case '7': pstringfmt=_7; break; + case '8': pstringfmt=_8; break; + default: + length++; + continue; + } + + if (*(p+2)=='.'&&PX_charIsNumeric(*(p+3))) + { + precision=*(p+3)-'0'; + p+=3; + } + else + { + p++; + } + + switch (pstringfmt.type) + { + case PX_STRINGFORMAT_TYPE_INT: + length+=PX_strlen(PX_itos(pstringfmt._int,10).data); + break; + case PX_STRINGFORMAT_TYPE_FLOAT: + length+=PX_strlen(PX_ftos(pstringfmt._float,precision).data); + break; + case PX_STRINGFORMAT_TYPE_STRING: + length+=PX_strlen(pstringfmt._pstring); + break; + default: + return 0; + } + + } + return length; + } + PX_memset(_out_str,0,str_size); + for (p = fmt;*p; p++) + { + if(*p != '%') { + _out_str[length]=*p; + length++; + continue; + } + switch(*(p+1)) + { + case '1': pstringfmt=_1; break; + case '2': pstringfmt=_2; break; + case '3': pstringfmt=_3; break; + case '4': pstringfmt=_4; break; + case '5': pstringfmt=_5; break; + case '6': pstringfmt=_6; break; + case '7': pstringfmt=_7; break; + case '8': pstringfmt=_8; break; + default: + _out_str[length]=*p; + length++; + continue; + } + + if (*(p+2)=='.'&&PX_charIsNumeric(*(p+3))) + { + precision=*(p+3)-'0'; + p+=3; + } + else + { + p++; + } + + switch (pstringfmt.type) + { + case PX_STRINGFORMAT_TYPE_INT: + tret=PX_itos(pstringfmt._int,10); + if(length+PX_strlen(tret.data)m[0][0]=0;Mat->m[0][1]=0;Mat->m[0][2]=0;Mat->m[0][3]=0; + Mat->m[1][0]=0;Mat->m[1][1]=0;Mat->m[1][2]=0;Mat->m[1][3]=0; + Mat->m[2][0]=0;Mat->m[2][1]=0;Mat->m[2][2]=0;Mat->m[2][3]=0; + Mat->m[3][0]=0;Mat->m[3][1]=0;Mat->m[3][2]=0;Mat->m[3][3]=0; +} + +void PX_MatrixIdentity(px_matrix *Mat) +{ + Mat->_11=1.0f; Mat->_12=0.0f; Mat->_13=0.0f; Mat->_14=0.0f; + Mat->_21=0.0f; Mat->_22=1.0f; Mat->_23=0.0f; Mat->_24=0.0f; + Mat->_31=0.0f; Mat->_32=0.0f; Mat->_33=1.0f; Mat->_34=0.0f; + Mat->_41=0.0f; Mat->_42=0.0f; Mat->_43=0.0f; Mat->_44=1.0f; +} + +px_matrix PX_MatrixMultiply(px_matrix Mat1,px_matrix Mat2) +{ + px_matrix ptmat; + ptmat.m[0][0]=Mat1.m[0][0]*Mat2.m[0][0]/**/+Mat1.m[0][1]*Mat2.m[1][0]/**/+Mat1.m[0][2]*Mat2.m[2][0]/**/+Mat1.m[0][3]*Mat2.m[3][0]; + ptmat.m[0][1]=Mat1.m[0][0]*Mat2.m[0][1]/**/+Mat1.m[0][1]*Mat2.m[1][1]/**/+Mat1.m[0][2]*Mat2.m[2][1]/**/+Mat1.m[0][3]*Mat2.m[3][1]; + ptmat.m[0][2]=Mat1.m[0][0]*Mat2.m[0][2]/**/+Mat1.m[0][1]*Mat2.m[1][2]/**/+Mat1.m[0][2]*Mat2.m[2][2]/**/+Mat1.m[0][3]*Mat2.m[3][2]; + ptmat.m[0][3]=Mat1.m[0][0]*Mat2.m[0][3]/**/+Mat1.m[0][1]*Mat2.m[1][3]/**/+Mat1.m[0][2]*Mat2.m[2][3]/**/+Mat1.m[0][3]*Mat2.m[3][3]; + + ptmat.m[1][0]=Mat1.m[1][0]*Mat2.m[0][0]/**/+Mat1.m[1][1]*Mat2.m[1][0]/**/+Mat1.m[1][2]*Mat2.m[2][0]/**/+Mat1.m[1][3]*Mat2.m[3][0]; + ptmat.m[1][1]=Mat1.m[1][0]*Mat2.m[0][1]/**/+Mat1.m[1][1]*Mat2.m[1][1]/**/+Mat1.m[1][2]*Mat2.m[2][1]/**/+Mat1.m[1][3]*Mat2.m[3][1]; + ptmat.m[1][2]=Mat1.m[1][0]*Mat2.m[0][2]/**/+Mat1.m[1][1]*Mat2.m[1][2]/**/+Mat1.m[1][2]*Mat2.m[2][2]/**/+Mat1.m[1][3]*Mat2.m[3][2]; + ptmat.m[1][3]=Mat1.m[1][0]*Mat2.m[0][3]/**/+Mat1.m[1][1]*Mat2.m[1][3]/**/+Mat1.m[1][2]*Mat2.m[2][3]/**/+Mat1.m[1][3]*Mat2.m[3][3]; + + ptmat.m[2][0]=Mat1.m[2][0]*Mat2.m[0][0]/**/+Mat1.m[2][1]*Mat2.m[1][0]/**/+Mat1.m[2][2]*Mat2.m[2][0]/**/+Mat1.m[2][3]*Mat2.m[3][0]; + ptmat.m[2][1]=Mat1.m[2][0]*Mat2.m[0][1]/**/+Mat1.m[2][1]*Mat2.m[1][1]/**/+Mat1.m[2][2]*Mat2.m[2][1]/**/+Mat1.m[2][3]*Mat2.m[3][1]; + ptmat.m[2][2]=Mat1.m[2][0]*Mat2.m[0][2]/**/+Mat1.m[2][1]*Mat2.m[1][2]/**/+Mat1.m[2][2]*Mat2.m[2][2]/**/+Mat1.m[2][3]*Mat2.m[3][2]; + ptmat.m[2][3]=Mat1.m[2][0]*Mat2.m[0][3]/**/+Mat1.m[2][1]*Mat2.m[1][3]/**/+Mat1.m[2][2]*Mat2.m[2][3]/**/+Mat1.m[2][3]*Mat2.m[3][3]; + + ptmat.m[3][0]=Mat1.m[3][0]*Mat2.m[0][0]/**/+Mat1.m[3][1]*Mat2.m[1][0]/**/+Mat1.m[3][2]*Mat2.m[2][0]/**/+Mat1.m[3][3]*Mat2.m[3][0]; + ptmat.m[3][1]=Mat1.m[3][0]*Mat2.m[0][1]/**/+Mat1.m[3][1]*Mat2.m[1][1]/**/+Mat1.m[3][2]*Mat2.m[2][1]/**/+Mat1.m[3][3]*Mat2.m[3][1]; + ptmat.m[3][2]=Mat1.m[3][0]*Mat2.m[0][2]/**/+Mat1.m[3][1]*Mat2.m[1][2]/**/+Mat1.m[3][2]*Mat2.m[2][2]/**/+Mat1.m[3][3]*Mat2.m[3][2]; + ptmat.m[3][3]=Mat1.m[3][0]*Mat2.m[0][3]/**/+Mat1.m[3][1]*Mat2.m[1][3]/**/+Mat1.m[3][2]*Mat2.m[2][3]/**/+Mat1.m[3][3]*Mat2.m[3][3]; + return ptmat; +} + +px_matrix PX_MatrixAdd(px_matrix Mat1,px_matrix Mat2) +{ + px_matrix ptmat; + ptmat._11=Mat1._11+Mat2._11;ptmat._12=Mat1._12+Mat2._12;ptmat._13=Mat1._13+Mat2._13;ptmat._14=Mat1._14+Mat2._14; + ptmat._21=Mat1._21+Mat2._21;ptmat._22=Mat1._22+Mat2._22;ptmat._23=Mat1._23+Mat2._23;ptmat._24=Mat1._24+Mat2._24; + ptmat._31=Mat1._31+Mat2._31;ptmat._32=Mat1._32+Mat2._32;ptmat._33=Mat1._33+Mat2._33;ptmat._34=Mat1._34+Mat2._34; + ptmat._41=Mat1._41+Mat2._41;ptmat._42=Mat1._42+Mat2._42;ptmat._43=Mat1._43+Mat2._43;ptmat._44=Mat1._44+Mat2._44; + return ptmat; +} + +px_matrix PX_MatrixSub(px_matrix Mat1,px_matrix Mat2) +{ + px_matrix ptmat; + ptmat._11=Mat1._11-Mat2._11;ptmat._12=Mat1._12-Mat2._12;ptmat._13=Mat1._13-Mat2._13;ptmat._14=Mat1._14-Mat2._14; + ptmat._21=Mat1._21-Mat2._21;ptmat._22=Mat1._22-Mat2._22;ptmat._23=Mat1._23-Mat2._23;ptmat._24=Mat1._24-Mat2._24; + ptmat._31=Mat1._31-Mat2._31;ptmat._32=Mat1._32-Mat2._32;ptmat._33=Mat1._33-Mat2._33;ptmat._34=Mat1._34-Mat2._34; + ptmat._41=Mat1._41-Mat2._41;ptmat._42=Mat1._42-Mat2._42;ptmat._43=Mat1._43-Mat2._43;ptmat._44=Mat1._44-Mat2._44; + return ptmat; +} + +px_bool PX_MatrixEqual(px_matrix Mat1,px_matrix Mat2) +{ + px_int i,j; + for (i=0;i<4;i++) + { + for (j=0;j<4;j++) + { + if (Mat1.m[i][j]!=Mat2.m[i][j]) + { + return PX_FALSE; + } + } + } + return PX_TRUE; +} + +px_void PX_MatrixRotateVector(px_matrix *mat,px_point v_base,px_point v) +{ + px_point cross=PX_PointCross(v_base,v); + px_float cosv=PX_PointDot(v_base,v)/PX_PointMod(v_base)/PX_PointMod(v); + px_float sinv=(px_float)PX_sqrtd(1-cosv*cosv); + if(cross.z<0) sinv=-sinv; + mat->_11=cosv; mat->_12=sinv; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=-sinv; mat->_22=cosv; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=1.0f; mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixTranslation(px_matrix *mat,px_float x,px_float y,px_float z) +{ + mat->_11=1.0f; mat->_12=0.0f; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=0.0f; mat->_22=1.0f; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=1.0f; mat->_34=0.0f; + mat->_41=x; mat->_42=y; mat->_43=z; mat->_44=1.0f; +} + +px_void PX_MatrixRotateX(px_matrix *mat,px_float Angle) +{ + mat->_11=1.0f; mat->_12=0; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=0.0f; mat->_22=PX_cos_angle(Angle); mat->_23=PX_sin_angle(Angle); mat->_24=0.0f; + mat->_31=0.0f; mat->_32=-PX_sin_angle(Angle); mat->_33=PX_cos_angle(Angle); mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixRotateY(px_matrix *mat,px_float Angle) +{ + mat->_11=PX_cos_angle(Angle); mat->_12=0.0f; mat->_13=PX_sin_angle(Angle); mat->_14=0.0f; + mat->_21=0.0f; mat->_22=1.0f; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=-PX_sin_angle(Angle); mat->_32=0.0f; mat->_33=PX_cos_angle(Angle); mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixRotateZ(px_matrix *mat,px_float Angle) +{ + + mat->_11=PX_cos_angle(Angle); mat->_12=PX_sin_angle(Angle); mat->_13=0.0f; mat->_14=0.0f; + mat->_21=-PX_sin_angle(Angle); mat->_22=PX_cos_angle(Angle); mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=1.0f; mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + + +px_void PX_MatrixRotateXRadian(px_matrix *mat,px_float rad) +{ + mat->_11=1.0f; mat->_12=0; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=0.0f; mat->_22=PX_cos_radian(rad); mat->_23=PX_sin_radian(rad); mat->_24=0.0f; + mat->_31=0.0f; mat->_32=-PX_sin_radian(rad); mat->_33=PX_cos_radian(rad); mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixRotateYRadian(px_matrix *mat,px_float rad) +{ + mat->_11=PX_cos_radian(rad); mat->_12=0.0f; mat->_13=PX_sin_radian(rad); mat->_14=0.0f; + mat->_21=0.0f; mat->_22=1.0f; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=-PX_sin_radian(rad); mat->_32=0.0f; mat->_33=PX_cos_radian(rad); mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixRotateZRadian(px_matrix *mat,px_float rad) +{ + + mat->_11=PX_cos_radian(rad); mat->_12=PX_sin_radian(rad); mat->_13=0.0f; mat->_14=0.0f; + mat->_21=-PX_sin_radian(rad); mat->_22=PX_cos_radian(rad); mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=1.0f; mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixScale(px_matrix *mat,px_float x,px_float y,px_float z) +{ + mat->_11=x; mat->_12=0.0f; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=0.0f; mat->_22=y; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=z; mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +static px_float ptabs(px_float x){return x>0?x:-x;} +static px_bool Gauss(px_float A[][4], px_float B[][4]) +{ + + px_int i, j, k; + px_float max, temp; + px_float t[4][4]; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + { + t[i][j] = A[i][j]; + } + } + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + { + B[i][j] = (i == j) ? (px_float)1 : 0; + } + } + for (i = 0; i < 4; i++) + { + max = t[i][i]; + k = i; + for (j = i+1; j < 4; j++) + { + if (ptabs(t[j][i]) > ptabs(max)) + { + max = t[j][i]; + k = j; + } + } + if (k != i) + { + for (j = 0; j < 4; j++) + { + temp = t[i][j]; + t[i][j] = t[k][j]; + t[k][j] = temp; + temp = B[i][j]; + B[i][j] = B[k][j]; + B[k][j] = temp; + } + } + if (t[i][i] == 0) + { + return PX_FALSE; + } + temp = t[i][i]; + for (j = 0; j < 4; j++) + { + t[i][j] = t[i][j] / temp; + B[i][j] = B[i][j] / temp; + } + for (j = 0; j < 4; j++) + { + if (j != i) + { + temp = t[j][i]; + for (k = 0; k < 4; k++) + { + t[j][k] = t[j][k] - t[i][k]*temp; + B[j][k] = B[j][k] - B[i][k]*temp; + } + } + } + } + return PX_TRUE; +} + + +px_bool PX_MatrixInverse(px_matrix *mat) +{ + return Gauss(mat->m,mat->m); +} + +px_void PX_MatrixTranspose(px_matrix *matrix) +{ + px_matrix mat=*matrix; + matrix->_11=mat._11; matrix->_12=mat._21; matrix->_13=mat._31; matrix->_14=mat._41; + matrix->_21=mat._12; matrix->_22=mat._22; matrix->_23=mat._32; matrix->_24=mat._42; + matrix->_31=mat._13; matrix->_32=mat._23; matrix->_33=mat._33; matrix->_34=mat._43; + matrix->_41=mat._14; matrix->_42=mat._24; matrix->_43=mat._34; matrix->_44=mat._44; +} + + +px_color PX_COLOR(px_uchar a,px_uchar r,px_uchar g,px_uchar b) +{ + px_color color; + color._argb.a=a; + color._argb.r=r; + color._argb.g=g; + color._argb.b=b; + return color; +} + + +px_void PX_ColorIncrease(px_color *color,px_uchar inc) +{ + if(color->_argb.r+inc>=0xff) + { + color->_argb.r=0xff; + } + else + { + color->_argb.r+=inc; + } + + if(color->_argb.g+inc>=0xff) + { + color->_argb.g=0xff; + } + else + { + color->_argb.g+=inc; + } + + if(color->_argb.b+inc>=0xff) + { + color->_argb.b=0xff; + } + else + { + color->_argb.b+=inc; + } +}; + +px_color PX_ColorAdd(px_color color1,px_color color2) +{ + if(color1._argb.r+color2._argb.r>=0xff) + { + color1._argb.r=0xff; + } + else + { + color1._argb.r+=color2._argb.r; + } + + if(color1._argb.g+color2._argb.g>=0xff) + { + color1._argb.g=0xff; + } + else + { + color1._argb.g+=color2._argb.g; + } + + if(color1._argb.b+color2._argb.b>=0xff) + { + color1._argb.b=0xff; + } + else + { + color1._argb.b+=color2._argb.b; + } + + if(color1._argb.a+color2._argb.a>=0xff) + { + color1._argb.a=0xff; + } + else + { + color1._argb.a+=color2._argb.a; + } + return color1; +}; + +px_color PX_ColorSub(px_color color1,px_color color2) +{ + if(color1._argb.r-color2._argb.r<0) + { + color1._argb.r=0; + } + else + { + color1._argb.r-=color2._argb.r; + } + + if(color1._argb.g-color2._argb.g<0) + { + color1._argb.g=0; + } + else + { + color1._argb.g-=color2._argb.g; + } + + if(color1._argb.b-color2._argb.b<0) + { + color1._argb.b=0; + } + else + { + color1._argb.b-=color2._argb.b; + } + + if(color1._argb.a-color2._argb.a<0) + { + color1._argb.a=0; + } + else + { + color1._argb.a-=color2._argb.a; + } + return color1; +} + +px_bool PX_ColorEqual(px_color color1,px_color color2) +{ + return color1._argb.ucolor==color2._argb.ucolor; +} + +px_color_hsl PX_ColorRGBToHSL(px_color color_rgb) +{ + px_color_hsl hsl; + px_float max=0,min=0; + px_float r,g,b; + + r=color_rgb._argb.r/255.f; + g=color_rgb._argb.g/255.f; + b=color_rgb._argb.b/255.f; + + max=r; + max=maxg?g:min; + min=min>b?b:min; + + + hsl.L=(max+min)/2.0f; + if (max==min) + { + hsl.S=0; + } + else + { + hsl.S=(hsl.L<0.5f?(max-min)/(max + min):(max-min)/(2.0f-max-min)); + } + if(r==max) hsl.H=(g-b)*1.0f/(max-min); + if(g==max) hsl.H=2.0f+(b-r)*1.0f/(max-min); + if(b==max) hsl.H=4.0f+(r-g)*1.0f/(max-min); + hsl.H=hsl.H*60; + if (hsl.H<0) + { + hsl.H+=360; + } + hsl.a=color_rgb._argb.a/255.f; + return hsl; +} + +px_color PX_ColorHSLToRGB(px_color_hsl color_hsl) +{ + px_float r,g,b,temp1,temp2,temp3,H,S,L; + H=color_hsl.H; + S=color_hsl.S; + L=color_hsl.L; + + if (color_hsl.S==0) + { + r=g=b=color_hsl.L; + } + else + { + if(L<0.5) + temp2=L*(1.0f+S); + else + temp2=L+S-L*S; + + temp1 = 2.0f * L - temp2; + H /= 360; + + r = temp3 = H + 1.0f / 3.0f; + if (temp3 < 0) + temp3 = temp3 + 1.0f; + if (temp3 > 1) + temp3 = temp3 - 1.0f; + + if (6.0f * temp3 < 1)r = temp1 + (temp2 - temp1) * 6.0f * temp3; + else if (2.0f * temp3 < 1)r = temp2; + else if (3.0f * temp3 < 2)r = temp1 + (temp2 - temp1) * ((2.0f / 3.0f) - temp3) * 6.0f; + else r = temp1; + + temp3 = H; + if (temp3 < 0) + temp3 = temp3 + 1.0f; + if (temp3 > 1) + temp3 = temp3 - 1.0f; + if (6.0f * temp3 < 1)g = temp1 + (temp2 - temp1) * 6.0f * temp3; + else if (2.0f * temp3 < 1)g = temp2; + else if (3.0f * temp3 < 2)g = temp1 + (temp2 - temp1) * ((2.0f / 3.0f) - temp3) * 6.0f; + else g = temp1; + + temp3 = H - 1.0f / 3.0f; + if (temp3 < 0) + temp3 = temp3 + 1.0f; + if (temp3 > 1) + temp3 = temp3 - 1.0f; + if (6.0f * temp3 < 1)b = temp1 + (temp2 - temp1) * 6.0f * temp3; + else if (2.0f * temp3 < 1)b = temp2; + else if (3.0f * temp3 < 2)b = temp1 + (temp2 - temp1) * ((2.0f / 3.0f) - temp3) * 6.0f; + else b = temp1; + } + + return PX_COLOR((px_uchar)(color_hsl.a*255),(px_uchar)(r*255),(px_uchar)(g*255),(px_uchar)(b*255)); +} + +px_color PX_ColorMul(px_color color1,px_double muls) +{ + color1._argb.a=(px_uchar)(color1._argb.a*muls); + color1._argb.r=(px_uchar)(color1._argb.r*muls); + color1._argb.g=(px_uchar)(color1._argb.g*muls); + color1._argb.b=(px_uchar)(color1._argb.b*muls); + return color1; +} + + + +px_point PX_PointAdd(px_point p1,px_point p2) +{ + p1.x+=p2.x; + p1.y+=p2.y; + p1.z+=p2.z; + return p1; +} + +px_point2D PX_Point2DAdd(px_point2D p1,px_point2D p2) +{ + p1.x+=p2.x; + p1.y+=p2.y; + return p1; +} + + +px_point PX_PointSub(px_point p1,px_point p2) +{ + p1.x-=p2.x; + p1.y-=p2.y; + p1.z-=p2.z; + return p1; +} + +px_point2D PX_Point2DSub(px_point2D p1,px_point2D p2) +{ + p1.x-=p2.x; + p1.y-=p2.y; + return p1; +} + + +px_point4D PX_Point4DSub(px_point4D p1,px_point4D p2) +{ + px_point4D v; + v.x=p1.x-p2.x; + v.y=p1.y-p2.y; + v.z=p1.z-p2.z; + v.w=1; + return v; +} + +px_point PX_PointMul(px_point p1,px_float m) +{ + p1.x*=m; + p1.y*=m; + p1.z*=m; + return p1; +} + +px_point2D PX_Point2DMul(px_point2D p1,px_float m) +{ + p1.x*=m; + p1.y*=m; + return p1; +} + +px_point PX_PointDiv(px_point p1,px_float m) +{ + p1.x/=m; + p1.y/=m; + p1.z/=m; + return p1; +} + +px_point2D PX_Point2DRrthonormal(px_point2D v) +{ + return PX_Point2DNormalization(PX_POINT2D(v.y,-v.x)); +} + +px_point2D PX_Point2DBase(px_point2D base1,px_point2D base2,px_point2D target) +{ + base1=PX_Point2DNormalization(base1); + base2=PX_Point2DNormalization(base2); + + return PX_POINT2D( + (target.x*base2.y-base2.x*target.y)/(base1.x*base2.y-base2.x*base1.y), + (target.x*base1.y-base1.x*target.y)/(base2.x*base1.y-base1.x*base2.y) + ); +} + +px_point2D PX_Point2DDiv(px_point2D p1,px_float m) +{ + p1.x/=m; + p1.y/=m; + return p1; +} + +px_float PX_PointDot(px_point p1,px_point p2) +{ + return p1.x*p2.x+p1.y*p2.y+p1.z*p2.z; +} + +px_float PX_Point2DDot(px_point2D p1,px_point2D p2) +{ + return p1.x*p2.x+p1.y*p2.y; +} + +px_float PX_Point4DDot(px_point4D p1,px_point4D p2) +{ + return p1.x*p2.x+p1.y*p2.y+p1.z*p2.z; +} + +px_point PX_PointCross(px_point p1,px_point p2) +{ + px_point pt; + pt.x=p1.y*p2.z-p2.y*p1.z; + pt.y=p1.z*p2.x-p2.z*p1.x; + pt.z=p1.x*p2.y-p2.x*p1.y; + return pt; +} + + +px_point4D PX_Point4DCross(px_point4D p1,px_point4D p2) +{ + px_point4D pt; + pt.x=p1.y*p2.z-p2.y*p1.z; + pt.y=p1.z*p2.x-p2.z*p1.x; + pt.z=p1.x*p2.y-p2.x*p1.y; + pt.w=1; + return pt; +} + +px_point PX_PointInverse(px_point p1) +{ + return PX_POINT(-p1.x,-p1.y,-p1.z); +} + +px_float PX_PointMod(px_point p) +{ + return PX_sqrt(p.x*p.x+p.y*p.y+p.z*p.z); +} + +px_float PX_Point2DMod(px_point2D p) +{ + return PX_sqrt(p.x*p.x+p.y*p.y); +} + + +px_float PX_PointSquare(px_point p) +{ + return (p.x*p.x+p.y*p.y+p.z*p.z); +} + +px_point PX_PointNormalization(px_point p) +{ + if (p.x||p.y||p.z) + { + return PX_PointDiv(p,PX_PointMod(p)); + } + return p; +} + +px_point2D PX_Point2DNormalization(px_point2D p) +{ + if (p.x||p.y) + { + return PX_Point2DDiv(p,PX_Point2DMod(p)); + } + return p; +} + + + +px_point4D PX_Point4DUnit(px_point4D p) +{ + px_point4D pt; + if (p.x||p.y||p.z) + { + px_float sqare=PX_sqrt(p.x*p.x+p.y*p.y+p.z*p.z); + pt.x=p.x/sqare; + pt.y=p.y/sqare; + pt.z=p.z/sqare; + pt.w=1; + return pt; + } + return p; +} + +px_point PX_PointReflectX(px_point vector_refer,px_point respoint) +{ + px_point ret; + px_float cosx,sinx; + px_float mod=PX_PointMod(vector_refer); + cosx=vector_refer.x/mod; + sinx=-vector_refer.y/mod; + + ret.x=respoint.x*cosx+respoint.y*sinx; + ret.y=respoint.y*cosx-respoint.x*sinx; + ret.z=respoint.z; + return ret; +} + + + +px_bool PX_isRectCrossRect(px_rect rect1,px_rect rect2) +{ + px_float disx,disy; + disx=PX_ABS(rect1.x+rect1.width/2-rect2.x-rect2.width/2); + disy=PX_ABS(rect1.y+rect1.height/2-rect2.y-rect2.height/2); + if (disx*2rect.x+rect.width) + { + return PX_FALSE; + } + if (p.yrect.y+rect.height) + { + return PX_FALSE; + } + return PX_TRUE; +} + + +px_bool PX_isXYInRegion(px_float x,px_float y,px_float rectx,px_float recty,px_float width,px_float height) +{ + if (xrectx+width) + { + return PX_FALSE; + } + if (yrecty+height) + { + return PX_FALSE; + } + return PX_TRUE; +} + + +px_bool PX_isLineCrossRect(px_point p1,px_point p2,px_rect rect,px_point *cp1,px_point *cp2) +{ + px_float k,b; + px_float calx,caly; + px_bool bcross=PX_FALSE; + + if (!cp1||!cp2) + { + return PX_FALSE; + } + if (cp1&&cp2) + { + *cp1=p1; + *cp2=p2; + } + + if (PX_isPointInRect(p1,rect)&&PX_isPointInRect(p2,rect)) + { + return PX_TRUE; + } + + if (PX_ABS(p1.x-p2.x)<0.000001f) + { + if (p2.yrect.x&&p1.xrect.y+rect.height) + { + return PX_FALSE; + } + if (p2.yy=rect.y; + } + if (p2.y>rect.y+rect.height) + { + cp2->y=rect.y+rect.height; + } + return PX_TRUE; + } + return PX_FALSE; + } + + + if (PX_ABS(p1.y-p2.y)<0.000001f) + { + if (p2.xrect.y&&p1.yrect.x+rect.width) + { + return PX_FALSE; + } + if (p2.xx=rect.x; + } + if (p2.x>rect.x+rect.width) + { + cp2->x=rect.x+rect.width; + } + return PX_TRUE; + } + return PX_FALSE; + } + + + if (p2.xp1.x&&calxx=calx; + cp1->y=caly; + bcross=PX_TRUE; + } + } + + calx=rect.x+rect.width; + caly=calx*k+b; + if (PX_isPointInRect(PX_POINT(calx,caly,0),rect)) + { + if (calx>p1.x&&calxx=calx; + cp2->y=caly; + } + bcross=PX_TRUE; + } + } + + caly=rect.y; + calx=(caly-b)/k; + if (PX_isPointInRect(PX_POINT(calx,caly,0),rect)) + { + if (calx>p1.x&&calx0) + { + if (cp1) + { + cp1->x=calx; + cp1->y=caly; + } + } + else + { + if (cp2) + { + cp2->x=calx; + cp2->y=caly; + } + } + + + bcross=PX_TRUE; + } + } + + caly=rect.y+rect.height; + calx=(caly-b)/k; + if (PX_isPointInRect(PX_POINT(calx,caly,0),rect)) + { + if (calx>p1.x&&calx0) + { + if (cp2) + { + cp2->x=calx; + cp2->y=caly; + } + } + else + { + if (cp1) + { + cp1->x=calx; + cp1->y=caly; + } + } + + bcross=PX_TRUE; + } + } + + return bcross; +} + +void PX_memset(void *dst,px_byte byte,px_int size) +{ + px_dword dw=byte?(byte<<24)|(byte<<16)|(byte<<8)|byte:0; + px_dword *_4byteMovDst=(px_dword *)dst; + px_uchar *pdst=(px_uchar *)dst+(size&~3); + px_uint _movTs=size>>2; + while (_movTs--) + { + *_4byteMovDst++=dw; + } + _movTs=size&3; + while (_movTs--) + *(pdst++)=byte; +} + + +void PX_memdwordset(void *dst,px_dword dw,px_int count) +{ + px_dword *p=(px_dword *)dst; + while(count--)*p++=dw; +} + + +px_bool PX_memequ(const void *dst,const void *src,px_int size) +{ + px_dword *_4byteMovSrc=(px_dword *)src; + px_dword *_4byteMovDst=(px_dword *)dst; + px_uchar *psrc=(px_uchar *)src+(size&~3); + px_uchar *pdst=(px_uchar *)dst+(size&~3); + px_uint _movTs=size>>2; + if (dst==PX_NULL||src==PX_NULL) + { + PX_ASSERT(); + return PX_FALSE; + } + while (_movTs--) + { + if(*_4byteMovDst++!=*_4byteMovSrc++) + return PX_FALSE; + } + _movTs=size&3; + while (_movTs--) + if(*(pdst++)!=*(psrc++)) + return PX_FALSE; + return PX_TRUE; +} + + +px_void PX_memcpy(px_void *dst,const px_void *src,px_int size) +{ + typedef struct + { + px_byte m[16]; + }PX_MEMCPY_16; + + typedef struct + { + px_byte m[32]; + }PX_MEMCPY_32; + + typedef struct + { + px_byte m[64]; + }PX_MEMCPY_64; + + typedef struct + { + px_byte m[128]; + }PX_MEMCPY_128; + + typedef struct + { + px_byte m[256]; + }PX_MEMCPY_256; + + typedef struct + { + px_byte m[512]; + }PX_MEMCPY_512; + + typedef struct + { + px_byte m[1024]; + }PX_MEMCPY_1024; + + typedef struct + { + px_byte m[2048]; + }PX_MEMCPY_2048; + + typedef struct + { + px_byte m[4096]; + }PX_MEMCPY_4096; + + px_dword *_4byteMovSrc; + px_dword *_4byteMovDst; + px_uchar *psrc; + px_uchar *pdst; + PX_MEMCPY_4096 *_4kbyteMovSrc,*_4kbyteMovDst; + PX_MEMCPY_2048 *_2kbyteMovSrc,*_2kbyteMovDst; + PX_MEMCPY_1024 *_1kbyteMovSrc,*_1kbyteMovDst; + PX_MEMCPY_512 *_512byteMovSrc,*_512byteMovDst; + PX_MEMCPY_256 *_256byteMovSrc,*_256byteMovDst; + PX_MEMCPY_128 *_128byteMovSrc,*_128byteMovDst; + PX_MEMCPY_64 *_64byteMovSrc,*_64byteMovDst; + PX_MEMCPY_32 *_32byteMovSrc,*_32byteMovDst; + PX_MEMCPY_16 *_16byteMovSrc,*_16byteMovDst; + px_uint _movTs; + + + //is overlap? + if (dst>src&&(px_char *)dst<(px_char *)src+size) + { + px_dword _4byteMov=0;//4bytes unit-copy + //backward overlap + psrc=(px_uchar *)src+size-1; + pdst=(px_uchar *)dst+size-1; + + _movTs=size&3; + + while (_movTs--) + *(pdst--)=*(psrc--); + + pdst-=3; + psrc-=3; + _4byteMovDst=(px_dword *)pdst; + _4byteMovSrc=(px_dword *)psrc; + _movTs=size>>2; + while (_movTs--) + { + _4byteMov=*_4byteMovSrc; + _4byteMovSrc--; + *_4byteMovDst=_4byteMov; + _4byteMovDst--; + } + } + else if (src>dst&&(px_char *)src<(px_char *)dst+size) + { + px_dword _4byteMov=0;//4bytes unit-copy + + //forward overlap + psrc=(px_uchar *)src; + pdst=(px_uchar *)dst; + + _4byteMovDst=(px_dword *)pdst; + _4byteMovSrc=(px_dword *)psrc; + _movTs=size>>2; + while (_movTs--) + { + _4byteMov=*_4byteMovSrc; + _4byteMovSrc++; + *_4byteMovDst=_4byteMov; + _4byteMovDst++; + } + _movTs=size&3; + + psrc=(px_uchar *)_4byteMovSrc; + pdst=(px_uchar *)_4byteMovDst; + + while (_movTs--) + *(pdst++)=*(psrc++); + + pdst+=3; + psrc+=3; + } + else + { + //no overlap,using block-copy + //high->low + _movTs=size>>12; + if(_movTs) + { + _4kbyteMovSrc=(PX_MEMCPY_4096 *)src; + _4kbyteMovDst=(PX_MEMCPY_4096 *)dst; + while(_movTs--)*_4kbyteMovDst++=*_4kbyteMovSrc++; + src=_4kbyteMovSrc; + dst=_4kbyteMovDst; + } + + _movTs=size&(1<<11); + if(_movTs) + { + _2kbyteMovSrc=(PX_MEMCPY_2048 *)src; + _2kbyteMovDst=(PX_MEMCPY_2048 *)dst; + *_2kbyteMovDst++=*_2kbyteMovSrc++; + src=_2kbyteMovSrc; + dst=_2kbyteMovDst; + } + + _movTs=size&(1<<10); + if(_movTs) + { + _1kbyteMovSrc=(PX_MEMCPY_1024 *)src; + _1kbyteMovDst=(PX_MEMCPY_1024 *)dst; + *_1kbyteMovDst++=*_1kbyteMovSrc++; + src=_1kbyteMovSrc; + dst=_1kbyteMovDst; + } + + _movTs=size&(1<<9); + if(_movTs) + { + _512byteMovSrc=(PX_MEMCPY_512 *)src; + _512byteMovDst=(PX_MEMCPY_512 *)dst; + *_512byteMovDst++=*_512byteMovSrc++; + src=_512byteMovSrc; + dst=_512byteMovDst; + } + + _movTs=size&(1<<8); + if(_movTs) + { + _256byteMovSrc=(PX_MEMCPY_256 *)src; + _256byteMovDst=(PX_MEMCPY_256 *)dst; + *_256byteMovDst++=*_256byteMovSrc++; + src=_256byteMovSrc; + dst=_256byteMovDst; + } + + _movTs=size&(1<<7); + if(_movTs) + { + _128byteMovSrc=(PX_MEMCPY_128 *)src; + _128byteMovDst=(PX_MEMCPY_128 *)dst; + *_128byteMovDst++=*_128byteMovSrc++; + src=_128byteMovSrc; + dst=_128byteMovDst; + } + + _movTs=size&(1<<6); + if(_movTs) + { + _64byteMovSrc=(PX_MEMCPY_64 *)src; + _64byteMovDst=(PX_MEMCPY_64 *)dst; + *_64byteMovDst++=*_64byteMovSrc++; + src=_64byteMovSrc; + dst=_64byteMovDst; + } + + _movTs=size&(1<<5); + if(_movTs) + { + _32byteMovSrc=(PX_MEMCPY_32 *)src; + _32byteMovDst=(PX_MEMCPY_32 *)dst; + *_32byteMovDst++=*_32byteMovSrc++; + src=_32byteMovSrc; + dst=_32byteMovDst; + } + + _movTs=size&(1<<4); + if(_movTs) + { + _16byteMovSrc=(PX_MEMCPY_16 *)src; + _16byteMovDst=(PX_MEMCPY_16 *)dst; + *_16byteMovDst++=*_16byteMovSrc++; + src=_16byteMovSrc; + dst=_16byteMovDst; + } + + _movTs=size&0x0F; + if(_movTs>=12) + { + _4byteMovSrc=(px_dword *)src; + _4byteMovDst=(px_dword *)dst; + *_4byteMovDst++=*_4byteMovSrc++; + *_4byteMovDst++=*_4byteMovSrc++; + *_4byteMovDst++=*_4byteMovSrc++; + _movTs-=12; + psrc=(px_uchar *)_4byteMovSrc; + pdst=(px_uchar *)_4byteMovDst; + while(_movTs--)*pdst++=*psrc++; + } + else if(_movTs>=8) + { + _4byteMovSrc=(px_dword *)src; + _4byteMovDst=(px_dword *)dst; + *_4byteMovDst++=*_4byteMovSrc++; + *_4byteMovDst++=*_4byteMovSrc++; + _movTs-=8; + psrc=(px_uchar *)_4byteMovSrc; + pdst=(px_uchar *)_4byteMovDst; + while(_movTs--)*pdst++=*psrc++; + } + else if(_movTs>=4) + { + _4byteMovSrc=(px_dword *)src; + _4byteMovDst=(px_dword *)dst; + *_4byteMovDst++=*_4byteMovSrc++; + _movTs-=4; + psrc=(px_uchar *)_4byteMovSrc; + pdst=(px_uchar *)_4byteMovDst; + while(_movTs--)*pdst++=*psrc++; + } + else + { + psrc=(px_uchar *)src; + pdst=(px_uchar *)dst; + while(_movTs--)*pdst++=*psrc++; + } + + } +} + + + +px_void PX_strcpy(px_char *dst,const px_char *src,px_int size) +{ + while(size--) + if(*src) + *(dst++)=*(src++); + else + { + *dst='\0'; + return; + } + *(dst-1)='\0'; +} + +px_void PX_wstrcpy(px_word *dst,const px_word *src,px_int size) +{ + while(size--) + if(*src) + *(dst++)=*(src++); + else + { + *dst='\0'; + return; + } + *(dst-1)='\0'; +} + +px_void PX_strcat(px_char *src,const px_char *cat) +{ + px_int len=PX_strlen(cat); + while(*src)src++; + while(len--)*src++=*cat++; + *src='\0'; +} + +px_void PX_strcat_s(px_char* src, const px_char* cat, px_int size) +{ + if (PX_strlen(src)+PX_strlen(cat)='a'&&_l<='z') + { + _l += 'A' - 'a'; + } + if (_r >= 'a' && _r <= 'z') + { + _r += 'A' - 'a'; + } + if (_l == _r) + { + if (_l == 0)return PX_TRUE; + } + else + { + return PX_FALSE; + } + src++; + dst++; + } + return PX_FALSE; +} + +px_void PX_strupr(px_char *src) +{ + while (*src != '\0') + { + if (*src >= 'a' && *src <= 'z') + *src -= 32; + src++; + } +} + +px_void PX_strlwr(px_char *src) +{ + while (*src != '\0') + { + if (*src > 'A' && *src <= 'Z'){ + *src += 32; + } + src++; + } +} + + +px_point2D PX_Point2DMulMatrix(px_point2D p,px_matrix mat) +{ + px_point2D point; + point.x=p.x*mat._11+p.y*mat._21+1*mat._41; + point.y=p.x*mat._12+p.y*mat._22+1*mat._42; + return point; +} + +px_point PX_PointMulMatrix(px_point p,px_matrix mat) +{ + px_point point; + point.x=p.x*mat._11+p.y*mat._21+p.z*mat._31+1*mat._41; + point.y=p.x*mat._12+p.y*mat._22+p.z*mat._32+1*mat._42; + point.z=p.x*mat._13+p.y*mat._23+p.z*mat._33+1*mat._43; + return point; +} + + +px_point4D PX_Point4DMulMatrix(px_point4D p,px_matrix mat) +{ + px_point4D point; + point.x=p.x*mat._11+p.y*mat._21+p.z*mat._31+1*mat._41; + point.y=p.x*mat._12+p.y*mat._22+p.z*mat._32+1*mat._42; + point.z=p.x*mat._13+p.y*mat._23+p.z*mat._33+1*mat._43; + point.w=p.x*mat._14+p.y*mat._24+p.z*mat._34+1*mat._44; + return point; +} + + +px_plane PX_PLANE(px_point3D p,px_vector3D n) +{ + px_plane pl; + pl.n=n; + pl.p0=p; + return pl; +} + +px_rect PX_RECT(px_float x,px_float y,px_float width,px_float height) +{ + px_rect rect; + rect.x=x; + rect.y=y; + rect.width=width; + rect.height=height; + + if (width<0) + { + rect.width=-width; + rect.x+=width; + } + + if (height<0) + { + rect.height=-height; + rect.y+=height; + } + return rect; +} + + +px_rect PX_RECTPOINT2(px_point p1,px_point p2) +{ + px_rect rect; + rect.width=PX_ABS(p2.x-p1.x); + rect.height=PX_ABS(p2.y-p1.y); + + if (p1.x>2) + { + // x[] 4 base odd/even Sort + exbase=1; + exrang=0; + while (exrang>1); + FFT_Base2(x+(N>>1),N>>1); + + for(k=0;k>1;k++) + { + Wnk.re=(px_float)PX_cosd((-2*PX_PI*k/N)); + Wnk.im=(px_float)PX_sind((-2*PX_PI*k/N)); + cx0=x[k]; + cx1=x[k+(N>>1)]; + x[k]=PX_complexAdd(cx0,PX_complexMult(Wnk,cx1)); + Wnk.re=-Wnk.re; + Wnk.im=-Wnk.im; + x[k+(N>>1)]=PX_complexAdd(cx0,PX_complexMult(Wnk,cx1)); + } + } + else + { + //2 dot DFT + cx0=x[0]; + cx1=x[1]; + x[0]=PX_complexAdd(cx0,cx1); + cx1.im=-cx1.im; + cx1.re=-cx1.re; + x[1]=PX_complexAdd(cx0,cx1); + } + + +} +void PX_FFT(_IN px_complex x[],_OUT px_complex X[],px_int N) +{ + PX_memcpy(X,x,sizeof(px_complex)*N); + FFT_Base2(X,N); +} + +void IFFT_Base2(_IN _OUT px_complex X[],px_int N) +{ + px_int exbase,exrang,i,j,n; + px_complex excomplex,Wnnk,cx0,cx1; + if (N>>2) + { + // x[] 4 base odd/even Sort + exbase=1; + exrang=0; + while (exrang>1); + IFFT_Base2(X+(N>>1),N>>1); + + for(n=0;n>1;n++) + { + Wnnk.re=(px_float)PX_cosd((2*PX_PI*n/N)); + Wnnk.im=(px_float)PX_sind((2*PX_PI*n/N)); + cx0=X[n]; + cx1=X[n+(N>>1)]; + X[n]=PX_complexAdd(cx0,PX_complexMult(Wnnk,cx1)); + + Wnnk.re=-Wnnk.re; + Wnnk.im=-Wnnk.im; + X[n+(N>>1)]=PX_complexAdd(cx0,PX_complexMult(Wnnk,cx1)); + + } + } + else + { + //2 dot IDFT + cx0=X[0]; + cx1=X[1]; + X[0]=PX_complexAdd(cx0,cx1); + + cx1.im=-cx1.im; + cx1.re=-cx1.re; + X[1]=PX_complexAdd(cx0,cx1); + + } +} +void PX_IFFT(_IN px_complex X[],_OUT px_complex x[],px_int N) +{ + px_int i; + PX_memcpy(X,x,sizeof(px_complex)*N); + IFFT_Base2(X,N); + // 1/N operate + for (i=0;i0.15) + { + return 0; + } + + PX_Cepstrum(x,x,N,PX_CEPTRUM_TYPE_REAL); + + if (high>=N||high==low) + { + return 0; + } + + for (i=low;i<=high;i++) + { + if(x[i].re>max) + { + max=x[i].re; + idx=i; + } + } + if (idx==0) + { + return 0; + } + return sampleRate/idx; +} + +void PX_PreEmphasise(const px_double *data, int len, px_double *out, px_double preF)//0.9= 1; i--) + { + out[i] = data[i] - preF * data[i-1]; + } + out[0] = data[0]; +} + +void PX_LinearInterpolationResample(_IN px_double x[],_OUT px_double X[],px_int N,px_int M) +{ + px_int k,m=0; + px_double d1=0,d2=0; + px_double freqscale=N*1.0/M; + for (k=0;k=1.0){ + m+=(px_int)(d2); + d2-=(px_int)(d2); + + } + X[k]=d1; + } +} + +void PX_UpSampled(_IN px_complex x[],_OUT px_complex X[],px_int N,px_int L) +{ + px_int i,j; + for (i=0;i=('0')&&chr<=('9')) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_strIsInt(const px_char *str) +{ + if (PX_strIsNumeric(str)) + { + if (PX_strIsFloat(str)) + { + return PX_FALSE; + } + return PX_TRUE; + } + return PX_FALSE; +} + +static px_double __px_pow_i(px_double num,px_int n) +{ + px_double powint=1; + px_int i; + for(i=1;i<=n;i++) + { + powint*=num; + if (powint==0) + { + break; + } + if (powint>0) + { + if (powint>=PX_DBL_POSITIVE_MAX||powint<=PX_DBL_POSITIVE_MIN) + { + PX_ASSERT(); + break; + } + } + else + { + if (powint<=PX_DBL_NEGATIVE_MIN||powint>=PX_DBL_NEGATIVE_MAX) + { + PX_ASSERT(); + break; + } + } + } + return powint; +} + +static px_double __px_pow_f(px_double num,px_double m) +{ + px_int i,j; + px_double powd=0,x,tmpm=1; + x=num-1; + for(i=1;tmpm>0.0000000001 || tmpm<-0.0000000001;i++) + { + for(j=1,tmpm=1;j<=i;j++) + { + tmpm*=(m-j+1)*x/j; + } + powd+=tmpm; + + if (powd==0) + { + break; + } + if (powd>0) + { + if (powd>=PX_DBL_POSITIVE_MAX||powd<=PX_DBL_POSITIVE_MIN) + { + PX_ASSERT(); + break; + } + } + else + { + if (powd<=PX_DBL_NEGATIVE_MIN||powd>=PX_DBL_NEGATIVE_MAX) + { + PX_ASSERT(); + break; + } + } + } + return powd+1; +} + +px_double PX_pow_dd(px_double num,px_double m) +{ + while (num>2) + { + num=PX_sqrtd(num); + m*=2; + } + if(num==0 && m!=0) return 0; + else if(num==0 && m==0) return 1; + else if(num<0 && m-(px_int)(m)!=0) return 0; + if(num>2) + { + num=1/num; + m=-m; + } + if(m<0) return 1/PX_pow_dd(num,-m); + if(m-(px_int)(m)==0) + return __px_pow_i(num,(px_int)m); + else + return __px_pow_f(num,m-(px_int)(m))*__px_pow_i(num,(px_int)(m)); + //return __px_pow_f(num,m); +} + +px_int PX_pow_ii(px_int i,px_int n) +{ + px_int fin=1; + if (n==0) + { + return 1; + } + if (n<0) + { + return 0; + } + while(n--) + fin*=i; + return fin; +} + + +px_double PX_ln(px_double __x) +{ + px_int N = 128; + px_int k,nk; + px_double x,xx,y; + px_double m=1; + while (__x>PX_e) + { + __x=PX_sqrtd(__x); + m*=2; + } + x = (__x-1)/(__x+1); + xx = x*x; + nk = 2*N+1; + y = 1.0/nk; + for(k=N;k>0;k--) + { + nk = nk - 2; + y = 1.0/nk+xx*y; + } + return 2.0*x*y*m; +} + +px_double PX_log(px_double __x) +{ + return PX_ln(__x); +} + +px_double PX_lg(px_double __x) +{ + return PX_log10(__x); +} + +px_double PX_log10(px_double __x) +{ + return PX_ln(__x)/2.30258509299404568401799145468; +} + + + +static px_uint64 px_srand_seed=0x31415926; + +px_void PX_srand(px_uint64 seed) +{ + seed = (seed*16807)%(0xefffffff); + px_srand_seed=seed; +} + +px_uint32 PX_rand() +{ + return ((px_uint32)(px_srand_seed = (px_srand_seed*764261123)%(0xefffffff)))&PX_RAND_MAX; +} + + +px_double PX_randRange(px_double min,px_double max) +{ + return min+PX_rand()*1.0/PX_RAND_MAX*(max-min); +} + +px_uint32 PX_randEx(px_uint64 seed) +{ + return (px_uint32)(seed = (seed*764261123)%(0xefffffff)); +} + + +px_double PX_GaussRand() +{ + px_double u ; + px_double v; + px_double r; + px_double c; + while (PX_TRUE) + { + u = ((px_double) PX_rand() / (PX_RAND_MAX)) * 2 - 1; + v = ((px_double) PX_rand() / (PX_RAND_MAX)) * 2 - 1; + r = u * u + v * v; + if (r == 0 || r > 1) continue; + c = (px_double)PX_sqrt((px_float)(-2 * PX_ln(r) / r)); + return u * c; + } +} + +px_double PX_Ceil(px_double v) +{ + return v-(px_int)v?(px_double)((px_int)(v+1)):v; +} + +px_void PX_FileGetName(const px_char filefullName[],px_char _out[],px_int outSize) +{ + px_int s; + if (outSize==0) + { + return; + } + _out[0]=0; + s=PX_strlen(filefullName); + if (s==0) + { + return; + } + s--; + while (s) + { + if (filefullName[s]=='/'||filefullName[s]=='\\') + { + s++; + break; + } + s--; + } + + while (outSize>1&&filefullName[s]&&filefullName[s]!='.') + { + outSize--; + *_out=filefullName[s++]; + _out[1]='\0'; + _out++; + } + +} +px_void PX_FileGetPath(const px_char filefullName[],px_char _out[],px_int outSize) +{ + px_int s,i; + if (outSize==0) + { + return; + } + _out[0]=0; + s=PX_strlen(filefullName); + if (s==0) + { + return; + } + s--; + while (s) + { + if (filefullName[s]=='/'||filefullName[s]=='\\') + { + break; + } + s--; + } + + for (i=0;i=outSize-1) + { + _out[0]=0; + return; + } + } + if (i>0&&_out[i-1]==':') + { + _out[i]='/'; + i++; + } + _out[i]=0; + +} + +px_void PX_FileGetExt(const px_char filefullName[],px_char _out[],px_int outSize) +{ + px_int s; + px_bool bDot=PX_FALSE; + if (outSize==0) + { + return; + } + _out[0]=0; + s=PX_strlen(filefullName); + if (s==0) + { + return; + } + s--; + while (s) + { + if (filefullName[s]=='.') + { + s++; + bDot=PX_TRUE; + break; + } + s--; + } + + while (outSize>1&&filefullName[s]) + { + outSize--; + *_out=filefullName[s++]; + _out[1]='\0'; + _out++; + } +} + +static const px_uint32 crc32tab[] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, + 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, + 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, + 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, + 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, + 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, + 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, + 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, + 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, + 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, + 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, + 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, + 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, + 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, + 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, + 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, + 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, + 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, + 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, + 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, + 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, + 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, + 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, + 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, + 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, + 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, + 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, + 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, + 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, + 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +}; + + +px_uint32 PX_crc32( px_void *buffer, px_uint size) +{ + px_uint32 i, crc; + crc = 0xFFFFFFFF; + + + for (i = 0; i < size; i++) + crc = crc32tab[(crc ^ ((px_byte *)buffer)[i]) & 0xff] ^ (crc >> 8); + + return crc^0xFFFFFFFF; +} + + + + +px_word PX_crc16(px_void *buffer,px_uint size) +{ + px_uint pos,i; + px_word crc = 0xFFFF; + px_byte *p_data=(px_byte *)buffer; + for (pos = 0; pos < size; pos++) + { + crc ^= (px_word)p_data[pos]; // XOR byte into least sig. byte of crc + for (i = 8; i != 0; i--) // Loop over each bit + { + if ((crc & 0x0001) != 0) // If the LSB is set + { + crc >>= 1; // Shift right and XOR 0xA001 + crc ^= 0xA001; + } + else // Else LSB is not set + { + crc >>= 1; // Just shift right + } + } + } + + crc = ((crc & 0x00ff) << 8) | ((crc & 0xff00) >> 8); + return crc; + +} + +px_char *PX_strchr(const char *s,px_int ch) +{ + + while(*s!='\0') + { + if(*s-ch==0) + return (px_char*)s; + s++; + } + return PX_NULL; +} + +px_int PX_strcmp(const px_char *str1, const px_char *str2) +{ + px_int ret=0; + while( !(ret = *(px_uchar*)str1 - *(px_uchar*)str2 ) && *str1 ) + { + str1++; + str2++; + } + return ret; +} + +px_char* PX_strstr(const char* dest, const char* src) +{ + px_char* start = (px_char*)dest; + px_char* substart = (px_char*)src; + px_char* cp = (px_char*)dest; + while (*cp) + { + start = cp; + while (*start != '\0' && *substart !='\0' && *start == *substart) + { + start++; + substart++; + } + if (*substart == '\0') + { + return cp; + } + substart = (px_char*)src; + cp++; + } + return PX_NULL; +} + + + +px_bool PX_isPointInCircle(px_point p,px_point circle,px_float radius) +{ + if ((p.x-circle.x)*(p.x-circle.x)+(p.y-circle.y)*(p.y-circle.y)<=radius*radius) + { + return PX_TRUE; + } + return PX_FALSE; +} + + +px_bool PX_isPoint2DInCircle(px_point2D p,px_point2D circle,px_float radius) +{ + if ((p.x-circle.x)*(p.x-circle.x)+(p.y-circle.y)*(p.y-circle.y)<=radius*radius) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_dword PX_inet_addr( const px_char cp[] ) +{ + px_uchar ipBytes[4]={0}; + px_int i; + for( i=0; i<4; i++, cp++ ){ + ipBytes[i] = (px_uchar)PX_atoi( cp ); + if( !(cp = PX_strchr( cp, '.' )) ){ break; } + } + return *(px_dword*)ipBytes; +} + + +px_char* PX_inet_ntoa(px_dword ipv4) +{ + px_int b[4]; + static px_char a[17]; + a[0]='\0'; + b[0]=((ipv4 & 0xff000000)>>24); + b[1]=((ipv4 & 0x00ff0000)>>16); + b[2]=((ipv4 & 0x0000ff00)>>8); + b[3]=((ipv4 & 0x000000ff)>>0); + + PX_itoa(b[3],a+PX_strlen(a),5,10); + PX_strcat(a,"."); + PX_itoa(b[2],a+PX_strlen(a),5,10); + PX_strcat(a,"."); + PX_itoa(b[1],a+PX_strlen(a),5,10); + PX_strcat(a,"."); + PX_itoa(b[0],a+PX_strlen(a),5,10); + return a; +} + +px_bool PX_IsValidIPAddress(const px_char *ip_addr) +{ + // Only supports Ipv4 + px_int len; + px_int position = 0; // Current parser position + px_int bitsNumber = 0; // how many bits in ip_addr,The valid ip address should be 4 bits + px_int bitsLen; // The length of a single bit + px_int bits;// The value of a single bit + px_int n, i; + + len = PX_strlen(ip_addr); + if (len < 7 || len > 15) return PX_FALSE; // The valid IP address length should be 7 to 15 + + for (i = 0; i < len; i++) + { + if (ip_addr[i] == '.' || i == len - 1) + { + bitsLen = i - position; + if (i == len - 1) bitsLen++; // at the end, Need to add an extra length 1 + if (bitsLen > 3 || bitsLen == 0) return PX_FALSE; + if (bitsLen != 1 && ip_addr[position] == '0') return PX_FALSE; + + for (n = 0, bits = 0; n < bitsLen; n++, position++) bits = 10 * bits + (ip_addr[position] - '0'); + if (bits > 255) return PX_FALSE; + position++; + bitsNumber++; + } + else if (ip_addr[i] >= '0' && ip_addr[i] <= '9') continue; + else return PX_FALSE; + } + if (bitsNumber != 4) return PX_FALSE; + return PX_TRUE; +} + +px_dword PX_htonl(px_dword h) +{ + return PX_isBigEndianCPU() ? h : BigLittleSwap32(h); +} + + +px_dword PX_ntohl(px_dword n) +{ + return PX_isBigEndianCPU() ? n : BigLittleSwap32(n); +} + +px_word PX_htons(px_word h) +{ + return PX_isBigEndianCPU() ? h : BigLittleSwap16(h); +} + +px_word PX_ntohs(px_word n) +{ + return PX_isBigEndianCPU() ? n : BigLittleSwap16(n); +} + +px_uint32 PX_sum32(px_void *buffer, px_uint size) +{ + px_uint32 _sum32=0; + px_uint i; + px_byte *pbuffer=(px_byte *)buffer; + for (i=0;i0;i--) + { + re=br; + im=bi; + br=(re+b[i])*zr-im*zi; + bi=(re+b[i])*zi+im*zr; + } + ar=0.0; + ai=0; + for(i=n;i>0;i--) + { + re=ar; + im=ai; + ar=(re+a[i])*zr-im*zi; + ai=(re+a[i])*zi+im*zr; + } + br=br+b[0]; + ar=ar+1.0; + numr=ar*br+ai*bi; + numi=ar*bi-ai*br; + den=ar*ar+ai*ai; + x[k]=numr/den; + y[k]=numi/den; + switch(sign) + { + case 1: + { + temp=PX_sqrtd(x[k]*x[k]+y[k]*y[k]); + y[k]=PX_atan2(y[k],x[k]); + x[k]=temp; + } + break; + case 2: + { + temp=(x[k]*x[k]+y[k]*y[k]); + y[k]=PX_atan2(y[k],x[k]); + x[k]=10*PX_log10(temp); + } + break; + } + + } +} + +px_void PX_gainc(px_double b[],px_double a[],px_int n,px_int ns,px_double x[],px_double y[],px_int len,px_int sign) +{ + px_int i,j,k,nl; + px_double ar,ai,br,bi,zr,zi,im,re,den,numr,numi,freq,temp; + px_double hr,hi,tr,ti; + nl=n+1; + for (k=0;k0;i--) + { + re=br; + im=bi; + br=(re+b[j*nl+i])*zr-im*zi; + bi=(re+b[j*nl+i])*zi+im*zr; + } + ar=0; + ai=0; + for (i=n;i>0;i--) + { + re=ar; + im=ai; + ar=(re+a[j*nl+i])*zr-im*zi; + ai=(re+b[j*nl+i])*zi+im*zr; + } + br=br+b[j*nl+0]; + ar=ar+1.0; + numr=ar*br+ai*bi; + numi=ar*bi-ai*br; + den=ar*ar+ai*ai; + hr=numr/den; + hi=numi/den; + tr=x[k]*hr-y[k]*hi; + ti=x[k]*hi+y[k]*hr; + x[k]=tr; + y[k]=ti; + } + switch(sign) + { + case 1: + { + temp=PX_sqrtd(x[k]*x[k]+y[k]*y[k]); + if (temp!=0) + { + y[k]=PX_atan2(y[k],x[k]); + } + else + { + y[k]=0; + } + x[k]=temp; + } + break; + case 2: + { + temp=(x[k]*x[k]+y[k]*y[k]); + if (temp!=0) + { + y[k]=PX_atan2(y[k],x[k]); + } + else + { + temp=1.0e-40; + y[k]=0; + } + x[k]=10*PX_log10(temp); + } + break; + } + } +} + + + +px_void PX_WindowFunction_blackMan(px_double data[],px_int N) +{ + px_int n; + for(n=0;n=0; i--) + p=p*y+a[i]; + } + else + { + y=3.75/t; p=c[8]; + for (i=7; i>=0; i--) + p=p*y+c[i]; + p=p*PX_exp(t)/PX_sqrtd(t); + } + } + if (n==0) return(p); + q=p; + if (t<3.75) + { + y=(x/3.75)*(x/3.75); p=b[6]; + for (i=5; i>=0; i--) p=p*y+b[i]; + p=p*t; + } + else + { + y=3.75/t; p=d[8]; + for (i=7; i>=0; i--) p=p*y+d[i]; + p=p*PX_exp(t)/PX_sqrtd(t); + } + if (x<0.0) p=-p; + if (n==1) return(p); + if (x==0.0) return(0.0); + y=2.0/t; t=0.0; b1=1.0; b0=0.0; + m=n+(px_int)PX_sqrtd(40.0*n); + m=2*m; + + for (i=m; i>0; i--) + { + p=b0+i*y*b1; b0=b1; b1=p; + if (PX_ABS(b1)>1.0e+10) + { + t=t*1.0e-10; b0=b0*1.0e-10; + b1=b1*1.0e-10; + } + if (i==n) t=b0; + } + p=t*q/b1; + if ((x<0.0)&&(n%2==1)) p=-p; + return(p); +} + +px_void PX_WindowFunction_tukey(px_double data[],px_int N) +{ + px_int n; + if (N<16) + { + return; + } + for (n=0;n<=(N-2)/10;n++) + { + data[n]=0.5*(1-PX_cosd((px_float)(10*PX_PI*n/(N+8)))); + } + for (n=(N-2)/10;n<=9*(N-2)/10;n++) + { + data[n]=1; + } + for (n=9*(N-2)/10;n<=N-1;n++) + { + data[n]=0.5*(1-PX_cosd((px_float)(10*PX_PI*(N-n-1)/(N+8))));; + } +} + +px_void PX_WindowFunction_hanning(px_double data[],px_int N) +{ + px_int n; + for(n=0;nn-k-2) + { + w=0.5*((px_float)(1.0-PX_cos_radian((px_float)((n-i-1)*pi/(k+1))))); + } + break; + } + case PX_FIRFILTER_WINDOW_TYPE_TRIANGULAR: + { + w=1.0-PX_ABS(1.0-2*i/(n-1.0)); + break; + } + case PX_FIRFILTER_WINDOW_TYPE_HANNING: + { + w=0.5*(1.0-PX_cos_radian((px_float)(2*i*pi/(n-1)))); + break; + } + case PX_FIRFILTER_WINDOW_TYPE_HAMMING: + { + w=0.54-0.46*PX_cos_radian((px_float)(2*i*pi/(n-1))); + break; + } + case PX_FIRFILTER_WINDOW_TYPE_BLACKMAN: + { + w=0.42-0.5*PX_cos_radian((px_float)(2*i*pi/(n-1)))+0.08*PX_cos_radian((px_float)(4*i*pi/(n-1))); + break; + } + case PX_FIRFILTER_WINDOW_TYPE_KAISER: + { + w=PX_FIRKaiser(i,n,beta); + break; + } + } + return w; +} + +px_sine PX_SINE(px_double A,px_double P,px_double F) +{ + px_sine s; + s.A=A; + s.p=P; + s.f=F; + return s; +} + +px_sine PX_InstantaneousFrequency(px_sine src,px_double p2,px_double delta_t) +{ + px_double delta=(p2-src.p); + delta=delta-(px_int)delta-1/2; + delta/=delta_t; + src.f+=delta; + return src; +} + + +px_void PX_FIRFilterBuild(PX_FIRFILTER_TYPE bandtype,px_double fln,px_double fhn,PX_FIRFILTER_WINDOW_TYPE wn,px_double h[],px_int n,px_double beta) +{ + px_int i,n2,mid; + px_double s,pi,wc1,wc2=0,delay; + + pi=4.0*PX_atan(1.0); + if ((n%2)==0) + { + n2=n/2-1; + mid=1; + } + else + { + n2=n/2; + mid=0; + } + delay=n/2.0; + wc1=2.0*pi*fln; + if (bandtype>=3) + { + wc2=2.0*pi*fhn; + } + switch(bandtype) + { + case PX_FIRFILTER_TYPE_LOWPASS: + { + for (i=0;i<=n2;i++) + { + s=i-delay; + h[i]=(PX_sind((wc1*s))/(pi*s))*PX_FIRWindow(wn,n+1,i,beta); + h[n-i]=h[i]; + } + if (mid==1) + { + h[n/2]=wc1/pi; + } + } + break; + case PX_FIRFILTER_TYPE_HIGHPASS: + { + for (i=0;i<=n2;i++) + { + s=i-delay; + h[i]=(PX_sind((pi*s))-PX_sind((wc1*s)))/(pi*s); + h[i]=h[i]*PX_FIRWindow(wn,n+1,i,beta); + h[n-i]=h[i]; + } + if (mid==1) + { + h[n/2]=1.0-wc1/pi; + } + } + break; + case PX_FIRFILTER_TYPE_BANDPASS: + { + for (i=0;i<=n2;i++) + { + s=i-delay; + h[i]=(PX_sind((wc2*s))-PX_sind((wc1*s)))/(pi*s); + h[i]=h[i]*PX_FIRWindow(wn,n+1,i,beta); + h[n-i]=h[i]; + } + if (mid==1) + { + h[n/2]=(wc2-wc1)/pi; + } + } + break; + case PX_FIRFILTER_TYPE_STOPBANDFILTER: + { + for (i=0;i<=n2;i++) + { + s=i-delay; + h[i]=(PX_sind((wc1*s))-PX_sind((wc2*s)))/(pi*s); + h[i]=h[i]*PX_FIRWindow(wn,n+1,i,beta); + h[n-i]=h[i]; + } + if (mid==1) + { + h[n/2]=(wc1+pi-wc2)/pi; + } + } + break; + } +} diff --git a/UI/PainterEngine/core/PX_Typedef.h b/UI/PainterEngine/core/PX_Typedef.h new file mode 100644 index 0000000..f43e259 --- /dev/null +++ b/UI/PainterEngine/core/PX_Typedef.h @@ -0,0 +1,615 @@ +#ifndef __PX_TYPEDEF_H +#define __PX_TYPEDEF_H + +#include "PX_MathTable.h" + +#define PX_DBL_POSITIVE_MAX 1.7976931348623158e+308 +#define PX_DBL_POSITIVE_MIN 4.94065645841246544e-324 + +#define PX_DBL_NEGATIVE_MIN -1.79769313486231570E+308 +#define PX_DBL_NEGATIVE_MAX -4.94065645841246544E-324 + +#define _IN +#define _OUT +#define _LIMIT +#define PX_FALSE 0 +#define PX_TRUE 1 +#define PX_NULL 0 +#define PX_PI 3.141592653589793238462 +#define PX_e (2.7182818284590452353602) +#define PX_e2 (PX_e*PX_e) +#define PX_RAND_MAX (0xffffff) + + +#ifdef _DEBUG +#define PX_DEBUG_MODE _DEBUG +#endif + + +#define PX_COUNTOF(x) (sizeof(x)/sizeof(x[0])) + + + +typedef void px_void; +typedef int px_bool; +typedef unsigned int px_dword;//typedef uint32_t px_dword; +typedef short px_short; +typedef short px_int16; +typedef unsigned short px_uint16; +typedef unsigned short px_word; //typedef uint16_t px_word; +typedef unsigned short px_ushort; +typedef unsigned int px_uint; +typedef unsigned int px_uint32;//typedef uint32_t px_uint32; +typedef int px_int; +typedef int px_int32;//typedef int32_t px_int32; +typedef char px_char; +typedef unsigned char px_byte; +typedef unsigned char px_uchar; +typedef unsigned long px_ulong; +typedef long px_long; +typedef float px_float; +typedef float px_float32;//IEEE 754 little-endian +typedef double px_double; +typedef double px_double64; +typedef unsigned long long px_qword; +typedef unsigned long long px_uint64;//typedef uint64_t px_uint64; +typedef long long px_int64;//typedef int64_t px_int64; + + + +typedef struct +{ + union + { + px_char data[256]; + px_word wdata[128]; + }; + +}PX_RETURN_STRING; + +#include "PX_Log.h" + + +#define PX_STRUCT_OFFSET(t,m) ((((t *)0)->m-(px_byte *)0)) +#define BigLittleSwap16(A) ((((px_word)(A) & 0xff00) >> 8)|(((px_word)(A) & 0x00ff) << 8)) +#define BigLittleSwap32(A) ((((px_dword)(A) & 0xff000000) >> 24)|(((px_dword)(A) & 0x00ff0000) >> 8)|(((px_dword)(A) & 0x0000ff00) << 8)|(((px_dword)(A) & 0x000000ff)<<24)) + + +typedef enum +{ + PX_ALIGN_LEFTTOP, + PX_ALIGN_MIDTOP, + PX_ALIGN_RIGHTTOP, + PX_ALIGN_LEFTMID, + PX_ALIGN_CENTER, + PX_ALIGN_RIGHTMID, + PX_ALIGN_LEFTBOTTOM, + PX_ALIGN_MIDBOTTOM, + PX_ALIGN_RIGHTBOTTOM, +}PX_ALIGN; + + +typedef struct _px_matrix +{ + union { + struct { + px_float _11, _12, _13, _14; + px_float _21, _22, _23, _24; + px_float _31, _32, _33, _34; + px_float _41, _42, _43, _44; + }; + px_float m[4][4]; + }; +}px_matrix; + +typedef struct _px_color +{ + union + { + struct + { + px_uchar r; + px_uchar g; + px_uchar b; + px_uchar a; + }; + px_dword ucolor; + }_argb; +}px_color; + +typedef struct _px_color_hsl +{ + px_float a;//Alpha 0--1 + px_float H;//Hue 0-360 + px_float S;//Saturation 0--1 + px_float L;//Lightness 0--1 +}px_color_hsl; + +typedef struct _px_point +{ + px_float x; + px_float y; + px_float z; +}px_point; +typedef px_point px_point32; + +typedef struct _px_wpoint +{ + px_double x; + px_double y; + px_double z; +}px_wpoint; + +typedef struct +{ + px_float x, y; +}px_point2D; + +typedef px_point2D px_vector2D; +typedef px_point px_point3D; +typedef px_point px_vector3D; + +typedef struct _px_point4 +{ + px_float x; + px_float y; + px_float z; + px_float w; +}px_point4D; + +typedef px_point4D px_vertex; +typedef px_point4D px_vector4D; + +typedef struct +{ + px_point3D p0; // point on the plane + px_vector3D n; // normal to the plane +}px_plane; + +typedef struct _px_rect +{ + px_float x,y,width,height; +}px_rect; + +typedef struct __px_complex +{ + px_double re;// really + px_double im;// imaginary +}px_complex; + + + +////////////////////////////////////////////////////////////////////////// +//endian + +px_dword PX_htonl(px_dword h); +px_dword PX_ntohl(px_dword n); +px_word PX_htons(px_word h); +px_word PX_ntohs(px_word n); + + +////////////////////////////////////////////////////////////////////////// +// +px_double PX_exp(px_double x); + +////////////////////////////////////////////////////////////////////////// +//functions +px_double PX_tanh(px_double x); +px_double PX_sigmoid(px_double x); +px_double PX_ReLU(px_double x); + +////////////////////////////////////////////////////////////////////////// +//PMMCLCG +px_void PX_srand(px_uint64 seed); +px_uint32 PX_rand(void); +px_double PX_randRange(px_double min,px_double max); +px_uint32 PX_randEx(px_uint64 seed); +//gauss rand +px_double PX_GaussRand(void); + +//ceil +px_double PX_Ceil(px_double v); + +////////////////////////////////////////////////////////////////////////// +//file ext +px_void PX_FileGetName(const px_char filefullName[],px_char _out[],px_int outSize); +px_void PX_FileGetPath(const px_char filefullName[],px_char _out[],px_int outSize); +px_void PX_FileGetExt(const px_char filefullName[],px_char _out[],px_int outSize); + +////////////////////////////////////////////////////////////////////////// +//CRC +px_uint32 PX_crc32( px_void *buffer, px_uint size); +px_word PX_crc16(px_void *buffer,px_uint size); +////////////////////////////////////////////////////////////////////////// +//Sum +px_uint32 PX_sum32(px_void *buffer, px_uint size); + +////////////////////////////////////////////////////////////////////////// +//maths +px_int PX_pow_ii(px_int i,px_int n); +px_double PX_pow_dd(px_double num,px_double m); +px_float PX_sqrt( px_float number ); +px_double PX_sqrtd( px_double number ); +px_float PX_SqrtRec( px_float number ); +px_double PX_ln(px_double __x); +px_double PX_log(px_double __x); +px_double PX_lg(px_double __x); +px_double PX_log10(px_double __x); + +#define PX_RadianToAngle(radian) ((radian)*180/PX_PI) +#define PX_AngleToRadian(angle) ((angle)*PX_PI/180) + +px_double PX_sind(px_double radian); +px_double PX_cosd(px_double radian); +px_float PX_sin_radian(px_float radian); +px_float PX_cos_radian(px_float radian); +px_float PX_tan_radian(px_float radian); +px_float PX_sin_angle(px_float angle); +px_float PX_cos_angle(px_float angle); +px_float PX_tan_angle(px_float angle); +px_double PX_atan(px_double x); +px_double PX_atan2(px_double y, px_double x); + +px_double PX_asin(px_double x); +px_double PX_acos(px_double x); +px_float PX_Point_sin(px_point v); +px_float PX_Point_cos(px_point v); + +#define PX_APO(x) ((px_int)((x)+0.5f)) +#define PX_ABS(x) ((x)>0?(x):-(x)) +#define PX_SGN(x) ((x)?((x)>0?1:-1):0) +#define PX_FRAC(x) ((x)-(px_int)(x)) +#define PX_TRUNC(x) ((px_int)(x)) + +////////////////////////////////////////////////////////////////////////// +//string to others +px_void PX_BufferToHexString(px_byte data[],px_int size,px_char hex_str[]); +px_int PX_HexStringToBuffer(const px_char hex_str[],px_byte data[]); +px_uint PX_htoi(const px_char hex_str[]); +px_int PX_atoi(const px_char str[]); +px_float PX_atof(const px_char fstr[]); +PX_RETURN_STRING PX_ftos(px_float f, int precision); +PX_RETURN_STRING PX_itos(px_int num,px_int radix); +px_void PX_AscToWord(const px_char *asc,px_word *u16); +px_int PX_ftoa(px_float f, char *outbuf, int maxlen, int precision); +px_int PX_itoa(px_int num,px_char *str,px_int MaxStrSize,px_int radix); +px_dword PX_SwapEndian(px_dword val); +px_char *PX_strchr(const char *s,int ch); +px_char* PX_strstr(const char* dest, const char* src); + +/////////////////////////////////////////////////////////////////////////// +//rectangle circle +px_bool PX_isPointInCircle(px_point p,px_point circle,px_float radius); +px_bool PX_isPoint2DInCircle(px_point2D p,px_point2D circle,px_float radius); +px_bool PX_isPointInRect(px_point p,px_rect rect); +px_bool PX_isXYInRegion(px_float x,px_float y,px_float rectx,px_float recty,px_float width,px_float height); +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +//cross +px_bool PX_isLineCrossRect(px_point p1,px_point p2,px_rect rect,px_point *cp1,px_point *cp2); +px_bool PX_isRectCrossRect(px_rect rect1,px_rect rect2); +px_bool PX_isRectCrossCircle(px_rect rect1,px_point center,px_float radius); +px_bool PX_isCircleCrossCircle(px_point center1,px_float radius1,px_point center2,px_float radius2); + +////////////////////////////////////////////////////////////////////////// +px_double PX_Covariance(px_double x[],px_double y[],px_int n); +px_double PX_Variance(px_double x[],px_int n); + +////////////////////////////////////////////////////////////////////////// +//memory +void PX_memset(void *dst,px_byte byte,px_int size); +void PX_memdwordset(void *dst,px_dword dw,px_int count); +#define PX_zeromemory(dst,size) PX_memset(dst,0,size) +px_bool PX_memequ(const void *dst,const void *src,px_int size); +px_void PX_memcpy(px_void *dst,const px_void *src,px_int size); +px_void PX_strcpy(px_char *dst,const px_char *src,px_int size); +px_void PX_wstrcpy(px_word *dst,const px_word *src,px_int size); +px_void PX_strcat(px_char *src,const px_char *cat); +px_void PX_strcat_s(px_char* src, const px_char* cat,px_int size); +px_void PX_wstrcat(px_word *src,const px_word *cat); +px_void PX_strset(px_char *dst,const px_char *src); +px_int PX_strlen(const px_char *dst); +px_int PX_wstrlen(const px_word *dst); +px_int PX_strcmp(const px_char *str1, const px_char *str2); +px_bool PX_strequ(const px_char *src,const char *dst); +px_bool PX_strequ2(const px_char* src, const char* dst); +px_void PX_strupr(px_char *src); +px_void PX_strlwr(px_char *src); +px_bool PX_strIsNumeric(const px_char *str); +px_bool PX_strIsFloat(const px_char *str); +px_bool PX_strIsInt(const px_char *str); +px_bool PX_charIsNumeric(px_char ch); + +typedef enum +{ + PX_STRINGFORMAT_TYPE_INT, + PX_STRINGFORMAT_TYPE_FLOAT, + PX_STRINGFORMAT_TYPE_STRING, +}PX_STRINGFORMAT_TYPE; + +typedef struct +{ + PX_STRINGFORMAT_TYPE type; + union + { + px_int _int; + px_float _float; + const px_char *_pstring; + }; +}px_stringformat; + + +px_stringformat PX_STRINGFORMAT_INT(px_int _i); +px_stringformat PX_STRINGFORMAT_FLOAT(px_float _f); +px_stringformat PX_STRINGFORMAT_STRING(const px_char *_s); +px_int PX_sprintf8(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4,\ + px_stringformat _5,\ + px_stringformat _6,\ + px_stringformat _7,\ + px_stringformat _8\ + ); +px_int PX_sprintf7(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4,\ + px_stringformat _5,\ + px_stringformat _6,\ + px_stringformat _7 + ); +px_int PX_sprintf6(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4,\ + px_stringformat _5,\ + px_stringformat _6\ + ); +px_int PX_sprintf5(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4,\ + px_stringformat _5\ + ); +px_int PX_sprintf4(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4\ + ); +px_int PX_sprintf3(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3\ + ); +px_int PX_sprintf2(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2\ + ); +px_int PX_sprintf1(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1\ + ); +px_int PX_sprintf0(px_char *str,px_int str_size,const px_char fmt[]); +/*px_int px_sprintf(px_char *str,px_int str_size,px_char fmt[],...);*/ +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +//matrix +void PX_MatrixZero(px_matrix *Mat); +void PX_MatrixIdentity(px_matrix *Mat); +px_matrix PX_MatrixMultiply(px_matrix Mat1,px_matrix Mat2); +px_matrix PX_MatrixAdd(px_matrix Mat1,px_matrix Mat2); +px_matrix PX_MatrixSub(px_matrix Mat1,px_matrix Mat2); +px_bool PX_MatrixEqual(px_matrix Mat1,px_matrix Mat2); +px_void PX_MatrixRotateVector(px_matrix *mat,px_point v_base,px_point v); +px_void PX_MatrixTranslation(px_matrix *mat,px_float x,px_float y,px_float z); +px_void PX_MatrixRotateX(px_matrix *mat,px_float Angle); +px_void PX_MatrixRotateY(px_matrix *mat,px_float Angle); +px_void PX_MatrixRotateZ(px_matrix *mat,px_float Angle); +px_void PX_MatrixRotateXRadian(px_matrix *mat,px_float rad); +px_void PX_MatrixRotateYRadian(px_matrix *mat,px_float rad); +px_void PX_MatrixRotateZRadian(px_matrix *mat,px_float rad); +px_void PX_MatrixScale(px_matrix *mat,px_float x,px_float y,px_float z); +px_bool PX_MatrixInverse(px_matrix *mat); +px_void PX_MatrixTranspose(px_matrix *matrix); +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +//color +px_color PX_COLOR(px_uchar a,px_uchar r,px_uchar g,px_uchar b); +px_void PX_ColorIncrease(px_color *color,px_uchar inc); +px_color PX_ColorAdd(px_color color1,px_color color2); +px_color PX_ColorSub(px_color color1,px_color color2); +px_color PX_ColorMul(px_color color1,px_double muls); +px_bool PX_ColorEqual(px_color color1,px_color color2); +px_color_hsl PX_ColorRGBToHSL(px_color color_rgb); +px_color PX_ColorHSLToRGB(px_color_hsl color_hsl); +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// +//point +px_point PX_POINT(px_float x,px_float y,px_float z); +px_point2D PX_POINT2D(px_float x,px_float y); +px_point4D PX_POINT4D(px_float x,px_float y,px_float z); +px_point PX_PointRotate(px_point p,px_float angle); +px_point2D PX_Point2DRotate(px_point2D p,px_float angle); +px_float PX_PointDistance(px_point p1,px_point p2); + + +px_point PX_PointAdd(px_point p1,px_point p2); +px_point2D PX_Point2DAdd(px_point2D p1,px_point2D p2); +px_point PX_PointSub(px_point p1,px_point p2); +px_point2D PX_Point2DSub(px_point2D p1,px_point2D p2); +px_point4D PX_Point4DSub(px_point4D p1,px_point4D p2); +px_point PX_PointMul(px_point p1,px_float m); +px_point2D PX_Point2DMul(px_point2D p1,px_float m); +px_point PX_PointDiv(px_point p1,px_float m); + +px_point2D PX_Point2DRrthonormal(px_point2D v); +px_point2D PX_Point2DBase(px_point2D base1,px_point2D base2,px_point2D target); +px_point2D PX_Point2DDiv(px_point2D p1,px_float m); +px_float PX_PointDot(px_point p1,px_point p2); +px_float PX_Point2DDot(px_point2D p1,px_point2D p2); +px_float PX_Point4DDot(px_point4D p1,px_point4D p2); +px_point PX_PointCross(px_point p1,px_point p2); +px_point4D PX_Point4DCross(px_point4D p1,px_point4D p2); +px_point PX_PointInverse(px_point p1); +px_float PX_PointMod(px_point p); +px_float PX_Point2DMod(px_point2D p); +px_float PX_PointSquare(px_point p); +px_point PX_PointNormalization(px_point p); +px_point2D PX_Point2DNormalization(px_point2D p); +px_point4D PX_Point4DUnit(px_point4D p); +px_point PX_PointReflectX(px_point vector_refer,px_point respoint); + +px_point2D PX_Point2DMulMatrix(px_point2D p,px_matrix m); +px_point PX_PointMulMatrix(px_point p,px_matrix m); +px_point4D PX_Point4DMulMatrix(px_point4D p,px_matrix m); + +////////////////////////////////////////////////////////////////////////// +//Triangle +typedef struct +{ + px_point Vertex_1, Vertex_2, Vertex_3; +}px_triangle; +px_bool PX_TriangleIsCross( px_triangle* tri1, px_triangle* tri2 ); + +////////////////////////////////////////////////////////////////////////// +//plane +px_plane PX_PLANE(px_point3D p,px_vector3D n); + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +//Rect +px_rect PX_RECT(px_float x,px_float y,px_float width,px_float height); +px_rect PX_RECTPOINT2(px_point p1,px_point p2); + + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +//complex +px_complex PX_complexBuild(px_float re,px_float im); +px_complex PX_complexAdd(px_complex a,px_complex b); +px_complex PX_complexMult(px_complex a,px_complex b); +px_double PX_complexMod(px_complex a); +px_complex PX_complexLog(px_complex a); +px_complex PX_complexExp(px_complex a); +px_complex PX_complexSin(px_complex a); + +////////////////////////////////////////////////////////////////////////// +//DFT/FFT +void PX_DFT(_IN px_complex x[],_OUT px_complex X[],px_int N); +void PX_DCT(_IN px_double x[],_OUT px_double X[],px_int N); +void PX_IDFT(_IN px_complex X[],_OUT px_complex x[],px_int N); +void PX_IDCT(_IN px_double x[],_OUT px_double X[],px_int N); +void PX_FFT(_IN px_complex x[],_OUT px_complex X[],px_int N); +void PX_IFFT(_IN px_complex X[],_OUT px_complex x[],px_int N); +void PX_FFT_2(_IN px_complex x[],_OUT px_complex X[],px_int N_N); +void PX_IFFT_2(_IN px_complex X[],_OUT px_complex x[],px_int N_N); +void PX_FFT_2_Shift(_IN px_complex _in[],_OUT px_complex _out[],px_int N_N); +void PX_FT_Symmetry(_IN px_complex x[],_OUT px_complex X[],px_int N); + +////////////////////////////////////////////////////////////////////////// +//cepstrum +typedef enum +{ + PX_CEPTRUM_TYPE_REAL, + PX_CEPSTRUM_TYPE_COMPLEX, +}PX_CEPSTRUM_TYPE; +void PX_Cepstrum(_IN px_complex x[],_OUT px_complex X[],px_int N,PX_CEPSTRUM_TYPE type); + +////////////////////////////////////////////////////////////////////////// +//zero-crossing rate,ZCR +px_double PX_ZeroCrossingRate(_IN px_double x[],px_int N); +px_double PX_ZeroCrossingRateComplex(_IN px_complex x[],px_int N); +////////////////////////////////////////////////////////////////////////// +//PitchEstimation +px_int PX_PitchEstimation(_IN px_complex x[],px_int N,px_int sampleRate,px_int low_Hz,px_int high_Hz); +////////////////////////////////////////////////////////////////////////// +//PreEmphasise +void PX_PreEmphasise(const px_double *data, int len, px_double *out, px_double preF);//0.9allocsize=init_size; + vec->nodesize=nodeSize; + vec->size=0; + vec->mp=mp; + + + if (init_size==0) + { + vec->data=PX_NULL; + return PX_TRUE; + } + + if(!(vec->data=MP_Malloc(mp,init_size*nodeSize))) + return PX_FALSE; + + return PX_TRUE; +} + + +px_bool PX_VectorSet(px_vector *vec,px_uint index,px_void *data) +{ + px_void *old; + px_uint allocsize=1; + if (index>(px_uint)vec->allocsize-1) + { + while(allocsize<=(px_uint)index) allocsize<<=1; + + old=vec->data; + vec->data=MP_Malloc(vec->mp,allocsize*vec->nodesize); + if (vec->data==PX_NULL) + { + return PX_FALSE; + } + PX_memcpy(vec->data,old,vec->allocsize*vec->nodesize); + vec->allocsize=allocsize; + MP_Free(vec->mp,old); + } + if (index>(px_uint)vec->size-1) + { + vec->size=index+1; + } + PX_memcpy((px_byte *)vec->data+index*vec->nodesize,data,vec->nodesize); + return PX_TRUE; +} + + +px_bool PX_VectorPushback(px_vector *vec,px_void *data) +{ + px_void *old; + if (vec->sizeallocsize) + { + PX_memcpy((px_byte *)vec->data+vec->size*vec->nodesize,data,vec->nodesize); + vec->size++; + } + else + { + px_int allocSize=vec->allocsize; + if (allocSize==0) + { + allocSize=2; + } + else + { + allocSize=vec->allocsize*2; + } + + old=vec->data; + vec->data=MP_Malloc(vec->mp,allocSize*vec->nodesize); + if (vec->data==PX_NULL) + { + return PX_FALSE; + } + PX_memcpy(vec->data,old,vec->allocsize*vec->nodesize); + vec->allocsize=allocSize; + PX_memcpy((px_byte *)vec->data+vec->size*vec->nodesize,data,vec->nodesize); + vec->size++; + if(old) + MP_Free(vec->mp,old); + } + return PX_TRUE; +} + + +px_bool PX_VectorPushTo(px_vector *vec,px_void *data,px_int index) +{ + if(!PX_VectorPushback(vec,data)) return PX_FALSE; + if (index<0||index>=vec->size) + { + return PX_TRUE; + } +#ifndef PX_DEBUG_MODE + if (index<0) + { + PX_ASSERT(); + return PX_FALSE; + } +#endif + PX_memcpy((px_byte *)vec->data+(index+1)*vec->nodesize,(px_byte *)vec->data+(index)*vec->nodesize,(vec->size-index-1)*vec->nodesize); + PX_memcpy((px_byte *)vec->data+(index)*vec->nodesize,data,vec->nodesize); + return PX_TRUE; +} + +px_bool PX_VectorErase(px_vector *vec,px_int index) +{ + px_int i; + if (index<0||index>=vec->size) + { + PX_ERROR("Vector Erase Error!"); + return PX_FALSE; + } + for (i=index;isize-1;i++) + { + PX_memcpy((px_byte *)vec->data+i*vec->nodesize,(px_byte *)vec->data+(i+1)*vec->nodesize,vec->nodesize); + } + vec->size--; + return PX_TRUE; +} + +px_bool PX_VectorPop(px_vector *vec) +{ + if (vec->size==0) + { + return PX_FALSE; + } + vec->size--; + return PX_TRUE; +} + + +px_bool PX_VectorCopy(px_vector *destvec,px_vector *resvec) +{ + if (destvec->nodesize!=resvec->nodesize) + { + return PX_FALSE; + } + if (destvec->allocsizeallocsize) + { + PX_VectorResize(destvec,resvec->allocsize); + } + PX_memcpy(destvec->data,resvec->data,resvec->nodesize*resvec->size); + destvec->size=resvec->size; + return PX_TRUE; +} + + +px_void PX_VectorFree(px_vector *vec) +{ + if((vec->data)!=PX_NULL) + MP_Free(vec->mp,vec->data); +} + + +px_bool PX_VectorResize(px_vector *vec,px_int size) +{ + if (size!=vec->size) + { + PX_VectorFree(vec); + if(!PX_VectorInitialize(vec->mp,vec,vec->nodesize,size))return PX_FALSE; + PX_memset(vec->data,0,vec->nodesize*vec->allocsize); + vec->size=size; + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_VectorCheckIndex(px_vector *vec,px_int index) +{ + if (index<0||index>=vec->size) + { + return PX_FALSE; + } + return PX_TRUE; +} + +px_bool PX_VectorAllocSize(px_vector *vec,px_int size) +{ + if (size<0||sizesize) + { + return PX_FALSE; + } + vec->size=size; + return PX_TRUE; +} + + diff --git a/UI/PainterEngine/core/PX_Vector.h b/UI/PainterEngine/core/PX_Vector.h new file mode 100644 index 0000000..6298975 --- /dev/null +++ b/UI/PainterEngine/core/PX_Vector.h @@ -0,0 +1,36 @@ +#ifndef __PX_VECTOR_H +#define __PX_VECTOR_H +#include "PX_MemoryPool.h" +typedef struct __px_vector +{ + px_void *data; + px_int nodesize; + px_int size; + px_int allocsize; + px_memorypool *mp; +}px_vector; + +px_bool PX_VectorInitialize(px_memorypool *mp,px_vector *vec,px_int nodeSize,px_int init_size); +px_bool PX_VectorSet(px_vector *vec,px_uint index,px_void *data); +px_bool PX_VectorAllocSize(px_vector *vec,px_int size); +px_bool PX_VectorPushback(px_vector *vec,px_void *data); +px_bool PX_VectorPushTo(px_vector *vec,px_void *data,px_int index); +px_bool PX_VectorErase(px_vector *vec,px_int index); +px_bool PX_VectorPop(px_vector *vec); +px_bool PX_VectorCopy(px_vector *destvec,px_vector *resvec); +px_void PX_VectorFree(px_vector *vec); +px_bool PX_VectorResize(px_vector *vec,px_int size); +px_bool PX_VectorCheckIndex(px_vector *vec,px_int index); +#define PX_VectorSize(x) ((x)->size) + +#ifdef PX_DEBUG_MODE +#define PX_VECTORAT(t,vec,i) (sizeof(t)==(vec)->nodesize?((t *)((px_byte *)((vec)->data)+(vec)->nodesize*(i))):PX_NULL) +#else +#define PX_VECTORAT(t,vec,i) ((t *)((px_byte *)((vec)->data)+(vec)->nodesize*(i))) +#endif + +#define PX_VECTORLAST(t,vec) PX_VECTORAT(t,vec,(vec)->size-1) + +#define PX_VectorClear(vec) ((vec)->size=0) + +#endif diff --git a/UI/PainterEngine/core/PX_Wave.c b/UI/PainterEngine/core/PX_Wave.c new file mode 100644 index 0000000..f89d32b --- /dev/null +++ b/UI/PainterEngine/core/PX_Wave.c @@ -0,0 +1,130 @@ +#include "PX_Wave.h" + +px_uint PX_WaveGetPCMSize(px_byte *buffer,px_int size) +{ + px_int offset=0,pcmSize; + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)buffer; + PX_WAVE_FMT_BLOCK *pfmt_block; + if (!PX_WaveVerify(buffer,size)) + { + return 0; + } + offset+=sizeof(PX_WAVE_RIFF_HEADER); + pfmt_block=(PX_WAVE_FMT_BLOCK *)(buffer+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=8; + offset+=pfmt_block->dwFmtSize; + pcmSize=0; + while (offset+(px_int)sizeof(PX_WAVE_DATA_BLOCK)szDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + offset+=pBlock->dwDataSize; + pcmSize+=pBlock->dwDataSize; + } + return pcmSize; +} + +px_byte* PX_WaveGetPCMDataPtr(px_int index,px_byte *data,px_int datasize) +{ + if (PX_WaveVerify(data,datasize)) + { + px_uint offset=0,pcmSize; + pcmSize=PX_WaveGetPCMSize(data,datasize); + + if (pcmSize!=0) + { + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)data; + PX_WAVE_FMT_BLOCK *pfmt_block; + + pfmt_block=(PX_WAVE_FMT_BLOCK *)(data+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=sizeof(PX_WAVE_RIFF_HEADER); + offset+=8; + offset+=pfmt_block->dwFmtSize; + pcmSize=0; + + while (offset<(px_uint)datasize) + { + pBlock=(PX_WAVE_DATA_BLOCK*)(data+offset); + if(!PX_memequ(pBlock->szDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + if (index==0) + { + return data+offset; + } + else + { + offset+=pBlock->dwDataSize; + } + } + return PX_NULL; + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } +} + +px_bool PX_WaveVerify(px_byte *buffer,px_int size) +{ + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)buffer; + PX_WAVE_FMT_BLOCK *pfmt_block; + if (sizeszRiffId,"RIFF",4)) + { + return PX_FALSE; + } + if (!PX_memequ(pHeader->szRiffFormat,"WAVE",4)) + { + return PX_FALSE; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(buffer+sizeof(PX_WAVE_RIFF_HEADER)); + if (!PX_memequ(pfmt_block->szFmtID,"fmt",3)) + { + return PX_FALSE; + } + if (pfmt_block->wavFormat.wChannels!=1&&pfmt_block->wavFormat.wChannels!=2) + { + return PX_FALSE; + } + if (pfmt_block->wavFormat.wBitsPerSample!=16) + { + return PX_FALSE; + } + if (pfmt_block->wavFormat.dwSamplesPerSec!=44100) + { + return PX_FALSE; + } + if (pfmt_block->wavFormat.wFormatTag!=0x0001) + { + return PX_FALSE; + } + return PX_TRUE; +} + +px_uint PX_WaveGetChannel(px_byte *buffer,px_int size) +{ + PX_WAVE_FMT_BLOCK *pfmt_block; + if (!PX_WaveVerify(buffer,size)) + { + return 0; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(buffer+sizeof(PX_WAVE_RIFF_HEADER)); + return pfmt_block->wavFormat.wChannels; +} diff --git a/UI/PainterEngine/core/PX_Wave.h b/UI/PainterEngine/core/PX_Wave.h new file mode 100644 index 0000000..e722e1f --- /dev/null +++ b/UI/PainterEngine/core/PX_Wave.h @@ -0,0 +1,44 @@ +#ifndef PX_WAVE_H +#define PX_WAVE_H +#include "PX_Typedef.h" + +typedef struct +{ + px_byte szRiffId[4]; + px_dword dwRiffSize; + px_byte szRiffFormat[4]; +}PX_WAVE_RIFF_HEADER; + +typedef struct +{ + px_word wFormatTag; + px_word wChannels; + px_dword dwSamplesPerSec; + px_dword dwAvgBytesPerSec; + px_word wBlockAlign; + px_word wBitsPerSample; +}PX_WAVE_FORMAT; + +typedef struct +{ + px_byte szFmtID[4]; // 'f','m','t',' ' please note the + // space character at the fourth location. + px_dword dwFmtSize; + PX_WAVE_FORMAT wavFormat; +}PX_WAVE_FMT_BLOCK; + + +typedef struct +{ + px_byte szDataID[4]; + px_dword dwDataSize; +}PX_WAVE_DATA_BLOCK; + +px_uint PX_WaveGetChannel(px_byte *buffer,px_int size); +px_bool PX_WaveVerify(px_byte *buffer,px_int size); +px_uint PX_WaveGetPCMSize(px_byte *buffer,px_int size); +px_byte* PX_WaveGetPCMDataPtr(px_int index,px_byte *buffer,px_int size); + +#endif + + diff --git a/UI/PainterEngine/core/PX_curve25519.c b/UI/PainterEngine/core/PX_curve25519.c new file mode 100644 index 0000000..2122e56 --- /dev/null +++ b/UI/PainterEngine/core/PX_curve25519.c @@ -0,0 +1,867 @@ +/* Copyright 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "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 COPYRIGHT + * OWNER OR CONTRIBUTORS 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. + * + * curve25519-donna: Curve25519 elliptic curve, public key function + * + * http://code.google.com/p/curve25519-donna/ + * + * Adam Langley + * + * Derived from public domain C code by Daniel J. Bernstein + * + * More information about curve25519 can be found here + * http://cr.yp.to/ecdh.html + * + * djb's sample implementation of curve25519 is written in a special assembly + * language called qhasm and uses the floating point registers. + * + * This is, almost, a clean room reimplementation from the curve25519 paper. It + * uses many of the tricks described therein. Only the crecip function is taken + * from the sample implementation. + + To generate a private key, generate 32 random bytes and: + px_byte mysecret[32]; + mysecret[0] &= 248; + mysecret[31] &= 127; + mysecret[31] |= 64; + To generate the public key, just do: + + static const uint8_t basepoint[32] = {9}; + curve25519_donna(mypublic, mysecret, basepoint); + To generate a shared key do: + + uint8_t shared_key[32]; + curve25519_donna(shared_key, mysecret, theirpublic); + + + */ + +#include "PX_curve25519.h" + +typedef px_int64 limb; + +/* Field element representation: + * + * Field elements are written as an array of signed, 64-bit limbs, least + * significant first. The value of the field element is: + * x[0] + 2^26·x[1] + x^51·x[2] + 2^102·x[3] + ... + * + * i.e. the limbs are 26, 25, 26, 25, ... bits wide. */ + +/* Sum two numbers: output += in */ +static void fsum(limb *output, const limb *in) { + unsigned i; + for (i = 0; i < 10; i += 2) { + output[0+i] = output[0+i] + in[0+i]; + output[1+i] = output[1+i] + in[1+i]; + } +} + +/* Find the difference of two numbers: output = in - output + * (note the order of the arguments!). */ +static void fdifference(limb *output, const limb *in) { + unsigned i; + for (i = 0; i < 10; ++i) { + output[i] = in[i] - output[i]; + } +} + +/* Multiply a number by a scalar: output = in * scalar */ +static void fscalar_product(limb *output, const limb *in, const limb scalar) { + unsigned i; + for (i = 0; i < 10; ++i) { + output[i] = in[i] * scalar; + } +} + +/* Multiply two numbers: output = in2 * in + * + * output must be distinct to both inputs. The inputs are reduced coefficient + * form, the output is not. + * + * output[x] <= 14 * the largest product of the input limbs. */ +static void fproduct(limb *output, const limb *in2, const limb *in) { + output[0] = ((limb) ((px_int32) in2[0])) * ((px_int32) in[0]); + output[1] = ((limb) ((px_int32) in2[0])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[0]); + output[2] = 2 * ((limb) ((px_int32) in2[1])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[0]); + output[3] = ((limb) ((px_int32) in2[1])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[0]); + output[4] = ((limb) ((px_int32) in2[2])) * ((px_int32) in[2]) + + 2 * (((limb) ((px_int32) in2[1])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[1])) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[0]); + output[5] = ((limb) ((px_int32) in2[2])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[0]); + output[6] = 2 * (((limb) ((px_int32) in2[3])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[1])) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[0]); + output[7] = ((limb) ((px_int32) in2[3])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[0]); + output[8] = ((limb) ((px_int32) in2[4])) * ((px_int32) in[4]) + + 2 * (((limb) ((px_int32) in2[3])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[1])) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[0]); + output[9] = ((limb) ((px_int32) in2[4])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[0]); + output[10] = 2 * (((limb) ((px_int32) in2[5])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[1])) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[2]); + output[11] = ((limb) ((px_int32) in2[5])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[2]); + output[12] = ((limb) ((px_int32) in2[6])) * ((px_int32) in[6]) + + 2 * (((limb) ((px_int32) in2[5])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[3])) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[4]); + output[13] = ((limb) ((px_int32) in2[6])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[4]); + output[14] = 2 * (((limb) ((px_int32) in2[7])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[5])) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[6]); + output[15] = ((limb) ((px_int32) in2[7])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[6]); + output[16] = ((limb) ((px_int32) in2[8])) * ((px_int32) in[8]) + + 2 * (((limb) ((px_int32) in2[7])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[7])); + output[17] = ((limb) ((px_int32) in2[8])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[8]); + output[18] = 2 * ((limb) ((px_int32) in2[9])) * ((px_int32) in[9]); +} + +/* Reduce a long form to a short form by taking the input mod 2^255 - 19. + * + * On entry: |output[i]| < 14*2^54 + * On exit: |output[0..8]| < 280*2^54 */ +static void freduce_degree(limb *output) { + /* Each of these shifts and adds ends up multiplying the value by 19. + * + * For output[0..8], the absolute entry value is < 14*2^54 and we add, at + * most, 19*14*2^54 thus, on exit, |output[0..8]| < 280*2^54. */ + output[8] += output[18] << 4; + output[8] += output[18] << 1; + output[8] += output[18]; + output[7] += output[17] << 4; + output[7] += output[17] << 1; + output[7] += output[17]; + output[6] += output[16] << 4; + output[6] += output[16] << 1; + output[6] += output[16]; + output[5] += output[15] << 4; + output[5] += output[15] << 1; + output[5] += output[15]; + output[4] += output[14] << 4; + output[4] += output[14] << 1; + output[4] += output[14]; + output[3] += output[13] << 4; + output[3] += output[13] << 1; + output[3] += output[13]; + output[2] += output[12] << 4; + output[2] += output[12] << 1; + output[2] += output[12]; + output[1] += output[11] << 4; + output[1] += output[11] << 1; + output[1] += output[11]; + output[0] += output[10] << 4; + output[0] += output[10] << 1; + output[0] += output[10]; +} + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +/* return v / 2^26, using only shifts and adds. + * + * On entry: v can take any value. */ +static limb div_by_2_26(const limb v) +{ + /* High word of v; no shift needed. */ + const px_dword highword = (px_dword) (((px_uint64) v) >> 32); + /* Set to all 1s if v was negative; else set to 0s. */ + const px_int32 sign = ((px_int32) highword) >> 31; + /* Set to 0x3ffffff if v was negative; else set to 0. */ + const px_int32 roundoff = ((px_dword) sign) >> 6; + /* Should return v / (1<<26) */ + return (v + roundoff) >> 26; +} + +/* return v / (2^25), using only shifts and adds. + * + * On entry: v can take any value. */ +static limb div_by_2_25(const limb v) +{ + /* High word of v; no shift needed*/ + const px_dword highword = (px_dword) (((px_uint64) v) >> 32); + /* Set to all 1s if v was negative; else set to 0s. */ + const px_int32 sign = ((px_int32) highword) >> 31; + /* Set to 0x1ffffff if v was negative; else set to 0. */ + const px_int32 roundoff = ((px_dword) sign) >> 7; + /* Should return v / (1<<25) */ + return (v + roundoff) >> 25; +} + +/* Reduce all coefficients of the short form input so that |x| < 2^26. + * + * On entry: |output[i]| < 280*2^54 */ +static void freduce_coefficients(limb *output) { + unsigned i; + + output[10] = 0; + + for (i = 0; i < 10; i += 2) { + limb over = div_by_2_26(output[i]); + /* The entry condition (that |output[i]| < 280*2^54) means that over is, at + * most, 280*2^28 in the first iteration of this loop. This is added to the + * next limb and we can approximate the resulting bound of that limb by + * 281*2^54. */ + output[i] -= over << 26; + output[i+1] += over; + + /* For the first iteration, |output[i+1]| < 281*2^54, thus |over| < + * 281*2^29. When this is added to the next limb, the resulting bound can + * be approximated as 281*2^54. + * + * For subsequent iterations of the loop, 281*2^54 remains a conservative + * bound and no overflow occurs. */ + over = div_by_2_25(output[i+1]); + output[i+1] -= over << 25; + output[i+2] += over; + } + /* Now |output[10]| < 281*2^29 and all other coefficients are reduced. */ + output[0] += output[10] << 4; + output[0] += output[10] << 1; + output[0] += output[10]; + + output[10] = 0; + + /* Now output[1..9] are reduced, and |output[0]| < 2^26 + 19*281*2^29 + * So |over| will be no more than 2^16. */ + { + limb over = div_by_2_26(output[0]); + output[0] -= over << 26; + output[1] += over; + } + + /* Now output[0,2..9] are reduced, and |output[1]| < 2^25 + 2^16 < 2^26. The + * bound on |output[1]| is sufficient to meet our needs. */ +} + +/* A helpful wrapper around fproduct: output = in * in2. + * + * On entry: |in[i]| < 2^27 and |in2[i]| < 2^27. + * + * output must be distinct to both inputs. The output is reduced degree + * (indeed, one need only provide storage for 10 limbs) and |output[i]| < 2^26. */ +static void +fmul(limb *output, const limb *in, const limb *in2) { + limb t[19]; + fproduct(t, in, in2); + /* |t[i]| < 14*2^54 */ + freduce_degree(t); + freduce_coefficients(t); + /* |t[i]| < 2^26 */ + PX_memcpy(output, t, sizeof(limb) * 10); +} + +/* Square a number: output = in**2 + * + * output must be distinct from the input. The inputs are reduced coefficient + * form, the output is not. + * + * output[x] <= 14 * the largest product of the input limbs. */ +static void fsquare_inner(limb *output, const limb *in) { + output[0] = ((limb) ((px_int32) in[0])) * ((px_int32) in[0]); + output[1] = 2 * ((limb) ((px_int32) in[0])) * ((px_int32) in[1]); + output[2] = 2 * (((limb) ((px_int32) in[1])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[2])); + output[3] = 2 * (((limb) ((px_int32) in[1])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[3])); + output[4] = ((limb) ((px_int32) in[2])) * ((px_int32) in[2]) + + 4 * ((limb) ((px_int32) in[1])) * ((px_int32) in[3]) + + 2 * ((limb) ((px_int32) in[0])) * ((px_int32) in[4]); + output[5] = 2 * (((limb) ((px_int32) in[2])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in[1])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[5])); + output[6] = 2 * (((limb) ((px_int32) in[3])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[6]) + + 2 * ((limb) ((px_int32) in[1])) * ((px_int32) in[5])); + output[7] = 2 * (((limb) ((px_int32) in[3])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in[1])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[7])); + output[8] = ((limb) ((px_int32) in[4])) * ((px_int32) in[4]) + + 2 * (((limb) ((px_int32) in[2])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[8]) + + 2 * (((limb) ((px_int32) in[1])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[3])) * ((px_int32) in[5]))); + output[9] = 2 * (((limb) ((px_int32) in[4])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in[3])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[1])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[9])); + output[10] = 2 * (((limb) ((px_int32) in[5])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in[4])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[8]) + + 2 * (((limb) ((px_int32) in[3])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[1])) * ((px_int32) in[9]))); + output[11] = 2 * (((limb) ((px_int32) in[5])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[4])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[3])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[9])); + output[12] = ((limb) ((px_int32) in[6])) * ((px_int32) in[6]) + + 2 * (((limb) ((px_int32) in[4])) * ((px_int32) in[8]) + + 2 * (((limb) ((px_int32) in[5])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[3])) * ((px_int32) in[9]))); + output[13] = 2 * (((limb) ((px_int32) in[6])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[5])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in[4])) * ((px_int32) in[9])); + output[14] = 2 * (((limb) ((px_int32) in[7])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[6])) * ((px_int32) in[8]) + + 2 * ((limb) ((px_int32) in[5])) * ((px_int32) in[9])); + output[15] = 2 * (((limb) ((px_int32) in[7])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in[6])) * ((px_int32) in[9])); + output[16] = ((limb) ((px_int32) in[8])) * ((px_int32) in[8]) + + 4 * ((limb) ((px_int32) in[7])) * ((px_int32) in[9]); + output[17] = 2 * ((limb) ((px_int32) in[8])) * ((px_int32) in[9]); + output[18] = 2 * ((limb) ((px_int32) in[9])) * ((px_int32) in[9]); +} + +/* fsquare sets output = in^2. + * + * On entry: The |in| argument is in reduced coefficients form and |in[i]| < + * 2^27. + * + * On exit: The |output| argument is in reduced coefficients form (indeed, one + * need only provide storage for 10 limbs) and |out[i]| < 2^26. */ +static void +fsquare(limb *output, const limb *in) { + limb t[19]; + fsquare_inner(t, in); + /* |t[i]| < 14*2^54 because the largest product of two limbs will be < + * 2^(27+27) and fsquare_inner adds together, at most, 14 of those + * products. */ + freduce_degree(t); + freduce_coefficients(t); + /* |t[i]| < 2^26 */ + PX_memcpy(output, t, sizeof(limb) * 10); +} + +/* Take a little-endian, 32-byte number and expand it into polynomial form */ +static void +fexpand(limb *output, const px_byte *input) { +#define F(n,start,shift,mask) \ + output[n] = ((((limb) input[start + 0]) | \ + ((limb) input[start + 1]) << 8 | \ + ((limb) input[start + 2]) << 16 | \ + ((limb) input[start + 3]) << 24) >> shift) & mask; + F(0, 0, 0, 0x3ffffff); + F(1, 3, 2, 0x1ffffff); + F(2, 6, 3, 0x3ffffff); + F(3, 9, 5, 0x1ffffff); + F(4, 12, 6, 0x3ffffff); + F(5, 16, 0, 0x1ffffff); + F(6, 19, 1, 0x3ffffff); + F(7, 22, 3, 0x1ffffff); + F(8, 25, 4, 0x3ffffff); + F(9, 28, 6, 0x1ffffff); +#undef F +} + +#if (-32 >> 1) != -16 +#error "This code only works when >> does sign-extension on negative numbers" +#endif + +/* s32_eq returns 0xffffffff iff a == b and zero otherwise. */ +static px_int32 s32_eq(px_int32 a, px_int32 b) { + a = ~(a ^ b); + a &= a << 16; + a &= a << 8; + a &= a << 4; + a &= a << 2; + a &= a << 1; + return a >> 31; +} + +/* s32_gte returns 0xffffffff if a >= b and zero otherwise, where a and b are + * both non-negative. */ +static px_int32 s32_gte(px_int32 a, px_int32 b) { + a -= b; + /* a >= 0 iff a >= b. */ + return ~(a >> 31); +} + +/* Take a fully reduced polynomial form number and contract it into a + * little-endian, 32-byte array. + * + * On entry: |input_limbs[i]| < 2^26 */ +static void +fcontract(px_byte *output, limb *input_limbs) { + px_int i; + px_int j; + px_int32 input[10]; + px_int32 mask; + + /* |input_limbs[i]| < 2^26, so it's valid to convert to an s32. */ + for (i = 0; i < 10; i++) { + input[i] = (px_int32)input_limbs[i]; + } + + for (j = 0; j < 2; ++j) { + for (i = 0; i < 9; ++i) { + if ((i & 1) == 1) { + /* This calculation is a time-invariant way to make input[i] + * non-negative by borrowing from the next-larger limb. */ + const px_int32 mask = input[i] >> 31; + const px_int32 carry = -((input[i] & mask) >> 25); + input[i] = input[i] + (carry << 25); + input[i+1] = input[i+1] - carry; + } else { + const px_int32 mask = input[i] >> 31; + const px_int32 carry = -((input[i] & mask) >> 26); + input[i] = input[i] + (carry << 26); + input[i+1] = input[i+1] - carry; + } + } + + /* There's no greater limb for input[9] to borrow from, but we can multiply + * by 19 and borrow from input[0], which is valid mod 2^255-19. */ + { + const px_int32 mask = input[9] >> 31; + const px_int32 carry = -((input[9] & mask) >> 25); + input[9] = input[9] + (carry << 25); + input[0] = input[0] - (carry * 19); + } + + /* After the first iteration, input[1..9] are non-negative and fit within + * 25 or 26 bits, depending on position. However, input[0] may be + * negative. */ + } + + /* The first borrow-propagation pass above ended with every limb + except (possibly) input[0] non-negative. + + If input[0] was negative after the first pass, then it was because of a + carry from input[9]. On entry, input[9] < 2^26 so the carry was, at most, + one, since (2**26-1) >> 25 = 1. Thus input[0] >= -19. + + In the second pass, each limb is decreased by at most one. Thus the second + borrow-propagation pass could only have wrapped around to decrease + input[0] again if the first pass left input[0] negative *and* input[1] + through input[9] were all zero. In that case, input[1] is now 2^25 - 1, + and this last borrow-propagation step will leave input[1] non-negative. */ + { + const px_int32 mask = input[0] >> 31; + const px_int32 carry = -((input[0] & mask) >> 26); + input[0] = input[0] + (carry << 26); + input[1] = input[1] - carry; + } + + /* All input[i] are now non-negative. However, there might be values between + * 2^25 and 2^26 in a limb which is, nominally, 25 bits wide. */ + for (j = 0; j < 2; j++) { + for (i = 0; i < 9; i++) { + if ((i & 1) == 1) { + const px_int32 carry = input[i] >> 25; + input[i] &= 0x1ffffff; + input[i+1] += carry; + } else { + const px_int32 carry = input[i] >> 26; + input[i] &= 0x3ffffff; + input[i+1] += carry; + } + } + + { + const px_int32 carry = input[9] >> 25; + input[9] &= 0x1ffffff; + input[0] += 19*carry; + } + } + + /* If the first carry-chain pass, just above, ended up with a carry from + * input[9], and that caused input[0] to be out-of-bounds, then input[0] was + * < 2^26 + 2*19, because the carry was, at most, two. + * + * If the second pass carried from input[9] again then input[0] is < 2*19 and + * the input[9] -> input[0] carry didn't push input[0] out of bounds. */ + + /* It still remains the case that input might be between 2^255-19 and 2^255. + * In this case, input[1..9] must take their maximum value and input[0] must + * be >= (2^255-19) & 0x3ffffff, which is 0x3ffffed. */ + mask = s32_gte(input[0], 0x3ffffed); + for (i = 1; i < 10; i++) { + if ((i & 1) == 1) { + mask &= s32_eq(input[i], 0x1ffffff); + } else { + mask &= s32_eq(input[i], 0x3ffffff); + } + } + + /* mask is either 0xffffffff (if input >= 2^255-19) and zero otherwise. Thus + * this conditionally subtracts 2^255-19. */ + input[0] -= mask & 0x3ffffed; + + for (i = 1; i < 10; i++) { + if ((i & 1) == 1) { + input[i] -= mask & 0x1ffffff; + } else { + input[i] -= mask & 0x3ffffff; + } + } + + input[1] <<= 2; + input[2] <<= 3; + input[3] <<= 5; + input[4] <<= 6; + input[6] <<= 1; + input[7] <<= 3; + input[8] <<= 4; + input[9] <<= 6; +#define F(i, s) \ + output[s+0] |= input[i] & 0xff; \ + output[s+1] = (input[i] >> 8) & 0xff; \ + output[s+2] = (input[i] >> 16) & 0xff; \ + output[s+3] = (input[i] >> 24) & 0xff; + output[0] = 0; + output[16] = 0; + F(0,0); + F(1,3); + F(2,6); + F(3,9); + F(4,12); + F(5,16); + F(6,19); + F(7,22); + F(8,25); + F(9,28); +#undef F +} + +/* Input: Q, Q', Q-Q' + * Output: 2Q, Q+Q' + * + * x2 z3: long form + * x3 z3: long form + * x z: short form, destroyed + * xprime zprime: short form, destroyed + * qmqp: short form, preserved + * + * On entry and exit, the absolute value of the limbs of all inputs and outputs + * are < 2^26. */ +static void fmonty(limb *x2, limb *z2, /* output 2Q */ + limb *x3, limb *z3, /* output Q + Q' */ + limb *x, limb *z, /* input Q */ + limb *xprime, limb *zprime, /* input Q' */ + const limb *qmqp /* input Q - Q' */) { + limb origx[10], origxprime[10], zzz[19], xx[19], zz[19], xxprime[19], + zzprime[19], zzzprime[19], xxxprime[19]; + + PX_memcpy(origx, x, 10 * sizeof(limb)); + fsum(x, z); + /* |x[i]| < 2^27 */ + fdifference(z, origx); /* does x - z */ + /* |z[i]| < 2^27 */ + + PX_memcpy(origxprime, xprime, sizeof(limb) * 10); + fsum(xprime, zprime); + /* |xprime[i]| < 2^27 */ + fdifference(zprime, origxprime); + /* |zprime[i]| < 2^27 */ + fproduct(xxprime, xprime, z); + /* |xxprime[i]| < 14*2^54: the largest product of two limbs will be < + * 2^(27+27) and fproduct adds together, at most, 14 of those products. + * (Approximating that to 2^58 doesn't work out.) */ + fproduct(zzprime, x, zprime); + /* |zzprime[i]| < 14*2^54 */ + freduce_degree(xxprime); + freduce_coefficients(xxprime); + /* |xxprime[i]| < 2^26 */ + freduce_degree(zzprime); + freduce_coefficients(zzprime); + /* |zzprime[i]| < 2^26 */ + PX_memcpy(origxprime, xxprime, sizeof(limb) * 10); + fsum(xxprime, zzprime); + /* |xxprime[i]| < 2^27 */ + fdifference(zzprime, origxprime); + /* |zzprime[i]| < 2^27 */ + fsquare(xxxprime, xxprime); + /* |xxxprime[i]| < 2^26 */ + fsquare(zzzprime, zzprime); + /* |zzzprime[i]| < 2^26 */ + fproduct(zzprime, zzzprime, qmqp); + /* |zzprime[i]| < 14*2^52 */ + freduce_degree(zzprime); + freduce_coefficients(zzprime); + /* |zzprime[i]| < 2^26 */ + PX_memcpy(x3, xxxprime, sizeof(limb) * 10); + PX_memcpy(z3, zzprime, sizeof(limb) * 10); + + fsquare(xx, x); + /* |xx[i]| < 2^26 */ + fsquare(zz, z); + /* |zz[i]| < 2^26 */ + fproduct(x2, xx, zz); + /* |x2[i]| < 14*2^52 */ + freduce_degree(x2); + freduce_coefficients(x2); + /* |x2[i]| < 2^26 */ + fdifference(zz, xx); // does zz = xx - zz + /* |zz[i]| < 2^27 */ + PX_memset(zzz + 10, 0, sizeof(limb) * 9); + fscalar_product(zzz, zz, 121665); + /* |zzz[i]| < 2^(27+17) */ + /* No need to call freduce_degree here: + fscalar_product doesn't increase the degree of its input. */ + freduce_coefficients(zzz); + /* |zzz[i]| < 2^26 */ + fsum(zzz, xx); + /* |zzz[i]| < 2^27 */ + fproduct(z2, zz, zzz); + /* |z2[i]| < 14*2^(26+27) */ + freduce_degree(z2); + freduce_coefficients(z2); + /* |z2|i| < 2^26 */ +} + +/* Conditionally swap two reduced-form limb arrays if 'iswap' is 1, but leave + * them unchanged if 'iswap' is 0. Runs in data-invariant time to avoid + * side-channel attacks. + * + * NOTE that this function requires that 'iswap' be 1 or 0; other values give + * wrong results. Also, the two limb arrays must be in reduced-coefficient, + * reduced-degree form: the values in a[10..19] or b[10..19] aren't swapped, + * and all all values in a[0..9],b[0..9] must have magnitude less than + * INT32_MAX. */ +static void +swap_conditional(limb a[19], limb b[19], limb iswap) { + unsigned i; + const px_int32 swap = (px_int32) -iswap; + + for (i = 0; i < 10; ++i) { + const px_int32 x = swap & ( ((px_int32)a[i]) ^ ((px_int32)b[i]) ); + a[i] = ((px_int32)a[i]) ^ x; + b[i] = ((px_int32)b[i]) ^ x; + } +} + +/* Calculates nQ where Q is the x-coordinate of a point on the curve + * + * resultx/resultz: the x coordinate of the resulting curve point (short form) + * n: a little endian, 32-byte number + * q: a point of the curve (short form) */ +static void +cmult(limb *resultx, limb *resultz, const px_byte *n, const limb *q) { + limb a[19] = {0}, b[19] = {1}, c[19] = {1}, d[19] = {0}; + limb *nqpqx = a, *nqpqz = b, *nqx = c, *nqz = d, *t; + limb e[19] = {0}, f[19] = {1}, g[19] = {0}, h[19] = {1}; + limb *nqpqx2 = e, *nqpqz2 = f, *nqx2 = g, *nqz2 = h; + + unsigned i, j; + + PX_memcpy(nqpqx, (void *)q, sizeof(limb) * 10); + + for (i = 0; i < 32; ++i) { + px_byte byte = n[31 - i]; + for (j = 0; j < 8; ++j) { + const limb bit = byte >> 7; + + swap_conditional(nqx, nqpqx, bit); + swap_conditional(nqz, nqpqz, bit); + fmonty(nqx2, nqz2, + nqpqx2, nqpqz2, + nqx, nqz, + nqpqx, nqpqz, + q); + swap_conditional(nqx2, nqpqx2, bit); + swap_conditional(nqz2, nqpqz2, bit); + + t = nqx; + nqx = nqx2; + nqx2 = t; + t = nqz; + nqz = nqz2; + nqz2 = t; + t = nqpqx; + nqpqx = nqpqx2; + nqpqx2 = t; + t = nqpqz; + nqpqz = nqpqz2; + nqpqz2 = t; + + byte <<= 1; + } + } + + PX_memcpy(resultx, nqx, sizeof(limb) * 10); + PX_memcpy(resultz, nqz, sizeof(limb) * 10); +} + +// ----------------------------------------------------------------------------- +// Shamelessly copied from djb's code +// ----------------------------------------------------------------------------- +static void +crecip(limb *out, const limb *z) { + limb z2[10]; + limb z9[10]; + limb z11[10]; + limb z2_5_0[10]; + limb z2_10_0[10]; + limb z2_20_0[10]; + limb z2_50_0[10]; + limb z2_100_0[10]; + limb t0[10]; + limb t1[10]; + px_int i; + + /* 2 */ fsquare(z2,z); + /* 4 */ fsquare(t1,z2); + /* 8 */ fsquare(t0,t1); + /* 9 */ fmul(z9,t0,z); + /* 11 */ fmul(z11,z9,z2); + /* 22 */ fsquare(t0,z11); + /* 2^5 - 2^0 = 31 */ fmul(z2_5_0,t0,z9); + + /* 2^6 - 2^1 */ fsquare(t0,z2_5_0); + /* 2^7 - 2^2 */ fsquare(t1,t0); + /* 2^8 - 2^3 */ fsquare(t0,t1); + /* 2^9 - 2^4 */ fsquare(t1,t0); + /* 2^10 - 2^5 */ fsquare(t0,t1); + /* 2^10 - 2^0 */ fmul(z2_10_0,t0,z2_5_0); + + /* 2^11 - 2^1 */ fsquare(t0,z2_10_0); + /* 2^12 - 2^2 */ fsquare(t1,t0); + /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t0,t1); fsquare(t1,t0); } + /* 2^20 - 2^0 */ fmul(z2_20_0,t1,z2_10_0); + + /* 2^21 - 2^1 */ fsquare(t0,z2_20_0); + /* 2^22 - 2^2 */ fsquare(t1,t0); + /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { fsquare(t0,t1); fsquare(t1,t0); } + /* 2^40 - 2^0 */ fmul(t0,t1,z2_20_0); + + /* 2^41 - 2^1 */ fsquare(t1,t0); + /* 2^42 - 2^2 */ fsquare(t0,t1); + /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t1,t0); fsquare(t0,t1); } + /* 2^50 - 2^0 */ fmul(z2_50_0,t0,z2_10_0); + + /* 2^51 - 2^1 */ fsquare(t0,z2_50_0); + /* 2^52 - 2^2 */ fsquare(t1,t0); + /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); } + /* 2^100 - 2^0 */ fmul(z2_100_0,t1,z2_50_0); + + /* 2^101 - 2^1 */ fsquare(t1,z2_100_0); + /* 2^102 - 2^2 */ fsquare(t0,t1); + /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { fsquare(t1,t0); fsquare(t0,t1); } + /* 2^200 - 2^0 */ fmul(t1,t0,z2_100_0); + + /* 2^201 - 2^1 */ fsquare(t0,t1); + /* 2^202 - 2^2 */ fsquare(t1,t0); + /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); } + /* 2^250 - 2^0 */ fmul(t0,t1,z2_50_0); + + /* 2^251 - 2^1 */ fsquare(t1,t0); + /* 2^252 - 2^2 */ fsquare(t0,t1); + /* 2^253 - 2^3 */ fsquare(t1,t0); + /* 2^254 - 2^4 */ fsquare(t0,t1); + /* 2^255 - 2^5 */ fsquare(t1,t0); + /* 2^255 - 21 */ fmul(out,t1,z11); +} + +px_void PX_Curve25519(px_byte *mypublic, const px_byte *secret, const px_byte *basepoint) +{ + limb bp[10], x[10], z[11], zmone[10]; + px_byte e[32]; + px_int i; + + for (i = 0; i < 32; ++i) e[i] = secret[i]; + e[0] &= 248; + e[31] &= 127; + e[31] |= 64; + + fexpand(bp, basepoint); + cmult(x, z, e, bp); + crecip(zmone, z); + fmul(z, x, zmone); + fcontract(mypublic, z); +} diff --git a/UI/PainterEngine/core/PX_curve25519.h b/UI/PainterEngine/core/PX_curve25519.h new file mode 100644 index 0000000..116511a --- /dev/null +++ b/UI/PainterEngine/core/PX_curve25519.h @@ -0,0 +1,20 @@ +#ifndef PX_CURVE25519_H +#define PX_CURVE25519_H +#include "PX_MemoryPool.h" +/* +To generate a private key, generate 32 random bytes and: +px_byte mysecret[32]; +mysecret[0] &= 248; +mysecret[31] &= 127; +mysecret[31] |= 64; +To generate the public key, just do: + +static const uint8_t basepoint[32] = {9}; +curve25519_donna(mypublic, mysecret, basepoint); +To generate a shared key do: + +uint8_t shared_key[32]; +curve25519_donna(shared_key, mysecret, theirpublic); +*/ +px_void PX_Curve25519(px_byte *mypublic, const px_byte *secret, const px_byte *basepoint); +#endif diff --git a/UI/PainterEngine/core/PX_rbtree.c b/UI/PainterEngine/core/PX_rbtree.c new file mode 100644 index 0000000..c7e5525 --- /dev/null +++ b/UI/PainterEngine/core/PX_rbtree.c @@ -0,0 +1,453 @@ +/* + Red Black Trees + (C) 1999 Andrea Arcangeli + (C) 2002 David Woodhouse + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + linux/lib/rbtree.c +*/ + +#include "PX_rbtree.h" + +static void __rb_rotate_left(struct px_rb_node *node, struct px_rb_root *root) +{ + struct px_rb_node *right = node->rb_right; + struct px_rb_node *parent = rb_parent(node); + + if ((node->rb_right = right->rb_left)) + rb_set_parent(right->rb_left, node); + right->rb_left = node; + + rb_set_parent(right, parent); + + if (parent) + { + if (node == parent->rb_left) + parent->rb_left = right; + else + parent->rb_right = right; + } + else + root->rb_node = right; + rb_set_parent(node, right); +} + +static void __rb_rotate_right(struct px_rb_node *node, struct px_rb_root *root) +{ + struct px_rb_node *left = node->rb_left; + struct px_rb_node *parent = rb_parent(node); + + if ((node->rb_left = left->rb_right)) + rb_set_parent(left->rb_right, node); + left->rb_right = node; + + rb_set_parent(left, parent); + + if (parent) + { + if (node == parent->rb_right) + parent->rb_right = left; + else + parent->rb_left = left; + } + else + root->rb_node = left; + rb_set_parent(node, left); +} + +void rb_insert_color(struct px_rb_node *node, struct px_rb_root *root) +{ + struct px_rb_node *parent, *gparent; + + while ((parent = rb_parent(node)) && rb_is_red(parent)) + { + gparent = rb_parent(parent); + + if (parent == gparent->rb_left) + { + { + register struct px_rb_node *uncle = gparent->rb_right; + if (uncle && rb_is_red(uncle)) + { + rb_set_black(uncle); + rb_set_black(parent); + rb_set_red(gparent); + node = gparent; + continue; + } + } + + if (parent->rb_right == node) + { + register struct px_rb_node *tmp; + __rb_rotate_left(parent, root); + tmp = parent; + parent = node; + node = tmp; + } + + rb_set_black(parent); + rb_set_red(gparent); + __rb_rotate_right(gparent, root); + } else { + { + register struct px_rb_node *uncle = gparent->rb_left; + if (uncle && rb_is_red(uncle)) + { + rb_set_black(uncle); + rb_set_black(parent); + rb_set_red(gparent); + node = gparent; + continue; + } + } + + if (parent->rb_left == node) + { + register struct px_rb_node *tmp; + __rb_rotate_right(parent, root); + tmp = parent; + parent = node; + node = tmp; + } + + rb_set_black(parent); + rb_set_red(gparent); + __rb_rotate_left(gparent, root); + } + } + + rb_set_black(root->rb_node); +} + +static void __rb_erase_color(struct px_rb_node *node, struct px_rb_node *parent, + struct px_rb_root *root) +{ + struct px_rb_node *other; + + while ((!node || rb_is_black(node)) && node != root->rb_node) + { + if (parent->rb_left == node) + { + other = parent->rb_right; + if (rb_is_red(other)) + { + rb_set_black(other); + rb_set_red(parent); + __rb_rotate_left(parent, root); + other = parent->rb_right; + } + if ((!other->rb_left || rb_is_black(other->rb_left)) && + (!other->rb_right || rb_is_black(other->rb_right))) + { + rb_set_red(other); + node = parent; + parent = rb_parent(node); + } + else + { + if (!other->rb_right || rb_is_black(other->rb_right)) + { + rb_set_black(other->rb_left); + rb_set_red(other); + __rb_rotate_right(other, root); + other = parent->rb_right; + } + rb_set_color(other, rb_color(parent)); + rb_set_black(parent); + rb_set_black(other->rb_right); + __rb_rotate_left(parent, root); + node = root->rb_node; + break; + } + } + else + { + other = parent->rb_left; + if (rb_is_red(other)) + { + rb_set_black(other); + rb_set_red(parent); + __rb_rotate_right(parent, root); + other = parent->rb_left; + } + if ((!other->rb_left || rb_is_black(other->rb_left)) && + (!other->rb_right || rb_is_black(other->rb_right))) + { + rb_set_red(other); + node = parent; + parent = rb_parent(node); + } + else + { + if (!other->rb_left || rb_is_black(other->rb_left)) + { + rb_set_black(other->rb_right); + rb_set_red(other); + __rb_rotate_left(other, root); + other = parent->rb_left; + } + rb_set_color(other, rb_color(parent)); + rb_set_black(parent); + rb_set_black(other->rb_left); + __rb_rotate_right(parent, root); + node = root->rb_node; + break; + } + } + } + if (node) + rb_set_black(node); +} + +void rb_erase(struct px_rb_node *node, struct px_rb_root *root) +{ + struct px_rb_node *child, *parent; + int color; + + if (!node->rb_left) + child = node->rb_right; + else if (!node->rb_right) + child = node->rb_left; + else + { + struct px_rb_node *old = node, *left; + + node = node->rb_right; + while ((left = node->rb_left) != PX_RB_NULL) + node = left; + + if (rb_parent(old)) { + if (rb_parent(old)->rb_left == old) + rb_parent(old)->rb_left = node; + else + rb_parent(old)->rb_right = node; + } else + root->rb_node = node; + + child = node->rb_right; + parent = rb_parent(node); + color = rb_color(node); + + if (parent == old) { + parent = node; + } else { + if (child) + rb_set_parent(child, parent); + parent->rb_left = child; + + node->rb_right = old->rb_right; + rb_set_parent(old->rb_right, node); + } + + //node->rb_parent_color = old->rb_parent_color; + node->parent=old->parent; + node->color=old->color; + node->rb_left = old->rb_left; + rb_set_parent(old->rb_left, node); + + goto color; + } + + parent = rb_parent(node); + color = rb_color(node); + + if (child) + rb_set_parent(child, parent); + if (parent) + { + if (parent->rb_left == node) + parent->rb_left = child; + else + parent->rb_right = child; + } + else + root->rb_node = child; + + color: + if (color == RB_BLACK) + __rb_erase_color(child, parent, root); +} + +static void rb_augment_path(struct px_rb_node *node, rb_augment_f func, void *data) +{ + struct px_rb_node *parent; + +up: + func(node, data); + parent = rb_parent(node); + if (!parent) + return; + + if (node == parent->rb_left && parent->rb_right) + func(parent->rb_right, data); + else if (parent->rb_left) + func(parent->rb_left, data); + + node = parent; + goto up; +} + +/* + * after inserting @node into the tree, update the tree to account for + * both the new entry and any damage done by rebalance + */ +void rb_augment_insert(struct px_rb_node *node, rb_augment_f func, void *data) +{ + if (node->rb_left) + node = node->rb_left; + else if (node->rb_right) + node = node->rb_right; + + rb_augment_path(node, func, data); +} + +/* + * before removing the node, find the deepest node on the rebalance path + * that will still be there after @node gets removed + */ +struct px_rb_node *rb_augment_erase_begin(struct px_rb_node *node) +{ + struct px_rb_node *deepest; + + if (!node->rb_right && !node->rb_left) + deepest = rb_parent(node); + else if (!node->rb_right) + deepest = node->rb_left; + else if (!node->rb_left) + deepest = node->rb_right; + else { + deepest = rb_next(node); + if (deepest->rb_right) + deepest = deepest->rb_right; + else if (rb_parent(deepest) != node) + deepest = rb_parent(deepest); + } + + return deepest; +} + +/* + * after removal, update the tree to account for the removed entry + * and any rebalance damage. + */ +void rb_augment_erase_end(struct px_rb_node *node, rb_augment_f func, void *data) +{ + if (node) + rb_augment_path(node, func, data); +} + +/* + * This function returns the first node (in sort order) of the tree. + */ +struct px_rb_node *rb_first(const struct px_rb_root *root) +{ + struct px_rb_node *n; + + n = root->rb_node; + if (!n) + return PX_RB_NULL; + while (n->rb_left) + n = n->rb_left; + return n; +} + +struct px_rb_node *rb_last(const struct px_rb_root *root) +{ + struct px_rb_node *n; + + n = root->rb_node; + if (!n) + return PX_RB_NULL; + while (n->rb_right) + n = n->rb_right; + return n; +} + +struct px_rb_node *rb_next(const struct px_rb_node *node) +{ + struct px_rb_node *parent; + + if (rb_parent(node) == node) + return PX_RB_NULL; + + /* If we have a right-hand child, go down and then left as far + as we can. */ + if (node->rb_right) { + node = node->rb_right; + while (node->rb_left) + node=node->rb_left; + return (struct px_rb_node *)node; + } + + /* No right-hand children. Everything down and left is + smaller than us, so any 'next' node must be in the general + direction of our parent. Go up the tree; any time the + ancestor is a right-hand child of its parent, keep going + up. First time it's a left-hand child of its parent, said + parent is our 'next' node. */ + while ((parent = rb_parent(node)) && node == parent->rb_right) + node = parent; + + return parent; +} + +struct px_rb_node *rb_prev(const struct px_rb_node *node) +{ + struct px_rb_node *parent; + + if (rb_parent(node) == node) + return PX_RB_NULL; + + /* If we have a left-hand child, go down and then right as far + as we can. */ + if (node->rb_left) { + node = node->rb_left; + while (node->rb_right) + node=node->rb_right; + return (struct px_rb_node *)node; + } + + /* No left-hand children. Go up till we find an ancestor which + is a right-hand child of its parent */ + while ((parent = rb_parent(node)) && node == parent->rb_left) + node = parent; + + return parent; +} + +void rb_replace_node(struct px_rb_node *victim, struct px_rb_node *newnode, + struct px_rb_root *root) +{ + struct px_rb_node *parent = rb_parent(victim); + + /* Set the surrounding nodes to point to the replacement */ + if (parent) { + if (victim == parent->rb_left) + parent->rb_left = newnode; + else + parent->rb_right = newnode; + } else { + root->rb_node = newnode; + } + if (victim->rb_left) + rb_set_parent(victim->rb_left, newnode); + if (victim->rb_right) + rb_set_parent(victim->rb_right, newnode); + + /* Copy the pointers/colour from the victim to the replacement */ + *newnode = *victim; +} diff --git a/UI/PainterEngine/core/PX_rbtree.h b/UI/PainterEngine/core/PX_rbtree.h new file mode 100644 index 0000000..9cf836d --- /dev/null +++ b/UI/PainterEngine/core/PX_rbtree.h @@ -0,0 +1,135 @@ + +/* + Red Black Trees + (C) 1999 Andrea Arcangeli + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + linux/include/linux/rbtree.h + + To use rbtrees you'll have to implement your own insert and search cores. + This will avoid us to use callbacks and to drop drammatically performances. + I know it's not the cleaner way, but in C (not in C++) to get + performances and genericity... + + Some example of insert and search follows here. The search is a plain + normal search over an ordered tree. The insert instead must be implemented + in two steps: First, the code must insert the element in order as a red leaf + in the tree, and then the support library function rb_insert_color() must + be called. Such function will do the not trivial work to rebalance the + rbtree, if necessary. + +----------------------------------------------------------------------- +*/ + +#ifndef _PX_RBTREE_H +#define _PX_RBTREE_H + +#undef PX_RB_NULL +#if defined(__cplusplus) + #define PX_RB_NULL 0 +#else + #define PX_RB_NULL ((void *)0) +#endif + +struct px_rb_node +{ +#define RB_RED 0 +#define RB_BLACK 1 + struct px_rb_node *parent; + unsigned long color; + struct px_rb_node *rb_right; + struct px_rb_node *rb_left; +}; + /* The alignment might seem pointless, but allegedly CRIS needs it */ + +struct px_rb_root +{ + struct px_rb_node *rb_node; +}; + + +//#define rb_parent(r) ((struct px_rb_node *)((r)->rb_parent_color & ~3)) +#define rb_parent(r) ((struct px_rb_node *)((r)->parent)) +//#define rb_color(r) ((r)->rb_parent_color & 1) +#define rb_color(r) ((r)->color) +#define rb_is_red(r) (!rb_color(r)) +#define rb_is_black(r) rb_color(r) +// #define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0) +// #define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0) +#define rb_set_red(r) do { (r)->color = 0; } while (0) +#define rb_set_black(r) do { (r)->color = 1; } while (0) +static void rb_set_parent(struct px_rb_node *rb, struct px_rb_node *p) +{ + //rb->rb_parent_color = (rb->rb_parent_color & 3) | (unsigned long)p; + rb->parent = p; +} +static void rb_set_color(struct px_rb_node *rb, int color) +{ + //rb->rb_parent_color = (rb->rb_parent_color & ~1) | color; + rb->color = color; +} + +#define RB_ROOT (struct px_rb_root) { PX_RB_NULL, } + +#define RB_EMPTY_ROOT(root) ((root)->px_rb_node == PX_RB_NULL) +#define RB_EMPTY_NODE(node) (rb_parent(node) == node) +#define RB_CLEAR_NODE(node) (rb_set_parent(node, node)) + +static void rb_init_node(struct px_rb_node *rb) +{ + //rb->rb_parent_color = 0; + rb->parent=0; + rb->color=0; + rb->rb_right = PX_RB_NULL; + rb->rb_left = PX_RB_NULL; + RB_CLEAR_NODE(rb); +} + +extern void rb_insert_color(struct px_rb_node *, struct px_rb_root *); +extern void rb_erase(struct px_rb_node *, struct px_rb_root *); + +typedef void (*rb_augment_f)(struct px_rb_node *node, void *data); + +extern void rb_augment_insert(struct px_rb_node *node, + rb_augment_f func, void *data); +extern struct px_rb_node *rb_augment_erase_begin(struct px_rb_node *node); +extern void rb_augment_erase_end(struct px_rb_node *node, + rb_augment_f func, void *data); + +/* Find logical next and previous nodes in a tree */ +extern struct px_rb_node *rb_next(const struct px_rb_node *); +extern struct px_rb_node *rb_prev(const struct px_rb_node *); +extern struct px_rb_node *rb_first(const struct px_rb_root *); +extern struct px_rb_node *rb_last(const struct px_rb_root *); + +/* Fast replacement of a single node without remove/rebalance/add/rebalance */ +extern void rb_replace_node(struct px_rb_node *victim, struct px_rb_node *newnode, + struct px_rb_root *root); + +static void rb_link_node(struct px_rb_node * node, struct px_rb_node * parent, + struct px_rb_node ** rb_link) +{ +// node->rb_parent_color = (unsigned long )parent; + node->parent=parent; + node->color=0; + + node->rb_left = node->rb_right = PX_RB_NULL; + + *rb_link = node; +} + +#endif /* _LINUX_RBTREE_H */ + diff --git a/UI/PainterEngine/elsecode/include/map.h b/UI/PainterEngine/elsecode/include/map.h new file mode 100644 index 0000000..8f0815d --- /dev/null +++ b/UI/PainterEngine/elsecode/include/map.h @@ -0,0 +1,11 @@ +#pragma once + +#include "mine_map.h" + +/** + * @brief 设置一个的雷 + * + * @param mode 难易度 + * @return map* 生成的地图的指针 + */ +map* Setmine(int mode); diff --git a/UI/PainterEngine/elsecode/include/mine_map.h b/UI/PainterEngine/elsecode/include/mine_map.h new file mode 100644 index 0000000..566d14f --- /dev/null +++ b/UI/PainterEngine/elsecode/include/mine_map.h @@ -0,0 +1,46 @@ +#pragma once + +#define UNCOVERED 0 +#define COVERED 1 +#define FLAGED 2 +#define MARKED 3 + +/** + * @brief 扫雷地图 + * mx,my地图长宽 + * mineMap[i][j]=1 表示第i行第j列为雷 + * mode 表示困难度 + * stage[i][j] 表示地图显示状态 + * cnt 表示雷的总数 + * autobook 用于自动打开的数组 + */ +typedef struct map{ + int mineMap[105][105]; + int mx, my; + int mode; + int stage[105][105]; + int cnt; + int autobook[105][105]; +}map; + +#define ROW_1 10 +#define COL_1 10 +#define ROW_2 ROW_1 + 2 +#define COL_2 COL_1 + 2 +#define MINECOUNT 9 + +#define MODE_EASY 1 +#define MODE_MID 2 +#define MODE_HARD 3 + +#define MX_EASY 9 +#define MX_MID 16 +#define MX_HARD 16 + +#define MY_EASY 9 +#define MY_MID 16 +#define MY_HARD 30 + +#define NUM_EASY 10 +#define NUM_MID 40 +#define NUM_HARD 99 diff --git a/UI/PainterEngine/elsecode/include/opt.h b/UI/PainterEngine/elsecode/include/opt.h new file mode 100644 index 0000000..692a551 --- /dev/null +++ b/UI/PainterEngine/elsecode/include/opt.h @@ -0,0 +1,124 @@ +#pragma once +#include "mine_map.h" +#include + +/** + * @brief define status after click + * BOOM Indicates thunder + * UNALLOWED indicates that the behavior is not allowed + * ALLOWED indicates that the lattice was successfully opened + */ +#define BOOM 0 +#define UNALLOWED 1 +#define ALLOWED 2 + +/** + * @brief define Mouse Action + * + */ +#define OPT_LEFT_CLICK 1 +#define OPT_MID_CLICK 2 +#define OPT_RIGTH_CLICK 3 +#define OPT_TOTAL_CLICK 4 +/** + * @brief 用于数周围有多少个雷 + * + * @param map + * @param x + * @param y + * @return int 返回周围雷的数量 + */ + +/** + * @brief 单次操作数据 + * + */ +typedef struct +{ + int x,y; + int mode; +}opt_t; + +/** + * @brief 统计周围雷数量 + * + * @param map + * @param x + * @param y + * @return int + */ +int opt_count(map *map, int x, int y); +/** + * @brief 单次鼠标操作 + * + * @param m 地图 + * @param opt 操作数据,包含坐标,操作类型等信息 + * @return int 操作后状态 + */ +int opt(map* m, opt_t opt); + +/** + * @brief 鼠标左击 + * + * @param x + * @param y + * @param m 指向地图的一个指针 + * @return int 当次操作状态 + */ +int fnOptLeftClick(int x,int y,map *m); + +/** + * @brief 鼠标右击 + * + * @param x + * @param y + * @param m 指向地图的一个指针 + * @return int 当次操作状态 + */ +int fnOptRightClick(int x,int y,map *m ); + +/** + * @brief 鼠标中击 + * + * @param x + * @param y + * @param m 指向地图的一个指针 + * @return int 当次操作状态 + */ +int fnOptMidClick(int x,int y,map *m); + +/** + * @brief 用于自动展开地图 + * + * @param x + * @param y + * @param m 地图指针 + */ +void fnOptAuto(int x,int y, map *m); + +/** + * @brief 用于统计周围旗子数量 + * + * @param map + * @param x + * @param y + * @return int 旗子数量 + */ +int opt_flag_count(map* map, int x, int y); + +/** + * @brief 用于判断是否扫雷成功 + * + * @param m + * @return true + * @return false + */ +bool opt_is_scuess(map m); + +/** + * @brief 如果全部雷标记 打开剩余格子 + * + * @param m + * @return int + */ +int fnTotalFlag(map *m); diff --git a/UI/PainterEngine/elsecode/src/app.c b/UI/PainterEngine/elsecode/src/app.c new file mode 100644 index 0000000..7fc4a82 --- /dev/null +++ b/UI/PainterEngine/elsecode/src/app.c @@ -0,0 +1,2 @@ +#include "../include/map.h" + diff --git a/UI/PainterEngine/elsecode/src/map.c b/UI/PainterEngine/elsecode/src/map.c new file mode 100644 index 0000000..67e0b72 --- /dev/null +++ b/UI/PainterEngine/elsecode/src/map.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include "../include/map.h" +#include "../include/mine_map.h" + +map *Setmine(int mode) +{ + map *Map = malloc(sizeof(map)); + if (Map == NULL) + return NULL; + switch (mode) + { + case MODE_EASY: + Map->mx = MX_EASY; + Map->my = MY_EASY; + Map->cnt = NUM_EASY; + break; + case MODE_MID: + Map->mx = MX_MID; + Map->my = MY_MID; + Map->cnt = NUM_MID; + break; + case MODE_HARD: + Map->mx = MX_HARD; + Map->my = MY_HARD; + Map->cnt = NUM_HARD; + break; + default: + break; + } + for (int i = 0; i <= Map->mx; i++) + { + for (int j = 0; j <= Map->my; j++) + { + Map->autobook[i][j] = 0; + Map->mineMap[i][j] = 0; + Map->stage[i][j] = 0; + } + } + int cnt = 0; + srand((unsigned int)time(0)); + while (cnt < Map->cnt) + { + int x, y; + x = (rand() % (Map->mx)) + 1; + y = (rand() % (Map->my)) + 1; + if (Map->mineMap[x][y] == 0) + { + Map->mineMap[x][y] = 1; + cnt++; + } + } + return Map; +} diff --git a/UI/PainterEngine/elsecode/src/opt.c b/UI/PainterEngine/elsecode/src/opt.c new file mode 100644 index 0000000..2b8a40b --- /dev/null +++ b/UI/PainterEngine/elsecode/src/opt.c @@ -0,0 +1,229 @@ +#include "../include/mine_map.h" +#include "../include/opt.h" +#include +#include + +int opt(map *m, opt_t opt) +{ + /** + * @brief 操作类型 + * + */ + int optMode; + /** + * @brief 操作坐标 + * + */ + int optX, optY; + optX = opt.x; + optY = opt.y; + optMode = opt.mode; + if (optX < 1 || optX > m->mx || optY < 1 || optY > m->my) + return UNALLOWED; + switch (optMode) + { + case OPT_LEFT_CLICK: + return fnOptLeftClick(optX, optY, m); + break; + case OPT_MID_CLICK: + return fnOptMidClick(optX, optY, m); + break; + case OPT_RIGTH_CLICK: + return fnOptRightClick(optX, optY, m); + break; + case OPT_TOTAL_CLICK: + return fnTotalFlag(m); + break; + default: + return UNALLOWED; + break; + } +} + +int opt_count(map *map, int x, int y) +{ + int cnt = 0; + for (int i = x - 1; i <= x + 1; i++) + { + for (int j = y - 1; j <= y + 1; j++) + { + if (i < 1 || j < 1 || i > map->mx || j > map->my) + continue; + if (i == x && j == y) + continue; + if (map->mineMap[i][j] == 1) + cnt++; + } + } + return cnt; +} + +int opt_flag_count(map *map, int x, int y) +{ + int cnt = 0; + for (int i = x - 1; i <= x + 1; i++) + { + for (int j = y - 1; j <= y + 1; j++) + { + if (i < 1 || j < 1 || i > map->mx || j > map->my) + continue; + if (i == x && j == y) + continue; + if (map->stage[i][j] == FLAGED) + cnt++; + } + } + return cnt; +} + +int fnOptLeftClick(int x, int y, map *m) +{ + /** + * @brief 地图当前状态 + * + */ + int map_stage; + + map_stage = m->stage[x][y]; + /** + * @brief 判断当前格子是否是雷 + * + */ + bool map_mine; + map_mine = (m->mineMap[x][y] == 1) ? true : false; + /** + * @brief 左键实现 + * 如果当前格子被标记或者已经打开 + * 返回UNALLOWED + */ + if (map_stage == FLAGED || map_stage == COVERED || map_stage == MARKED) + return UNALLOWED; + + if (map_mine == true) + { + m->stage[x][y] = COVERED; + return BOOM; + } + + m->stage[x][y] = COVERED; + if (opt_count(m, x, y) == 0) + fnOptAuto(x, y, m); + return ALLOWED; +} + +int fnOptRightClick(int x, int y, map *m) +{ + + /** + * @brief 地图当前状态 + * + */ + int map_stage; + + map_stage = m->stage[x][y]; + switch (map_stage) + { + case COVERED: + return UNALLOWED; + break; + case UNCOVERED: + m->stage[x][y] = FLAGED; + break; + case FLAGED: + m->stage[x][y] = MARKED; + break; + case MARKED: + m->stage[x][y] = UNCOVERED; + break; + default: + return ALLOWED; + break; + } +} + +int fnOptMidClick(int x, int y, map *m) +{ + /** + * @brief 地图当前状态 + * + */ + int map_stage; + map_stage = m->stage[x][y]; + if (map_stage != COVERED) + return UNALLOWED; + if (opt_count(m, x, y) != opt_flag_count(m, x, y)) + return UNALLOWED; + fnOptAuto(x, y, m); + return ALLOWED; +} + +void fnOptAuto(int x, int y, map *m) +{ + if (m->autobook[x][y] == 1) + return; + m->autobook[x][y] = 1; + for (int i = -1; i <= 1; i++) + { + for (int j = -1; j <= 1; j++) + { + int fx = x + i, fy = y + j; + if (i == 0 && j == 0) + continue; + if (fx < 1 || fx > m->mx || fy < 1 || fy > m->my) + continue; + if (m->stage[fx][fy] == UNCOVERED) + { + m->stage[fx][fy] = COVERED; + if (opt_count(m, fx, fy) == 0) + fnOptAuto(fx, fy, m); + } + } + } + return; +} + +bool opt_is_scuess(map m) +{ + /** + * @brief 扫雷成功条件 + * 打开所有不是雷的格子 + * + */ + int coverCnt = 0; + for (int i = 1; i <= m.mx; i++) + { + for (int j = 1; j <= m.my; j++) + { + if (m.stage[i][j] == COVERED) + coverCnt++; + } + } + if (coverCnt == (m.mx * m.my - m.cnt)) + return true; + else + return false; +} + +int fnTotalFlag(map *m) +{ + int flagCnt = 0; + for (int i = 1; i <= m->mx; i++) + for (int j = 1; j <= m->my; j++) + if (m->stage[i][j] == FLAGED) + flagCnt++; + if (flagCnt != m->cnt) + return UNALLOWED; + + for (int i = 1; i <= m->mx; i++) + { + for (int j = 1; j <= m->my; j++) + { + if (m->stage[i][j] != UNCOVERED) + continue; + m->stage[i][j] = COVERED; + if (m->mineMap[i][j] == 1) + return BOOM; + } + } + return ALLOWED; +} diff --git a/UI/PainterEngine/kernel/PX_2dxCommon.h b/UI/PainterEngine/kernel/PX_2dxCommon.h new file mode 100644 index 0000000..023e386 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_2dxCommon.h @@ -0,0 +1,40 @@ +#ifndef PX_2DXCOMMON_H +#define PX_2DXCOMMON_H +#include "../core/PX_Core.h" +typedef struct +{ + px_dword magic; + px_dword framecount; + px_dword animationCount; +}PX_2DX_Header; + + +typedef struct +{ + px_dword size; +}PX_2DX_CODE_Header; + +typedef enum +{ + PX_2DX_OPCODE_FRAME =1, + PX_2DX_OPCODE_SLEEP, + PX_2DX_OPCODE_GOTO, + PX_2DX_OPCODE_LOOP, + PX_2DX_OPCODE_END, +}PX_2DX_OPCODE; + +//Instrument format +//opcode 1byte +//other 3byte + +typedef struct +{ + px_word opcode; + px_word param; +}PX_2DX_INSTR; + +//frame [index] //opcode 1 byte //param 3 byte +//sleep [index] //opcode 1 byte //param 3 byte +//goto [index] //jmp addr 3 byte //loop times 4 byte + +#endif diff --git a/UI/PainterEngine/kernel/PX_3D_ObjData.c b/UI/PainterEngine/kernel/PX_3D_ObjData.c new file mode 100644 index 0000000..0b08352 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_3D_ObjData.c @@ -0,0 +1,356 @@ +#include "PX_3D_ObjData.h" + +static PX_LEXER_LEXEME_TYPE PX_3D_ObjectDataNextTokenSN(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while ((type= PX_LexerGetNextLexeme(lexer))==PX_LEXER_LEXEME_TYPE_SPACER||type==PX_LEXER_LEXEME_TYPE_NEWLINE); + + return type; +} + +px_bool PX_3D_ObjectDataInitialize(px_memorypool *mp,PX_3D_ObjectData *ObjectData) +{ + ObjectData->mp=mp; + + if(!PX_VectorInitialize(mp,&ObjectData->v,sizeof(PX_3D_ObjectData_v),8)) return PX_FALSE; + if(!PX_VectorInitialize(mp,&ObjectData->vt,sizeof(PX_3D_ObjectData_vt),8)) return PX_FALSE; + if(!PX_VectorInitialize(mp,&ObjectData->vn,sizeof(PX_3D_ObjectData_vn),8)) return PX_FALSE; + if(!PX_VectorInitialize(mp,&ObjectData->face,sizeof(PX_3D_ObjectDataFace),8)) return PX_FALSE; + if(!PX_VectorInitialize(mp,&ObjectData->mtlFile,sizeof(px_string),8)) return PX_FALSE; + if(!PX_VectorInitialize(mp,&ObjectData->mtlName,sizeof(px_string),8)) return PX_FALSE; + return PX_TRUE; +} + +px_bool PX_3D_ObjectDataLoad(PX_3D_ObjectData *ObjectData,const px_byte *data,px_int size) +{ + PX_LEXER_STATE state; + px_lexer Lexer; + PX_LEXER_LEXEME_TYPE type; + PX_LexerInit(&Lexer,ObjectData->mp); + PX_LexerRegisterSpacer(&Lexer,' '); + PX_LexerRegisterSpacer(&Lexer,'\t'); + PX_LexerRegisterComment(&Lexer,"#","\n"); + PX_LexerRegisterDelimiter(&Lexer,'/'); + PX_LexerSetTokenCase(&Lexer,PX_LEXER_LEXEME_CASE_LOWER); + + if(!PX_LexerLoadSourceFromMemory(&Lexer,(const char *)data)) return PX_FALSE; + + while (PX_TRUE) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + //g s o note:The flag is useless,we register it but not solve it + + if (PX_strequ(Lexer.CurLexeme.buffer,"g")\ + ||PX_strequ(Lexer.CurLexeme.buffer,"s")\ + ||PX_strequ(Lexer.CurLexeme.buffer,"o")) + { + while (PX_TRUE) + { + type=PX_LexerGetNextLexeme(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE||type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + } + continue; + } + + + if (PX_strequ(Lexer.CurLexeme.buffer,"mtllib")) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + px_string strName; + if(!PX_StringInitialize(ObjectData->mp,&strName)) + { + goto _ERROR; + } + PX_StringSet(&strName,Lexer.CurLexeme.buffer); + if(!PX_VectorPushback(&ObjectData->mtlFile,&strName)) goto _ERROR; + } + else + { + goto _ERROR; + } + continue; + } + + //usemtl + if (PX_strequ(Lexer.CurLexeme.buffer,"usemtl")) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + px_string strName; + if(!PX_StringInitialize(ObjectData->mp,&strName)) + { + goto _ERROR; + } + PX_StringSet(&strName,Lexer.CurLexeme.buffer); + if(!PX_VectorPushback(&ObjectData->mtlName,&strName)) goto _ERROR; + } + else + { + goto _ERROR; + } + continue; + } + + //v + if (PX_strequ(Lexer.CurLexeme.buffer,"v")) + { + px_int i; + px_float v[3]; + PX_3D_ObjectData_v ov; + + for (i=0;i<3;i++) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (!PX_LexerIsLememeIsNumeric(&Lexer)) + { + PX_LOG(" Numeric block is expected but not found"); + goto _ERROR; + } + v[i]=(px_float)PX_atof(Lexer.CurLexeme.buffer); + + } + ov.x=v[0]; + ov.y=v[1]; + ov.z=v[2]; + if(!PX_VectorPushback(&ObjectData->v,&ov)) goto _ERROR; + continue; + } + + //vn // + if (PX_strequ(Lexer.CurLexeme.buffer,"vn")) + { + px_int i; + px_float v[3]; + PX_3D_ObjectData_vn ov; + for (i=0;i<3;i++) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (!PX_LexerIsLememeIsNumeric(&Lexer)) + { + PX_LOG(" Numeric block is expected but not found"); + goto _ERROR; + } + v[i]=(px_float)PX_atof(Lexer.CurLexeme.buffer); + } + ov.x=v[0]; + ov.y=v[1]; + ov.z=v[2]; + if(!PX_VectorPushback(&ObjectData->vn,&ov)) goto _ERROR; + + + + continue; + } + + //vt + if (PX_strequ(Lexer.CurLexeme.buffer,"vt")) + { + px_int i; + px_float v[2]; + PX_3D_ObjectData_vt ov; + for (i=0;i<2;i++) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (!PX_LexerIsLememeIsNumeric(&Lexer)) + { + PX_LOG(" Numeric block is expected but not found"); + goto _ERROR; + } + v[i]=(px_float)PX_atof(Lexer.CurLexeme.buffer); + } + ov.u=v[0]; + ov.v=v[1]; + if(!PX_VectorPushback(&ObjectData->vt,&ov)) goto _ERROR; + + while (PX_TRUE) + { + type=PX_LexerGetNextLexeme(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE||type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + } + + continue; + } + + //f + PX_LexerGetState(&Lexer); + if (PX_strequ(Lexer.CurLexeme.buffer,"f")) + { + PX_3D_ObjectDataFace Face; + px_int v; + px_int i; + + // Face.mtlFileNameIndex=GetMtlFileIndex(); + Face.mtlNameIndex=ObjectData->mtlName.size-1; + Face.mtlFileNameIndex=ObjectData->mtlFile.size-1; + + for (i=0;i<3;i++) + { + Face.v[i].v=-1; + Face.v[i].vt=-1; + Face.v[i].vn=-1; + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (!PX_LexerIsLememeIsNumeric(&Lexer)) + { + PX_LOG(" Numeric block is expected but not found"); + goto _ERROR; + } + v=PX_atoi(Lexer.CurLexeme.buffer); + + if(v>ObjectData->v.size) + goto _ERROR; + + Face.v[i].v=v; + + state=PX_LexerGetState(&Lexer); + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + + // vt + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&Lexer.Symbol=='/') + { + state=PX_LexerGetState(&Lexer); + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (PX_LexerIsLememeIsNumeric(&Lexer)) + { + v=PX_atoi(Lexer.CurLexeme.buffer); + if(v>ObjectData->vt.size) + goto _ERROR; + Face.v[i].vt=v; + } + else + { + PX_LexerSetState(state); + } + } + else + { + PX_LexerSetState(state); + continue; + } + + // vn + state=PX_LexerGetState(&Lexer); + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&Lexer.Symbol=='/') + { + state=PX_LexerGetState(&Lexer); + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (PX_LexerIsLememeIsNumeric(&Lexer)) + { + v=PX_atoi(Lexer.CurLexeme.buffer); + if(v>ObjectData->vn.size) + goto _ERROR; + Face.v[i].vn=v; + } + else + { + PX_LexerSetState(state); + } + } + else + { + PX_LexerSetState(state); + continue; + } + + } + if(!PX_VectorPushback(&ObjectData->face,&Face)) goto _ERROR; + continue; + } + } + + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + goto _ERROR; + + } + PX_LexerFree(&Lexer); + return PX_TRUE; +_ERROR: + PX_3D_ObjectDataFree(ObjectData); + PX_LexerFree(&Lexer); + return PX_FALSE; +} + +px_bool PX_3D_ObjectDataToRenderList(PX_3D_ObjectData *ObjectData,PX_3D_RenderList *renderList) +{ + px_int i,j; + PX_3D_Face face; + PX_3D_ObjectDataFace *pObjFace; + for (i=0;iface.size;i++) + { + pObjFace=PX_VECTORAT(PX_3D_ObjectDataFace,&ObjectData->face,i); + PX_memset(&face,0,sizeof(PX_3D_Face)); + for (j=0;j<3;j++) + { + if(pObjFace->v[j].v>0&&pObjFace->v[j].v<=ObjectData->v.size) + { + PX_3D_ObjectData_v *pv=PX_VECTORAT(PX_3D_ObjectData_v,&ObjectData->v,pObjFace->v[j].v-1); + face.vertex[j].position=PX_POINT4D(pv->x,pv->y,pv->z); + } + else + goto _ERROR; + + if(pObjFace->v[j].vn>0&&pObjFace->v[j].vn<=ObjectData->vn.size) + { + PX_3D_ObjectData_vn *pvn=PX_VECTORAT(PX_3D_ObjectData_vn,&ObjectData->vn,pObjFace->v[j].vn-1); + face.vertex[j].normal=PX_POINT4D(pvn->x,pvn->y,pvn->z); + } + else + goto _ERROR; + + if(pObjFace->v[j].vt>0&&pObjFace->v[j].vt<=ObjectData->vt.size) + { + PX_3D_ObjectData_vt *pvt=PX_VECTORAT(PX_3D_ObjectData_vt,&ObjectData->vt,pObjFace->v[j].vt-1); + face.vertex[j].u=pvt->u; + face.vertex[j].v=pvt->v; + } + else + goto _ERROR; + + face.vertex[j].clr=PX_COLOR(255,0,0,0); + } + if(!PX_3D_RenderListPush(renderList,face)) + goto _ERROR; + } + return PX_TRUE; +_ERROR: + PX_3D_RenderListReset(renderList); + return PX_FALSE; +} + +px_void PX_3D_ObjectDataFree(PX_3D_ObjectData *ObjectData) +{ + px_int i; + PX_VectorFree(&ObjectData->v); + PX_VectorFree(&ObjectData->vt); + PX_VectorFree(&ObjectData->vn); + PX_VectorFree(&ObjectData->face); + for (i=0;imtlName.size;i++) + { + PX_StringFree(PX_VECTORAT(px_string,&ObjectData->mtlName,i)); + } + PX_VectorFree(&ObjectData->mtlName); + + for (i=0;imtlFile.size;i++) + { + PX_StringFree(PX_VECTORAT(px_string,&ObjectData->mtlFile,i)); + } + PX_VectorFree(&ObjectData->mtlFile); + +} + diff --git a/UI/PainterEngine/kernel/PX_3D_ObjData.h b/UI/PainterEngine/kernel/PX_3D_ObjData.h new file mode 100644 index 0000000..4644174 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_3D_ObjData.h @@ -0,0 +1,50 @@ +#ifndef PX_3D_OBJDATA_H +#define PX_3D_OBJDATA_H +#include "PX_Lexer.h" + +typedef struct +{ + px_int v,vn,vt; +}PX_3D_ObjectDataVertex; + + +typedef struct +{ + px_uint mtlFileNameIndex; + px_uint mtlNameIndex; + PX_3D_ObjectDataVertex v[3]; +}PX_3D_ObjectDataFace; + + +typedef struct +{ + px_float x,y,z; +}PX_3D_ObjectData_v; + +typedef struct +{ + px_float x,y,z; +}PX_3D_ObjectData_vn; + +typedef struct +{ + px_float u,v; +}PX_3D_ObjectData_vt; + +typedef struct +{ + px_memorypool *mp; + px_vector v; + px_vector vt; + px_vector vn; + px_vector face; + px_vector mtlFile; + px_vector mtlName; +}PX_3D_ObjectData; + +px_bool PX_3D_ObjectDataInitialize(px_memorypool *mp,PX_3D_ObjectData *ObjectData); +px_bool PX_3D_ObjectDataLoad(PX_3D_ObjectData *ObjectData,const px_byte *data,px_int size); +px_bool PX_3D_ObjectDataToRenderList(PX_3D_ObjectData *ObjectData,PX_3D_RenderList *renderList); +px_void PX_3D_ObjectDataFree(PX_3D_ObjectData *ObjectData); + +#endif diff --git a/UI/PainterEngine/kernel/PX_Animation.c b/UI/PainterEngine/kernel/PX_Animation.c new file mode 100644 index 0000000..67cbec5 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Animation.c @@ -0,0 +1,483 @@ +#include "PX_Animation.h" + +px_bool PX_AnimationLibraryCreateFromMemory(px_memorypool *mp,PX_AnimationLibrary *panimation,px_byte *_2dxBuffer,px_uint size) +{ + PX_2DX_Header _header; + PX_TRaw_Header _trawheader; + px_int i,j; + px_byte *pbuffer; + px_uint reservedSize=size; + px_texture texture; + PX_2DX_CODE_Header _codeheader; + + _header=*(PX_2DX_Header *)_2dxBuffer; + if (!PX_memequ(&_header.magic,"2DX",sizeof(_header.magic))) + { + return PX_FALSE; + } + reservedSize-=sizeof(_header); + pbuffer=_2dxBuffer+sizeof(_header); + PX_VectorInitialize(mp,&panimation->animation,sizeof(PX_Animationlibrary_tagInfo),_header.animationCount); + for (i=0;i<(px_int)_header.animationCount;i++) + { + PX_Animationlibrary_tagInfo tag; + tag.ip=*(px_dword *)pbuffer; + pbuffer+=sizeof(px_dword); + PX_StringInitialize(mp,&tag.name); + PX_StringCat(&tag.name,(px_char *)pbuffer); + pbuffer+=PX_strlen((px_char *)pbuffer)+1; + PX_VectorPushback(&panimation->animation,&tag); + } + + + PX_VectorInitialize(mp,&panimation->frames,sizeof(px_texture),_header.framecount); + PX_MemoryInitialize(mp,&panimation->code); + for (i=0;i<(px_int)_header.framecount;i++) + { + for(j=0;jframes,&texture); + pbuffer+=PX_TRawGetSize(&_trawheader); + reservedSize-=PX_TRawGetSize(&_trawheader); + } + + if (reservedSizecode,pbuffer,_codeheader.size); + + return PX_TRUE; + + +_ERROR: + for (i=0;iframes.size;i++) + { + PX_TextureFree(PX_VECTORAT(px_texture,&panimation->frames,i)); + } + PX_VectorFree(&panimation->frames); + PX_MemoryFree(&panimation->code); + return PX_FALSE; +} + +px_void PX_AnimationLibraryFree(PX_AnimationLibrary *panimation) +{ + px_int i; + for (i=0;ianimation.size;i++) + { + PX_Animationlibrary_tagInfo *tagInfo=PX_VECTORAT(PX_Animationlibrary_tagInfo,&panimation->animation,i); + PX_StringFree(&tagInfo->name); + } + PX_VectorFree(&panimation->animation); + for (i=0;iframes.size;i++) + { + PX_TextureFree(PX_VECTORAT(px_texture,&panimation->frames,i)); + } + PX_VectorFree(&panimation->frames); + PX_MemoryFree(&panimation->code); +} + +px_void PX_AnimationUpdate(PX_Animation *panimation,px_uint elapsed) +{ + PX_2DX_INSTR *pInstr; + + if (!panimation->linker) + { + return; + } + if (panimation->reg_reservedTime>=elapsed) + { + panimation->reg_reservedTime-=elapsed; + return; + } + else + { + elapsed-=panimation->reg_reservedTime; + } + + while(elapsed) + { + if (panimation->ip>panimation->linker->code.usedsize-sizeof(PX_2DX_INSTR)) + { + PX_ERROR("2dx code error"); + return; + } + pInstr=(PX_2DX_INSTR *)(panimation->linker->code.buffer+panimation->ip); + switch(pInstr->opcode) + { + case PX_2DX_OPCODE_END: + return; + case PX_2DX_OPCODE_FRAME: + if(pInstr->paramlinker->frames.size) + panimation->reg_currentFrameIndex=pInstr->param; + else + { + PX_ERROR("2dx code error"); + return; + } + panimation->ip+=sizeof(PX_2DX_INSTR); + break; + case PX_2DX_OPCODE_GOTO: + + if(panimation->reg_loopTimes!=0) + { + panimation->ip=pInstr->param; + if(panimation->reg_loopTimes!=0xffff) + { + panimation->reg_loopTimes--; + } + } + else + panimation->ip+=sizeof(PX_2DX_INSTR); + + break; + case PX_2DX_OPCODE_LOOP: + panimation->reg_loopTimes=pInstr->param; + panimation->ip+=sizeof(PX_2DX_INSTR); + break; + case PX_2DX_OPCODE_SLEEP: + + if (pInstr->param>elapsed) + { + panimation->reg_reservedTime=pInstr->param-elapsed; + panimation->ip+=sizeof(PX_2DX_INSTR); + return; + } + else + { + elapsed-=pInstr->param; + panimation->ip+=sizeof(PX_2DX_INSTR); + } + break; + } + } +} + +px_void PX_AnimationRender(px_surface *psurface,PX_Animation *animation,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + PX_TextureRender(psurface,pTexture,x,y,refPoint,blend); + } +} + +px_void PX_AnimationRenderEx(px_surface *psurface,PX_Animation *animation,px_int x,px_int y,px_float scale,px_point direction,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + + if (scale!=1) + { + PX_TextureRenderEx_vector(psurface,pTexture,x,y,refPoint,blend,scale,direction); + } + else + { + PX_TextureRenderRotation_vector(psurface,pTexture,x,y,refPoint,blend,direction); + } + } +} + +px_void PX_AnimationRender_scale(px_surface *psurface,PX_Animation *animation,px_int x,px_int y,px_float scale,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + PX_TextureRenderEx(psurface,pTexture,x,y,refPoint,blend,scale,0); + } +} + + +px_void PX_AnimationRender_vector(px_surface *psurface,PX_Animation *animation,px_int x,px_int y,px_point direction,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + PX_TextureRenderRotation_vector(psurface,pTexture,x,y,refPoint,blend,direction); + } +} + + +px_int PX_AnimationLibraryGetFrameWidth(PX_AnimationLibrary *panimationLib,px_int frameIndex) +{ + return PX_VECTORAT(px_texture,&panimationLib->frames,frameIndex)->width; +} + + +px_int PX_AnimationLibraryGetFrameHeight(PX_AnimationLibrary *panimationLib,px_int frameIndex) +{ + return PX_VECTORAT(px_texture,&panimationLib->frames,frameIndex)->height; +} + +px_bool PX_AnimationCreate(PX_Animation *animation,PX_AnimationLibrary *linker) +{ + animation->elapsed=0; + animation->linker=linker; + animation->reg_currentFrameIndex=-1; + animation->reg_loopTimes=0; + animation->reg_reservedTime=0; + animation->reg_currentAnimation = -1; + animation->ip=0; + + return PX_TRUE; +} + +px_bool PX_AnimationSetLibrary(PX_Animation *animation,PX_AnimationLibrary *linker) +{ + PX_AnimationFree(animation); + animation->elapsed=0; + animation->linker=linker; + animation->reg_currentFrameIndex=-1; + animation->reg_loopTimes=0; + animation->reg_reservedTime=0; + animation->ip=0; + return PX_TRUE; +} + + + +px_void PX_AnimationFree(PX_Animation *animation) +{ + +} + +px_void PX_AnimationReset(PX_Animation *animation) +{ + animation->elapsed=0; + animation->reg_currentFrameIndex=-1; + animation->reg_loopTimes=0; + animation->reg_reservedTime=0; + animation->ip=0; +} + +px_bool PX_AnimationLibrary_CreateEffect_JumpVertical(px_memorypool *mp,PX_AnimationLibrary *panimation,px_texture *effectTexture) +{ + px_int i; + px_int volume=effectTexture->width*effectTexture->height; + px_int eff_height[6],eff_width[6]; + px_texture tex; + + PX_VectorInitialize(mp,&panimation->frames,sizeof(px_texture),6); + PX_MemoryInitialize(mp,&panimation->code); + PX_MemoryResize(&panimation->code,sizeof(PX_2DX_INSTR)*13); + + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,0); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,1); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,2); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,3); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,4); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,5); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_END,0); + + eff_height[0]=(px_int)(effectTexture->height*0.2); + eff_height[1]=(px_int)(effectTexture->height*0.25); + eff_height[2]=(px_int)(effectTexture->height*0.45); + eff_height[3]=(px_int)(effectTexture->height*1.25); + eff_height[4]=(px_int)(effectTexture->height*1.15); + eff_height[5]=(px_int)(effectTexture->height*1); + + for(i=0;i<6;i++) + { + eff_width[i]=volume/eff_height[i]; + if (eff_width[i]>effectTexture->width*2) + { + eff_width[i]=(px_int)(eff_width[i]*0.4); + } + if(!PX_TextureCreateScale(mp,effectTexture,eff_width[i],eff_height[i],&tex)) + { + PX_AnimationLibraryFree(panimation); + return PX_FALSE; + } + PX_VectorPushback(&panimation->frames,&tex); + } + return PX_TRUE; +} + +px_void PX_AnimationLibraryAddInstr(PX_AnimationLibrary *panimationLib,PX_2DX_OPCODE opcode,px_word param) +{ + PX_2DX_INSTR instr; + instr.opcode=opcode; + instr.param=param; + PX_MemoryCat(&panimationLib->code,&instr,sizeof(PX_2DX_INSTR)); +} + +px_bool PX_AnimationIsEnd(PX_Animation *panimation) +{ + if (!panimation->linker) + { + return PX_TRUE; + } + return (((PX_2DX_INSTR *)(panimation->linker->code.buffer+panimation->ip))->opcode==PX_2DX_OPCODE_END); +} + + +px_rect PX_AnimationGetSize(PX_Animation *panimation) +{ + px_rect rect; + px_int i,w=0,h=0; + px_texture *pTexture; + if (!panimation->linker) + { + rect.x=0; + rect.y=0; + rect.height=0; + rect.width=0; + return rect; + } + for (i=0;ilinker->frames.size;i++) + { + pTexture=PX_VECTORAT(px_texture,&panimation->linker->frames,i); + if (wwidth) + { + w=pTexture->width; + } + if (hheight) + { + h=pTexture->height; + } + } + rect.x=0; + rect.y=0; + rect.height=(px_float)h; + rect.width=(px_float)w; + return rect; +} + + +px_texture * PX_AnimationGetCurrentTexture(PX_Animation *panimation) +{ + return PX_VECTORAT(px_texture,&panimation->linker->frames,panimation->reg_currentFrameIndex); +} + +px_void PX_AnimationRenderRotation(px_surface *psurface,PX_Animation *animation,px_point position,px_int angle,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + PX_TextureRenderRotation(psurface,pTexture,(px_int)position.x,(px_int)position.y,refPoint,blend,angle); + } +} + +px_int PX_AnimationGetAnimationsCount(PX_Animation *animation) +{ + if(animation->linker) + return animation->linker->frames.size; + else + return 0; +} + +px_dword PX_AnimationGetCurrentPlayAnimation(PX_Animation *animation) +{ + return animation->reg_currentAnimation; +} + +px_bool PX_AnimationSetCurrentPlayAnimation(PX_Animation *animation,px_int i) +{ + if(animation->linker) + if (i>=0&&ilinker->animation.size) + { + PX_Animationlibrary_tagInfo *tag=PX_VECTORAT(PX_Animationlibrary_tagInfo,&animation->linker->animation,i); + animation->ip=tag->ip; + animation->reg_currentAnimation=i; + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_AnimationSetCurrentPlayAnimationByName(PX_Animation *animation,const px_char *name) +{ + px_int i; + if(animation->linker) + for (i=0;ilinker->animation.size;i++) + { + PX_Animationlibrary_tagInfo *tag=PX_VECTORAT(PX_Animationlibrary_tagInfo,&animation->linker->animation,i); + if (PX_strequ2(name,tag->name.buffer)) + { + animation->ip=tag->ip; + animation->reg_reservedTime=0; + animation->reg_currentAnimation= i; + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_int PX_AnimationLibraryGetPlayAnimationIndexByName(PX_AnimationLibrary* pLib, const px_char* name) +{ + px_int i; + if (pLib) + for (i = 0; i < pLib->animation.size; i++) + { + PX_Animationlibrary_tagInfo* tag = PX_VECTORAT(PX_Animationlibrary_tagInfo, &pLib->animation, i); + if (PX_strequ2(name, tag->name.buffer)) + { + return i; + } + } + return -1; +} + + +px_int PX_AnimationGetPlayAnimationIndexByName(PX_Animation *animation,const px_char *name) +{ + px_int i; + if(animation->linker) + for (i=0;ilinker->animation.size;i++) + { + PX_Animationlibrary_tagInfo *tag=PX_VECTORAT(PX_Animationlibrary_tagInfo,&animation->linker->animation,i); + if (PX_strequ(name,tag->name.buffer)) + { + return i; + } + } + return -1; +} diff --git a/UI/PainterEngine/kernel/PX_Animation.h b/UI/PainterEngine/kernel/PX_Animation.h new file mode 100644 index 0000000..148e704 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Animation.h @@ -0,0 +1,56 @@ +#ifndef PX_ANIMATION_H +#define PX_ANIMATION_H +#include "PX_2dxCommon.h" +typedef struct +{ + px_vector frames; //vector frames + px_vector animation; + px_memory code; +}PX_AnimationLibrary; + +typedef struct +{ + px_uint elapsed; + px_uint ip; + px_uint reg_loopTimes; + px_uint reg_reservedTime; + px_int reg_currentFrameIndex; + px_dword reg_currentAnimation; + PX_AnimationLibrary *linker; +}PX_Animation; + +typedef struct +{ + px_dword ip; + px_string name; //image file path +}PX_Animationlibrary_tagInfo; + +px_bool PX_AnimationCreate(PX_Animation *animation,PX_AnimationLibrary *linker); +px_bool PX_AnimationSetLibrary(PX_Animation *animation,PX_AnimationLibrary *linker); +px_int PX_AnimationLibraryGetPlayAnimationIndexByName(PX_AnimationLibrary* pLib, const px_char* name); +px_void PX_AnimationLibraryAddInstr(PX_AnimationLibrary *panimationLib,PX_2DX_OPCODE opcode,px_word param); +px_void PX_AnimationLibraryFree(PX_AnimationLibrary *panimationLib); +px_int PX_AnimationGetAnimationsCount(PX_Animation *animation); +px_dword PX_AnimationGetCurrentPlayAnimation(PX_Animation *animation); +px_bool PX_AnimationSetCurrentPlayAnimation(PX_Animation *animation,px_int i); +px_bool PX_AnimationSetCurrentPlayAnimationByName(PX_Animation *animation,const px_char *name); +px_int PX_AnimationGetPlayAnimationIndexByName(PX_Animation* animation, const px_char* name); +px_void PX_AnimationFree(PX_Animation *animation); +px_void PX_AnimationReset(PX_Animation *animation); +px_void PX_AnimationUpdate(PX_Animation *panimation,px_uint elapsed); +px_bool PX_AnimationIsEnd(PX_Animation *panimation); +px_rect PX_AnimationGetSize(PX_Animation *panimation); +px_texture *PX_AnimationGetCurrentTexture(PX_Animation *panimation); +px_void PX_AnimationRenderRotation(px_surface *psurface,PX_Animation *animation,px_point position,px_int angle,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_AnimationRender(px_surface *psurface,PX_Animation *animation,px_int x,px_int y,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_AnimationRenderEx(px_surface *psurface,PX_Animation *animation,px_int x,px_int y,px_float scale,px_point direction,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_AnimationRender_scale(px_surface *psurface,PX_Animation *animation,px_int x,px_int y,px_float scale,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_AnimationRender_vector(px_surface *psurface,PX_Animation *animation,px_int x,px_int y,px_point direction,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); + +//Create Animation from 2dx data +px_int PX_AnimationLibraryGetFrameWidth(PX_AnimationLibrary *panimationLib,px_int frameIndex); +px_int PX_AnimationLibraryGetFrameHeight(PX_AnimationLibrary *panimationLib,px_int frameIndex); +px_bool PX_AnimationLibraryCreateFromMemory(px_memorypool *mp,PX_AnimationLibrary *panimationLib,px_byte *_2dxBuffer,px_uint size); +px_bool PX_AnimationLibrary_CreateEffect_JumpVertical(px_memorypool *mp,PX_AnimationLibrary *panimation,px_texture *effectTexture); +#endif + diff --git a/UI/PainterEngine/kernel/PX_Compiler.c b/UI/PainterEngine/kernel/PX_Compiler.c new file mode 100644 index 0000000..8aaa9f8 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Compiler.c @@ -0,0 +1,50 @@ +#include "PX_Compiler.h" + +px_bool PX_CompilerInitialize(px_memorypool *mp,PX_Compiler *compiler) +{ + compiler->mp=mp; + if(!PX_ScriptCompilerInitialize(&compiler->lib,mp)) + { + return PX_FALSE; + } + return PX_TRUE; +} + +px_bool PX_CompilerAddSource(PX_Compiler *compiler,const px_char script[]) +{ + if(!PX_ScriptCompilerLoad(&compiler->lib,script)) + { + return PX_FALSE; + } + return PX_TRUE; + +} + +px_bool PX_CompilerCompile(PX_Compiler *compiler,px_memory *bin,const px_char entryScript[]) +{ + + px_string asmcodeString; + + PX_StringInitialize(compiler->mp,&asmcodeString); + if(PX_ScriptCompilerCompile(&compiler->lib,entryScript,&asmcodeString,128)) + { + PX_ScriptAsmOptimization(&asmcodeString); + + if(!PX_ScriptAsmCompile(compiler->mp,asmcodeString.buffer,bin)) + { + return PX_FALSE; + } + PX_StringFree(&asmcodeString); + return PX_TRUE; + } + + PX_StringFree(&asmcodeString); + + return PX_FALSE; +} + +px_void PX_CompilerFree(PX_Compiler *compiler) +{ + PX_ScriptCompilerFree(&compiler->lib); +} + diff --git a/UI/PainterEngine/kernel/PX_Compiler.h b/UI/PainterEngine/kernel/PX_Compiler.h new file mode 100644 index 0000000..86e106d --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Compiler.h @@ -0,0 +1,17 @@ +#ifndef PX_COMPILER_H +#define PX_COMPILER_H + +#include "PX_Script_Interpreter.h" +#include "PX_Script_ASMCompiler.h" +#include "PX_Script_VM.h" +typedef struct +{ + px_memorypool *mp; + PX_SCRIPT_LIBRARY lib; +}PX_Compiler; + +px_bool PX_CompilerInitialize(px_memorypool *mp,PX_Compiler *compiler); +px_bool PX_CompilerAddSource(PX_Compiler *compiler,const px_char script[]); +px_bool PX_CompilerCompile(PX_Compiler *compiler,px_memory *bin,const px_char entryScript[]); +px_void PX_CompilerFree(PX_Compiler *compiler); +#endif diff --git a/UI/PainterEngine/kernel/PX_Json.c b/UI/PainterEngine/kernel/PX_Json.c new file mode 100644 index 0000000..7ea3f53 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Json.c @@ -0,0 +1,1170 @@ +#include "PX_Json.h" +static px_uint json_quotes; + +px_bool PX_JsonInterpret_Object(PX_Json *pjson,px_lexer *lexer,PX_Json_Object *json_Object); +px_bool PX_JsonInterpret_Value(PX_Json *pjson,px_lexer *lexer,PX_Json_Value *_value,px_bool arrayElement); +px_void PX_JsonFreeValue(PX_Json *pjson,PX_Json_Value *json_Value); + +PX_LEXER_LEXEME_TYPE PX_JsonNextToken(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while ((type= PX_LexerGetNextLexeme(lexer))==PX_LEXER_LEXEME_TYPE_SPACER||type==PX_LEXER_LEXEME_TYPE_NEWLINE); + + return type; +} + +PX_Json_Value * PX_JsonGetObjectValue(PX_Json_Value *json_value,const px_char name[]) +{ + px_int i; + if (json_value->type!=PX_JSON_VALUE_TYPE_OBJECT) + { + return PX_NULL; + } + for (i=0;i_object.values.size;i++) + { + PX_Json_Value *pValue=PX_LISTAT(PX_Json_Value,&json_value->_object.values,i); + if (PX_strequ(name,pValue->name.buffer)) + { + return pValue; + } + } + return PX_NULL; +} + +PX_Json_Value * PX_JsonGetObjectValueByIndex(PX_Json_Value *json_value,px_int i) +{ + if (i<0||i>=json_value->_object.values.size) + { + return PX_NULL; + } + return PX_LISTAT(PX_Json_Value,&json_value->_object.values,i); +} + +PX_Json_Value * PX_JsonGetValue(PX_Json *json,const px_char _payload[]) +{ + px_int r_offset=0; + px_int s_offset=0; + px_char payload[256]={0}; + px_char *lexeme=PX_NULL; + px_int i=0,array=-1; + + PX_Json_Value * it=&json->rootValue; + if (PX_strlen(_payload)>=sizeof(payload)) + { + return PX_NULL; + } + PX_strset(payload,_payload); + + while (payload[r_offset]!=0) + { + + while (PX_TRUE) + { + if (payload[s_offset]=='.') + { + payload[s_offset]='\0'; + s_offset++; + break; + } + if (payload[s_offset]=='\0') + { + break; + } + s_offset++; + } + + lexeme=payload+r_offset; + i=PX_strlen(lexeme); + //array? + if (lexeme[i-1]==']') + { + + lexeme[i-1]='\0'; + i--; + while (i>0) + { + if (lexeme[i]=='[') + { + lexeme[i]='\0'; + array=PX_atoi(lexeme+i+1); + break; + } + i--; + } + } + else + { + array=-1; + } + if (array!=-1) + { + it=PX_JsonGetObjectValue(it,lexeme); + if (it&&it->type==PX_JSON_VALUE_TYPE_ARRAY) + { + it=PX_JsonGetArrayValue(it,array); + } + else + { + return PX_NULL; + } + + } + else + { + it=PX_JsonGetObjectValue(it,lexeme); + } + + r_offset=s_offset; + if (!it) + { + break; + } + + } + return it; +} + +PX_Json_Value * PX_JsonGetArrayValue(PX_Json_Value *value,px_int i) +{ + if (value->type!=PX_JSON_VALUE_TYPE_ARRAY) + { + return PX_NULL; + } + if (i_array.size) + { + return PX_LISTAT(PX_Json_Value,&value->_array,i); + } + return PX_NULL; +} + +px_bool PX_JsonInitialize(px_memorypool *mp,PX_Json *pjson) +{ + PX_memset(pjson,0,sizeof(PX_Json)); + pjson->mp=mp; + pjson->rootValue.type=PX_JSON_VALUE_TYPE_OBJECT; + PX_StringInitialize(mp,&pjson->rootValue.name); + PX_ListInitialize(pjson->mp,&pjson->rootValue._object.values); + return PX_TRUE; +} + + + +static px_bool PX_JsonInterpret_Value_Array(PX_Json *pjson,px_lexer *lexer,PX_Json_Value *_value) +{ + PX_LEXER_LEXEME_TYPE type; + PX_Json_Value array_value; + PX_LEXER_STATE state; + px_int i; + type=PX_JsonNextToken(lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||lexer->Symbol!='[') + goto _ERROR; + + while (PX_TRUE) + { + state=PX_LexerGetState(lexer); + type=PX_JsonNextToken(lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER) + { + if(lexer->Symbol==']') + { + return PX_TRUE; + } + + if(lexer->Symbol!='{') + { + goto _ERROR; + } + } + + PX_LexerSetState(state); + if (!PX_JsonInterpret_Value(pjson,lexer,&array_value,PX_TRUE)) + { + goto _ERROR; + } + + if(!PX_ListPush(&_value->_array,&array_value,sizeof(array_value))) + goto _ERROR; + + type=PX_JsonNextToken(lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER) + { + if (lexer->Symbol==',') + { + continue; + } + + if (lexer->Symbol==']') + { + return PX_TRUE; + } + goto _ERROR; + } + else + { + goto _ERROR; + } + + } +_ERROR: + for (i=0;i<_value->_array.size;i++) + { + PX_JsonFreeValue(pjson,PX_LISTAT(PX_Json_Value,&_value->_array,i)); + } + PX_ListFree(&_value->_array); + return PX_FALSE; +} + + + + + + +px_bool PX_JsonInterpret_Value(PX_Json *pjson,px_lexer *lexer,PX_Json_Value *_value,px_bool arrayElement) +{ + PX_LEXER_STATE state; + PX_LEXER_LEXEME_TYPE type; + + + PX_memset(_value,0,sizeof(PX_Json_Value)); + PX_StringInitialize(pjson->mp,&_value->name); + if (!arrayElement) + { + type=PX_JsonNextToken(lexer); + if (type!=PX_LEXER_LEXEME_TYPE_CONATINER)//{name + { + goto _ERROR; + } + PX_LexerGetIncludedString(lexer,&lexer->CurLexeme); + PX_StringCopy(&_value->name,&lexer->CurLexeme); + + type=PX_JsonNextToken(lexer); + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||lexer->Symbol!=':')//{\spacer name : + { + goto _ERROR; + } + } + + state=PX_LexerGetState(lexer); + type=PX_JsonNextToken(lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER) + { + if(lexer->Symbol=='[') + { + PX_LexerSetState(state); + _value->type=PX_JSON_VALUE_TYPE_ARRAY; + PX_ListInitialize(pjson->mp,&_value->_array); + if(!PX_JsonInterpret_Value_Array(pjson,lexer,_value)) + { + + goto _ERROR; + } + else + return PX_TRUE; + } + else + if(lexer->Symbol=='{') + { + PX_LexerSetState(state); + _value->type=PX_JSON_VALUE_TYPE_OBJECT; + if(!PX_JsonInterpret_Object(pjson,lexer,&_value->_object)) + { + return PX_FALSE; + } + return PX_TRUE; + + } + + goto _ERROR; + + } + else + { + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + if(PX_StringIsNumeric(&lexer->CurLexeme)) + { + _value->type=PX_JSON_VALUE_TYPE_NUMBER; + _value->_number=PX_atof(lexer->CurLexeme.buffer); + return PX_TRUE; + } + + if(PX_strequ(lexer->CurLexeme.buffer,"true")) + { + _value->type=PX_JSON_VALUE_TYPE_BOOLEAN; + _value->_boolean=PX_TRUE; + return PX_TRUE; + } + + if(PX_strequ(lexer->CurLexeme.buffer,"false")) + { + _value->type=PX_JSON_VALUE_TYPE_BOOLEAN; + _value->_boolean=PX_FALSE; + return PX_TRUE; + } + + if(PX_strequ(lexer->CurLexeme.buffer,"null")) + { + _value->type=PX_JSON_VALUE_TYPE_NULL; + return PX_TRUE; + } + + if (PX_strlen(lexer->CurLexeme.buffer)>=3) + { + if (lexer->CurLexeme.buffer[0]=='0'&&(lexer->CurLexeme.buffer[1]=='x'||lexer->CurLexeme.buffer[1]=='X')) + { + _value->type=PX_JSON_VALUE_TYPE_NUMBER; + _value->_number=(px_dword)PX_htoi(lexer->CurLexeme.buffer+2); + return PX_TRUE; + } + } + } + else if(type==PX_LEXER_LEXEME_TYPE_CONATINER&&lexer->CurrentContainerType==json_quotes) + { + px_int i; + _value->type=PX_JSON_VALUE_TYPE_STRING; + if(!PX_StringInitialize(pjson->mp,&_value->_string))goto _ERROR;; + PX_LexerGetIncludedString(lexer,&lexer->CurLexeme); + + if(!PX_StringCopy(&_value->_string,&lexer->CurLexeme)) + { + PX_StringFree(&_value->_string); + goto _ERROR; + } + + for (i=0;_value->_string.buffer[i];i++) + { + if (_value->_string.buffer[i]=='\\') + { + if (_value->_string.buffer[i+1]=='\\') + { + PX_StringRemoveChar(&_value->_string,i+1); + } + if (_value->_string.buffer[i+1]=='n') + { + _value->_string.buffer[i]='\n'; + PX_StringRemoveChar(&_value->_string,i+1); + } + if (_value->_string.buffer[i+1]=='r') + { + _value->_string.buffer[i]='\r'; + PX_StringRemoveChar(&_value->_string,i+1); + } + if (_value->_string.buffer[i+1]=='t') + { + _value->_string.buffer[i]='\t'; + PX_StringRemoveChar(&_value->_string,i+1); + } + } + } + return PX_TRUE; + } + + goto _ERROR; + + } +_ERROR: + PX_StringFree(&_value->name); + return PX_FALSE; +} + +px_bool PX_JsonInterpret_Object(PX_Json *pjson,px_lexer *lexer,PX_Json_Object *json_Object) +{ + PX_LEXER_LEXEME_TYPE type; + PX_Json_Value _value; + PX_LEXER_STATE state; + px_int i; + PX_memset(json_Object,0,sizeof(PX_Json_Object)); + + if (!json_Object->values.mp) + { + PX_ListInitialize(pjson->mp,&json_Object->values); + } + + + while (PX_TRUE) + { + type=PX_JsonNextToken(lexer); + if (type==PX_LEXER_LEXEME_TYPE_END) + { + goto _ERROR; + } + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer->Symbol=='{')//{ + { + state=PX_LexerGetState(lexer); + type=PX_JsonNextToken(lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer->Symbol=='}')//{} + { + return PX_TRUE; + } + else + { + PX_LexerSetState(state); + while (PX_TRUE) + { + + + if (!PX_JsonInterpret_Value(pjson,lexer,&_value,PX_FALSE)) + { + goto _ERROR; + } + + if(!PX_ListPush(&json_Object->values,&_value,sizeof(_value))) + goto _ERROR; + + type=PX_JsonNextToken(lexer); + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + goto _ERROR; + } + + if (lexer->Symbol=='}') + { + return PX_TRUE; + } + else if(lexer->Symbol==',') + { + continue; + } + else + { + PX_StringFree(&_value.name); + goto _ERROR; + } + } + } + } + } +_ERROR: + ////////////////////////////////////////////////////////////////////////// + //remove object + + for (i=0;ivalues.size;i++) + { + PX_JsonFreeValue(pjson,PX_LISTAT(PX_Json_Value,&json_Object->values,i)); + } + PX_ListFree(&json_Object->values); + + return PX_FALSE; +} + +px_bool PX_JsonParse(PX_Json *pjson,const px_char *json_content) +{ + px_lexer lexer; + + PX_LexerInit(&lexer,pjson->mp); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterDelimiter(&lexer,':'); + PX_LexerRegisterDelimiter(&lexer,'{'); + PX_LexerRegisterDelimiter(&lexer,'}'); + PX_LexerRegisterDelimiter(&lexer,'['); + PX_LexerRegisterDelimiter(&lexer,']'); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + PX_LexerRegisterComment(&lexer,"//","\n"); + json_quotes=PX_LexerRegisterContainer(&lexer,"\"","\""); + if(!PX_LexerLoadSourceFromMemory(&lexer,json_content)) goto _ERROR; + + if(!PX_JsonInterpret_Object(pjson,&lexer,&pjson->rootValue._object)) + goto _ERROR; + PX_LexerFree(&lexer); + return PX_TRUE; +_ERROR: + PX_LexerFree(&lexer); + return PX_FALSE; +} + +px_bool PX_JsonBuild_Value(PX_Json_Value *pValue,px_string *_out,px_bool bArrayValue) +{ + if (!bArrayValue) + { + //name + if(!PX_StringCatCharEx(_out,'"'))return PX_FALSE; + if(!PX_StringCatEx(_out,pValue->name.buffer)) return PX_FALSE; + if(!PX_StringCatCharEx(_out,'"'))return PX_FALSE; + //: + if(!PX_StringCatCharEx(_out,':')) return PX_FALSE; + } + + switch(pValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + px_int i; + if(!PX_StringCatCharEx(_out,'['))return PX_FALSE; + for (i=0;i_array.size;i++) + { + PX_Json_Value *pv=PX_LISTAT(PX_Json_Value,&pValue->_array,i); + if(!PX_JsonBuild_Value(pv,_out,PX_TRUE))return PX_FALSE; + if(i!=pValue->_array.size-1)if(!PX_StringCatCharEx(_out,','))return PX_FALSE; + } + if(!PX_StringCatCharEx(_out,']'))return PX_FALSE; + } + break; + case PX_JSON_VALUE_TYPE_BOOLEAN: + { + if (pValue->_boolean) + { + if(!PX_StringCatEx(_out,"true"))return PX_FALSE; + } + else + { + if(!PX_StringCatEx(_out,"false"))return PX_FALSE; + } + } + break; + case PX_JSON_VALUE_TYPE_NULL: + { + if(!PX_StringCatEx(_out,"null"))return PX_FALSE; + } + break; + case PX_JSON_VALUE_TYPE_NUMBER: + { + if(!PX_StringCatEx(_out,PX_ftos((px_float)pValue->_number,6).data))return PX_FALSE; + } + break; + case PX_JSON_VALUE_TYPE_STRING: + { + if(!PX_StringCatEx(_out,"\""))return PX_FALSE; + if(!PX_StringCatEx(_out,pValue->_string.buffer))return PX_FALSE; + if(!PX_StringCatEx(_out,"\""))return PX_FALSE; + } + break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + px_int i; + if(!PX_StringCatEx(_out,"{\n")) return PX_FALSE; + for (i=0;i_object.values.size;i++) + { + PX_Json_Value *ptmpValue=PX_LISTAT(PX_Json_Value,&pValue->_object.values,i); + if(!PX_JsonBuild_Value(ptmpValue,_out,PX_FALSE))return PX_FALSE; + if(i!=pValue->_object.values.size-1)if(!PX_StringCatEx(_out,",")) return PX_FALSE; + if(!PX_StringCatEx(_out,"\n")) return PX_FALSE; + } + if(!PX_StringCatEx(_out,"}")) return PX_FALSE; + } + break; + } + return PX_TRUE; +} + + +px_bool PX_JsonBuild(PX_Json *pjson,px_string *_out) +{ + PX_StringUpdateExReg(_out); + return PX_JsonBuild_Value(&pjson->rootValue,_out,PX_TRUE); +} + +static px_void PX_JsonDeleteValue(PX_Json *pjson,PX_Json_Value *pValue) +{ + switch (pValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + px_int i; + for (i=0;i_array.size;i++) + { + PX_Json_Value *pSubValue=PX_LISTAT(PX_Json_Value,&pValue->_array,i); + PX_JsonDeleteValue(pjson,pSubValue); + } + PX_ListFree(&pValue->_array); + } + break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + px_int i; + for (i=0;i_object.values.size;i++) + { + PX_Json_Value *pSubValue=PX_LISTAT(PX_Json_Value,&pValue->_object.values,i); + PX_JsonDeleteValue(pjson,pSubValue); + } + PX_ListFree(&pValue->_object.values); + } + break; + case PX_JSON_VALUE_TYPE_STRING: + { + PX_StringFree(&pValue->_string); + } + break; + default: + break; + } +} + + +px_void PX_JsonDelete(PX_Json *pjson,const px_char _payload[]) +{ + px_int i; + PX_Json_Value *pParentValue,*pValue; + px_char payload[256]={0}; + + + if (PX_strlen(_payload)>=sizeof(payload)) + { + return; + } + + pValue=PX_JsonGetValue(pjson,_payload); + if (!pValue) + { + return; + } + + PX_strset(payload,_payload); + + if (payload[PX_strlen(payload)-1]==']') + { + //array + for (i=PX_strlen(payload);i>0;i--) + { + if (payload[i]=='[') + { + break; + } + } + } + else + { + for (i=PX_strlen(payload);i>0;i--) + { + if (payload[i]=='.') + { + break; + } + } + } + payload[i]='\0'; + pParentValue=PX_JsonGetValue(pjson,payload); + + if (!pParentValue) + { + return; + } + switch(pParentValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + px_int j; + for (j=0;j_array.size;j++) + { + PX_Json_Value *pTarget; + pTarget=PX_LISTAT(PX_Json_Value,&pParentValue->_array,j); + if (pTarget==pValue) + { + PX_JsonDeleteValue(pjson,pTarget); + PX_ListErase(&pParentValue->_array,j); + return; + } + } + } + break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + px_int j; + for (j=0;j_object.values.size;j++) + { + PX_Json_Value *pTarget; + pTarget=PX_LISTAT(PX_Json_Value,&pParentValue->_object.values,j); + if (pTarget==pValue) + { + PX_JsonDeleteValue(pjson,pTarget); + PX_ListErase(&pParentValue->_object.values,j); + return; + } + } + } + break; + default: + break; + } + + +} + +px_void PX_JsonFreeValue(PX_Json *pjson,PX_Json_Value *json_Value) +{ + PX_StringFree(&json_Value->name); + switch (json_Value->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + px_int i; + for (i=0;i_array.size;i++) + { + PX_JsonFreeValue(pjson,PX_LISTAT(PX_Json_Value,&json_Value->_array,i)); + } + PX_ListFree(&json_Value->_array); + } + break; + case PX_JSON_VALUE_TYPE_STRING: + PX_StringFree(&json_Value->_string); + break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + px_int i; + for (i=0;i_object.values.size;i++) + { + PX_JsonFreeValue(pjson,PX_LISTAT(PX_Json_Value,&json_Value->_object.values,i)); + } + PX_ListFree(&json_Value->_object.values); + } + break; + case PX_JSON_VALUE_TYPE_BOOLEAN: + case PX_JSON_VALUE_TYPE_NULL: + case PX_JSON_VALUE_TYPE_NUMBER: + default: + break; + } +} + +px_void PX_JsonFree(PX_Json *pjson) +{ + PX_JsonFreeValue(pjson,&pjson->rootValue); +} + +px_bool PX_JsonCreateObjectValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[]) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_OBJECT; + + if (!PX_StringInitialize(mp,&pValue->name)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->name,name)) return PX_FALSE; + PX_ListInitialize(mp,&pValue->_object.values); + return PX_TRUE; +} + +px_bool PX_JsonCreateStringValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],const px_char text[]) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_STRING; + + if (!PX_StringInitialize(mp,&pValue->name)) + { + return PX_FALSE; + } + PX_StringSet(&pValue->name,name); + + if (!PX_StringInitialize(mp,&pValue->_string)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->_string,text)) return PX_FALSE; + return PX_TRUE; +} + +px_bool PX_JsonCreateNumberValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],px_double value) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_NUMBER; + + if (!PX_StringInitialize(mp,&pValue->name)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->name,name)) return PX_FALSE; + + pValue->_number=value; + return PX_TRUE; +} + +px_bool PX_JsonCreateBooleanValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],px_bool b) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_BOOLEAN; + + if (!PX_StringInitialize(mp,&pValue->name)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->name,name)) return PX_FALSE; + + pValue->_boolean=b; + return PX_TRUE; +} + +px_bool PX_JsonCreateArrayValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[]) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_ARRAY; + + if (!PX_StringInitialize(mp,&pValue->name)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->name,name)) return PX_FALSE; + PX_ListInitialize(mp,&pValue->_array); + return PX_TRUE; +} + +px_bool PX_JsonAddString(PX_Json *pjson,const px_char parent_payload[],const px_char name[],const px_char text[]) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,parent_payload); + + PX_Json_Value newValue; + if (!pValue) + { + return PX_FALSE; + } + switch (pValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateStringValue(pjson->mp,&newValue,name,text); + PX_ListPush(&pValue->_array,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_STRING) + { + return PX_FALSE; + } + PX_StringSet(&pExistValue->_string,text); + } + + + return PX_TRUE; + } + //break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateStringValue(pjson->mp,&newValue,name,text); + PX_ListPush(&pValue->_object.values,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_STRING) + { + return PX_FALSE; + } + PX_StringSet(&pExistValue->_string,text); + } + return PX_TRUE; + } + //break; + default: + return PX_FALSE; + } + + return PX_FALSE; +} + +px_bool PX_JsonAddNumber(PX_Json *pjson,const px_char parent_payload[],const px_char name[],const px_double number) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,parent_payload); + PX_Json_Value newValue; + if (!pValue) + { + return PX_FALSE; + } + switch (pValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateNumberValue(pjson->mp,&newValue,name,number); + PX_ListPush(&pValue->_array,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_NUMBER) + { + return PX_FALSE; + } + pExistValue->_number=number; + } + + + return PX_TRUE; + } + //break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateNumberValue(pjson->mp,&newValue,name,number); + PX_ListPush(&pValue->_object.values,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_NUMBER) + { + return PX_FALSE; + } + pExistValue->_number=number; + } + return PX_TRUE; + } + //break; + default: + return PX_FALSE; + } + + return PX_FALSE; + + +} + +px_bool PX_JsonAddBoolean(PX_Json *pjson,const px_char parent_payload[],const px_char name[],const px_bool b) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,parent_payload); + PX_Json_Value newValue; + if (!pValue) + { + return PX_FALSE; + } + switch (pValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateBooleanValue(pjson->mp,&newValue,name,b); + PX_ListPush(&pValue->_array,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_BOOLEAN) + { + return PX_FALSE; + } + pExistValue->_boolean=b; + } + + return PX_TRUE; + } + //break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateBooleanValue(pjson->mp,&newValue,name,b); + PX_ListPush(&pValue->_object.values,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_BOOLEAN) + { + return PX_FALSE; + } + pExistValue->_boolean=b; + } + + return PX_TRUE; + } + //break; + default: + return PX_FALSE; + } + + return PX_FALSE; +} + +px_bool PX_JsonAddArray(PX_Json *pjson,const px_char parent_payload[],const px_char name[]) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,parent_payload); + PX_Json_Value newValue; + if (!pValue) + { + return PX_FALSE; + } + switch (pValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateArrayValue(pjson->mp,&newValue,name); + PX_ListPush(&pValue->_array,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_ARRAY) + { + return PX_FALSE; + } + } + + return PX_TRUE; + } + //break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateArrayValue(pjson->mp,&newValue,name); + PX_ListPush(&pValue->_object.values,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_ARRAY) + { + return PX_FALSE; + } + } + + return PX_TRUE; + } + //break; + default: + return PX_FALSE; + } + + return PX_FALSE; +} + +px_bool PX_JsonAddObject(PX_Json *pjson,const px_char parent_payload[],const px_char name[]) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,parent_payload); + PX_Json_Value newValue; + if (!pValue) + { + return PX_FALSE; + } + switch (pValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateObjectValue(pjson->mp,&newValue,name); + PX_ListPush(&pValue->_array,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_OBJECT) + { + return PX_FALSE; + } + } + + + return PX_TRUE; + } + //break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + + PX_Json_Value *pExistValue=PX_JsonGetObjectValue(pValue,name); + if (!pExistValue) + { + PX_JsonCreateObjectValue(pjson->mp,&newValue,name); + PX_ListPush(&pValue->_object.values,&newValue,sizeof(newValue)); + } + else + { + if (pExistValue->type!=PX_JSON_VALUE_TYPE_OBJECT) + { + return PX_FALSE; + } + } + return PX_TRUE; + } + //break; + default: + return PX_FALSE; + } + + return PX_FALSE; +} + +const px_char * PX_JsonGetString(PX_Json *pjson,const px_char payload[]) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,payload); + if (pValue&&pValue->type==PX_JSON_VALUE_TYPE_STRING) + { + return pValue->_string.buffer; + } + return ""; +} + +px_double PX_JsonGetNumber(PX_Json *pjson,const px_char payload[]) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,payload); + if (pValue&&pValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + return pValue->_number; + } + return 0; +} + +px_bool PX_JsonGetBoolean(PX_Json *pjson,const px_char payload[]) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,payload); + if (pValue&&pValue->type==PX_JSON_VALUE_TYPE_BOOLEAN) + { + return pValue->_boolean; + } + return 0; +} + +px_bool PX_JsonSetString(PX_Json *pjson,const px_char payload[],const px_char text[]) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,payload); + if (pValue&&pValue->type==PX_JSON_VALUE_TYPE_STRING) + { + return PX_StringSet(&pValue->_string,text); + } + return PX_FALSE; +} + +px_bool PX_JsonSetNumber(PX_Json *pjson,const px_char payload[],const px_double number) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,payload); + if (pValue&&pValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + pValue->_number=number; + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_JsonSetBoolean(PX_Json *pjson,const px_char payload[],const px_bool b) +{ + PX_Json_Value *pValue=PX_JsonGetValue(pjson,payload); + if (pValue&&pValue->type==PX_JSON_VALUE_TYPE_BOOLEAN) + { + pValue->_boolean=b; + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_JsonObjectAddValue(PX_Json_Value *pObject,PX_Json_Value *value) +{ + if (pObject->type==PX_JSON_VALUE_TYPE_OBJECT) + { + return PX_ListPush(&pObject->_object.values,value,sizeof(PX_Json_Value))!=PX_NULL; + } + return PX_FALSE; +} + +px_bool PX_JsonArrayAddValue(PX_Json_Value *pArray,PX_Json_Value *value) +{ + if (pArray->type==PX_JSON_VALUE_TYPE_ARRAY) + { + return PX_ListPush(&pArray->_array,value,sizeof(PX_Json_Value))!=PX_NULL; + } + return PX_FALSE; +} + diff --git a/UI/PainterEngine/kernel/PX_Json.h b/UI/PainterEngine/kernel/PX_Json.h new file mode 100644 index 0000000..12898b6 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Json.h @@ -0,0 +1,84 @@ +#ifndef PX_JSON_H +#define PX_JSON_H +#include "PX_Lexer.h" + + + +typedef enum +{ + PX_JSON_VALUE_TYPE_STRING, + PX_JSON_VALUE_TYPE_NUMBER, + PX_JSON_VALUE_TYPE_BOOLEAN, + PX_JSON_VALUE_TYPE_NULL, + PX_JSON_VALUE_TYPE_OBJECT, + PX_JSON_VALUE_TYPE_ARRAY, +}PX_JSON_VALUE_TYPE; + +typedef struct _PX_Json_Object +{ + px_list values; //values +}PX_Json_Object; + +typedef struct +{ + PX_JSON_VALUE_TYPE type; + px_string name; + union + { + px_string _string; + px_double _number; + px_bool _boolean; + PX_Json_Object _object; + px_list _array;//values + }; +}PX_Json_Value; + +typedef struct _PX_Json_Object PX_Json_Object; + +typedef struct +{ + px_memorypool *mp; + PX_Json_Value rootValue; +}PX_Json; + + +PX_Json_Value *PX_JsonGetObjectValue(PX_Json_Value *json_value,const px_char name[]); +PX_Json_Value *PX_JsonGetObjectValueByIndex(PX_Json_Value *json_value,px_int i); +PX_Json_Value * PX_JsonGetValue(PX_Json *json,const px_char payload[]); +PX_Json_Value * PX_JsonGetArrayValue(PX_Json_Value *value,px_int i); + + +px_bool PX_JsonInitialize(px_memorypool *mp,PX_Json *pjson); + +px_bool PX_JsonParse(PX_Json *pjson,const px_char *json_content); +px_bool PX_JsonBuild_Value(PX_Json_Value *pValue,px_string *_out,px_bool bArrayValue); +px_bool PX_JsonBuild(PX_Json *pjson,px_string *_out); +px_void PX_JsonDelete(PX_Json *pjson,const px_char payload[]); +px_void PX_JsonFree(PX_Json *pjson); + + +px_bool PX_JsonCreateObjectValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[]); +px_bool PX_JsonCreateStringValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],const px_char text[]); +px_bool PX_JsonCreateNumberValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],px_double value); +px_bool PX_JsonCreateBooleanValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],px_bool b); +px_bool PX_JsonCreateArrayValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[]); + +px_bool PX_JsonAddString(PX_Json *pjson,const px_char parent_payload[],const px_char name[],const px_char text[]); +px_bool PX_JsonAddNumber(PX_Json *pjson,const px_char parent_payload[],const px_char name[],const px_double number); +px_bool PX_JsonAddBoolean(PX_Json *pjson,const px_char parent_payload[],const px_char name[],const px_bool b); +px_bool PX_JsonAddArray(PX_Json *pjson,const px_char parent_payload[],const px_char name[]); +px_bool PX_JsonAddObject(PX_Json *pjson,const px_char parent_payload[],const px_char name[]); + +const px_char *PX_JsonGetString(PX_Json *pjson,const px_char payload[]); +px_double PX_JsonGetNumber(PX_Json *pjson,const px_char payload[]); +px_bool PX_JsonGetBoolean(PX_Json *pjson,const px_char payload[]); + +px_bool PX_JsonSetString(PX_Json *pjson,const px_char payload[],const px_char text[]); +px_bool PX_JsonSetNumber(PX_Json *pjson,const px_char payload[],const px_double number); +px_bool PX_JsonSetBoolean(PX_Json *pjson,const px_char payload[],const px_bool b); + +px_bool PX_JsonObjectAddValue(PX_Json_Value *pObject,PX_Json_Value *value); +px_bool PX_JsonArrayAddValue(PX_Json_Value *pArray,PX_Json_Value *value); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Kernel.h b/UI/PainterEngine/kernel/PX_Kernel.h new file mode 100644 index 0000000..320629e --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Kernel.h @@ -0,0 +1,27 @@ +////////////////////////////////////////////////////////////////////////// +/* + PainterEngine Kernel + (C)2019 DBinary + + This program is free software; you can redistribute it and/or modify + it under the terms of the BSD General Public License +*/ +////////////////////////////////////////////////////////////////////////// +#ifndef _PX_KERNEL_H +#define _PX_KERNEL_H +#include "PX_Script_Interpreter.h" +#include "PX_Script_ASMCompiler.h" +#include "PX_Script_VM.h" +#include "PX_Partical.h" +#include "PX_Animation.h" +#include "PX_World.h" +#include "PX_Sync.h" +#include "PX_MQTT.h" +#include "PX_Object.h" +#include "PX_Json.h" +#include "PX_3D_ObjData.h" +#include "PX_MODBUS.h" +#include "PX_LiveFramework.h" +#include "PX_UI.h" +#include "PX_Compiler.h" +#endif diff --git a/UI/PainterEngine/kernel/PX_Lexer.c b/UI/PainterEngine/kernel/PX_Lexer.c new file mode 100644 index 0000000..6026a8d --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Lexer.c @@ -0,0 +1,710 @@ +#include "./PX_Lexer.h" + +static px_char * PX_LexerIsCommentStart(px_lexer *lexer,const px_char ch[]); +static px_char * PX_LexerIsCommentEnd(px_lexer *lexer,const px_char startch[],const px_char ch[]); +static px_char* PX_LexerIsContainerStart(px_lexer *lexer,const px_char ch[]); +static char* PX_LexerIsContainerEnd(px_lexer *lexer,const px_char startch[],const px_char ch[]); +static px_bool PX_LexerIsContainerTransfer(px_lexer *lexer,const px_char startch[],px_char ch); + +static px_int PX_LexerIsSpacer(px_lexer *lexer,px_char chr); +static px_int PX_LexerIsDelimiter(px_lexer *lexer,px_char chr); +static px_int PX_LexerFilterChar(px_lexer *lexer,px_char ch); +static px_int PX_LexerIsSourcsEnd(px_lexer *lexer); +static px_int PX_LexerIsNewLine(px_char ch); + +//CA_Token *GetToken(px_lexer *lexer,pt_string Mnemonic); +//px_void RegisterToken(pt_string Mnemonic,px_uint Type); + + + +//---------------------------------------------------------------------------------- + +//-------------------------------------------Lexer---------------------------------- + +px_bool PX_LexerIsCharNumeric(px_char chr) +{ + if (chr>=('0')&&chr<=('9')) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_LexerIsStringNumeric(px_string *pString) +{ + return PX_StringIsNumeric(pString); +} + + + +// -------------------------------------------New Line------------------------------- +px_bool PX_LexerIsNewLine(px_char ch) +{ + return ch=='\r'||ch=='\n'; +} + +//-------------------------------------------Comment---------------------------------- + + +px_char * PX_LexerIsCommentStart(px_lexer *lexer,const px_char ch[]) +{ + px_int i=0; + for (i=0;iCommentCount;i++) + { + if(PX_memequ(ch,lexer->Comment[i].CommentBegin,PX_strlen(lexer->Comment[i].CommentBegin))) + return lexer->Comment[i].CommentBegin; + } + return PX_NULL; +} + +px_char * PX_LexerIsCommentEnd(px_lexer *lexer,const px_char startch[],const px_char ch[]) +{ + px_int i=0; + for (i=0;iCommentCount;i++) + { + if(PX_memequ(startch,lexer->Comment[i].CommentBegin,PX_strlen(lexer->Comment[i].CommentBegin))&&PX_memequ(ch,lexer->Comment[i].CommentEnd,PX_strlen(lexer->Comment[i].CommentEnd))) + { + lexer->CurrentCommentType=i; + return lexer->Comment[i].CommentEnd; + } + } + return PX_NULL; +} + + +//--------------------------------------------Spacer----------------------------------- + + +px_void PX_LexerRegisterSpacer(px_lexer *lexer,px_char Spacer) +{ + px_int i; + if (lexer->SpacerCountSpacerCount;i++) + { + if (lexer->Spacer[i]==Spacer) + { + return; + } + } + lexer->Spacer[lexer->SpacerCount++]=Spacer; + } +} + +px_bool PX_LexerIsSpacer(px_lexer *lexer,px_char chr) +{ + px_int i; + for (i=0;iSpacerCount;i++) + { + if (lexer->Spacer[i]==chr) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +//--------------------------------------------Delimiter-------------------------------- + + +px_int PX_LexerRegisterDelimiter(px_lexer *lexer,px_char Delimiter) +{ + px_int i; + if (lexer->DelimiterCountDelimiterCount;i++) + { + if (lexer->Delimiter[i]==Delimiter) + { + return i; + } + } + lexer->Delimiter[lexer->DelimiterCount++]=Delimiter; + return lexer->DelimiterCount-1; + } + return -1; +} + + + + + +px_int PX_LexerIsDelimiter(px_lexer *lexer,px_char chr) +{ + px_int i; + for (i=0;iDelimiterCount;i++) + { + if (lexer->Delimiter[i]==chr) + { + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_int PX_LexerGetDelimiterType(px_lexer *lexer,px_char Delimiter) +{ + px_int i; + for (i=0;iDelimiterCount;i++) + { + if (lexer->Delimiter[i]==Delimiter) + { + return i; + } + } + return -1; +} + +//--------------------------------------------Container--------------------------------- + + + +px_int PX_LexerRegisterContainer(px_lexer *lexer,const px_char Begin[],const px_char End[]) +{ + px_int i; + if (lexer->ContainerCountContainerCount;i++) + { + if (lexer->Container[i].ContainerBegin==Begin&&lexer->Container[i].ContainerEnd==End) + { + return i; + } + } + PX_strcpy(lexer->Container[lexer->ContainerCount].ContainerBegin,Begin,sizeof(lexer->Container[lexer->ContainerCount].ContainerBegin)); + PX_strcpy(lexer->Container[lexer->ContainerCount].ContainerEnd,End,sizeof(lexer->Container[lexer->ContainerCount].ContainerEnd)); + lexer->ContainerCount++; + return lexer->ContainerCount-1; + } + return -1; +} + + +px_void PX_LexerRegisterContainerTransfer(px_lexer *lexer,px_uint containerIndex,px_char transfer) +{ + if(containerIndexContainer[containerIndex].transfer=transfer; +} + +px_int PX_LexerGetContainerType(px_lexer *lexer,px_char *pContainerText) +{ + return lexer->CurrentContainerType; +} + +px_char * PX_LexerIsContainerStart(px_lexer *lexer,const px_char chr[]) +{ + px_int i=0; + for (i=0;iContainerCount;i++) + { + if(PX_memequ(chr,lexer->Container[i].ContainerBegin,PX_strlen(lexer->Container[i].ContainerBegin))) + return lexer->Container[i].ContainerBegin; + } + return PX_NULL; +} + +px_char * PX_LexerIsContainerEnd(px_lexer *lexer,const px_char startch[],const px_char ch[]) +{ + px_int i=0; + for (i=0;iContainerCount;i++) + { + if(PX_memequ(startch,lexer->Container[i].ContainerBegin,PX_strlen(startch))&&PX_memequ(ch,lexer->Container[i].ContainerEnd,PX_strlen(lexer->Container[i].ContainerEnd))) + { + lexer->CurrentContainerType=i; + return lexer->Container[i].ContainerEnd; + } + } + return PX_NULL; +} + + +//--------------------------------------------TOKEN------------------------------------- +// +// +// CA_Token *Pt_Lexer::GetToken(pt_string Mnemonic) +// { +// for (px_uint i=0;iTokens.size();i++) +// { +// if (strcmp(Mnemonic,lexer->Tokens[i].Mnemonic)==0) +// { +// return &lexer->Tokens[i]; +// } +// } +// return NULL; +// } +// +// +// px_void Pt_Lexer::RegisterToken(pt_string Mnemonic,px_uint Type) +// { +// +// if (GetToken(Mnemonic)!=NULL) +// { +// return; +// } +// +// CA_Token Token; +// PT_STRING_COPY(Token.Mnemonic,sizeof(Token.Mnemonic),Mnemonic); +// Token.Type=Type; +// +// lexer->Tokens.push_back(Token); +// +// } +px_void PX_LexerInit(px_lexer *lexer,px_memorypool *mp) +{ + lexer->CommentCount=0; + lexer->SpacerCount=0; + lexer->DelimiterCount=0; + lexer->ContainerCount=0; + lexer->SourceOffset=0; + lexer->Sources=PX_NULL; + lexer->mp=mp; + lexer->lexemeTokenCase=PX_LEXER_LEXEME_CASE_NORMAL; + lexer->NumericMath=PX_FALSE; + PX_StringInitialize(mp,&lexer->CurLexeme); + PX_memset(lexer->Delimiter,0,sizeof(lexer->Delimiter)); + PX_memset(lexer->Spacer,0,sizeof(lexer->Spacer)); + PX_memset(lexer->Container,0,sizeof(lexer->Container)); + PX_memset(lexer->Comment,0,sizeof(lexer->Comment)); +} + + + +px_int PX_LexerFilterChar(px_lexer *lexer,px_char ch) +{ + + switch(lexer->SortStatus) + { + case PX_LEXERSORT_STATUS_NORMAL: + { + if (PX_LexerIsSpacer(lexer,ch)) + { + lexer->SortStatus=PX_LEXER_SORT_STATUS_SPACER; + return PX_TRUE; + } + if (PX_LexerIsNewLine(ch)) + { + lexer->SortStatus=PX_LEXER_SORT_STATUS_NEWLINE; + return PX_TRUE; + } + return PX_TRUE; + } + break; + case PX_LEXER_SORT_STATUS_SPACER: + { + if (PX_LexerIsSpacer(lexer,ch)) + { + return PX_FALSE; + } + if (PX_LexerIsNewLine(ch)) + { + lexer->SortStatus=PX_LEXER_SORT_STATUS_NEWLINE; + return PX_TRUE; + } + lexer->SortStatus=PX_LEXERSORT_STATUS_NORMAL; + return PX_TRUE; + } + break; + + case PX_LEXER_SORT_STATUS_NEWLINE: + if (PX_LexerIsSpacer(lexer,ch)||PX_LexerIsNewLine(ch)) + { + return PX_FALSE; + } + lexer->SortStatus=PX_LEXERSORT_STATUS_NORMAL; + return PX_TRUE; + + case PX_LEXER_SORT_STATUS_COMMENT: + break; + } + return PX_TRUE; +} + +px_bool PX_LexerSortText(px_lexer *lexer,const px_char *SourceText) +{ + px_char *chrst,*chred; + px_char *pNewSourceText; + unsigned long Offset=0; + if (lexer->Sources) + { + MP_Free(lexer->mp,lexer->Sources); + lexer->SourceOffset=0; + lexer->SortStatus=PX_LEXERSORT_STATUS_NORMAL; + } + if ((lexer->Sources=(px_char *)MP_Malloc(lexer->mp,PX_strlen(SourceText)+1))==PX_NULL) + { + return PX_FALSE; + } + PX_memset(lexer->Sources,0,PX_strlen(SourceText)+1); + lexer->SortStatus=PX_LEXER_SORT_STATUS_NEWLINE; + + while(*SourceText) + { + //Comment trim + if ((chrst=PX_LexerIsCommentStart(lexer,SourceText))!=0) + { + SourceText+=PX_strlen(chrst); + while (!(chred=PX_LexerIsCommentEnd(lexer,chrst,SourceText))) + { + if (!*SourceText) + { + return PX_FALSE; + } + SourceText++; + } + //special end '\n' + if(*SourceText=='\n') + SourceText+=PX_strlen(chred)-1; + else + SourceText+=PX_strlen(chred); + continue; + } + + //container skip + if ((chrst=PX_LexerIsContainerStart(lexer,SourceText))!=0) + { + PX_memcpy(lexer->Sources+Offset,chrst,PX_strlen(chrst)); + Offset+=PX_strlen(chrst);; + SourceText+=PX_strlen(chrst); + + while (!(chred=PX_LexerIsContainerEnd(lexer,chrst,SourceText))) + { + if (*SourceText=='\0') + { + return PX_FALSE; + } + + if(PX_LexerIsContainerTransfer(lexer,chrst,*SourceText)&&PX_memequ(SourceText+1,chrst,PX_strlen(chrst))) + { + lexer->Sources[Offset++]=*(SourceText++); + lexer->Sources[Offset++]=*(SourceText++); + } + else + lexer->Sources[Offset++]=*(SourceText++); + } + PX_memcpy(lexer->Sources+Offset,chred,PX_strlen(chred)); + Offset+=PX_strlen(chred);; + SourceText+=PX_strlen(chred); + continue; + } + + + if (PX_LexerFilterChar(lexer,*SourceText)) + { + if(Offset>0)//forward trim + { + if(PX_LexerIsNewLine(*SourceText)&&PX_LexerIsSpacer(lexer,lexer->Sources[Offset-1])) + Offset--; + if(PX_LexerIsDelimiter(lexer,*SourceText)&&PX_LexerIsSpacer(lexer,lexer->Sources[Offset-1])) + Offset--; + } + lexer->Sources[Offset++]=*(SourceText); + } + SourceText++; + } + lexer->Sources[Offset]='\0'; + pNewSourceText=lexer->Sources; + + while (*pNewSourceText) + { + //replace \r + if(*pNewSourceText=='\r') + *pNewSourceText='\n'; + pNewSourceText++; + } + + return PX_TRUE; +} + + + + +px_int PX_LexerIsSourcsEnd(px_lexer *lexer) +{ + return !lexer->Sources[lexer->SourceOffset]; +} + + +PX_LEXER_LEXEME_TYPE PX_LexerGetNextLexeme(px_lexer *lexer) +{ + px_char *chrst,*chred; + px_uint i,oft; + px_bool match; + PX_StringClear(&lexer->CurLexeme); + lexer->Symbol=0; + if (lexer->Sources[lexer->SourceOffset]=='\0') + { + //printf("\n"); + lexer->Symbol='0'; + PX_StringCatChar(&lexer->CurLexeme,'\0'); + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_END; + return PX_LEXER_LEXEME_TYPE_END; + } + if ((chrst=PX_LexerIsContainerStart(lexer,(&lexer->Sources[lexer->SourceOffset])))!=0) + { + PX_StringCat(&lexer->CurLexeme,chrst); + lexer->SourceOffset+=PX_strlen(chrst); + while (!(chred=PX_LexerIsContainerEnd(lexer,chrst,&lexer->Sources[lexer->SourceOffset]))) + { + if (PX_LexerIsSourcsEnd(lexer)) + { + return PX_LEXER_LEXEME_TYPE_ERR; + } + if(PX_LexerIsContainerTransfer(lexer,chrst,lexer->Sources[lexer->SourceOffset])&&PX_memequ(&lexer->Sources[lexer->SourceOffset+1],chrst,PX_strlen(chrst))) + { + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + } + else + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + } + PX_StringCat(&lexer->CurLexeme,chred); + lexer->SourceOffset+=PX_strlen(chred); + + //printf(" %s\n",lexer->CurLexeme); + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_CONATINER; + return PX_LEXER_LEXEME_TYPE_CONATINER; + } + + if (PX_LexerIsSpacer(lexer,lexer->Sources[lexer->SourceOffset])) + { + lexer->Symbol=lexer->Sources[lexer->SourceOffset]; + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset]); + lexer->SourceOffset++; + //printf("\n"); + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_SPACER; + return PX_LEXER_LEXEME_TYPE_SPACER; + } + + if (PX_LexerIsNewLine(lexer->Sources[lexer->SourceOffset])) + { + lexer->Symbol=lexer->Sources[lexer->SourceOffset]; + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset]); + lexer->SourceOffset++; + //printf("\n"); + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_NEWLINE; + return PX_LEXER_LEXEME_TYPE_NEWLINE; + } + + + if (PX_LexerIsDelimiter(lexer,lexer->Sources[lexer->SourceOffset])) + { + lexer->Symbol=lexer->Sources[lexer->SourceOffset]; + for (i=0;(px_int)iDelimiterCount;i++) + { + if (lexer->Symbol==lexer->Delimiter[i]) + { + lexer->CurrentDelimiterType=i; + break; + } + } + + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset]); + //printf(" %c\n",lexer->Sources[lexer->SourceOffset]); + lexer->SourceOffset++; + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_DELIMITER; + return PX_LEXER_LEXEME_TYPE_DELIMITER; + } + PX_StringClear(&lexer->CurLexeme); + lexer->Symbol='\0'; + while (!PX_LexerIsSourcsEnd(lexer)&&!PX_LexerIsDelimiter(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsSpacer(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsNewLine(lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsContainerStart(lexer,&lexer->Sources[lexer->SourceOffset])) + { + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + oft=lexer->SourceOffset; + + if (lexer->NumericMath&&lexer->Sources[lexer->SourceOffset]=='.'&&PX_LexerIsDelimiter(lexer,'.')) + { + match=PX_TRUE; + if (PX_StringIsNumeric(&lexer->CurLexeme)&&lexer->Sources[lexer->SourceOffset]=='.') + { + lexer->SourceOffset++; + while (!PX_LexerIsSourcsEnd(lexer)&&!PX_LexerIsDelimiter(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsSpacer(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsNewLine(lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsContainerStart(lexer,&lexer->Sources[lexer->SourceOffset])) + { + if(lexer->Sources[lexer->SourceOffset]>='0'&&lexer->Sources[lexer->SourceOffset]<='9') + { + lexer->SourceOffset++; + continue; + } + else + { + match=PX_FALSE; + break; + } + } + } + else + match=PX_FALSE; + + if (lexer->SourceOffset==oft+1) + { + match=PX_FALSE; + } + + lexer->SourceOffset=oft; + if (match) + { + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + while (!PX_LexerIsSourcsEnd(lexer)&&!PX_LexerIsDelimiter(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsSpacer(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsNewLine(lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsContainerStart(lexer,&lexer->Sources[lexer->SourceOffset])) + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + } + } + + } + //printf(" %s\n",m_CurLexeme); + if (lexer->lexemeTokenCase==PX_LEXER_LEXEME_CASE_UPPER) + { + PX_strupr(lexer->CurLexeme.buffer); + } + + if (lexer->lexemeTokenCase==PX_LEXER_LEXEME_CASE_LOWER) + { + PX_strlwr(lexer->CurLexeme.buffer); + } + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_TOKEN; + return PX_LEXER_LEXEME_TYPE_TOKEN; +} + +px_bool PX_LexerReadString(px_lexer *lexer,px_string *str,px_uint size) +{ + PX_StringClear(str); + while (size) + { + if (PX_LexerIsSourcsEnd(lexer)) + { + return PX_FALSE; + } + PX_StringCatChar(str,lexer->Sources[lexer->SourceOffset++]); + size--; + } + return PX_TRUE; +} + +px_void PX_LexerGetIncludedString(px_lexer *lexer,px_string *str) +{ + px_int left,right; + if(str!=&lexer->CurLexeme) + PX_StringCopy(str,&lexer->CurLexeme); + + if (lexer->CurrentLexemeFlag==PX_LEXER_LEXEME_TYPE_CONATINER) + { + left=PX_strlen(lexer->Container[lexer->CurrentContainerType].ContainerBegin); + right=PX_strlen(lexer->Container[lexer->CurrentContainerType].ContainerEnd); + PX_StringTrimRight(str,right); + PX_StringTrimLeft(str,left); + } +} + + +PX_LEXER_LEXEME_TYPE PX_LexerGetCurrentLexeme(px_lexer *lexer) +{ + return lexer->CurrentLexemeFlag; +} + +px_void PX_LexerRegisterComment(px_lexer *lexer,const px_char Begin[],const px_char End[] ) +{ + px_int i; + if (lexer->CommentCountCommentCount;i++) + { + if (lexer->Comment[i].CommentBegin==Begin&&lexer->Comment[i].CommentEnd==End) + { + return; + } + } + PX_strcpy(lexer->Comment[lexer->CommentCount].CommentBegin,Begin,sizeof(lexer->Comment[lexer->CommentCount].CommentBegin)); + PX_strcpy(lexer->Comment[lexer->CommentCount].CommentEnd,End,sizeof(lexer->Comment[lexer->CommentCount].CommentEnd)); + lexer->CommentCount++; + } +} + + +px_int PX_LexerLoadSourceFromMemory(px_lexer *lexer,const px_char *buffer) +{ + return PX_LexerSortText(lexer,buffer); +} + + +px_void PX_LexerFree(px_lexer *lexer) +{ + if(lexer->Sources) + MP_Free(lexer->mp,lexer->Sources); + + + PX_StringFree(&lexer->CurLexeme); + lexer->Sources=PX_NULL; +} + +px_void PX_LexerGetLexemeString(px_lexer *lexer,px_string *str) +{ + PX_StringCopy(str,&lexer->CurLexeme); +} + +px_char PX_LexerGetSymbol(px_lexer *lexer) +{ + return lexer->Symbol; +} + +PX_LEXER_STATE PX_LexerGetState(px_lexer *lexer) +{ + PX_LEXER_STATE state; + state.lexer=lexer; + state.offset=lexer->SourceOffset; + return state; +} + +px_void PX_LexerSetState(PX_LEXER_STATE state) +{ + state.lexer->SourceOffset=state.offset; +} + +px_char PX_LexerGetNextChar(px_lexer *lexer) +{ + char ch; + PX_StringClear(&lexer->CurLexeme); + ch=lexer->Sources[lexer->SourceOffset]; + lexer->SourceOffset++; + return ch; +} + +px_bool PX_LexerIsLememeIsNumeric(px_lexer *lexer) +{ + return PX_StringIsNumeric(&lexer->CurLexeme); +} + +px_void PX_LexerSetTokenCase(px_lexer *lexer,PX_LEXER_LEXEME_CASE _case) +{ + lexer->lexemeTokenCase=_case; +} + +px_bool PX_LexerSetSourcePointer(px_lexer *lexer,const px_char *buffer) +{ + lexer->Sources=(px_char *)buffer; + return PX_TRUE; +} + +px_int PX_LexerGetCurrentContainerType(px_lexer *lexer) +{ + return lexer->CurrentContainerType; +} + +px_int PX_LexerGetCurrentDelimiterType(px_lexer *lexer) +{ + return lexer->CurrentDelimiterType; +} + +px_void PX_LexerSetNumericMatch(px_lexer *lexer,px_bool b) +{ + lexer->NumericMath=b; +} + +px_bool PX_LexerIsContainerTransfer(px_lexer *lexer,const px_char startch[],px_char ch) +{ + px_int i=0; + for (i=0;iContainerCount;i++) + { + if(PX_memequ(startch,lexer->Container[i].ContainerBegin,PX_strlen(startch))&&lexer->Container[i].transfer&&lexer->Container[i].transfer==ch) + { + return PX_TRUE; + } + } + return PX_FALSE; +} + diff --git a/UI/PainterEngine/kernel/PX_Lexer.h b/UI/PainterEngine/kernel/PX_Lexer.h new file mode 100644 index 0000000..5efef8a --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Lexer.h @@ -0,0 +1,116 @@ +#ifndef __PX_LEXER_H +#define __PX_LEXER_H +#include "../core/PX_Core.h" + +#define PX_LEXER_CA_COMMENT_MAX_COUNT 32 +#define PX_LEXER_CA_SPACER_MAX_COUNT 32 +#define PX_LEXER_CA_DELIMITER_MAX_COUNT 32 +#define PX_LEXER_CA_CONTAINER_MAX_COUNT 32 + +typedef enum __PX_LEXER_SORT_STATUS +{ + PX_LEXERSORT_STATUS_NORMAL= 0, + PX_LEXER_SORT_STATUS_SPACER= 1, + PX_LEXER_SORT_STATUS_COMMENT= 2, + PX_LEXER_SORT_STATUS_NEWLINE= 3, +}PX_LEXER_SORT_STATUS; + +typedef enum __PX_LEXER_LEXEME_CASE +{ + PX_LEXER_LEXEME_CASE_NORMAL, + PX_LEXER_LEXEME_CASE_LOWER, + PX_LEXER_LEXEME_CASE_UPPER, + +}PX_LEXER_LEXEME_CASE; + + +typedef struct PX_LEXER_CA_Container +{ + px_char ContainerBegin[8]; + px_char ContainerEnd[8]; + px_char transfer; +}PX_LEXER_CA_Container; + + +typedef struct PX_LEXER_CA_COMMENT +{ + px_char CommentBegin[8]; + px_char CommentEnd[8]; +}PX_LEXER_CA_Comment; + + +typedef enum __PX_LEXER_LEXEME_TYPE +{ + PX_LEXER_LEXEME_TYPE_END =0, + PX_LEXER_LEXEME_TYPE_SPACER =1, + PX_LEXER_LEXEME_TYPE_DELIMITER =2, + PX_LEXER_LEXEME_TYPE_CONATINER =3, + PX_LEXER_LEXEME_TYPE_NEWLINE =4, + PX_LEXER_LEXEME_TYPE_TOKEN =5, + PX_LEXER_LEXEME_TYPE_ERR = -1, +}PX_LEXER_LEXEME_TYPE; + +typedef struct __Pt_Lexer +{ + px_int ContainerCount; + px_int DelimiterCount; + px_int CommentCount; + px_char *Sources; + px_char SortComment; + px_ulong SourceOffset; + px_int SpacerCount; + px_char Symbol; + px_bool NumericMath; + px_uint CurrentDelimiterType; + px_uint CurrentContainerType; + px_uint CurrentCommentType; + + PX_LEXER_LEXEME_TYPE CurrentLexemeFlag; + PX_LEXER_SORT_STATUS SortStatus; + PX_LEXER_LEXEME_CASE lexemeTokenCase; + + px_string CurLexeme; + px_memorypool *mp; + + PX_LEXER_CA_Comment Comment[PX_LEXER_CA_COMMENT_MAX_COUNT]; + PX_LEXER_CA_Container Container[PX_LEXER_CA_CONTAINER_MAX_COUNT]; + px_char Spacer[PX_LEXER_CA_SPACER_MAX_COUNT]; + px_char Delimiter[PX_LEXER_CA_DELIMITER_MAX_COUNT]; + +}px_lexer; + +typedef struct __PX_LEXER_START +{ + px_int offset; + px_lexer *lexer; +}PX_LEXER_STATE; + +px_void PX_LexerInit(px_lexer *lexer,px_memorypool *mp); +px_void PX_LexerRegisterComment(px_lexer *lexer,const px_char Begin[],const px_char End[]); +px_int PX_LexerRegisterContainer(px_lexer *lexer,const px_char Begin[],const px_char End[]); +px_void PX_LexerRegisterContainerTransfer(px_lexer *lexer,px_uint containerIndex,px_char transfer); + +px_void PX_LexerRegisterSpacer(px_lexer *lexer,px_char Spacer); +px_int PX_LexerRegisterDelimiter(px_lexer *lexer,px_char Delimiter); +px_int PX_LexerGetDelimiterType(px_lexer *lexer,px_char Delimiter); +px_int PX_LexerGetContainerType(px_lexer *lexer,px_char *pContainerText); +px_int PX_LexerGetCurrentContainerType(px_lexer *lexer); +px_int PX_LexerGetCurrentDelimiterType(px_lexer *lexer); +px_void PX_LexerFree(px_lexer *lexer); +px_bool PX_LexerSortText(px_lexer *lexer,const px_char *SourceText); +px_bool PX_LexerLoadSourceFromMemory(px_lexer *lexer,const px_char *buffer); +px_bool PX_LexerSetSourcePointer(px_lexer *lexer,const px_char *buffer); +px_bool PX_LexerReadString(px_lexer *lexer,px_string *str,px_uint size); +px_char PX_LexerGetSymbol(px_lexer *lexer); +px_void PX_LexerGetLexemeString(px_lexer *lexer,px_string *str); +px_void PX_LexerGetIncludedString(px_lexer *lexer,px_string *str); +px_void PX_LexerSetTokenCase(px_lexer *lexer,PX_LEXER_LEXEME_CASE _case); +px_void PX_LexerSetNumericMatch(px_lexer *lexer,px_bool b); + +PX_LEXER_STATE PX_LexerGetState(px_lexer *lexer); +px_void PX_LexerSetState(PX_LEXER_STATE state); +px_bool PX_LexerIsLememeIsNumeric(px_lexer *lexer); +px_char PX_LexerGetNextChar(px_lexer *lexer); +PX_LEXER_LEXEME_TYPE PX_LexerGetNextLexeme(px_lexer *lexer); +PX_LEXER_LEXEME_TYPE PX_LexerGetCurrentLexeme(px_lexer *lexer); +#endif diff --git a/UI/PainterEngine/kernel/PX_LiveFramework.c b/UI/PainterEngine/kernel/PX_LiveFramework.c new file mode 100644 index 0000000..5678855 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_LiveFramework.c @@ -0,0 +1,2733 @@ +#include "PX_LiveFramework.h" + +typedef struct +{ + px_point position; + px_point normal; + px_float u,v; +}PX_LiveRenderVertex; +static px_void PX_LiveFramework_RenderListPixelShaderFaster(px_surface *psurface,px_int x,px_int y,px_float z,px_float u,px_float v,px_point normal,px_texture *pTexture,PX_TEXTURERENDER_BLEND *blend) +{ + //texture mapping + + px_int resWidth; + px_int resHeight; + + if (u<0||u>1||v<0||v>1) + { + return; + } + + if (pTexture) + { + resWidth=pTexture->width; + resHeight=pTexture->height; + + PX_SurfaceDrawPixel(psurface,x,y,PX_SURFACECOLOR(pTexture,(px_int)(u*resWidth),(px_int)(v*resHeight))); + } +} +static px_void PX_LiveFramework_RenderListPixelShader(px_surface *psurface,px_int x,px_int y,px_float z,px_float u,px_float v,px_point normal,px_texture *pTexture,PX_TEXTURERENDER_BLEND *blend) +{ + //texture mapping + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_color sampleColor; + px_int resWidth; + px_int resHeight; + + if (u<0||u>1||v<0||v>1) + { + return; + } + + + if (pTexture) + { + resWidth=pTexture->width; + resHeight=pTexture->height; + u=PX_ABS(u); + v=PX_ABS(v); + u-=(px_int)u; + v-=(px_int)v; + + mapX=u*resWidth; + mapY=v*resHeight; + + if (mapX<-0.5||mapX>resWidth+0.5) + { + return; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + return; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)alpha; + mixr*=blend->hdr_R; + mixg*=blend->hdr_G; + mixb*=blend->hdr_B; + } + + mixa>255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + + PX_SurfaceDrawPixel(psurface,x,y,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + + } +} +static px_void PX_LiveFramework_RenderListRasterization(px_surface *psurface,PX_LiveFramework *pLiveFramework,PX_LiveRenderVertex p0,PX_LiveRenderVertex p1,PX_LiveRenderVertex p2,px_texture *ptexture,PX_TEXTURERENDER_BLEND *blend) +{ + px_int ix,iy; + px_bool k01infinite=PX_FALSE; + px_bool k02infinite=PX_FALSE; + px_bool k12infinite=PX_FALSE; + px_float k01,b01,k02,b02,k12,b12; + px_float x0; + px_float y0; + px_float z0; + px_float s0; + px_float t0; + + px_float x1; + px_float y1; + px_float z1; + px_float s1; + px_float t1; + + px_float x2; + px_float y2; + px_float z2; + px_float s2; + px_float t2; + + + px_float y,xleft, xright; + px_float oneoverz_left, oneoverz_right; + px_float oneoverz_top, oneoverz_bottom; + px_float oneoverz, oneoverz_step; + px_float soverz_top, soverz_bottom; + px_float toverz_top, toverz_bottom; + px_float soverz_left, soverz_right; + px_float toverz_left, toverz_right; + px_float soverz, soverz_step; + px_float toverz, toverz_step; + px_float s, t; + px_float btmy,midy; + px_float originalZ; + + px_float a,b,c; + px_point position; + a=(px_float)PX_sqrtd((p1.position.x-p2.position.x)*(p1.position.x-p2.position.x)); + b=(px_float)PX_sqrtd((p0.position.x-p2.position.x)*(p0.position.x-p2.position.x)); + c=(px_float)PX_sqrtd((p1.position.x-p0.position.x)*(p1.position.x-p0.position.x)); + + position.x=(a*p0.position.x+b*p1.position.x+c*p2.position.x)/(a+b+c); + position.y=(a*p0.position.y+b*p1.position.y+c*p2.position.y)/(a+b+c); + + // p0 + // p1 p2 + + if (p1.position.ybtmy) + { + midy=p1.position.y; + btmy=p2.position.y; + } + + + + do + { + px_float x01m; + + x0=p0.position.x; + y0=p0.position.y; + x1=p1.position.x; + y1=p1.position.y; + x2=p2.position.x; + y2=p2.position.y; + + + if (x0==x1) + { + x01m=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + x01m=(y2-b01)/k01; + } + + if (x01m>x2) + { + PX_LiveRenderVertex t; + t=p2; + p2=p1; + p1=t; + } + } while (0); + + + + x0=p0.position.x; + y0=p0.position.y; + z0=p0.position.z; + s0=p0.u; + t0=p0.v; + + x1=p1.position.x; + y1=p1.position.y; + z1=p1.position.z; + s1=p1.u; + t1=p1.v; + + x2=p2.position.x; + y2=p2.position.y; + z2=p2.position.z; + s2=p2.u; + t2=p2.v; + + k01infinite=PX_FALSE; + k02infinite=PX_FALSE; + k12infinite=PX_FALSE; + if (x0==x1) + { + k01infinite=PX_TRUE; + k01 = 1; + b01=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + } + + if (x0==x2) + { + k02infinite=PX_TRUE; + k02 = 1; + b02=x0; + } + else + { + k02=(y0-y2)/(x0-x2); + b02=y0-k02*x0; + } + + if (x1==x2) + { + k12infinite=PX_TRUE; + b12=x0; + } + else + { + k12=(y1-y2)/(x1-x2); + b12=y1-k12*x1; + } + + + for(y = (px_int)(y0+0.5f)+0.5f; y <=midy; y++) + { + if (k01infinite) + { + xleft=b01; + } + else + { + xleft = (y-b01)/k01; + } + + if (k02infinite) + { + xright=b02; + } + else + { + xright = (y-b02)/k02; + } + + + oneoverz_top = 1.0f / z0; + oneoverz_bottom = 1.0f/z1; + oneoverz_left = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y1-y0) + oneoverz_top; + oneoverz_bottom = 1.0f / z2; + oneoverz_right = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y2-y0) + oneoverz_top; + oneoverz_step = (oneoverz_right-oneoverz_left) / (xright-xleft); + soverz_top = s0 / z0; + soverz_bottom = s1 / z1; + soverz_left = (y-y0) * (soverz_bottom-soverz_top) / (y1-y0) + soverz_top; + soverz_bottom = s2 / z2; + soverz_right = (y-y0) * (soverz_bottom-soverz_top) / (y2-y0) + soverz_top; + soverz_step = (soverz_right-soverz_left) / (xright-xleft); + toverz_top = t0 / z0; + toverz_bottom = t1 / z1; + toverz_left = (y-y0) * (toverz_bottom-toverz_top) / (y1-y0) + toverz_top; + toverz_bottom = t2 / z2; + toverz_right = (y-y0) * (toverz_bottom-toverz_top) / (y2-y0) + toverz_top; + toverz_step = (toverz_right-toverz_left) / (xright-xleft); + oneoverz = oneoverz_left,soverz = soverz_left, toverz = toverz_left; + + for(ix = (px_int)(xleft+0.5);ix < (px_int)(xright+0.5f); ++ix) + { + s = soverz / oneoverz; + t = toverz / oneoverz; + originalZ=1.0f/oneoverz; + + iy=(px_int)y; + if (pLiveFramework->pixelShader) + { + position.z=originalZ; + pLiveFramework->pixelShader(psurface,ix,iy,position,s,t,p0.normal,ptexture,blend); + } + else + { + PX_LiveFramework_RenderListPixelShader(psurface,ix,iy,originalZ,s,t,p0.normal,ptexture,blend); + } + + + oneoverz += oneoverz_step; + soverz += soverz_step; + toverz += toverz_step; + } + } + + // p1 p2 + // p0 + if (p1.position.y>p0.position.y) + { + PX_LiveRenderVertex t; + t=p1; + p1=p0; + p0=t; + } + + if (p2.position.y>p0.position.y) + { + PX_LiveRenderVertex t; + t=p2; + p2=p0; + p0=t; + } + + btmy=p1.position.y; + midy=p2.position.y; + if (p2.position.yx2) + { + PX_LiveRenderVertex t; + t=p2; + p2=p1; + p1=t; + } + } while (0); + + + + x0=p0.position.x; + y0=p0.position.y; + z0=p0.position.z; + s0=p0.u; + t0=p0.v; + + x1=p1.position.x; + y1=p1.position.y; + z1=p1.position.z; + s1=p1.u; + t1=p1.v; + + x2=p2.position.x; + y2=p2.position.y; + z2=p2.position.z; + s2=p2.u; + t2=p2.v; + + k01infinite=PX_FALSE; + k02infinite=PX_FALSE; + k12infinite=PX_FALSE; + if (x0==x1) + { + k01infinite=PX_TRUE; + b01=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + } + + if (x0==x2) + { + k02infinite=PX_TRUE; + b02=x0; + } + else + { + k02=(y0-y2)/(x0-x2); + b02=y0-k02*x0; + } + + if (x1==x2) + { + k12infinite=PX_TRUE; + b12=x0; + } + else + { + k12=(y1-y2)/(x1-x2); + b12=y1-k12*x1; + } + + + for(y = (px_int)(midy+0.5f)+0.5f; y < y0; y++) + { + if (k01infinite) + { + xleft=b01; + } + else + { + xleft = (y-b01)/k01; + } + + if (k02infinite) + { + xright=b02; + } + else + { + xright = (y-b02)/k02; + } + + + oneoverz_top = 1.0f / z0; + oneoverz_bottom = 1.0f/z1; + oneoverz_left = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y1-y0) + oneoverz_top; + oneoverz_bottom = 1.0f / z2; + oneoverz_right = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y2-y0) + oneoverz_top; + oneoverz_step = (oneoverz_right-oneoverz_left) / (xright-xleft); + soverz_top = s0 / z0; + soverz_bottom = s1 / z1; + soverz_left = (y-y0) * (soverz_bottom-soverz_top) / (y1-y0) + soverz_top; + soverz_bottom = s2 / z2; + soverz_right = (y-y0) * (soverz_bottom-soverz_top) / (y2-y0) + soverz_top; + soverz_step = (soverz_right-soverz_left) / (xright-xleft); + toverz_top = t0 / z0; + toverz_bottom = t1 / z1; + toverz_left = (y-y0) * (toverz_bottom-toverz_top) / (y1-y0) + toverz_top; + toverz_bottom = t2 / z2; + toverz_right = (y-y0) * (toverz_bottom-toverz_top) / (y2-y0) + toverz_top; + toverz_step = (toverz_right-toverz_left) / (xright-xleft); + oneoverz = oneoverz_left,soverz = soverz_left, toverz = toverz_left; + + for(ix = (px_int)(xleft+0.5);ix < (px_int)(xright+0.5f); ++ix) + { + s = soverz / oneoverz; + t = toverz / oneoverz; + originalZ=1.0f/oneoverz; + iy=(px_int)y; + if (pLiveFramework->pixelShader) + { + position.z=originalZ; + pLiveFramework->pixelShader(psurface,ix,iy,position,s,t,p0.normal,ptexture,blend); + } + else + { + PX_LiveFramework_RenderListPixelShader(psurface,ix,iy,originalZ,s,t,p0.normal,ptexture,blend); + } + oneoverz += oneoverz_step; + soverz += soverz_step; + toverz += toverz_step; + } + } + +} + +px_bool PX_LiveFrameworkInitialize(px_memorypool *mp,PX_LiveFramework *plive,px_int width,px_int height) +{ + PX_memset(plive,0,sizeof(PX_LiveFramework)); + plive->mp=mp; + if(!PX_VectorInitialize(mp,&plive->layers,sizeof(PX_LiveLayer),1))return PX_FALSE; + if(!PX_VectorInitialize(mp,&plive->livetextures,sizeof(PX_LiveTexture),1))return PX_FALSE; + if(!PX_VectorInitialize(mp,&plive->liveAnimations,sizeof(PX_LiveAnimation),1))return PX_FALSE; + plive->width=width; + plive->height=height; + plive->showFocusLayer=PX_TRUE; + plive->currentEditAnimationIndex=-1; + plive->currentEditFrameIndex=-1; + plive->currentEditVertexIndex=-1; + plive->currentEditLayerIndex=-1; + return PX_TRUE; +} + +px_void PX_LiveFrameworkPlay(PX_LiveFramework *plive) +{ + plive->status=PX_LIVEFRAMEWORK_STATUS_PLAYING; +} + +px_void PX_LiveFrameworkPause(PX_LiveFramework *plive) +{ + plive->status=PX_LIVEFRAMEWORK_STATUS_STOP; +} + +px_void PX_LiveFrameworkReset(PX_LiveFramework *plive) +{ + px_int i; + plive->reg_duration=0; + plive->reg_ip=0; + plive->reg_elapsed=0; + plive->reg_bp=-1; + plive->status=PX_LIVEFRAMEWORK_STATUS_STOP; + + for (i=0;ilayers.size;i++) + { + px_int j; + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + pLayer->rel_beginRotationAngle=0; + pLayer->rel_currentRotationAngle=0; + pLayer->rel_endRotationAngle=0; + + pLayer->rel_beginTranslation=PX_POINT(0,0,0); + pLayer->rel_currentTranslation=PX_POINT(0,0,0); + pLayer->rel_endTranslation=PX_POINT(0,0,0); + + pLayer->rel_beginStretch=1; + pLayer->rel_currentStretch=1; + pLayer->rel_endStretch=1; + + pLayer->RenderTextureIndex=pLayer->LinkTextureIndex; + + for (j=0;jvertices.size;j++) + { + PX_LiveVertex *pVertex=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,j); + pVertex->beginTranslation=PX_POINT(0,0,0); + pVertex->currentTranslation=PX_POINT(0,0,0); + pVertex->endTranslation=PX_POINT(0,0,0); + + pVertex->currentPosition=pVertex->sourcePosition; + pVertex->velocity=PX_POINT(0,0,0); + } + } +} + +px_void PX_LiveFrameworkStop(PX_LiveFramework *plive) +{ + PX_LiveFrameworkReset(plive); +} + +static px_void PX_LiveFrameworkUpdateLayerInterpolation(PX_LiveFramework *plive,PX_LiveLayer *pLayer) +{ + px_float schedule; + px_int i; + + if (plive->status==PX_LIVEFRAMEWORK_STATUS_STOP) + { + schedule = 1; + } + else if (plive->reg_duration==0) + { + schedule=1; + } + else + { + schedule=plive->reg_elapsed*1.0f/plive->reg_duration; + } + + if (schedule>1) + { + schedule=1; + } + + //update parameters + pLayer->panc_currentx= pLayer->panc_beginx + (pLayer->panc_endx - pLayer->panc_beginx) * schedule; + pLayer->panc_currenty = pLayer->panc_beginy + (pLayer->panc_endy - pLayer->panc_beginy) * schedule; + + //point translation + for (i=0;ivertices.size;i++) + { + px_point *pbegin,*pcurrent,*pend; + pbegin=&PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,i)->beginTranslation; + pcurrent=&PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,i)->currentTranslation; + pend=&PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,i)->endTranslation; + + pcurrent->x=pbegin->x+(pend->x-pbegin->x)*schedule; + pcurrent->y=pbegin->y+(pend->y-pbegin->y)*schedule; + } + + if (pLayer->parent_index!=-1) + { + //stretch + pLayer->rel_currentStretch=pLayer->rel_beginStretch+(pLayer->rel_endStretch-pLayer->rel_beginStretch)*schedule; + } + else + { + //keypoint translation + pLayer->rel_currentTranslation.x=pLayer->rel_beginTranslation.x+(pLayer->rel_endTranslation.x-pLayer->rel_beginTranslation.x)*schedule; + pLayer->rel_currentTranslation.y=pLayer->rel_beginTranslation.y+(pLayer->rel_endTranslation.y-pLayer->rel_beginTranslation.y)*schedule; + pLayer->rel_currentTranslation.z=0; + } + + //rotation + pLayer->rel_currentRotationAngle=pLayer->rel_beginRotationAngle+(pLayer->rel_endRotationAngle-pLayer->rel_beginRotationAngle)*schedule; + + + +} + +static px_void PX_LiveFramework_UpdateLayerKeyPoint(PX_LiveFramework *pLive,PX_LiveLayer *pLayer) +{ + px_int i; + if (pLayer->parent_index!=-1) + { + //stretch + px_point v=PX_PointSub(pLayer->keyPoint,PX_LiveFrameworkGetLayerParent(pLive,pLayer)->keyPoint); + v=PX_PointMul(v,pLayer->rel_currentStretch); + v=PX_PointRotate(v,PX_LiveFrameworkGetLayerParent(pLive,pLayer)->rel_currentRotationAngle); + pLayer->currentKeyPoint=PX_PointAdd(v,PX_LiveFrameworkGetLayerParent(pLive,pLayer)->currentKeyPoint); + } + else + { + pLayer->currentKeyPoint=PX_PointAdd(pLayer->keyPoint,pLayer->rel_currentTranslation); + } + pLayer->currentKeyPoint.z=pLayer->keyPoint.z; + + for (i=0;ichild_index);i++) + { + if (pLayer->child_index[i]!=-1) + { + PX_LiveFramework_UpdateLayerKeyPoint(pLive,PX_LiveFrameworkGetLayerChild(pLive,pLayer,pLayer->child_index[i])); + } + else + { + break; + } + } +} + +static px_void PX_LiveFramework_UpdateLayerVertices(PX_LiveFramework *pLive,PX_LiveLayer *pLayer,px_dword elapsed) +{ + px_int i; + px_point2D keyDirection; + px_int k; + + + PX_LiveFrameworkUpdateLayerRenderVerticesUV(pLive,pLayer); + + if (pLayer->child_index[0]==-1) + { + keyDirection=PX_POINT2D(0,1); + } + else + { + keyDirection=PX_POINT2D(0,0); + for (i=0;ichild_index);i++) + { + px_point v; + if (pLayer->child_index[i]==-1) + { + break; + } + + v=PX_PointNormalization(PX_PointSub(pLayer->currentKeyPoint,PX_LiveFrameworkGetLayerChild(pLive,pLayer,pLayer->child_index[i])->currentKeyPoint)); + keyDirection=PX_Point2DAdd(keyDirection,PX_POINT2D(v.x,v.y)); + } + keyDirection=PX_Point2DNormalization(keyDirection); + } + + //for each vertex + for (i=0;ivertices.size;i++) + { + PX_LiveVertex *plv=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,i); + px_point resultPosition; + + //get relative position + resultPosition.x=plv->sourcePosition.x-pLayer->keyPoint.x; + resultPosition.y=plv->sourcePosition.y-pLayer->keyPoint.y; + resultPosition.z=plv->sourcePosition.z-pLayer->keyPoint.z; + //panc translation + if (pLayer->panc_currentx!=pLayer->panc_sx|| pLayer->panc_currenty != pLayer->panc_sy) + { + if (plv->sourcePosition.x>pLayer->panc_x&& plv->sourcePosition.x < pLayer->panc_x+pLayer->panc_width) + { + if (plv->sourcePosition.x < pLayer->panc_sx) + { + px_float disx = plv->sourcePosition.x - pLayer->panc_x; + resultPosition.x += disx * (pLayer->panc_currentx-pLayer->panc_x) /(pLayer->panc_sx- pLayer->panc_x) - disx; + } + else + { + px_float disx = (pLayer->panc_x+pLayer->panc_width)- plv->sourcePosition.x; + resultPosition.x -= disx * (pLayer->panc_x + pLayer->panc_width - pLayer->panc_currentx) / (pLayer->panc_x + pLayer->panc_width - pLayer->panc_sx) - disx; + } + } + + if (plv->sourcePosition.y > pLayer->panc_y && plv->sourcePosition.y < pLayer->panc_y + pLayer->panc_height) + { + if (plv->sourcePosition.y < pLayer->panc_sy) + { + px_float disy = plv->sourcePosition.y - pLayer->panc_y; + resultPosition.y += disy * (pLayer->panc_currenty - pLayer->panc_y) / (pLayer->panc_sy - pLayer->panc_y) - disy; + } + else + { + px_float disy = (pLayer->panc_y + pLayer->panc_height) - plv->sourcePosition.y; + resultPosition.y -= disy * (pLayer->panc_y + pLayer->panc_height - pLayer->panc_currenty) / (pLayer->panc_y + pLayer->panc_height - pLayer->panc_sy) - disy; + } + } + + + } + + + //relative translation + resultPosition.x+=plv->currentTranslation.x; + resultPosition.y+=plv->currentTranslation.y; + resultPosition.z+=plv->currentTranslation.z; + + //stretch + do + { + px_int j; + for (j=0;jchild_index);j++) + { + PX_LiveLayer *pChild=PX_LiveFrameworkGetLayerChild(pLive,pLayer,pLayer->child_index[j]); + if(!pChild) + break; + + + if (pChild->rel_currentStretch!=1) + { + px_float cos_v12; + px_point v1,v2,u1; + v1=PX_PointSub(pChild->keyPoint,pLayer->keyPoint); + v2=resultPosition; + cos_v12=PX_PointDot(v1,v2)/PX_PointMod(v1)/PX_PointMod(v2); + if (cos_v12>0) + { + px_float distance; + u1=PX_PointNormalization(v1); + distance=cos_v12*PX_PointMod(v2); + resultPosition=PX_PointAdd(resultPosition,PX_PointMul(u1,distance*(pChild->rel_currentStretch-1))); + } + } + } + } while (0); + + + //Rotation + resultPosition=PX_PointRotate(resultPosition,pLayer->rel_currentRotationAngle); + + //absolute translation + resultPosition.x+=pLayer->currentKeyPoint.x; + resultPosition.y+=pLayer->currentKeyPoint.y; + + + //elastic + k=plv->k; + + if (k==0) + { + plv->currentPosition=resultPosition; + } + else + { + px_point2D direction,direction_normal; + px_float distance; + px_dword updateelapsed=elapsed+elapsed/2; + px_dword atomelapsed; + + while (updateelapsed) + { + if (updateelapsed>50) + { + atomelapsed=50; + updateelapsed-=50; + } + else + { + atomelapsed=updateelapsed; + updateelapsed=0; + } + direction.x=resultPosition.x-plv->currentPosition.x; + direction.y=resultPosition.y-plv->currentPosition.y; + + direction_normal=PX_Point2DNormalization(direction); + distance=PX_Point2DMod(direction); + + + if (distance>k) + { + plv->currentPosition.x=resultPosition.x-direction_normal.x*(k); + plv->currentPosition.y=resultPosition.y-direction_normal.y*(k); + distance=k*1.0f; + } + + + do + { + px_point2D incv=PX_Point2DMul(direction_normal,distance*distance); + px_point2D velocity; + px_point velocity_vx,velocity_vy; + px_float _cos,length; + incv.x+=pLayer->rel_impulse.x; + incv.y+=pLayer->rel_impulse.y; + incv=PX_Point2DMul(incv,atomelapsed/1000.f); + velocity=PX_Point2DAdd(PX_POINT2D(plv->velocity.x,plv->velocity.y),incv); + if (velocity.x||velocity.y) + { + //resistance + _cos=PX_Point2DDot(velocity,keyDirection)/PX_Point2DMod(velocity)/PX_Point2DMod(keyDirection); + length=_cos*PX_Point2DMod(velocity); + velocity_vx.x=length*keyDirection.x; + velocity_vx.y=length*keyDirection.y; + velocity_vx.z=0; + + velocity_vy.x=velocity.x-velocity_vx.x; + velocity_vy.y=velocity.y-velocity_vx.y; + velocity_vy.z=0; + + + velocity_vx=PX_PointMul(velocity_vx,1.0f-atomelapsed/(k*10.f+50)); + velocity_vy=PX_PointMul(velocity_vy,1.0f-atomelapsed/(k*30.f+50)); + + if (velocity_vx.x>10000||velocity_vx.y>10000||velocity_vy.x>10000||velocity_vy.y>10000) + { + PX_ASSERT(); + } + + plv->velocity=PX_PointAdd(velocity_vx,velocity_vy); + } + plv->currentPosition=PX_PointAdd(plv->currentPosition,PX_PointMul(plv->velocity,atomelapsed/1000.f)); + + }while(0); + } + + } + + } +} + +static px_void PX_LiveFrameworkUpdatePhysical(PX_LiveFramework *plive,px_dword elapsed) +{ + px_int i; + + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + PX_LiveFrameworkUpdateLayerInterpolation(plive,pLayer); + } + + //LayerUpdate + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + if (pLayer->parent_index==-1) + { + PX_LiveFramework_UpdateLayerKeyPoint(plive,pLayer); + } + } + + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + PX_LiveFramework_UpdateLayerVertices(plive,pLayer,elapsed); + } +} + +static px_bool PX_LiveFrameworkExecuteInstr(PX_LiveFramework *plive,px_int animation_index,px_int frameindex) +{ + //execute instr + px_int frame_offset=0,frame_size=0; + px_int layerindex=0; + PX_LiveAnimation *pAnimation; + px_byte *pFrameInstrData; + PX_LiveAnimationFrameHeader *pFrameHeader; + if (animation_index<0||animation_index>=plive->liveAnimations.size) + { + goto _ERROR; + } + pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,animation_index); + if (frameindex<0) + { + goto _ERROR; + } + if (frameindex >= pAnimation->framesMemPtr.size) + { + goto _ERROR; + } + pFrameInstrData=*PX_VECTORAT(px_byte *,&pAnimation->framesMemPtr,frameindex); + pFrameHeader=(PX_LiveAnimationFrameHeader *)pFrameInstrData; + frame_size=pFrameHeader->size+sizeof(PX_LiveAnimationFrameHeader); + ////////////////////////////////////////////////////////////////////////// + //time stamp update + plive->reg_duration=pFrameHeader->duration_ms; + frame_offset+=sizeof(PX_LiveAnimationFrameHeader); + ////////////////////////////////////////////////////////////////////////// + //payload + ////////////////////////////////////////////////////////////////////////// + while (frame_offsetlayers,layerindex); + + ////////////////////////////////////////////////////////////////////////// + //maptexture + pLayer->RenderTextureIndex=pPayload->mapTexture; + + ////////////////////////////////////////////////////////////////////////// + //rotation register + pLayer->rel_beginRotationAngle=pLayer->rel_endRotationAngle; + pLayer->rel_currentRotationAngle=pLayer->rel_beginRotationAngle; + pLayer->rel_endRotationAngle=pPayload->rotation; + + ////////////////////////////////////////////////////////////////////////// + //stretch register + pLayer->rel_beginStretch=pLayer->rel_endStretch; + pLayer->rel_currentStretch=pLayer->rel_beginStretch; + pLayer->rel_endStretch=pPayload->stretch; + + ////////////////////////////////////////////////////////////////////////// + //translation register + pLayer->rel_beginTranslation=pLayer->rel_endTranslation; + pLayer->rel_currentTranslation=pLayer->rel_beginTranslation; + pLayer->rel_endTranslation=pPayload->translation; + + ////////////////////////////////////////////////////////////////////////// + //impulse + pLayer->rel_impulse=pPayload->impulse; + + + ////////////////////////////////////////////////////////////////////////// + //panc + pLayer->panc_x = pPayload->panc_x; + pLayer->panc_y = pPayload->panc_y; + + pLayer->panc_width = pPayload->panc_width; + pLayer->panc_height = pPayload->panc_height; + + pLayer->panc_sx = pPayload->panc_sx; + pLayer->panc_sy = pPayload->panc_sy; + + pLayer->panc_beginx = pLayer->panc_endx; + pLayer->panc_beginy = pLayer->panc_endy; + + pLayer->panc_currentx = pLayer->panc_beginx; + pLayer->panc_currenty = pLayer->panc_beginy; + + pLayer->panc_endx = pPayload->panc_endx; + pLayer->panc_endy = pPayload->panc_endy; + + ////////////////////////////////////////////////////////////////////////// + //vertices register + if (pPayload->translationVerticesCount!=pLayer->vertices.size) + { + goto _ERROR; + } + else + { + px_int j; + px_point *pVertexTranslation=(px_point *)(pFrameInstrData+frame_offset+sizeof(PX_LiveAnimationFramePayload)); + + for (j=0;j<(px_int)pPayload->translationVerticesCount;j++) + { + PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,j)->beginTranslation=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,j)->endTranslation; + PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,j)->currentTranslation=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,j)->beginTranslation; + PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,j)->endTranslation=pVertexTranslation[j]; + } + } + frame_offset+=sizeof(PX_LiveAnimationFramePayload); + frame_offset+=sizeof(px_point)*pPayload->translationVerticesCount; + layerindex++; + } + if (layerindex!=plive->layers.size) + { + goto _ERROR; + } + return PX_TRUE; +_ERROR: + return PX_FALSE; +} + +static px_void PX_LiveFrameworkUpdateVM(PX_LiveFramework *plive,px_dword elapsed) +{ + if (plive->status==PX_LIVEFRAMEWORK_STATUS_STOP) + { + return; + } + + plive->reg_elapsed+=elapsed; + + + while (PX_TRUE) + { + + if (plive->reg_elapsed>=plive->reg_duration) + { + px_dword duration = plive->reg_duration; + if (!PX_LiveFrameworkExecuteInstr(plive, plive->reg_animation, plive->reg_ip)) + { + plive->status = PX_LIVEFRAMEWORK_STATUS_STOP; + goto _ERROR; + } + + //update time + plive->reg_elapsed -= duration; + + //update ip + plive->reg_ip++; + } + else + break; + } + return; +_ERROR: + return; +} + +static px_void PX_LiveFrameworkRenderLayer(px_surface *psurface,PX_LiveFramework *plive,PX_LiveLayer *pLayer,px_int x,px_int y,px_dword elapsed) +{ + PX_TEXTURERENDER_BLEND blend; + PX_LiveTexture *pLiveTexture; + if (!pLayer->visible) + { + return; + } + pLiveTexture=PX_LiveFrameworkGetLiveTexture(plive,pLayer->RenderTextureIndex); + if (pLiveTexture) + { + px_texture *pTexture; + pTexture=&pLiveTexture->Texture; + + if (pLayer->triangles.size&&pLayer->vertices.size) + { + px_int t; + PX_Delaunay_Triangle *pTriangleIndex; + for (t=0;ttriangles.size;t++) + { + PX_LiveRenderVertex v0,v1,v2; + PX_LiveVertex *pv0,*pv1,*pv2; + pTriangleIndex=PX_VECTORAT(PX_Delaunay_Triangle,&pLayer->triangles,t); + pv0=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,pTriangleIndex->index1); + pv1=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,pTriangleIndex->index2); + pv2=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,pTriangleIndex->index3); + v0.position.x=pv0->currentPosition.x+x; + v0.position.y=pv0->currentPosition.y+y; + v0.position.z=1; + v0.normal=pv0->normal; + v0.u=pv0->u; + v0.v=pv0->v; + + v1.position.x=pv1->currentPosition.x+x; + v1.position.y=pv1->currentPosition.y+y; + v1.position.z=1; + v1.normal=pv1->normal; + v1.u=pv1->u; + v1.v=pv1->v; + + v2.position.x=pv2->currentPosition.x+x; + v2.position.y=pv2->currentPosition.y+y; + v2.position.z=1; + v2.normal=pv2->normal; + v2.u=pv2->u; + v2.v=pv2->v; + + if (plive->currentEditLayerIndex>=0&&plive->currentEditLayerIndexlayers.size) + { + if (pLayer==PX_VECTORAT(PX_LiveLayer,&plive->layers,plive->currentEditLayerIndex)||!plive->showFocusLayer) + { + PX_LiveFramework_RenderListRasterization(psurface,plive,v0,v1,v2,pTexture,PX_NULL); + } + else + { + blend.alpha=0.2f; + blend.hdr_B=1; + blend.hdr_G=1; + blend.hdr_R=1; + PX_LiveFramework_RenderListRasterization(psurface,plive,v0,v1,v2,pTexture,&blend); + } + } + else + { + PX_LiveFramework_RenderListRasterization(psurface,plive,v0,v1,v2,pTexture,PX_NULL); + } + + } + + if (pLayer->showMesh) + { + for (t=0;ttriangles.size;t++) + { + PX_LiveRenderVertex v0,v1,v2; + PX_LiveVertex *pv0,*pv1,*pv2; + pTriangleIndex=PX_VECTORAT(PX_Delaunay_Triangle,&pLayer->triangles,t); + pv0=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,pTriangleIndex->index1); + pv1=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,pTriangleIndex->index2); + pv2=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,pTriangleIndex->index3); + v0.position.x=pv0->currentPosition.x+x; + v0.position.y=pv0->currentPosition.y+y; + v0.normal=pv0->normal; + v0.u=pv0->u; + v0.v=pv0->v; + + v1.position.x=pv1->currentPosition.x+x; + v1.position.y=pv1->currentPosition.y+y; + v1.normal=pv1->normal; + v1.u=pv1->u; + v1.v=pv1->v; + + v2.position.x=pv2->currentPosition.x+x; + v2.position.y=pv2->currentPosition.y+y; + v2.normal=pv2->normal; + v2.u=pv2->u; + v2.v=pv2->v; + + + PX_GeoDrawLine(psurface,(px_int)v0.position.x,(px_int)v0.position.y,(px_int)v1.position.x,(px_int)v1.position.y,1,PX_COLOR(128,255,0,0)); + PX_GeoDrawLine(psurface,(px_int)v0.position.x,(px_int)v0.position.y,(px_int)v2.position.x,(px_int)v2.position.y,1,PX_COLOR(128,255,0,0)); + PX_GeoDrawLine(psurface,(px_int)v1.position.x,(px_int)v1.position.y,(px_int)v2.position.x,(px_int)v2.position.y,1,PX_COLOR(128,255,0,0)); + + PX_GeoDrawSolidCircle(psurface,(px_int)v0.position.x,(px_int)v0.position.y,3,PX_COLOR(128,255,0,0)); + PX_GeoDrawSolidCircle(psurface,(px_int)v1.position.x,(px_int)v1.position.y,3,PX_COLOR(128,255,0,0)); + PX_GeoDrawSolidCircle(psurface,(px_int)v2.position.x,(px_int)v2.position.y,3,PX_COLOR(128,255,0,0)); + } + + if (plive->currentEditLayerIndex>=0&&plive->currentEditLayerIndexlayers.size) + { + if (pLayer==PX_VECTORAT(PX_LiveLayer,&plive->layers,plive->currentEditLayerIndex)) + { + if (plive->currentEditVertexIndex>=0&&plive->currentEditVertexIndexvertices.size) + { + PX_LiveVertex *pLiveVertex=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,plive->currentEditVertexIndex); + PX_GeoDrawCircle(psurface,(px_int)(pLiveVertex->currentPosition.x+x),(px_int)(pLiveVertex->currentPosition.y+y),5,1,PX_COLOR(255,255,128,0)); + } + } + } + + } + } + else + { + if (plive->currentEditLayerIndex>=0&&plive->currentEditLayerIndexlayers.size) + { + if (plive->showFocusLayer) + { + if (pLayer==PX_VECTORAT(PX_LiveLayer,&plive->layers,plive->currentEditLayerIndex)) + { + PX_TextureRender(psurface,pTexture,(px_int)(x+pLiveTexture->textureOffsetX), + (px_int)(y+pLiveTexture->textureOffsetY),PX_ALIGN_LEFTTOP,PX_NULL); + } + else + { + blend.alpha=0.2f; + blend.hdr_B=1; + blend.hdr_G=1; + blend.hdr_R=1; + PX_TextureRender(psurface,pTexture,(px_int)(x+pLiveTexture->textureOffsetX), + (px_int)(y+pLiveTexture->textureOffsetY),PX_ALIGN_LEFTTOP,&blend); + } + } + else + { + PX_TextureRender(psurface,pTexture,(px_int)(x+pLiveTexture->textureOffsetX), + (px_int)(y+pLiveTexture->textureOffsetY),PX_ALIGN_LEFTTOP,PX_NULL); + } + + } + else + { + PX_TextureRender(psurface,pTexture,(px_int)(x+pLiveTexture->textureOffsetX), + (px_int)(y+pLiveTexture->textureOffsetY),PX_ALIGN_LEFTTOP,PX_NULL); + + } + } + + } +} + +px_void PX_LiveFrameworkRender(px_surface *psurface,PX_LiveFramework *plive,px_int x,px_int y,PX_ALIGN refPoint,px_dword elapsed) +{ + PX_QuickSortAtom sAtom[PX_LIVEFRAMEWORK_MAX_SUPPORT_LAYER]; + px_int i,count; + + PX_LiveFrameworkUpdateVM(plive,elapsed); + PX_LiveFrameworkUpdatePhysical(plive,elapsed); + switch (refPoint) + { + case PX_ALIGN_LEFTTOP: + break; + case PX_ALIGN_MIDTOP: + x-=plive->width/2; + break; + case PX_ALIGN_RIGHTTOP: + x-=plive->width; + break; + case PX_ALIGN_LEFTMID: + y-=plive->height/2; + break; + case PX_ALIGN_CENTER: + y-=plive->height/2; + x-=plive->width/2; + break; + case PX_ALIGN_RIGHTMID: + y-=plive->height/2; + x-=plive->width; + break; + case PX_ALIGN_LEFTBOTTOM: + y-=plive->height; + break; + case PX_ALIGN_MIDBOTTOM: + y-=plive->height; + x-=plive->width/2; + break; + case PX_ALIGN_RIGHTBOTTOM: + y-=plive->height; + x-=plive->width; + break; + } + + + if (plive->layers.size) + { + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + sAtom[i].weight=pLayer->currentKeyPoint.z; + sAtom[i].pData=pLayer; + if (i>=PX_LIVEFRAMEWORK_MAX_SUPPORT_LAYER-1) + { + break; + } + } + count=i; + PX_Quicksort_MaxToMin(sAtom,0,count-1); + + for (i=0;ishowKeypoint&&!plive->showlinker) + { + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + if (pLayer->parent_index!=-1) + { + PX_GeoDrawSolidCircle(psurface,(px_int)(pLayer->currentKeyPoint.x+plive->refer_x),(px_int)(pLayer->currentKeyPoint.y+plive->refer_y),3,PX_COLOR(255,0,64,192)); + PX_GeoDrawCircle(psurface,(px_int)(pLayer->currentKeyPoint.x+plive->refer_x),(px_int)(pLayer->currentKeyPoint.y+plive->refer_y),5,1,PX_COLOR(255,0,64,192)); + } + else + { + PX_GeoDrawSolidCircle(psurface,(px_int)(pLayer->currentKeyPoint.x+plive->refer_x),(px_int)(pLayer->currentKeyPoint.y+plive->refer_y),3,PX_COLOR(255,255,0,0)); + PX_GeoDrawCircle(psurface,(px_int)(pLayer->currentKeyPoint.x+plive->refer_x),(px_int)(pLayer->currentKeyPoint.y+plive->refer_y),5,1,PX_COLOR(255,255,0,0)); + } + + } + } + + if (plive->showlinker) + { + for (i=0;ilayers.size;i++) + { + px_int j; + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + + if (pLayer->parent_index!=-1) + { + PX_GeoDrawSolidCircle(psurface,(px_int)(pLayer->currentKeyPoint.x+plive->refer_x),(px_int)(pLayer->currentKeyPoint.y+plive->refer_y),3,PX_COLOR(255,0,64,192)); + PX_GeoDrawCircle(psurface,(px_int)(pLayer->currentKeyPoint.x+plive->refer_x),(px_int)(pLayer->currentKeyPoint.y+plive->refer_y),5,1,PX_COLOR(255,0,64,192)); + } + else + { + PX_GeoDrawSolidCircle(psurface,(px_int)(pLayer->currentKeyPoint.x+plive->refer_x),(px_int)(pLayer->currentKeyPoint.y+plive->refer_y),3,PX_COLOR(255,255,0,0)); + PX_GeoDrawCircle(psurface,(px_int)(pLayer->currentKeyPoint.x+plive->refer_x),(px_int)(pLayer->currentKeyPoint.y+plive->refer_y),5,1,PX_COLOR(255,255,0,0)); + } + + for (j=0;jchild_index[j]); + + if (!pLinkLayer) + { + break; + } + + PX_GeoDrawArrow(psurface, + PX_POINT2D(pLayer->currentKeyPoint.x+plive->refer_x,pLayer->currentKeyPoint.y+plive->refer_y), + PX_POINT2D(pLinkLayer->currentKeyPoint.x+plive->refer_x,pLinkLayer->currentKeyPoint.y+plive->refer_y), + 1, + PX_COLOR(255,255,0,0) + ); + + } + } + } + + + if (plive->showRange) + { + PX_GeoDrawBorder(psurface,x,y,x+plive->width,y+plive->height,1,PX_COLOR(255,0,0,255)); + } + + if (plive->showRootHelperLine) + { + PX_LiveLayer *pLayer=PX_LiveFrameworkGetCurrentEditLiveLayer(plive); + if (pLayer&&pLayer->parent_index==-1) + { + PX_GeoDrawLine(psurface,(px_int)(x+pLayer->keyPoint.x),(px_int)(y+pLayer->keyPoint.y),(px_int)(x+pLayer->currentKeyPoint.x),(px_int)(y+pLayer->currentKeyPoint.y),1,PX_COLOR(255,255,0,255)); + } + } + +} + +px_void PX_LiveFrameworkRenderRefer(px_surface *psurface,PX_LiveFramework *plive,PX_ALIGN refPoint,px_dword elapsed) +{ + PX_LiveFrameworkRender(psurface,plive,(px_int)plive->refer_x,(px_int)plive->refer_y,refPoint,elapsed); +} + + + +px_bool PX_LiveFrameworkPlayAnimation(PX_LiveFramework *plive,px_int index) +{ + if (index>=0&&indexliveAnimations.size) + { + plive->currentEditFrameIndex=-1; + plive->currentEditLayerIndex=-1; + plive->currentEditVertexIndex=-1; + plive->reg_animation=index; + plive->reg_ip = 0; + plive->status=PX_LIVEFRAMEWORK_STATUS_PLAYING; + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_LiveFrameworkPlayAnimationByName(PX_LiveFramework *plive,const px_char name[]) +{ + px_int i; + for (i=0;iliveAnimations.size;i++) + { + PX_LiveAnimation *pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,i); + if (PX_strequ(name,pAnimation->id)) + { + PX_LiveFrameworkPlayAnimation(plive,i); + return PX_TRUE; + } + } + return PX_FALSE; +} + +PX_LiveLayer * PX_LiveFrameworkGetLayerById(PX_LiveFramework *plive,const px_char id[]) +{ + px_int i; + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_LiveFrameworkGetLayer(plive,i); + if (pLayer&&PX_memequ(pLayer->id,id,PX_LIVE_ID_MAX_LEN)) + { + return pLayer; + } + } + return PX_NULL; +} + +PX_LiveLayer * PX_LiveFrameworkCreateLayer(PX_LiveFramework *plive,const px_char id[PX_LIVEFRAMEWORK_MAX_SUPPORT_LAYER]) +{ + PX_LiveLayer layer; + px_int i; + + if (plive->layers.size>=PX_LIVEFRAMEWORK_MAX_SUPPORT_LAYER) + { + return PX_NULL; + } + + if (PX_LiveFrameworkGetLayerById(plive,id)) + { + return PX_NULL; + } + + + PX_memset(&layer,0,sizeof(layer)); + + if(!PX_VectorInitialize(plive->mp,&layer.triangles,sizeof(PX_Delaunay_Triangle),0))return PX_FALSE; + if(!PX_VectorInitialize(plive->mp,&layer.vertices,sizeof(PX_LiveVertex),0))return PX_FALSE; + + + layer.rotationAngle=0; + layer.visible=PX_TRUE; + layer.keyPoint.z=1; + + layer.rel_beginStretch=1; + layer.rel_currentStretch=1; + layer.rel_endStretch=1; + + layer.RenderTextureIndex = -1; + layer.LinkTextureIndex = -1; + + layer.parent_index=-1; + for (i=0;ilayers,&layer)) + return PX_FALSE; + + return PX_VECTORLAST(PX_LiveLayer,&plive->layers); + +} + +PX_LiveLayer * PX_LiveFrameworkGetLayerParent(PX_LiveFramework *plive,PX_LiveLayer *pLayer) +{ + if (pLayer->parent_index>=0&&pLayer->parent_indexlayers.size) + { + return PX_VECTORAT(PX_LiveLayer,&plive->layers,pLayer->parent_index); + } + +#ifdef PX_DEBUG_MODE + if (pLayer->parent_index!=-1) + { + //Data Crash + PX_ASSERT(); + } +#endif + + return PX_NULL; +} + +PX_LiveLayer * PX_LiveFrameworkGetLayerChild(PX_LiveFramework *plive,PX_LiveLayer *pLayer,px_int childIndex) +{ + if (childIndex>=0&&childIndexlayers.size) + { + return PX_VECTORAT(PX_LiveLayer,&plive->layers,childIndex); + } + + if (childIndex!=-1) + { + PX_ASSERT(); + } + + return PX_NULL; +} + +px_bool PX_LiveFrameworkLinkLayerTexture(PX_LiveFramework *plive,const px_char layer_id[],const px_char texture_id[]) +{ + px_int index=PX_LiveFrameworkGetLiveTextureIndexById(plive,texture_id); + PX_LiveTexture *pLiveTexture=PX_LiveFrameworkGetLiveTextureById(plive,texture_id); + PX_LiveLayer *pLayer=PX_LiveFrameworkGetLayerById(plive,layer_id); + if (pLiveTexture&&pLayer) + { + pLayer->LinkTextureIndex=index; + pLayer->RenderTextureIndex=index; + pLayer->keyPoint.x=pLiveTexture->textureOffsetX+pLiveTexture->Texture.width/2.0f; + pLayer->keyPoint.y=pLiveTexture->textureOffsetY+pLiveTexture->Texture.height/2.0f; + pLayer->rel_currentTranslation=PX_POINT(0,0,0); + return PX_TRUE; + } + return PX_FALSE; +} + +PX_LiveLayer * PX_LiveFrameworkGetLayer(PX_LiveFramework *plive,px_int i) +{ + if (i>=0&&ilayers.size) + { + return PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + } + return PX_NULL; +} + +px_int PX_LiveFrameworkGetLayerIndex(PX_LiveFramework *plive,PX_LiveLayer *pLayer) +{ + px_int i; + for (i=0;ilayers.size;i++) + { + if (pLayer==PX_VECTORAT(PX_LiveLayer,&plive->layers,i)) + { + return i; + } + } + return -1; +} + +PX_LiveLayer *PX_LiveFrameworkGetLastCreateLayer(PX_LiveFramework *plive) +{ + if (plive->layers.size) + { + return PX_VECTORLAST(PX_LiveLayer,&plive->layers); + } + return PX_NULL; +} + +px_void PX_LiveFrameworkUpdateLayerSourceVerticesUV(PX_LiveFramework *plive,PX_LiveLayer *pLayer) +{ + px_int i; + for (i=0;ivertices.size;i++) + { + PX_LiveVertex *pVertex=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,i); + + if (pLayer->LinkTextureIndex>=0&&pLayer->LinkTextureIndexlivetextures.size) + { + PX_LiveTexture *pLiveTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,pLayer->LinkTextureIndex); + pVertex->u=(pVertex->sourcePosition.x-pLiveTexture->textureOffsetX)*1.0f/pLiveTexture->Texture.width; + pVertex->v=(pVertex->sourcePosition.y-pLiveTexture->textureOffsetY)*1.0f/pLiveTexture->Texture.height; + } + } +} + +px_void PX_LiveFrameworkUpdateSourceVerticesUV(PX_LiveFramework *plive) +{ + px_int i; + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + PX_LiveFrameworkUpdateLayerSourceVerticesUV(plive,pLayer); + } +} + +px_void PX_LiveFrameworkUpdateLayerRenderVerticesUV(PX_LiveFramework *plive,PX_LiveLayer *pLayer) +{ + px_int i; + for (i=0;ivertices.size;i++) + { + PX_LiveVertex *pVertex=PX_VECTORAT(PX_LiveVertex,&pLayer->vertices,i); + + if (pLayer->RenderTextureIndex>=0&&pLayer->RenderTextureIndexlivetextures.size) + { + PX_LiveTexture *pLiveTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,pLayer->RenderTextureIndex); + pVertex->u=(pVertex->sourcePosition.x-pLiveTexture->textureOffsetX)*1.0f/pLiveTexture->Texture.width; + pVertex->v=(pVertex->sourcePosition.y-pLiveTexture->textureOffsetY)*1.0f/pLiveTexture->Texture.height; + } + } +} + +PX_LiveAnimation * PX_LiveFrameworkGetAnimationById(PX_LiveFramework *plive,const px_char id[]) +{ + px_int i; + for (i=0;iliveAnimations.size;i++) + { + PX_LiveAnimation *pAnimation=PX_LiveFrameworkGetAnimation(plive,i); + if (pAnimation&&PX_strequ(pAnimation->id,id)) + { + return pAnimation; + } + } + return PX_NULL; + +} + +PX_LiveAnimation * PX_LiveFrameworkCreateAnimation(PX_LiveFramework *plive,const px_char id[]) +{ + PX_LiveAnimation animation; + PX_memset(&animation,0,sizeof(animation)); + PX_VectorInitialize(plive->mp,&animation.framesMemPtr,sizeof(px_void *),1); + PX_strcpy(animation.id,id,sizeof(animation.id)); + if(!PX_VectorPushback(&plive->liveAnimations,&animation))return PX_NULL; + return PX_VECTORLAST(PX_LiveAnimation,&plive->liveAnimations); +} + +PX_LiveAnimation * PX_LiveFrameworkGetAnimation(PX_LiveFramework *plive,px_int index) +{ + if (index>=0&&indexliveAnimations.size) + { + return PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,index); + } + return PX_NULL; +} + +PX_LiveAnimation * PX_LiveFrameworkGetLastCreateAnimation(PX_LiveFramework *plive) +{ + if (plive->liveAnimations.size) + { + return PX_VECTORLAST(PX_LiveAnimation,&plive->liveAnimations); + } + return PX_NULL; +} + +px_bool PX_LiveFrameworkAddLiveTexture(PX_LiveFramework *plive,PX_LiveTexture livetexture) +{ + return PX_VectorPushback(&plive->livetextures,&livetexture); +} + +PX_LiveTexture * PX_LiveFrameworkGetLiveTextureById(PX_LiveFramework *plive,const px_char id[]) +{ + px_int i; + for (i=0;ilivetextures.size;i++) + { + PX_LiveTexture *pTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,i); + if (PX_strequ(id,pTexture->id)) + { + return pTexture; + } + } + return PX_NULL; +} + +px_int PX_LiveFrameworkGetLiveTextureIndexById(PX_LiveFramework *plive,const px_char id[]) +{ + px_int i; + for (i=0;ilivetextures.size;i++) + { + PX_LiveTexture *pTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,i); + if (PX_strequ(id,pTexture->id)) + { + return i; + } + } + return -1; +} + +px_int PX_LiveFrameworkGetLiveTextureIndex(PX_LiveFramework *plive,PX_LiveTexture *pCompareTexture) +{ + px_int i; + for (i=0;ilivetextures.size;i++) + { + PX_LiveTexture *pTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,i); + if (pTexture==pCompareTexture) + { + return i; + } + } + return -1; +} + +PX_LiveTexture * PX_LiveFrameworkGetLiveTexture(PX_LiveFramework *plive,px_int index) +{ + if (index>=0&&indexlivetextures.size) + { + return PX_VECTORAT(PX_LiveTexture,&plive->livetextures,index); + } + return PX_NULL; +} + +px_void PX_LiveFrameworkDeleteLiveTextureById(PX_LiveFramework *plive,const px_char id[]) +{ + px_int i; + for (i=0;ilivetextures.size;i++) + { + PX_LiveTexture *pTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,i); + if (PX_strequ(id,pTexture->id)) + { + PX_LiveFrameworkDeleteLiveTexture(plive,i); + return; + } + } +} + +px_void PX_LiveFrameworkDeleteLiveAnimationById(PX_LiveFramework *plive,const px_char id[]) +{ + px_int i; + for (i=0;iliveAnimations.size;i++) + { + PX_LiveAnimation *pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,i); + if (PX_strequ(id,pAnimation->id)) + { + PX_LiveFrameworkDeleteLiveAnimation(plive,i); + return; + } + } +} + +px_bool PX_LiveFrameworkLinkLayerSearchSubLayer(PX_LiveFramework *plive,PX_LiveLayer *pLayer,PX_LiveLayer *pSearchLayer) +{ + px_int i; + for (i=0;ichild_index[i]); + + if (pSubLinkLayer==PX_NULL) + { + return PX_FALSE; + } + + if (pSubLinkLayer==pSearchLayer) + { + return PX_TRUE; + } + else + { + if(pSubLinkLayer!=PX_NULL) + return PX_LiveFrameworkLinkLayerSearchSubLayer(plive,pSubLinkLayer,pSearchLayer); + } + } + return PX_FALSE; +} + +px_void PX_LiveFrameworkLinkLayer(PX_LiveFramework *plive,PX_LiveLayer *pLayer,PX_LiveLayer *linkLayer) +{ + px_int i; + if (pLayer==linkLayer) + { + return; + } + + if (PX_LiveFrameworkLinkLayerSearchSubLayer(plive,pLayer,pLayer)) + { + return; + } + + for (i=0;ichild_index[i]); + + if (!pSubLinkLayer) + { + break; + } + + if (pSubLinkLayer==linkLayer) + { + return; + } + + } + if(iparent_index==-1) + { + pLayer->child_index[i]=PX_LiveFrameworkGetLayerIndex(plive,linkLayer); + linkLayer->parent_index=PX_LiveFrameworkGetLayerIndex(plive,pLayer); + } + } +} + +px_void PX_LiveFrameworkClearLinker(PX_LiveFramework *plive) +{ + px_int i; + for (i=0;ilayers.size;i++) + { + px_int j; + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + for (j=0;jchild_index);j++) + { + pLayer->child_index[j]=-1; + } + pLayer->parent_index=-1; + } +} + +px_void PX_LiveFrameworkDeleteLayer(PX_LiveFramework *plive,px_int index) +{ + if (index>=0&&indexlayers.size) + { + px_int i,j; + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,index); + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pSearchLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + + if (pSearchLayer->parent_index == index) + { + pSearchLayer->parent_index = -1; + } + else if (pSearchLayer->parent_index > index) + { + pSearchLayer->parent_index--; + } + + for (j=0;jchild_index[j]==index) + { + px_int k; + for (k=j;kchild_index);k++) + { + pSearchLayer->child_index[k]=pSearchLayer->child_index[k+1]; + if (pSearchLayer->child_index[k]==-1) + { + break; + } + } + } + + if (pSearchLayer->child_index[j] > index) + { + pSearchLayer->child_index[j]--; + } + } + } + + PX_VectorFree(&pLayer->vertices); + PX_VectorFree(&pLayer->triangles); + PX_VectorErase(&plive->layers,index); + } +} + +px_void PX_LiveFrameworkDeleteLiveTexture(PX_LiveFramework *plive,px_int index) +{ + if (index>=0&&indexlivetextures.size) + { + px_int i; + PX_LiveTexture *pTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,index); + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *player=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + if (player->LinkTextureIndex>=index) + { + if (player->LinkTextureIndex>index) + { + player->LinkTextureIndex--; + player->RenderTextureIndex=player->LinkTextureIndex; + } + else + { + player->LinkTextureIndex=-1; + player->RenderTextureIndex=player->LinkTextureIndex; + } + + } + } + PX_TextureFree(&pTexture->Texture); + PX_VectorErase(&plive->livetextures,index); + } +} + +px_void PX_LiveFrameworkDeleteLiveAnimationFrame(PX_LiveFramework *plive,PX_LiveAnimation *pliveAnimation,px_int index) +{ + if (index>=0&&indexframesMemPtr.size) + { + px_void *pFrameMemories=*PX_VECTORAT(px_void*,&pliveAnimation->framesMemPtr,index); + if(pFrameMemories) + MP_Free(plive->mp,pFrameMemories); + PX_VectorErase(&pliveAnimation->framesMemPtr,index); + } +} + +px_void PX_LiveFrameworkDeleteLiveAnimation(PX_LiveFramework *plive,px_int index) +{ + if (index>=0&&indexliveAnimations.size) + { + PX_LiveAnimation *pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,index); + while (pAnimation->framesMemPtr.size) + { + PX_LiveFrameworkDeleteLiveAnimationFrame(plive,pAnimation,0); + } + PX_VectorFree(&pAnimation->framesMemPtr); + PX_VectorErase(&plive->liveAnimations,index); + + plive->currentEditAnimationIndex=-1; + plive->currentEditFrameIndex=-1; + plive->currentEditLayerIndex=-1; + plive->currentEditVertexIndex=1; + } +} + +px_void PX_LiveFrameworkDeleteLiveAnimationFrameByIndex(PX_LiveFramework *plive,px_int AnimationIndex,px_int frameIndex) +{ + if (AnimationIndex>=0&&AnimationIndexliveAnimations.size) + { + PX_LiveAnimation *pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,AnimationIndex); + if (frameIndex>=0&&frameIndexframesMemPtr.size) + { + PX_LiveFrameworkDeleteLiveAnimationFrame(plive,pAnimation,frameIndex); + } + PX_VectorErase(&pAnimation->framesMemPtr,frameIndex); + } +} + +px_void PX_LiveFrameworkFree(PX_LiveFramework *plive) +{ + while (plive->liveAnimations.size) + { + PX_LiveFrameworkDeleteLiveAnimation(plive,0); + } + while (plive->layers.size) + { + PX_LiveFrameworkDeleteLayer(plive,0); + } + while(plive->livetextures.size) + { + PX_LiveFrameworkDeleteLiveTexture(plive,0); + } + PX_VectorFree(&plive->liveAnimations); + PX_VectorFree(&plive->layers); + PX_VectorFree(&plive->livetextures); +} + +px_void * PX_LiveFrameworkGetCurrentEditFrame(PX_LiveFramework *plive) +{ + if (plive->currentEditAnimationIndex>=0&&plive->currentEditAnimationIndexliveAnimations.size) + { + PX_LiveAnimation *pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,plive->currentEditAnimationIndex); + if (plive->currentEditFrameIndex>=0&&plive->currentEditFrameIndexframesMemPtr.size) + { + return *PX_VECTORAT(px_void *,&pAnimation->framesMemPtr,plive->currentEditFrameIndex); + } + } + return PX_NULL; +} + +PX_LiveLayer * PX_LiveFrameworkGetCurrentEditLiveLayer(PX_LiveFramework *plive) +{ + if (plive->currentEditLayerIndex>=0&&plive->currentEditLayerIndexlayers.size) + { + return PX_VECTORAT(PX_LiveLayer,&plive->layers,plive->currentEditLayerIndex); + } + return PX_NULL; +} + +PX_LiveAnimationFramePayload *PX_LiveFrameworkGetCurrentEditAnimationFramePayloadIndex(PX_LiveFramework *plive,px_int payloadIndex) +{ + px_int boffset=0; + px_int FramePayloadSize; + px_byte *pOffset; + PX_LiveAnimationFrameHeader *pHeader; + pOffset=(px_byte *)PX_LiveFrameworkGetCurrentEditFrame(plive); + if (!pOffset) + { + return PX_NULL; + } + + pHeader=(PX_LiveAnimationFrameHeader *)pOffset; + FramePayloadSize=pHeader->size+sizeof(PX_LiveAnimationFrameHeader); + boffset+=sizeof(PX_LiveAnimationFrameHeader); + while (PX_TRUE) + { + PX_LiveAnimationFramePayload *pPayloadHeder; + if (boffset>FramePayloadSize) + { + break; + } + pPayloadHeder=(PX_LiveAnimationFramePayload *)(pOffset+boffset); + if (payloadIndex<=0) + { + return pPayloadHeder; + } + boffset+=sizeof(PX_LiveAnimationFramePayload); + boffset+=pPayloadHeder->translationVerticesCount*sizeof(px_point); + payloadIndex--; + } + return PX_NULL; +} + +PX_LiveAnimationFramePayload * PX_LiveFrameworkGetCurrentEditAnimationFramePayload(PX_LiveFramework *plive) +{ + return PX_LiveFrameworkGetCurrentEditAnimationFramePayloadIndex(plive,plive->currentEditLayerIndex); +} + +px_void PX_LiveFrameworkCurrentEditMoveFrameDown(PX_LiveFramework *plive) +{ + PX_LiveAnimation *pAnimation=PX_LiveFrameworkGetCurrentEditAnimation(plive); + if (!pAnimation) + { + return; + } + if (plive->currentEditFrameIndex>=0&&plive->currentEditFrameIndexframesMemPtr.size) + { + if (plive->currentEditFrameIndex==pAnimation->framesMemPtr.size-1) + { + return; + } + else + { + px_void **ptr1,**ptr2,*temp; + ptr1=PX_VECTORAT(px_void *,&pAnimation->framesMemPtr,plive->currentEditFrameIndex); + ptr2=PX_VECTORAT(px_void *,&pAnimation->framesMemPtr,plive->currentEditFrameIndex+1); + temp=*ptr1; + *ptr1=*ptr2; + *ptr2=temp; + } + } +} + +px_void PX_LiveFrameworkCurrentEditMoveFrameUp(PX_LiveFramework *plive) +{ + PX_LiveAnimation *pAnimation=PX_LiveFrameworkGetCurrentEditAnimation(plive); + if (!pAnimation) + { + return; + } + if (plive->currentEditFrameIndex>=0&&plive->currentEditFrameIndexframesMemPtr.size) + { + if (plive->currentEditFrameIndex==0) + { + return; + } + else + { + px_void **ptr1,**ptr2,*temp; + ptr1=PX_VECTORAT(px_void *,&pAnimation->framesMemPtr,plive->currentEditFrameIndex); + ptr2=PX_VECTORAT(px_void *,&pAnimation->framesMemPtr,plive->currentEditFrameIndex-1); + temp=*ptr1; + *ptr1=*ptr2; + *ptr2=temp; + } + } +} + +PX_LiveAnimation * PX_LiveFrameworkGetCurrentEditAnimation(PX_LiveFramework *plive) +{ + if (plive->currentEditAnimationIndex>=0&&plive->currentEditAnimationIndexliveAnimations.size) + { + PX_LiveAnimation *pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,plive->currentEditAnimationIndex); + return pAnimation; + } + return PX_NULL; +} + +PX_LiveAnimationFrameHeader * PX_LiveFrameworkGetCurrentEditAnimationFrame(PX_LiveFramework *plive) +{ + PX_LiveAnimation *pAnimation=PX_LiveFrameworkGetCurrentEditAnimation(plive); + if (pAnimation) + { + if (plive->currentEditFrameIndex>=0&&plive->currentEditFrameIndexframesMemPtr.size) + { + return (PX_LiveAnimationFrameHeader *)(*PX_VECTORAT(px_void*,&pAnimation->framesMemPtr,plive->currentEditFrameIndex)); + } + } + return PX_NULL; +} + +PX_LiveVertex * PX_LiveFrameworkGetCurrentEditLiveVertex(PX_LiveFramework *plive) +{ + PX_LiveLayer *currentEditLayer=PX_LiveFrameworkGetCurrentEditLiveLayer(plive); + if (currentEditLayer) + { + if (plive->currentEditVertexIndex>=0&&plive->currentEditVertexIndexvertices.size) + { + return PX_VECTORAT(PX_LiveVertex,¤tEditLayer->vertices,plive->currentEditVertexIndex); + } + } + return PX_NULL; +} + +px_point * PX_LiveFrameworkGetCurrentEditAnimationFramePayloadVertex(PX_LiveFramework *plive) +{ + px_byte *pPayloadByte=(px_byte *)PX_LiveFrameworkGetCurrentEditAnimationFramePayload(plive); + PX_LiveAnimationFramePayload *ppayload=(PX_LiveAnimationFramePayload *)pPayloadByte; + if (pPayloadByte) + { + if (plive->currentEditVertexIndex>=0&&plive->currentEditVertexIndex<(px_int)ppayload->translationVerticesCount) + { + return (px_point *)(pPayloadByte+sizeof(PX_LiveAnimationFramePayload)+plive->currentEditVertexIndex*sizeof(px_point)); + } + } + return PX_NULL; +} + +px_void PX_LiveFrameworkDeleteCurrentEditAnimation(PX_LiveFramework *plive) +{ + PX_LiveFrameworkDeleteLiveAnimation(plive,plive->currentEditAnimationIndex); +} + +px_void PX_LiveFrameworkDeleteCurrentEditAnimationFrame(PX_LiveFramework *plive) +{ + PX_LiveAnimation *pAnimation=PX_LiveFrameworkGetCurrentEditAnimation(plive); + if (pAnimation) + { + PX_LiveFrameworkDeleteLiveAnimationFrame(plive,pAnimation,plive->currentEditFrameIndex); + } + +} + +px_bool PX_LiveFrameworkNewEditFrame(PX_LiveFramework *plive,px_char id[],px_bool bCopyFrame) +{ + PX_LiveAnimation *pAnimation; + px_void *pFramebuffer; + pAnimation=PX_LiveFrameworkGetCurrentEditAnimation(plive); + if (!pAnimation) + { + return PX_FALSE; + } + pFramebuffer=PX_LiveFrameworkGetCurrentEditAnimationFrame(plive); + + if (pFramebuffer) + { + px_uint size; + PX_LiveAnimationFrameHeader *pHeader; + px_void *newFramePtr; + px_void *buffer=pFramebuffer; + pHeader=(PX_LiveAnimationFrameHeader *)buffer; + size=pHeader->size+sizeof(PX_LiveAnimationFrameHeader); + newFramePtr=MP_Malloc(plive->mp,size); + if (newFramePtr) + { + PX_memcpy(newFramePtr,buffer,size); + PX_memcpy(pHeader->frameid,id,sizeof(pHeader->frameid)); + if (bCopyFrame) + { + PX_VectorPushTo(&pAnimation->framesMemPtr,&newFramePtr,plive->currentEditFrameIndex+1); + } + else + { + PX_VectorPushback(&pAnimation->framesMemPtr,&newFramePtr); + } + + return PX_TRUE; + } + else + { + return PX_FALSE; + } + } + else + { + px_void *newFramePtr; + //create new frame + px_int i; + px_uint size=0; + //header + size+=sizeof(PX_LiveAnimationFrameHeader); + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *player=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + //payload + size+=sizeof(PX_LiveAnimationFramePayload); + //translation + size+=sizeof(px_point)*player->vertices.size; + } + newFramePtr=MP_Malloc(plive->mp,size); + + if (newFramePtr) + { + PX_LiveAnimationFrameHeader *pHeader=(PX_LiveAnimationFrameHeader *)newFramePtr; + PX_LiveAnimationFramePayload *pPayload; + px_byte *pdata; + px_int offset=0; + PX_memset(newFramePtr,0,size); + pdata=(px_byte *)newFramePtr; + pHeader->size=size-sizeof(PX_LiveAnimationFrameHeader); + offset+=sizeof(PX_LiveAnimationFrameHeader); + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *player=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + pPayload=(PX_LiveAnimationFramePayload *)(pdata+offset); + pPayload->translationVerticesCount=player->vertices.size; + pPayload->mapTexture=player->LinkTextureIndex; + pPayload->stretch=1; + offset+=sizeof(PX_LiveAnimationFramePayload)+sizeof(px_point)*player->vertices.size; + } + PX_memcpy(pHeader->frameid,id,sizeof(pHeader->frameid)); + return PX_VectorPushback(&pAnimation->framesMemPtr,&newFramePtr); + } + else + { + return PX_FALSE; + } + } + + + + + return PX_FALSE; +} + +px_void PX_LiveFrameworkRunCurrentEditFrame(PX_LiveFramework *plive) +{ + PX_LiveFrameworkExecuteInstr(plive,plive->currentEditAnimationIndex,plive->currentEditFrameIndex); + PX_LiveFrameworkExecuteInstr(plive,plive->currentEditAnimationIndex,plive->currentEditFrameIndex); +} + +px_bool PX_LiveFrameworkExport(PX_LiveFramework *plive,px_memory *exportbuffer) +{ + //header + if(!PX_MemoryCat(exportbuffer,"PainterEngineLiveDBinary",24))return PX_FALSE; + + //export LiveFramework structure + do + { + + typedef struct + { + px_char id[PX_LIVE_ID_MAX_LEN]; + px_dword version; + px_int32 width; + px_int32 height; + px_int32 layerCount; + px_int32 animationCount; + px_int32 textureCount; + }PX_LiveFrameworkBaseAttributes; + + PX_LiveFrameworkBaseAttributes desc; + + PX_memset(&desc,0,sizeof(PX_LiveFrameworkBaseAttributes)); + + PX_memcpy(desc.id,plive->id,PX_LIVE_ID_MAX_LEN); + desc.version = PX_LIVE_VERSION; + + desc.width=plive->width; + + desc.height=plive->height; + + desc.layerCount=plive->layers.size; + + desc.animationCount=plive->liveAnimations.size; + + desc.textureCount=plive->livetextures.size; + + if(!PX_MemoryCat(exportbuffer,&desc,sizeof(desc)))return PX_FALSE; + } while (0); + + //export live texture + do + { + typedef struct + { + px_char id[PX_LIVE_ID_MAX_LEN]; + px_int32 width; + px_int32 height; + px_int32 textureOffsetX; + px_int32 textureOffsetY; + }PX_LiveTextureExportInfo; + + px_int i; + for (i=0;ilivetextures.size;i++) + { + PX_LiveTexture *pTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,i); + + //export live texture structure + do + { + PX_LiveTextureExportInfo desc; + desc.height=pTexture->Texture.height; + desc.width=pTexture->Texture.width; + PX_memcpy(desc.id,pTexture->id,sizeof(desc.id)); + desc.textureOffsetX=pTexture->textureOffsetX; + desc.textureOffsetY=pTexture->textureOffsetY; + if(!PX_MemoryCat(exportbuffer,&desc,sizeof(desc)))return PX_FALSE; + } while (0); + + //export pixels data + do + { + if(!PX_MemoryCat(exportbuffer,pTexture->Texture.surfaceBuffer,sizeof(px_color)*pTexture->Texture.height*pTexture->Texture.width))return PX_FALSE; + } while (0); + } + } while (0); + + //export layers + do + { + typedef struct + { + px_char id[PX_LIVE_ID_MAX_LEN]; + px_int32 parent_index; + px_int32 child_index[PX_LIVE_LAYER_MAX_LINK_NODE]; + px_int32 triangleCount; + px_int32 verticesCount; + px_point32 KeyPoint; + px_int32 LinkTextureIndex; + }PX_LiveFramework_LayerExportInfo; + px_int i; + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + PX_LiveFramework_LayerExportInfo desc; + PX_memcpy(desc.id,pLayer->id,sizeof(desc.id)); + + desc.triangleCount=pLayer->triangles.size; + desc.verticesCount=pLayer->vertices.size; + + desc.parent_index=pLayer->parent_index; + + do + { + px_int j; + for (j=0;jchild_index);j++) + { + desc.child_index[j]=pLayer->child_index[j]; + } + } while (0); + + desc.KeyPoint=pLayer->keyPoint; + desc.LinkTextureIndex=pLayer->LinkTextureIndex; + + if(!PX_MemoryCat(exportbuffer,&desc,sizeof(desc)))return PX_FALSE; + + + //export layer triangles + do + { + if(!PX_MemoryCat(exportbuffer,pLayer->triangles.data,pLayer->triangles.nodesize*pLayer->triangles.size))return PX_FALSE; + } while (0); + + //export layer vertex + do + { + if(!PX_MemoryCat(exportbuffer,pLayer->vertices.data,pLayer->vertices.nodesize*pLayer->vertices.size))return PX_FALSE; + } while (0); + } + } while (0); + + //export live animation + do + { + px_int i; + for (i=0;iliveAnimations.size;i++) + { + PX_LiveAnimation *pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,i); + //export Live Animation structure + do + { + typedef struct + { + px_char id[PX_LIVE_ID_MAX_LEN]; + px_int32 size; + }PX_LiveAnimationExportInfo; + + PX_LiveAnimationExportInfo desc; + PX_memcpy(desc.id,pAnimation->id,sizeof(desc.id)); + desc.size=pAnimation->framesMemPtr.size; + if(!PX_MemoryCat(exportbuffer,&desc,sizeof(desc)))return PX_FALSE; + } while (0); + + //export live animation frame + do + { + px_int j; + for (j=0;jframesMemPtr.size;j++) + { + //export size + px_void *pdata; + px_int32 payloadsize; + PX_LiveAnimationFrameHeader *pheader; + pdata=*PX_VECTORAT(px_void*,&pAnimation->framesMemPtr,j); + pheader=(PX_LiveAnimationFrameHeader *)pdata; + payloadsize=sizeof(PX_LiveAnimationFrameHeader)+pheader->size; + + if(!PX_MemoryCat(exportbuffer,pdata,payloadsize))return PX_FALSE; + } + } while (0); + + + } + } while (0); + return PX_TRUE; +} + +px_bool PX_LiveFrameworkImport(px_memorypool *mp,PX_LiveFramework *plive,px_void *buffer,px_int size) +{ + px_byte*bBuffer = (px_byte *)buffer; + px_int rOffset=0; + ////////////////////////////////////////////////////////////////////////// + //check header + + do + { + if (!PX_memequ(buffer,"PainterEngineLiveDBinary",24)) + { + return PX_FALSE; + } + rOffset+=24;if(rOffset>size) return PX_FALSE; + + } while (0); + + ////////////////////////////////////////////////////////////////////////// + //import live framework structure + do + { + typedef struct + { + px_char id[PX_LIVE_ID_MAX_LEN]; + px_dword version; + px_int32 width; + px_int32 height; + px_int32 layerCount; + px_int32 animationCount; + px_int32 textureCount; + }PX_LiveFrameworkBaseAttributes; + + PX_LiveFrameworkBaseAttributes *pReadLiveFrameworkAttributes=(PX_LiveFrameworkBaseAttributes *)(bBuffer+rOffset); + rOffset+=sizeof(PX_LiveFrameworkBaseAttributes);if(rOffset>size) return PX_FALSE; + + ////////////////////////////////////////////////////////////////////////// + if (pReadLiveFrameworkAttributes->version != PX_LIVE_VERSION) + { + return PX_FALSE; + } + + PX_memset(plive,0,sizeof(PX_LiveFramework)); + + PX_memcpy(plive->id,pReadLiveFrameworkAttributes->id,sizeof(plive->id)); + plive->width=pReadLiveFrameworkAttributes->width; + plive->height=pReadLiveFrameworkAttributes->height; + + ////////////////////////////////////////////////////////////////////////// + plive->mp=mp; + if(!PX_VectorInitialize(mp,&plive->layers,sizeof(PX_LiveLayer),pReadLiveFrameworkAttributes->layerCount))return PX_FALSE; + plive->layers.size=pReadLiveFrameworkAttributes->layerCount; + + if(!PX_VectorInitialize(mp,&plive->livetextures,sizeof(PX_LiveTexture),pReadLiveFrameworkAttributes->textureCount))return PX_FALSE; + plive->livetextures.size=pReadLiveFrameworkAttributes->textureCount; + + if(!PX_VectorInitialize(mp,&plive->liveAnimations,sizeof(PX_LiveAnimation),pReadLiveFrameworkAttributes->animationCount))return PX_FALSE; + plive->liveAnimations.size=pReadLiveFrameworkAttributes->animationCount; + + plive->reg_animation=0; + plive->reg_bp=0; + plive->reg_duration=0; + plive->reg_elapsed=0; + plive->reg_ip=0; + + plive->currentEditAnimationIndex=-1; + plive->currentEditFrameIndex=-1; + plive->currentEditLayerIndex=-1; + plive->currentEditVertexIndex=-1; + } while (0); + + + ////////////////////////////////////////////////////////////////////////// + // + //import live texture + do + { + typedef struct + { + px_char id[PX_LIVE_ID_MAX_LEN]; + px_int32 width; + px_int32 height; + px_int32 textureOffsetX; + px_int32 textureOffsetY; + }PX_LiveTextureImportInfo; + + px_int i; + for (i=0;ilivetextures.size;i++) + { + PX_LiveTexture *pTexture=PX_VECTORAT(PX_LiveTexture,&plive->livetextures,i); + do + { + //import live texture structure + PX_LiveTextureImportInfo *pLiveTextureImportInfo; + pLiveTextureImportInfo=((PX_LiveTextureImportInfo *)(bBuffer+rOffset)); + PX_memset(pTexture,0,sizeof(PX_LiveTexture)); + + if(!PX_TextureCreate(mp,&pTexture->Texture,pLiveTextureImportInfo->width,pLiveTextureImportInfo->height)) + goto _ERROR; + PX_memcpy(pTexture->id,pLiveTextureImportInfo->id,sizeof(pTexture->id)); + pTexture->textureOffsetX=pLiveTextureImportInfo->textureOffsetX; + pTexture->textureOffsetY=pLiveTextureImportInfo->textureOffsetY; + + rOffset+=sizeof(PX_LiveTextureImportInfo);if(rOffset>size) + goto _ERROR; + //import texture data + PX_memcpy(pTexture->Texture.surfaceBuffer,(bBuffer+rOffset),pTexture->Texture.width*pTexture->Texture.height*sizeof(px_color)); + rOffset+=pTexture->Texture.width*pTexture->Texture.height*sizeof(px_color);if(rOffset>size) + goto _ERROR; + } while (0); + } + } while (0); + + ////////////////////////////////////////////////////////////////////////// + //import layer + do + { + typedef struct + { + px_char id[PX_LIVE_ID_MAX_LEN]; + px_int parent_index; + px_int child_index[PX_LIVE_LAYER_MAX_LINK_NODE]; + px_int triangleCount; + px_int verticesCount; + px_point KeyPoint; + px_int LinkTextureIndex; + }PX_LiveFramework_LayerExportInfo; + + px_int i; + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&plive->layers,i); + PX_LiveFramework_LayerExportInfo *pReadLayer=(PX_LiveFramework_LayerExportInfo *)(bBuffer+rOffset); + rOffset+=sizeof(PX_LiveFramework_LayerExportInfo);if(rOffset>size) goto _ERROR; + + PX_memset(pLayer,0,sizeof(PX_LiveLayer)); + PX_memcpy(pLayer->id,pReadLayer->id,sizeof(pLayer->id)); + pLayer->keyPoint=pReadLayer->KeyPoint; + pLayer->LinkTextureIndex=pReadLayer->LinkTextureIndex; + pLayer->RenderTextureIndex=pLayer->LinkTextureIndex; + + pLayer->rel_beginStretch=1; + pLayer->rel_currentStretch=1; + pLayer->rel_endStretch=1; + pLayer->visible=PX_TRUE; + + if(!PX_VectorInitialize(mp,&pLayer->triangles,sizeof(PX_Delaunay_Triangle),pReadLayer->triangleCount)) + goto _ERROR; + pLayer->triangles.size=pReadLayer->triangleCount; + + if(!PX_VectorInitialize(mp,&pLayer->vertices,sizeof(PX_LiveVertex),pReadLayer->verticesCount)) + goto _ERROR; + pLayer->vertices.size=pReadLayer->verticesCount; + + + pLayer->parent_index=pReadLayer->parent_index; + + do + { + px_int j; + for (j=0;jchild_index);j++) + { + pLayer->child_index[j]=pReadLayer->child_index[j]; + } + } while (0); + + + //import layer triangles + do + { + PX_memcpy(pLayer->triangles.data,bBuffer+rOffset,pLayer->triangles.nodesize*pLayer->triangles.size); + rOffset+=pLayer->triangles.nodesize*pLayer->triangles.size;if(rOffset>size) goto _ERROR; + } while (0); + + //import layer vertex + do + { + PX_memcpy(pLayer->vertices.data,bBuffer+rOffset,pLayer->vertices.nodesize*pLayer->vertices.size); + rOffset+=pLayer->vertices.nodesize*pLayer->vertices.size;if(rOffset>size) goto _ERROR; + } while (0); + } + } while (0); + + //import live animation + do + { + typedef struct + { + px_char id[PX_LIVE_ID_MAX_LEN]; + px_int32 size; + }PX_LiveAnimationImportInfo; + + px_int i; + for (i=0;iliveAnimations.size;i++) + { + PX_LiveAnimation *pAnimation=PX_VECTORAT(PX_LiveAnimation,&plive->liveAnimations,i); + + //import Live Animation structure + do + { + PX_LiveAnimationImportInfo *pLiveAnimationImport=(PX_LiveAnimationImportInfo *)(bBuffer+rOffset); + rOffset+=sizeof(PX_LiveAnimationImportInfo);if(rOffset>size) goto _ERROR; + + PX_memcpy(pAnimation->id,pLiveAnimationImport->id,sizeof(pAnimation->id)); + + if(!PX_VectorInitialize(mp,&pAnimation->framesMemPtr,sizeof(px_void *),pLiveAnimationImport->size))goto _ERROR; + pAnimation->framesMemPtr.size=pLiveAnimationImport->size; + } while (0); + + //import live animation frame + do + { + px_int j; + for (j=0;jframesMemPtr.size;j++) + { + //import size + px_void **ppdata; + px_int32 payloadsize; + PX_LiveAnimationFrameHeader *pheader; + ppdata=PX_VECTORAT(px_void*,&pAnimation->framesMemPtr,j); + pheader=(PX_LiveAnimationFrameHeader *)(bBuffer+rOffset); + payloadsize=sizeof(PX_LiveAnimationFrameHeader)+pheader->size; + + *ppdata=MP_Malloc(mp,payloadsize); + if(*ppdata==PX_NULL) goto _ERROR; + PX_memcpy(*ppdata,bBuffer+rOffset,payloadsize); + rOffset+=payloadsize;if(rOffset>size) goto _ERROR; + } + } while (0); + } + } while (0); + PX_LiveFrameworkReset(plive); + return PX_TRUE; +_ERROR: + PX_LiveFrameworkFree(plive); + return PX_FALSE; +} + +////////////////////////////////////////////////////////////////////////// +//liveframework mirror + +px_bool PX_LiveCreate(px_memorypool *mp,PX_LiveFramework *pLiveFramework,PX_Live *pLive) +{ + px_int i; + pLive->mp=mp; + *pLive=*pLiveFramework; + if(!PX_VectorInitialize(mp,&pLive->layers,sizeof(PX_LiveLayer),0))return PX_FALSE; + if(!PX_VectorCopy(&pLive->layers,&pLiveFramework->layers)) return PX_FALSE; + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&pLive->layers,i); + PX_LiveLayer *pFrameworkLayer=PX_VECTORAT(PX_LiveLayer,&pLiveFramework->layers,i); + if(!PX_VectorInitialize(mp,&pLayer->vertices,sizeof(PX_LiveVertex),0)) + { + px_int j; + for (j=0;jlayers,j); + PX_VectorFree(&pLayer->vertices); + } + return PX_FALSE; + } + if(!PX_VectorCopy(&pLayer->vertices,&pFrameworkLayer->vertices)) + { + px_int j; + for (j=0;jlayers,j); + PX_VectorFree(&pLayer->vertices); + } + return PX_FALSE; + } + } + return PX_TRUE; +} + +px_void PX_LiveFree(PX_Live *pLive) +{ + px_int i; + for (i=0;ilayers.size;i++) + { + PX_LiveLayer *pLayer=PX_VECTORAT(PX_LiveLayer,&pLive->layers,i); + PX_VectorFree(&pLayer->vertices); + } + PX_VectorFree(&pLive->layers); +} + +px_void PX_LivePlay(PX_Live*plive) +{ + PX_LiveFrameworkPlay(plive); +} + +px_bool PX_LivePlayAnimation(PX_Live *plive,px_int index) +{ + return PX_LiveFrameworkPlayAnimation(plive,index); +} + +px_bool PX_LivePlayAnimationByName(PX_Live *plive,const px_char name[]) +{ + return PX_LiveFrameworkPlayAnimationByName(plive,name); +} + +px_void PX_LivePause(PX_Live *plive) +{ + PX_LiveFrameworkPause(plive); +} + +px_void PX_LiveReset(PX_Live *plive) +{ + PX_LiveFrameworkReset(plive); +} + +px_void PX_LiveStop(PX_Live *plive) +{ + PX_LiveFrameworkStop(plive); +} + +px_void PX_LiveRender(px_surface *psurface,PX_Live *plive,px_int x,px_int y,PX_ALIGN refPoint,px_dword elapsed) +{ + PX_LiveFrameworkRender(psurface,plive,x,y,refPoint,elapsed); +} diff --git a/UI/PainterEngine/kernel/PX_LiveFramework.h b/UI/PainterEngine/kernel/PX_LiveFramework.h new file mode 100644 index 0000000..2f8e545 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_LiveFramework.h @@ -0,0 +1,267 @@ +#ifndef PX_LIVEFRAMEWORK_H +#define PX_LIVEFRAMEWORK_H + +#include "../core/PX_Core.h" + +#define PX_LIVEFRAMEWORK_MAX_SUPPORT_LAYER 256 +#define PX_LIVE_ID_MAX_LEN 32 +#define PX_LIVE_LAYER_MAX_LINK_NODE 16 +#define PX_LIVE_VERSION 0x00000001 +typedef enum +{ + PX_LIVE_ANIMATION_FRAME_OPCODE_STAMP=0, + PX_LIVE_ANIMATION_FRAME_OPCODE_TRANSLATION, +}PX_LIVE_ANIMATION_FRAME_OPCODE; + +////////////////////////////////////////////////////////////////////////// +//live base struct +typedef struct +{ + px_point sourcePosition; + px_point currentPosition; + px_point normal; + px_point beginTranslation;//point + px_point currentTranslation;//point + px_point endTranslation;//point + px_point velocity; + px_int32 k; + px_float32 u,v; +}PX_LiveVertex; + +typedef struct +{ + px_int index1; + px_int index2; + px_int index3; +}PX_LiveTriangle; + +typedef struct +{ + px_char id[PX_LIVE_ID_MAX_LEN]; + px_texture Texture; + px_int textureOffsetX; + px_int textureOffsetY; +}PX_LiveTexture; + +////////////////////////////////////////////////////////////////////////// +//live animation +typedef struct +{ + px_char id[PX_LIVE_ID_MAX_LEN]; + px_vector framesMemPtr;//px_void * +}PX_LiveAnimation; +////////////////////////////////////////////////////////////////////////// +//shell codes struct + +typedef struct +{ + px_char frameid[PX_LIVE_ID_MAX_LEN]; + px_int32 size; + px_uint32 duration_ms; +}PX_LiveAnimationFrameHeader; + +////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + px_point32 translation;//only root layer + px_float32 stretch;//only child layer + px_float32 rotation; + px_int32 mapTexture; + px_int32 translationVerticesCount; + px_point32 impulse; + + px_float panc_x, panc_y, panc_width, panc_height; + px_float panc_sx,panc_sy; + px_float panc_endx, panc_endy; + px_dword reserve[32]; +}PX_LiveAnimationFramePayload; +////////////////////////////////////////////////////////////////////////// + + + +struct _PX_LiveLayer +{ + px_char id[PX_LIVE_ID_MAX_LEN]; + + px_int32 parent_index; + px_int32 child_index[PX_LIVE_LAYER_MAX_LINK_NODE]; + + + //second Transform + px_float rotationAngle; + px_float rel_beginRotationAngle; + px_float rel_currentRotationAngle; + px_float rel_endRotationAngle; + + //third Transform + px_float rel_beginStretch; + px_float rel_currentStretch; + px_float rel_endStretch; + + px_point rel_beginTranslation; + px_point rel_currentTranslation; + px_point rel_endTranslation; + + //impulse + px_point rel_impulse; + + //keyPoint + px_point keyPoint; + px_point currentKeyPoint; + + //vertices + px_vector vertices;//PX_LiveVertex + //triangle + px_vector triangles;//PX_LiveTriangle + + //panc + px_float panc_x, panc_y, panc_width, panc_height, panc_sx, panc_sy; + px_float panc_beginx, panc_beginy; + px_float panc_currentx, panc_currenty; + px_float panc_endx, panc_endy; + + px_bool visible; + px_bool showMesh; + px_int LinkTextureIndex; + px_int RenderTextureIndex; +}; +typedef struct _PX_LiveLayer PX_LiveLayer; + +////////////////////////////////////////////////////////////////////////// +typedef px_void (*PX_LiveFramework_PixelShader)(px_surface *psurface,px_int x,px_int y,px_point position,px_float u,px_float v,px_point normal,px_texture *pTexture,PX_TEXTURERENDER_BLEND *blend); + +typedef enum +{ + PX_LIVEFRAMEWORK_STATUS_STOP, + PX_LIVEFRAMEWORK_STATUS_PLAYING, +}PX_LIVEFRAMEWORK_STATUS; + +typedef struct +{ + px_memorypool *mp; + ////////////////////////////////////////////////////////////////////////// + //attributes + px_char id[PX_LIVE_ID_MAX_LEN]; + + ////////////////////////////////////////////////////////////////////////// + //controller + px_int currentEditLayerIndex; + px_int currentEditAnimationIndex; + px_int currentEditFrameIndex; + px_int currentEditVertexIndex; + + ////////////////////////////////////////////////////////////////////////// + //render + px_vector layers; + px_vector livetextures; + px_vector liveAnimations; + px_int width; + px_int height; + px_bool showRange; + px_bool showKeypoint; + px_bool showlinker; + px_bool showFocusLayer; + px_bool showRootHelperLine; + px_float refer_x,refer_y; + PX_LIVEFRAMEWORK_STATUS status; + PX_LiveFramework_PixelShader pixelShader; + + ////////////////////////////////////////////////////////////////////////// + //VirtualMachine + px_int32 reg_duration; + px_int32 reg_ip; + px_int32 reg_elapsed; + px_int32 reg_animation; + px_int32 reg_bp; +}PX_LiveFramework; + + + +px_bool PX_LiveFrameworkInitialize(px_memorypool *mp,PX_LiveFramework *plive,px_int width,px_int height); +px_void PX_LiveFrameworkPlay(PX_LiveFramework *plive); +px_void PX_LiveFrameworkPause(PX_LiveFramework *plive); +px_void PX_LiveFrameworkReset(PX_LiveFramework *plive); +px_void PX_LiveFrameworkStop(PX_LiveFramework *plive); + + +px_void PX_LiveFrameworkRender(px_surface *psurface,PX_LiveFramework *plive,px_int x,px_int y,PX_ALIGN refPoint,px_dword elapsed); +px_void PX_LiveFrameworkRenderRefer(px_surface *psurface,PX_LiveFramework *plive,PX_ALIGN refPoint,px_dword elapsed); + +px_bool PX_LiveFrameworkPlayAnimation(PX_LiveFramework *plive,px_int index); +px_bool PX_LiveFrameworkPlayAnimationByName(PX_LiveFramework *plive,const px_char name[]); +PX_LiveLayer *PX_LiveFrameworkGetLayerById(PX_LiveFramework *plive,const px_char id[]); +PX_LiveLayer *PX_LiveFrameworkCreateLayer(PX_LiveFramework *plive,const px_char id[]); +PX_LiveLayer *PX_LiveFrameworkGetLayerParent(PX_LiveFramework *plive,PX_LiveLayer *pLayer); +PX_LiveLayer *PX_LiveFrameworkGetLayerChild(PX_LiveFramework *plive,PX_LiveLayer *pLayer,px_int childIndex); + +px_bool PX_LiveFrameworkLinkLayerTexture(PX_LiveFramework *plive,const px_char layer_id[],const px_char texture_id[]); +PX_LiveLayer *PX_LiveFrameworkGetLayer(PX_LiveFramework *plive,px_int index); +px_int PX_LiveFrameworkGetLayerIndex(PX_LiveFramework *plive,PX_LiveLayer *pLayer); +PX_LiveLayer *PX_LiveFrameworkGetLastCreateLayer(PX_LiveFramework *plive); + +px_void PX_LiveFrameworkUpdateLayerSourceVerticesUV(PX_LiveFramework *plive,PX_LiveLayer *pLayer); +px_void PX_LiveFrameworkUpdateSourceVerticesUV(PX_LiveFramework *plive); +px_void PX_LiveFrameworkUpdateLayerRenderVerticesUV(PX_LiveFramework *plive,PX_LiveLayer *pLayer); + +PX_LiveAnimation *PX_LiveFrameworkGetAnimationById(PX_LiveFramework *plive,const px_char id[]); +PX_LiveAnimation *PX_LiveFrameworkCreateAnimation(PX_LiveFramework *plive,const px_char id[]); +PX_LiveAnimation *PX_LiveFrameworkGetAnimation(PX_LiveFramework *plive,px_int index); +PX_LiveAnimation *PX_LiveFrameworkGetLastCreateAnimation(PX_LiveFramework *plive); + +px_bool PX_LiveFrameworkAddLiveTexture(PX_LiveFramework *plive,PX_LiveTexture livetexture); +PX_LiveTexture *PX_LiveFrameworkGetLiveTextureById(PX_LiveFramework *plive,const px_char id[]); +px_int PX_LiveFrameworkGetLiveTextureIndexById(PX_LiveFramework *plive,const px_char id[]); +PX_LiveTexture *PX_LiveFrameworkGetLiveTexture(PX_LiveFramework *plive,px_int index); +px_void PX_LiveFrameworkDeleteLiveTextureById(PX_LiveFramework *plive,const px_char id[]); +px_void PX_LiveFrameworkDeleteLiveAnimationById(PX_LiveFramework *plive,const px_char id[]); +px_bool PX_LiveFrameworkLinkLayerSearchSubLayer(PX_LiveFramework *plive,PX_LiveLayer *pLayer,PX_LiveLayer *pSearchLayer); +px_void PX_LiveFrameworkLinkLayer(PX_LiveFramework *plive,PX_LiveLayer *pLayer,PX_LiveLayer *linkLayer); +px_void PX_LiveFrameworkClearLinker(PX_LiveFramework *plive); +px_void PX_LiveFrameworkDeleteLayer(PX_LiveFramework *plive,px_int index); +px_void PX_LiveFrameworkDeleteLiveTexture(PX_LiveFramework *plive,px_int index); +px_void PX_LiveFrameworkDeleteLiveAnimation(PX_LiveFramework *plive,px_int index); +px_void PX_LiveFrameworkDeleteLiveAnimationFrameByIndex(PX_LiveFramework *plive,px_int AnimationIndex,px_int frameIndex); +px_void PX_LiveFrameworkFree(PX_LiveFramework *plive); + + +////////////////////////////////////////////////////////////////////////// +//edit functions +px_void *PX_LiveFrameworkGetCurrentEditFrame(PX_LiveFramework *plive); +PX_LiveLayer *PX_LiveFrameworkGetCurrentEditLiveLayer(PX_LiveFramework *plive); +PX_LiveVertex *PX_LiveFrameworkGetCurrentEditLiveVertex(PX_LiveFramework *plive); + +px_void PX_LiveFrameworkCurrentEditMoveFrameDown(PX_LiveFramework *plive); +px_void PX_LiveFrameworkCurrentEditMoveFrameUp(PX_LiveFramework *plive); + +PX_LiveAnimation * PX_LiveFrameworkGetCurrentEditAnimation(PX_LiveFramework *plive); +PX_LiveAnimationFrameHeader * PX_LiveFrameworkGetCurrentEditAnimationFrame(PX_LiveFramework *plive); +PX_LiveAnimationFramePayload *PX_LiveFrameworkGetCurrentEditAnimationFramePayloadIndex(PX_LiveFramework *plive,px_int payloadIndex); +PX_LiveAnimationFramePayload *PX_LiveFrameworkGetCurrentEditAnimationFramePayload(PX_LiveFramework *plive); +px_point *PX_LiveFrameworkGetCurrentEditAnimationFramePayloadVertex(PX_LiveFramework *plive); +px_void PX_LiveFrameworkDeleteCurrentEditAnimation(PX_LiveFramework *plive); +px_void PX_LiveFrameworkDeleteCurrentEditAnimationFrame(PX_LiveFramework *plive); +px_bool PX_LiveFrameworkNewEditFrame(PX_LiveFramework *plive,px_char id[],px_bool bCopyFrame); +px_void PX_LiveFrameworkRunCurrentEditFrame(PX_LiveFramework *plive); + +px_bool PX_LiveFrameworkExport(PX_LiveFramework *plive,px_memory *exportbuffer); +px_bool PX_LiveFrameworkImport(px_memorypool *mp,PX_LiveFramework *plive,px_void *buffer,px_int size); + + +////////////////////////////////////////////////////////////////////////// +//mirror +typedef PX_LiveFramework PX_Live; +px_bool PX_LiveCreate(px_memorypool *mp,PX_LiveFramework *pLiveFramework,PX_Live *pLive); +px_void PX_LiveFree(PX_Live *pLive); + +px_void PX_LivePlay(PX_Live*plive); +px_bool PX_LivePlayAnimation(PX_Live *plive,px_int index); +px_bool PX_LivePlayAnimationByName(PX_Live *plive,const px_char name[]); +px_void PX_LivePause(PX_Live *plive); +px_void PX_LiveReset(PX_Live *plive); +px_void PX_LiveStop(PX_Live *plive); + +px_void PX_LiveRender(px_surface *psurface,PX_Live *plive,px_int x,px_int y,PX_ALIGN refPoint,px_dword elapsed); + + +#endif diff --git a/UI/PainterEngine/kernel/PX_MODBUS.c b/UI/PainterEngine/kernel/PX_MODBUS.c new file mode 100644 index 0000000..daa22c3 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_MODBUS.c @@ -0,0 +1,27 @@ +#include "PX_MODBUS.h" + +px_int PX_ModbusPacketBuild(PX_ModbusPacket *packet,px_byte opcode,px_word startAddr,px_word regcount, px_byte *buffer,px_int size) +{ + packet->magic=0; + packet->protocol=0; + packet->size=size+6; + packet->startAddress[0]=0xff&(startAddr>>8); + packet->startAddress[1]=0xff&(startAddr); + packet->regcount[0]=0xff&(regcount>>8); + packet->regcount[1]=0xff&(regcount); + packet->opcode=opcode; + packet->unit=1; + if(size) + PX_memcpy(packet->data,buffer,size); + return size+9; +} + +px_int PX_ModbusWrite(PX_ModbusPacket *packet,px_word startAddr,px_word regcount, px_word *buffer,px_int size) +{ + return PX_ModbusPacketBuild(packet,0x06,startAddr,regcount,(px_byte *)buffer,size*2); +} + +px_int PX_ModbusRead(PX_ModbusPacket *packet,px_word startAddr,px_word regcount) +{ + return PX_ModbusPacketBuild(packet,0x03,startAddr,regcount,(px_byte *)"",0); +} diff --git a/UI/PainterEngine/kernel/PX_MODBUS.h b/UI/PainterEngine/kernel/PX_MODBUS.h new file mode 100644 index 0000000..78c543e --- /dev/null +++ b/UI/PainterEngine/kernel/PX_MODBUS.h @@ -0,0 +1,26 @@ +//Modbus RTU +//Code by DBinary 2019-11-25 for PainterEngine + +#ifndef PX_MODBUS_H +#define PX_MODBUS_H +#include "../core/PX_Core.h" + + +typedef struct +{ + px_word protocol; + px_word magic; + px_byte size; + px_byte unit; + px_byte opcode; + px_byte startAddress[2]; + px_byte regcount[2]; + px_byte data[247]; +}PX_ModbusPacket; + +px_int PX_ModbusPacketBuild(PX_ModbusPacket *packet,px_byte opcode,px_word startAddr,px_word regcount, px_byte *buffer,px_int size); +px_int PX_ModbusWrite(PX_ModbusPacket *packet,px_word startAddr,px_word regcount, px_word *buffer,px_int size); +px_int PX_ModbusRead(PX_ModbusPacket *packet,px_word startAddr,px_word regcount); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_MQTT.c b/UI/PainterEngine/kernel/PX_MQTT.c new file mode 100644 index 0000000..e45ba7c --- /dev/null +++ b/UI/PainterEngine/kernel/PX_MQTT.c @@ -0,0 +1,1052 @@ +#include "PX_MQTT.h" +px_int PX_MQTT_GetSize(px_byte *sizeBuffer) +{ + px_int multiplier=1; + px_int value=0; + px_byte encodeByte; + px_int i=0; + do + { + encodeByte=sizeBuffer[i]; + i++; + value+=(encodeByte&127)*multiplier; + multiplier*=128; + if (multiplier>128*128*128) + { + return 0; + } + } while ((encodeByte&128)!=0); + return value; +} +px_uint PX_MQTT_GetContentSizeOfSize(px_int size) +{ + px_int len=0; + do + { + size/=128; + len++; + } while (size>0); + return len; +} +px_uint PX_MQTTCatRemainingLength(px_memory *memory,px_int size) +{ + px_int encode=0; + px_int len=0; + do + { + encode=size%128; + size/=128; + if(size>0) + { + encode|=128; + } + if(!PX_MemoryCat(memory,&encode,1)) return 0; + len++; + } while (size>0); + return len; +} +px_bool PX_MQTTCatUTF8String(px_memory *memory,const px_char *pstring) +{ + px_word size=PX_strlen(pstring); + px_byte sizeEncode[2]; + sizeEncode[0]=(px_byte)((size&0xff00)>>8); + sizeEncode[1]=(px_byte)((size&0xff)); + if(!PX_MemoryCat(memory,&sizeEncode,2))return PX_FALSE; + return PX_MemoryCat(memory,pstring,PX_strlen(pstring)); +} +px_bool PX_MQTTCatData(px_memory *memory,const px_void *payload,px_int size) +{ + if(!PX_MQTTCatRemainingLength(memory,size)) return PX_FALSE; + return PX_MemoryCat(memory,payload,size); +} +px_bool PX_MQTTInitialize(PX_MQTT *Mqtt,px_memorypool *buildmp,PX_Linker *linker) +{ + PX_memset(Mqtt,0,sizeof(PX_MQTT)); + Mqtt->linker=linker; + Mqtt->buildmp=buildmp; + PX_MemoryInitialize(buildmp,&Mqtt->topic); + PX_MemoryInitialize(buildmp,&Mqtt->payload); + return PX_TRUE; +} +PX_MQTT_CONNECT PX_MQTT_WaitConnACK(PX_MQTT *Mqtt) +{ + px_byte readBuffer[4]; + px_int readSize=PX_LinkerRead(Mqtt->linker,readBuffer,sizeof(readBuffer)); + if(readSize==0) + { + return PX_MQTT_CONNECT_ERROR_DISCONNECT; + } + if (readSize==4) + { + typedef struct + { + px_byte byte1; + px_byte byte2; + px_byte sp; + px_byte ret; + }PX_MQTT_CONNACK; + PX_MQTT_CONNACK *pACK=(PX_MQTT_CONNACK *)readBuffer; + + if (pACK->ret==0) + { + return PX_MQTT_CONNECT_SUCCEEDED; + } + else + { + switch(pACK->ret) + { + case 0x01: + { + return PX_MQTT_CONNECT_ERROR_PROTOCAL_NO_SUPPORT; + } + //break; + case 0x02: + { + return PX_MQTT_CONNECT_ERROR_SESSION_ILLEGAL; + } + //break; + case 0x03: + { + return PX_MQTT_CONNECT_ERROR_SERVER_CRASH; + } + //break; + case 0x04: + { + return PX_MQTT_CONNECT_ERROR_USER_WRONG; + } + //break; + case 0x05: + { + return PX_MQTT_CONNECT_ERROR_ILLEGAL; + } + //break; + default: + return PX_MQTT_CONNECT_ERROR_UNKNOW; + //break; + } + } + + } + return PX_MQTT_CONNECT_ERROR_UNKNOW; +} +px_bool PX_MQTT_SendConnect(PX_MQTT *Mqtt,PX_MQTT_ConnectDesc connectDesc) +{ + px_memory packbuild; + px_uint size=0; + px_int i; + //Generate Session + for (i=0;iconnectionKeySession)-1;i++) + { + Mqtt->connectionKeySession[i]='a'+PX_rand()%26; + } + Mqtt->connectionKeySession[i]=0; + + PX_MemoryInitialize(Mqtt->buildmp,&packbuild); + //fixed header + do + { + typedef struct + { + px_byte flag:4; + px_byte type:4; + }PX_MQTT_FixedHeader; + + PX_MQTT_FixedHeader header; + header.flag=0; + header.type=PX_MQTT_FIXERHEADER_CONTROLLERTYPE_CONNECT; + + //10 bytes for variable header + size+=10; + + //payload size + + //connectionSession + 2byte size + size+=PX_MQTT_CONNECTION_SESSION_SIZE+2; + + if (connectDesc.willTopic&&connectDesc.willTopic[0]) + { + size+=PX_strlen(connectDesc.willTopic)+2; + } + + if (connectDesc.willContent&&connectDesc.willSize) + { + size+=connectDesc.willSize+2; + } + + + if (connectDesc.userName) + { + size+=PX_strlen(connectDesc.userName)+2; + } + + if (connectDesc.password) + { + size+=PX_strlen(connectDesc.password)+2; + } + + + PX_MemoryCat(&packbuild,&header,sizeof(header)); + PX_MQTTCatRemainingLength(&packbuild,size); + + }while(0); + + //Variable Header + + //Protocol Name 6 bytes + do + { + typedef struct + { + px_byte size_MSB; + px_byte size_LSB; + px_byte cMQTT[4]; + }PX_MQTT_VariableHeader; + + PX_MQTT_VariableHeader variableHeader; + variableHeader.size_MSB=0; + variableHeader.size_LSB=4; + PX_memcpy(variableHeader.cMQTT,"MQTT",4); + + PX_MemoryCat(&packbuild,&variableHeader,sizeof(variableHeader)); + } while (0); + + //Protocol level byte 1 bytes + do + { + typedef struct + { + px_byte level; + }PX_MQTT_ProtocalLevel; + + PX_MQTT_ProtocalLevel Protocallevel; + Protocallevel.level=0x04; + + PX_MemoryCat(&packbuild,&Protocallevel,sizeof(Protocallevel)); + } while (0); + + //Connection flag 1 bytes + do + { + typedef struct + { + px_byte reserved:1; + px_byte cleanSession:1; + px_byte Willflag:1; + px_byte WillQoS:2; + px_byte WillRetain:1; + px_byte PasswordFlag:1; + px_byte UserNameFlag:1; + }PX_MQTT_ConnectionFlag; + + PX_MQTT_ConnectionFlag ConnectionFlag; + ConnectionFlag.reserved=0; + ConnectionFlag.cleanSession=connectDesc.CleanSession; + if (connectDesc.willSize&&connectDesc.willContent) + { + ConnectionFlag.Willflag=1; + } + else + { + ConnectionFlag.Willflag=0; + } + + ConnectionFlag.WillQoS=connectDesc.willQoS; + ConnectionFlag.WillRetain=connectDesc.willRetain; + + if (connectDesc.userName) + { + ConnectionFlag.UserNameFlag=1; + } + else + { + ConnectionFlag.UserNameFlag=0; + } + + + if (connectDesc.password) + { + ConnectionFlag.PasswordFlag=1; + } + else + { + ConnectionFlag.PasswordFlag=0; + } + + PX_MemoryCat(&packbuild,&ConnectionFlag,sizeof(ConnectionFlag)); + } while (0); + + + //KeepAlive time 2 Bytes + do + { + typedef struct + { + px_byte Alive_MSB; + px_byte Alive_LSB; + }PX_MQTT_ConnectionAlive; + + PX_MQTT_ConnectionAlive ConnectionAlive; + + ConnectionAlive.Alive_MSB=(connectDesc.KeepAliveTime&0xff00)>>8; + ConnectionAlive.Alive_LSB=(connectDesc.KeepAliveTime&0xff); + + PX_MemoryCat(&packbuild,&ConnectionAlive,sizeof(ConnectionAlive)); + } while (0); + + //ClientID + do + { + PX_MQTTCatUTF8String(&packbuild,Mqtt->connectionKeySession); + } while (0); + + //will topic + do + { + if (connectDesc.willTopic&&connectDesc.willTopic[0]) + { + PX_MQTTCatUTF8String(&packbuild,connectDesc.willTopic); + } + + } while (0); + + + //will content + do + { + if (connectDesc.willContent) + { + px_word willsize=connectDesc.willSize; + px_byte willsizeEncode[2]; + willsizeEncode[0]=(px_byte)((willsize&0xff00)>>8); + willsizeEncode[1]=(px_byte)((willsize&0xff)); + PX_MemoryCat(&packbuild,willsizeEncode,2); + PX_MemoryCat(&packbuild,connectDesc.willContent,willsize); + } + + } while (0); + + //userName + do + { + if (connectDesc.userName) + { + PX_MQTTCatUTF8String(&packbuild,connectDesc.userName); + } + } while (0); + + //password + do + { + if (connectDesc.password) + { + PX_MQTTCatUTF8String(&packbuild,connectDesc.password); + } + + } while (0); + + if(!PX_LinkerWrite(Mqtt->linker,packbuild.buffer,packbuild.usedsize)) + { + PX_MemoryFree(&packbuild); + return PX_FALSE; + } + PX_MemoryFree(&packbuild); + return PX_TRUE; +} +PX_MQTT_CONNECT PX_MQTTConnect(PX_MQTT *Mqtt,PX_MQTT_ConnectDesc connectDesc) +{ + if (PX_MQTT_SendConnect(Mqtt,connectDesc)) + { + return PX_MQTT_WaitConnACK(Mqtt); + } + return PX_MQTT_CONNECT_ERROR_DISCONNECT; +} +px_bool PX_MQTT_SendPublih(PX_MQTT *Mqtt,PX_MQTT_PublishDesc publishDesc) +{ + px_memory packbuild; + PX_MemoryInitialize(Mqtt->buildmp,&packbuild); + + //Fixed Header + do + { + typedef struct + { + unsigned int ratain:1; + unsigned int QoS:2; + unsigned int DUP:1; + unsigned int Type:4; + }PX_MQTT_FixedHeader; + px_int size=0; + PX_MQTT_FixedHeader header; + + header.ratain=publishDesc.retain; + header.DUP=0; + header.QoS=publishDesc.qosLevel; + header.Type=0x03; + + PX_MemoryCat(&packbuild,&header,1); + + //variable header + size+=PX_strlen(publishDesc.Topic)+2; + + //Packet Identifier + if (publishDesc.qosLevel==PX_MQTT_QOS_LEVEL_1||publishDesc.qosLevel==PX_MQTT_QOS_LEVEL_2) + { + size+=2; + } + + size+=publishDesc.payloadSize; + + PX_MQTTCatRemainingLength(&packbuild,size); + + } while (0); + + //variable header + do + { + PX_MQTTCatUTF8String(&packbuild,publishDesc.Topic); + if (publishDesc.qosLevel==PX_MQTT_QOS_LEVEL_1||publishDesc.qosLevel==PX_MQTT_QOS_LEVEL_2) + { + Mqtt->identify++; + PX_MemoryCat(&packbuild,&Mqtt->identify,2); + + } + }while(0); + + //payload + PX_MemoryCat(&packbuild,publishDesc.payload,publishDesc.payloadSize); + + if(!PX_LinkerWrite(Mqtt->linker,packbuild.buffer,packbuild.usedsize)) + { + PX_MemoryFree(&packbuild); + return PX_FALSE; + } + PX_MemoryFree(&packbuild); + return PX_TRUE; +} +px_bool PX_MQTT_WaitPUBACK(PX_MQTT *Mqtt) +{ + px_byte readBuffer[4]; + px_int readSize=PX_LinkerRead(Mqtt->linker,readBuffer,sizeof(readBuffer)); + if(readSize==0) + { + return PX_FALSE; + } + if (readSize==4) + { + typedef struct + { + px_byte b1; + px_byte b2; + px_word identify; + }PX_MQTT_PUBACK; + PX_MQTT_PUBACK *pAck=(PX_MQTT_PUBACK *)readBuffer; + if (pAck->b1==64&&pAck->b2==2&&pAck->identify==Mqtt->identify) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTT_SendPUBACK(PX_MQTT *Mqtt,px_word identify) +{ + typedef struct + { + px_byte b1; + px_byte b2; + px_word identify; + }PX_MQTT_PUBACK; + PX_MQTT_PUBACK Ack; + Ack.b1=64; + Ack.b2=2; + Ack.identify=identify; + + return PX_LinkerWrite(Mqtt->linker,&Ack,sizeof(Ack)); +} +px_bool PX_MQTT_WaitPUBREC(PX_MQTT *Mqtt) +{ + px_byte readBuffer[4]; + px_int readSize=PX_LinkerRead(Mqtt->linker,readBuffer,sizeof(readBuffer)); + if(readSize==0) + { + return PX_FALSE; + } + if (readSize==4) + { + typedef struct + { + px_byte b1; + px_byte b2; + px_word identify; + }PX_MQTT_PUBACK; + PX_MQTT_PUBACK *pAck=(PX_MQTT_PUBACK *)readBuffer; + if (pAck->b1==(64+16)&&pAck->b2==2&&pAck->identify==Mqtt->identify) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTT_SendPUBREC(PX_MQTT *Mqtt,px_word identify) +{ + typedef struct + { + px_byte b1; + px_byte b2; + px_word identify; + }PX_MQTT_PUBREC; + PX_MQTT_PUBREC rec; + rec.b1=(64+16); + rec.b2=2; + rec.identify=identify; + return PX_LinkerWrite(Mqtt->linker,&rec,sizeof(rec)); +} +px_bool PX_MQTT_SendPUBREL(PX_MQTT *Mqtt) +{ + typedef struct + { + px_byte b1; + px_byte b2; + px_word identify; + }PX_MQTT_PUBREL; + + PX_MQTT_PUBREL pubrel; + pubrel.b1=64+32+2; + pubrel.b2=2; + pubrel.identify=Mqtt->identify; + if(!PX_LinkerWrite(Mqtt->linker,&pubrel,sizeof(pubrel))) + { + return PX_FALSE; + } + return PX_TRUE; +} +px_bool PX_MQTT_WaitPUBREL(PX_MQTT *Mqtt,px_word identify) +{ + px_byte readBuffer[4]; + px_int readSize=PX_LinkerRead(Mqtt->linker,readBuffer,sizeof(readBuffer)); + if(readSize==0) + { + return PX_FALSE; + } + if (readSize==4) + { + typedef struct + { + px_byte b1; + px_byte b2; + px_word identify; + }PX_MQTT_PUBREL; + PX_MQTT_PUBREL *pRel=(PX_MQTT_PUBREL *)readBuffer; + if (pRel->b1==(64+32+2)&&pRel->b2==2&&pRel->identify==identify) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTT_SendPUBCOMP(PX_MQTT *Mqtt,px_word identify) +{ + typedef struct + { + px_byte b1; + px_byte b2; + px_word identify; + }PX_MQTT_PUBCOMP; + + PX_MQTT_PUBCOMP pubcomp; + pubcomp.b1=64+32+16; + pubcomp.b2=2; + pubcomp.identify=identify; + if(!PX_LinkerWrite(Mqtt->linker,&pubcomp,sizeof(pubcomp))) + { + return PX_FALSE; + } + return PX_TRUE; +} +px_bool PX_MQTT_WaitPUBCOMP(PX_MQTT *Mqtt) +{ + px_byte readBuffer[4]; + px_int readSize=PX_LinkerRead(Mqtt->linker,readBuffer,sizeof(readBuffer)); + if(readSize==0) + { + return PX_FALSE; + } + if (readSize==4) + { + typedef struct + { + px_byte b1; + px_byte b2; + px_word identify; + }PX_MQTT_PUBACK; + PX_MQTT_PUBACK *pAck=(PX_MQTT_PUBACK *)readBuffer; + if (pAck->b1==(64+32+16)&&pAck->b2==2&&pAck->identify==Mqtt->identify) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTTPublish(PX_MQTT *Mqtt,PX_MQTT_PublishDesc publishDesc) +{ + if(PX_MQTT_SendPublih(Mqtt,publishDesc)) + { + switch(publishDesc.qosLevel) + { + case PX_MQTT_QOS_LEVEL_0: + { + return PX_TRUE; + } + //break; + case PX_MQTT_QOS_LEVEL_1: + { + if (PX_MQTT_WaitPUBACK(Mqtt)) + { + return PX_TRUE; + } + } + break; + case PX_MQTT_QOS_LEVEL_2: + { + if (PX_MQTT_WaitPUBREC(Mqtt)) + { + if (PX_MQTT_SendPUBREL(Mqtt)) + { + if (PX_MQTT_WaitPUBCOMP(Mqtt)) + { + return PX_TRUE; + } + } + } + return PX_FALSE; + } + //break; + } + } + return PX_FALSE; +} +px_bool PX_MQTT_SendSubscribe(PX_MQTT *Mqtt,PX_MQTT_SubscribeDesc subscribeDesc) +{ + px_memory packbuild; + PX_MemoryInitialize(Mqtt->buildmp,&packbuild); + + //header + do + { + + typedef struct + { + px_byte b1; + }PX_MQTT_FixedHeader; + px_int size=0; + PX_MQTT_FixedHeader fixedHeader; + fixedHeader.b1=128+2; + + PX_MemoryCat(&packbuild,&fixedHeader,1); + + //variable + size+=2; + + //payload + + //topic + size+=2+PX_strlen(subscribeDesc.Topic); + + //Requested + size+=1; + + PX_MQTTCatRemainingLength(&packbuild,size); + } while (0); + + //variable header + do + { + Mqtt->identify++; + PX_MemoryCat(&packbuild,&Mqtt->identify,2); + }while(0); + + //payload + + //topic + do + { + PX_MQTTCatUTF8String(&packbuild,subscribeDesc.Topic); + }while(0); + + //qos + do + { + px_byte qos=subscribeDesc.qosLevel; + PX_MemoryCat(&packbuild,&qos,1); + } while (0); + + + if(!PX_LinkerWrite(Mqtt->linker,packbuild.buffer,packbuild.usedsize)) + { + PX_MemoryFree(&packbuild); + return PX_FALSE; + } + PX_MemoryFree(&packbuild); + return PX_TRUE; + +} +px_bool PX_MQTT_WaitSUBACK(PX_MQTT *Mqtt) +{ + px_byte readBuffer[5]; + px_int readSize=PX_LinkerRead(Mqtt->linker,readBuffer,sizeof(readBuffer)); + if(readSize==0) + { + return PX_FALSE; + } + if (readSize==5) + { + typedef struct + { + px_byte b1; + px_byte remainingLength; + px_word identify; + px_byte qos; + }PX_MQTT_PUBACK; + PX_MQTT_PUBACK *pAck=(PX_MQTT_PUBACK *)readBuffer; + if (pAck->b1==(128+16)&&pAck->remainingLength==3&&pAck->identify==Mqtt->identify&&(pAck->qos&0x80)==0) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTTSubscribe(PX_MQTT *Mqtt,PX_MQTT_SubscribeDesc subscribeDesc) +{ + if (PX_MQTT_SendSubscribe(Mqtt,subscribeDesc)) + { + if (PX_MQTT_WaitSUBACK(Mqtt)) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTT_SendUnsubscribe(PX_MQTT *Mqtt,const px_char *Topic) +{ + px_memory packbuild; + PX_MemoryInitialize(Mqtt->buildmp,&packbuild); + + //header + do + { + + typedef struct + { + px_byte b1; + }PX_MQTT_FixedHeader; + px_int size=0; + PX_MQTT_FixedHeader fixedHeader; + fixedHeader.b1=128+32+2; + + PX_MemoryCat(&packbuild,&fixedHeader,1); + + //variable + size+=2; + + //payload + + //topic + size+=2+PX_strlen(Topic); + + PX_MQTTCatRemainingLength(&packbuild,size); + } while (0); + + //variable header + do + { + Mqtt->identify++; + PX_MemoryCat(&packbuild,&Mqtt->identify,2); + }while(0); + + //payload + + //topic + do + { + PX_MQTTCatUTF8String(&packbuild,Topic); + }while(0); + + if(!PX_LinkerWrite(Mqtt->linker,packbuild.buffer,packbuild.usedsize)) + { + PX_MemoryFree(&packbuild); + return PX_FALSE; + } + PX_MemoryFree(&packbuild); + return PX_TRUE; + +} +px_bool PX_MQTT_WaitUNSUBACK(PX_MQTT *Mqtt) +{ + px_byte readBuffer[4]; + px_int readSize=PX_LinkerRead(Mqtt->linker,readBuffer,sizeof(readBuffer)); + if(readSize==0) + { + return PX_FALSE; + } + if (readSize==4) + { + typedef struct + { + px_byte b1; + px_byte remainingLength; + px_word identify; + }PX_MQTT_PUBACK; + PX_MQTT_PUBACK *pAck=(PX_MQTT_PUBACK *)readBuffer; + if (pAck->b1==(128+32+16)&&pAck->remainingLength==2&&pAck->identify==Mqtt->identify) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTTUnsubscribe(PX_MQTT *Mqtt,const px_char *Topic) +{ + if (PX_MQTT_SendUnsubscribe(Mqtt,Topic)) + { + if (PX_MQTT_WaitUNSUBACK(Mqtt)) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTT_SendPINGREQ(PX_MQTT *Mqtt) +{ + typedef struct + { + px_byte b1; + px_byte b2; + }PX_MQTT_PINGREQ; + + PX_MQTT_PINGREQ pingreq; + pingreq.b1=128+64+16; + pingreq.b2=0; + + if(!PX_LinkerWrite(Mqtt->linker,&pingreq,2)) + { + return PX_FALSE; + } + return PX_TRUE; +} +px_bool PX_MQTT_WaitPINGRESP(PX_MQTT *Mqtt) +{ + px_byte readBuffer[2]; + px_int readSize=PX_LinkerRead(Mqtt->linker,readBuffer,sizeof(readBuffer)); + if(readSize==0) + { + return PX_FALSE; + } + if (readSize==2) + { + typedef struct + { + px_byte b1; + px_byte remainingLength; + }PX_MQTT_PINGRESP; + PX_MQTT_PINGRESP *pAck=(PX_MQTT_PINGRESP *)readBuffer; + if (pAck->b1==192&&pAck->remainingLength==0) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_MQTTPingReq(PX_MQTT *Mqtt) +{ + if (PX_MQTT_SendPINGREQ(Mqtt)) + { + if (PX_MQTT_WaitPINGRESP(Mqtt)) + { + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_bool PX_MQTTListen(PX_MQTT *Mqtt) +{ + + px_word id; + px_byte rByte; + px_int size=0; + PX_MQTT_QOS_LEVEL qos; + + if (!PX_LinkerRead(Mqtt->linker,&rByte,1)) + { + return PX_FALSE; + } + + //is Publish? + do + { + typedef struct + { + unsigned int ratain:1; + unsigned int QoS:2; + unsigned int DUP:1; + unsigned int Type:4; + }PX_MQTT_FixedHeader; + + PX_MQTT_FixedHeader *pFixHeader=(PX_MQTT_FixedHeader *)&rByte; + + if (pFixHeader->Type!=3) + { + return PX_FALSE; + } + qos=(PX_MQTT_QOS_LEVEL)pFixHeader->QoS; + } while (0); + + //getsize + do + { + px_int multiplier=1; + while (PX_TRUE) + { + if (!PX_LinkerRead(Mqtt->linker,&rByte,1)) + { + return PX_FALSE; + } + size+=(rByte&127)*multiplier; + if ((rByte&128)!=0) + { + multiplier*=128; + } + else + { + break; + } + if (multiplier>128*128*128) + { + return PX_FALSE; + } + } + } while (0); + + //recv Topic + do + { + px_int utf8Size=0; + PX_MemoryClear(&Mqtt->topic); + if (!PX_LinkerRead(Mqtt->linker,&rByte,1)) + { + return PX_FALSE; + } + utf8Size=rByte*256; + size--; + + if (!PX_LinkerRead(Mqtt->linker,&rByte,1)) + { + return PX_FALSE; + } + utf8Size+=rByte; + size--; + + while (utf8Size) + { + if (!PX_LinkerRead(Mqtt->linker,&rByte,1)) + { + return PX_FALSE; + } + PX_MemoryCat(&Mqtt->topic,&rByte,1); + utf8Size--; + size--; + } + } while (0); + PX_MemoryCat(&Mqtt->topic,"",1); + + //recv ID + do + { + if (!PX_LinkerRead(Mqtt->linker,&id,2)) + { + return PX_FALSE; + } + size-=2; + } while (0); + + + //recv payload + do + { + px_int rsize,retSize; + px_byte cache[128]; + PX_MemoryClear(&Mqtt->payload); + while (size) + { + if (size>sizeof(cache)) + { + rsize=sizeof(cache); + } + else + { + rsize=size; + } + if ((retSize=PX_LinkerRead(Mqtt->linker,cache,rsize))==0) + { + return PX_FALSE; + } + size-=retSize; + PX_MemoryCat(&Mqtt->payload,cache,retSize); + } + } while (0); + + switch (qos) + { + case PX_MQTT_QOS_LEVEL_0: + return PX_TRUE; + //break; + case PX_MQTT_QOS_LEVEL_1: + if(!PX_MQTT_SendPUBACK(Mqtt,id))return PX_FALSE; + return PX_TRUE; + //break; + case PX_MQTT_QOS_LEVEL_2: + { + if (!PX_MQTT_SendPUBREC(Mqtt,id)) + { + return PX_FALSE; + } + if (!PX_MQTT_WaitPUBREL(Mqtt,id)) + { + return PX_FALSE; + } + if (!PX_MQTT_SendPUBCOMP(Mqtt,id)) + { + return PX_FALSE; + } + return PX_TRUE; + } + //break; + } + + + return PX_TRUE; +} + +px_bool PX_MQTT_VerifyFrame(px_byte *data,px_int size) +{ + px_byte *pdata=data; + px_int bsize=1; + px_int datasize=PX_MQTT_GetSize(data+1); + if (datasize==0) + { + return PX_FALSE; + } + while ((*pdata)&0x80) + { + bsize++; + pdata++; + } + return size>=(bsize+datasize+1); +} + + +px_void PX_MQTTFree(PX_MQTT *Mqtt) +{ + PX_MemoryFree(&Mqtt->payload); + PX_MemoryFree(&Mqtt->topic); +} + diff --git a/UI/PainterEngine/kernel/PX_MQTT.h b/UI/PainterEngine/kernel/PX_MQTT.h new file mode 100644 index 0000000..80801d8 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_MQTT.h @@ -0,0 +1,106 @@ +////////////////////////////////////////////////////////////////////////// +//MQTT 3.1.1 for PainterEngine +//code by:DBinary 2020-12-28 +////////////////////////////////////////////////////////////////////////// + +#ifndef PX_MQTT_H +#define PX_MQTT_H + +#include "../core/PX_Core.h" + +typedef enum +{ + PX_MQTT_QOS_LEVEL_0, + PX_MQTT_QOS_LEVEL_1, + PX_MQTT_QOS_LEVEL_2, +}PX_MQTT_QOS_LEVEL; + +#define PX_MQTT_DEFAULT_TIMEOUT 2000 +#define PX_MQTT_CONNECTION_SESSION_SIZE 32 + +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_RESERVED0 0 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_CONNECT 1 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_CONNACK 2 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_PUBLISH 3 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_PUBACK 4 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_PUBREC 5 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_PUBREL 6 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_PUBCOMP 7 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_SUBSCRIBE 8 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_SUBACK 9 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_UNSUBSCRIBE 10 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_UNSUBACK 11 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_PINGREQ 12 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_PINGRESP 13 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_DISCONNECT 14 +#define PX_MQTT_FIXERHEADER_CONTROLLERTYPE_RESERVED1 15 + +typedef enum +{ + PX_MQTT_STATUS_DISCONNECT, + PX_MQTT_STATUS_CONNECTING, +}PX_MQTT_STATUS; + +typedef enum +{ + PX_MQTT_CONNECT_SUCCEEDED, + PX_MQTT_CONNECT_ERROR_UNKNOW, + PX_MQTT_CONNECT_ERROR_DISCONNECT, + PX_MQTT_CONNECT_ERROR_PROTOCAL_NO_SUPPORT, + PX_MQTT_CONNECT_ERROR_SESSION_ILLEGAL, + PX_MQTT_CONNECT_ERROR_SERVER_CRASH, + PX_MQTT_CONNECT_ERROR_USER_WRONG, + PX_MQTT_CONNECT_ERROR_ILLEGAL, +}PX_MQTT_CONNECT; + +struct _PX_MQTT +{ + px_memorypool *buildmp; + px_dword sessionKey; + PX_Linker *linker; + px_dword identify; + px_memory topic; + px_memory payload; + px_char connectionKeySession[PX_MQTT_CONNECTION_SESSION_SIZE+1]; +}; +typedef struct _PX_MQTT PX_MQTT; + +typedef struct +{ + const px_char *userName; + const px_char *password; + const px_char *willTopic; + const px_void *willContent; + px_uint willSize; + px_bool willRetain; + px_bool CleanSession; + PX_MQTT_QOS_LEVEL willQoS; + px_word KeepAliveTime;//seconds +}PX_MQTT_ConnectDesc; + + +typedef struct +{ + PX_MQTT_QOS_LEVEL qosLevel; + px_bool retain; + const px_char *Topic; + const px_void *payload; + px_int payloadSize; +}PX_MQTT_PublishDesc; + +typedef struct +{ + PX_MQTT_QOS_LEVEL qosLevel; + const px_char *Topic; +}PX_MQTT_SubscribeDesc; + +px_bool PX_MQTTInitialize(PX_MQTT *Mqtt,px_memorypool *mp,PX_Linker *linker); +PX_MQTT_CONNECT PX_MQTTConnect(PX_MQTT *Mqtt,PX_MQTT_ConnectDesc connectDesc); +px_bool PX_MQTTPublish(PX_MQTT *Mqtt,PX_MQTT_PublishDesc publishDesc); +px_bool PX_MQTTSubscribe(PX_MQTT *Mqtt,PX_MQTT_SubscribeDesc subscribeDesc); +px_bool PX_MQTTUnsubscribe(PX_MQTT *Mqtt,const px_char *Topic); +px_bool PX_MQTTPingReq(PX_MQTT *Mqtt); +px_bool PX_MQTTListen(PX_MQTT *Mqtt); +px_void PX_MQTTFree(PX_MQTT *Mqtt); +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object.c b/UI/PainterEngine/kernel/PX_Object.c new file mode 100644 index 0000000..af82fd3 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object.c @@ -0,0 +1,986 @@ +#include "PX_Object.h" + + +PX_Object * PX_ObjectGetChild( PX_Object *Object,px_int Index ) +{ + PX_Object *pObject; + if (!Object) + { + return PX_NULL; + } + pObject=Object->pChilds; + while (Index>0&&pObject) + { + pObject=pObject->pNextBrother; + Index--; + } + return pObject; + +} + +static PX_Object * PX_ObjectGetObjectLink(PX_Object *pObject,const px_char payload[]) +{ + px_char id[PX_OBJECT_ID_MAXLEN]={0}; + px_int oft=0; + if (!pObject) + { + return PX_NULL; + } + + while (payload[oft]!='.'&&payload[oft]!='\0'&&oftid,id)) + { + return pObject; + } + else + { + return PX_ObjectGetObjectLink(pObject->pNextBrother,payload); + } + } + else + { + if (PX_strequ(pObject->id,id)) + { + return PX_ObjectGetObjectLink(pObject->pChilds,payload+oft); + } + else + { + return PX_ObjectGetObjectLink(pObject->pNextBrother,payload); + } + } + return PX_NULL; +} + +PX_Object * PX_ObjectGetObject(PX_Object *pObject,const px_char payload[]) +{ + px_char id[PX_OBJECT_ID_MAXLEN]={0}; + + px_int oft=0; + if (!pObject) + { + return PX_NULL; + } + + while (payload[oft]!='.'&&payload[oft]!='\0'&&oftid,id)) + { + return pObject; + } + else + { + return PX_NULL; + } + } + else + { + if (PX_strequ(pObject->id,id)) + { + return PX_ObjectGetObjectLink(pObject->pChilds,payload+oft); + } + } + return PX_NULL; +} + + +static px_void PX_ObjectSetFocusEx(PX_Object *pObject) +{ + while(pObject) + { + pObject->OnFocus=PX_TRUE; + pObject=pObject->pParent; + } +} + +static px_void PX_ObjectClearFocusEx(PX_Object *pObject) +{ + if (!pObject) + { + return; + } + pObject->OnFocus=PX_FALSE; + pObject->OnFocusNode=PX_FALSE; + PX_ObjectClearFocusEx(pObject->pChilds); + PX_ObjectClearFocusEx(pObject->pNextBrother); +} + +px_void PX_ObjectClearFocus(PX_Object *pObject) +{ + PX_Object *pClearObject=pObject; + if (!pObject->OnFocus) + { + return; + } + while(pClearObject->pParent) + { + pClearObject=pClearObject->pParent; + + if (pClearObject->OnFocusNode) + { + pClearObject=pClearObject->pChilds; + break; + } + } + PX_ObjectClearFocusEx(pClearObject); +} + +px_void PX_ObjectSetFocus(PX_Object *pObject) +{ + PX_Object *pClearObject=pObject; + while(pClearObject->pParent) + { + pClearObject=pClearObject->pParent; + if (pClearObject->OnFocusNode) + { + pClearObject=pClearObject->pChilds; + break; + } + } + PX_ObjectClearFocusEx(pClearObject); + pObject->OnFocusNode=PX_TRUE; + PX_ObjectSetFocusEx(pObject); +} + + +PX_Object * PX_ObjectGetRoot(PX_Object *Object) +{ + while(Object->pParent) + { + Object=Object->pParent; + } + return Object; +} + +PX_Object_Event PX_OBJECT_BUILD_EVENT(px_uint Event) +{ + PX_Object_Event e; + PX_memset(&e,0,sizeof(e)); + e.Event=Event; + return e; +} + +PX_Object_Event PX_OBJECT_BUILD_EVENT_STRING(px_uint Event,const px_char *content) +{ + PX_Object_Event e; + PX_memset(&e,0,sizeof(e)); + e.Event=Event; + PX_Object_Event_SetStringPtr(&e,(px_void *)content); + return e; +} + +PX_Object_Event PX_Object_Event_CursorOffset(PX_Object_Event e,px_point offset) +{ + switch(e.Event) + { + case PX_OBJECT_EVENT_CURSORMOVE: + case PX_OBJECT_EVENT_CURSORUP: + case PX_OBJECT_EVENT_CURSORRDOWN: + case PX_OBJECT_EVENT_CURSORDOWN: + case PX_OBJECT_EVENT_CURSORRUP: + case PX_OBJECT_EVENT_CURSOROVER: + case PX_OBJECT_EVENT_CURSOROUT: + case PX_OBJECT_EVENT_CURSORWHEEL: + case PX_OBJECT_EVENT_CURSORCLICK: + case PX_OBJECT_EVENT_CURSORDRAG: + PX_Object_Event_SetCursorX(&e,PX_Object_Event_GetCursorX(e)+offset.x); + PX_Object_Event_SetCursorY(&e,PX_Object_Event_GetCursorY(e)+offset.y); + return e; + default: + return e; + } +} + +px_float PX_Object_Event_GetCursorX(PX_Object_Event e) +{ + return e.Param_float[0]; +} + +px_float PX_Object_Event_GetCursorY(PX_Object_Event e) +{ + return e.Param_float[1]; +} + + +px_float PX_Object_Event_GetCursorZ(PX_Object_Event e) +{ + return e.Param_float[2]; +} + +px_int PX_Object_Event_GetCursorIndex(PX_Object_Event e) +{ + return e.Param_int[2]; +} + +px_float PX_Object_Event_GetWidth(PX_Object_Event e) +{ + return e.Param_float[0]; +} + +px_float PX_Object_Event_GetHeight(PX_Object_Event e) +{ + return e.Param_float[1]; +} + +px_int PX_Object_Event_GetIndex(PX_Object_Event e) +{ + return e.Param_int[0]; +} + +px_void PX_Object_Event_SetWidth(PX_Object_Event *e,px_float w) +{ + e->Param_float[0]=w; +} + +px_void PX_Object_Event_SetHeight(PX_Object_Event *e,px_float h) +{ + e->Param_float[1]=h; +} + +px_void PX_Object_Event_SetCursorX(PX_Object_Event *e,px_float x) +{ + e->Param_float[0]=x; +} + +px_void PX_Object_Event_SetCursorY(PX_Object_Event *e,px_float y) +{ + e->Param_float[1]=y; +} + +px_void PX_Object_Event_SetCursorZ(PX_Object_Event *e,px_float z) +{ + e->Param_float[2]=z; +} + +px_void PX_Object_Event_SetCursorIndex(PX_Object_Event *e,px_int index) +{ + e->Param_int[2]=index; +} + +px_float PX_Object_Event_GetScaleCursorX(PX_Object_Event e) +{ + return e.Param_float[0]; +} + +px_float PX_Object_Event_GetScaleCursorY(PX_Object_Event e) +{ + return e.Param_float[1]; +} + +px_float PX_Object_Event_GetScaleCursorZ(PX_Object_Event e) +{ + return e.Param_float[2]; +} + +px_void PX_Object_Event_SetScaleCursorX(PX_Object_Event *e,px_float x) +{ + e->Param_float[0]=x; +} + +px_void PX_Object_Event_SetScaleCursorY(PX_Object_Event *e,px_float y) +{ + e->Param_float[1]=y; +} + +px_void PX_Object_Event_SetScaleCursorZ(PX_Object_Event *e,px_float z) +{ + e->Param_float[2]=z; +} + +px_uint PX_Object_Event_GetKeyDown(PX_Object_Event e) +{ + return e.Param_uint[0]; +} + +px_void PX_Object_Event_SetKeyDown(PX_Object_Event *e,px_uint key) +{ + e->Param_uint[0]=key; +} + +px_void PX_Object_Event_SetKeyUp(PX_Object_Event *e,px_uint key) +{ + e->Param_uint[0]=key; +} + +px_char* PX_Object_Event_GetStringPtr(PX_Object_Event e) +{ + return (px_char *)e.Param_ptr[0]; +} + +px_void* PX_Object_Event_GetDataPtr(PX_Object_Event e) +{ + return (px_void *)e.Param_ptr[0]; +} + + +px_void PX_Object_Event_SetStringPtr(PX_Object_Event *e,px_void *ptr) +{ + e->Param_ptr[0]=ptr; +} + +px_void PX_Object_Event_SetDataPtr(PX_Object_Event *e,px_void *ptr) +{ + e->Param_ptr[0]=ptr; +} + +px_void PX_Object_Event_SetIndex(PX_Object_Event *e,px_int index) +{ + e->Param_int[0]=index; +} + +PX_Object * PX_ObjectCreate(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght) +{ + + PX_Object *pObject=(PX_Object *)MP_Malloc(mp,sizeof(PX_Object)); + if (pObject==PX_NULL) + { + return PX_NULL; + } + + PX_ObjectInitialize(mp,pObject,Parent,x,y,z,Width,Height,Lenght); + + return pObject; +} + + + +PX_Object * PX_ObjectCreateEx(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght,px_int type,Function_ObjectUpdate Func_ObjectUpdate,Function_ObjectRender Func_ObjectRender,Function_ObjectFree Func_ObjectFree,px_void *desc,px_int size) +{ + PX_Object *pObject=PX_ObjectCreate(mp,Parent,x,y,z,Width,Height,Lenght); + if (pObject) + { + pObject->pObject=MP_Malloc(mp,size); + if (!pObject->pObject) + { + MP_Free(mp,pObject); + return PX_NULL; + } + if (desc) + { + PX_memcpy(pObject->pObject,desc,size); + } + else + { + PX_memset(pObject->pObject,0,size); + } + + pObject->Type=type; + pObject->Func_ObjectFree=Func_ObjectFree; + pObject->Func_ObjectRender=Func_ObjectRender; + pObject->Func_ObjectUpdate=Func_ObjectUpdate; + } + return pObject; +} + + +px_void PX_ObjectGetInheritXY(PX_Object *Object,px_float *x,px_float *y) +{ + *x=0; + *y=0; + Object=Object->pParent; + while (Object) + { + *x+=Object->x; + *y+=Object->y; + Object=Object->pParent; + } +} + +static px_void PX_Object_ObjectEventFree( PX_Object **Object ) +{ + PX_OBJECT_EventAction *pNext,*pCur;; + //PX_Object_Free Events linker + pCur=(*Object)->pEventActions; + while (pCur) + { + pNext=pCur->pNext; + MP_Free((*Object)->mp,pCur); + pCur=pNext; + } + + (*Object)->pEventActions=PX_NULL; +} + + + +static px_void PX_Object_ObjectFree( PX_Object *Object ) +{ + PX_Object_ObjectEventFree(&Object); + if (Object->Func_ObjectFree!=0) + { + Object->Func_ObjectFree(Object); + } + if(Object->pObject) + MP_Free(Object->mp,Object->pObject); + + MP_Free(Object->mp,Object); +} + + +static px_void PX_Object_DeleteLinkerObject( PX_Object **ppObject ) +{ + PX_Object *Object=(*ppObject); + + if (Object==PX_NULL) + { + return; + } + PX_Object_DeleteLinkerObject(&Object->pNextBrother); + PX_Object_DeleteLinkerObject(&Object->pChilds); + + PX_Object_ObjectFree(Object); + + (*ppObject)=PX_NULL; +} + +px_void PX_ObjectDelete( PX_Object *pObject ) +{ + if (pObject==PX_NULL) + { + return; + } + if (pObject->OnFocus) + { + PX_ObjectClearFocus(pObject); + } + + if (pObject->pChilds!=PX_NULL) + { + PX_Object_DeleteLinkerObject(&pObject->pChilds); + } + + if (pObject->pParent!=PX_NULL) + { + if (pObject->pParent->pChilds==pObject) + { + pObject->pParent->pChilds=pObject->pNextBrother; + if(pObject->pNextBrother) + { + pObject->pNextBrother->pParent=pObject->pParent; + pObject->pNextBrother->pPreBrother=PX_NULL; + } + } + else + { + if (pObject->pPreBrother!=PX_NULL) + { + pObject->pPreBrother->pNextBrother=pObject->pNextBrother; + if(pObject->pNextBrother) + pObject->pNextBrother->pPreBrother=pObject->pPreBrother; + } + else + { + PX_ERROR("Invalid GUI Object struct"); + } + } + } + else + { + if (pObject->pPreBrother!=PX_NULL) + { + pObject->pPreBrother=pObject->pNextBrother; + } + } + + + PX_Object_ObjectFree(pObject); + +} + + +px_void PX_ObjectDeleteChilds( PX_Object *pObject ) +{ + if (pObject==PX_NULL) + { + return; + } + + if (pObject->pChilds!=PX_NULL) + { + PX_Object_DeleteLinkerObject(&pObject->pChilds); + } +} + +px_void PX_Object_ObjectLinkerUpdate( PX_Object *Object,px_uint elapsed) +{ + if (Object==PX_NULL) + { + return; + } + if (Object->Enabled) + { + if (Object->Func_ObjectUpdate!=0) + { + Object->Func_ObjectUpdate(Object,elapsed); + } + PX_Object_ObjectLinkerUpdate(Object->pChilds,elapsed); + } + PX_Object_ObjectLinkerUpdate(Object->pNextBrother,elapsed); +} + + +px_void PX_ObjectUpdate(PX_Object *Object,px_uint elapsed ) +{ + if (Object==PX_NULL) + { + PX_ASSERT(); + return; + } + if (Object->Enabled==PX_FALSE) + { + return; + } + if (Object->Func_ObjectUpdate!=0) + { + Object->Func_ObjectUpdate(Object,elapsed); + } + if (Object->pChilds!=PX_NULL) + { + PX_Object_ObjectLinkerUpdate(Object->pChilds,elapsed); + } +} + +static px_void PX_ObjectRenderEx(px_surface *pSurface, PX_Object *Object,px_uint elapsed ) +{ + if (Object==PX_NULL) + { + return; + } + + if (Object->OnFocus) + { + PX_ObjectRenderEx(pSurface,Object->pNextBrother,elapsed); + + if (Object->Visible!=PX_FALSE) + { + if (Object->Func_ObjectBeginRender) + { + Object->Func_ObjectBeginRender(pSurface,Object,elapsed); + } + + if (Object->Func_ObjectRender!=0) + { + Object->Func_ObjectRender(pSurface,Object,elapsed); + } + + PX_ObjectRenderEx(pSurface,Object->pChilds,elapsed); + + + if (Object->Func_ObjectEndRender) + { + Object->Func_ObjectEndRender(pSurface,Object,elapsed); + } + } + } + else + { + if (Object->Visible!=PX_FALSE) + { + if (Object->Func_ObjectBeginRender) + { + Object->Func_ObjectBeginRender(pSurface,Object,elapsed); + } + if (Object->Func_ObjectRender!=0) + { + Object->Func_ObjectRender(pSurface,Object,elapsed); + } + PX_ObjectRenderEx(pSurface,Object->pChilds,elapsed); + + if (Object->Func_ObjectEndRender) + { + Object->Func_ObjectEndRender(pSurface,Object,elapsed); + } + } + PX_ObjectRenderEx(pSurface,Object->pNextBrother,elapsed); + } +} + +px_void PX_ObjectRender(px_surface *pSurface, PX_Object *Object,px_uint elapsed ) +{ + if (Object==PX_NULL) + { + return; + } + + if (Object->OnFocus) + { + + if (Object->Visible!=PX_FALSE) + { + if (Object->Func_ObjectBeginRender) + { + Object->Func_ObjectBeginRender(pSurface,Object,elapsed); + } + + if (Object->Func_ObjectRender!=0) + { + Object->Func_ObjectRender(pSurface,Object,elapsed); + } + + PX_ObjectRenderEx(pSurface,Object->pChilds,elapsed); + + + if (Object->Func_ObjectEndRender) + { + Object->Func_ObjectEndRender(pSurface,Object,elapsed); + } + } + } + else + { + if (Object->Visible!=PX_FALSE) + { + if (Object->Func_ObjectBeginRender) + { + Object->Func_ObjectBeginRender(pSurface,Object,elapsed); + } + if (Object->Func_ObjectRender!=0) + { + Object->Func_ObjectRender(pSurface,Object,elapsed); + } + PX_ObjectRenderEx(pSurface,Object->pChilds,elapsed); + + if (Object->Func_ObjectEndRender) + { + Object->Func_ObjectEndRender(pSurface,Object,elapsed); + } + } + } +} + +px_bool PX_ObjectIsPointInRegion( PX_Object *pObject,px_float x,px_float y ) +{ + px_float objx,objy,objw,objh; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objw=pObject->Width; + objh=pObject->Height; + + return PX_isXYInRegion(x,y,objx,objy,objw,objh); +} + +px_bool PX_ObjectIsCursorInRegion(PX_Object *Object,PX_Object_Event e) +{ + return PX_ObjectIsPointInRegion(Object,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e)); +} + +px_float PX_ObjectGetHeight(PX_Object *Object) +{ + return Object->Height; +} + +px_float PX_ObjectGetWidth(PX_Object *Object) +{ + return Object->Width; +} + +px_void PX_ObjectAddClild(PX_Object *Parent,PX_Object *child) +{ + PX_Object *pLinker; + child->pParent=Parent; + if(Parent->pChilds==PX_NULL) + { + Parent->pChilds=child; + } + else + { + pLinker=Parent->pChilds; + while (pLinker->pNextBrother) + { + pLinker=pLinker->pNextBrother; + } + pLinker->pNextBrother=child; + child->pPreBrother=pLinker; + } + child->pNextBrother=PX_NULL; +} + +px_void PX_ObjectInitialize(px_memorypool *mp,PX_Object *pObject,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght ) +{ + PX_memset(pObject,0,sizeof(PX_Object)); + + pObject->x=x; + pObject->y=y; + pObject->z=z; + pObject->Width=Width; + pObject->Height=Height; + + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->pChilds=PX_NULL; + pObject->pObject=PX_NULL; + pObject->pNextBrother=PX_NULL; + pObject->pPreBrother=PX_NULL; + pObject->Type=PX_OBJECT_TYPE_NULL; + pObject->ReceiveEvents=PX_TRUE; + pObject->impact_target_type=0; + pObject->impact_object_type=0; + pObject->pEventActions=PX_NULL; + pObject->world_index=-1; + pObject->User_int=0; + pObject->diameter=0; + pObject->User_ptr=PX_NULL; + pObject->OnFocus=PX_FALSE; + pObject->mp=mp; + pObject->Func_ObjectFree=PX_NULL; + pObject->Func_ObjectRender=PX_NULL; + pObject->Func_ObjectUpdate=PX_NULL; + pObject->Func_ObjectLinkChild=PX_NULL; + pObject->Func_ObjectBeginRender=PX_NULL; + pObject->Func_ObjectEndRender=PX_NULL; + + if (Parent!=PX_NULL) + { + if (Parent->Func_ObjectLinkChild!=PX_NULL) + { + Parent->Func_ObjectLinkChild(Parent,pObject); + } + else + { + PX_ObjectAddClild(Parent,pObject); + } + + } +} + + +px_void PX_ObjectSetId(PX_Object *pObject,const px_char id[]) +{ + PX_strcpy(pObject->id,id,sizeof(pObject->id)); +} + +px_void PX_ObjectSetVisible( PX_Object *pObject,px_bool visible ) +{ + if(pObject!=PX_NULL) + { + if (pObject->OnFocus) + { + PX_ObjectClearFocus(pObject); + } + pObject->Visible=visible; + } +} + + +px_void PX_ObjectSetEnabled(PX_Object *Object,px_bool enabled) +{ + Object->Enabled=enabled; +} + +px_void PX_ObjectEnable(PX_Object *Object) +{ + Object->Enabled=PX_TRUE; +} + +px_void PX_ObjectDisable(PX_Object *Object) +{ + Object->Enabled=PX_FALSE; +} + +px_int PX_ObjectRegisterEvent( PX_Object *Object,px_uint Event,px_void (*ProcessFunc)(PX_Object *,PX_Object_Event e,px_void *user_ptr),px_void *user) +{ + PX_OBJECT_EventAction *pPoint; + PX_OBJECT_EventAction *pAction=(PX_OBJECT_EventAction *)MP_Malloc(Object->mp,sizeof(PX_OBJECT_EventAction)); + if (pAction==PX_NULL) + { + return PX_FALSE; + } + pAction->pNext=PX_NULL; + pAction->pPre=PX_NULL; + pAction->EventAction=Event; + pAction->EventActionFunc=ProcessFunc; + + pAction->user_ptr=user; + + pPoint=Object->pEventActions; + if (pPoint==PX_NULL) + { + Object->pEventActions=pAction; + return PX_TRUE; + } + + while(pPoint->pNext) + { + pPoint=pPoint->pNext; + } + pAction->pPre=pPoint; + pPoint->pNext=pAction; + + return PX_TRUE; +} + + +px_void PX_ObjectExecuteEvent(PX_Object *pPost,PX_Object_Event Event) +{ + PX_OBJECT_EventAction *EventAction; + + if (pPost->Visible==PX_FALSE||pPost->Enabled==PX_FALSE||pPost->ReceiveEvents==PX_FALSE) + { + return; + } + + EventAction=pPost->pEventActions; + while(EventAction) + { + if (EventAction->EventAction==PX_OBJECT_EVENT_ANY||EventAction->EventAction==Event.Event) + { + EventAction->EventActionFunc(pPost,Event,EventAction->user_ptr); + } + EventAction=EventAction->pNext; + } +} + + +px_bool PX_ObjectPostEventLink( PX_Object *pPost,PX_Object_Event Event ) +{ + if (pPost==PX_NULL) + { + return PX_TRUE; + } + + if (pPost->Visible==PX_FALSE||pPost->Enabled==PX_FALSE||pPost->ReceiveEvents==PX_FALSE) + { + if(PX_ObjectPostEventLink(pPost->pNextBrother,Event)==PX_FALSE) return PX_FALSE; + return PX_TRUE; + } + + if (pPost->OnFocus) + { + if(PX_ObjectPostEventLink(pPost->pChilds,Event)==PX_FALSE) + { + return PX_FALSE; + } + else + { + PX_ObjectExecuteEvent(pPost,Event); + } + + if (!pPost->OnFocus&&!pPost->OnLostFocusReleaseEvent) + { + return PX_ObjectPostEventLink(pPost->pNextBrother,Event); + } + + return PX_FALSE; + } + else + { + if(PX_ObjectPostEventLink(pPost->pNextBrother,Event)==PX_FALSE) return PX_FALSE; + if(PX_ObjectPostEventLink(pPost->pChilds,Event)==PX_FALSE) return PX_FALSE; + PX_ObjectExecuteEvent(pPost,Event); + if (pPost->OnFocus) + { + return PX_FALSE; + } + return PX_TRUE; + } + +} + +px_void PX_ObjectPostEvent( PX_Object *pPost,PX_Object_Event Event ) +{ + + if (pPost==PX_NULL) + { + return; + } + + if (pPost->Visible==PX_FALSE||pPost->Enabled==PX_FALSE||pPost->ReceiveEvents==PX_FALSE) + { + return; + } + + if (pPost->OnFocus) + { + if(PX_ObjectPostEventLink(pPost->pChilds,Event)==PX_FALSE) + { + if (!pPost->OnFocus) + { + PX_ObjectExecuteEvent(pPost,Event); + } + } + else + { + PX_ObjectExecuteEvent(pPost,Event); + } + return; + } + else + { + if(PX_ObjectPostEventLink(pPost->pChilds,Event)==PX_FALSE) return; + PX_ObjectExecuteEvent(pPost,Event); + return; + } +} + + +px_void PX_ObjectSetPosition( PX_Object *Object,px_float x,px_float y,px_float z) +{ + if (Object==PX_NULL) + { + PX_ASSERT(); + return; + } + + Object->x=x; + Object->y=y; + Object->z=z; +} + + + +px_void PX_ObjectSetSize( PX_Object *Object,px_float Width,px_float Height,px_float length) +{ + if (Object!=PX_NULL) + { + Object->Width=Width; + Object->Height=Height; + + } + else + { + PX_ASSERT(); + } +} + + +px_void PX_ObjectSetUserCode(PX_Object *pObject,px_int user) +{ + pObject->User_int=user; +} + +px_void PX_ObjectSetUserPointer(PX_Object *pObject,px_void *user_ptr) +{ + pObject->User_ptr=user_ptr; +} + + + + diff --git a/UI/PainterEngine/kernel/PX_Object.h b/UI/PainterEngine/kernel/PX_Object.h new file mode 100644 index 0000000..338b5f0 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object.h @@ -0,0 +1,469 @@ +#ifndef PIXELSES_OBJECT_H +#define PIXELSES_OBJECT_H + +#include "../core/PX_Core.h" +#include "PX_Animation.h" +#include "PX_Partical.h" + + +////////////////////////////////////////////////////////////////////////// +/// Common Events +////////////////////////////////////////////////////////////////////////// +#define PX_OBJECT_EVENT_ANY 0 +#define PX_OBJECT_EVENT_CURSORMOVE 1 +#define PX_OBJECT_EVENT_CURSORUP 2 +#define PX_OBJECT_EVENT_CURSORRDOWN 3 +#define PX_OBJECT_EVENT_CURSORDOWN 4 +#define PX_OBJECT_EVENT_CURSORRUP 5 +#define PX_OBJECT_EVENT_CURSOROVER 6 +#define PX_OBJECT_EVENT_CURSOROUT 7 +#define PX_OBJECT_EVENT_CURSORWHEEL 8 +#define PX_OBJECT_EVENT_CURSORCLICK 9 +#define PX_OBJECT_EVENT_CURSORDRAG 10 +#define PX_OBJECT_EVENT_STRING 11 +#define PX_OBJECT_EVENT_EXECUTE 12 +#define PX_OBJECT_EVENT_VALUECHANGED 13 +#define PX_OBJECT_EVENT_DRAGFILE 14 +#define PX_OBJECT_EVENT_KEYDOWN 15 +#define PX_OBJECT_EVENT_KEYUP 16 +#define PX_OBJECT_EVENT_IMPACT 17 +#define PX_OBJECT_EVENT_SCALE 18 +#define PX_OBJECT_EVENT_WINDOWRESIZE 19 +#define PX_OBJECT_EVENT_ONFOCUS 20 +#define PX_OBJECT_EVENT_LOSTFOCUS 21 +#define PX_OBJECT_EVENT_CANCEL 22 +#define PX_OBJECT_EVENT_CLOSE 23 +#define PX_OBJECT_EVENT_CURSORMUP 24 +#define PX_OBJECT_EVENT_CURSORMDOWN 25 +////////////////////////////////////////////////////////////////////////////// +// Type of Controls +///////////////////////////////////////////////////////////////////////////// + +enum PX_OBJECT_TYPE +{ + PX_OBJECT_TYPE_NULL , + PX_OBJECT_TYPE_LABEL , + PX_OBJECT_TYPE_PROCESSBAR , + PX_OBJECT_TYPE_IMAGE , + PX_OBJECT_TYPE_PARTICAL , + PX_OBJECT_TYPE_SLIDERBAR , + PX_OBJECT_TYPE_LIST , + PX_OBJECT_TYPE_LISTITEM , + PX_OBJECT_TYPE_PUSHBUTTON , + PX_OBJECT_TYPE_EDIT , + PX_OBJECT_TYPE_SCROLLAREA , + PX_OBJECT_TYPE_AUTOTEXT , + PX_OBJECT_TYPE_ANIMATION , + PX_OBJECT_TYPE_CURSORBUTTON , + PX_OBJECT_TYPE_VKEYBOARD , + PX_OBJECT_TYPE_VNKEYBOARD , + PX_OBJECT_TYPE_COORDINATE , + PX_OBJECT_TYPE_FILTEREDITOR , + PX_OBJECT_TYPE_CHECKBOX , + PX_OBJECT_TYPE_ROTATION , + PX_OBJECT_TYPE_MENU , + PX_OBJECT_TYPE_SELECTBAR , + PX_OBJECT_TYPE_RADIOBOX , + PX_OBJECT_TYPE_EXPLORER , + PX_OBJECT_TYPE_WIDGET , + PX_OBJECT_TYPE_SCALEBOX , + PX_OBJECT_TYPE_MESSAGEBOX , + PX_OBJECT_TYPE_PROTRACTOR , + PX_OBJECT_TYPE_TRANSFORMADAPTER, + PX_OBJECT_TYPE_PANC, + PX_OBJECT_TYPE_DESIGNERBOX, + PX_OBJECT_TYPE_JOYSTICK, + PX_OBJECT_TYPE_RINGPROCESSBAR, + PX_OBJECT_TYPE_MEMORYVIEW, + PX_OBJECT_TYPE_VARIOUS, + PX_OBJECT_TYPE_IPBOX, + PX_OBJECT_TYPE_VARBOX, + PX_OBJECT_TYPE_COMBOX, +}; + + +////////////////////////////////////////////////////////////////////////// +// +////////////////////////////////////////////////////////////////////////// + +#define PX_OBJECT_ID_MAXLEN 32 + +#define PX_OBJECT_IMAGE_LISTITEM_STYLE_NONE 0 +#define PX_OBJECT_IMAGE_LISTITEM_STYLE_BORDER 1 + +#define PX_OBJECT_IMAGE_LISTBOX_ITEMHEIGHT 18 +#define PX_OBJECT_IMAGE_LISTBOX_SLIDERWITDH 8 + +#define PX_OBJECT_IMAGE_LISTBOX_STYLE_ITEMBORDER 1 +#define PX_OBJECT_IMAGE_LISTBOX_STYLE_SELECT 2 + +#ifndef PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR +#define PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR PX_COLOR(255,48,48,48) +#endif + +#ifndef PX_OBJECT_UI_DEFAULT_CURSORCOLOR +#define PX_OBJECT_UI_DEFAULT_CURSORCOLOR PX_COLOR(255,32,32,32) +#endif + +#ifndef PX_OBJECT_UI_DEFAULT_FONTCOLOR +#define PX_OBJECT_UI_DEFAULT_FONTCOLOR PX_COLOR(255,192,192,192) +#endif + +#ifndef PX_OBJECT_UI_DEFAULT_BORDERCOLOR +#define PX_OBJECT_UI_DEFAULT_BORDERCOLOR PX_COLOR(255,192,192,192) +#endif + +#ifndef PX_OBJECT_UI_DEFAULT_PUSHCOLOR +#define PX_OBJECT_UI_DEFAULT_PUSHCOLOR PX_COLOR(255,64,64,64) +#endif + +#define PX_OBJECT_UI_DISABLE_FONTCOLOR PX_COLOR(255,128,128,128) + +#define PX_COLOR_WHITE PX_COLOR(255,255,255,255) +#define PX_COLOR_BLACK PX_COLOR(255,0,0,0) +#define PX_COLOR_RED PX_COLOR(255,255,0,0) +#define PX_COLOR_GREEN PX_COLOR(255,0,255,0) +#define PX_COLOR_BLUE PX_COLOR(255,0,0,255) + + +#define PX_OBJECT_FILTEREDITOR_DEFAULE_HORIZONTALPIXELDIVIDING 48 +#define PX_OBJECT_FILTEREDITOR_DEFAULE_VERTICALPIXELDIVIDING 20 +#define PX_OBJECT_FILTEREDITOR_DEFAULT_FRAMELINE_WIDTH 2 + + +/////////////////////////////////////////////////////////////////////////// +//// PainterEngine Object +////////////////////////////////////////////////////////////////////////// +struct _PX_Object; +typedef struct _PX_Object PX_Object; + +typedef px_void (*Function_ObjectUpdate)(PX_Object *,px_uint elapsed); +typedef px_void (*Function_ObjectBeginRender)(px_surface *,PX_Object *,px_dword); +typedef px_void (*Function_ObjectRender)(px_surface *psurface,PX_Object *,px_uint elapsed); +typedef px_void (*Function_ObjectEndRender)(px_surface *,PX_Object *,px_dword); +typedef px_void (*Function_ObjectFree)(PX_Object *); +typedef px_void (*Function_ObjectLinkChild)(PX_Object *parent,PX_Object *child); + +struct _PX_Object +{ + px_char id[PX_OBJECT_ID_MAXLEN]; + px_float x; + px_float y; + px_float z; + px_float Width; + px_float Height; + px_float Length; + px_float diameter;//if the member is not zero,The Object is round shape + px_bool OnFocus; + px_bool OnFocusNode; + px_bool OnLostFocusReleaseEvent; + px_bool Enabled; + px_bool Visible; + px_bool ReceiveEvents; + px_int Type; + px_int designerTyoe; + union + { + px_int User_int; + px_void *User_ptr; + }; + + px_int world_index; + px_dword impact_object_type; + px_dword impact_target_type; + px_void *pObject; + px_memorypool *mp; + struct _PX_Object *pChilds; + struct _PX_Object *pParent; + struct _PX_Object *pPreBrother; + struct _PX_Object *pNextBrother; + + struct _PX_Object_EventAction *pEventActions; + Function_ObjectUpdate Func_ObjectUpdate; + Function_ObjectRender Func_ObjectRender; + Function_ObjectFree Func_ObjectFree; + Function_ObjectLinkChild Func_ObjectLinkChild; + Function_ObjectBeginRender Func_ObjectBeginRender; + Function_ObjectEndRender Func_ObjectEndRender; +}; + + +////////////////////////////////////////////////////////////////////////// +/// Controllers +////////////////////////////////////////////////////////////////////////// + + + + +typedef struct +{ + PX_ALIGN Align; + PX_Animation animation; +}PX_Object_Animation; + + + + +typedef struct +{ + px_shape *shape; + px_point cursorPoint; + px_color blendColor; +}PX_Object_RoundCursor; + + + +typedef struct _PX_Object_Event +{ + px_uint Event; + union + { + px_char Param_char[16]; + px_uint Param_uint[4]; + px_int Param_int[4]; + px_float Param_float[4]; + px_void *Param_ptr[4]; + px_bool Param_bool[4]; + }; +}PX_Object_Event; + +////////////////////////////////////////////////////////////////////////// +//EVENT params +PX_Object_Event PX_OBJECT_BUILD_EVENT(px_uint Event); +PX_Object_Event PX_OBJECT_BUILD_EVENT_STRING(px_uint Event,const px_char *content); +PX_Object_Event PX_Object_Event_CursorOffset(PX_Object_Event e,px_point offset); + +px_float PX_Object_Event_GetCursorX(PX_Object_Event e); +px_float PX_Object_Event_GetCursorY(PX_Object_Event e); +px_float PX_Object_Event_GetCursorZ(PX_Object_Event e); +px_int PX_Object_Event_GetCursorIndex(PX_Object_Event e); + +px_float PX_Object_Event_GetWidth(PX_Object_Event e); +px_float PX_Object_Event_GetHeight(PX_Object_Event e); +px_int PX_Object_Event_GetIndex(PX_Object_Event e); + +px_void PX_Object_Event_SetWidth(PX_Object_Event *e,px_float w); +px_void PX_Object_Event_SetHeight(PX_Object_Event *e,px_float h); +px_void PX_Object_Event_SetCursorX(PX_Object_Event *e,px_float x); +px_void PX_Object_Event_SetCursorY(PX_Object_Event *e,px_float y); +px_void PX_Object_Event_SetCursorZ(PX_Object_Event *e,px_float z); +px_void PX_Object_Event_SetCursorIndex(PX_Object_Event *e,px_int index); + +px_float PX_Object_Event_GetScaleCursorX(PX_Object_Event e); +px_float PX_Object_Event_GetScaleCursorY(PX_Object_Event e); +px_float PX_Object_Event_GetScaleCursorZ(PX_Object_Event e); + +px_void PX_Object_Event_SetScaleCursorX(PX_Object_Event *e,px_float x); +px_void PX_Object_Event_SetScaleCursorY(PX_Object_Event *e,px_float y); +px_void PX_Object_Event_SetScaleCursorZ(PX_Object_Event *e,px_float z); + +px_uint PX_Object_Event_GetKeyDown(PX_Object_Event e); +px_void PX_Object_Event_SetKeyDown(PX_Object_Event *e,px_uint key); +px_void PX_Object_Event_SetKeyUp(PX_Object_Event *e,px_uint key); +px_char* PX_Object_Event_GetStringPtr(PX_Object_Event e); +px_void* PX_Object_Event_GetDataPtr(PX_Object_Event e); +px_void PX_Object_Event_SetStringPtr(PX_Object_Event *e,px_void *ptr); +px_void PX_Object_Event_SetDataPtr(PX_Object_Event *e,px_void *ptr); +px_void PX_Object_Event_SetIndex(PX_Object_Event *e,px_int index); +struct _PX_Object_EventAction +{ + px_uint EventAction; + px_void (*EventActionFunc)(PX_Object *,PX_Object_Event e,px_void *user_ptr); + px_void *user_ptr; + struct _PX_Object_EventAction *pNext; + struct _PX_Object_EventAction *pPre; +}; + +typedef struct _PX_Object_EventAction PX_OBJECT_EventAction; + + +PX_Object *PX_ObjectCreate(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Length); +PX_Object *PX_ObjectCreateEx(px_memorypool *mp,PX_Object *Parent,\ + px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Length,\ + px_int type,\ + Function_ObjectUpdate Func_ObjectUpdate,\ + Function_ObjectRender Func_ObjectRender,\ + Function_ObjectFree Func_ObjectFree,\ + px_void *desc,\ + px_int size + ); +#define PX_ObjectGetDesc(type,pobject) ((type *)((pobject)->pObject)) +px_void PX_ObjectGetInheritXY(PX_Object *Object,px_float *x,px_float *y); +px_void PX_ObjectInitialize(px_memorypool *mp,PX_Object *Object,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Length); +px_void PX_ObjectSetId(PX_Object *pObject,const px_char id[]); +px_void PX_ObjectSetUserCode(PX_Object *pObject,px_int user_int); +px_void PX_ObjectSetUserPointer(PX_Object *pObject,px_void *user_ptr); +px_void PX_ObjectDelete(PX_Object *pObject); +px_void PX_ObjectDeleteChilds( PX_Object *pObject ); +px_void PX_ObjectSetPosition(PX_Object *Object,px_float x,px_float y,px_float z); +px_void PX_ObjectSetSize(PX_Object *Object,px_float Width,px_float Height,px_float length); +px_void PX_ObjectSetVisible(PX_Object *Object,px_bool visible); +px_void PX_ObjectSetEnabled(PX_Object *Object,px_bool enabled); +px_void PX_ObjectEnable(PX_Object *Object); +px_void PX_ObjectDisable(PX_Object *Object); +PX_Object *PX_ObjectGetChild(PX_Object *Object,px_int Index); +PX_Object *PX_ObjectGetObject(PX_Object *pObject,const px_char payload[]); +px_void PX_ObjectSetFocus(PX_Object *Object); +px_void PX_ObjectClearFocus(PX_Object *Object); +#define PX_ObjectReleaseFocus PX_ObjectClearFocus + +px_bool PX_ObjectIsPointInRegion(PX_Object *Object,px_float x,px_float y); +px_bool PX_ObjectIsCursorInRegion(PX_Object *Object,PX_Object_Event e); +px_float PX_ObjectGetHeight(PX_Object *Object); +px_float PX_ObjectGetWidth(PX_Object *Object); + +px_void PX_ObjectAddClild(PX_Object *Parent,PX_Object *child); +px_void PX_ObjectUpdate(PX_Object *Object,px_uint elapsed ); +px_void PX_ObjectRender(px_surface *pSurface,PX_Object *Object,px_uint elapsed); + +px_int PX_ObjectRegisterEvent(PX_Object *Object,px_uint Event,px_void (*ProcessFunc)(PX_Object *,PX_Object_Event e,px_void *user_ptr),px_void *ptr); +px_void PX_ObjectPostEvent(PX_Object *pPost,PX_Object_Event Event); +px_void PX_ObjectExecuteEvent(PX_Object *pPost,PX_Object_Event Event); + +////////////////////////////////////////////////////////////////////////// +//Label +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_Label.h" + +////////////////////////////////////////////////////////////////////////// +//ProcessBar +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_Processbar.h" + +////////////////////////////////////////////////////////////////////////// +//Image +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_Image.h" + +////////////////////////////////////////////////////////////////////////// +//SliderBar +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_Sliderbar.h" + +////////////////////////////////////////////////////////////////////////// +//PushButton +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_PushButton.h" + +////////////////////////////////////////////////////////////////////////// +//Edit +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_Edit.h" + +///////////////////////////////////////////////////////////////////////////////////////// +//ScrollArea +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_ScrollArea.h" + +/////////////////////////////////////////////////////////////////////////////////////////////// +//AutoText +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_AutoText.h" + +////////////////////////////////////////////////////////////////////////// +//Animation +#include "PX_Object_Animation.h" + +////////////////////////////////////////////////////////////////////////// +//CursorButton +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_CursorButton.h" + +////////////////////////////////////////////////////////////////////////// +//list +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_List.h" +////////////////////////////////////////////////////////////////////////// +//virtual keyboard +#include "PX_Object_VirtualKeyboard.h" +////////////////////////////////////////////////////////////////////////// +//coordinate +#include "PX_Object_Coordinate.h" + +////////////////////////////////////////////////////////////////////////// +//checkbox +#include "PX_Object_CheckBox.h" +////////////////////////////////////////////////////////////////////////// +//menu +#include "PX_Object_Menu.h" + +////////////////////////////////////////////////////////////////////////// +//selectbar +#include "PX_Object_Selectbar.h" + +////////////////////////////////////////////////////////////////////////// +//radiobox +#include "PX_Object_RadioBox.h" + +////////////////////////////////////////////////////////////////////////// +//explorer +#include "PX_Object_Explorer.h" +////////////////////////////////////////////////////////////////////////// +//widget +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_Widget.h" + + +////////////////////////////////////////////////////////////////////////// +//scalebox +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_ScaleBox.h" + + + +////////////////////////////////////////////////////////////////////////// +//messagebox +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_MessageBox.h" + + +////////////////////////////////////////////////////////////////////////// +//protractor +////////////////////////////////////////////////////////////////////////// +#include "PX_Object_Protractor.h" + +////////////////////////////////////////////////////////////////////////// +//transform adapter +#include "PX_Object_TransformAdapter.h" + +////////////////////////////////////////////////////////////////////////// +//panc +#include "PX_Object_Panc.h" + + +////////////////////////////////////////////////////////////////////////// +//designerbox +#include "PX_Object_DesignerBox.h" + +////////////////////////////////////////////////////////////////////////// +//joystick +#include "PX_Object_Joystick.h" + +////////////////////////////////////////////////////////////////////////// +//ringprocessbar +#include "PX_Object_RingProcessbar.h" + +////////////////////////////////////////////////////////////////////////// +//memoryview +#include "PX_Object_MemoryView.h" + +////////////////////////////////////////////////////////////////////////// +//various +#include "PX_Object_Various.h" + + +////////////////////////////////////////////////////////////////////////// +//ipbox +#include "PX_Object_IPBox.h" + +////////////////////////////////////////////////////////////////////////// +//varbox +#include "PX_Object_VarBox.h" + +////////////////////////////////////////////////////////////////////////// +//combox +#include "PX_Object_COMBox.h" + +#endif + + diff --git a/UI/PainterEngine/kernel/PX_Object_Animation.c b/UI/PainterEngine/kernel/PX_Object_Animation.c new file mode 100644 index 0000000..f444c06 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Animation.c @@ -0,0 +1,130 @@ +#include "PX_Object_Animation.h" + +PX_Object * PX_Object_AnimationCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,PX_AnimationLibrary *lib) +{ + PX_Object *pObject; + PX_Object_Animation *pAnimation=(PX_Object_Animation *)MP_Malloc(mp,sizeof(PX_Object_Animation)); + if (pAnimation==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pAnimation); + return PX_NULL; + } + + pObject->pObject=pAnimation; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_ANIMATION; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_AnimationFree; + pObject->Func_ObjectRender=PX_Object_AnimationRender; + PX_AnimationCreate(&pAnimation->animation,lib); + pAnimation->Align=PX_ALIGN_CENTER; + return pObject; +} + +px_void PX_Object_AnimationSetLibrary(PX_Object *Object,PX_AnimationLibrary *lib) +{ + PX_Object_Animation *pA=PX_Object_GetAnimation(Object); + if (pA) + { + PX_AnimationSetLibrary(&pA->animation,lib); + } +} + +PX_Object_Animation * PX_Object_GetAnimation(PX_Object *Object) +{ + if(Object->Type==PX_OBJECT_TYPE_ANIMATION) + return (PX_Object_Animation *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_AnimationSetAlign(PX_Object *panimation,PX_ALIGN Align) +{ + PX_Object_Animation *pA=PX_Object_GetAnimation(panimation); + if (pA) + { + pA->Align=Align; + } +} + +px_void PX_Object_AnimationRender(px_surface *psurface,PX_Object *pObject,px_uint elapsed) +{ + PX_Object_Animation *pA=PX_Object_GetAnimation(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pA) + { + PX_AnimationUpdate(&pA->animation,elapsed); + + switch(pA->Align) + { + case PX_ALIGN_LEFTTOP: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)objx,(px_int)objy,PX_ALIGN_LEFTTOP,PX_NULL); + } + break; + case PX_ALIGN_LEFTMID: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)objx,(px_int)(objy+objHeight/2),PX_ALIGN_LEFTMID,PX_NULL); + } + break; + case PX_ALIGN_LEFTBOTTOM: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)objx,(px_int)(objy+objHeight),PX_ALIGN_LEFTBOTTOM,PX_NULL); + } + break; + case PX_ALIGN_MIDTOP: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)(objx+objWidth/2),(px_int)(objy),PX_ALIGN_MIDTOP,PX_NULL); + } + break; + case PX_ALIGN_CENTER: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)(objx+objWidth/2),(px_int)(objy+objHeight/2),PX_ALIGN_CENTER,PX_NULL); + } + break; + case PX_ALIGN_MIDBOTTOM: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)(objx+objWidth/2),(px_int)(objy+objHeight),PX_ALIGN_MIDBOTTOM,PX_NULL); + } + break; + case PX_ALIGN_RIGHTTOP: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)(objx+objWidth),(px_int)(objy),PX_ALIGN_RIGHTTOP,PX_NULL); + } + break; + case PX_ALIGN_RIGHTMID: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)(objx+objWidth),(px_int)(objy+objHeight/2),PX_ALIGN_RIGHTMID,PX_NULL); + } + break; + case PX_ALIGN_RIGHTBOTTOM: + { + PX_AnimationRender(psurface,&pA->animation,(px_int)(objx+objWidth),(px_int)(objy+objHeight),PX_ALIGN_RIGHTBOTTOM,PX_NULL); + } + break; + } + } + +} + +px_void PX_Object_AnimationFree(PX_Object *pObj) +{ + PX_Object_Animation *pA=PX_Object_GetAnimation(pObj); + if (pA) + PX_AnimationFree(&pA->animation); +} diff --git a/UI/PainterEngine/kernel/PX_Object_Animation.h b/UI/PainterEngine/kernel/PX_Object_Animation.h new file mode 100644 index 0000000..efe2fb7 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Animation.h @@ -0,0 +1,15 @@ +#ifndef PX_OBJECT_ANIMATION_H +#define PX_OBJECT_ANIMATION_H +#include "PX_Object.h" + + +PX_Object *PX_Object_AnimationCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,PX_AnimationLibrary *lib); +px_void PX_Object_AnimationSetLibrary(PX_Object *Object,PX_AnimationLibrary *lib); +PX_Object_Animation *PX_Object_GetAnimation(PX_Object *Object); +px_void PX_Object_AnimationSetAlign(PX_Object *pObject,PX_ALIGN Align); +px_void PX_Object_AnimationRender(px_surface *psurface,PX_Object *pImage,px_uint elapsed); +px_void PX_Object_AnimationFree(PX_Object *pObject); + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_AutoText.c b/UI/PainterEngine/kernel/PX_Object_AutoText.c new file mode 100644 index 0000000..6812c2a --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_AutoText.c @@ -0,0 +1,231 @@ +#include "PX_Object_AutoText.h" + +PX_Object * PX_Object_AutoTextCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int width,PX_FontModule *fm) +{ + PX_Object *pObject; + + PX_Object_AutoText *pAt=(PX_Object_AutoText *)MP_Malloc(mp,sizeof(PX_Object_AutoText)); + PX_StringInitialize(mp,&pAt->text); + if (pAt==PX_NULL) + { + return PX_NULL; + } + + if (width<=0) + { + return PX_NULL; + } + + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)width,0,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pAt); + return PX_NULL; + } + + pObject->pObject=pAt; + pObject->Type=PX_OBJECT_TYPE_AUTOTEXT; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_AutoTextFree; + pObject->Func_ObjectRender=PX_Object_AutoTextRender; + + pAt->TextColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + pAt->fontModule=fm; + return pObject; +} + +px_void PX_Object_AutoTextRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_int x_draw_oft,y_draw_oft,cursor,fsize; + PX_Object_AutoText *pAt=(PX_Object_AutoText *)pObject->pObject; + const px_char *Text=pAt->text.buffer; + px_float objx,objy,objHeight,objWidth; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pAt==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + x_draw_oft=(px_int)objx; + y_draw_oft=(px_int)objy; + + cursor=0; + + while (PX_TRUE) + { + fsize=0; + + if (pAt->fontModule) + { + px_dword code; + px_int width,height; + fsize=PX_FontModuleGetCharacterDesc(pAt->fontModule,Text+cursor,&code,&width,&height); + if (!fsize) + { + break; + } + if (code=='\r') + { + //skip + }else if (code=='\n') + { + x_draw_oft=(px_int)objx; + y_draw_oft+=pAt->fontModule->max_Height; + } + else + { + PX_FontModuleDrawCharacter(psurface,pAt->fontModule,x_draw_oft,y_draw_oft,code,pAt->TextColor); + x_draw_oft+=width; + } + + if (x_draw_oft>objx+objWidth-PX_FontGetAscCharactorWidth()*2) + { + x_draw_oft=(px_int)objx; + y_draw_oft+=pAt->fontModule->max_Height; + } + + } + else + { + fsize=1; + + if (Text[cursor]=='\r') + { + //skip + }else if (Text[cursor]=='\n') + { + x_draw_oft=(px_int)objx; + y_draw_oft+=__PX_FONT_HEIGHT; + } + else if(Text[cursor]) + { + PX_FontDrawChar(psurface,x_draw_oft,y_draw_oft,Text[cursor],pAt->TextColor); + x_draw_oft+=__PX_FONT_ASCSIZE; + } + else + { + break; + } + + if (x_draw_oft>objx+objWidth-PX_FontGetAscCharactorWidth()*2) + { + x_draw_oft=(px_int)objx; + y_draw_oft+=__PX_FONT_HEIGHT; + } + } + cursor+=fsize; + } +} + +px_void PX_Object_AutoTextFree(PX_Object *Obj) +{ + PX_Object_AutoText * pAt=PX_Object_GetAutoText(Obj); + if (!pAt) + { + return; + } + PX_StringFree(&pAt->text); +} + +px_int PX_Object_AutoTextGetHeight(PX_Object *pObject) +{ + px_int i; + px_int w=0; + px_int h=0; + PX_Object_AutoText * pAt=PX_Object_GetAutoText(pObject); + + if (!pAt) + { + return 0; + } + + for (i=0;itext.buffer);i++) + { + if (pAt->text.buffer[i]=='\n') + { + w=0; + h+=PX_FontGetCharactorHeight(); + continue; + } + if (pAt->text.buffer[i]=='\r') + { + continue; + } + + if (pAt->text.buffer[i]=='\t') + { + w+=PX_FontGetAscCharactorWidth(); + continue; + } + + if (pAt->text.buffer[i]&0x80) + { + i++; + } + else + { + if(w+PX_FontGetAscCharactorWidth()>pObject->Width-PX_FontGetAscCharactorWidth()*2) + { + w=0; + h+=PX_FontGetCharactorHeight(); + w+=PX_FontGetAscCharactorWidth(); + } + else + { + w+=PX_FontGetAscCharactorWidth(); + } + } + } + return h+PX_FontGetCharactorHeight(); +} + +PX_Object_AutoText * PX_Object_GetAutoText(PX_Object *Object) +{ + if(Object->Type==PX_OBJECT_TYPE_AUTOTEXT) + return (PX_Object_AutoText *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_AutoTextSetTextColor(PX_Object *pObject,px_color Color) +{ + PX_Object_AutoText * pAt=PX_Object_GetAutoText(pObject); + if (!pAt) + { + return; + } + pAt->TextColor=Color; +} + +px_void PX_Object_AutoTextSetText(PX_Object *Obj,const px_char *Text) +{ + PX_Object_AutoText * pAt=PX_Object_GetAutoText(Obj); + if (!pAt) + { + return; + } + PX_StringClear(&pAt->text); + PX_StringCat(&pAt->text,Text); + Obj->Height=(px_float)PX_Object_AutoTextGetHeight(Obj); +} + diff --git a/UI/PainterEngine/kernel/PX_Object_AutoText.h b/UI/PainterEngine/kernel/PX_Object_AutoText.h new file mode 100644 index 0000000..db22a8f --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_AutoText.h @@ -0,0 +1,23 @@ +#ifndef PX_OBJECT_AUTOTEXT_H +#define PX_OBJECT_AUTOTEXT_H +#include "PX_Object.h" + +typedef struct +{ + px_color TextColor; + PX_FontModule *fontModule; + px_string text; +}PX_Object_AutoText; + + +PX_Object *PX_Object_AutoTextCreate(px_memorypool *mp,PX_Object *Parent,int x,int y,int limit_width,PX_FontModule *fm); +PX_Object_AutoText * PX_Object_GetAutoText( PX_Object *Object ); +px_void PX_Object_AutoTextSetTextColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_AutoTextSetText(PX_Object *Obj,const px_char *Text); +px_void PX_Object_AutoTextRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed); +px_void PX_Object_AutoTextFree(PX_Object *Obj); +px_int PX_Object_AutoTextGetHeight(PX_Object *Obj); + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_COMBox.c b/UI/PainterEngine/kernel/PX_Object_COMBox.c new file mode 100644 index 0000000..9abca2c --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_COMBox.c @@ -0,0 +1,202 @@ +#include "PX_Object_COMBox.h" + + +PX_Object_COMBox_Return PX_Object_COMBoxGetReturn(PX_Object *pObject) +{ + PX_Object_COMBox_Return info; + PX_Object_COMBox* pDesc; + + if (pObject->Type!=PX_OBJECT_TYPE_COMBOX) + { + PX_ASSERT(); + PX_zeromemory(&info, sizeof(info)); + return info; + } + pDesc = PX_ObjectGetDesc(PX_Object_COMBox, pObject); + PX_strcpy(info.com, PX_Object_VariousGetText(pDesc->various_com),sizeof(info.com)); + switch (PX_Object_VariousSelectBarGetCurrentIndex(pDesc->various_baudrate)) + { + case 0: + info.baudRate=300; + break; + case 1: + info.baudRate=600; + break; + case 2: + info.baudRate=1200; + break; + case 3: + info.baudRate=2400; + break; + case 4: + info.baudRate=4800; + break; + case 5: + info.baudRate=9600; + break; + case 6: + info.baudRate=19200; + break; + case 7: + info.baudRate=38400; + break; + case 8: + info.baudRate=56000; + break; + case 9: + info.baudRate=57600; + break; + case 10: + info.baudRate=115200; + break; + default: + info.baudRate=128000; + break; + } + + switch(PX_Object_SelectBarGetCurrentIndex(pDesc->various_databits)) + { + case 0: + info.DataBits=5; + break; + case 1: + info.DataBits=6; + break; + case 2: + info.DataBits=7; + break; + case 3: + info.DataBits=8; + break; + default: + info.DataBits=8; + break; + } + + switch(PX_Object_SelectBarGetCurrentIndex(pDesc->various_stopbits)) + { + case 0: + info.stopBit=1; + break; + case 1: + info.stopBit=1; + break; + case 2: + info.stopBit=2; + break; + default: + info.stopBit=1; + break; + } + + switch(PX_Object_SelectBarGetCurrentIndex(pDesc->various_parity)) + { + case 0: + info.ParityType='N'; + break; + case 1: + info.ParityType='E'; + break; + case 2: + info.ParityType='O'; + break; + case 3: + info.ParityType='M'; + break; + default: + info.ParityType='N'; + break; + } + return info; +} + +px_void PX_Object_COMBoxOnConfirm(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_COMBox* pdesc = PX_ObjectGetDesc(PX_Object_COMBox, ((PX_Object*)ptr)); + + PX_ObjectExecuteEvent(((PX_Object*)ptr), PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_EXECUTE)); + PX_Object_COMBoxClose((PX_Object*)ptr); +} + + +px_void PX_Object_COMBoxOnCancel(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_COMBoxClose((PX_Object*)ptr); +} + + + + +PX_Object_COMBox* PX_Object_GetCOMBox(PX_Object* pObject) +{ + if (pObject->Type==PX_OBJECT_TYPE_COMBOX) + { + return PX_ObjectGetDesc(PX_Object_COMBox, pObject); + } + return PX_NULL; +} + +PX_Object* PX_Object_COMBoxCreate(px_memorypool* mp, PX_Object* Parent, int x, int y, int width, int height, const px_char title[], PX_FontModule* fontmodule) +{ + PX_Object_COMBox desc, * pdesc; + PX_Object* pObject; + pObject = PX_ObjectCreateEx(mp, Parent, (px_float)x, (px_float)y, 0, (px_float)width, (px_float)height, 0, PX_OBJECT_TYPE_COMBOX, PX_NULL, PX_NULL, PX_NULL, &desc, sizeof(desc)); + pdesc = PX_ObjectGetDesc(PX_Object_COMBox, pObject); + + pdesc->widget = PX_Object_WidgetCreate(mp, pObject, 0, 0, width, height, "", fontmodule); + PX_Object_WidgetShowHideCloseButton(pdesc->widget, PX_FALSE); + + pdesc->various_com = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, 32, 256, 32, "COM:", PX_OBJECT_VARIOUS_TYPE_SELECTBAR, fontmodule); + pdesc->various_baudrate = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, 72, 256, 32, "BaudRate:", PX_OBJECT_VARIOUS_TYPE_SELECTBAR, fontmodule); + PX_Object_VariousAddItem(pdesc->various_baudrate, "300"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "600"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "1200"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "2400"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "4800"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "9600"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "19200"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "38400"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "56000"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "57600"); + PX_Object_VariousAddItem(pdesc->various_baudrate, "115200"); + + pdesc->various_databits = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, 112, 256, 32, "DataBits:", PX_OBJECT_VARIOUS_TYPE_SELECTBAR, fontmodule); + PX_Object_VariousAddItem(pdesc->various_databits, "5"); + PX_Object_VariousAddItem(pdesc->various_databits, "6"); + PX_Object_VariousAddItem(pdesc->various_databits, "7"); + PX_Object_VariousAddItem(pdesc->various_databits, "8"); + + + pdesc->various_stopbits = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, 152, 256, 32, "StopBits:", PX_OBJECT_VARIOUS_TYPE_SELECTBAR, fontmodule); + PX_Object_VariousAddItem(pdesc->various_stopbits, "0"); + PX_Object_VariousAddItem(pdesc->various_stopbits, "1"); + PX_Object_VariousAddItem(pdesc->various_stopbits, "2"); + + pdesc->various_parity = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, 192, 256, 32, "Parity:", PX_OBJECT_VARIOUS_TYPE_SELECTBAR, fontmodule); + PX_Object_VariousAddItem(pdesc->various_parity, "N"); + PX_Object_VariousAddItem(pdesc->various_parity, "E"); + PX_Object_VariousAddItem(pdesc->various_parity, "O"); + PX_Object_VariousAddItem(pdesc->various_parity, "M"); + + pdesc->btn_ok = PX_Object_PushButtonCreate(mp, pdesc->widget, width - 256, height - 68, 96, 32, "OK", fontmodule); + pdesc->btn_close = PX_Object_PushButtonCreate(mp, pdesc->widget, width - 128, height - 68, 96, 32, "Cancel", fontmodule); + + PX_ObjectRegisterEvent(pdesc->btn_ok, PX_OBJECT_EVENT_EXECUTE, PX_Object_COMBoxOnConfirm, pObject); + PX_ObjectRegisterEvent(pdesc->btn_close, PX_OBJECT_EVENT_EXECUTE, PX_Object_COMBoxOnCancel, pObject); + + pdesc->widget->Visible = PX_TRUE; + pObject->Visible = PX_FALSE; + return pObject; +} + +px_void PX_Object_COMBoxShow(PX_Object* pObject) +{ + pObject->Visible = PX_TRUE; + PX_ObjectSetFocus(pObject); +} + +px_void PX_Object_COMBoxClose(PX_Object* pObject) +{ + pObject->Visible = PX_FALSE; + PX_ObjectClearFocus(pObject); +} diff --git a/UI/PainterEngine/kernel/PX_Object_COMBox.h b/UI/PainterEngine/kernel/PX_Object_COMBox.h new file mode 100644 index 0000000..8a21c6a --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_COMBox.h @@ -0,0 +1,29 @@ +#ifndef PX_MODULE_SERIALPORT_H +#define PX_MODULE_SERIALPORT_H + +#include "PX_Object.h" + +#define PX_INSTANCE_SERIALPORTCONFIGURARION_NEXT 0x1000 + +typedef struct +{ + px_char com[16]; + px_uint baudRate; + px_uint DataBits;/*5,6,7,8*/ + px_char ParityType;/*'O','E','N'*/ + px_int stopBit;/*0,1,2*/ +}PX_Object_COMBox_Return; + +typedef struct +{ + PX_Object *widget; + PX_FontModule *fm; + PX_Object *various_com,* various_baudrate,* various_databits,* various_stopbits,* various_parity; + PX_Object *btn_ok,*btn_close; +}PX_Object_COMBox; + +PX_Object_COMBox* PX_Object_GetCOMBox(PX_Object* Object); +PX_Object* PX_Object_COMBoxCreate(px_memorypool* mp, PX_Object* Parent, int x, int y, int width, int height, const px_char title[], PX_FontModule* fontmodule); +px_void PX_Object_COMBoxShow(PX_Object* pObject); +px_void PX_Object_COMBoxClose(PX_Object* pObject); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/kernel/PX_Object_CheckBox.c b/UI/PainterEngine/kernel/PX_Object_CheckBox.c new file mode 100644 index 0000000..f04f083 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_CheckBox.c @@ -0,0 +1,245 @@ +#include "PX_Object_CheckBox.h" + +PX_Object_CheckBox * PX_Object_GetCheckBox(PX_Object *Object) +{ + PX_Object_CheckBox *pcb=(PX_Object_CheckBox *)Object->pObject; + if (Object->Type==PX_OBJECT_TYPE_CHECKBOX) + { + return pcb; + } + return PX_NULL; +} + +px_void PX_Object_CheckBoxOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_CheckBox *pcb=PX_Object_GetCheckBox(Object); + + px_float x=(PX_Object_Event_GetCursorX(e)); + px_float y=(PX_Object_Event_GetCursorY(e)); + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_ONPUSH) + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_ONCURSOR) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROVER; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + e.Param_ptr[0]=PX_NULL; + PX_ObjectExecuteEvent(Object,e); + } + pcb->state=PX_OBJECT_CHECKBOX_STATE_ONCURSOR; + } + } + else + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_NORMAL) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROUT; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + pcb->state=PX_OBJECT_CHECKBOX_STATE_NORMAL; + } + } +} + +px_void PX_Object_CheckBoxOnMouseLButtonDown(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_CheckBox *pcb=PX_Object_GetCheckBox(Object); + px_float x=(PX_Object_Event_GetCursorX(e)); + px_float y=(PX_Object_Event_GetCursorY(e)); + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + pcb->state=PX_OBJECT_CHECKBOX_STATE_ONPUSH; + else + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_NORMAL) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROUT; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + pcb->state=PX_OBJECT_CHECKBOX_STATE_NORMAL; + } + } +} + +px_void PX_Object_CheckBoxOnMouseLButtonUp(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_CheckBox *pcb=PX_Object_GetCheckBox(Object); + + px_float x,y; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + if(pcb->state==PX_OBJECT_CHECKBOX_STATE_ONPUSH) + { + PX_Object_Event e; + pcb->state=PX_OBJECT_CHECKBOX_STATE_ONCURSOR; + pcb->bCheck=!pcb->bCheck; + + e.Event=PX_OBJECT_EVENT_VALUECHANGED; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + } +} + +px_void PX_Object_CheckBoxRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object_CheckBox *pcb=PX_Object_GetCheckBox(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + if (pcb==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pcb->BackgroundColor); + switch (pcb->state) + { + case PX_OBJECT_BUTTON_STATE_NORMAL: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pcb->BackgroundColor); + break; + case PX_OBJECT_BUTTON_STATE_ONPUSH: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pcb->PushColor); + break; + case PX_OBJECT_BUTTON_STATE_ONCURSOR: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pcb->CursorColor); + break; + } + + if (pcb->Border) + { + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,1,pcb->BorderColor); + } + + PX_FontModuleDrawText(psurface,pcb->fm,(px_int)objx+18,(px_int)(objy+objHeight/2),PX_ALIGN_LEFTMID,pcb->Text,pcb->TextColor); + + //draw CheckState + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)(objy+objHeight/2-7),(px_int)objx+14,(px_int)(objy+objHeight/2+7),1,pcb->BorderColor); + if (pcb->bCheck) + { + PX_GeoDrawRect(psurface,(px_int)objx+2,(px_int)(objy+objHeight/2-5),(px_int)objx+12,(px_int)(objy+objHeight/2+5),pcb->BorderColor); + } + +} + +PX_Object * PX_Object_CheckBoxCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const char text[],PX_FontModule *fm) +{ + PX_Object *pObject; + PX_Object_CheckBox cbx; + cbx.Align=PX_ALIGN_LEFTMID; + cbx.BackgroundColor=PX_COLOR(0,0,0,0); + cbx.bCheck=PX_FALSE; + cbx.Border=PX_FALSE; + cbx.BorderColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + cbx.CursorColor=PX_OBJECT_UI_DEFAULT_CURSORCOLOR; + cbx.PushColor=PX_OBJECT_UI_DEFAULT_PUSHCOLOR; + cbx.fm=fm; + cbx.state=PX_OBJECT_CHECKBOX_STATE_NORMAL; + PX_strset(cbx.Text,text); + cbx.TextColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_CHECKBOX,PX_NULL,PX_Object_CheckBoxRender,PX_NULL,&cbx,sizeof(cbx)); + if (!pObject) + { + return PX_NULL; + } + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_CheckBoxOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_CheckBoxOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_CheckBoxOnMouseLButtonUp,PX_NULL); + return pObject; +} + +px_bool PX_Object_CheckBoxGetCheck(PX_Object *Object) +{ + return PX_Object_GetCheckBox(Object)->bCheck; +} + +px_void PX_Object_CheckBoxSetBackgroundColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->BackgroundColor=clr; +} + +px_void PX_Object_CheckBoxSetBorderColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->BorderColor=clr; +} + +px_void PX_Object_CheckBoxSetPushColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->PushColor=clr; +} + +px_void PX_Object_CheckBoxSetCursorColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->CursorColor=clr; +} + +px_void PX_Object_CheckBoxSetText(PX_Object *Object,const px_char text[]) +{ + PX_strset(PX_Object_GetCheckBox(Object)->Text,text); +} + +px_char *PX_Object_CheckBoxGetText(PX_Object *Object) +{ + PX_Object_CheckBox *pCheckBox=PX_Object_GetCheckBox(Object); + if (pCheckBox) + { + return pCheckBox->Text; + } + else + { + PX_ASSERT(); + return PX_NULL; + } +} + +px_void PX_Object_CheckBoxSetTextColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->TextColor=clr; +} + +px_void PX_Object_CheckBoxSetCheck(PX_Object *Object,px_bool check) +{ + PX_Object_GetCheckBox(Object)->bCheck=check; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_CheckBox.h b/UI/PainterEngine/kernel/PX_Object_CheckBox.h new file mode 100644 index 0000000..54eac5f --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_CheckBox.h @@ -0,0 +1,48 @@ +#ifndef PX_OBJECT_CHECKBOX_H +#define PX_OBJECT_CHECKBOX_H +#include "PX_Object.h" + + +#define PX_OBJECT_CHECKBOX_MAX_CONTENT 64 + + +typedef enum +{ + PX_OBJECT_CHECKBOX_STATE_ONCURSOR, + PX_OBJECT_CHECKBOX_STATE_ONPUSH, + PX_OBJECT_CHECKBOX_STATE_NORMAL, +}PX_Object_CHECKBOX_STATE; + +typedef struct +{ + px_dword Align; + px_bool Border; + px_color TextColor; + px_color BorderColor; + px_color BackgroundColor; + px_color CursorColor; + px_color PushColor; + px_char Text[PX_OBJECT_CHECKBOX_MAX_CONTENT]; + px_bool bCheck; + PX_FontModule *fm; + PX_Object_CHECKBOX_STATE state; +}PX_Object_CheckBox; + +PX_Object_CheckBox *PX_Object_GetCheckBox(PX_Object *Object); +PX_Object * PX_Object_CheckBoxCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const char text[],PX_FontModule *fm); +px_bool PX_Object_CheckBoxGetCheck(PX_Object *Object); +px_void PX_Object_CheckBoxSetBackgroundColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetBorderColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetPushColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetCursorColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetText(PX_Object *Object,const px_char text[]); +px_char *PX_Object_CheckBoxGetText(PX_Object *Object); +px_void PX_Object_CheckBoxSetTextColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetCheck(PX_Object *Object,px_bool check); + + + + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Coordinate.c b/UI/PainterEngine/kernel/PX_Object_Coordinate.c new file mode 100644 index 0000000..a9a73cc --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Coordinate.c @@ -0,0 +1,2445 @@ +#include "PX_Object_Coordinate.h" + +////////////////////////////////////////////////////////////////////////// +// +static px_int PX_Object_CoordinatesDichotomy(px_double *p,px_int Size,px_double Mark) +{ + px_int Minx,Maxx; + px_int Index; + if (Mark<=p[0]) + { + return 0; + } + if (Mark>=p[Size-1]) + { + return Size-1; + } + + Minx=0; + Maxx=Size-1; + + + + while (Maxx-Minx>1) + { + Index=(Maxx+Minx)/2; + if (p[Index]>=Mark) + { + Maxx=Index; + } + else + { + Minx=Index; + } + } + + if (Index==Size-1) + { + return Minx; + } + + + if (Mark-p[Index]Type==PX_OBJECT_TYPE_COORDINATE) + { + return (PX_Object_Coordinates *)pObject->pObject; + } + return PX_NULL; +} + +px_void PX_Object_CoordinatesSetMinVerticalPixelDividing(PX_Object *pObj,px_int val) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->MinVerticalPixelDividing=val; +} + +px_void PX_Object_CoordinatesSetMinHorizontalPixelDividing(PX_Object *pObj,px_int val) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->MinHorizontalPixelDividing=val; +} + +px_void PX_Object_CoordinatesSetHorizontalDividing(PX_Object *pObj,px_int Count) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->HorizontalDividing=Count; +} + +px_void PX_Object_CoordinatesSetLeftVerticalDividing(PX_Object *pObj,px_int Count) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LeftVerticalDividing=Count; +} + +px_void PX_Object_CoordinatesSetRightVerticalDividing(PX_Object *pObj,px_int Count) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightVerticalDividing=Count; +} + + + +px_void PX_Object_CoordinatesSetStyle(PX_Object *pObj,PX_OBJECT_COORDINATES_LINEMODE mode) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LineMode=mode; +} + + + +px_void PX_Object_CoordinatesSetScaleEnabled(PX_Object *pObject,px_bool Enabled) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->ScaleEnabled=Enabled; +} + +px_void PX_Object_CoordinatesSetGuidesVisible(PX_Object *pObject,px_bool Visible) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->ShowGuides=Visible; +} + +px_void PX_Object_CoordinatesSetGuidesShowMode(PX_Object *pObject,PX_OBJECT_COORDINATES_GUIDESSHOWMODE mode) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->guidesShowMode=mode; +} + + +px_void PX_Object_CoordinatesShowHelpLine(PX_Object *pObject,px_bool show) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->ShowHelpLine=show; +} + +px_void PX_Object_CoordinatesSetDataLineWidth(PX_Object *pObject,px_float linewidth) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->DataLineWidth=linewidth; +} + +void PX_Object_CoordinatesSetDataShow(PX_Object *pObject,px_int index,px_bool show) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_Object_CoordinateData *pData; + if (!pcd) + { + PX_ASSERT(); + return; + } + if (index>=pcd->vData.size) + { + return; + } + pData=PX_VECTORAT(PX_Object_CoordinateData,&pcd->vData,index); + pData->Visibled=show; +} + +px_void PX_Object_CoordinatesSetGuidesLineWidth(PX_Object *pObject,px_float linewidth) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->GuidesLineWidth=linewidth; +} + +px_void PX_Object_CoordinatesSetGuidesLineColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->helpLineColor=clr; +} + +px_void PX_Object_CoordinatesSetTitleFontSize(PX_Object *pObject,px_int size) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FontSize=size; +} + +px_void PX_Object_CoordinatesSetTitleFontColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FontColor=clr; +} + +px_void PX_Object_CoordinatesSetDashLineColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->DashColor=clr; +} + +px_void PX_Object_CoordinatesSetLeftTextShow(PX_Object *pObject,px_bool bshow) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LeftTextShow=bshow; +} + +px_void PX_Object_CoordinatesSetRightTextShow(PX_Object *pObject,px_bool bshow) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightTextShow=bshow; +} + +px_void PX_Object_CoordinatesSetHorizontalTextShow(PX_Object *pObject,px_bool bshow) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->HorizontalTextShow=bshow; +} + +px_void PX_Object_CoordinatesSetFloatFlagFormatHorizontal(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FloatFlagFormat_H=fmt; +} + +px_void PX_Object_CoordinatesSetIntFlagFormatHorizontal(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->IntFlagFormat_H=fmt; +} + +px_void PX_Object_CoordinatesSetFloatFlagFormatVerticalLeft(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FloatFlagFormat_L=fmt; +} + +px_void PX_Object_CoordinatesSetIntFlagFormatVerticalLeft(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->IntFlagFormat_L=fmt; +} + +px_void PX_Object_CoordinatesSetFloatFlagFormatVerticalRight(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FloatFlagFormat_R=fmt; +} + +px_void PX_Object_CoordinatesSetIntFlagFormatVericalRight(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->IntFlagFormat_R=fmt; +} + +px_void PX_Object_CoordinatesSetLeftTextMode(PX_Object *pObject,PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE mode) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->leftTextDisplayMode=mode; +} + +px_void PX_Object_CoordinatesSetRightTextMode(PX_Object *pObject,PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE mode) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightTextDisplayMode=mode; +} + +px_void PX_Object_CoordinatesSetHorizontalMin(PX_Object *pObject,px_double Min) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->HorizontalRangeMin=Min; +} + +px_void PX_Object_CoordinatesSetHorizontalMax(PX_Object *pObject,px_double Max) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->HorizontalRangeMax=Max; +} + +px_void PX_Object_CoordinatesSetLeftVerticalMin(PX_Object *pObject,px_double Min) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LeftVerticalRangeMin=Min; +} + +px_void PX_Object_CoordinatesSetLeftVerticalMax(PX_Object *pObject,px_double Max) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LeftVerticalRangeMax=Max; +} + +px_void PX_Object_CoordinatesSetRightVerticalMax(PX_Object *pObject,px_double Max) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightVerticalRangeMax=Max; +} + +px_void PX_Object_CoordinatesSetRightVerticalMin(PX_Object *pObject,px_double Min) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightVerticalRangeMin=Min; +} + +px_void PX_Object_CoordinatesSetBorderColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (pcd) + { + pcd->borderColor=clr; + } +} + +PX_Object_CoordinateData * PX_Object_CoordinatesGetCoordinateData(PX_Object *pObject,px_int index) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (index>pcd->vData.size-1) + { + return PX_NULL; + } + return PX_VECTORAT(PX_Object_CoordinateData,&pcd->vData,index); +} + +px_int PX_Object_CoordinatesGetCoordinateWidth(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + return (px_int)(pObject->Width-pcd->LeftSpacer-pcd->RightSpacer); +} + +px_int PX_Object_CoordinatesGetCoordinateHeight(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + return (px_int)(pObject->Height-pcd->TopSpacer-pcd->BottomSpacer); +} + +void PX_Object_CoordinatesSetTitleTop(PX_Object *pObject,const px_char * title) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (pcd) + { + pcd->TopTitle=title; + } +} + +void PX_Object_CoordinatesSetTitleBottom(PX_Object *pObject,const px_char * title) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (pcd) + { + pcd->BottomTitle=title; + } +} + +void PX_Object_CoordinatesSetMarkValueEnabled(PX_Object *pObject,px_bool Enabled) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + pcd->MarkValueEnabled=Enabled; +} + +void PX_Object_CoordinatesSetFontColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (pcd) + { + pcd->FontColor=clr; + } +} + +void PX_Object_CoordinatesClearContext(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_Object_CoordinatesRestoreCoordinates(pObject); + PX_VectorClear(&pcd->vData); +} + +void PX_Object_CoordinatesClearFlagLine(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_VectorClear(&pcd->vFlagLine); +} + +void PX_Object_CoordinatesAddData(PX_Object *pObject,PX_Object_CoordinateData data) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_VectorPushback(&pcd->vData,&data); +} + +void PX_Object_CoordinatesAddCoordinateFlagLine(PX_Object *pObject,PX_Object_CoordinateFlagLine Line) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_VectorPushback(&pcd->vFlagLine,&Line); +} + + +px_void PX_Object_CoordinatesSetMargin(PX_Object *pObject,px_int Left,px_int Right,px_int Top,px_int Bottom) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + pcd->LeftSpacer=Left; + pcd->RightSpacer=Right; + pcd->TopSpacer=Top; + pcd->BottomSpacer=Bottom; +} + +px_int PX_Object_CoordinatesMapHorizontalValueToPixel(PX_Object *pObject,px_double val) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double scale=PX_Object_CoordinatesGetCoordinateWidth(pObject)/(pcd->HorizontalRangeMax-pcd->HorizontalRangeMin); + return (px_int)((val-pcd->HorizontalRangeMin)*scale)+pcd->LeftSpacer; +} + +px_int PX_Object_CoordinatesMapVerticalValueToPixel(PX_Object *pObject,px_double val,px_int Map) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double scale; + + if(Map==PX_OBJECT_COORDINATEDATA_MAP_LEFT) + { + scale=PX_Object_CoordinatesGetCoordinateHeight(pObject)/(pcd->LeftVerticalRangeMax-pcd->LeftVerticalRangeMin); + return (px_int)(pObject->Height-pcd->BottomSpacer-(px_int)((val-pcd->LeftVerticalRangeMin)*scale)); + } + else if(Map==PX_OBJECT_COORDINATEDATA_MAP_RIGHT) + { + scale=PX_Object_CoordinatesGetCoordinateHeight(pObject)/(pcd->RightVerticalRangeMax-pcd->RightVerticalRangeMin); + return (px_int)(pObject->Height-pcd->BottomSpacer-(px_int)((val-pcd->RightVerticalRangeMin)*scale)); + } + + return 0; + +} + +px_double PX_Object_CoordinatesMapPixelValueToHorizontal(PX_Object *pObject,px_int Pixel) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_int XDisten=Pixel-pcd->LeftSpacer; + return pcd->HorizontalRangeMin+XDisten*(pcd->HorizontalRangeMax-pcd->HorizontalRangeMin)/PX_Object_CoordinatesGetCoordinateWidth(pObject); + +} + +px_double PX_Object_CoordinatesMapPixelValueToVertical(PX_Object *pObject,px_int Pixel,px_int Map) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double Min,Max; + if (Map==PX_OBJECT_COORDINATEDATA_MAP_LEFT) + { + Max=pcd->LeftVerticalRangeMax; + Min=pcd->LeftVerticalRangeMin; + return pcd->LeftVerticalRangeMin+(pObject->Height-pcd->BottomSpacer-Pixel)*(Max-Min)/PX_Object_CoordinatesGetCoordinateHeight(pObject); + } + + if (Map==PX_OBJECT_COORDINATEDATA_MAP_RIGHT) + { + Max=pcd->RightVerticalRangeMax; + Min=pcd->RightVerticalRangeMin; + return pcd->RightVerticalRangeMin+(pObject->Height-pcd->BottomSpacer-Pixel)*(Max-Min)/PX_Object_CoordinatesGetCoordinateHeight(pObject); + } + + if (Map==PX_OBJECT_COORDINATEDATA_MAP_HORIZONTAL) + { + Max=pcd->HorizontalRangeMax; + Min=pcd->HorizontalRangeMin; + return pcd->HorizontalRangeMin+(Pixel-pcd->LeftSpacer)*(Max-Min)/PX_Object_CoordinatesGetCoordinateWidth(pObject); + } + return 0; +} + + +px_void PX_Object_CoordinatesUpdate(PX_Object *pObject,px_uint elapsed) +{ + +} + + +static px_void PX_Object_CoordinatesDrawFrameLine(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_int offsetx; + px_int offsety; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + offsetx=(px_int)objx; + offsety=(px_int)objy; + + PX_GeoDrawLine(psurface,offsetx+pcd->LeftSpacer,offsety+pcd->TopSpacer,offsetx+(px_int)(objWidth-pcd->RightSpacer),offsety+pcd->TopSpacer,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pcd->borderColor); + PX_GeoDrawLine(psurface,offsetx+pcd->LeftSpacer,offsety+pcd->TopSpacer,offsetx+pcd->LeftSpacer,offsety+(px_int)(objHeight-pcd->BottomSpacer),PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pcd->borderColor); + PX_GeoDrawLine(psurface,(px_int)(offsetx+objWidth-pcd->RightSpacer),offsety+(px_int)(objHeight-pcd->BottomSpacer),offsetx+(pcd->LeftSpacer),offsety+(px_int)objHeight-pcd->BottomSpacer,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pcd->borderColor); + PX_GeoDrawLine(psurface,(px_int)(offsetx+objWidth-pcd->RightSpacer),offsety+(px_int)(objHeight-pcd->BottomSpacer),offsetx+(px_int)(objWidth-pcd->RightSpacer),offsety+pcd->TopSpacer,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pcd->borderColor); +} + +static px_void PX_Object_CoordinatesDrawDashed(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double HorizontalInc=0; + px_int i; + px_double VerticalInc=0; + px_int offsetx; + px_int offsety; + + px_int Divid=PX_Object_CoordinatesGetCoordinateWidth(pObject)/pcd->MinHorizontalPixelDividing; + + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + offsetx=(px_int)objx; + offsety=(px_int)objy; + + + if (Divid>pcd->HorizontalDividing) + { + Divid=pcd->HorizontalDividing; + } + + + if(Divid>1) + { + HorizontalInc=(px_double)PX_Object_CoordinatesGetCoordinateWidth(pObject)/Divid; + if(pcd->guidesShowMode==PX_OBJECT_COORDINATES_GUIDESSHOWMODE_ALL||pcd->guidesShowMode==PX_OBJECT_COORDINATES_GUIDESSHOWMODE_HORIZONTAL) + { + for (i=1;i<=Divid;i++) + { + PX_GeoDrawLine(psurface,\ + offsetx+(px_int)(pcd->LeftSpacer+i*HorizontalInc),offsety+pcd->TopSpacer,\ + offsetx+(px_int)(pcd->LeftSpacer+i*HorizontalInc),offsety+pcd->TopSpacer+PX_Object_CoordinatesGetCoordinateHeight(pObject),\ + 1,\ + pcd->DashColor + ); + } + } + } + + + + Divid=PX_Object_CoordinatesGetCoordinateHeight(pObject)/pcd->MinVerticalPixelDividing; + if (pcd->LeftVerticalDividing>=pcd->RightVerticalDividing) + { + if (Divid>pcd->LeftVerticalDividing) + { + Divid=pcd->LeftVerticalDividing; + } + } + else + { + if (Divid>pcd->RightVerticalDividing) + { + Divid=pcd->RightVerticalDividing; + } + } + + if(Divid>1) + { + VerticalInc=(px_double)PX_Object_CoordinatesGetCoordinateHeight(pObject)/Divid; + if(pcd->guidesShowMode==PX_OBJECT_COORDINATES_GUIDESSHOWMODE_ALL||pcd->guidesShowMode==PX_OBJECT_COORDINATES_GUIDESSHOWMODE_VERTICAL) + { + for (i=1;i<=Divid;i++) + { + PX_GeoDrawLine(psurface,\ + offsetx+(px_int)pcd->LeftSpacer,\ + offsety+(px_int)(objHeight-pcd->BottomSpacer-i*VerticalInc),\ + offsetx+(px_int)(pcd->LeftSpacer+PX_Object_CoordinatesGetCoordinateWidth(pObject)),\ + offsety+(px_int)(objHeight-pcd->BottomSpacer-i*VerticalInc),\ + 1,\ + pcd->DashColor\ + ); + } + } + } +} + +static px_void PX_Object_CoordinatesDrawDashText(px_surface *psurface,PX_Object *pObject) +{ + + px_double HorizontalInc=0; + px_double VerticalInc=0; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double ValInc; + px_int IsFloat; + px_int i; + px_int offsetx; + px_int offsety; + + px_int Divid=PX_Object_CoordinatesGetCoordinateWidth(pObject)/pcd->MinHorizontalPixelDividing; + + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + offsetx=(px_int)objx; + offsety=(px_int)objy; + + if (Divid>pcd->HorizontalDividing) + { + Divid=pcd->HorizontalDividing; + } + + + + if(Divid>0&&pcd->HorizontalTextShow) + { + HorizontalInc=(px_double)PX_Object_CoordinatesGetCoordinateWidth(pObject)/Divid; + ValInc=(pcd->HorizontalRangeMax-pcd->HorizontalRangeMin)/Divid; + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + //paint for horizontal coordinates text + for (i=0;i<=Divid;i++) + { + px_char text[32]={0}; + + if(IsFloat) + PX_sprintf1(text,sizeof(text),pcd->FloatFlagFormat_H,PX_STRINGFORMAT_FLOAT((px_float)(pcd->HorizontalRangeMin+i*ValInc))); + else + PX_sprintf1(text,sizeof(text),pcd->IntFlagFormat_H,PX_STRINGFORMAT_INT((px_int)(pcd->HorizontalRangeMin+i*ValInc))); + + PX_FontModuleDrawText(psurface,PX_NULL,offsetx+(px_int)(pcd->LeftSpacer+(i)*HorizontalInc),offsety+(px_int)(pObject->Height-pcd->BottomSpacer+PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER+2),PX_ALIGN_CENTER,text,pcd->FontColor); + } + } + + Divid=PX_Object_CoordinatesGetCoordinateHeight(pObject)/pcd->MinVerticalPixelDividing; + if (pcd->LeftVerticalDividing>=pcd->RightVerticalDividing) + { + if (Divid>pcd->LeftVerticalDividing) + { + Divid=pcd->LeftVerticalDividing; + } + } + else + { + if (Divid>pcd->RightVerticalDividing) + { + Divid=pcd->RightVerticalDividing; + } + } + + if(Divid>0) + { + VerticalInc=(px_double)PX_Object_CoordinatesGetCoordinateHeight(pObject)/Divid; + + + //paint for Left vertical coordinates text + if (pcd->LeftTextShow) + { + ValInc=(pcd->LeftVerticalRangeMax-pcd->LeftVerticalRangeMin)/Divid; + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + for (i=0;i<=Divid;i++) + { + px_char text[32]={0}; + + switch (pcd->leftTextDisplayMode) + { + case PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE_EXPONENTRAL: + { + px_double value=PX_ABS(pcd->LeftVerticalRangeMin)>PX_ABS(pcd->LeftVerticalRangeMax)?PX_ABS(pcd->LeftVerticalRangeMin):PX_ABS(pcd->LeftVerticalRangeMax); + px_int e=0; + px_double e10=1; + while(value>10){value/=10,e++;e10*=10;}; + value=pcd->LeftVerticalRangeMin+i*ValInc; + value/=e10; + + if (e>=3) + { + PX_sprintf2(text,sizeof(text),pcd->Exponential_Format,PX_STRINGFORMAT_FLOAT((px_float)(value)),PX_STRINGFORMAT_INT(e)); + } + else + { + if(IsFloat) + PX_sprintf1(text,sizeof(text),pcd->FloatFlagFormat_L,PX_STRINGFORMAT_FLOAT((px_float)(pcd->LeftVerticalRangeMin+i*ValInc))); + else + PX_sprintf1(text,sizeof(text),pcd->IntFlagFormat_L,PX_STRINGFORMAT_INT((px_int)(pcd->LeftVerticalRangeMin+i*ValInc))); + } + + + } + break; + default: + case PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE_NORMAL: + { + if(IsFloat) + PX_sprintf1(text,sizeof(text),pcd->FloatFlagFormat_L,PX_STRINGFORMAT_FLOAT((px_float)(pcd->LeftVerticalRangeMin+i*ValInc))); + else + PX_sprintf1(text,sizeof(text),pcd->IntFlagFormat_L,PX_STRINGFORMAT_INT((px_int)(pcd->LeftVerticalRangeMin+i*ValInc))); + } + break; + } + + PX_FontModuleDrawText(psurface,PX_NULL,offsetx+pcd->LeftSpacer-6,offsety+(px_int)(pObject->Height-pcd->BottomSpacer-(i)*VerticalInc-6),PX_ALIGN_RIGHTTOP,text,pcd->FontColor); + } + } + + + //paint for Right vertical coordinates text + if (pcd->RightTextShow) + { + ValInc=(pcd->RightVerticalRangeMax-pcd->RightVerticalRangeMin)/Divid; + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + for (i=0;i<=Divid;i++) + { + px_char text[32]={0}; + + switch (pcd->leftTextDisplayMode) + { + case PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE_EXPONENTRAL: + { + px_double value=PX_ABS(pcd->RightVerticalRangeMin)>PX_ABS(pcd->RightVerticalRangeMax)?PX_ABS(pcd->RightVerticalRangeMin):PX_ABS(pcd->RightVerticalRangeMax); + px_int e=0; + px_double e10=1; + while(value>10){value/=10,e++;e10*=10;}; + value=pcd->RightVerticalRangeMin+i*ValInc; + value/=e10; + + if (e>=3) + { + PX_sprintf2(text,sizeof(text),pcd->Exponential_Format,PX_STRINGFORMAT_FLOAT((px_float)(value)),PX_STRINGFORMAT_INT(e)); + } + else + { + if(IsFloat) + PX_sprintf1(text,sizeof(text),pcd->FloatFlagFormat_L,PX_STRINGFORMAT_FLOAT((px_float)(pcd->LeftVerticalRangeMin+i*ValInc))); + else + PX_sprintf1(text,sizeof(text),pcd->IntFlagFormat_L,PX_STRINGFORMAT_INT((px_int)(pcd->LeftVerticalRangeMin+i*ValInc))); + } + + + } + break; + default: + case PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE_NORMAL: + { + if(IsFloat) + PX_sprintf1(text,sizeof(text),pcd->FloatFlagFormat_L,PX_STRINGFORMAT_FLOAT((px_float)(pcd->RightVerticalRangeMin+i*ValInc))); + else + PX_sprintf1(text,sizeof(text),pcd->IntFlagFormat_L,PX_STRINGFORMAT_INT((px_int)(pcd->RightVerticalRangeMin+i*ValInc))); + } + break; + } + PX_FontModuleDrawText(psurface,PX_NULL,offsetx+(px_int)(pObject->Width-pcd->RightSpacer+PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER),offsety+(px_int)(pObject->Height-pcd->BottomSpacer-(i)*VerticalInc-6),PX_ALIGN_LEFTTOP,text,pcd->FontColor); + } + } + } + + +} + +static px_void PX_Object_CoordinatesDrawTitle(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_int offsetx; + px_int offsety; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + offsetx=(px_int)objx; + offsety=(px_int)objy; + if (pcd->TopTitle[0]) + { + PX_FontModuleDrawText(psurface,pcd->fontmodule,offsetx+(px_int)(pObject->Width/2),offsety,PX_ALIGN_MIDTOP,pcd->TopTitle,pcd->FontColor); + } + + if (pcd->BottomTitle[0]) + { + PX_FontModuleDrawText(psurface,pcd->fontmodule,offsetx+(px_int)(pObject->Width/2),offsety+(px_int)(pObject->Height-pcd->BottomSpacer+32),PX_ALIGN_MIDBOTTOM,pcd->BottomTitle,pcd->FontColor); + } + + + // px_int x = this->width()-20; + // + // px_int y = ( this->height()/ 2); + // painter.rotate(90); + // painter.drawText(y-30, -x+12,m_RightTitle ); + // + // painter.rotate(180); + // painter.drawText(-y-70, 45,m_LeftTitle); +} + +static px_void PX_Object_CoordinatesDrawDataInfo(px_surface *psurface,PX_Object *pObject,px_double *Horizontal,px_double n,px_double *Vertical,px_int linewidth,px_int Size,px_int Map,px_color Color) +{ + px_double RangeMin,RangeMax; + px_double x,y,w,btm,zeroy; + px_int dx1,dy1,dx2,dy2; + px_int i; + px_int offsetx; + px_int offsety; + + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + offsetx=(px_int)objx; + offsety=(px_int)objy; + + if (Map==PX_OBJECT_COORDINATEDATA_MAP_LEFT) + { + RangeMin=pcd->LeftVerticalRangeMin; + RangeMax=pcd->LeftVerticalRangeMax; + } + + if (Map==PX_OBJECT_COORDINATEDATA_MAP_RIGHT) + { + RangeMin=pcd->RightVerticalRangeMin; + RangeMax=pcd->RightVerticalRangeMax; + } + + switch(pcd->LineMode) + { + case PX_OBJECT_COORDINATES_LINEMODE_PILLAR: + { + zeroy=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,0,Map); + for (i=0;i=pcd->HorizontalRangeMin) + { + + x=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i-1])-pcd->DataPillarWidth/2; + y=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i]/n,Map); + + w=pcd->DataPillarWidth; + btm=zeroy; + + if (y>btm) + { + double tem; + tem=btm; + btm=y; + y=tem; + } + + if (!(btmTopSpacer||y>pObject->Height-pcd->BottomSpacer)) + { + if (yTopSpacer) + { + y=pcd->TopSpacer; + } + if (btm>pObject->Height-pcd->BottomSpacer) + { + btm=pObject->Height-pcd->BottomSpacer; + } + if (x-(px_int)x>0.1) + { + PX_GeoDrawRect(psurface,offsetx+(px_int)x,offsety+(px_int)y,offsetx+(px_int)(x+w),offsety+(px_int)(btm),Color); + } + else + { + PX_GeoDrawRect(psurface,offsetx+(px_int)x,offsety+(px_int)y,offsetx+(px_int)(x+w),offsety+(px_int)(btm),Color); + } + } + + + + } + if(Horizontal[i]>pcd->HorizontalRangeMax) + break; + } + } + break; + case PX_OBJECT_COORDINATES_LINEMODE_LINES: + default: + { + for (i=0;i=pcd->HorizontalRangeMin) + { + + if(i>0){ + px_point pt1,pt2; + + dx1=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i-1]); + dy1=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i-1]/n,Map); + dx2=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i]); + dy2=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i]/n,Map); + + if(PX_isLineCrossRect(PX_POINT((px_float)dx1,(px_float)dy1,0),PX_POINT((px_float)dx2,(px_float)dy2,0),PX_RECT((px_float)pcd->LeftSpacer,(px_float)pcd->TopSpacer,(px_float)PX_Object_CoordinatesGetCoordinateWidth(pObject),(px_float)PX_Object_CoordinatesGetCoordinateHeight(pObject)),&pt1,&pt2)) + { + PX_GeoDrawLine(psurface,(px_int)(offsetx+pt1.x),(px_int)(offsety+pt1.y),(px_int)(offsetx+pt2.x),(px_int)(offsety+pt2.y),linewidth,Color); + } + + } + } + if(Horizontal[i]>pcd->HorizontalRangeMax) + { + if(i>0){ + px_point pt1,pt2; + + dx1=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i-1]); + dy1=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i-1]/n,Map); + dx2=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i]); + dy2=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i]/n,Map); + if(PX_isLineCrossRect(PX_POINT((px_float)dx1,(px_float)dy1,0),PX_POINT((px_float)dx2,(px_float)dy2,0),PX_RECT((px_float)pcd->TopSpacer,(px_float)pcd->LeftSpacer,(px_float)PX_Object_CoordinatesGetCoordinateWidth(pObject),(px_float)PX_Object_CoordinatesGetCoordinateHeight(pObject)),&pt1,&pt2)) + PX_GeoDrawLine(psurface,(px_int)(offsetx+pt1.x),(px_int)(offsety+pt1.y),(px_int)(offsetx+pt2.x),(px_int)(offsety+pt2.y),linewidth,Color); + } + break; + } + } + } + break; + + } +} + + +static px_void PX_Object_CoordinatesDrawData(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_int i; + if(pcd->bDataUpdatePainter) + { + for ( i=0;ivData.size;i++) + { + PX_Object_CoordinateData *pData=PX_VECTORAT(PX_Object_CoordinateData,&pcd->vData,i); + if(pData->Visibled) + { + if (pData->Normalization==0) + { + PX_Object_CoordinatesDrawDataInfo(psurface,pObject,pData->MapHorizontalArray,1.0,pData->MapVerticalArray,pData->linewidth,pData->Size,pData->Map,pData->Color); + } + else + { + PX_Object_CoordinatesDrawDataInfo(psurface,pObject,pData->MapHorizontalArray,pData->Normalization,pData->MapVerticalArray,pData->linewidth,pData->Size,pData->Map,pData->Color); + } + } + + } + } +} +static px_void PX_Object_CoordinatesDrawScaleDraging(px_surface *psurface,PX_Object *pObject) +{ + px_int offsetx; + px_int offsety; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + offsetx=(px_int)objx; + offsety=(px_int)objy; + + if (!pcd->bScaleDrag) + { + return; + } + + if(pcd->DragingPoint.yDragStartPoint.y&&pcd->DragingPoint.xDragStartPoint.x) + PX_GeoDrawRect(psurface,offsetx+(px_int)pcd->DragStartPoint.x,offsety+(px_int)pcd->DragStartPoint.y,offsetx+(px_int)pcd->DragingPoint.x,offsety+(px_int)pcd->DragingPoint.y,PX_COLOR(96,171,81,128)); + else + PX_GeoDrawRect(psurface,offsetx+(px_int)pcd->DragStartPoint.x,offsety+(px_int)pcd->DragStartPoint.y,offsetx+(px_int)pcd->DragingPoint.x,offsety+(px_int)pcd->DragingPoint.y,PX_COLOR(96,167,233,128)); + +} + +static px_void PX_Object_CoordinatesDrawHelpLine(px_surface *psurface,PX_Object *pObject) +{ + px_int x,y; + px_double value; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (!pcd->ShowHelpLine) + { + return; + } + //Draw X line + + + value=PX_Object_CoordinatesMapPixelValueToVertical(pObject,pcd->helpLineX,PX_OBJECT_COORDINATEDATA_MAP_HORIZONTAL); + + if (value>pcd->HorizontalRangeMin&&valueHorizontalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=value; + px_char text[16]; + x=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,value); + + PX_GeoDrawLine(psurface,(px_int)objx+x,(px_int)(objy+objHeight-pcd->BottomSpacer),(px_int)objx+x,(px_int)objy+pcd->TopSpacer,(px_int)1,pcd->helpLineColor); + + + //Draw text + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + X=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,value); + Y=(px_int)(objHeight-pcd->BottomSpacer); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)(objx+X-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER*1.5),(px_int)objy+Y,PX_ALIGN_LEFTTOP,text,pcd->helpLineColor); + + } + + + + //Draw YL line + + + value=PX_Object_CoordinatesMapPixelValueToVertical(pObject,pcd->helpLineY,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + if (value>pcd->LeftVerticalRangeMin&&valueLeftVerticalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=value; + px_char text[16]; + + y=pcd->helpLineY;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,value,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + PX_GeoDrawLine(psurface,(px_int)objx+pcd->LeftSpacer,(px_int)objy+y,(px_int)(objx+objWidth-pcd->RightSpacer),(px_int)objy+y,1,pcd->helpLineColor); + //Draw text + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000000001) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + X=pcd->LeftSpacer; + Y=y;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,ValInc,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)objx+X,(px_int)objy+Y-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER*2-1,PX_ALIGN_LEFTTOP,text,pcd->helpLineColor); + + } + + + //Draw YR line + + value=PX_Object_CoordinatesMapPixelValueToVertical(pObject,pcd->helpLineY,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + + if (value>pcd->RightVerticalRangeMin&&valueRightVerticalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=value; + px_char text[16]; + + y=pcd->helpLineY;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,pflgl->Y,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + PX_GeoDrawLine(psurface,(px_int)objx+pcd->LeftSpacer,(px_int)objy+y,(px_int)(objx+objWidth-pcd->RightSpacer),(px_int)objy+y,(px_int)(1),pcd->helpLineColor); + + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + X=(px_int)(objWidth-pcd->RightSpacer); + Y=y;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,ValInc,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)objx+X,(px_int)objy+Y-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER*2-1,PX_ALIGN_LEFTTOP,text,pcd->helpLineColor); + + } +} + + + +static px_void PX_Object_CoordinatesDrawFlagLine(px_surface *psurface,PX_Object *pObject) +{ + px_int x,y,i; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + for (i=0;ivFlagLine.size;i++) + { + //Draw X line + PX_Object_CoordinateFlagLine *pflgl=PX_VECTORAT(PX_Object_CoordinateFlagLine,&pcd->vFlagLine,i); + if(pflgl->XYshow&PX_OBJECT_COORDINATEFLAGLINE_XSHOW) + { + if (pflgl->X>=pcd->HorizontalRangeMin&&pflgl->X<=pcd->HorizontalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=pflgl->X; + px_char text[16]; + x=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,pflgl->X); + + PX_GeoDrawLine(psurface,(px_int)objx+x,(px_int)((px_int)objy+objHeight-pcd->BottomSpacer),(px_int)objx+x,(px_int)objy+pcd->TopSpacer,(px_int)pflgl->LineWidth,pflgl->color); + //Draw text + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + X=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,pflgl->X); + Y=(px_int)(objHeight-pcd->BottomSpacer); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)((px_int)objx+X-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER*1.5),(px_int)objy+Y,PX_ALIGN_LEFTTOP,text,pcd->FontColor); + } + } + + + //Draw YL line + + if(pflgl->XYshow&PX_OBJECT_COORDINATEFLAGLINE_XSHOW) + { + if (pflgl->Y>=pcd->LeftVerticalRangeMin&&pflgl->Y<=pcd->LeftVerticalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=pflgl->Y; + px_char text[16]; + y=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,pflgl->Y,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + PX_GeoDrawLine(psurface,(px_int)objx+pcd->LeftSpacer,(px_int)objy+y,(px_int)((px_int)objx+objWidth-pcd->RightSpacer),(px_int)objy+y,(px_int)(pflgl->LineWidth),pflgl->color); + //Draw text + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000000001) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + X=pcd->LeftSpacer; + Y=y;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,ValInc,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)objx+X-4*PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER,(px_int)objy+Y-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER,PX_ALIGN_LEFTTOP,text,pcd->FontColor); + } + } + + + //Draw YR line + if(pflgl->XYshow&PX_OBJECT_COORDINATEFLAGLINE_YRSHOW) + { + if (pflgl->Y>=pcd->RightVerticalRangeMin&&pflgl->Y<=pcd->RightVerticalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=pflgl->Y; + px_char text[16]; + + y=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,pflgl->Y,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + PX_GeoDrawLine(psurface,(px_int)objx+pcd->LeftSpacer,(px_int)objy+y,(px_int)((px_int)objx+objWidth-pcd->RightSpacer),(px_int)objy+y,(px_int)(pflgl->LineWidth),pflgl->color); + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + X=(px_int)(objWidth-pcd->RightSpacer); + Y=y;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,ValInc,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)objx+X,(px_int)objy+Y-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER,PX_ALIGN_LEFTTOP,text,pcd->FontColor); + } + } + } +} + + +px_void PX_Object_CoordinatesDrawMarkLine(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + if (pcd->MarkValueEnabled&&pcd->OnMarkStatus) + { + if(pcd->MarkLineX!=-1) + { + PX_GeoDrawLine(psurface,pcd->MarkLineX,pcd->TopSpacer,pcd->MarkLineX,(px_int)(pObject->Height-pcd->BottomSpacer),1,PX_COLOR(255,255,0,0)); + } + } +} + + + +px_void PX_Object_CoordinatesRestoreCoordinates(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd->bScaling) + { + return; + } + PX_Object_CoordinatesSetHorizontalMin(pObject,pcd->ResHorizontalRangeMin); + PX_Object_CoordinatesSetHorizontalMax(pObject,pcd->ResHorizontalRangeMax); + PX_Object_CoordinatesSetLeftVerticalMin(pObject,pcd->ResLeftVerticalRangeMin); + PX_Object_CoordinatesSetLeftVerticalMax(pObject,pcd->ResLeftVerticalRangeMax); + PX_Object_CoordinatesSetRightVerticalMin(pObject,pcd->ResRightVerticalRangeMin); + PX_Object_CoordinatesSetRightVerticalMax(pObject,pcd->ResRightVerticalRangeMax); + pcd->bScaling=PX_FALSE; +} +px_void PX_Object_CoordinatesScaleCoordinates(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double Min,Max; + px_double dMin; + px_double dMax; + if(!pcd->ScaleEnabled) + { + return; + } + + if (pcd->DragingPoint.x==pcd->DragStartPoint.x) + { + return; + } + if (pcd->DragingPoint.y==pcd->DragStartPoint.y) + { + return; + } + if (!pcd->bScaling) + { + pcd->ResHorizontalRangeMax=pcd->HorizontalRangeMax; + pcd->ResHorizontalRangeMin=pcd->HorizontalRangeMin; + + pcd->ResLeftVerticalRangeMax=pcd->LeftVerticalRangeMax; + pcd->ResLeftVerticalRangeMin=pcd->LeftVerticalRangeMin; + pcd->ResRightVerticalRangeMin=pcd->RightVerticalRangeMin; + pcd->ResRightVerticalRangeMax=pcd->RightVerticalRangeMax; + + pcd->bScaling=PX_TRUE; + } + + + if (pcd->DragStartPoint.xDragingPoint.x) + { + Min=pcd->DragStartPoint.x; + Max=pcd->DragingPoint.x; + } + else + { + Max=pcd->DragStartPoint.x; + Min=pcd->DragingPoint.x; + } + dMin=PX_Object_CoordinatesMapPixelValueToHorizontal(pObject,(px_int)Min); + dMax=PX_Object_CoordinatesMapPixelValueToHorizontal(pObject,(px_int)Max); + + PX_Object_CoordinatesSetHorizontalMin(pObject,dMin); + PX_Object_CoordinatesSetHorizontalMax(pObject,dMax); + + if (pcd->DragStartPoint.yDragingPoint.y) + { + Max=pcd->DragStartPoint.y; + Min=pcd->DragingPoint.y; + } + else + { + Min=pcd->DragStartPoint.y; + Max=pcd->DragingPoint.y; + } + + dMin=PX_Object_CoordinatesMapPixelValueToVertical(pObject,(px_int)Min,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + dMax=PX_Object_CoordinatesMapPixelValueToVertical(pObject,(px_int)Max,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + PX_Object_CoordinatesSetLeftVerticalMin(pObject,dMin); + PX_Object_CoordinatesSetLeftVerticalMax(pObject,dMax); + + dMin=PX_Object_CoordinatesMapPixelValueToVertical(pObject,(px_int)Min,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + dMax=PX_Object_CoordinatesMapPixelValueToVertical(pObject,(px_int)Max,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + + PX_Object_CoordinatesSetRightVerticalMin(pObject,dMin); + PX_Object_CoordinatesSetRightVerticalMax(pObject,dMax); +} + + +px_void PX_Object_CoordinatesRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + + // + // PX_Object_CoordinatesDrawMarkLine(psurface,pObject); + + if(pcd->ShowGuides) + PX_Object_CoordinatesDrawDashed(psurface,pObject); + + PX_Object_CoordinatesDrawDashText(psurface,pObject); + + PX_Object_CoordinatesDrawTitle(psurface,pObject); + + PX_Object_CoordinatesDrawData(psurface,pObject); + + PX_Object_CoordinatesDrawFrameLine(psurface,pObject); + + if(pcd->ScaleEnabled) + PX_Object_CoordinatesDrawScaleDraging(psurface,pObject); + + PX_Object_CoordinatesDrawHelpLine(psurface,pObject); + + PX_Object_CoordinatesDrawFlagLine(psurface,pObject); +} + +px_void PX_Object_CoordinatesFree(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_VectorFree(&pcd->vData); + PX_VectorFree(&pcd->vFlagLine); +} + +px_void PX_Object_CoordinatesCursorPressEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr) +{ + px_float x; + px_float y; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=(PX_Object_Event_GetCursorX(e)-objx); + y=(PX_Object_Event_GetCursorY(e)-objy); + if(!PX_ObjectIsPointInRegion(pObject,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e))) + { + return; + } + + if (xLeftSpacer) + { + x=(px_float)pcd->LeftSpacer; + } + if (x>objWidth-pcd->RightSpacer) + { + x=(objWidth-pcd->RightSpacer); + } + if (yTopSpacer) + { + y=(px_float)pcd->TopSpacer; + } + if (y>objHeight-pcd->BottomSpacer) + { + y=(objHeight-pcd->BottomSpacer); + } + + pcd->DragStartPoint.x=(px_float)(x); + pcd->DragStartPoint.y=(px_float)(y); + + pcd->DragingPoint=pcd->DragStartPoint; + + pcd->bScaleDrag=PX_TRUE; +} + +px_void PX_Object_CoordinatesCursorReleaseEvent( PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + pcd->OnMarkStatus=PX_FALSE; + pcd->MarkLineX=-1; + + if (pcd->bScaleDrag) + { + pcd->bScaleDrag=PX_FALSE; + pcd->DragingPoint.x=(px_float)(PX_Object_Event_GetCursorX(e)-objx); + pcd->DragingPoint.y=(px_float)(PX_Object_Event_GetCursorY(e)-objy); + + if(pcd->DragingPoint.yDragStartPoint.y&&pcd->DragingPoint.xDragStartPoint.x) + { + PX_Object_CoordinatesRestoreCoordinates(pObject); + } + else + { + PX_Object_CoordinatesScaleCoordinates(pObject); + } + } + +} + +px_void PX_Object_CoordinatesCursorDragEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pcd->bScaleDrag) + { + px_float x=(PX_Object_Event_GetCursorX(e)-objx); + px_float y=(PX_Object_Event_GetCursorY(e)-objy); + + pcd->OnMarkStatus=PX_FALSE; + pcd->MarkLineX=-1; + + // emit SignalOnMousePosition(this->MapPixelValueToHorizontal(e->x()), + // e->x(), + // this->MapPixelValueToVertical(e->y(),COORDINATEDATA_MAP_RIGHT)); + if (xLeftSpacer) + { + x=(px_float)pcd->LeftSpacer; + } + if (x>objWidth-pcd->RightSpacer) + { + x=(objWidth-pcd->RightSpacer); + } + if (yTopSpacer) + { + y=(px_float)pcd->TopSpacer; + } + if (y>objHeight-pcd->BottomSpacer) + { + y=(objHeight-pcd->BottomSpacer); + } + + pcd->DragingPoint.x=(px_float)(x); + pcd->DragingPoint.y=(px_float)(y); + } + +} + +px_void PX_Object_CoordinatesCursorMoveEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pcd->ShowHelpLine) + { + px_float x=(PX_Object_Event_GetCursorX(e)-objx); + px_float y=(PX_Object_Event_GetCursorY(e)-objy); + + pcd->OnMarkStatus=PX_FALSE; + pcd->MarkLineX=-1; + + // emit SignalOnMousePosition(this->MapPixelValueToHorizontal(e->x()), + // e->x(), + // this->MapPixelValueToVertical(e->y(),COORDINATEDATA_MAP_RIGHT)); + if (xLeftSpacer) + { + x=(px_float)pcd->LeftSpacer; + } + if (x>objWidth-pcd->RightSpacer) + { + x=(objWidth-pcd->RightSpacer); + } + if (yTopSpacer) + { + y=(px_float)pcd->TopSpacer; + } + if (y>objHeight-pcd->BottomSpacer) + { + y=(objHeight-pcd->BottomSpacer); + } + + if (pcd->bScaleDrag) + { + pcd->DragingPoint.x=(px_float)(x); + pcd->DragingPoint.y=(px_float)(y); + } + + pcd->helpLineX=(px_int)(x); + pcd->helpLineY=(px_int)(y); + } +} + + + + +PX_Object *PX_Object_CoordinatesCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_FontModule *fontmodule) +{ + PX_Object *pObject; + PX_Object_Coordinates Coordinates; + PX_memset(&Coordinates,0,sizeof(Coordinates)); + Coordinates.mp=mp; + Coordinates.MinHorizontalPixelDividing=PX_OBJECT_COORDINATES_DEFAULE_MINHORIZONTALPIXELDIVIDING; + Coordinates.MinVerticalPixelDividing=PX_OBJECT_COORDINATES_DEFAULE_MINVERTICALPIXELDIVIDING; + Coordinates.HorizontalDividing=PX_OBJECT_COORDINATES_DEFAULE_DIVIDING; + Coordinates.LeftVerticalDividing=PX_OBJECT_COORDINATES_DEFAULE_DIVIDING; + Coordinates.RightVerticalDividing=PX_OBJECT_COORDINATES_DEFAULE_DIVIDING; + Coordinates.bScaleDrag=PX_FALSE; + Coordinates.guidesShowMode=PX_OBJECT_COORDINATES_GUIDESSHOWMODE_ALL; + Coordinates.helpLineColor=PX_COLOR(255,255,0,0); + Coordinates.ShowHelpLine=PX_TRUE; + + Coordinates.LeftSpacer=(px_int)(1.5f*PX_OBJECT_COORDINATES_DEFAULT_SPACER); + Coordinates.RightSpacer=(px_int)(1.5*PX_OBJECT_COORDINATES_DEFAULT_SPACER); + Coordinates.TopSpacer=PX_OBJECT_COORDINATES_DEFAULT_SPACER; + Coordinates.BottomSpacer=PX_OBJECT_COORDINATES_DEFAULT_SPACER; + + Coordinates.HorizontalRangeMin=-150; + Coordinates.HorizontalRangeMax=150; + + Coordinates.LeftVerticalRangeMin=0; + Coordinates.LeftVerticalRangeMax=100; + + Coordinates.RightVerticalRangeMax=1.0; + Coordinates.RightVerticalRangeMin=0; + + Coordinates.FloatFlagFormat_H=PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_H; + Coordinates.IntFlagFormat_H=PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_H; + + Coordinates.FloatFlagFormat_L=PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_L; + Coordinates.IntFlagFormat_L=PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_L; + + Coordinates.FloatFlagFormat_R=PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_R; + Coordinates.IntFlagFormat_R=PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_R; + + Coordinates.Exponential_Format=PX_OBJECT_COORDINATES_DEFAULT_EXPONENTIAL_FORMAT; + + Coordinates.bScaling=PX_FALSE; + + Coordinates.FontSize=PX_OBJECT_COORDINATES_DEFAULT_FONT_SIZE; + Coordinates.DataLineWidth=PX_OBJECT_COORDINATES_DEFAULT_LINE_WIDTH; + Coordinates.FontColor= PX_OBJECT_UI_DEFAULT_FONTCOLOR; + Coordinates.borderColor= PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + Coordinates.DashColor=PX_COLOR(PX_OBJECT_COORDINATES_DEFAULT_DASH_RGB); + Coordinates.OnMarkStatus=PX_FALSE; + Coordinates.MarkValueEnabled=PX_TRUE; + Coordinates.MarkLineX=-1; + + Coordinates.bDataUpdatePainter=PX_TRUE; + + Coordinates.LineMode=PX_OBJECT_COORDINATES_LINEMODE_LINES; + + Coordinates.LeftTextShow=PX_TRUE; + Coordinates.RightTextShow=PX_TRUE; + Coordinates.HorizontalTextShow=PX_TRUE; + Coordinates.ScaleEnabled=PX_TRUE; + Coordinates.ShowGuides=PX_TRUE; + + Coordinates.LeftTitle=""; + Coordinates.RightTitle=""; + Coordinates.TopTitle=""; + Coordinates.BottomTitle=""; + Coordinates.fontmodule=fontmodule; + Coordinates.leftTextDisplayMode=PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE_NORMAL; + Coordinates.RightTextDisplayMode=PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE_NORMAL; + + PX_VectorInitialize(mp,&Coordinates.vData,sizeof(PX_Object_CoordinateData),16); + PX_VectorInitialize(mp,&Coordinates.vFlagLine,sizeof(PX_Object_CoordinateFlagLine),16); + + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_COORDINATE,PX_Object_CoordinatesUpdate,PX_Object_CoordinatesRender,PX_Object_CoordinatesFree,&Coordinates,sizeof(PX_Object_Coordinates)); + + //PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_CoordinatesCursorMoveEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_CoordinatesCursorMoveEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_CoordinatesCursorDragEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_CoordinatesCursorPressEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_CoordinatesCursorReleaseEvent,PX_NULL); + + return pObject; +} + +PX_Object_FilterEditor * PX_Object_GetFilterEditor(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_FILTEREDITOR) + { + return (PX_Object_FilterEditor *)Object->pObject; + } + return PX_NULL; +} + +static px_void PX_Object_FilterEditorDrawFrameLine(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_int offsetx; + px_int offsety; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + offsetx=(px_int)objx; + offsety=(px_int)objy; + + PX_GeoDrawLine(psurface,offsetx,offsety,offsetx+(px_int)(objWidth-1),offsety,PX_OBJECT_FILTEREDITOR_DEFAULT_FRAMELINE_WIDTH,pfe->borderColor); + PX_GeoDrawLine(psurface,offsetx,offsety,offsetx,offsety+(px_int)(objHeight-1),PX_OBJECT_FILTEREDITOR_DEFAULT_FRAMELINE_WIDTH,pfe->borderColor); + PX_GeoDrawLine(psurface,(px_int)(offsetx+objWidth-1),offsety+(px_int)(objHeight-1),offsetx,offsety+(px_int)objHeight-1,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pfe->borderColor); + PX_GeoDrawLine(psurface,(px_int)(offsetx+objWidth-1),offsety+(px_int)(objHeight-1),offsetx+(px_int)(objWidth-1),offsety,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pfe->borderColor); +} + +static px_void PX_Object_FilterEditorDrawSelectDraging(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_int offsetx; + px_int offsety; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + offsetx=(px_int)objx; + offsety=(px_int)objy; + + if (!pfe->bSelectDrag) + { + return; + } + + PX_GeoDrawRect(psurface,(px_int)(offsetx+pfe->DragStartPoint.x),(px_int)(offsety+(px_int)pfe->DragStartPoint.y),(px_int)(offsetx+(px_int)pfe->DragingPoint.x),(px_int)(offsety+(px_int)pfe->DragingPoint.y),PX_COLOR(96,171,81,128)); +} + +static px_void PX_Object_FilterEditorDrawPt(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_int i; + px_float oftx; + px_float ofty; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + oftx=objx; + ofty=objy; + + for (i=0;iopCount;i++) + { + PX_GeoDrawSolidCircle(psurface,(px_int)(oftx+pfe->pt[i].x),(px_int)(ofty+pfe->pt[i].y),pfe->radius,pfe->ptColor); + if (pfe->pt[i].bselect||pfe->pt[i].bCursor) + { + PX_GeoDrawCircle(psurface,(px_int)(oftx+pfe->pt[i].x),(px_int)(ofty+pfe->pt[i].y),pfe->radius+2,1,pfe->ptColor); + } + } + + for (i=0;iopCount-1;i++) + { + PX_GeoDrawLine(psurface,(px_int)(oftx+pfe->pt[i].x),(px_int)(ofty+pfe->pt[i].y),(px_int)(oftx+pfe->pt[i+1].x),(px_int)(ofty+pfe->pt[i+1].y),2,pfe->ptColor); + } + +} + +static px_void PX_Object_FilterEditorDrawHelpLine(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_char text[16]; + px_double midy,incx,incy,x,y,val; + px_double oftx,ofty; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + if (!pfe->ShowHelpLine) + { + return; + } + oftx=objx; + ofty=objy; + midy=objHeight/2; + incy=objHeight/2/(pfe->VerticalDividing/2); + + //up + for (y=midy;y>=0;y-=incy) + { + //line + PX_GeoDrawLine(psurface,(px_int)(oftx),(px_int)(ofty+y),(px_int)(oftx+objWidth),(px_int)(ofty+y),1,pfe->helpLineColor); + val=(midy-y)/(objHeight/2)*pfe->rangedb; + switch (pfe->FilterType) + { + case PX_OBJECT_FILTER_TYPE_dB: + PX_sprintf1(text,sizeof(text),"+%1.2db",PX_STRINGFORMAT_FLOAT((px_float)val)); + break; + case PX_OBJECT_FILTER_TYPE_Liner: + PX_sprintf1(text,sizeof(text),"+%1.2",PX_STRINGFORMAT_FLOAT((px_float)val)); + break; + } + + //text + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)(oftx-1),(px_int)(ofty+y-5),PX_ALIGN_RIGHTTOP,text,pfe->FontColor); + } + //down + for (y=midy;y<=objHeight;y+=incy) + { + //line + PX_GeoDrawLine(psurface,(px_int)(oftx),(px_int)(ofty+y),(px_int)(oftx+objWidth),(px_int)(ofty+y),1,pfe->helpLineColor); + val=(midy-y)/(objHeight/2)*pfe->rangedb; + switch (pfe->FilterType) + { + case PX_OBJECT_FILTER_TYPE_dB: + PX_sprintf1(text,sizeof(text),"%1.2db",PX_STRINGFORMAT_FLOAT((px_float)val)); + break; + case PX_OBJECT_FILTER_TYPE_Liner: + PX_sprintf1(text,sizeof(text),"%1.2",PX_STRINGFORMAT_FLOAT((px_float)val)); + break; + } + //text + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)(oftx-1),(px_int)(ofty+y-5),PX_ALIGN_RIGHTTOP,text,pfe->FontColor); + } + + //horizontal + incx=objWidth/pfe->HorizontalDividing; + for (x=0;xhelpLineColor); + val=x/objWidth; + //text + if (pfe->showHorizontal) + { + PX_sprintf1(text,sizeof(text),"%1.2",PX_STRINGFORMAT_FLOAT((px_float)val)); + PX_FontModuleDrawText(psurface,PX_NULL,(px_int)(oftx+x-1),(px_int)(ofty+objHeight+3),PX_ALIGN_CENTER,text,pfe->FontColor); + } + } + +} + +px_void PX_Object_FilterEditorCursorReleaseEvent( PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + + pfe->bSelectDrag=PX_FALSE; + pfe->bAdjust=PX_FALSE; +} + + +px_void PX_Object_FilterEditorRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object_FilterEditorDrawFrameLine(psurface,pObject); + PX_Object_FilterEditorDrawHelpLine(psurface,pObject); + PX_Object_FilterEditorDrawPt(psurface,pObject); + PX_Object_FilterEditorDrawSelectDraging(psurface,pObject); +} + +px_void PX_Object_FilterEditorCursorPressEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr) +{ + px_int i,j; + px_bool bSelectlge1=PX_FALSE; + px_float x; + px_float y; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=(PX_Object_Event_GetCursorX(e)-objx); + y=(PX_Object_Event_GetCursorY(e)-objy); + + + if(!PX_ObjectIsPointInRegion(pObject,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e))) + { + return; + } + + for (i=0;iopCount;i++) + { + if(PX_isPointInCircle(PX_POINT(x,y,0),PX_POINT((px_float)pfe->pt[i].x,(px_float)pfe->pt[i].y,0),(px_float)pfe->radius)) + { + if (!pfe->pt[i].bselect) + { + for (j=0;jopCount;j++) + { + pfe->pt[j].bselect=PX_FALSE; + } + pfe->pt[i].bselect=PX_TRUE; + } + bSelectlge1=PX_TRUE; + } + + } + + if (bSelectlge1) + { + pfe->bSelectDrag=PX_FALSE; + pfe->bAdjust=PX_TRUE; + pfe->lastAdjustPoint.x=(x); + pfe->lastAdjustPoint.y=(y); + } + else + { + for (i=0;iopCount;i++) + { + pfe->pt[i].bselect=PX_FALSE; + } + pfe->DragStartPoint.x=(x); + pfe->DragStartPoint.y=(y); + pfe->DragingPoint=pfe->DragStartPoint; + pfe->bSelectDrag=PX_TRUE; + pfe->bAdjust=PX_FALSE; + } + +} + +px_void PX_Object_FilterEditorCursorMoveEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_int i; + px_float x,y; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=(PX_Object_Event_GetCursorX(e)-objx); + y=(PX_Object_Event_GetCursorY(e)-objy); + + + if(!PX_ObjectIsPointInRegion(pObject,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e))) + { + return; + } + + for (i=0;iopCount;i++) + { + if(PX_isPointInCircle(PX_POINT(x,y,0),PX_POINT((px_float)pfe->pt[i].x,(px_float)pfe->pt[i].y,0),(px_float)pfe->radius)) + { + pfe->pt[i].bCursor=PX_TRUE; + } + else + { + pfe->pt[i].bCursor=PX_FALSE; + } + } + +} + + +px_void PX_Object_FilterEditorCursorDragEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + px_int i; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_float x,y; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=(PX_Object_Event_GetCursorX(e)-objx); + y=(PX_Object_Event_GetCursorY(e)-objy); + + if (pfe->bSelectDrag) + { + px_rect rect; + + if (x<0) + { + x=0; + } + if (x>objWidth) + { + x=(objWidth); + } + if (y<0) + { + y=0; + } + if (y>objHeight) + { + y=(objHeight); + } + + pfe->DragingPoint.x=(px_float)(x); + pfe->DragingPoint.y=(px_float)(y); + rect=PX_RECT(pfe->DragStartPoint.x,pfe->DragStartPoint.y,x-pfe->DragStartPoint.x,y-pfe->DragStartPoint.y); + for (i=0;iopCount;i++) + { + if(PX_isPointInRect(PX_POINT((px_float)pfe->pt[i].x,(px_float)pfe->pt[i].y,0),rect)) + { + pfe->pt[i].bselect=PX_TRUE; + } + else + { + pfe->pt[i].bselect=PX_FALSE; + } + } + } + + else if (pfe->bAdjust) + { + for (i=0;iopCount;i++) + { + if(pfe->pt[i].bselect==PX_TRUE) + { + pfe->pt[i].y+=(px_int)(y-pfe->lastAdjustPoint.y); + if (pfe->pt[i].y<0) + { + pfe->pt[i].y=0; + } + if (pfe->pt[i].y>objHeight-1) + { + pfe->pt[i].y=(px_int)objHeight-1; + } + } + } + pfe->lastAdjustPoint=PX_POINT(x,y,0); + } +} + + +px_void PX_Object_FilterEditorSetOperateCount(PX_Object *pObject,px_int count) +{ + px_int i; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_float Inc; + px_int y; + if (count<2) + { + count=2; + } + if (count>PX_COUNTOF(pfe->pt)) + { + count=PX_COUNTOF(pfe->pt); + } + Inc=pObject->Width/(count-1); + y=(px_int)(pObject->Height/2); + for (i=0;ipt[i].x=(px_int)(Inc*i); + pfe->pt[i].y=y; + } + pfe->opCount=count; +} + +px_void PX_Object_FilterEditorSetType(PX_Object *Object,PX_OBJECT_FILTER_TYPE type) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->FilterType=type; + } +} + +px_void PX_Object_FilterEditorSetHorizontalShow(PX_Object *Object,px_bool HorizontalShow) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->showHorizontal=HorizontalShow; + } +} + +px_void PX_Object_FilterEditorReset(PX_Object *Object) +{ + px_int i,y; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + y=(px_int)(Object->Height/2); + for (i=0;iopCount;i++) + { + pfe->pt[i].y=y; + } +} + +px_void PX_Object_FilterEditorSetRange(PX_Object *Object,px_double range) +{ + + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->rangedb=range; + } +} + +px_void PX_Object_FilterEditorSetFontColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->FontColor=clr; + } +} + +px_void PX_Object_FilterEditorSetBorderColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->borderColor=clr; + } +} + +px_void PX_Object_FilterEditorSethelpLineColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->helpLineColor=clr; + } +} + +px_void PX_Object_FilterEditorSetFontSize(PX_Object *Object,px_int size) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->FontSize=size; + } +} + +px_void PX_Object_FilterEditorSetHorizontalDividing(PX_Object *Object,px_int div) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->HorizontalDividing=div; + } +} + +px_void PX_Object_FilterEditorSetVerticalDividing(PX_Object *Object,px_int div) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->VerticalDividing=div; + } +} + +px_void PX_Object_FilterEditorMapData(PX_Object *Object,px_double data[],px_int size) +{ + px_int i,mapIndex; + px_double ptValue[PX_OBJECT_FILTER_EDITOR_MAX_PT]; + px_double step,frac,d2,d1,dm; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (!pfe) + { + return; + } + //pt to value + for (i=0;iopCount;i++) + { + if (pfe->pt[i].y>Object->Height-10) + { + ptValue[i]=-1000; + } + else + { + ptValue[i]=((Object->Height/2)-pfe->pt[i].y)/(Object->Height/2)*pfe->rangedb; + } + } + + step=1.0/(pfe->opCount-1); + + for (i=0;iFilterType) + { + case PX_OBJECT_FILTER_TYPE_dB: + dm=PX_pow_dd(10,dm/20.0); + break; + case PX_OBJECT_FILTER_TYPE_Liner: + break; + } + data[i]=dm; + } +} + +px_double PX_Object_FilterEditorMapValue(PX_Object *pObject,px_double precent) +{ + px_int mapIndex; + px_double step,frac,d2,d1,dm; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + if (!pfe) + { + return 1; + } + + step=1.0/(pfe->opCount-1); + mapIndex=(px_int)(precent/step); + if (mapIndex>pfe->opCount-1) + { + return 1; + } + frac=(precent-mapIndex*step)/step; + d2=((pObject->Height/2)-pfe->pt[mapIndex+1].y)/(pObject->Height/2)*pfe->rangedb; + d1=((pObject->Height/2)-pfe->pt[mapIndex].y)/(pObject->Height/2)*pfe->rangedb; + dm=d1+frac*(d2-d1); + switch(pfe->FilterType) + { + case PX_OBJECT_FILTER_TYPE_dB: + dm=PX_pow_dd(10,dm/20.0); + break; + case PX_OBJECT_FILTER_TYPE_Liner: + break; + } + return dm; +} + +PX_Object * PX_Object_FilterEditorCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_OBJECT_FILTER_TYPE type) +{ + PX_Object *pObject; + PX_Object_FilterEditor FilterEditor; + PX_memset(&FilterEditor,0,sizeof(FilterEditor)); + FilterEditor.showHorizontal=PX_TRUE; + FilterEditor.borderColor=PX_COLOR(255,0,0,0); + FilterEditor.FontColor=PX_COLOR(255,0,0,0); + FilterEditor.bSelectDrag=PX_FALSE; + FilterEditor.bAdjust=PX_FALSE; + FilterEditor.DragingPoint=PX_POINT(0,0,0); + FilterEditor.DragStartPoint=PX_POINT(0,0,0); + FilterEditor.FontSize=16; + FilterEditor.helpLineColor=PX_COLOR(255,0,0,0); + FilterEditor.ptColor=PX_COLOR(255,0,0,0); + FilterEditor.HorizontalDividing=16; + FilterEditor.VerticalDividing=16; + FilterEditor.ShowHelpLine=PX_TRUE; + FilterEditor.showHorizontal=PX_FALSE; + FilterEditor.FilterType=type; + FilterEditor.rangedb=6; + FilterEditor.radius=PX_OBJECT_FILTER_EDITOR_DEFAULT_RADIUS; + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_FILTEREDITOR,PX_NULL,PX_Object_FilterEditorRender,PX_NULL,&FilterEditor,sizeof(PX_Object_FilterEditor)); + PX_Object_FilterEditorSetOperateCount(pObject,8); + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_FilterEditorCursorMoveEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_FilterEditorCursorDragEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_FilterEditorCursorPressEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_FilterEditorCursorReleaseEvent,PX_NULL); + return pObject; +} + +px_void PX_Object_FilterEditorSetborderColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + pfe->borderColor=clr; +} + + + +px_void PX_Object_FilterEditorSetptColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + pfe->ptColor=clr; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_Coordinate.h b/UI/PainterEngine/kernel/PX_Object_Coordinate.h new file mode 100644 index 0000000..2b2c579 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Coordinate.h @@ -0,0 +1,279 @@ +#ifndef PX_OBJECT_COORDINATE_H +#define PX_OBJECT_COORDINATE_H +#include "PX_Object.h" + +#define PX_OBJECT_COORDINATEDATA_MAP_LEFT 0 +#define PX_OBJECT_COORDINATEDATA_MAP_RIGHT 1 +#define PX_OBJECT_COORDINATEDATA_MAP_HORIZONTAL 2 + +#define PX_OBJECT_COORDINATES_DEFAULE_MINHORIZONTALPIXELDIVIDING 48 +#define PX_OBJECT_COORDINATES_DEFAULE_MINVERTICALPIXELDIVIDING 20 +#define PX_OBJECT_COORDINATES_DEFAULE_DIVIDING 10 +#define PX_OBJECT_COORDINATES_DEFAULT_SPACER 64 +#define PX_OBJECT_COORDINATES_DEFAULT_VERTICALFLAG_OFFSET 8 +#define PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER 8 + +#define PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH 2 +#define PX_OBJECT_COORDINATES_DEFAULT_FONT_SIZE 16 +#define PX_OBJECT_COORDINATES_DEFAULT_DASH_RGB 255,100,100,255 +#define PX_OBJECT_COORDINATES_DEFAULT_LINE_WIDTH 2.0f + +#define PX_OBJECT_COORDINATES_DEFAULT_EXPONENTIAL_FORMAT "%1.2e%2" +#define PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_H "%1.2" +#define PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_H "%1" + +#define PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_L "%1.2" +#define PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_L "%1" + +#define PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_R "%1.2" +#define PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_R "%1" + + +#define PX_OBJECT_COORDINATEFLAGLINE_XSHOW 1 +#define PX_OBJECT_COORDINATEFLAGLINE_YLSHOW 2 +#define PX_OBJECT_COORDINATEFLAGLINE_YRSHOW 4 + +typedef enum +{ + PX_OBJECT_COORDINATES_LINEMODE_LINES=0, + PX_OBJECT_COORDINATES_LINEMODE_PILLAR=1, +}PX_OBJECT_COORDINATES_LINEMODE; + +typedef enum +{ + PX_OBJECT_COORDINATES_GUIDESSHOWMODE_ALL=0, + PX_OBJECT_COORDINATES_GUIDESSHOWMODE_HORIZONTAL=1, + PX_OBJECT_COORDINATES_GUIDESSHOWMODE_VERTICAL=2 +}PX_OBJECT_COORDINATES_GUIDESSHOWMODE; + +typedef enum +{ + PX_OBJECT_COORDINATES_COORDINATEDATA_MAP_LEFT, + PX_OBJECT_COORDINATES_COORDINATEDATA_MAP_RIGHT, +}PX_OBJECT_COORDINATES_COORDINATEDATA_MAP; + +typedef enum +{ + PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE_NORMAL, + PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE_EXPONENTRAL, +}PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE; + + +typedef struct +{ + px_double X,Y; + px_color color; + px_float LineWidth; + px_uchar XYshow; +}PX_Object_CoordinateFlagLine; + +typedef struct +{ + px_double *MapHorizontalArray; + px_double *MapVerticalArray; + px_double Normalization; + px_color Color; + PX_OBJECT_COORDINATES_COORDINATEDATA_MAP Map; + px_int linewidth; + px_int ID; + px_int Visibled; + px_int Size; +}PX_Object_CoordinateData; + + +typedef struct +{ + px_memorypool *mp; + px_double HorizontalRangeMin; + px_double HorizontalRangeMax; + px_double LeftVerticalRangeMin,LeftVerticalRangeMax; + px_double RightVerticalRangeMin,RightVerticalRangeMax; + PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE leftTextDisplayMode,RightTextDisplayMode; + + px_double ResHorizontalRangeMin; + px_double ResHorizontalRangeMax; + px_double ResLeftVerticalRangeMin,ResLeftVerticalRangeMax; + px_double ResRightVerticalRangeMin,ResRightVerticalRangeMax; + + + px_int MinVerticalPixelDividing; + px_int MinHorizontalPixelDividing; + px_int HorizontalDividing; + px_int LeftVerticalDividing; + px_int RightVerticalDividing; + + px_int LeftSpacer,RightSpacer,TopSpacer,BottomSpacer; + + const px_char *Exponential_Format; + const px_char *FloatFlagFormat_H; + const px_char *IntFlagFormat_H; + const px_char *FloatFlagFormat_L; + const px_char *IntFlagFormat_L; + const px_char *FloatFlagFormat_R; + const px_char *IntFlagFormat_R; + const px_char *LeftTitle,*RightTitle,*TopTitle,*BottomTitle; + + px_point DragStartPoint; + px_point DragingPoint; + px_int bScaleDrag; + px_int bScaling; + px_int MarkLineX; + + px_bool ScaleEnabled; + px_bool ShowGuides; + px_bool MarkValueEnabled; + px_bool OnMarkStatus; + px_bool bDataUpdatePainter; + px_bool ShowHelpLine; + + px_bool LeftTextShow,RightTextShow,HorizontalTextShow; + + px_color DashColor; + px_color FontColor; + px_color borderColor; + px_color helpLineColor; + int FontSize; + + PX_OBJECT_COORDINATES_LINEMODE LineMode; + PX_OBJECT_COORDINATES_GUIDESSHOWMODE guidesShowMode; + + px_float DataLineWidth; + px_float DataPillarWidth; + + px_float GuidesLineWidth; + px_vector vData; + px_vector vFlagLine; + + px_int helpLineX,helpLineY; + PX_FontModule *fontmodule; +}PX_Object_Coordinates; + + +PX_Object_Coordinates *PX_Object_GetCoordinates(PX_Object *pObject); +// +px_void PX_Object_CoordinatesSetMinVerticalPixelDividing(PX_Object *pObject,int val); +px_void PX_Object_CoordinatesSetMinHorizontalPixelDividing(PX_Object *pObject,int val); +px_void PX_Object_CoordinatesSetHorizontalDividing(PX_Object *pObject,int Count); +px_void PX_Object_CoordinatesSetLeftVerticalDividing(PX_Object *pObject,int Count); +px_void PX_Object_CoordinatesSetRightVerticalDividing(PX_Object *pObject,int Count); +px_void PX_Object_CoordinatesSetStyle(PX_Object *pObject,PX_OBJECT_COORDINATES_LINEMODE mode); +px_void PX_Object_CoordinatesSetScaleEnabled(PX_Object *pObject,px_bool Enabled); +px_void PX_Object_CoordinatesSetGuidesVisible(PX_Object *pObject,px_bool Visible); +px_void PX_Object_CoordinatesSetGuidesShowMode(PX_Object *pObject,PX_OBJECT_COORDINATES_GUIDESSHOWMODE mode); +px_void PX_Object_CoordinatesShowHelpLine(PX_Object *pObject,px_bool show); + +px_void PX_Object_CoordinatesSetDataLineWidth(PX_Object *pObject,px_float linewidth ); +px_void PX_Object_CoordinatesSetDataShow(PX_Object *pObject,px_int index,px_bool show ); +px_void PX_Object_CoordinatesSetGuidesLineWidth(PX_Object *pObject,px_float linewidth); +px_void PX_Object_CoordinatesSetGuidesLineColor(PX_Object *pObject,px_color clr); +px_void PX_Object_CoordinatesSetTitleFontSize(PX_Object *pObject,int size); +px_void PX_Object_CoordinatesSetTitleFontColor(PX_Object *pObject,px_color clr); +px_void PX_Object_CoordinatesSetDashLineColor(PX_Object *pObject,px_color clr); +px_void PX_Object_CoordinatesSetLeftTextShow(PX_Object *pObject,px_bool bshow); +px_void PX_Object_CoordinatesSetRightTextShow(PX_Object *pObject,px_bool bshow); +px_void PX_Object_CoordinatesSetHorizontalTextShow(PX_Object *pObject,px_bool bshow); +px_void PX_Object_CoordinatesSetFloatFlagFormatHorizontal(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetIntFlagFormatHorizontal(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetFloatFlagFormatVerticalLeft(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetIntFlagFormatVerticalLeft(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetFloatFlagFormatVerticalRight(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetIntFlagFormatVericalRight(PX_Object *pObject,const char *fmt); + + +px_void PX_Object_CoordinatesSetLeftTextMode(PX_Object *pObject,PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE mode); +px_void PX_Object_CoordinatesSetRightTextMode(PX_Object *pObject,PX_OBJECT_COORDINATES_TEXT_DISPLAYMODE mode); +px_void PX_Object_CoordinatesSetHorizontalMin(PX_Object *pObject,double Min); +px_void PX_Object_CoordinatesSetHorizontalMax(PX_Object *pObject,double Max); +px_void PX_Object_CoordinatesSetLeftVerticalMin(PX_Object *pObject,double Min); +px_void PX_Object_CoordinatesSetLeftVerticalMax(PX_Object *pObject,double Max); +px_void PX_Object_CoordinatesSetRightVerticalMax(PX_Object *pObject,double Max); +px_void PX_Object_CoordinatesSetRightVerticalMin(PX_Object *pObject,double Min); + +px_void PX_Object_CoordinatesSetBorderColor(PX_Object *pObject,px_color clr); +PX_Object_CoordinateData *PX_Object_CoordinatesGetCoordinateData(PX_Object *pObject,px_int index); +int PX_Object_CoordinatesGetCoordinateWidth(PX_Object *pObject); +int PX_Object_CoordinatesGetCoordinateHeight(PX_Object *pObject); +//px_void PX_Object_CoordinatesSetTitleLeft(PX_Object *pObject,const px_char * title); +//px_void PX_Object_CoordinatesSetTitleRight(PX_Object *pObject,const px_char * title); +px_void PX_Object_CoordinatesSetTitleTop(PX_Object *pObject,const px_char * title); +px_void PX_Object_CoordinatesSetTitleBottom(PX_Object *pObject,const px_char * title); + + +px_void PX_Object_CoordinatesSetMarkValueEnabled(PX_Object *pObject,px_bool Enabled); +px_void PX_Object_CoordinatesSetFontColor(PX_Object *pObject,px_color clr); +px_void PX_Object_CoordinatesClearContext(PX_Object *pObject); +px_void PX_Object_CoordinatesClearFlagLine(PX_Object *pObject); +px_void PX_Object_CoordinatesAddData(PX_Object *pObject,PX_Object_CoordinateData data); +px_void PX_Object_CoordinatesAddCoordinateFlagLine(PX_Object *pObject,PX_Object_CoordinateFlagLine Line); +// +px_void PX_Object_CoordinatesSetMargin(PX_Object *pObject,px_int Left,px_int Right,px_int Top,px_int Bottom); +px_void PX_Object_CoordinatesRestoreCoordinates(PX_Object *pObject); +PX_Object *PX_Object_CoordinatesCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_FontModule *fontmodule); + + +#define PX_OBJECT_FILTER_EDITOR_MAX_PT 256 +#define PX_OBJECT_FILTER_EDITOR_DEFAULT_RADIUS 6 + +typedef enum +{ + PX_OBJECT_FILTER_TYPE_Liner, + PX_OBJECT_FILTER_TYPE_dB, +}PX_OBJECT_FILTER_TYPE; + + +typedef struct +{ + px_int x,y; + px_bool bselect; + px_bool bCursor; +}PX_Object_FilterEditor_OperatorPoint; + + +typedef struct +{ + px_bool ShowHelpLine; + px_color FontColor; + px_color borderColor; + px_color helpLineColor; + px_color ptColor; + px_bool showHorizontal; + int FontSize; + px_int HorizontalDividing; + px_int VerticalDividing; + px_point DragStartPoint; + px_point lastAdjustPoint; + px_point DragingPoint; + px_int bSelectDrag; + px_int bAdjust; + px_int opCount; + px_int radius; + px_double rangedb; + PX_OBJECT_FILTER_TYPE FilterType; + PX_Object_FilterEditor_OperatorPoint pt[PX_OBJECT_FILTER_EDITOR_MAX_PT]; +}PX_Object_FilterEditor; + +PX_Object_FilterEditor *PX_Object_GetFilterEditor(PX_Object *Object); + +PX_Object *PX_Object_FilterEditorCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_OBJECT_FILTER_TYPE type); +px_void PX_Object_FilterEditorSethelpLineColor(PX_Object *Object,px_color clr); +px_void PX_Object_FilterEditorSetptColor(PX_Object *Object,px_color clr); + +px_void PX_Object_FilterEditorSetOperateCount(PX_Object *Object,px_int opcount); +px_void PX_Object_FilterEditorSetType(PX_Object *Object,PX_OBJECT_FILTER_TYPE type); +px_void PX_Object_FilterEditorSetHorizontalShow(PX_Object *Object,px_bool HorizontalShow); +px_void PX_Object_FilterEditorReset(PX_Object *Object); +px_void PX_Object_FilterEditorSetRange(PX_Object *Object,px_double range); +px_void PX_Object_FilterEditorSetFontColor(PX_Object *Object,px_color clr); +px_void PX_Object_FilterEditorSetBorderColor(PX_Object *Object,px_color clr); +px_void PX_Object_FilterEditorSethelpLineColor(PX_Object *Object,px_color clr); +px_void PX_Object_FilterEditorSetFontSize(PX_Object *Object,px_int size); +px_void PX_Object_FilterEditorSetHorizontalDividing(PX_Object *Object,px_int div); +px_void PX_Object_FilterEditorSetVerticalDividing(PX_Object *Object,px_int div); +px_void PX_Object_FilterEditorMapData(PX_Object *Object,px_double data[],px_int size); +px_double PX_Object_FilterEditorMapValue(PX_Object *Object,px_double precent); + + + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_CursorButton.c b/UI/PainterEngine/kernel/PX_Object_CursorButton.c new file mode 100644 index 0000000..c95a4f4 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_CursorButton.c @@ -0,0 +1,161 @@ +#include "PX_Object_CursorButton.h" + + +px_void PX_Object_CursorButtonRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_float w,h,_x,_y; + px_uchar alpha; + PX_Object_CursorButton *pcb; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + w=objWidth/4.f; + h=objHeight/4.f; + pcb=PX_Object_GetCursorButton(pObject); + if (!pcb) + { + return; + } + pcb->pushbutton->x=0; + pcb->pushbutton->y=0; + pcb->pushbutton->z=0; + + if(pcb->enter) + { + if(PX_ABS(pcb->c_distance-pcb->c_distance_near)>=1) + pcb->c_distance+=(pcb->c_distance_near-pcb->c_distance)*(elapsed*1.f/200); + else + pcb->c_distance=pcb->c_distance_near; + } + else + { + if(PX_ABS(pcb->c_distance-pcb->c_distance_far)>=1) + pcb->c_distance+=(pcb->c_distance_far-pcb->c_distance)*(elapsed*1.f/200); + else + pcb->c_distance=pcb->c_distance_far; + } + alpha=(px_uchar)(PX_ABS(pcb->c_distance-pcb->c_distance_far)/PX_ABS(pcb->c_distance_far-pcb->c_distance_near)*255); + pcb->c_color._argb.a=alpha; + //left top + _x=objx-pcb->c_distance-1; + _y=objy-pcb->c_distance-1; + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y,(px_int)(_x+w),(px_int)_y+pcb->c_width,pcb->c_color); + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y+pcb->c_width+1,(px_int)_x+pcb->c_width,(px_int)(_y+h),pcb->c_color); + + //left bottom + _x=objx-pcb->c_distance-1; + _y=objy+objHeight+pcb->c_distance; + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y,(px_int)(_x+w),(px_int)_y-pcb->c_width,pcb->c_color); + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y-pcb->c_width-1,(px_int)_x+pcb->c_width,(px_int)(_y-h),pcb->c_color); + + //right top + _x=objx+objWidth+pcb->c_distance; + _y=objy-pcb->c_distance-1; + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y,(px_int)(_x-w),(px_int)_y+pcb->c_width,pcb->c_color); + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y+pcb->c_width+1,(px_int)_x-pcb->c_width,(px_int)(_y+h),pcb->c_color); + + //right bottom + _x=objx+objWidth+pcb->c_distance; + _y=objy+objHeight+pcb->c_distance; + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y,(px_int)(_x-w),(px_int)_y-pcb->c_width,pcb->c_color); + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y-pcb->c_width-1,(px_int)_x-pcb->c_width,(px_int)(_y-h),pcb->c_color); +} + +px_void PX_Object_CursorButtonFree( PX_Object *Obj ) +{ + +} +px_void PX_Object_CursorButtonOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + + PX_Object_CursorButton *pCB=PX_Object_GetCursorButton(Object); + px_float x,y; + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + if (!pCB->enter) + { + pCB->enter=PX_TRUE; + //pCB->c_distance=pCB->c_distance_far; + } + } + else + { + if (pCB->enter) + { + pCB->enter=PX_FALSE; + //pCB->c_distance=pCB->c_distance_near; + } + } +} + +PX_Object *PX_Object_CursorButtonCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,PX_FontModule *fontmodule,px_color Color) +{ + PX_Object *pObject; + PX_Object_CursorButton *pCb=(PX_Object_CursorButton *)MP_Malloc(mp,sizeof(PX_Object_CursorButton)); + if (pCb==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pCb); + return PX_NULL; + } + pObject->pObject=pCb; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_CURSORBUTTON; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_NULL; + pObject->Func_ObjectUpdate=PX_NULL; + pObject->Func_ObjectRender=PX_Object_CursorButtonRender; + + + pCb->pushbutton=PX_Object_PushButtonCreate(mp,pObject,x,y,Width,Height,Text,fontmodule); + pCb->c_color= PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + pCb->c_distance=0; + pCb->c_distance_far=(px_float)(Width>Height?Height/4:Width/4); + pCb->c_distance_near=3; + pCb->enter=PX_FALSE; + if (Height<16) + { + pCb->c_width=1; + } + else + pCb->c_width=Height/16; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_CursorButtonOnMouseMove,PX_NULL); + return pObject; +} +PX_Object_CursorButton * PX_Object_GetCursorButton( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_CURSORBUTTON) + return (PX_Object_CursorButton *)Object->pObject; + else + return PX_NULL; +} + +PX_Object * PX_Object_GetCursorButtonPushButton(PX_Object *Object) +{ + PX_Object_CursorButton *pcb; + pcb=PX_Object_GetCursorButton(Object); + if (!pcb) + { + return PX_NULL; + } + return pcb->pushbutton; +} + + diff --git a/UI/PainterEngine/kernel/PX_Object_CursorButton.h b/UI/PainterEngine/kernel/PX_Object_CursorButton.h new file mode 100644 index 0000000..dcce202 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_CursorButton.h @@ -0,0 +1,22 @@ +#ifndef PX_OBJECT_CURSORBUTTON_H +#define PX_OBJECT_CURSORBUTTON_H +#include "PX_Object.h" + +typedef struct +{ + PX_Object *pushbutton; + px_float c_distance; + px_float c_distance_far; + px_float c_distance_near; + px_color c_color; + px_int c_width; + px_bool enter; +}PX_Object_CursorButton; + +//use pushbutton function to operate cursor-button +PX_Object *PX_Object_CursorButtonCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,PX_FontModule *fontmodule,px_color Color); +PX_Object_CursorButton * PX_Object_GetCursorButton( PX_Object *Object ); +PX_Object * PX_Object_GetCursorButtonPushButton(PX_Object *Object); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_DesignerBox.c b/UI/PainterEngine/kernel/PX_Object_DesignerBox.c new file mode 100644 index 0000000..e02e889 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_DesignerBox.c @@ -0,0 +1,249 @@ +#include "PX_Object_DesignerBox.h" +#include "PX_Object_DesignerBox.h" + +px_void PX_Object_DesignerBoxRender(px_surface *pSurface,PX_Object *pObject,px_dword elapsed) +{ + PX_Object_DesignerBox*pDesc=PX_ObjectGetDesc(PX_Object_DesignerBox,pObject); + px_color renderColor; + + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + renderColor=pDesc->borderColor; + renderColor._argb.a/=2; + + PX_GeoDrawBorder(pSurface, (px_int)objx, (px_int)objy, (px_int)(objx + objWidth), (px_int)(objy + objHeight), 1, renderColor); + + ////////////////////////////////////////////////////////////////////////// + //controller point + renderColor=pDesc->borderColor; + renderColor._argb.a/=2; + + PX_GeoDrawSolidCircle(pSurface,(px_int)(objx),(px_int)(objy),5,renderColor); + PX_GeoDrawSolidCircle(pSurface,(px_int)(objx+objWidth),(px_int)(objy),5,renderColor); + PX_GeoDrawSolidCircle(pSurface,(px_int)(objx),(px_int)(objy+objHeight),5,renderColor); + PX_GeoDrawSolidCircle(pSurface,(px_int)(objx+objWidth),(px_int)(objy+objHeight),5,renderColor); + +} + +px_void PX_Object_DesignerBoxOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + PX_Object_DesignerBox *pDesc=PX_ObjectGetDesc(PX_Object_DesignerBox,pObject); + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + + pDesc->bselect=PX_Object_DesignerBox_bselect_none; + + if ((x-objx)*(x-objx)+(y-objy)*(y-objy)<25) + { + pDesc->bselect=PX_Object_DesignerBox_bselect_lefttop; + return; + } + + if ((x-objx-objWidth)*(x-objx-objWidth)+(y-objy)*(y-objy)<25) + { + pDesc->bselect=PX_Object_DesignerBox_bselect_righttop; + return; + } + + if ((x-objx)*(x-objx)+(y-objy-objHeight)*(y-objy-objHeight)<25) + { + pDesc->bselect=PX_Object_DesignerBox_bselect_leftbottom; + return; + } + + if ((x-objx-objWidth)*(x-objx-objWidth)+(y-objy-objHeight)*(y-objy-objHeight)<25) + { + pDesc->bselect=PX_Object_DesignerBox_bselect_rightbottom; + return; + } + + if (PX_ObjectIsCursorInRegion(pObject,e)) + { + pDesc->bselect=PX_Object_DesignerBox_bselect_center; + pDesc->lastx = x; + pDesc->lasty = y; + return; + } + + + + +} + + + +px_void PX_Object_DesignerBoxOnCursorDrag(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + PX_Object_DesignerBox*pDesc=PX_ObjectGetDesc(PX_Object_DesignerBox,pObject); + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + switch (pDesc->bselect) + { + case PX_Object_DesignerBox_bselect_center: + { + + pObject->x+=x-pDesc->lastx; + pObject->y+=y-pDesc->lasty; + pDesc->lastx= x; + pDesc->lasty =y; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + case PX_Object_DesignerBox_bselect_lefttop: + { + px_float widthinc,heightinc; + widthinc=objx-x; + heightinc=objy-y; + + if (objWidth+widthinc<=10) + { + return; + } + + if (objHeight+heightinc<=10) + { + return; + } + + pObject->x=x-inheritX; + pObject->y=y-inheritY; + pObject->Width+=widthinc; + pObject->Height+=heightinc; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + case PX_Object_DesignerBox_bselect_righttop: + { + px_float widthinc,heightinc; + widthinc=x-objx-objWidth; + heightinc=objy-y; + + if (objWidth+widthinc<=10) + { + return; + } + + if (objHeight+heightinc<=10) + { + return; + } + + pObject->y=y-inheritY; + + pObject->Width+=widthinc; + pObject->Height+=heightinc; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + case PX_Object_DesignerBox_bselect_leftbottom: + { + px_float widthinc,heightinc; + widthinc=objx-x; + heightinc=y-objy-objHeight; + + if (pObject->Width+widthinc<=10) + { + return; + } + + if (pObject->Height+heightinc<=10) + { + return; + } + + pObject->x=x-inheritX; + + pObject->Width+=widthinc; + pObject->Height+=heightinc; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + + case PX_Object_DesignerBox_bselect_rightbottom: + { + px_float widthinc,heightinc; + widthinc=x-objx-objWidth; + heightinc=y-objy-objHeight; + + if (pObject->Width+widthinc<=10) + { + return; + } + + if (pObject->Height+heightinc<=10) + { + return; + } + + pObject->Width+=widthinc; + pObject->Height+=heightinc; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + default: + break; + } + +} + +PX_Object * PX_Object_DesignerBoxCreate(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float widht,px_float height) +{ + PX_Object_DesignerBox desc; + PX_Object *pObject; + PX_memset(&desc, 0, sizeof(desc)); + + + desc.borderColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + + pObject=PX_ObjectCreateEx(mp,Parent,x,y,0,widht,height,0,PX_OBJECT_TYPE_DESIGNERBOX,PX_NULL,PX_Object_DesignerBoxRender,PX_NULL,&desc,sizeof(desc)); + PX_ObjectRegisterEvent(pObject, PX_OBJECT_EVENT_CURSORDOWN, PX_Object_DesignerBoxOnCursorDown, PX_NULL); + PX_ObjectRegisterEvent(pObject, PX_OBJECT_EVENT_CURSORDRAG, PX_Object_DesignerBoxOnCursorDrag, PX_NULL); + return pObject; + +} + +PX_Object_DesignerBox* PX_Object_GetDesignerBox(PX_Object *pObject) +{ + return PX_ObjectGetDesc(PX_Object_DesignerBox, pObject); +} + +px_void PX_Object_DesignerBoxReset(PX_Object* pObject, px_float x, px_float y, px_float width, px_float height) +{ + PX_Object_DesignerBox* pDesc = PX_ObjectGetDesc(PX_Object_DesignerBox, pObject); + pObject->x = x; + pObject->y = y; + pObject->Width = width; + pObject->Height = height; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_DesignerBox.h b/UI/PainterEngine/kernel/PX_Object_DesignerBox.h new file mode 100644 index 0000000..511fd4e --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_DesignerBox.h @@ -0,0 +1,29 @@ +#ifndef PX_OBJECT_DESIGNERBOX_H +#define PX_OBJECT_DESIGNERBOX_H +#include "PX_Object.h" + +typedef enum +{ + PX_Object_DesignerBox_bselect_none=0, + PX_Object_DesignerBox_bselect_center, + PX_Object_DesignerBox_bselect_lefttop, + PX_Object_DesignerBox_bselect_righttop, + PX_Object_DesignerBox_bselect_leftbottom, + PX_Object_DesignerBox_bselect_rightbottom, +}PX_Object_DesignerBox_bselect; + + +typedef struct +{ + px_float lastx, lasty; + + px_color borderColor; + PX_Object_DesignerBox_bselect bselect; +}PX_Object_DesignerBox; + +PX_Object * PX_Object_DesignerBoxCreate(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float width,px_float height); +PX_Object_DesignerBox* PX_Object_GetDesignerBox(PX_Object *pObject ); +px_void PX_Object_DesignerBoxReset(PX_Object* pObject, px_float x, px_float y, px_float widht, px_float height); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Edit.c b/UI/PainterEngine/kernel/PX_Object_Edit.c new file mode 100644 index 0000000..09329a2 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Edit.c @@ -0,0 +1,961 @@ +#include "PX_Object_Edit.h" + + +px_void PX_Object_EditGetCursorXY(PX_Object *pObject, px_int *cx, px_int *cy, px_int *height) +{ + px_int x = 0, y = 0, cursor = 0, fsize = 0; + PX_Object_Edit *pEdit = (PX_Object_Edit *)pObject->pObject; + const px_char *Text = pEdit->text.buffer; + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + + if (pEdit == PX_NULL) + { + return; + } + + x = pEdit->HorizontalOffset; + y = pEdit->VerticalOffset; + + + + while (PX_TRUE) + { + fsize = 0; + + if (cursor == pEdit->cursor_index) + { + *cx = x; + *cy = y; + *height = pEdit->fontModule ? pEdit->fontModule->max_Height : __PX_FONT_HEIGHT; + return; + } + + if (pEdit->fontModule) + { + px_dword code; + px_int width, height; + fsize = PX_FontModuleGetCharacterDesc(pEdit->fontModule, Text + cursor, &code, &width, &height); + if (!fsize) + { + break; + } + if (code == '\r') + { + //skip + } + else if (code == '\n') + { + x = 0; + y += pEdit->fontModule->max_Height + pEdit->yFontSpacing; + } + else + { + x += width + pEdit->xFontSpacing; + } + + if (pEdit->AutoNewline) + { + if (x > objWidth - pEdit->AutoNewLineSpacing) + { + x = 0; + y += pEdit->fontModule->max_Height + pEdit->yFontSpacing; + } + } + + } + else + { + fsize = 1; + + if (Text[cursor] == '\r') + { + //skip + } + else if (Text[cursor] == '\n') + { + x = pEdit->HorizontalOffset; + y += __PX_FONT_HEIGHT + pEdit->yFontSpacing; + } + else if (Text[cursor]) + { + x += __PX_FONT_ASCSIZE + pEdit->xFontSpacing; + } + else + { + break; + } + + if (pEdit->AutoNewline) + { + if (x > objWidth - pEdit->AutoNewLineSpacing) + { + x = 0; + y += __PX_FONT_HEIGHT + pEdit->yFontSpacing; + } + } + } + cursor += fsize; + } + + *cx = x; + *cy = y; + *height = pEdit->fontModule ? pEdit->fontModule->max_Height : __PX_FONT_HEIGHT; +} + +px_void PX_Object_EditUpdateCursorViewRegion(PX_Object *pObject) +{ + px_int cursorX, cursorY, cursorHeight; + PX_Object_Edit *pEdit = (PX_Object_Edit *)pObject->pObject; + px_float objWidth, objHeight; + objWidth = pObject->Width; + objHeight = pObject->Height; + + if (pEdit == PX_NULL) + { + return; + } + + + PX_Object_EditGetCursorXY(pObject, &cursorX, &cursorY, &cursorHeight); + + + if (cursorX > objWidth - 8) + { + pEdit->XOffset = cursorX - (px_int)objWidth + 8; + } + else + { + pEdit->XOffset = 0; + } + + if (cursorY + cursorHeight > objHeight - 2) + { + pEdit->YOffset = cursorY + cursorHeight - (px_int)objHeight + 2; + } + else + { + pEdit->YOffset = 0; + } + +} + +px_void PX_Object_EditOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(Object); + px_float x,y; + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pEdit) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + pEdit->state=PX_OBJECT_EDIT_STATE_ONCURSOR; + } + else + { + pEdit->state=PX_OBJECT_EDIT_STATE_NORMAL; + } + } +} +px_void PX_Object_EditUpdateCursorOnDown(PX_Object *pObject,px_int cx,px_int cy); +px_void PX_Object_EditOnMouseLButtonDown(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(Object); + px_float x,y; + px_float objx,objy; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(Object,&inheritX,&inheritY); + + objx=(Object->x+inheritX); + objy=(Object->y+inheritY); + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pEdit) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + PX_Object_EditSetFocus(Object,PX_TRUE); + PX_Object_EditUpdateCursorOnDown(Object,(px_int)(x-objx),(px_int)(y-objy)); + } + else + PX_Object_EditSetFocus(Object,PX_FALSE); + } +} + +px_void PX_Object_EditOnKeyboardString(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(Object); + + if (pEdit->onFocus) + { + PX_Object_EditAddString(Object,PX_Object_Event_GetStringPtr(e)); + } +} + +static px_void PX_Object_EditCheckCursor(PX_Object_Edit*pedit) +{ + if (pedit->cursor_index<0) + { + pedit->cursor_index=0; + } + if (pedit->cursor_index>PX_strlen(pedit->text.buffer)) + { + pedit->cursor_index=PX_strlen(pedit->text.buffer); + } +} + +PX_Object* PX_Object_EditCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_FontModule *fontModule ) +{ + PX_Object *pObject; + PX_Object_Edit *pEdit=(PX_Object_Edit *)MP_Malloc(mp,sizeof(PX_Object_Edit)); + if (pEdit==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pEdit); + return PX_NULL; + } + + if(!PX_SurfaceCreate(mp,Width,Height,&pEdit->EditSurface)) + { + MP_Free(mp,pEdit); + MP_Free(mp,pObject); + return PX_NULL; + } + + pObject->pObject=pEdit; + pObject->Type=PX_OBJECT_TYPE_EDIT; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_EditFree; + pObject->Func_ObjectRender=PX_Object_EditRender; + + + + PX_StringInitialize(mp,&pEdit->text); + + + pEdit->TextColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + + pEdit->CursorColor=PX_COLOR_WHITE; + pEdit->BorderColor=PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + pEdit->BackgroundColor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + pEdit->XOffset=0; + pEdit->YOffset=0; + pEdit->Border=PX_TRUE; + pEdit->Password=PX_FALSE; + pEdit->onFocus=PX_FALSE; + pEdit->state=PX_OBJECT_EDIT_STATE_NORMAL; + pEdit->AutoNewline=PX_FALSE; + pEdit->xFontSpacing=0; + pEdit->yFontSpacing=0; + pEdit->HorizontalOffset=3; + pEdit->VerticalOffset=3; + pEdit->cursor_index=0; + pEdit->max_length=-1; + pEdit->fontModule=fontModule; + pEdit->AutoNewLineSpacing=__PX_FONT_ASCSIZE+2; + pEdit->style=PX_OBJECT_EDIT_STYLE_RECT; + pEdit->multiLines=PX_FALSE; + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_EditOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_EditOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_STRING,PX_Object_EditOnKeyboardString,PX_NULL); + + return pObject; +} + +PX_Object_Edit * PX_Object_GetEdit( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_EDIT) + return (PX_Object_Edit *)Object->pObject; + else + return PX_NULL; +} + +px_char * PX_Object_EditGetText( PX_Object *Object ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(Object); + if (pEdit!=PX_NULL) + { + return pEdit->text.buffer; + } + return PX_NULL; +} + +px_void PX_Object_EditSetMaxTextLength(PX_Object *pObject,px_int max_length) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pEdit!=PX_NULL) + { + pEdit->max_length=max_length; + } +} + +px_void PX_Object_EditSetText( PX_Object *pObject,const px_char *Text ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if(pEdit) + { + PX_StringClear(&pEdit->text); + PX_StringCat(&pEdit->text,Text); + pEdit->cursor_index=PX_strlen(Text); + PX_Object_EditUpdateCursorViewRegion(pObject); + } +} + +px_void PX_Object_EditAppendText(PX_Object *pObject,const px_char *Text) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if(pEdit) + { + PX_StringCat(&pEdit->text,Text); + pEdit->cursor_index=PX_strlen(Text); + PX_Object_EditUpdateCursorViewRegion(pObject); + } +} + +px_void PX_Object_EditSetFocus(PX_Object *pObject,px_bool OnFocus) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if(pEdit) + { + if (pEdit->onFocus!=OnFocus) + { + if (OnFocus) + { + PX_Object_Event e; + pEdit->onFocus=OnFocus; + e.Event=PX_OBJECT_EVENT_ONFOCUS; + e.Param_bool[0]=OnFocus; + PX_ObjectPostEvent(pObject,e); + } + else + { + PX_Object_Event e; + pEdit->onFocus=OnFocus; + e.Event=PX_OBJECT_EVENT_LOSTFOCUS; + e.Param_bool[0]=OnFocus; + PX_ObjectPostEvent(pObject,e); + } + + } + + } +} + +px_void PX_Object_EditSetPasswordStyle( PX_Object *pLabel,px_uchar Enabled ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pLabel); + if (pEdit) + { + pEdit->Password=Enabled; + pEdit->fontModule=PX_NULL; + } +} +px_void PX_Object_EditSetBackgroundColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + pEdit->BackgroundColor=Color; + } +} + +px_void PX_Object_EditSetBorderColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + + pEdit->BorderColor=Color; + } +} + +px_void PX_Object_EditSetCursorColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + + pEdit->CursorColor=Color; + } +} + +px_void PX_Object_EditSetTextColor(PX_Object *pObject,px_color Color) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + pEdit->TextColor=Color; + } +} + +px_void PX_Object_EditSetLimit(PX_Object *pObject,const px_char *Limit) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + PX_strcpy(pEdit->Limit,Limit,sizeof(pEdit->Limit)); + } +} + +px_void PX_Object_EditSetStyle(PX_Object *pObject,PX_OBJECT_EDIT_STYLE style) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + pEdit->style=style; + } +} + +px_void PX_Object_EditSetBorder( PX_Object *pObj,px_bool Border ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObj); + if (pEdit) + { + + pEdit->Border=Border; + } +} + + + +px_void PX_Object_EditUpdateCursorOnDown(PX_Object *pObject,px_int cx,px_int cy) +{ + px_int x_draw_oft=0,y_draw_oft=0,x=0,y=0,cursor=0,fsize=0; + PX_Object_Edit *pEdit=(PX_Object_Edit *)pObject->pObject; + const px_char *Text=pEdit->text.buffer; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pEdit==PX_NULL) + { + return; + } + + x=pEdit->HorizontalOffset; + y=pEdit->VerticalOffset; + + + + while (PX_TRUE) + { + fsize=0; + x_draw_oft=x-pEdit->XOffset; + y_draw_oft=y-pEdit->YOffset; + + if (pEdit->fontModule) + { + px_dword code; + px_int width,height; + fsize=PX_FontModuleGetCharacterDesc(pEdit->fontModule,Text+cursor,&code,&width,&height); + if (!fsize) + { + break; + } + if (code=='\r') + { + //skip + }else if (code=='\n') + { + x=pEdit->HorizontalOffset; + y+=pEdit->fontModule->max_Height+pEdit->yFontSpacing; + } + else + { + if (cx<=x_draw_oft+width/2+pEdit->xFontSpacing/2&&cy<=y_draw_oft+pEdit->fontModule->max_Height+pEdit->yFontSpacing/2) + { + pEdit->cursor_index=cursor; + return; + } + else + { + pEdit->cursor_index=cursor+fsize; + } + + x+=width+pEdit->xFontSpacing; + } + + if (pEdit->AutoNewline) + { + if (x>objWidth-pEdit->AutoNewLineSpacing) + { + x=pEdit->HorizontalOffset; + y+=pEdit->fontModule->max_Height+pEdit->yFontSpacing; + } + } + + } + else + { + fsize=1; + + if (Text[cursor]=='\r') + { + //skip + }else if (Text[cursor]=='\n') + { + x=0; + y+=__PX_FONT_HEIGHT+pEdit->yFontSpacing; + } + else if(Text[cursor]) + { + if (cx<=x_draw_oft+__PX_FONT_ASCSIZE/2+pEdit->xFontSpacing/2&&cy<=y_draw_oft+__PX_FONT_HEIGHT+pEdit->yFontSpacing/2) + { + pEdit->cursor_index=cursor; + return; + } + else + { + pEdit->cursor_index=cursor+fsize; + } + + x+=__PX_FONT_ASCSIZE+pEdit->xFontSpacing; + } + else + { + break; + } + + if (pEdit->AutoNewline) + { + if (x>objWidth-pEdit->AutoNewLineSpacing) + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->yFontSpacing; + } + } + } + cursor+=fsize; + } + +} + + +px_void PX_Object_EditRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_int x_draw_oft,y_draw_oft,x,y,cursor,fsize; + PX_Object_Edit *pEdit=(PX_Object_Edit *)pObject->pObject; + const px_char *Text=pEdit->text.buffer; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pEdit==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + if (pEdit->EditSurface.width!=(px_int)objWidth||pEdit->EditSurface.height!=(px_int)objHeight) + { + PX_SurfaceFree(&pEdit->EditSurface); + if(!PX_SurfaceCreate(pObject->mp,(px_int)objWidth,(px_int)objHeight,&pEdit->EditSurface)) + { + return; + } + } + + + if (pEdit->style==PX_OBJECT_EDIT_STYLE_RECT) + { + //clear + PX_SurfaceClear(&pEdit->EditSurface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,pEdit->BackgroundColor); + if (pEdit->Border) + { + if(pEdit->state==PX_OBJECT_EDIT_STATE_NORMAL) + PX_GeoDrawBorder(&pEdit->EditSurface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,1,pEdit->BorderColor); + else + PX_GeoDrawBorder(&pEdit->EditSurface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,1,pEdit->CursorColor); + } + } + else if(pEdit->style==PX_OBJECT_EDIT_STYLE_ROUNDRECT) + { + PX_SurfaceClear(&pEdit->EditSurface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,PX_COLOR(0,0,0,0)); + PX_GeoDrawSolidRoundRect(&pEdit->EditSurface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,objHeight/2,pEdit->BackgroundColor); + if (pEdit->Border) + { + if(pEdit->state==PX_OBJECT_EDIT_STATE_NORMAL) + PX_GeoDrawRoundRect(&pEdit->EditSurface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,objHeight/2,1,pEdit->BorderColor); + else + PX_GeoDrawRoundRect(&pEdit->EditSurface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,objHeight/2,1,pEdit->CursorColor); + } + } + + + + x=pEdit->HorizontalOffset; + y=pEdit->VerticalOffset; + + cursor=0; + + while (PX_TRUE) + { + fsize=0; + x_draw_oft=x-pEdit->XOffset; + y_draw_oft=y-pEdit->YOffset; + + //Draw Cursor + if (pEdit->onFocus&&pEdit->cursor_index==cursor) + { + pEdit->elapsed+=elapsed; + if ((pEdit->elapsed/200)&1) + { + if (pEdit->fontModule) + { + PX_GeoDrawRect(&pEdit->EditSurface,x_draw_oft+1,y_draw_oft,x_draw_oft,y_draw_oft+pEdit->fontModule->max_Height-2,pEdit->TextColor); + } + else + { + PX_GeoDrawRect(&pEdit->EditSurface,x_draw_oft+1,y_draw_oft,x_draw_oft,y_draw_oft+__PX_FONT_HEIGHT-1,pEdit->TextColor); + } + + } + } + + + if (pEdit->fontModule) + { + px_dword code; + px_int width,height; + fsize=PX_FontModuleGetCharacterDesc(pEdit->fontModule,Text+cursor,&code,&width,&height); + if (!fsize) + { + break; + } + if (code=='\r') + { + //skip + }else if (code=='\n') + { + x=pEdit->HorizontalOffset; + y+=pEdit->fontModule->max_Height+pEdit->yFontSpacing; + } + else + { + PX_FontModuleDrawCharacter(&pEdit->EditSurface,pEdit->fontModule,x_draw_oft,y_draw_oft,code,pEdit->TextColor); + x+=width+pEdit->xFontSpacing; + } + + if (pEdit->AutoNewline) + { + if (x>objWidth-pEdit->AutoNewLineSpacing) + { + x=0; + y+=pEdit->fontModule->max_Height+pEdit->yFontSpacing; + } + } + + } + else + { + fsize=1; + + if (Text[cursor]=='\r') + { + //skip + }else if (Text[cursor]=='\n') + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->yFontSpacing; + } + else if(Text[cursor]) + { + if (pEdit->Password) + { + PX_FontDrawChar(&pEdit->EditSurface,x_draw_oft,y_draw_oft,'*',pEdit->TextColor); + x+=__PX_FONT_ASCSIZE; + } + else + { + PX_FontDrawChar(&pEdit->EditSurface,x_draw_oft,y_draw_oft,Text[cursor],pEdit->TextColor); + x+=__PX_FONT_ASCSIZE; + } + + } + else + { + break; + } + + if (pEdit->AutoNewline) + { + if (x>objWidth-pEdit->AutoNewLineSpacing) + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->yFontSpacing; + } + } + } + cursor+=fsize; + } + + PX_SurfaceRender(psurface,&pEdit->EditSurface,(px_int)objx,(px_int)objy,PX_ALIGN_LEFTTOP,PX_NULL); +} + +px_void PX_Object_EditFree( PX_Object *pObject ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pObject!=PX_NULL) + { + PX_StringFree(&pEdit->text); + PX_TextureFree(&pEdit->EditSurface); + } +} + +px_void PX_Object_EditAddString(PX_Object *pObject,px_char *Text) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + PX_Object_Event e; + if (pObject!=PX_NULL) + { + PX_Object_EditCheckCursor(pEdit); + while (*Text) + { + + if(*Text!=8) + { + if (!pEdit->multiLines&&Text[1]==0&&(*Text=='\n'||*Text=='\r')) + { + return; + } + + if (pEdit->Limit[0]) + { + px_bool bMatch=PX_FALSE; + const px_char *limitFilter=pEdit->Limit; + while (*limitFilter) + { + if (*limitFilter==*Text) + { + bMatch=PX_TRUE; + break; + } + limitFilter++; + } + if (!bMatch) + { + Text++; + continue; + } + } + + if (pEdit->max_length>0) + { + if (PX_StringLen(&pEdit->text)max_length) + { + px_char ch=*Text; + if (ch=='\r') + { + ch='\n'; + } + PX_StringInsertChar(&pEdit->text,pEdit->cursor_index,ch); + pEdit->cursor_index++; + } + } + else + { + px_char ch=*Text; + if (ch=='\r') + { + ch='\n'; + } + PX_StringInsertChar(&pEdit->text,pEdit->cursor_index,ch); + pEdit->cursor_index++; + } + + } + else + { + PX_Object_EditBackspace(pObject); + } + Text++; + } + } + PX_Object_EditUpdateCursorViewRegion(pObject); + e.Event=PX_OBJECT_EVENT_VALUECHANGED; + e.Param_ptr[0]=0; + PX_ObjectExecuteEvent(pObject,e); +} + +px_void PX_Object_EditBackspace(PX_Object *pObject) +{ + PX_Object_Event e; + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + + + if (pObject!=PX_NULL&&pEdit->onFocus) + { + px_char *pText; + pText=pEdit->text.buffer; + + if (!pEdit->fontModule) + { + if (pEdit->cursor_index) + { + PX_StringRemoveChar(&pEdit->text,pEdit->cursor_index-1); + pEdit->cursor_index--; + } + + return; + } + + switch(pEdit->fontModule->codePage) + { + case PX_FONTMODULE_CODEPAGE_GBK: + { + px_int idx=0; + px_int c=0; + while (PX_TRUE) + { + + if (idx==pEdit->cursor_index) + { + break; + } + + if (pText[idx]==0) + { + break; + } + + if (pText[idx]&0x80) + { + c=2; + idx+=2; + } + else + { + idx++; + c=1; + } + } + + while (c) + { + PX_StringRemoveChar(&pEdit->text,pEdit->cursor_index-1); + pEdit->cursor_index--; + c--; + } + + } + break; + case PX_FONTMODULE_CODEPAGE_UTF8: + { + px_int i; + for (i=0;i<6;i++) + { + if (pEdit->cursor_index==0) + { + break; + } + + if ((pText[pEdit->cursor_index-1]&0x80)==0x00) + { + PX_StringRemoveChar(&pEdit->text,pEdit->cursor_index-1); + pEdit->cursor_index--; + break; + } + + if ((pText[pEdit->cursor_index-1]&0xc0)==0x80) + { + PX_StringRemoveChar(&pEdit->text,pEdit->cursor_index-1); + pEdit->cursor_index--; + continue; + } + + if ((pText[pEdit->cursor_index-1]&0xc0)==0xc0) + { + PX_StringRemoveChar(&pEdit->text,pEdit->cursor_index-1); + pEdit->cursor_index--; + break; + } + + } + } + break; + case PX_FONTMODULE_CODEPAGE_UTF16: + { + //not support + } + break; + default: + { + //not support + } + break; + } + + e.Event=PX_OBJECT_EVENT_VALUECHANGED; + e.Param_ptr[0]=0; + PX_ObjectExecuteEvent(pObject,e); + } +} + +px_void PX_Object_EditAutoNewLine(PX_Object *pObject,px_bool b,px_int AutoNewLineSpacing) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pObject!=PX_NULL) + { + pEdit->AutoNewline=b; + pEdit->AutoNewLineSpacing=AutoNewLineSpacing; + } +} + +px_void PX_Object_EditSetOffset(PX_Object *pObject,px_int TopOffset,px_int LeftOffset) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pObject!=PX_NULL) + { + pEdit->VerticalOffset=TopOffset; + pEdit->HorizontalOffset=LeftOffset; + } +} + +px_void PX_Object_EditSetXYOffset(PX_Object* pObject, px_int XOffset, px_int YOffset) +{ + PX_Object_Edit* pEdit = PX_Object_GetEdit(pObject); + if (pObject != PX_NULL) + { + pEdit->XOffset = XOffset; + pEdit->YOffset = YOffset; + } +} diff --git a/UI/PainterEngine/kernel/PX_Object_Edit.h b/UI/PainterEngine/kernel/PX_Object_Edit.h new file mode 100644 index 0000000..5d1bf39 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Edit.h @@ -0,0 +1,66 @@ +#ifndef PX_OBJECT_EDIT_H +#define PX_OBJECT_EDIT_H +#include "PX_Object.h" + +typedef enum +{ + PX_OBJECT_EDIT_STATE_ONCURSOR, + PX_OBJECT_EDIT_STATE_NORMAL, +}PX_OBJECT_EDIT_STATE; + +typedef enum +{ + PX_OBJECT_EDIT_STYLE_RECT, + PX_OBJECT_EDIT_STYLE_ROUNDRECT, +}PX_OBJECT_EDIT_STYLE; + +typedef struct +{ + px_string text; + px_bool onFocus; + px_bool Border; + px_color TextColor; + px_color BorderColor; + px_color CursorColor; + px_color BackgroundColor; + px_uint elapsed; + px_bool Password; + px_bool AutoNewline; + px_int AutoNewLineSpacing; + px_int XOffset,YOffset; + px_int VerticalOffset,HorizontalOffset; + px_int xFontSpacing,yFontSpacing; + px_int cursor_index; + px_int max_length; + px_bool multiLines; + px_surface EditSurface; + PX_FontModule *fontModule; + px_char Limit[128]; + PX_OBJECT_EDIT_STATE state; + PX_OBJECT_EDIT_STYLE style; +}PX_Object_Edit; + +PX_Object* PX_Object_EditCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_FontModule *fontModule ); +PX_Object_Edit * PX_Object_GetEdit( PX_Object *Object ); +px_char * PX_Object_EditGetText( PX_Object *pObject ); +px_void PX_Object_EditSetMaxTextLength(PX_Object *pObject,px_int max_length); +px_void PX_Object_EditSetText( PX_Object *pObject,const px_char *Text ); +px_void PX_Object_EditAppendText( PX_Object *pObject,const px_char *Text ); +px_void PX_Object_EditSetFocus( PX_Object *pObject,px_bool OnFocus); +px_void PX_Object_EditSetPasswordStyle( PX_Object *pObject,px_uchar Enabled ); +px_void PX_Object_EditSetBackgroundColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_EditSetBorderColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_EditSetCursorColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_EditSetTextColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_EditSetLimit(PX_Object *pObject,const px_char *Limit); +px_void PX_Object_EditSetStyle(PX_Object *pObject,PX_OBJECT_EDIT_STYLE style); +px_void PX_Object_EditSetBorder( PX_Object *pObj,px_bool Border ); +px_void PX_Object_EditRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed); +px_void PX_Object_EditFree( PX_Object *pObject ); +px_void PX_Object_EditAddString(PX_Object *pObject,px_char *Text); +px_void PX_Object_EditBackspace(PX_Object *pObject); +px_void PX_Object_EditAutoNewLine(PX_Object *pObject,px_bool b,px_int AutoNewLineSpacing); +px_void PX_Object_EditSetOffset(PX_Object *pObject,px_int TopOffset,px_int LeftOffset); +px_void PX_Object_EditSetXYOffset(PX_Object* pObject, px_int XOffset, px_int YOffset); +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Explorer.c b/UI/PainterEngine/kernel/PX_Object_Explorer.c new file mode 100644 index 0000000..b37f2af --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Explorer.c @@ -0,0 +1,681 @@ +#include "PX_Object_Explorer.h" +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +//explorer + +PX_Object_Explorer * PX_Object_GetExplorer(PX_Object *Object) +{ + if(Object->Type==PX_OBJECT_TYPE_EXPLORER) + { + return (PX_Object_Explorer *)Object->pObject; + } + return PX_NULL; +} + +px_void PX_Object_ExplorerOnCursorMove(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_Object_Explorer *pExp=PX_Object_GetExplorer(pObject); + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + if (PX_isXYInRegion(x,y,objx,objy+PX_OBJECT_EXPOLRER_MENU_HEIGHT,objWidth-PX_OBJECT_EXPOLRER_SLIDERBAR_WIDTH,objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT*2)) + { + //get cursor index + px_int i; + px_int ofty; + px_int index; + ofty=PX_Object_SliderBarGetValue(pExp->SliderBar); + index=(px_int)(y+ofty-objy-PX_OBJECT_EXPOLRER_MENU_HEIGHT)/PX_OBJECT_EXPOLRER_ITEM_HEIGHT; + //clear + for (i=0;iItemCount;i++) + { + pExp->Items[i].bcursor=PX_FALSE; + } + if (indexItemCount) + { + pExp->Items[index].bcursor=PX_TRUE; + } + + } +} + +px_void PX_Object_ExplorerOnButtonBack(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_char path[260]; + px_int index; + PX_Object_Explorer *pExp=PX_Object_GetExplorer((PX_Object *)ptr); + PX_strcpy(path,PX_Object_EditGetText(pExp->edit_Path),sizeof(path)); + index=PX_strlen(path); + while (index) + { + if (path[index]=='/'||path[index]=='\\') + { + break; + } + index--; + } + path[index]='\0'; + PX_Object_EditSetText(pExp->edit_Path,path); + PX_Object_ExplorerRefresh((PX_Object *)ptr); +} +px_void PX_Object_ExplorerOnButtonGo(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_ExplorerRefresh((PX_Object *)ptr); +} +px_void PX_Object_ExplorerOnButtonOk(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer((PX_Object *)ptr); + PX_ObjectClearFocus((PX_Object *)ptr); + pExp->returnType=PX_OBJECT_EXPLORER_RETURN_CONFIRM; + PX_ObjectExecuteEvent((PX_Object *)ptr,e); + ((PX_Object *)ptr)->Visible=PX_FALSE; + +} +px_void PX_Object_ExplorerOnButtonCancel(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer((PX_Object *)ptr); + PX_ObjectClearFocus((PX_Object *)ptr); + pExp->returnType=PX_OBJECT_EXPLORER_RETURN_CANCEL; + PX_ObjectExecuteEvent((PX_Object*)ptr, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_CANCEL)); + ((PX_Object *)ptr)->Visible=PX_FALSE; +} + +px_void PX_Object_ExplorerOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + PX_Object_Explorer *pExp=PX_Object_GetExplorer(pObject); + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + if (PX_isXYInRegion(x,y,objx,objy+PX_OBJECT_EXPOLRER_MENU_HEIGHT,objWidth-PX_OBJECT_EXPOLRER_SLIDERBAR_WIDTH,objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT*2)) + { + px_int i=0,selectcount=0; + px_int ofty; + //get cursor index + + px_int index; + ofty=PX_Object_SliderBarGetValue(pExp->SliderBar); + index=(px_int)(y+ofty-objy-PX_OBJECT_EXPOLRER_MENU_HEIGHT)/PX_OBJECT_EXPOLRER_ITEM_HEIGHT; + if (indexItemCount) + { + if (pExp->Items[index].bselect&&pExp->Items[index].bFolder) + { + + //enter path + px_char *pEditPath=PX_Object_EditGetText(pExp->edit_Path); + if (pEditPath[PX_strlen(pEditPath)-1]!='/'&&pEditPath[PX_strlen(pEditPath)-1]!='\\'&&pEditPath[0]) + { + PX_Object_EditAppendText(pExp->edit_Path,"/"); + } + PX_Object_EditAppendText(pExp->edit_Path,pExp->Items[index].name); + + PX_Object_ExplorerRefresh(pObject); + } + else + { + if (!pExp->savemode&&pExp->MaxSelectedCount!=1) + { + for (i=0;iItemCount;i++) + { + if(pExp->Items[i].bselect) + { + selectcount++; + } + } + if (pExp->Items[index].bselect) + { + pExp->Items[index].bselect=PX_FALSE; + } + else + { + if (selectcountMaxSelectedCount) + { + pExp->Items[index].bselect=PX_TRUE; + } + } + + } + else + { + if (pExp->Items[index].bselect) + { + PX_ObjectClearFocus(pObject); + pExp->returnType=PX_OBJECT_EXPLORER_RETURN_CONFIRM; + PX_ObjectExecuteEvent(pObject,PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_EXECUTE)); + pObject->Visible=PX_FALSE; + } + else + { + if (pExp->savemode) + { + PX_Object_EditSetText(pExp->edit_FileName, ""); + } + for (i=0;iItemCount;i++) + { + if(pExp->Items[i].bselect) + { + pExp->Items[i].bselect=PX_FALSE; + } + } + pExp->Items[index].bselect=PX_TRUE; + if (pExp->savemode) + { + PX_Object_EditSetText(pExp->edit_FileName, pExp->Items[index].name); + } + } + + } + + } + + } + + if (PX_Object_ExplorerGetSelectedCount(pObject)==0) + { + pExp->btn_Ok->Visible=PX_FALSE; + } + else + { + pExp->btn_Ok->Visible=PX_TRUE; + } + } +} + +static px_void PX_Object_ExplorerOnCursorWheel(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(pObject); + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + px_float z=PX_Object_Event_GetCursorZ(e); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (PX_isXYInRegion(x,y,objx,objy+PX_OBJECT_EXPOLRER_MENU_HEIGHT,objWidth-PX_OBJECT_EXPOLRER_SLIDERBAR_WIDTH,objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT*2)) + { + if (z<0) + { + PX_Object_SliderBarSetValue(pExp->SliderBar,PX_Object_SliderBarGetValue(pExp->SliderBar)+PX_OBJECT_EXPOLRER_ITEM_HEIGHT/2); + } + else + { + PX_Object_SliderBarSetValue(pExp->SliderBar,PX_Object_SliderBarGetValue(pExp->SliderBar)-PX_OBJECT_EXPOLRER_ITEM_HEIGHT/2); + } + } + +} + +px_void PX_Object_ExplorerRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(pObject); + //background + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + px_int val,ofty; + + if (pObject->Width<256) + { + pObject->Width=256; + } + if (pObject->Height<128) + { + pObject->Height=128; + } + + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + val=PX_Object_SliderBarGetValue(pExp->SliderBar); + ofty=PX_Object_SliderBarGetValue(pExp->SliderBar); + + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth),(px_int)(objy+objHeight),pExp->backgroundcolor); + + //button back + pExp->btn_Back->x=8; + pExp->btn_Back->y=8; + pExp->btn_Back->Width=PX_OBJECT_EXPOLRER_BUTTON_WIDTH; + pExp->btn_Back->Height=32; + PX_Object_PushButtonSetBackgroundColor(pExp->btn_Back,pExp->backgroundcolor); + PX_Object_PushButtonSetBorderColor(pExp->btn_Back,pExp->bordercolor); + PX_Object_PushButtonSetTextColor(pExp->btn_Back,pExp->fontcolor); + PX_Object_PushButtonSetCursorColor(pExp->btn_Back,pExp->cursorcolor); + PX_Object_PushButtonSetPushColor(pExp->btn_Back,pExp->pushcolor); + + pExp->edit_Path->x=PX_OBJECT_EXPOLRER_BUTTON_WIDTH+8+8; + pExp->edit_Path->Width=objWidth-PX_OBJECT_EXPOLRER_BUTTON_WIDTH-PX_OBJECT_EXPOLRER_BUTTON_WIDTH-8*4; + if (pExp->fontmodule) + { + pExp->edit_Path->Height=pExp->fontmodule->max_Height+6.0f; + } + else + { + pExp->edit_Path->Height=20; + } + pExp->edit_Path->y=24-pExp->edit_Path->Height/2; + PX_Object_EditSetBackgroundColor(pExp->edit_Path,pExp->backgroundcolor); + PX_Object_EditSetBorderColor(pExp->edit_Path,pExp->bordercolor); + PX_Object_EditSetTextColor(pExp->edit_Path,pExp->fontcolor); + PX_Object_EditSetCursorColor(pExp->edit_Path,pExp->fontcolor); + + pExp->btn_go->x=objWidth-8-PX_OBJECT_EXPOLRER_BUTTON_WIDTH; + pExp->btn_go->y=8; + pExp->btn_go->Width=PX_OBJECT_EXPOLRER_BUTTON_WIDTH; + pExp->btn_go->Height=32; + PX_Object_PushButtonSetBackgroundColor(pExp->btn_go,pExp->backgroundcolor); + PX_Object_PushButtonSetBorderColor(pExp->btn_go,pExp->bordercolor); + PX_Object_PushButtonSetTextColor(pExp->btn_go,pExp->fontcolor); + PX_Object_PushButtonSetCursorColor(pExp->btn_go,pExp->cursorcolor); + PX_Object_PushButtonSetPushColor(pExp->btn_go,pExp->pushcolor); + + + pExp->SliderBar->x=objx+objWidth-24; + pExp->SliderBar->Width=24; + pExp->SliderBar->y=PX_OBJECT_EXPOLRER_MENU_HEIGHT; + pExp->SliderBar->Height=objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT-PX_OBJECT_EXPOLRER_MENU_HEIGHT; + PX_Object_SliderBarSetBackgroundColor(pExp->SliderBar,pExp->backgroundcolor); + PX_Object_SliderBarSetColor(pExp->SliderBar,pExp->bordercolor); + if (pExp->ItemCount*PX_OBJECT_EXPOLRER_ITEM_HEIGHT>objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT-PX_OBJECT_EXPOLRER_MENU_HEIGHT) + { + pExp->SliderBar->Visible=PX_TRUE; + PX_Object_SliderBarSetRange(pExp->SliderBar,0,pExp->ItemCount*PX_OBJECT_EXPOLRER_ITEM_HEIGHT-((px_int)objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT-PX_OBJECT_EXPOLRER_MENU_HEIGHT)); + PX_Object_SliderBarSetSliderButtonLength(pExp->SliderBar,(px_int)(pExp->SliderBar->Height*pExp->SliderBar->Height/pExp->ItemCount/PX_OBJECT_EXPOLRER_ITEM_HEIGHT)); + } + else + { + PX_Object_SliderBarSetRange(pExp->SliderBar,0,0); + pExp->SliderBar->Visible=PX_FALSE; + } + + + do + { + PX_SurfaceLimitInfo lmInfo; + px_int startIndex=ofty/PX_OBJECT_EXPOLRER_ITEM_HEIGHT; + px_int drawy=PX_OBJECT_EXPOLRER_MENU_HEIGHT-(ofty)%PX_OBJECT_EXPOLRER_ITEM_HEIGHT; + lmInfo=PX_SurfaceGetLimit(psurface); + PX_SurfaceSetLimit(psurface,(px_int)objx,(px_int)objy+PX_OBJECT_EXPOLRER_MENU_HEIGHT,(px_int)(objx+objWidth),(px_int)(objy+objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT)); + while (startIndexItemCount&&drawyItems[startIndex]; + + if (pItem->bcursor) + { + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy+drawy,(px_int)(objx+objWidth),(px_int)objy+drawy+PX_OBJECT_EXPOLRER_ITEM_HEIGHT-1,pExp->cursorcolor); + } + + if (pItem->bFolder) + { + PX_ShapeRender(psurface,&pExp->folder,(px_int)objx+16+3,(px_int)objy+drawy+PX_OBJECT_EXPOLRER_ITEM_HEIGHT/2,PX_ALIGN_CENTER,pExp->fontcolor); + } + else + { + PX_ShapeRender(psurface,&pExp->file,(px_int)objx+16+3,(px_int)objy+drawy+PX_OBJECT_EXPOLRER_ITEM_HEIGHT/2,PX_ALIGN_CENTER,pExp->fontcolor); + } + + PX_FontModuleDrawText(psurface,pExp->fontmodule,(px_int)objx+32+8,(px_int)objy+drawy+PX_OBJECT_EXPOLRER_ITEM_HEIGHT/2,PX_ALIGN_LEFTMID,pItem->name,pExp->fontcolor); + + if (pItem->bselect) + { + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+objWidth)-24-16,(px_int)objy+drawy+PX_OBJECT_EXPOLRER_ITEM_HEIGHT/2,8,pExp->fontcolor); + } + + drawy+=PX_OBJECT_EXPOLRER_ITEM_HEIGHT; + startIndex++; + } + + PX_SurfaceSetLimitInfo(psurface,lmInfo); + + } while (0); + + + PX_GeoDrawLine(psurface,(px_int)objx,PX_OBJECT_EXPOLRER_MENU_HEIGHT,(px_int)(objx+objWidth),PX_OBJECT_EXPOLRER_MENU_HEIGHT,1,pExp->fontcolor); + PX_GeoDrawLine(psurface,(px_int)objx,(px_int)(objy+objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT),(px_int)(objx+objWidth),(px_int)(objy+objHeight-PX_OBJECT_EXPOLRER_MENU_HEIGHT),1,pExp->fontcolor); + + pExp->btn_Ok->x=objWidth-8-PX_OBJECT_EXPOLRER_BUTTON_WIDTH-8-PX_OBJECT_EXPOLRER_BUTTON_WIDTH; + pExp->btn_Ok->y=objHeight-40; + pExp->btn_Ok->Width=PX_OBJECT_EXPOLRER_BUTTON_WIDTH; + pExp->btn_Ok->Height=32; + PX_Object_PushButtonSetBackgroundColor(pExp->btn_Ok,pExp->backgroundcolor); + PX_Object_PushButtonSetBorderColor(pExp->btn_Ok,pExp->bordercolor); + PX_Object_PushButtonSetTextColor(pExp->btn_Ok,pExp->fontcolor); + PX_Object_PushButtonSetCursorColor(pExp->btn_Ok,pExp->cursorcolor); + PX_Object_PushButtonSetPushColor(pExp->btn_Ok,pExp->pushcolor); + + pExp->btn_Cancel->x=objx+objWidth-8-PX_OBJECT_EXPOLRER_BUTTON_WIDTH; + pExp->btn_Cancel->y=objHeight-40; + pExp->btn_Cancel->Width=PX_OBJECT_EXPOLRER_BUTTON_WIDTH; + pExp->btn_Cancel->Height=32; + PX_Object_PushButtonSetBackgroundColor(pExp->btn_Cancel,pExp->backgroundcolor); + PX_Object_PushButtonSetBorderColor(pExp->btn_Cancel,pExp->bordercolor); + PX_Object_PushButtonSetTextColor(pExp->btn_Cancel,pExp->fontcolor); + PX_Object_PushButtonSetCursorColor(pExp->btn_Cancel,pExp->cursorcolor); + PX_Object_PushButtonSetPushColor(pExp->btn_Cancel,pExp->pushcolor); + + pExp->edit_FileName->x = 16; + pExp->edit_FileName->y = objHeight - 40; + pExp->edit_FileName->Width = 256; + pExp->edit_FileName->Height = 32; + if (pExp->MaxSelectedCount!=1||!pExp->savemode) + { + pExp->edit_FileName->Visible = PX_FALSE; + } + else + { + pExp->edit_FileName->Visible = PX_TRUE; + } + +} + +px_void PX_Object_ExplorerFree(PX_Object *pObject) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(pObject); + PX_ShapeFree(&pExp->file); + PX_ShapeFree(&pExp->folder); +} + + + +PX_Object * PX_Object_ExplorerCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_FontModule *fm, PX_ExplorerGetPathFolderCount _func_gpfdc, PX_ExplorerGetPathFileCount _func_gpfec, PX_ExplorerGetPathFolderName _func_gpfdn, PX_ExplorerGetPathFileName _func_gpfcn,const px_char path[]) +{ + PX_Object_Explorer explorer; + PX_Object *pObject; + px_byte PX_Object_Explorer_fileLogoData[] = { + 0x54,0x52,0x41,0x57,0x1a,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x67,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x75,0x0,0x0,0x0,0x55,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0xd7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf5,0x0,0x0,0x0,0x75,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x9c,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xfd,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf6,0x0,0x0,0x0,0x75,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xde,0x0,0x0,0x0,0x54,0x0,0x0,0x0,0x44,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x44,0x0,0x0,0x0,0x4a,0x0,0x0,0x0,0xcb,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf6,0x0,0x0,0x0,0x75,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd1,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xb6,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd8,0x0,0x0,0x0,0x6d,0x0,0x0,0x0,0xdf,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf6,0x0,0x0,0x0,0x7c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0xb7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd4,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0xdf,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf6,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0xb7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd4,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x46,0x0,0x0,0x0,0xdf,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf6,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0xb7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd4,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x46,0x0,0x0,0x0,0xde,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf6,0x0,0x0,0x0,0x6e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0xb2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xee,0x0,0x0,0x0,0xa2,0x0,0x0,0x0,0x98,0x0,0x0,0x0,0x99,0x0,0x0,0x0,0x98,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xba,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7a,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x61,0x61,0x61,0xff,0x60,0x60,0x60,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x95,0x0,0x0,0x0,0xe1,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xe9,0x0,0x0,0x0,0xe9,0x0,0x0,0x0,0xe9,0x0,0x0,0x0,0xeb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0xd9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0xd1,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x61,0x61,0x61,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x61,0x61,0x61,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x61,0x61,0x61,0xff,0x60,0x60,0x60,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x61,0x61,0x61,0xff,0x60,0x60,0x60,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x60,0x60,0x60,0xff,0x61,0x61,0x61,0xff,0x61,0x61,0x61,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x61,0x61,0x61,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x60,0x60,0x60,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd1,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0xd1,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xde,0x0,0x0,0x0,0x54,0x0,0x0,0x0,0x44,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x44,0x0,0x0,0x0,0x54,0x0,0x0,0x0,0xde,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x9c,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x9c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0xd7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd7,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x67,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0x67,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 + }; + + px_byte PX_Object_Explorer_folderLogoData[] = { + 0x54,0x52,0x41,0x57,0x27,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x81,0x0,0x0,0x0,0x42,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56,0x0,0x0,0x0,0xde,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xed,0x0,0x0,0x0,0x91,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0xc5,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x92,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0xe7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf6,0x0,0x0,0x0,0xb8,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xae,0x0,0x0,0x0,0xd4,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0x89,0x0,0x0,0x0,0x50,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x52,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe4,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0xc8,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xfb,0x0,0x0,0x0,0xf5,0x0,0x0,0x0,0xb0,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe3,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0xdb,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x8e,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe3,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0xa4,0x0,0x0,0x0,0xd8,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xdb,0x0,0x0,0x0,0xe8,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd5,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe3,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x66,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe3,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x67,0x0,0x0,0x0,0x77,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x77,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x76,0x0,0x0,0x0,0x74,0x0,0x0,0x0,0xa4,0x0,0x0,0x0,0xfd,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xed,0x0,0x0,0x0,0x77,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe1,0x0,0x0,0x0,0x48,0x0,0x0,0x0,0xc9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd3,0x0,0x0,0x0,0x47,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe6,0x0,0x0,0x0,0xb1,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xbe,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfa,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xd6,0x0,0x0,0x0,0xc1,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc2,0x0,0x0,0x0,0xc1,0x0,0x0,0x0,0xcd,0x0,0x0,0x0,0xfa,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe4,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0x46,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x4d,0x0,0x0,0x0,0xf5,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd9,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xc7,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x87,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xb9,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x9d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0xb8,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x93,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x75,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0xd8,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x6a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf9,0x0,0x0,0x0,0x4d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xef,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0x41,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xe8,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x58,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xca,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xba,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x9f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x83,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0xb8,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x77,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfd,0x0,0x0,0x0,0x59,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0xe7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfa,0x0,0x0,0x0,0x4f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0xf9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xd9,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x72,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xbe,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xbb,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9a,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x86,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x8d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc3,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xfd,0x0,0x0,0x0,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xea,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf6,0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0xef,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf1,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0xe7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf9,0x0,0x0,0x0,0xbb,0x0,0x0,0x0,0xab,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xac,0x0,0x0,0x0,0xab,0x0,0x0,0x0,0xc6,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xdd,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0xc4,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xa3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x55,0x0,0x0,0x0,0xde,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xcc,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x8f,0x0,0x0,0x0,0x75,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 + }; + PX_memset(&explorer,0,sizeof(explorer)); + if (Width<256) + { + Width=256; + } + if (Height<128) + { + Height=128; + } + explorer.backgroundcolor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + explorer.cursorcolor=PX_OBJECT_UI_DEFAULT_CURSORCOLOR; + explorer.fontcolor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + explorer.bordercolor=PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + + explorer.func_getpathfilecount=_func_gpfec; + explorer.func_getpathfilename=_func_gpfcn; + explorer.func_getpathfoldercount=_func_gpfdc; + explorer.func_getpathfoldername=_func_gpfdn; + explorer.returnType=PX_OBJECT_EXPLORER_RETURN_CANCEL; + explorer.MaxSelectedCount=1; + explorer.fontmodule=fm; + + if(!PX_ShapeCreateFromMemory(mp,PX_Object_Explorer_fileLogoData,sizeof(PX_Object_Explorer_fileLogoData),&explorer.file))return PX_NULL; + if(!PX_ShapeCreateFromMemory(mp,PX_Object_Explorer_folderLogoData,sizeof(PX_Object_Explorer_folderLogoData),&explorer.folder))return PX_NULL; + + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_EXPLORER,PX_NULL,PX_Object_ExplorerRender,PX_Object_ExplorerFree,&explorer,sizeof(PX_Object_Explorer)); + + if (!pObject) + { + return PX_NULL; + } + + do + { + PX_Object_Explorer *pExp=PX_Object_GetExplorer(pObject); + pExp->btn_Back=PX_Object_PushButtonCreate(mp,pObject,0,0,1,1,"<-Back",pExp->fontmodule); + pExp->btn_go=PX_Object_PushButtonCreate(mp,pObject,0,0,1,1,"Go->",pExp->fontmodule); + pExp->btn_Ok=PX_Object_PushButtonCreate(mp,pObject,0,0,1,1,"Ok",pExp->fontmodule); + pExp->btn_Cancel=PX_Object_PushButtonCreate(mp,pObject,0,0,1,1,"Cancel",pExp->fontmodule); + pExp->edit_Path=PX_Object_EditCreate(mp,pObject,0,0,1,1,pExp->fontmodule); + pExp->edit_FileName = PX_Object_EditCreate(mp, pObject, 0, 0, 1, 1, pExp->fontmodule); + PX_Object_EditSetText(pExp->edit_Path,path); + pExp->SliderBar=PX_Object_SliderBarCreate(mp,pObject,0,0,24,24,PX_OBJECT_SLIDERBAR_TYPE_VERTICAL,PX_OBJECT_SLIDERBAR_STYLE_BOX); + pExp->btn_Ok->Visible=PX_FALSE; + PX_ObjectRegisterEvent(pExp->btn_Back,PX_OBJECT_EVENT_EXECUTE,PX_Object_ExplorerOnButtonBack,pObject); + PX_ObjectRegisterEvent(pExp->btn_go,PX_OBJECT_EVENT_EXECUTE,PX_Object_ExplorerOnButtonGo,pObject); + PX_ObjectRegisterEvent(pExp->btn_Ok,PX_OBJECT_EVENT_EXECUTE,PX_Object_ExplorerOnButtonOk,pObject); + PX_ObjectRegisterEvent(pExp->btn_Cancel,PX_OBJECT_EVENT_EXECUTE,PX_Object_ExplorerOnButtonCancel,pObject); + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_ExplorerOnCursorMove,pObject); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_ExplorerOnCursorDown,pObject); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORWHEEL,PX_Object_ExplorerOnCursorWheel,pObject); + } while (0); + + PX_Object_ExplorerRefresh(pObject); + pObject->Visible=PX_FALSE; + pObject->OnLostFocusReleaseEvent=PX_TRUE; + return pObject; +} + +px_void PX_Object_ExplorerSetBorderColor(PX_Object *Object,px_color clr) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + if (pExp) + { + pExp->bordercolor=clr; + } +} + +px_void PX_Object_ExplorerSetPushColor(PX_Object *Object,px_color clr) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + if (pExp) + { + pExp->pushcolor=clr; + } +} + +px_void PX_Object_ExplorerSetCursorColor(PX_Object *Object,px_color clr) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + if (pExp) + { + pExp->cursorcolor=clr; + } +} + +px_void PX_Object_ExplorerSetTextColor(PX_Object *Object,px_color clr) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + if (pExp) + { + pExp->fontcolor=clr; + } +} + +px_void PX_Object_ExplorerRefresh(PX_Object *Object) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + px_char FileNames[PX_EXPLORER_MAX_ITEMS][260]; + + if (pExp) + { + px_int i; + px_int count; + px_char *path=PX_Object_EditGetText(pExp->edit_Path); + + if (!pExp->func_getpathfilecount||!pExp->func_getpathfilename||!pExp->func_getpathfoldercount||!pExp->func_getpathfoldername) + { + return; + } + + + pExp->ItemCount=0; + + //folder + count=pExp->func_getpathfoldercount(path,pExp->filter); + if (count>PX_EXPLORER_MAX_ITEMS) + { + count=PX_EXPLORER_MAX_ITEMS; + } + pExp->func_getpathfoldername(path,count,FileNames,pExp->filter); + for (i=0;iItems[i].bcursor=PX_FALSE; + pExp->Items[i].bFolder=PX_TRUE; + pExp->Items[i].bselect=PX_FALSE; + PX_strcpy(pExp->Items[i].name,FileNames[i],sizeof(pExp->Items[i].name)); + } + pExp->ItemCount+=count; + + count=pExp->func_getpathfilecount(path,pExp->filter); + if (count>PX_EXPLORER_MAX_ITEMS-pExp->ItemCount) + { + count=PX_EXPLORER_MAX_ITEMS-pExp->ItemCount; + } + pExp->func_getpathfilename(path,count,FileNames,pExp->filter); + for (i=0;iItems[pExp->ItemCount+i].bcursor=PX_FALSE; + pExp->Items[pExp->ItemCount+i].bFolder=PX_FALSE; + pExp->Items[pExp->ItemCount+i].bselect=PX_FALSE; + PX_strcpy(pExp->Items[pExp->ItemCount+i].name,FileNames[i],sizeof(pExp->Items[0].name)); + } + pExp->ItemCount+=count; + PX_Object_SliderBarSetValue(pExp->SliderBar,0); + + if (pExp->savemode) + { + PX_Object_EditSetText(pExp->edit_FileName, ""); + } + } +} +px_int PX_Object_ExplorerGetSelectedCount(PX_Object *Object) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + px_int selectCount=0; + px_int i; + for (i=0;iItemCount;i++) + { + if (pExp->Items[i].bselect) + { + selectCount++; + } + } + return selectCount; +} +px_void PX_Object_ExplorerGetPath(PX_Object *Object,px_char path[PX_EXPLORER_MAX_PATH_LEN],px_int index) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + px_int selectCount=0,selectIndex=0; + px_int i; + for (i=0;iItemCount;i++) + { + if (pExp->Items[i].bselect) + { + selectCount++; + } + } + if (pExp->savemode) + { + PX_strcpy(path, PX_Object_EditGetText(pExp->edit_Path), PX_EXPLORER_MAX_PATH_LEN); + if(path[0]) + PX_strcat(path, "/"); + PX_strcat(path, PX_Object_EditGetText(pExp->edit_FileName)); + } + else + { + if (index < selectCount) + { + for (i = 0; i < pExp->ItemCount; i++) + { + if (pExp->Items[i].bselect) + { + if (selectIndex == index) + { + PX_strcpy(path, PX_Object_EditGetText(pExp->edit_Path), PX_EXPLORER_MAX_PATH_LEN); + if (path[PX_strlen(path) - 1] != '/' && path[PX_strlen(path) - 1] != '\\' && path[0]) + { + PX_strcat(path, "/"); + } + PX_strcat(path, pExp->Items[i].name); + } + selectIndex++; + } + } + } + else + { + path[0] = '\0'; + } + } +} + +px_void PX_Object_ExplorerOpen(PX_Object *Object) +{ + if (Object->Type!=PX_OBJECT_TYPE_EXPLORER) + { + PX_ASSERT(); + return; + } + PX_ObjectSetFocus(Object); + PX_Object_ExplorerRefresh(Object); + Object->Visible=PX_TRUE; + PX_ObjectGetDesc(PX_Object_Explorer, Object)->savemode = PX_FALSE; +} + +px_void PX_Object_ExplorerSave(PX_Object* Object) +{ + if (Object->Type != PX_OBJECT_TYPE_EXPLORER) + { + PX_ASSERT(); + return; + } + PX_ObjectSetFocus(Object); + PX_Object_ExplorerRefresh(Object); + Object->Visible = PX_TRUE; + PX_ObjectGetDesc(PX_Object_Explorer, Object)->savemode = PX_TRUE; +} + +px_void PX_Object_ExplorerClose(PX_Object *Object) +{ + PX_ObjectClearFocus(Object); + Object->Visible=PX_FALSE; +} + +px_void PX_Object_ExplorerSetFilter(PX_Object *Object,const px_char *filter) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + if (pExp) + { + PX_memset(pExp->filter,0,sizeof(pExp->filter)); + PX_strcpy(pExp->filter,filter,sizeof(pExp->filter)); + } + +} +px_void PX_Object_ExplorerSetMaxSelectCount(PX_Object *Object,int selectCount) +{ + PX_Object_Explorer *pExp=PX_Object_GetExplorer(Object); + if (pExp) + { + pExp->MaxSelectedCount=selectCount; + } +} diff --git a/UI/PainterEngine/kernel/PX_Object_Explorer.h b/UI/PainterEngine/kernel/PX_Object_Explorer.h new file mode 100644 index 0000000..3d5d7e6 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Explorer.h @@ -0,0 +1,78 @@ +#ifndef PX_OBJECT_EXPLORER_H +#define PX_OBJECT_EXPLORER_H +#include "PX_Object.h" +#define PX_EXPLORER_MAX_PATH_LEN 260 +#define PX_EXPLORER_MAX_ITEMS 1024 +#define PX_OBJECT_EXPOLRER_MENU_HEIGHT 48 +#define PX_OBJECT_EXPOLRER_ITEM_HEIGHT 38 +#define PX_OBJECT_EXPOLRER_SLIDERBAR_WIDTH 24 +#define PX_OBJECT_EXPOLRER_BUTTON_WIDTH 64 +typedef px_int (*PX_ExplorerGetPathFolderCount)(const px_char *path,const char *filter); +typedef px_int (*PX_ExplorerGetPathFileCount)(const px_char *path,const char *filter); +typedef px_int (*PX_ExplorerGetPathFolderName)(const char path[],int count,char FileName[][260],const char *filter); +typedef px_int (*PX_ExplorerGetPathFileName)(const char path[],int count,char FileName[][260],const char *filter); + +typedef struct +{ + px_bool bFolder; + px_bool bcursor; + px_bool bselect; + px_char name[260]; +}PX_Object_Explorer_Item; + +typedef enum +{ + PX_OBJECT_EXPLORER_RETURN_CONFIRM, + PX_OBJECT_EXPLORER_RETURN_CANCEL, +}PX_OBJECT_EXPLORER_RETURN; + + +typedef struct +{ + PX_ExplorerGetPathFolderCount func_getpathfoldercount; + PX_ExplorerGetPathFileCount func_getpathfilecount; + PX_ExplorerGetPathFolderName func_getpathfoldername; + PX_ExplorerGetPathFileName func_getpathfilename; + px_bool savemode; + px_int ItemCount; + px_int MaxSelectedCount; + PX_FontModule *fontmodule; + PX_Object_Explorer_Item Items[PX_EXPLORER_MAX_ITEMS]; + + PX_Object *edit_Path; + PX_Object* edit_FileName; + PX_Object *btn_Back,*btn_go,*btn_Ok,*btn_Cancel; + PX_Object *SliderBar; + px_char filter[PX_EXPLORER_MAX_PATH_LEN]; + + px_shape file,folder; + + px_color backgroundcolor,cursorcolor,fontcolor,bordercolor,pushcolor; + + PX_OBJECT_EXPLORER_RETURN returnType; + +}PX_Object_Explorer; + +PX_Object_Explorer *PX_Object_GetExplorer(PX_Object *Object); +PX_Object * PX_Object_ExplorerCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_FontModule *fm, + PX_ExplorerGetPathFolderCount _func_gpfdc, + PX_ExplorerGetPathFileCount _func_gpfec, + PX_ExplorerGetPathFolderName _func_gpfdn, + PX_ExplorerGetPathFileName _func_gpfcn, + const px_char path[260] +); +px_void PX_Object_ExplorerSetBorderColor(PX_Object *Object,px_color clr); +px_void PX_Object_ExplorerSetPushColor(PX_Object *Object,px_color clr); +px_void PX_Object_ExplorerSetCursorColor(PX_Object *Object,px_color clr); +px_void PX_Object_ExplorerSetTextColor(PX_Object *Object,px_color clr); +px_void PX_Object_ExplorerRefresh(PX_Object *Object); +px_int PX_Object_ExplorerGetSelectedCount(PX_Object *Object); +px_void PX_Object_ExplorerGetPath(PX_Object *Object,px_char path[PX_EXPLORER_MAX_PATH_LEN],px_int index); +px_void PX_Object_ExplorerOpen(PX_Object *Object); +px_void PX_Object_ExplorerSave(PX_Object* Object); +px_void PX_Object_ExplorerClose(PX_Object *Object); +px_void PX_Object_ExplorerSetFilter(PX_Object *Object,const px_char *filter); +px_void PX_Object_ExplorerSetMaxSelectCount(PX_Object *Object,int selectCount); + + +#endif diff --git a/UI/PainterEngine/kernel/PX_Object_IPBox.c b/UI/PainterEngine/kernel/PX_Object_IPBox.c new file mode 100644 index 0000000..84a6b3a --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_IPBox.c @@ -0,0 +1,79 @@ +#include "PX_Object_IPBox.h" + +PX_Object_IPBox* PX_Object_GetIPBox(PX_Object* pObject) +{ + if (pObject->Type==PX_OBJECT_TYPE_IPBOX) + { + return PX_ObjectGetDesc(PX_Object_IPBox, pObject); + } + return PX_NULL; +} + +px_void PX_Object_IPBoxOnConfirm(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_IPBox* pdesc = PX_ObjectGetDesc(PX_Object_IPBox, ((PX_Object*)ptr)); + if (!PX_IsValidIPAddress(PX_Object_VariousGetText(pdesc->various_ip))) + { + PX_Object_VariousSetTextColor(pdesc->various_ip, PX_COLOR_RED); + } + else + { + PX_ObjectExecuteEvent((PX_Object*)ptr, e); + PX_Object_IPBoxClose((PX_Object*)ptr); + } + +} + +px_void PX_Object_IPBoxOnCancel(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_IPBoxClose((PX_Object*)ptr); +} + +px_void PX_Object_IPBoxOnEditChanged(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_IPBox* pdesc = PX_ObjectGetDesc(PX_Object_IPBox,((PX_Object *)ptr)); + + PX_Object_VariousSetTextColor(pdesc->various_ip, PX_OBJECT_UI_DEFAULT_FONTCOLOR); +} + +PX_Object* PX_Object_IPBoxCreate(px_memorypool* mp, PX_Object* Parent, int x, int y, int width, int height, const px_char title[], PX_FontModule* fontmodule) +{ + PX_Object_IPBox desc, * pdesc; + PX_Object* pObject; + pObject = PX_ObjectCreateEx(mp, Parent, (px_float)x, (px_float)y, 0, (px_float)width, (px_float)height, 0, PX_OBJECT_TYPE_IPBOX, PX_NULL, PX_NULL, PX_NULL, &desc, sizeof(desc)); + pdesc = PX_ObjectGetDesc(PX_Object_IPBox, pObject); + pdesc->widget = PX_Object_WidgetCreate(mp, pObject, 0, 0, width, height, "", fontmodule); + PX_Object_WidgetShowHideCloseButton(pdesc->widget, PX_FALSE); + pdesc->various_ip = PX_Object_VariousCreate(mp, pdesc->widget , width / 2 - 128, height / 2 - 64, 256, 32, "IP:",PX_OBJECT_VARIOUS_TYPE_EDIT,fontmodule); + PX_Object_VariousSetEditStyle(pdesc->various_ip, PX_OBJECT_VARIOUS_EDIT_TYPE_STRING); + pdesc->various_port = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, height / 2 - 24, 256, 32, "Port:", PX_OBJECT_VARIOUS_TYPE_EDIT, fontmodule); + PX_Object_VariousSetEditStyle(pdesc->various_port, PX_OBJECT_VARIOUS_EDIT_TYPE_INT); + pdesc->btn_ok = PX_Object_PushButtonCreate(mp, pdesc->widget, width - 256, height - 68, 96, 32, "OK", fontmodule); + pdesc->btn_close = PX_Object_PushButtonCreate(mp, pdesc->widget, width - 128, height - 68, 96, 32, "Cancel", fontmodule); + + PX_ObjectRegisterEvent(pdesc->btn_ok, PX_OBJECT_EVENT_EXECUTE, PX_Object_IPBoxOnConfirm, pObject); + PX_ObjectRegisterEvent(pdesc->btn_close, PX_OBJECT_EVENT_EXECUTE, PX_Object_IPBoxOnCancel, pObject); + PX_ObjectRegisterEvent(pdesc->various_ip, PX_OBJECT_EVENT_VALUECHANGED, PX_Object_IPBoxOnEditChanged, pObject); + + pdesc->widget->Visible = PX_TRUE; + pObject->Visible = PX_FALSE; + return pObject; +} + +px_void PX_Object_IPBoxShow(PX_Object* pObject) +{ + pObject->Visible = PX_TRUE; + PX_ObjectSetFocus(pObject); +} + +px_void PX_Object_IPBoxClose(PX_Object* pObject) +{ + pObject->Visible = PX_FALSE; + PX_ObjectClearFocus(pObject); +} + +px_void PX_Object_IPBoxHide(PX_Object* pObject) +{ + pObject->Visible = PX_FALSE; + PX_ObjectClearFocus(pObject); +} \ No newline at end of file diff --git a/UI/PainterEngine/kernel/PX_Object_IPBox.h b/UI/PainterEngine/kernel/PX_Object_IPBox.h new file mode 100644 index 0000000..6e3e90a --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_IPBox.h @@ -0,0 +1,20 @@ +#ifndef PX_OBJECT_IPBOX_H +#define PX_OBJECT_IPBOX_H +#include "PX_Object.h" + + +typedef struct +{ + PX_Object *widget; + PX_Object* various_ip; + PX_Object* various_port; + PX_Object *btn_close; + PX_Object *btn_ok; +}PX_Object_IPBox; + +PX_Object_IPBox* PX_Object_GetIPBox( PX_Object *Object ); +PX_Object * PX_Object_IPBoxCreate(px_memorypool *mp,PX_Object *Parent,int x,int y,int width,int height,const px_char title[],PX_FontModule *fontmodule); +px_void PX_Object_IPBoxShow(PX_Object *pObject); +px_void PX_Object_IPBoxClose(PX_Object* pObject); +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Image.c b/UI/PainterEngine/kernel/PX_Object_Image.c new file mode 100644 index 0000000..cba7ebd --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Image.c @@ -0,0 +1,212 @@ +#include "PX_Object_Image.h" + +px_void PX_Object_ImageRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object_Image *pImage=PX_Object_GetImage(pObject); + px_int x,y,w,h; + PX_SurfaceLimitInfo limitInfo; + px_float inheritX,inheritY; + if (!pImage->pTexture) + { + return; + } + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + x=(px_int)(pObject->x+inheritX); + y=(px_int)(pObject->y+inheritY); + w=(px_int)pObject->Width; + h=(px_int)pObject->Height; + + limitInfo=PX_SurfaceGetLimit(psurface); + PX_SurfaceSetLimit(psurface,x,y,x+w-1,y+h-1); + + switch(pImage->Align) + { + case PX_ALIGN_LEFTTOP: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x,y,PX_ALIGN_LEFTTOP,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x,y,PX_ALIGN_LEFTTOP,PX_NULL); + } + } + break; + case PX_ALIGN_LEFTMID: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x,y+h/2,PX_ALIGN_LEFTMID,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x,y+h/2,PX_ALIGN_LEFTMID,PX_NULL); + } + } + break; + case PX_ALIGN_LEFTBOTTOM: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x,y+h,PX_ALIGN_LEFTBOTTOM,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x,y+h,PX_ALIGN_LEFTBOTTOM,PX_NULL); + } + } + break; + case PX_ALIGN_MIDTOP: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x+w/2,y,PX_ALIGN_MIDTOP,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x+w/2,y,PX_ALIGN_MIDTOP,PX_NULL); + } + } + break; + case PX_ALIGN_CENTER: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x+w/2,y+h/2,PX_ALIGN_CENTER,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x+w/2,y+h/2,PX_ALIGN_CENTER,PX_NULL); + } + } + break; + case PX_ALIGN_MIDBOTTOM: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x+w/2,y+h,PX_ALIGN_MIDBOTTOM,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x+w/2,y+h,PX_ALIGN_MIDBOTTOM,PX_NULL); + } + } + break; + case PX_ALIGN_RIGHTTOP: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x+w,y,PX_ALIGN_RIGHTTOP,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x+w,y,PX_ALIGN_RIGHTTOP,PX_NULL); + } + } + break; + case PX_ALIGN_RIGHTMID: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x+w,y+h/2,PX_ALIGN_RIGHTMID,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x+w,y+h/2,PX_ALIGN_RIGHTMID,PX_NULL); + } + } + break; + case PX_ALIGN_RIGHTBOTTOM: + { + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x+w,y+h,PX_ALIGN_RIGHTBOTTOM,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x+w,y+h,PX_ALIGN_RIGHTBOTTOM,PX_NULL); + } + } + break; + } + + PX_SurfaceSetLimitInfo(psurface,limitInfo); + +} + +px_void PX_Object_ImageFree( PX_Object *pBitmap ) +{ + +} + +PX_Object * PX_Object_ImageCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int width,px_int height,px_texture *ptex ) +{ + PX_Object *pObject; + PX_Object_Image *pImage=(PX_Object_Image *)MP_Malloc(mp,sizeof(PX_Object_Image)); + if (pImage==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)width,(px_float)height,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pImage); + return PX_NULL; + } + + pObject->pObject=pImage; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_IMAGE; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_ImageFree; + pObject->Func_ObjectRender=PX_Object_ImageRender; + pImage->pTexture=ptex; + pImage->pmask=PX_NULL; + pImage->Align=PX_ALIGN_CENTER; + return pObject; +} + + +PX_Object_Image * PX_Object_GetImage( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_IMAGE) + return (PX_Object_Image *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_ImageSetAlign( PX_Object *pImage,PX_ALIGN Align) +{ + PX_Object_Image *Bitmap=PX_Object_GetImage(pImage); + if (Bitmap) + { + Bitmap->Align=Align; + } +} + + +px_void PX_Object_ImageSetMask(PX_Object *pObject,px_texture *pmask) +{ + PX_Object_Image *pImg=PX_Object_GetImage(pObject); + if (pImg) + { + pImg->pmask=pmask; + } +} + + +px_void PX_Object_ImageSetTexture(PX_Object *pObject,px_texture *pTex) +{ + PX_Object_Image *pImg=PX_Object_GetImage(pObject); + if (pImg) + { + pImg->pTexture=pTex; + } +} + + +px_void PX_Object_ImageFreeWithTexture(PX_Object *pBitmap) +{ + PX_Object_Image *pImage; + pImage=PX_Object_GetImage(pBitmap); + if (pImage) + { + PX_TextureFree(pImage->pTexture); + } +} + diff --git a/UI/PainterEngine/kernel/PX_Object_Image.h b/UI/PainterEngine/kernel/PX_Object_Image.h new file mode 100644 index 0000000..06a4e4f --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Image.h @@ -0,0 +1,25 @@ +#ifndef PX_OBJECT_IMAGE_H +#define PX_OBJECT_IMAGE_H +#include "PX_Object.h" + + +typedef struct +{ + PX_ALIGN Align; + px_texture *pTexture; + px_texture *pmask; +}PX_Object_Image; + +PX_Object * PX_Object_ImageCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int width,px_int height,px_texture *ptex ); +PX_Object_Image *PX_Object_GetImage(PX_Object *Object); +px_void PX_Object_ImageSetAlign(PX_Object *pObject,PX_ALIGN Align); +px_void PX_Object_ImageSetMask(PX_Object *pObject,px_texture *pmask); +px_void PX_Object_ImageSetTexture(PX_Object *pObject,px_texture *pTex); +px_void PX_Object_ImageFreeWithTexture(PX_Object *pObject); + + + +#endif + + + diff --git a/UI/PainterEngine/kernel/PX_Object_Joystick.c b/UI/PainterEngine/kernel/PX_Object_Joystick.c new file mode 100644 index 0000000..ab16639 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Joystick.c @@ -0,0 +1,184 @@ +#include "PX_Object_Joystick.h" + +PX_Object_Joystick* PX_Object_GetJoystick(PX_Object* pObject) { + if (pObject->Type != PX_OBJECT_TYPE_JOYSTICK) { + return PX_NULL; + } + return (PX_Object_Joystick*)pObject->pObject; +} + +px_double PX_Object_JoystickGetAngle(PX_Object* pObject) { + if (pObject->Type != PX_OBJECT_TYPE_JOYSTICK) { + return 0.0; + } + return ((PX_Object_Joystick*)(pObject->pObject))->Angle; +} + +px_double PX_Object_JoystickGetDistance(PX_Object* pObject) { + if (pObject->Type != PX_OBJECT_TYPE_JOYSTICK) { + return 0.0; + } + return ((PX_Object_Joystick*)(pObject->pObject))->Distance; +} + +px_point2D PX_Object_JoystickGetVector(PX_Object* pObject) { + px_point2D p; + if (pObject->Type != PX_OBJECT_TYPE_JOYSTICK) { + p.x = 0.0; + p.y = 0.0; + } else { + p.x = ((PX_Object_Joystick*)(pObject->pObject))->Distance * + (px_float)PX_cosd(((PX_Object_Joystick*)(pObject->pObject))->Angle); + p.y = ((PX_Object_Joystick*)(pObject->pObject))->Distance * + (px_float)PX_sind(((PX_Object_Joystick*)(pObject->pObject))->Angle); + } + return p; +} + +/////////////////////////////////////////////// + +px_void Func_JoystickRender(px_surface* pSurface, PX_Object* pObject, px_uint elapsed); +px_void Func_JoystickOnCursorDown(PX_Object* pObject, PX_Object_Event e, px_void* ptr); +px_void Func_JoystickOnCursorDrag(PX_Object* pObject, PX_Object_Event e, px_void* ptr); +px_void Func_JoystickOnCursorUp(PX_Object* pObject, PX_Object_Event e, px_void* ptr); + +PX_Object* PX_Object_JoystickCreate(px_memorypool* mp, PX_Object* Parent, + px_float x, px_float y, + px_float deferentR, px_float epicycleR, px_float senseR, + px_color deferentColor, px_color epicycleColoe) { + + px_float z = 0.0f; + PX_Object* pObject; + PX_Object_Joystick joystick; + + joystick.DeferentColor = deferentColor; + joystick.EpicycleColor = epicycleColoe; + joystick.Distance = 0.0; + joystick.Angle = 0.0; + joystick.DeferentRadius = deferentR; + joystick.EpicycleRadius = epicycleR; + joystick.SenseRadius = senseR; + + pObject = PX_ObjectCreateEx(mp, Parent, + x, y, z, + 0.0f, 0.0f, 0.0f, PX_OBJECT_TYPE_JOYSTICK, + PX_NULL, Func_JoystickRender, PX_NULL, &joystick, sizeof(PX_Object_Joystick)); + + if (pObject == PX_NULL) { + return PX_NULL; + } + + pObject->diameter = 2 * joystick.SenseRadius; + + PX_ObjectRegisterEvent(pObject, PX_OBJECT_EVENT_CURSORDOWN, Func_JoystickOnCursorDown, PX_NULL); + PX_ObjectRegisterEvent(pObject, PX_OBJECT_EVENT_CURSORDRAG, Func_JoystickOnCursorDrag, PX_NULL); + PX_ObjectRegisterEvent(pObject, PX_OBJECT_EVENT_CURSORUP, Func_JoystickOnCursorUp, PX_NULL); + + return pObject; +} + +px_void Func_JoystickRender(px_surface* pSurface, PX_Object* pObject, px_uint elapsed) { + PX_Object_Joystick* pJoystick = (PX_Object_Joystick*)pObject->pObject; + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + PX_GeoDrawSolidCircle( + pSurface, + (px_int)objx, + (px_int)objy, + (px_int)pJoystick->DeferentRadius, pJoystick->DeferentColor); + PX_GeoDrawSolidCircle( + pSurface, + (px_int)(objx + pJoystick->Distance * PX_cosd(pJoystick->Angle)), + (px_int)(objy + pJoystick->Distance * PX_sind(pJoystick->Angle)), + (px_int)(pJoystick->EpicycleRadius), pJoystick->EpicycleColor); +} + +px_void Func_JoystickOnCursorDown(PX_Object* pObject, PX_Object_Event e, px_void* ptr) { + PX_Object_Joystick* pJoystick = (PX_Object_Joystick*)pObject->pObject; + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + px_float x,y,r; + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + x = PX_Object_Event_GetCursorX(e) - objx, + y = PX_Object_Event_GetCursorY(e) - objy, + r = PX_sqrt(x * x + y * y); + + if (pJoystick->IsAciton) { + return; + } + + if (r < pJoystick->SenseRadius) { + pJoystick->IsAciton = PX_TRUE; + pJoystick->Distance = r; + pJoystick->Angle = (px_float)PX_atan2(y, x); + } else { + pJoystick->Distance = 0.0f; + } +} + +px_void Func_JoystickOnCursorDrag(PX_Object* pObject, PX_Object_Event e, px_void* ptr) { + PX_Object_Joystick* pJoystick = (PX_Object_Joystick*)pObject->pObject; + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + px_float x,y,r; + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + x = PX_Object_Event_GetCursorX(e) - objx, + y = PX_Object_Event_GetCursorY(e) - objy, + r = PX_sqrt(x * x + y * y); + + if (!pJoystick->IsAciton) { + return; + } + + if (r <= pJoystick->DeferentRadius) { + pJoystick->Distance = r; + } else if (r <= pJoystick->SenseRadius) { + pJoystick->Distance = pJoystick->DeferentRadius; + } else { + pJoystick->Distance = 0.0f; + pJoystick->IsAciton = PX_FALSE; + return; + } + + pJoystick->Angle = (px_float)PX_atan2(y, x); +} + +px_void Func_JoystickOnCursorUp(PX_Object* pObject, PX_Object_Event e, px_void* ptr) { + PX_Object_Joystick* pJoystick = (PX_Object_Joystick*)pObject->pObject; + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + px_float x,y,r; + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + x = PX_Object_Event_GetCursorX(e) - objx, + y = PX_Object_Event_GetCursorY(e) - objy, + r = PX_sqrt(x * x + y * y); + + if (r <= pJoystick->SenseRadius) { + pJoystick->Distance = 0.0f; + pJoystick->IsAciton = PX_FALSE; + } +} \ No newline at end of file diff --git a/UI/PainterEngine/kernel/PX_Object_Joystick.h b/UI/PainterEngine/kernel/PX_Object_Joystick.h new file mode 100644 index 0000000..74e97f7 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Joystick.h @@ -0,0 +1,31 @@ +#ifndef PX_OBJECT_JOYSTICK_H +#define PX_OBJECT_JOYSTICK_H + +#include"PX_Object.h" + +typedef struct { + px_color DeferentColor; + px_color EpicycleColor; + px_float Distance; + px_float Angle; + px_float DeferentRadius; + px_float EpicycleRadius; + px_float SenseRadius; + px_bool IsAciton; +}PX_Object_Joystick; + +PX_Object* PX_Object_JoystickCreate(px_memorypool* mp, PX_Object* Parent, + px_float x, px_float y, + px_float deferentR, px_float epicycleR, px_float senseR, + px_color deferentColor, px_color epicycleColoe); + +PX_Object_Joystick* PX_Object_GetJoystick(PX_Object* pObject); + +px_double PX_Object_JoystickGetAngle(PX_Object* pObject); + +px_double PX_Object_JoystickGetDistance(PX_Object* pObject); + +px_point2D PX_Object_JoystickGetVector(PX_Object *pObject); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Label.c b/UI/PainterEngine/kernel/PX_Object_Label.c new file mode 100644 index 0000000..fd65e82 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Label.c @@ -0,0 +1,250 @@ +#include "PX_Object_Label.h" + +px_void PX_Object_LabelRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_int x,y,w,h; + px_float inheritX,inheritY; + PX_SurfaceLimitInfo limitInfo; + PX_Object_Label *pLabel=(PX_Object_Label *)pObject->pObject; + if (pLabel==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + x=(px_int)(pObject->x+inheritX); + y=(px_int)(pObject->y+inheritY); + w=(px_int)pObject->Width; + h=(px_int)pObject->Height; + + PX_GeoDrawRect(psurface,x,y,x+w,y+h-1,pLabel->BackgroundColor); + if (pLabel->bBorder) + { + switch(pLabel->style) + { + case PX_OBJECT_LABEL_STYLE_ROUNDRECT: + PX_GeoDrawRoundRect(psurface,x,y,x+w,y+h-1,h/2-2.0f,1,pLabel->borderColor); + break; + default: + PX_GeoDrawBorder(psurface,x,y,x+w,y+h-1,1,pLabel->borderColor); + } + } + + limitInfo=PX_SurfaceGetLimit(psurface); + PX_SurfaceSetLimit(psurface,x,y,x+w-1,y+h-1); + + switch (pLabel->Align) + { + case PX_ALIGN_LEFTTOP: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x,y,PX_ALIGN_LEFTTOP,pLabel->Text,pLabel->TextColor); + break; + case PX_ALIGN_LEFTMID: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x,y+h/2,PX_ALIGN_LEFTMID,pLabel->Text,pLabel->TextColor); + break; + case PX_ALIGN_LEFTBOTTOM: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x,y+h,PX_ALIGN_LEFTBOTTOM,pLabel->Text,pLabel->TextColor); + break; + case PX_ALIGN_MIDTOP: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x+w/2,y,PX_ALIGN_MIDTOP,pLabel->Text,pLabel->TextColor); + break; + case PX_ALIGN_CENTER: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x+w/2,y+h/2,PX_ALIGN_CENTER,pLabel->Text,pLabel->TextColor); + break; + case PX_ALIGN_MIDBOTTOM: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x+w/2,y+h,PX_ALIGN_MIDBOTTOM,pLabel->Text,pLabel->TextColor); + break; + case PX_ALIGN_RIGHTTOP: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x+w,y,PX_ALIGN_RIGHTTOP,pLabel->Text,pLabel->TextColor); + break; + case PX_ALIGN_RIGHTMID: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x+w,y+h/2,PX_ALIGN_RIGHTMID,pLabel->Text,pLabel->TextColor); + break; + case PX_ALIGN_RIGHTBOTTOM: + PX_FontModuleDrawText(psurface,pLabel->fontModule,x+w,y+h,PX_ALIGN_RIGHTBOTTOM,pLabel->Text,pLabel->TextColor); + break; + } + PX_SurfaceSetLimitInfo(psurface,limitInfo); +} + +px_void PX_Object_LabelFree( PX_Object *pLabel ) +{ + PX_Object_Label *Label=PX_Object_GetLabel(pLabel); + if (pLabel!=PX_NULL) + { + MP_Free(pLabel->mp,Label->Text); + } +} + +PX_Object* PX_Object_LabelCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,PX_FontModule *fm,px_color Color ) +{ + px_int TextLen; + PX_Object *pObject; + PX_Object_Label *pLable=(PX_Object_Label *)MP_Malloc(mp,sizeof(PX_Object_Label)); + if (pLable==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pLable); + return PX_NULL; + } + pObject->pObject=pLable; + pObject->Type=PX_OBJECT_TYPE_LABEL; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_LabelFree; + pObject->Func_ObjectRender=PX_Object_LabelRender; + + TextLen=PX_strlen(Text); + + pLable->Text=(px_char *)MP_Malloc(mp,TextLen+1); + if (pLable->Text==PX_NULL) + { + MP_Free(pObject->mp,pObject); + MP_Free(pObject->mp,pLable); + return PX_NULL; + } + + PX_strcpy(pLable->Text,Text,TextLen+1); + + pLable->TextColor=Color; + pLable->BackgroundColor=PX_COLOR(0,0,0,0); + pLable->Align=PX_ALIGN_LEFTMID; + pLable->bBorder=PX_FALSE; + pLable->borderColor=PX_COLOR(255,0,0,0); + pLable->fontModule=fm; + pLable->style=PX_OBJECT_LABEL_STYLE_RECT; + return pObject; +} + + +PX_Object_Label * PX_Object_GetLabel( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_LABEL) + return (PX_Object_Label *)Object->pObject; + else + return PX_NULL; +} + +px_char * PX_Object_LabelGetText( PX_Object *Label ) +{ + PX_Object_Label *pLabel=PX_Object_GetLabel(Label); + if (pLabel!=PX_NULL) + { + return pLabel->Text; + } + return PX_NULL; +} +px_void PX_Object_LabelSetText( PX_Object *pObject,const px_char *Text ) +{ + PX_Object_Label *pLabel; + px_int TextLen; + if (pObject==PX_NULL||Text==PX_NULL) + { + return; + } + if (pObject->Type!=PX_OBJECT_TYPE_LABEL) + { + PX_ASSERT(); + return; + } + + TextLen=PX_strlen(Text); + pLabel=(PX_Object_Label *)pObject->pObject; + if(TextLen>PX_strlen(pLabel->Text)) + { + MP_Free(pObject->mp,pLabel->Text); + pLabel->Text=(px_char *)MP_Malloc(pObject->mp,TextLen+1); + if (!pLabel->Text) + { + PX_ERROR("Text create out of memories"); + } + PX_strcpy(pLabel->Text,Text,TextLen+1); + } + else + { + PX_strcpy(pLabel->Text,Text,TextLen+1); + } +} + + +px_void PX_Object_LabelSetTextColor(PX_Object *pObject,px_color Color) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + pLabel->TextColor=Color; + } +} + + +px_void PX_Object_LabelSetBackgroundColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + pLabel->BackgroundColor=Color; + } +} +px_void PX_Object_LabelSetAlign( PX_Object *pObject,PX_ALIGN Align ) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + + pLabel->Align=Align; + } +} + + + +px_void PX_Object_LabelSetBorder(PX_Object *pObject,px_bool b) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + pLabel->bBorder=b; + } +} + +px_void PX_Object_LabelSetBorderColor(PX_Object *pObject,px_color color) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + pLabel->borderColor=color; + } +} + +px_void PX_Object_LabelSetStyle(PX_Object *pObject,PX_OBJECT_LABEL_STYLE style) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + pLabel->style=style; + } +} + +px_int PX_Object_LabelGetTextRenderWidth(PX_Object* pObject) +{ + PX_Object_Label* pLabel = PX_Object_GetLabel(pObject); + if (pLabel) + { + px_int w, h; + PX_FontModuleTextGetRenderWidthHeight(pLabel->fontModule, pLabel->Text, &w, &h); + return w; + } + return 0; +} diff --git a/UI/PainterEngine/kernel/PX_Object_Label.h b/UI/PainterEngine/kernel/PX_Object_Label.h new file mode 100644 index 0000000..5994b6b --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Label.h @@ -0,0 +1,37 @@ +#ifndef PX_OBJECT_LABEL_H +#define PX_OBJECT_LABEL_H +#include "PX_Object.h" + +typedef enum +{ + PX_OBJECT_LABEL_STYLE_RECT, + PX_OBJECT_LABEL_STYLE_ROUNDRECT, +}PX_OBJECT_LABEL_STYLE; + +typedef struct +{ + PX_ALIGN Align; + px_color borderColor; + px_color TextColor; + px_color BackgroundColor; + px_bool bBorder; + PX_OBJECT_LABEL_STYLE style; + PX_FontModule *fontModule; + px_char *Text; +}PX_Object_Label; + +PX_Object * PX_Object_LabelCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,PX_FontModule *fm,px_color Color); +PX_Object_Label * PX_Object_GetLabel(PX_Object *Object); +px_char * PX_Object_LabelGetText(PX_Object *Label); +px_void PX_Object_LabelSetText(PX_Object *pLabel,const px_char *Text); +px_void PX_Object_LabelSetTextColor(PX_Object *pLabel,px_color Color); +px_void PX_Object_LabelSetBackgroundColor(PX_Object *pLabel,px_color Color); +px_void PX_Object_LabelSetAlign(PX_Object *pLabel,PX_ALIGN Align); +px_void PX_Object_LabelSetBorder(PX_Object *pLabel,px_bool b); +px_void PX_Object_LabelSetBorderColor(PX_Object *pLabel,px_color color); +px_void PX_Object_LabelSetStyle(PX_Object *pLabel,PX_OBJECT_LABEL_STYLE style); +px_int PX_Object_LabelGetTextRenderWidth(PX_Object* pLabel); + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_List.c b/UI/PainterEngine/kernel/PX_Object_List.c new file mode 100644 index 0000000..388679b --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_List.c @@ -0,0 +1,557 @@ +#include "PX_Object_List.h" +PX_Object_List * PX_Object_GetList( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_LIST) + return (PX_Object_List *)Object->pObject; + else + return PX_NULL; +} + +PX_Object_ListItem * PX_Object_GetListItem( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_LISTITEM) + return (PX_Object_ListItem *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_ListOnCursorMove(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + + PX_Object_List *pList= PX_Object_GetList(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + pList->currentCursorIndex=-1; + if (!PX_ObjectIsCursorInRegion(pObject,e)) + { + return; + } + + if (pList->pData.size*pList->ItemHeight>pObject->Height) + { + if (PX_Object_Event_GetCursorX(e)>objx+objWidth-32) + { + return; + } + } + + + pList->currentCursorIndex=(px_int)(PX_Object_Event_GetCursorY(e)+pList->offsety-objy)/pList->ItemHeight; + if(pList->currentCursorIndex<0||pList->currentCursorIndex>=pList->pData.size) + { + pList->currentCursorIndex=-1; + } + +} + +px_void PX_Object_ListOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_List *pList= PX_Object_GetList(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + px_int currentSelectedIndex; + PX_Object_Event ne; + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (!PX_ObjectIsCursorInRegion(pObject,e)) + { + return; + } + if (pList->pData.size*pList->ItemHeight>pObject->Height) + { + if (PX_Object_Event_GetCursorX(e)>objx+objWidth-32) + { + return; + } + } + + currentSelectedIndex=(px_int)(PX_Object_Event_GetCursorY(e)+pList->offsety-objy)/pList->ItemHeight; + if (pList->currentSelectedIndex!=currentSelectedIndex) + { + PX_memset(&ne,0,sizeof(ne)); + pList->currentSelectedIndex=currentSelectedIndex; + if(pList->currentSelectedIndex<0||pList->currentSelectedIndex>=pList->pData.size) + { + pList->currentSelectedIndex=-1; + } + ne.Event=PX_OBJECT_EVENT_VALUECHANGED; + PX_Object_Event_SetIndex(&ne,pList->currentSelectedIndex); + PX_ObjectExecuteEvent(pObject,ne); + } + else + { + if (pList->doubleCursorCancel&&pList->currentSelectedIndex!=-1) + { + PX_memset(&e,0,sizeof(ne)); + pList->currentSelectedIndex=-1; + ne.Event=PX_OBJECT_EVENT_VALUECHANGED; + PX_Object_Event_SetIndex(&ne,pList->currentSelectedIndex); + PX_ObjectExecuteEvent(pObject,ne); + } + } +} + +px_void PX_Object_ListOnCursorRDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_List *pList= PX_Object_GetList(pObject); + if (!PX_ObjectIsCursorInRegion(pObject,e)) + { + return; + } + + if (pList->currentSelectedIndex!=-1) + { + pList->currentSelectedIndex=-1; + e.Event=PX_OBJECT_EVENT_VALUECHANGED; + PX_Object_Event_SetIndex(&e,pList->currentSelectedIndex); + PX_ObjectExecuteEvent(pObject,e); + } + +} + +px_void PX_Object_ListOnWheel(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_List *pList= PX_Object_GetList(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (!PX_ObjectIsCursorInRegion(pObject,e)) + { + return; + } + pList->offsety-=(px_int)PX_Object_Event_GetCursorZ(e)/5; + + + if (pList->offsety>(pList->ItemHeight)*pList->pData.size-objHeight) + { + pList->offsety=(pList->ItemHeight)*pList->pData.size-(px_int)objHeight; + } + + if (pList->offsety<0) + { + pList->offsety=0; + } + + PX_Object_SliderBarSetValue(pList->SliderBar,pList->offsety); +} + +px_void PX_Object_ListMoveToTop(PX_Object *pObject) +{ + PX_Object_List *pList= PX_Object_GetList(pObject); + pList->offsety=0; + PX_Object_SliderBarSetValue(pList->SliderBar,0); +} + +px_void PX_Object_ListRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object *pItemObject; + px_int offsetX=0,drawXCenter=0; + px_int i; + px_int iy; + PX_Object_List *pList= PX_Object_GetList(pObject); + PX_Object_ListItem *pItem; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pList->Items.size!=(px_int)(objHeight/(pList->ItemHeight) + 2)) + { + PX_Object_ListItem Item; + for (i=0;iItems.size;i++) + { + PX_Object* pItemObject = *PX_VECTORAT(PX_Object*, &pList->Items, i); + PX_ObjectDelete(pItemObject); + } + + + PX_VectorClear(&pList->Items); + + for (i = 0; i < (px_int)(objHeight / pList->ItemHeight + 2); i++) + { + Item.pList = pObject; + Item.pdata = PX_NULL; + pItemObject = PX_ObjectCreateEx(pList->mp, PX_NULL, 0, 0, 0, (px_float)pObject->Width, (px_float)pList->ItemHeight, 0, PX_OBJECT_TYPE_LISTITEM, PX_NULL, PX_NULL, PX_NULL, &Item, sizeof(PX_Object_ListItem)); + if (!pList->CreateFunctions(pList->mp, pItemObject, pList->userptr)) return; + if (!PX_VectorPushback(&pList->Items, &pItemObject))return; + } + } + + + if (pList->ItemHeight*pList->pData.size>objHeight) + { + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pList->SliderBar); + pList->SliderBar->Visible=PX_TRUE; + pList->SliderBar->y=0; + pList->SliderBar->x=objx+objWidth-32; + pList->SliderBar->Height = objHeight; + pSliderBar->SliderButtonLength=(px_int)(pList->SliderBar->Height*objHeight/(pList->ItemHeight*pList->pData.size)); + if(pSliderBar->SliderButtonLength<32) pSliderBar->SliderButtonLength=32; + pSliderBar->Max=(pList->ItemHeight)*pList->pData.size-(px_int)objHeight; + PX_Object_SliderBarSetBackgroundColor(pList->SliderBar,pList->BackgroundColor); + PX_Object_SliderBarSetColor(pList->SliderBar,pList->BorderColor); + } + else + { + pList->SliderBar->Visible=PX_FALSE; + } + + + if (pList->offsety<0) + { + iy=-pList->offsety; + } + else + { + iy=-(pList->offsety%pList->ItemHeight); + } + + for (i=0;iItems.size;i++) + { + + pItemObject=*PX_VECTORAT(PX_Object *,&pList->Items,i); + pItemObject->x=0; + pItemObject->y=(px_float)iy; + pItemObject->Width = pObject->Width; + pItem=PX_Object_GetListItem(pItemObject); + if (pList->offsety<0) + { + if(ipData.size) + { + pItem->pdata=*PX_VECTORAT(px_void *,&pList->pData,i); + PX_ObjectUpdate(pItemObject,elapsed); + } + else + { + pItem->pdata=PX_NULL; + } + } + else + { + if(i+pList->offsety/pList->ItemHeightpData.size) + { + pItem->pdata=*PX_VECTORAT(px_void *,&pList->pData,i+pList->offsety/pList->ItemHeight); + PX_ObjectUpdate(pItemObject,elapsed); + } + else + { + pItem->pdata=PX_NULL; + } + } + iy+=(px_int)pItemObject->Height; + } + + if ((px_int)pList->renderSurface.width!=(px_int)pObject->Width|| (px_int)pList->renderSurface.height != (px_int)pObject->Height) + { + PX_SurfaceFree(&pList->renderSurface); + if (!PX_SurfaceCreate(pList->mp, (px_int)pObject->Width, (px_int)pObject->Height, &pList->renderSurface)) + { + PX_ASSERT(); + return; + } + } + + PX_SurfaceClear(&pList->renderSurface,0,0,pList->renderSurface.width-1,pList->renderSurface.height-1,pList->BackgroundColor); + for (i=0;iItems.size;i++) + { + px_int index=i+pList->offsety/pList->ItemHeight; + pItemObject=*PX_VECTORAT(PX_Object *,&pList->Items,i); + pItem=PX_Object_GetListItem(pItemObject); + if (pItemObject->y+pItemObject->Height>0&&pItemObject->yHeight&&pItem->pdata) + { + + if (pList->showCursor) + { + if (index==pList->currentCursorIndex&&index!=pList->currentSelectedIndex) + { + PX_GeoDrawRect(&pList->renderSurface,(px_int)pItemObject->x,(px_int)pItemObject->y,(px_int)(pItemObject->x+pItemObject->Width-1),(px_int)(pItemObject->y+pItemObject->Height-1),pList->CursorColor); + } + } + if (index==pList->currentSelectedIndex) + { + PX_GeoDrawRect(&pList->renderSurface,(px_int)pItemObject->x,(px_int)pItemObject->y,(px_int)(pItemObject->x+pItemObject->Width-1),(px_int)(pItemObject->y+pItemObject->Height-1),pList->SelectCursor); + } + PX_ObjectRender(&pList->renderSurface,pItemObject,elapsed); + } + } + PX_GeoDrawBorder(&pList->renderSurface,0,0,pList->renderSurface.width-1,pList->renderSurface.height-1,1,pList->BorderColor); + PX_SurfaceCover(psurface,&pList->renderSurface,(px_int)objx,(px_int)objy,PX_ALIGN_LEFTTOP); + +} + +px_void PX_Object_ListClear(PX_Object *pListObj) +{ + PX_Object_List *pList=PX_Object_GetList(pListObj); + if(pList) + PX_VectorClear(&pList->pData); +} + +px_void PX_Object_ListSetCurrentSelectIndex(PX_Object *pObject,px_int index) +{ + PX_Object_List *pList=PX_Object_GetList(pObject); + if(pList) + { + if (index>=0&&indexItems.size) + { + pList->currentSelectedIndex=index; + } + else + { + pList->currentSelectedIndex=-1; + } + } +} + +px_int PX_Object_ListGetCurrentSelectIndex(PX_Object *pObject) +{ + PX_Object_List *pList=PX_Object_GetList(pObject); + if(pList) + { + return pList->currentSelectedIndex; + } + return -1; +} + +px_int PX_Object_ListAdd(PX_Object *pListObj,px_void *ptr) +{ + PX_Object_List *pList=PX_Object_GetList(pListObj); + if(pList) + { + if(PX_VectorPushback(&pList->pData,&ptr)) + return pList->pData.size-1; + } + return -1; +} + +px_void PX_Object_ListFree(PX_Object *pListObj) +{ + PX_Object_List *pList=PX_Object_GetList(pListObj); + if (!pList) + { + PX_ASSERT(); + return; + } + PX_Object_ListClear(pListObj); + PX_SurfaceFree(&pList->renderSurface); + PX_VectorFree(&pList->Items); +} + +px_void PX_Object_ListOnSliderValueChanged(PX_Object *Object,PX_Object_Event e,px_void *ptr) +{ + px_int value=PX_Object_SliderBarGetValue(Object); + PX_Object_List *pList=PX_Object_GetList((PX_Object *)ptr); + pList->offsety=value; +} + +px_void PX_Object_ListOnEvent(PX_Object *Object,PX_Object_Event e,px_void *ptr) +{ + px_int i; + PX_Object_List *pList=PX_Object_GetList(Object); + + switch (e.Event) + { + case PX_OBJECT_EVENT_CURSORWHEEL: + if (!PX_ObjectIsPointInRegion(Object,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e))) + { + return; + } + case PX_OBJECT_EVENT_CURSORDRAG: + case PX_OBJECT_EVENT_CURSORRDOWN: + case PX_OBJECT_EVENT_CURSORDOWN: + case PX_OBJECT_EVENT_CURSORUP: + case PX_OBJECT_EVENT_CURSORRUP: + case PX_OBJECT_EVENT_CURSORMOVE: + if (!PX_ObjectIsPointInRegion(Object,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e))) + { + return; + } + PX_Object_Event_SetCursorX(&e,PX_Object_Event_GetCursorX(e)-Object->x); + PX_Object_Event_SetCursorY(&e,PX_Object_Event_GetCursorY(e)-Object->y); + break; + } + + for (i=0;iItems.size;i++) + { + PX_Object *pItem=*PX_VECTORAT(PX_Object *,&pList->Items,i); + PX_ObjectPostEvent(pItem,e); + } +} + +PX_Object * PX_Object_ListCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,px_int ItemHeight,PX_Object_ListItemOnCreate _CreateFunc,px_void *userptr) +{ + PX_Object_List List,*pList; + + PX_Object *pListObject; + PX_memset(&List,0,sizeof(List)); + List.mp=mp; + List.ItemWidth=Width-32; + List.ItemHeight=ItemHeight; + List.CreateFunctions=_CreateFunc; + + List.BorderColor=PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + List.BackgroundColor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + List.CursorColor=PX_OBJECT_UI_DEFAULT_CURSORCOLOR; + List.SelectCursor=PX_OBJECT_UI_DEFAULT_PUSHCOLOR; + + List.offsetx=0; + List.currentSelectedIndex=-1; + List.currentCursorIndex=-1; + List.offsety=0; + List.showCursor=PX_TRUE; + List.userptr = userptr; + + PX_VectorInitialize(mp,&List.Items,sizeof(PX_Object *),64); + PX_VectorInitialize(mp,&List.pData,sizeof(px_void *),32); + if(!PX_SurfaceCreate(mp,Width,Height,&List.renderSurface)) return PX_NULL; + if(!(pListObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_LIST,PX_NULL,PX_Object_ListRender,PX_Object_ListFree,&List,sizeof(PX_Object_List)))) return PX_NULL; + + pList=PX_Object_GetList(pListObject); + pList->SliderBar=PX_Object_SliderBarCreate(mp,pListObject,(px_int)pListObject->Width-32,0,32,(px_int)pListObject->Height,PX_OBJECT_SLIDERBAR_TYPE_VERTICAL,PX_OBJECT_SLIDERBAR_STYLE_BOX); + + PX_ObjectRegisterEvent(pListObject,PX_OBJECT_EVENT_CURSORWHEEL,PX_Object_ListOnWheel,pListObject); + PX_ObjectRegisterEvent(pListObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_ListOnCursorDown,pListObject); + PX_ObjectRegisterEvent(pListObject,PX_OBJECT_EVENT_CURSORRDOWN,PX_Object_ListOnCursorRDown,pListObject); + PX_ObjectRegisterEvent(pListObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_ListOnCursorMove,pListObject); + PX_ObjectRegisterEvent(pList->SliderBar,PX_OBJECT_EVENT_VALUECHANGED,PX_Object_ListOnSliderValueChanged,pListObject); + PX_ObjectRegisterEvent(pListObject,PX_OBJECT_EVENT_ANY,PX_Object_ListOnEvent,pListObject); + return pListObject; +} + +static px_void PX_Object_ListContentItemOnRender(px_surface* psurface, PX_Object* pObject, px_dword elapsed) +{ + PX_Object_ListItem* pListItem; + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + pListItem = PX_Object_GetListItem(pObject); + + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + PX_FontModuleDrawText(psurface, PX_Object_GetList(pListItem->pList)->fm, (px_int)objx + 3, (px_int)(objy + objHeight / 2), PX_ALIGN_LEFTMID, (const px_char*)pListItem->pdata, PX_OBJECT_UI_DEFAULT_FONTCOLOR); + +} + +px_bool PX_Designer_ListContentItemOnCreate(px_memorypool* mp, PX_Object* ItemObject, px_void* userptr) +{ + ItemObject->Func_ObjectRender = PX_Object_ListContentItemOnRender; + return PX_TRUE; +} + + +PX_Object* PX_Object_ListContentCreate(px_memorypool* mp, PX_Object* Parent, px_int x, px_int y, px_int Width, px_int Height, PX_FontModule* fm) +{ + PX_Object* pObject; + if (fm) + { + pObject=PX_Object_ListCreate(mp, Parent, x, y, Width, Height, fm->max_Height + 6, PX_Designer_ListContentItemOnCreate, PX_NULL); + if (pObject) + { + PX_Object_List* pList = PX_ObjectGetDesc(PX_Object_List,pObject); + pList->fm = fm; + } + } + else + { + pObject = PX_Object_ListCreate(mp, Parent, x, y, Width, Height, __PX_FONT_HEIGHT+6, PX_Designer_ListContentItemOnCreate,PX_NULL); + } + return pObject; + +} + +px_bool PX_Object_ListItemIsOnDisplayPresent(PX_Object* pObject, px_int index) +{ + if (pObject->Type==PX_OBJECT_TYPE_LIST) + { + PX_Object_List* pList = PX_ObjectGetDesc(PX_Object_List, pObject); + PX_Object* pItemObject = *PX_VECTORAT(PX_Object*, &pList->Items, index); + PX_Object_ListItem* pItem = PX_Object_GetListItem(pItemObject); + if (pItemObject->y + pItemObject->Height > 0 && pItemObject->y < pObject->Height && pItem->pdata) + { + return PX_TRUE; + } + } + PX_ASSERT(); + return PX_FALSE; +} + +px_void PX_Object_ListSetBackgroundColor(PX_Object *pListObject,px_color color) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (pList) + { + pList->BackgroundColor=color; + } +} + +px_void PX_Object_ListSetBorderColor(PX_Object *pListObject,px_color color) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (pList) + { + pList->BorderColor=color; + } +} + +px_void PX_Object_ListSetDoubleClickCancel(PX_Object *pListObject,px_bool b) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (pList) + { + pList->doubleCursorCancel=b; + } +} + +px_void * PX_Object_ListGetItemData(PX_Object *pListObject,px_int index) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (index>=0&&indexpData.size) + { + return *PX_VECTORAT(px_void *,&pList->pData,index); + } + return PX_NULL; +} + +px_void* PX_Object_ListItemGetData(PX_Object* pItemObject) +{ + PX_Object_ListItem* pItem=(PX_Object_ListItem *)pItemObject->pObject; + return pItem->pdata; +} + +px_void PX_Object_ListRemoveItem(PX_Object *pListObject,px_int index) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (index>=0&&indexpData.size) + { + PX_VectorErase(&pList->pData,index); + } + return ; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_List.h b/UI/PainterEngine/kernel/PX_Object_List.h new file mode 100644 index 0000000..9b956a7 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_List.h @@ -0,0 +1,57 @@ +#ifndef PX_OBJECT_LIST_H +#define PX_OBJECT_LIST_H +#include "PX_Object.h" + + +typedef px_bool (*PX_Object_ListItemOnCreate)(px_memorypool *mp,PX_Object *ItemObject,px_void *userptr); + + +typedef struct +{ + PX_Object* pList; + px_void *pdata; +}PX_Object_ListItem; + +typedef struct +{ + px_memorypool *mp; + px_int ItemWidth; + px_int ItemHeight; + px_int offsetx; + px_int offsety; + px_int currentSelectedIndex,currentCursorIndex; + px_color BorderColor; + px_color BackgroundColor; + px_color CursorColor; + px_color SelectCursor; + px_surface renderSurface; + px_bool showCursor; + px_bool doubleCursorCancel; + px_vector Items; + px_vector pData; + PX_Object *SliderBar; + PX_FontModule* fm; + px_void* userptr; + PX_Object_ListItemOnCreate CreateFunctions; +}PX_Object_List; + +PX_Object_List * PX_Object_GetList( PX_Object *Object ); +PX_Object_ListItem * PX_Object_GetListItem( PX_Object *Object ); +PX_Object * PX_Object_ListCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,px_int ItemHeight,PX_Object_ListItemOnCreate _CreateFunc,px_void *userptr); +PX_Object* PX_Object_ListContentCreate(px_memorypool* mp, PX_Object* Parent, px_int x, px_int y, px_int Width, px_int Height, PX_FontModule* fm); +px_bool PX_Object_ListItemIsOnDisplayPresent(PX_Object* pObject,px_int index); +px_void PX_Object_ListMoveToTop(PX_Object *pObject); +px_void PX_Object_ListClear(PX_Object *pListObj); +px_void PX_Object_ListSetCurrentSelectIndex(PX_Object *pObject,px_int index); +px_int PX_Object_ListGetCurrentSelectIndex(PX_Object *pObject); +px_int PX_Object_ListAdd(PX_Object *pListObj,px_void *ptr); +px_void *PX_Object_ListGetItemData(PX_Object *pListObject,px_int index); +px_void* PX_Object_ListItemGetData(PX_Object* pItemObject); +px_void PX_Object_ListRemoveItem(PX_Object *pListObject,px_int index); +px_void PX_Object_ListSetBackgroundColor(PX_Object *pListObject,px_color color); +px_void PX_Object_ListSetBorderColor(PX_Object *pListObject,px_color color); +px_void PX_Object_ListSetDoubleClickCancel(PX_Object *pListObject,px_bool b); + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_MemoryView.c b/UI/PainterEngine/kernel/PX_Object_MemoryView.c new file mode 100644 index 0000000..2fc0f4f --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_MemoryView.c @@ -0,0 +1,410 @@ +#include "PX_Object_MemoryView.h" + +////////////////////////////////////////////////////////////////////////// +// 0x00000000 00 a -- +// 16+64 16 16+8+8+16 + +static px_int PX_Object_MemoryViewGetCursorMapIndex(PX_Object *pObject,px_float cx,px_float cy) +{ + PX_Object_MemoryView *pdesc; + px_int x,y,w,h; + px_float inheritX,inheritY; + px_int row,column; + px_int columnoffset; + px_int rel_address_offset; + px_int xIndex,yIndex,Index; + pdesc=PX_ObjectGetDesc(PX_Object_MemoryView,pObject); + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + x=(px_int)(pObject->x+inheritX); + y=(px_int)(pObject->y+inheritY); + w=(px_int)pObject->Width; + h=(px_int)pObject->Height; + + row=(w-(16+64+16+8+16))/32; + column=h/(15+3); + + cx-=x; + cy-=y; + + columnoffset=PX_Object_SliderBarGetValue(pdesc->scrollbar); + rel_address_offset=row*columnoffset; + + if (cx<96+row*24) + { + xIndex=(px_int)((cx-96)/8-(cx-96)/24); + if(xIndex<0)xIndex=0; + } + else if(cx=row*2) xIndex=row*2-2; + } + else + { + return -1; + } + + yIndex=(px_int)(cy/18); + + Index=yIndex*row*2+rel_address_offset*2+xIndex; + if (Index<0) + { + Index=0; + } + + if (Index>=pdesc->size*2) + { + Index=pdesc->size*2-1; + } + return Index; +} + + +px_void PX_Object_MemoryViewRender(px_surface *prendersurface,PX_Object *pObject,px_dword elapsed) +{ + px_int row,column,i,j; + px_int rel_address_offset; + px_int mst,med; + PX_Object_MemoryView *pdesc; + px_int x,y,w,h; + px_float inheritX,inheritY; + px_int columnoffset; + px_int drawx,drawy; + + pdesc=PX_ObjectGetDesc(PX_Object_MemoryView,pObject); + pdesc->cursor_elapsed+=elapsed; + columnoffset=PX_Object_SliderBarGetValue(pdesc->scrollbar); + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + x=(px_int)(pObject->x+inheritX); + y=(px_int)(pObject->y+inheritY); + w=(px_int)pObject->Width; + h=(px_int)pObject->Height; + + + pdesc->scrollbar->x=x+w-16.f; + pdesc->scrollbar->y=(px_float)y; + pdesc->scrollbar->Width=16.f; + pdesc->scrollbar->Height=(px_float)h; + + row=(w-(16+64+16+8+16))/32; + + if (row<1) + { + return; + } + + column=h/(15+3); + if (column<1) + { + return; + } + + mst=pdesc->mark_start_cursor; + med=pdesc->mark_end_cursor; + if (mst>med) + { + mst^=med; + med=mst^med; + mst^=med; + } + + + + + + ////////////////////////////////////////////////////////////////////////// + //render background + PX_GeoDrawRect(prendersurface,x,y,x+w,y+h,pdesc->backgroundcolor); + + ///////////////////////////////////////////////////////////////////////// + //render border + PX_GeoDrawBorder(prendersurface, x, y, x + w, y + h, 1,pdesc->bordercolor); + + rel_address_offset=row*columnoffset; + + drawy=y; + for (j=0;j=pdesc->size) + { + break; + } + addr=rel_address_offset+pdesc->address_offset; + + + drawx=0; + //0x + PX_FontDrawChar(prendersurface,drawx,drawy,'0',pdesc->fontcolor); + drawx+=8; + + PX_FontDrawChar(prendersurface,drawx,drawy,'x',pdesc->fontcolor); + drawx+=8; + + + PX_BufferToHexString((px_byte *)&addr,4,addrhex); + PX_FontDrawText(prendersurface,drawx,drawy,PX_ALIGN_LEFTTOP,addrhex,pdesc->fontcolor); + drawx+=8*8; + + drawx+=16; + + for (i=0;i=pdesc->size) + { + break; + } + b=((px_byte *)pdesc->pdata)[rel_address_offset]; + PX_BufferToHexString(&b,1,hex); + PX_strupr(hex); + + if (rel_address_offset*2>=mst&&rel_address_offset*2<=med) + { + PX_GeoDrawRect(prendersurface,drawx,drawy,drawx+7,drawy+15,pdesc->selectcolor); + } + + if ((rel_address_offset*2>=mst&&rel_address_offset*2<=med)||(rel_address_offset*2+1>=mst&&rel_address_offset*2+1<=med)) + { + PX_GeoDrawRect(prendersurface,96+row*24+8*i,drawy,96+row*24+8*i+7,drawy+15,pdesc->selectcolor); + } + + if (rel_address_offset*2==pdesc->cursor) + { + if ((pdesc->cursor_elapsed/200)&1) + { + PX_GeoDrawRect(prendersurface,drawx,drawy,drawx+7,drawy+15,pdesc->cursorcolor); + } + } + if (rel_address_offset*2==pdesc->cursor||rel_address_offset*2+1==pdesc->cursor) + { + PX_GeoDrawRect(prendersurface,96+row*24+8*i,drawy,96+row*24+8*i+7,drawy+15,pdesc->selectcolor); + } + + + PX_FontDrawChar(prendersurface,drawx,drawy,hex[0],pdesc->fontcolor); + if (b>=32&&b<=126) + { + PX_FontDrawChar(prendersurface,96+row*24+8*i,drawy,b,pdesc->fontcolor); + } + + drawx+=8; + if (rel_address_offset*2+1>=mst&&rel_address_offset*2+1<=med) + { + PX_GeoDrawRect(prendersurface,drawx,drawy,drawx+7,drawy+15,pdesc->selectcolor); + } + + if (rel_address_offset*2+1==pdesc->cursor) + { + if ((pdesc->cursor_elapsed/200)&1) + { + PX_GeoDrawRect(prendersurface,drawx,drawy,drawx+7,drawy+15,pdesc->cursorcolor); + } + } + PX_FontDrawChar(prendersurface,drawx,drawy,hex[1],pdesc->fontcolor); + drawx+=16; + rel_address_offset++; + } + + drawy+=16; + + } + + +} + +px_void PX_Object_MemoryViewOnCursorClick(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + PX_Object_MemoryView *pdesc; + + if (!PX_ObjectIsCursorInRegion(pObject,e)) + { + return; + } + + pdesc=PX_ObjectGetDesc(PX_Object_MemoryView,pObject); + + pdesc->mark_end_cursor=-1; + pdesc->mark_start_cursor=-1; + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + pdesc->cursor=PX_Object_MemoryViewGetCursorMapIndex(pObject,x,y); +} + +px_void PX_Object_MemoryViewOnCursorDrag(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + PX_Object_MemoryView *pdesc; + + if (!PX_ObjectIsCursorInRegion(pObject,e)) + { + return; + } + + pdesc=PX_ObjectGetDesc(PX_Object_MemoryView,pObject); + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + pdesc->mark_end_cursor=PX_Object_MemoryViewGetCursorMapIndex(pObject,x,y); + +} + +px_void PX_Object_MemoryViewOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + PX_Object_MemoryView *pdesc; + + if (!PX_ObjectIsCursorInRegion(pObject,e)) + { + return; + } + + pdesc=PX_ObjectGetDesc(PX_Object_MemoryView,pObject); + pdesc->mark_end_cursor=-1; + pdesc->mark_start_cursor=-1; + pdesc->cursor=-1; + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + pdesc->mark_start_cursor=pdesc->mark_end_cursor=PX_Object_MemoryViewGetCursorMapIndex(pObject,x,y); +} + +px_void PX_Object_MemoryViewOnKeyDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_MemoryView *pdesc=PX_ObjectGetDesc(PX_Object_MemoryView,pObject); + PX_Object_Event ne; + px_char key=PX_Object_Event_GetKeyDown(e); + + if ((key>='A'&&key<='F')||(key>='a'&&key<='f')||(key>='0'&&key<='9')) + { + if (pdesc->cursor>=0&&pdesc->cursorsize*2) + { + px_int index=pdesc->cursor/2; + px_uchar value=0; + if ((key>='A'&&key<='F')) + { + value=key-'A'+10; + } + else if ((key>='a'&&key<='f')) + { + value=key-'a'+10; + } + else if ((key>='0'&&key<='9')) + { + value=key-'0'; + } + + if (pdesc->cursor&1) + { + ((px_byte *)pdesc->pdata)[index]&=0xf0; + ((px_byte *)pdesc->pdata)[index]|=(value); + } + else + { + ((px_byte *)pdesc->pdata)[index]&=0x0f; + ((px_byte *)pdesc->pdata)[index]|=(value<<4); + } + + + ne.Event=PX_OBJECT_EVENT_VALUECHANGED; + ne.Param_uint[0]=index; + ne.Param_uint[1]=((px_byte *)pdesc->pdata)[index]; + PX_ObjectExecuteEvent(pObject,ne); + + if (pdesc->cursorsize*2-1) + { + pdesc->cursor++; + } + } + } + +} + + +PX_Object * PX_Object_MemoryViewCreate(px_memorypool *mp,PX_Object *pParent,px_int x,px_int y,px_int Width,px_int Height) +{ + PX_Object_MemoryView desc,*pdesc; + PX_Object *pObject; + PX_memset(&desc,0,sizeof(desc)); + desc.backgroundcolor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + desc.cursor=-1; + desc.mark_end_cursor=-1; + desc.mark_start_cursor=-1; + desc.cursorcolor=PX_COLOR(64,255,255,255); + desc.fontcolor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + desc.selectcolor=PX_COLOR(64,255,255,255); + desc.bordercolor = PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + pObject=PX_ObjectCreateEx(mp,pParent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_MEMORYVIEW,PX_NULL,PX_Object_MemoryViewRender,PX_NULL,&desc,sizeof(desc)); + pdesc=PX_ObjectGetDesc(PX_Object_MemoryView,pObject); + pdesc->scrollbar=PX_Object_SliderBarCreate(mp,pObject,0,0,10,10,PX_OBJECT_SLIDERBAR_TYPE_VERTICAL,PX_OBJECT_SLIDERBAR_STYLE_BOX); + pdesc->scrollbar->Visible=PX_FALSE; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORCLICK,PX_Object_MemoryViewOnCursorClick,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_MemoryViewOnCursorDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_MemoryViewOnCursorDrag,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_KEYDOWN,PX_Object_MemoryViewOnKeyDown,PX_NULL); + return pObject; +} + +PX_Object_MemoryView * PX_Object_GetMemoryView(PX_Object *pObject) +{ + if (pObject->Type!=PX_OBJECT_TYPE_MEMORYVIEW) + { + PX_ASSERT(); + return PX_NULL; + } + return (PX_Object_MemoryView * )pObject->pObject; +} + +px_void PX_Object_MemoryViewSetFontColor(PX_Object *pObject,px_color Color) +{ + PX_Object_MemoryView *pdesc=PX_Object_GetMemoryView(pObject); + if(pdesc) + pdesc->fontcolor=Color; +} + +px_void PX_Object_MemoryViewSetBackgroundColor(PX_Object *pObject,px_color Color) +{ + PX_Object_MemoryView *pdesc=PX_Object_GetMemoryView(pObject); + if(pdesc) + pdesc->backgroundcolor=Color; +} + +px_void PX_Object_MemoryViewSetData(PX_Object *pObject,px_void *pdata,px_dword size) +{ + PX_Object_MemoryView *pdesc=PX_Object_GetMemoryView(pObject); + if(pdesc) + { + px_int row,column,cc; + pdesc->pdata=pdata; + pdesc->size=size; + pdesc->cursor=-1; + pdesc->mark_start_cursor=-1; + pdesc->mark_end_cursor=-1; + + ////////////////////////////////////////////////////////////////////////// + //scrollbar + row=(px_int)(pObject->Width-(16+64+16+8+16))/32; + column=(px_int)pObject->Height/(15+3); + cc=(pdesc->size+row/2)/row; + if (cc>column) + { + PX_Object_SliderBarSetRange(pdesc->scrollbar,0,cc-column); + PX_Object_SliderBarSetValue(pdesc->scrollbar,0); + pdesc->scrollbar->Visible=PX_TRUE; + } + else + { + pdesc->scrollbar->Visible=PX_FALSE; + PX_Object_SliderBarSetValue(pdesc->scrollbar,0); + } + + } +} + diff --git a/UI/PainterEngine/kernel/PX_Object_MemoryView.h b/UI/PainterEngine/kernel/PX_Object_MemoryView.h new file mode 100644 index 0000000..9a0558c --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_MemoryView.h @@ -0,0 +1,31 @@ +#ifndef PX_OBJECT_MEMORYVIEW_H +#define PX_OBJECT_MEMORYVIEW_H +#include "PX_Object.h" + +typedef struct +{ + px_void *pdata; + px_int size; + px_int cursor; + PX_Object *scrollbar; + px_dword address_offset; + px_int mark_start_cursor; + px_int mark_end_cursor; + + px_dword cursor_elapsed; + + px_color bordercolor; + px_color backgroundcolor; + px_color fontcolor; + px_color cursorcolor; + px_color selectcolor; +}PX_Object_MemoryView; + +PX_Object * PX_Object_MemoryViewCreate(px_memorypool *mp,PX_Object *pParent,px_int x,px_int y,px_int Width,px_int Height); +PX_Object_MemoryView *PX_Object_GetMemoryView(PX_Object *pObject); +px_void PX_Object_MemoryViewSetFontColor(PX_Object *pObject,px_color Color); +px_void PX_Object_MemoryViewSetBackgroundColor(PX_Object *pObject,px_color Color); +px_void PX_Object_MemoryViewSetData(PX_Object *pObject,px_void *pdata,px_dword size); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Menu.c b/UI/PainterEngine/kernel/PX_Object_Menu.c new file mode 100644 index 0000000..fb6f1fd --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Menu.c @@ -0,0 +1,460 @@ +#include "PX_Object_Menu.h" +static PX_Object_Menu *PX_Object_GetMenu(PX_Object *pMenuObject) +{ + if (pMenuObject->Type==PX_OBJECT_TYPE_MENU) + { + return (PX_Object_Menu *)pMenuObject->pObject; + } + return PX_NULL; +} +static px_void PX_MenuSubMenuUpdateEx(PX_Object_Menu *pMenu,PX_Object_Menu_Item *pItem,px_int startX,px_int startY) +{ + px_int index=0; + px_int maxWidth=0,maxHeight=0; + px_list_node *pNode=PX_NULL; + + + for (pNode=PX_ListNodeAt(&pItem->Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + px_int cWidth,cHeight; + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + PX_FontModuleTextGetRenderWidthHeight(pMenu->fontmodule,pSubItem->Text,&cWidth,&cHeight); + if (cWidth>maxWidth) + { + maxWidth=cWidth; + } + if (cHeight>maxHeight) + { + maxHeight=cHeight; + } + } + + maxWidth+=PX_MENU_ITEM_SPACER_SIZE*2+18+16; + maxHeight+=PX_MENU_ITEM_SPACER_SIZE*2; + + + if (maxWidthminimumSize) + { + maxWidth=pMenu->minimumSize; + } + + for (pNode=PX_ListNodeAt(&pItem->Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + pSubItem->x=startX; + pSubItem->y=startY+index*maxHeight; + pSubItem->width=maxWidth; + pSubItem->height=maxHeight; + index++; + } + + + for (pNode=PX_ListNodeAt(&pItem->Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + PX_MenuSubMenuUpdateEx(pMenu,pSubItem,pSubItem->x+pSubItem->width,pSubItem->y); + } +} +static px_void PX_MenuSubMenuUpdate(px_int x,px_int y,PX_Object_Menu *pMenu) +{ + px_int index=0; + px_int maxWidth=0,maxHeight=0; + px_list_node *pNode=PX_NULL; + + + for (pNode=PX_ListNodeAt(&pMenu->root.Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + px_int cWidth,cHeight; + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + PX_FontModuleTextGetRenderWidthHeight(pMenu->fontmodule,pSubItem->Text,&cWidth,&cHeight); + if (cWidth>maxWidth) + { + maxWidth=cWidth; + } + if (cHeight>maxHeight) + { + maxHeight=cHeight; + } + } + + maxWidth+=PX_MENU_ITEM_SPACER_SIZE*2+18+16; + maxHeight+=PX_MENU_ITEM_SPACER_SIZE*2; + + + if (maxWidthminimumSize) + { + maxWidth=pMenu->minimumSize; + } + + for (pNode=PX_ListNodeAt(&pMenu->root.Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + pSubItem->x=x+index*maxWidth; + pSubItem->y=y; + pSubItem->width=maxWidth; + pSubItem->height=maxHeight; + index++; + } + + + for (pNode=PX_ListNodeAt(&pMenu->root.Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + PX_MenuSubMenuUpdateEx(pMenu,pSubItem,pSubItem->x,pSubItem->y+pSubItem->height); + } +} +static px_bool PX_Object_MenuInitialize(px_memorypool *mp,PX_Object_Menu *pMenu,px_int x,int y,px_int width,PX_FontModule *fontmodule) +{ + PX_memset(pMenu,0,sizeof(PX_Object_Menu)); + pMenu->fontmodule=fontmodule; + pMenu->minimumSize=width; + pMenu->mp=mp; + pMenu->activating=PX_FALSE; + pMenu->backgroundColor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + pMenu->cursorColor=PX_OBJECT_UI_DEFAULT_CURSORCOLOR; + pMenu->fontColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + pMenu->disableColor=PX_OBJECT_UI_DISABLE_FONTCOLOR; + PX_ListInitialize(mp,&pMenu->root.Items); + pMenu->root.Activated=PX_TRUE; + return PX_TRUE; +} +typedef enum +{ + PX_MENU_CURSORACTION_MOVE, + PX_MENU_CURSORACTION_DOWN, +}PX_MENU_CURSORACTION; +static px_void PX_MenuClearParent(PX_Object_Menu *pMenu,PX_Object_Menu_Item *pItem) +{ + px_list_node *pNode=PX_NULL; + + for (pNode=PX_ListNodeAt(&pItem->pParent->Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + pSubItem->onCursor=PX_FALSE; + pSubItem->Activated=PX_FALSE; + } +} +static px_void PX_MenuClearChild(PX_Object_Menu *pMenu,PX_Object_Menu_Item *pItem) +{ + px_list_node *pNode=PX_NULL; + + for (pNode=PX_ListNodeAt(&pItem->Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + pSubItem->onCursor=PX_FALSE; + pSubItem->Activated=PX_FALSE; + } +} +static px_void PX_MenuClearState(PX_Object *pMenuObject) +{ + PX_Object_Menu *pMenu=PX_Object_GetMenu(pMenuObject); + px_list_node *pNode=PX_NULL; + + for (pNode=PX_ListNodeAt(&pMenu->root.Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + pSubItem->onCursor=PX_FALSE; + pSubItem->Activated=PX_FALSE; + } + PX_ObjectClearFocus(pMenuObject); + pMenu->activating=PX_FALSE; +} +px_bool PX_Menu_CursorAction(PX_Object *pObject,PX_Object_Menu_Item *pItem,px_float x,px_float y,PX_MENU_CURSORACTION action) +{ + px_list_node *pNode=PX_NULL; + PX_Object_Menu *pMenu=PX_Object_GetMenu(pObject); + + if (PX_isXYInRegion(x,y,(px_float)pItem->x,(px_float)pItem->y,(px_float)pItem->width,(px_float)pItem->height)) + { + + PX_MenuClearParent(pMenu,pItem); + switch (action) + { + case PX_MENU_CURSORACTION_MOVE: + { + if (!pItem->enable) + { + return PX_TRUE; + } + pItem->onCursor=PX_TRUE; + if (pMenu->activating&&pItem->Items.size!=0) + { + pItem->Activated=PX_TRUE; + PX_MenuClearChild(pMenu,pItem); + } + } + break; + case PX_MENU_CURSORACTION_DOWN: + { + if (!pItem->enable) + { + return PX_TRUE; + } + pItem->onCursor=PX_TRUE; + pItem->Activated=PX_TRUE; + + if (pItem->Items.size==0) + { + PX_MenuClearState(pObject); + } + else + { + PX_MenuClearChild(pMenu,pItem); + } + + if (pItem->func_callback) + { + pItem->func_callback(pItem->user_ptr); + } + + return PX_TRUE; + } + break; + } + } + else + { + pItem->onCursor=PX_FALSE; + } + + if (!pItem->Activated) + { + return PX_FALSE; + } + + for (pNode=PX_ListNodeAt(&pItem->Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + if(PX_Menu_CursorAction(pObject,pSubItem,x,y,action)) + return PX_TRUE; + } + return PX_FALSE; +} +px_void PX_MenuPostEvent_OnCursorDown(PX_Object *pObject,PX_Object_Event e) +{ + px_list_node *pNode=PX_NULL; + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + PX_Object_Menu *pMenu=PX_Object_GetMenu(pObject); + + if (!pMenu->activating) + { + for (pNode=PX_ListNodeAt(&pMenu->root.Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + if (PX_isXYInRegion(x,y,(px_float)pSubItem->x,(px_float)pSubItem->y,(px_float)pSubItem->width,(px_float)pSubItem->height)&&pSubItem->enable) + { + pMenu->activating=PX_TRUE; + PX_ObjectSetFocus(pObject); + pSubItem->Activated=PX_TRUE; + PX_MenuClearChild(pMenu,pSubItem); + return; + } + } + PX_ObjectClearFocus(pObject); + pMenu->activating=PX_FALSE; + return; + } + else + { + if (!PX_Menu_CursorAction(pObject,&pMenu->root,x,y,PX_MENU_CURSORACTION_DOWN)) + { + PX_MenuClearState(pObject); + } + } +} +px_void PX_MenuPostEvent_OnCursorMove(PX_Object *pObject,PX_Object_Event e) +{ + PX_Object_Menu *pMenu=PX_Object_GetMenu(pObject); + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + PX_Menu_CursorAction(pObject,&pMenu->root,x,y,PX_MENU_CURSORACTION_MOVE); +} +px_void PX_Object_MenuOnCursorEventEx(PX_Object *pObject,PX_Object_Event e) +{ + + switch(e.Event) + { + case PX_OBJECT_EVENT_CURSORMOVE: + case PX_OBJECT_EVENT_CURSORDRAG: + { + PX_MenuPostEvent_OnCursorMove(pObject,e); + } + break; + case PX_OBJECT_EVENT_CURSORDOWN: + { + PX_MenuPostEvent_OnCursorDown(pObject,e); + } + break; + default: + break; + } + +} +static px_void PX_MenuRenderItem(px_surface *pSurface,PX_Object_Menu *pMenu,PX_Object_Menu_Item *pItem,px_bool broot,px_dword elapsed) +{ + if (pItem->width&&pItem->height) + { + if (pItem->onCursor||pItem->Activated) + { + PX_GeoDrawRect(pSurface,pItem->x,pItem->y,pItem->x+pItem->width-1,pItem->y+pItem->height-1,pMenu->cursorColor); + } + else + { + PX_GeoDrawRect(pSurface,pItem->x,pItem->y,pItem->x+pItem->width-1,pItem->y+pItem->height-1,pMenu->backgroundColor); + } + + if (broot) + PX_FontModuleDrawText(pSurface,pMenu->fontmodule,pItem->x+pItem->width/2,pItem->y+pItem->height/2,PX_ALIGN_CENTER,pItem->Text,pMenu->fontColor); + else + { + if (!pItem->enable) + { + PX_FontModuleDrawText(pSurface,pMenu->fontmodule,pItem->x+18,pItem->y+pItem->height/2,PX_ALIGN_LEFTMID,pItem->Text,pMenu->disableColor); + } + else + { + PX_FontModuleDrawText(pSurface,pMenu->fontmodule,pItem->x+18,pItem->y+pItem->height/2,PX_ALIGN_LEFTMID,pItem->Text,pMenu->fontColor); + } + + if (pItem->Items.size!=0) + { + PX_GeoDrawTriangle(pSurface, + PX_POINT2D((px_float)(pItem->x+pItem->width-6),(px_float)(pItem->y+pItem->height/2)), + PX_POINT2D((px_float)(pItem->x+pItem->width-12),(px_float)(pItem->y+pItem->height/2-4)), + PX_POINT2D((px_float)(pItem->x+pItem->width-12),(px_float)(pItem->y+pItem->height/2+4)), + pMenu->fontColor); + } + } + + } + + + if (pItem->Activated) + { + if(pItem->Items.size) + { + px_list_node *pNode=PX_NULL; + for (pNode=PX_ListNodeAt(&pItem->Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + PX_MenuRenderItem(pSurface,pMenu,pSubItem,PX_FALSE,elapsed); + } + } + } +} +px_void PX_Object_MenuRenderEx(px_surface *pSurface,PX_Object_Menu *pMenu,px_dword elapsed) +{ + px_list_node *pNode=PX_NULL; + + for (pNode=PX_ListNodeAt(&pMenu->root.Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + PX_MenuRenderItem(pSurface,pMenu,pSubItem,PX_TRUE,elapsed); + } + +} +static px_void PX_MenuItemFree(PX_Object_Menu_Item *pItem) +{ + px_list_node *pNode=PX_NULL; + + for (pNode=PX_ListNodeAt(&pItem->Items,0);pNode;pNode=PX_ListNodeNext(pNode)) + { + PX_Object_Menu_Item *pSubItem=PX_LIST_NODETDATA(PX_Object_Menu_Item,pNode); + PX_MenuItemFree(pSubItem); + } + PX_ListFree(&pItem->Items); +} +px_void PX_Object_MenuFreeEx(PX_Object_Menu *pMenu) +{ + PX_MenuItemFree(&pMenu->root); +} +PX_Object_Menu_Item * PX_Object_MenuAddItem(PX_Object *pObject,PX_Object_Menu_Item *parent,const px_char Text[],PX_MenuExecuteFunc _callback,px_void *ptr) +{ + PX_Object_Menu_Item item,*ret; + PX_Object_Menu *pMenu=PX_Object_GetMenu(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + if (parent==PX_NULL) + { + parent = PX_Object_MenuGetRootItem(pObject); + } + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + PX_memset(&item,0,sizeof(PX_Object_Menu_Item)); + PX_strcpy(item.Text,Text,sizeof(item.Text)); + item.func_callback=_callback; + PX_ListInitialize(pMenu->mp,&item.Items); + item.pParent=parent; + item.user_ptr=ptr; + item.enable=PX_TRUE; + ret=(PX_Object_Menu_Item *)PX_ListPush(&parent->Items,&item,sizeof(item)); + if (ret!=PX_NULL) + { + PX_MenuSubMenuUpdate((px_int)objx,(px_int)objy,pMenu); + } + return ret; +} + +px_void PX_Object_MenuFree(PX_Object *Obj) +{ + PX_Object_MenuFreeEx(PX_Object_GetMenu(Obj)); +} + +px_void PX_Object_MenuRender(px_surface *psurface, PX_Object *Obj,px_uint elapsed) +{ + PX_Object_MenuRenderEx(psurface,PX_Object_GetMenu(Obj),elapsed); +} + +px_void PX_Object_MenuOnCursorEvent(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_MenuOnCursorEventEx(pObject,e); +} + +PX_Object * PX_Object_MenuCreate(px_memorypool *mp,PX_Object *Parent,px_int x,int y,px_int width,PX_FontModule *fontmodule) +{ + PX_Object *pObject; + PX_Object_Menu *pMenu=(PX_Object_Menu *)MP_Malloc(mp,sizeof(PX_Object_Menu)); + + if (pMenu==PX_NULL) + { + return PX_NULL; + } + + if (!PX_Object_MenuInitialize(mp,pMenu,x,y,width,fontmodule)) + { + return PX_NULL; + } + + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pMenu); + return PX_NULL; + } + + + pObject->pObject=pMenu; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_MENU; + pObject->Func_ObjectFree=PX_Object_MenuFree; + pObject->Func_ObjectRender=PX_Object_MenuRender; + pObject->OnLostFocusReleaseEvent=PX_TRUE; + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_MenuOnCursorEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_MenuOnCursorEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_MenuOnCursorEvent,PX_NULL); + return pObject; +} + +PX_Object_Menu_Item * PX_Object_MenuGetRootItem(PX_Object *pMenuObject) +{ + return &PX_Object_GetMenu(pMenuObject)->root; +} \ No newline at end of file diff --git a/UI/PainterEngine/kernel/PX_Object_Menu.h b/UI/PainterEngine/kernel/PX_Object_Menu.h new file mode 100644 index 0000000..2293ae8 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Menu.h @@ -0,0 +1,44 @@ +#ifndef PX_OBJECT_MENU_H +#define PX_OBJECT_MENU_H +#include "PX_Object.h" + +#define PX_MENU_CONTENT_MAX_LEN 48 +#define PX_MENU_ITEM_SPACER_SIZE 2 +typedef px_void (*PX_MenuExecuteFunc)(px_void *userPtr); + + +struct _PX_Object_Menu_Item +{ + struct _PX_Object_Menu_Item *pParent; + px_int x,y,width,height; + px_bool enable; + px_char Text[PX_MENU_CONTENT_MAX_LEN]; + px_bool onCursor; + px_bool Activated; + px_list Items; + PX_MenuExecuteFunc func_callback; + px_void *user_ptr; +}; +typedef struct _PX_Object_Menu_Item PX_Object_Menu_Item; + +typedef struct +{ + px_memorypool *mp; + px_bool activating; + px_int minimumSize; + PX_Object_Menu_Item root; + PX_FontModule *fontmodule; + px_color backgroundColor; + px_color fontColor; + px_color disableColor; + px_color cursorColor; +}PX_Object_Menu; + + +PX_Object * PX_Object_MenuCreate(px_memorypool *mp,PX_Object *Parent,px_int x,int y,px_int width,PX_FontModule *fontmodule); +PX_Object_Menu_Item * PX_Object_MenuGetRootItem(PX_Object *pMenuObject); +PX_Object_Menu_Item * PX_Object_MenuAddItem(PX_Object *pMenuObject,PX_Object_Menu_Item *parent,const px_char Text[],PX_MenuExecuteFunc _callback,px_void *ptr); + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_MessageBox.c b/UI/PainterEngine/kernel/PX_Object_MessageBox.c new file mode 100644 index 0000000..a4a3e76 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_MessageBox.c @@ -0,0 +1,291 @@ +#include "PX_Object_MessageBox.h" + +PX_Object_MessageBox *PX_Object_GetMessageBox(PX_Object *pObject) +{ + if (pObject->Type==PX_OBJECT_TYPE_MESSAGEBOX) + { + return (PX_Object_MessageBox *)pObject->pObject; + } + return PX_NULL; +} + +static px_void PX_Object_MessageBox_BtnYesClick(PX_Object *pObject,PX_Object_Event e,px_void *user) +{ + PX_Object_MessageBox *pm=PX_Object_GetMessageBox((PX_Object *)user); + PX_Object_MessageBoxClose((PX_Object *)user); + if (pm->function_yes) + { + pm->function_yes((PX_Object *)user,PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_EXECUTE),pm->function_yes_ptr); + } + +} + +static px_void PX_Object_MessageBox_BtnNoClick(PX_Object *pObject,PX_Object_Event e,px_void *user) +{ + PX_Object_MessageBox *pm=PX_Object_GetMessageBox((PX_Object *)user); + PX_Object_MessageBoxClose((PX_Object *)user); + if (pm->function_no) + { + pm->function_no((PX_Object *)user,PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_EXECUTE),pm->function_yes_ptr); + } +} + +static px_void PX_Object_MessageBox_EditOnEnter(PX_Object *pObject,PX_Object_Event e,px_void *user) +{ + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (PX_Object_Event_GetKeyDown(e)=='\r') + { + PX_Object_MessageBox *pm=PX_Object_GetMessageBox((PX_Object *)user); + PX_Object_MessageBoxClose((PX_Object *)user); + if (pm->function_yes) + { + pm->function_yes((PX_Object *)user,PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_EXECUTE),pm->function_yes_ptr); + } + return; + } + } +} + +px_void PX_Object_MessageBoxClose(PX_Object *pObject) +{ + PX_Object_MessageBox *pMessageBox=PX_Object_GetMessageBox(pObject); + if (pMessageBox) + { + PX_ObjectReleaseFocus(pObject); + pMessageBox->mode=PX_OBJECT_MESSAGEBOX_MODE_CLOSE; + pMessageBox->btn_Ok->Visible=PX_FALSE; + pMessageBox->btn_Cancel->Visible=PX_FALSE; + pMessageBox->edit_inputbox->Visible=PX_FALSE; + } + +} + +static px_void PX_Object_MessageBoxRender(px_surface *pSurface,PX_Object *pObject,px_dword elapsed) +{ + + px_color backGroundColor,frontColor; + PX_Object_MessageBox *pm=PX_Object_GetMessageBox(pObject); + if (elapsed>2000) + { + return; + } + + if (pm->fillbackgroundcolor._argb.a) + { + PX_SurfaceClear(pSurface,0,0,pSurface->width-1,pSurface->height-1,pm->fillbackgroundcolor); + } + + + pm->btn_Ok->x=pSurface->width/2+200.0f; + pm->btn_Ok->y=pSurface->height/2+150.0f; + + pm->btn_Cancel->x=pSurface->width/2+300.0f; + pm->btn_Cancel->y=pSurface->height/2+150.0f; + + pm->edit_inputbox->x=pSurface->width/2-100.0f; + pm->edit_inputbox->y=pSurface->height/2-12.0f; + + if (pm->edit_inputbox->Visible) + { + PX_Object_EditSetFocus(pm->edit_inputbox,PX_TRUE); + } + + switch(pm->mode) + { + case PX_OBJECT_MESSAGEBOX_MODE_EXPAND: + pm->schedule+=elapsed; + if (pm->schedule>PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_2_TIME) + { + pm->schedule=PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_2_TIME; + } + break; + case PX_OBJECT_MESSAGEBOX_MODE_CLOSE: + default: + { + pm->schedule-=elapsed; + if (pm->schedule<0) + { + pm->schedule=0; + pObject->Visible=PX_FALSE; + } + } + break; + + } + + switch(pm->colormod) + { + case PX_MESSAGEBOX_COLORMOD_LIGHT: + { + backGroundColor=PX_COLOR(255,0,0,0); + frontColor=PX_COLOR(255,255,255,255); + } + break; + case PX_MESSAGEBOX_COLORMOD_NIGHT: + default: + { + backGroundColor=PX_COLOR(255,255,255,255); + frontColor=PX_COLOR(255,0,0,0); + } + break; + } + + + + if (pm->schedulewidth*pm->schedule*pm->schedule/(PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_1_TIME*PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_1_TIME); + PX_GeoDrawRect(pSurface,(pSurface->width-width)/2,(pSurface->height-pm->PX_MESSAGEBOX_STAGE_1_HEIGHT)/2,(pSurface->width+width)/2,(pSurface->height+pm->PX_MESSAGEBOX_STAGE_1_HEIGHT)/2,backGroundColor); + } + else if(pm->scheduleschedule*pm->schedule/(PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_2_TIME*PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_2_TIME); + PX_GeoDrawRect(pSurface,0,(pSurface->height-height)/2,pSurface->width-1,(pSurface->height+height)/2,backGroundColor); + } + else + { + PX_GeoDrawRect(pSurface,0,(pSurface->height-pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2,pSurface->width-1,(pSurface->height+pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2,backGroundColor); + PX_GeoDrawRect(pSurface,0,(pSurface->height-pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2-30,pSurface->width-1,(pSurface->height-pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2-10,backGroundColor); + PX_GeoDrawRect(pSurface,0,(pSurface->height+pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2+10,pSurface->width-1,(pSurface->height+pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2+30,backGroundColor); + + if (pm->edit_inputbox->Visible) + { + //inputbox mode + PX_FontModuleDrawText(pSurface,pm->fontmodule,pSurface->width/2-108,pSurface->height/2,PX_ALIGN_RIGHTMID,pm->Message,frontColor); + } + else + { + PX_FontModuleDrawText(pSurface,pm->fontmodule,pSurface->width/2,pSurface->height/2,PX_ALIGN_CENTER,pm->Message,frontColor); + } + } + + +} + +px_void PX_Object_MessageBoxAlertOk(PX_Object *pObject,const px_char *message,PX_Object_MessageBoxCallBack func_callback,px_void *ptr) +{ + PX_Object_MessageBox *pm=PX_Object_GetMessageBox(pObject); + pm->function_yes=func_callback; + pm->function_yes_ptr=ptr; + + pm->schedule=0; + pObject->Visible=PX_TRUE; + PX_strcpy(pm->Message,message,sizeof(pm->Message)); + pm->mode=PX_OBJECT_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_FALSE; + pm->btn_Ok->Visible=PX_TRUE; + + pm->edit_inputbox->Visible=PX_FALSE; + PX_ObjectSetFocus(pObject); +} + +px_void PX_Object_MessageBoxAlert(PX_Object *pObject,const px_char *message) +{ + PX_Object_MessageBox *pm=PX_Object_GetMessageBox(pObject); + if (!pObject->Visible) + { + pm->schedule=0; + pObject->Visible=PX_TRUE; + } + + PX_strcpy(pm->Message,message,sizeof(pm->Message)); + pm->mode=PX_OBJECT_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_FALSE; + pm->btn_Ok->Visible=PX_FALSE; + + pm->function_yes=PX_NULL; + pm->function_no_ptr=PX_NULL; + + pm->edit_inputbox->Visible=PX_FALSE; + PX_ObjectSetFocus(pObject); +} + + + +px_void PX_Object_MessageBoxAlertYesNo(PX_Object *pObject,const char *Message,PX_Object_MessageBoxCallBack func_yescallback,px_void *yesptr,PX_Object_MessageBoxCallBack func_nocallback,px_void *noptr) +{ + PX_Object_MessageBox *pm=PX_Object_GetMessageBox(pObject); + pm->function_yes=func_yescallback; + pm->function_no=func_nocallback; + pm->function_yes_ptr=yesptr; + pm->function_no_ptr=noptr; + + pm->schedule=0; + pObject->Visible=PX_TRUE; + PX_strcpy(pm->Message,Message,sizeof(pm->Message)); + pm->mode=PX_OBJECT_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_TRUE; + pm->btn_Ok->Visible=PX_TRUE; + pm->edit_inputbox->Visible=PX_FALSE; + PX_ObjectSetFocus(pObject); +} + +px_void PX_Object_MessageBoxInputBox(PX_Object *pObject,const char *Message,PX_Object_MessageBoxCallBack func_yescallback,px_void *yesptr,PX_Object_MessageBoxCallBack func_cancelcallback,px_void *cancelptr) +{ + PX_Object_MessageBox *pm=PX_Object_GetMessageBox(pObject); + pm->function_yes=func_yescallback; + pm->function_no=func_cancelcallback; + pm->function_yes_ptr=yesptr; + pm->function_no_ptr=cancelptr; + + pm->schedule=0; + pObject->Visible=PX_TRUE; + PX_strcpy(pm->Message,Message,sizeof(pm->Message)); + pm->mode=PX_OBJECT_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_TRUE; + pm->btn_Ok->Visible=PX_TRUE; + pm->edit_inputbox->Visible=PX_TRUE; + + PX_Object_EditSetText(pm->edit_inputbox,""); + PX_ObjectSetFocus(pObject); +} + +px_char * PX_Object_MessageBoxGetInput(PX_Object *pObject) +{ + PX_Object_MessageBox *pm=PX_Object_GetMessageBox(pObject); + return PX_Object_EditGetText(pm->edit_inputbox); +} + +px_void PX_Object_MessageBoxFree(PX_Object *pObject) +{ + +} + +PX_Object * PX_Object_MessageBoxCreate(px_memorypool *mp,PX_Object *parent,PX_FontModule *fontmodule) +{ + PX_Object_MessageBox msgbox; + PX_Object_MessageBox *pm=&msgbox; + PX_Object *pObject; + PX_memset(pm,0,sizeof(PX_Object_MessageBox)); + + pObject=PX_ObjectCreateEx(mp,parent,0,0,0,0,0,0,PX_OBJECT_TYPE_MESSAGEBOX,PX_NULL,PX_Object_MessageBoxRender,PX_Object_MessageBoxFree,pm,sizeof(PX_Object_MessageBox)); + pObject->Visible=PX_FALSE; + pm=PX_Object_GetMessageBox(pObject); + + pm->schedule=0; + pm->function_no=PX_NULL; + pm->function_yes=PX_NULL; + + if(!(pm->btn_Ok=PX_Object_PushButtonCreate(mp,pObject,0,0,84,28,"OK",PX_NULL))) return PX_FALSE; + + if(!(pm->btn_Cancel=PX_Object_PushButtonCreate(mp,pObject,0,0,84,28,"Cancel",PX_NULL))) return PX_FALSE; + + + if(!(pm->edit_inputbox=PX_Object_EditCreate(mp,pObject,0,0,256,32,fontmodule))) return PX_FALSE; + + PX_ObjectSetVisible(pm->edit_inputbox,PX_FALSE); + + pm->fontmodule=fontmodule; + + pm->PX_MESSAGEBOX_STAGE_1_HEIGHT=PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_1_HEIGHT; + pm->PX_MESSAGEBOX_STAGE_2_HEIGHT=PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_2_HEIGHT; + pm->fillbackgroundcolor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + PX_ObjectRegisterEvent(pm->edit_inputbox,PX_OBJECT_EVENT_KEYDOWN,PX_Object_MessageBox_EditOnEnter,pObject); + PX_ObjectRegisterEvent(pm->btn_Ok,PX_OBJECT_EVENT_EXECUTE,PX_Object_MessageBox_BtnYesClick,pObject); + PX_ObjectRegisterEvent(pm->btn_Cancel,PX_OBJECT_EVENT_EXECUTE,PX_Object_MessageBox_BtnNoClick,pObject); + + + return pObject; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_MessageBox.h b/UI/PainterEngine/kernel/PX_Object_MessageBox.h new file mode 100644 index 0000000..a820193 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_MessageBox.h @@ -0,0 +1,58 @@ +#ifndef PX_OBJECT_MESSAGEBOX_H +#define PX_OBJECT_MESSAGEBOX_H +#include "PX_Object.h" + + +#define PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_1_HEIGHT 10 +#define PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_1_TIME 60 +#define PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_2_HEIGHT 200 +#define PX_OBJECT_MESSAGEBOX_DEFAULT_STAGE_2_TIME 240 +#define PX_OBJECT_MESSAGEBOX_MAX_MESSAGESIZE 128 + +typedef enum +{ + PX_OBJECT_MESSAGEBOX_MODE_EXPAND, + PX_OBJECT_MESSAGEBOX_MODE_CLOSE +}PX_OBJECT_MESSAGEBOX_MODE; + + +typedef enum +{ + PX_MESSAGEBOX_COLORMOD_LIGHT, + PX_MESSAGEBOX_COLORMOD_NIGHT, +}PX_MESSAGEBOX_COLORMOD; + +struct _PX_Object_MessageBox; + +typedef px_void (*PX_Object_MessageBoxCallBack)(PX_Object *pmessagebox,PX_Object_Event e, px_void *ptr); + +typedef struct _PX_Object_MessageBox +{ + px_int schedule; + + PX_OBJECT_MESSAGEBOX_MODE mode; + PX_MESSAGEBOX_COLORMOD colormod; + + px_int PX_MESSAGEBOX_STAGE_1_HEIGHT; + px_int PX_MESSAGEBOX_STAGE_2_HEIGHT; + + PX_Object_MessageBoxCallBack function_yes,function_no; + px_void *function_yes_ptr,*function_no_ptr; + px_char Message[PX_OBJECT_MESSAGEBOX_MAX_MESSAGESIZE]; + PX_FontModule *fontmodule; + PX_Object *btn_Ok,*btn_Cancel,*edit_inputbox; + + px_color fillbackgroundcolor; +}PX_Object_MessageBox; + + +PX_Object_MessageBox *PX_Object_GetMessageBox(PX_Object *pObject); +px_void PX_Object_MessageBoxClose(PX_Object *pObject); +px_void PX_Object_MessageBoxAlertOk(PX_Object *pObject,const px_char *message,PX_Object_MessageBoxCallBack func_callback,px_void *ptr); +px_void PX_Object_MessageBoxAlert(PX_Object *pObject,const px_char *message); +px_void PX_Object_MessageBoxAlertYesNo(PX_Object *pObject,const char *Message,PX_Object_MessageBoxCallBack func_yescallback,px_void *yesptr,PX_Object_MessageBoxCallBack func_nocallback,px_void *noptr); +px_void PX_Object_MessageBoxInputBox(PX_Object *pObject,const char *Message,PX_Object_MessageBoxCallBack func_yescallback,px_void *yesptr,PX_Object_MessageBoxCallBack func_cancelcallback,px_void *cancelptr); +px_char * PX_Object_MessageBoxGetInput(PX_Object *pObject); +PX_Object * PX_Object_MessageBoxCreate(px_memorypool *mp,PX_Object *parent,PX_FontModule *fontmodule); +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Panc.c b/UI/PainterEngine/kernel/PX_Object_Panc.c new file mode 100644 index 0000000..e019362 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Panc.c @@ -0,0 +1,428 @@ +#include "PX_Object_Panc.h" +#include "PX_Object_Panc.h" + +px_void PX_Object_PancRender(px_surface *pSurface,PX_Object *pObject,px_dword elapsed) +{ + PX_Object_Panc *pDesc=PX_ObjectGetDesc(PX_Object_Panc,pObject); + px_int i; + px_float step; + px_color renderColor; + + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + ////////////////////////////////////////////////////////////////////////// + //source + //x + + renderColor=pDesc->borderColor; + renderColor._argb.a/=6; + + step=pDesc->sourceX-objx; + step=step/4; + for (i=0;i<5;i++) + { + PX_GeoDrawLine(pSurface,(px_int)(objx+step*i), (px_int)objy,(px_int)(objx+step*i),(px_int)(objy+objHeight),1,renderColor); + } + + step=objx+objWidth-pDesc->sourceX; + step=step/4; + for (i=0;i<5;i++) + { + PX_GeoDrawLine(pSurface,(px_int)(pDesc->sourceX+step*i), (px_int)objy,(px_int)(pDesc->sourceX+step*i),(px_int)(objy+objHeight),1,renderColor); + } + + //y + step=pDesc->sourceY-objy; + step=step/4; + for (i=0;i<5;i++) + { + PX_GeoDrawLine(pSurface,(px_int)objx,(px_int)(objy+step*i),(px_int)(objx+objWidth),(px_int)(objy+step*i),1,renderColor); + } + + step=objy+objHeight-pDesc->sourceY; + step=step/4; + for (i=0;i<5;i++) + { + PX_GeoDrawLine(pSurface, (px_int)objx,(px_int)(pDesc->sourceY+step*i),(px_int)(objx+objWidth),(px_int)(pDesc->sourceY+step*i),1,renderColor); + } + + + ////////////////////////////////////////////////////////////////////////// + //current + //x + + renderColor=pDesc->borderColor; + + step=pDesc->currentX-objx; + step=step/4; + for (i=0;i<5;i++) + { + PX_GeoDrawLine(pSurface,(px_int)(objx+step*i), (px_int)objy,(px_int)(objx+step*i),(px_int)(objy+objHeight),1,renderColor); + } + + step=objx+objWidth-pDesc->currentX; + step=step/4; + for (i=0;i<5;i++) + { + PX_GeoDrawLine(pSurface,(px_int)(pDesc->currentX+step*i), (px_int)objy,(px_int)(pDesc->currentX+step*i),(px_int)(objy+objHeight),1,renderColor); + } + + //y + step=pDesc->currentY-objy; + step=step/4; + for (i=0;i<5;i++) + { + PX_GeoDrawLine(pSurface, (px_int)objx,(px_int)(objy+step*i),(px_int)(objx+objWidth),(px_int)(objy+step*i),1,renderColor); + } + + step=objy+objHeight-pDesc->currentY; + step=step/4; + for (i=0;i<5;i++) + { + PX_GeoDrawLine(pSurface, (px_int)objx,(px_int)(pDesc->currentY+step*i),(px_int)(objx+objWidth),(px_int)(pDesc->currentY+step*i),1,renderColor); + } + + ////////////////////////////////////////////////////////////////////////// + //controller point + renderColor=pDesc->borderColor; + renderColor._argb.a/=6; + PX_GeoDrawSolidCircle(pSurface,(px_int)pDesc->currentX,(px_int)pDesc->currentY,8,renderColor); + + PX_GeoDrawSolidCircle(pSurface,(px_int)(objx),(px_int)(objy),5,renderColor); + PX_GeoDrawSolidCircle(pSurface,(px_int)(objx+objWidth),(px_int)(objy),5,renderColor); + PX_GeoDrawSolidCircle(pSurface,(px_int)(objx),(px_int)(objy+objHeight),5,renderColor); + PX_GeoDrawSolidCircle(pSurface,(px_int)(objx+objWidth),(px_int)(objy+objHeight),5,renderColor); + + PX_GeoDrawBorder(pSurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth),(px_int)(objy+objHeight),3,pDesc->borderColor); + +} + +px_void PX_Object_PancOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + PX_Object_Panc *pDesc=PX_ObjectGetDesc(PX_Object_Panc,pObject); + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + + pDesc->bselect=PX_Object_Panc_bselect_none; + if ((x-pDesc->currentX)*(x-pDesc->currentX)+(y-pDesc->currentY)*(y-pDesc->currentY)<64) + { + pDesc->bselect=PX_Object_Panc_bselect_center; + return; + } + + + if ((x-objx)*(x-objx)+(y-objy)*(y-objy)<25) + { + pDesc->bselect=PX_Object_Panc_bselect_lefttop; + return; + } + + if ((x-objx-objWidth)*(x-objx-objWidth)+(y-objy)*(y-objy)<25) + { + pDesc->bselect=PX_Object_Panc_bselect_righttop; + return; + } + + if ((x-objx)*(x-objx)+(y-objy-objHeight)*(y-objy-objHeight)<25) + { + pDesc->bselect=PX_Object_Panc_bselect_leftbottom; + return; + } + + if ((x-objx-objWidth)*(x-objx-objWidth)+(y-objy-objHeight)*(y-objy-objHeight)<25) + { + pDesc->bselect=PX_Object_Panc_bselect_rightbottom; + return; + } + +} + +px_void PX_Object_PancOnCursorRDown(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + px_float x, y; + PX_Object_Panc* pDesc = PX_ObjectGetDesc(PX_Object_Panc, pObject); + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + + x = PX_Object_Event_GetCursorX(e); + y = PX_Object_Event_GetCursorY(e); + + pDesc->sourceX = x; + pDesc->sourceY = y; + + if (pDesc->sourceX < objx) + { + pDesc->sourceX = objx; + } + + if (pDesc->sourceX > objx + objWidth) + { + pDesc->sourceX = objx + objWidth; + } + + if (pDesc->sourceY < objy) + { + pDesc->sourceY = objy; + } + + if (pDesc->sourceY > objy + objHeight) + { + pDesc->sourceY = objy + objHeight; + } + + pDesc->currentX = pDesc->sourceX; + pDesc->currentY = pDesc->sourceY; +} + +px_void PX_Object_PancOnCursorDrag(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x,y; + PX_Object_Panc *pDesc=PX_ObjectGetDesc(PX_Object_Panc,pObject); + px_float objx, objy, objWidth, objHeight; + px_float inheritX, inheritY; + PX_ObjectGetInheritXY(pObject, &inheritX, &inheritY); + + objx = (pObject->x + inheritX); + objy = (pObject->y + inheritY); + objWidth = pObject->Width; + objHeight = pObject->Height; + + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + switch (pDesc->bselect) + { + case PX_Object_Panc_bselect_center: + { + pDesc->currentX= x; + pDesc->currentY =y; + + if (pDesc->currentXcurrentX = objx; + } + + if (pDesc->currentX > objx+ objWidth) + { + pDesc->currentX = objx+ objWidth; + } + + if (pDesc->currentY < objy) + { + pDesc->currentY = objy; + } + + if (pDesc->currentY > objy + objHeight) + { + pDesc->currentY = objy + objHeight; + } + + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + case PX_Object_Panc_bselect_lefttop: + { + px_float widthinc,heightinc; + widthinc=objx-x; + heightinc=objy-y; + + if (objWidth+widthinc<=10) + { + return; + } + + if (objHeight+heightinc<=10) + { + return; + } + + pObject->x=x-inheritX; + pObject->y=y-inheritY; + pObject->Width+=widthinc; + pObject->Height+=heightinc; + + pDesc->sourceX=pObject->x+pObject->Width/2; + pDesc->sourceY=pObject->y+pObject->Height/2; + + pDesc->currentX=pDesc->sourceX; + pDesc->currentY=pDesc->sourceY; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + case PX_Object_Panc_bselect_righttop: + { + px_float widthinc,heightinc; + widthinc=x-objx-objWidth; + heightinc=objy-y; + + if (objWidth+widthinc<=10) + { + return; + } + + if (objHeight+heightinc<=10) + { + return; + } + + pObject->y=y-inheritY; + + pObject->Width+=widthinc; + pObject->Height+=heightinc; + + pDesc->sourceX=pObject->x+pObject->Width/2; + pDesc->sourceY=pObject->y+pObject->Height/2; + + pDesc->currentX=pDesc->sourceX; + pDesc->currentY=pDesc->sourceY; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + case PX_Object_Panc_bselect_leftbottom: + { + px_float widthinc,heightinc; + widthinc=objx-x; + heightinc=y-objy-objHeight; + + if (pObject->Width+widthinc<=10) + { + return; + } + + if (pObject->Height+heightinc<=10) + { + return; + } + + pObject->x=x-inheritX; + + pObject->Width+=widthinc; + pObject->Height+=heightinc; + + pDesc->sourceX=pObject->x+pObject->Width/2; + pDesc->sourceY=pObject->y+pObject->Height/2; + + pDesc->currentX=pDesc->sourceX; + pDesc->currentY=pDesc->sourceY; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + + case PX_Object_Panc_bselect_rightbottom: + { + px_float widthinc,heightinc; + widthinc=x-objx-objWidth; + heightinc=y-objy-objHeight; + + if (pObject->Width+widthinc<=10) + { + return; + } + + if (pObject->Height+heightinc<=10) + { + return; + } + + pObject->Width+=widthinc; + pObject->Height+=heightinc; + + pDesc->sourceX=pObject->x+pObject->Width/2; + pDesc->sourceY=pObject->y+pObject->Height/2; + + pDesc->currentX=pDesc->sourceX; + pDesc->currentY=pDesc->sourceY; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } + break; + default: + break; + } + + + +} + +PX_Object * PX_Object_PancCreate(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float widht,px_float height) +{ + PX_Object_Panc panc; + PX_Object *pObject; + PX_memset(&panc, 0, sizeof(panc)); + panc.sourceX=x+widht/2; + panc.sourceY=y+height/2; + + panc.currentX=x+widht/2; + panc.currentY=y+height/2; + + panc.borderColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + + pObject=PX_ObjectCreateEx(mp,Parent,x,y,0,widht,height,0,PX_OBJECT_TYPE_PANC,PX_NULL,PX_Object_PancRender,PX_NULL,&panc,sizeof(panc)); + PX_ObjectRegisterEvent(pObject, PX_OBJECT_EVENT_CURSORDOWN, PX_Object_PancOnCursorDown, PX_NULL); + PX_ObjectRegisterEvent(pObject, PX_OBJECT_EVENT_CURSORDRAG, PX_Object_PancOnCursorDrag, PX_NULL); + PX_ObjectRegisterEvent(pObject, PX_OBJECT_EVENT_CURSORRDOWN, PX_Object_PancOnCursorRDown, PX_NULL); + return pObject; + +} + +PX_Object_Panc * PX_Object_GetPanc(PX_Object *pObject) +{ + return PX_ObjectGetDesc(PX_Object_Panc, pObject); +} + +px_void PX_Object_PancReset(PX_Object* pObject, px_float x, px_float y, px_float width, px_float height) +{ + PX_Object_Panc* pDesc = PX_ObjectGetDesc(PX_Object_Panc, pObject); + pObject->x = x; + pObject->y = y; + pObject->Width = width; + pObject->Height = height; + + pDesc->sourceX = x + width / 2; + pDesc->sourceY = y + height / 2; + + pDesc->currentX = x + width / 2; + pDesc->currentY = y + height / 2; +} + +PX_PancMatrix PX_Object_PancGetMatrix(PX_Object* pObject) +{ + PX_Object_Panc* pDesc = PX_ObjectGetDesc(PX_Object_Panc, pObject); + PX_PancMatrix mat; + mat.x = pObject->x; + mat.y = pObject->y; + mat.width = pObject->Width; + mat.height = pObject->Height; + mat.currentX = pDesc->currentX; + mat.currentY = pDesc->currentY; + mat.sourceX = pDesc->sourceX; + mat.sourceY = pDesc->sourceY; + return mat; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_Panc.h b/UI/PainterEngine/kernel/PX_Object_Panc.h new file mode 100644 index 0000000..7f4597f --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Panc.h @@ -0,0 +1,39 @@ +#ifndef PX_OBJECT_PANC_H +#define PX_OBJECT_PANC_H +#include "PX_Object.h" + +typedef struct +{ + px_float x,y; + px_float width; + px_float height; + px_float sourceX,sourceY; + px_float currentX, currentY; +}PX_PancMatrix; + +typedef enum +{ + PX_Object_Panc_bselect_none=0, + PX_Object_Panc_bselect_center, + PX_Object_Panc_bselect_lefttop, + PX_Object_Panc_bselect_righttop, + PX_Object_Panc_bselect_leftbottom, + PX_Object_Panc_bselect_rightbottom, +}PX_Object_Panc_bselect; + + +typedef struct +{ + px_float sourceX,sourceY; + px_float currentX,currentY; + px_color borderColor; + PX_Object_Panc_bselect bselect; +}PX_Object_Panc; + +PX_Object * PX_Object_PancCreate(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float width,px_float height); +PX_Object_Panc * PX_Object_GetPanc(PX_Object *pObject ); +px_void PX_Object_PancReset(PX_Object* pObject, px_float x, px_float y, px_float widht, px_float height); +PX_PancMatrix PX_Object_PancGetMatrix(PX_Object* pObject); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Processbar.c b/UI/PainterEngine/kernel/PX_Object_Processbar.c new file mode 100644 index 0000000..7378040 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Processbar.c @@ -0,0 +1,162 @@ +#include "PX_Object_Processbar.h" + + +px_void PX_Object_ProcessBarRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_int px,py,pl;//Processing start X,Processing Start Y &Processing length + px_int x,y,w,h; + px_float inheritX,inheritY; + + PX_Object_ProcessBar *pProcessBar=(PX_Object_ProcessBar *)pObject->pObject; + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + x=(px_int)(pObject->x+inheritX); + y=(px_int)(pObject->y+inheritY); + w=(px_int)pObject->Width; + h=(px_int)pObject->Height; + + + + px=(px_int)x+2; //increase line width + py=(px_int)y+2; + + if (pProcessBar->Value<0) + { + pProcessBar->Value=0; + } + if (pProcessBar->Value>pProcessBar->MAX) + { + pProcessBar->Value=pProcessBar->MAX; + } + + if (w<=4) + { + return; + } + if(pProcessBar->ValueMAX) + pl=(px_int)((w-4)*((pProcessBar->Value*1.0)/pProcessBar->MAX)); + else + pl=(px_int)w-2; + //Draw BackGround + PX_SurfaceClear( + psurface, + (px_int)x, + (px_int)y, + (px_int)x+w-1, + (px_int)y+h-1, + pProcessBar->BackgroundColor + ); + //Draw border + PX_GeoDrawBorder( + psurface, + x, + y, + x+w-1, + y+h-1, + 1, + pProcessBar->Color + ); + + PX_GeoDrawRect(psurface,px,py,px+pl-2-1,py+(px_int)h-4-1,pProcessBar->Color); + +} + +PX_Object * PX_Object_ProcessBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height ) +{ + PX_Object *pObject; + PX_Object_ProcessBar *ProcessBar=(PX_Object_ProcessBar *)MP_Malloc(mp,sizeof(PX_Object_ProcessBar)); + if (ProcessBar==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,ProcessBar); + return PX_NULL; + } + + pObject->pObject=ProcessBar; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_PROCESSBAR; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_NULL; + pObject->Func_ObjectRender=PX_Object_ProcessBarRender; + + ProcessBar->MAX=100; + ProcessBar->Value=0; + ProcessBar->Color=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + ProcessBar->BackgroundColor= PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + return pObject; +} + +px_void PX_Object_ProcessBarSetColor( PX_Object *pProcessBar,px_color Color) +{ + PX_Object_ProcessBar *pProcess=PX_Object_GetProcessBar(pProcessBar); + if (pProcess!=PX_NULL) + { + + pProcess->Color=Color; + } +} + +px_void PX_Object_ProcessBarSetBackgroundColor(PX_Object *pProcessBar,px_color Color) +{ + PX_Object_ProcessBar *pProcess=PX_Object_GetProcessBar(pProcessBar); + if (pProcess!=PX_NULL) + { + pProcess->BackgroundColor=Color; + } +} + +px_void PX_Object_ProcessBarSetValue( PX_Object *pProcessBar,px_int Value ) +{ + PX_Object_ProcessBar *pProcess=PX_Object_GetProcessBar(pProcessBar); + if (pProcess!=PX_NULL) + { + pProcess->Value=Value; + } +} + + +px_void PX_Object_ProcessBarSetMax( PX_Object *pProcessBar,px_int Max ) +{ + PX_Object_ProcessBar *pProcess=PX_Object_GetProcessBar(pProcessBar); + if (pProcess!=PX_NULL) + { + + pProcess->MAX=Max; + } +} + +px_int PX_Object_ProcessBarGetMax(PX_Object* pProcessBar) +{ + PX_Object_ProcessBar* pProcess = PX_Object_GetProcessBar(pProcessBar); + if (pProcess != PX_NULL) + { + + return pProcess->MAX; + } + PX_ASSERT(); + return 0; +} + +PX_Object_ProcessBar * PX_Object_GetProcessBar( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_PROCESSBAR) + return (PX_Object_ProcessBar *)Object->pObject; + else + return PX_NULL; +} + +px_int PX_Object_ProcessBarGetValue( PX_Object *pProcessBar ) +{ + if (pProcessBar->Type!=PX_OBJECT_TYPE_PROCESSBAR) + { + PX_ASSERT(); + return 0; + } + return PX_Object_GetProcessBar(pProcessBar)->Value; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_Processbar.h b/UI/PainterEngine/kernel/PX_Object_Processbar.h new file mode 100644 index 0000000..d2c8bcd --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Processbar.h @@ -0,0 +1,23 @@ +#ifndef PX_OBJECT_PROCESSBAR_H +#define PX_OBJECT_PROCESSBAR_H +#include "PX_Object.h" + +typedef struct +{ + px_int Value; + px_int MAX; + px_color Color; + px_color BackgroundColor; +}PX_Object_ProcessBar; + +PX_Object * PX_Object_ProcessBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height); +PX_Object_ProcessBar *PX_Object_GetProcessBar(PX_Object *Object); +px_void PX_Object_ProcessBarSetColor(PX_Object *pProcessBar,px_color Color); +px_void PX_Object_ProcessBarSetBackgroundColor(PX_Object *pProcessBar,px_color Color); +px_void PX_Object_ProcessBarSetValue(PX_Object *pProcessBar,px_int Value); +px_void PX_Object_ProcessBarSetMax(PX_Object *pProcessBar,px_int Max); +px_int PX_Object_ProcessBarGetMax(PX_Object* pProcessBar); +px_int PX_Object_ProcessBarGetValue(PX_Object* pProcessBar); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Protractor.c b/UI/PainterEngine/kernel/PX_Object_Protractor.c new file mode 100644 index 0000000..16723fb --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Protractor.c @@ -0,0 +1,173 @@ +#include "PX_Object_Protractor.h" + +PX_Object_Protractor * PX_Object_GetProtractor(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_PROTRACTOR) + { + return (PX_Object_Protractor *)Object->pObject; + } + return PX_NULL; +} + +px_void PX_Object_ProtractorRender(px_surface *rendersurface,PX_Object *pObject,px_dword elapsed) +{ + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + PX_Object_Protractor *pProtractor=PX_Object_GetProtractor(pObject); + px_color acolor; + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + PX_GeoDrawCircle(rendersurface,(px_int)objx,(px_int)objy,(px_int)pProtractor->radius,1,pProtractor->color); + PX_GeoDrawSolidCircle(rendersurface,(px_int)objx,(px_int)objy,3,pProtractor->color); + + switch (pProtractor->state) + { + case PX_OBJECT_PROTRACTOR_STATE_STANDBY: + { + PX_GeoDrawLine(rendersurface,(px_int)objx,(px_int)objy,(px_int)(objx+PX_cos_angle(pProtractor->startAngle)*pProtractor->radius), + (px_int)(objy+PX_sin_angle(pProtractor->startAngle)*pProtractor->radius),1,pProtractor->color); + + PX_GeoDrawSolidCircle(rendersurface,(px_int)(objx+PX_cos_angle(pProtractor->startAngle)*pProtractor->radius), + (px_int)(objy+PX_sin_angle(pProtractor->startAngle)*pProtractor->radius),3 + ,pProtractor->color); + } + break; + case PX_OBJECT_PROTRACTOR_STATE_ADJUST: + case PX_OBJECT_PROTRACTOR_STATE_DONE: + { + px_char degree[32]; + acolor=pProtractor->color; + acolor._argb.a/=4; + + PX_GeoDrawSector(rendersurface,(px_int)objx,(px_int)objy,(px_int)pProtractor->radius,1,acolor,(px_int)pProtractor->startAngle,(px_int)pProtractor->endAngle); + + PX_GeoDrawLine(rendersurface,(px_int)objx,(px_int)objy,(px_int)(objx+PX_cos_angle(pProtractor->startAngle)*pProtractor->radius), + (px_int)(objy+PX_sin_angle(pProtractor->startAngle)*pProtractor->radius),1,pProtractor->color); + + PX_GeoDrawLine(rendersurface,(px_int)objx,(px_int)objy,(px_int)(objx+PX_cos_angle(pProtractor->endAngle)*pProtractor->radius), + (px_int)(objy+PX_sin_angle(pProtractor->endAngle)*pProtractor->radius),1,pProtractor->color); + + PX_GeoDrawSolidCircle(rendersurface,(px_int)(objx+PX_cos_angle(pProtractor->endAngle)*pProtractor->radius), + (px_int)(objy+PX_sin_angle(pProtractor->endAngle)*pProtractor->radius),5,pProtractor->color); + + PX_itoa((px_int)PX_Object_ProtractorGetAngle(pObject),degree,sizeof(degree),10); + PX_FontModuleDrawText(rendersurface,PX_NULL,(px_int)objx,(px_int)objy-2,PX_ALIGN_MIDBOTTOM,degree,pProtractor->fontColor); + } + break; + } + + + +} + +px_void PX_Object_ProtractorOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY,x,y; + PX_Object_Protractor *pProtractor=PX_Object_GetProtractor(pObject); + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pProtractor->state==PX_OBJECT_PROTRACTOR_STATE_STANDBY) + { + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + pProtractor->endAngle=pProtractor->startAngle; + pProtractor->state=PX_OBJECT_PROTRACTOR_STATE_ADJUST; + } + else if (pProtractor->state==PX_OBJECT_PROTRACTOR_STATE_ADJUST) + { + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + pProtractor->state=PX_OBJECT_PROTRACTOR_STATE_DONE; + } + +} + +px_void PX_Object_ProtractorOnCursorMove(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY,x,y; + PX_Object_Protractor *pProtractor=PX_Object_GetProtractor(pObject); + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + switch (pProtractor->state) + { + case PX_OBJECT_PROTRACTOR_STATE_STANDBY: + { + pProtractor->startAngle=(px_float)PX_RadianToAngle(PX_atan2(y-objy*1.0,x-objx*1.0)); + } + break; + case PX_OBJECT_PROTRACTOR_STATE_ADJUST: + { + px_float angle=(px_float)PX_RadianToAngle(PX_atan2(y-objy*1.0,x-objx*1.0)); + px_float lastAngleMod=pProtractor->endAngle; + px_float inc; + px_int round=(px_int)(lastAngleMod/360); + lastAngleMod=lastAngleMod-round*360; + + inc=angle-lastAngleMod; + if (inc>180) + { + inc-=360; + } + if (inc<-180) + { + inc+=360; + } + pProtractor->endAngle+=inc; + + } + break; + default: + break; + } + +} + +px_void PX_Object_ProtractorOnCursorRDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_Protractor *pProtractor=PX_Object_GetProtractor(pObject); + pProtractor->state=PX_OBJECT_PROTRACTOR_STATE_STANDBY; +} + +PX_Object * PX_Object_ProtractorCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int radius) +{ + PX_Object *pObject; + PX_Object_Protractor protractor; + PX_memset(&protractor,0,sizeof(protractor)); + protractor.color=PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + protractor.fontColor=PX_COLOR(255,255,0,0); + protractor.radius=radius; + + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,0,0,0,PX_OBJECT_TYPE_PROTRACTOR,0,PX_Object_ProtractorRender,0,&protractor,sizeof(protractor)); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_ProtractorOnCursorDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_ProtractorOnCursorMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORRDOWN,PX_Object_ProtractorOnCursorRDown,PX_NULL); + return pObject; +} + +px_float PX_Object_ProtractorGetAngle(PX_Object *Object) +{ + return PX_Object_GetProtractor(Object)->endAngle-PX_Object_GetProtractor(Object)->startAngle; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_Protractor.h b/UI/PainterEngine/kernel/PX_Object_Protractor.h new file mode 100644 index 0000000..c61f386 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Protractor.h @@ -0,0 +1,27 @@ +#ifndef PX_OBJECT_PROTRACTOR_H +#define PX_OBJECT_PROTRACTOR_H +#include "PX_Object.h" + +typedef enum +{ + PX_OBJECT_PROTRACTOR_STATE_STANDBY=0, + PX_OBJECT_PROTRACTOR_STATE_ADJUST, + PX_OBJECT_PROTRACTOR_STATE_DONE +}PX_OBJECT_PROTRACTOR_STATE; + + +typedef struct +{ + px_int radius; + px_float startAngle; + px_float endAngle; + px_bool bselect; + px_color color,fontColor; + PX_OBJECT_PROTRACTOR_STATE state; +}PX_Object_Protractor; + +PX_Object_Protractor *PX_Object_GetProtractor(PX_Object *Object); +PX_Object * PX_Object_ProtractorCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int radius); +px_float PX_Object_ProtractorGetAngle(PX_Object *Object); + +#endif diff --git a/UI/PainterEngine/kernel/PX_Object_PushButton.c b/UI/PainterEngine/kernel/PX_Object_PushButton.c new file mode 100644 index 0000000..fcd2583 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_PushButton.c @@ -0,0 +1,392 @@ +#include "PX_Object_PushButton.h" +px_void PX_Object_PushButtonOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(Object); + px_float x,y; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pPushButton) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + if (pPushButton->state!=PX_OBJECT_BUTTON_STATE_ONPUSH) + { + if (pPushButton->state!=PX_OBJECT_BUTTON_STATE_ONCURSOR) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROVER; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + e.Param_ptr[0]=PX_NULL; + PX_ObjectExecuteEvent(Object,e); + } + pPushButton->state=PX_OBJECT_BUTTON_STATE_ONCURSOR; + } + } + else + { + if (pPushButton->state!=PX_OBJECT_BUTTON_STATE_NORMAL) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROUT; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + pPushButton->state=PX_OBJECT_BUTTON_STATE_NORMAL; + } + } +} + +px_void PX_Object_PushButtonOnMouseLButtonDown(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(Object); + px_float x,y; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pPushButton) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + pPushButton->state=PX_OBJECT_BUTTON_STATE_ONPUSH; + else + { + if (pPushButton->state!=PX_OBJECT_BUTTON_STATE_NORMAL) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROUT; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + pPushButton->state=PX_OBJECT_BUTTON_STATE_NORMAL; + } + } +} + +px_void PX_Object_PushButtonOnMouseLButtonUp(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(Object); + px_float x,y; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pPushButton) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + if(pPushButton->state==PX_OBJECT_BUTTON_STATE_ONPUSH) + { + pPushButton->state=PX_OBJECT_BUTTON_STATE_ONCURSOR; + e.Event=PX_OBJECT_EVENT_EXECUTE; + PX_ObjectExecuteEvent(Object,e); + } + } +} + +PX_Object * PX_Object_PushButtonCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,PX_FontModule *fontmodule) +{ + px_int TextLen; + PX_Object *pObject; + PX_Object_PushButton *pPushButton=(PX_Object_PushButton *)MP_Malloc(mp,sizeof(PX_Object_PushButton)); + if (pPushButton==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + if (!pObject) + { + MP_Free(mp,pPushButton); + return PX_NULL; + } + pObject->pObject=pPushButton; + pObject->Type=PX_OBJECT_TYPE_PUSHBUTTON; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_PushButtonFree; + pObject->Func_ObjectRender=PX_Object_PushButtonRender; + + TextLen=PX_strlen(Text)+1; + + pPushButton->Text=(px_char *)MP_Malloc(mp,TextLen); + + if (pPushButton->Text==PX_NULL) + { + MP_Free(pObject->mp,pObject); + MP_Free(pObject->mp,pPushButton); + return PX_NULL; + } + + PX_strcpy(pPushButton->Text,Text,TextLen); + + pPushButton->TextColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + pPushButton->CursorColor=PX_OBJECT_UI_DEFAULT_CURSORCOLOR; + pPushButton->PushColor=PX_OBJECT_UI_DEFAULT_PUSHCOLOR; + pPushButton->BackgroundColor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + pPushButton->BorderColor=PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + pPushButton->Border=PX_TRUE; + pPushButton->state=PX_OBJECT_BUTTON_STATE_NORMAL; + pPushButton->Border=PX_TRUE; + pPushButton->style=PX_OBJECT_PUSHBUTTON_STYLE_RECT; + pPushButton->roundradius=PX_OBJECT_PUSHBUTTON_ROUNDRADIUS; + pPushButton->shape=PX_NULL; + pPushButton->Texture=PX_NULL; + pPushButton->fontModule=fontmodule; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_PushButtonOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_PushButtonOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_PushButtonOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_PushButtonOnMouseLButtonUp,PX_NULL); + + return pObject; +} + +PX_Object_PushButton * PX_Object_GetPushButton( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_PUSHBUTTON) + return (PX_Object_PushButton *)Object->pObject; + else + return PX_NULL; +} + +px_char * PX_Object_PushButtonGetText( PX_Object *PushButton ) +{ + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(PushButton); + if (pPushButton!=PX_NULL) + { + return pPushButton->Text; + } + return PX_NULL; +} + +px_void PX_Object_PushButtonSetText( PX_Object *pObject,const px_char *Text ) +{ + PX_Object_PushButton *pPushButton; + px_int TextLen; + if (pObject==PX_NULL||Text==PX_NULL) + { + return; + } + if (pObject->Type!=PX_OBJECT_TYPE_PUSHBUTTON) + { + return; + } + + TextLen=PX_strlen(Text); + pPushButton=(PX_Object_PushButton *)pObject->pObject; + + if (TextLen>PX_strlen(pPushButton->Text)) + { + MP_Free(pObject->mp,pPushButton->Text); + + pPushButton->Text=(px_char *)MP_Malloc(pObject->mp,TextLen+1); + if (!pPushButton->Text) + { + return; + } + } + PX_strcpy(pPushButton->Text,Text,TextLen+1); + +} + + +px_void PX_Object_PushButtonSetBackgroundColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + pPushButton->BackgroundColor=Color; + } +} + +px_void PX_Object_PushButtonSetTextColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->TextColor=Color; + } +} + +px_void PX_Object_PushButtonSetTexture(PX_Object *pObject,px_texture *texture) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + pPushButton->Texture=texture; + } +} + +px_void PX_Object_PushButtonSetShape(PX_Object *pObject,px_shape *pshape) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + pPushButton->shape=pshape; + } +} + +px_void PX_Object_PushButtonSetBorderColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->BorderColor=Color; + } +} + +px_void PX_Object_PushButtonSetCursorColor(PX_Object *pObject,px_color Color) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->CursorColor=Color; + } +} + +px_void PX_Object_PushButtonSetStyle(PX_Object *pObject,PX_OBJECT_PUSHBUTTON_STYLE style) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + pPushButton->style=style; + } +} + +px_void PX_Object_PushButtonSetPushColor(PX_Object *pObject,px_color Color) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->PushColor=Color; + } +} + +px_void PX_Object_PushButtonSetBorder( PX_Object *Object,px_bool Border ) +{ + PX_Object_PushButton *PushButton=PX_Object_GetPushButton(Object); + if (PushButton) + { + + PushButton->Border=Border; + } +} + +px_void PX_Object_PushButtonRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_int fx,fy; + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pPushButton==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + if (!pObject->Enabled) + { + pPushButton->state=PX_OBJECT_BUTTON_STATE_NORMAL; + } + + switch(pPushButton->style) + { + case PX_OBJECT_PUSHBUTTON_STYLE_RECT: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->BackgroundColor); + switch (pPushButton->state) + { + case PX_OBJECT_BUTTON_STATE_NORMAL: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->BackgroundColor); + break; + case PX_OBJECT_BUTTON_STATE_ONPUSH: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->PushColor); + break; + case PX_OBJECT_BUTTON_STATE_ONCURSOR: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->CursorColor); + break; + } + break; + case PX_OBJECT_PUSHBUTTON_STYLE_ROUNDRECT: + PX_GeoDrawSolidRoundRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->roundradius,pPushButton->BackgroundColor); + switch (pPushButton->state) + { + case PX_OBJECT_BUTTON_STATE_NORMAL: + PX_GeoDrawSolidRoundRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->roundradius,pPushButton->BackgroundColor); + break; + case PX_OBJECT_BUTTON_STATE_ONPUSH: + PX_GeoDrawSolidRoundRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->roundradius,pPushButton->PushColor); + break; + case PX_OBJECT_BUTTON_STATE_ONCURSOR: + PX_GeoDrawSolidRoundRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->roundradius,pPushButton->CursorColor); + break; + } + break; + } + + + + + if (pPushButton->Texture) + { + PX_TextureRender(psurface,pPushButton->Texture,(px_int)objx+(px_int)objWidth/2,(px_int)objy+(px_int)objHeight/2,PX_ALIGN_CENTER,PX_NULL); + } + else if (pPushButton->shape) + { + PX_ShapeRender(psurface,pPushButton->shape,(px_int)objx+(px_int)objWidth/2,(px_int)objy+(px_int)objHeight/2,PX_ALIGN_CENTER,pPushButton->TextColor); + } + + if (pPushButton->Border) + { + switch(pPushButton->style) + { + case PX_OBJECT_PUSHBUTTON_STYLE_RECT: + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,1,pPushButton->BorderColor); + break; + case PX_OBJECT_PUSHBUTTON_STYLE_ROUNDRECT: + PX_GeoDrawRoundRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pPushButton->roundradius,0.6f,pPushButton->BorderColor); + break; + } + } + + fx=(px_int)(objx+objWidth/2); + fy=(px_int)(objy+objHeight/2); + + PX_FontModuleDrawText(psurface,pPushButton->fontModule,fx,fy,PX_ALIGN_CENTER,pPushButton->Text,pPushButton->TextColor); + + + +} + +px_void PX_Object_PushButtonFree( PX_Object *Obj ) +{ + PX_Object_PushButton *PushButton=PX_Object_GetPushButton(Obj); + if (Obj!=PX_NULL) + { + MP_Free(Obj->mp,PushButton->Text); + } +} + diff --git a/UI/PainterEngine/kernel/PX_Object_PushButton.h b/UI/PainterEngine/kernel/PX_Object_PushButton.h new file mode 100644 index 0000000..764b15b --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_PushButton.h @@ -0,0 +1,57 @@ +#ifndef PX_OBJECT_PUSHBUTTON_H +#define PX_OBJECT_PUSHBUTTON_H +#include "PX_Object.h" + + +#define PX_OBJECT_PUSHBUTTON_ROUNDRADIUS 8.0f +typedef enum +{ + PX_OBJECT_BUTTON_STATE_ONCURSOR, + PX_OBJECT_BUTTON_STATE_ONPUSH, + PX_OBJECT_BUTTON_STATE_NORMAL, +}PX_Object_PUSHBUTTON_STATE; + + +typedef enum +{ + PX_OBJECT_PUSHBUTTON_STYLE_RECT, + PX_OBJECT_PUSHBUTTON_STYLE_ROUNDRECT, +}PX_OBJECT_PUSHBUTTON_STYLE; + +typedef struct +{ + px_bool Border; + px_color TextColor; + px_color BorderColor; + px_color BackgroundColor; + px_color CursorColor; + px_color PushColor; + px_char *Text; + PX_FontModule *fontModule; + px_texture *Texture; + px_shape *shape; + px_float roundradius; + PX_OBJECT_PUSHBUTTON_STYLE style; + PX_Object_PUSHBUTTON_STATE state; +}PX_Object_PushButton; + +PX_Object *PX_Object_PushButtonCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,PX_FontModule *fontmodule); +PX_Object_PushButton * PX_Object_GetPushButton( PX_Object *Object ); +px_char * PX_Object_PushButtonGetText( PX_Object *PushButton ); +px_void PX_Object_PushButtonSetText( PX_Object *pObject,const px_char *Text ); +px_void PX_Object_PushButtonSetBackgroundColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetCursorColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetStyle(PX_Object *pObject,PX_OBJECT_PUSHBUTTON_STYLE style); +px_void PX_Object_PushButtonSetPushColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetBorderColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetBorder( PX_Object *Object,px_bool Border ); +px_void PX_Object_PushButtonRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed); +px_void PX_Object_PushButtonSetTextColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetTexture(PX_Object *pObject,px_texture *texture); +px_void PX_Object_PushButtonSetShape(PX_Object *pObject,px_shape *pshape); +px_void PX_Object_PushButtonFree( PX_Object *Obj ); + + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_RadioBox.c b/UI/PainterEngine/kernel/PX_Object_RadioBox.c new file mode 100644 index 0000000..a4cce3a --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_RadioBox.c @@ -0,0 +1,274 @@ +#include "PX_Object_RadioBox.h" +////////////////////////////////////////////////////////////////////////// + +PX_Object_RadioBox * PX_Object_GetRadioBox(PX_Object *Object) +{ + PX_Object_RadioBox *pcb=(PX_Object_RadioBox *)Object->pObject; + if (Object->Type==PX_OBJECT_TYPE_RADIOBOX) + { + return pcb; + } + return PX_NULL; +} + + +px_void PX_Object_RadioBoxOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_RadioBox *pcb=PX_Object_GetRadioBox(Object); + + px_float x=(PX_Object_Event_GetCursorX(e)); + px_float y=(PX_Object_Event_GetCursorY(e)); + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_ONPUSH) + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_ONCURSOR) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROVER; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + e.Param_ptr[0]=PX_NULL; + PX_ObjectExecuteEvent(Object,e); + } + pcb->state=PX_OBJECT_RADIOBOX_STATE_ONCURSOR; + } + } + else + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_NORMAL) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROUT; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + pcb->state=PX_OBJECT_RADIOBOX_STATE_NORMAL; + } + } +} + +px_void PX_Object_RadioBoxClearOtherCheck(PX_Object *Object) +{ + PX_Object *pObject=Object->pPreBrother; + while (pObject) + { + if (PX_Object_GetRadioBox(pObject)) + { + PX_Object_GetRadioBox(pObject)->bCheck=PX_FALSE; + } + pObject=pObject->pPreBrother; + } + + pObject=Object->pNextBrother; + while (pObject) + { + if (PX_Object_GetRadioBox(pObject)) + { + PX_Object_GetRadioBox(pObject)->bCheck=PX_FALSE; + } + pObject=pObject->pNextBrother; + } +} +px_void PX_Object_RadioBoxOnMouseLButtonDown(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_RadioBox *pcb=PX_Object_GetRadioBox(Object); + px_float x=(PX_Object_Event_GetCursorX(e)); + px_float y=(PX_Object_Event_GetCursorY(e)); + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + pcb->state=PX_OBJECT_RADIOBOX_STATE_ONPUSH; + PX_Object_RadioBoxClearOtherCheck(Object); + pcb->bCheck=PX_TRUE; + e.Event=PX_OBJECT_EVENT_VALUECHANGED; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + else + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_NORMAL) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROUT; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + pcb->state=PX_OBJECT_RADIOBOX_STATE_NORMAL; + } + } +} + +px_void PX_Object_RadioBoxOnMouseLButtonUp(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_RadioBox *pcb=PX_Object_GetRadioBox(Object); + + px_float x,y; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + if(pcb->state==PX_OBJECT_RADIOBOX_STATE_ONPUSH) + { + pcb->state=PX_OBJECT_RADIOBOX_STATE_ONCURSOR; + } + } +} + +px_void PX_Object_RadioBoxRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + + PX_Object_RadioBox *pcb=PX_Object_GetRadioBox(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + if (pcb==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pcb->BackgroundColor); + switch (pcb->state) + { + case PX_OBJECT_BUTTON_STATE_NORMAL: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pcb->BackgroundColor); + break; + case PX_OBJECT_BUTTON_STATE_ONPUSH: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pcb->PushColor); + break; + case PX_OBJECT_BUTTON_STATE_ONCURSOR: + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,pcb->CursorColor); + break; + } + + if (pcb->Border) + { + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,1,pcb->BorderColor); + } + + PX_FontModuleDrawText(psurface,pcb->fm,(px_int)objx+20,(px_int)(objy+objHeight/2),PX_ALIGN_LEFTMID,pcb->Text,pcb->TextColor); + + //draw RadioState + PX_GeoDrawCircle(psurface,(px_int)objx+8,(px_int)(objy+objHeight/2),7,1,pcb->BorderColor); + + if (pcb->bCheck) + { + PX_GeoDrawSolidCircle(psurface,(px_int)objx+8,(px_int)(objy+objHeight/2),5,pcb->BorderColor); + } + +} + +PX_Object * PX_Object_RadioBoxCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const char text[],PX_FontModule *fm) +{ + PX_Object *pObject; + PX_Object_RadioBox cbx; + cbx.Align=PX_ALIGN_LEFTMID; + cbx.BackgroundColor=PX_COLOR(0,0,0,0); + cbx.bCheck=PX_FALSE; + cbx.Border=PX_FALSE; + cbx.BorderColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + cbx.CursorColor=PX_COLOR(0,0,0,0); + cbx.PushColor=PX_COLOR(0,0,0,0); + cbx.fm=fm; + cbx.state=PX_OBJECT_RADIOBOX_STATE_NORMAL; + PX_strset(cbx.Text,text); + cbx.TextColor= PX_OBJECT_UI_DEFAULT_FONTCOLOR; + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_RADIOBOX,PX_NULL,PX_Object_RadioBoxRender,PX_NULL,&cbx,sizeof(cbx)); + if (!pObject) + { + return PX_NULL; + } + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_RadioBoxOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_RadioBoxOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_RadioBoxOnMouseLButtonUp,PX_NULL); + return pObject; +} + +px_bool PX_Object_RadioBoxGetCheck(PX_Object *Object) +{ + return PX_Object_GetRadioBox(Object)->bCheck; +} + +px_void PX_Object_RadioBoxSetBackgroundColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetRadioBox(Object)->BackgroundColor=clr; +} + +px_void PX_Object_RadioBoxSetBorderColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetRadioBox(Object)->BorderColor=clr; +} + +px_void PX_Object_RadioBoxSetPushColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetRadioBox(Object)->PushColor=clr; +} + +px_void PX_Object_RadioBoxSetCursorColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetRadioBox(Object)->CursorColor=clr; +} + +px_void PX_Object_RadioBoxSetText(PX_Object *Object,const px_char text[]) +{ + PX_strset(PX_Object_GetRadioBox(Object)->Text,text); +} + +const px_char *PX_Object_RadioBoxGetText(PX_Object *Object) +{ + PX_Object_RadioBox *pDesc=PX_Object_GetRadioBox(Object); + if (pDesc) + { + return pDesc->Text; + } + PX_ASSERT(); + return PX_NULL; +} + +px_void PX_Object_RadioBoxSetTextColor(PX_Object *Object,px_color clr) +{ + PX_Object_RadioBox *pDesc=PX_Object_GetRadioBox(Object); + if (pDesc) + { + pDesc->TextColor=clr; + } + else + PX_ASSERT(); +} + +px_void PX_Object_RadioBoxSetCheck(PX_Object *Object,px_bool check) +{ + PX_Object_GetRadioBox(Object)->bCheck=check; +} \ No newline at end of file diff --git a/UI/PainterEngine/kernel/PX_Object_RadioBox.h b/UI/PainterEngine/kernel/PX_Object_RadioBox.h new file mode 100644 index 0000000..97bb806 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_RadioBox.h @@ -0,0 +1,41 @@ +#ifndef PX_OBJECT_RADIOBOX_H +#define PX_OBJECT_RADIOBOX_H +#include "PX_Object.h" +typedef enum +{ + PX_OBJECT_RADIOBOX_STATE_ONCURSOR, + PX_OBJECT_RADIOBOX_STATE_ONPUSH, + PX_OBJECT_RADIOBOX_STATE_NORMAL, +}PX_Object_RADIOBOX_STATE; +#define PX_OBJECT_RADIOBOX_MAX_CONTENT 64 +typedef struct +{ + PX_ALIGN Align; + px_bool Border; + px_color TextColor; + px_color BorderColor; + px_color BackgroundColor; + px_color CursorColor; + px_color PushColor; + px_char Text[PX_OBJECT_RADIOBOX_MAX_CONTENT]; + px_bool bCheck; + PX_FontModule *fm; + PX_Object_RADIOBOX_STATE state; +}PX_Object_RadioBox; + +PX_Object_RadioBox *PX_Object_GetRadioBox(PX_Object *Object); +PX_Object * PX_Object_RadioBoxCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const char text[],PX_FontModule *fm); +px_bool PX_Object_RadioBoxGetCheck(PX_Object *Object); +px_void PX_Object_RadioBoxSetBackgroundColor(PX_Object *Object,px_color clr); +px_void PX_Object_RadioBoxSetBorderColor(PX_Object *Object,px_color clr); +px_void PX_Object_RadioBoxSetPushColor(PX_Object *Object,px_color clr); +px_void PX_Object_RadioBoxSetCursorColor(PX_Object *Object,px_color clr); +px_void PX_Object_RadioBoxSetText(PX_Object *Object,const px_char text[]); +const px_char *PX_Object_RadioBoxGetText(PX_Object *Object); +px_void PX_Object_RadioBoxSetTextColor(PX_Object *Object,px_color clr); +px_void PX_Object_RadioBoxSetCheck(PX_Object *Object,px_bool check); + + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_RingProcessbar.c b/UI/PainterEngine/kernel/PX_Object_RingProcessbar.c new file mode 100644 index 0000000..6eb2f84 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_RingProcessbar.c @@ -0,0 +1,119 @@ +#include "PX_Object_RingProcessbar.h" + + +px_void PX_Object_RingProcessBarRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_int x,y,r; + px_char content[8]={0}; + px_float process; + px_float inheritX,inheritY; + + PX_Object_RingProcessBar *pDesc=(PX_Object_RingProcessBar *)pObject->pObject; + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + x=(px_int)(pObject->x+inheritX); + y=(px_int)(pObject->y+inheritY); + r=(px_int)pObject->diameter/2; + + process=(pDesc->Value-pDesc->Min)*1.0f/(pDesc->Max-pDesc->Min); + + if (process<0) + { + process=0; + } + if (process>1) + { + process=1; + } + + PX_sprintf1(content,sizeof(content),"%1.2%",PX_STRINGFORMAT_FLOAT(process*100)); + PX_GeoDrawCircle(psurface,x,y,r,pDesc->linewidth+6,pDesc->BackgroundColor); + PX_GeoDrawRing(psurface,x,y,r,pDesc->linewidth,pDesc->Color,-90,-90+(px_int)(360*process)); + PX_FontModuleDrawText(psurface,pDesc->fm,x,y,PX_ALIGN_CENTER,content,pDesc->Color); + +} + +PX_Object * PX_Object_RingProcessBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int r,PX_FontModule *fm) +{ + PX_Object *pObject; + PX_Object_RingProcessBar Desc; + Desc.BackgroundColor=PX_OBJECT_UI_DEFAULT_PUSHCOLOR; + Desc.Color=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + Desc.linewidth=12; + Desc.Max=100; + Desc.Min=0; + Desc.Value=32; + Desc.fm=fm; + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)0,(px_float)0,0,PX_OBJECT_TYPE_RINGPROCESSBAR,PX_NULL,PX_Object_RingProcessBarRender,PX_NULL,&Desc,sizeof(PX_Object_RingProcessBar)); + pObject->diameter=r*2.0f; + return pObject; +} + +px_void PX_Object_RingProcessBarSetColor( PX_Object *pRingProcessBar,px_color Color) +{ + PX_Object_RingProcessBar *pProcess=PX_Object_GetRingProcessBar(pRingProcessBar); + if (pProcess!=PX_NULL) + { + + pProcess->Color=Color; + } +} + +px_void PX_Object_RingProcessBarSetBackgroundColor(PX_Object *pRingProcessBar,px_color Color) +{ + PX_Object_RingProcessBar *pProcess=PX_Object_GetRingProcessBar(pRingProcessBar); + if (pProcess!=PX_NULL) + { + pProcess->BackgroundColor=Color; + } +} + +px_void PX_Object_RingProcessBarSetValue( PX_Object *pRingProcessBar,px_int Value ) +{ + PX_Object_RingProcessBar *pProcess=PX_Object_GetRingProcessBar(pRingProcessBar); + if (pProcess!=PX_NULL) + { + pProcess->Value=Value; + } +} + + +px_void PX_Object_RingProcessBarSetMax( PX_Object *pRingProcessBar,px_int Max ) +{ + PX_Object_RingProcessBar *pProcess=PX_Object_GetRingProcessBar(pRingProcessBar); + if (pProcess!=PX_NULL) + { + pProcess->Max=Max; + } +} + +px_int PX_Object_RingProcessBarGetMax(PX_Object* pRingProcessBar) +{ + PX_Object_RingProcessBar* pProcess = PX_Object_GetRingProcessBar(pRingProcessBar); + if (pProcess != PX_NULL) + { + + return pProcess->Max; + } + PX_ASSERT(); + return 0; +} + +PX_Object_RingProcessBar * PX_Object_GetRingProcessBar( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_RINGPROCESSBAR) + return (PX_Object_RingProcessBar *)Object->pObject; + else + return PX_NULL; +} + +px_int PX_Object_RingProcessBarGetValue( PX_Object *pRingProcessBar ) +{ + if (pRingProcessBar->Type!=PX_OBJECT_TYPE_RINGPROCESSBAR) + { + PX_ASSERT(); + return 0; + } + return PX_Object_GetRingProcessBar(pRingProcessBar)->Value; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_RingProcessbar.h b/UI/PainterEngine/kernel/PX_Object_RingProcessbar.h new file mode 100644 index 0000000..8ceaae6 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_RingProcessbar.h @@ -0,0 +1,27 @@ +#ifndef PX_OBJECT_RINGPROCESSBAR_H +#define PX_OBJECT_RINGPROCESSBAR_H +#include "PX_Object.h" + +typedef struct +{ + px_int Value; + px_int Min; + px_int Max; + px_int linewidth; + px_color Color; + px_color BackgroundColor; + PX_FontModule *fm; +}PX_Object_RingProcessBar; + +PX_Object * PX_Object_RingProcessBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int r,PX_FontModule *fm); +PX_Object_RingProcessBar *PX_Object_GetRingProcessBar(PX_Object *Object); +px_void PX_Object_RingProcessBarSetColor(PX_Object *pRingProcessBar,px_color Color); +px_void PX_Object_RingProcessBarSetBackgroundColor(PX_Object *pRingProcessBar,px_color Color); +px_void PX_Object_RingProcessBarSetValue(PX_Object *pRingProcessBar,px_int Value); +px_void PX_Object_RingProcessBarSetMax(PX_Object *pRingProcessBar,px_int Max); +px_int PX_Object_RingProcessBarGetMax(PX_Object* pRingProcessBar); +px_int PX_Object_RingProcessBarGetValue(PX_Object* pRingProcessBar); + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_ScaleBox.c b/UI/PainterEngine/kernel/PX_Object_ScaleBox.c new file mode 100644 index 0000000..e75fa32 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_ScaleBox.c @@ -0,0 +1,385 @@ +#include "PX_Object_ScaleBox.h" + + +px_void PX_Object_ScaleBoxRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + + PX_Object_ScaleBox * pScaleBox=PX_Object_GetScaleBox(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + switch (pScaleBox->editpt_count) + { + case 0: + default: + return; + case 1: + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->edit_pt[0].x),(px_int)(objx+pScaleBox->edit_pt[0].y),\ + (px_int)(objx+pScaleBox->cursor_pt.x),(px_int)(objx+pScaleBox->cursor_pt.y), + 1, + (pScaleBox->linecolor) + ); + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+pScaleBox->edit_pt[0].x),(px_int)(objx+pScaleBox->edit_pt[0].y),3,pScaleBox->linecolor); + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+pScaleBox->cursor_pt.x),(px_int)(objx+pScaleBox->cursor_pt.y),3,pScaleBox->linecolor); + break; + case 2: + { + px_point2D pt[4]; + + PX_memcpy(pt,pScaleBox->edit_pt,2*sizeof(px_point2D)); + pt[2]=pScaleBox->cursor_pt; + pt[3]=PX_Point2DAdd(pt[0],PX_Point2DSub(pt[2],pt[1])); + + PX_GeoDrawTriangle(psurface,pt[0],pt[1],pt[2],pScaleBox->regioncolor); + PX_GeoDrawTriangle(psurface,pt[0],pt[2],pt[3],pScaleBox->regioncolor); + + PX_GeoDrawLine(psurface,(px_int)(objx+pt[0].x),(px_int)(objx+pt[0].y),\ + (px_int)(objx+pt[1].x),(px_int)(objx+pt[1].y), + 1, + (pScaleBox->linecolor) + ); + + PX_GeoDrawLine(psurface,(px_int)(objx+pt[1].x),(px_int)(objx+pt[1].y),\ + (px_int)(objx+pt[2].x),(px_int)(objx+pt[2].y), + 1, + (pScaleBox->linecolor) + ); + + PX_GeoDrawLine(psurface,(px_int)(objx+pt[2].x),(px_int)(objx+pt[2].y),\ + (px_int)(objx+pt[3].x),(px_int)(objx+pt[3].y), + 1, + (pScaleBox->linecolor) + ); + + PX_GeoDrawLine(psurface,(px_int)(objx+pt[0].x),(px_int)(objx+pt[0].y),\ + (px_int)(objx+pt[3].x),(px_int)(objx+pt[3].y), + 1, + (pScaleBox->linecolor) + ); + + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+pt[0].x),(px_int)(objx+pt[0].y),3,pScaleBox->linecolor); + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+pt[1].x),(px_int)(objx+pt[1].y),3,pScaleBox->linecolor); + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+pt[2].x),(px_int)(objx+pt[2].y),3,pScaleBox->linecolor); + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+pt[3].x),(px_int)(objx+pt[3].y),3,pScaleBox->linecolor); + } + break; + case 3: + { + px_point2D mpt; + + PX_GeoDrawTriangle(psurface,pScaleBox->edit_pt[0],pScaleBox->edit_pt[1],pScaleBox->edit_pt[2],pScaleBox->regioncolor); + PX_GeoDrawTriangle(psurface,pScaleBox->edit_pt[0],pScaleBox->edit_pt[2],pScaleBox->edit_pt[3],pScaleBox->regioncolor); + + PX_GeoDrawTriangle(psurface,pScaleBox->scale_pt[0],pScaleBox->scale_pt[1],pScaleBox->scale_pt[2],pScaleBox->regioncolor); + PX_GeoDrawTriangle(psurface,pScaleBox->scale_pt[0],pScaleBox->scale_pt[2],pScaleBox->scale_pt[3],pScaleBox->regioncolor); + + + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->edit_pt[0].x),(px_int)(objx+pScaleBox->edit_pt[0].y),\ + (px_int)(objx+pScaleBox->edit_pt[1].x),(px_int)(objx+pScaleBox->edit_pt[1].y), + 1, + (pScaleBox->linecolor) + ); + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->scale_pt[0].x),(px_int)(objx+pScaleBox->scale_pt[0].y),\ + (px_int)(objx+pScaleBox->scale_pt[1].x),(px_int)(objx+pScaleBox->scale_pt[1].y), + 1, + (pScaleBox->linecolor) + ); + + + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->edit_pt[1].x),(px_int)(objx+pScaleBox->edit_pt[1].y),\ + (px_int)(objx+pScaleBox->edit_pt[2].x),(px_int)(objx+pScaleBox->edit_pt[2].y), + 1, + (pScaleBox->linecolor) + ); + + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->scale_pt[1].x),(px_int)(objx+pScaleBox->scale_pt[1].y),\ + (px_int)(objx+pScaleBox->scale_pt[2].x),(px_int)(objx+pScaleBox->scale_pt[2].y), + 1, + (pScaleBox->linecolor) + ); + + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->edit_pt[2].x),(px_int)(objx+pScaleBox->edit_pt[2].y),\ + (px_int)(objx+pScaleBox->edit_pt[3].x),(px_int)(objx+pScaleBox->edit_pt[3].y), + 1, + (pScaleBox->linecolor) + ); + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->scale_pt[2].x),(px_int)(objx+pScaleBox->scale_pt[2].y),\ + (px_int)(objx+pScaleBox->scale_pt[3].x),(px_int)(objx+pScaleBox->scale_pt[3].y), + 1, + (pScaleBox->linecolor) + ); + + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->edit_pt[0].x),(px_int)(objx+pScaleBox->edit_pt[0].y),\ + (px_int)(objx+pScaleBox->edit_pt[3].x),(px_int)(objx+pScaleBox->edit_pt[3].y), + 1, + (pScaleBox->linecolor) + ); + PX_GeoDrawLine(psurface,(px_int)(objx+pScaleBox->scale_pt[0].x),(px_int)(objx+pScaleBox->scale_pt[0].y),\ + (px_int)(objx+pScaleBox->scale_pt[3].x),(px_int)(objx+pScaleBox->scale_pt[3].y), + 1, + (pScaleBox->linecolor) + ); + + mpt.x=(pScaleBox->scale_pt[0].x+pScaleBox->scale_pt[1].x)/2; + mpt.y=(pScaleBox->scale_pt[0].y+pScaleBox->scale_pt[1].y)/2; + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+mpt.x),(px_int)(objx+mpt.y),3,pScaleBox->linecolor); + if (pScaleBox->current_cursorpt==0||pScaleBox->current_selectpt==0) + { + PX_GeoDrawCircle(psurface,(px_int)(objx+mpt.x),(px_int)(objx+mpt.y),5,1,pScaleBox->linecolor); + } + + mpt.x=(pScaleBox->scale_pt[2].x+pScaleBox->scale_pt[1].x)/2; + mpt.y=(pScaleBox->scale_pt[2].y+pScaleBox->scale_pt[1].y)/2; + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+mpt.x),(px_int)(objx+mpt.y),3,pScaleBox->linecolor); + if (pScaleBox->current_cursorpt==1||pScaleBox->current_selectpt==1) + { + PX_GeoDrawCircle(psurface,(px_int)(objx+mpt.x),(px_int)(objx+mpt.y),5,1,pScaleBox->linecolor); + } + + mpt.x=(pScaleBox->scale_pt[2].x+pScaleBox->scale_pt[3].x)/2; + mpt.y=(pScaleBox->scale_pt[2].y+pScaleBox->scale_pt[3].y)/2; + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+mpt.x),(px_int)(objx+mpt.y),3,pScaleBox->linecolor); + if (pScaleBox->current_cursorpt==2||pScaleBox->current_selectpt==2) + { + PX_GeoDrawCircle(psurface,(px_int)(objx+mpt.x),(px_int)(objx+mpt.y),5,1,pScaleBox->linecolor); + } + + mpt.x=(pScaleBox->scale_pt[0].x+pScaleBox->scale_pt[3].x)/2; + mpt.y=(pScaleBox->scale_pt[0].y+pScaleBox->scale_pt[3].y)/2; + PX_GeoDrawSolidCircle(psurface,(px_int)(objx+mpt.x),(px_int)(objx+mpt.y),3,pScaleBox->linecolor); + if (pScaleBox->current_cursorpt==3||pScaleBox->current_selectpt==3) + { + PX_GeoDrawCircle(psurface,(px_int)(objx+mpt.x),(px_int)(objx+mpt.y),5,1,pScaleBox->linecolor); + } + + } + break; + } +} + +px_void PX_Object_ScaleBoxOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_ScaleBox *pscalebox=PX_Object_GetScaleBox(pObject); + px_float inheritX,inheritY; + px_float objx,objy,x,y; + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + if (pscalebox->editpt_count==3) + { + px_int i; + px_point2D select_pt[4];//01,12,23,30 + + select_pt[0].x=(pscalebox->scale_pt[0].x+pscalebox->scale_pt[1].x)/2; + select_pt[0].y=(pscalebox->scale_pt[0].y+pscalebox->scale_pt[1].y)/2; + + select_pt[1].x=(pscalebox->scale_pt[2].x+pscalebox->scale_pt[1].x)/2; + select_pt[1].y=(pscalebox->scale_pt[2].y+pscalebox->scale_pt[1].y)/2; + + select_pt[2].x=(pscalebox->scale_pt[2].x+pscalebox->scale_pt[3].x)/2; + select_pt[2].y=(pscalebox->scale_pt[2].y+pscalebox->scale_pt[3].y)/2; + + select_pt[3].x=(pscalebox->scale_pt[0].x+pscalebox->scale_pt[3].x)/2; + select_pt[3].y=(pscalebox->scale_pt[0].y+pscalebox->scale_pt[3].y)/2; + + pscalebox->current_selectpt=-1; + for (i=0;i<4;i++) + { + if (PX_isPoint2DInCircle(PX_POINT2D(x,y),select_pt[i],5)) + { + pscalebox->current_selectpt=i; + break; + } + } + } + else + { + pscalebox->edit_pt[pscalebox->editpt_count]=PX_POINT2D(PX_Object_Event_GetCursorX(e)-inheritX,PX_Object_Event_GetCursorY(e)-inheritY); + pscalebox->editpt_count++; + if (pscalebox->editpt_count==3) + { + PX_memcpy(pscalebox->scale_pt,pscalebox->edit_pt,3*sizeof(px_point2D)); + pscalebox->edit_pt[3]=PX_Point2DAdd(pscalebox->edit_pt[0],PX_Point2DSub(pscalebox->edit_pt[2],pscalebox->edit_pt[1])); + pscalebox->scale_pt[3]=pscalebox->edit_pt[3]; + } + + } +} +px_void PX_Object_ScaleBoxOnCursorDrag(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_ScaleBox *pscalebox=PX_Object_GetScaleBox(pObject); + px_float inheritX,inheritY; + px_float objx,objy,x,y,d; + px_point2D base; + + px_point2D p0,p1,p2,v0,v1,v2; + + if (pscalebox->current_selectpt==-1) + { + return; + } + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + x=PX_Object_Event_GetCursorX(e)-objx; + y=PX_Object_Event_GetCursorY(e)-objy; + + switch(pscalebox->current_cursorpt) + { + case 0: + { + p0=pscalebox->scale_pt[2]; + p1=pscalebox->scale_pt[1]; + p2=pscalebox->scale_pt[3]; + } + break; + case 1: + { + p0=pscalebox->scale_pt[0]; + p1=pscalebox->scale_pt[1]; + p2=pscalebox->scale_pt[3]; + } + break; + case 2: + { + p0=pscalebox->scale_pt[1]; + p1=pscalebox->scale_pt[2]; + p2=pscalebox->scale_pt[0]; + } + break; + case 3: + { + p0=pscalebox->scale_pt[1]; + p1=pscalebox->scale_pt[0]; + p2=pscalebox->scale_pt[2]; + } + break; + default: + return; + } + v0=PX_Point2DNormalization(PX_Point2DSub(p1,p0)) ; + v1=PX_Point2DNormalization(PX_Point2DSub(p2,p0)); + v2=(PX_Point2DSub(PX_POINT2D(x,y),p0)); + + base=PX_Point2DBase(v0,v1,v2); + d=base.x; + switch(pscalebox->current_cursorpt) + { + case 0: + { + pscalebox->scale_pt[1]=PX_Point2DAdd(p0,PX_Point2DMul((v0),d)); + pscalebox->scale_pt[0]=PX_Point2DAdd(p2,PX_Point2DMul((v0),d)); + } + break; + case 1: + { + pscalebox->scale_pt[1]=PX_Point2DAdd(p0,PX_Point2DMul((v0),d)); + pscalebox->scale_pt[2]=PX_Point2DAdd(p2,PX_Point2DMul((v0),d)); + } + break; + case 2: + { + pscalebox->scale_pt[2]=PX_Point2DAdd(p0,PX_Point2DMul((v0),d)); + pscalebox->scale_pt[3]=PX_Point2DAdd(p2,PX_Point2DMul((v0),d)); + } + break; + case 3: + { + pscalebox->scale_pt[0]=PX_Point2DAdd(p0,PX_Point2DMul((v0),d)); + pscalebox->scale_pt[3]=PX_Point2DAdd(p2,PX_Point2DMul((v0),d)); + } + break; + } +} + +px_void PX_Object_ScaleBoxOnCursorMove(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_ScaleBox *pscalebox=PX_Object_GetScaleBox(pObject); + px_float inheritX,inheritY; + px_float objx,objy,x,y; + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + if (pscalebox->editpt_count==3) + { + px_int i; + px_point2D select_pt[4];//01,12,23,30 + + select_pt[0].x=(pscalebox->scale_pt[0].x+pscalebox->scale_pt[1].x)/2; + select_pt[0].y=(pscalebox->scale_pt[0].y+pscalebox->scale_pt[1].y)/2; + + select_pt[1].x=(pscalebox->scale_pt[2].x+pscalebox->scale_pt[1].x)/2; + select_pt[1].y=(pscalebox->scale_pt[2].y+pscalebox->scale_pt[1].y)/2; + + select_pt[2].x=(pscalebox->scale_pt[2].x+pscalebox->scale_pt[3].x)/2; + select_pt[2].y=(pscalebox->scale_pt[2].y+pscalebox->scale_pt[3].y)/2; + + select_pt[3].x=(pscalebox->scale_pt[0].x+pscalebox->scale_pt[3].x)/2; + select_pt[3].y=(pscalebox->scale_pt[0].y+pscalebox->scale_pt[3].y)/2; + + pscalebox->current_cursorpt=-1; + for (i=0;i<4;i++) + { + if (PX_isPoint2DInCircle(PX_POINT2D(x,y),select_pt[i],5)) + { + pscalebox->current_cursorpt=i; + break; + } + } + + } + else + { + pscalebox->cursor_pt=PX_POINT2D(PX_Object_Event_GetCursorX(e)-inheritX,PX_Object_Event_GetCursorY(e)-inheritY); + } +} +PX_Object * PX_Object_ScaleBoxCreate(px_memorypool *mp,PX_Object *Parent) +{ + PX_Object_ScaleBox scaleBox; + PX_Object *pObject; + PX_memset(&scaleBox,0,sizeof(scaleBox)); + scaleBox.linecolor=PX_COLOR(204,0,0,255); + scaleBox.regioncolor=PX_COLOR(64,0,0,255); + scaleBox.current_cursorpt=-1; + scaleBox.current_selectpt=-1; + pObject=PX_ObjectCreateEx(mp,Parent,0,0,0,0,0,0,PX_OBJECT_TYPE_SCALEBOX,PX_NULL,PX_Object_ScaleBoxRender,PX_NULL,&scaleBox,sizeof(scaleBox)); + if (!pObject) + { + return pObject; + } + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_ScaleBoxOnCursorDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_ScaleBoxOnCursorMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_ScaleBoxOnCursorDrag,PX_NULL); + return pObject; +} + +PX_Object_ScaleBox * PX_Object_GetScaleBox(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_SCALEBOX) + { + return (PX_Object_ScaleBox *)Object->pObject; + } + return PX_NULL; +} + +px_point2D * PX_Object_ScaleBoxGetPoints(PX_Object *Object) +{ + PX_Object_ScaleBox *pscalebox=PX_Object_GetScaleBox(Object); + if (pscalebox) + { + return pscalebox->edit_pt; + } + return PX_NULL; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_ScaleBox.h b/UI/PainterEngine/kernel/PX_Object_ScaleBox.h new file mode 100644 index 0000000..f937154 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_ScaleBox.h @@ -0,0 +1,24 @@ +#ifndef PX_OBJECT_SCALEBOX_H +#define PX_OBJECT_SCALEBOX_H +#include "PX_Object.h" + + + +typedef struct +{ + px_int current_selectpt; + px_int current_cursorpt; + px_int editpt_count; + px_point2D cursor_pt; + px_point2D edit_pt[4]; + px_point2D scale_pt[4]; + px_color linecolor,regioncolor; +}PX_Object_ScaleBox; +PX_Object * PX_Object_ScaleBoxCreate(px_memorypool *mp,PX_Object *Parent); +PX_Object_ScaleBox * PX_Object_GetScaleBox( PX_Object *Object ); +px_point2D *PX_Object_ScaleBoxGetPoints(PX_Object *Object); + + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_ScrollArea.c b/UI/PainterEngine/kernel/PX_Object_ScrollArea.c new file mode 100644 index 0000000..31c505e --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_ScrollArea.c @@ -0,0 +1,354 @@ +#include "PX_Object_ScrollArea.h" + +px_void PX_Object_ScrollArea_EventDispatcher(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_ScrollArea *pSA=PX_Object_GetScrollArea(Object); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(Object,&inheritX,&inheritY); + + objx=(Object->x+inheritX); + objy=(Object->y+inheritY); + objWidth=Object->Width; + objHeight=Object->Height; + + if (!pSA) + { + return; + } + + if (e.Event==PX_OBJECT_EVENT_EXECUTE||e.Event==PX_OBJECT_EVENT_CURSORDRAG||e.Event==PX_OBJECT_EVENT_CURSORDOWN||e.Event==PX_OBJECT_EVENT_CURSORUP||e.Event==PX_OBJECT_EVENT_CURSORMOVE) + { + + if (!PX_ObjectIsPointInRegion(Object,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e))) + { + return; + } + PX_Object_Event_SetCursorX(&e,PX_Object_Event_GetCursorX(e)-objx); + PX_Object_Event_SetCursorY(&e,PX_Object_Event_GetCursorY(e)-objy); + } + PX_ObjectPostEvent(pSA->root,e); +} + +px_void PX_Object_ScrollAreaLinkChild(PX_Object *parent,PX_Object *child) +{ + PX_ObjectAddClild(PX_Object_ScrollAreaGetIncludedObjects(parent),child); + PX_Object_ScrollAreaUpdateRange(parent); +} + +px_void PX_Object_ScrollAreaHSliderChanged(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_int value=PX_Object_SliderBarGetValue(pObject); + PX_Object_ScrollArea *pSA=(PX_Object_ScrollArea *)ptr; + pSA->root->x=-(px_float)value; +} + +px_void PX_Object_ScrollAreaVSliderChanged(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_int value=PX_Object_SliderBarGetValue(pObject); + PX_Object_ScrollArea *pSA=(PX_Object_ScrollArea *)ptr; + pSA->root->y=-(px_float)value; +} + +PX_Object * PX_Object_ScrollAreaCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height) +{ + PX_Object *pObject; + PX_Object_ScrollArea *pSA=(PX_Object_ScrollArea *)MP_Malloc(mp,sizeof(PX_Object_ScrollArea)); + + if (pSA==PX_NULL) + { + return PX_NULL; + } + PX_memset(pSA,0,sizeof(PX_Object_ScrollArea)); + + if (Height<=24||Width<=24) + { + return PX_NULL; + } + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pSA); + return PX_NULL; + } + + pObject->pObject=pSA; + pObject->Type=PX_OBJECT_TYPE_SCROLLAREA; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_ScrollAreaFree; + pObject->Func_ObjectRender=PX_Object_ScrollAreaRender; + + pSA->BackgroundColor=PX_COLOR(0,0,0,0); + pSA->bBorder=PX_TRUE; + pSA->borderColor=PX_COLOR(255,0,0,0); + //root + pSA->root=PX_ObjectCreate(pObject->mp,0,0,0,0,0,0,0); + pSA->hscroll=PX_Object_SliderBarCreate(mp,pObject,0,0,16,16,PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL,PX_OBJECT_SLIDERBAR_STYLE_BOX); + pSA->vscroll=PX_Object_SliderBarCreate(mp,pObject,0,0,16,16,PX_OBJECT_SLIDERBAR_TYPE_VERTICAL,PX_OBJECT_SLIDERBAR_STYLE_BOX); + if(!PX_SurfaceCreate(mp,Width,Height,&pSA->surface)) + { + MP_Free(mp,pSA); + MP_Free(mp,pObject); + return PX_NULL; + } + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_ANY,PX_Object_ScrollArea_EventDispatcher,PX_NULL); + PX_ObjectRegisterEvent(pSA->hscroll,PX_OBJECT_EVENT_VALUECHANGED,PX_Object_ScrollAreaHSliderChanged,pSA); + PX_ObjectRegisterEvent(pSA->vscroll,PX_OBJECT_EVENT_VALUECHANGED,PX_Object_ScrollAreaVSliderChanged,pSA); + + pObject->Func_ObjectLinkChild=PX_Object_ScrollAreaLinkChild; + PX_Object_ScrollAreaUpdateRange(pObject); + return pObject; +} + +PX_Object * PX_Object_ScrollAreaGetIncludedObjects(PX_Object *pObj) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + return pSA->root; + } + return PX_NULL; +} + +px_void PX_Object_ScrollAreaMoveToBottom(PX_Object *pObject) +{ + px_float left=0,top=0,right=0,bottom=0; + PX_Object_ScrollArea *psa=PX_Object_GetScrollArea(pObject); + if(psa) + { + PX_Object_ScrollAreaGetRegion(psa->root,&left,&top,&right,&bottom); + if (bottom-top>=pObject->Height) + { + psa->root->y=-(bottom-top-pObject->Height); + } + else + { + psa->root->y=0; + } + } + +} + +px_void PX_Object_ScrollAreaMoveToTop(PX_Object *pObject) +{ + px_float left=0,top=0,right=0,bottom=0; + PX_Object_ScrollArea *psa=PX_Object_GetScrollArea(pObject); + PX_Object_ScrollAreaGetRegion(psa->root,&left,&top,&right,&bottom); + if(psa) + psa->root->y=top; +} + +px_void PX_Object_ScrollAreaGetRegion(PX_Object *pObject,px_float *left,px_float *top,px_float *right,px_float *bottom) +{ + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + if (pObject==PX_NULL||pObject->Visible==PX_FALSE) + { + return; + } + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (objx<*left) + { + *left=objx; + } + + + if (objx+objWidth-1>*right) + { + *right=objx+objWidth; + } + + if (objy<*top) + { + *top=objy; + } + + if (objy+objHeight-1>*bottom) + { + *bottom=objy+objHeight; + } + + PX_Object_ScrollAreaGetRegion(pObject->pNextBrother,left,top,right,bottom); + PX_Object_ScrollAreaGetRegion(pObject->pChilds,left,top,right,bottom); +} + +px_void PX_Object_ScrollAreaUpdateRange( PX_Object *pObject) +{ + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + px_float left=0,top=0,right=0,bottom=0; + PX_Object_ScrollArea *pSA; + + + pSA=PX_Object_GetScrollArea(pObject); + pSA->root->x = 0; + pSA->root->y = 0; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + PX_Object_ScrollAreaGetRegion(pSA->root,&left,&top,&right,&bottom); + + do + { + px_float rWidth=right-left; + pSA->hscroll->x=0; + pSA->hscroll->y=objHeight; + pSA->hscroll->Width=pObject->Width; + pSA->hscroll->Height=16; + if (rWidth>pObject->Width) + { + if (pObject->Width!=0) + { + px_float btnW=pObject->Width/rWidth*pObject->Width; + pSA->hscroll->Visible=PX_TRUE; + PX_Object_SliderBarSetSliderButtonLength(pSA->hscroll,(px_int)btnW); + } + PX_Object_SliderBarSetRange(pSA->hscroll,(px_int)left,(px_int)(right-objWidth)); + PX_Object_SliderBarSetValue(pSA->hscroll, (px_int)left); + } + else + { + pSA->hscroll->Visible=PX_FALSE; + PX_Object_SliderBarSetValue(pSA->hscroll, 0); + } + } while (0); + + do + { + px_float rHeight=bottom-top; + + pSA->vscroll->x=objWidth; + pSA->vscroll->y=0; + pSA->vscroll->Width=16; + pSA->vscroll->Height=objHeight; + if (rHeight>pObject->Height) + { + if (pObject->Height!=0) + { + px_float btnH=pObject->Height/rHeight*pObject->Height; + pSA->vscroll->Visible=PX_TRUE; + PX_Object_SliderBarSetSliderButtonLength(pSA->vscroll,(px_int)btnH); + } + PX_Object_SliderBarSetRange(pSA->vscroll, (px_int)top, (px_int)(bottom - objHeight)); + PX_Object_SliderBarSetValue(pSA->vscroll, (px_int)top); + } + else + { + pSA->vscroll->Visible=PX_FALSE; + PX_Object_SliderBarSetValue(pSA->vscroll, 0); + } + + } while (0); +} + +px_void PX_Object_ScrollAreaRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object_ScrollArea *pSA; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + pSA=PX_Object_GetScrollArea(pObject); + if (!pSA) + { + return; + } + + + if (pSA->surface.height!=(px_int)objHeight||pSA->surface.width!=(px_int)objWidth) + { + PX_SurfaceFree(&pSA->surface); + if(!PX_SurfaceCreate(pObject->mp,(px_int)objWidth,(px_int)objHeight,&pSA->surface)) + { + return; + } + } + + + PX_SurfaceClear(&pSA->surface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,pSA->BackgroundColor); + + //draw + PX_ObjectRender(&pSA->surface,pSA->root,elapsed); + PX_SurfaceRender(psurface,&pSA->surface,(px_int)objx,(px_int)objy,PX_ALIGN_LEFTTOP,PX_NULL); + + //Draw Border + if(pSA->bBorder) + PX_GeoDrawBorder(&pSA->surface,0,0,(px_int)objWidth-1,(px_int)objHeight-1,1,pSA->borderColor); + PX_SurfaceRender(psurface,&pSA->surface,(px_int)objx,(px_int)objy,PX_ALIGN_LEFTTOP,PX_NULL); +} + +px_void PX_Object_ScrollAreaFree(PX_Object *pObj) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + PX_ObjectDelete(pSA->root); + PX_SurfaceFree(&pSA->surface); + } +} + +px_void PX_Object_ScrollAreaSetBkColor(PX_Object *pObj,px_color bkColor) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + pSA->BackgroundColor=bkColor; + } +} + +px_void PX_Object_ScrollAreaSetBorder(PX_Object *pObj,px_bool Border) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + pSA->bBorder=Border; + } +} + +px_void PX_Object_ScrollAreaSetBorderColor(PX_Object *pObj,px_color borderColor) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + pSA->borderColor=borderColor; + } +} + +PX_Object_ScrollArea * PX_Object_GetScrollArea(PX_Object *Object) +{ + if(Object->Type==PX_OBJECT_TYPE_SCROLLAREA) + return (PX_Object_ScrollArea *)Object->pObject; + else + return PX_NULL; +} diff --git a/UI/PainterEngine/kernel/PX_Object_ScrollArea.h b/UI/PainterEngine/kernel/PX_Object_ScrollArea.h new file mode 100644 index 0000000..ce257d0 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_ScrollArea.h @@ -0,0 +1,31 @@ +#ifndef PX_OBJECT_SCROLLAREA_H +#define PX_OBJECT_SCROLLAREA_H +#include "PX_Object.h" + + +typedef struct +{ + px_bool bBorder; + px_surface surface; + px_color BackgroundColor; + px_color borderColor; + PX_Object *root; + PX_Object *hscroll,*vscroll; +}PX_Object_ScrollArea; + + +PX_Object *PX_Object_ScrollAreaCreate(px_memorypool *mp,PX_Object *Parent,int x,int y,int width,int height); +PX_Object_ScrollArea * PX_Object_GetScrollArea( PX_Object *Object ); +PX_Object * PX_Object_ScrollAreaGetIncludedObjects(PX_Object *pObj); +px_void PX_Object_ScrollAreaMoveToBottom(PX_Object *pObject); +px_void PX_Object_ScrollAreaMoveToTop(PX_Object *pObject); +px_void PX_Object_ScrollAreaGetRegion(PX_Object *pObject,px_float *left,px_float *top,px_float *right,px_float *bottom); +px_void PX_Object_ScrollAreaUpdateRange( PX_Object *pObject); +px_void PX_Object_ScrollAreaRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed); +px_void PX_Object_ScrollAreaSetBkColor(PX_Object *pObj,px_color bkColor); +px_void PX_Object_ScrollAreaSetBorder( PX_Object *pObj,px_bool Border ); +px_void PX_Object_ScrollAreaSetBorderColor(PX_Object *pObj,px_color borderColor); +px_void PX_Object_ScrollAreaFree(PX_Object *pObj); + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Selectbar.c b/UI/PainterEngine/kernel/PX_Object_Selectbar.c new file mode 100644 index 0000000..1a6c57b --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Selectbar.c @@ -0,0 +1,567 @@ +#include "PX_Object_Selectbar.h" + +////////////////////////////////////////////////////////////////////////// +// +px_void PX_Object_SelectBarSliderOnChanged(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_SelectBar* pSelectbar = (PX_Object_SelectBar*)ptr; + pSelectbar->currentDisplayOffsetIndex = PX_Object_SliderBarGetValue(pObject); +} + +PX_Object_SelectBar *PX_Object_GetSelectBar(PX_Object *pSelecrBar) +{ + if (pSelecrBar->Type==PX_OBJECT_TYPE_SELECTBAR) + { + return (PX_Object_SelectBar *)pSelecrBar->pObject; + } + return PX_NULL; +} +static px_void PX_SelecrbarClearCurrentCursor(PX_Object_SelectBar *pSelectbar) +{ + px_int i; + for (i=0;iItems.size;i++) + { + PX_VECTORAT(PX_Object_SelectBar_Item,&pSelectbar->Items,i)->onCursor=PX_FALSE; + } +} +static px_void PX_SelectbarOnCursorMove(PX_Object *pObject,px_float x,px_float y) +{ + PX_Object_SelectBar *pSelectbar=PX_Object_GetSelectBar(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + if(pSelectbar->activating) + { + px_int index; + if (pSelectbar->Items.size>pSelectbar->maxDisplayCount) + { + if (xobjx+objWidth-16) + { + return; + } + } + else + { + if (xobjx+objWidth) + { + return; + } + } + + index=(px_int)((y-objy-objHeight)/pSelectbar->ItemHeight); + PX_SelecrbarClearCurrentCursor(pSelectbar); + + if (y=pSelectbar->maxDisplayCount||index>=pSelectbar->Items.size) + { + return; + } + else + { + PX_VECTORAT(PX_Object_SelectBar_Item,&pSelectbar->Items,index+pSelectbar->currentDisplayOffsetIndex)->onCursor=PX_TRUE; + } + } + else + { + if(PX_isPointInRect(PX_POINT(x,y,0),PX_RECT(objx,objy,objWidth,objHeight))) + { + pSelectbar->onCursor=PX_TRUE; + } + else + { + pSelectbar->onCursor=PX_FALSE; + } + } +} +static px_void PX_SelectbarOnCursorDown(PX_Object *pObject,px_float x,px_float y) +{ + PX_Object_SelectBar *pSelectbar=PX_Object_GetSelectBar(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if(pSelectbar->activating) + { + px_int index; + if (pSelectbar->Items.size>pSelectbar->maxDisplayCount) + { + if (xobjx+objWidth) + { + PX_SelecrbarClearCurrentCursor(pSelectbar); + pSelectbar->onCursor=PX_FALSE; + pSelectbar->activating=PX_FALSE; + PX_ObjectClearFocus(pObject); + return; + } + if (x>=objx+objWidth-16&&x<=objx+objWidth) + { + return; + } + } + else + { + if (xobjx+objWidth) + { + PX_SelecrbarClearCurrentCursor(pSelectbar); + pSelectbar->activating=PX_FALSE; + PX_ObjectClearFocus(pObject); + pSelectbar->onCursor=PX_FALSE; + return; + } + } + + index=(px_int)((y-objy-objHeight)/pSelectbar->ItemHeight); + PX_SelecrbarClearCurrentCursor(pSelectbar); + if (y=pSelectbar->maxDisplayCount||index>=pSelectbar->Items.size) + { + pSelectbar->activating=PX_FALSE; + PX_ObjectClearFocus(pObject); + pSelectbar->onCursor=PX_FALSE; + return; + } + else + { + pSelectbar->activating=PX_FALSE; + PX_ObjectClearFocus(pObject); + pSelectbar->selectIndex=index+pSelectbar->currentDisplayOffsetIndex; + do + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_VALUECHANGED; + PX_Object_Event_SetIndex(&e,index); + PX_ObjectPostEvent(pObject,e); + } while (0); + } + pSelectbar->onCursor=PX_FALSE; + } + else + { + if (pSelectbar->Items.size==0) + { + return; + } + + if(PX_isPointInRect(PX_POINT(x,y,0),PX_RECT(objx,objy,objWidth,objHeight))) + { + pSelectbar->activating=PX_TRUE; + PX_ObjectSetFocus(pObject); + } + } + +} + +static px_void PX_SelectbarOnCursorWheel(PX_Object *pObject,px_float z) +{ + PX_Object_SelectBar *pSelectbar=PX_Object_GetSelectBar(pObject); + if (pSelectbar->activating) + { + if (pSelectbar->Items.size>pSelectbar->maxDisplayCount) + { + if (z<0) + { + PX_Object_SliderBarSetValue(pSelectbar->sliderBar,PX_Object_SliderBarGetValue(pSelectbar->sliderBar)+1); + } + else + { + PX_Object_SliderBarSetValue(pSelectbar->sliderBar,PX_Object_SliderBarGetValue(pSelectbar->sliderBar)-1); + } + } + } +} +static px_void PX_SelectbarOnCursorEvent(PX_Object *pSelectBarObject,PX_Object_Event e,px_void *ptr) +{ + switch(e.Event) + { + case PX_OBJECT_EVENT_CURSORMOVE: + case PX_OBJECT_EVENT_CURSORDRAG: + { + PX_SelectbarOnCursorMove(pSelectBarObject,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e)); + } + break; + case PX_OBJECT_EVENT_CURSORDOWN: + { + PX_SelectbarOnCursorDown(pSelectBarObject,PX_Object_Event_GetCursorX(e),PX_Object_Event_GetCursorY(e)); + } + break; + case PX_OBJECT_EVENT_CURSORWHEEL: + { + PX_Object_SelectBar* pDesc = PX_ObjectGetDesc(PX_Object_SelectBar, pSelectBarObject); + PX_SelectbarOnCursorWheel(pSelectBarObject,PX_Object_Event_GetCursorZ(e)); + PX_Object_SelectBarSliderOnChanged(pDesc->sliderBar, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED), pDesc); + } + break; + default: + break; + } +} +static px_void PX_SelectbarFree(PX_Object *pObject) +{ + PX_VectorFree(&PX_Object_GetSelectBar(pObject)->Items); +} +static px_void PX_SelectbarRender(px_surface *pRenderSurface,PX_Object *pObject,px_dword elpase) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + + + //border + if (pSelectBar->style==PX_OBJECT_SELECTBAR_STYLE_RECT) + { + //background + if (pSelectBar->onCursor) + { + PX_GeoDrawRect(pRenderSurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth-1),(px_int)(objy+objHeight-1),pSelectBar->cursorColor); + } + else + { + PX_GeoDrawRect(pRenderSurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth-1),(px_int)(objy+objHeight-1),pSelectBar->backgroundColor); + } + + PX_GeoDrawBorder(pRenderSurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth-1),(px_int)(objy+objHeight-1),1,pSelectBar->borderColor); + + } + else if (pSelectBar->style==PX_OBJECT_SELECTBAR_STYLE_ROUNDRECT) + { + if (pSelectBar->onCursor) + { + PX_GeoDrawSolidRoundRect(pRenderSurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth-1),(px_int)(objy+objHeight-1),objHeight/2,pSelectBar->cursorColor); + } + else + { + PX_GeoDrawSolidRoundRect(pRenderSurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth-1),(px_int)(objy+objHeight-1),objHeight/2,pSelectBar->backgroundColor); + } + + PX_GeoDrawRoundRect(pRenderSurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth-1),(px_int)(objy+objHeight-1),objHeight/2,1,pSelectBar->borderColor); + } + + //font + do + { + if (pSelectBar->selectIndex>=0&&pSelectBar->selectIndexItems.size) + { + PX_Object_SelectBar_Item *pItem=PX_VECTORAT(PX_Object_SelectBar_Item,&pSelectBar->Items,pSelectBar->selectIndex); + PX_FontModuleDrawText(pRenderSurface,pSelectBar->fontmodule,(px_int)(objx+objHeight/2+1),(px_int)(objy+objHeight/2),PX_ALIGN_LEFTMID,pItem->Text,pSelectBar->fontColor); + } + } while (0); + + //triangle + PX_GeoDrawTriangle(pRenderSurface, + PX_POINT2D(objx+objWidth-16,objy+objHeight/2-3), + PX_POINT2D(objx+objWidth-4,objy+objHeight/2-3), + PX_POINT2D(objx+objWidth-10,objy+objHeight/2+3), + pSelectBar->borderColor + ); + + if (pSelectBar->activating) + { + px_int i; + px_int count=pSelectBar->maxDisplayCount>pSelectBar->Items.size?pSelectBar->Items.size:pSelectBar->maxDisplayCount; + + for (i=0;iItems,i+pSelectBar->currentDisplayOffsetIndex); + + if (pItem->onCursor) + { + PX_GeoDrawRect(pRenderSurface, + (px_int)(objx), + (px_int)(objy+objHeight+i*pSelectBar->ItemHeight), + (px_int)(objx+objWidth), + (px_int)(objy+objHeight+(i+1)*pSelectBar->ItemHeight), + pSelectBar->cursorColor + ); + } + else + { + PX_GeoDrawRect(pRenderSurface, + (px_int)(objx), + (px_int)(objy+objHeight+i*pSelectBar->ItemHeight), + (px_int)(objx+objWidth), + (px_int)(objy+objHeight+(i+1)*pSelectBar->ItemHeight), + pSelectBar->backgroundColor + ); + } + + PX_FontModuleDrawText(pRenderSurface,pSelectBar->fontmodule,(px_int)(objx+objHeight/2+1), + (px_int)(objy+objHeight+(i*pSelectBar->ItemHeight)+pSelectBar->ItemHeight/2), + PX_ALIGN_LEFTMID, + pItem->Text, + pSelectBar->fontColor + ); + } + PX_GeoDrawBorder(pRenderSurface, + (px_int)objx, + (px_int)(objy+objHeight), + (px_int)(objx+objWidth-1), + (px_int)(objy+objHeight+count*pSelectBar->ItemHeight), + 1, + pSelectBar->borderColor + ); + + if (pSelectBar->Items.size>pSelectBar->maxDisplayCount) + { + pSelectBar->sliderBar->Visible=PX_TRUE; + pSelectBar->sliderBar->x=objWidth-16; + pSelectBar->sliderBar->y=objHeight; + pSelectBar->sliderBar->Width=16; + pSelectBar->sliderBar->Height=count*pSelectBar->ItemHeight*1.0f; + PX_Object_SliderBarSetBackgroundColor(pSelectBar->sliderBar,pSelectBar->backgroundColor); + PX_Object_SliderBarSetColor(pSelectBar->sliderBar,pSelectBar->borderColor); + PX_Object_SliderBarSetRange(pSelectBar->sliderBar,0,pSelectBar->Items.size-pSelectBar->maxDisplayCount); + PX_Object_SliderBarSetSliderButtonLength(pSelectBar->sliderBar,(px_int)(pSelectBar->sliderBar->Height*pSelectBar->maxDisplayCount/pSelectBar->Items.size)); + } + else + { + pSelectBar->sliderBar->Visible=PX_FALSE; + } + } + else + { + pSelectBar->sliderBar->Visible=PX_FALSE; + } + +} + + + +PX_Object * PX_Object_SelectBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,int y,px_int width,px_int height,PX_FontModule *fontmodule) +{ + PX_Object *pObject; + PX_Object_SelectBar *pSelectbar=(PX_Object_SelectBar *)MP_Malloc(mp,sizeof(PX_Object_SelectBar)); + + if (pSelectbar==PX_NULL) + { + return PX_NULL; + } + + PX_memset(pSelectbar,0,sizeof(PX_Object_SelectBar)); + pSelectbar->fontmodule=fontmodule; + pSelectbar->mp=mp; + pSelectbar->activating=PX_FALSE; + pSelectbar->currentDisplayOffsetIndex=0; + if (fontmodule) + { + pSelectbar->ItemHeight=fontmodule->max_Height; + } + else + { + pSelectbar->ItemHeight=__PX_FONT_HEIGHT; + } + + pSelectbar->maxDisplayCount=16; + pSelectbar->backgroundColor= PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + pSelectbar->cursorColor= PX_OBJECT_UI_DEFAULT_CURSORCOLOR; + pSelectbar->fontColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + pSelectbar->borderColor= PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + pSelectbar->activating=PX_FALSE; + pSelectbar->style=PX_OBJECT_SELECTBAR_STYLE_RECT; + PX_VectorInitialize(mp,&pSelectbar->Items,sizeof(PX_Object_SelectBar_Item),16); + + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)width,(px_float)height,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pSelectbar); + return PX_NULL; + } + + + pObject->pObject=pSelectbar; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_SELECTBAR; + pObject->Func_ObjectFree=PX_SelectbarFree; + pObject->Func_ObjectRender=PX_SelectbarRender; + pObject->OnLostFocusReleaseEvent=PX_TRUE; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_SelectbarOnCursorEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_SelectbarOnCursorEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_SelectbarOnCursorEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORWHEEL,PX_SelectbarOnCursorEvent,PX_NULL); + + pSelectbar->sliderBar=PX_Object_SliderBarCreate(mp,pObject,0,0,0,0,PX_OBJECT_SLIDERBAR_TYPE_VERTICAL,PX_OBJECT_SLIDERBAR_STYLE_BOX); + + if (!pSelectbar->sliderBar) + { + PX_ObjectDelete(pObject); + return PX_NULL; + } + PX_ObjectRegisterEvent(pSelectbar->sliderBar,PX_OBJECT_EVENT_VALUECHANGED,PX_Object_SelectBarSliderOnChanged,pSelectbar); + return pObject; +} + +px_int PX_Object_SelectBarAddItem(PX_Object *pSelectBarObject,const px_char Text[]) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pSelectBarObject); + PX_Object_SelectBar_Item item; + PX_strcpy(item.Text,Text,sizeof(item.Text)); + item.onCursor=PX_FALSE; + if(PX_VectorPushback(&pSelectBar->Items,&item)) + return pSelectBar->Items.size-1; + else + return -1; +} + +px_void PX_Object_SelectBarClear(PX_Object* pSelectBarObject) +{ + PX_Object_SelectBar* pSelectBar = PX_Object_GetSelectBar(pSelectBarObject); + PX_VectorClear(&pSelectBar->Items); +} + +px_void PX_Object_SelectBarRemoveItem(PX_Object *pObject,px_int index) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (index>=0&&indexItems.size) + { + PX_VectorErase(&pSelectBar->Items,index); + } +} + +px_int PX_Object_SelectBarGetItemIndexByText(PX_Object *pObject,const px_char Text[]) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + px_int i; + for (i=0;iItems.size;i++) + { + PX_Object_SelectBar_Item *pItem=PX_VECTORAT(PX_Object_SelectBar_Item,&pSelectBar->Items,i); + if (PX_strequ(Text,pItem->Text)) + { + return i; + } + } + return -1; +} + +const px_char * PX_Object_SelectBarGetCurrentText(PX_Object *pObject) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + return PX_VECTORAT(PX_Object_SelectBar_Item,&pSelectBar->Items,pSelectBar->selectIndex)->Text; + } + return ""; +} + + +const px_char* PX_Object_SelectBarGetItemText(PX_Object* pObject,px_int index) +{ + PX_Object_SelectBar* pSelectBar = PX_Object_GetSelectBar(pObject); + if (!PX_VectorCheckIndex(&pSelectBar->Items,index)) + { + return ""; + } + if (pSelectBar) + { + return PX_VECTORAT(PX_Object_SelectBar_Item, &pSelectBar->Items, index)->Text; + } + return ""; +} + +px_void PX_Object_SelectBarSetDisplayCount(PX_Object *pObject,px_int count) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + pSelectBar->maxDisplayCount=count; + } +} + +px_int PX_Object_SelectBarGetCurrentIndex(PX_Object *pObject) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + return pSelectBar->selectIndex; + } + return -1; +} + +px_void PX_Object_SelectBarSetCurrentIndex(PX_Object *pObject,px_int index) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + if (index>=0&&indexItems.size) + { + pSelectBar->selectIndex=index; + } + } +} + +px_void PX_Object_SelectBarSetStyle(PX_Object *pObject,PX_OBJECT_SELECTBAR_STYLE style) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + pSelectBar->style=style; + } +} + +px_void PX_Object_SelectBarSetFontColor(PX_Object *pObject,px_color color) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + pSelectBar->fontColor=color; + } +} + +px_void PX_Object_SelectBarSetCursorColor(PX_Object *pObject,px_color color) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + pSelectBar->cursorColor=color; + } +} + +px_void PX_Object_SelectBarSetBorderColor(PX_Object *pObject,px_color color) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + pSelectBar->borderColor=color; + } +} + +px_void PX_Object_SelectBarSetBackgroundColor(PX_Object *pObject,px_color color) +{ + PX_Object_SelectBar *pSelectBar=PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + pSelectBar->backgroundColor=color; + } +} + +px_void PX_Object_SelectBarSetMaxDisplayCount(PX_Object* pObject, px_int i) +{ + PX_Object_SelectBar* pSelectBar = PX_Object_GetSelectBar(pObject); + if (pSelectBar) + { + pSelectBar->maxDisplayCount = i; + } +} + diff --git a/UI/PainterEngine/kernel/PX_Object_Selectbar.h b/UI/PainterEngine/kernel/PX_Object_Selectbar.h new file mode 100644 index 0000000..2d0fb54 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Selectbar.h @@ -0,0 +1,56 @@ +#ifndef PX_OBJECT_SELECTBAR_H +#define PX_OBJECT_SELECTBAR_H +#include "PX_Object.h" +#define PX_SELECTBAR_CONTENT_MAX_LEN 48 + +typedef enum +{ + PX_OBJECT_SELECTBAR_STYLE_RECT, + PX_OBJECT_SELECTBAR_STYLE_ROUNDRECT, +}PX_OBJECT_SELECTBAR_STYLE; + + +typedef struct +{ + px_char Text[PX_SELECTBAR_CONTENT_MAX_LEN]; + px_bool onCursor; +}PX_Object_SelectBar_Item;; + +typedef struct +{ + px_memorypool *mp; + px_int maxDisplayCount; + px_int currentDisplayOffsetIndex; + px_int ItemHeight; + px_bool activating; + px_bool onCursor; + px_vector Items;//PX_Object_SelectBar_Item; + PX_FontModule *fontmodule; + px_color backgroundColor; + px_color fontColor; + px_color cursorColor; + px_color borderColor; + px_int selectIndex; + PX_Object *sliderBar; + PX_OBJECT_SELECTBAR_STYLE style; +}PX_Object_SelectBar; + +PX_Object_SelectBar *PX_Object_GetSelectBar(PX_Object *pSelecrBar); +PX_Object * PX_Object_SelectBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,int y,px_int width,px_int height,PX_FontModule *fontmodule); +px_int PX_Object_SelectBarAddItem(PX_Object *PX_Object_SelectBar,const px_char Text[]); +px_void PX_Object_SelectBarClear(PX_Object* pSelectBarObject); +px_void PX_Object_SelectBarRemoveItem(PX_Object* PX_Object_SelectBar, px_int index); +px_int PX_Object_SelectBarGetItemIndexByText(PX_Object *pObject,const px_char Text[]); +const px_char *PX_Object_SelectBarGetCurrentText(PX_Object *pObject); +const px_char* PX_Object_SelectBarGetItemText(PX_Object* pObject, px_int index); +px_void PX_Object_SelectBarSetDisplayCount(PX_Object* pObject, px_int count); +px_int PX_Object_SelectBarGetCurrentIndex(PX_Object *pObject); +px_void PX_Object_SelectBarSetCurrentIndex(PX_Object *pObject,px_int index); +px_void PX_Object_SelectBarSetStyle(PX_Object *pObject,PX_OBJECT_SELECTBAR_STYLE style); +px_void PX_Object_SelectBarSetFontColor(PX_Object *pObject,px_color color); +px_void PX_Object_SelectBarSetCursorColor(PX_Object *pObject,px_color color); +px_void PX_Object_SelectBarSetBorderColor(PX_Object *pObject,px_color color); +px_void PX_Object_SelectBarSetBackgroundColor(PX_Object *pObject,px_color color); +px_void PX_Object_SelectBarSetMaxDisplayCount(PX_Object* pObject, px_int color); +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Sliderbar.c b/UI/PainterEngine/kernel/PX_Object_Sliderbar.c new file mode 100644 index 0000000..b18886e --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Sliderbar.c @@ -0,0 +1,710 @@ +#include "PX_Object_Sliderbar.h" + +px_void PX_Object_SliderBarOnMouseLButtonDown(PX_Object *pObject,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pObject); + px_float x,y; + px_int SliderBtnLen,Sx,Sy; + px_rect rect; + px_int Range,relValue; + + px_int objx,objy,objw,objh; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(px_int)(pObject->x+inheritX); + objy=(px_int)(pObject->y+inheritY); + objw=(px_int)pObject->Width; + objh=(px_int)pObject->Height; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + + if (pSliderBar) + { + Range=pSliderBar->Max-pSliderBar->Min; + relValue=pSliderBar->Value-pSliderBar->Min; + + if(PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + if (pSliderBar==PX_NULL) + { + return; + } + + if (objw<=10) + { + return; + } + + if (objh<10) + { + return; + } + + SliderBtnLen=pSliderBar->SliderButtonLength; + + + if(pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=objx+(px_int)((objw-pSliderBar->SliderButtonLength)*(1.0f)*relValue/Range); + + + rect.x=(px_float)Sx; + rect.y=(px_float)objy; + rect.width=(px_float)pSliderBar->SliderButtonLength; + + rect.height=(px_float)objh; + + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),rect)) + { + pSliderBar->btnDownX=x; + pSliderBar->btnDownY=y; + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG; + } + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + Sx=(px_int)objx+(px_int)((objw-pSliderBar->SliderButtonLength)*(1.0f)*relValue/Range); + + rect.x=(px_float)Sx; + rect.y=(px_float)objy; + rect.width=(px_float)pSliderBar->SliderButtonLength; + rect.height=(px_float)objh; + + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),rect)) + { + pSliderBar->btnDownX=x; + pSliderBar->btnDownY=y; + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG; + } + else if(x>rect.x) + { + pSliderBar->Value+=Range*pSliderBar->SliderButtonLength/((px_int)objw); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + } + else + { + pSliderBar->Value-=Range*pSliderBar->SliderButtonLength/((px_int)objw); + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + } + + } + break; + } + + + } + + if (pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_VERTICAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=(px_int)objx; + Sy=(px_int)objy+((px_int)objh-pSliderBar->SliderButtonLength)*relValue/Range; + + rect.x=(px_float)Sx; + rect.y=(px_float)Sy; + rect.width=(px_float)objh; + rect.height=(px_float)pSliderBar->SliderButtonLength; + + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),rect)) + { + pSliderBar->btnDownX=x; + pSliderBar->btnDownY=y; + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG; + } + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + Sy=(px_int)objy+(px_int)((objh-pSliderBar->SliderButtonLength)*(1.0f)*relValue/Range); + + + rect.x=(px_float)objx+2; + rect.y=(px_float)Sy; + + rect.width=(px_float)objw; + rect.height=(px_float)pSliderBar->SliderButtonLength; + + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),rect)) + { + pSliderBar->btnDownX=x; + pSliderBar->btnDownY=y; + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG; + } + else if(y>rect.y) + { + pSliderBar->Value+=Range*pSliderBar->SliderButtonLength/((px_int)objh); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + } + else + { + pSliderBar->Value-=Range*pSliderBar->SliderButtonLength/((px_int)objh); + if (pSliderBar->ValueMin) + { + pSliderBar->Value=pSliderBar->Min; + } + } + } + break; + } + + } + } + } +} + +px_void PX_Object_SliderBarOnCursorNormal(PX_Object *pObject,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pObject); + + if (pSliderBar) + { + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_NORMAL; + } +} + +px_void PX_Object_SliderBarOnCursorDrag(PX_Object *pObject,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pObject); + px_float x,y; + + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pSliderBar) + { + if (pSliderBar->status!=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG) + { + return; + } + + if(pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL) + { + if (xDargButtonX=0; + return; + } + if (x>objx+objWidth) + { + pSliderBar->DargButtonX=objWidth-pSliderBar->SliderButtonLength; + return; + } + + pSliderBar->DargButtonX+=(x-pSliderBar->btnDownX); + pSliderBar->btnDownX=x; + if (pSliderBar->DargButtonX<0) + { + pSliderBar->DargButtonX=0; + } + if (pSliderBar->DargButtonX>=objWidth-pSliderBar->SliderButtonLength) + { + pSliderBar->DargButtonX=objWidth-pSliderBar->SliderButtonLength; + } + + } + + if (pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_VERTICAL) + { + if (yDargButtonY=0; + return; + } + if (y>objy+objHeight) + { + pSliderBar->DargButtonY=objHeight-pSliderBar->SliderButtonLength; + return; + } + + pSliderBar->DargButtonY+=(y-pSliderBar->btnDownY); + pSliderBar->btnDownY=y; + + if (pSliderBar->DargButtonY<0) + { + pSliderBar->DargButtonY=0; + } + if (pSliderBar->DargButtonY>=objHeight-pSliderBar->SliderButtonLength) + { + pSliderBar->DargButtonY=objHeight-pSliderBar->SliderButtonLength; + } + } + + } +} + +PX_Object * PX_Object_SliderBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_OBJECT_SLIDERBAR_TYPE Type,PX_OBJECT_SLIDERBAR_STYLE style) +{ + PX_Object *pObject; + PX_Object_SliderBar *pSliderbar=(PX_Object_SliderBar *)MP_Malloc(mp,sizeof(PX_Object_SliderBar)); + if (pSliderbar==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pSliderbar); + return PX_NULL; + } + + pObject->pObject=pSliderbar; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_SLIDERBAR; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_SliderBarFree; + pObject->Func_ObjectRender=PX_Object_SliderBarRender; + pSliderbar->Max=100; + pSliderbar->Value=0; + pSliderbar->SliderButtonLength=16; + pSliderbar->style=style; + pSliderbar->status=PX_OBJECT_SLIDERBAR_STATUS_NORMAL; + pSliderbar->Type=Type; + pSliderbar->color=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + pSliderbar->BackgroundColor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + pSliderbar->btnDownX=0; + pSliderbar->btnDownY=0; + pSliderbar->DargButtonX=0; + pSliderbar->DargButtonY=0; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_SliderBarOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_SliderBarOnCursorNormal,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_SliderBarOnCursorNormal,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_SliderBarOnCursorDrag,PX_NULL); + return pObject; +} + +PX_Object_SliderBar * PX_Object_GetSliderBar( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_SLIDERBAR) + return (PX_Object_SliderBar *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_SliderBarSetValue( PX_Object *pSliderBar,px_int Value ) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + if (Value>SliderBar->Max) + { + Value=SliderBar->Max; + } + if (ValueMin) + { + Value=SliderBar->Min; + } + SliderBar->Value=Value; + } +} + +px_void PX_Object_SliderBarSetRange( PX_Object *pSliderBar,px_int Min,px_int Max ) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + SliderBar->Min=Min; + SliderBar->Max=Max; + } +} + +px_int PX_Object_SliderBarGetMax( PX_Object *pSliderBar ) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + return SliderBar->Max; + } + return 0; +} + +px_int PX_Object_SliderBarGetValue( PX_Object *pSliderBar ) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + if (SliderBar->Value>SliderBar->Max) + { + SliderBar->Value=SliderBar->Max; + } + if (SliderBar->ValueMin) + { + SliderBar->Value=SliderBar->Min; + } + return SliderBar->Value; + } + return 0; +} + +px_void PX_Object_SliderBarRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pObject); + PX_Object_Event e; + px_int SliderBtnLen; + px_float Sx,Sy; + px_int Range; + px_int relValue; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (pSliderBar==PX_NULL) + { + return; + } + + if (objWidth<=10) + { + return; + } + + if (objHeight<10) + { + return; + } + + Range=pSliderBar->Max-pSliderBar->Min; + SliderBtnLen=pSliderBar->SliderButtonLength; + + if (pSliderBar->Value>=pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + + if (pSliderBar->ValueMin) + { + pSliderBar->Value=pSliderBar->Min; + } + + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + + //Clear + PX_SurfaceClear( + psurface, + (px_int)objx, + (px_int)objy, + (px_int)objx+(px_int)objWidth-1, + (px_int)objy+(px_int)objHeight-1, + pSliderBar->BackgroundColor + ); + + switch(pSliderBar->status) + { + case PX_OBJECT_SLIDERBAR_STATUS_NORMAL: + { + if (pObject->OnFocus) + { + PX_ObjectClearFocus(pObject); + } + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + if (pSliderBar->ValueMin) + { + pSliderBar->Value=pSliderBar->Min; + } + relValue=pSliderBar->Value-pSliderBar->Min; + if(pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=(objWidth-pSliderBar->SliderButtonLength)*relValue/Range; + pSliderBar->DargButtonX=Sx; + Sx+=objx; + Sy=objy; + //Draw Line + PX_GeoDrawRect( + psurface, + (px_int)objx, + (px_int)objy+(px_int)objHeight/2, + (px_int)objx+(px_int)objWidth-1, + (px_int)objy+(px_int)objHeight/2, + pSliderBar->color + ); + //Draw Slider button + PX_GeoDrawRect(psurface,(px_int)Sx,(px_int)Sy,(px_int)(Sx+SliderBtnLen-1),(px_int)(Sy+objHeight-1),pSliderBar->color); + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + //draw border + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,1,pSliderBar->color); + Sx=((objWidth-pSliderBar->SliderButtonLength)*(1.0f)*relValue/Range); + pSliderBar->DargButtonX=Sx; + Sx+=SliderBtnLen/2; + //draw slider bar + PX_GeoDrawRect(psurface,(px_int)(objx+Sx-SliderBtnLen/2+2),(px_int)(objy+2),(px_int)(objx+Sx-SliderBtnLen/2+SliderBtnLen-3),(px_int)(objy+objHeight-3),pSliderBar->color); + } + break; + } + + + } + + if (pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_VERTICAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=objx; + Sy=(objHeight-pSliderBar->SliderButtonLength)*relValue/Range; + pSliderBar->DargButtonY=Sy; + Sy+=(px_int)objy; + //Draw Line + PX_GeoDrawRect( + psurface, + (px_int)objx+(px_int)objWidth/2, + (px_int)objy, + (px_int)objx+(px_int)objWidth/2, + (px_int)objy+(px_int)objHeight-1, + pSliderBar->color + ); + //Draw Slider button + PX_GeoDrawRect(psurface,(px_int)Sx,(px_int)Sy,(px_int)(Sx+objWidth-1),(px_int)(Sy+SliderBtnLen-1),pSliderBar->color); + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + //draw border + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,1,pSliderBar->color); + Sy=((objHeight-pSliderBar->SliderButtonLength)*(1.0f)*relValue/Range); + pSliderBar->DargButtonY=Sy; + Sy+=SliderBtnLen/2; + //draw slider bar + PX_GeoDrawRect(psurface,(px_int)objx+2,(px_int)(objy+Sy-SliderBtnLen/2+2),(px_int)(objx+objWidth-1-2),(px_int)(objy+Sy+SliderBtnLen/2-3),pSliderBar->color); + } + break; + } + + } + } + break; + case PX_OBJECT_SLIDERBAR_STATUS_ONDRAG: + { + if (!pObject->OnFocus) + { + PX_ObjectSetFocus(pObject); + } + if(pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=pSliderBar->DargButtonX; + Sy=objy; + + pSliderBar->Value=(px_int)(pSliderBar->Min+Range*(Sx)/(objWidth-pSliderBar->SliderButtonLength)); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + if (pSliderBar->ValueMin) + { + pSliderBar->Value=pSliderBar->Min; + } + //Draw Line + PX_GeoDrawRect( + psurface, + (px_int)objx, + (px_int)objy+(px_int)objHeight/2, + (px_int)objx+(px_int)objWidth-1, + (px_int)objy+(px_int)objHeight/2, + pSliderBar->color + ); + //Draw Slider button + PX_GeoDrawRect(psurface,(px_int)(objx+Sx),(px_int)Sy,(px_int)(objx+Sx+SliderBtnLen-1),(px_int)(Sy+objHeight-1),pSliderBar->color); + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + //draw border + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,1,pSliderBar->color); + + Sx=pSliderBar->DargButtonX; + + pSliderBar->Value=(px_int)(pSliderBar->Min+Range*(Sx)/(objWidth-pSliderBar->SliderButtonLength)); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + if (pSliderBar->ValueMin) + { + pSliderBar->Value=pSliderBar->Min; + } + Sx+=SliderBtnLen/2; + //draw slider bar + PX_GeoDrawRect(psurface,(px_int)(objx+Sx-SliderBtnLen/2+2),(px_int)objy+2,(px_int)(objx+Sx+SliderBtnLen/2-3),(px_int)(objy+objHeight-3),pSliderBar->color); + } + break; + } + + + } + + if (pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_VERTICAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + pSliderBar->Value=(px_int)(pSliderBar->Min+Range*(pSliderBar->DargButtonY)/(objHeight-pSliderBar->SliderButtonLength)); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + if (pSliderBar->ValueMin) + { + pSliderBar->Value=pSliderBar->Min; + } + + Sy=pSliderBar->DargButtonY+objy; + Sx=objx; + + + + //Draw Line + PX_GeoDrawRect( + psurface, + (px_int)objx+(px_int)objWidth/2, + (px_int)objy, + (px_int)objx+(px_int)objWidth/2, + (px_int)objy+(px_int)objHeight-1, + pSliderBar->color + ); + //Draw Slider button + PX_GeoDrawRect(psurface,(px_int)Sx,(px_int)(Sy),(px_int)(Sx+objWidth-1),(px_int)(Sy+SliderBtnLen-1),pSliderBar->color); + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + //draw border + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)objx+(px_int)objWidth-1,(px_int)objy+(px_int)objHeight-1,1,pSliderBar->color); + + pSliderBar->Value=(px_int)(pSliderBar->Min+Range*(pSliderBar->DargButtonY)/(objHeight-pSliderBar->SliderButtonLength)); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + if (pSliderBar->ValueMin) + { + pSliderBar->Value=pSliderBar->Min; + } + + Sy=pSliderBar->DargButtonY; + Sx=objx; + Sy+=SliderBtnLen/2; + + + PX_GeoDrawRect(psurface,(px_int)objx+2,(px_int)(objy+Sy-SliderBtnLen/2+2),(px_int)(objx+objWidth-1-2),(px_int)(objy+Sy+SliderBtnLen/2-3),pSliderBar->color); + } + break; + } + + } + + if (pSliderBar->lastValue!=pSliderBar->Value) + { + e.Event=PX_OBJECT_EVENT_VALUECHANGED; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + pSliderBar->lastValue=pSliderBar->Value; + PX_ObjectExecuteEvent(pObject,e); + } + + } + break; + } + + if (pSliderBar->Value>=pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + +} + +px_void PX_Object_SliderBarSetBackgroundColor(PX_Object *pSliderBar,px_color color) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + SliderBar->BackgroundColor=color; + } +} + +px_void PX_Object_SliderBarFree( PX_Object *pSliderBar ) +{ + +} + +px_void PX_Object_SliderBarSetColor(PX_Object *pSliderBar,px_color color) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + SliderBar->color=color; + } +} + +px_void PX_Object_SliderBarSetSliderButtonLength(PX_Object *pSliderBar,px_int length) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + SliderBar->SliderButtonLength=length; + } +} + diff --git a/UI/PainterEngine/kernel/PX_Object_Sliderbar.h b/UI/PainterEngine/kernel/PX_Object_Sliderbar.h new file mode 100644 index 0000000..a22798d --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Sliderbar.h @@ -0,0 +1,56 @@ +#ifndef PX_OBJECT_SLIDERBAR_H +#define PX_OBJECT_SLIDERBAR_H +#include "PX_Object.h" + + +typedef enum +{ + PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL , + PX_OBJECT_SLIDERBAR_TYPE_VERTICAL , +}PX_OBJECT_SLIDERBAR_TYPE; + +typedef enum +{ + PX_OBJECT_SLIDERBAR_STYLE_BOX , + PX_OBJECT_SLIDERBAR_STYLE_LINER , +}PX_OBJECT_SLIDERBAR_STYLE; + +typedef enum +{ + PX_OBJECT_SLIDERBAR_STATUS_ONDRAG , + PX_OBJECT_SLIDERBAR_STATUS_NORMAL , +}PX_OBJECT_SLIDERBAR_STATUS; + + +typedef struct +{ + PX_OBJECT_SLIDERBAR_TYPE Type; + PX_OBJECT_SLIDERBAR_STYLE style; + PX_OBJECT_SLIDERBAR_STATUS status; + px_float btnDownX,btnDownY; + px_float DargButtonX,DargButtonY; + px_int Min; + px_int Max; + px_int lastValue; + px_int Value; + px_int SliderButtonLength; + px_color color; + px_color BackgroundColor; +}PX_Object_SliderBar; + +PX_Object *PX_Object_SliderBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_OBJECT_SLIDERBAR_TYPE Type,PX_OBJECT_SLIDERBAR_STYLE style); +PX_Object_SliderBar *PX_Object_GetSliderBar(PX_Object *Object); +px_void PX_Object_SliderBarSetValue(PX_Object *pSliderBar,px_int Value); +px_void PX_Object_SliderBarSetRange(PX_Object *pSliderBar,px_int Min,px_int Max); +px_int PX_Object_SliderBarGetMax( PX_Object *pSliderBar ); +px_int PX_Object_SliderBarGetValue(PX_Object *pSliderBar); +px_void PX_Object_SliderBarRender(px_surface *psurface,PX_Object *pSliderBar,px_uint elapsed); +px_void PX_Object_SliderBarSetBackgroundColor(PX_Object *pSliderBar,px_color color); +px_void PX_Object_SliderBarFree(PX_Object *pSliderBar); +px_void PX_Object_SliderBarSetColor(PX_Object *pSliderBar,px_color color); +px_void PX_Object_SliderBarSetSliderButtonLength(PX_Object *pSliderBar,px_int length); + + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_TransformAdapter.c b/UI/PainterEngine/kernel/PX_Object_TransformAdapter.c new file mode 100644 index 0000000..04ea1ca --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_TransformAdapter.c @@ -0,0 +1,200 @@ +#include "PX_Object_TransformAdapter.h" + +PX_Object_TransformAdapter * PX_Object_GetTransformAdapter(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_TRANSFORMADAPTER) + { + return (PX_Object_TransformAdapter *)Object->pObject; + } + return PX_NULL; +} + +px_void PX_Object_TransformAdapterRender(px_surface *rendersurface,PX_Object *pObject,px_dword elapsed) +{ + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + PX_Object_TransformAdapter *pTransformAdapter=PX_Object_GetTransformAdapter(pObject); + px_point2D vres,vnow; + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + ////////////////////////////////////////////////////////////////////////// + //update rotation & stretch + vres=PX_Point2DSub(pTransformAdapter->sourceAdaptPoint,PX_POINT2D(pObject->x,pObject->y)); + vnow=PX_Point2DRotate(vres,pTransformAdapter->endAngle-pTransformAdapter->startAngle); + + + + if (pTransformAdapter->mode==PX_OBJECT_TRANSFORMADAPTER_MODE_ANY||pTransformAdapter->mode==PX_OBJECT_TRANSFORMADAPTER_MODE_ROTATION) + { + //draw circle + px_color rendercolor=pTransformAdapter->color; + rendercolor._argb.a/=4; + PX_GeoDrawCircle(rendersurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)PX_Point2DMod(vres),1,rendercolor); + } + + if (pTransformAdapter->mode==PX_OBJECT_TRANSFORMADAPTER_MODE_ANY||pTransformAdapter->mode==PX_OBJECT_TRANSFORMADAPTER_MODE_STRETCH) + { + //draw line + px_color rendercolor=pTransformAdapter->color; + rendercolor._argb.a/=4; + + PX_GeoDrawLine(rendersurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)(vres.x+pObject->x),(px_int)(vres.y+pObject->y),1,rendercolor); + PX_GeoDrawLine(rendersurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)(vnow.x+pObject->x),(px_int)(vnow.y+pObject->y),1,rendercolor); + } + + //draw point + vnow=PX_Point2DMul(vnow,pTransformAdapter->stretch); + PX_GeoDrawSector(rendersurface,(px_int)objx,(px_int)objy,(px_int)PX_Point2DMod(vnow),1,PX_COLOR(16,0,255,255),(px_int)pTransformAdapter->startAngle,(px_int)pTransformAdapter->endAngle); + + PX_GeoDrawSolidCircle(rendersurface,(px_int)(vnow.x+pObject->x),(px_int)(vnow.y+pObject->y),5,pTransformAdapter->color); + if (pTransformAdapter->bSelect) + { + PX_GeoDrawCircle(rendersurface,(px_int)(vnow.x+pObject->x),(px_int)(vnow.y+pObject->y),8,1,pTransformAdapter->color); + } + PX_GeoDrawCircle(rendersurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)PX_Point2DMod(vnow),1,pTransformAdapter->color); + PX_GeoDrawLine(rendersurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)(vnow.x+pObject->x),(px_int)(vnow.y+pObject->y),1,pTransformAdapter->color); + + do + { + px_char content[32]; + PX_sprintf2(content,sizeof(content),"rotation:%1.1 stretch:%2.2",PX_STRINGFORMAT_FLOAT(pTransformAdapter->endAngle-pTransformAdapter->startAngle),PX_STRINGFORMAT_FLOAT(pTransformAdapter->stretch)); + PX_FontDrawText(rendersurface,(px_int)(vnow.x+pObject->x),(px_int)(vnow.y+pObject->y-2),PX_ALIGN_MIDBOTTOM,content,pTransformAdapter->fontColor); + } while (0); + + +} + +px_void PX_Object_TransformAdapterOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float objx,objy,objWidth,objHeight; + + px_float inheritX,inheritY,x,y; + PX_Object_TransformAdapter *pTransformAdapter=PX_Object_GetTransformAdapter(pObject); + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + do + { + px_point2D vres,vnow; + vres=PX_Point2DSub(pTransformAdapter->sourceAdaptPoint,PX_POINT2D(pObject->x,pObject->y)); + vnow=PX_Point2DRotate(vres,pTransformAdapter->endAngle-pTransformAdapter->startAngle); + vnow=PX_Point2DMul(vnow,pTransformAdapter->stretch); + vnow.x+=pObject->x; + vnow.y+=pObject->y; + if (PX_isPoint2DInCircle(PX_POINT2D(x,y),vnow,5)) + { + pTransformAdapter->bSelect=PX_TRUE; + } + else + { + pTransformAdapter->bSelect=PX_FALSE; + } + } while (0); +} + + +px_void PX_Object_TransformAdapterOnCursorDrag(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float objx,objy,objWidth,objHeight; + px_point2D vres; + px_float inheritX,inheritY,x,y; + PX_Object_TransformAdapter *pTransformAdapter=PX_Object_GetTransformAdapter(pObject); + + if(pTransformAdapter->bSelect) + { + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + if (pTransformAdapter->mode==PX_OBJECT_TRANSFORMADAPTER_MODE_ANY||pTransformAdapter->mode==PX_OBJECT_TRANSFORMADAPTER_MODE_ROTATION) + { + px_float angle=(px_float)PX_RadianToAngle(PX_atan2(y-objy*1.0,x-objx*1.0)); + px_float lastAngleMod=pTransformAdapter->endAngle; + px_float inc; + px_int round=(px_int)(lastAngleMod/360); + lastAngleMod=lastAngleMod-round*360; + + inc=angle-lastAngleMod; + if (inc>180) + { + inc-=360; + } + if (inc<-180) + { + inc+=360; + } + pTransformAdapter->endAngle+=inc; + } + if (pTransformAdapter->mode==PX_OBJECT_TRANSFORMADAPTER_MODE_ANY||pTransformAdapter->mode==PX_OBJECT_TRANSFORMADAPTER_MODE_STRETCH) + { + vres=PX_POINT2D(pObject->x-x,pObject->y-y); + pTransformAdapter->stretch=PX_Point2DMod(vres)/PX_Point2DMod(PX_Point2DSub(pTransformAdapter->sourceAdaptPoint,PX_POINT2D(pObject->x,pObject->y))); + } + + PX_ObjectExecuteEvent(pObject,PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); + } +} + + +PX_Object * PX_Object_TransformAdapterCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_point2D sourceAdaptPoint) +{ + PX_Object *pObject; + PX_Object_TransformAdapter TransformAdapter; + PX_memset(&TransformAdapter,0,sizeof(TransformAdapter)); + TransformAdapter.color=PX_COLOR(255,255,64,64); + TransformAdapter.fontColor=PX_COLOR(255,255,0,0); + TransformAdapter.stretch=1; + TransformAdapter.currentAdaptPoint=sourceAdaptPoint; + TransformAdapter.sourceAdaptPoint=sourceAdaptPoint; + TransformAdapter.startAngle=(px_float)PX_RadianToAngle(PX_atan2(sourceAdaptPoint.y-y*1.0,sourceAdaptPoint.x-x*1.0)); + TransformAdapter.endAngle=TransformAdapter.startAngle; + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,0,0,0,PX_OBJECT_TYPE_TRANSFORMADAPTER,0,PX_Object_TransformAdapterRender,0,&TransformAdapter,sizeof(TransformAdapter)); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_TransformAdapterOnCursorDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_TransformAdapterOnCursorDrag,PX_NULL); + return pObject; +} + +px_void PX_Object_TransformAdapterSetMode(PX_Object *Object,PX_OBJECT_TRANSFORMADAPTER_MODE mode) +{ + PX_Object_GetTransformAdapter(Object)->mode=mode; +} + +px_float PX_Object_TransformAdapterGetRotation(PX_Object *Object) +{ + return PX_Object_GetTransformAdapter(Object)->endAngle-PX_Object_GetTransformAdapter(Object)->startAngle; +} + +px_float PX_Object_TransformAdapterGetStretch(PX_Object *Object) +{ + return PX_Object_GetTransformAdapter(Object)->stretch; +} + +px_void PX_Object_TransformAdapterResetState(PX_Object *pObject,px_float x,px_float y,px_point2D sourceAdaptPoint,px_float rotation,px_float stretch) +{ + PX_Object_TransformAdapter *pTransformAdapter=PX_Object_GetTransformAdapter(pObject); + pObject->x=x; + pObject->y=y; + pTransformAdapter->startAngle=(px_float)PX_RadianToAngle(PX_atan2(sourceAdaptPoint.y-y*1.0,sourceAdaptPoint.x-x*1.0)); + pTransformAdapter->endAngle=pTransformAdapter->startAngle+rotation; + pTransformAdapter->sourceAdaptPoint=sourceAdaptPoint; + pTransformAdapter->stretch=stretch; +} + diff --git a/UI/PainterEngine/kernel/PX_Object_TransformAdapter.h b/UI/PainterEngine/kernel/PX_Object_TransformAdapter.h new file mode 100644 index 0000000..429180a --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_TransformAdapter.h @@ -0,0 +1,30 @@ +#ifndef PX_OBJECT_TRANSFORMADAPTER_H +#define PX_OBJECT_TRANSFORMADAPTER_H +#include "PX_Object.h" + +typedef enum +{ + PX_OBJECT_TRANSFORMADAPTER_MODE_ANY, + PX_OBJECT_TRANSFORMADAPTER_MODE_ROTATION, + PX_OBJECT_TRANSFORMADAPTER_MODE_STRETCH +}PX_OBJECT_TRANSFORMADAPTER_MODE; + + +typedef struct +{ + px_point2D sourceAdaptPoint,currentAdaptPoint,cursor; + px_float startAngle; + px_float endAngle; + px_float stretch; + px_bool bSelect; + px_color color,fontColor; + PX_OBJECT_TRANSFORMADAPTER_MODE mode; +}PX_Object_TransformAdapter; + +PX_Object_TransformAdapter *PX_Object_GetTransformAdapter(PX_Object *Object); +PX_Object * PX_Object_TransformAdapterCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_point2D sourceAdaptPoint); +px_void PX_Object_TransformAdapterSetMode(PX_Object *Object,PX_OBJECT_TRANSFORMADAPTER_MODE mode); +px_float PX_Object_TransformAdapterGetRotation(PX_Object *Object); +px_float PX_Object_TransformAdapterGetStretch(PX_Object *Object); +px_void PX_Object_TransformAdapterResetState(PX_Object *pObject,px_float x,px_float y,px_point2D sourceAdaptPoint,px_float rotation,px_float stretch); +#endif diff --git a/UI/PainterEngine/kernel/PX_Object_VarBox.c b/UI/PainterEngine/kernel/PX_Object_VarBox.c new file mode 100644 index 0000000..40e1281 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_VarBox.c @@ -0,0 +1,164 @@ +#include "PX_Object_VarBox.h" + + +PX_Object_VarBox* PX_Object_GetVarBox(PX_Object* pObject) +{ + if (pObject->Type==PX_OBJECT_TYPE_IPBOX) + { + return PX_ObjectGetDesc(PX_Object_VarBox, pObject); + } + return PX_NULL; +} + +px_void PX_Object_VarBoxOnConfirm(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_VarBox* pdesc = PX_ObjectGetDesc(PX_Object_VarBox, ((PX_Object*)ptr)); + if (!*PX_Object_VariousGetText(pdesc->various_name)) + { + return; + } + if (!*PX_Object_VariousGetText(pdesc->various_address)) + { + return; + } + if (PX_strlen(PX_Object_VariousGetText(pdesc->various_address))>16) + { + return; + } + if (!*PX_Object_VariousGetText(pdesc->various_size)) + { + return; + } + if (PX_atoi(PX_Object_VariousGetText(pdesc->various_size))==0) + { + return; + } + + PX_ObjectExecuteEvent(((PX_Object*)ptr), PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_EXECUTE)); + PX_Object_VarBoxClose((PX_Object*)ptr); +} + +px_void PX_Object_VarBoxOnKeyDown(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + if (e.Event == PX_OBJECT_EVENT_KEYDOWN && PX_Object_Event_GetKeyDown(e) == '\r') + { + PX_Object_VarBoxOnConfirm(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_EXECUTE), ptr); + } +} + + +px_void PX_Object_VarBoxOnCancel(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_VarBoxClose((PX_Object*)ptr); +} + +px_void PX_Object_VarBoxOnTypeChanged(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object_VarBox* pDesc = (PX_Object_VarBox*)ptr; + switch (PX_Object_SelectBarGetCurrentIndex(pObject)) + { + case 0: + case 4: + PX_Object_VariousSetInt(pDesc->various_size, 1); + pDesc->various_size->Enabled = PX_FALSE; + pDesc->various_size->Visible = PX_TRUE; + break; + case 1: + case 5: + PX_Object_VariousSetInt(pDesc->various_size, 2); + pDesc->various_size->Enabled = PX_FALSE; + pDesc->various_size->Visible = PX_TRUE; + break; + case 2: + case 6: + case 8: + PX_Object_VariousSetInt(pDesc->various_size, 4); + pDesc->various_size->Enabled = PX_FALSE; + pDesc->various_size->Visible = PX_TRUE; + break; + case 3: + case 7: + case 9: + PX_Object_VariousSetInt(pDesc->various_size, 8); + pDesc->various_size->Enabled = PX_FALSE; + pDesc->various_size->Visible = PX_TRUE; + break; + case 10: + case 11: + PX_Object_VariousSetInt(pDesc->various_size, 32); + pDesc->various_size->Enabled = PX_TRUE; + pDesc->various_size->Visible = PX_TRUE; + break; + case 12: + PX_Object_VariousSetInt(pDesc->various_size, 1); + pDesc->various_size->Enabled = PX_FALSE; + pDesc->various_size->Visible = PX_FALSE; + break; + default: + break; + } +} + +PX_Object* PX_Object_VarBoxCreate(px_memorypool* mp, PX_Object* Parent, int x, int y, int width, int height, const px_char title[], PX_FontModule* fontmodule) +{ + PX_Object_VarBox desc, * pdesc; + PX_Object* pObject; + pObject = PX_ObjectCreateEx(mp, Parent, (px_float)x, (px_float)y, 0, (px_float)width, (px_float)height, 0, PX_OBJECT_TYPE_IPBOX, PX_NULL, PX_NULL, PX_NULL, &desc, sizeof(desc)); + pdesc = PX_ObjectGetDesc(PX_Object_VarBox, pObject); + pdesc->widget = PX_Object_WidgetCreate(mp, pObject, 0, 0, width, height, "", fontmodule); + PX_Object_WidgetShowHideCloseButton(pdesc->widget, PX_FALSE); + pdesc->various_name = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, 32, 256, 32, "Name:",PX_OBJECT_VARIOUS_TYPE_EDIT, fontmodule); + PX_Object_VariousSetEditStyle(pdesc->various_name, PX_OBJECT_VARIOUS_EDIT_TYPE_STRING); + pdesc->various_address = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, 72, 256, 32, "Address:", PX_OBJECT_VARIOUS_TYPE_EDIT, fontmodule); + PX_Object_VariousSetEditStyle(pdesc->various_address, PX_OBJECT_VARIOUS_EDIT_TYPE_HEX); + pdesc->various_size = PX_Object_VariousCreate(mp, pdesc->widget, width / 2 - 128, 112, 256, 32, "Size:", PX_OBJECT_VARIOUS_TYPE_EDIT, fontmodule); + PX_Object_VariousSetEditStyle(pdesc->various_size, PX_OBJECT_VARIOUS_EDIT_TYPE_INT); + PX_Object_VariousSetInt(pdesc->various_size, 1); + pdesc->various_size->Enabled = PX_FALSE; + pdesc->selectbar_type = PX_Object_SelectBarCreate(mp, pdesc->widget, width / 2 - 128, 152, 256, 32, fontmodule); + PX_Object_SelectBarSetMaxDisplayCount(pdesc->selectbar_type, 5); + + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: int8(LE)"); //0 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: int16(LE)"); //1 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: int32(LE)"); //2 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: int64(LE)"); //3 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: uint8(LE)"); //4 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: uint16(LE)"); //5 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: uint32(LE)"); //6 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: uint64(LE)"); //7 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: float32(LE IEEE754)"); //8 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: double64(LE IEEE754)"); //9 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: string"); //10 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: hexadecimal"); //11 + PX_Object_SelectBarAddItem(pdesc->selectbar_type, "Type: boolean"); //12 + PX_ObjectRegisterEvent(pdesc->selectbar_type, PX_OBJECT_EVENT_VALUECHANGED, PX_Object_VarBoxOnTypeChanged, pdesc); + + pdesc->checkbox_readonly = PX_Object_CheckBoxCreate(mp, pdesc->widget, width / 2 - 128, 192, 256, 32, "Read Only", fontmodule); + pdesc->btn_ok = PX_Object_PushButtonCreate(mp, pdesc->widget, width - 256, height - 68, 96, 32, "OK", fontmodule); + pdesc->btn_close = PX_Object_PushButtonCreate(mp, pdesc->widget, width - 128, height - 68, 96, 32, "Cancel", fontmodule); + + PX_ObjectRegisterEvent(pdesc->btn_ok, PX_OBJECT_EVENT_EXECUTE, PX_Object_VarBoxOnConfirm, pObject); + PX_ObjectRegisterEvent(pdesc->btn_close, PX_OBJECT_EVENT_EXECUTE, PX_Object_VarBoxOnCancel, pObject); + PX_ObjectRegisterEvent(pdesc->widget, PX_OBJECT_EVENT_KEYDOWN, PX_Object_VarBoxOnKeyDown, pObject); + pdesc->widget->Visible = PX_TRUE; + pObject->Visible = PX_FALSE; + return pObject; +} + +px_void PX_Object_VarBoxShow(PX_Object* pObject) +{ + pObject->Visible = PX_TRUE; + PX_ObjectSetFocus(pObject); +} + +px_void PX_Object_VarBoxClose(PX_Object* pObject) +{ + pObject->Visible = PX_FALSE; + PX_ObjectClearFocus(pObject); +} + +px_void PX_Object_VarBoxHide(PX_Object* pObject) +{ + pObject->Visible = PX_FALSE; + PX_ObjectClearFocus(pObject); +} \ No newline at end of file diff --git a/UI/PainterEngine/kernel/PX_Object_VarBox.h b/UI/PainterEngine/kernel/PX_Object_VarBox.h new file mode 100644 index 0000000..394cdf2 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_VarBox.h @@ -0,0 +1,23 @@ +#ifndef PX_OBJECT_VARBOX_H +#define PX_OBJECT_VARBOX_H +#include "PX_Object.h" + + +typedef struct +{ + PX_Object *widget; + PX_Object* various_name; + PX_Object* various_address; + PX_Object* various_size; + PX_Object* selectbar_type; + PX_Object* checkbox_readonly; + PX_Object *btn_close; + PX_Object *btn_ok; +}PX_Object_VarBox; + +PX_Object_VarBox* PX_Object_GetVarBox( PX_Object *Object ); +PX_Object * PX_Object_VarBoxCreate(px_memorypool *mp,PX_Object *Parent,int x,int y,int width,int height,const px_char title[],PX_FontModule *fontmodule); +px_void PX_Object_VarBoxShow(PX_Object *pObject); +px_void PX_Object_VarBoxClose(PX_Object* pObject); +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Various.c b/UI/PainterEngine/kernel/PX_Object_Various.c new file mode 100644 index 0000000..ce4f3cf --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Various.c @@ -0,0 +1,363 @@ +#include "PX_Object_Various.h" + +px_void PX_Object_VariousOnEditChange(PX_Object* pEObject, PX_Object_Event e, px_void* ptr) +{ + PX_Object* pObject = (PX_Object*)ptr; + PX_ObjectExecuteEvent(pObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_VALUECHANGED)); +} + + +px_void PX_Object_VariousRender(px_surface *psurface,PX_Object* pObject,px_dword elapsed) +{ + PX_Object_Various* pDesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + + pDesc->label->Width = pObject->Width * 0.25f; + if (pDesc->label->Widthlabel)+16) + { + pDesc->label->Width = PX_Object_LabelGetTextRenderWidth(pDesc->label) +16.f; + } + pDesc->label->Height = pObject->Height; + + + + + pDesc->various->Width = pObject->Width -pDesc->label->Width; + pDesc->various->Height = pObject->Height; + pDesc->various->x = pDesc->label->Width; + + PX_ObjectSetEnabled(pDesc->various, pDesc->editable); + +} + +px_void PX_Object_VariousEditSetMaxLength(PX_Object* pObject, px_int len) +{ + PX_Object_Various* pDesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + if (pDesc->type==PX_OBJECT_VARIOUS_TYPE_EDIT) + { + PX_Object_EditSetMaxTextLength(pDesc->various, len); + } + +} + +PX_Object* PX_Object_VariousCreate(px_memorypool* mp, PX_Object* Parent, px_int x, px_int y, px_int Width, px_int Height, const px_char* Text, PX_OBJECT_VARIOUS_TYPE type, PX_FontModule* fm) +{ + PX_Object_Various var,*pdesc; + PX_Object* pObject; + PX_zeromemory(&var,sizeof(var)); + pObject=PX_ObjectCreateEx(mp, Parent, (px_float)x, (px_float)y, 0, (px_float)Width, (px_float)Height, 0,PX_OBJECT_TYPE_VARIOUS,PX_NULL, PX_Object_VariousRender,PX_NULL,&var,sizeof(var)); + pdesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + pdesc->label = PX_Object_LabelCreate(mp, pObject, 0, 0, 1, 1, Text, fm, PX_OBJECT_UI_DEFAULT_FONTCOLOR); + pdesc->editable = PX_TRUE; + pdesc->type = type; + switch (type) + { + case PX_OBJECT_VARIOUS_TYPE_EDIT: + { + pdesc->various = PX_Object_EditCreate(mp, pObject, 0, 0, 1, 1, fm); + PX_ObjectRegisterEvent(pdesc->various, PX_OBJECT_EVENT_VALUECHANGED, PX_Object_VariousOnEditChange, pObject); + } + break; + case PX_OBJECT_VARIOUS_TYPE_LABEL: + { + pdesc->various = PX_Object_LabelCreate(mp, pObject, 0, 0, 1, 1,"",fm, PX_OBJECT_UI_DEFAULT_FONTCOLOR); + } + break; + case PX_OBJECT_VARIOUS_TYPE_SELECTBAR: + { + pdesc->various = PX_Object_SelectBarCreate(mp, pObject, 0, 0, 1, 1,fm); + PX_ObjectRegisterEvent(pdesc->various, PX_OBJECT_EVENT_VALUECHANGED, PX_Object_VariousOnEditChange, pObject); + } + break; + default: + break; + } + + return pObject; +} + +PX_Object_Various* PX_Object_GetVarious(PX_Object* pObject) +{ + if (pObject->Type== PX_OBJECT_TYPE_VARIOUS) + { + return PX_ObjectGetDesc(PX_Object_Various, pObject); + } + return PX_NULL; +} + +px_void PX_Object_VariousSetEditStyle(PX_Object* pObject,PX_OBJECT_VARIOUS_EIDT_TYPE type) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + else + { + PX_Object_Various* pDesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + if (pDesc->type==PX_OBJECT_VARIOUS_TYPE_EDIT) + { + switch (type) + { + case PX_OBJECT_VARIOUS_EDIT_TYPE_INT: + { + PX_Object_EditSetLimit(pDesc->various, "-01234567890"); + } + break; + case PX_OBJECT_VARIOUS_EDIT_TYPE_FLOAT: + { + PX_Object_EditSetLimit(pDesc->various, "-01234567890."); + } + break; + case PX_OBJECT_VARIOUS_EDIT_TYPE_HEX: + { + PX_Object_EditSetLimit(pDesc->various, "-01234567890ABCDEFabcdef"); + } + break; + default: + break; + } + } + } +} + +const px_char* PX_Object_VariousGetText(PX_Object* pObject) +{ + if (pObject->Type!= PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return PX_NULL; + } + else + { + PX_Object_Various* pDesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + switch (pDesc->type) + { + case PX_OBJECT_VARIOUS_TYPE_EDIT: + { + return PX_Object_EditGetText(PX_Object_GetVarious(pObject)->various); + } + case PX_OBJECT_VARIOUS_TYPE_LABEL: + { + return PX_Object_LabelGetText(PX_Object_GetVarious(pObject)->various); + } + case PX_OBJECT_VARIOUS_TYPE_SELECTBAR: + { + return PX_Object_SelectBarGetCurrentText(PX_Object_GetVarious(pObject)->various); + } + default: + break; + } + } + + PX_ASSERT(); + return PX_NULL; + +} + +px_void PX_Object_VariousSetText(PX_Object* pObject, const px_char* Text) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + else + { + PX_Object_Various* pDesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + switch (pDesc->type) + { + case PX_OBJECT_VARIOUS_TYPE_EDIT: + { + PX_Object_EditSetXYOffset(PX_Object_GetVarious(pObject)->various, 0, 0); + PX_Object_EditSetText(PX_Object_GetVarious(pObject)->various,Text); + } + break; + case PX_OBJECT_VARIOUS_TYPE_LABEL: + { + PX_Object_LabelSetText(PX_Object_GetVarious(pObject)->various, Text); + } + break; + case PX_OBJECT_VARIOUS_TYPE_SELECTBAR: + { + PX_ASSERT(); + return; + } + default: + break; + } + } + +} + +px_void PX_Object_VariousAddItem(PX_Object* pObject, const px_char* ItemText) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + else + { + PX_Object_Various* pDesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + switch (pDesc->type) + { + case PX_OBJECT_VARIOUS_TYPE_SELECTBAR: + { + PX_Object_SelectBarAddItem(pDesc->various, ItemText); + return; + } + default: + break; + } + } + PX_ASSERT(); + return; +} + +const px_char* PX_Object_VariousGetLabelText(PX_Object* pObject) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return PX_NULL; + } + return PX_Object_LabelGetText(PX_Object_GetVarious(pObject)->label); +} + +px_int PX_Object_VariousSelectBarGetCurrentIndex(PX_Object* pObject) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return PX_NULL; + } + else + { + PX_Object_Various* pDesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + if (pDesc->type==PX_OBJECT_VARIOUS_TYPE_SELECTBAR) + { + return PX_Object_SelectBarGetCurrentIndex(pDesc->various); + } + } + return 0; +} + +px_void PX_Object_VariousSetLabelText(PX_Object* pObject, const px_char* Text) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + PX_Object_LabelSetText(PX_Object_GetVarious(pObject)->label, Text); +} + +px_void PX_Object_VariousSetTextColor(PX_Object* pObject, px_color Color) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + PX_Object_EditSetTextColor(PX_Object_GetVarious(pObject)->various, Color); + PX_Object_LabelSetTextColor(PX_Object_GetVarious(pObject)->label, Color); +} + +px_void PX_Object_VariousSetBackgroundColor(PX_Object* pObject, px_color Color) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + else + { + PX_Object_Various* pDesc = PX_ObjectGetDesc(PX_Object_Various, pObject); + switch (pDesc->type) + { + case PX_OBJECT_VARIOUS_TYPE_EDIT: + { + PX_Object_LabelSetBackgroundColor(PX_Object_GetVarious(pObject)->label, Color); + PX_Object_EditSetBackgroundColor(PX_Object_GetVarious(pObject)->various, Color); + } + break; + case PX_OBJECT_VARIOUS_TYPE_LABEL: + { + PX_Object_LabelSetBackgroundColor(PX_Object_GetVarious(pObject)->label, Color); + PX_Object_LabelSetBackgroundColor(PX_Object_GetVarious(pObject)->various, Color); + } + break; + case PX_OBJECT_VARIOUS_TYPE_SELECTBAR: + { + PX_Object_LabelSetBackgroundColor(PX_Object_GetVarious(pObject)->label, Color); + PX_Object_SelectBarSetBackgroundColor(PX_Object_GetVarious(pObject)->various, Color); + } + break; + default: + break; + } + } +} + +px_void PX_Object_VariousSetAlign(PX_Object* pObject, PX_ALIGN Align) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + PX_Object_LabelSetAlign(PX_Object_GetVarious(pObject)->label, Align); +} + +px_void PX_Object_VariousSetString(PX_Object* pObject, const px_char* Text) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + PX_Object_VariousSetText(pObject, Text); +} + +px_void PX_Object_VariousSetFloat(PX_Object* pObject, float f) +{ + px_char content[32]; + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + PX_ftoa(f, content, sizeof(content), 6); + PX_Object_VariousSetText(pObject, content); +} + +px_void PX_Object_VariousSetInt(PX_Object* pObject, int i) +{ + px_char content[32]; + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + PX_itoa(i, content, sizeof(content),10); + + PX_Object_VariousSetText(pObject, content); +} + +px_void PX_Object_VariousSetBool(PX_Object* pObject, px_bool b) +{ + if (pObject->Type != PX_OBJECT_TYPE_VARIOUS) + { + PX_ASSERT(); + return; + } + if (b) + { + PX_Object_VariousSetText(pObject, "true"); + } + else + { + PX_Object_VariousSetText(pObject, "false"); + } +} + diff --git a/UI/PainterEngine/kernel/PX_Object_Various.h b/UI/PainterEngine/kernel/PX_Object_Various.h new file mode 100644 index 0000000..ceb9293 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Various.h @@ -0,0 +1,49 @@ +#ifndef PX_OBJECT_LABELCONTENT_H +#define PX_OBJECT_LABELCONTENT_H +#include "PX_Object.h" + +typedef enum +{ + PX_OBJECT_VARIOUS_EDIT_TYPE_INT, + PX_OBJECT_VARIOUS_EDIT_TYPE_FLOAT, + PX_OBJECT_VARIOUS_EDIT_TYPE_STRING, + PX_OBJECT_VARIOUS_EDIT_TYPE_HEX, +}PX_OBJECT_VARIOUS_EIDT_TYPE; + + +typedef enum +{ + PX_OBJECT_VARIOUS_TYPE_LABEL, + PX_OBJECT_VARIOUS_TYPE_EDIT, + PX_OBJECT_VARIOUS_TYPE_SELECTBAR, +}PX_OBJECT_VARIOUS_TYPE; + +typedef struct +{ + PX_Object* label; + PX_Object* various; + px_bool editable; + PX_OBJECT_VARIOUS_TYPE type; +}PX_Object_Various; + +px_void PX_Object_VariousEditSetMaxLength(PX_Object* pObject, px_int len); +PX_Object* PX_Object_VariousCreate(px_memorypool* mp, PX_Object* Parent, px_int x, px_int y, px_int Width, px_int Height, const px_char* Text, PX_OBJECT_VARIOUS_TYPE type, PX_FontModule* fm); +PX_Object_Various* PX_Object_GetVarious(PX_Object* pObject); +px_void PX_Object_VariousSetEditStyle(PX_Object* pObject, PX_OBJECT_VARIOUS_EIDT_TYPE type); + + +const px_char* PX_Object_VariousGetText(PX_Object* pObject); +const px_char* PX_Object_VariousGetLabelText(PX_Object* pObject); +px_void PX_Object_VariousSetText(PX_Object* pObject, const px_char* Text); +px_void PX_Object_VariousAddItem(PX_Object* pObject, const px_char* ItemText); + +px_void PX_Object_VariousSetLabelText(PX_Object* pObject, const px_char* Text); +px_void PX_Object_VariousSetTextColor(PX_Object* pObject, px_color Color); +px_void PX_Object_VariousSetBackgroundColor(PX_Object* pObject, px_color Color); +px_void PX_Object_VariousSetAlign(PX_Object* pObject, PX_ALIGN Align); + +px_void PX_Object_VariousSetString(PX_Object* pObject, const px_char* Text); +px_void PX_Object_VariousSetFloat(PX_Object* pObject, px_float f); +px_void PX_Object_VariousSetInt(PX_Object* pObject, px_int i); +px_void PX_Object_VariousSetBool(PX_Object* pObject, px_bool b); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.c b/UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.c new file mode 100644 index 0000000..2fe040c --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.c @@ -0,0 +1,1122 @@ +#include "PX_Object_VirtualKeyboard.h" +PX_Object_VirtualKeyBoard *PX_Object_GetVirtualKeyBoard(PX_Object *pObject) +{ + if (!pObject) + { + return PX_NULL; + } + if (pObject->Type==PX_OBJECT_TYPE_VKEYBOARD) + { + return (PX_Object_VirtualKeyBoard *)pObject->pObject; + } + return PX_NULL; +} + +px_void PX_Object_VirtualKeyBoardRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_int i; + px_int oftx; + px_int ofty; + PX_Object_VirtualKeyBoard *keyBoard=(PX_Object_VirtualKeyBoard *)pObject->pObject; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + oftx=(px_int)objx; + ofty=(px_int)objy; + + //clear background + PX_SurfaceClear(psurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth),(px_int)(objy+objHeight),keyBoard->backgroundColor); + + for (i=0;iKeys);i++) + { + //draw rect + + if (keyBoard->Keys[i].bDown||keyBoard->Keys[i].bhold) + { + PX_GeoDrawRect(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,keyBoard->pushColor); + } + else if (keyBoard->Keys[i].bCursor) + { + PX_GeoDrawRect(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,keyBoard->cursorColor); + } + + PX_GeoDrawBorder(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,1,keyBoard->borderColor); + + if (keyBoard->bShift||keyBoard->bUpper) + { + PX_FontModuleDrawText(psurface,PX_NULL,oftx+keyBoard->Keys[i].x+2,ofty+keyBoard->Keys[i].y+2,PX_ALIGN_LEFTTOP,keyBoard->Keys[i].u_key,keyBoard->borderColor); + } + else + { + PX_FontModuleDrawText(psurface,PX_NULL,oftx+keyBoard->Keys[i].x+2,ofty+keyBoard->Keys[i].y+2,PX_ALIGN_LEFTTOP,keyBoard->Keys[i].d_key,keyBoard->borderColor); + } + } + +} + +px_void PX_Object_VirtualKeyBoardOnCursorUp(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + px_int i; + PX_Object_VirtualKeyBoard *pkb=(PX_Object_VirtualKeyBoard *)pObject->pObject; + if (!PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + return; + } + + for (i=0;iKeys);i++) + { + + pkb->Keys[i].bDown=PX_FALSE; + } +} + +px_void PX_Object_VirtualKeyBoardOnCursorMove(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + px_int i; + px_int kh=(px_int)(pObject->Height/5); + PX_Object_VirtualKeyBoard *pkb=(PX_Object_VirtualKeyBoard *)pObject->pObject; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + x=(PX_Object_Event_GetCursorX(e)-objx); + y=(PX_Object_Event_GetCursorY(e)-objy); + + + for (i=0;iKeys);i++) + { + if(!pkb->Keys[i].bDown) + { + pkb->Keys[i].bCursor=PX_FALSE; + } + else + { + if (!PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + pkb->Keys[i].bDown=PX_FALSE; + } + } + + if (yKeys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<2*kh) + { + for (i=14;i<=27;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<3*kh) + { + for (i=28;i<=40;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<4*kh) + { + for (i=41;i<=52;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else + { + for (i=53;i<=55;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + + + +} + +px_void PX_Object_VirtualKeyBoardOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + px_int i; + px_int kh=(px_int)(pObject->Height/5); + PX_Object_VirtualKeyBoard *pkb=(PX_Object_VirtualKeyBoard *)pObject->pObject; + + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_Object_Event stringEvent; + + px_char strEve[2]={0}; + + stringEvent.Event=PX_OBJECT_EVENT_STRING; + PX_Object_Event_SetStringPtr(&stringEvent,strEve); + + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (!PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + PX_ObjectClearFocus(pObject); + return; + } + + PX_ObjectSetFocus(pObject); + + x=(PX_Object_Event_GetCursorX(e)-objx); + y=(PX_Object_Event_GetCursorY(e)-objy); + + + if (yKeys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else if (y<2*kh) + { + for (i=14;i<=27;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else if (y<3*kh) + { + for (i=28;i<=40;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else if (y<4*kh) + { + for (i=41;i<=52;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else + { + for (i=53;i<=55;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + + if (i==13) + { + pkb->functionCode=8; + if (pkb->LinkerObject) + { + strEve[0]=pkb->functionCode; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + } + else if(i==14) + { + pkb->functionCode='\t'; + if (pkb->LinkerObject) + { + strEve[0]=pkb->functionCode; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + } + else if(i==28) + { + pkb->bUpper=!pkb->bUpper; + if (pkb->bUpper) + { + pkb->Keys[28].bhold=PX_TRUE; + } + else + { + pkb->Keys[28].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==40) + { + pkb->functionCode='\r'; + if (pkb->LinkerObject) + { + strEve[0]=pkb->functionCode; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + } + else if(i==41) + { + pkb->bShift=!pkb->bShift; + if (pkb->bShift) + { + pkb->Keys[41].bhold=PX_TRUE; + } + else + { + pkb->Keys[41].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==52) + { + pkb->bShift=!pkb->bShift; + if (pkb->bShift) + { + pkb->Keys[52].bhold=PX_TRUE; + } + else + { + pkb->Keys[52].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==53) + { + pkb->bCtrl=!pkb->bCtrl; + if (pkb->bCtrl) + { + pkb->Keys[53].bhold=PX_TRUE; + } + else + { + pkb->Keys[53].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==54) + { + pkb->bAlt=!pkb->bAlt; + if (pkb->bAlt) + { + pkb->Keys[54].bhold=PX_TRUE; + } + else + { + pkb->Keys[54].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==55) + { + pkb->functionCode=' '; + if (pkb->LinkerObject) + { + strEve[0]=pkb->functionCode; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + } + else + { + if (pkb->bUpper||pkb->bShift) + { + pkb->functionCode=pkb->Keys[i].u_key[0]; + } + else + { + pkb->functionCode=pkb->Keys[i].d_key[0]; + } + + pkb->bShift=PX_FALSE; + pkb->Keys[52].bhold=PX_FALSE; + pkb->Keys[41].bhold=PX_FALSE; + if (pkb->LinkerObject) + { + strEve[0]=pkb->functionCode; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + } + + +} + +PX_Object* PX_Object_VirtualKeyBoardCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int width,px_int height) +{ + px_int i; + px_int kw,kh; + px_int xoffset,yoffset; + PX_Object_VirtualKeyBoard keyboard; + px_char line1_upper[]="~!@#$%^&*()_+"; + px_char line1_lower[]="`1234567890-="; + px_char line2_upper[]="QWERTYUIOP{}|"; + px_char line2_lower[]="qwertyuiop[]\\"; + px_char line3_upper[]="ASDFGHJKL:\""; + px_char line3_lower[]="asdfghjkl;'"; + px_char line4_upper[]="ZXCVBNM<>?"; + px_char line4_lower[]="zxcvbnm,./"; + + + PX_Object *keyboardObject; + + if (width<24*15||height<16*5) + { + return PX_NULL; + } + PX_memset(&keyboard,0,sizeof(PX_Object_VirtualKeyBoard)); + + kw=width/15; + kh=height/5; + + xoffset=0; + yoffset=0; + for (i=0;i<=12;i++) + { + keyboard.Keys[i].d_key[0]=line1_lower[i]; + keyboard.Keys[i].u_key[0]=line1_upper[i]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=kw; + } + + PX_strset(keyboard.Keys[13].d_key,"Back"); + PX_strset(keyboard.Keys[13].u_key,"Back"); + keyboard.Keys[13].x=xoffset; + keyboard.Keys[13].y=0; + keyboard.Keys[13].width=kw*2; + keyboard.Keys[13].height=kh; + + + xoffset=0; + yoffset=kh; + + PX_strset(keyboard.Keys[14].d_key,"Tab"); + PX_strset(keyboard.Keys[14].u_key,"Tab"); + + keyboard.Keys[14].x=xoffset; + keyboard.Keys[14].y=kh; + keyboard.Keys[14].width=(px_int)(kw*1.5); + keyboard.Keys[14].height=kh; + + xoffset+=keyboard.Keys[14].width; + + for (i=15;i<=26;i++) + { + keyboard.Keys[i].d_key[0]=line2_lower[i-15]; + keyboard.Keys[i].u_key[0]=line2_upper[i-15]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + PX_strset(keyboard.Keys[27].d_key,"\\"); + PX_strset(keyboard.Keys[27].u_key,"|"); + keyboard.Keys[27].x=xoffset; + keyboard.Keys[27].y=yoffset; + keyboard.Keys[27].width=(px_int)(kw*1.5);; + keyboard.Keys[27].height=kh; + + xoffset=0; + yoffset=2*kh; + + PX_strset(keyboard.Keys[28].d_key,"Upper"); + PX_strset(keyboard.Keys[28].u_key,"Upper"); + keyboard.Keys[28].x=xoffset; + keyboard.Keys[28].y=yoffset; + keyboard.Keys[28].width=(px_int)(kw*2); + keyboard.Keys[28].height=kh; + xoffset+=keyboard.Keys[28].width; + + for (i=29;i<=39;i++) + { + keyboard.Keys[i].d_key[0]=line3_lower[i-29]; + keyboard.Keys[i].u_key[0]=line3_upper[i-29]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + + PX_strset(keyboard.Keys[40].d_key,"Enter"); + PX_strset(keyboard.Keys[40].u_key,"Enter"); + keyboard.Keys[40].x=xoffset; + keyboard.Keys[40].y=yoffset; + keyboard.Keys[40].width=(px_int)(kw*2);; + keyboard.Keys[40].height=kh; + xoffset+=keyboard.Keys[40].width; + + xoffset=0; + yoffset=3*kh; + + PX_strset(keyboard.Keys[41].d_key,"Shift"); + PX_strset(keyboard.Keys[41].u_key,"Shift"); + keyboard.Keys[41].x=xoffset; + keyboard.Keys[41].y=yoffset; + keyboard.Keys[41].width=(px_int)(kw*2.5);; + keyboard.Keys[41].height=kh; + xoffset+=keyboard.Keys[41].width; + + for (i=42;i<=51;i++) + { + keyboard.Keys[i].d_key[0]=line4_lower[i-42]; + keyboard.Keys[i].u_key[0]=line4_upper[i-42]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + + PX_strset(keyboard.Keys[52].d_key,"Shift"); + PX_strset(keyboard.Keys[52].u_key,"Shift"); + keyboard.Keys[52].x=xoffset; + keyboard.Keys[52].y=yoffset; + keyboard.Keys[52].width=(px_int)(kw*2.5);; + keyboard.Keys[52].height=kh; + xoffset+=keyboard.Keys[52].width; + + xoffset=0; + yoffset=4*kh; + PX_strset(keyboard.Keys[53].d_key,"Ctrl"); + PX_strset(keyboard.Keys[53].u_key,"Ctrl"); + keyboard.Keys[53].x=xoffset; + keyboard.Keys[53].y=yoffset; + keyboard.Keys[53].width=(px_int)(kw*1.5);; + keyboard.Keys[53].height=kh; + xoffset+=keyboard.Keys[53].width; + + PX_strset(keyboard.Keys[54].d_key,"Alt"); + PX_strset(keyboard.Keys[54].u_key,"Alt"); + keyboard.Keys[54].x=xoffset; + keyboard.Keys[54].y=yoffset; + keyboard.Keys[54].width=(px_int)(kw*1.5);; + keyboard.Keys[54].height=kh; + xoffset+=keyboard.Keys[54].width; + + PX_strset(keyboard.Keys[55].d_key,""); + PX_strset(keyboard.Keys[55].u_key,""); + keyboard.Keys[55].x=xoffset; + keyboard.Keys[55].y=yoffset; + keyboard.Keys[55].width=(px_int)(kw*12);; + keyboard.Keys[55].height=kh; + xoffset+=keyboard.Keys[55].width; + + keyboard.cursorColor=PX_COLOR(255,192,192,192); + keyboard.pushColor=PX_COLOR(255,128,128,128); + keyboard.backgroundColor=PX_COLOR(255,255,255,255); + keyboard.borderColor=PX_COLOR(255,0,0,0); + + keyboard.LinkerObject=PX_NULL; + + keyboardObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)width,(px_float)height,0,PX_OBJECT_TYPE_VKEYBOARD,PX_NULL,PX_Object_VirtualKeyBoardRender,PX_NULL,&keyboard,sizeof(PX_Object_VirtualKeyBoard)); + + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_VirtualKeyBoardOnCursorMove,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_VirtualKeyBoardOnCursorMove,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_VirtualKeyBoardOnCursorDown,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_VirtualKeyBoardOnCursorUp,PX_NULL); + + keyboardObject->OnLostFocusReleaseEvent=PX_FALSE; + + return keyboardObject; +} + +px_void PX_Object_VirtualKeyBoardSetBackgroundColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->backgroundColor=Color; + } +} + +px_void PX_Object_VirtualKeyBoardSetBorderColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->borderColor=Color; + } +} + +px_void PX_Object_VirtualKeyBoardSetCursorColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->cursorColor=Color; + } +} + +px_void PX_Object_VirtualKeyBoardSetPushColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->pushColor=Color; + } +} + +px_char PX_Object_VirtualKeyBoardGetCode(PX_Object *pObject) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + px_char ch= pkb->functionCode; + pkb->functionCode=0; + return ch; + } + return 0; +} + +px_void PX_Object_VirtualKeyBoardSetLinkerObject(PX_Object *pObject,PX_Object *linker) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->LinkerObject=linker; + } +} + +////////////////////////////////////////////////////////////////////////// +//NumberKey +PX_Object_VirtualNumberKeyBoard *PX_Object_GetVirtualNumberKeyBoard(PX_Object *pObject) +{ + if (!pObject) + { + return PX_NULL; + } + if (pObject->Type==PX_OBJECT_TYPE_VNKEYBOARD) + { + return (PX_Object_VirtualNumberKeyBoard *)pObject->pObject; + } + return PX_NULL; +} + +px_void PX_Object_VirtualNumberKeyBoardRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + px_int i; + px_int oftx; + px_int ofty; + PX_Object_VirtualNumberKeyBoard *keyBoard=(PX_Object_VirtualNumberKeyBoard *)pObject->pObject; + + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + oftx=(px_int)objx; + ofty=(px_int)objy; + //clear background + PX_SurfaceClear(psurface,(px_int)objx,(px_int)objy,(px_int)(objx+objWidth-1),(px_int)(objy+objHeight-1),keyBoard->backgroundColor); + + for (i=0;iKeys);i++) + { + //draw rect + + if (keyBoard->Keys[i].bDown||keyBoard->Keys[i].bhold) + { + PX_GeoDrawRect(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,keyBoard->pushColor); + } + else if (keyBoard->Keys[i].bCursor) + { + PX_GeoDrawRect(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,keyBoard->cursorColor); + } + + PX_GeoDrawBorder(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,1,keyBoard->borderColor); + + PX_FontModuleDrawText(psurface,PX_NULL,oftx+keyBoard->Keys[i].x+2,ofty+keyBoard->Keys[i].y+2,PX_ALIGN_LEFTTOP,keyBoard->Keys[i].d_key,keyBoard->borderColor); + } + +} + +px_void PX_Object_VirtualNumberKeyBoardOnCursorUp(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + px_int i; + PX_Object_VirtualNumberKeyBoard *pkb=(PX_Object_VirtualNumberKeyBoard *)pObject->pObject; + if (!PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + return; + } + + for (i=0;iKeys);i++) + { + pkb->Keys[i].bDown=PX_FALSE; + } +} + +px_void PX_Object_VirtualNumberKeyBoardOnCursorMove(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + px_int i; + px_int kh=(px_int)(pObject->Height/5); + PX_Object_VirtualNumberKeyBoard *pkb=(PX_Object_VirtualNumberKeyBoard *)pObject->pObject; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + + x=(PX_Object_Event_GetCursorX(e)-objx); + y=(PX_Object_Event_GetCursorY(e)-objy); + + + for (i=0;iKeys);i++) + { + if(!pkb->Keys[i].bDown) + { + pkb->Keys[i].bCursor=PX_FALSE; + } + else + { + if (!PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + pkb->Keys[i].bDown=PX_FALSE; + } + } + + if (yKeys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<2*kh) + { + for (i=4;i<=7;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<3*kh) + { + for (i=7;i<=10;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<4*kh) + { + for (i=11;i<=14;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else + { + for (i=14;i<=16;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + + + +} + +px_void PX_Object_VirtualNumberKeyBoardOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_float x=PX_Object_Event_GetCursorX(e); + px_float y=PX_Object_Event_GetCursorY(e); + px_int i; + px_int kh=(px_int)(pObject->Height/5); + PX_Object_Event stringEvent; + PX_Object_VirtualKeyBoard *pkb=(PX_Object_VirtualKeyBoard *)pObject->pObject; + PX_Object_Event ke; + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + px_char strEve[2]={0}; + + stringEvent.Event=PX_OBJECT_EVENT_STRING; + PX_Object_Event_SetStringPtr(&stringEvent,strEve); + + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (!PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + return; + } + + x=(PX_Object_Event_GetCursorX(e)-objx); + y=(PX_Object_Event_GetCursorY(e)-objy); + ke.Event=PX_OBJECT_EVENT_KEYDOWN; + + if (yKeys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + if (i!=0) + { + + PX_Object_Event_SetKeyDown(&ke,pkb->Keys[i].u_key[0]); + PX_ObjectExecuteEvent(pObject,ke); + strEve[0]=pkb->Keys[i].u_key[0]; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + else + { + PX_Object_Event_SetKeyDown(&ke,8); + PX_ObjectExecuteEvent(pObject,ke); + strEve[0]=8; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + + break; + } + } + } + else if (y<2*kh) + { + for (i=4;i<=7;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + PX_Object_Event_SetKeyDown(&ke,pkb->Keys[i].u_key[0]); + PX_ObjectExecuteEvent(pObject,ke); + strEve[0]=pkb->Keys[i].u_key[0]; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + pkb->Keys[i].bDown=PX_TRUE; + + break; + } + } + } + else if (y<3*kh) + { + for (i=7;i<=10;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + PX_Object_Event_SetKeyDown(&ke,pkb->Keys[i].u_key[0]); + PX_ObjectExecuteEvent(pObject,ke); + strEve[0]=pkb->Keys[i].u_key[0]; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else if (y<4*kh) + { + for (i=11;i<=14;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + if (i!=14) + { + PX_Object_Event_SetKeyDown(&ke,pkb->Keys[i].u_key[0]); + PX_ObjectExecuteEvent(pObject,ke); + strEve[0]=pkb->Keys[i].u_key[0]; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + else + { + PX_Object_Event_SetKeyDown(&ke,'\r'); + PX_ObjectExecuteEvent(pObject,ke); + strEve[0]='\r'; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else + { + for (i=14;i<=16;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + if (i!=14) + { + PX_Object_Event_SetKeyDown(&ke,pkb->Keys[i].u_key[0]); + PX_ObjectExecuteEvent(pObject,ke); + strEve[0]=pkb->Keys[i].u_key[0]; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + else + { + PX_Object_Event_SetKeyDown(&ke,'\r'); + PX_ObjectExecuteEvent(pObject,ke); + strEve[0]='\r'; + PX_ObjectPostEvent(pkb->LinkerObject,stringEvent); + } + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } +} +PX_Object* PX_Object_VirtualNumberKeyBoardCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int width,px_int height) +{ + px_int i; + px_int kw,kh; + px_int xoffset,yoffset; + PX_Object_VirtualNumberKeyBoard keyboard; + px_char line1_lower[]=" /*-"; + px_char line2_lower[]="789+"; + px_char line3_lower[]="456"; + px_char line4_lower[]="123 "; + px_char line5_lower[]="0."; + + PX_Object *keyboardObject; + + if (width<16*4||height<16*5) + { + return PX_NULL; + } + PX_memset(&keyboard,0,sizeof(PX_Object_VirtualNumberKeyBoard)); + + kw=width/4; + kh=height/5; + + xoffset=0; + yoffset=0; + + for (i=0;i<=3;i++) + { + keyboard.Keys[i].d_key[0]=line1_lower[i]; + keyboard.Keys[i].u_key[0]=line1_lower[i]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=kw; + } + PX_strset(keyboard.Keys[0].d_key,"<--"); + PX_strset(keyboard.Keys[0].u_key,"<--"); + xoffset=0; + yoffset=1*kh; + + for (i=4;i<=7;i++) + { + keyboard.Keys[i].d_key[0]=line2_lower[i-4]; + keyboard.Keys[i].u_key[0]=line2_lower[i-4]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + keyboard.Keys[7].height*=2; + + xoffset=0; + yoffset=2*kh; + for (i=8;i<=10;i++) + { + keyboard.Keys[i].d_key[0]=line3_lower[i-8]; + keyboard.Keys[i].u_key[0]=line3_lower[i-8]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + + xoffset=0; + yoffset=3*kh; + for (i=11;i<=14;i++) + { + keyboard.Keys[i].d_key[0]=line4_lower[i-11]; + keyboard.Keys[i].u_key[0]=line4_lower[i-11]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + + + PX_strset(keyboard.Keys[14].d_key,"Enter"); + PX_strset(keyboard.Keys[14].u_key,"Enter"); + keyboard.Keys[14].height*=2; + + xoffset=0; + yoffset=4*kh; + + keyboard.Keys[15].d_key[0]='0'; + keyboard.Keys[15].u_key[0]='0'; + keyboard.Keys[15].x=xoffset; + keyboard.Keys[15].y=yoffset; + keyboard.Keys[15].width=kw*2; + keyboard.Keys[15].height=kh; + xoffset+=keyboard.Keys[15].width; + + + keyboard.Keys[16].d_key[0]='.'; + keyboard.Keys[16].u_key[0]='.'; + keyboard.Keys[16].x=xoffset; + keyboard.Keys[16].y=yoffset; + keyboard.Keys[16].width=kw; + keyboard.Keys[16].height=kh; + xoffset+=keyboard.Keys[16].width; + + keyboard.cursorColor=PX_COLOR(255,192,192,192); + keyboard.pushColor=PX_COLOR(255,128,128,128); + keyboard.backgroundColor=PX_COLOR(255,255,255,255); + keyboard.borderColor=PX_COLOR(255,0,0,0); + keyboard.LinkerObject=PX_NULL; + keyboardObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)width,(px_float)height,0,PX_OBJECT_TYPE_VNKEYBOARD,PX_NULL,PX_Object_VirtualNumberKeyBoardRender,PX_NULL,&keyboard,sizeof(PX_Object_VirtualNumberKeyBoard)); + + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_VirtualNumberKeyBoardOnCursorMove,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_VirtualNumberKeyBoardOnCursorMove,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_VirtualNumberKeyBoardOnCursorDown,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_VirtualNumberKeyBoardOnCursorUp,PX_NULL); + return keyboardObject; +} + +px_void PX_Object_VirtualNumberKeyBoardSetBackgroundColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualNumberKeyBoard *pkb=PX_Object_GetVirtualNumberKeyBoard(pObject); + if (pkb) + { + pkb->backgroundColor=Color; + } +} + +px_void PX_Object_VirtualNumberKeyBoardSetBorderColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualNumberKeyBoard *pkb=PX_Object_GetVirtualNumberKeyBoard(pObject); + if (pkb) + { + pkb->borderColor=Color; + } +} + +px_void PX_Object_VirtualNumberKeyBoardSetCursorColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualNumberKeyBoard *pkb=PX_Object_GetVirtualNumberKeyBoard(pObject); + if (pkb) + { + pkb->cursorColor=Color; + } +} + +px_void PX_Object_VirtualNumberKeyBoardSetPushColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualNumberKeyBoard *pkb=PX_Object_GetVirtualNumberKeyBoard(pObject); + if (pkb) + { + pkb->pushColor=Color; + } +} + +px_char PX_Object_VirtualNumberKeyBoardGetCode(PX_Object *pObject) +{ + PX_Object_VirtualNumberKeyBoard *pkb=PX_Object_GetVirtualNumberKeyBoard(pObject); + if (pkb) + { + px_char ch= pkb->functionCode; + pkb->functionCode=0; + return ch; + } + return 0; +} + +px_void PX_Object_VirtualNumberKeyBoardSetLinkerObject(PX_Object *pObject,PX_Object *linker) +{ + PX_Object_VirtualNumberKeyBoard *pkb=PX_Object_GetVirtualNumberKeyBoard(pObject); + if (pkb) + { + pkb->LinkerObject=linker; + } +} diff --git a/UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.h b/UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.h new file mode 100644 index 0000000..2a80386 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.h @@ -0,0 +1,56 @@ +#ifndef PX_OBJECT_VKBOARD_H +#define PX_OBJECT_VKBOARD_H +#include "PX_Object.h" +typedef struct +{ + px_int x,y,width,height; + px_char u_key[8]; + px_char d_key[8]; + px_bool bCursor; + px_bool bDown; + px_bool bhold; + +}PX_Object_VirtualKey; + +typedef struct +{ + PX_Object_VirtualKey Keys[14+14+13+12+3]; + px_color backgroundColor; + px_color borderColor; + px_color cursorColor; + px_color pushColor; + px_char functionCode; + PX_Object *LinkerObject; + px_bool bTab,bUpper,bShift,bCtrl,bAlt; +}PX_Object_VirtualKeyBoard; + +PX_Object* PX_Object_VirtualKeyBoardCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int width,px_int height); +px_void PX_Object_VirtualKeyBoardSetBackgroundColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualKeyBoardSetBorderColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualKeyBoardSetCursorColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualKeyBoardSetPushColor( PX_Object *pObject,px_color Color ); +px_char PX_Object_VirtualKeyBoardGetCode(PX_Object *pObject); +px_void PX_Object_VirtualKeyBoardSetLinkerObject(PX_Object *pObject,PX_Object *linker); + +typedef struct +{ + PX_Object_VirtualKey Keys[17]; + px_color backgroundColor; + px_color borderColor; + px_color cursorColor; + px_color pushColor; + px_char functionCode; + PX_Object *LinkerObject; +}PX_Object_VirtualNumberKeyBoard; + +PX_Object* PX_Object_VirtualNumberKeyBoardCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int width,px_int height); +px_void PX_Object_VirtualNumberKeyBoardSetBackgroundColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualNumberKeyBoardSetBorderColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualNumberKeyBoardSetCursorColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualNumberKeyBoardSetPushColor( PX_Object *pObject,px_color Color ); +px_char PX_Object_VirtualNumberKeyBoardGetCode(PX_Object *pObject); +px_void PX_Object_VirtualNumberKeyBoardSetLinkerObject(PX_Object *pObject,PX_Object *linker); + + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Object_Widget.c b/UI/PainterEngine/kernel/PX_Object_Widget.c new file mode 100644 index 0000000..9466ac8 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Widget.c @@ -0,0 +1,356 @@ +#include "PX_Object_Widget.h" + + +px_void PX_Object_WidgetFree(PX_Object *pObject) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + PX_ObjectDelete(pWidget->root); + PX_TextureFree(&pWidget->renderTarget); + } +} + +px_void PX_Object_WidgetLinkChild(PX_Object *parent,PX_Object *child) +{ + PX_ObjectAddClild(PX_Object_WidgetGetRoot(parent),child); +} + +px_void PX_Object_WidgetShow(PX_Object *pObject) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pObject->Visible=PX_TRUE; + PX_ObjectSetFocus(pObject); + } +} + +px_void PX_Object_WidgetHide(PX_Object *pObject) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pObject->Visible=PX_FALSE; + PX_ObjectReleaseFocus(pObject); + } +} + +px_void PX_Object_WidgetShowHideCloseButton(PX_Object *pObject,px_bool show) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pWidget->btn_close->Visible=show; + } +} + +static px_void PX_Object_WidgetOnButtonClose(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object *pWidgetObject=(PX_Object *)ptr; + PX_ObjectExecuteEvent(pWidgetObject, PX_OBJECT_BUILD_EVENT(PX_OBJECT_EVENT_CLOSE)); + PX_Object_WidgetHide(pWidgetObject); + +} + +px_void PX_Object_Widget_EventDispatcher(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_Event oe; + PX_Object_Widget *pwidget=PX_Object_GetWidget(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + + switch(e.Event) + { + case PX_OBJECT_EVENT_CURSORDOWN: + { + px_float x,y; + + if (PX_ObjectIsCursorInRegion(pObject,e)) + { + PX_ObjectSetFocus(pObject); + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + if (!pwidget->bDraging) + { + if (x>objx&&xWidth&&y>objy&&y<=objy+PX_OBJECT_WIDGET_BAR_SIZE) + { + if (pwidget->bmoveable) + { + pwidget->bDraging=PX_TRUE; + pwidget->lastDragPosition.x=x; + pwidget->lastDragPosition.y=y; + pwidget->lastDragPosition.z=0; + } + + } + } + pwidget->bevent_update=PX_TRUE; + } + else + { + if (!pwidget->bmodel) + { + PX_ObjectClearFocus(pObject); + } + + } + } + break; + case PX_OBJECT_EVENT_CURSORMOVE: + case PX_OBJECT_EVENT_CURSORUP: + { + pwidget->bDraging=PX_FALSE; + } + break; + case PX_OBJECT_EVENT_CURSORDRAG: + { + if (pwidget->bDraging) + { + px_float x,y; + x=PX_Object_Event_GetCursorX(e); + y=PX_Object_Event_GetCursorY(e); + + pObject->x+=x-pwidget->lastDragPosition.x; + pObject->y+=y-pwidget->lastDragPosition.y; + pwidget->lastDragPosition.x=x; + pwidget->lastDragPosition.y=y; + } + } + break; + default: + { + + } + break; + } + + oe=PX_Object_Event_CursorOffset(e,PX_POINT(-objx,-objy-PX_OBJECT_WIDGET_BAR_SIZE,0)); + PX_ObjectPostEvent(pwidget->root,oe); +} + +px_void PX_Object_WidgetRender(px_surface *psurface, PX_Object *pObject,px_uint elapsed) +{ + PX_Object_Widget *pwidget=PX_Object_GetWidget(pObject); + px_float objx,objy,objWidth,objHeight; + px_float inheritX,inheritY; + + PX_ObjectGetInheritXY(pObject,&inheritX,&inheritY); + + objx=(pObject->x+inheritX); + objy=(pObject->y+inheritY); + objWidth=pObject->Width; + objHeight=pObject->Height; + + if (!pObject->Visible) + { + return; + } + + if (pObject->Width!=(px_int)(pwidget->renderTarget.width)||pObject->Height!=(px_int)(pwidget->renderTarget.height+PX_OBJECT_WIDGET_BAR_SIZE)) + { + px_texture *old=&pwidget->renderTarget; + if(!PX_TextureCreate(pObject->mp,&pwidget->renderTarget,(px_int)pObject->Width,(px_int)pObject->Height+PX_OBJECT_WIDGET_BAR_SIZE))return; + PX_TextureFree(old); + } + + do + { + if (pwidget->event_optimization) + { + if (!pwidget->bevent_update) + { + break; + } + } + + pwidget->bevent_update=PX_FALSE; + PX_SurfaceClear(&pwidget->renderTarget,0,0,pwidget->renderTarget.width-1,pwidget->renderTarget.height-1,pwidget->backgroundcolor); + PX_ObjectRender(&pwidget->renderTarget,pwidget->root,elapsed); + PX_SurfaceRender(psurface,&pwidget->renderTarget,(px_int)objx,(px_int)objy+PX_OBJECT_WIDGET_BAR_SIZE,PX_ALIGN_LEFTTOP,PX_NULL); + } while (0); + + + PX_GeoDrawRect(psurface,(px_int)objx,(px_int)objy,(px_int)(objx+pObject->Width-1),(px_int)objy+PX_OBJECT_WIDGET_BAR_SIZE-1,pwidget->barColor); + + if (pObject->OnFocus) + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)(objx+pObject->Width-1),(px_int)(objy+pObject->Height-1),1,pwidget->focusColor); + else + PX_GeoDrawBorder(psurface,(px_int)objx,(px_int)objy,(px_int)(objx+pObject->Width-1),(px_int)(objy+pObject->Height-1),1,pwidget->borderColor); + + PX_FontModuleDrawText(psurface,pwidget->fontmodule,(px_int)objx+3,(px_int)objy+3,PX_ALIGN_LEFTTOP,pwidget->title,pwidget->fontcolor); + +} + + +PX_Object * PX_Object_WidgetCreate(px_memorypool *mp,PX_Object *Parent,int x,int y,int width,int height,const px_char title[],PX_FontModule *fontmodule) +{ + PX_Object *pObject; + PX_Object_Widget *pWidget=(PX_Object_Widget *)MP_Malloc(mp,sizeof(PX_Object_Widget)); + + if(width<=0) width=1; + if(height<=PX_OBJECT_WIDGET_BAR_SIZE)height=PX_OBJECT_WIDGET_BAR_SIZE+1; + + if (pWidget==PX_NULL) + { + return PX_NULL; + } + PX_memset(pWidget,0,sizeof(PX_Object_Widget)); + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)width,(px_float)height,0); + + if (pObject==PX_NULL) + { + + return PX_NULL; + } + + pObject->pObject=pWidget; + pObject->Type=PX_OBJECT_TYPE_WIDGET; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_WidgetFree; + pObject->Func_ObjectRender=PX_Object_WidgetRender; + pObject->OnLostFocusReleaseEvent=PX_FALSE; + + if (PX_strlen(title)title)-1) + { + PX_strcpy(pWidget->title,title,sizeof(pWidget->title)); + } + + if(!PX_TextureCreate(mp,&pWidget->renderTarget,width,height-PX_OBJECT_WIDGET_BAR_SIZE))return PX_FALSE; + + pWidget->root=PX_ObjectCreate(mp,PX_NULL,0,0,0,0,0,0); + pWidget->btn_close=PX_Object_PushButtonCreate(mp,pObject,width-PX_OBJECT_WIDGET_BAR_SIZE,3,PX_OBJECT_WIDGET_BAR_SIZE-6,PX_OBJECT_WIDGET_BAR_SIZE-6,"-",PX_NULL); + + if(!pWidget->btn_close) goto _ERROR; + pWidget->fontmodule=fontmodule; + + pWidget->backgroundcolor=PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR; + pWidget->barColor=PX_COLOR(255,48,48,48); + pWidget->borderColor=PX_OBJECT_UI_DEFAULT_BORDERCOLOR; + pWidget->focusColor=PX_COLOR_WHITE; + pWidget->bevent_update=PX_TRUE; + pWidget->bmoveable=PX_TRUE; + pWidget->fontcolor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + + PX_ObjectRegisterEvent(pWidget->btn_close,PX_OBJECT_EVENT_EXECUTE,PX_Object_WidgetOnButtonClose,pObject); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_ANY,PX_Object_Widget_EventDispatcher,PX_NULL); + + pObject->Func_ObjectLinkChild=PX_Object_WidgetLinkChild; + return pObject; +_ERROR: + if(pWidget) + MP_Free(mp,pWidget); + if(pObject) + PX_ObjectDelete(pObject); + return PX_FALSE; +} + +PX_Object_Widget * PX_Object_GetWidget(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_WIDGET) + { + return (PX_Object_Widget *)Object->pObject; + } + return PX_NULL; +} + +px_void PX_Object_WidgetSetModel(PX_Object *pObject,px_bool model) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pWidget->bmodel=model; + } +} + +PX_Object * PX_Object_WidgetGetRoot(PX_Object *pObject) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + return pWidget->root; + } + return PX_NULL; +} + +px_int PX_Object_WidgetGetRenderTargetHeight(PX_Object *pObject) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + return pWidget->renderTarget.height; + } + return 0; +} + +px_int PX_Object_WidgetGetRenderTargetWidth(PX_Object *pObject) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + return pWidget->renderTarget.width; + } + return 0; +} + +px_void PX_Object_WidgetSetBorderColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pWidget->borderColor=clr; + } +} + +px_void PX_Object_WidgetSetBarColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pWidget->barColor=clr; + } +} + +px_void PX_Object_WidgetSetBackgroundColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pWidget->backgroundcolor=clr; + } +} + +px_void PX_Object_WidgetSetFocusColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pWidget->focusColor=clr; + } +} + +px_void PX_Object_WidgetSetFontColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + pWidget->fontcolor=clr; + } +} + +px_void PX_Object_WidgetSetTitle(PX_Object *pObject,const px_char title[]) +{ + PX_Object_Widget *pWidget=PX_Object_GetWidget(pObject); + if (pWidget) + { + PX_strcpy(pWidget->title,title,sizeof(pWidget->title)); + } +} diff --git a/UI/PainterEngine/kernel/PX_Object_Widget.h b/UI/PainterEngine/kernel/PX_Object_Widget.h new file mode 100644 index 0000000..6f6cc4c --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Object_Widget.h @@ -0,0 +1,40 @@ +#ifndef PX_OBJECT_WIDGET_H +#define PX_OBJECT_WIDGET_H +#include "PX_Object.h" + +#define PX_OBJECT_WIDGET_TITLE_LEN 64 +#define PX_OBJECT_WIDGET_BAR_SIZE 28 +typedef struct +{ + PX_Object *root; + PX_Object *btn_close; + px_color borderColor,barColor,backgroundcolor,focusColor,fontcolor; + px_char title[PX_OBJECT_WIDGET_TITLE_LEN]; + PX_FontModule *fontmodule; + px_texture renderTarget;//optimization for render + px_point lastDragPosition; + px_bool bDraging; + px_bool bmoveable; + px_bool bmodel; + px_bool event_optimization; + px_bool bevent_update; +}PX_Object_Widget; + +PX_Object_Widget * PX_Object_GetWidget( PX_Object *Object ); +PX_Object * PX_Object_WidgetCreate(px_memorypool *mp,PX_Object *Parent,int x,int y,int width,int height,const px_char title[],PX_FontModule *fontmodule); +px_void PX_Object_WidgetShow(PX_Object *pObject); +px_void PX_Object_WidgetHide(PX_Object *pObject); +px_void PX_Object_WidgetShowHideCloseButton(PX_Object *pObject,px_bool show); +px_void PX_Object_WidgetSetModel(PX_Object *Object,px_bool model); +PX_Object * PX_Object_WidgetGetRoot(PX_Object *pObject); +px_int PX_Object_WidgetGetRenderTargetHeight(PX_Object *pObject); +px_int PX_Object_WidgetGetRenderTargetWidth(PX_Object *pObject); + +px_void PX_Object_WidgetSetBorderColor(PX_Object *pObject,px_color clr); +px_void PX_Object_WidgetSetBarColor(PX_Object *pObject,px_color clr); +px_void PX_Object_WidgetSetBackgroundColor(PX_Object *pObject,px_color clr); +px_void PX_Object_WidgetSetFocusColor(PX_Object *pObject,px_color clr); +px_void PX_Object_WidgetSetFontColor(PX_Object *pObject,px_color clr); +px_void PX_Object_WidgetSetTitle(PX_Object *pObject,const px_char title[]); +#endif + diff --git a/UI/PainterEngine/kernel/PX_Partical.c b/UI/PainterEngine/kernel/PX_Partical.c new file mode 100644 index 0000000..ba75a11 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Partical.c @@ -0,0 +1,392 @@ +#include "PX_Partical.h" + + + +px_void PX_ParticalLauncherInitializeDefault(PX_ParticalLauncher_InitializeInfo* info) +{ + PX_memset(info, 0, sizeof(PX_ParticalLauncher_InitializeInfo)); + info->ak = 1; + info->alive = -1; + info->alpha = 1; + info->atomsize = 1; + info->hdrB = 1; + info->hdrG = 1; + info->hdrR = 1; + info->launchCount = -1; + info->maxCount = 100; +} + +px_bool PX_ParticalLauncherCreate(PX_Partical_Launcher *launcher,px_memorypool *mp,PX_ParticalLauncher_InitializeInfo Info) +{ + PX_memset(launcher,0,sizeof(PX_Partical_Launcher)); + launcher->LauncherInfo=Info; + launcher->mp=mp; + + launcher->ParticalPool=(PX_Partical_Atom *)MP_Malloc(mp,sizeof(PX_Partical_Atom)*launcher->LauncherInfo.maxCount); + PX_memset(launcher->ParticalPool,0,sizeof(PX_Partical_Atom)*launcher->LauncherInfo.maxCount); + return PX_TRUE; +} + + +px_void PX_ParticalLauncherSetPosition(PX_Partical_Launcher *launcher,px_float x,px_float y,px_float z) +{ + launcher->LauncherInfo.position=PX_POINT(x,y,z); +} + +px_void PX_ParticalAtomUpdate(PX_Partical_Launcher *env,PX_Partical_Atom *pAtom,px_dword elapsed) +{ + px_int updateTime; + px_int atomTime; + px_point ak; + + if (elapsed==0) + { + return; + } + if (pAtom->reg_alive) + { + if (pAtom->reg_alivereg_alive=0; + return; + } + else + { + pAtom->reg_alive-=elapsed; + pAtom->elapsedTime+=elapsed; + } + + updateTime=elapsed; + + while (updateTime) + { + if (updateTime>PX_PARTICAL_ATOM_TIME) + { + atomTime=PX_PARTICAL_ATOM_TIME; + updateTime-=PX_PARTICAL_ATOM_TIME; + } + else + { + atomTime=updateTime; + updateTime=0; + } + + pAtom->reg_size+=pAtom->reg_sizeinc*atomTime/1000.f; + pAtom->reg_alpha+=pAtom->reg_alphainc*atomTime/1000.f; + pAtom->reg_currentrotation+=pAtom->reg_rotation*atomTime/1000.f; + + pAtom->velocity.x+=pAtom->reg_a.x*atomTime/1000.f; + pAtom->velocity.y+=pAtom->reg_a.y*atomTime/1000.f; + pAtom->velocity.z+=pAtom->reg_a.z*atomTime/1000.f; + + ak=PX_PointMul(pAtom->velocity,1.0f-pAtom->reg_ak); + PX_PointMul(ak,atomTime/1000.f); + pAtom->velocity.x-=ak.x; + pAtom->velocity.y-=ak.y; + pAtom->velocity.z-=ak.z; + + pAtom->position.x += pAtom->velocity.x * atomTime / 1000.f; + pAtom->position.y += pAtom->velocity.y * atomTime / 1000.f; + pAtom->position.z += pAtom->velocity.z * atomTime / 1000.f; + } + + + if (env->LauncherInfo.Update_func) + { + env->LauncherInfo.Update_func(env,pAtom); + } + + + if (pAtom->reg_size<0) + { + pAtom->reg_size=0; + } + + if (pAtom->hdrR<0) + { + pAtom->hdrR=0; + } + + if (pAtom->hdrG<0) + { + pAtom->hdrG=0; + } + + if (pAtom->hdrB<0) + { + pAtom->hdrB=0; + } + + if (pAtom->reg_alpha<0) + { + pAtom->reg_alpha=0; + } + } + + +} + +px_void PX_ParticalLauncherUpdate(PX_Partical_Launcher *launcher,px_dword elapsed) +{ + px_int i,j; + px_int redTime=0; + px_int gencount=0; + PX_Partical_Atom *pAtom; + + launcher->lefttopX=0; + launcher->leftTopY=0; + launcher->rightBottomX=0; + launcher->rightBottomY=0; + + for (i=0;i<(px_int)launcher->LauncherInfo.maxCount;i++) + { + pAtom=&launcher->ParticalPool[i]; + PX_ParticalAtomUpdate(launcher,pAtom,elapsed); + if (pAtom->reg_alive!=0) + { + if (launcher->ParticalPool[i].position.xlefttopX) + { + launcher->lefttopX=launcher->ParticalPool[i].position.x; + } + if (launcher->ParticalPool[i].position.x>launcher->rightBottomX) + { + launcher->rightBottomX=launcher->ParticalPool[i].position.x; + } + if (launcher->ParticalPool[i].position.yleftTopY) + { + launcher->leftTopY=launcher->ParticalPool[i].position.y; + } + if (launcher->ParticalPool[i].position.y>launcher->rightBottomY) + { + launcher->rightBottomY=launcher->ParticalPool[i].position.y; + } + } + } + if(launcher->LauncherInfo.launchCount!=0) + { + if (launcher->LauncherInfo.generateDuration!=0) + { + if (launcher->elapsed/launcher->LauncherInfo.generateDuration<((launcher->elapsed+elapsed)/launcher->LauncherInfo.generateDuration)) + { + gencount=(launcher->elapsed+elapsed)/launcher->LauncherInfo.generateDuration-launcher->elapsed/launcher->LauncherInfo.generateDuration; + redTime=launcher->elapsed+elapsed-(launcher->elapsed+launcher->LauncherInfo.generateDuration)/launcher->LauncherInfo.generateDuration*launcher->LauncherInfo.generateDuration; + } + else + gencount=0; + } + else + { + gencount=launcher->LauncherInfo.maxCount; + redTime=elapsed; + } + + + for (i=0;iLauncherInfo.launchCount!=0) + { + for (j=0;j<(px_int)launcher->LauncherInfo.maxCount;j++) + { + if (launcher->ParticalPool[j].reg_alive==0) + { + px_float dirAngle; + px_float var; + PX_memset(&launcher->ParticalPool[j],0,sizeof(launcher->ParticalPool[j])); + launcher->lastgenIndex = j; + //position + launcher->ParticalPool[j].position = launcher->LauncherInfo.position; + //velocity + dirAngle = (px_float)PX_RadianToAngle(PX_atan2(launcher->LauncherInfo.direction.y, launcher->LauncherInfo.direction.x)); + dirAngle += (px_float)PX_randRange(-launcher->LauncherInfo.deviation_rangAngle, launcher->LauncherInfo.deviation_rangAngle); + var = launcher->LauncherInfo.velocity; + var += (px_float)PX_randRange(-launcher->LauncherInfo.deviation_velocity, launcher->LauncherInfo.deviation_velocity); + launcher->ParticalPool[j].velocity = PX_POINT(PX_cos_angle(dirAngle), PX_sin_angle(dirAngle), 0); + launcher->ParticalPool[j].velocity = PX_PointMul(launcher->ParticalPool[j].velocity, var); + //size + var = launcher->LauncherInfo.atomsize; + var += (px_float)PX_randRange(-launcher->LauncherInfo.deviation_atomsize, launcher->LauncherInfo.deviation_atomsize); + if (var < 0)var = 0; + launcher->ParticalPool[j].reg_size = var; + //rotation + var = launcher->LauncherInfo.rotation; + var += (px_float)PX_randRange(-launcher->LauncherInfo.deviation_rotation, launcher->LauncherInfo.deviation_rotation); + launcher->ParticalPool[j].reg_rotation = var; + //alpha + var = launcher->LauncherInfo.alpha; + var += (px_float)PX_randRange(-launcher->LauncherInfo.deviation_alpha, launcher->LauncherInfo.deviation_alpha); + if (var < 0)var = 0; + launcher->ParticalPool[j].reg_alpha = var; + + //hdrR + var = launcher->LauncherInfo.hdrR; + var += (px_float)PX_randRange(-launcher->LauncherInfo.deviation_hdrR, launcher->LauncherInfo.deviation_hdrR); + if (var < 0)var = 0; + launcher->ParticalPool[j].hdrR = var; + + //hdrG + var = launcher->LauncherInfo.hdrG; + var += (px_float)PX_randRange(-launcher->LauncherInfo.deviation_hdrG, launcher->LauncherInfo.deviation_hdrG); + if (var < 0)var = 0; + launcher->ParticalPool[j].hdrG = var; + + //hdrB + var = launcher->LauncherInfo.hdrB; + var += (px_float)PX_randRange(-launcher->LauncherInfo.deviation_hdrB, launcher->LauncherInfo.deviation_hdrB); + if (var < 0)var = 0; + launcher->ParticalPool[j].hdrB = var; + + //size inc + launcher->ParticalPool[j].reg_sizeinc = launcher->LauncherInfo.sizeincrease; + //alpha inc + launcher->ParticalPool[j].reg_alphainc = launcher->LauncherInfo.alphaincrease; + //a + launcher->ParticalPool[j].reg_a = launcher->LauncherInfo.a; + //ak + launcher->ParticalPool[j].reg_ak = launcher->LauncherInfo.ak; + //alive + launcher->ParticalPool[j].reg_alive = launcher->LauncherInfo.alive; + //texture + launcher->ParticalPool[j].ptexture = launcher->LauncherInfo.tex; + + if (launcher->LauncherInfo.Create_func) + { + launcher->ParticalPool[j]=launcher->LauncherInfo.Create_func(launcher,launcher->genIndex); + } + + PX_ParticalAtomUpdate(launcher,&launcher->ParticalPool[j],redTime); + + if (launcher->ParticalPool[j].position.xlefttopX) + { + launcher->lefttopX=launcher->ParticalPool[j].position.x; + } + if (launcher->ParticalPool[j].position.x>launcher->rightBottomX) + { + launcher->rightBottomX=launcher->ParticalPool[j].position.x; + } + if (launcher->ParticalPool[j].position.yleftTopY) + { + launcher->leftTopY=launcher->ParticalPool[j].position.y; + } + if (launcher->ParticalPool[j].position.y>launcher->rightBottomY) + { + launcher->rightBottomY=launcher->ParticalPool[j].position.y; + } + if(redTime>launcher->LauncherInfo.generateDuration) + { + redTime-=launcher->LauncherInfo.generateDuration; + } + else + { + redTime=0; + } + + launcher->genIndex++; + if (launcher->LauncherInfo.launchCount>0) + { + launcher->LauncherInfo.launchCount--; + } + break; + } + } + } + + } + } + launcher->elapsed+=elapsed; +} + +px_bool PX_ParticalIsInSurfaceRegion(px_point atomPoint,px_int atomWidth,px_int atomHeight,px_float scale,px_int surfaceWidth,px_int surfaceHeight) +{ + px_rect atomRect; + px_rect surfaceRect; + atomRect.x=atomPoint.x; + atomRect.y=atomPoint.y; + atomRect.width=atomWidth*scale; + atomRect.height=atomHeight*scale; + + surfaceRect.x=0; + surfaceRect.y=0; + surfaceRect.height=(px_float)surfaceHeight; + surfaceRect.width=(px_float)surfaceWidth; + + return PX_isRectCrossRect(atomRect,surfaceRect); +} + +px_void PX_ParticalLauncherRender(px_surface *surface,PX_Partical_Launcher *launcher, px_dword elapsed) +{ + px_int m,i; + PX_TEXTURERENDER_BLEND blend; + PX_ParticalLauncherUpdate(launcher, elapsed); + + if (!PX_isRectCrossRect(PX_RECT(0,0,(px_float)surface->width,(px_float)surface->height),\ + PX_RECT(launcher->lefttopX+ launcher->LauncherInfo.position.x,launcher->leftTopY+ launcher->LauncherInfo.position.y,launcher->rightBottomX-launcher->lefttopX+1,launcher->rightBottomY-launcher->leftTopY+1))) + { + return; + } + + i = launcher->lastgenIndex + 1; + + for (m =0; m LauncherInfo.maxCount;m++,i++) + { + px_point pos; + if (i>= launcher->LauncherInfo.maxCount) + { + i = 0; + } + + pos=launcher->ParticalPool[i].position; + + if (!launcher->ParticalPool[i].ptexture) + { + continue; + } + + if (launcher->ParticalPool[i].reg_alive!=0&&launcher->ParticalPool[i].reg_size!=0) + { + if (launcher->ParticalPool[i].reg_size!=1.0||launcher->ParticalPool[i].reg_currentrotation!=0) + { + if (launcher->ParticalPool[i].reg_size<0) + { + launcher->ParticalPool[i].reg_size=0; + continue; + } + if(launcher->ParticalPool[i].reg_alpha==1.0&&launcher->ParticalPool[i].hdrR==1.0f&&launcher->ParticalPool[i].hdrG==1.0f&&launcher->ParticalPool[i].hdrB==1.0f) + PX_TextureRenderEx(surface,launcher->ParticalPool[i].ptexture,(px_int)(pos.x),(px_int)(pos.y),PX_ALIGN_CENTER,PX_NULL,launcher->ParticalPool[i].reg_size,launcher->ParticalPool[i].reg_currentrotation); + else + { + blend.alpha = launcher->ParticalPool[i].reg_alpha; + blend.hdr_R=launcher->ParticalPool[i].hdrR; + blend.hdr_G=launcher->ParticalPool[i].hdrG; + blend.hdr_B=launcher->ParticalPool[i].hdrB; + PX_TextureRenderEx(surface,launcher->ParticalPool[i].ptexture,(px_int)(pos.x),(px_int)(pos.y),PX_ALIGN_CENTER,&blend,launcher->ParticalPool[i].reg_size,launcher->ParticalPool[i].reg_currentrotation); + } + } + else + { + if(launcher->ParticalPool[i].reg_alpha==1.0&&launcher->ParticalPool[i].hdrR==1.0f&&launcher->ParticalPool[i].hdrG==1.0f&&launcher->ParticalPool[i].hdrB==1.0f) + PX_TextureRender(surface,launcher->ParticalPool[i].ptexture,(px_int)(pos.x),(px_int)(pos.y),PX_ALIGN_CENTER,PX_NULL); + else + { + blend.alpha=launcher->ParticalPool[i].reg_alpha; + blend.hdr_R=launcher->ParticalPool[i].hdrR; + blend.hdr_G=launcher->ParticalPool[i].hdrG; + blend.hdr_B=launcher->ParticalPool[i].hdrB; + PX_TextureRender(surface,launcher->ParticalPool[i].ptexture,(px_int)(pos.x),(px_int)(pos.y),PX_ALIGN_CENTER,&blend); + } + } + } + } + +} + +px_void PX_ParticalLauncherFree(PX_Partical_Launcher *env) +{ + MP_Free(env->mp,env->ParticalPool); +} + + +px_void PX_ParticalLauncherSetDirection(PX_Partical_Launcher *launcher,px_point direction) +{ + launcher->LauncherInfo.direction=PX_PointNormalization(direction); +} + diff --git a/UI/PainterEngine/kernel/PX_Partical.h b/UI/PainterEngine/kernel/PX_Partical.h new file mode 100644 index 0000000..da7b328 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Partical.h @@ -0,0 +1,101 @@ +#ifndef PX_PARTICAL_H +#define PX_PARTICAL_H +#include "../core/PX_Core.h" + +#define PX_PARTICAL_ATOM_TIME 16 + +typedef struct +{ + px_texture *ptexture; + // + px_point position; + px_point velocity; + px_dword elapsedTime; + + // + px_dword reg_alive; + px_float reg_size; + px_float reg_currentrotation; + px_float reg_alpha; + + px_float hdrR, hdrG, hdrB; + // + px_float reg_rotation; + px_float reg_sizeinc; + px_float reg_alphainc; + px_point reg_a; + px_float reg_ak; +}PX_Partical_Atom; + +struct _PX_Partical_Launcher; + +typedef PX_Partical_Atom (* PX_ParticalLauncher_CreateAtom)(struct _PX_Partical_Launcher *launcher,px_int index); +typedef px_void (* PX_ParticalLauncher_UpdateAtom)(struct _PX_Partical_Launcher *launcher,PX_Partical_Atom *pAtom); + + +typedef struct +{ + px_void *userptr; + px_texture *tex; + px_point position; + + px_point direction; + px_float deviation_rangAngle; + + px_float velocity; + px_float deviation_velocity; + + px_float atomsize; + px_float deviation_atomsize; + + px_float rotation; + px_float deviation_rotation; + + px_float alpha; + px_float deviation_alpha; + + px_float hdrR; + px_float deviation_hdrR; + + px_float hdrG; + px_float deviation_hdrG; + + px_float hdrB; + px_float deviation_hdrB; + + px_float sizeincrease; + px_float alphaincrease; + + px_point a; + px_float ak; + + px_int alive; + px_int generateDuration; + px_int maxCount; + px_int launchCount; + + PX_ParticalLauncher_CreateAtom Create_func; + PX_ParticalLauncher_UpdateAtom Update_func; +}PX_ParticalLauncher_InitializeInfo; + +typedef struct _PX_Partical_Launcher +{ + px_memorypool *mp; + PX_ParticalLauncher_InitializeInfo LauncherInfo; + + px_dword elapsed; + px_int genIndex; + px_int lastgenIndex; + PX_Partical_Atom *ParticalPool; + px_float lefttopX,leftTopY,rightBottomX,rightBottomY; +}PX_Partical_Launcher; + + +px_void PX_ParticalLauncherInitializeDefault(PX_ParticalLauncher_InitializeInfo* info); +px_bool PX_ParticalLauncherCreate(PX_Partical_Launcher *launcher,px_memorypool *mp,PX_ParticalLauncher_InitializeInfo Info); +px_void PX_ParticalLauncherSetPosition(PX_Partical_Launcher *launcher,px_float x,px_float y,px_float z); +px_void PX_ParticalLauncherSetDirection(PX_Partical_Launcher *launcher,px_point direction); +px_void PX_ParticalLauncherUpdate(PX_Partical_Launcher *launcher,px_dword elapsed); +px_void PX_ParticalLauncherRender(px_surface *surface,PX_Partical_Launcher *launcher,px_dword elapsed); +px_void PX_ParticalLauncherFree(PX_Partical_Launcher *launcher); +#endif diff --git a/UI/PainterEngine/kernel/PX_Resource.c b/UI/PainterEngine/kernel/PX_Resource.c new file mode 100644 index 0000000..c93b40d --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Resource.c @@ -0,0 +1,318 @@ +#include "PX_Resource.h" + +px_bool PX_ResourceLibraryInitialize(px_memorypool *mp,PX_ResourceLibrary *lib) +{ + lib->mp=mp; + PX_MapInitialize(mp,&lib->map); + PX_ListInitialize(mp,&lib->resources); + return PX_TRUE; +} + +px_bool PX_ResourceLibraryLoad(PX_ResourceLibrary *lib,PX_RESOURCE_TYPE type,px_byte *data,px_uint datasize,const px_char key[]) +{ + PX_Resource res; + res.Type=type; + + if (PX_ResourceLibraryGet(lib,key)) + { + PX_ResourceLibraryDelete(lib,key); + } + + switch (type) + { + case PX_RESOURCE_TYPE_NULL: + break; + case PX_RESOURCE_TYPE_TEXTURE: + if(!PX_TextureCreateFromMemory(lib->mp,data,datasize,&res.texture)) + return PX_FALSE; + break; + case PX_RESOURCE_TYPE_SHAPE: + if(!PX_ShapeCreateFromMemory(lib->mp,data,datasize,&res.shape)) + return PX_FALSE; + break; + case PX_RESOURCE_TYPE_SCRIPT: + /* + if (data[0]!='P'||data[1]!='A'||data[2]!='S'||data[3]!='M') + { + PX_SCRIPT_LIBRARY compilelib; + px_string asmcodeString; + px_memory bin; + MP_Reset(mptemp); + if(!PX_ScriptCompilerInit(&compilelib,mptemp)) + { + return PX_FALSE; + } + + if(!PX_ScriptCompilerLoad(&compilelib,(px_char *)data)) + { + PX_ScriptCompilerFree(&compilelib); + return PX_FALSE; + } + + PX_VectorInitialize(mptemp,&asmcodeString); + + + if(PX_ScriptCompilerCompile(&compilelib,"main",&asmcodeString,256)) + { + PX_ScriptCompilerFree(&compilelib); + + PX_ScriptAsmOptimization(&asmcodeString); + PX_MemoryInit(mptemp,&bin); + + if(!PX_ScriptAsmCompile(mptemp,asmcodeString.buffer,&bin)) + { + PX_MemoryFree(&bin); + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&compilelib); + return PX_FALSE; + } + + if(!PX_ScriptVM_InstanceInit(&res.Script,lib->mp,bin.buffer,bin.usedsize)) + { + PX_MemoryFree(&bin); + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&compilelib); + return PX_FALSE; + } + + PX_MemoryFree(&bin); + } + else + { + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&compilelib); + MP_Reset(mptemp); + return PX_FALSE; + } + + PX_StringFree(&asmcodeString); + + MP_Reset(mptemp); + } + else + */ + if(!PX_ScriptVM_InstanceInitialize(&res.Script,lib->mp,data,datasize)) + return PX_FALSE; + break; + case PX_RESOURCE_TYPE_ANIMATIONLIBRARY: + if(!PX_AnimationLibraryCreateFromMemory(lib->mp,&res.animationlibrary,data,datasize)) + return PX_FALSE; + break; + case PX_RESOURCE_TYPE_SOUND: + if (PX_WaveVerify(data,datasize)) + { + px_uint offset=0,pcmSize,woffset; + pcmSize=PX_WaveGetPCMSize(data,datasize); + + if (pcmSize!=0) + { + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)data; + PX_WAVE_FMT_BLOCK *pfmt_block; + res.sound.mp=lib->mp; + res.sound.buffer=(px_byte *)MP_Malloc(lib->mp,pcmSize); + res.sound.size=pcmSize; + res.sound.channel=PX_WaveGetChannel(data,pcmSize)==1?PX_SOUND_CHANNEL_ONE:PX_SOUND_CHANNEL_DOUBLE; + if (!res.sound.buffer) + { + return PX_FALSE; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(data+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=sizeof(PX_WAVE_RIFF_HEADER); + offset+=8; + offset+=pfmt_block->dwFmtSize; + + pcmSize=0; + woffset=0; + while (offsetszDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + PX_memcpy(res.sound.buffer+woffset,data+offset,pBlock->dwDataSize); + offset+=pBlock->dwDataSize; + woffset+=pBlock->dwDataSize; + } + } + else + return PX_FALSE; + } + else + { + return PX_FALSE; + } + break; + case PX_RESOURCE_TYPE_DATA: + PX_MemoryInitialize(lib->mp,&res.data); + if (!PX_MemoryCat(&res.data,data,datasize)) + { + PX_MemoryFree(&res.data); + return PX_FALSE; + } + break; + } + + PX_MapPut(&lib->map,key,PX_ListPush(&lib->resources,&res,sizeof(res))); + return PX_TRUE; +} + +px_void PX_ResourceLibraryFree(PX_ResourceLibrary *lib) +{ + PX_Resource *pres; + px_list_node *pNode=lib->resources.head; + while (pNode) + { + pres=(PX_Resource *)pNode->pdata; + switch(pres->Type) + { + case PX_RESOURCE_TYPE_NULL: + break; + case PX_RESOURCE_TYPE_TEXTURE: + PX_TextureFree(&pres->texture); + break; + case PX_RESOURCE_TYPE_SCRIPT: + PX_ScriptVM_InstanceFree(&pres->Script); + break; + case PX_RESOURCE_TYPE_ANIMATIONLIBRARY: + PX_AnimationLibraryFree(&pres->animationlibrary); + break; + case PX_RESOURCE_TYPE_DATA: + PX_MemoryFree(&pres->data); + break; + case PX_RESOURCE_TYPE_SOUND: + PX_SoundStaticDataFree(&pres->sound); + break; + case PX_RESOURCE_TYPE_SHAPE: + PX_ShapeFree(&pres->shape); + break; + } + pNode=pNode->pnext; + } + PX_ListFree(&lib->resources); + PX_MapFree(&lib->map); + +} + +PX_Resource * PX_ResourceLibraryGet(PX_ResourceLibrary *lib,const px_char key[]) +{ + return (PX_Resource *)PX_MapGet(&lib->map,key); +} + +px_bool PX_ResourceLibraryAddTexture(PX_ResourceLibrary *lib,const px_char key[],px_texture *pTexture) +{ + PX_Resource res; + res.Type=PX_RESOURCE_TYPE_TEXTURE; + if(!PX_TextureCopy(lib->mp,pTexture,&res.texture))return PX_FALSE; + PX_MapPut(&lib->map,key,PX_ListPush(&lib->resources,&res,sizeof(res))); + return PX_TRUE; +} + +px_void PX_ResourceLibraryDelete(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource * pres,*pnodeRes; + + pres=(PX_Resource *)PX_MapGet(&lib->map,key); + if (pres) + { + px_list_node *pNode=lib->resources.head; + while (pNode) + { + pnodeRes=(PX_Resource *)pNode->pdata; + if (pnodeRes==pres) + { + switch(pres->Type) + { + case PX_RESOURCE_TYPE_NULL: + break; + case PX_RESOURCE_TYPE_TEXTURE: + PX_TextureFree(&pres->texture); + break; + case PX_RESOURCE_TYPE_SCRIPT: + PX_ScriptVM_InstanceFree(&pres->Script); + break; + case PX_RESOURCE_TYPE_ANIMATIONLIBRARY: + PX_AnimationLibraryFree(&pres->animationlibrary); + break; + case PX_RESOURCE_TYPE_DATA: + PX_MemoryFree(&pres->data); + break; + case PX_RESOURCE_TYPE_SOUND: + PX_SoundStaticDataFree(&pres->sound); + break; + case PX_RESOURCE_TYPE_SHAPE: + PX_ShapeFree(&pres->shape); + break; + } + PX_ListPop(&lib->resources,pNode); + PX_MapErase(&lib->map,key); + return; + } + pNode=pNode->pnext; + } + } +} + +px_texture * PX_ResourceLibraryGetTexture(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_TEXTURE) + { + return &pres->texture; + } + return PX_NULL; +} + +px_shape * PX_ResourceLibraryGetShape(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_SHAPE) + { + return &pres->shape; + } + return PX_NULL; +} + +PX_AnimationLibrary * PX_ResourceLibraryGetAnimationLibrary(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_ANIMATIONLIBRARY) + { + return &pres->animationlibrary; + } + return PX_NULL; +} + +PX_ScriptVM_Instance * PX_ResourceLibraryGetScript(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_SCRIPT) + { + return &pres->Script; + } + return PX_NULL; +} + +px_memory * PX_ResourceLibraryGetData(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_DATA) + { + return &pres->data; + } + return PX_NULL; +} + +PX_SoundData * PX_ResourceLibraryGetSound(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_SOUND) + { + return &pres->sound; + } + return PX_NULL; +} + diff --git a/UI/PainterEngine/kernel/PX_Resource.h b/UI/PainterEngine/kernel/PX_Resource.h new file mode 100644 index 0000000..b2c0b8e --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Resource.h @@ -0,0 +1,63 @@ +#ifndef PX_RESOURCE_H +#define PX_RESOURCE_H + +#include "../core/PX_Core.h" +#include "PX_Script_VM.h" +#include "PX_Animation.h" +#include "PX_Partical.h" +#include "PX_Script_Interpreter.h" +#include "PX_Script_ASMCompiler.h" + +typedef enum +{ + PX_RESOURCE_TYPE_NULL, + PX_RESOURCE_TYPE_ANIMATIONLIBRARY, + PX_RESOURCE_TYPE_SCRIPT, + PX_RESOURCE_TYPE_TEXTURE, + PX_RESOURCE_TYPE_SHAPE, + PX_RESOURCE_TYPE_SOUND, + PX_RESOURCE_TYPE_DATA, +}PX_RESOURCE_TYPE; + + +typedef struct +{ + PX_RESOURCE_TYPE Type; + union + { + px_texture texture; + px_shape shape; + PX_AnimationLibrary animationlibrary; + PX_ScriptVM_Instance Script; + PX_SoundData sound; + px_memory data; + }; +}PX_Resource; + +typedef struct +{ + px_memorypool *mp; + px_list resources; + px_map map; +}PX_ResourceLibrary; + + + +px_bool PX_ResourceLibraryInitialize(px_memorypool *mp,PX_ResourceLibrary *lib); +px_bool PX_ResourceLibraryLoad(PX_ResourceLibrary *lib,PX_RESOURCE_TYPE type,px_byte *data,px_uint datasize,const px_char key[]); +px_bool PX_ResourceLibraryAddTexture(PX_ResourceLibrary *lib,const px_char key[],px_texture *pTexture); +PX_Resource * PX_ResourceLibraryGet(PX_ResourceLibrary *lib,const px_char key[]); +px_texture *PX_ResourceLibraryGetTexture(PX_ResourceLibrary *lib,const px_char key[]); +px_shape *PX_ResourceLibraryGetShape(PX_ResourceLibrary *lib,const px_char key[]); +PX_AnimationLibrary *PX_ResourceLibraryGetAnimationLibrary(PX_ResourceLibrary *lib,const px_char key[]); +PX_ScriptVM_Instance *PX_ResourceLibraryGetScript(PX_ResourceLibrary *lib,const px_char key[]); +PX_SoundData *PX_ResourceLibraryGetSound(PX_ResourceLibrary *lib,const px_char key[]); +px_memory *PX_ResourceLibraryGetData(PX_ResourceLibrary *lib,const px_char key[]); + +px_void PX_ResourceLibraryDelete(PX_ResourceLibrary *lib,const px_char key[]); +px_void PX_ResourceLibraryFree(PX_ResourceLibrary *lib); + + +#endif + + diff --git a/UI/PainterEngine/kernel/PX_ScriptCore.h b/UI/PainterEngine/kernel/PX_ScriptCore.h new file mode 100644 index 0000000..6f552ad --- /dev/null +++ b/UI/PainterEngine/kernel/PX_ScriptCore.h @@ -0,0 +1,343 @@ +#ifndef __PX_SCRIPT_H +#define __PX_SCRIPT_H +#include "../core/PX_Core.h" +#include "PX_Lexer.h" + +//special register IP,SP,BP,rRET + +//register r0~r15 + + + +//Pretreatment +//#include [name] + +//special +//ASSUME [name] [name] +//.GLOBAL [int] +//.STACK [int] +//.THREAD [int] + +//instructions + + +//mov [reg,local,global],[num,string,reg,local,global] + +//add [reg,local,global],[num,reg,local,global] +//sub [reg,local,global],[num,reg,local,global] +//div [reg,local,global],[num,reg,local,global] +//mul [reg,local,global],[num,reg,local,global] +//mod [reg,local,global],[int,reg,local,global] +//shl [reg,local,global],[int,reg,local,global] +//shr [reg,local,global],[int,reg,local,global] +//or [reg,local,global],[num,reg,local,global] +//xor [reg,local,global],[num,reg,local,global] +//pow [reg,local,global],[num,reg,local,global] +//sin [reg,local,global],[num,reg,local,global] +//cos [reg,local,global],[num,reg,local,global] +//int [reg,local,global] +//flt [reg,local,global] + +//strlen [reg,local,global],[reg,local,global,string] +//strcat [reg,local,global],[reg,local,global,string] +//strrep [reg,local,global],[reg,local,global,string],[reg,local,global,string] +//strchr [reg,local,global],[reg,local,global,string],[reg,local,global,int] +//strtoi [reg,local,global],[reg,local,global,string] +//strtof [reg,local,global],[reg,local,global,string] +//strfri [reg,local,global],[reg,local,global,int] +//strfrf [reg,local,global],[reg,local,global,float] +//strset [reg,local,global],[reg,local,global,int],[reg,local,global,string,int] +//strtmem [reg,local,global] +//asc [reg,local,global],[reg,local,global,string] + + +//membyte [reg,local,global],[reg,local,global,int],[reg,local,global,memory] +//memset [reg,local,global],[reg,local,global,int],[reg,local,global,memory] +//memcpy [reg,local,global],[reg,local,global,int],[reg,local,global,memory] +//memfind [reg,local,global],[reg,local,global,memory],[reg,local,global,memory] +//memlen [reg,local,global],[reg,local,global,memory] +//memcat [reg,local,global],[reg,local,global,memory] +//memtstr [reg,local,global] + +//not [reg,local,global] +//inv [reg,local,global] + +//jmp [reg,num,local,global,label] +//je [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jne [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jl [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jle [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jg [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jge [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] + +//call [reg,int,local,global,label,host] + +//push [num,reg,local,global] +//pop [reg,local,global] + +//ret + +//binary format +//opcode 1 byte +//optype 3 byte +//operand [0,3] byte + +#define PX_SCRIPT_MAX_FUNC_NAME_SIZE 32 + +enum PX_SCRIPT_ASM_INSTR_OPCODE +{ + PX_SCRIPT_ASM_INSTR_OPCODE_MOV=1, + PX_SCRIPT_ASM_INSTR_OPCODE_ADD, + PX_SCRIPT_ASM_INSTR_OPCODE_SUB, + PX_SCRIPT_ASM_INSTR_OPCODE_DIV, + PX_SCRIPT_ASM_INSTR_OPCODE_MUL, + PX_SCRIPT_ASM_INSTR_OPCODE_MOD, + PX_SCRIPT_ASM_INSTR_OPCODE_SHL, + PX_SCRIPT_ASM_INSTR_OPCODE_SHR, + PX_SCRIPT_ASM_INSTR_OPCODE_AND, + PX_SCRIPT_ASM_INSTR_OPCODE_OR, + PX_SCRIPT_ASM_INSTR_OPCODE_XOR, + PX_SCRIPT_ASM_INSTR_OPCODE_ANDL, + PX_SCRIPT_ASM_INSTR_OPCODE_ORL, + PX_SCRIPT_ASM_INSTR_OPCODE_POW, + PX_SCRIPT_ASM_INSTR_OPCODE_SIN, + PX_SCRIPT_ASM_INSTR_OPCODE_COS, + PX_SCRIPT_ASM_INSTR_OPCODE_INT, + PX_SCRIPT_ASM_INSTR_OPCODE_FLT, + PX_SCRIPT_ASM_INSTR_OPCODE_STRLEN, + PX_SCRIPT_ASM_INSTR_OPCODE_STRCAT, + PX_SCRIPT_ASM_INSTR_OPCODE_STRREP, + PX_SCRIPT_ASM_INSTR_OPCODE_STRCHR, + PX_SCRIPT_ASM_INSTR_OPCODE_STRTOI, + PX_SCRIPT_ASM_INSTR_OPCODE_STRTOF, + PX_SCRIPT_ASM_INSTR_OPCODE_STRFRI, + PX_SCRIPT_ASM_INSTR_OPCODE_STRFRF, + PX_SCRIPT_ASM_INSTR_OPCODE_STRSET, + PX_SCRIPT_ASM_INSTR_OPCODE_STRFIND, + PX_SCRIPT_ASM_INSTR_OPCODE_STRTMEM, + PX_SCRIPT_ASM_INSTR_OPCODE_ASC, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMBYTE, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMSET, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMFIND, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMLEN, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMCAT, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMTSTR, + PX_SCRIPT_ASM_INSTR_OPCODE_DATACPY, + PX_SCRIPT_ASM_INSTR_OPCODE_INV, + PX_SCRIPT_ASM_INSTR_OPCODE_NOT, + PX_SCRIPT_ASM_INSTR_OPCODE_NEG, + PX_SCRIPT_ASM_INSTR_OPCODE_JMP, + PX_SCRIPT_ASM_INSTR_OPCODE_JE, + PX_SCRIPT_ASM_INSTR_OPCODE_JNE, + PX_SCRIPT_ASM_INSTR_OPCODE_JGE, + PX_SCRIPT_ASM_INSTR_OPCODE_JLE, + PX_SCRIPT_ASM_INSTR_OPCODE_JG, + PX_SCRIPT_ASM_INSTR_OPCODE_JL, + + PX_SCRIPT_ASM_INSTR_OPCODE_LGE, + PX_SCRIPT_ASM_INSTR_OPCODE_LGNE, + PX_SCRIPT_ASM_INSTR_OPCODE_LGZ, + PX_SCRIPT_ASM_INSTR_OPCODE_LGGZ, + PX_SCRIPT_ASM_INSTR_OPCODE_LGGEZ, + PX_SCRIPT_ASM_INSTR_OPCODE_LGLZ, + PX_SCRIPT_ASM_INSTR_OPCODE_LGLEZ, + + PX_SCRIPT_ASM_INSTR_OPCODE_CALL, + PX_SCRIPT_ASM_INSTR_OPCODE_PUSH, + PX_SCRIPT_ASM_INSTR_OPCODE_POP, + PX_SCRIPT_ASM_INSTR_OPCODE_POPN, + PX_SCRIPT_ASM_INSTR_OPCODE_ADR, + PX_SCRIPT_ASM_INSTR_OPCODE_RET, + + PX_SCRIPT_ASM_INSTR_OPCODE_NOP, + PX_SCRIPT_ASM_INSTR_OPCODE_BPX, + PX_SCRIPT_ASM_INSTR_OPCODE_WAIT, + PX_SCRIPT_ASM_INSTR_OPCODE_SIGNAL, +}; + +enum PX_SCRIPT_ASM_OPTYPE +{ + PX_SCRIPT_ASM_OPTYPE_INT, + PX_SCRIPT_ASM_OPTYPE_FLOAT, + PX_SCRIPT_ASM_OPTYPE_REG, + PX_SCRIPT_ASM_OPTYPE_LOCAL,//mnemonic + PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST, + PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF, + PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF, + PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF, + PX_SCRIPT_ASM_OPTYPE_GLOBAL,//mnemonic + PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST, + PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF, + PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF, + PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF, + PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF, + PX_SCRIPT_ASM_OPTYPE_STRING, + PX_SCRIPT_ASM_OPTYPE_LABEL,//mnemonic + PX_SCRIPT_ASM_OPTYPE_HOST,//mnemonic + PX_SCRIPT_ASM_OPTYPE_MEMORY, + PX_SCRIPT_ASM_OPTYPE_BP, + PX_SCRIPT_ASM_OPTYPE_SP, + PX_SCRIPT_ASM_OPTYPE_IP, +}; +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW 0 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT 1 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_FLOAT 2 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM 3 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG 4 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL 8 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL 16 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING 32 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL 64 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST 128 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY 256 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP 512 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP 1024 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP 2048 + +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_TOKEN 0xffffffff + + +#define __PX_SCRIPT_ASM_MNEMONIC_NAME_LEN 48 +#define __PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN 16 + +typedef struct __PX_SCRIPT_EXPORT_FUNCTION +{ + px_char name[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + px_int Addr; +}PX_SCRIPT_EXPORT_FUNCTION; + +typedef struct __PX_SCRIPT_ASM_LABEL_NODE +{ + px_char mnemonic[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + px_bool bfunction; + px_int binaddr; +}PX_SCRIPT_ASM_LABEL_NODE; + + +typedef struct __PX_SCRIPT_ASM_ASSUME_NODE +{ + px_string name; + px_string assume; + +}PX_SCRIPT_ASM_ASSUME_NODE; + + +typedef struct __PX_SCRIPT_ASM_STRING_NODE +{ + px_string str; + px_int addr; +}PX_SCRIPT_ASM_STRING_NODE; + +typedef struct __PX_SCRIPT_ASM_MEMORY_NODE +{ + px_memory mem; + px_int addr; +}PX_SCRIPT_ASM_MEMORY_NODE; + +typedef struct __PX_SCRIPT_ASM_HOST_NODE +{ + px_char name[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + const px_void *map; + px_void *userptr; +}PX_SCRIPT_ASM_HOST_NODE; + +typedef struct __PX_SCRIPT_ASM_GRAMMAR_INSTR +{ + px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN]; + px_char opcode; + px_char paramCount; + px_int operandAccTypes[3]; +}PX_SCRIPT_ASM_GRAMMAR_INSTR; + +typedef struct __PX_SCRIPT_ASM_INSTR_BIN +{ + px_char opCode; + px_char optype[3]; + px_dword param[3]; + px_dword addr; + px_int opcount; +}PX_SCRIPT_ASM_INSTR_BIN; + + +typedef struct __PX_SCRIPT_ASM_COMPILER +{ + px_lexer lexer; + px_vector StreamTable; + px_list LabelTable; + px_list assumeTable; + px_list StringTable; + px_list memoriesTable; + px_list HostTable; + px_list GrammarInstrTable; + px_int globalsize; + px_int stacksize; + px_int threadcount; + px_memorypool *mp; + +}PX_SCRIPT_ASM_COMPILER; + + +typedef struct __PX_SCRIPT_ASM_HEADER +{ + ////////////////////////////////////////////////////////////////////////// + //8 bytes check + px_dword magic; + px_dword CRC; + ////////////////////////////////////////////////////////////////////////// + px_dword stacksize; + px_dword globalsize; + px_dword threadcount; + px_dword oftbin; + px_dword oftfunc; + px_dword funcCount; + px_dword ofthost; + px_dword oftmem; + px_dword memsize; + px_dword hostCount; + px_dword oftString; + px_dword stringSize; + px_dword binsize; + px_dword reserved[6]; +}PX_SCRIPT_ASM_HEADER; + +typedef enum __PX_SCRIPT_VM_VARIABLE_TYPE +{ + PX_SCRIPTVM_VARIABLE_TYPE_INT, + PX_SCRIPTVM_VARIABLE_TYPE_FLOAT, + PX_SCRIPTVM_VARIABLE_TYPE_STRING, + PX_SCRIPTVM_VARIABLE_TYPE_MEMORY, +}PX_SCRIPTVM_VARIABLE_TYPE; + +#define PX_SCRIPTVM_VARIABLE_TYPE_PTR PX_SCRIPTVM_VARIABLE_TYPE_INT + +typedef struct __PX_SCRIPT_VM_VARIABLE +{ + px_int type; + union + { + px_char _byte; + px_char _char; + px_word _word; + px_dword _dword; + px_short _short; + px_int _int; + px_uint _uint; + px_float _float; + px_string _string; + px_memory _memory; + }; +}PX_SCRIPTVM_VARIABLE; + +typedef struct __PX_ASM_GRAMMAR +{ + px_lexer *lexer; + px_memorypool *mp; + px_bool bSkipSpacer; + px_bool bSkipNewline; + px_bool bLowercase; + px_vector V_SentenceMatcher; +}PX_ASM_Grammar; + +#endif + diff --git a/UI/PainterEngine/kernel/PX_Script_ASMCompiler.c b/UI/PainterEngine/kernel/PX_Script_ASMCompiler.c new file mode 100644 index 0000000..7d346cd --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Script_ASMCompiler.c @@ -0,0 +1,2004 @@ +#include "PX_Script_ASMCompiler.h" + +static px_char PX_Script_ASMError[128]; + +static px_void PX_ScriptAsmError(px_lexer *lexer,px_char *err) +{ + lexer->Sources[lexer->SourceOffset]='\0'; + + PX_Script_ASMError[0]='\0'; + if (lexer->SourceOffset>96) + { + PX_strcpy(PX_Script_ASMError,lexer->Sources+lexer->SourceOffset-96,96); + } + else + { + PX_strcpy(PX_Script_ASMError,lexer->Sources,96); + } + + PX_LOG(err); +} + +px_int PX_ScriptAsm_atoi(px_char *str) +{ + if (str[0]=='0'&&str[1]=='X') + { + return PX_htoi(str); + } + return PX_atoi(str); +} + +px_bool PX_ScriptAsm_isInt(px_char token[]) +{ + px_int i; + if (token[0]=='0'&&(token[1]=='X')) + { + i=2; + while (token[i]) + { + if ((token[i]>='0'&&token[i]<='9')||(token[i]>='A'&&token[i]<='F')) + { + i++; + continue; + } + else + { + return PX_FALSE; + } + + if (i>10) + { + return PX_FALSE; + } + } + return PX_TRUE; + } + return PX_strIsInt(token); +} + +static px_void PX_ScriptAsmRegistInstr(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode,px_int accType[],px_char paramcout) +{ + px_int i=0; + PX_SCRIPT_ASM_GRAMMAR_INSTR instr; + + PX_strcpy(instr.mnemonic,mnemonic,sizeof(instr.mnemonic)); + instr.opcode=opcode; + instr.paramCount=paramcout; + + for (i=0;iGrammarInstrTable,&instr,sizeof(instr)); +} +static px_void PX_ScriptAsmStringConvert(px_string *str) +{ + px_int i,j; + for (i=0;ibuffer);i++) + { + if (str->buffer[i]=='\\') + { + switch (str->buffer[i+1]) + { + case '\\': + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + case 'r': + case 'R': + str->buffer[i]='\r'; + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + case 'n': + case 'N': + str->buffer[i]='\n'; + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + case 't': + case 'T': + str->buffer[i]='\t'; + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + case '"': + str->buffer[i]='"'; + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + default: + break; + } + } + } +} + + +PX_LEXER_LEXEME_TYPE PX_ScriptAsmNexLexeme(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while (PX_LEXER_LEXEME_TYPE_SPACER==(type=PX_LexerGetNextLexeme(lexer))); + if (PX_strlen(lexer->CurLexeme.buffer)>__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN-1) + { + if(type!=PX_LEXER_LEXEME_TYPE_CONATINER) + { + PX_ScriptAsmError(lexer,"Script ASM Compiler:Token too long error"); + return PX_LEXER_LEXEME_TYPE_ERR; + } + } + return type; + +} + +px_bool PX_ScriptAsmIsValidToken(px_char *token) +{ + if (token[0]=='\0'||PX_charIsNumeric(token[0])) + { + return PX_FALSE; + } + while (*token) + { + if ((*token>='A'&&*token<='Z')||*token=='_'||PX_charIsNumeric(*token)) + { + token++; + continue; + } + return PX_FALSE; + } + return PX_TRUE; +} + +px_int PX_ScriptAsmGetGlobalIndex(px_char * mne) +{ + px_char data[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + PX_strcpy(data,mne,sizeof(data)); + data[PX_strlen(data)-1]='\0'; + return PX_ScriptAsm_atoi(data+sizeof("GLOBAL[")); +} + +px_int PX_ScriptAsmGetStackIndex(px_char * mne) +{ + px_char data[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + PX_strcpy(data,mne,sizeof(data)); + data[PX_strlen(data)-1]='\0'; + return PX_ScriptAsm_atoi(data+sizeof("STACK[")); +} + +px_int PX_ScriptAsmTokenType(PX_SCRIPT_ASM_COMPILER *compiler,px_char *token) +{ + px_bool bfound; + px_int matchIteration=256,i; + while (--matchIteration) + { + bfound=PX_FALSE; + for (i=0;iassumeTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_ASSUME_NODE *)(PX_ListNodeAt(&compiler->assumeTable,i)->pdata))->name.buffer,token)) + { + token=((PX_SCRIPT_ASM_ASSUME_NODE *)(PX_ListNodeAt(&compiler->assumeTable,i)->pdata))->assume.buffer; + bfound=PX_TRUE; + break; + } + } + if (bfound==PX_FALSE) + { + break; + } + } + if (matchIteration==0) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME too much iteration"); + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW; + } + if (PX_strequ(token,"SP")) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP; + } + + if (PX_strequ(token,"IP")) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP; + } + + if (PX_strequ(token,"BP")) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP; + } + + if (PX_memequ(token,"GLOBAL[",sizeof("GLOBAL[")-1)&&token[PX_strlen(token)-1]==']') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL; + } + + if (PX_memequ(token,"LOCAL[",sizeof("LOCAL[")-1)&&token[PX_strlen(token)-1]==']') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL; + } + + if (token[0]=='R'&&PX_strIsInt(token+1)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG; + } + + if (token[0]=='$'&&PX_ScriptAsmIsValidToken(token+1)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST; + } + + if (token[0]=='\"'&&token[PX_strlen(token)-1]=='\"') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING; + } + + if (token[0]=='\''&&token[PX_strlen(token)-1]=='\'') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT; + } + + if (token[0]=='@'&&token[PX_strlen(token)-1]=='@') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY; + } + + + + if (PX_ScriptAsm_isInt(token)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT; + } + + if (PX_strIsFloat(token)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_FLOAT; + } + + for (i=0;iLabelTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_LABEL_NODE *)(PX_ListNodeAt(&compiler->LabelTable,i)->pdata))->mnemonic,token)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL; + } + } + + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW; +} + + +px_char PX_ScriptAsmTokenTypeToOpType(px_int TokenType) +{ + switch(TokenType) + { + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT: + return PX_SCRIPT_ASM_OPTYPE_INT; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_FLOAT: + return PX_SCRIPT_ASM_OPTYPE_FLOAT; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG: + return PX_SCRIPT_ASM_OPTYPE_REG; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL: + { + return PX_SCRIPT_ASM_OPTYPE_LOCAL; + } + break; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL: + { + return PX_SCRIPT_ASM_OPTYPE_GLOBAL; + } + break; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING: + return PX_SCRIPT_ASM_OPTYPE_STRING; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL: + return PX_SCRIPT_ASM_OPTYPE_LABEL; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST: + return PX_SCRIPT_ASM_OPTYPE_HOST; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY: + return PX_SCRIPT_ASM_OPTYPE_MEMORY; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP: + return PX_SCRIPT_ASM_OPTYPE_BP; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP: + return PX_SCRIPT_ASM_OPTYPE_SP; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP: + return PX_SCRIPT_ASM_OPTYPE_IP; + default: + return 0; + } +} + +static px_bool PX_ScriptASMMapAssume(PX_SCRIPT_ASM_COMPILER *compiler,px_string *mnenonic) +{ + px_bool bfound; + px_int matchIteration=256,i; + + while (--matchIteration) + { + bfound=PX_FALSE; + for (i=0;iassumeTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_ASSUME_NODE *)(PX_ListNodeAt(&compiler->assumeTable,i)->pdata))->name.buffer,mnenonic->buffer)) + { + + PX_StringCopy(mnenonic,&(((PX_SCRIPT_ASM_ASSUME_NODE *)PX_ListNodeAt(&compiler->assumeTable,i)->pdata)->assume)); + + bfound=PX_TRUE; + break; + } + } + if (bfound==PX_FALSE) + { + break; + } + } + if (matchIteration==0) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME too much iteration"); + return PX_FALSE; + } + return PX_TRUE; +} + +static px_bool PX_ScriptAsmLocalType(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Token,px_char *type,px_dword *index) +{ + px_string TempTokenString; + PX_StringInitialize(compiler->mp,&TempTokenString); + PX_StringCat(&TempTokenString,Token); + + PX_StringTrimLeft(&TempTokenString,PX_strlen("LOCAL[")); + PX_StringTrimRight(&TempTokenString,1); + + PX_ScriptASMMapAssume(compiler,&TempTokenString); + + if (PX_memequ(TempTokenString.buffer,"GLOBAL[",sizeof("GLOBAL[")-1)&&TempTokenString.buffer[PX_strlen(TempTokenString.buffer)-1]==']') + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("GLOBAL[")); + PX_StringTrimRight(&TempTokenString,1); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (PX_memequ(TempTokenString.buffer,"LOCAL[",sizeof("LOCAL[")-1)&&TempTokenString.buffer[PX_strlen(TempTokenString.buffer)-1]==']') + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("LOCAL[")); + PX_StringTrimRight(&TempTokenString,1); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (TempTokenString.buffer[0]=='R'&&PX_strIsInt(TempTokenString.buffer+1)) + { + *type=PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer+1); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + *type=PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + PX_StringFree(&TempTokenString); + return PX_FALSE; +} + +static px_bool PX_ScriptAsmGlobalType(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Token,px_char *type,px_dword *index) +{ + px_string TempTokenString; + PX_StringInitialize(compiler->mp,&TempTokenString); + + PX_StringCat(&TempTokenString,Token); + + PX_StringTrimLeft(&TempTokenString,PX_strlen("GLOBAL[")); + PX_StringTrimRight(&TempTokenString,1); + + PX_ScriptASMMapAssume(compiler,&TempTokenString); + + if (PX_memequ(TempTokenString.buffer,"GLOBAL[",sizeof("GLOBAL[")-1)&&TempTokenString.buffer[PX_strlen(TempTokenString.buffer)-1]==']') + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("GLOBAL[")); + PX_StringTrimRight(&TempTokenString,1); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (PX_memequ(TempTokenString.buffer,"LOCAL[",sizeof("LOCAL[")-1)&&TempTokenString.buffer[PX_strlen(TempTokenString.buffer)-1]==']') + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("LOCAL[")); + PX_StringTrimRight(&TempTokenString,1); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (PX_memequ(TempTokenString.buffer,"BP+",sizeof("BP+")-1)&&PX_ScriptAsm_isInt(TempTokenString.buffer+sizeof("BP+")-1)) + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("BP+")); + + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + else if (PX_strequ(TempTokenString.buffer,"BP")) + { + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF; + *index=0; + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + + if (PX_memequ(TempTokenString.buffer,"SP+",sizeof("SP+")-1)&&PX_ScriptAsm_isInt(TempTokenString.buffer+sizeof("SP+")-1)) + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("SP+")); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + else if (PX_strequ(TempTokenString.buffer,"SP")) + { + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF; + *index=0; + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + + if (TempTokenString.buffer[0]=='R'&&PX_strIsInt(TempTokenString.buffer+1)) + { + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer+1); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + + if (PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + PX_StringFree(&TempTokenString); + return PX_FALSE; +} + + +px_void PX_ScriptAsmUpdateAssumeTable(PX_SCRIPT_ASM_COMPILER *compiler,px_char *name,px_char *assume) +{ + px_int i; + PX_SCRIPT_ASM_ASSUME_NODE newNode; + for (i=0;iassumeTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_ASSUME_NODE *)(PX_ListNodeAt(&compiler->assumeTable,i)->pdata))->name.buffer,name)) + { + PX_StringClear(&PX_LISTAT(PX_SCRIPT_ASM_ASSUME_NODE,&compiler->assumeTable,i)->assume); + PX_StringCat(&PX_LISTAT(PX_SCRIPT_ASM_ASSUME_NODE,&compiler->assumeTable,i)->assume,assume); + return; + } + } + PX_StringInitialize(compiler->mp,&newNode.assume); + PX_StringInitialize(compiler->mp,&newNode.name); + PX_StringCat(&newNode.assume,assume); + PX_StringCat(&newNode.name,name); + + PX_ListPush(&compiler->assumeTable,&newNode,sizeof(PX_SCRIPT_ASM_ASSUME_NODE)); +} + +px_bool PX_ScriptAsmAddSourceLabel(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Name,px_bool bFunction) +{ + px_int i; + PX_SCRIPT_ASM_LABEL_NODE label; + for (i=0;iLabelTable.size;i++) + { + if (PX_strequ(PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler->LabelTable,i)->mnemonic,Name)) + { + PX_ScriptAsmError(&compiler->lexer,"Label name redefined."); + return PX_FALSE; + } + } + PX_strcpy(label.mnemonic,Name,sizeof(label.mnemonic)); + label.bfunction=bFunction; + PX_ListPush(&compiler->LabelTable,&label,sizeof(label)); + return PX_TRUE; +} + +px_bool PX_ScriptAsmUpdateLabelAddr(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Name,px_int addr) +{ + px_int i; + for (i=0;iLabelTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_LABEL_NODE *)(PX_ListNodeAt(&compiler->LabelTable,i)->pdata))->mnemonic,Name)) + { + ((PX_SCRIPT_ASM_LABEL_NODE *)(PX_ListNodeAt(&compiler->LabelTable,i)->pdata))->binaddr=addr; + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_int PX_ScriptAsmGetLabelIndex(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Name) +{ + px_int i; + for (i=0;iLabelTable.size;i++) + { + if (PX_strequ(PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler->LabelTable,i)->mnemonic,Name)) + { + return i; + } + } + return -1; +} + +px_int PX_ScriptAsmGetFuncCount(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_int i; + px_int count=0; + for (i=0;iLabelTable.size;i++) + { + if (PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler->LabelTable,i)->bfunction) + { + count++; + } + } + return count; +} + +px_int PX_ScriptAsmStringSize(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_int i; + px_int size=0; + for (i=0;iStringTable.size;i++) + { + size+= (PX_strlen(((PX_SCRIPT_ASM_STRING_NODE *)(PX_ListNodeAt(&compiler->StringTable,i)->pdata))->str.buffer))+1; + } + return size; +} + +px_int PX_ScriptAsmMemorySize(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_int i; + px_int size=0; + for (i=0;imemoriesTable.size;i++) + { + size+=PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,i)->mem.usedsize+4; + } + return size; +} + +px_void PX_ScriptAsmAddStringConst(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Str) +{ + px_int i; + PX_SCRIPT_ASM_STRING_NODE stringNode,*pLastNode; + for (i=0;iStringTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_STRING_NODE *)(PX_ListNodeAt(&compiler->StringTable,i)->pdata))->str.buffer,Str)) + { + return; + } + } + PX_StringInitialize(compiler->mp,&stringNode.str); + if(compiler->StringTable.size!=0) + { + pLastNode=(PX_SCRIPT_ASM_STRING_NODE *)(PX_ListNodeAt(&compiler->StringTable,compiler->StringTable.size-1)->pdata); + stringNode.addr=pLastNode->addr+PX_strlen(pLastNode->str.buffer)+1; + } + else + stringNode.addr=0; + PX_StringCat(&stringNode.str,Str); + PX_ListPush(&compiler->StringTable,&stringNode,sizeof(stringNode)); +} + +px_bool PX_ScriptAsmAddMemoryConst(PX_SCRIPT_ASM_COMPILER *compiler,px_char *StringMap) +{ + px_char hex[3]; + px_char _byte; + PX_SCRIPT_ASM_MEMORY_NODE memoryNode,*pLastNode; + + if (PX_strlen(StringMap)&1) + { + PX_ScriptAsmError(&compiler->lexer,"Invalid binary stream map"); + return PX_FALSE; + } + + PX_MemoryInitialize(compiler->mp,&memoryNode.mem); + + if(!PX_MemoryAlloc(&memoryNode.mem,PX_strlen(StringMap)>>1)) + return PX_FALSE; + + while (*StringMap) + { + hex[0]=*StringMap; + hex[1]=*(StringMap+1); + hex[2]=0; + + _byte=(px_char)PX_htoi(hex); + PX_MemoryCat(&memoryNode.mem,&_byte,1); + StringMap+=2; + } + + if(compiler->memoriesTable.size!=0) + { + pLastNode=PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,compiler->memoriesTable.size-1); + memoryNode.addr=pLastNode->addr+pLastNode->mem.usedsize+sizeof(px_dword); + } + else + memoryNode.addr=0; + + PX_ListPush(&compiler->memoriesTable,&memoryNode,sizeof(memoryNode)); + return PX_TRUE; +} + +px_dword PX_ScriptAsmGetStringAddr(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Str) +{ + px_int i; + for (i=0;iStringTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_STRING_NODE *)(PX_ListNodeAt(&compiler->StringTable,i)->pdata))->str.buffer,Str)) + { + return ((PX_SCRIPT_ASM_STRING_NODE *)(PX_ListNodeAt(&compiler->StringTable,i)->pdata))->addr; + } + } + return 0; +} + +px_dword PX_ScriptAsmGetMemoryAddr(PX_SCRIPT_ASM_COMPILER *compiler,px_char *StringMap) +{ + px_int i; + px_char hex[3]; + px_char _byte; + PX_SCRIPT_ASM_MEMORY_NODE memoryNode; + + if (PX_strlen(StringMap)&1) + { + PX_ScriptAsmError(&compiler->lexer,"Invalid binary stream map"); + return PX_FALSE; + } + + PX_MemoryInitialize(compiler->mp,&memoryNode.mem); + PX_MemoryAlloc(&memoryNode.mem,PX_strlen(StringMap)>>1); + while (*StringMap) + { + hex[0]=*StringMap; + hex[1]=*(StringMap+1); + hex[2]=0; + + _byte=(px_char)PX_htoi(hex); + PX_MemoryCat(&memoryNode.mem,&_byte,1); + StringMap+=2; + } + + + for (i=0;imemoriesTable.size;i++) + { + if (PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,i)->mem.buffer==PX_NULL) + { + continue; + } + + if (PX_memequ(PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,i)->mem.buffer,memoryNode.mem.buffer,memoryNode.mem.usedsize)) + { + PX_MemoryFree(&memoryNode.mem); + return PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,i)->addr; + } + } + PX_MemoryFree(&memoryNode.mem); + return 0; +} + +px_void PX_ScriptAsmAddHost(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Str) +{ + px_int i; + PX_SCRIPT_ASM_HOST_NODE Host; + for (i=0;iHostTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_HOST_NODE *)(PX_ListNodeAt(&compiler->HostTable,i)->pdata))->name,Str)) + { + return; + } + } + PX_strcpy(Host.name,Str,sizeof(Host.name)); + Host.map=PX_NULL; + Host.userptr=PX_NULL; + PX_ListPush(&compiler->HostTable,&Host,sizeof(Host)); +} + +px_int PX_ScriptAsmGetHostIndex(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Str) +{ + px_int i; + for (i=0;iHostTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_HOST_NODE *)(PX_ListNodeAt(&compiler->HostTable,i)->pdata))->name,Str)) + { + return i; + } + } + return -1; +} +px_bool PX_ScriptAsmScan(PX_SCRIPT_ASM_COMPILER *compiler) +{ + PX_LEXER_STATE state=PX_LexerGetState(&compiler->lexer); + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_ASM_GRAMMAR_INSTR *pinstr; + px_string assumeString,assumeName; + px_string includeStr; + px_int i,j; + px_bool hasMatched; + px_char *pLexeme; + + PX_StringInitialize(compiler->mp,&assumeName); + PX_StringInitialize(compiler->mp,&assumeString); + + while ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_END) + { + pLexeme=compiler->lexer.CurLexeme.buffer; + switch(type) + { + case PX_LEXER_LEXEME_TYPE_CONATINER: + case PX_LEXER_LEXEME_TYPE_DELIMITER: + case PX_LEXER_LEXEME_TYPE_ERR: + case PX_LEXER_LEXEME_TYPE_END: + goto _ERROR; + break; + case PX_LEXER_LEXEME_TYPE_SPACER: + case PX_LEXER_LEXEME_TYPE_NEWLINE: + continue; + break; + case PX_LEXER_LEXEME_TYPE_TOKEN: + { + //special + + //ASSUME + pLexeme=compiler->lexer.CurLexeme.buffer; + if (PX_strequ("ASSUME",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME first token should be token!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + if (PX_strIsNumeric(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME first token should not be numeric!"); + goto _ERROR; + } + + PX_StringClear(&assumeName); + PX_StringCat(&assumeName,pLexeme); + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME second token should be token!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_StringClear(&assumeString); + PX_StringCat(&assumeString,pLexeme); + + if (PX_strequ(assumeString.buffer,assumeName.buffer)) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME token should not equal."); + goto _ERROR; + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_ScriptAsmUpdateAssumeTable(compiler,assumeName.buffer,assumeString.buffer); + continue; + } + + //Function or Lable + if (pLexeme[PX_strlen(pLexeme)-1]==':') + { + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmAddSourceLabel(compiler,pLexeme,PX_FALSE)) + { + PX_ScriptAsmError(&compiler->lexer,"Add label error."); + goto _ERROR; + } + } + continue; + } + + + if (PX_strequ("EXPORT",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Mnemonic \"Function\" not found!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + + if (!PX_strequ(pLexeme,"FUNCTION")) + { + PX_ScriptAsmError(&compiler->lexer,"Mnemonic \"Function\" not found!"); + goto _ERROR; + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Function name expected but not found!"); + goto _ERROR; + } + + pLexeme=compiler->lexer.CurLexeme.buffer; + + if (pLexeme[PX_strlen(pLexeme)-1]!=':') + { + PX_ScriptAsmError(&compiler->lexer,"Function name colon expected but not found!"); + goto _ERROR; + } + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmAddSourceLabel(compiler,pLexeme,PX_TRUE)) + { + PX_ScriptAsmError(&compiler->lexer,"Add label error."); + goto _ERROR; + } + } + + continue; + } + + if (PX_strequ("FUNCTION",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Function name expected but not found!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + + if (pLexeme[PX_strlen(pLexeme)-1]!=':') + { + PX_ScriptAsmError(&compiler->lexer,"Function name colon expected but not found!"); + goto _ERROR; + } + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmAddSourceLabel(compiler,pLexeme,PX_FALSE)) + { + PX_ScriptAsmError(&compiler->lexer,"Add label error."); + goto _ERROR; + } + } + + continue; + } + + //.Global + if (PX_strequ(".GLOBAL",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Global size should be integer(const)!"); + goto _ERROR; + } + + pLexeme=compiler->lexer.CurLexeme.buffer; + if(!PX_ScriptAsm_isInt(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"Global size should be integer(const)!"); + goto _ERROR; + } + compiler->globalsize=PX_ScriptAsm_atoi(pLexeme); + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + continue; + } + + //.STACK + if (PX_strequ(".STACK",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Stack size should be integer(const)!"); + goto _ERROR; + } + + pLexeme=compiler->lexer.CurLexeme.buffer; + + if(!PX_ScriptAsm_isInt(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"Stack size should be integer(const)!"); + goto _ERROR; + } + compiler->stacksize=PX_ScriptAsm_atoi(pLexeme); + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + continue; + } + + //.THREAD + if (PX_strequ(".THREAD",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"thread count should be integer(const)!"); + goto _ERROR; + } + + pLexeme=compiler->lexer.CurLexeme.buffer; + + if(!PX_ScriptAsm_isInt(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"thread count should be integer(const)!"); + goto _ERROR; + } + compiler->threadcount=PX_ScriptAsm_atoi(pLexeme); + + if(compiler->threadcount<=0) + { + PX_ScriptAsmError(&compiler->lexer,"thread count should not less than 1!"); + goto _ERROR; + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + continue; + } + + //normal + hasMatched=PX_FALSE; + state=PX_LexerGetState(&compiler->lexer); + for (i=0;iGrammarInstrTable.size;i++) + { + pinstr=PX_LISTAT(PX_SCRIPT_ASM_GRAMMAR_INSTR,&compiler->GrammarInstrTable,i); + if (PX_strequ(pinstr->mnemonic,pLexeme)) + { + if (pinstr->paramCount==0) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_LexerSetState(state); + continue; + } + hasMatched=PX_TRUE; + break; + } + + for (j=0;jparamCount;j++) + { + type=PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN&&type!=PX_LEXER_LEXEME_TYPE_CONATINER) + { + PX_LexerSetState(state); + continue; + } + else + { + + if (PX_ScriptAsmTokenType(compiler,compiler->lexer.CurLexeme.buffer)==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW) + { + if (!PX_ScriptAsmIsValidToken(compiler->lexer.CurLexeme.buffer)) + { + PX_ScriptAsmError(&compiler->lexer,"Unknow token type"); + goto _ERROR; + } + } + + if (PX_ScriptAsmTokenType(compiler,compiler->lexer.CurLexeme.buffer)==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING) + { + PX_StringInitialize(compiler->mp,&includeStr); + PX_LexerGetIncludedString(&compiler->lexer,&includeStr); + PX_ScriptAsmStringConvert(&includeStr); + PX_ScriptAsmAddStringConst(compiler,includeStr.buffer); + PX_StringFree(&includeStr); + } + + if (PX_ScriptAsmTokenType(compiler,compiler->lexer.CurLexeme.buffer)==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY) + { + PX_StringInitialize(compiler->mp,&includeStr); + PX_LexerGetIncludedString(&compiler->lexer,&includeStr); + if(!PX_ScriptAsmAddMemoryConst(compiler,includeStr.buffer)) + { + PX_ScriptAsmError(&compiler->lexer,"Invalid memories const!"); + goto _ERROR; + } + PX_StringFree(&includeStr); + } + + if (PX_ScriptAsmTokenType(compiler,compiler->lexer.CurLexeme.buffer)==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST) + { + PX_ScriptAsmAddHost(compiler,compiler->lexer.CurLexeme.buffer); + } + + if(jparamCount-1) + { + type=PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptAsmError(&compiler->lexer,"Parameters error."); + goto _ERROR; + } + } + } + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_LexerSetState(state); + continue; + } + hasMatched=PX_TRUE; + break; + } + } + if (!hasMatched) + { + PX_ScriptAsmError(&compiler->lexer,"Instr not match."); + PX_LexerSetState(state); + goto _ERROR; + } + + } + break; + } + } + PX_StringFree(&assumeName); + PX_StringFree(&assumeString); + return PX_TRUE; +_ERROR: + PX_StringFree(&assumeName); + PX_StringFree(&assumeString); + return PX_FALSE; + +} + + + + +px_bool PX_ScriptAsmCc(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_string ParamMne; + PX_LEXER_STATE state=PX_LexerGetState(&compiler->lexer); + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_ASM_GRAMMAR_INSTR *pinstr; + PX_SCRIPT_ASM_INSTR_BIN instrbin; + px_string assumeString,assumeName; + px_int i,j,TokenType,InstrBinOffset=0; + px_float itf; + px_bool hasMatched; + px_char *pLexeme; + px_string strInc; + + PX_StringInitialize(compiler->mp,&ParamMne); + PX_StringInitialize(compiler->mp,&assumeName); + PX_StringInitialize(compiler->mp,&assumeString); + + + while ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_END) + { + pLexeme=compiler->lexer.CurLexeme.buffer; + switch(type) + { + case PX_LEXER_LEXEME_TYPE_CONATINER: + case PX_LEXER_LEXEME_TYPE_DELIMITER: + case PX_LEXER_LEXEME_TYPE_ERR: + case PX_LEXER_LEXEME_TYPE_END: + goto _ERROR; + break; + case PX_LEXER_LEXEME_TYPE_SPACER: + case PX_LEXER_LEXEME_TYPE_NEWLINE: + continue; + break; + case PX_LEXER_LEXEME_TYPE_TOKEN: + { + //special + + //ASSUME + pLexeme=compiler->lexer.CurLexeme.buffer; + if (PX_strequ("ASSUME",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME first token should be token!"); + goto _ERROR; + } + + if (PX_strIsNumeric(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME first token should not be numeric!"); + goto _ERROR; + } + + PX_StringSet(&assumeName,pLexeme); + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME second token should be token!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_StringSet(&assumeString,pLexeme); + + if (PX_strequ(assumeString.buffer,assumeName.buffer)) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME token should not equal."); + goto _ERROR; + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_ScriptAsmUpdateAssumeTable(compiler,assumeName.buffer,assumeString.buffer); + continue; + } + + //Function or Lable + if (pLexeme[PX_strlen(pLexeme)-1]==':') + { + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmUpdateLabelAddr(compiler,pLexeme,InstrBinOffset)) + { + goto _ERROR; + } + } + continue; + } + + if (PX_strequ("EXPORT",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmUpdateLabelAddr(compiler,pLexeme,InstrBinOffset)) + { + goto _ERROR; + } + } + continue; + } + + if (PX_strequ("FUNCTION",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmUpdateLabelAddr(compiler,pLexeme,InstrBinOffset)) + { + goto _ERROR; + } + } + continue; + } + + //.Global + if (PX_strequ(".GLOBAL",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + PX_ScriptAsmNexLexeme (&compiler->lexer); + continue; + } + + //.Stack + if (PX_strequ(".STACK",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + PX_ScriptAsmNexLexeme (&compiler->lexer); + continue; + } + + //.Thread + if (PX_strequ(".THREAD",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + PX_ScriptAsmNexLexeme (&compiler->lexer); + continue; + } + + //normal + hasMatched=PX_FALSE; + state=PX_LexerGetState(&compiler->lexer); + for (i=0;iGrammarInstrTable.size;i++) + { + PX_memset(&instrbin,0,sizeof(instrbin)); + pinstr=(PX_SCRIPT_ASM_GRAMMAR_INSTR *)PX_ListNodeAt(&compiler->GrammarInstrTable,i)->pdata; + if (PX_strequ(pinstr->mnemonic,pLexeme)) + { + instrbin.opCode=pinstr->opcode; + + for (j=0;jparamCount;j++) + { + type=PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_StringClear(&ParamMne); + PX_StringCat(&ParamMne,pLexeme); + + PX_ScriptASMMapAssume(compiler,&ParamMne); + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN&&type!=PX_LEXER_LEXEME_TYPE_CONATINER) + { + PX_LexerSetState(state); + continue; + } + else + { + if (((TokenType=PX_ScriptAsmTokenType(compiler,ParamMne.buffer))&pinstr->operandAccTypes[j])==0) + { + PX_LexerSetState(state); + continue; + } + if (TokenType==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW) + { + PX_ScriptAsmError(&compiler->lexer,"illegal Token Type"); + return PX_FALSE; + } + instrbin.optype[j]=PX_ScriptAsmTokenTypeToOpType(TokenType); + switch(instrbin.optype[j]) + { + case PX_SCRIPT_ASM_OPTYPE_BP: + case PX_SCRIPT_ASM_OPTYPE_SP: + case PX_SCRIPT_ASM_OPTYPE_IP: + instrbin.param[j]=0; + break; + + case PX_SCRIPT_ASM_OPTYPE_MEMORY: + PX_StringInitialize(compiler->mp,&strInc); + PX_StringCat(&strInc,ParamMne.buffer); + PX_LexerGetIncludedString(&compiler->lexer,&strInc); + instrbin.param[j]=PX_ScriptAsmGetMemoryAddr(compiler,strInc.buffer); + PX_StringFree(&strInc); + break; + case PX_SCRIPT_ASM_OPTYPE_STRING: + PX_StringInitialize(compiler->mp,&strInc); + PX_StringCat(&strInc,ParamMne.buffer); + PX_LexerGetIncludedString(&compiler->lexer,&strInc); + PX_ScriptAsmStringConvert(&strInc); + instrbin.param[j]=PX_ScriptAsmGetStringAddr(compiler,strInc.buffer); + PX_StringFree(&strInc); + break; + case PX_SCRIPT_ASM_OPTYPE_LABEL: + instrbin.param[j]=PX_ScriptAsmGetLabelIndex(compiler,ParamMne.buffer); + break; + case PX_SCRIPT_ASM_OPTYPE_FLOAT: + itf=PX_atof(ParamMne.buffer); + instrbin.param[j]=*((int *)&itf); + break; + case PX_SCRIPT_ASM_OPTYPE_INT: + if(ParamMne.buffer[0]!='\'') + instrbin.param[j]=PX_ScriptAsm_atoi(ParamMne.buffer); + else + instrbin.param[j]=ParamMne.buffer[1]; + break; + case PX_SCRIPT_ASM_OPTYPE_REG: + instrbin.param[j]=PX_ScriptAsm_atoi(ParamMne.buffer+1); + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL: + if (!PX_ScriptAsmLocalType(compiler,ParamMne.buffer,&instrbin.optype[j],&instrbin.param[j])) + { + PX_ScriptAsmError(&compiler->lexer,"illegal local referenced"); + return PX_FALSE; + } + + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL: + if (!PX_ScriptAsmGlobalType(compiler,ParamMne.buffer,&instrbin.optype[j],&instrbin.param[j])) + { + PX_ScriptAsmError(&compiler->lexer,"illegal local referenced"); + return PX_FALSE; + } + break; + case PX_SCRIPT_ASM_OPTYPE_HOST: + instrbin.param[j]=PX_ScriptAsmGetHostIndex(compiler,ParamMne.buffer); + break; + default: + { + PX_ScriptAsmError(&compiler->lexer,"Instrutment not match."); + PX_LexerSetState(state); + return PX_FALSE; + } + } + + } + if (j!=pinstr->paramCount-1) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + } + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_LexerSetState(state); + continue; + } + hasMatched=PX_TRUE; + instrbin.addr=InstrBinOffset; + instrbin.opcount=pinstr->paramCount; + PX_VectorPushback(&compiler->StreamTable,&instrbin); + InstrBinOffset+=(4+sizeof(px_dword)*pinstr->paramCount); + break; + } + } + if (!hasMatched) + { + PX_ScriptAsmError(&compiler->lexer,"Instr not match."); + PX_LexerSetState(state); + return PX_FALSE; + } + + } + break; + } + } + PX_StringFree(&ParamMne); + PX_StringFree(&assumeName); + PX_StringFree(&assumeString); + return PX_TRUE; +_ERROR: + PX_StringFree(&ParamMne); + PX_StringFree(&assumeName); + PX_StringFree(&assumeString); + return PX_FALSE; +} + +px_void PX_ScriptAsmLink(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_int i,j; + PX_SCRIPT_ASM_INSTR_BIN *pbin=(PX_SCRIPT_ASM_INSTR_BIN *)compiler->StreamTable.data; + for (i=0;iStreamTable.size;i++) + { + for (j=0;j<3;j++) + { + if (pbin[i].optype[j]==PX_SCRIPT_ASM_OPTYPE_LABEL) + { + pbin[i].param[j]=PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler->LabelTable,pbin[i].param[j])->binaddr; + pbin[i].optype[j]=PX_SCRIPT_ASM_OPTYPE_INT; + } + } + } +} + +static px_void PX_ScriptAsmRegistInstr_0(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode) +{ + PX_ScriptAsmRegistInstr(compiler,mnemonic,opcode,PX_NULL,0); +} + +static px_void PX_ScriptAsmRegistInstr_1(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode,px_int accType1) +{ + PX_ScriptAsmRegistInstr(compiler,mnemonic,opcode,&accType1,1); +} + +static px_void PX_ScriptAsmRegistInstr_2(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode,px_int accType1,px_int accType2) +{ + px_int accType[2]; + accType[0]=accType1; + accType[1]=accType2; + PX_ScriptAsmRegistInstr(compiler,mnemonic,opcode,accType,2); +} + +static px_void PX_ScriptAsmRegistInstr_3(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode,px_int accType1,px_int accType2,px_int accType3) +{ + px_int accType[3]; + accType[0]=accType1; + accType[1]=accType2; + accType[2]=accType3; + PX_ScriptAsmRegistInstr(compiler,mnemonic,opcode,accType,3); +} + + +px_bool PX_ScriptAsmCompile(px_memorypool *mp,px_char *asmcode,px_memory *binmemory) +{ + + PX_SCRIPT_ASM_COMPILER compiler; + PX_SCRIPT_ASM_HEADER header,*pheader; + PX_SCRIPT_EXPORT_FUNCTION expFunc; + PX_SCRIPT_ASM_HOST_NODE host; + PX_SCRIPT_ASM_INSTR_BIN *pinstrs; + PX_LEXER_STATE lexerstate; + px_uint quotes; + px_int i; + px_char *pbuf; + px_dword woffset; + px_dword binsize,bufsize; + + + ////////////////////////////////////////////////////////////////////////// + //test + + compiler.mp=mp; + + PX_LexerInit(&compiler.lexer,mp); + PX_LexerRegisterComment(&compiler.lexer,";","\n"); + PX_LexerRegisterComment(&compiler.lexer,";","\r"); + PX_LexerRegisterDelimiter(&compiler.lexer,','); + PX_LexerRegisterSpacer(&compiler.lexer,' '); + PX_LexerRegisterSpacer(&compiler.lexer,'\t'); + quotes=PX_LexerRegisterContainer(&compiler.lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&compiler.lexer,quotes,'\\'); + PX_LexerRegisterContainer(&compiler.lexer,"\'","\'"); + PX_LexerRegisterContainer(&compiler.lexer,"@","@"); + + PX_VectorInitialize(mp,&compiler.StreamTable,sizeof(PX_SCRIPT_ASM_INSTR_BIN),256); + PX_ListInitialize(mp,&compiler.assumeTable); + PX_ListInitialize(mp,&compiler.GrammarInstrTable); + PX_ListInitialize(mp,&compiler.HostTable); + PX_ListInitialize(mp,&compiler.LabelTable); + PX_ListInitialize(mp,&compiler.StringTable); + PX_ListInitialize(mp,&compiler.memoriesTable); + + compiler.threadcount=1; + + //binary format + //opcode 1 byte + //optype 3 byte + //operand [0,3]4 byte + + PX_ScriptAsmRegistInstr_2(&compiler,"MOV",PX_SCRIPT_ASM_INSTR_OPCODE_MOV, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + + PX_ScriptAsmRegistInstr_2(&compiler,"ADD",PX_SCRIPT_ASM_INSTR_OPCODE_ADD, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"SUB",PX_SCRIPT_ASM_INSTR_OPCODE_SUB, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"DIV",PX_SCRIPT_ASM_INSTR_OPCODE_DIV, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"MUL",PX_SCRIPT_ASM_INSTR_OPCODE_MUL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"MOD",PX_SCRIPT_ASM_INSTR_OPCODE_MOD, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"SHL",PX_SCRIPT_ASM_INSTR_OPCODE_SHL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"SHR",PX_SCRIPT_ASM_INSTR_OPCODE_SHR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"AND",PX_SCRIPT_ASM_INSTR_OPCODE_AND, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"ANDL",PX_SCRIPT_ASM_INSTR_OPCODE_ANDL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"ORL",PX_SCRIPT_ASM_INSTR_OPCODE_ORL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"OR",PX_SCRIPT_ASM_INSTR_OPCODE_OR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"XOR",PX_SCRIPT_ASM_INSTR_OPCODE_XOR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"POW",PX_SCRIPT_ASM_INSTR_OPCODE_POW, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + PX_ScriptAsmRegistInstr_2(&compiler,"SIN",PX_SCRIPT_ASM_INSTR_OPCODE_SIN, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"COS",PX_SCRIPT_ASM_INSTR_OPCODE_COS, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"INT",PX_SCRIPT_ASM_INSTR_OPCODE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"FLT",PX_SCRIPT_ASM_INSTR_OPCODE_FLT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + + PX_ScriptAsmRegistInstr_2(&compiler,"STRLEN",PX_SCRIPT_ASM_INSTR_OPCODE_STRLEN, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRCAT",PX_SCRIPT_ASM_INSTR_OPCODE_STRCAT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"STRREP",PX_SCRIPT_ASM_INSTR_OPCODE_STRREP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"STRCHR",PX_SCRIPT_ASM_INSTR_OPCODE_STRCHR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRTOI",PX_SCRIPT_ASM_INSTR_OPCODE_STRTOI, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRTOF",PX_SCRIPT_ASM_INSTR_OPCODE_STRTOF, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRFRI",PX_SCRIPT_ASM_INSTR_OPCODE_STRFRI, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRFRF",PX_SCRIPT_ASM_INSTR_OPCODE_STRFRF, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_FLOAT + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"STRTMEM",PX_SCRIPT_ASM_INSTR_OPCODE_STRTMEM, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"STRSET",PX_SCRIPT_ASM_INSTR_OPCODE_STRSET, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"STRFIND",PX_SCRIPT_ASM_INSTR_OPCODE_STRFIND, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"ASC",PX_SCRIPT_ASM_INSTR_OPCODE_ASC, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"MEMBYTE",PX_SCRIPT_ASM_INSTR_OPCODE_MEMBYTE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"MEMSET",PX_SCRIPT_ASM_INSTR_OPCODE_MEMSET, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + PX_ScriptAsmRegistInstr_3(&compiler,"MEMTRM",PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"MEMFIND",PX_SCRIPT_ASM_INSTR_OPCODE_MEMFIND, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"MEMLEN",PX_SCRIPT_ASM_INSTR_OPCODE_MEMLEN, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"MEMCAT",PX_SCRIPT_ASM_INSTR_OPCODE_MEMCAT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"MEMTSTR",PX_SCRIPT_ASM_INSTR_OPCODE_MEMTSTR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"MEMTRM",PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"DATACPY",PX_SCRIPT_ASM_INSTR_OPCODE_DATACPY, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"NEG",PX_SCRIPT_ASM_INSTR_OPCODE_NEG, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"INV",PX_SCRIPT_ASM_INSTR_OPCODE_INV, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"NOT",PX_SCRIPT_ASM_INSTR_OPCODE_NOT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"JMP",PX_SCRIPT_ASM_INSTR_OPCODE_JMP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JE",PX_SCRIPT_ASM_INSTR_OPCODE_JE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JNE",PX_SCRIPT_ASM_INSTR_OPCODE_JNE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JLE",PX_SCRIPT_ASM_INSTR_OPCODE_JLE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JGE",PX_SCRIPT_ASM_INSTR_OPCODE_JGE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JL",PX_SCRIPT_ASM_INSTR_OPCODE_JL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JG",PX_SCRIPT_ASM_INSTR_OPCODE_JG, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"LGE",PX_SCRIPT_ASM_INSTR_OPCODE_LGE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"LGNE",PX_SCRIPT_ASM_INSTR_OPCODE_LGNE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + + PX_ScriptAsmRegistInstr_1(&compiler,"LGZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"LGGZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGGZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"LGGEZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGGEZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"LGLZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGLZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"LGLEZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGLEZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"CALL",PX_SCRIPT_ASM_INSTR_OPCODE_CALL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"PUSH",PX_SCRIPT_ASM_INSTR_OPCODE_PUSH, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"POP",PX_SCRIPT_ASM_INSTR_OPCODE_POP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"POPN",PX_SCRIPT_ASM_INSTR_OPCODE_POPN, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"ADR",PX_SCRIPT_ASM_INSTR_OPCODE_ADR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_0(&compiler,"RET",PX_SCRIPT_ASM_INSTR_OPCODE_RET); + PX_ScriptAsmRegistInstr_0(&compiler,"NOP",PX_SCRIPT_ASM_INSTR_OPCODE_NOP); + PX_ScriptAsmRegistInstr_0(&compiler,"BPX",PX_SCRIPT_ASM_INSTR_OPCODE_BPX); + + PX_ScriptAsmRegistInstr_1(&compiler,"WAIT",PX_SCRIPT_ASM_INSTR_OPCODE_WAIT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"SIGNAL",PX_SCRIPT_ASM_INSTR_OPCODE_SIGNAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + if(!PX_LexerLoadSourceFromMemory(&compiler.lexer,asmcode)) + { + goto __ERROR; + } + + PX_LexerSetTokenCase(&compiler.lexer,PX_LEXER_LEXEME_CASE_UPPER); + + lexerstate=PX_LexerGetState(&compiler.lexer); + if(!PX_ScriptAsmScan(&compiler)) + goto __ERROR; + PX_LexerSetState(lexerstate); + if(!PX_ScriptAsmCc(&compiler)) + goto __ERROR; + + PX_ScriptAsmLink(&compiler); + + //Header + woffset=sizeof(PX_SCRIPT_ASM_HEADER); + PX_memset(&header,0,sizeof(header)); + header.magic=*((px_dword *)"PASM"); + header.stacksize=compiler.stacksize; + header.globalsize=compiler.globalsize; + header.threadcount=compiler.threadcount; + header.oftfunc=woffset; + header.funcCount=PX_ScriptAsmGetFuncCount(&compiler); + woffset+=header.funcCount*sizeof(PX_SCRIPT_EXPORT_FUNCTION); + header.ofthost=woffset; + header.hostCount=compiler.HostTable.size; + woffset+=header.hostCount*sizeof(PX_SCRIPT_ASM_HOST_NODE); + header.oftString=woffset; + header.stringSize=PX_ScriptAsmStringSize(&compiler); + woffset+=header.stringSize; + header.oftmem=woffset; + header.memsize=PX_ScriptAsmMemorySize(&compiler); + woffset+=header.memsize; + header.oftbin=woffset; + + PX_MemoryCat(binmemory,&header,sizeof(header)); + for (i=0;ibfunction) + { + PX_memset(expFunc.name,0,sizeof(expFunc.name)); + PX_strcpy(expFunc.name,PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler.LabelTable,i)->mnemonic,sizeof(expFunc.name)); + expFunc.Addr=PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler.LabelTable,i)->binaddr; + PX_MemoryCat(binmemory,&expFunc,sizeof(expFunc)); + } + } + + for (i=0;iname,sizeof(host.name)); + host.map=PX_NULL; + host.userptr=PX_NULL; + expFunc.Addr=0; + PX_MemoryCat(binmemory,&host,sizeof(host)); + } + + for (i=0;istr.buffer; + PX_MemoryCat(binmemory,pbuf,PX_strlen(pbuf)+1); + } + + for (i=0;imem.usedsize; + pbuf=(px_char *)PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler.memoriesTable,i)->mem.buffer; + PX_MemoryCat(binmemory,&bufsize,sizeof(px_dword)); + PX_MemoryCat(binmemory,pbuf,bufsize); + } + + + binsize=0; + for (i=0;iopCode,1); + PX_MemoryCat(binmemory,pinstrs->optype,3); + PX_MemoryCat(binmemory,pinstrs->param,pinstrs->opcount*sizeof(px_dword)); + binsize+=pinstrs->opcount*sizeof(px_dword)+4; + } + pheader=(PX_SCRIPT_ASM_HEADER *)binmemory->buffer; + pheader->binsize=binsize; + + pheader->CRC=PX_crc32(binmemory->buffer+8,binmemory->usedsize-8); + + //pTexpfunc=(PX_SCRIPT_EXPORT_FUNCTION *)(binmemory->buffer+header.oftfunc); + + PX_LexerFree(&compiler.lexer); + //link + PX_ListFree(&compiler.LabelTable); + PX_ListFree(&compiler.HostTable); + for (i=0;iname); + PX_StringFree(&PX_LISTAT(PX_SCRIPT_ASM_ASSUME_NODE,&compiler.assumeTable,i)->assume); + } + PX_ListFree(&compiler.assumeTable); + for (i=0;istr); + } + PX_ListFree(&compiler.StringTable); + for (i=0;imem); + } + PX_ListFree(&compiler.memoriesTable); + + PX_ListFree(&compiler.GrammarInstrTable); + PX_VectorFree(&compiler.StreamTable); + + return PX_TRUE; + + __ERROR: + //free compiler + //lexer + PX_LexerFree(&compiler.lexer); + //link + PX_ListFree(&compiler.LabelTable); + PX_ListFree(&compiler.HostTable); + for (i=0;iname); + PX_StringFree(&PX_LISTAT(PX_SCRIPT_ASM_ASSUME_NODE,&compiler.assumeTable,i)->assume); + } + PX_ListFree(&compiler.assumeTable); + for (i=0;istr); + } + PX_ListFree(&compiler.StringTable); + for (i=0;imem); + } + PX_ListFree(&compiler.memoriesTable); + + PX_ListFree(&compiler.GrammarInstrTable); + PX_VectorFree(&compiler.StreamTable); + return PX_FALSE; + +} + +px_bool PX_ScriptAsmOptimization(px_string *asmcode) +{ + px_bool opt=PX_FALSE; + + + do{ + opt=PX_FALSE; + opt=opt|PX_StringTrimer_Solve(asmcode,"SUB SP,0\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"SUB %1,0\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"ADD %1,0\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"MUL %1,1\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"PUSH %1\nPOP %1\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"RET\nRET\n","RET\n"); + opt=opt|PX_StringTrimer_Solve(asmcode,"PUSH %1\nPOP %2\n","MOV %2,%1\n"); + opt=opt|PX_StringTrimer_Solve(asmcode,"MOV R%1,%2\nMOV %3,R%1\n","MOV %3,%2\n"); + opt=opt|PX_StringTrimer_Solve(asmcode,"MOV R2,0\nFLT R2\n","MOV R2,0.0\n"); + opt=opt|PX_StringTrimer_Solve(asmcode,"PUSH R1\nMOV R2,%1\nPOP R1\n","MOV R2,%1\n"); + }while(opt); + + return PX_TRUE; +} + +px_char * PX_ScriptASMCompilerError() +{ + return PX_Script_ASMError; +} diff --git a/UI/PainterEngine/kernel/PX_Script_ASMCompiler.h b/UI/PainterEngine/kernel/PX_Script_ASMCompiler.h new file mode 100644 index 0000000..ecfd965 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Script_ASMCompiler.h @@ -0,0 +1,7 @@ +#ifndef PX_SCRIPT_ASM_COMPILER_H +#define PX_SCRIPT_ASM_COMPILER_H +#include "PX_ScriptCore.h" +px_bool PX_ScriptAsmCompile(px_memorypool *mp,px_char *asmcode,px_memory *binmemory); +px_bool PX_ScriptAsmOptimization(px_string *asmcode); +px_char * PX_ScriptASMCompilerError(void); +#endif diff --git a/UI/PainterEngine/kernel/PX_Script_Interpreter.c b/UI/PainterEngine/kernel/PX_Script_Interpreter.c new file mode 100644 index 0000000..d6a1d13 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Script_Interpreter.c @@ -0,0 +1,10755 @@ +#include "PX_Script_Interpreter.h" + +static px_char *PX_Script_Keywords[]={"IF","ELSE","SWITCH","CASE","WHILE","FOR","BREAK","RETURN","STRUCT","FUNCTION","EXPORT","HOST","INT","FLOAT","STRING","MEMORY","_BOOT","RETURN","_ASM"}; +static px_char PX_Script_InterpreterError[256]; + +px_void PX_ScriptTranslatorError(px_lexer *lexer,px_char *info) +{ + if (lexer) + { + lexer->Sources[lexer->SourceOffset]='\0'; + PX_Script_InterpreterError[0]='\0'; + if (lexer->SourceOffset>200) + { + PX_strcpy(PX_Script_InterpreterError,lexer->Sources+lexer->SourceOffset-200,200); + } + else + { + PX_strcpy(PX_Script_InterpreterError,lexer->Sources,200); + } + } + PX_LOG(info); +} + +px_void PX_ScriptParserClearStack(PX_SCRIPT_Analysis *analysis) +{ + int i; + PX_SCRIPT_VARIABLES *pvar; + for (i=0;iv_variablesStackTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesStackTable,i); + if(pvar->bInitialized) + PX_StringFree(&pvar->GlobalInitializeValue); + + PX_StringFree(&pvar->Mnemonic); + } + PX_VectorClear(&analysis->v_variablesStackTable); + analysis->currentAllocStackSize=0; +} + +PX_LEXER_LEXEME_TYPE PX_ScriptTranslatorNextToken(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while ((type= PX_LexerGetNextLexeme(lexer))==PX_LEXER_LEXEME_TYPE_SPACER); + return type; +} +PX_LEXER_LEXEME_TYPE PX_ScriptTranslatorNextTokenSN(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while ((type= PX_LexerGetNextLexeme(lexer))==PX_LEXER_LEXEME_TYPE_SPACER||type==PX_LEXER_LEXEME_TYPE_NEWLINE); + + return type; +} +px_bool PX_ScriptCompilerInitialize(PX_SCRIPT_LIBRARY *lib,px_memorypool *mp) +{ + lib->mp=mp; + PX_VectorInitialize(mp,&lib->codeLibraries,sizeof(PX_SCRIPT_CODE),1); + return PX_TRUE; +} +px_void PX_ScriptCompilerFree(PX_SCRIPT_LIBRARY *lib) +{ + int i; + for (i=0;icodeLibraries.size;i++) + { + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->name); + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->code); + } + PX_VectorFree(&lib->codeLibraries); +} +px_bool PX_ScriptCompilerLoad(PX_SCRIPT_LIBRARY *lib,const px_char *code) +{ + px_lexer lexer; + PX_SCRIPT_CODE scode; + int i; + scode.bInclude=PX_FALSE; + + + PX_LexerInit(&lexer,lib->mp); + PX_LexerRegisterComment(&lexer,"//","\n"); + PX_LexerRegisterComment(&lexer,"/*","*/"); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + PX_LexerRegisterContainer(&lexer,"\"","\""); + PX_LexerSetTokenCase(&lexer,PX_LEXER_LEXEME_CASE_UPPER); + + if(!PX_LexerLoadSourceFromMemory(&lexer,code)) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + if (!PX_strequ(lexer.CurLexeme.buffer,"#NAME")) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_SPACER) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_CONATINER) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + PX_StringInitialize(lib->mp,&scode.code); + PX_StringInitialize(lib->mp,&scode.name); + + + PX_StringCat(&scode.name,lexer.CurLexeme.buffer); + PX_LexerGetIncludedString(&lexer,&scode.name); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_NEWLINE) + { + PX_StringFree(&scode.name); + PX_StringFree(&scode.code); + PX_LexerFree(&lexer); + return PX_FALSE; + } + + PX_StringCat(&scode.code,lexer.Sources+lexer.SourceOffset); + PX_LexerFree(&lexer); + + + for (i=0;icodeLibraries.size;i++) + { + if (PX_strequ(scode.name.buffer,PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->name.buffer)) + { + PX_StringFree(&scode.name); + PX_StringFree(&scode.code); + return PX_FALSE; + } + } + + PX_VectorPushback(&lib->codeLibraries,&scode); + + return PX_TRUE; +} +static px_bool PX_ScriptParseInclude(px_string *codes,PX_SCRIPT_LIBRARY *lib,const px_char *name) +{ + px_lexer lexer; + PX_LEXER_STATE lexerState; + px_int allocsize; + px_int quotes,singleQuotes,i; + px_bool bfound; + px_char *exchangeBuffer; + PX_LEXER_LEXEME_TYPE type; + + PX_LexerInit(&lexer,lib->mp); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterDelimiter(&lexer,';'); + PX_LexerRegisterDelimiter(&lexer,'+'); + PX_LexerRegisterDelimiter(&lexer,'-'); + PX_LexerRegisterDelimiter(&lexer,'*'); + PX_LexerRegisterDelimiter(&lexer,'/'); + PX_LexerRegisterDelimiter(&lexer,'%'); + PX_LexerRegisterDelimiter(&lexer,'&'); + PX_LexerRegisterDelimiter(&lexer,'^'); + PX_LexerRegisterDelimiter(&lexer,'~'); + PX_LexerRegisterDelimiter(&lexer,'('); + PX_LexerRegisterDelimiter(&lexer,')'); + PX_LexerRegisterDelimiter(&lexer,'!'); + PX_LexerRegisterDelimiter(&lexer,'='); + PX_LexerRegisterDelimiter(&lexer,'>'); + PX_LexerRegisterDelimiter(&lexer,'<'); + PX_LexerRegisterDelimiter(&lexer,'{'); + PX_LexerRegisterDelimiter(&lexer,'}'); + PX_LexerRegisterDelimiter(&lexer,'['); + PX_LexerRegisterDelimiter(&lexer,']'); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + quotes=PX_LexerRegisterContainer(&lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&lexer,quotes,'\\'); + singleQuotes=PX_LexerRegisterContainer(&lexer,"\'","\'"); + PX_LexerSetTokenCase(&lexer,PX_LEXER_LEXEME_CASE_UPPER); + + + if(!PX_LexerSetSourcePointer(&lexer,codes->buffer)) + goto _ERROR; + + while (PX_TRUE) + { + + lexerState=PX_LexerGetState(&lexer); + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_ERR) + { + PX_ScriptTranslatorError(&lexer,"lexer error."); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + if (PX_strequ(lexer.CurLexeme.buffer,"#INCLUDE")) + { + if (PX_ScriptTranslatorNextToken(&lexer)==PX_LEXER_LEXEME_TYPE_CONATINER) + { + if (PX_LexerGetCurrentContainerType(&lexer)!=quotes) + { + PX_ScriptTranslatorError(&lexer,"syntactic error: include \"name\" expected but not found."); + goto _ERROR; + } + PX_LexerGetIncludedString(&lexer,&lexer.CurLexeme); + bfound=PX_FALSE; + for (i=0;icodeLibraries.size;i++) + { + if (PX_strequ(lexer.CurLexeme.buffer,PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->name.buffer)) + { + if (PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->bInclude!=PX_FALSE) + { + PX_ScriptTranslatorError(&lexer,"syntactic error: reduplicate included-name."); + goto _ERROR; + } + PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->bInclude=PX_TRUE; + bfound=PX_TRUE; + + + if ((type=PX_ScriptTranslatorNextToken(&lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE) + { + if (type==PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptTranslatorError(&lexer,"syntactic error:include on last line without newline"); + goto _ERROR; + } + else + { + PX_ScriptTranslatorError(&lexer,"syntactic error:new line expected but not found."); + goto _ERROR; + } + + } + allocsize=lexerState.offset+PX_strlen(PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->code.buffer)+PX_strlen(lexer.Sources+PX_LexerGetState(&lexer).offset-1)+1; + exchangeBuffer=(px_char *)MP_Malloc(lib->mp,allocsize); + + if (exchangeBuffer==PX_NULL) + { + PX_ScriptTranslatorError(&lexer,"memory error."); + goto _ERROR; + } + + PX_memcpy(exchangeBuffer,codes->buffer,lexerState.offset); + exchangeBuffer[lexerState.offset]=0; + PX_strcat(exchangeBuffer,PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->code.buffer); + PX_strcat(exchangeBuffer,lexer.Sources+PX_LexerGetState(&lexer).offset-1); + + PX_StringClear(codes); + PX_StringCat(codes,exchangeBuffer); + + PX_LexerSetSourcePointer(&lexer,codes->buffer); + PX_LexerSetState(lexerState); + + MP_Free(lib->mp,exchangeBuffer); + + break; + + } + } + if (!bfound) + { + PX_ScriptTranslatorError(&lexer,"include error: source not found."); + goto _ERROR; + } + } + else + { + PX_ScriptTranslatorError(&lexer,"syntactic error:include-name expected but not found."); + goto _ERROR; + } + } + } + } + PX_LexerSetSourcePointer(&lexer,PX_NULL); + PX_LexerFree(&lexer); + return PX_TRUE; +_ERROR: + PX_LexerFree(&lexer); + PX_LexerSetSourcePointer(&lexer,PX_NULL); + return PX_FALSE; + +} +typedef struct +{ + px_string name; + px_string token; +}PX_SCRIPT_TRANSLATOR_DEFINE_ST; +static px_bool PX_ScriptParseDefine(px_string *codes,PX_SCRIPT_LIBRARY *lib,const px_char *name) +{ + px_lexer lexer; + px_int startIndex; + px_int quotes,singleQuotes,i; + PX_LEXER_LEXEME_TYPE type; + px_vector defines; + PX_SCRIPT_TRANSLATOR_DEFINE_ST defst; + + PX_VectorInitialize(lib->mp,&defines,sizeof(PX_SCRIPT_TRANSLATOR_DEFINE_ST),32); + + PX_LexerInit(&lexer,lib->mp); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterDelimiter(&lexer,';'); + PX_LexerRegisterDelimiter(&lexer,'+'); + PX_LexerRegisterDelimiter(&lexer,'-'); + PX_LexerRegisterDelimiter(&lexer,'*'); + PX_LexerRegisterDelimiter(&lexer,'/'); + PX_LexerRegisterDelimiter(&lexer,'%'); + PX_LexerRegisterDelimiter(&lexer,'&'); + PX_LexerRegisterDelimiter(&lexer,'^'); + PX_LexerRegisterDelimiter(&lexer,'~'); + PX_LexerRegisterDelimiter(&lexer,'('); + PX_LexerRegisterDelimiter(&lexer,')'); + PX_LexerRegisterDelimiter(&lexer,'!'); + PX_LexerRegisterDelimiter(&lexer,'='); + PX_LexerRegisterDelimiter(&lexer,'>'); + PX_LexerRegisterDelimiter(&lexer,'<'); + PX_LexerRegisterDelimiter(&lexer,'{'); + PX_LexerRegisterDelimiter(&lexer,'}'); + PX_LexerRegisterDelimiter(&lexer,'['); + PX_LexerRegisterDelimiter(&lexer,']'); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + quotes=PX_LexerRegisterContainer(&lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&lexer,quotes,'\\'); + singleQuotes=PX_LexerRegisterContainer(&lexer,"\'","\'"); + PX_LexerSetTokenCase(&lexer,PX_LEXER_LEXEME_CASE_UPPER); + + + if(!PX_LexerSetSourcePointer(&lexer,codes->buffer)) + goto _ERROR; + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_ERR) + { + PX_ScriptTranslatorError(&lexer,"lexer error."); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + if (PX_strequ(lexer.CurLexeme.buffer,"#DEFINE")) + { + startIndex=lexer.SourceOffset-7; + if (PX_ScriptTranslatorNextToken(&lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&lexer,"syntactic error:include-name expected but not found."); + goto _ERROR; + } + + + + PX_StringInitialize(lib->mp,&defst.name); + PX_StringCat(&defst.name,lexer.CurLexeme.buffer); + + if (PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_SPACER) + { + PX_ScriptTranslatorError(&lexer,"syntactic error:spacer expected but not found."); + goto _ERROR; + } + + PX_StringInitialize(lib->mp,&defst.token); + + if (lexer.Sources[lexer.SourceOffset]==' ') + { + lexer.SourceOffset++; + } + + while (PX_TRUE) + { + if (lexer.Sources[lexer.SourceOffset]!='\n'&&lexer.Sources[lexer.SourceOffset]!='\0'&&lexer.Sources[lexer.SourceOffset]!='\r') + { + PX_StringCatChar(&defst.token,lexer.Sources[lexer.SourceOffset]); + lexer.SourceOffset++; + } + else + break; + } + PX_VectorPushback(&defines,&defst); + + PX_StringReplaceRange(codes,startIndex,lexer.SourceOffset,""); + PX_LexerSetSourcePointer(&lexer,codes->buffer); + lexer.SourceOffset=startIndex; + } + } + } + + lexer.SourceOffset=0; + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_ERR) + { + PX_ScriptTranslatorError(&lexer,"lexer error."); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + for (i=0;iname.buffer)) + { + startIndex=lexer.SourceOffset-PX_strlen(lexer.CurLexeme.buffer); + PX_StringReplaceRange(codes,startIndex,lexer.SourceOffset-1,PX_VECTORAT(PX_SCRIPT_TRANSLATOR_DEFINE_ST,&defines,i)->token.buffer); + PX_LexerSetSourcePointer(&lexer,codes->buffer); + lexer.SourceOffset=startIndex+PX_strlen(PX_VECTORAT(PX_SCRIPT_TRANSLATOR_DEFINE_ST,&defines,i)->token.buffer); + break; + } + } + } + } + PX_LexerSetSourcePointer(&lexer,PX_NULL); + PX_LexerFree(&lexer); + for (i=0;iname); + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_TRANSLATOR_DEFINE_ST,&defines,i)->token); + } + PX_VectorFree(&defines); + return PX_TRUE; +_ERROR: + PX_LexerFree(&lexer); + for (i=0;iname); + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_TRANSLATOR_DEFINE_ST,&defines,i)->token); + } + PX_LexerSetSourcePointer(&lexer,PX_NULL); + PX_VectorFree(&defines); + return PX_FALSE; +} +static px_bool PX_ScriptParsePretreatment(px_string *codes,PX_SCRIPT_LIBRARY *lib,const px_char *name) +{ + + if(!PX_ScriptParseInclude(codes,lib,name)) + goto _ERROR; + + if(!PX_ScriptParseDefine(codes,lib,name)) + goto _ERROR; + + return PX_TRUE; +_ERROR: + return PX_FALSE; +} +static px_bool PX_ScriptParseIsValidToken(px_char *token) +{ + px_int i; + if (token[0]=='\0'||PX_charIsNumeric(token[0])) + { + return PX_FALSE; + } + + for(i=0;i='A'&&*token<='Z')||(*token>='a'&&*token<='z')||*token=='_'||*token==':'||PX_charIsNumeric(*token)) + { + token++; + continue; + } + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseCheckBrackets(px_char *pstr) +{ + px_int big=0,mid=0,lit=0; + while (*pstr) + { + if (*pstr=='{') + { + big++; + } + + if (*pstr=='}') + { + big--; + } + + if (*pstr=='[') + { + mid++; + } + + if (*pstr==']') + { + mid--; + } + + if (*pstr=='(') + { + lit++; + } + + if (*pstr==')') + { + lit--; + } + if (big<0||lit<0) + { + return PX_FALSE; + } + pstr++; + } + if (big||mid||lit) + { + return PX_FALSE; + } + return PX_TRUE; +} +static PX_SCRIPT_STRUCT *PX_ScriptParseGetStructByIndex(PX_SCRIPT_Analysis *analysis,px_int index) +{ + if (index>=analysis->v_struct.size||index<0) + { + return PX_NULL; + } + + return PX_VECTORAT(PX_SCRIPT_STRUCT,&analysis->v_struct,index); +} +static px_char PX_ScriptParseGetOpLevel(px_char *op,px_bool binary) +{ + if (PX_strlen(op)==1) + { + switch(*op) + { + case '(': + case ')': + case '[': + case ']': + case '.': + return 1; + case '!': + case '~': + return 2; + case '+': + case '-': + { + if (binary) + return 4; + else + return 2; + } + break; + case '>': + return 6; + case '<': + return 6; + case '*': + if(!binary) return 2; + case '/': + case '%': + return 3; + case '&': + if(!binary) return 2; + return 8; + case '^': + return 9; + case '|': + return 10; + + case '=': + return 14; + case ',': + return 15; + + } + } + else + { + if (PX_strequ(op,">=")) + { + return 6; + } + if (PX_strequ(op,"<=")) + { + return 6; + } + if (PX_strequ(op,"<<")) + { + return 5; + } + if (PX_strequ(op,">>")) + { + return 5; + } + if (PX_strequ(op,"&&")) + { + return 11; + } + if (PX_strequ(op,"||")) + { + return 12; + } + if (PX_strequ(op,"==")) + { + return 7; + } + if (PX_strequ(op,"!=")) + { + return 7; + } + if (PX_strequ(op,"++")) + { + return 2; + } + if (PX_strequ(op,"--")) + { + return 2; + } + } + return -1; +} +static px_bool PX_ScriptParse_AST_PushToken(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,PX_SCRIPT_EXPR_STREAM atom,PX_SCRIPT_STRUCT *_inset,PX_SCRIPT_STRUCT **_outset) +{ + px_int i; + PX_SCRIPT_VARIABLES *pvar; + PX_SCRIPT_AST_OPERAND operand; + PX_SCRIPT_SETMEMBER *psetmem; + + //Struct offset + if (_inset!=PX_NULL) + { + for (i=0;i<_inset->members.size;i++) + { + psetmem=PX_VECTORAT(PX_SCRIPT_SETMEMBER,&_inset->members,i); + if (PX_strequ(psetmem->defvar.Mnemonic.buffer,atom.code.buffer)) + { + *_outset=PX_NULL; + switch(psetmem->defvar.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRUCT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT; + operand._oft=psetmem->offset; + operand.pSet=PX_ScriptParseGetStructByIndex(analysis,psetmem->defvar.setIndex); + *_outset=operand.pSet; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY: + { + + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_ScriptParseGetStructByIndex(analysis,psetmem->defvar.setIndex); + *_outset=operand.pSet; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_ScriptParseGetStructByIndex(analysis,psetmem->defvar.setIndex); + *_outset=operand.pSet; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + default: + break; + } + + } + } + return PX_FALSE; + } + + + + if (atom.opclass==PX_SCRIPT_TRANSLATOR_OP_CLASS_VAR) + { + + for (i=0;iv_variablesStackTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesStackTable,i); + if (PX_strequ(pvar->Mnemonic.buffer,atom.code.buffer)) + { + operand.region=PX_SCRIPT_VARIABLE_REGION_LOCAL; + goto _CONTINUE; + } + } + + for (i=0;iv_variablesGlobalTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,i); + if (PX_strequ(pvar->Mnemonic.buffer,atom.code.buffer)) + { + operand.region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + goto _CONTINUE; + } + } + return PX_FALSE; + + _CONTINUE: + switch (pvar->type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRUCT: + { + *_outset=PX_ScriptParseGetStructByIndex(analysis,pvar->setIndex); + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_ScriptParseGetStructByIndex(analysis,pvar->setIndex); + PX_VectorPushback(tk,&operand); + } + break; + + case PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY: + { + *_outset=PX_ScriptParseGetStructByIndex(analysis,pvar->setIndex); + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_ScriptParseGetStructByIndex(analysis,pvar->setIndex); + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR: + { + *_outset=PX_NULL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR: + { + *_outset=PX_NULL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR: + { + *_outset=PX_NULL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR: + { + *_outset=PX_NULL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR: + { + *_outset=PX_ScriptParseGetStructByIndex(analysis,pvar->setIndex); + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_ScriptParseGetStructByIndex(analysis,pvar->setIndex); + PX_VectorPushback(tk,&operand); + } + break; + default: + return PX_FALSE; + } + + return PX_TRUE; + } + else if(atom.opclass==PX_SCRIPT_TRANSLATOR_OP_CLASS_CONST) + { + //Hexadecimal + if (atom.code.buffer[0]=='0'&&atom.code.buffer[1]=='X') + { + operand.region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + operand._int=PX_htoi(atom.code.buffer+2); + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + else + { + if (!PX_strIsNumeric(atom.code.buffer)) + { + return PX_FALSE; + } + operand.region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + if (PX_strIsFloat(atom.code.buffer)) + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + operand._float=PX_atof(atom.code.buffer); + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + else + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + operand._int=PX_atoi(atom.code.buffer); + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + } + + } + else if(atom.opclass==PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER) + { + operand.region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + if(atom.code.buffer[0]=='"') + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + operand._contaniner=atom.code.buffer; + } + else if(atom.code.buffer[0]=='\'') + { + if (atom.code.buffer[2]!='\'') + { + return PX_FALSE; + } + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + operand._int=atom.code.buffer[1]; + } + else + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + operand._contaniner=atom.code.buffer; + } + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + else + { + return PX_FALSE; + } +} +static px_bool PX_ScriptParseAST_PushOpcode(PX_SCRIPT_Analysis *analysis,px_vector *op,PX_SCRIPT_EXPR_STREAM atom) +{ + PX_SCRIPT_AST_OPCODE opc; + switch(atom.type) + { + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADD: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_ADD; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INC: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_INC; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_POSITIVE: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_POSITIVE; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SUB: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_SUB; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DEC: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_DEC; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NEGATIVE: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_NEGATIVE; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MUL: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_MUL; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DIV: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_DIV; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_AND; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_OR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_NOT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_XOR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_XOR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INV: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_INV; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MOD: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_MOD; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHL: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_SHL; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_SHR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_DOT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_COMMA; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_IDX; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN: + return PX_TRUE; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGE: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LARGE; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGEEUQ: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LARGEEQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESS: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LESS; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESSEQU: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LESSEQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_UNEQU: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_UNEQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_EQU: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_EQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LGEQU: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LGEQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LAND; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LOR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LOR; + break; + + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_PTR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_PTR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_ADR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_OFT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_INT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FLOAT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_FLOAT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRING: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_STRING; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMORY: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_MEMORY; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRLEN: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_STRLEN; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMLEN: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_MEMLEN; + break; + default: + return PX_FALSE; + } + opc.level=atom.oplevel; + PX_VectorPushback(op,&opc); + return PX_TRUE; +} +static px_bool PX_ScriptParseIsOperandNumericType(PX_SCRIPT_AST_OPERAND ope) +{ + if (ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT||ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST) + { + return PX_TRUE; + } + if (ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + { + return PX_TRUE; + } + if (ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX||ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + return PX_TRUE; + } + return PX_FALSE; +} +static PX_SCRIPT_STRUCT *PX_ScriptParseGetStructInfo(PX_SCRIPT_Analysis *analysis,px_char *name) +{ + px_int i; + PX_SCRIPT_STRUCT *pset; + for (i=0;iv_struct.size;i++) + { + pset=PX_VECTORAT(PX_SCRIPT_STRUCT,&analysis->v_struct,i); + if (PX_strequ(name,pset->Name.buffer)) + { + return pset; + } + } + return PX_NULL; +} +static px_int PX_ScriptParseGetSetIndex(PX_SCRIPT_Analysis *analysis,px_char *name) +{ + px_int i; + PX_SCRIPT_STRUCT *pset; + for (i=0;iv_struct.size;i++) + { + pset=PX_VECTORAT(PX_SCRIPT_STRUCT,&analysis->v_struct,i); + if (PX_strequ(name,pset->Name.buffer)) + { + return i; + } + } + return -1; +} +static px_bool PX_ScriptParseIsCompareAbleOperand(PX_SCRIPT_AST_OPERAND operand1,PX_SCRIPT_AST_OPERAND operand2) +{ + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + return PX_TRUE; + break; + default: + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + return PX_TRUE; + break; + default: + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT: + return PX_FALSE; + default: + if (operand1.operandType!=operand2.operandType) + { + return PX_FALSE; + } + } + } + return PX_TRUE; +} +static px_bool PX_ScriptParseAST_MapTokenToR2(PX_SCRIPT_Analysis *analysis,PX_SCRIPT_AST_OPERAND operand,px_string *out) +{ + px_string fmrString; + + switch(operand.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_VOID: + PX_StringCat(out,"MOV R2,0\n"); + break; + ////////////////////////////////////////////////////////////////////////// + //R2 + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: //string var + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY://memory var + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: //int var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR://float var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR://string var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR://memory var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR://struct xx var[x] + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,LOCAL[%1]\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"MOV R2,GLOBAL[R2]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,BP\nSUB R2,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + return PX_TRUE; + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,BP\nSUB R2,%1\n",PX_STRINGFORMAT_INT(operand._oft));// + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand._int)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1.7\n",PX_STRINGFORMAT_FLOAT(operand._float)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + { + ////////////////////////////////////////////////////////////////////////// + + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_STRING(operand._contaniner)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + //Check operand + ////////////////////////////////////////////////////////////////////////// + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + switch(operand.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRCHR R2,LOCAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRCHR R2,LOCAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRCHR R2,GLOBAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRCHR R2,GLOBAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRCHR R2,GLOBAL[R1],R3\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRCHR R2,STRSET GLOBAL[R1],%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + + switch(operand.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R2,LOCAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMBYTE R2,LOCAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R2,GLOBAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMBYTE R2,GLOBAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMBYTE R2,GLOBAL[R1],R3\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R2,STRSET GLOBAL[R1],%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + + } + break; + + default: + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseAST_MapTokenToR1(PX_SCRIPT_Analysis *analysis,PX_SCRIPT_AST_OPERAND operand,px_string *out) +{ + px_string fmrString; + + switch(operand.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_VOID: + PX_StringCat(out,"MOV R1,0\n"); + break; + ////////////////////////////////////////////////////////////////////////// + //R2 + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: //string var + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY://memory var + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: //int var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR://float var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR://string var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR://memory var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR://struct xx var[x] + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R1,LOCAL[%1]\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"MOV R1,GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R1,BP\nSUB R1,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + return PX_TRUE; + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R1,BP\nSUB R1,%1\n",PX_STRINGFORMAT_INT(operand._oft));// + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_INT(operand._int)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1.7\n",PX_STRINGFORMAT_FLOAT(operand._float)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + { + ////////////////////////////////////////////////////////////////////////// + + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_STRING(operand._contaniner)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + //Check operand + ////////////////////////////////////////////////////////////////////////// + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + switch(operand.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRCHR R1,LOCAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRCHR R1,LOCAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRCHR R1,GLOBAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRCHR R1,GLOBAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRCHR R1,GLOBAL[R1],R3\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRCHR R1,STRSET GLOBAL[R1],%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + + switch(operand.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R1,LOCAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMBYTE R1,LOCAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R1,GLOBAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMBYTE R1,GLOBAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMBYTE R1,GLOBAL[R1],R3\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R1,STRSET GLOBAL[R1],%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_DOT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + px_string fmrString; + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + + if (operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT) + { + return PX_FALSE; + } + + if (operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"POP R1\nADD R1,%1\nPUSH R1\n",PX_STRINGFORMAT_INT(operand2._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + operand2._oft=0; + operand2.region=operand1.region; + } + else if (operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + operand2._oft+=operand1._oft; + operand2.region=operand1.region; + } + else if (operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + operand2._oft=operand1._oft-operand2._oft; + operand2.region=operand1.region; + } + else + { + return PX_FALSE; + } + + + PX_VectorPop(tk); + + pTop=(PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1); + *pTop=operand2; + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_EQUAL(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operandLeft,operandRight,*pTop; + px_string fmrString; + if (tk->size<2) + { + return PX_FALSE; + } + operandLeft=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operandRight=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + + + switch(operandRight.operandType) + { + ////////////////////////////////////////////////////////////////////////// + //R2 + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + //Check operand1 + switch (operandLeft.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + PX_StringCat(out,"FLT R2\n"); + + } + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + + } + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) return PX_FALSE; + + //Check operand1 + switch (operandLeft.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + + if(operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + PX_StringCat(out,"INT R2\n"); + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + } + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: //string var + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY://memory var + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: //int var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR://float var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR://string var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR://memory var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR://struct xx var[x] + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + } + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=operandLeft.pSet; + + if (operandLeft.operandType!=operandRight.operandType) + { + return PX_FALSE; + } + + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandRight._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandRight._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"MOV R2,GLOBAL[R2]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + return PX_FALSE; + } + + PX_StringFree(&fmrString); + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Invalid left-value."); + return PX_FALSE; + } + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT: + { + if (operandLeft.operandType!=operandRight.operandType) + { + return PX_FALSE; + } + if (operandLeft.pSet!=operandRight.pSet) + { + return PX_FALSE; + } + PX_StringInitialize(analysis->mp,&fmrString); + + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + if (!PX_ScriptParseAST_MapTokenToR1(analysis,operandLeft,out)) + { + return PX_FALSE; + } + + + PX_StringFormat1(&fmrString,"DATACPY R1,R2,%1\n",PX_STRINGFORMAT_INT(operandLeft.pSet->size)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH R1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=operandLeft.pSet; + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR) + { + return PX_FALSE; + } + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR) + { + return PX_FALSE; + } + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR) + { + return PX_FALSE; + } + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR) + { + return PX_FALSE; + } + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR) + { + return PX_FALSE; + } + + + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operandRight._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,BP\nSUB R2,%1\n",PX_STRINGFORMAT_INT(operandRight._oft));// + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + break; + default: + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid left-value."); + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + PX_StringFree(&fmrString); + pTop->operandType=operandRight.operandType; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=operandLeft.pSet; + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + { + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + //Check operand1 + switch (operandLeft.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + PX_StringCat(out,"FLT R2\n"); + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + //Check operand1 + switch (operandLeft.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + + if(operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + PX_StringCat(out,"INT R2\n"); + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + { + pTop->operandType=operandRight.operandType; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + ////////////////////////////////////////////////////////////////////////// + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING) + { + return PX_FALSE; + } + + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY) + { + return PX_FALSE; + } + + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_STRING(operandRight._contaniner)); + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + //Check operand1 + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + ////////////////////////////////////////////////////////////////////////// + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + return PX_FALSE; + } + + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + { + ////////////////////////////////////////////////////////////////////////// + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + ////////////////////////////////////////////////////////////////////////// + } + else if(operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX) + { + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + else + { + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX) + { + return PX_FALSE; + } + + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + { + ////////////////////////////////////////////////////////////////////////// + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + ////////////////////////////////////////////////////////////////////////// + } + else if(operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + else + { + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_IDX(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,resOperand; + px_string fmrString; + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + PX_VectorPop(tk); + + PX_StringInitialize(analysis->mp,&fmrString); + + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) + { + return PX_FALSE; + } + } + break; + default: + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + + switch (operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR: + { + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT; + resOperand.pSet=operand1.pSet; + PX_StringFormat1(&fmrString,"MUL R2,%1\n",PX_STRINGFORMAT_INT(operand1.pSet->size)); + PX_StringCat(out,fmrString.buffer); + } + + if (operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"ADD R2,GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"ADD R2,LOCAL[%1]\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"ADD R2,GLOBAL[R3]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT; + resOperand.pSet=operand1.pSet; + PX_StringFormat1(&fmrString,"MUL R2,%1\n",PX_STRINGFORMAT_INT(operand1.pSet->size)); + PX_StringCat(out,fmrString.buffer); + + } + + if (operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"ADD R2,%1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"SUB R2,%1\nADD R2,BP\n",PX_STRINGFORMAT_INT(operand1._oft));// + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"ADD R2,GLOBAL[R3]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + resOperand.bAtomPopIndex=PX_TRUE; + + if(operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY) + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX; + else + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX; + + if (operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringCat(out,"PUSH R2\n"); + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringCat(out,"PUSH R2\n"); + PX_StringFormat1(&fmrString,"MOV R2,BP\nSUB R2,%1\n",PX_STRINGFORMAT_INT(operand1._oft));// + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringCat(out,"MOV R1,R2\n"); + PX_StringCat(out,"POP R2\n"); + PX_StringCat(out,"PUSH R1\n"); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + break; + default: + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + PX_StringCat(out,"PUSH R2\n"); + + resOperand.region=PX_SCRIPT_VARIABLE_REGION_POP; + resOperand._int=0; + resOperand._oft=0; + PX_VectorPushback(tk,&resOperand); + + PX_StringFree(&fmrString); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_OFT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + px_string fmrString; + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"ADD R1,%1\nPUSH R1\n",PX_STRINGFORMAT_INT(operand2._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + + pTop=(PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1); + *pTop=operand2; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_PTR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,resOperand; + px_string fmrString; + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + + PX_StringInitialize(analysis->mp,&fmrString); + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT; + resOperand.pSet=operand1.pSet; + } + + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT; + resOperand.pSet=operand1.pSet; + + } + else + { + return PX_FALSE; + } + + if (!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) + { + return PX_FALSE; + } + + PX_StringCat(out,"PUSH R1\n"); + resOperand.region=PX_SCRIPT_VARIABLE_REGION_POP; + resOperand._oft=0; + resOperand._int=0; + PX_VectorPushback(tk,&resOperand); + + PX_StringFree(&fmrString); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_ADR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + px_string fmrString; + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + + pTop=((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + break; + default: + return PX_FALSE; + } + + if(operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop->_int=operand1._int; + pTop->region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + return PX_TRUE; + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV R1,BP\nSUB R1,%1\n",PX_STRINGFORMAT_INT(operand1._oft));// + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH R1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + + pTop->_int=operand1._int; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else if (operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else + { + return PX_FALSE; + } + + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_ADD(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + px_string fmrString; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int+operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._int+operand2._float; + return PX_TRUE; + } + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._float+operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=operand1._float+operand2._float; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + if(operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + else + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"STRCAT R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MEMCAT R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"STRCAT R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=operand1.operandType; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MEMCAT R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=operand1.operandType; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MUL R2,%1\n",PX_STRINGFORMAT_INT(operand1.pSet->size)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_INC(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1; + px_string fmrString; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + if (operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR) + { + return PX_FALSE; + } + switch(operand1.region) + { + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"ADD GLOBAL[%1],1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"ADD LOCAL[%1],1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"ADD GLOBAL[R1],1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringCat(out,"PUSH R1\n"); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_POSITIVE(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + break; + default: + return PX_FALSE; + } + PX_VectorPop(op); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_SUB(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int-operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._int-operand2._float; + return PX_TRUE; + } + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._float-operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=operand1._float-operand2._float; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + if(operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + else + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_DEC(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1; + px_string fmrString; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + + if (operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR) + { + return PX_FALSE; + } + switch(operand1.region) + { + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"SUB GLOBAL[%1],1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"SUB LOCAL[%1],1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"SUB GLOBAL[R1],1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringCat(out,"PUSH R1\n"); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_NEGATIVE(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=-operand1._int; + return PX_TRUE; + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=-operand1._float; + return PX_TRUE; + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + break; + default: + return PX_FALSE; + } + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"NEG R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_MUL(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + pTop->_int=operand1._int*operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._int*operand2._float; + return PX_TRUE; + } + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._float*operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=operand1._float*operand2._float; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MUL R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + if(operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + else + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MUL R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_DIV(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2._int==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Divide by zero error."); + return PX_FALSE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int/operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._int/operand2._float; + return PX_TRUE; + } + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2._int==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Divide by zero error."); + return PX_FALSE; + } + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._float/operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=operand1._float/operand2._float; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"DIV R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + if(operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + else + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"DIV R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_AND(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int&operand2._int; + return PX_TRUE; + } + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"AND R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_OR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int|operand2._int; + return PX_TRUE; + } + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"OR R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_NOT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=(operand1._int==0); + return PX_TRUE; + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + break; + default: + return PX_FALSE; + } + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"NOT R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_XOR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int^operand2._int; + return PX_TRUE; + } + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"XOR R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_INV(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=(~operand1._int); + return PX_TRUE; + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + break; + default: + return PX_FALSE; + } + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"INV R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_MOD(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2._int==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"mod by zero error."); + return PX_FALSE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int%operand2._int; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MOD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_SHL(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int<operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_SHR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int>>operand2._int; + return PX_TRUE; + } + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SHR R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_INT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + PX_StringCat(out,"INT R1\n"); + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + PX_StringCat(out,"STRTOI R1,R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_FLOAT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + PX_StringCat(out,"FLT R1\n"); + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + PX_StringCat(out,"STRTOF R1,R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_STRING(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + PX_StringCat(out,"STRFRI R1,R1\n"); + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + PX_StringCat(out,"STRFRF R1,R1\n"); + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + PX_StringCat(out,"MEMTSTR R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_MEMORY(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + PX_StringCat(out,"STRTMEM R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_STRLEN(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + PX_StringCat(out,"STRLEN R1,R2\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_MEMLEN(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + PX_StringCat(out,"MEMLEN R1,R2\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} + +static px_bool PX_ScriptParseLastInstr_LARGE(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"SUB R1,R2\n"); + PX_StringCat(out,"LGGZ R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LARGEEQU(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"SUB R1,R2\n"); + PX_StringCat(out,"LGGEZ R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LESS(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"SUB R1,R2\n"); + PX_StringCat(out,"LGLZ R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LAND(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"ANDL R1,R2\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LOR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"ORL R1,R2\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LESSEQU(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"SUB R1,R2\n"); + PX_StringCat(out,"LGLEZ R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LGEQU(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT: + PX_ScriptTranslatorError(&analysis->lexer,"Struct-type could not be compared."); + return PX_FALSE; + default: + if (operand1.operandType!=operand2.operandType) + { + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"LGE R1,R1,R2\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_UNEQU(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT: + PX_ScriptTranslatorError(&analysis->lexer,"Struct-type could not be compared."); + return PX_FALSE; + default: + if (operand1.operandType!=operand2.operandType) + { + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"LGNE R1,R1,R2\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + + PX_SCRIPT_AST_OPCODE opcode; + opcode=*((PX_SCRIPT_AST_OPCODE *)PX_VECTORAT(PX_SCRIPT_AST_OPCODE,op,op->size-1)); + + if (tk->size==1&&op->size==0)//(const) + { + return PX_TRUE; + } + + switch(opcode.operandType) + { + case PX_SCRIPT_AST_OPCODE_TYPE_EQU: + { + if(!PX_ScriptParseLastInstr_EQUAL(analysis,op,tk,out)) + { + PX_ScriptTranslatorError(&analysis->lexer,"'=' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_DOT: + { + if(!PX_ScriptParseLastInstr_DOT(analysis,op,tk,out)){ + PX_ScriptTranslatorError(&analysis->lexer,"'.' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_IDX: + { + if(!PX_ScriptParseLastInstr_IDX(analysis,op,tk,out)){ + PX_ScriptTranslatorError(&analysis->lexer,"'.' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_OFT: + { + if(!PX_ScriptParseLastInstr_OFT(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'[]' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_PTR: + { + if(!PX_ScriptParseLastInstr_PTR(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'->' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_ADR: + { + if(!PX_ScriptParseLastInstr_ADR(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'&' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_ADD: + { + if(!PX_ScriptParseLastInstr_ADD(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'+' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_INC: + { + if(!PX_ScriptParseLastInstr_INC(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'++' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_POSITIVE: + { + if(!PX_ScriptParseLastInstr_POSITIVE(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'+' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_SUB: + { + if(!PX_ScriptParseLastInstr_SUB(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'-' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_DEC: + { + if(!PX_ScriptParseLastInstr_DEC(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'--' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_NEGATIVE: + { + if(!PX_ScriptParseLastInstr_NEGATIVE(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'-' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_MUL: + { + if(!PX_ScriptParseLastInstr_MUL(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'*' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_DIV: + { + if(!PX_ScriptParseLastInstr_DIV(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'/' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_AND: + { + if(!PX_ScriptParseLastInstr_AND(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'&' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_OR: + { + if(!PX_ScriptParseLastInstr_OR(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'|' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_NOT: + { + if(!PX_ScriptParseLastInstr_NOT(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'!' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_XOR: + { + if(!PX_ScriptParseLastInstr_XOR(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'^' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_INV: + { + if(!PX_ScriptParseLastInstr_INV(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'~' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_MOD: + { + if(!PX_ScriptParseLastInstr_MOD(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'%' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_SHL: + { + if(!PX_ScriptParseLastInstr_SHL(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'<<' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_SHR: + { + if(!PX_ScriptParseLastInstr_SHR(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'>>' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LARGE: + { + if(!PX_ScriptParseLastInstr_LARGE(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'>' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LARGEEQU: + { + if(!PX_ScriptParseLastInstr_LARGEEQU(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'>=' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LESS: + { + if(!PX_ScriptParseLastInstr_LESS(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'<' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LESSEQU: + { + if(!PX_ScriptParseLastInstr_LESSEQU(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'<=' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LGEQU: + { + if(!PX_ScriptParseLastInstr_LGEQU(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'>=' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_UNEQU: + { + if(!PX_ScriptParseLastInstr_UNEQU(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'!=' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LAND: + { + if(!PX_ScriptParseLastInstr_LAND(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'&&' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LOR: + { + if(!PX_ScriptParseLastInstr_LOR(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'||' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_INT: + { + if(!PX_ScriptParseLastInstr_INT(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'int' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_FLOAT: + { + if(!PX_ScriptParseLastInstr_FLOAT(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'float' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_STRING: + { + if(!PX_ScriptParseLastInstr_STRING(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'string' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_MEMORY: + { + if(!PX_ScriptParseLastInstr_MEMORY(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'memory' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_STRLEN: + { + if(!PX_ScriptParseLastInstr_STRLEN(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'strlen' not match error."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_MEMLEN: + { + if(!PX_ScriptParseLastInstr_MEMLEN(analysis,op,tk,out)) { + PX_ScriptTranslatorError(&analysis->lexer,"'memlen' not match error."); + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseExpressionStream(PX_SCRIPT_Analysis *analysis,px_vector *stream,px_int *offset,PX_SCRIPT_AST_OPERAND *pretOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_TYPE expectedEndl,px_string *out) +{ + px_vector vOp; + px_vector vTk; + px_vector *op=&vOp; + px_vector *tk=&vTk; + PX_SCRIPT_AST_OPERAND retOperand; + PX_SCRIPT_AST_OPCODE *plastop=PX_NULL; + PX_SCRIPT_STRUCT *pcurrentSet=PX_NULL; + px_int level=PX_SCRIPT_OPCODE_LEVEL_BOTTOM; + PX_SCRIPT_EXPR_STREAM *pVec=(PX_SCRIPT_EXPR_STREAM *)(stream->data); + PX_SCRIPT_FUNCTION *pfunc=PX_NULL; + px_int i,LBracketBalance,MBracketBalance,paramBeginIndex[16],paramcount=0; + px_string fmrString; + PX_VectorInitialize(analysis->mp,op,sizeof(PX_SCRIPT_AST_OPCODE),16); + PX_VectorInitialize(analysis->mp,tk,sizeof(PX_SCRIPT_AST_OPERAND),16); + + + + while(*offsetsize) + { + if (pVec[*offset].type==expectedEndl) + { + while(op->size) + { + if(!PX_ScriptParseLastInstr(analysis,op,tk,out)) + { + goto _ERROR; + } + } + *pretOperand=*(PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,0)); + + break; + } + switch(pVec[*offset].type) + { + case PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN: + { + if(!PX_ScriptParse_AST_PushToken(analysis,op,tk,pVec[*offset],pcurrentSet,&pcurrentSet)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function error."); + goto _ERROR; + } + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FUNCTION: + { + //call func + for (i=0;iv_functions.size;i++) + { + pfunc=PX_VECTORAT(PX_SCRIPT_FUNCTION,&analysis->v_functions,i); + if (PX_strequ(pfunc->name,pVec[*offset].code.buffer)) + { + break; + } + } + if (i==analysis->v_functions.size) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function name undefined."); + goto _ERROR; + } + + //( + (*offset)++; + if (pVec[*offset].type!=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN) + { + PX_ScriptTranslatorError(&analysis->lexer,"'(' expected but not found."); + goto _ERROR; + } + (*offset)++; + LBracketBalance=1; + paramcount=0; + paramBeginIndex[paramcount]=*offset; + + if(pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND) + { + paramBeginIndex[paramcount]++; + } + else + while (PX_TRUE) + { + if (!LBracketBalance&&pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND) + { + break; + } + MBracketBalance=0; + while (PX_TRUE) + { + if (*offset==stream->size) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function parse error."); + goto _ERROR; + } + switch(pVec[*offset].type) + { + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN: + LBracketBalance++; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND: + LBracketBalance--; + if (LBracketBalance==0) + { + goto _EXPR_OUT; + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN: + MBracketBalance++; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETEND: + MBracketBalance--; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA: + if (LBracketBalance==1&&MBracketBalance==0) + { + goto _EXPR_OUT; + } + break; + default: + break; + } + (*offset)++; + } +_EXPR_OUT: + if (pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND) + { + (*offset)++; + paramcount++; + paramBeginIndex[paramcount]=*offset; + break; + } + else + { + (*offset)++; + paramcount++; + paramBeginIndex[paramcount]=*offset; + } + + } + if (paramcount!=pfunc->parametersCount) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function parameter-count error."); + goto _ERROR; + } + + + for (i=paramcount-1;i>=0;i--) + //for (i=0;ilexer,"Function left-bracket-end missing."); + goto _ERROR; + } + } + else + { + if (!PX_ScriptParseExpressionStream(analysis,stream,¶mBeginIndex[i],&retOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA,out)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function comma missing."); + goto _ERROR; + } + } + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRUCT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + pcurrentSet=retOperand.pSet; + } + + switch (retOperand.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: +// if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT) +// { +// PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); +// goto _ERROR; +// } +// break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR||PX_ScriptParseGetStructByIndex(analysis,pfunc->parameters[i].setIndex)!=retOperand.pSet) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"unexpected error."); + goto _ERROR; + } + if (!PX_ScriptParseAST_MapTokenToR1(analysis,retOperand,out)) + { + goto _ERROR; + } + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + { + if (pfunc->parameters[i].type==PX_SCRIPT_PARSER_VAR_TYPE_INT) + { + PX_StringCat(out,"INT R1\n"); + } + } + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST\ + ||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + if (pfunc->parameters[i].type==PX_SCRIPT_PARSER_VAR_TYPE_FLOAT) + { + PX_StringCat(out,"FLT R1\n"); + } + } + + PX_StringCat(out,"PUSH R1\n"); + + } + + //call + switch(pfunc->type) + { + case PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_EXPORT: + case PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_CUSTOM: + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"CALL %1\n",PX_STRINGFORMAT_STRING(pfunc->name)); + PX_StringCat(out,fmrString.buffer); + + if(pfunc->parametersCount) + { + PX_StringFormat1(&fmrString,"POPN %1\n",PX_STRINGFORMAT_INT(pfunc->parametersSize)); + PX_StringCat(out,fmrString.buffer); + } + + + PX_StringFree(&fmrString); + break; + case PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_HOST: + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"CALL $%1\n",PX_STRINGFORMAT_STRING(pfunc->name)); + PX_StringCat(out,fmrString.buffer); + if(pfunc->parametersCount) + { + PX_StringFormat1(&fmrString,"POPN %1\n",PX_STRINGFORMAT_INT(pfunc->parametersSize)); + PX_StringCat(out,fmrString.buffer); + } + + PX_StringFree(&fmrString); + break; + } + + retOperand.region=PX_SCRIPT_VARIABLE_REGION_POP; + retOperand._oft=0; + + switch (pfunc->retType) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + retOperand.pSet=PX_ScriptParseGetStructByIndex(analysis,pfunc->retSetIndex); + break; + case PX_SCRIPT_PARSER_VAR_TYPE_VOID: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + retOperand._int=0; + break; + default: + goto _ERROR; + } + + + + PX_StringCat(out,"PUSH R1\n"); + PX_VectorPushback(tk,&retOperand); + + + + (*offset)=paramBeginIndex[paramcount]-1; + + + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN: + { + (*offset)++; + + if(!PX_ScriptParseExpressionStream(analysis,stream,offset,&retOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND,out)) + goto _ERROR; + + PX_VectorPushback(tk,&retOperand); + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRUCT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + pcurrentSet=retOperand.pSet; + } + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN: + { + + if (level>pVec[*offset].oplevel) + { + level=pVec[*offset].oplevel; + if(!PX_ScriptParseAST_PushOpcode(analysis,op,pVec[*offset])) goto _ERROR; + } + else + { + level=pVec[*offset].oplevel; + do{ + if(op->size>0) + { + if(!PX_ScriptParseLastInstr(analysis,op,tk,out)) goto _ERROR; + if(op->size) + plastop=PX_VECTORAT(PX_SCRIPT_AST_OPCODE,op,op->size-1); + } + else + break; + }while(op->size&&plastop->level<=level); + if(!PX_ScriptParseAST_PushOpcode(analysis,op,pVec[*offset])) goto _ERROR; + } + + (*offset)++; + if(!PX_ScriptParseExpressionStream(analysis,stream,offset,&retOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETEND,out)) + goto _ERROR; + + PX_VectorPushback(tk,&retOperand); + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRUCT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + pcurrentSet=retOperand.pSet; + } + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA: + { + while(op->size) + { + if(!PX_ScriptParseLastInstr(analysis,op,tk,out)) + goto _ERROR; + } + *pretOperand=*(PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,0)); + if(!PX_ScriptParseAST_MapTokenToR1(analysis,*pretOperand,out)) goto _ERROR; + + if (tk->size!=1) + { + goto _ERROR; + } + + level=PX_SCRIPT_OPCODE_LEVEL_BOTTOM; + PX_VectorPop(tk); + break; + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADD: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INC: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_POSITIVE: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SUB: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DEC: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NEGATIVE: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MUL: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DIV: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_XOR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INV: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MOD: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHL: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGE: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGEEUQ: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESS: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESSEQU: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_UNEQU: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_EQU: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LGEQU: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LOR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_PTR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FLOAT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRING: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMORY: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMLEN: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRLEN: + { + if (pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT||pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT) + { + if (pcurrentSet==PX_NULL) + { + goto _ERROR; + } + } + else + { + pcurrentSet=PX_NULL; + } + if (level>pVec[*offset].oplevel) + { + level=pVec[*offset].oplevel; + if(!PX_ScriptParseAST_PushOpcode(analysis,op,pVec[*offset])) goto _ERROR;; + } + else + { + level=pVec[*offset].oplevel; + do{ + if(op->size>0) + { + if(!PX_ScriptParseLastInstr(analysis,op,tk,out)) goto _ERROR;; + if(op->size) + plastop=PX_VECTORAT(PX_SCRIPT_AST_OPCODE,op,op->size-1); + } + else + break; + }while(op->size&&plastop->level<=level); + if(!PX_ScriptParseAST_PushOpcode(analysis,op,pVec[*offset])) goto _ERROR;; + } + } + break; + default: + { + goto _ERROR; + } + } + (*offset)++; + } + + PX_VectorFree(op); + PX_VectorFree(tk); + return PX_TRUE; +_ERROR: + PX_VectorFree(op); + PX_VectorFree(tk); + return PX_FALSE; +} +#define PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE 1 +#define PX_SCRIPT_EXPRESSION_ACCEPT_BINARY 2 +#define PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN 4 +#define PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START 8 +#define PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_END 16 +#define PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START 32 +#define PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_END 16 +#define PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_START (PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START) +#define PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END (PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_END|PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_END) +static px_bool PX_ScriptParseExpression(PX_SCRIPT_Analysis *analysis,px_char *expr,px_string *out,PX_SCRIPT_AST_OPERAND *retOperand) +{ + px_int i; + px_uint quotes; + px_vector stream,opStack,tkStack; + px_lexer lexer; + PX_LEXER_STATE state; + PX_LEXER_LEXEME_TYPE type; + px_int streamOft=1; + px_int accept_type; + PX_SCRIPT_AST_OPERAND operand; + + px_bool ret=PX_TRUE; + + PX_SCRIPT_EXPR_STREAM Op; + + if (PX_strlen(expr)==0) + { + retOperand->operandType=PX_SCRIPT_AST_OPERAND_TYPE_VOID; + retOperand->region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + return PX_TRUE; + } + + PX_StringClear(out); + + + PX_LexerInit(&lexer,analysis->mp); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterDelimiter(&lexer,';'); + PX_LexerRegisterDelimiter(&lexer,'+'); + PX_LexerRegisterDelimiter(&lexer,'-'); + PX_LexerRegisterDelimiter(&lexer,'*'); + PX_LexerRegisterDelimiter(&lexer,'/'); + PX_LexerRegisterDelimiter(&lexer,'%'); + PX_LexerRegisterDelimiter(&lexer,'&'); + PX_LexerRegisterDelimiter(&lexer,'|'); + PX_LexerRegisterDelimiter(&lexer,'^'); + PX_LexerRegisterDelimiter(&lexer,'~'); + PX_LexerRegisterDelimiter(&lexer,'('); + PX_LexerRegisterDelimiter(&lexer,')'); + PX_LexerRegisterDelimiter(&lexer,'!'); + PX_LexerRegisterDelimiter(&lexer,'='); + PX_LexerRegisterDelimiter(&lexer,'>'); + PX_LexerRegisterDelimiter(&lexer,'<'); + PX_LexerRegisterDelimiter(&lexer,'{'); + PX_LexerRegisterDelimiter(&lexer,'}'); + PX_LexerRegisterDelimiter(&lexer,'['); + PX_LexerRegisterDelimiter(&lexer,']'); + PX_LexerRegisterDelimiter(&lexer,'.'); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + quotes=PX_LexerRegisterContainer(&lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&lexer,quotes,'\\'); + PX_LexerRegisterContainer(&lexer,"\'","\'"); + PX_LexerRegisterContainer(&lexer,"@","@"); + PX_LexerSetTokenCase(&lexer,PX_LEXER_LEXEME_CASE_UPPER); + + PX_LexerSetNumericMatch(&lexer,PX_TRUE); + + + if(!PX_LexerLoadSourceFromMemory(&lexer,expr)) + return PX_FALSE; + + PX_VectorInitialize(analysis->mp,&stream,sizeof(PX_SCRIPT_EXPR_STREAM),32); + PX_VectorInitialize(analysis->mp,&opStack,sizeof(PX_SCRIPT_AST_OPCODE),32); + PX_VectorInitialize(analysis->mp,&tkStack,sizeof(PX_SCRIPT_AST_OPERAND),32); + + // + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_START; + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=0; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + ////////////////////////////////////////////////////////////////////////// + //key word + if (PX_strequ(lexer.CurLexeme.buffer,"STRLEN")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRLEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"MEMLEN")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMLEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"INT")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"FLOAT")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FLOAT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"STRING")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRING; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"MEMORY")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMORY; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_ScriptParseIsValidToken(lexer.CurLexeme.buffer)) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + + state=PX_LexerGetState(&lexer); + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='(') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FUNCTION; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_FUNC; + Op.oplevel=0; + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_VAR; + Op.oplevel=0; + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + PX_VectorPushback(&stream,&Op); + + PX_LexerSetState(state); + + } + else if(PX_strIsNumeric(lexer.CurLexeme.buffer)) + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONST; + Op.oplevel=0; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if(lexer.CurLexeme.buffer[0]=='0'&&lexer.CurLexeme.buffer[1]=='X') + { + for (i=2;lexer.CurLexeme.buffer[i];i++) + { + if (lexer.CurLexeme.buffer[i]>='0'&&lexer.CurLexeme.buffer[i]<='F') + { + continue; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Illegal hexadecimal."); + goto _CLEAR; + } + } + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONST; + Op.oplevel=0; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + } + else if (type==PX_LEXER_LEXEME_TYPE_CONATINER) + { + if (lexer.CurrentContainerType==quotes) + { + PX_StringReplace(&lexer.CurLexeme,"\n","\\n"); + PX_StringReplace(&lexer.CurLexeme,"\r","\\r"); + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=0; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + else if (type==PX_LEXER_LEXEME_TYPE_DELIMITER) + { + switch(lexer.Symbol) + { + case '+': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0&&(accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='+') + { + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INC; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("++",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"++"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + else + { + ret=PX_FALSE; + goto _CLEAR; + } + } + else + { + PX_LexerSetState(state); + + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADD; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("+",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"+"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_POSITIVE; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("+",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"+"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + } + + + } + break; + + case '-': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0&&(accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + type=PX_LexerGetNextLexeme(&lexer); + if(type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='>') + { + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("->",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"->"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + else + { + ret=PX_FALSE; + goto _CLEAR; + } + } + else if(type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='-') + { + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DEC; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("--",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"--"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + else + { + ret=PX_FALSE; + goto _CLEAR; + } + } + else + { + PX_LexerSetState(state); + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SUB; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("-",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"-"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NEGATIVE; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("-",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"-"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + } + + } + break; + + case '*': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0&&(accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MUL; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("*",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"*"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_PTR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("*",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"*"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + } + break; + + case '/': + { + + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DIV; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("/",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"/"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + case '[': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=PX_ScriptParseGetOpLevel("[",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"["); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + case ']': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_END)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETEND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=PX_ScriptParseGetOpLevel("]",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"]"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + break; + + case '(': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=PX_ScriptParseGetOpLevel("(",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"("); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_END|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + case ')': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_END)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=PX_ScriptParseGetOpLevel(")",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,")"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END|PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START; + } + break; + + case '.': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel(lexer.CurLexeme.buffer,PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"."); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + break; + + case '!': + { + state=PX_LexerGetState(&lexer); + type=PX_LexerGetNextLexeme(&lexer); + if(type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_LexerSetState(state); + + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("!",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"!"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + else if (lexer.Symbol=='=') + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_UNEQU; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("!=",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"!="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='(') + { + PX_LexerSetState(state); + + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("!",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"!"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + } + break; + + case '~': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INV; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("~",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"~"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + break; + + case '^': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_XOR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("^",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"^"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + case '%': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MOD; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel(lexer.CurLexeme.buffer,PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"%"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + + case '<': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESS; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("<",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"<"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='<') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHL; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("<<",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"<<"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='=') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESSEQU; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("<=",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"<="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + } + break; + + case '>': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGE; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel(">",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,">"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='>') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel(">>",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,">>"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='=') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGEEUQ; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel(">=",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,">="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + } + break; + + case '=': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='=') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LGEQU; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("==",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"=="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + PX_LexerSetState(state); + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_EQU; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("=",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + continue; + } + } + break; + + + case '&': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0&&(accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("&",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"&"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='&') + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("&&",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"&&"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='(') + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("&",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"&"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("&",PX_FALSE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"&"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + + + } + break; + + case '|': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("|",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"|"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='|') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("||",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"||"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='(') + { + PX_LexerSetState(state); + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("|",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"|"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + } + break; + + case ',': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel(",",PX_TRUE); + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,","); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + } + } + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=0; + PX_StringInitialize(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + PX_StringCat(out,";--------"); + + for(i=0;icode); + } + PX_VectorFree(&stream); + + for (i=0;icode); + } + PX_VectorFree(&opStack); + + for (i=0;ilexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)) + { + resType=PX_SCRIPT_PARSER_VAR_TYPE_INT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)) + { + resType=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)) + { + resType=PX_SCRIPT_PARSER_VAR_TYPE_STRING; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)) + { + resType=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY; + } + else + { + goto _ERROR; + } + + while(PX_TRUE) + { + PX_memset(&variable,0,sizeof(variable)); + variable.bParam=PX_FALSE; + variable.bInitialized=PX_FALSE; + variable.BeginIndex=-1; + variable.size=-1; + variable.type=resType; + variable.layer=analysis->v_astStructure.size; + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + switch(variable.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR; + } + break; + default: + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + goto _ERROR; + } + + PX_StringInitialize(analysis->mp,&variable.Mnemonic); + PX_StringCat(&variable.Mnemonic,analysis->lexer.CurLexeme.buffer); + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + + if (analysis->lexer.Symbol=='[') + { + + switch(variable.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY; + } + break; + + default: + goto _ERROR; + } + + if(PX_ScriptTranslatorNextToken(&analysis->lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + if(!PX_strIsNumeric(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + } + + variable.size=PX_atoi(analysis->lexer.CurLexeme.buffer); + + if (variable.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid array"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=']') + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + else if(analysis->lexer.Symbol=='=') + { + variable.size=1; + variable.bInitialized=PX_TRUE; + PX_StringInitialize(analysis->mp,&variable.GlobalInitializeValue); + while(PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol==';') + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol==',') + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptTranslatorError(&analysis->lexer,"Error Expression."); + PX_StringFree(&variable.Mnemonic); + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + PX_StringCat(&variable.GlobalInitializeValue,analysis->lexer.CurLexeme.buffer); + } + + if (PX_strlen(variable.GlobalInitializeValue.buffer)==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Error Expression."); + PX_StringFree(&variable.Mnemonic); + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + + } + else + { + variable.size=1; + } + + + if (analysis->functionInside) + { + + for (i=0;iv_variablesStackTable.size;i++) + { + if (PX_strequ(variable.Mnemonic.buffer,PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesStackTable,i)->Mnemonic.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"variable redefined."); + PX_StringFree(&variable.Mnemonic); + if(variable.bInitialized) + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesStackTable,analysis->v_variablesStackTable.size-1); + variable.BeginIndex=pvar->BeginIndex+variable.size; + + if (variable.BeginIndex+variable.size-1>analysis->currentAllocStackSize) + { + analysis->currentAllocStackSize=variable.BeginIndex+variable.size-1; + } + + PX_VectorPushback(&analysis->v_variablesStackTable,&variable); + + ////////////////////////////////////////////////////////////////////////// + if(variable.bInitialized) + { + px_string code; + px_string exprgen; + PX_SCRIPT_AST_OPERAND retOperand; + PX_StringInitialize(analysis->mp,&code); + PX_StringInitialize(analysis->mp,&exprgen); + PX_StringFormat2(&code,"%1=%2",PX_STRINGFORMAT_STRING(variable.Mnemonic.buffer),PX_STRINGFORMAT_STRING(variable.GlobalInitializeValue.buffer)); + if (!PX_ScriptParseExpression(analysis,code.buffer,&exprgen,&retOperand)) + { + PX_StringFree(&code); + PX_StringFree(&exprgen); + return PX_FALSE; + } + PX_StringCat(&analysis->code,exprgen.buffer); + PX_StringFree(&exprgen); + PX_StringFree(&code); + + } + else + { + if (variable.type==PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + px_string code; + px_string exprgen; + PX_SCRIPT_AST_OPERAND retOperand; + PX_StringInitialize(analysis->mp,&code); + PX_StringInitialize(analysis->mp,&exprgen); + PX_StringFormat1(&code,"%1=\"\"",PX_STRINGFORMAT_STRING(variable.Mnemonic.buffer)); + if (!PX_ScriptParseExpression(analysis,code.buffer,&exprgen,&retOperand)) + { + PX_StringFree(&code); + PX_StringFree(&exprgen); + return PX_FALSE; + } + PX_StringCat(&analysis->code,exprgen.buffer); + PX_StringFree(&exprgen); + PX_StringFree(&code); + } + + if (variable.type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + px_string code; + px_string exprgen; + PX_SCRIPT_AST_OPERAND retOperand; + PX_StringInitialize(analysis->mp,&code); + PX_StringInitialize(analysis->mp,&exprgen); + PX_StringFormat1(&code,"%1=@@",PX_STRINGFORMAT_STRING(variable.Mnemonic.buffer)); + if (!PX_ScriptParseExpression(analysis,code.buffer,&exprgen,&retOperand)) + { + PX_StringFree(&code); + PX_StringFree(&exprgen); + return PX_FALSE; + } + PX_StringCat(&analysis->code,exprgen.buffer); + PX_StringFree(&exprgen); + PX_StringFree(&code); + } + + if (variable.type==PX_SCRIPT_PARSER_VAR_TYPE_STRUCT) + { + px_string code; + PX_SCRIPT_STRUCT *pset=PX_ScriptParseGetStructByIndex(analysis,variable.setIndex); + PX_StringInitialize(analysis->mp,&code); + if (pset) + { + px_int j; + for (j=0;jmembers.size;j++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&pset->members,j); + + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + PX_StringFormat1(&code,"MOV LOCAL[%1],\"\"\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&analysis->code,code.buffer); + } + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + PX_StringFormat1(&code,"MOV LOCAL[%1],@@\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&analysis->code,code.buffer); + } + } + } + PX_StringFree(&code); + } + }; + ////////////////////////////////////////////////////////////////////////// + } + else + { + for (i=0;iv_variablesGlobalTable.size;i++) + { + if (PX_strequ(variable.Mnemonic.buffer,PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,i)->Mnemonic.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"variable redefined."); + PX_StringFree(&variable.Mnemonic); + if(variable.bInitialized) + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + + if (analysis->v_variablesGlobalTable.size==0) + { + variable.BeginIndex=0; + } + else + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,analysis->v_variablesGlobalTable.size-1); + variable.BeginIndex=pvar->BeginIndex+pvar->size; + } + + + PX_VectorPushback(&analysis->v_variablesGlobalTable,&variable); + } + + if(analysis->lexer.Symbol==',') + { + continue; + } + else if(analysis->lexer.Symbol==';') + { + break; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + } + + return PX_TRUE; +_ERROR: + return PX_FALSE; +} +static px_bool PX_ScriptParseStruct(PX_SCRIPT_Analysis *analysis) +{ + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_VARIABLES variable,*pvar; + PX_SCRIPT_STRUCT *pset; + PX_LEXER_STATE state; + px_int i; + variable.bParam=PX_FALSE; + variable.bInitialized=PX_FALSE; + variable.BeginIndex=-1; + variable.size=-1; + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT; + + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid struct name"); + goto _ERROR; + } + + if (!(pset=PX_ScriptParseGetStructInfo(analysis,analysis->lexer.CurLexeme.buffer))) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid struct type"); + goto _ERROR; + } + + variable.setIndex=PX_ScriptParseGetSetIndex(analysis,analysis->lexer.CurLexeme.buffer); + variable.layer=analysis->v_astStructure.size; + + while(PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + variable.size=1; + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR; + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid struct name"); + goto _ERROR; + } + + PX_StringInitialize(analysis->mp,&variable.Mnemonic); + PX_StringCat(&variable.Mnemonic,analysis->lexer.CurLexeme.buffer); + + + state=PX_LexerGetState(&analysis->lexer); + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + + if (analysis->lexer.Symbol=='[') + { + if (variable.type==PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Array of struct pointers is not support."); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY; + + if(PX_ScriptTranslatorNextToken(&analysis->lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + if(!PX_strIsNumeric(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + } + + + if(variable.type==PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR) + variable.size=PX_atoi(analysis->lexer.CurLexeme.buffer); + else + variable.size=PX_atoi(analysis->lexer.CurLexeme.buffer)*pset->size; + + if (variable.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid array"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=']') + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + } + else + { + if(variable.type==PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR) + variable.size=1; + else + variable.size=pset->size; + } + + + if (analysis->functionInside) + { + PX_SCRIPT_VARIABLES *pvar; + for (i=0;iv_variablesStackTable.size;i++) + { + if (PX_strequ(variable.Mnemonic.buffer,PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesStackTable,i)->Mnemonic.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"variable redefined."); + PX_StringFree(&variable.Mnemonic); + if(variable.bInitialized) + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + + pvar=PX_VECTORLAST(PX_SCRIPT_VARIABLES,&analysis->v_variablesStackTable); + variable.BeginIndex=pvar->BeginIndex+variable.size; + + if (variable.BeginIndex+variable.size-1>analysis->currentAllocStackSize) + { + analysis->currentAllocStackSize=variable.BeginIndex+variable.size-1; + } + + PX_VectorPushback(&analysis->v_variablesStackTable,&variable); + } + else + { + for (i=0;iv_variablesGlobalTable.size;i++) + { + if (PX_strequ(variable.Mnemonic.buffer,PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,i)->Mnemonic.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"variable redefined."); + PX_StringFree(&variable.Mnemonic); + if(variable.bInitialized) + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + + if (analysis->v_variablesGlobalTable.size==0) + { + variable.BeginIndex=0; + } + else + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,analysis->v_variablesGlobalTable.size-1); + variable.BeginIndex=pvar->BeginIndex+pvar->size; + } + + + PX_VectorPushback(&analysis->v_variablesGlobalTable,&variable); + } + + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + if(analysis->lexer.Symbol==',') + { + continue; + } + else if(analysis->lexer.Symbol==';') + { + break; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + } + + return PX_TRUE; +_ERROR: + return PX_FALSE; +} +px_bool PX_ScriptParseStructDefine(PX_SCRIPT_Analysis *analysis) +{ + PX_SCRIPT_SETMEMBER member,*pmember; + PX_SCRIPT_STRUCT vSet,*pSet; + PX_LEXER_LEXEME_TYPE type; + px_int i; + + member.defvar.BeginIndex=-1; + + vSet.size=0; + + if ((PX_ScriptTranslatorNextToken(&analysis->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + return PX_FALSE; + } + + PX_StringInitialize(analysis->mp,&vSet.Name); + PX_StringCat(&vSet.Name,analysis->lexer.CurLexeme.buffer); + PX_VectorInitialize(analysis->mp,&vSet.members,sizeof(PX_SCRIPT_SETMEMBER),1); + + if ((PX_ScriptTranslatorNextTokenSN(&analysis->lexer))!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + goto _ERROR; + } + if (analysis->lexer.Symbol!='{') + { + goto _ERROR; + } + + while(PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE) + { + continue; + } + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='}') + { + break; + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if((pSet=PX_ScriptParseGetStructInfo(analysis,analysis->lexer.CurLexeme.buffer))!=PX_NULL) + { + member.defvar.setIndex=PX_ScriptParseGetSetIndex(analysis,analysis->lexer.CurLexeme.buffer); + + ////////////////////////////////////////////////////////////////////////// + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR; + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + goto _ERROR; + } + + PX_StringInitialize(analysis->mp,&member.defvar.Mnemonic); + PX_StringCat(&member.defvar.Mnemonic,analysis->lexer.CurLexeme.buffer); + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + + if (analysis->lexer.Symbol=='[') + { + if (member.defvar.type==PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Array of struct is not support."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY; + + if(PX_ScriptTranslatorNextToken(&analysis->lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if(!PX_strIsNumeric(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + member.offset=vSet.size; + vSet.size+=PX_atoi(analysis->lexer.CurLexeme.buffer)*pSet->size; + + if (vSet.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid array"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=']') + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if(analysis->lexer.Symbol==',') + { + PX_VectorPushback(&vSet.members,&member); + continue; + } + else if(analysis->lexer.Symbol==';') + { + PX_VectorPushback(&vSet.members,&member); + break; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + break; + } + else if(analysis->lexer.Symbol==';') + { + member.offset=vSet.size; + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT; + vSet.size+=pSet->size; + PX_VectorPushback(&vSet.members,&member); + break; + } + else if(analysis->lexer.Symbol==',') + { + member.offset=vSet.size; + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT; + vSet.size+=pSet->size; + PX_VectorPushback(&vSet.members,&member); + continue; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + } + ////////////////////////////////////////////////////////////////////////// + + } + else + { + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)) + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)) + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)) + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)) + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY; + } + else + { + goto _ERROR; + } + + ////////////////////////////////////////////////////////////////////////// + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + switch(member.defvar.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR; + } + break; + default: + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + goto _ERROR; + } + + PX_StringInitialize(analysis->mp,&member.defvar.Mnemonic); + PX_StringCat(&member.defvar.Mnemonic,analysis->lexer.CurLexeme.buffer); + member.defvar.bInitialized=PX_FALSE; + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + + if (analysis->lexer.Symbol=='[') + { + switch(member.defvar.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY; + } + break; + + default: + goto _ERROR; + } + + if(PX_ScriptTranslatorNextToken(&analysis->lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if(!PX_strIsNumeric(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + member.offset=vSet.size; + member.defvar.size=PX_atoi(analysis->lexer.CurLexeme.buffer); + vSet.size+=PX_atoi(analysis->lexer.CurLexeme.buffer); + + if (member.defvar.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid array"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=']') + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if(analysis->lexer.Symbol=='=') + { + PX_ScriptTranslatorError(&analysis->lexer,"Initialize of array is not support."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if(analysis->lexer.Symbol==',') + { + PX_VectorPushback(&vSet.members,&member); + continue; + } + else if(analysis->lexer.Symbol==';') + { + PX_VectorPushback(&vSet.members,&member); + break; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&member.defvar.Mnemonic); + PX_VectorPushback(&vSet.members,&member); + goto _ERROR; + } + break; + } + else if(analysis->lexer.Symbol==';') + { + member.offset=vSet.size; + member.defvar.size=1; + member.defvar.setIndex=-1; + vSet.size+=1; + + PX_VectorPushback(&vSet.members,&member); + break; + } + else if(analysis->lexer.Symbol==',') + { + member.offset=vSet.size; + member.defvar.size=1; + member.defvar.setIndex=-1; + vSet.size+=1; + PX_VectorPushback(&vSet.members,&member); + continue; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + } + ////////////////////////////////////////////////////////////////////////// + } + + } + if (vSet.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Zero size of struct"); + goto _ERROR; + } + PX_VectorPushback(&analysis->v_struct,&vSet); + return PX_TRUE; +_ERROR: + PX_StringFree(&vSet.Name); + PX_VectorFree(&vSet.members); + for (i=0;idefvar.Mnemonic); + if (pmember->defvar.bInitialized) + { + PX_StringFree(&pmember->defvar.GlobalInitializeValue); + } + } + PX_VectorFree(&vSet.members); + return PX_FALSE; +} +px_bool PX_ScriptParseFunctionDefined(PX_SCRIPT_Analysis *analysis,PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE functype) +{ + PX_SCRIPT_FUNCTION func,*pfunc=PX_NULL; + PX_SCRIPT_VARIABLES fvar; + px_int count=0,i=0,j=0; + PX_LEXER_LEXEME_TYPE type; + fvar.bParam=PX_TRUE; + func.retSetIndex=-1; + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_INT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_STRING; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_VOID; + } + else if ((func.retSetIndex=PX_ScriptParseGetSetIndex(analysis,analysis->lexer.CurLexeme.buffer))!=-1) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT; + } + else + { + goto _ERROR; + } + + //function Name + PX_ScriptParserClearStack(analysis); + func.parametersSize=0; + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + switch(func.retType) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRUCT: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR; + break; + default: + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + if (func.retType==PX_SCRIPT_PARSER_VAR_TYPE_STRUCT) + { + PX_ScriptTranslatorError(&analysis->lexer,"Could not return a struct-type"); + goto _ERROR; + } + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + return PX_FALSE; + } + + if (PX_StringLen(&analysis->lexer.CurLexeme)>PX_SCRIPT_FUNCTION_NAME_MAX_LEN) + { + return PX_FALSE; + } + PX_strcpy(func.name,analysis->lexer.CurLexeme.buffer,PX_SCRIPT_FUNCTION_NAME_MAX_LEN); + if ((PX_ScriptTranslatorNextToken(&analysis->lexer))!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!='(') + { + goto _ERROR; + } + + while (PX_TRUE) + { + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol==')') + { + break; + } + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + fvar.layer=analysis->v_astStructure.size; + fvar.size=1; + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY; + } + else if (PX_ScriptParseGetStructInfo(analysis,analysis->lexer.CurLexeme.buffer)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT; + + if ((fvar.setIndex=PX_ScriptParseGetSetIndex(analysis,analysis->lexer.CurLexeme.buffer))==-1) + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + + ////////////////////////////////////////////////////////////////////////// + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + switch(fvar.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRUCT: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR; + break; + default: + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + if (fvar.type==PX_SCRIPT_PARSER_VAR_TYPE_STRUCT) + { + PX_ScriptTranslatorError(&analysis->lexer,"Could not use a struct for parameter.consider use a struct pointer."); + goto _ERROR; + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + goto _ERROR; + } + + fvar.bInitialized=PX_FALSE; + if (analysis->v_variablesStackTable.size==0) + { + fvar.BeginIndex=-2; + } + else + { + PX_SCRIPT_VARIABLES *plastvar=PX_VECTORLAST(PX_SCRIPT_VARIABLES,&analysis->v_variablesStackTable); + fvar.BeginIndex=plastvar->BeginIndex-plastvar->size; + } + + + PX_StringInitialize(analysis->mp,&fvar.Mnemonic); + PX_StringCat(&fvar.Mnemonic,analysis->lexer.CurLexeme.buffer); + + + if (count>=PX_SCRIPT_FUNCTION_MAX_PARAM) + { + goto _ERROR; + } + + func.parameters[count]=fvar; + PX_VectorPushback(&analysis->v_variablesStackTable,&fvar); + count++; + + if ((PX_ScriptTranslatorNextToken(&analysis->lexer))!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=',') + { + if (analysis->lexer.Symbol==')') + { + break; + } + goto _ERROR; + } + } + + do + { + PX_SCRIPT_VARIABLES _ret_bp; + PX_memset(&_ret_bp,0,sizeof(_ret_bp)); + _ret_bp.BeginIndex=0; + _ret_bp.bInitialized=PX_FALSE; + _ret_bp.bParam=PX_TRUE; + PX_StringInitialize(analysis->mp,&_ret_bp.Mnemonic); + _ret_bp.size=2; + _ret_bp.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY; + PX_VectorPushback(&analysis->v_variablesStackTable,&_ret_bp); + } while (0); + + + func.parametersCount=count; + func.type=functype; + + for (i=0;iv_functions.size;i++) + { + pfunc=PX_VECTORAT(PX_SCRIPT_FUNCTION,&analysis->v_functions,i); + if (PX_strequ(pfunc->name,func.name)) + { + if (pfunc->parametersCount!=func.parametersCount) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function redefined error."); + goto _ERROR; + } + for (j=0;jparameters[j].type) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function parameters are not compatible"); + goto _ERROR; + } + } + analysis->currentFunc=*pfunc; + return PX_TRUE; + } + } + for (i=0;icurrentFunc=func; + PX_VectorPushback(&analysis->v_functions,&func); + return PX_TRUE; +_ERROR: + return PX_FALSE; +} +px_bool PX_ScriptParseFunctionGuiderCode(PX_SCRIPT_Analysis *analysis) +{ + int stacksize; + px_string code; + + px_string guiderCode; + + if(!PX_StringInitialize(analysis->mp,&guiderCode))return PX_FALSE; + + stacksize=analysis->currentAllocStackSize; + + if (analysis->currentFunc.type==PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_EXPORT) + { + PX_StringCat(&guiderCode,"EXPORT "); + } + + PX_StringCat(&guiderCode,"FUNCTION "); + PX_StringCat(&guiderCode,analysis->currentFunc.name); + PX_StringCat(&guiderCode,":\n"); + + //generate codes + PX_StringInitialize(analysis->mp,&code); + + PX_StringCat(&guiderCode,"PUSH BP\nMOV BP,SP\n"); + + if(stacksize!=0) + { + PX_StringFormat1(&code,"SUB SP,%1\n",PX_STRINGFORMAT_INT(stacksize)); + PX_StringCat(&guiderCode,code.buffer); + } + + PX_StringFree(&code); + + + if (analysis->functionguider!=-1) + { + if(!PX_StringInsert(&analysis->code,analysis->functionguider,guiderCode.buffer))return PX_FALSE; + } + else + { + PX_ASSERT(); + PX_StringFree(&guiderCode); + return PX_FALSE; + } + + analysis->functionguider=-1; + PX_StringFree(&guiderCode); + return PX_TRUE; +} +px_bool PX_ScriptParseBootCode(PX_SCRIPT_Analysis *analysis) +{ + px_int i; + PX_SCRIPT_VARIABLES *pvar; + px_string code; + px_string exprgen; + PX_SCRIPT_AST_OPERAND retOperand; + for (i=0;iv_variablesGlobalTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,i); + if(pvar->bInitialized) + { + PX_StringInitialize(analysis->mp,&code); + PX_StringInitialize(analysis->mp,&exprgen); + PX_StringFormat2(&code,"%1=%2\n",PX_STRINGFORMAT_STRING(pvar->Mnemonic.buffer),PX_STRINGFORMAT_STRING(pvar->GlobalInitializeValue.buffer)); + if (!PX_ScriptParseExpression(analysis,code.buffer,&exprgen,&retOperand)) + { + PX_StringFree(&code); + PX_StringFree(&exprgen); + return PX_FALSE; + } + PX_StringCat(&analysis->bootCode,exprgen.buffer); + PX_StringFree(&exprgen); + PX_StringFree(&code); + } + } + return PX_TRUE; +} +px_bool PX_ScriptParseFunctionReturn(PX_SCRIPT_Analysis *analysis) +{ + px_string code; + int stacksize=0; + PX_StringInitialize(analysis->mp,&code); + + stacksize=analysis->currentAllocStackSize; + + PX_StringCat(&analysis->code,"_"); + PX_StringCat(&analysis->code,analysis->currentFunc.name); + PX_StringCat(&analysis->code,"_RET:\n"); + + if(stacksize!=0) + { + PX_StringFormat1(&code,"POPN %1\n",PX_STRINGFORMAT_INT(stacksize)); + PX_StringCat(&analysis->code,code.buffer); + } + PX_StringCat(&analysis->code,"POP BP\nRET\n"); + PX_StringFree(&code); + return PX_TRUE; +} +px_bool PX_ScriptParsePopAstStructure(PX_SCRIPT_Analysis *analysis) +{ + PX_SCRIPT_AST_STRUCTURE *plast; + if (analysis->v_astStructure.size==0) + { + return PX_FALSE; + } + plast=PX_VECTORLAST(PX_SCRIPT_AST_STRUCTURE,&analysis->v_astStructure); + PX_VectorPop(&analysis->v_astStructure); + return PX_TRUE; +} +px_bool PX_ScriptParseLastCodeblockEnd(PX_SCRIPT_Analysis *analysis); + +px_bool PX_ScriptParseLastBlockEnd(PX_SCRIPT_Analysis *analysis) +{ + PX_SCRIPT_AST_STRUCTURE astStruct; + + astStruct=*PX_VECTORLAST(PX_SCRIPT_AST_STRUCTURE,&analysis->v_astStructure); + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_IF: + { + if (astStruct._if.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE: + { + if (astStruct._else.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + if (astStruct._for.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + if (astStruct._while.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_SWITCH: + { + if (astStruct._compare.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_CASE: + { + if (astStruct._with.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION: + break; + default: + return PX_FALSE; + } + return PX_TRUE; +} +px_bool PX_ScriptParseLastCodeblockEnd(PX_SCRIPT_Analysis *analysis) +{ + PX_LEXER_STATE state; + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_AST_STRUCTURE buildastStruct; + PX_SCRIPT_AST_STRUCTURE astStruct; + px_string fmrString; + px_int layer=analysis->v_astStructure.size; + + if (analysis->v_astStructure.size==0) + { + return PX_FALSE; + } + + astStruct=*PX_VECTORLAST(PX_SCRIPT_AST_STRUCTURE,&analysis->v_astStructure); + + if(!PX_ScriptParsePopAstStructure(analysis))return PX_FALSE; + + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION: + { + ////////////////////////////////////////////////////////////////////////// + //Function Guider + ////////////////////////////////////////////////////////////////////////// + if(!PX_ScriptParseFunctionGuiderCode(analysis)) return PX_FALSE; + + + ////////////////////////////////////////////////////////////////////////// + //Function Clear + if(!PX_ScriptParseFunctionReturn(analysis)) return PX_FALSE; + + analysis->functionInside=PX_FALSE; + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_IF: + { + // + //if() + //{ + //}<---here + + //else + state=PX_LexerGetState(&analysis->lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis->lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN&&PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_ELSE)) + { + //generate code + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _ELSE_%1\n",PX_STRINGFORMAT_INT(astStruct._if.elseflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + buildastStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE; + buildastStruct._else.elseflag=astStruct._if.elseflag; + + state=PX_LexerGetState(&analysis->lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis->lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='{') + { + buildastStruct._else.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildastStruct._else.oneline_expr=PX_TRUE; + } + PX_VectorPushback(&analysis->v_astStructure,&buildastStruct); + + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"_IF_%1:\n",PX_STRINGFORMAT_INT(astStruct._if.ifflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + } + else + { + PX_LexerSetState(state); + + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"_IF_%1:\n",PX_STRINGFORMAT_INT(astStruct._if.ifflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + + } + + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE: + { + // + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"_ELSE_%1:\n",PX_STRINGFORMAT_INT(astStruct._else.elseflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _WHILE_%1\n",PX_STRINGFORMAT_INT(astStruct._while.loopflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFormat1(&fmrString,"_WHILE_%1:\n",PX_STRINGFORMAT_INT(astStruct._while.endflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + PX_StringInitialize(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _FOR_%1\n",PX_STRINGFORMAT_INT(astStruct._for.additionFlag)); + PX_StringCat(&analysis->code,fmrString.buffer); + //endflag + PX_StringFormat1(&fmrString,"_FOR_%1:\n",PX_STRINGFORMAT_INT(astStruct._for.endFlag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_STRUCTURE_TYPE_SWITCH: + { + PX_StringInitialize(analysis->mp,&fmrString); + //endflag + PX_StringFormat1(&fmrString,"_COMPARE_%1:\n",PX_STRINGFORMAT_INT(astStruct._compare.endFlag)); + PX_StringCat(&analysis->code,fmrString.buffer); + //pop + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(&analysis->code,fmrString.buffer); + + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_STRUCTURE_TYPE_CASE: + { + PX_StringInitialize(analysis->mp,&fmrString); + //endflag + PX_StringFormat1(&fmrString,"_WITH_%1:\n",PX_STRINGFORMAT_INT(astStruct._compare.endFlag)); + PX_StringCat(&analysis->code,fmrString.buffer); + + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + default: + PX_ERROR("Assert Error:FSM Error"); + } + + //clear stack + while (analysis->v_variablesStackTable.size) + { + PX_SCRIPT_VARIABLES *pvar=PX_VECTORLAST(PX_SCRIPT_VARIABLES,&analysis->v_variablesStackTable); + if (pvar->layer>=layer) + { + if(pvar->bInitialized) + PX_StringFree(&pvar->GlobalInitializeValue); + + PX_StringFree(&pvar->Mnemonic); + + PX_VectorPop(&analysis->v_variablesStackTable); + } + else + { + break; + } + } + + + return PX_TRUE; +} +px_bool PX_ScriptParseIfLastAST(PX_SCRIPT_Analysis *analysis) +{ + PX_SCRIPT_AST_STRUCTURE astStruct; + + + if(analysis->v_astStructure.size) + { + astStruct=*PX_VECTORLAST(PX_SCRIPT_AST_STRUCTURE,&analysis->v_astStructure); + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_IF: + { + if (astStruct._if.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE: + { + if (astStruct._else.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + if (astStruct._while.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + if (astStruct._for.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_SWITCH: + { + if (astStruct._compare.oneline_expr) + { + PX_ScriptTranslatorError(&analysis->lexer,"expression in useless compared."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_CASE: + { + if (astStruct._with.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + default: + break; + } + } + else + return PX_FALSE; + + return PX_TRUE; +} +px_bool PX_ScriptParseGetExpression(PX_SCRIPT_Analysis *analysis,px_string *expr,px_char end) +{ + int mBracket=0,lBracket=0; + PX_LEXER_LEXEME_TYPE type; + + PX_StringClear(expr); + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE) + { + continue; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + return PX_FALSE; + } + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol==end&&!mBracket&&!lBracket) + { + break; + } + + if (analysis->lexer.Symbol=='(') + { + lBracket++; + } + if (analysis->lexer.Symbol==')') + { + lBracket--; + if(lBracket<0) + return PX_FALSE; + } + if (analysis->lexer.Symbol=='[') + { + mBracket++; + } + if (analysis->lexer.Symbol==']') + { + mBracket--; + if(mBracket<0) + return PX_FALSE; + } + + if (type==PX_LEXER_LEXEME_TYPE_SPACER) + { + continue; + } + + PX_StringCat(expr,analysis->lexer.CurLexeme.buffer); + } + return PX_TRUE; +} +px_bool PX_ScriptCompilerCompile(PX_SCRIPT_LIBRARY *lib,const px_char *name,px_string *ASM,px_int LocalStackSize) +{ + PX_SCRIPT_SETMEMBER *psetmem; + PX_SCRIPT_STRUCT *pset; + px_string codes; + PX_LEXER_STATE state; + px_int i,j,globalSize; + px_uint quotes; + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_Analysis analysis; + PX_SCRIPT_AST_STRUCTURE buildAstStruct; + PX_SCRIPT_AST_STRUCTURE astStruct; + px_string expression,fmrString,condCodes; + px_string expCode; + px_bool hasLastReturn=PX_FALSE; + PX_SCRIPT_AST_OPERAND retOperand; + int mBracket=0,lBracket=0; + PX_SCRIPT_VARIABLES *pvar; + px_int thread=1; + px_bool caseEnd; + ////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + PX_memset(&astStruct, 0, sizeof(&astStruct)); + PX_StringInitialize(lib->mp,&codes); + + for (i=0;icodeLibraries.size;i++) + { + if (PX_strequ(name,PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->name.buffer)) + { + PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->bInclude=PX_TRUE; + PX_StringCopy(&codes,&PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->code); + break; + } + } + + if (i==lib->codeLibraries.size) + { + PX_ScriptTranslatorError(PX_NULL,"Code of name was not existed"); + return PX_FALSE; + } + + if(!PX_ScriptParsePretreatment(&codes,lib,name)) + return PX_FALSE; + + PX_memset(&analysis,0,sizeof(analysis)); + + analysis.functionInside=PX_FALSE; + analysis.functionReturn=PX_FALSE; + analysis._jFlag=0; + + PX_LexerInit(&analysis.lexer,lib->mp); + PX_LexerRegisterDelimiter(&analysis.lexer,','); + PX_LexerRegisterDelimiter(&analysis.lexer,';'); + PX_LexerRegisterDelimiter(&analysis.lexer,'+'); + PX_LexerRegisterDelimiter(&analysis.lexer,'-'); + PX_LexerRegisterDelimiter(&analysis.lexer,'*'); + PX_LexerRegisterDelimiter(&analysis.lexer,'/'); + PX_LexerRegisterDelimiter(&analysis.lexer,'%'); + PX_LexerRegisterDelimiter(&analysis.lexer,'&'); + PX_LexerRegisterDelimiter(&analysis.lexer,'^'); + PX_LexerRegisterDelimiter(&analysis.lexer,'~'); + PX_LexerRegisterDelimiter(&analysis.lexer,'('); + PX_LexerRegisterDelimiter(&analysis.lexer,')'); + PX_LexerRegisterDelimiter(&analysis.lexer,'!'); + PX_LexerRegisterDelimiter(&analysis.lexer,'='); + PX_LexerRegisterDelimiter(&analysis.lexer,'>'); + PX_LexerRegisterDelimiter(&analysis.lexer,'<'); + PX_LexerRegisterDelimiter(&analysis.lexer,'{'); + PX_LexerRegisterDelimiter(&analysis.lexer,'}'); + PX_LexerRegisterDelimiter(&analysis.lexer,'['); + PX_LexerRegisterDelimiter(&analysis.lexer,']'); + PX_LexerRegisterSpacer(&analysis.lexer,' '); + PX_LexerRegisterSpacer(&analysis.lexer,'\t'); + quotes=PX_LexerRegisterContainer(&analysis.lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&analysis.lexer,quotes,'\\'); + PX_LexerRegisterContainer(&analysis.lexer,"\'","\'"); + PX_LexerRegisterContainer(&analysis.lexer,"@","@"); + PX_LexerSetTokenCase(&analysis.lexer,PX_LEXER_LEXEME_CASE_UPPER); + + + PX_LexerLoadSourceFromMemory(&analysis.lexer,codes.buffer); + PX_StringFree(&codes); + + PX_VectorInitialize(lib->mp,&analysis.v_variablesGlobalTable,sizeof(PX_SCRIPT_VARIABLES),1); + PX_VectorInitialize(lib->mp,&analysis.v_variablesStackTable,sizeof(PX_SCRIPT_VARIABLES),1); + PX_VectorInitialize(lib->mp,&analysis.v_struct,sizeof(PX_SCRIPT_STRUCT),1); + PX_VectorInitialize(lib->mp,&analysis.v_functions,sizeof(PX_SCRIPT_FUNCTION),1); + PX_VectorInitialize(lib->mp,&analysis.v_astStructure,sizeof(PX_SCRIPT_AST_STRUCTURE),1); + + analysis.mp=lib->mp; + PX_StringInitialize(analysis.mp,&analysis.bootCode); + PX_StringInitialize(analysis.mp,&analysis.code); + + + ////////////////////////////////////////////////////////////////////////// + //Handle codes to stream + + + while (PX_TRUE) + { + state=PX_LexerGetState(&analysis.lexer); + if ((type=PX_ScriptTranslatorNextToken(&analysis.lexer))==PX_LEXER_LEXEME_TYPE_ERR) + { + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE) + { + continue; + } + ////////////////////////////////////////////////////////////////////////// + ///Runtime + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_RUNTIME)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_STACK)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (!PX_strIsInt(analysis.lexer.CurLexeme.buffer)) + { + goto _ERROR; + } + LocalStackSize=PX_atoi(analysis.lexer.CurLexeme.buffer); + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_NEWLINE) + { + goto _ERROR; + } + } + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_THREAD)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (!PX_strIsInt(analysis.lexer.CurLexeme.buffer)) + { + goto _ERROR; + } + thread=PX_atoi(analysis.lexer.CurLexeme.buffer); + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_NEWLINE) + { + goto _ERROR; + } + } + + continue; + } + + ////////////////////////////////////////////////////////////////////////// + ///VAR + ////////////////////////////////////////////////////////////////////////// + if ((pset=PX_ScriptParseGetStructInfo(&analysis,analysis.lexer.CurLexeme.buffer))!=PX_NULL||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY) + ) + { + + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='*') + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (!PX_ScriptParseIsValidToken(analysis.lexer.CurLexeme.buffer)) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='(') + { + //custom function + PX_LexerSetState(state); + ////////////////////////////////////////////////////////////////////////// + if (analysis.functionInside) + { + goto _ERROR; + } + + if(!PX_ScriptParseFunctionDefined(&analysis,PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_CUSTOM)) + goto _ERROR; + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + analysis.functionInside=PX_TRUE; + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION; + PX_strcpy(buildAstStruct._func.name,analysis.currentFunc.name,sizeof(analysis.currentFunc.name)); + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + analysis.functionguider=PX_StringLen(&analysis.code); + continue; + } + else if (analysis.lexer.Symbol==';') + { + continue; + } + else + { + goto _ERROR; + } + ////////////////////////////////////////////////////////////////////////// + } + else + { + + if (pset) + { + ////////////////////////////////////////////////////////////////////////// + //STRUCT VARIALBE + ////////////////////////////////////////////////////////////////////////// + //if (isBeginExpression) + //{ + // goto _ERROR; + //} + + PX_LexerSetState(state); + if(!PX_ScriptParseStruct(&analysis)) goto _ERROR; + } + else + { + //var + PX_LexerSetState(state); +// +// if (isBeginExpression) +// { +// PX_ScriptTranslatorError(&analysis.lexer,"Define variable before expression"); +// goto _ERROR; +// } + if(!PX_ScriptParseVar(&analysis)) goto _ERROR; + } + continue; + } + + } + ////////////////////////////////////////////////////////////////////////// + + + ////////////////////////////////////////////////////////////////////////// + ///STRUCT DEFINE + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRUCT)) + { + if (analysis.functionInside) + { + goto _ERROR; + } + + state=PX_LexerGetState(&analysis.lexer); + if (PX_ScriptTranslatorNextToken(&analysis.lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if ((type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer))==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + PX_LexerSetState(state); + {if(!PX_ScriptParseStructDefine(&analysis)) goto _ERROR;} + } + else + { + goto _ERROR; + } + continue; + } + ////////////////////////////////////////////////////////////////////////// + + + ////////////////////////////////////////////////////////////////////////// + // Host function define + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_HOST)) + { + if (analysis.functionInside) + { + goto _ERROR; + } + state=PX_LexerGetState(&analysis.lexer); + if ((type=PX_ScriptTranslatorNextToken(&analysis.lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID)||\ + PX_ScriptParseGetStructInfo(&analysis,analysis.lexer.CurLexeme.buffer)!=PX_NULL + ) + { + PX_LexerSetState(state); + if(!PX_ScriptParseFunctionDefined(&analysis,PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_HOST)) + goto _ERROR; + } + else + { + goto _ERROR; + } + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + PX_ScriptTranslatorError(&analysis.lexer,"Could not implement host function."); + goto _ERROR; + } + else if (analysis.lexer.Symbol==';') + { + continue; + } + else + { + goto _ERROR; + } + + } + ////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + // Export function define + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_EXPORT)) + { + state=PX_LexerGetState(&analysis.lexer); + + if (analysis.functionInside) + { + goto _ERROR; + } + if ((type=PX_ScriptTranslatorNextToken(&analysis.lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID)||\ + PX_ScriptParseGetStructInfo(&analysis,analysis.lexer.CurLexeme.buffer)!=PX_NULL + ) + { + PX_LexerSetState(state); + if(!PX_ScriptParseFunctionDefined(&analysis,PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_EXPORT)) + goto _ERROR; + } + else + { + goto _ERROR; + } + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + analysis.functionInside=PX_TRUE; + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION; + PX_strcpy(buildAstStruct._func.name,analysis.currentFunc.name,sizeof(analysis.currentFunc.name)); + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + analysis.functionguider=PX_StringLen(&analysis.code); + continue; + } + else if (analysis.lexer.Symbol==';') + { + continue; + } + else + { + goto _ERROR; + } + } + ////////////////////////////////////////////////////////////////////////// + + + + ////////////////////////////////////////////////////////////////////////// + //IF + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_IF)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + //condition expression + PX_StringInitialize(analysis.mp,&expression); + PX_StringInitialize(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,')')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,";--------IF (CONDITION) \n"); + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringFree(&expression); + PX_StringFree(&expCode); + ////////////////////////////////////////////////////////////////////////// + + if (!PX_ScriptParseIsOperandNumericType(retOperand)) + { + goto _ERROR; + } + + + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_IF; + buildAstStruct._if.ifflag=analysis._jFlag++; + buildAstStruct._if.elseflag=analysis._jFlag++; + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._if.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._if.oneline_expr=PX_TRUE; + } + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + + PX_StringInitialize(analysis.mp,&expression); + PX_StringFormat1(&expression,"JE R1,0,_IF_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._if.ifflag)); + PX_StringCat(&analysis.code,expression.buffer); + PX_StringFree(&expression); + continue; + } + + ////////////////////////////////////////////////////////////////////////// + //WHILE + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_WHILE)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + //condition expression + PX_StringInitialize(analysis.mp,&expression); + PX_StringInitialize(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,')')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,";--------WHILE (CONDITION) \n"); + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE; + buildAstStruct._while.loopflag=analysis._jFlag++; + buildAstStruct._while.endflag=analysis._jFlag++; + + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"_WHILE_%1:\n",PX_STRINGFORMAT_INT(buildAstStruct._while.loopflag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringFree(&expression); + PX_StringFree(&expCode); + ////////////////////////////////////////////////////////////////////////// + + if (!PX_ScriptParseIsOperandNumericType(retOperand)) + { + goto _ERROR; + } + + + + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._while.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._while.oneline_expr=PX_TRUE; + } + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + + PX_StringInitialize(analysis.mp,&expression); + PX_StringFormat1(&expression,"JE R1,0,_WHILE_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._while.endflag)); + PX_StringCat(&analysis.code,expression.buffer); + PX_StringFree(&expression); + continue; + } + ////////////////////////////////////////////////////////////////////////// + //_ASM + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_ASM)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='{') + { + goto _ERROR; + } + + PX_StringInitialize(analysis.mp,&codes); + PX_StringInitialize(analysis.mp,&fmrString); + while (PX_TRUE) + { + type=PX_LexerGetNextLexeme(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='}') + { + PX_StringCat(&codes,"\n"); + break; + } + + for (i=0;itype==PX_SCRIPT_PARSER_VAR_TYPE_INT||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_FLOAT||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + if (PX_strequ(pvar->Mnemonic.buffer,analysis.lexer.CurLexeme.buffer)) + { + PX_StringFormat1(&fmrString,"LOCAL[%1]",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&codes,fmrString.buffer); + goto _CONTINUE; + } + } + + for (i=0;itype==PX_SCRIPT_PARSER_VAR_TYPE_INT||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_FLOAT||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + if (PX_strequ(pvar->Mnemonic.buffer,analysis.lexer.CurLexeme.buffer)) + { + PX_StringFormat1(&fmrString,"GLOBAL[%1]",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&codes,fmrString.buffer); + goto _CONTINUE; + } + } + + PX_StringCat(&codes,analysis.lexer.CurLexeme.buffer); +_CONTINUE: + PX_StringClear(&fmrString); + } + PX_StringCat(&analysis.code,codes.buffer); + PX_StringFree(&codes); + PX_StringFree(&fmrString); + continue; + } + + + ////////////////////////////////////////////////////////////////////////// + //FOR + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_FOR)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_FOR; + buildAstStruct._for.additionFlag=analysis._jFlag++; + buildAstStruct._for.conditionFlag=analysis._jFlag++; + buildAstStruct._for.endFlag=analysis._jFlag++; + + //condition expression + PX_StringCat(&analysis.code,";--------FOR (INIT;CONDITION;ADDITION) \n"); + + PX_StringInitialize(analysis.mp,&expression); + PX_StringInitialize(analysis.mp,&expCode); + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringInitialize(analysis.mp,&condCodes); + //INIT code + if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + PX_StringCat(&analysis.code,expCode.buffer); + + //Jump to condition + + PX_StringFormat1(&fmrString,"JMP _FOR_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._for.conditionFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + + + //Condition + if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + PX_StringCat(&condCodes,expCode.buffer); + + + //Addition + //Addition flag + PX_StringFormat1(&fmrString,"_FOR_%1:\n",PX_STRINGFORMAT_INT(buildAstStruct._for.additionFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,')')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + PX_StringCat(&analysis.code,expCode.buffer); + + //condition + //condition flag + PX_StringFormat1(&fmrString,"_FOR_%1:\n",PX_STRINGFORMAT_INT(buildAstStruct._for.conditionFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringCat(&analysis.code,condCodes.buffer); + + //jump to end + PX_StringFormat1(&fmrString,"JE R1,0,_FOR_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._for.endFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + + + ////////////////////////////////////////////////////////////////////////// + + if (!PX_ScriptParseIsOperandNumericType(retOperand)) + { + goto _ERROR; + } + + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._for.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._for.oneline_expr=PX_TRUE; + } + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + continue; + } + + + ////////////////////////////////////////////////////////////////////////// + //SWITCH + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_SWITCH)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_SWITCH; + buildAstStruct._compare.endFlag=analysis._jFlag++; + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + PX_StringCat(&analysis.code,";--------SWITCH (ORIGINAL) \n"); + + //condition expression + PX_StringInitialize(analysis.mp,&expression); + PX_StringInitialize(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,')')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + buildAstStruct._compare.OriginOperand=retOperand; + + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringCat(&analysis.code,"PUSH R1\n"); + PX_StringFree(&expression); + PX_StringFree(&expCode); + ////////////////////////////////////////////////////////////////////////// + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._compare.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._compare.oneline_expr=PX_TRUE; + } + + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + continue; + } + + + + ////////////////////////////////////////////////////////////////////////// + //CASE + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_CASE)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + caseEnd=PX_FALSE; + for (i=analysis.v_astStructure.size-1;i>=0;i--) + { + astStruct=*PX_VECTORAT(PX_SCRIPT_AST_STRUCTURE,&analysis.v_astStructure,i); + if (astStruct.type==PX_SCRIPT_AST_STRUCTURE_TYPE_SWITCH) + { + break; + } + } + if (i<=0) //0 is function AST structure + { + goto _ERROR; + } + + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_CASE; + buildAstStruct._with.endFlag=analysis._jFlag++; + + PX_StringCat(&analysis.code,";--------WITH (CONDITION) \n"); + + //condition expression + PX_StringInitialize(analysis.mp,&expression); + PX_StringInitialize(analysis.mp,&expCode); + + PX_StringCat(&analysis.code,"MOV R3,0\n"); + PX_StringCat(&analysis.code,"MOV R2,GLOBAL[SP]\n"); + + while(PX_TRUE) + { + +// if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) +// { +// PX_StringFree(&expression); +// PX_StringFree(&expCode); +// goto _ERROR; +// } + ////////////////////////////////////////////////////////////////////////// + PX_StringClear(&expression); + mBracket=0,lBracket=0; + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol==';'&&!mBracket&&!lBracket) + { + break; + } + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol==')'&&!mBracket&&!lBracket) + { + caseEnd=PX_TRUE; + break; + } + + if (analysis.lexer.Symbol=='(') + { + lBracket++; + } + if (analysis.lexer.Symbol==')') + { + lBracket--; + if(lBracket<0) + return PX_FALSE; + } + if (analysis.lexer.Symbol=='[') + { + mBracket++; + } + if (analysis.lexer.Symbol==']') + { + mBracket--; + if(mBracket<0) + return PX_FALSE; + } + + if (type==PX_LEXER_LEXEME_TYPE_SPACER) + { + continue; + } + + PX_StringCat(&expression,analysis.lexer.CurLexeme.buffer); + } + ////////////////////////////////////////////////////////////////////////// + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + if (!PX_ScriptParseIsCompareAbleOperand(retOperand,astStruct._compare.OriginOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_ScriptTranslatorError(&analysis.lexer,"Invalid operand-type."); + goto _ERROR; + } + + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringCat(&analysis.code,"LGE R1,R1,R2\n"); + PX_StringCat(&analysis.code,"OR R3,R1\n"); + state=PX_LexerGetState(&analysis.lexer); + + if (caseEnd) + { + break; + } + + } + PX_StringFormat1(&expCode,"JE R3,0,_WITH_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._with.endFlag)); + PX_StringCat(&analysis.code,expCode.buffer); + + PX_StringFree(&expression); + PX_StringFree(&expCode); + + ////////////////////////////////////////////////////////////////////////// + + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._with.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._with.oneline_expr=PX_TRUE; + } + + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + continue; + } + /////////////////////////////////////////////////////////////////////////// + //break + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_BREAK)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!=';') + { + goto _ERROR; + } + for (i=analysis.v_astStructure.size-1;i>=0;i--) + { + astStruct=*PX_VECTORAT(PX_SCRIPT_AST_STRUCTURE,&analysis.v_astStructure,i); + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _WHILE_%1\n",PX_STRINGFORMAT_INT(astStruct._while.endflag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _BREAKOUT; + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _FOR_%1\n",PX_STRINGFORMAT_INT(astStruct._for.endFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _BREAKOUT; + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_SWITCH: + { + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _COMPARE_%1\n",PX_STRINGFORMAT_INT(astStruct._compare.endFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _BREAKOUT; + } + break; + default: + continue; + } + } + _BREAKOUT: + if (i<0) + { + PX_ScriptTranslatorError(&analysis.lexer,"Could not matched break to block."); + goto _ERROR; + } + if(!PX_ScriptParseIfLastAST(&analysis)) goto _ERROR; + continue; + } + + + /////////////////////////////////////////////////////////////////////////// + //continue + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_CONTINUE)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!=';') + { + goto _ERROR; + } + for (i=analysis.v_astStructure.size-1;i>=0;i--) + { + astStruct=*PX_VECTORAT(PX_SCRIPT_AST_STRUCTURE,&analysis.v_astStructure,i); + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _WHILE_%1\n",PX_STRINGFORMAT_INT(astStruct._while.loopflag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _CONTINUEOUT; + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _FOR_%1\n",PX_STRINGFORMAT_INT(astStruct._for.additionFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _CONTINUEOUT; + } + break; + default: + continue; + } + } +_CONTINUEOUT: + if (i<0) + { + PX_ScriptTranslatorError(&analysis.lexer,"Could not matched break to block."); + goto _ERROR; + } + if(!PX_ScriptParseIfLastAST(&analysis)) goto _ERROR; + continue; + } + + /////////////////////////////////////////////////////////////////////////// + //Return + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_RETURN)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + //custom expression + PX_StringInitialize(analysis.mp,&expression); + PX_StringInitialize(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,";RETURN (EXPRESSION)\n"); + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringFree(&expression); + PX_StringFree(&expCode); + + switch (analysis.currentFunc.retType) + { + case PX_SCRIPT_PARSER_VAR_TYPE_VOID: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_VOID) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&\ + retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&\ + retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + { + PX_StringCat(&analysis.code,"INT R1\n"); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&\ + retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&\ + retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST) + { + PX_StringCat(&analysis.code,"FLT R1\n"); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + if (retOperand.pSet!=PX_ScriptParseGetStructByIndex(&analysis,analysis.currentFunc.retSetIndex)) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + default: + goto _ERROR; + } + + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _%1_RET\n",PX_STRINGFORMAT_STRING(analysis.currentFunc.name)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + + + if(!PX_ScriptParseIfLastAST(&analysis)) goto _ERROR; + continue; + } + + + //Expression parse + + if(analysis.functionInside) + { + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='}') + { + if(!PX_ScriptParseLastCodeblockEnd(&analysis)) goto _ERROR; + } + else + { + //custom expression + PX_LexerSetState(state); + + PX_StringInitialize(analysis.mp,&expression); + PX_StringInitialize(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + PX_StringCat(&analysis.code,expCode.buffer); + + PX_StringFree(&expression); + PX_StringFree(&expCode); + + if(!PX_ScriptParseIfLastAST(&analysis)) goto _ERROR; + } + continue; + } + ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + // + + PX_ScriptTranslatorError(&analysis.lexer,"Invalid expression."); + goto _ERROR; + + } + ////////////////////////////////////////////////////////////////////////// + //Output + if (!PX_ScriptParseBootCode(&analysis)) + { + goto _ERROR; + } + //.Global .Local + globalSize=0; + for (i=0;isize; + } + + PX_StringInitialize(analysis.mp,&fmrString); + PX_StringFormat3(&fmrString,".GLOBAL %1\n.STACK %2\n.THREAD %3\n",PX_STRINGFORMAT_INT(globalSize),PX_STRINGFORMAT_INT(LocalStackSize),PX_STRINGFORMAT_INT(thread)); + PX_StringCat(ASM,fmrString.buffer); + PX_StringFree(&fmrString); + + PX_StringCat(ASM,"EXPORT FUNCTION _BOOT:\n"); + + PX_StringInitialize(analysis.mp,&fmrString); + for (i=0;ibParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],\"\"\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(ASM,fmrString.buffer); + } + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],@@\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(ASM,fmrString.buffer); + } + } + PX_StringFree(&fmrString); + + PX_StringCat(ASM,analysis.bootCode.buffer); + PX_StringCat(ASM,"RET\n"); + + PX_StringCat(ASM,analysis.code.buffer); + + if (analysis.v_astStructure.size) + { + while(analysis.v_astStructure.size) + { + PX_ScriptParsePopAstStructure(&analysis); + } + goto _ERROR; + } + + for (i=0;iMnemonic); + if (PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesGlobalTable,i)->bInitialized) + { + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesGlobalTable,i)->GlobalInitializeValue); + } + } + + for (i=0;iMnemonic); + if (pvar->bInitialized) + { + PX_StringFree(&pvar->GlobalInitializeValue); + } + } + + //struct + for (i=0;imembers.size;j++) + { + psetmem=PX_VECTORAT(PX_SCRIPT_SETMEMBER,&pset->members,j); + PX_StringFree(&psetmem->defvar.Mnemonic); + if (psetmem->defvar.bInitialized) + { + PX_StringFree(&psetmem->defvar.GlobalInitializeValue); + } + } + PX_StringFree(&pset->Name); + PX_VectorFree(&pset->members); + } + + //ast structure + + + PX_VectorFree(&analysis.v_astStructure); + PX_VectorFree(&analysis.v_variablesGlobalTable); + PX_VectorFree(&analysis.v_variablesStackTable); + PX_VectorFree(&analysis.v_struct); + PX_VectorFree(&analysis.v_functions); + + PX_StringFree(&analysis.bootCode); + PX_StringFree(&analysis.code); + PX_LexerFree(&analysis.lexer); + return PX_TRUE; +_ERROR: + PX_ScriptTranslatorError(&analysis.lexer,"ERROR:Compile terminated."); + + if (analysis.v_astStructure.size) + { + while(analysis.v_astStructure.size) + { + PX_ScriptParsePopAstStructure(&analysis); + } + goto _ERROR; + } + + for (i=0;iMnemonic); + if (PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesGlobalTable,i)->bInitialized) + { + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesGlobalTable,i)->GlobalInitializeValue); + } + } + + for (i=0;iMnemonic); + if (PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesStackTable,i)->bInitialized) + { + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesStackTable,i)->GlobalInitializeValue); + } + } + + //struct + for (i=0;imembers.size;j++) + { + psetmem=PX_VECTORAT(PX_SCRIPT_SETMEMBER,&pset->members,j); + PX_StringFree(&psetmem->defvar.Mnemonic); + if (psetmem->defvar.bInitialized) + { + PX_StringFree(&psetmem->defvar.GlobalInitializeValue); + } + } + PX_StringFree(&pset->Name); + PX_VectorFree(&pset->members); + } + + //ast structure + + + PX_VectorFree(&analysis.v_astStructure); + PX_VectorFree(&analysis.v_variablesGlobalTable); + PX_VectorFree(&analysis.v_variablesStackTable); + PX_VectorFree(&analysis.v_struct); + PX_VectorFree(&analysis.v_functions); + + PX_StringFree(&analysis.bootCode); + PX_StringFree(&analysis.code); + PX_LexerFree(&analysis.lexer); + + + return PX_FALSE; +} + +px_char * PX_ScriptCompilerError(void) +{ + return PX_Script_InterpreterError; +} + +px_bool PX_ScriptInterpreterExpression(PX_SCRIPT_Analysis *analysis,px_char *expr,px_string *out,PX_SCRIPT_AST_OPERAND *retOperand) +{ + return PX_ScriptParseExpression(analysis,expr,out,retOperand); +} + + + diff --git a/UI/PainterEngine/kernel/PX_Script_Interpreter.h b/UI/PainterEngine/kernel/PX_Script_Interpreter.h new file mode 100644 index 0000000..0fecdc8 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Script_Interpreter.h @@ -0,0 +1,429 @@ +////////////////////////////////////////////////////////////////////////// +//Painter Engine Interpreter +//code by DBinary, matrixcascade@gmail.com +//QQ:477608346,tel-18959060883 +//include script compiler & parser & AST + +#ifndef _PX_SCRIPT_TRANSLATOR_H +#define _PX_SCRIPT_TRANSLATOR_H +#include "PX_ScriptCore.h" + +#define PX_SCRIPT_TRANSLATOR_FLOAT_PRECISION 6 +#define PX_SCRIPT_OPCODE_LEVEL_BOTTOM 255 +#define PX_SCRIPT_FUNCTION_MAX_PARAM 16 +#define PX_SCRIPT_FUNCTION_NAME_MAX_LEN 48 + + + +typedef enum +{ + PX_SCRIPT_PARSER_VAR_TYPE_INT, + PX_SCRIPT_PARSER_VAR_TYPE_STRING, + PX_SCRIPT_PARSER_VAR_TYPE_FLOAT, + PX_SCRIPT_PARSER_VAR_TYPE_MEMORY, + PX_SCRIPT_PARSER_VAR_TYPE_VOID, + PX_SCRIPT_PARSER_VAR_TYPE_STRUCT, + + PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY, + PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY, + PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY, + PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY, + PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY, + + PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR, + PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR, + PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR, + PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR, + PX_SCRIPT_PARSER_VAR_TYPE_STRUCT_PTR, + +}PX_SCRIPT_PARSER_VAR_TYPE; + +typedef enum +{ + //// + PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN, + //// + + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FUNCTION, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADD, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INC, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_POSITIVE, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SUB, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DEC, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NEGATIVE, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MUL, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DIV, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_XOR, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INV, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MOD, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHL, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHR, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETEND, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGE, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGEEUQ, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESS, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESSEQU, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_UNEQU, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_EQU, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LGEQU, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LOR, + //pointer + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_PTR, //* + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADR, //& + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT, //-> + + //transfer + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INT, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FLOAT, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRING, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMORY, + + //key word + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRLEN, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMLEN, +}PX_SCRIPT_TRANSLATOR_EXPRESSION_TYPE; + +typedef enum +{ + PX_SCRIPT_AST_OPCODE_TYPE_ADD, + PX_SCRIPT_AST_OPCODE_TYPE_INC, + PX_SCRIPT_AST_OPCODE_TYPE_POSITIVE, + PX_SCRIPT_AST_OPCODE_TYPE_SUB, + PX_SCRIPT_AST_OPCODE_TYPE_DEC, + PX_SCRIPT_AST_OPCODE_TYPE_NEGATIVE, + PX_SCRIPT_AST_OPCODE_TYPE_MUL, + PX_SCRIPT_AST_OPCODE_TYPE_DIV, + PX_SCRIPT_AST_OPCODE_TYPE_AND, + PX_SCRIPT_AST_OPCODE_TYPE_OR, + PX_SCRIPT_AST_OPCODE_TYPE_NOT, + PX_SCRIPT_AST_OPCODE_TYPE_XOR, + PX_SCRIPT_AST_OPCODE_TYPE_INV, + PX_SCRIPT_AST_OPCODE_TYPE_MOD, + PX_SCRIPT_AST_OPCODE_TYPE_SHL, + PX_SCRIPT_AST_OPCODE_TYPE_SHR, + + PX_SCRIPT_AST_OPCODE_TYPE_COMMA, + PX_SCRIPT_AST_OPCODE_TYPE_LARGE, + PX_SCRIPT_AST_OPCODE_TYPE_LARGEEQU, + PX_SCRIPT_AST_OPCODE_TYPE_LESS, + PX_SCRIPT_AST_OPCODE_TYPE_LESSEQU, + PX_SCRIPT_AST_OPCODE_TYPE_UNEQU, + PX_SCRIPT_AST_OPCODE_TYPE_EQU, + PX_SCRIPT_AST_OPCODE_TYPE_LGEQU, + PX_SCRIPT_AST_OPCODE_TYPE_LAND, + PX_SCRIPT_AST_OPCODE_TYPE_LOR, + //pointer + PX_SCRIPT_AST_OPCODE_TYPE_PTR, //* + PX_SCRIPT_AST_OPCODE_TYPE_ADR, //& + PX_SCRIPT_AST_OPCODE_TYPE_DOT, //. + PX_SCRIPT_AST_OPCODE_TYPE_IDX, //[] + PX_SCRIPT_AST_OPCODE_TYPE_OFT, //-> + //transfer + PX_SCRIPT_AST_OPCODE_TYPE_INT, + PX_SCRIPT_AST_OPCODE_TYPE_STRING, + PX_SCRIPT_AST_OPCODE_TYPE_FLOAT, + PX_SCRIPT_AST_OPCODE_TYPE_MEMORY, + PX_SCRIPT_AST_OPCODE_TYPE_STRLEN, + PX_SCRIPT_AST_OPCODE_TYPE_MEMLEN, + PX_SCRIPT_AST_OPCODE_TYPE_SIN, + PX_SCRIPT_AST_OPCODE_TYPE_COS, +}PX_SCRIPT_AST_OPCODE_TYPE; + +typedef enum +{ + PX_SCRIPT_AST_OPERAND_TYPE_VOID, + + PX_SCRIPT_AST_OPERAND_TYPE_INT, //int var //region G/L/ + PX_SCRIPT_AST_OPERAND_TYPE_FLOAT, //float var + PX_SCRIPT_AST_OPERAND_TYPE_STRING, //string var + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY,//memory var + PX_SCRIPT_AST_OPERAND_TYPE_STRUCT, //set xx var + + PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST,//int const + PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST,//float const + PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST,//string const + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST,//memory const + + PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR, //int var[x] + PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR,//float var[x] + PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR,//string var[x] + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR,//memory var[x] + PX_SCRIPT_AST_OPERAND_TYPE_STRUCT_PTR,//set xx var[x] + + PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST, //int var[] + PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST,//float var[] + PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST,//string var[] + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST,//memory var[] + PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST,//set xx var[] + + PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX, + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX, +}PX_SCRIPT_AST_OPERAND_TYPE; + +typedef enum +{ + PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE, + PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY, + PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER, + PX_SCRIPT_TRANSLATOR_OP_CLASS_CONST, + PX_SCRIPT_TRANSLATOR_OP_CLASS_VAR, + PX_SCRIPT_TRANSLATOR_OP_CLASS_FUNC, + PX_SCRIPT_TRANSLATOR_OP_CLASS_UNDEFINED, +}PX_SCRIPT_TRANSLATOR_OP_CLASS; + + +typedef enum +{ + PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_HOST, + PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_EXPORT, + PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_CUSTOM, +}PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE; + +typedef enum +{ + PX_SCRIPT_VARIABLE_REGION_LOCAL, + PX_SCRIPT_VARIABLE_REGION_GLOBAL, + PX_SCRIPT_VARIABLE_REGION_POP, +}PX_SCRIPT_VARIABLE_REGION; + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_RUNTIME "#RUNTIME" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_STACK "STACK" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_THREAD "THREAD" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT "INT" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING "STRING" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY "MEMORY" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT "FLOAT" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID "VOID" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRUCT "STRUCT" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_RETURN "RETURN" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_SIZEOF "SIZEOF" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_IF "IF" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_ELSE "ELSE" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_WHILE "WHILE" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_FOR "FOR" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_ASM "_ASM" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_BREAK "BREAK" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_CONTINUE "CONTINUE" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_SWITCH "SWITCH" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_CASE "CASE" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_HOST "HOST" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_FUNCTION "FUNCTION" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_EXPORT "EXPORT" + + + +typedef struct +{ + px_string name; + px_string code; + px_bool bInclude; +}PX_SCRIPT_CODE; + +typedef struct +{ + px_string Name; + px_vector members; + px_int size; +}PX_SCRIPT_STRUCT; + +typedef struct +{ + px_string Mnemonic; + PX_SCRIPT_PARSER_VAR_TYPE type; + px_int layer; + px_int setIndex; + px_int BeginIndex; + px_int size; + px_bool bParam; + px_bool bInitialized; + px_string GlobalInitializeValue; +}PX_SCRIPT_VARIABLES; + +typedef struct +{ + px_int offset; + PX_SCRIPT_VARIABLES defvar; +}PX_SCRIPT_SETMEMBER; + +typedef struct +{ + px_memorypool *mp; + px_vector codeLibraries;//PX_SCRIPT_CODE vector +}PX_SCRIPT_LIBRARY; + + +typedef struct +{ + PX_SCRIPT_AST_OPCODE_TYPE operandType; + px_int level; +}PX_SCRIPT_AST_OPCODE; + +typedef struct +{ + PX_SCRIPT_AST_OPERAND_TYPE operandType; + PX_SCRIPT_VARIABLE_REGION region; + PX_SCRIPT_STRUCT *pSet; + union + { + px_int _oft; + px_int _int; + px_float _float; + px_char *_contaniner; + }; + px_bool bAtomPopIndex; + px_int AtomIndex; +}PX_SCRIPT_AST_OPERAND; + + + + +typedef struct +{ + PX_SCRIPT_TRANSLATOR_EXPRESSION_TYPE type; + PX_SCRIPT_TRANSLATOR_OP_CLASS opclass; + px_int oplevel; + px_string code; + +}PX_SCRIPT_EXPR_STREAM; + + +typedef struct +{ + PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE type; + px_char name[48]; + PX_SCRIPT_VARIABLES parameters[PX_SCRIPT_FUNCTION_MAX_PARAM]; + px_int parametersCount; + px_int parametersSize; + + PX_SCRIPT_PARSER_VAR_TYPE retType; + px_int retSetIndex; +}PX_SCRIPT_FUNCTION; + + + +typedef struct +{ + px_char name[48]; +}PX_SCRIPT_AST_STRUCTURE_FUNCTION; + +typedef struct +{ + px_int ifflag; + px_int elseflag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_IF; + +typedef struct +{ + px_int elseflag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_ELSE; + +typedef struct +{ + px_int loopflag; + + px_int endflag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_WHILE; + +typedef struct +{ + px_int additionFlag; + px_int conditionFlag; + px_int endFlag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_FOR; + +typedef struct +{ + px_int endFlag; + px_bool oneline_expr; + PX_SCRIPT_AST_OPERAND OriginOperand; +}PX_SCRIPT_AST_STRUCTURE_COMPARE; + +typedef struct +{ + px_int endFlag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_WITH; + + +typedef enum +{ + PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION, + PX_SCRIPT_AST_STRUCTURE_TYPE_IF, + PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE, + PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE, + PX_SCRIPT_AST_STRUCTURE_TYPE_FOR, + PX_SCRIPT_AST_STRUCTURE_TYPE_SWITCH, + PX_SCRIPT_AST_STRUCTURE_TYPE_CASE +}PX_SCRIPT_AST_STRUCTURE_TYPE; + +typedef struct +{ + PX_SCRIPT_AST_STRUCTURE_TYPE type; + union + { + PX_SCRIPT_AST_STRUCTURE_FUNCTION _func; + PX_SCRIPT_AST_STRUCTURE_IF _if; + PX_SCRIPT_AST_STRUCTURE_ELSE _else; + PX_SCRIPT_AST_STRUCTURE_WHILE _while; + PX_SCRIPT_AST_STRUCTURE_FOR _for; + PX_SCRIPT_AST_STRUCTURE_COMPARE _compare; + PX_SCRIPT_AST_STRUCTURE_WITH _with; + }; +}PX_SCRIPT_AST_STRUCTURE; + +typedef enum +{ + PX_SCRIPT_AST_SET_TREE_NODE_TYPE_STRUCT, + PX_SCRIPT_AST_SET_TREE_NODE_TYPE_MEMBER, +}PX_SCRIPT_AST_SET_TREE_NODE_TYPE; + + + + +typedef struct +{ + px_memorypool *mp; + px_string bootCode; + px_string code; + px_lexer lexer; + px_bool functionInside; + px_bool functionReturn; + px_int functionlable; + px_int functionguider; + PX_SCRIPT_FUNCTION currentFunc; + px_vector v_struct; + px_vector v_functions; + px_vector v_variablesGlobalTable; + px_vector v_variablesStackTable; + px_int currentAllocStackSize; + px_vector v_astStructure; + px_int _jFlag; +}PX_SCRIPT_Analysis; + +px_bool PX_ScriptCompilerInitialize(PX_SCRIPT_LIBRARY *lib,px_memorypool *mp); +px_bool PX_ScriptCompilerLoad(PX_SCRIPT_LIBRARY *lib,const px_char *code); +px_bool PX_ScriptCompilerCompile(PX_SCRIPT_LIBRARY *lib,const px_char *name,px_string *ASM,px_int StackSize); +px_void PX_ScriptCompilerFree(PX_SCRIPT_LIBRARY *lib); +px_char *PX_ScriptCompilerError(void); +px_bool PX_ScriptInterpreterExpression(PX_SCRIPT_Analysis *analysis,px_char *expr,px_string *out,PX_SCRIPT_AST_OPERAND *retOperand); +#endif diff --git a/UI/PainterEngine/kernel/PX_Script_VM.c b/UI/PainterEngine/kernel/PX_Script_VM.c new file mode 100644 index 0000000..ea9d2e1 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Script_VM.c @@ -0,0 +1,4758 @@ +#include "PX_Script_VM.h" + + +static px_void PX_ScriptVM_Error(PX_ScriptVM_Instance *Ins,px_char *log) +{ + PX_ERROR(log); +} + +static px_void PX_ScriptVM_LOG(px_char *log) +{ + PX_LOG(log); +} +#ifdef PX_DEBUG_MODE +#include "stdio.h" +#define PX_SCRIPT_VM_LOG printf +#else +#define PX_SCRIPT_VM_LOG +#endif + +static PX_ScriptVM_DebuggerPrint g_scriptVM_printFunc=PX_NULL; +static PX_ScriptVM_DebuggerCommand g_scriptVM_cmdFunc=PX_NULL; + +px_bool PX_ScriptVM_InstanceInitialize(PX_ScriptVM_Instance *Ins,px_memorypool *mp,px_byte *code,px_int size) +{ + PX_SCRIPT_ASM_HEADER *header; + PX_SCRIPT_EXPORT_FUNCTION *pfunc; + PX_SCRIPT_ASM_HOST_NODE *phost; + px_int i,j; + if (sizeuser_ptr=PX_NULL; + Ins->mp=mp; + header=(PX_SCRIPT_ASM_HEADER *)code; + Ins->debug=PX_FALSE; + Ins->VM_Globalsize=header->globalsize; + Ins->VM_Stacksize=header->stacksize; + Ins->VM_memsize=header->globalsize+header->stacksize*header->threadcount; + Ins->maxThreadCount=header->threadcount; + Ins->T=0; + + if (header->threadcount<1) + { + return PX_FALSE; + } + + if (!PX_memequ(header,"PASM",4)) + { + return PX_FALSE; + } + + if (PX_crc32(code+8,size-8)!=header->CRC) + { + return PX_FALSE; + } + + + if ((Ins->_mem=(PX_SCRIPTVM_VARIABLE *)MP_Malloc(mp,sizeof(PX_SCRIPTVM_VARIABLE)*Ins->VM_memsize))==PX_NULL) + { + return PX_FALSE; + } + + + if ((Ins->pThread=(PX_ScriptVM_InstanceThread *)MP_Malloc(mp,sizeof(PX_ScriptVM_InstanceThread)*Ins->maxThreadCount))==PX_NULL) + { + return PX_FALSE; + } + + for (i=0;imaxThreadCount;i++) + { + PX_memset(Ins->pThread,0,sizeof(PX_ScriptVM_InstanceThread)*Ins->maxThreadCount); + Ins->pThread[i].Activated=PX_FALSE; + Ins->pThread[i].suspend=PX_FALSE; + for (j=0;jpThread[i].R[j],0,sizeof(PX_SCRIPTVM_VARIABLE)); + Ins->pThread[i].R[j].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + } + + for (i=0;iVM_memsize;i++) + { + PX_memset(&Ins->_mem[i],0,sizeof(PX_SCRIPTVM_VARIABLE)); + Ins->_mem[i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + + + Ins->funcCount=header->funcCount; + Ins->hostCount=header->hostCount; + Ins->_func=PX_NULL; + Ins->_host=PX_NULL; + PX_memset(Ins->signal,0,sizeof(Ins->signal)); + + if (Ins->funcCount!=0) + { + if ((Ins->_func=(PX_SCRIPT_EXPORT_FUNCTION *)MP_Malloc(mp,sizeof(PX_SCRIPT_EXPORT_FUNCTION)*Ins->funcCount))==PX_NULL) + { + return PX_FALSE; + } + //read export functions + pfunc=(PX_SCRIPT_EXPORT_FUNCTION *)(code+header->oftfunc); + for (i=0;ifuncCount;i++) + { + PX_memcpy(&Ins->_func[i],&pfunc[i],sizeof(PX_SCRIPT_EXPORT_FUNCTION)); + } + } + + if(Ins->hostCount!=0) + { + if ((Ins->_host=(PX_SCRIPT_ASM_HOST_NODE *)MP_Malloc(mp,sizeof(PX_SCRIPT_ASM_HOST_NODE)*Ins->hostCount))==PX_NULL) + { + return PX_FALSE; + } + PX_memset(Ins->_host,0,sizeof(PX_SCRIPT_ASM_HOST_NODE)*Ins->hostCount); + phost=(PX_SCRIPT_ASM_HOST_NODE *)(code+header->ofthost); + for (i=0;ihostCount;i++) + { + PX_memcpy(&Ins->_host[i],&phost[i],sizeof(PX_SCRIPT_ASM_HOST_NODE)); + Ins->_host[i].map=PX_NULL; + } + } + + + Ins->stringsize=header->stringSize; + Ins->memorysize=header->memsize; + Ins->binsize=header->binsize; + Ins->Suspend=PX_FALSE; + + + + Ins->_string=(px_char *)MP_Malloc(mp,header->stringSize); + PX_memcpy(Ins->_string,code+header->oftString,header->stringSize); + + Ins->_memory=(px_byte *)MP_Malloc(mp,header->memsize); + PX_memcpy(Ins->_memory,code+header->oftmem,header->memsize); + + Ins->_bin=(px_byte *)MP_Malloc(mp,header->binsize); + PX_memcpy(Ins->_bin,code+header->oftbin,header->binsize); + + + + return PX_TRUE; +} + +PX_SCRIPTVM_VARIABLE PX_SCRIPTVM_VaribaleCopy(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE var,px_bool *bOutOfMemory) +{ + PX_SCRIPTVM_VARIABLE cpyVar; + cpyVar=var; + *bOutOfMemory=PX_FALSE; + + if (var.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(!PX_StringInitialize(Ins->mp,&cpyVar._string)) + { + cpyVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + *bOutOfMemory=PX_TRUE; + } + else + { + if(!PX_StringCopy(&cpyVar._string,&var._string)) + { + cpyVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + *bOutOfMemory=PX_TRUE; + } + } + } + else if (var.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInitialize(Ins->mp,&cpyVar._memory); + if(!PX_MemoryCat(&cpyVar._memory,var._memory.buffer,var._memory.usedsize)) + { + cpyVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + *bOutOfMemory=PX_TRUE; + } + } + return cpyVar; +} + +static px_void PX_SCRIPTVM_VaribaleFree(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE *var) +{ + if (var->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&var->_memory); + } + else if (var->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&var->_string); + } + var->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + var->_int=0; +} + + +static PX_SCRIPTVM_VARIABLE PX_SCRIPT_VM_GetParamConst(PX_ScriptVM_Instance *Ins,px_char optype,px_int param,px_bool *bOutofMemory) +{ + PX_SCRIPTVM_VARIABLE rVar,ret; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + *bOutofMemory=PX_FALSE; + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=0; + switch (optype) + { + case PX_SCRIPT_ASM_OPTYPE_IP: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=pT->IP; + return ret; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_SP: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=pT->SP; + return ret; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_BP: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=pT->BP; + return ret; + } + break; + case PX_SCRIPT_ASM_OPTYPE_HOST: + case PX_SCRIPT_ASM_OPTYPE_INT: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=param; + return ret; + } + break; + case PX_SCRIPT_ASM_OPTYPE_FLOAT: + { + //Must be IEEE 754 format + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + ret._int=param; + return ret; + } + break; + case PX_SCRIPT_ASM_OPTYPE_STRING: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + ret._string.buffer=Ins->_string+param; + ret._string.bufferlen=0; + ret._string.mp=PX_NULL; + return ret; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_MEMORY: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + ret._memory.buffer=Ins->_memory+param+4; + ret._memory.allocsize=0; + ret._memory.usedsize=*(px_int *)(Ins->_memory+param); + ret._memory.mp=PX_NULL; + return ret; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_REG: + { + if (paramR[param],bOutofMemory); + } + else + { + PX_ScriptVM_Error(Ins,"Variable parameter error."); + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST: + { + if(pT->BP-param>0&&pT->BP-paramVM_memsize) + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->BP-param],bOutofMemory); + else + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF: + { + if (paramR[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (pT->BP-rVar._int>0&&pT->BP-rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[rVar._int-pT->BP],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF: + { + if (paramVM_memsize) + { + rVar=Ins->_mem[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (pT->BP-rVar._int>0&&pT->BP-rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->BP-rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF: + { + if (pT->BP-param>0&&pT->BP-paramVM_memsize) + { + rVar=Ins->_mem[pT->BP-param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (pT->BP-rVar._int>0&&pT->BP-rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->BP-rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST: + { + if(paramVM_memsize) + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[param],bOutofMemory); + else + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF: + { + if(pT->SP+paramVM_memsize) + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->SP+param],bOutofMemory); + else + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF: + { + if (paramR[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF: + { + if (paramVM_memsize) + { + rVar=Ins->_mem[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF: + { + if (pT->BP-param>0&&pT->BP-paramVM_memsize) + { + rVar=Ins->_mem[pT->BP-param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + + + default: + { + goto _ERROR; + } + } +_ERROR: + PX_ScriptVM_Error(Ins,"Virtual Machine Runtime error"); + return ret; + +} +static PX_SCRIPTVM_VARIABLE * PX_SCRIPT_VM_GetVariablePointer(PX_ScriptVM_Instance *Ins,px_char optype,px_int param) +{ + PX_SCRIPTVM_VARIABLE rVar; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + switch (optype) + { + case PX_SCRIPT_ASM_OPTYPE_REG: + { + if (paramR[param]; + } + else + { + PX_ScriptVM_Error(Ins,"Variable parameter error."); + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST: + { + if(pT->BP-param>0&&pT->BP-paramVM_memsize) + return &Ins->_mem[pT->BP-param]; + else + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF: + { + if (paramR[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (pT->BP-rVar._int>0&&pT->BP-rVar._intVM_memsize) + { + return &Ins->_mem[pT->BP-rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF: + { + if (paramVM_memsize) + { + rVar=Ins->_mem[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (pT->BP-rVar._int>0&&pT->BP-rVar._intVM_memsize) + { + return &Ins->_mem[pT->BP-rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF: + { + if (pT->BP-param>0&&pT->BP-paramVM_memsize) + { + rVar=Ins->_mem[pT->BP-param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (pT->BP-rVar._int>0&&pT->BP-rVar._intVM_memsize) + { + return &Ins->_mem[pT->BP-rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST: + { + if(paramVM_memsize) + return &Ins->_mem[param]; + else + goto _ERROR; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF: + { + if(pT->SP+paramVM_memsize) + return &Ins->_mem[pT->SP+param]; + else + goto _ERROR; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF: + { + if (paramR[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return &Ins->_mem[rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF: + { + if (paramVM_memsize) + { + rVar=Ins->_mem[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return &Ins->_mem[rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF: + { + if (pT->BP-param>0&&pT->BP-paramVM_memsize) + { + rVar=Ins->_mem[pT->BP-param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return &Ins->_mem[rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + + default: + { + goto _ERROR; + } + } + return PX_NULL; +_ERROR: + PX_ScriptVM_Error(Ins,"Variable parameter error."); + return PX_NULL; + +} + +#define PX_SCRIPT_VM_PARAM(i) (*(((px_int32 *)(Ins->_bin+pT->IP+4))+i)) +#define PX_SCRIPT_VM_IP_PARAM(i) (*(((px_int32 *)(Ins->_bin+IP+4))+i)) + +px_void PX_ScriptVM_DebuggerInterrupt(PX_ScriptVM_Instance *Ins); +px_bool PX_ScriptVM_DebuggerCurrentInstruction(PX_ScriptVM_Instance *Ins,px_int IP); + +PX_SCRIPTVM_RUNRETURN PX_ScriptVM_InstanceRunThread(PX_ScriptVM_Instance *Ins,px_int tick) +{ + px_char opCode,opType[3],numOut[32],lastchar,*pchar; + px_float p1=0,p2=0; + PX_SCRIPTVM_VARIABLE *pVar,cVar,sVar,tVar; + px_string newString; + px_byte *newBuffer; + px_bool bOutofMemory; + int i,j; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + while(PX_TRUE) + { + if(Ins->debug) + { + PX_ScriptVM_DebuggerInterrupt(Ins); + } + + if (!pT->Activated) + { + return PX_SCRIPTVM_RUNRETURN_END; + } + + if (Ins->Suspend||pT->suspend) + { + return PX_SCRIPTVM_RUNRETURN_SUSPEND; + } + + + pVar=PX_NULL; + cVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + sVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + tVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + cVar._int=-1; + sVar._int=-1; + tVar._int=-1; + + + if(tick==0) + { + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + return PX_SCRIPTVM_RUNRETURN_TIMEOUT; + } + + if(tick>0) + { + tick--; + } + + + if (pT->IP>Ins->binsize||pT->IP<0) + { + PX_ScriptVM_Error(Ins,"IP point to invalid address"); + goto _ERROR; + } + + if (pT->SP>Ins->VM_memsize||pT->SP<0) + { + PX_ScriptVM_Error(Ins,"SP point to invalid address"); + goto _ERROR; + } + + opCode=*(Ins->_bin+pT->IP); + opType[0]=*(Ins->_bin+pT->IP+1); + opType[1]=*(Ins->_bin+pT->IP+2); + opType[2]=*(Ins->_bin+pT->IP+3); + + if (opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_MOV&&opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_ADD&&opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_SUB&&opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_PUSH&&opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_POP) + { + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP||opType[0]==PX_SCRIPT_ASM_OPTYPE_SP||opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + goto _ERROR; + } + } + switch(opCode) + { + case PX_SCRIPT_ASM_INSTR_OPCODE_MOV: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) + { + PX_ScriptVM_Error(Ins,"MOV out of memory."); + goto _ERROR; + } + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"MOV IP is not a integer."); + goto _ERROR; + } + pT->IP=cVar._int; + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_SP) + { + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"MOV SP is not a integer."); + goto _ERROR; + } + pT->SP=cVar._int; + pT->IP+=(4+2*4); + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"MOV BP is not a integer."); + goto _ERROR; + } + pT->BP=cVar._int; + pT->IP+=(4+2*4); + break; + } + + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(!PX_StringInitialize(Ins->mp,&pVar->_string)) + { + PX_ScriptVM_Error(Ins,"MOV crash."); + goto _ERROR; + } + if(!PX_StringCat(&pVar->_string,cVar._string.buffer)) + { + PX_ScriptVM_Error(Ins,"MOV crash."); + goto _ERROR; + } + pVar->type=cVar.type; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInitialize(Ins->mp,&pVar->_memory); + if(!PX_MemoryAlloc(&pVar->_memory,cVar._memory.usedsize)) + { + PX_ScriptVM_Error(Ins,"MOV crash."); + goto _ERROR; + } + if(!PX_MemoryCat(&pVar->_memory,cVar._memory.buffer,cVar._memory.usedsize)) + { + PX_ScriptVM_Error(Ins,"MOV crash."); + goto _ERROR; + } + pVar->type=cVar.type; + } + else + { + *pVar=cVar; + } + + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ADD: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) + { + PX_ScriptVM_Error(Ins,"Add crash."); + goto _ERROR; + } + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADD IP is not a integer."); + goto _ERROR; + } + pT->IP+=cVar._int; + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_SP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADD SP is not a integer."); + goto _ERROR; + } + pT->SP+=cVar._int; + pT->IP+=(4+2*4); + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADD BP is not a integer."); + goto _ERROR; + } + pT->BP+=cVar._int; + pT->IP+=(4+2*4); + break; + } + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int+=cVar._int; + pT->IP+=(4+2*4); + break; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_int+cVar._float; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + pT->IP+=(4+2*4); + break; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_float+cVar._float; + pT->IP+=(4+2*4); + break; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=pVar->_float+cVar._int; + pT->IP+=(4+2*4); + break; + } + PX_ScriptVM_Error(Ins,"ADD Invalid instr"); + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SUB: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) + { + PX_ScriptVM_Error(Ins,"SUB out of memory."); + goto _ERROR; + } + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"SUB IP is not a integer."); + goto _ERROR; + } + pT->IP-=cVar._int; + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_SP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"SUB SP is not a integer."); + goto _ERROR; + } + pT->SP-=cVar._int; + if (pT->SP<0) + { + PX_ScriptVM_Error(Ins,"SUB SP<0."); + goto _ERROR; + } + pT->IP+=(4+2*4); + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"SUB BP is not a integer."); + goto _ERROR; + } + pT->BP-=cVar._int; + pT->IP+=(4+2*4); + break; + } + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"SUB parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"SUB parameters error."); + goto _ERROR; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int-=cVar._int; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_int-cVar._float; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_float-cVar._float; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=pVar->_float-cVar._int; + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_DIV: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar._int==0) + { + PX_ScriptVM_Error(Ins,"Divide by zero error"); + goto _ERROR; + } + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"DIV parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"DIV parameters error."); + goto _ERROR; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int/=cVar._int; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_int/cVar._float; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_float/cVar._float; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=pVar->_float/cVar._int; + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MUL: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"MUL parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"MUL parameters error."); + goto _ERROR; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int*=cVar._int; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_int*cVar._float; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_float*cVar._float; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=pVar->_float*cVar._int; + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MOD: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"MOD parameters error."); + goto _ERROR; + } + pVar->_int%=cVar._int; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SHL: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"SHL parameters error."); + goto _ERROR; + } + pVar->_int<<=cVar._int; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SHR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"SHR parameters error."); + goto _ERROR; + } + pVar->_int>>=cVar._int; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_AND: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"AND parameters error."); + goto _ERROR; + } + pVar->_int&=cVar._int; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ANDL: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"ANDL parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"ANDL parameters error."); + goto _ERROR; + } + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=(pVar->_int&&cVar._int); + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ORL: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"ORL parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"ORL parameters error."); + goto _ERROR; + } + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=(pVar->_int||cVar._int); + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_OR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"OR parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"OR parameters error."); + goto _ERROR; + } + pVar->_int|=cVar._int; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_XOR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"XOR parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"XOR parameters error."); + goto _ERROR; + } + pVar->_int^=cVar._int; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_POW: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"POW parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"POW parameters error."); + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int=PX_pow_ii(pVar->_int,cVar._int); + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=(px_float)PX_pow_dd(pVar->_int,cVar._float); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=(px_float)PX_pow_dd(pVar->_float,cVar._float); + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=(px_float)PX_pow_dd(pVar->_float,cVar._int); + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SIN: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=PX_sin_angle(cVar._float); + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=PX_sin_angle((px_float)cVar._int); + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_COS: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=PX_cos_angle(cVar._float); + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=PX_cos_angle((px_float)cVar._int); + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_INT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"INT transform error."); + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_int=(px_int)(pVar->_float); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + + pT->IP+=(4+1*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_FLT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"FLT transform error."); + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=(px_float)(pVar->_int); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + + pT->IP+=(4+1*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRLEN: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strlen parameters error."); + goto _ERROR; + } + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=PX_strlen(cVar._string.buffer); + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRCAT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strcat parameters error."); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(!PX_StringCat(&pVar->_string,cVar._string.buffer)) goto _ERROR; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if(!PX_StringCatChar(&pVar->_string,(px_char)cVar._int)) goto _ERROR; + } + else + { + goto _ERROR; + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRREP: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strrep parameters error."); + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strrep parameters error."); + goto _ERROR; + } + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strrep parameters error."); + goto _ERROR; + } + PX_StringReplace(&pVar->_string,cVar._string.buffer,sVar._string.buffer); + pT->IP+=(4+3*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRCHR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strchr parameters error."); + goto _ERROR; + } + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"strchr parameters error."); + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + + if(sVar._int_int=(px_uchar)cVar._string.buffer[sVar._int]; + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTOI: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strtoi parameters error."); + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=PX_atoi(cVar._string.buffer); + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTOF: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strtof parameters error."); + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + pVar->_int=(px_int)PX_atof(cVar._string.buffer); + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFRI: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"strfri parameters error."); + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + PX_StringInitialize(Ins->mp,&pVar->_string); + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + PX_itoa(cVar._int,numOut,sizeof(numOut),10); + else + PX_itoa((px_int)cVar._float,numOut,sizeof(numOut),10); + + if(!PX_StringCat(&pVar->_string,numOut)) goto _ERROR; + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFRF: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"strfrf parameters error."); + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + PX_StringInitialize(Ins->mp,&pVar->_string); + numOut[0]=0; + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + PX_ftoa((px_float)cVar._int,numOut,sizeof(numOut),PX_SCRIPTVM_DEFALUT_FLOAT_PRECCISION); + else + PX_ftoa(cVar._float,numOut,sizeof(numOut),PX_SCRIPTVM_DEFALUT_FLOAT_PRECCISION); + + PX_StringCat(&pVar->_string,numOut); + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTMEM: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_MemoryInitialize(Ins->mp,&cVar._memory); + if(!PX_MemoryCat(&cVar._memory,pVar->_string.buffer,pVar->_string.bufferlen)) goto _ERROR; + PX_StringFree(&pVar->_string); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + pVar->_memory=cVar._memory; + } + else + { + PX_ScriptVM_Error(Ins,"strtmem parameters error."); + goto _ERROR; + } + pT->IP+=(4+1*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRSET: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"strset parameters error."); + goto _ERROR; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + PX_StringInitialize(Ins->mp,&pVar->_string); + } + } + + + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||(tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT)) + { + goto _ERROR; + } + + if (sVar._int>=pVar->_string.bufferlen-1) + { + i=8; + while(imp,&newString,i); + PX_memset(newString.buffer,0,i); + PX_strcat(newString.buffer,pVar->_string.buffer); + PX_StringFree(&pVar->_string); + pVar->_string=newString; + } + + if(tVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + pVar->_string.buffer[sVar._int]=(px_char)tVar._int; + else + goto _ERROR; + + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFIND: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"strfind parameters error."); + goto _ERROR; + } + pVar->_int=-1; + pchar=PX_strstr(sVar._string.buffer,tVar._string.buffer); + if (pchar) + { + pVar->_int=(px_uint)(pchar-sVar._string.buffer); + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_ASC: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"asc parameters error."); + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=cVar._string.buffer[0]; + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMBYTE: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"membyte parameters error."); + goto _ERROR; + } + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + if (tVar._int_int=sVar._memory.buffer[tVar._int]; + } + else + { + pVar->_int=0; + } + + + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMSET: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if(pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"memset parameters error."); + goto _ERROR; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + PX_MemoryInitialize(Ins->mp,&pVar->_memory); + } + } + + + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (sVar._int>=pVar->_memory.allocsize) + { + i=1; + while(i<=sVar._int) + i<<=1; + newBuffer=(px_byte *)MP_Malloc(Ins->mp,i); + PX_memcpy(newBuffer,pVar->_memory.buffer,pVar->_memory.usedsize); + if (pVar->_memory.buffer) + { + MP_Free(Ins->mp,pVar->_memory.buffer); + } + pVar->_memory.buffer=newBuffer; + pVar->_memory.allocsize=i; + } + + pVar->_memory.buffer[sVar._int]=tVar._char; + if(sVar._int>pVar->_memory.usedsize-1) + pVar->_memory.usedsize=sVar._int+1; + + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_ScriptVM_Error(Ins,"memtrm parameters error."); + goto _ERROR; + } + + + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"memtrm parameters error."); + goto _ERROR; + } + + if (sVar._int+tVar._int>pVar->_memory.usedsize) + { + PX_ScriptVM_Error(Ins,"memtrm out of range."); + goto _ERROR; + } + j=0; + for (i=sVar._int;i_memory.buffer[j]=pVar->_memory.buffer[i]; + j++; + } + pVar->_memory.usedsize=tVar._int; + + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMFIND: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_ScriptVM_Error(Ins,"memfind parameters error."); + goto _ERROR; + } + pVar->_int=-1; + for(i=0;i_int=i; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + break; + } + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMLEN: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=sVar._memory.usedsize; + + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMCAT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"memcat crash."); + goto _ERROR; + } + else + { + if(!PX_MemoryCat(&pVar->_memory,&sVar._int,1)) goto _ERROR; + pT->IP+=(4+2*4); + } + } + else + { + if(!PX_MemoryCat(&pVar->_memory,sVar._memory.buffer,sVar._memory.usedsize)) goto _ERROR; + pT->IP+=(4+2*4); + } + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMTSTR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (pVar->_memory.usedsize==0) + { + PX_StringInitialize(Ins->mp,&cVar._string); + PX_MemoryFree(&pVar->_memory); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + pVar->_string=cVar._string; + } + else + { + lastchar=pVar->_memory.buffer[pVar->_memory.usedsize-1]; + + pVar->_memory.buffer[pVar->_memory.usedsize-1]=0; + + PX_StringInitialize(Ins->mp,&cVar._string); + + if(!PX_StringCat(&cVar._string,(px_char *)pVar->_memory.buffer)) { + PX_ScriptVM_Error(Ins,"memstr crash."); + goto _ERROR; + } + if(PX_strlen((px_char *)pVar->_memory.buffer)==pVar->_memory.usedsize-1) + PX_StringCatChar(&cVar._string,lastchar); + + PX_MemoryFree(&pVar->_memory); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + pVar->_string=cVar._string; + } + + } + else + { + goto _ERROR; + } + pT->IP+=(4+1*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_DATACPY: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"datacpy parameters error"); + goto _ERROR; + } + if (cVar._int+tVar._int>Ins->VM_memsize||cVar._int<0||sVar._int+tVar._int>Ins->VM_memsize||sVar._int<0) + { + PX_ScriptVM_Error(Ins,"Out of memory access"); + goto _ERROR; + } + PX_memcpy(&Ins->_mem[cVar._int],&Ins->_mem[sVar._int],sizeof(PX_SCRIPTVM_VARIABLE)*tVar._int); + + pT->IP+=(4+3*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_NEG: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int=-pVar->_int; + } + else if(pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=-pVar->_float; + } + else + { + PX_ScriptVM_Error(Ins,"neg parameters error"); + goto _ERROR; + } + + pT->IP+=(4+1*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_INV: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"inv parameters error"); + goto _ERROR; + } + + pVar->_int=~pVar->_int; + + pT->IP+=(4+1*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_NOT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"not parameters error"); + goto _ERROR; + } + + pVar->_int=!pVar->_int; + + pT->IP+=(4+1*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JMP: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"JMP parameters error"); + goto _ERROR; + } + + if (cVar._int<0||cVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JMP jump to invalid address"); + goto _ERROR; + } + + pT->IP=cVar._int; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JE: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (cVar.type==sVar.type) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (cVar._int==sVar._int) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JE jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + break; + } + } + else + { + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + if (PX_strequ(cVar._string.buffer,sVar._string.buffer)) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JE jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + break; + } + + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + if (PX_memequ(cVar._memory.buffer,sVar._memory.buffer,cVar._memory.usedsize)) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JE jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + break; + } + } + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JNE: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (cVar.type==sVar.type) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (cVar._int!=sVar._int) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JNE jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + break; + } + } + else + { + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + if (!PX_strequ(cVar._string.buffer,sVar._string.buffer)) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JNE jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + break; + } + + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + if (!PX_memequ(cVar._memory.buffer,sVar._memory.buffer,cVar._memory.usedsize)) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JNE jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + break; + } + } + } + pT->IP+=(4+3*4); + + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JL: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"JL parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"JL parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_ScriptVM_Error(Ins,"JL parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p1=(px_float)cVar._int; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p1=cVar._float; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p2=(px_float)sVar._int; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p2=sVar._float; + } + + if (p1Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JL jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + } + else + { + pT->IP+=(4+3*4); + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JLE: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"JLE parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"JLE parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_ScriptVM_Error(Ins,"JLE parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p1=(px_float)cVar._int; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p1=cVar._float; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p2=(px_float)sVar._int; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p2=sVar._float; + } + + if (p1<=p2) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JLE jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + } + else + { + pT->IP+=(4+3*4); + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JG: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"JG parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"JG parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_ScriptVM_Error(Ins,"JG parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p1=(px_float)cVar._int; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p1=cVar._float; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p2=(px_float)sVar._int; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p2=sVar._float; + } + + if (p1>p2) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JG jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + } + else + { + pT->IP+=(4+3*4); + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JGE: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"JGE parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_Error(Ins,"JGE parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_ScriptVM_Error(Ins,"JGE parameters error"); + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p1=(px_float)cVar._int; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p1=cVar._float; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p2=(px_float)sVar._int; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p2=sVar._float; + } + + if (p1>=p2) + { + if (tVar._int<0||tVar._int>Ins->binsize) + { + PX_ScriptVM_Error(Ins,"JGE jump to invalid address"); + goto _ERROR; + } + pT->IP=tVar._int; + } + else + { + pT->IP+=(4+3*4); + } + + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGE: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + + if (sVar.type==tVar.type) + { + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING&&sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (sVar._int==tVar._int) + { + pVar->_int=1; + pT->IP+=(4+3*4); + break; + } + } + else + { + if(sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + if (PX_strequ(sVar._string.buffer,tVar._string.buffer)) + { + pVar->_int=1; + pT->IP+=(4+3*4); + break; + } + + + if(sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + if ((sVar._memory.usedsize==tVar._memory.usedsize)&&PX_memequ(sVar._memory.buffer,tVar._memory.buffer,sVar._memory.usedsize)) + { + pVar->_int=1; + pT->IP+=(4+3*4); + break; + } + } + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGNE: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + + if (sVar.type==tVar.type) + { + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING&&sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (sVar._int==tVar._int) + { + pVar->_int=0; + pT->IP+=(4+3*4); + break; + } + } + else + { + if(sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + if (PX_strequ(sVar._string.buffer,tVar._string.buffer)) + { + pVar->_int=0; + pT->IP+=(4+3*4); + break; + } + + + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + if ((sVar._memory.usedsize==tVar._memory.usedsize)&&PX_memequ(sVar._memory.buffer,tVar._memory.buffer,sVar._memory.usedsize)) + { + pVar->_int=0; + pT->IP+=(4+3*4); + break; + } + } + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"LGZ parameters error"); + goto _ERROR; + } + + if (pVar->_int==0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGGZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"LGGZ parameters error"); + goto _ERROR; + } + + if (pVar->_int>0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGGEZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"LGGEZ parameters error"); + goto _ERROR; + } + + if (pVar->_int>=0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGLZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"LGLZ parameters error"); + goto _ERROR; + } + + if (pVar->_int<0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGLEZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + PX_ScriptVM_Error(Ins,"LGLEZ parameters error"); + goto _ERROR; + } + + if (pVar->_int<=0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + + + case PX_SCRIPT_ASM_INSTR_OPCODE_CALL: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"CALL parameters error"); + goto _ERROR; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_HOST) + { + if (Ins->_host[cVar._int].map!=PX_NULL) + { + if (!((PX_ScriptVM_Function_Modules)(Ins->_host[cVar._int].map))(Ins,Ins->_host[cVar._int].userptr)) + { + PX_ScriptVM_Error(Ins,"CALL function crash"); + goto _ERROR;//runtime error + } + } + else + { + PX_ScriptVM_Error(Ins,"CALL host call not found"); + goto _ERROR;//runtime error + } + pT->IP+=8; + } + else + { + //push IP+8 + if (pT->SP>0) + { + pT->SP-=1; + } + else + { + PX_ScriptVM_Error(Ins,"CALL error"); + goto _ERROR; + } + + + pVar=&Ins->_mem[pT->SP]; + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + Ins->_mem[pT->SP].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + Ins->_mem[pT->SP]._int=pT->IP+8; + pT->IP=cVar._int; + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_PUSH: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if(pT->SP>0) + pT->SP-=1; + else + { + PX_ScriptVM_Error(Ins,"push error"); + goto _ERROR; + } + pVar=&Ins->_mem[pT->SP]; + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(!PX_StringInitialize(Ins->mp,&pVar->_string)) goto _ERROR; + if(!PX_StringCat(&pVar->_string,cVar._string.buffer)) goto _ERROR; + pVar->type=cVar.type; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInitialize(Ins->mp,&pVar->_memory); + if(!PX_MemoryAlloc(&pVar->_memory,cVar._memory.usedsize)) goto _ERROR; + if(!PX_MemoryCat(&pVar->_memory,cVar._memory.buffer,cVar._memory.usedsize)) goto _ERROR; + pVar->type=cVar.type; + } + else + { + *pVar=cVar; + } + + pT->IP+=8; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_POP: + { + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP) + { + if(Ins->_mem[pT->SP].type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pT->IP=Ins->_mem[pT->SP]._int; + pT->SP+=1; + } + else + { + PX_ScriptVM_Error(Ins,"POP error"); + goto _ERROR; + } + } + else if (opType[0]==PX_SCRIPT_ASM_OPTYPE_SP) + { + PX_ScriptVM_Error(Ins,"POP error"); + goto _ERROR; + } + else if (opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + if(Ins->_mem[pT->SP].type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pT->BP=Ins->_mem[pT->SP]._int; + pT->SP+=1; + pT->IP+=8; + } + else + { + PX_ScriptVM_Error(Ins,"POP error"); + goto _ERROR; + } + } + else + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + *pVar=Ins->_mem[pT->SP]; + + Ins->_mem[pT->SP].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + Ins->_mem[pT->SP]._int=0; + + pT->SP+=1; + pT->IP+=8; + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_POPN: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"POPN error"); + goto _ERROR; + } + for (i=0;i_mem[pT->SP+i]; + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + Ins->_mem[pT->SP+i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + Ins->_mem[pT->SP+i]._int=0; + } + pT->SP+=cVar._int; + pT->IP+=8; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ADR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + switch(opType[1]) + { + case PX_SCRIPT_ASM_OPTYPE_GLOBAL: + pVar->_int=PX_SCRIPT_VM_PARAM(1); + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL: + pVar->_int=pT->BP-PX_SCRIPT_VM_PARAM(1); + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF: + if (pT->R[PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADR error"); + goto _ERROR; + } + pVar->_int=pT->R[PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF: + if (Ins->_mem[PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADR error"); + goto _ERROR; + } + pVar->_int=Ins->_mem[PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF: + if (Ins->_mem[pT->BP-PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADR error"); + goto _ERROR; + } + pVar->_int=Ins->_mem[pT->BP-PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF: + if (Ins->_mem[PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADR error"); + goto _ERROR; + } + pVar->_int=pT->BP-pT->R[PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF: + if (Ins->_mem[PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADR error"); + goto _ERROR; + } + pVar->_int=pT->BP-Ins->_mem[PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF: + if (Ins->_mem[pT->BP-PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"ADR error"); + goto _ERROR; + } + pVar->_int=pT->BP-Ins->_mem[pT->BP-PX_SCRIPT_VM_PARAM(1)]._int; + break; + + } + pT->IP+=8; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_RET: + { + if (pT->SP>=Ins->VM_memsize) + { + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + + PX_ScriptVM_ThreadStop(Ins,Ins->T); + return PX_SCRIPTVM_RUNRETURN_END; + } + else + { + cVar=Ins->_mem[pT->SP]; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"RET error"); + goto _ERROR; + } + pT->SP+=1; + if (pT->SP>=Ins->VM_memsize||cVar._int==-1) + { + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + + PX_ScriptVM_ThreadStop(Ins,Ins->T); + return PX_SCRIPTVM_RUNRETURN_END; + } + else + { + pT->IP=cVar._int; + } + } + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_NOP: + { + pT->IP+=4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_BPX: + { + if (Ins->debug) + { + g_scriptVM_printFunc("Story Script Debugger Interrupt.\n"); + PX_ScriptVM_DebuggerInterrupt(Ins); + + } + pT->IP+=4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_WAIT: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_Error(Ins,"WAIT index error"); + goto _ERROR; + } + if (Ins->signal[cVar._int]) + { + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + return PX_SCRIPTVM_RUNRETURN_WAIT; + } + else + { + pT->IP+=8; + if (tick==0) + { + tick=1; + } + } + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SIGNAL: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ERROR("SIGNAL ERROR"); + goto _ERROR; + } + Ins->signal[cVar._int]=sVar._int; + pT->IP+=4+4*2; + } + break; + default: + PX_ScriptVM_Error(Ins,"INVALID INSTR"); + goto _ERROR; + } + + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + + if (pT->IP==-1) + { + break; + } + } + return PX_SCRIPTVM_RUNRETURN_END; +_ERROR: + + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + + PX_ScriptVM_Error(Ins,"Virtual Machine runtime error"); + return PX_SCRIPTVM_RUNRETURN_ERROR; +} + +px_bool PX_ScriptVM_InstanceRunFunction(PX_ScriptVM_Instance *Ins,px_int threadID,const px_char *functionName,PX_SCRIPTVM_VARIABLE args[],px_int paramcount) +{ + int i,j,ip=-1; + px_char uprname[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + px_int old_T; + if (paramcount>16||threadID>=Ins->maxThreadCount) + { + return PX_FALSE; + } + + if (PX_strlen(functionName)>=__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN) + { + return PX_FALSE; + } + + for (i=0;ifuncCount;i++) + { + PX_strcpy(uprname,functionName,sizeof(uprname)); + PX_strupr(uprname); + if(PX_strequ(Ins->_func[i].name,uprname)) + { + ip=Ins->_func[i].Addr; + break; + } + } + + if (i==Ins->funcCount) + { + return PX_FALSE; + } + + if (Ins->pThread[threadID].Activated==PX_FALSE) + { + Ins->pThread[threadID].suspend=PX_FALSE; + Ins->pThread[threadID].Activated=PX_TRUE; + Ins->pThread[threadID].SP=Ins->VM_memsize-Ins->VM_Stacksize*threadID; + Ins->pThread[threadID].BP=Ins->pThread[threadID].SP; + Ins->pThread[threadID].IP=ip; + for(j=0;jpThread[threadID].R)/sizeof(Ins->pThread[threadID].R[0]);j++) + { + PX_SCRIPTVM_VaribaleFree(Ins,&Ins->pThread[threadID].R[j]); + } + } + else + { + return PX_FALSE; + } + + old_T=Ins->T; + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,threadID)) + { + return PX_FALSE; + } + + for (i=paramcount-1;i>=0;i--) + { + PX_ScriptVM_PUSH(Ins,args[i]); + } + + PX_ScriptVM_PUSH(Ins,PX_ScriptVM_Variable_int(-1)); + + PX_ScriptVM_InstanceRunThread(Ins,-1); + + Ins->T=old_T; + return PX_TRUE; +} + +px_bool PX_ScriptVM_InstanceRunFunctionIndex(PX_ScriptVM_Instance *Ins,px_int threadID,px_int funcIndex,PX_SCRIPTVM_VARIABLE args[],px_int paramcount) +{ + int i,j,ip; + px_int old_T; + if (paramcount>16||threadID>=Ins->maxThreadCount) + { + return PX_FALSE; + } + + ip=Ins->_func[funcIndex].Addr; + + if (Ins->pThread[threadID].Activated==PX_FALSE) + { + Ins->pThread[threadID].suspend=PX_FALSE; + Ins->pThread[threadID].Activated=PX_TRUE; + Ins->pThread[threadID].SP=Ins->VM_memsize-Ins->VM_Stacksize*threadID; + Ins->pThread[threadID].BP=Ins->pThread[threadID].SP; + Ins->pThread[threadID].IP=ip; + for(j=0;jpThread[threadID].R)/sizeof(Ins->pThread[threadID].R[0]);j++) + { + PX_SCRIPTVM_VaribaleFree(Ins,&Ins->pThread[threadID].R[j]); + } + } + else + { + return PX_FALSE; + } + + old_T=Ins->T; + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,threadID)) + { + return PX_FALSE; + } + + for (i=paramcount-1;i>=0;i--) + { + PX_ScriptVM_PUSH(Ins,args[i]); + } + + PX_ScriptVM_PUSH(Ins,PX_ScriptVM_Variable_int(-1)); + + PX_ScriptVM_InstanceRunThread(Ins,-1); + Ins->T=old_T; + return PX_TRUE; +} + + +px_bool PX_ScriptVM_InstanceBeginThreadFunction(PX_ScriptVM_Instance *Ins,px_int threadID,const px_char *func,PX_SCRIPTVM_VARIABLE args[],px_int paramcount) +{ + int i,j,ip=-1; + px_int old_T; + px_char uprname[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + + if (paramcount>16||threadID>=Ins->maxThreadCount||threadID<0) + { + return PX_FALSE; + } + + + for (i=0;ifuncCount;i++) + { + PX_strcpy(uprname,func,sizeof(uprname)); + PX_strupr(uprname); + if(PX_strequ(Ins->_func[i].name,uprname)) + { + ip=Ins->_func[i].Addr; + break; + } + } + + if (i==Ins->funcCount) + { + return PX_FALSE; + } + + if (Ins->pThread[threadID].Activated==PX_FALSE) + { + Ins->pThread[threadID].suspend=PX_FALSE; + Ins->pThread[threadID].Activated=PX_TRUE; + Ins->pThread[threadID].SP=Ins->VM_memsize-Ins->VM_Stacksize*threadID; + Ins->pThread[threadID].BP=Ins->pThread[threadID].SP; + Ins->pThread[threadID].IP=ip; + for(j=0;jpThread[threadID].R)/sizeof(Ins->pThread[threadID].R[0]);j++) + { + PX_SCRIPTVM_VaribaleFree(Ins,&Ins->pThread[threadID].R[j]); + } + } + else + { + return PX_FALSE; + } + + old_T=Ins->T; + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,threadID)) + { + return PX_FALSE; + } + + for (i=paramcount-1;i>=0;i--) + { + PX_ScriptVM_PUSH(Ins,args[i]); + } + + PX_ScriptVM_PUSH(Ins,PX_ScriptVM_Variable_int(-1)); + + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,old_T)) + { + return PX_FALSE; + } + return PX_TRUE; +} + +px_bool PX_ScriptVM_InstanceBeginThreadFunctionIndex(PX_ScriptVM_Instance *Ins,px_int threadID,px_int funcIndex,PX_SCRIPTVM_VARIABLE args[],px_int paramcount) +{ + int i,j,ip; + px_int old_T; + if (paramcount>16||threadID>=Ins->maxThreadCount) + { + return PX_FALSE; + } + + ip=Ins->_func[funcIndex].Addr; + + if (Ins->pThread[threadID].Activated==PX_FALSE) + { + Ins->pThread[threadID].suspend=PX_FALSE; + Ins->pThread[threadID].Activated=PX_TRUE; + Ins->pThread[threadID].SP=Ins->VM_memsize-Ins->VM_Stacksize*threadID; + Ins->pThread[threadID].BP=Ins->pThread[threadID].SP; + Ins->pThread[threadID].IP=ip; + for(j=0;jpThread[threadID].R[j]); + } + } + else + { + return PX_FALSE; + } + + old_T=Ins->T; + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,threadID)) + { + return PX_FALSE; + } + + + for (i=paramcount-1;i>=0;i--) + { + PX_ScriptVM_PUSH(Ins,args[i]); + } + + + PX_ScriptVM_PUSH(Ins,PX_ScriptVM_Variable_int(-1)); + + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,old_T)) + { + return PX_FALSE; + } + return PX_TRUE; +} + + +px_int PX_ScriptVM_InstanceGetFreeThreadId(PX_ScriptVM_Instance *Ins) +{ + px_int i; + for (i=0;imaxThreadCount;i++) + { + if (!Ins->pThread[i].Activated) + { + return i; + } + } + return -1; +} + +px_bool PX_ScriptVM_InstanceFree(PX_ScriptVM_Instance *Ins) +{ + px_int i,j; + for (i=0;iVM_memsize;i++) + { + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&Ins->_mem[i]._string); + } + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&Ins->_mem[i]._memory); + } + } + + + if (Ins->pThread) + { + //Free Thread + for (i=0;imaxThreadCount;i++) + { + for (j=0;jpThread[i].R[j].type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&Ins->pThread[i].R[j]._string); + } + if (Ins->pThread[i].R[j].type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&Ins->pThread[i].R[j]._memory); + } + } + } + MP_Free(Ins->mp,Ins->pThread); + } + + + if(Ins->_mem) + MP_Free(Ins->mp,Ins->_mem); + + if(Ins->_func) + MP_Free(Ins->mp,Ins->_func); + + if(Ins->_host) + MP_Free(Ins->mp,Ins->_host); + + if(Ins->_string) + MP_Free(Ins->mp,Ins->_string); + + if(Ins->_bin) + MP_Free(Ins->mp,Ins->_bin); + + if(Ins->_memory) + MP_Free(Ins->mp,Ins->_memory); + + return PX_TRUE; +} + +px_bool PX_ScriptVM_RegistryHostFunction(PX_ScriptVM_Instance *Ins,const px_char *name,PX_ScriptVM_Function_Modules funcModules,px_void *userptr) +{ + px_int i; + px_char uprname[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + PX_strset(uprname,name); + PX_strupr(uprname); + for (i=0;ihostCount;i++) + { + if (PX_strequ(uprname,Ins->_host[i].name+1)) + { + Ins->_host[i].map=(px_void *)funcModules; + Ins->_host[i].userptr=userptr; + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_void PX_ScriptVM_RET(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE cVar) +{ + PX_SCRIPTVM_VARIABLE *pVar; + pVar=&Ins->pThread[Ins->T].R[1]; + + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringInitialize(Ins->mp,&pVar->_string); + PX_StringCat(&pVar->_string,cVar._string.buffer); + pVar->type=cVar.type; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInitialize(Ins->mp,&pVar->_memory); + PX_MemoryAlloc(&pVar->_memory,cVar._memory.usedsize); + PX_MemoryCat(&pVar->_memory,cVar._memory.buffer,cVar._memory.usedsize); + pVar->type=cVar.type; + } + else + { + *pVar=cVar; + } +} + +px_void PX_ScriptVM_PUSH(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE cVar) +{ + PX_SCRIPTVM_VARIABLE *pVar; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + if (pT->SP>0) + { + pT->SP-=1; + } + else + return; + + pVar=&Ins->_mem[pT->SP]; + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringInitialize(Ins->mp,&pVar->_string); + PX_StringCat(&pVar->_string,cVar._string.buffer); + pVar->type=cVar.type; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInitialize(Ins->mp,&pVar->_memory); + PX_MemoryAlloc(&pVar->_memory,cVar._memory.usedsize); + PX_MemoryCat(&pVar->_memory,cVar._memory.buffer,cVar._memory.usedsize); + pVar->type=cVar.type; + } + else + { + *pVar=cVar; + } + +} + +px_void PX_ScriptVM_POPN(PX_ScriptVM_Instance *Ins,px_int T,px_int n) +{ + PX_SCRIPTVM_VARIABLE *pVar; + px_int i; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[T]; + + for (i=0;i_mem[pT->SP+i]; + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + Ins->_mem[pT->SP+i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + Ins->_mem[pT->SP+i]._int=0; + } + pT->SP+=n; + if (pT->SP>Ins->VM_memsize) + { + PX_ScriptVM_Error(Ins,"host call Stack overflow!"); + } +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_int(px_int _int) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + var._int=_int; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_float(px_float _float) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + var._float=_float; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_string(px_string _string) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + var._string=_string; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_memory(px_byte *buffer,px_int _size) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + var._memory.allocsize=0; + var._memory.buffer=buffer; + var._memory.usedsize=_size; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_const_string(px_char *buffer) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + var._string.buffer=buffer; + var._string.bufferlen=0; + var._string.mp=PX_NULL; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_const_memory(px_byte *buffer,px_int _size) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + var._memory.allocsize=0; + var._memory.buffer=buffer; + var._memory.usedsize=_size; + return var; +} + + +px_bool PX_ScriptVM_DebuggerEnable(PX_ScriptVM_Instance *Ins,PX_ScriptVM_DebuggerPrint _printFunc,PX_ScriptVM_DebuggerCommand _cmdFunc) +{ + if (g_scriptVM_printFunc&&_printFunc!=g_scriptVM_printFunc) + { + return PX_FALSE; + } + if (g_scriptVM_cmdFunc&&_cmdFunc!=g_scriptVM_cmdFunc) + { + return PX_FALSE; + } + g_scriptVM_cmdFunc=_cmdFunc; + g_scriptVM_printFunc=_printFunc; + Ins->bp_IP=-1; + Ins->bp_next=PX_TRUE; + Ins->debug=PX_TRUE; + + g_scriptVM_printFunc("Story Script debugger enabled.\n"); + return PX_TRUE; +} + + +px_int PX_ScriptVM_GetFunctionIndex(PX_ScriptVM_Instance *Ins,px_char *func) +{ + int i; + px_char cmpName[sizeof(Ins->_func[0].name)]; + if (func==PX_NULL) + { + return -1; + } + if (PX_strlen(func)>=sizeof(cmpName)) + { + return -1; + } + PX_strcpy(cmpName,func,sizeof(cmpName)); + PX_strupr(cmpName); + + for (i=0;ifuncCount;i++) + { + if(PX_strequ(Ins->_func[i].name,cmpName)) + { + return i; + } + } + + return -1; +} + +px_bool PX_ScriptVM_LocalAlloc(PX_ScriptVM_Instance *Ins,int size,PX_SCRIPTVM_MEMORY_PTR *mem_ptr) +{ + px_int i; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + if (size>pT->SP-Ins->VM_Globalsize) + { + return PX_FALSE; + } + pT->SP-=size; + for (i=pT->SP;iSP+size;i++) + { + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&Ins->_mem[i]._memory); + } + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&Ins->_mem[i]._string); + } + Ins->_mem[i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + mem_ptr->ptr= pT->SP; + mem_ptr->size=size; + return PX_TRUE; +} + +px_bool PX_ScriptVM_LocalFree(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_MEMORY_PTR *mem_ptr) +{ + px_int i; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + if (pT->SP!=mem_ptr->ptr) + { + return PX_FALSE; + } + for (i=pT->SP;iSP+mem_ptr->size;i++) + { + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&Ins->_mem[i]._memory); + } + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&Ins->_mem[i]._string); + } + Ins->_mem[i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + pT->SP+=mem_ptr->size; + return PX_TRUE; +} + +static px_void PX_ScriptVM_DebuggerGetParamName(PX_ScriptVM_Instance *Ins,px_char optype,px_int param) +{ + px_int i; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + switch (optype) + { + case PX_SCRIPT_ASM_OPTYPE_IP: + { + g_scriptVM_printFunc("IP"); + } + break; + + case PX_SCRIPT_ASM_OPTYPE_SP: + { + g_scriptVM_printFunc("SP"); + } + break; + + case PX_SCRIPT_ASM_OPTYPE_BP: + { + g_scriptVM_printFunc("BP"); + } + break; + case PX_SCRIPT_ASM_OPTYPE_HOST: + case PX_SCRIPT_ASM_OPTYPE_INT: + { + g_scriptVM_printFunc("%d",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_FLOAT: + { + //Must be IEEE 754 format + g_scriptVM_printFunc("%f",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_STRING: + { + g_scriptVM_printFunc("%d",Ins->_string+param); + } + break; + + case PX_SCRIPT_ASM_OPTYPE_MEMORY: + { + g_scriptVM_printFunc("@"); + for (i=0;i<*(px_int *)(Ins->_memory+param);i++) + { + g_scriptVM_printFunc("%x",*(Ins->_memory+param+4+i)); + } + g_scriptVM_printFunc("@"); + } + break; + + case PX_SCRIPT_ASM_OPTYPE_REG: + { + g_scriptVM_printFunc("R%d",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST: + { + g_scriptVM_printFunc("LOCAL[%d]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF: + { + g_scriptVM_printFunc("LOCAL[R%d]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF: + { + g_scriptVM_printFunc("GLOBAL[LOCAL[%d]]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF: + { + g_scriptVM_printFunc("LOCAL[LOCAL[%d]]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST: + { + g_scriptVM_printFunc("GLOBAL[%d]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF: + { + g_scriptVM_printFunc("GLOBAL[%d]",pT->SP+param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF: + { + g_scriptVM_printFunc("GLOBAL[R%d]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF: + { + g_scriptVM_printFunc("GLOBAL[GLOBAL[%d]]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF: + { + g_scriptVM_printFunc("GLOBAL[LOCAL[%d]]",param); + } + break; + + default: + { + PX_ScriptVM_Error(Ins,"Unknow parameter"); + } + } +} + +px_void PX_ScriptVM_DebuggerDisplayBinary(PX_ScriptVM_Instance *Ins,px_int IP,px_int size) +{ + px_int i; + px_byte *buffer=(Ins->_bin+IP); + for (i=0;i=Ins->binsize) + { + return 0; + } + opCode=*(Ins->_bin+IP); + opType[0]=*(Ins->_bin+IP+1); + opType[1]=*(Ins->_bin+IP+2); + opType[2]=*(Ins->_bin+IP+3); + + + switch(opCode) + { + case PX_SCRIPT_ASM_INSTR_OPCODE_MOV: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MOV "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ADD: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ADD "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SUB: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SUB "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_DIV: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("DIV "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MUL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MUL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MOD: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MOD "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SHL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SHL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SHR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SHR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_AND: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("AND "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ANDL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ANDL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ORL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ORL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_OR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("OR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_XOR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("XOR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_POW: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("POW "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SIN: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SIN "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_COS: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("COS "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_INT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("INT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_FLT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("FLT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRLEN: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRLEN "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRCAT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRCAT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRREP: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRREP "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRCHR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRCHR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTOI: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRTOI "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTOF: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRTOF "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFRI: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRFRI "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFRF: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRFRF "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTMEM: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRMEM "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRSET: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRSET "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFIND: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRFIND "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_ASC: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ASC "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMBYTE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMBYTE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMSET: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMSET "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMCPY "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMFIND: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMFIND "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMLEN: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMLEN "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMCAT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMCAT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMTSTR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMSTR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_DATACPY: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("DATACPY "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_NEG: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("NEG "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_INV: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("INV "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_NOT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("NOT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JMP: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JMP "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JNE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JNE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JLE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JLE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JG: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JG "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JGE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JGE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGNE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGNE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGZ "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGGZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGGZ "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGGEZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGGEZ "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGLZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGLZ "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGLEZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGLZE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + + case PX_SCRIPT_ASM_INSTR_OPCODE_CALL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("CALL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_PUSH: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("PUSH "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_POP: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("POP "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_POPN: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("POPN "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ADR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ADR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_RET: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("RET"); + return 4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_NOP: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("NOP"); + return 4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_BPX: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("BPX"); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 8; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_WAIT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("WAIT"); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 8; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SIGNAL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SIGNAL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + default: + PX_ScriptVM_Error(Ins,"unknow instruction"); + } + + PX_ScriptVM_Error(Ins,"unknow instruction"); + return 0; +} +px_void PX_ScriptVM_DebuggerDisplayVariable(PX_ScriptVM_Instance *Ins,px_int index) +{ + PX_SCRIPTVM_VARIABLE var; + if (index>=Ins->VM_memsize) + { + g_scriptVM_printFunc("Variable illegal.\n"); + return; + } + var=Ins->_mem[index]; + + switch(var.type) + { + case PX_SCRIPTVM_VARIABLE_TYPE_INT: + g_scriptVM_printFunc("memptr %d [INT] %d\n",index,var._int); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_FLOAT: + g_scriptVM_printFunc("memptr %d [FLOAT] %f\n",index,var._float); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_MEMORY: + g_scriptVM_printFunc("memptr %d [MEMORY]\n",index); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_STRING: + g_scriptVM_printFunc("memptr %d [STRING] %s\n",index,var._string.buffer); + break; + } +} + +px_void PX_ScriptVM_DebuggerDisplayReg(PX_ScriptVM_Instance *Ins,px_int index) +{ + PX_SCRIPTVM_VARIABLE var; + if (index>=PX_SCRIPTVM_REG_COUNT) + { + g_scriptVM_printFunc("Register illegal.\n"); + return; + } + var=Ins->pThread[Ins->T].R[index]; + + switch(var.type) + { + case PX_SCRIPTVM_VARIABLE_TYPE_INT: + g_scriptVM_printFunc("Thread %d R%d [INT] %d\n",Ins->T,index,var._int); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_FLOAT: + g_scriptVM_printFunc("Thread %d R%d [FLOAT] %f\n",Ins->T,index,var._float); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_MEMORY: + g_scriptVM_printFunc("Thread %d R%d [MEMORY]\n",Ins->T,index); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_STRING: + g_scriptVM_printFunc("Thread %d R%d [STRING] %s\n",Ins->T,index,var._string.buffer); + break; + } +} + +static px_bool PX_ScriptVM_DebuggerSolveCmd(PX_ScriptVM_Instance *Ins,px_char *cmd) +{ + + PX_LEXER_LEXEME_TYPE type; + px_lexer lexer; + px_int u,i,oft,instrLen; + px_bool bContinue=PX_FALSE; + + PX_LexerInit(&lexer,Ins->mp); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + + PX_LexerLoadSourceFromMemory(&lexer,cmd); + + /////////////////////////////////////////////////////////////////////////// + // + //b break Point + //n next instruction + //r run + //u disassembly + //global global[] + //local local[] + + while (PX_TRUE) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + if (PX_strequ(lexer.CurLexeme.buffer,"B")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + Ins->bp_IP=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + Ins->bp_IP=-1; + break; + } + } + else if(PX_strequ(lexer.CurLexeme.buffer,"N")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + Ins->bp_next=PX_TRUE; + bContinue=PX_TRUE; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"C")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + Ins->bp_next=PX_FALSE; + bContinue=PX_TRUE; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"U")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + u=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + oft=0; + for (i=0;ipThread[Ins->T].IP+oft); + oft+=instrLen; + if(instrLen) + g_scriptVM_printFunc("\n"); + } + break; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"R")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + u=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + PX_ScriptVM_DebuggerDisplayReg(Ins,u); + + break; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"G")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + u=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + PX_ScriptVM_DebuggerDisplayVariable(Ins,u); + + break; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"L")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + u=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + PX_ScriptVM_DebuggerDisplayVariable(Ins,Ins->pThread[Ins->T].BP-u); + + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + break; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"D")) + { + g_scriptVM_printFunc("IP:%d SP:%d BP:%d\n",Ins->pThread[Ins->T].IP,Ins->pThread[Ins->T].SP,Ins->pThread[Ins->T].BP); + } + + } + + PX_LexerFree(&lexer); + + return bContinue; +} +px_void PX_ScriptVM_DebuggerInterrupt(PX_ScriptVM_Instance *Ins) +{ + + px_char cmd[PX_SCRIPTVM_DEBUGGER_CMD_LEN]; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + px_byte *pInstrs=Ins->_bin+pT->IP; + + if (!Ins->debug) + { + return; + } + if ((Ins->bp_IP==pT->IP)||Ins->bp_next) + { + if(Ins->bp_next) + Ins->bp_IP=PX_FALSE; + } + else + { + return; + } + PX_ScriptVM_DebuggerCurrentInstruction(Ins,pT->IP); + g_scriptVM_printFunc("\n"); + do + { + g_scriptVM_cmdFunc(cmd,PX_SCRIPTVM_DEBUGGER_CMD_LEN); + PX_strupr(cmd); + } while (!PX_ScriptVM_DebuggerSolveCmd(Ins,cmd)); + + + +} + +px_bool PX_ScriptVM_InstanceThreadSwitch(PX_ScriptVM_Instance *Ins,px_int T) +{ + if (TmaxThreadCount&&Ins->pThread[T].Activated) + { + Ins->T=T; + return PX_TRUE; + } + return PX_FALSE; +} + +px_void PX_ScriptVM_ThreadStop(PX_ScriptVM_Instance *Ins,px_int ThreadId) +{ + px_int popn; + if (ThreadIdmaxThreadCount) + { + if (Ins->pThread[ThreadId].Activated) + { + popn=Ins->VM_memsize-Ins->VM_Stacksize*ThreadId-Ins->pThread[ThreadId].SP; + PX_ScriptVM_POPN(Ins,ThreadId,popn); + Ins->pThread[ThreadId].Activated=PX_FALSE; + } + } +} + + +px_void PX_ScriptVM_ThreadClear(PX_ScriptVM_Instance *Ins,px_int ThreadId) +{ + px_int i,popn; + if (ThreadIdmaxThreadCount) + { + //clear stack + popn=Ins->VM_memsize-Ins->VM_Stacksize*ThreadId-Ins->pThread[ThreadId].SP; + PX_ScriptVM_POPN(Ins,ThreadId,popn); + //Clear registers + for (i=0;ipThread[ThreadId].R[i]); + } + Ins->pThread[ThreadId].Activated=PX_FALSE; + } +} + +px_void PX_ScriptVM_ThreadSuspend(PX_ScriptVM_Instance *Ins,px_int ThreadId) +{ + if (ThreadIdmaxThreadCount) + { + if (Ins->pThread[ThreadId].Activated) + { + Ins->pThread[ThreadId].suspend=PX_TRUE; + } + } +} + +px_void PX_ScriptVM_ThreadResume(PX_ScriptVM_Instance *Ins,px_int ThreadId) +{ + if (ThreadIdmaxThreadCount) + { + if (Ins->pThread[ThreadId].Activated) + { + Ins->pThread[ThreadId].suspend=PX_FALSE; + } + } +} + + + +px_void PX_ScriptVM_InstanceRun(PX_ScriptVM_Instance *Ins,px_int tick) +{ + px_int i,activating=0; + for (i=0;imaxThreadCount;i++) + { + if (Ins->pThread[i].Activated) + { + activating++; + } + } + if (!activating) + { + return; + } + + if (tickmaxThreadCount;i++) + if (Ins->pThread[i].Activated) + { + PX_ScriptVM_InstanceThreadSwitch(Ins,i); + PX_ScriptVM_InstanceRunThread(Ins,PX_SCRIPTVM_ATOM_INSTRUCTMENTS); + tick-=PX_SCRIPTVM_ATOM_INSTRUCTMENTS; + if (tick<=0) + { + return; + } + } + } + +} + + + + + + diff --git a/UI/PainterEngine/kernel/PX_Script_VM.h b/UI/PainterEngine/kernel/PX_Script_VM.h new file mode 100644 index 0000000..932380e --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Script_VM.h @@ -0,0 +1,123 @@ +#ifndef __PX_SCRIPT_VM_H +#define __PX_SCRIPT_VM_H +#include "PX_ScriptCore.h" +#define PX_SCRIPTVM_DEFALUT_FLOAT_PRECCISION 6 +#define PX_SCRIPTVM_REG_COUNT 8 +#define PX_SCRIPTVM_SIGNAL_COUNT 16 +#define PX_SCRIPTVM_DEBUGGER_CMD_LEN 128 +#define PX_SCRIPTVM_ATOM_INSTRUCTMENTS 64 +#define PX_SCRIPTVM_TICK_INFINITE (-1) +typedef struct +{ + px_bool Activated; + px_bool suspend; + px_uint sleep; + px_int IP,SP,BP; + PX_SCRIPTVM_VARIABLE R[PX_SCRIPTVM_REG_COUNT]; +}PX_ScriptVM_InstanceThread; + +typedef struct +{ + px_int VM_Globalsize; + px_int VM_Stacksize; + px_int VM_memsize; + + px_int stringsize; + px_int memorysize; + px_int binsize; + px_int funcCount; + px_int hostCount; + px_int maxThreadCount; + + px_bool signal[PX_SCRIPTVM_SIGNAL_COUNT]; + px_bool Suspend; + + px_int T; + + px_byte * _bin; + px_byte *_memory; + px_char *_string; + px_memorypool *mp; + + union + { + px_void *user_ptr; + px_int user_int; + px_float user_float; + }; + + + PX_SCRIPT_EXPORT_FUNCTION *_func; + PX_SCRIPT_ASM_HOST_NODE *_host; + PX_SCRIPTVM_VARIABLE *_mem; + PX_ScriptVM_InstanceThread *pThread; + + px_bool debug; + px_bool bp_next; + px_int bp_IP; + +}PX_ScriptVM_Instance; + +typedef struct +{ + px_int ptr; + px_int size; +}PX_SCRIPTVM_MEMORY_PTR; + +typedef enum +{ + PX_SCRIPTVM_RUNRETURN_ERROR =0, + PX_SCRIPTVM_RUNRETURN_TIMEOUT, + PX_SCRIPTVM_RUNRETURN_END, + PX_SCRIPTVM_RUNRETURN_SUSPEND, + PX_SCRIPTVM_RUNRETURN_WAIT, +}PX_SCRIPTVM_RUNRETURN; + +typedef px_bool (*PX_ScriptVM_Function_Modules)(PX_ScriptVM_Instance *Ins,px_void *userptr); + +px_int PX_ScriptVM_GetFunctionIndex(PX_ScriptVM_Instance *Ins,px_char *func); + +px_bool PX_ScriptVM_InstanceThreadSwitch(PX_ScriptVM_Instance *Ins,px_int T); +px_bool PX_ScriptVM_InstanceRunFunction(PX_ScriptVM_Instance *Ins,px_int threadID,const px_char *functionName,PX_SCRIPTVM_VARIABLE args[],px_int paramcount); +px_bool PX_ScriptVM_InstanceRunFunctionIndex(PX_ScriptVM_Instance *Ins,px_int threadID,px_int funcIndex,PX_SCRIPTVM_VARIABLE args[],px_int paramcount); +px_bool PX_ScriptVM_InstanceBeginThreadFunction(PX_ScriptVM_Instance *Ins,px_int threadID,const px_char *functionName,PX_SCRIPTVM_VARIABLE args[],px_int paramcount); +px_bool PX_ScriptVM_InstanceBeginThreadFunctionIndex(PX_ScriptVM_Instance *Ins,px_int threadID,px_int funcIndex,PX_SCRIPTVM_VARIABLE args[],px_int paramcount); +px_int PX_ScriptVM_InstanceGetFreeThreadId(PX_ScriptVM_Instance *Ins); +PX_SCRIPTVM_RUNRETURN PX_ScriptVM_InstanceRunThread(PX_ScriptVM_Instance *Ins,px_int tick); +px_void PX_ScriptVM_InstanceRun(PX_ScriptVM_Instance *Ins,px_int tick); +px_void PX_ScriptVM_ThreadStop(PX_ScriptVM_Instance *Ins,px_int ThreadId); +px_void PX_ScriptVM_ThreadClear(PX_ScriptVM_Instance *Ins,px_int ThreadId); +px_void PX_ScriptVM_ThreadSuspend(PX_ScriptVM_Instance *Ins,px_int ThreadId); +px_void PX_ScriptVM_ThreadResume(PX_ScriptVM_Instance *Ins,px_int ThreadId); + + +px_bool PX_ScriptVM_InstanceInitialize(PX_ScriptVM_Instance *Ins,px_memorypool *mp,px_byte *code,px_int size); +px_bool PX_ScriptVM_LocalAlloc(PX_ScriptVM_Instance *Ins,int size,PX_SCRIPTVM_MEMORY_PTR *mem_ptr); +px_bool PX_ScriptVM_LocalFree(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_MEMORY_PTR *mem_ptr); +px_bool PX_ScriptVM_RegistryHostFunction(PX_ScriptVM_Instance *Ins,const px_char *name,PX_ScriptVM_Function_Modules funcModules,px_void *userptr); +px_bool PX_ScriptVM_InstanceFree(PX_ScriptVM_Instance *Ins); + +#define PX_ScriptVM_STACK(Ins,i) ((Ins)->_mem[(Ins)->pThread[(Ins)->T].SP+i]) +#define PX_ScriptVM_HOSTPARAM(Ins,i) PX_ScriptVM_STACK(Ins,i) +#define PX_ScriptVM_LOCALPARAM(Ins,i) ((Ins)->_mem[(Ins)->pThread[(Ins)->T].BP-i]) +#define PX_ScriptVM_GLOBAL(Ins,i) ((Ins)->_mem[i]) +#define PX_ScriptVM_RETURN_POINTER(Ins,oft) ((Ins)->_mem[((Ins)->pThread[(Ins)->T].R[1])._int+(oft)]) +#define PX_ScriptVM_REG_RETURN(Ins) ((Ins)->pThread[(Ins)->T].R[1]) + +px_void PX_ScriptVM_POPN(PX_ScriptVM_Instance *Ins,px_int n,px_int Threadid); +px_void PX_ScriptVM_RET(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE ret); +px_void PX_ScriptVM_PUSH(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE val); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_int(px_int _int); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_float(px_float _float); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_string(px_string _ref_string); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_memory(px_byte *buffer,px_int _size); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_const_string(px_char *buffer); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_const_memory(px_byte *buffer,px_int _size); +PX_SCRIPTVM_VARIABLE PX_SCRIPTVM_VaribaleCopy(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE var,px_bool *bOutofMemory); +typedef px_int (* PX_ScriptVM_DebuggerPrint)(px_char fmr[],...); +typedef px_int (* PX_ScriptVM_DebuggerCommand)(px_char cmd[],px_int size); + +px_int PX_ScriptVM_DebuggerEnable(PX_ScriptVM_Instance *Ins,PX_ScriptVM_DebuggerPrint _printFunc,PX_ScriptVM_DebuggerCommand _cmdFunc); + + +#endif diff --git a/UI/PainterEngine/kernel/PX_Sync.c b/UI/PainterEngine/kernel/PX_Sync.c new file mode 100644 index 0000000..1778e30 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Sync.c @@ -0,0 +1,1179 @@ +#include "PX_Sync.h" + +#ifdef PX_DEBUG_MODE +#include "stdio.h" +#define PX_SYNC_LOG printf +#else +#define PX_SYNC_LOG +#endif + +typedef struct +{ + px_dword param[4]; +}PX_Sync_IO_Info; + +px_bool PX_SyncFrameServerInit(PX_SyncFrame_Server *sync,px_memorypool *mp,px_dword updateDuration,PX_Linker *linker) +{ + sync->mp=mp; + sync->linker=linker; + sync->time=0; + sync->updateDuration=updateDuration; + sync->status=PX_SYNC_SERVER_STATUS_END; + sync->instr_once_maxsize=PX_SYNC_DEFAULT_INSTR_ONCE_MAX_SIZE; + sync->unique=0; + sync->version=0; + PX_VectorInitialize(mp,&sync->clients,sizeof(PX_SyncFrame_Server_Clients),32); + PX_VectorInitialize(mp,&sync->stampsIndexTable,sizeof(PX_SyncFrame_InstrStream_StampIndex),PX_SYNC_INSTRS_SIZE); + PX_MemoryInitialize(mp,&sync->stampsInstrStream); + return PX_MemoryResize(&sync->stampsInstrStream,PX_SYNC_INSTRS_BYTES_SIZE); +} + +px_void PX_SyncFrameServerSetVersion(PX_SyncFrame_Server *sync,px_dword version) +{ + sync->version=version; +} + +static px_bool PX_SyncFrameServer_Write(PX_SyncFrame_Server *sync_server,PX_SyncFrame_Server_Clients *pClient,px_void *data,px_uint size) +{ + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)data; + packet->verify_id=pClient->client_id; + return PX_LinkerWrite(sync_server->linker,data,size)!=0; +} +static px_bool PX_SyncFrameServer_Read(PX_SyncFrame_Server *server,PX_SyncFrame_Server_Clients **ppclient) +{ + PX_SyncFrame_Server_Clients *pClient=PX_NULL; + PX_Sync_IO_Packet *packet=PX_NULL; + +__RE_RECV: + + while ((server->recv_cache_size=PX_LinkerRead(server->linker,server->recv_cache_buffer,sizeof(server->recv_cache_buffer)))!=0) + { + int i; + packet=(PX_Sync_IO_Packet *)(server->recv_cache_buffer); + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&server->clients,i); + if (pClient->server_id==packet->verify_id) + { + if(packet->unique==0) + { + *ppclient=pClient; + return PX_TRUE; + } + else + { + px_int j; + for (j=0;junique==pClient->acceptuniqueQueue[j]) + { + goto __RE_RECV; + } + } + if (pClient->uniqueQueuewIndex>=PX_SYNC_UNIQUE_ARRAY_SIZE) + { + pClient->uniqueQueuewIndex=0; + } + pClient->acceptuniqueQueue[pClient->uniqueQueuewIndex]=packet->unique; + pClient->uniqueQueuewIndex++; + *ppclient=pClient; + return PX_TRUE; + } + + } + } + + } + return PX_FALSE; +} + +static px_void PX_SyncFrameServerHandle_StatusConnect(PX_SyncFrame_Server *sync_server,px_dword elapsed) +{ + PX_SyncFrame_Server_Clients *pClient=PX_NULL; + PX_Sync_IO_Packet *recv_packet,*send_packet; + px_int i; + + while (PX_SyncFrameServer_Read(sync_server,&pClient)) + { + recv_packet=(PX_Sync_IO_Packet *)(sync_server->recv_cache_buffer); + + if (recv_packet->type==PX_SYNC_IO_TYPE_CONNECT) + { + if (recv_packet->param1==sync_server->version) + { + if(pClient->status==PX_SYNC_SERVERCLIENT_STATUS_CONNECT) + { + pClient->status=PX_SYNC_SERVERCLIENT_STATUS_PROCESSING; + pClient->timeIndexOffset=0; + pClient->timeStreamOffset=0; + pClient->sendDurationTick=PX_SYNC_SERVER_SEND_DURATION; + } + } + + send_packet=(PX_Sync_IO_Packet *)(sync_server->send_cache_buffer); + send_packet->verify_id=0; + send_packet->type=PX_SYNC_IO_TYPE_CONNECTACK; + send_packet->unique=0; + send_packet->param1=pClient->c_id; + send_packet->param2=0; + PX_SyncFrameServer_Write(sync_server,pClient,send_packet,sizeof(PX_Sync_IO_Packet)); + + for(i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + if (pClient->status!=PX_SYNC_SERVERCLIENT_STATUS_PROCESSING) + { + break; + } + } + + if (i>=sync_server->clients.size) + { + sync_server->status=PX_SYNC_SERVER_STATUS_PROCESSING; + return; + } + } + else if(recv_packet->type==PX_SYNC_IO_TYPE_QUERYSTATE) + { + px_int count=0; + for(i=0;iclients.size;i++) + { + PX_SyncFrame_Server_Clients *pEnumClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + if (pEnumClient->status==PX_SYNC_SERVERCLIENT_STATUS_PROCESSING) + { + count++; + } + } + + send_packet=(PX_Sync_IO_Packet *)(sync_server->send_cache_buffer); + send_packet->verify_id=0; + send_packet->type=PX_SYNC_IO_TYPE_QUERYSTATEACK; + send_packet->unique=0; + send_packet->param1=count; + send_packet->param2=sync_server->clients.size; + PX_SyncFrameServer_Write(sync_server,pClient,send_packet,sizeof(PX_Sync_IO_Packet)); + } + } +} + + +static px_void PX_SyncFrameServerHandle_StatusProcess(PX_SyncFrame_Server *sync_server,px_dword updateelapsed) +{ + px_int i,datasize=0,dataoffset; + PX_SyncFrame_Server_Clients *pClient=PX_NULL; + PX_Sync_IO_Packet *send_packet,*recv_packet; + px_dword elapsed; + sync_server->time+=updateelapsed; + + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + pClient->lastInstrelapsed+=updateelapsed; + } + + do + { + if (updateelapsed>=PX_SYNC_SERVER_SEND_DURATION) + { + elapsed=PX_SYNC_SERVER_SEND_DURATION; + updateelapsed-=elapsed; + } + else + { + elapsed=updateelapsed; + updateelapsed=0; + } + + + //nop timestamp + if ((sync_server->time+elapsed)/sync_server->updateDuration>=(px_dword)sync_server->stampsIndexTable.size) + { + PX_SyncFrame_InstrStream_StampIndex newStamp; + newStamp.oft=sync_server->stampsInstrStream.usedsize; + newStamp.size=0; + //PX_SYNC_LOG("Time thunk %d sum32 %d\n",sync_server->stampsIndexTable.size,PX_SyncFrameServerSum32(sync_server)); + + PX_VectorPushback(&sync_server->stampsIndexTable,&newStamp); + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + pClient->onceRecvSize=0; + } + } + + while (PX_SyncFrameServer_Read(sync_server,&pClient)) + { + recv_packet=(PX_Sync_IO_Packet *)(sync_server->recv_cache_buffer); + pClient->lastInstrelapsed=0; + + switch (recv_packet->type) + { + case PX_SYNC_IO_TYPE_CONNECT: + { + if (recv_packet->param1==sync_server->version) + { + send_packet=(PX_Sync_IO_Packet *)(sync_server->send_cache_buffer); + send_packet->verify_id=0; + send_packet->type=PX_SYNC_IO_TYPE_CONNECTACK; + send_packet->unique=0; + send_packet->param1=pClient->c_id;; + send_packet->param2=0; + PX_SyncFrameServer_Write(sync_server,pClient,send_packet,sizeof(PX_Sync_IO_Packet)); + } + } + break; + case PX_SYNC_IO_TYPE_QUERYSTATE: + { + send_packet=(PX_Sync_IO_Packet *)(sync_server->send_cache_buffer); + send_packet->verify_id=0; + send_packet->type=PX_SYNC_IO_TYPE_QUERYSTATEACK; + send_packet->unique=0; + send_packet->param1=sync_server->clients.size; + send_packet->param2=sync_server->clients.size; + PX_SyncFrameServer_Write(sync_server,pClient,send_packet,sizeof(PX_Sync_IO_Packet)); + } + break; + case PX_SYNC_IO_TYPE_REQUEST: + { + pClient->timeIndexOffset=recv_packet->param1; + pClient->timeStreamOffset=recv_packet->param2; + pClient->sendTimes=0; + pClient->sendDurationTick=PX_SYNC_SERVER_SEND_DURATION; + } + break; + case PX_SYNC_IO_TYPE_OPCODE: + { + px_int max_size=0; + PX_SyncFrame_InstrStream_StampIndex *plastStamp=PX_VECTORLAST(PX_SyncFrame_InstrStream_StampIndex,&sync_server->stampsIndexTable); + + //check size + if (sync_server->recv_cache_size<(px_int)((PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data)+sizeof(px_dword)*2))) + { + break; + } + + //check size + if (pClient->onceRecvSize+sync_server->recv_cache_size>sync_server->instr_once_maxsize) + { + break; + } + pClient->onceRecvSize+=sync_server->recv_cache_size; + datasize=sync_server->recv_cache_size-(px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data); + + PX_MemoryCat(&sync_server->stampsInstrStream,&pClient->c_id,sizeof(pClient->c_id));//id + PX_MemoryCat(&sync_server->stampsInstrStream,&datasize,sizeof(px_dword));//size + PX_MemoryCat(&sync_server->stampsInstrStream,&recv_packet->data,datasize); + + plastStamp->size+=sizeof(pClient->c_id)+sizeof(px_dword)+datasize; + + } + break; + } + } + + //send instrument + + if(sync_server->stampsIndexTable.size) + { + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + + if (((px_int)pClient->timeIndexOffset>=sync_server->stampsIndexTable.size)&&((px_int)pClient->timeStreamOffset>=sync_server->stampsInstrStream.usedsize)) + { + continue; + } + + if (pClient->sendDurationTick>=PX_SYNC_SERVER_SEND_DURATION) + { + pClient->sendDurationTick=0; + + if (pClient->sendTimes<=0) + { + px_uint reserve_size; + px_dword stream_size=0,indexTableSize=0; + px_dword wstream_size=0,windexTableSize=0; + + + send_packet=(PX_Sync_IO_Packet *)(pClient->send_cache_instr_buffer); + PX_memset(pClient->send_cache_instr_buffer,0,sizeof(pClient->send_cache_instr_buffer)); + + + send_packet->type=PX_SYNC_IO_TYPE_OPCODE; + send_packet->verify_id=0; + + reserve_size=sizeof(pClient->send_cache_instr_buffer)- (px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data); + + wstream_size=sync_server->stampsInstrStream.usedsize-pClient->timeStreamOffset; + + if (wstream_size>reserve_size-sizeof(pClient->timeStreamOffset)-sizeof(wstream_size))//<--- start offset dword and size dword + { + wstream_size=reserve_size-sizeof(pClient->timeStreamOffset)-sizeof(wstream_size); + } + + datasize=0; + dataoffset=0; + + //stream start-offset 4bytes + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),&pClient->timeStreamOffset,sizeof(pClient->timeStreamOffset)); + reserve_size-=sizeof(pClient->timeStreamOffset); + //stream size 4bytes + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),&wstream_size,sizeof(wstream_size)); + reserve_size-=sizeof(wstream_size); + + //Instr stream + if (wstream_size>reserve_size){wstream_size=reserve_size;} + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),sync_server->stampsInstrStream.buffer+pClient->timeStreamOffset,wstream_size); + datasize+=wstream_size; + reserve_size-=wstream_size; + + + if (reserve_size>=sizeof(PX_SyncFrame_InstrStream_StampIndex)+sizeof(px_dword)*2) + { + if (sync_server->stampsIndexTable.size-pClient->timeIndexOffset>1) //last stamp is not ready + { + windexTableSize=(sync_server->stampsIndexTable.size-pClient->timeIndexOffset-1); + + if (windexTableSize>(reserve_size-sizeof(px_dword)*2)/sizeof(PX_SyncFrame_InstrStream_StampIndex)) + { + windexTableSize=(reserve_size-sizeof(px_dword)*2)/sizeof(PX_SyncFrame_InstrStream_StampIndex); + } + if (windexTableSize) + { + //Index start-offset + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),&pClient->timeIndexOffset,sizeof(pClient->timeIndexOffset)); + reserve_size-=sizeof(pClient->timeIndexOffset); + //Index Size + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),&windexTableSize,sizeof(windexTableSize)); + reserve_size-=sizeof(windexTableSize); + //data + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),(px_byte *)sync_server->stampsIndexTable.data+pClient->timeIndexOffset*sizeof(PX_SyncFrame_InstrStream_StampIndex),windexTableSize*sizeof(PX_SyncFrame_InstrStream_StampIndex)); + reserve_size-=(windexTableSize*sizeof(PX_SyncFrame_InstrStream_StampIndex)); + datasize+=(windexTableSize*sizeof(PX_SyncFrame_InstrStream_StampIndex)); + } + } + } + + + pClient->timeStreamOffset+=wstream_size; + pClient->timeIndexOffset+=windexTableSize; + pClient->send_cache_instr_size=sizeof(sync_server->recv_cache_buffer)-reserve_size; + //send cache + + if(datasize) + { + //alloc unique + send_packet->unique=(++sync_server->unique); + if (send_packet->unique==0) + { + send_packet->unique=1; + } + // PX_SYNC_LOG("id %d Update ms %d\n",pClient->c_id,sync_server->time-pClient->lastsendtime); + pClient->lastsendtime=sync_server->time; + PX_SyncFrameServer_Write(sync_server,pClient,pClient->send_cache_instr_buffer,pClient->send_cache_instr_size); + ////////////////////////////////////////////////////////////////////////// + pClient->sendTimes=PX_SYNC_SERVER_SEND_TIMES; + ////////////////////////////////////////////////////////////////////////// + } + else + { + pClient->send_cache_instr_size=0; + pClient->sendTimes=0; + } + + } + else + { + pClient->sendTimes--; + send_packet=(PX_Sync_IO_Packet *)(pClient->send_cache_instr_buffer); + if (pClient->send_cache_instr_size) + { + PX_SyncFrameServer_Write(sync_server,pClient,pClient->send_cache_instr_buffer,pClient->send_cache_instr_size); + } + } + } + else + { + pClient->sendDurationTick+=elapsed; + } + + } + } + + }while (updateelapsed); +} +px_void PX_SyncFrameServerUpdate(PX_SyncFrame_Server *sync_server,px_dword elapsed) +{ + switch(sync_server->status) + { + case PX_SYNC_SERVER_STATUS_CONNECT: + { + PX_SyncFrameServerHandle_StatusConnect(sync_server,elapsed); + } + break; + case PX_SYNC_SERVER_STATUS_PROCESSING: + { + PX_SyncFrameServerHandle_StatusProcess(sync_server,elapsed); + } + break; + case PX_SYNC_SERVER_STATUS_END: + break; + default: + break; + + } +} +px_bool PX_SyncFrameServerAddClient(PX_SyncFrame_Server *sync,px_dword server_verify_id,px_dword client_id,px_dword c_id) +{ + PX_SyncFrame_Server_Clients client; + px_int i; + client.timeIndexOffset=0; + client.timeStreamOffset=0; + client.sendDurationTick=PX_SYNC_SERVER_SEND_DURATION; + client.status=PX_SYNC_SERVERCLIENT_STATUS_CONNECT; + for(i=0;iclients,&client); +} + + +px_void PX_SyncFrameServerSetInstrOnceMaxSize(PX_SyncFrame_Server *sync,px_int maxsize) +{ + sync->instr_once_maxsize=maxsize; +} + +px_bool PX_SyncFrameClientInit(PX_SyncFrame_Client *client,px_memorypool *mp,px_dword updateDuration,px_dword server_verify_id,px_dword client_id,PX_Linker *linker) +{ + px_int i; + + client->mp=mp; + client->linker=linker; + client->server_verify_id=server_verify_id; + client->client_id=client_id; + client->updateDuration=updateDuration; + client->time=0; + client->unique=0; + client->delayms=0; + client->c_id=0; + client->connectCount=0; + client->connectSumCount=0; + client->version=0; + + for(i=0;iacceptuniqueQueue[i]=0; + client->uniqueQueuewIndex=0; + client->status=PX_SYNC_CLIENT_STATUS_CONNECTING; + client->send_cache_Instr_size=0; + client->send_repeat_times=0; + PX_VectorInitialize(mp,&client->stampsIndexTable,sizeof(PX_SyncFrame_InstrStream_StampIndex),PX_SYNC_INSTRS_SIZE); + PX_MemoryInitialize(mp,&client->Input_InstrStream); + PX_MemoryInitialize(mp,&client->stampsInstrStream); + return PX_MemoryResize(&client->stampsInstrStream,2*PX_SYNC_INSTRS_SIZE); + +} +static px_bool PX_SyncFrameClient_Read(PX_SyncFrame_Client *client) +{ + px_bool repeat; + + while ((client->recv_cache_buffer_size=PX_LinkerRead(client->linker,client->recv_cache_buffer,sizeof(client->recv_cache_buffer)))!=0) + { + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)(client->recv_cache_buffer); + if (packet->verify_id!=client->client_id) + { + return PX_FALSE; + } + + if(packet->unique==0) + { + return PX_TRUE; + } + else + { + px_int j; + repeat=PX_FALSE; + for (j=0;junique==client->acceptuniqueQueue[j]) + { + repeat=PX_TRUE; + break; + } + } + if (repeat) + { + continue; + } + if (client->uniqueQueuewIndex>=PX_SYNC_UNIQUE_ARRAY_SIZE) + { + client->uniqueQueuewIndex=0; + } + client->acceptuniqueQueue[client->uniqueQueuewIndex]=packet->unique; + client->uniqueQueuewIndex++; + return PX_TRUE; + } + + } + return PX_FALSE; +} +static px_bool PX_SyncFrameClient_Write(PX_SyncFrame_Client *client,px_void *data,px_uint size) +{ + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)(data); + if (!data) + { + return PX_FALSE; + } + packet->verify_id=client->server_verify_id; + + return PX_LinkerWrite(client->linker,data,size)!=0; +} + +static px_void PX_SyncFrame_ClientHandle_StatusConneting(PX_SyncFrame_Client *client,px_dword elapsed) +{ + //read + PX_Sync_IO_Packet *packet; + + while (PX_SyncFrameClient_Read(client)) + { + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)(client->recv_cache_buffer); + if (packet->type==PX_SYNC_IO_TYPE_CONNECTACK) + { + client->status=PX_SYNC_CLIENT_STATUS_WAITING; + client->c_id=packet->param1; + while (PX_SyncFrameClient_Read(client));//clear buffer + return; + } + } + + if (elapsed) + { + packet=(PX_Sync_IO_Packet *)(client->send_cache_buffer); + packet->verify_id=0; + packet->type=PX_SYNC_IO_TYPE_CONNECT; + packet->unique=0; + packet->param1=client->version; + packet->param2=0; + PX_SyncFrameClient_Write(client,packet,sizeof(PX_Sync_IO_Packet)); + } + +} + +static px_void PX_SyncFrame_ClientHandle_StatusWaiting(PX_SyncFrame_Client *client,px_dword elapsed) +{ + //read + PX_Sync_IO_Packet *packet; + + while (PX_SyncFrameClient_Read(client)) + { + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)(client->recv_cache_buffer); + if (packet->type==PX_SYNC_IO_TYPE_QUERYSTATEACK) + { + client->connectCount=packet->param1; + client->connectSumCount=packet->param2; + while (PX_SyncFrameClient_Read(client));//clear buffer + if (client->connectCount>=client->connectSumCount) + { + client->status=PX_SYNC_CLIENT_STATUS_PROCESSING; + } + return; + } + } + + if (elapsed) + { + packet=(PX_Sync_IO_Packet *)(client->send_cache_buffer); + packet->verify_id=0; + packet->type=PX_SYNC_IO_TYPE_QUERYSTATE; + packet->unique=0; + packet->param1=0; + packet->param2=0; + PX_SyncFrameClient_Write(client,packet,sizeof(PX_Sync_IO_Packet)); + } + +} + +static px_void PX_SyncFrame_ClientHandle_Request(PX_SyncFrame_Client *client) +{ + PX_Sync_IO_Packet *packet; + + packet=(PX_Sync_IO_Packet *)(client->send_cache_buffer); + + packet->unique=0; + packet->type=PX_SYNC_IO_TYPE_REQUEST; + packet->verify_id=0; + packet->param1=client->stampsIndexTable.size; + packet->param2=client->stampsInstrStream.usedsize; + + PX_SyncFrameClient_Write(client,packet,sizeof(PX_Sync_IO_Packet)); + +} + +static px_void PX_SyncFrame_ClientHandle_StatusProcessing(PX_SyncFrame_Client *client,px_dword elapsed) +{ + PX_Sync_IO_Packet *recv_packet,*send_packet; + px_int i; + client->time+=elapsed; + //write + //update send cache + if (client->send_repeat_times==0) + { + //read instr to send_repeat_times + + if (client->Input_InstrStream.usedsize) + { + px_int sendsize=0; + + send_packet=(PX_Sync_IO_Packet *)(client->send_cache_Instr_buffer); + send_packet->type=PX_SYNC_IO_TYPE_OPCODE; + send_packet->verify_id=0; + if (client->unique==0) + { + client->unique=1; + } + send_packet->unique=(client->unique++); + + sendsize+=sizeof(recv_packet->type)+sizeof(recv_packet->verify_id); + + if((px_uint)client->Input_InstrStream.usedsizesend_cache_Instr_buffer)- (px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data)) + { + client->send_cache_Instr_size=client->Input_InstrStream.usedsize+ (px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data); + PX_memcpy(send_packet->data,client->Input_InstrStream.buffer,client->Input_InstrStream.usedsize); + } + else + { + PX_MemoryClear(&client->Input_InstrStream); + client->send_cache_Instr_size=0; + } + PX_MemoryClear(&client->Input_InstrStream); + + client->send_repeat_times=PX_SYNC_CLIENT_SEND_TIMES-1; + + + PX_SyncFrameClient_Write(client,client->send_cache_Instr_buffer,client->send_cache_Instr_size); + } + } + else + { + + if (client->sendDurationTick+elapsed>=PX_SYNC_CLIENT_SEND_DURATION) + { + client->sendDurationTick=0; + client->send_repeat_times--; + if(client->send_cache_Instr_size) + { + PX_SyncFrameClient_Write(client,client->send_cache_Instr_buffer,client->send_cache_Instr_size); + } + } + else + { + client->sendDurationTick+=elapsed; + } + } + + + + + + //recv + while (PX_SyncFrameClient_Read(client)) + { + recv_packet=(PX_Sync_IO_Packet *)(client->recv_cache_buffer); + + if (recv_packet->type==PX_SYNC_IO_TYPE_OPCODE) + { + px_int streamStart,streamSize,stampStartIndex,stampSize,reserve_size; + px_byte *streamdata; + PX_SyncFrame_InstrStream_StampIndex *pStamps; + streamStart=*(px_dword *)recv_packet->data; + streamSize=*(px_dword *)(recv_packet->data+sizeof(px_dword)); + streamdata=recv_packet->data+sizeof(px_dword)*2; + if (streamStart>client->stampsInstrStream.usedsize) + { + PX_SyncFrame_ClientHandle_Request(client); + return; + } + + if (streamStartstampsInstrStream.usedsize) + { + continue; + } + + + if (streamSize) + { + PX_MemoryCat(&client->stampsInstrStream,streamdata,streamSize); + } + reserve_size=client->recv_cache_buffer_size-streamSize-sizeof(px_dword)*2- (px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data); + if (reserve_size>=sizeof(PX_SyncFrame_InstrStream_StampIndex)+sizeof(px_dword)*2) + { + stampStartIndex=*(px_dword *)(recv_packet->data+sizeof(px_dword)*2+streamSize); + stampSize=*(px_dword *)(recv_packet->data+sizeof(px_dword)*2+streamSize+sizeof(px_dword)); + pStamps=(PX_SyncFrame_InstrStream_StampIndex *)(recv_packet->data+sizeof(px_dword)*2+streamSize+sizeof(px_dword)*2); + } + else + { + continue; + } + + if (stampStartIndex>client->stampsIndexTable.size) + { + PX_SyncFrame_ClientHandle_Request(client); + return; + } + + if (stampStartIndexstampsIndexTable.size) + { + continue; + } + + + for(i=0;istampsIndexTable,&pStamps[i]); + } + //PX_SYNC_LOG("Sync %d delay %d ms sum32:%d\n",client->stampsIndexTable.size,client->time-client->delayms,PX_SyncFrameClientSum32(client)); + client->delayms=client->time; + } + } + + + +} +px_void PX_SyncFrameClientUpdate(PX_SyncFrame_Client *client,px_dword elapsed) +{ + switch (client->status) + { + case PX_SYNC_CLIENT_STATUS_CONNECTING: + { + PX_SyncFrame_ClientHandle_StatusConneting(client,elapsed); + } + break; + case PX_SYNC_CLIENT_STATUS_WAITING: + { + PX_SyncFrame_ClientHandle_StatusWaiting(client,elapsed); + } + break; + case PX_SYNC_CLIENT_STATUS_PROCESSING: + { + PX_SyncFrame_ClientHandle_StatusProcessing(client,elapsed); + } + break; + case PX_SYNC_CLIENT_STATUS_END: + break; + } +} + + +px_int PX_SyncFrameClientGetReadyFrameCount(PX_SyncFrame_Client *sync) +{ + return sync->stampsIndexTable.size; +} + +px_void PX_SyncFrameClientAddInstr(PX_SyncFrame_Client *client,px_void *instr,px_int size) +{ + if (client->status==PX_SYNC_CLIENT_STATUS_PROCESSING) + { + PX_MemoryCat(&client->Input_InstrStream,instr,size); + } + +} + + +px_void PX_SyncFrameClientSetVersion(PX_SyncFrame_Client *sync,px_dword version) +{ + sync->version=version; +} + +px_void PX_SyncFrameServerStop(PX_SyncFrame_Server *sync) +{ + sync->status=PX_SYNC_SERVER_STATUS_END; +} +px_void PX_SyncFrameServerRun(PX_SyncFrame_Server *sync) +{ + sync->status=PX_SYNC_SERVER_STATUS_CONNECT; +} +px_void PX_SyncFrameServerFree(PX_SyncFrame_Server *sync) +{ + PX_VectorFree(&sync->clients); + PX_VectorFree(&sync->stampsIndexTable); + PX_MemoryFree(&sync->stampsInstrStream); +} + +px_int PX_SyncFrameServerGetReadyFrameCount(PX_SyncFrame_Server *sync) +{ + return sync->stampsIndexTable.size-1; +} + +px_void PX_SyncFrameClientFree(PX_SyncFrame_Client *sync) +{ + PX_VectorFree(&sync->stampsIndexTable); + PX_MemoryFree(&sync->stampsInstrStream); + PX_MemoryFree(&sync->Input_InstrStream); +} + + + + +px_uint32 PX_SyncFrameServerSum32(PX_SyncFrame_Server *sync) +{ + px_uint32 sum=0; + sum+=PX_sum32(sync->stampsIndexTable.data,sync->stampsIndexTable.nodesize*sync->stampsIndexTable.size); + sum+=PX_sum32(sync->stampsInstrStream.buffer,sync->stampsInstrStream.usedsize); + return sum; +} + +px_uint32 PX_SyncFrameClientSum32(PX_SyncFrame_Client *sync) +{ + px_uint32 sum=0; + sum+=PX_sum32(sync->stampsIndexTable.data,sync->stampsIndexTable.nodesize*sync->stampsIndexTable.size); + sum+=PX_sum32(sync->stampsInstrStream.buffer,sync->stampsInstrStream.usedsize); + return sum; +} + + + +////////////////////////////////////////////////////////////////////////// +//SyncData + +static px_int PX_SyncDataCalculateBlockCount(px_int size) +{ + return size%PX_SYNCDATA_BLOCK_SIZE?size/PX_SYNCDATA_BLOCK_SIZE+1:size/PX_SYNCDATA_BLOCK_SIZE; +} + +px_bool PX_SyncDataServerInit(PX_SyncData_Server *syncdata_server,px_memorypool *mp,px_dword serverID,PX_Linker *linker) +{ + PX_memset(syncdata_server,0,sizeof(PX_SyncData_Server)); + syncdata_server->serverID=serverID; + syncdata_server->linker=linker; + if(!PX_VectorInitialize(mp,&syncdata_server->clients,sizeof(PX_SyncData_Server_Client),16)) return PX_FALSE; + return PX_TRUE; +} + + + +px_bool PX_SyncDataServerSetSyncData(PX_SyncData_Server *s,px_void *data,px_dword size) +{ + s->data=(px_byte *)data; + s->size=size; + + return PX_TRUE; +} + +px_bool PX_SyncDataServer_ReadBlock(PX_SyncData_Server *s,px_byte *data,px_int bufferSize,px_int *readsize) +{ + + if ((*readsize=PX_LinkerRead(s->linker,data,bufferSize))!=0) + { + if (*readsize>bufferSize) + { + return PX_FALSE; + } + + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_SyncDataServer_WriteBlock(PX_SyncData_Server *s,px_byte *data,px_int bufferSize) +{ + if (bufferSize>PX_SYNCDATA_DATAGRAM_MAX_SIZE) + { + return PX_FALSE; + } + + if (PX_LinkerWrite(s->linker,data,bufferSize)) + { + return PX_TRUE; + } + return PX_FALSE; +} + + + +px_bool PX_SyncDataServerUpdate(PX_SyncData_Server *s,px_int elapsed) +{ + px_int readSize,i; + PX_SyncData_Server_Client *pClient=PX_NULL; + PX_SyncData_Datagram R_datagram; + + + while (PX_SyncDataServer_ReadBlock(s,(px_byte *)&R_datagram,sizeof(R_datagram),&readSize)) + { + if (R_datagram.header.serverID==s->serverID) + { + if (R_datagram.header.opcode==PX_SYNCDATA_OPCODE_QUERY) + { + if ((px_int)R_datagram.request.blockIndex>=s->clients.size) + { + continue; + } + //searching data + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncData_Server_Client,&s->clients,i); + if (pClient->clientID==R_datagram.query.clientID) + { + PX_SyncData_QueryAck queryAck; + queryAck.opcode=PX_SYNCDATA_OPCODE_QUERYACK; + queryAck.serverID=s->serverID; + queryAck.reserved=0; + queryAck.size=s->size; + PX_SyncDataServer_WriteBlock(s,(px_byte *)&queryAck,sizeof(queryAck)); + break; + } + } + } + + if (R_datagram.header.opcode==PX_SYNCDATA_OPCODE_REQUEST) + { + for (i=0;iclients.size;i++) + { + int j=0; + pClient=PX_VECTORAT(PX_SyncData_Server_Client,&s->clients,i); + + if ((px_int)R_datagram.request.blockIndexsize)) + { + pClient->status=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING; + pClient->ProcessIndex=R_datagram.request.blockIndex; + } + else + { + pClient->status=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZED; + pClient->ProcessIndex=R_datagram.request.blockIndex; + } + + } + } + + } + } + + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncData_Server_Client,&s->clients,i); + if (pClient->status!=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING) + { + continue; + } + if (pClient->ProcessIndexsize)) + { + if(pClient->send_elapsed>=PX_SYNCDATA_SENDING_DURATION) + { + px_int size; + PX_SyncData_RequestAck QuestAck; + pClient->send_elapsed=0; + QuestAck.blockIndex=pClient->ProcessIndex; + QuestAck.opcode=PX_SYNCDATA_OPCODE_REQUESTACK; + QuestAck.reserved=0; + QuestAck.serverID=s->serverID; + size=s->size-pClient->ProcessIndex*PX_SYNCDATA_BLOCK_SIZE; + size=(size>PX_SYNCDATA_BLOCK_SIZE?PX_SYNCDATA_BLOCK_SIZE:size); + PX_memcpy(QuestAck.data,s->data+pClient->ProcessIndex*PX_SYNCDATA_BLOCK_SIZE,size); + PX_SyncDataServer_WriteBlock(s,(px_byte *)&QuestAck,sizeof(QuestAck)); + pClient->ProcessIndex++; + } + else + { + pClient->send_elapsed+=elapsed; + } + } + } + return PX_TRUE; +} + +px_bool PX_SyncDataServerAddClient(PX_SyncData_Server *syncdata_server,px_dword clientID) +{ + PX_SyncData_Server_Client newClient; + PX_memset(&newClient,0,sizeof(newClient)); + newClient.ProcessIndex=0; + newClient.send_elapsed=0; + newClient.status=PX_SYNCDATA_CLIENT_STATUS_QUERY; + newClient.clientID=clientID; + return PX_VectorPushback(&syncdata_server->clients,&newClient); +} + +px_void PX_SyncDataServerFree(PX_SyncData_Server *syncdata_server) +{ + PX_VectorFree(&syncdata_server->clients); +} + +px_bool PX_SyncDataClientInit(PX_SyncData_Client *syncdata_client,px_memorypool *mp,px_dword serverID,px_dword clientID,PX_Linker *linker) +{ + PX_memset(syncdata_client,0,sizeof(PX_SyncData_Client)); + syncdata_client->clientID=clientID; + syncdata_client->mp=mp; + syncdata_client->linker=linker; + syncdata_client->serverID=serverID; + syncdata_client->status=PX_SYNCDATA_CLIENT_STATUS_QUERY; + return PX_TRUE; +} + + + +px_bool PX_SyncDataClientIsCompleted(PX_SyncData_Client *syncdata_client) +{ + return (syncdata_client->status==PX_SYNC_SERVERCLIENT_STATUS_END); +} + +px_bool PX_SyncDataClient_ReadBlock(PX_SyncData_Client *s,px_byte *data,px_int bufferSize,px_int *readsize) +{ + + if ((*readsize=PX_LinkerRead(s->linker,data,bufferSize))!=0) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_SyncDataClient_WriteBlock(PX_SyncData_Client *s,px_byte *data,px_int bufferSize) +{ + if (bufferSize>PX_SYNCDATA_DATAGRAM_MAX_SIZE) + { + return PX_FALSE; + } + + if (PX_LinkerWrite(s->linker,data,bufferSize)) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_SyncDataClientResetData(PX_SyncData_Client *syncdata_client,px_uint size) +{ + if (syncdata_client->data) + { + MP_Free(syncdata_client->mp,syncdata_client->data); + } + syncdata_client->data=(px_byte *)MP_Malloc(syncdata_client->mp,size); + syncdata_client->datasize=size; + syncdata_client->blockCount=PX_SyncDataCalculateBlockCount(size); + syncdata_client->acceptBlock=0; + + return syncdata_client->data!=PX_NULL; +} + +px_bool PX_SyncDataClientUpdate(PX_SyncData_Client *syncdata_client,px_int elapsed) +{ + px_int readSize; + PX_SyncData_Datagram R_datagram; + + syncdata_client->last_recv_elapsed+=elapsed; + + switch (syncdata_client->status) + { + case PX_SYNCDATA_CLIENT_STATUS_QUERY: + { + if (syncdata_client->query_elapsed>PX_SYNCDATA_QUERY_DURATION) + { + PX_SyncData_Query query; + syncdata_client->query_elapsed=0; + query.opcode=PX_SYNCDATA_OPCODE_QUERY; + query.reserved=0; + query.serverID=syncdata_client->serverID; + query.clientID=syncdata_client->clientID; + PX_SyncDataClient_WriteBlock(syncdata_client,(px_byte *)&query,sizeof(query)); + } + else + { + syncdata_client->query_elapsed+=elapsed; + } + + if (PX_SyncDataClient_ReadBlock(syncdata_client,(px_byte *)&R_datagram,sizeof(R_datagram),&readSize)) + { + if (R_datagram.header.serverID==syncdata_client->serverID) + { + if (R_datagram.header.opcode==PX_SYNCDATA_OPCODE_QUERYACK) + { + syncdata_client->last_recv_elapsed=0; + if (!PX_SyncDataClientResetData(syncdata_client,R_datagram.queryack.size)) + { + return PX_FALSE; + } + syncdata_client->status=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING; + } + } + + } + } + break; + case PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING: + { + syncdata_client->last_recv_elapsed+=elapsed; + + if (PX_SyncDataClient_ReadBlock(syncdata_client,(px_byte *)&R_datagram,sizeof(R_datagram),&readSize)) + { + if (R_datagram.requestAck.serverID==syncdata_client->serverID&&R_datagram.header.opcode==PX_SYNCDATA_OPCODE_REQUESTACK) + { + px_int size; + px_int index=R_datagram.requestAck.blockIndex; + if (index==syncdata_client->acceptBlock) + { + syncdata_client->last_recv_elapsed=0; + syncdata_client->query_elapsed=0; + size=syncdata_client->datasize-index*PX_SYNCDATA_BLOCK_SIZE; + size=(size>PX_SYNCDATA_BLOCK_SIZE?PX_SYNCDATA_BLOCK_SIZE:size); + PX_memcpy(syncdata_client->data+index*PX_SYNCDATA_BLOCK_SIZE,R_datagram.requestAck.data,size); + syncdata_client->acceptBlock++; + } + else + { + syncdata_client->query_elapsed=PX_SYNCDATA_REQUEST_DURATION; + } + + } + } + + if (syncdata_client->acceptBlockblockCount) + { + if (syncdata_client->query_elapsed>=PX_SYNCDATA_REQUEST_DURATION) + { + px_int o=0; + PX_SyncData_Request request; + syncdata_client->query_elapsed=0; + request.blockIndex=syncdata_client->acceptBlock; + request.serverID=syncdata_client->serverID; + request.opcode=PX_SYNCDATA_OPCODE_REQUEST; + request.reserved=0; + PX_SyncDataClient_WriteBlock(syncdata_client,(px_byte *)&request,sizeof(request)); + } + else + { + syncdata_client->query_elapsed+=elapsed; + } + } + else + { + syncdata_client->status=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZED; + + } + } + break; + case PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZED: + break; + case PX_SYNCDATA_STATUS_ERROR: + break; + } + return PX_TRUE; +} + +px_void PX_SyncDataClientFree(PX_SyncData_Client *syncdata_client) +{ + if (syncdata_client->data) + { + MP_Free(syncdata_client->mp,syncdata_client->data); + syncdata_client->data=PX_NULL; + } +} + + + + diff --git a/UI/PainterEngine/kernel/PX_Sync.h b/UI/PainterEngine/kernel/PX_Sync.h new file mode 100644 index 0000000..b047018 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_Sync.h @@ -0,0 +1,313 @@ +#ifndef PX_SYNC_H +#define PX_SYNC_H + +#include "../core/PX_Core.h" + + +#define PX_SYNC_SERVER_ID 0 +#define PX_SYNC_SERVER_SEND_DURATION 3 +#define PX_SYNC_SERVER_SEND_TIMES 3 + +#define PX_SYNC_CLIENT_SEND_TIMES 3 +#define PX_SYNC_DEFAULT_INSTR_ONCE_MAX_SIZE 256 +#define PX_SYNC_UNIQUE_ARRAY_SIZE 64 +#define PX_SYNC_CACHESIZE 1420 +#define PX_SYNC_INSTRS_SIZE 128*1024 +#define PX_SYNC_INSTRS_BYTES_SIZE 1024*1024 +#define PX_SYNC_CLIENT_SEND_DURATION 3 + +typedef enum +{ + PX_SYNC_IO_TYPE_CONNECT, + PX_SYNC_IO_TYPE_CONNECTACK, + PX_SYNC_IO_TYPE_QUERYSTATE, + PX_SYNC_IO_TYPE_QUERYSTATEACK, + PX_SYNC_IO_TYPE_REQUEST, + PX_SYNC_IO_TYPE_OPCODE, +}PX_SYNC_IO_TYPE; + +typedef enum +{ + PX_SYNC_SERVER_STATUS_CONNECT, + PX_SYNC_SERVER_STATUS_PROCESSING, + PX_SYNC_SERVER_STATUS_END, +}PX_SYNC_SERVER_STATUS; + +typedef enum +{ + PX_SYNC_SERVERCLIENT_STATUS_CONNECT, + PX_SYNC_SERVERCLIENT_STATUS_PROCESSING, + PX_SYNC_SERVERCLIENT_STATUS_END, +}PX_SYNC_SERVERCLIENT_STATUS; + +typedef enum +{ + PX_SYNC_CLIENT_STATUS_CONNECTING, + PX_SYNC_CLIENT_STATUS_WAITING, + PX_SYNC_CLIENT_STATUS_PROCESSING, + PX_SYNC_CLIENT_STATUS_END, +}PX_SYNC_CLIENT_STATUS; + + +struct _PX_SyncFrame_Server; +struct _PX_SyncFrame_Client; + + +typedef struct +{ + px_dword c_id; + px_dword size; + px_byte data[1]; +}PX_SyncFrame_InstrStream_Stamp; + + +typedef struct +{ + px_dword oft; + px_dword size; +}PX_SyncFrame_InstrStream_StampIndex; + +typedef struct +{ + px_dword client_id; + px_dword server_id; + px_dword c_id; + px_dword timeIndexOffset; + px_dword timeStreamOffset; + px_dword uniqueQueuewIndex; + px_dword acceptuniqueQueue[PX_SYNC_UNIQUE_ARRAY_SIZE]; + px_dword unique; + px_dword sendDurationTick; + px_dword sendTimes; + px_dword onceRecvSize; + px_dword lastsendtime; + px_dword lastInstrelapsed; + PX_SYNC_SERVERCLIENT_STATUS status; + px_int send_cache_instr_size; + px_byte send_cache_instr_buffer[PX_SYNC_CACHESIZE]; +}PX_SyncFrame_Server_Clients; + + +typedef struct +{ + px_dword verify_id; + px_dword type; + px_dword unique; + union + { + struct + { + px_dword param1; + px_dword param2; + }; + px_byte data[1]; + }; +}PX_Sync_IO_Packet; + + +typedef struct _PX_SyncFrame_Server +{ + px_memorypool *mp; + px_dword time; + px_dword updateDuration; + px_dword unique; + px_dword version; + px_memory stampsInstrStream; + px_vector stampsIndexTable;//PX_Sync_Server_StampIndex * + px_vector clients;//PX_Sync_Server_Clients * + PX_SYNC_SERVER_STATUS status; + PX_Linker *linker; + px_int recv_cache_size; + px_uint instr_once_maxsize; + px_byte recv_cache_buffer[PX_SYNC_CACHESIZE]; + px_byte send_cache_buffer[PX_SYNC_CACHESIZE]; +}PX_SyncFrame_Server; + + + + +typedef struct _PX_SyncFrame_Client +{ + px_memorypool *mp; + px_dword c_id; + px_dword client_id; + px_dword server_verify_id; + px_int connectCount; + px_int connectSumCount; + px_dword version; + px_dword time; + px_dword delayms; + px_dword sendDurationTick; + px_dword updateDuration; + px_dword uniqueQueuewIndex; + px_dword acceptuniqueQueue[PX_SYNC_UNIQUE_ARRAY_SIZE]; + px_dword unique; + px_memory stampsInstrStream;//instrments + px_vector stampsIndexTable;//PX_Sync_Server_StampIndex * + px_memory Input_InstrStream; + PX_Linker *linker; + PX_SYNC_CLIENT_STATUS status; + px_int send_repeat_times; + px_byte send_cache_buffer[PX_SYNC_CACHESIZE]; + px_int recv_cache_buffer_size; + px_byte recv_cache_buffer[PX_SYNC_CACHESIZE]; + px_int send_cache_Instr_size; + px_byte send_cache_Instr_buffer[PX_SYNC_CACHESIZE]; +}PX_SyncFrame_Client; + + + + +px_bool PX_SyncFrameServerInit(PX_SyncFrame_Server *sync,px_memorypool *mp,px_dword updateDuration,PX_Linker *linker); +px_void PX_SyncFrameServerSetVersion(PX_SyncFrame_Server *sync,px_dword version); +px_bool PX_SyncFrameServerAddClient(PX_SyncFrame_Server *sync,px_dword server_verify_id,px_dword client_id,px_dword c_id); +px_void PX_SyncFrameServerSetInstrOnceMaxSize(PX_SyncFrame_Server *sync,px_int maxsize); +px_void PX_SyncFrameServerRun(PX_SyncFrame_Server *sync); +px_void PX_SyncFrameServerStop(PX_SyncFrame_Server *sync); +px_void PX_SyncFrameServerUpdate(PX_SyncFrame_Server *sync,px_dword elapsed); +px_void PX_SyncFrameServerFree(PX_SyncFrame_Server *sync); +px_int PX_SyncFrameServerGetReadyFrameCount(PX_SyncFrame_Server *sync); +px_uint32 PX_SyncFrameServerSum32(PX_SyncFrame_Server *sync); + + +px_bool PX_SyncFrameClientInit(PX_SyncFrame_Client *client,px_memorypool *mp,px_dword updateDuration,px_dword server_verify_id,px_dword client_id,PX_Linker *linker); +px_void PX_SyncFrameClientAddInstr(PX_SyncFrame_Client *client,px_void *instr,px_int size); +px_void PX_SyncFrameClientSetVersion(PX_SyncFrame_Client *sync,px_dword version); +px_void PX_SyncFrameClientUpdate(PX_SyncFrame_Client *sync,px_dword elapsed); +px_int PX_SyncFrameClientGetReadyFrameCount(PX_SyncFrame_Client *sync); +px_void PX_SyncFrameClientFree(PX_SyncFrame_Client *sync); +px_uint32 PX_SyncFrameClientSum32(PX_SyncFrame_Client *sync); + + +#define PX_SYNCDATA_DATAGRAM_MAX_SIZE 1460 +#define PX_SYNCDATA_BLOCK_SIZE 1408 +#define PX_SYNCDATA_SENDING_DURATION 20 +#define PX_SYNCDATA_QUERY_DURATION 500 +#define PX_SYNCDATA_REQUEST_DURATION 100 + +struct _PX_SyncData_Server; +struct _PX_SyncData_Client; + + +typedef struct +{ + px_int blockIndex; +}PX_SyncDataBlock; + +typedef enum +{ + PX_SYNCDATA_CLIENT_STATUS_QUERY, + PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING, + PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZED, + PX_SYNCDATA_STATUS_ERROR, +}PX_SYNCDATA_STATUS; + +typedef px_bool (*PX_SyncData_Encode)(px_byte *data,px_int size); +typedef px_bool (*PX_SyncData_Decode)(px_byte *data,px_int size); + +typedef struct _PX_SyncData_Server_Client +{ + px_dword clientID; + PX_SYNCDATA_STATUS status; + px_int ProcessIndex; + px_dword send_elapsed; +}PX_SyncData_Server_Client; + +typedef struct _PX_SyncData_Server +{ + PX_Linker *linker; + px_dword serverID; + px_byte *data; + px_dword size; + + px_void *user; + px_vector clients;// vector for PX_SyncData_Server_Client +}PX_SyncData_Server; + +typedef struct _PX_SyncData_Client +{ + PX_Linker *linker; + + px_memorypool *mp; + px_dword clientID,serverID; + + px_byte *data; + px_dword datasize; + + px_int blockCount; + px_int acceptBlock; + + px_void *user; + + PX_SYNCDATA_STATUS status; + + px_dword query_elapsed; + px_dword last_recv_elapsed; +}PX_SyncData_Client; + +#define PX_SYNCDATA_OPCODE_QUERY 0x680 +#define PX_SYNCDATA_OPCODE_QUERYACK 0x6802 +#define PX_SYNCDATA_OPCODE_REQUEST 0x6803 +#define PX_SYNCDATA_OPCODE_REQUESTACK 0x6804 + + +typedef struct +{ + px_dword opcode; + px_dword serverID; +}PX_SyncData_DatagramHeader; + +typedef struct +{ + px_dword opcode; + px_dword serverID; + px_dword clientID; + px_dword reserved; +}PX_SyncData_Query; + +typedef struct +{ + px_dword opcode; + px_dword serverID; + px_dword size; + px_dword reserved; +}PX_SyncData_QueryAck; + +typedef struct +{ + px_dword opcode; + px_dword serverID; + px_dword reserved; + px_dword blockIndex; +}PX_SyncData_Request; + +typedef struct +{ + px_dword opcode; + px_dword serverID; + px_dword reserved; + px_dword blockIndex; + px_byte data[PX_SYNCDATA_BLOCK_SIZE]; +}PX_SyncData_RequestAck; + +typedef union +{ + PX_SyncData_DatagramHeader header; + PX_SyncData_Query query; + PX_SyncData_QueryAck queryack; + PX_SyncData_Request request; + PX_SyncData_RequestAck requestAck; +}PX_SyncData_Datagram; + +px_bool PX_SyncDataServerInit(PX_SyncData_Server *syncdata_server,px_memorypool *mp,px_dword serverID,PX_Linker *linker); +px_bool PX_SyncDataServerAddClient(PX_SyncData_Server *syncdata_server,px_dword clientID); +px_bool PX_SyncDataServerSetSyncData(PX_SyncData_Server *s,px_void *data,px_dword size); +px_bool PX_SyncDataServerUpdate(PX_SyncData_Server *syncdata_server,px_int elapsed); +px_void PX_SyncDataServerFree(PX_SyncData_Server *syncdata_server); + + +px_bool PX_SyncDataClientInit(PX_SyncData_Client *syncdata_client,px_memorypool *mp,px_dword serverID,px_dword clientID,PX_Linker *linker); +px_bool PX_SyncDataClientIsCompleted(PX_SyncData_Client *syncdata_client); +px_bool PX_SyncDataClientUpdate(PX_SyncData_Client *syncdata_client,px_int elapsed); +px_void PX_SyncDataClientFree(PX_SyncData_Client *syncdata_client); +#endif diff --git a/UI/PainterEngine/kernel/PX_UI.c b/UI/PainterEngine/kernel/PX_UI.c new file mode 100644 index 0000000..c944f55 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_UI.c @@ -0,0 +1,1049 @@ +#include "PX_UI.h" + +typedef enum +{ + PX_UI_HALIGN_LEFT, + PX_UI_HALIGN_MID, + PX_UI_HALIGN_RIGHT, +}PX_UI_HALIGN; + +typedef enum +{ + PX_UI_VALIGN_TOP, + PX_UI_VALIGN_MID, + PX_UI_VALIGN_BOTTOM, +}PX_UI_VALIGN; + +typedef struct +{ + px_char id[32]; + px_float x,y,z,height,width,length; + PX_UI_HALIGN halign; + PX_UI_VALIGN valign; +}PX_UiBaseInfo; + +PX_UiBaseInfo PX_UIGetBaseInfo(PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_UiBaseInfo baseInfo; + PX_Json_Value *pSubValue=PX_NULL; + PX_memset(&baseInfo,0,sizeof(PX_UiBaseInfo)); + pSubValue=PX_JsonGetObjectValue(json_value,"x"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + baseInfo.x=(px_float)pSubValue->_number; + } + pSubValue=PX_JsonGetObjectValue(json_value,"y"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + baseInfo.y=(px_float)pSubValue->_number; + } + pSubValue=PX_JsonGetObjectValue(json_value,"z"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + baseInfo.z=(px_float)pSubValue->_number; + } + pSubValue=PX_JsonGetObjectValue(json_value,"width"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + baseInfo.width=(px_float)pSubValue->_number; + } + pSubValue=PX_JsonGetObjectValue(json_value,"height"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + baseInfo.height=(px_float)pSubValue->_number; + } + pSubValue=PX_JsonGetObjectValue(json_value,"length"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + baseInfo.length=(px_float)pSubValue->_number; + } + pSubValue=PX_JsonGetObjectValue(json_value,"id"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + PX_strcpy(baseInfo.id,pSubValue->_string.buffer,sizeof(baseInfo.id)); + } + pSubValue=PX_JsonGetObjectValue(json_value,"halign"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + if(PX_strequ(pSubValue->_string.buffer,"left")) + { + // + } + if(PX_strequ(pSubValue->_string.buffer,"mid")) + { + baseInfo.x+=width/2; + } + if(PX_strequ(pSubValue->_string.buffer,"right")) + { + baseInfo.x+=width; + } + } + + pSubValue=PX_JsonGetObjectValue(json_value,"valign"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + if(PX_strequ(pSubValue->_string.buffer,"top")) + { + // + } + if(PX_strequ(pSubValue->_string.buffer,"mid")) + { + baseInfo.y+=height/2; + } + if(PX_strequ(pSubValue->_string.buffer,"bottom")) + { + baseInfo.y+=height; + } + } + + return baseInfo; +} + +px_bool PX_UI_GetColor(PX_Json_Value *json_value,const px_char name[],px_color *color) +{ + PX_Json_Value *pSubValue=PX_NULL; + pSubValue=PX_JsonGetObjectValue(json_value,name); + if (pSubValue) + { + if (pSubValue->type==PX_JSON_VALUE_TYPE_ARRAY) + { + PX_Json_Value *parrayValue; + parrayValue=PX_JsonGetArrayValue(pSubValue,0); + if (parrayValue&&parrayValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + color->_argb.a=(px_byte)parrayValue->_number; + } + parrayValue=PX_JsonGetArrayValue(pSubValue,1); + if (parrayValue&&parrayValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + color->_argb.r=(px_byte)parrayValue->_number; + } + parrayValue=PX_JsonGetArrayValue(pSubValue,2); + if (parrayValue&&parrayValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + color->_argb.g=(px_byte)parrayValue->_number; + } + parrayValue=PX_JsonGetArrayValue(pSubValue,3); + if (parrayValue&&parrayValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + color->_argb.b=(px_byte)parrayValue->_number; + } + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_UI_GetBool(PX_Json_Value *json_value,const px_char name[],px_bool *b) +{ + PX_Json_Value *pSubValue=PX_NULL; + pSubValue=PX_JsonGetObjectValue(json_value,name); + if (pSubValue) + { + if (pSubValue->type==PX_JSON_VALUE_TYPE_BOOLEAN) + { + *b=pSubValue->_boolean; + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_UI_GetNumber(PX_Json_Value *json_value,const px_char name[],px_double *number) +{ + PX_Json_Value *pSubValue=PX_NULL; + pSubValue=PX_JsonGetObjectValue(json_value,name); + if (pSubValue) + { + if (pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + *number=pSubValue->_number; + return PX_TRUE; + } + } + return PX_FALSE; +} +px_bool PX_UI_GetString(PX_Json_Value *json_value,const px_char name[],px_char str[],px_int size) +{ + PX_Json_Value *pSubValue=PX_NULL; + pSubValue=PX_JsonGetObjectValue(json_value,name); + if (pSubValue) + { + if (pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + PX_strcpy(str,pSubValue->_string.buffer,size); + return PX_TRUE; + } + } + return PX_FALSE; +} + +PX_Object * PX_UI_CreateNode(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + return PX_ObjectCreate(ui->ui_mp,parent,0,0,0,0,0,0); +} + +PX_Object * PX_UI_CreateLabel(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + const px_char *text=""; + px_char style[8]; + px_bool border; + PX_Json_Value *pSubValue=PX_NULL; + px_color fontColor,backgroundColor,Color; + pSubValue=PX_JsonGetObjectValue(json_value,"text"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + text=pSubValue->_string.buffer; + } + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + fontColor=PX_COLOR(255,0,0,0); + backgroundColor=PX_COLOR(0,0,0,0); + + PX_UI_GetColor(json_value,"fontcolor",&fontColor); + PX_UI_GetColor(json_value,"backgroundcolor",&backgroundColor); + pObject=PX_Object_LabelCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,text,ui->fontmodule,fontColor); + PX_Object_LabelSetBackgroundColor(pObject,backgroundColor); + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_LabelSetBorderColor(pObject,Color); + } + + if (PX_UI_GetString(json_value,"style",style,sizeof(style))) + { + if (PX_strequ(style,"round")) + { + PX_Object_LabelSetStyle(pObject,PX_OBJECT_LABEL_STYLE_ROUNDRECT); + } + } + + if (PX_UI_GetBool(json_value,"border",&border)) + { + PX_Object_LabelSetBorder(pObject,border); + } + + pSubValue=PX_JsonGetObjectValue(json_value,"align"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + if (PX_strequ(pSubValue->_string.buffer,"lefttop")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_LEFTTOP); + } + else if (PX_strequ(pSubValue->_string.buffer,"leftmid")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_LEFTMID); + } + else if (PX_strequ(pSubValue->_string.buffer,"leftbottom")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_LEFTBOTTOM); + } + else if (PX_strequ(pSubValue->_string.buffer,"midtop")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_MIDTOP); + } + else if (PX_strequ(pSubValue->_string.buffer,"center")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_CENTER); + } + else if (PX_strequ(pSubValue->_string.buffer,"midbottom")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_MIDBOTTOM); + } + else if (PX_strequ(pSubValue->_string.buffer,"righttop")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_RIGHTTOP); + } + else if (PX_strequ(pSubValue->_string.buffer,"rightmid")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_RIGHTMID); + } + else if (PX_strequ(pSubValue->_string.buffer,"rightbottom")) + { + PX_Object_LabelSetAlign(pObject,PX_ALIGN_RIGHTBOTTOM); + } + } + + return pObject; +} +PX_Object * PX_UI_CreateProcessbar(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + px_int max=100; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color,backgroundColor; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + Color=PX_COLOR(255,0,0,0); + backgroundColor=PX_COLOR(0,0,0,0); + + pObject=PX_Object_ProcessBarCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height); + + pSubValue=PX_JsonGetObjectValue(json_value,"max"); + + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + max=(px_int)pSubValue->_number; + PX_Object_ProcessBarSetMax(pObject,max); + } + + if(PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_ProcessBarSetColor(pObject,Color); + } + + if(PX_UI_GetColor(json_value,"backgroundcolor",&backgroundColor)) + { + PX_Object_ProcessBarSetBackgroundColor(pObject,backgroundColor); + } + + + return pObject; +} +PX_Object * PX_UI_CreateImage(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + px_int max=100; + PX_Json_Value *pSubValue=PX_NULL; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_ImageCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,PX_NULL); + + return pObject; +} +PX_Object * PX_UI_CreateSliderbar(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + px_int max=100; + px_int min=0; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color,backgroundColor; + PX_OBJECT_SLIDERBAR_TYPE type=PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL; + PX_OBJECT_SLIDERBAR_STYLE style=PX_OBJECT_SLIDERBAR_STYLE_BOX; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pSubValue=PX_JsonGetObjectValue(json_value,"max"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + max=(px_int)pSubValue->_number; + } + + pSubValue=PX_JsonGetObjectValue(json_value,"min"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + min=(px_int)pSubValue->_number; + } + + pSubValue=PX_JsonGetObjectValue(json_value,"type"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING&&PX_strequ(pSubValue->_string.buffer,"vertical")) + { + type=PX_OBJECT_SLIDERBAR_TYPE_VERTICAL; + } + + pSubValue=PX_JsonGetObjectValue(json_value,"style"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING&&PX_strequ(pSubValue->_string.buffer,"liner")) + { + style=PX_OBJECT_SLIDERBAR_STYLE_LINER; + } + + pObject=PX_Object_SliderBarCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,type,style); + if (pObject) + { + PX_Object_SliderBarSetRange(pObject,min,max); + + if(PX_UI_GetColor(json_value,"color",&Color)) + { + PX_Object_SliderBarSetColor(pObject,Color); + } + + if(PX_UI_GetColor(json_value,"backgroundcolor",&backgroundColor)) + { + PX_Object_SliderBarSetBackgroundColor(pObject,backgroundColor); + } + + pSubValue=PX_JsonGetObjectValue(json_value,"buttonlength"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_NUMBER) + { + PX_Object_SliderBarSetSliderButtonLength(pObject,(px_int)pSubValue->_number); + } + } + + return pObject; +} +PX_Object * PX_UI_CreateButton(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + const px_char *text=""; + px_char style[32]; + px_bool border; + PX_Json_Value *pSubValue=PX_NULL; + px_color fontColor,Color; + pSubValue=PX_JsonGetObjectValue(json_value,"text"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + text=pSubValue->_string.buffer; + } + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + fontColor=PX_OBJECT_UI_DEFAULT_FONTCOLOR; + + PX_UI_GetColor(json_value,"fontcolor",&fontColor); + + pObject=PX_Object_PushButtonCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,text,ui->fontmodule); + + if (PX_UI_GetColor(json_value,"backgroundcolor",&Color)) + { + PX_Object_PushButtonSetBackgroundColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"cursorcolor",&Color)) + { + PX_Object_PushButtonSetCursorColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"pushcolor",&Color)) + { + PX_Object_PushButtonSetPushColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_PushButtonSetBorderColor(pObject,Color); + } + + if (PX_UI_GetString(json_value,"style",style,sizeof(style))) + { + if (PX_strequ(style,"round")) + { + PX_Object_PushButtonSetStyle(pObject,PX_OBJECT_PUSHBUTTON_STYLE_ROUNDRECT); + } + } + + if (PX_UI_GetBool(json_value,"border",&border)) + { + PX_Object_PushButtonSetBorder(pObject,border); + } + return pObject; +} +PX_Object * PX_UI_CreateEdit(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + const px_char *text=""; + px_bool b; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color; + px_char style[8]; + px_char str[128]; + px_double number; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_EditCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,ui->fontmodule); + + if (PX_UI_GetColor(json_value,"fontcolor",&Color)) + { + PX_Object_EditSetTextColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"backgroundcolor",&Color)) + { + PX_Object_EditSetBackgroundColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"cursorcolor",&Color)) + { + PX_Object_EditSetCursorColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_EditSetBorderColor(pObject,Color); + } + + if (PX_UI_GetBool(json_value,"border",&b)) + { + PX_Object_EditSetBorder(pObject,b); + } + + if (PX_UI_GetBool(json_value,"passwordstyle",&b)) + { + PX_Object_EditSetPasswordStyle(pObject,b); + } + + if (PX_UI_GetBool(json_value,"autonewline",&b)) + { + PX_Object_EditAutoNewLine(pObject,b,16); + } + + if (PX_UI_GetString(json_value,"limit",str,sizeof(str))) + { + PX_Object_EditSetLimit(pObject,str); + } + + if (PX_UI_GetNumber(json_value,"maxlength",&number)) + { + PX_Object_EditSetMaxTextLength(pObject,(px_int)number); + } + + if (PX_UI_GetString(json_value,"text",str,sizeof(str))) + { + PX_Object_EditSetText(pObject,str); + } + + if (PX_UI_GetString(json_value,"style",style,sizeof(style))) + { + if (PX_strequ(style,"round")) + { + PX_Object_EditSetStyle(pObject,PX_OBJECT_EDIT_STYLE_ROUNDRECT); + } + } + + return pObject; +} +PX_Object * PX_UI_CreateScrollArea(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + px_bool b; + px_color Color; + + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_ScrollAreaCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height); + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_EditSetBorderColor(pObject,Color); + } + + if (PX_UI_GetBool(json_value,"border",&b)) + { + PX_Object_EditSetBorder(pObject,b); + } + return pObject; +} +PX_Object * PX_UI_CreateAutoText(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + const px_char *text=""; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_AutoTextCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,ui->fontmodule); + + pSubValue=PX_JsonGetObjectValue(json_value,"text"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + text=pSubValue->_string.buffer; + PX_Object_AutoTextSetText(pObject,text); + } + + if (PX_UI_GetColor(json_value,"fontcolor",&Color)) + { + PX_Object_AutoTextSetTextColor(pObject,Color); + } + + return pObject; +} +PX_Object * PX_UI_CreateCursorButton(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + const px_char *text=""; + px_char style[32]; + px_bool border; + PX_Json_Value *pSubValue=PX_NULL; + px_color fontColor,Color; + pSubValue=PX_JsonGetObjectValue(json_value,"text"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + text=pSubValue->_string.buffer; + } + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + fontColor=PX_COLOR(255,0,0,0); + + PX_UI_GetColor(json_value,"fontcolor",&fontColor); + + pObject=PX_Object_CursorButtonCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,text,ui->fontmodule,fontColor); + + if (PX_UI_GetColor(json_value,"backgroundcolor",&Color)) + { + PX_Object_PushButtonSetBackgroundColor(PX_Object_GetCursorButton(pObject)->pushbutton,Color); + } + + if (PX_UI_GetColor(json_value,"cursorcolor",&Color)) + { + PX_Object_PushButtonSetCursorColor(PX_Object_GetCursorButton(pObject)->pushbutton,Color); + } + + if (PX_UI_GetColor(json_value,"pushcolor",&Color)) + { + PX_Object_PushButtonSetPushColor(PX_Object_GetCursorButton(pObject)->pushbutton,Color); + } + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_PushButtonSetBorderColor(PX_Object_GetCursorButton(pObject)->pushbutton,Color); + } + + if (PX_UI_GetString(json_value,"style",style,sizeof(style))) + { + if (PX_strequ(style,"round")) + { + PX_Object_PushButtonSetStyle(PX_Object_GetCursorButton(pObject)->pushbutton,PX_OBJECT_PUSHBUTTON_STYLE_ROUNDRECT); + } + } + + if (PX_UI_GetBool(json_value,"border",&border)) + { + PX_Object_PushButtonSetBorder(PX_Object_GetCursorButton(pObject)->pushbutton,border); + } + return pObject; +} +PX_Object * PX_UI_CreateVirtualKeyboard(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_VirtualKeyBoardCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height); + + if (PX_UI_GetColor(json_value,"backgroundcolor",&Color)) + { + PX_Object_VirtualKeyBoardSetBackgroundColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"cursorcolor",&Color)) + { + PX_Object_VirtualKeyBoardSetCursorColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"pushcolor",&Color)) + { + PX_Object_VirtualKeyBoardSetPushColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_VirtualKeyBoardSetBorderColor(pObject,Color); + } + + return pObject; +} +PX_Object * PX_UI_CreateVirtualNumberKeyboard(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_VirtualNumberKeyBoardCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height); + + if (PX_UI_GetColor(json_value,"backgroundcolor",&Color)) + { + PX_Object_VirtualNumberKeyBoardSetBackgroundColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"cursorcolor",&Color)) + { + PX_Object_VirtualNumberKeyBoardSetCursorColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"pushcolor",&Color)) + { + PX_Object_VirtualNumberKeyBoardSetPushColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_VirtualNumberKeyBoardSetBorderColor(pObject,Color); + } + + return pObject; +} +PX_Object * PX_UI_CreateCheckBox(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + const px_char *text=""; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color; + pSubValue=PX_JsonGetObjectValue(json_value,"text"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + text=pSubValue->_string.buffer; + } + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_CheckBoxCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,text,ui->fontmodule); + + if (PX_UI_GetColor(json_value,"fontcolor",&Color)) + { + PX_Object_CheckBoxSetTextColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"backgroundcolor",&Color)) + { + PX_Object_CheckBoxSetBackgroundColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"cursorcolor",&Color)) + { + PX_Object_CheckBoxSetCursorColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"pushcolor",&Color)) + { + PX_Object_CheckBoxSetPushColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_CheckBoxSetBorderColor(pObject,Color); + } + + return pObject; +} + +px_bool PX_UI_IsValidUIObject(PX_UI *ui,PX_Json_Value *json_value) +{ + if (json_value->type==PX_JSON_VALUE_TYPE_OBJECT) + { + if (json_value->name.buffer&&json_value->name.buffer[0]) + { + px_int i; + for (i=0;iinfos.size;i++) + { + PX_UI_ControllerInfo *pInfo=PX_VECTORAT(PX_UI_ControllerInfo,&ui->infos,i); + if (PX_strequ(pInfo->Type,json_value->name.buffer)) + { + return PX_TRUE; + } + } + } + } + return PX_FALSE; +} + +PX_Object * PX_UI_CreateRadioBox(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + const px_char *text=""; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color; + px_bool bselect; + pSubValue=PX_JsonGetObjectValue(json_value,"text"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING) + { + text=pSubValue->_string.buffer; + } + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_RadioBoxCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,text,ui->fontmodule); + + if (PX_UI_GetColor(json_value,"fontcolor",&Color)) + { + PX_Object_RadioBoxSetTextColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"backgroundcolor",&Color)) + { + PX_Object_RadioBoxSetBackgroundColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"cursorcolor",&Color)) + { + PX_Object_RadioBoxSetCursorColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"pushcolor",&Color)) + { + PX_Object_RadioBoxSetPushColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_RadioBoxSetBorderColor(pObject,Color); + } + + if (PX_UI_GetBool(json_value,"select",&bselect)) + { + PX_Object_RadioBoxSetCheck(pObject,bselect); + } + + if (PX_UI_GetBool(json_value,"check",&bselect)) + { + PX_Object_RadioBoxSetCheck(pObject,bselect); + } + + return pObject; +} +PX_Object * PX_UI_CreateSelectBar(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_Object *pObject; + PX_UiBaseInfo baseInfo; + PX_Json_Value *pSubValue=PX_NULL; + px_color Color; + px_char style[8]; + px_double number; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pObject=PX_Object_SelectBarCreate(ui->ui_mp,parent,(px_int)baseInfo.x,(px_int)baseInfo.y,(px_int)baseInfo.width,(px_int)baseInfo.height,ui->fontmodule); + + if (PX_UI_GetColor(json_value,"fontcolor",&Color)) + { + PX_Object_SelectBarSetFontColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"backgroundcolor",&Color)) + { + PX_Object_SelectBarSetBackgroundColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"cursorcolor",&Color)) + { + PX_Object_SelectBarSetCursorColor(pObject,Color); + } + + if (PX_UI_GetColor(json_value,"bordercolor",&Color)) + { + PX_Object_SelectBarSetBorderColor(pObject,Color); + } + + if (PX_UI_GetString(json_value,"style",style,sizeof(style))) + { + if (PX_strequ(style,"round")) + { + PX_Object_SelectBarSetStyle(pObject,PX_OBJECT_SELECTBAR_STYLE_ROUNDRECT); + } + } + + if (PX_UI_GetNumber(json_value,"displaycount",&number)) + { + if (number<1) + { + number=1; + } + PX_Object_SelectBarSetDisplayCount(pObject,(px_int)number); + } + + + pSubValue=PX_JsonGetObjectValue(json_value,"items"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_ARRAY) + { + px_int i; + PX_Json_Value *pArrayValue; + for (i=0;i_array.size;i++) + { + pArrayValue=PX_JsonGetArrayValue(pSubValue,i); + if (pArrayValue&&pArrayValue->type==PX_JSON_VALUE_TYPE_STRING) + { + PX_Object_SelectBarAddItem(pObject,pArrayValue->_string.buffer); + } + } + } + + if (PX_UI_GetNumber(json_value,"currentindex",&number)) + { + PX_Object_SelectBarSetCurrentIndex(pObject,(px_int)number); + } + + return pObject; +} + +px_bool PX_UIInitialize(px_memorypool *mp,px_memorypool *ui_mp,PX_UI *ui,PX_FontModule *fontmodule) +{ + PX_memset(ui,0,sizeof(PX_UI)); + ui->mp=mp; + ui->ui_mp=ui_mp; + ui->fontmodule=fontmodule; + if(!PX_VectorInitialize(mp,&ui->infos,sizeof(PX_UI_ControllerInfo),32)) return PX_FALSE; + if(!PX_MapInitialize(mp,&ui->ObjectMap)) + { + PX_VectorFree(&ui->infos); + return PX_FALSE; + } + if(!PX_UIAddControllerInfo(ui,"node",PX_UI_CreateNode)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"label",PX_UI_CreateLabel)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"processbar",PX_UI_CreateProcessbar)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"image",PX_UI_CreateImage)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"sliderbar",PX_UI_CreateSliderbar)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"pushbutton",PX_UI_CreateButton)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"edit",PX_UI_CreateEdit)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"scrollarea",PX_UI_CreateScrollArea)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"text",PX_UI_CreateAutoText)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"cursorbutton",PX_UI_CreateCursorButton)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"virtualkeyboard",PX_UI_CreateVirtualKeyboard)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"virtualnumberkeyboard",PX_UI_CreateVirtualNumberKeyboard)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"checkbox",PX_UI_CreateCheckBox)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"radiobox",PX_UI_CreateRadioBox)) goto _ERROR; + if(!PX_UIAddControllerInfo(ui,"selectbar",PX_UI_CreateSelectBar)) goto _ERROR; + return PX_TRUE; +_ERROR: + + return PX_FALSE; +} + +px_bool PX_UIAddControllerInfo(PX_UI *ui,const px_char controllertype[],PX_UI_ControllerCreate _func) +{ + PX_UI_ControllerInfo info; + PX_strcpy(info.Type,controllertype,sizeof(info.Type)); + info.create_func=_func; + return PX_VectorPushback(&ui->infos,&info); +} + +PX_Object * PX_UICreate(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height) +{ + //key properties + //type default root + //x,y default 0,0 + PX_Object *pNewObject=PX_NULL; + PX_Json_Value *pSubValue=PX_NULL; + + if (json_value->type!=PX_JSON_VALUE_TYPE_OBJECT) + { + return PX_NULL; + } + + if (json_value->name.buffer&&json_value->name.buffer[0]) + { + px_int i; + for (i=0;iinfos.size;i++) + { + PX_UI_ControllerInfo *pInfo=PX_VECTORAT(PX_UI_ControllerInfo,&ui->infos,i); + if (PX_strequ(pInfo->Type,json_value->name.buffer)) + { + if (pInfo->create_func) + { + pNewObject=pInfo->create_func(ui,parent,json_value,width,height); + if (!pNewObject) + { + goto _ERROR; + } + break; + } + else + { + goto _ERROR; + } + } + } + + } + else + { + //root object + PX_UiBaseInfo baseInfo; + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + + pNewObject=PX_ObjectCreate(ui->ui_mp,parent,baseInfo.x,baseInfo.y,baseInfo.z,baseInfo.width,baseInfo.height,baseInfo.length); + if (!pNewObject) + { + goto _ERROR; + } + } + + pSubValue=PX_JsonGetObjectValue(json_value,"id"); + if (pSubValue&&pSubValue->type==PX_JSON_VALUE_TYPE_STRING&&pSubValue->_string.buffer[0]) + { + if(PX_MapGet(&ui->ObjectMap,pSubValue->_string.buffer)) + { + //"Repeat controller" + PX_ASSERT(); + goto _ERROR; + } + if(PX_MapPut(&ui->ObjectMap,pSubValue->_string.buffer,pNewObject)!=PX_HASHMAP_RETURN_OK) + goto _ERROR; + } + + if (pNewObject) + { + px_list_node *pNode=PX_ListNodeAt(&json_value->_object.values,0); + while (pNode) + { + PX_Json_Value *pvalue=PX_LIST_NODETDATA(PX_Json_Value,pNode); + if (PX_UI_IsValidUIObject(ui,pvalue)) + { + if(!PX_UICreate(ui,pNewObject,pvalue,width,height)) + { + goto _ERROR; + } + } + pNode=pNode->pnext; + } + } + + return pNewObject; +_ERROR: + if (pNewObject) + { + PX_ObjectDelete(pNewObject); + } + return PX_NULL; + +} + +px_void PX_UIUpdateObjectsPostions(PX_UI *ui,PX_Object *pObject,PX_Json_Value *json_value,px_int width,px_int height) +{ + PX_UiBaseInfo baseInfo; + PX_Json_Value *pSubValue=PX_NULL; + PX_Object *pChildObject; + px_int i; + px_int index=0; + + baseInfo=PX_UIGetBaseInfo(json_value,width,height); + pObject->x=baseInfo.x; + pObject->y=baseInfo.y; + pObject->Height=baseInfo.height; + pObject->Width=baseInfo.width; + if (json_value->type==PX_JSON_VALUE_TYPE_OBJECT) + { + for (i=0;i_object.values.size;i++) + { + pSubValue=PX_JsonGetObjectValueByIndex(json_value,i); + if (PX_UI_IsValidUIObject(ui,pSubValue)) + { + pChildObject=PX_ObjectGetChild(pObject,index); + if (pChildObject) + { + PX_UIUpdateObjectsPostions(ui,pChildObject,pSubValue,width,height); + } + index++; + } + + } + } +} + +PX_Object * PX_UIGetObjectByID(PX_UI *ui,const px_char id[]) +{ + return (PX_Object *)PX_MapGet(&ui->ObjectMap,id); +} + +px_void PX_UIFree(PX_UI *ui) +{ + PX_VectorFree(&ui->infos); + PX_MapFree(&ui->ObjectMap); +} + diff --git a/UI/PainterEngine/kernel/PX_UI.h b/UI/PainterEngine/kernel/PX_UI.h new file mode 100644 index 0000000..9046694 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_UI.h @@ -0,0 +1,31 @@ +#ifndef PX_UI_H +#define PX_UI_H + +#include "PX_Json.h" +#include "PX_Object.h" + +typedef struct +{ + px_memorypool *mp,*ui_mp; + px_map ObjectMap; + px_vector infos; + PX_FontModule *fontmodule; +}PX_UI; + + +typedef PX_Object * (*PX_UI_ControllerCreate)(PX_UI *ui,PX_Object *parent,PX_Json_Value *value,px_int width,px_int height); + +typedef struct +{ + px_char Type[32]; + PX_UI_ControllerCreate create_func; +}PX_UI_ControllerInfo; + +px_bool PX_UIInitialize(px_memorypool *mp,px_memorypool *ui_mp,PX_UI *ui,PX_FontModule *fontmodule); +px_bool PX_UIAddControllerInfo(PX_UI *ui,const px_char controllertype[],PX_UI_ControllerCreate _func); +PX_Object * PX_UICreate(PX_UI *ui,PX_Object *parent,PX_Json_Value *json_value,px_int width,px_int height); +px_void PX_UIUpdateObjectsPostions(PX_UI *ui,PX_Object *update,PX_Json_Value *json_value,px_int width,px_int height); +PX_Object *PX_UIGetObjectByID(PX_UI *ui,const px_char id[]); +px_void PX_UIFree(PX_UI *ui); + +#endif \ No newline at end of file diff --git a/UI/PainterEngine/kernel/PX_World.c b/UI/PainterEngine/kernel/PX_World.c new file mode 100644 index 0000000..11be166 --- /dev/null +++ b/UI/PainterEngine/kernel/PX_World.c @@ -0,0 +1,588 @@ +#include "PX_World.h" + + +px_bool PX_WorldInitialize(px_memorypool *mp,PX_World *World,px_int world_width,px_int world_height,px_int surface_width,px_int surface_height,px_dword calcSize) +{ + px_void *ptr; + PX_memset(World, 0, sizeof(PX_World)); + if(!PX_VectorInitialize(mp,&World->pObjects,sizeof(PX_WorldObject),256)) return PX_FALSE; + if(!PX_VectorInitialize(mp,&World->pNewObjects,sizeof(PX_Object *),128)) return PX_FALSE; + World->mp=mp; + World->world_height=world_height; + World->world_width=world_width; + World->surface_height=surface_height; + World->surface_width=surface_width; + World->auxiliaryline=PX_TRUE; + World->auxiliaryline_color=PX_COLOR(64,255,192,255); + World->camera_offset=PX_POINT(0,0,0); + World->aliveCount=0; + World->offsetx=0; + World->offsety=0; + PX_WorldSetAuxiliaryXYSpacer(World,32,32); + ptr=MP_Malloc(World->mp,calcSize); + if (!ptr) + { + return PX_FALSE; + } + World->mp_WorldCalc=MP_Create(ptr,calcSize); + PX_memset(World->Impact_Test_array,0,sizeof(World->Impact_Test_array)); + return PX_TRUE; +} + +px_void PX_WorldSetAuxiliaryXYSpacer(PX_World *pw,px_int x,px_int y) +{ + pw->auxiliaryXSpacer=x; + pw->auxiliaryYSpacer=y; +} + +px_void PX_WorldEnableAuxiliaryLine(PX_World *pw,px_bool bline) +{ + pw->auxiliaryline=bline; +} + + +px_int PX_WorldGetCount(PX_World *World) +{ + return World->pObjects.size; +} + +px_int PX_WorldAddObjectEx(PX_World *World,PX_Object *pObject) +{ + PX_WorldObject *pwo,wo; + int i; + wo.pObject=pObject; + wo.DeleteMark=PX_FALSE; + + for (i=0;ipObjects.size;i++) + { + pwo=PX_VECTORAT(PX_WorldObject,&World->pObjects,i); + if (!pwo->pObject) + { + *pwo=wo; + World->aliveCount++; + return i; + } + } + if (PX_VectorPushback(&World->pObjects,&wo)) + { + World->aliveCount++; + return World->pObjects.size-1; + } + return -1; +} + +px_void PX_WorldRemoveObjectEx(PX_World *world,px_int i_index) +{ + PX_WorldObject *pwo=PX_VECTORAT(PX_WorldObject,&world->pObjects,i_index); + if (pwo->pObject) + { + pwo->DeleteMark=PX_FALSE; + world->aliveCount--; + PX_ObjectDelete(pwo->pObject); + pwo->pObject=PX_NULL; + } +} + +static px_void PX_WorldUpdateNewObjectList(PX_World* pworld) +{ + px_int k = 0,i,j; + for (i = 0; i < pworld->pNewObjects.size; i++) + { + PX_WorldObject* pwo, wo; + + wo.pObject = *PX_VECTORAT(PX_Object*, &pworld->pNewObjects, i); + wo.DeleteMark = PX_FALSE; + + for (j = k; j < pworld->pObjects.size; j++) + { + pwo = PX_VECTORAT(PX_WorldObject, &pworld->pObjects, j); + if (!pwo->pObject) + { + wo.pObject->world_index = j; + *pwo = wo; + pworld->aliveCount++; + k = j + 1; + goto NEW_OBJECT_CONTINUE; + } + } + + if (PX_VectorPushback(&pworld->pObjects, &wo)) + { + pworld->aliveCount++; + wo.pObject->world_index = pworld->pObjects.size - 1; + k = wo.pObject->world_index + 1; + } + NEW_OBJECT_CONTINUE: + continue; + } + PX_VectorClear(&pworld->pNewObjects); +} + +px_void PX_WorldUpdate( PX_World *pworld,px_uint elapsed ) +{ + px_int updateCount; + px_int i,b,j; + px_float w_left=0,w_top=0,w_right=0,w_height=0; + PX_Object_Event e; + PX_WorldObject *pwo; + + px_int impact_count[sizeof(pwo->pObject->impact_object_type)*8]={0}; + px_memorypool *calcmp=&pworld->mp_WorldCalc; + + if (pworld==PX_NULL) + { + return; + } + + MP_Reset(calcmp); + + //Add NewObjects + PX_WorldUpdateNewObjectList(pworld); + + //Object Counts + updateCount=pworld->pObjects.size; + + ////////////////////////////////////////////////////////////////////////// + //impact test + ////////////////////////////////////////////////////////////////////////// + for (i=0;ipObjects,i); + if (!pwo->pObject) + { + continue; + } + if (pwo->pObject->impact_object_type) + { + j=0; + while(!(pwo->pObject->impact_object_type &(1<pObject->impact_object_type)*8;i++) + { + if (impact_count[i]) + { + PX_QuadtreeCreate(calcmp,&pworld->Impact_Test_array[i],0,0,(px_float)pworld->world_width,(px_float)pworld->world_height,impact_count[i],2); + } + else + { + PX_QuadtreeCreate(calcmp,&pworld->Impact_Test_array[i],0,0,(px_float)pworld->world_width,(px_float)pworld->world_height,impact_count[i],0); + } + } + + for (i=0;ipObjects,i); + if (!pwo->pObject) + { + continue; + } + if (pwo->pObject->impact_object_type) + { + for (b=0;bpObject->impact_object_type)*8;b++) + { + if ((pwo->pObject->impact_object_type &(1<pObject->diameter) + { + PX_QuadtreeAddNode(&pworld->Impact_Test_array[b],(px_float)pwo->pObject->x,(px_float)pwo->pObject->y,(px_float)pwo->pObject->diameter,(px_float)pwo->pObject->diameter,userData); + } + else + { + PX_QuadtreeAddNode(&pworld->Impact_Test_array[b],(px_float)pwo->pObject->x,(px_float)pwo->pObject->y,(px_float)pwo->pObject->Width,(px_float)pwo->pObject->Height,userData); + } + + } + } + } + } + + for (i=0;ipObjects,i); + if (!pwo->pObject) + { + continue; + } + + if (pwo->pObject->impact_target_type) + { + for (b=0;bpObject->impact_target_type)*8;b++) + { + if ((pwo->pObject->impact_target_type &(1<Impact_Test_array[b]); + if (pwo->pObject->diameter) + { + PX_QuadtreeTestNode(&pworld->Impact_Test_array[b],(px_float)pwo->pObject->x,(px_float)pwo->pObject->y,(px_float)pwo->pObject->diameter,(px_float)pwo->pObject->diameter,userData); + } + else + { + PX_QuadtreeTestNode(&pworld->Impact_Test_array[b],(px_float)pwo->pObject->x,(px_float)pwo->pObject->y,(px_float)pwo->pObject->Width,(px_float)pwo->pObject->Height,userData); + } + + for (im_i=0;im_iImpact_Test_array[b].Impacts.size;im_i++) + { + PX_Quadtree_UserData *puData=PX_VECTORAT(PX_Quadtree_UserData,&pworld->Impact_Test_array[b].Impacts,im_i); + PX_Object *pObj1=pwo->pObject; + PX_WorldObject *pimpactWo=(PX_WorldObject *)puData->ptr; + PX_Object *pObj2=((PX_WorldObject *)(puData->ptr))->pObject; + + if (pObj1->diameter&&pObj2->diameter) + { + if(!PX_isCircleCrossCircle(PX_POINT(pObj1->x,pObj1->y,0),pObj1->diameter/2,PX_POINT(pObj2->x,pObj2->y,0),pObj2->diameter/2)) + continue; + } + else if (pObj1->diameter==0&&pObj2->diameter) + { + if (!PX_isRectCrossCircle(PX_RECT(pObj1->x-pObj1->Width/2,pObj1->y-pObj1->Height/2,pObj1->Width,pObj1->Height),PX_POINT(pObj2->x,pObj2->y,0),pObj2->diameter/2)) + { + continue; + } + } + else if (pObj1->diameter&&pObj2->diameter==0) + { + if (!PX_isRectCrossCircle(PX_RECT(pObj2->x-pObj2->Width/2,pObj2->y-pObj2->Height/2,pObj2->Width,pObj2->Height),PX_POINT(pObj1->x,pObj1->y,0),pObj1->diameter/2)) + { + continue; + } + } + if (pimpactWo->DeleteMark!=PX_TRUE) + { + e.Event=PX_OBJECT_EVENT_IMPACT; + e.Param_ptr[0]=pObj2; + PX_ObjectPostEvent(pObj1,e); + } + } + + } + } + } + } + + ////////////////////////////////////////////////////////////////////////// + //Update Objects + + + for (i=0;ipObjects,i); + if (!pwo->pObject) + { + continue; + } + PX_ObjectUpdate(pwo->pObject,elapsed); + } + + ////////////////////////////////////////////////////////////////////////// + //delete death objects + for (i=0;ipObjects,i); + if (pwo->pObject&&pwo->DeleteMark) + { + PX_WorldRemoveObjectEx(pworld,i); + } + } + +} + +px_void PX_WorldUpdateOffset(PX_World *pw) +{ + px_int surface_width,surface_height; + px_int LeftTopX,LeftTopY; + + surface_width=pw->surface_width; + surface_height=pw->surface_height; + LeftTopX=(px_int)(pw->camera_offset.x-surface_width/2),LeftTopY=(px_int)(pw->camera_offset.y-surface_height/2); + + if (LeftTopX+surface_width>pw->world_width) + { + LeftTopX=pw->world_width-surface_width; + } + + if (LeftTopY+surface_height>pw->world_height) + { + LeftTopY=pw->world_height-surface_height; + } + + if (LeftTopX<0) + { + LeftTopX=0; + } + if (LeftTopY<0) + { + LeftTopY=0; + } + + pw->offsetx=(px_float)LeftTopX; + pw->offsety=(px_float)LeftTopY; +} + +static px_void PX_WorldClildRender(PX_World *pworld,px_surface *pSurface, PX_Object *Object,px_uint elapsed,px_float oftX,px_float oftY) +{ + if (Object==PX_NULL) + { + return; + } + if (Object->Visible==PX_FALSE) + { + return; + } + if (Object->Func_ObjectRender!=0) + { + px_float x=Object->x; + px_float y=Object->y; + Object->x-=oftX; + Object->y-=oftY; + Object->Func_ObjectRender(pSurface,Object,elapsed); + + if (pworld->showImpactRegion) + { + if (Object->diameter) + { + PX_GeoDrawSolidCircle(pSurface, (px_int)Object->x, (px_int)Object->y, (px_int)Object->diameter / 2, PX_COLOR(32, 255, 0, 0)); + } + else + { + PX_GeoDrawRect(pSurface, (px_int)(Object->x- Object->Width/2), (px_int)(Object->y- Object->Height/2), (px_int)(Object->x + Object->Width/2), (px_int)(Object->y + Object->Height/2), PX_COLOR(32, 255, 0, 0)); + } + } + + + Object->x=x; + Object->y=y; + } + if (Object->pNextBrother!=PX_NULL) + { + PX_WorldClildRender(pworld,pSurface,Object->pNextBrother,elapsed,oftX,oftY); + } + if (Object->pChilds!=PX_NULL) + { + PX_WorldClildRender(pworld,pSurface,Object->pNextBrother,elapsed,oftX,oftY); + } +} + + + +px_void PX_WorldRender(px_surface *psurface,PX_World *pw,px_uint elapsed) +{ + px_int i,j; + px_int surface_width,surface_height; + PX_QuickSortAtom *ArrayIndex; + px_memorypool *calcmp; + px_int sx,sy; + PX_WorldObject *pwo; + + if (pw==PX_NULL) + { + return; + } + + calcmp=&pw->mp_WorldCalc; + MP_Reset(calcmp); + + + PX_WorldUpdateOffset(pw); + + surface_width=pw->surface_width; + surface_height=pw->surface_height; + + + if (pw->auxiliaryline) + { + for (sy=pw->auxiliaryYSpacer-((px_int)pw->offsety%pw->auxiliaryYSpacer);syauxiliaryYSpacer) + { + PX_GeoDrawLine(psurface,0,sy,surface_width-1,sy,1,pw->auxiliaryline_color); + } + + for (sx=pw->auxiliaryXSpacer-((px_int)pw->offsetx%pw->auxiliaryXSpacer);sxauxiliaryXSpacer) + { + PX_GeoDrawLine(psurface,sx,0,sx,surface_height-1,1,pw->auxiliaryline_color); + } + + } + + ArrayIndex=(PX_QuickSortAtom *)MP_Malloc(calcmp,pw->aliveCount*sizeof(PX_QuickSortAtom)); + j=0; + + for (i=0;ipObjects.size;i++) + { + pwo=PX_VECTORAT(PX_WorldObject,&pw->pObjects,i); + if (!pwo->pObject) + { + continue; + } + ArrayIndex[j].weight=pwo->pObject->z; + ArrayIndex[j].pData=pwo->pObject; + j++; + } + + PX_Quicksort_MaxToMin(ArrayIndex,0,pw->aliveCount-1); + + + + for (i=0;ialiveCount;i++) + { + PX_WorldClildRender(pw,psurface,(PX_Object *)ArrayIndex[i].pData,elapsed,pw->offsetx,pw->offsety); + } + MP_Reset(calcmp); +} + +px_void PX_WorldSetImpact(PX_Object *pObj,px_dword type,px_dword Intersect) +{ + pObj->impact_object_type=type; + pObj->impact_target_type=Intersect; +} + + + +px_bool PX_WorldAddObject(PX_World *World,PX_Object *pObject) +{ + return PX_VectorPushback(&World->pNewObjects,&pObject); +} + + + + +px_void PX_WorldSetAuxiliaryLineColor(PX_World *pw,px_color color) +{ + pw->auxiliaryline_color=color; +} + + + +px_point PX_WolrdObjectXYtoScreenXY(PX_World *pw,px_float x,px_float y) +{ + return PX_POINT(x-pw->offsetx,y-pw->offsety,0); +} + +px_void PX_WorldPostEvent(PX_World* pw, PX_Object_Event e) +{ + PX_WorldObject* pwo; + int i; + for (i = 0; i < pw->pObjects.size; i++) + { + pwo = PX_VECTORAT(PX_WorldObject, &pw->pObjects, i); + if (pwo->pObject) + { + PX_ObjectPostEvent(pwo->pObject, e); + } + } +} + +px_void PX_WorldFree(PX_World *pw) +{ + PX_WorldObject *pwo; + int i; + for (i=0;ipObjects.size;i++) + { + pwo=PX_VECTORAT(PX_WorldObject,&pw->pObjects,i); + if (pwo->pObject) + { + PX_ObjectDelete(pwo->pObject); + } + } + PX_VectorFree(&pw->pObjects); + PX_VectorFree(&pw->pNewObjects); + + MP_Free(pw->mp,pw->mp_WorldCalc.StartAddr); + +} + +px_void PX_WorldSetCamera(PX_World *World,px_point camera_center_point) +{ + World->camera_offset=camera_center_point; + PX_WorldUpdateOffset(World); +} + +px_void PX_WorldRemoveObject(PX_World *world,PX_Object *pObject) +{ + PX_WorldObject *pwo; + if (pObject->world_index!=-1&&pObject->world_indexpObjects.size) + { + pwo=PX_VECTORAT(PX_WorldObject,&world->pObjects,pObject->world_index); + if (pwo->pObject==pObject) + { + pwo->DeleteMark=PX_TRUE; + + return; + } + } +} + +px_void PX_WorldRemoveObjectByIndex(PX_World *world,px_int i_index) +{ + PX_WorldObject *pwo=PX_VECTORAT(PX_WorldObject,&world->pObjects,i_index); + +#ifdef PX_DEBUG_MODE + if (i_index>world->pObjects.size) + { + PX_ASSERT(); + } +#endif + + if (pwo->pObject) + { + pwo->DeleteMark=PX_TRUE; + } +} + +_LIMIT px_int PX_WorldSearchRegion(PX_World *world,px_float x,px_float y,px_float raduis,PX_Object *Object[],px_int MaxSearchCount,px_dword impact_test_type) +{ + px_int b; + px_int m=0; + for (b=0;bImpact_Test_array[b]); + PX_QuadtreeTestNode(&world->Impact_Test_array[b],x,y,raduis*2,raduis*2,userData); + + for (im_i=0;im_iImpact_Test_array[b].Impacts.size;im_i++) + { + PX_Quadtree_UserData *puData=PX_VECTORAT(PX_Quadtree_UserData,&world->Impact_Test_array[b].Impacts,im_i); + PX_WorldObject *pimpactWo=(PX_WorldObject *)puData->ptr; + PX_Object *pObj2=((PX_WorldObject *)(puData->ptr))->pObject; + + if (pObj2->diameter) + { + if(!PX_isCircleCrossCircle(PX_POINT(x,y,0),raduis,PX_POINT(pObj2->x,pObj2->y,0),pObj2->diameter/2)) + continue; + } + else + { + if (!PX_isRectCrossCircle(PX_RECT(pObj2->x-pObj2->Width/2,pObj2->y-pObj2->Height/2,pObj2->Width,pObj2->Height),PX_POINT(x,y,0),raduis)) + { + continue; + } + } + + if (pimpactWo->DeleteMark!=PX_TRUE) + { + if (m + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/CMakeLists.txt b/UI/PainterEngine/platform/android/CMakeLists.txt new file mode 100644 index 0000000..57bb64f --- /dev/null +++ b/UI/PainterEngine/platform/android/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 3.6.0) + +################################################################# +#PainterEngine Directory +set(PAINTERENGINE_DIR D:/Git/PainterEngine) +#Project Directory +set(PAINTERENGINE_PROJECT_DIR D:/Git/project) +################################################################# +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c11 -O3 ") + +include_directories(${ANDROID_NDK}/sources/android/native_app_glue/) +include_directories(${PAINTERENGINE_DIR}) +include_directories(${PAINTERENGINE_DIR}/platform/android) +include_directories(${PAINTERENGINE_PROJECT_DIR}) + +find_library(log-lib log) + +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate") + +aux_source_directory(${PAINTERENGINE_PROJECT_DIR} PROJECT_DIR_SRC) +add_library(PainterEngineForAndroid SHARED ${PROJECT_DIR_SRC}) + +set(ANDROID_NATIVE_APP_GLUE ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c) +aux_source_directory(${PAINTERENGINE_DIR}/platform/android PAINTERENGINE_PLATFORM_ANDROID_SOURCES) +aux_source_directory(${PAINTERENGINE_DIR}/core PAINTERENGINE_CORE_SOURCES) +aux_source_directory(${PAINTERENGINE_DIR}/kernel PAINTERENGINE_KERNEL_SOURCES) +aux_source_directory(${PAINTERENGINE_DIR}/architecture PAINTERENGINE_ARCH_SOURCES) + +add_library(PAINTERENGINELIB + STATIC + ${ANDROID_NATIVE_APP_GLUE} + ${PAINTERENGINE_PLATFORM_ANDROID_SOURCES} + ${PAINTERENGINE_ARCH_SOURCES} + ${PAINTERENGINE_KERNEL_SOURCES} + ${PAINTERENGINE_CORE_SOURCES}) + +target_link_libraries(PainterEngineForAndroid + PAINTERENGINELIB + android + ${log-lib} + EGL + GLESv3 + OpenSLES + log) \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/px_audio.c b/UI/PainterEngine/platform/android/px_audio.c new file mode 100644 index 0000000..d409563 --- /dev/null +++ b/UI/PainterEngine/platform/android/px_audio.c @@ -0,0 +1,120 @@ +#include "../modules/px_audio.h" + +#include "SLES/OpenSLES.h" +#include "SLES/OpenSLES_Android.h" + +//engine +SLObjectItf engineObject = PX_NULL; +SLEngineItf engineEngine = PX_NULL; + +//mixer +SLObjectItf outputMixObject = PX_NULL; +SLEnvironmentalReverbItf outputMixEnvironmentalReverb = PX_NULL; +SLEnvironmentalReverbSettings reverbSettings = SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR; + +//pcm +SLObjectItf pcmPlayerObject = PX_NULL; +SLPlayItf pcmPlayerPlay = PX_NULL; +SLVolumeItf pcmPlayerVolume = PX_NULL; + +SLAndroidSimpleBufferQueueItf pcmBufferQueue; +#define SL_PCM_BLOCK_SIZE 2048 +#define SL_PCM_BLOCK_COUNT 8 +static px_byte SL_PCMBuffer[SL_PCM_BLOCK_SIZE*SL_PCM_BLOCK_COUNT]; +static px_int SL_PCMrBlock=0; +static PX_SoundPlay *SL_soundPlay=PX_NULL; + + +void pcmBufferCallBack(SLAndroidSimpleBufferQueueItf bf, void * context) +{ + px_int SL_PCMwBlock; + + if(!SL_soundPlay) + { + PX_memset(SL_PCMBuffer,0,sizeof(SL_PCMBuffer)); + (*pcmBufferQueue)->Enqueue(pcmBufferQueue, SL_PCMBuffer, SL_PCM_BLOCK_SIZE); + return; + } + + + //write a block + (*pcmBufferQueue)->Enqueue(pcmBufferQueue, SL_PCMBuffer+SL_PCMrBlock*SL_PCM_BLOCK_SIZE, SL_PCM_BLOCK_SIZE); + + //read a block + SL_PCMwBlock=SL_PCMrBlock+SL_PCM_BLOCK_COUNT-1; + + if(SL_PCMwBlock>=SL_PCM_BLOCK_COUNT) + { + SL_PCMwBlock-=SL_PCM_BLOCK_COUNT; + } + PX_SoundPlayRead(SL_soundPlay,SL_PCMBuffer+SL_PCMwBlock*SL_PCM_BLOCK_SIZE,SL_PCM_BLOCK_SIZE); + + SL_PCMrBlock++; + if(SL_PCMrBlock>=SL_PCM_BLOCK_COUNT) + SL_PCMrBlock=0; +} + +px_bool PX_AudioInitialize(PX_SoundPlay *soundPlay) +{ + SLresult result; + SL_soundPlay=soundPlay; + //engine create + slCreateEngine(&engineObject, 0, 0, 0, 0, 0); + (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE); + (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine); + + const SLInterfaceID mids[1] = {SL_IID_ENVIRONMENTALREVERB}; + const SLboolean mreq[1] = {SL_BOOLEAN_FALSE}; + result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, mids, mreq); + if (SL_RESULT_SUCCESS != result) + return PX_FALSE; + result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE); + if (SL_RESULT_SUCCESS != result) + return PX_FALSE; + result = (*outputMixObject)->GetInterface(outputMixObject, SL_IID_ENVIRONMENTALREVERB, &outputMixEnvironmentalReverb); + if (SL_RESULT_SUCCESS == result) { + result = (*outputMixEnvironmentalReverb)->SetEnvironmentalReverbProperties( + outputMixEnvironmentalReverb, &reverbSettings); + } else + { + return PX_FALSE; + } + SLDataLocator_OutputMix outputMix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject}; + + + SLDataLocator_AndroidSimpleBufferQueue android_queue={SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE,2}; + SLDataFormat_PCM pcm={ + SL_DATAFORMAT_PCM, + 2, + SL_SAMPLINGRATE_44_1,//44100hz + SL_PCMSAMPLEFORMAT_FIXED_16,//16bits + SL_PCMSAMPLEFORMAT_FIXED_16,//16bits + SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT, + SL_BYTEORDER_LITTLEENDIAN + }; + + SLDataSource slDataSource = {&android_queue, &pcm}; + SLDataSink audioSnk = {&outputMix, NULL}; + const SLInterfaceID ids[3] = {SL_IID_BUFFERQUEUE, SL_IID_EFFECTSEND, SL_IID_VOLUME}; + const SLboolean req[3] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; + + result = (*engineEngine)->CreateAudioPlayer(engineEngine, &pcmPlayerObject, &slDataSource, &audioSnk, 3, ids, req); + (*pcmPlayerObject)->Realize(pcmPlayerObject, SL_BOOLEAN_FALSE); + (*pcmPlayerObject)->GetInterface(pcmPlayerObject, SL_IID_PLAY, &pcmPlayerPlay); + + + (*pcmPlayerObject)->GetInterface(pcmPlayerObject, SL_IID_BUFFERQUEUE, &pcmBufferQueue); + (*pcmBufferQueue)->RegisterCallback(pcmBufferQueue, pcmBufferCallBack, NULL); + (*pcmPlayerObject)->GetInterface(pcmPlayerObject, SL_IID_VOLUME, &pcmPlayerVolume); + + (*pcmPlayerPlay)->SetPlayState(pcmPlayerPlay, SL_PLAYSTATE_PLAYING); + + pcmBufferCallBack(pcmBufferQueue, NULL); + return PX_TRUE; +} + + +void PX_AudioSetVolume(unsigned int volume) +{ + (*pcmPlayerVolume)->SetVolumeLevel(pcmPlayerVolume, volume); +} diff --git a/UI/PainterEngine/platform/android/px_display.c b/UI/PainterEngine/platform/android/px_display.c new file mode 100644 index 0000000..04227d7 --- /dev/null +++ b/UI/PainterEngine/platform/android/px_display.c @@ -0,0 +1,220 @@ +#include "px_display.h" + +static const char PX_AndroidEngine_GL_VS[]="attribute vec4 vPosition;attribute vec4 vTex;varying vec2 textureCoordinate;void main(){gl_Position = vPosition;textureCoordinate = vTex.xy;}"; +static const char PX_AndroidEngine_GL_PS[]="precision mediump float;varying highp vec2 textureCoordinate;uniform sampler2D tex;void main(){gl_FragColor = texture2D(tex, textureCoordinate);}"; + +static const GLfloat PX_AndroidEngine_squareVertices[] = { + -1.0f, -1.0f, + 1.0f, -1.0f, + -1.0f, 1.0f, + 1.0f, 1.0f, +}; + +static const GLfloat PX_AndroidEngine_texturePosition[] = { + 0.0f, 1.0f, + 1.0f, 1.0f, + 0.0f, 0.0f, + 1.0f, 0.0f, +}; + + + + +static GLuint PX_AndroidEngine_LoadShader(GLenum type,const px_char *shaderSources) +{ + GLuint shader; + GLint compiled; + + shader=glCreateShader(type); + if(shader==0) return PX_FALSE; + + glShaderSource(shader,1,&shaderSources,PX_NULL); + glCompileShader(shader); + + glGetShaderiv(shader,GL_COMPILE_STATUS,&compiled); + + if(!compiled) + { + glDeleteShader(shader); + return PX_FALSE; + } + return shader; +} + +px_bool PX_AndroidEngine_InitializeDisplay(PX_AndroidEngine *engine) +{ + const int attrib_list[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; + const EGLint attribs[] = { + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_BLUE_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_RED_SIZE, 8, + EGL_NONE + }; + EGLint w, h, format; + EGLint numConfigs; + EGLConfig config; + EGLSurface surface; + EGLContext context; + EGLConfig ConfigsDesc[64]; + px_int i; + GLint linked; + EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); + + + + eglInitialize(display, 0, 0); + eglChooseConfig(display, attribs, PX_NULL,0, &numConfigs); + if(numConfigs>PX_COUNTOF(ConfigsDesc)) + { + numConfigs=PX_COUNTOF(ConfigsDesc); + } + eglChooseConfig(display, attribs,ConfigsDesc, numConfigs, &numConfigs); + + for (i=0; i < numConfigs; i++) + { + EGLint r, g, b, d, a; + if (eglGetConfigAttrib(display, ConfigsDesc[i], EGL_RED_SIZE, &r) && + eglGetConfigAttrib(display, ConfigsDesc[i], EGL_GREEN_SIZE, &g) && + eglGetConfigAttrib(display, ConfigsDesc[i], EGL_BLUE_SIZE, &b) && + eglGetConfigAttrib(display, ConfigsDesc[i], EGL_ALPHA_SIZE, &a)&& + eglGetConfigAttrib(display, ConfigsDesc[i], EGL_DEPTH_SIZE, &d) && + r == 8 && g == 8 && b == 8 &&a == 8&&d==0 ) + { + config = ConfigsDesc[i]; + break; + } + } + + if (i == numConfigs) { + config = ConfigsDesc[0]; + } + + /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is + * guaranteed to be accepted by ANativeWindow_setBuffersGeometry(). + * As soon as we picked a EGLConfig, we can safely reconfigure the + * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */ + eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format); + surface = eglCreateWindowSurface(display, config, engine->pAndroidApp->window, NULL); + context = eglCreateContext(display, config, EGL_NO_CONTEXT, attrib_list); + + if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) + { + return PX_FALSE; + } + + eglQuerySurface(display, surface, EGL_WIDTH, &w); + eglQuerySurface(display, surface, EGL_HEIGHT, &h); + + engine->display = display; + engine->context = context; + engine->surface = surface; + engine->width = w; + engine->height = h; + + // Initialize GL state. + glEnable(GL_CULL_FACE); + glEnable(GL_TEXTURE_2D); + glEnable(GL_TEXTURE0); + glEnable(GL_TEXTURE1); + glDisable(GL_DEPTH_TEST); + + //Initialize GL shader + engine->vertexShader=PX_AndroidEngine_LoadShader(GL_VERTEX_SHADER,PX_AndroidEngine_GL_VS); + if(engine->vertexShader==0) + return PX_FALSE; + engine->pixelsShader=PX_AndroidEngine_LoadShader(GL_FRAGMENT_SHADER,PX_AndroidEngine_GL_PS); + if(engine->pixelsShader==0) + return PX_FALSE; + + engine->programObject=glCreateProgram(); + if(engine->programObject==0) + return PX_FALSE; + + glAttachShader(engine->programObject,engine->vertexShader); + glAttachShader(engine->programObject,engine->pixelsShader); + + glLinkProgram(engine->programObject); + + glGetProgramiv(engine->programObject,GL_LINK_STATUS,&linked); + if(!linked) + { + glDeleteProgram(engine->programObject); + return PX_FALSE; + } + + glGenTextures(1,&engine->renderTexture); + + engine->vPosition=glGetAttribLocation(engine->programObject,"vPosition"); + engine->vTex=glGetAttribLocation(engine->programObject,"vTex"); + + glViewport(0,0,engine->width,engine->height); + + + return PX_TRUE; +} + +px_bool PX_AndroidEngine_FreeDisplay(PX_AndroidEngine *engine) +{ + if (engine->display != EGL_NO_DISPLAY) { + eglMakeCurrent(engine->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + if (engine->context != EGL_NO_CONTEXT) { + eglDestroyContext(engine->display, engine->context); + } + if (engine->surface != EGL_NO_SURFACE) { + eglDestroySurface(engine->display, engine->surface); + } + eglTerminate(engine->display); + } + + engine->display = EGL_NO_DISPLAY; + engine->context = EGL_NO_CONTEXT; + engine->surface = EGL_NO_SURFACE; + + glDetachShader(engine->programObject,engine->vertexShader); + glDetachShader(engine->programObject,engine->pixelsShader); + glDeleteShader(engine->pixelsShader); + glDeleteShader(engine->vertexShader); + glDeleteProgram(engine->programObject); + + return PX_TRUE; +} + +px_void PX_AndroidEngine_Render(PX_AndroidEngine* engine,px_int width,px_int height,px_byte *buffer) { + if (engine->display == NULL) + { + // No display. + return; + } + + //vertex data + glClearColor(0.0f,0.0f,0.0f,1.0f); + glClear (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); + + glUseProgram(engine->programObject); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D,engine->renderTexture); + glTexImage2D(GL_TEXTURE_2D,\ + 0,\ + GL_RGBA,\ + width,\ + height,\ + 0,\ + GL_RGBA,\ + GL_UNSIGNED_BYTE,\ + buffer\ + ); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glUniform1i(glGetAttribLocation(engine->programObject,"tex"), 0); + + glVertexAttribPointer(engine->vPosition, 2, GL_FLOAT, GL_FALSE, 0,PX_AndroidEngine_squareVertices); + glEnableVertexAttribArray(engine->vPosition); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + glVertexAttribPointer(engine->vTex, 2, GL_FLOAT, 0, 0, PX_AndroidEngine_texturePosition); + glEnableVertexAttribArray(engine->vTex); + + eglSwapBuffers(engine->display, engine->surface); +} \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/px_display.h b/UI/PainterEngine/platform/android/px_display.h new file mode 100644 index 0000000..bd95d91 --- /dev/null +++ b/UI/PainterEngine/platform/android/px_display.h @@ -0,0 +1,37 @@ +#ifndef ANDROID_DISPLAY_H +#define ANDROID_DISPLAY_H +// +#include "jni.h" +#include "errno.h" +//opengl es +#include "EGL/egl.h" +#include "GLES3/gl3.h" + +//Android Native activity support +#include "android_native_app_glue.h" + +#include "../../kernel/PX_Object.h" + +typedef struct +{ + struct android_app *pAndroidApp; + EGLDisplay display; + EGLSurface surface; + EGLContext context; + + GLuint vertexShader; + GLuint pixelsShader; + GLuint programObject; + GLuint vPosition; + GLuint vTex; + GLuint renderTexture; + int32_t width; + int32_t height; + + px_bool PainterEngineReady; +}PX_AndroidEngine; + +px_bool PX_AndroidEngine_InitializeDisplay(PX_AndroidEngine *engine); +px_bool PX_AndroidEngine_FreeDisplay(PX_AndroidEngine *engine); +px_void PX_AndroidEngine_Render(PX_AndroidEngine* engine,px_int width,px_int height,px_byte *buffer); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/px_file.c b/UI/PainterEngine/platform/android/px_file.c new file mode 100644 index 0000000..c42abe7 --- /dev/null +++ b/UI/PainterEngine/platform/android/px_file.c @@ -0,0 +1,368 @@ + +#include "../modules/px_file.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include +#include +#include "dirent.h" + +extern AAssetManager* PX_assetManager; + +int PX_SaveDataToFile(void *buffer,int size,const char path[]) +{ + FILE *pf=fopen(path,"wb"); + if (pf) + { + fwrite(buffer,1,size,pf); + fclose(pf); + return 1; + } + return 0; +} + +PX_IO_Data PX_LoadAssetsFileToIOData(const char path[]) +{ + int len; + PX_IO_Data io; + + AAsset* asset = AAssetManager_open(PX_assetManager, path, 0); + if(!asset) goto _ERROR; + + len=AAsset_getLength(asset); + + io.buffer=(unsigned char *)malloc(len+1); + io.size=len; + + AAsset_read(asset, io.buffer, io.size); + + AAsset_close(asset); + return io; + + _ERROR: + io.buffer=0; + io.size=0; + return io; +} + +PX_IO_Data PX_LoadFileToIOData(const char path[]) +{ + if (memcmp(path,"assets/",7)==0) + { + return PX_LoadAssetsFileToIOData(path+7); + } + else + { + PX_IO_Data io; + int fileoft=0; + FILE *pf=fopen(path,"rb"); + int filesize; + if (!pf) + { + goto _ERROR; + } + fseek(pf,0,SEEK_END); + filesize=ftell(pf); + fseek(pf,0,SEEK_SET); + + io.buffer=(unsigned char *)malloc(filesize+1); + if (!io.buffer) + { + goto _ERROR; + } + + while (!feof(pf)) + { + fileoft+=(int)fread(io.buffer+fileoft,1,1024,pf); + } + fclose(pf); + + io.buffer[filesize]='\0'; + io.size=filesize; + return io; +_ERROR: + io.buffer=0; + io.size=0; + return io; + } +} + +void PX_FreeIOData(PX_IO_Data *io) +{ + if (io->size&&io->buffer) + { + free(io->buffer); + io->size=0; + io->buffer=0; + } +} + +int PX_FileExist(const char path[]) +{ + FILE *pf= fopen(path,"rb"); + if (pf) + { + fclose(pf); + return 1; + } + return 0; +} + + + + +int PX_FileGetDirectoryFileCount(const char path[],PX_FILEENUM_TYPE type,const char *filter) +{ + struct dirent* ent = NULL; + int count=0; + DIR *pDir; + char oPath[260]={0}; + if(path[0]==0) + { + if(type==PX_FILEENUM_TYPE_FOLDER) + return 1; + return 0; + } + + + if( (pDir=opendir(path)) == NULL) + { + int err=errno; + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + count++; + } + } + break; + case PX_FILEENUM_TYPE_FILE: + { + if (ent->d_type==DT_REG) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (ent->d_type==DT_DIR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + { + if (ent->d_type==DT_CHR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + default: + break; + } + } + closedir(pDir); + return count; +} + +int PX_FileGetDirectoryFileName(const char path[],int count,char FileName[][260],PX_FILEENUM_TYPE type,const char *filter) +{ + struct dirent* ent = NULL; + int index=0; + DIR *pDir; + + if(path[0]==0) + { + if(type==PX_FILEENUM_TYPE_FOLDER) + { + strcpy(FileName[0],"/sdcard"); + return 1; + } + return 0; + //strcat(oPath,"/sdcard"); + } + if( (pDir=opendir(path)) == NULL) + { + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + if (index>=count) + { + return index; + } + + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + strcpy(FileName[index],ent->d_name); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index],ent->d_name); + index++; + } + } + break; + case PX_FILEENUM_TYPE_FILE: + { + if (ent->d_type==DT_REG) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + strcpy(FileName[index],ent->d_name); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index],ent->d_name); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (ent->d_type==DT_DIR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + strcpy(FileName[index],ent->d_name); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index],ent->d_name); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + { + if (ent->d_type==DT_CHR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + strcpy(FileName[index],ent->d_name); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index],ent->d_name); + index++; + } + } + } + break; + default: + break; + } + } + closedir(pDir); + return index; +} diff --git a/UI/PainterEngine/platform/android/px_main.c b/UI/PainterEngine/platform/android/px_main.c new file mode 100644 index 0000000..1dfc874 --- /dev/null +++ b/UI/PainterEngine/platform/android/px_main.c @@ -0,0 +1,163 @@ +//PainterEngine framework +#include "PainterEngine_Application.h" + + +// +#include "jni.h" +#include "errno.h" + +//Android Native activity support +#include "android_native_app_glue.h" + +#include "platform/modules/px_time.h" +#include "px_display.h" +#include "kernel/PX_Object.h" + +static PX_AndroidEngine engine; +volatile px_bool main_exit=0; +static px_int PX_AndroidEngine_Input(struct android_app* app, AInputEvent* event) { + PX_AndroidEngine* engine = (PX_AndroidEngine*)app->userData; + px_int32 EventType=AInputEvent_getType(event); + px_int32 EventCount=AMotionEvent_getPointerCount(event); + px_int32 action=AMotionEvent_getAction(event); + px_float cursorx_scale,cursory_scale; + px_int i; + px_float x,y; + PX_Object_Event e; + if(!engine->PainterEngineReady) return 0; + cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; + cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; + switch (action&AMOTION_EVENT_ACTION_MASK) + { + case AMOTION_EVENT_ACTION_MOVE: + { + for (i = 0; i < EventCount; ++i) + { + x=AMotionEvent_getX(event, i); + y=AMotionEvent_getY(event, i); + e.Event=PX_OBJECT_EVENT_CURSORDRAG; + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursory_scale); + PX_Object_Event_SetCursorIndex(&e,(action&AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)>>8); + PX_ApplicationPostEvent(&App,e); + } + } + break; + case AMOTION_EVENT_ACTION_POINTER_DOWN: + case AMOTION_EVENT_ACTION_DOWN: + { + for (i = 0; i < EventCount; ++i) + { + x=AMotionEvent_getX(event, i); + y=AMotionEvent_getY(event, i); + e.Event=PX_OBJECT_EVENT_CURSORDOWN; + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursory_scale); + PX_Object_Event_SetCursorIndex(&e,(action&AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)>>8); + PX_ApplicationPostEvent(&App,e); + } + } + break; + case AMOTION_EVENT_ACTION_POINTER_UP: + case AMOTION_EVENT_ACTION_UP: + { + for (i = 0; i < EventCount; ++i) + { + x=AMotionEvent_getX(event, i); + y=AMotionEvent_getY(event, i); + e.Event=PX_OBJECT_EVENT_CURSORUP; + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursory_scale); + PX_Object_Event_SetCursorIndex(&e,(action&AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)>>8); + PX_ApplicationPostEvent(&App,e); + } + } + break; + } + + return 0; +} + +void PX_AndroidEngine_CMD(struct android_app* app, int32_t cmd) +{ + PX_AndroidEngine* engine = (PX_AndroidEngine*)app->userData; + switch (cmd) + { + case APP_CMD_SAVE_STATE: + break; + case APP_CMD_INIT_WINDOW: + if (engine->pAndroidApp->window != NULL) + { + //PainterEngine Initialize + PX_AndroidEngine_InitializeDisplay(engine); + if(!engine->PainterEngineReady) + { + if(!PX_ApplicationInitialize(&App,engine->width,engine->height)) return ; + App.runtime.window_width=engine->width; + App.runtime.window_height=engine->height; + } + else + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_WINDOWRESIZE; + PX_Object_Event_SetWidth(&e,engine->width); + PX_Object_Event_SetHeight(&e,engine->height); + PX_ApplicationPostEvent(&App,e); + } + engine->PainterEngineReady=PX_TRUE; + } + + break; + case APP_CMD_TERM_WINDOW: + PX_AndroidEngine_FreeDisplay(engine); + break; + case APP_CMD_GAINED_FOCUS: + break; + case APP_CMD_LOST_FOCUS: + break; + } +} + + +ANativeActivity* PX_nativeActivity=PX_NULL; +AAssetManager* PX_assetManager=PX_NULL; + +void android_main(struct android_app *pApp) +{ + + px_dword lastUpdateTime,elpased; + int events; + struct android_poll_source *pSource; + pApp->userData=&engine; + pApp->onAppCmd = PX_AndroidEngine_CMD; + pApp->onInputEvent = PX_AndroidEngine_Input; + engine.pAndroidApp=pApp; + PX_nativeActivity = pApp->activity; + PX_assetManager = PX_nativeActivity->assetManager; + + + lastUpdateTime=PX_TimeGetTime(); + do + { + while (ALooper_pollAll(0, PX_NULL, &events, (void **) &pSource) >= 0) + { + if (pSource) + { + pSource->process(pApp, pSource); + if (pApp->destroyRequested != 0) { + PX_AndroidEngine_FreeDisplay(&engine); + return; + } + } + } + if(engine.PainterEngineReady) + { + elpased=PX_TimeGetTime()-lastUpdateTime; + lastUpdateTime=PX_TimeGetTime(); + PX_ApplicationUpdate(&App,elpased); + PX_ApplicationRender(&App,elpased); + } + + PX_AndroidEngine_Render(&engine,App.runtime.surface_width,App.runtime.surface_height,(px_byte *)App.runtime.RenderSurface.surfaceBuffer); + } while (!pApp->destroyRequested&&!main_exit); +} diff --git a/UI/PainterEngine/platform/android/px_serialport.c b/UI/PainterEngine/platform/android/px_serialport.c new file mode 100644 index 0000000..470d337 --- /dev/null +++ b/UI/PainterEngine/platform/android/px_serialport.c @@ -0,0 +1,167 @@ +#include "../modules/px_serialport.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include +#include +#include +#include +#include "dirent.h" + +const char* PX_SerialPortEnumComName(int index) +{ + struct dirent* ent = 0; + int count=0; + DIR *pDir; + static char COMName[260]; + + if( (pDir=opendir("/dev")) == NULL) + { + int err=errno; + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + if (count==index) + { + closedir(pDir); + COMName[0]=0; + strcpy(COMName, "/dev/"); + strcpy(COMName, ent->d_name); + return COMName; + } + } + closedir(pDir); + return 0; +} +const int PX_SerialPortReset(PX_SerialPort *com,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) +{ + struct termios newtio; + memset( &newtio, 0,sizeof( newtio ) ); + newtio.c_cflag |= CLOCAL | CREAD; + newtio.c_cflag &= ~CSIZE; + + switch( DataBits ) + { + case 5: + newtio.c_cflag |= CS5; + break; + case 6: + newtio.c_cflag |= CS6; + break; + case 7: + newtio.c_cflag |= CS7; + break; + case 8: + newtio.c_cflag |= CS8; + break; + default: + break; + } + + switch( ParityType ) + { + case 'O': + newtio.c_cflag |= PARENB; + newtio.c_cflag |= PARODD; + newtio.c_iflag |= (INPCK | ISTRIP); + break; + case 'E': + newtio.c_iflag |= (INPCK | ISTRIP); + newtio.c_cflag |= PARENB; + newtio.c_cflag &= ~PARODD; + break; + case 'N': + newtio.c_cflag &= ~PARENB; + break; + } + + switch( baudRate ) + { + case 2400: + cfsetispeed(&newtio, B2400); + cfsetospeed(&newtio, B2400); + break; + case 4800: + cfsetispeed(&newtio, B4800); + cfsetospeed(&newtio, B4800); + break; + case 9600: + cfsetispeed(&newtio, B9600); + cfsetospeed(&newtio, B9600); + break; + case 115200: + cfsetispeed(&newtio, B115200); + cfsetospeed(&newtio, B115200); + break; + case 460800: + cfsetispeed(&newtio, B460800); + cfsetospeed(&newtio, B460800); + break; + default: + cfsetispeed(&newtio, B9600); + cfsetospeed(&newtio, B9600); + break; + } + + if( stopBit == 1 ) + newtio.c_cflag &= ~CSTOPB; + else if ( stopBit == 2 ) + newtio.c_cflag |= CSTOPB; + + newtio.c_cc[VTIME] = 0; + newtio.c_cc[VMIN] = 0; + tcflush(com->Handle,TCIFLUSH); + if((tcsetattr(com->Handle,TCSANOW,&newtio))!=0) + { + return 0; + } + return 1; +} +const int PX_SerialPortInitialize(PX_SerialPort *com,const char *name,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) +{ + + com->BaudRate=baudRate; + com->DataBits=DataBits; + com->ParityType=ParityType; + com->StopBit=stopBit; + + com->Handle = open(name, O_RDWR | O_NOCTTY); + if(com->Handle < 0) + { + return 0; + } + + if(!PX_SerialPortReset(com,baudRate,DataBits,ParityType,stopBit)) + { + close(com->Handle); + return 0; + } + return 1; + +} + +const int PX_SerialPortWrite(PX_SerialPort *com,void *data,int size) +{ + if (com->Handle!=0) + { + return write(com->Handle,data,size); + } + return 0; +} +const int PX_SerialPortRead(PX_SerialPort *com,void *data,int size) +{ + if (com->Handle!=0) + { + return read(com->Handle,data,size); + } + return 0; +} +void PX_SerialPortClose(PX_SerialPort *com) +{ + if (com->Handle!=0) + { + close(com->Handle); + } +} \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/px_tcp.c b/UI/PainterEngine/platform/android/px_tcp.c new file mode 100644 index 0000000..a958df2 --- /dev/null +++ b/UI/PainterEngine/platform/android/px_tcp.c @@ -0,0 +1,150 @@ + +#include "../modules/px_tcp.h" +//GNU C +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type) +{ + int err; + int nZero=0; + int nRecvBuf=1024*1024*2; + int nSendBuf=1024*1024*2; + int optval=1; + int imode=1,rev; + tcp->type=type; + + if ((tcp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_TCP))==-1) + { + err = errno; + return 0; + } + + rev=ioctl(tcp->socket,FIONBIO,(u_long *)&imode); + setsockopt(tcp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + setsockopt(tcp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); + + if(rev == -1) + { + close(tcp->socket); + return 0; + } + + return 1; +} + +int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr) +{ + struct sockaddr_in to; + int ret; + to.sin_family=AF_INET; + to.sin_addr.s_addr=addr.ipv4; + to.sin_port=(addr.port); + + ret=connect(tcp->socket,(const struct sockaddr *)&to,sizeof(to)); + if (ret==0) + { + tcp->connectAddr=addr; + } + return ret; +} + +int PX_TCPSend(PX_TCP *tcp,void *buffer,int size) +{ + int length; + switch(tcp->type) + { + case PX_TCP_IP_TYPE_IPV4: + { + while(size>0) + { + if ((length=send(tcp->socket,(const char *)buffer,size,0))==-1) + { + return 0; + } + size-=length; + } + return 1; + } + break; + case PX_TCP_IP_TYPE_IPV6: + { + return 0; + } + break; + } + return 0; +} + +int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout) +{ + size_t ReturnSize; + struct timeval stimeout= {0,timeout*1000}; + setsockopt(tcp->socket,SOL_SOCKET,SO_SNDTIMEO,(int *)&stimeout,(socklen_t)sizeof(struct timeval)); + + switch (tcp->type) + { + case PX_TCP_IP_TYPE_IPV4: + { + int SockAddrSize=sizeof(struct sockaddr_in); + if((ReturnSize=recv(tcp->socket,(char *)buffer,buffersize,0))!=-1) + { + return ReturnSize;; + } + else + return 0; + } + break; + case PX_TCP_IP_TYPE_IPV6: + { + return 0; + } + break; + } + return 0; +} + +int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr) +{ + struct sockaddr sockaddr; + int len; + *socket=accept(tcp->socket,(struct sockaddr *)&sockaddr,(socklen_t *)&len); + return *socket!=-1; +} + + +void PX_TCPFree(PX_TCP *tcp) +{ + close(tcp->socket); +} + + +int PX_TCPListen(PX_TCP *tcp,unsigned short listen_Port) +{ + struct sockaddr_in addrin; + addrin.sin_family=AF_INET; + addrin.sin_addr.s_addr=INADDR_ANY; + addrin.sin_port=(listen_Port); + + if (bind(tcp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) + { + close(tcp->socket); + return 0; + } + return 1; +} + +PX_TCP_ADDR PX_TCP_ADDR_IPV4(unsigned int ipv4,unsigned short port) +{ + PX_TCP_ADDR addr; + addr.ipv4=ipv4; + addr.port=port; + return addr; +} diff --git a/UI/PainterEngine/platform/android/px_thread.c b/UI/PainterEngine/platform/android/px_thread.c new file mode 100644 index 0000000..4e4be7c --- /dev/null +++ b/UI/PainterEngine/platform/android/px_thread.c @@ -0,0 +1,19 @@ +#include "../modules/px_thread.h" +#include +#include + +void *PX_ThreadRun(void *ptr) +{ + px_thread *pthread=(px_thread *)ptr; + pthread->isRun=1; + pthread->pfunc(pthread->userptr); + pthread->isRun=0; + return 0; +} + + +int PX_ThreadCreate(px_thread *pthread,func_thread func,void *ptr) +{ + pthread_t t; + return pthread_create( &t, NULL, PX_ThreadRun, pthread)==0; +} diff --git a/UI/PainterEngine/platform/android/px_time.c b/UI/PainterEngine/platform/android/px_time.c new file mode 100644 index 0000000..3bb2fed --- /dev/null +++ b/UI/PainterEngine/platform/android/px_time.c @@ -0,0 +1,77 @@ +#include "../modules/px_time.h" +#include "time.h" +#include +unsigned int PX_TimeGetTime() +{ + unsigned int uptime = 0; + struct timespec on; + if(clock_gettime(CLOCK_MONOTONIC, &on) == 0) + uptime = on.tv_sec*1000 + on.tv_nsec/1000000; + return uptime; +} + +int PX_TimeGetYear() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_year; +} + +int PX_TimeGetMouth() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_year; +} + +int PX_TimeGetDay() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_mon; +} + +int PX_TimeGetHour() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_hour; +} + +int PX_TimeGetMinute() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_min; +} + +int PX_TimeGetSecond() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_sec; +} + +void PX_Sleep(unsigned int ms) +{ + usleep(ms*1000); +} + diff --git a/UI/PainterEngine/platform/android/px_udp.c b/UI/PainterEngine/platform/android/px_udp.c new file mode 100644 index 0000000..93e6161 --- /dev/null +++ b/UI/PainterEngine/platform/android/px_udp.c @@ -0,0 +1,158 @@ + +#include "../modules/px_udp.h" +//GNU C +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type) +{ + int err; + int nZero=0; + int nRecvBuf=1024*1024*2; + int nSendBuf=1024*1024*2; + int optval=1; + int imode=1,rev; + udp->type=type; + + if ((udp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) + { + err = errno; + return 0; + } + + rev=ioctl(udp->socket,FIONBIO,(u_long *)&imode); + setsockopt(udp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + setsockopt(udp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); + + if(rev == -1) + { + close(udp->socket); + return 0; + } + + if (setsockopt(udp->socket,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(int))==-1) + { + close(udp->socket); + return 0; + } + return 1; +} + +int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size) +{ + + int length; + switch(udp->type) + { + case PX_UDP_IP_TYPE_IPV4: + { + struct sockaddr_in to; + to.sin_family=AF_INET; + to.sin_addr.s_addr=addr.ipv4; + to.sin_port=(addr.port); + while(size>0) + { + if ((length=sendto(udp->socket,(const char *)buffer,size,0,(struct sockaddr *)&to,sizeof(struct sockaddr)))==-1) + { + return 0; + } + size-=length; + } + return 1; + } + break; + case PX_UDP_IP_TYPE_IPV6: + { +// sockaddr_in6 to; +// to.sin6_family=AF_INET6; +// to.sin6_port=htons(addr.port); +// px_memcpy(to.sin6_addr,addr.ipv6,sizeof(addr.ipv6)); +// while(size>0) +// { +// if ((length=sendto(udp->socket,(const char *)buffer,size,0,(LPSOCKADDR)&to,sizeof(sockaddr_in6)))==-1) +// { +// return 0; +// } +// size-=length; +// } +// return 1; + } + break; + } + return 0; +} + +int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize) +{ + size_t ReturnSize; + switch (udp->type) + { + case PX_UDP_IP_TYPE_IPV4: + { + struct sockaddr_in in; + socklen_t SockAddrSize=sizeof(struct sockaddr); + if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(struct sockaddr *)&in,&SockAddrSize))!=-1) + { + from_addr->ipv4=in.sin_addr.s_addr; + from_addr->port=in.sin_port; + *readsize=ReturnSize; + return 1; + } + else + return 0; + } + break; + case PX_UDP_IP_TYPE_IPV6: + { +// sockaddr_in6 in; +// int SockAddrSize=sizeof(SOCKADDR); +// if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(LPSOCKADDR)&in,&SockAddrSize))!=-1) +// { +// px_memcpy(from_addr->ipv6,in.sin6_addr,sizeof(from_addr->ipv6)); +// from_addr->port=in.sin_port; +// *readsize=ReturnSize; +// return 1; +// } +// else +// return 0; + } + break; + } + return 0; +} + +void PX_UDPFree(PX_UDP *udp) +{ + close(udp->socket); +} + + +int PX_UDPListen(PX_UDP *udp,unsigned short listen_Port) +{ + struct sockaddr_in addrin; + addrin.sin_family=AF_INET; + addrin.sin_addr.s_addr=INADDR_ANY; + addrin.sin_port=(listen_Port); + + if (bind(udp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) + { + close(udp->socket); + return 0; + } + return 1; +} + +PX_UDP_ADDR PX_UDP_ADDR_IPV4(unsigned int ipv4,unsigned short port) +{ + PX_UDP_ADDR addr; + addr.ipv4=ipv4; + addr.port=port; + return addr; +} diff --git a/UI/PainterEngine/platform/linux/makefile b/UI/PainterEngine/platform/linux/makefile new file mode 100644 index 0000000..709ec5d --- /dev/null +++ b/UI/PainterEngine/platform/linux/makefile @@ -0,0 +1,51 @@ +#mingw32-64 makefile +##################################################### +target :=PainterEngine +project_path := ../../project +painterengine_path := ../.. +##################################################### + +project_build := $(wildcard $(project_path)/*.c) +project_build_o := $(patsubst %.c,%.o,$(project_build)) + +painterengine_build_core := $(wildcard $(painterengine_path)/core/*.c) +painterengine_build_painterengine_o := $(patsubst %.c,%.o,$(painterengine_build_core)) + +painterengine_build_kernel := $(wildcard $(painterengine_path)/kernel/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_kernel)) + +painterengine_build_architecture := $(wildcard $(painterengine_path)/architecture/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_architecture)) + +painterengine_build_platform := $(wildcard $(painterengine_path)/platform/linux/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_platform)) + +painterengine_build_platform := $(wildcard $(painterengine_path)/platform/linux/*.cpp) +painterengine_build_painterengine_o += $(patsubst %.cpp,%.o,$(painterengine_build_platform)) + +all:$(project_build_o) $(painterengine_build_painterengine_o) + gcc $(project_build_o) $(painterengine_build_painterengine_o) \ + -o $(target) \ + -I "$(painterengine_path)" \ + -I "$(project_path)" \ + -I "$(painterengine_path)/platform/linux" \ + -L. -lGL -lglut -lpthread + + +$(project_path)/%.o:$(project_path)/%.c + gcc -c $^ -o $@ -I "$(painterengine_path)" -I "$(painterengine_path)/platform/linux" + +$(painterengine_path)/architecture/%.o:$(painterengine_path)/architecture/%.c + gcc -c $^ -o $@ -I "$(painterengine_path)" + +$(painterengine_path)/kernel/%.o:$(painterengine_path)/kernel/%.c + gcc -c $^ -o $@ + +$(painterengine_path)/core/%.o:$(painterengine_path)/core/%.c + gcc -c $^ -o $@ + +$(painterengine_path)/platform/linux/%.o:$(painterengine_path)/platform/linux/%.c + gcc -c $^ -o $@ -I "$(project_path)" -I "$(painterengine_path)" -I "$(painterengine_path)/platform/linux" + + + diff --git a/UI/PainterEngine/platform/linux/px_display.c b/UI/PainterEngine/platform/linux/px_display.c new file mode 100644 index 0000000..979c491 --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_display.c @@ -0,0 +1,33 @@ +#include "px_display.h" +unsigned int rendertexture; + +int PX_CreateWindow(int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name) +{ + glutInitWindowSize(windowWidth, windowHeight); + glutCreateWindow(name); + glGenTextures(1,&rendertexture); + glBindTexture(GL_TEXTURE_2D, rendertexture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + return 1; +} + +int PX_GetScreenHeight() +{ + return glutGet(GLUT_SCREEN_HEIGHT); +} + +int PX_GetScreenWidth() +{ + return glutGet(GLUT_SCREEN_WIDTH); +} + +int PX_SystemLoop() +{ + glutMainLoop(); + return 1; +} + + diff --git a/UI/PainterEngine/platform/linux/px_display.h b/UI/PainterEngine/platform/linux/px_display.h new file mode 100644 index 0000000..e56980d --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_display.h @@ -0,0 +1,9 @@ +#ifndef PX_DISPLAY_H +#define PX_DISPLAY_H +#include + +int PX_CreateWindow( int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name); +int PX_GetScreenHeight(); +int PX_GetScreenWidth(); +int PX_SystemLoop(); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/linux/px_file.c b/UI/PainterEngine/platform/linux/px_file.c new file mode 100644 index 0000000..46f55d5 --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_file.c @@ -0,0 +1,311 @@ + +#include "../modules/px_file.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include +#include "dirent.h" + +int PX_SaveDataToFile(void *buffer, int size, const char path[]) +{ + FILE *pf=fopen(path, "rb"); + if (pf) + { + fwrite(buffer, 1, size, pf); + fclose(pf); + return 1; + } + return 0; +} + + +PX_IO_Data PX_LoadFileToIOData(const char path[]) +{ + + PX_IO_Data io; + int fileoft=0; + FILE *pf=fopen(path, "rb"); + int filesize; + if (!pf) + { + goto _ERROR; + } + fseek(pf, 0, SEEK_END); + filesize=ftell(pf); + fseek(pf, 0, SEEK_SET); + + io.buffer=(unsigned char *)malloc(filesize+1); + if (!io.buffer) + { + goto _ERROR; + } + + while (!feof(pf)) + { + fileoft += (int)fread(io.buffer+fileoft, 1, 1024, pf); + } + fclose(pf); + + io.buffer[filesize]='\0'; + io.size=filesize; + return io; + _ERROR: + io.buffer=0; + io.size=0; + return io; +} + +void PX_FreeIOData(PX_IO_Data *io) +{ + if (io->size&&io->buffer) + { + free(io->buffer); + io->size=0; + io->buffer=0; + } +} + +int PX_FileExist(const char path[]) +{ + FILE *pf= fopen(path, "rb"); + if (pf) + { + fclose(pf); + return 1; + } + return 0; +} + + + + +int PX_GetDirectoryFileCount(const char path[], PX_FILEENUM_TYPE type, const char *filter) +{ + struct dirent* ent = NULL; + int count=0; + DIR *pDir; + + if( (pDir=opendir(path)) == NULL) + { + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + count++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + count++; + } + } + break; + case PX_FILEENUM_TYPE_FILE: + { + if (ent->d_type == DT_REG) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + count++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (ent->d_type == DT_DIR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + count++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + { + if (ent->d_type == DT_CHR) + { + if (filter&&filter[0]) + { + if (strstr(ent->d_name, filter)) + { + count++; + } + } else + { + count++; + } + } + } + break; + default: + break; + } + } + closedir(pDir); + return count; +} + +int PX_GetDirectoryFileName(const char path[], int count, char *FileName[260], PX_FILEENUM_TYPE type, const char *filter) +{ + struct dirent* ent = NULL; + int index=0; + DIR *pDir; + + if( (pDir=opendir(path)) == NULL) + { + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + if (index>=count) + { + return index; + } + + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + strcpy(FileName[index], ent->d_name); + index++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index], ent->d_name); + index++; + } + } + break; + case PX_FILEENUM_TYPE_FILE: + { + if (ent->d_type == DT_REG) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + strcpy(FileName[index], ent->d_name); + index++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index], ent->d_name); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (ent->d_type == DT_DIR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + strcpy(FileName[index], ent->d_name); + index++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index], ent->d_name); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + { + if (ent->d_type == DT_CHR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + strcpy(FileName[index], ent->d_name); + index++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index], ent->d_name); + index++; + } + } + } + break; + default: + break; + } + } + closedir(pDir); + return index; +} diff --git a/UI/PainterEngine/platform/linux/px_main.c b/UI/PainterEngine/platform/linux/px_main.c new file mode 100644 index 0000000..dec1256 --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_main.c @@ -0,0 +1,147 @@ +//Platform supports +#include "platform/linux/px_display.h" +#include "PainterEngine_Application.h" +static px_dword lastupdatetime; + +extern unsigned int rendertexture; +static px_int windowWidth; +static px_int windowHeight; + +px_void PX_glutDisplayResize(px_int width,px_int height) +{ + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_WINDOWRESIZE; + PX_Object_Event_SetWidth(&e,width); + PX_Object_Event_SetHeight(&e,height); + PX_ApplicationPostEvent(&App,e); +} + +void PX_glutDisplayFunction(void) +{ + px_dword elpased; + px_dword timenow; + px_surface *pRenderSurface=&App.runtime.RenderSurface; + + timenow=glutGet(GLUT_ELAPSED_TIME); + elpased=timenow-lastupdatetime; + lastupdatetime=timenow; + PX_ApplicationUpdate(&App,elpased); + PX_ApplicationRender(&App,elpased); + glClear(GL_COLOR_BUFFER_BIT); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pRenderSurface->width, pRenderSurface->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pRenderSurface->surfaceBuffer); + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 0.0); + glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0); + glTexCoord2f(1.0, 1.0); glVertex3f(1.0, -1.0, 0.0); + glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 0.0); + glEnd(); + + glutSwapBuffers(); +} +px_void PX_glutOnAnyKeyDown(int key,px_int x,px_int y) +{ + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_KEYDOWN; + PX_Object_Event_SetKeyDown(&e,key); + PX_ApplicationPostEvent(&App,e); +} +px_void PX_glutOnAnsiKeyDown(px_uchar key,px_int x,px_int y) +{ + PX_Object_Event e; + px_char str[2]={0}; + e.Event=PX_OBJECT_EVENT_KEYDOWN; + PX_Object_Event_SetKeyDown(&e,key); + PX_ApplicationPostEvent(&App,e); + str[0]=key; + e.Event=PX_OBJECT_EVENT_STRING; + PX_Object_Event_SetStringPtr(&e,str); + PX_ApplicationPostEvent(&App,e); +} + +px_void PX_glutOnMouseEvent(int button,int state,int x,int y) +{ + PX_Object_Event e; + px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; + px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; + switch(button) + { + case GLUT_LEFT_BUTTON: + { + if (state==GLUT_DOWN) + { + e.Event=PX_OBJECT_EVENT_CURSORDOWN; + } + else + { + e.Event=PX_OBJECT_EVENT_CURSORUP; + } + } + break; + case GLUT_RIGHT_BUTTON: + { + if (state==GLUT_DOWN) + { + e.Event=PX_OBJECT_EVENT_CURSORRDOWN; + } + else + { + e.Event=PX_OBJECT_EVENT_CURSORRUP; + } + } + break; + default: + break; + } + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursorx_scale); + PX_ApplicationPostEvent(&App,e); +} +px_void PX_glutOnMouseDragEvent(int x,int y) +{ + PX_Object_Event e; + px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; + px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; + e.Event=PX_OBJECT_EVENT_CURSORDRAG; + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursorx_scale); + PX_ApplicationPostEvent(&App,e); +} +px_void PX_glutOnMouseMoveEvent(int x,int y) +{ + PX_Object_Event e; + px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; + px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; + e.Event=PX_OBJECT_EVENT_CURSORMOVE; + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursorx_scale); + PX_ApplicationPostEvent(&App,e); +} + + +int main(int argc,char **argv) +{ + glutInit(&argc,argv); + glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA ); + + PX_srand(314159); + if(!PX_ApplicationInitialize(&App,PX_GetScreenWidth(),PX_GetScreenHeight()))return 0; + if(!PX_CreateWindow(App.runtime.surface_width,App.runtime.surface_height,App.runtime.window_width,App.runtime.window_height,PX_APPLICATION_NAME)) + { + return 0; + } + windowWidth=App.runtime.window_width; + windowHeight=App.runtime.window_height; + + lastupdatetime=glutGet(GLUT_ELAPSED_TIME); + glutDisplayFunc(PX_glutDisplayFunction); + glutIdleFunc(PX_glutDisplayFunction); + glutReshapeFunc(PX_glutDisplayResize); + glutMouseFunc(PX_glutOnMouseEvent); + glutMotionFunc(PX_glutOnMouseDragEvent); + glutPassiveMotionFunc(PX_glutOnMouseMoveEvent); + glutKeyboardFunc(PX_glutOnAnsiKeyDown); + glutSpecialFunc(PX_glutOnAnyKeyDown); + PX_SystemLoop(); + return 0; +} \ No newline at end of file diff --git a/UI/PainterEngine/platform/linux/px_serialport.c b/UI/PainterEngine/platform/linux/px_serialport.c new file mode 100644 index 0000000..33377e2 --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_serialport.c @@ -0,0 +1,167 @@ +#include "../modules/px_serialport.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include +#include +#include +#include +#include "dirent.h" + +const char* PX_SerialPortEnumComName(int index) +{ + struct dirent* ent = 0; + int count=0; + DIR *pDir; + static char COMName[260]; + + if( (pDir=opendir("/dev")) == NULL) + { + int err=errno; + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + if (count==index) + { + closedir(pDir); + COMName[0]=0; + strcpy(COMName, "/dev/"); + strcpy(COMName, ent->d_name); + return COMName; + } + } + closedir(pDir); + return 0; +} +const int PX_SerialPortReset(PX_SerialPort *com,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) +{ + struct termios newtio; + memset( &newtio, 0,sizeof( newtio ) ); + newtio.c_cflag |= CLOCAL | CREAD; + newtio.c_cflag &= ~CSIZE; + + switch( DataBits ) + { + case 5: + newtio.c_cflag |= CS5; + break; + case 6: + newtio.c_cflag |= CS6; + break; + case 7: + newtio.c_cflag |= CS7; + break; + case 8: + newtio.c_cflag |= CS8; + break; + default: + break; + } + + switch( ParityType ) + { + case 'O': + newtio.c_cflag |= PARENB; + newtio.c_cflag |= PARODD; + newtio.c_iflag |= (INPCK | ISTRIP); + break; + case 'E': + newtio.c_iflag |= (INPCK | ISTRIP); + newtio.c_cflag |= PARENB; + newtio.c_cflag &= ~PARODD; + break; + case 'N': + newtio.c_cflag &= ~PARENB; + break; + } + + switch( baudRate ) + { + case 2400: + cfsetispeed(&newtio, B2400); + cfsetospeed(&newtio, B2400); + break; + case 4800: + cfsetispeed(&newtio, B4800); + cfsetospeed(&newtio, B4800); + break; + case 9600: + cfsetispeed(&newtio, B9600); + cfsetospeed(&newtio, B9600); + break; + case 115200: + cfsetispeed(&newtio, B115200); + cfsetospeed(&newtio, B115200); + break; + case 460800: + cfsetispeed(&newtio, B460800); + cfsetospeed(&newtio, B460800); + break; + default: + cfsetispeed(&newtio, B9600); + cfsetospeed(&newtio, B9600); + break; + } + + if( stopBit == 1 ) + newtio.c_cflag &= ~CSTOPB; + else if ( stopBit == 2 ) + newtio.c_cflag |= CSTOPB; + + newtio.c_cc[VTIME] =0; + newtio.c_cc[VMIN] = 0; + tcflush(com->Handle,TCIFLUSH); + if((tcsetattr(com->Handle,TCSANOW,&newtio))!=0) + { + return 0; + } + return 1; +} +const int PX_SerialPortInitialize(PX_SerialPort *com,const char *name,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) +{ + + com->BaudRate=baudRate; + com->DataBits=DataBits; + com->ParityType=ParityType; + com->StopBit=stopBit; + + com->Handle = open(name, O_RDWR | O_NOCTTY); + if(com->Handle < 0) + { + return 0; + } + + if(!PX_SerialPortReset(com,baudRate,DataBits,ParityType,stopBit)) + { + close(com->Handle); + return 0; + } + return 1; + +} + +const int PX_SerialPortWrite(PX_SerialPort *com,void *data,int size) +{ + if (com->Handle!=0) + { + return write(com->Handle,data,size); + } + return 0; +} +const int PX_SerialPortRead(PX_SerialPort *com,void *data,int size) +{ + if (com->Handle!=0) + { + return read(com->Handle,data,size); + } + return 0; +} +void PX_SerialPortClose(PX_SerialPort *com) +{ + if (com->Handle!=0) + { + close(com->Handle); + } +} \ No newline at end of file diff --git a/UI/PainterEngine/platform/linux/px_tcp.c b/UI/PainterEngine/platform/linux/px_tcp.c new file mode 100644 index 0000000..0c1faad --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_tcp.c @@ -0,0 +1,149 @@ + +#include "../modules/px_tcp.h" +//GNU C +#include +#include +#include +#include +#include +#include +#include +#include + +int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type) +{ + int err; + int nZero=0; + int nRecvBuf=1024*1024*2; + int nSendBuf=1024*1024*2; + int optval=1; + int imode=1,rev; + tcp->type=type; + + if ((tcp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_TCP))==-1) + { + err = errno; + return 0; + } + + rev=ioctl(tcp->socket,FIONBIO,(u_long *)&imode); + setsockopt(tcp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + setsockopt(tcp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); + + if(rev == -1) + { + close(tcp->socket); + return 0; + } + + return 1; +} + +int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr) +{ + struct sockaddr_in to; + int ret; + to.sin_family=AF_INET; + to.sin_addr.s_addr=addr.ipv4; + to.sin_port=(addr.port); + + ret=connect(tcp->socket,(const struct sockaddr *)&to,sizeof(to)); + if (ret==0) + { + tcp->connectAddr=addr; + } + return ret; +} + +int PX_TCPSend(PX_TCP *tcp,void *buffer,int size) +{ + int length; + switch(tcp->type) + { + case PX_TCP_IP_TYPE_IPV4: + { + while(size>0) + { + if ((length=send(tcp->socket,(const char *)buffer,size,0))==-1) + { + return 0; + } + size-=length; + } + return 1; + } + break; + case PX_TCP_IP_TYPE_IPV6: + { + return 0; + } + break; + } + return 0; +} + +int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout) +{ + size_t ReturnSize; + struct timeval stimeout= {0,timeout*1000}; + setsockopt(tcp->socket,SOL_SOCKET,SO_SNDTIMEO,(int *)&stimeout,sizeof(struct timeval)); + + switch (tcp->type) + { + case PX_TCP_IP_TYPE_IPV4: + { + int SockAddrSize=sizeof(struct sockaddr_in); + if((ReturnSize=recv(tcp->socket,(char *)buffer,buffersize,0))!=-1) + { + return ReturnSize;; + } + else + return 0; + } + break; + case PX_TCP_IP_TYPE_IPV6: + { + return 0; + } + break; + } + return 0; +} + +int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr) +{ + struct sockaddr sockaddr; + int len; + *socket=accept(tcp->socket,(struct sockaddr *)&sockaddr,(socklen_t *)&len); + return *socket!=-1; +} + + +void PX_TCPFree(PX_TCP *tcp) +{ + close(tcp->socket); +} + + +int PX_TCPListen(PX_TCP *tcp,unsigned short listen_Port) +{ + struct sockaddr_in addrin; + addrin.sin_family=AF_INET; + addrin.sin_addr.s_addr=INADDR_ANY; + addrin.sin_port=(listen_Port); + + if (bind(tcp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) + { + close(tcp->socket); + return 0; + } + return 1; +} + +PX_TCP_ADDR PX_TCP_ADDR_IPV4(unsigned int ipv4,unsigned short port) +{ + PX_TCP_ADDR addr; + addr.ipv4=ipv4; + addr.port=port; + return addr; +} diff --git a/UI/PainterEngine/platform/linux/px_thread.c b/UI/PainterEngine/platform/linux/px_thread.c new file mode 100644 index 0000000..4e4be7c --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_thread.c @@ -0,0 +1,19 @@ +#include "../modules/px_thread.h" +#include +#include + +void *PX_ThreadRun(void *ptr) +{ + px_thread *pthread=(px_thread *)ptr; + pthread->isRun=1; + pthread->pfunc(pthread->userptr); + pthread->isRun=0; + return 0; +} + + +int PX_ThreadCreate(px_thread *pthread,func_thread func,void *ptr) +{ + pthread_t t; + return pthread_create( &t, NULL, PX_ThreadRun, pthread)==0; +} diff --git a/UI/PainterEngine/platform/linux/px_time.c b/UI/PainterEngine/platform/linux/px_time.c new file mode 100644 index 0000000..cb243e8 --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_time.c @@ -0,0 +1,77 @@ +#include "../modules/px_time.h" +#include "time.h" +#include + +unsigned int PX_TimeGetTime() +{ + unsigned int uptime = 0; + struct timespec on; + if(clock_gettime(CLOCK_MONOTONIC, &on) == 0) + uptime = on.tv_sec*1000 + on.tv_nsec/1000000; + return uptime; +} + +int PX_TimeGetYear() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_year; +} + +int PX_TimeGetMouth() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_year; +} + +int PX_TimeGetDay() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_mon; +} + +int PX_TimeGetHour() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_hour; +} + +int PX_TimeGetMinute() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_min; +} + +int PX_TimeGetSecond() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_sec; +} + +void PX_Sleep(unsigned int ms) +{ + usleep(ms*1000); +} diff --git a/UI/PainterEngine/platform/linux/px_udp.c b/UI/PainterEngine/platform/linux/px_udp.c new file mode 100644 index 0000000..d95471b --- /dev/null +++ b/UI/PainterEngine/platform/linux/px_udp.c @@ -0,0 +1,157 @@ + +#include "../modules/px_udp.h" +//GNU C +#include +#include +#include +#include +#include +#include +#include +#include + +int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type) +{ + int err; + int nZero=0; + int nRecvBuf=1024*1024*2; + int nSendBuf=1024*1024*2; + int optval=1; + int imode=1,rev; + udp->type=type; + + if ((udp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) + { + err = errno; + return 0; + } + + rev=ioctl(udp->socket,FIONBIO,(u_long *)&imode); + setsockopt(udp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + setsockopt(udp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); + + if(rev == -1) + { + close(udp->socket); + return 0; + } + + if (setsockopt(udp->socket,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(int))==-1) + { + close(udp->socket); + return 0; + } + return 1; +} + +int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size) +{ + + int length; + switch(udp->type) + { + case PX_UDP_IP_TYPE_IPV4: + { + struct sockaddr_in to; + to.sin_family=AF_INET; + to.sin_addr.s_addr=addr.ipv4; + to.sin_port=(addr.port); + while(size>0) + { + if ((length=sendto(udp->socket,(const char *)buffer,size,0,(struct sockaddr *)&to,sizeof(struct sockaddr)))==-1) + { + return 0; + } + size-=length; + } + return 1; + } + break; + case PX_UDP_IP_TYPE_IPV6: + { +// sockaddr_in6 to; +// to.sin6_family=AF_INET6; +// to.sin6_port=htons(addr.port); +// px_memcpy(to.sin6_addr,addr.ipv6,sizeof(addr.ipv6)); +// while(size>0) +// { +// if ((length=sendto(udp->socket,(const char *)buffer,size,0,(LPSOCKADDR)&to,sizeof(sockaddr_in6)))==-1) +// { +// return 0; +// } +// size-=length; +// } +// return 1; + } + break; + } + return 0; +} + +int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize) +{ + size_t ReturnSize; + switch (udp->type) + { + case PX_UDP_IP_TYPE_IPV4: + { + struct sockaddr_in in; + socklen_t SockAddrSize=sizeof(struct sockaddr); + if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(struct sockaddr *)&in,&SockAddrSize))!=-1) + { + from_addr->ipv4=in.sin_addr.s_addr; + from_addr->port=in.sin_port; + *readsize=ReturnSize; + return 1; + } + else + return 0; + } + break; + case PX_UDP_IP_TYPE_IPV6: + { +// sockaddr_in6 in; +// int SockAddrSize=sizeof(SOCKADDR); +// if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(LPSOCKADDR)&in,&SockAddrSize))!=-1) +// { +// px_memcpy(from_addr->ipv6,in.sin6_addr,sizeof(from_addr->ipv6)); +// from_addr->port=in.sin_port; +// *readsize=ReturnSize; +// return 1; +// } +// else +// return 0; + } + break; + } + return 0; +} + +void PX_UDPFree(PX_UDP *udp) +{ + close(udp->socket); +} + + +int PX_UDPListen(PX_UDP *udp,unsigned short listen_Port) +{ + struct sockaddr_in addrin; + addrin.sin_family=AF_INET; + addrin.sin_addr.s_addr=INADDR_ANY; + addrin.sin_port=(listen_Port); + + if (bind(udp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) + { + close(udp->socket); + return 0; + } + return 1; +} + +PX_UDP_ADDR PX_UDP_ADDR_IPV4(unsigned int ipv4,unsigned short port) +{ + PX_UDP_ADDR addr; + addr.ipv4=ipv4; + addr.port=port; + return addr; +} diff --git a/UI/PainterEngine/platform/macos/px_display.c b/UI/PainterEngine/platform/macos/px_display.c new file mode 100644 index 0000000..979c491 --- /dev/null +++ b/UI/PainterEngine/platform/macos/px_display.c @@ -0,0 +1,33 @@ +#include "px_display.h" +unsigned int rendertexture; + +int PX_CreateWindow(int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name) +{ + glutInitWindowSize(windowWidth, windowHeight); + glutCreateWindow(name); + glGenTextures(1,&rendertexture); + glBindTexture(GL_TEXTURE_2D, rendertexture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + return 1; +} + +int PX_GetScreenHeight() +{ + return glutGet(GLUT_SCREEN_HEIGHT); +} + +int PX_GetScreenWidth() +{ + return glutGet(GLUT_SCREEN_WIDTH); +} + +int PX_SystemLoop() +{ + glutMainLoop(); + return 1; +} + + diff --git a/UI/PainterEngine/platform/macos/px_display.h b/UI/PainterEngine/platform/macos/px_display.h new file mode 100644 index 0000000..ef06bbf --- /dev/null +++ b/UI/PainterEngine/platform/macos/px_display.h @@ -0,0 +1,12 @@ +#ifndef PX_DISPLAY_H +#define PX_DISPLAY_H + +#include +#include + + +int PX_CreateWindow( int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name); +int PX_GetScreenHeight(); +int PX_GetScreenWidth(); +int PX_SystemLoop(); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/macos/px_file.c b/UI/PainterEngine/platform/macos/px_file.c new file mode 100644 index 0000000..828dabf --- /dev/null +++ b/UI/PainterEngine/platform/macos/px_file.c @@ -0,0 +1,311 @@ + +#include "../modules/px_file.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include +#include "dirent.h" + +int PX_SaveDataToFile(void *buffer,int size,const char path[]) +{ + FILE *pf=fopen(path,"rb"); + if (pf) + { + fwrite(buffer,1,size,pf); + fclose(pf); + return 1; + } + return 0; +} + + +PX_IO_Data PX_LoadFileToIOData(const char path[]) +{ + + PX_IO_Data io; + int fileoft=0; + FILE *pf=fopen(path,"rb"); + int filesize; + if (!pf) + { + goto _ERROR; + } + fseek(pf,0,SEEK_END); + filesize=ftell(pf); + fseek(pf,0,SEEK_SET); + + io.buffer=(unsigned char *)malloc(filesize+1); + if (!io.buffer) + { + goto _ERROR; + } + + while (!feof(pf)) + { + fileoft+=(int)fread(io.buffer+fileoft,1,1024,pf); + } + fclose(pf); + + io.buffer[filesize]='\0'; + io.size=filesize; + return io; +_ERROR: + io.buffer = 0; + io.size = 0; + return io; +} + +void PX_FreeIOData(PX_IO_Data *io) +{ + if (io->size&&io->buffer) + { + free(io->buffer); + io->size=0; + io->buffer=0; + } +} + +int PX_FileExist(const char path[]) +{ + FILE *pf= fopen(path,"rb"); + if (pf) + { + fclose(pf); + return 1; + } + return 0; +} + + + + +int PX_GetDirectoryFileCount(const char path[],PX_FILEENUM_TYPE type,const char *filter) +{ + struct dirent* ent = NULL; + int count=0; + DIR *pDir; + + if( (pDir=opendir(path)) == NULL) + { + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter&&filter[0]) + { + if (strstr(ent->d_name,filter)) + { + count++; + } + } else + { + count++; + } + } + break; + case PX_FILEENUM_TYPE_FILE: + { + if (ent->d_type==DT_REG) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (ent->d_type==DT_DIR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + { + if (ent->d_type==DT_CHR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + default: + break; + } + } + closedir(pDir); + return count; +} + +int PX_GetDirectoryFileName(const char path[],int count,char *FileName[260],PX_FILEENUM_TYPE type,const char *filter) +{ + struct dirent* ent = NULL; + int index=0; + DIR *pDir; + + if( (pDir=opendir(path)) == NULL) + { + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + if (index>=count) + { + return index; + } + + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + strcpy(FileName[index],ent->d_name); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index],ent->d_name); + index++; + } + } + break; + case PX_FILEENUM_TYPE_FILE: + { + if (ent->d_type==DT_REG) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + strcpy(FileName[index],ent->d_name); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index],ent->d_name); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (ent->d_type==DT_DIR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + strcpy(FileName[index],ent->d_name); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index],ent->d_name); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + { + if (ent->d_type==DT_CHR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name,pFilter)) + { + strcpy(FileName[index],ent->d_name); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index],ent->d_name); + index++; + } + } + } + break; + default: + break; + } + } + closedir(pDir); + return index; +} diff --git a/UI/PainterEngine/platform/macos/px_main.c b/UI/PainterEngine/platform/macos/px_main.c new file mode 100644 index 0000000..da3f9f2 --- /dev/null +++ b/UI/PainterEngine/platform/macos/px_main.c @@ -0,0 +1,147 @@ +//Platform supports +#include "px_display.h" +#include "PainterEngine_Application.h" +static px_dword lastupdatetime; + +extern unsigned int rendertexture; +static px_int windowWidth; +static px_int windowHeight; + +px_void PX_glutDisplayResize(px_int width,px_int height) +{ + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_WINDOWRESIZE; + PX_Object_Event_SetWidth(&e,width); + PX_Object_Event_SetHeight(&e,height); + PX_ApplicationPostEvent(&App,e); +} + +void PX_glutDisplayFunction(void) +{ + px_dword elpased; + px_dword timenow; + px_surface *pRenderSurface=&App.runtime.RenderSurface; + + timenow=glutGet(GLUT_ELAPSED_TIME); + elpased=timenow-lastupdatetime; + lastupdatetime=timenow; + PX_ApplicationUpdate(&App,elpased); + PX_ApplicationRender(&App,elpased); + glClear(GL_COLOR_BUFFER_BIT); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pRenderSurface->width, pRenderSurface->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pRenderSurface->surfaceBuffer); + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 0.0); + glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0); + glTexCoord2f(1.0, 1.0); glVertex3f(1.0, -1.0, 0.0); + glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 0.0); + glEnd(); + + glutSwapBuffers(); +} +px_void PX_glutOnAnyKeyDown(int key,px_int x,px_int y) +{ + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_KEYDOWN; + PX_Object_Event_SetKeyDown(&e,key); + PX_ApplicationPostEvent(&App,e); +} +px_void PX_glutOnAnsiKeyDown(px_uchar key,px_int x,px_int y) +{ + PX_Object_Event e; + px_char str[2]={0}; + e.Event=PX_OBJECT_EVENT_KEYDOWN; + PX_Object_Event_SetKeyDown(&e,key); + PX_ApplicationPostEvent(&App,e); + str[0]=key; + e.Event=PX_OBJECT_EVENT_STRING; + PX_Object_Event_SetStringPtr(&e,str); + PX_ApplicationPostEvent(&App,e); +} + +px_void PX_glutOnMouseEvent(int button,int state,int x,int y) +{ + PX_Object_Event e; + px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; + px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; + switch(button) + { + case GLUT_LEFT_BUTTON: + { + if (state==GLUT_DOWN) + { + e.Event=PX_OBJECT_EVENT_CURSORDOWN; + } + else + { + e.Event=PX_OBJECT_EVENT_CURSORUP; + } + } + break; + case GLUT_RIGHT_BUTTON: + { + if (state==GLUT_DOWN) + { + e.Event=PX_OBJECT_EVENT_CURSORRDOWN; + } + else + { + e.Event=PX_OBJECT_EVENT_CURSORRUP; + } + } + break; + default: + break; + } + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursorx_scale); + PX_ApplicationPostEvent(&App,e); +} +px_void PX_glutOnMouseDragEvent(int x,int y) +{ + PX_Object_Event e; + px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; + px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; + e.Event=PX_OBJECT_EVENT_CURSORDRAG; + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursorx_scale); + PX_ApplicationPostEvent(&App,e); +} +px_void PX_glutOnMouseMoveEvent(int x,int y) +{ + PX_Object_Event e; + px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; + px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; + e.Event=PX_OBJECT_EVENT_CURSORMOVE; + PX_Object_Event_SetCursorX(&e,x*cursorx_scale); + PX_Object_Event_SetCursorY(&e,y*cursorx_scale); + PX_ApplicationPostEvent(&App,e); +} + + +int main(int argc,char **argv) +{ + glutInit(&argc,argv); + glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA ); + + PX_srand(314159); + if(!PX_ApplicationInitialize(&App,PX_GetScreenWidth(),PX_GetScreenHeight()))return 0; + if(!PX_CreateWindow(App.runtime.surface_width,App.runtime.surface_height,App.runtime.window_width,App.runtime.window_height,PX_APPLICATION_NAME)) + { + return 0; + } + windowWidth=App.runtime.window_width; + windowHeight=App.runtime.window_height; + + lastupdatetime=glutGet(GLUT_ELAPSED_TIME); + glutDisplayFunc(PX_glutDisplayFunction); + glutIdleFunc(PX_glutDisplayFunction); + glutReshapeFunc(PX_glutDisplayResize); + glutMouseFunc(PX_glutOnMouseEvent); + glutMotionFunc(PX_glutOnMouseDragEvent); + glutPassiveMotionFunc(PX_glutOnMouseMoveEvent); + glutKeyboardFunc(PX_glutOnAnsiKeyDown); + glutSpecialFunc(PX_glutOnAnyKeyDown); + PX_SystemLoop(); + return 0; +} \ No newline at end of file diff --git a/UI/PainterEngine/platform/macos/xmake.lua b/UI/PainterEngine/platform/macos/xmake.lua new file mode 100644 index 0000000..49abf88 --- /dev/null +++ b/UI/PainterEngine/platform/macos/xmake.lua @@ -0,0 +1,26 @@ +target("demo") + +--input your painterengine directory here +painterengine_dir="" + +after_build(function(target) + -- import task modules + import("core.base.task") + -- run task modules + task.run("project", {kind = "compile_commands"}) +end) + +set_kind("binary") +set_optimize("faster") +set_targetdir("$(buildir)/$(mode)") + +add_includedirs(painterengine_dir) +add_includedirs(painterengine_dir .. "/platform/framework") + +add_files(painterengine_dir .. "/core/*.c") +add_files(painterengine_dir .. "/kernel/*.c") +add_files(painterengine_dir .. "/architecture/*.c") +add_files(painterengine_dir .. "/platform/framework/*.c") +add_files(painterengine_dir .. "/platform/macos/*.c") + +add_frameworks("GLUT", "OpenGL") diff --git a/UI/PainterEngine/platform/modules/px_audio.h b/UI/PainterEngine/platform/modules/px_audio.h new file mode 100644 index 0000000..64d1bff --- /dev/null +++ b/UI/PainterEngine/platform/modules/px_audio.h @@ -0,0 +1,11 @@ + +#ifndef PX_AUDIO_H +#define PX_AUDIO_H + +#include "../../core/PX_Sound.h" + +int PX_AudioInitialize(PX_SoundPlay *soundPlay); +void PX_AudioSetVolume(unsigned int volume); + + +#endif diff --git a/UI/PainterEngine/platform/modules/px_file.h b/UI/PainterEngine/platform/modules/px_file.h new file mode 100644 index 0000000..0892a36 --- /dev/null +++ b/UI/PainterEngine/platform/modules/px_file.h @@ -0,0 +1,36 @@ + +#ifndef PAINTERENGINE_FILE_H +#define PAINTERENGINE_FILE_H + +#define PAINTERENGIN_FILE_SUPPORT +////////////////////////////////////////////////////////////////////////// +#include "stdio.h" +#include "stdlib.h" +#include "string.h" + +typedef struct +{ + unsigned char *buffer; + unsigned int size; +}PX_IO_Data; + +typedef enum +{ + PX_FILEENUM_TYPE_ANY, + PX_FILEENUM_TYPE_FOLDER, + PX_FILEENUM_TYPE_FILE, + PX_FILEENUM_TYPE_DEVICE, +}PX_FILEENUM_TYPE; + + +PX_IO_Data PX_LoadFileToIOData(const char path[]); +int PX_FileExist(const char respath[]); +int PX_CopyFile(const char respath[],const char destpath[]); +int PX_SaveDataToFile(void *buffer,int size,const char path[]); +void PX_FreeIOData(PX_IO_Data *io); + +int PX_FileGetDirectoryFileCount(const char path[],PX_FILEENUM_TYPE type,const char *filter); +int PX_FileGetDirectoryFileName(const char path[],int count,char FileName[][260],PX_FILEENUM_TYPE type,const char *filter); + +#endif + diff --git a/UI/PainterEngine/platform/modules/px_serialport.h b/UI/PainterEngine/platform/modules/px_serialport.h new file mode 100644 index 0000000..54b098e --- /dev/null +++ b/UI/PainterEngine/platform/modules/px_serialport.h @@ -0,0 +1,21 @@ + +#ifndef PX_SERIALPORT_H +#define PX_SERIALPORT_H + +typedef struct +{ + long long Handle; + unsigned int BaudRate; + unsigned int DataBits; + char ParityType; + unsigned int StopBit; +}PX_SerialPort; + + +const char* PX_SerialPortEnumComName(int index); +const int PX_SerialPortInitialize(PX_SerialPort *com,const char *name,unsigned int baudRate,unsigned int DataBits/*5,6,7,8*/,char ParityType/*'O','E','N'*/,unsigned int stopBit/*0,1,2*/); +const int PX_SerialPortReset(PX_SerialPort *com,unsigned int baudRate,unsigned int DataBits/*5,6,7,8*/,char ParityType/*'O','E','N'*/,unsigned int stopBit/*0,1,2*/); +const int PX_SerialPortWrite(PX_SerialPort *com,void *data,int size); +const int PX_SerialPortRead(PX_SerialPort *com,void *data,int size); +void PX_SerialPortClose(PX_SerialPort *com); +#endif diff --git a/UI/PainterEngine/platform/modules/px_tcp.h b/UI/PainterEngine/platform/modules/px_tcp.h new file mode 100644 index 0000000..1ff6aee --- /dev/null +++ b/UI/PainterEngine/platform/modules/px_tcp.h @@ -0,0 +1,36 @@ + +#ifndef PX_TCP_H +#define PX_TCP_H + +typedef enum +{ + PX_TCP_IP_TYPE_IPV4, + PX_TCP_IP_TYPE_IPV6 +}PX_TCP_IP_TYPE; + +typedef struct +{ + unsigned int port; + union + { + unsigned int ipv4; + unsigned int ipv6[4]; + }; +}PX_TCP_ADDR; + +typedef struct +{ + unsigned int listenPort; + unsigned int socket; + PX_TCP_IP_TYPE type; + PX_TCP_ADDR connectAddr; +}PX_TCP; + +int PX_TCPListen(PX_TCP *tcp,unsigned short listenPort); +int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type); +int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr); +int PX_TCPSend(PX_TCP *tcp,void *buffer,int size); +int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout); +int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr); +void PX_TCPFree(PX_TCP *tcp); +#endif diff --git a/UI/PainterEngine/platform/modules/px_thread.h b/UI/PainterEngine/platform/modules/px_thread.h new file mode 100644 index 0000000..79325b9 --- /dev/null +++ b/UI/PainterEngine/platform/modules/px_thread.h @@ -0,0 +1,21 @@ +#ifndef PX_THREAD +#define PX_THREAD + +typedef void (*func_thread)(void *ptr); + +typedef struct +{ + union + { + void *handle_ptr; + unsigned int handle_uint; + unsigned long handle_ulong; + }; + func_thread pfunc; + void *userptr; + volatile int isRun; +}px_thread; + +int PX_ThreadCreate(px_thread *thread,func_thread func,void *ptr); + +#endif diff --git a/UI/PainterEngine/platform/modules/px_time.h b/UI/PainterEngine/platform/modules/px_time.h new file mode 100644 index 0000000..b46d6ae --- /dev/null +++ b/UI/PainterEngine/platform/modules/px_time.h @@ -0,0 +1,12 @@ +#ifndef PX_TIME_H +#define PX_TIME_H + +int PX_TimeGetYear(); +int PX_TimeGetMouth(); +int PX_TimeGetDay(); +int PX_TimeGetHour(); +int PX_TimeGetMinute(); +int PX_TimeGetSecond(); +unsigned int PX_TimeGetTime(); +void PX_Sleep(unsigned int ms); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/modules/px_udp.h b/UI/PainterEngine/platform/modules/px_udp.h new file mode 100644 index 0000000..1456339 --- /dev/null +++ b/UI/PainterEngine/platform/modules/px_udp.h @@ -0,0 +1,33 @@ + +#ifndef PX_UDP_H +#define PX_UDP_H + +typedef enum +{ + PX_UDP_IP_TYPE_IPV4, + PX_UDP_IP_TYPE_IPV6 +}PX_UDP_IP_TYPE; + +typedef struct +{ + unsigned int listenPort; + unsigned int socket; + PX_UDP_IP_TYPE type; +}PX_UDP; + +typedef struct +{ + unsigned int port; + union + { + unsigned int ipv4; + unsigned int ipv6[4]; + }; +}PX_UDP_ADDR; + +int PX_UDPListen(PX_UDP *udp,unsigned short listenPort); +int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type); +int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size); +int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize); +void PX_UDPFree(PX_UDP *udp); +#endif diff --git a/UI/PainterEngine/platform/webassembly/assets/readme.txt b/UI/PainterEngine/platform/webassembly/assets/readme.txt new file mode 100644 index 0000000..8d21944 --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/assets/readme.txt @@ -0,0 +1,3 @@ +Put your resource files in this folder +use "assets/filename" to access your resource files. + diff --git a/UI/PainterEngine/platform/webassembly/index.html b/UI/PainterEngine/platform/webassembly/index.html new file mode 100644 index 0000000..20b633d --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/index.html @@ -0,0 +1,162 @@ + + + + + + + + + + +

+ + set + 限制解除 + + + + + + diff --git a/UI/PainterEngine/platform/webassembly/main.c b/UI/PainterEngine/platform/webassembly/main.c new file mode 100644 index 0000000..5f23df3 --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/main.c @@ -0,0 +1,180 @@ +// Copyright 2011 The Emscripten Authors. All rights reserved. +// Emscripten is available under two separate licenses, the MIT license and the +// University of Illinois/NCSA Open Source License. Both these licenses can be +// found in the LICENSE file. + +#ifdef _MSC_VER +#pragma comment(lib,"SDL.lib") +#pragma comment(lib,"winmm.lib") +#pragma comment(lib, "dxguid.lib") +#endif // _MSC_VER + + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "PainterEngine_Application.h" + +/////////////////////////////////////////////// +//global +SDL_Surface *screen; +const SDL_VideoInfo *info; +px_dword lastupdatetime; +px_int lastcursorx=-1,lastcursory=-1; +px_bool mouseldown=PX_FALSE; +/////////////////////////////////////////////// + + + + +void mainloop(void *ptr) +{ + px_dword elpased; + SDL_Event event; + px_dword timecurrent=SDL_GetTicks(); + + + elpased=timecurrent-lastupdatetime; + lastupdatetime=timecurrent; + + PX_ApplicationUpdate(&App,elpased); + PX_ApplicationRender(&App,elpased); + + + if (SDL_MUSTLOCK(screen)) SDL_LockSurface(screen); + PX_memcpy(screen->pixels,App.runtime.RenderSurface.surfaceBuffer,App.runtime.surface_width*App.runtime.surface_height*4); + if (SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); + SDL_Flip(screen); + + while (SDL_PollEvent(&event)) + { + if (SDL_MOUSEBUTTONDOWN == event.type) + { + if(SDL_BUTTON_LEFT == event.button.button) + { + px_int px = event.button.x; + px_int py = event.button.y; + PX_Object_Event e; + lastcursorx=px; + lastcursory=py; + mouseldown=PX_TRUE; + e.Event=PX_OBJECT_EVENT_CURSORDOWN; + PX_Object_Event_SetCursorX(&e,(px_float)px); + PX_Object_Event_SetCursorY(&e,(px_float)py); + PX_ApplicationPostEvent(&App,e); + } + else if(SDL_BUTTON_RIGHT == event.button.button) + { + px_int px = event.button.x; + px_int py = event.button.y; + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSORRDOWN; + PX_Object_Event_SetCursorX(&e,(px_float)px); + PX_Object_Event_SetCursorY(&e,(px_float)py); + PX_ApplicationPostEvent(&App,e); + } + } + else if (SDL_MOUSEBUTTONUP== event.type) + { + if(SDL_BUTTON_LEFT == event.button.button) + { + px_int px = event.button.x; + px_int py = event.button.y; + PX_Object_Event e; + mouseldown=PX_FALSE; + if (px==lastcursorx&&py==lastcursory) + { + e.Event=PX_OBJECT_EVENT_CURSORCLICK; + PX_Object_Event_SetCursorX(&e,(px_float)px); + PX_Object_Event_SetCursorY(&e,(px_float)py); + PX_ApplicationPostEvent(&App,e); + } + + lastcursorx=px; + lastcursory=py; + e.Event=PX_OBJECT_EVENT_CURSORUP; + PX_Object_Event_SetCursorX(&e,(px_float)px); + PX_Object_Event_SetCursorY(&e,(px_float)py); + PX_ApplicationPostEvent(&App,e); + } + else if(SDL_BUTTON_RIGHT == event.button.button) + { + px_int px = event.button.x; + px_int py = event.button.y; + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSORRUP; + PX_Object_Event_SetCursorX(&e,(px_float)px); + PX_Object_Event_SetCursorY(&e,(px_float)py); + PX_ApplicationPostEvent(&App,e); + } + } + else if (SDL_MOUSEMOTION == event.type) + { + px_int px = event.button.x; + px_int py = event.button.y; + PX_Object_Event e; + + if (mouseldown) + e.Event=PX_OBJECT_EVENT_CURSORDRAG; + else + e.Event=PX_OBJECT_EVENT_CURSORMOVE; + + PX_Object_Event_SetCursorX(&e,(px_float)px); + PX_Object_Event_SetCursorY(&e,(px_float)py); + PX_ApplicationPostEvent(&App,e); + } + else if (SDL_KEYDOWN == event.type) + { + PX_Object_Event e; + px_char str[2]={0}; + e.Event=PX_OBJECT_EVENT_KEYDOWN; + PX_Object_Event_SetKeyDown(&e,event.key.keysym.sym); + PX_ApplicationPostEvent(&App,e); + + str[0]=event.key.keysym.sym; + if ((str[0]>=0x20&&str[0]<=0x7E)||str[0]==0x08||str[0]==0x0d||str[0]==0x0a) + { + e.Event=PX_OBJECT_EVENT_STRING; + PX_Object_Event_SetStringPtr(&e,str); + PX_ApplicationPostEvent(&App,e); + } + + } + else if (SDL_KEYUP == event.type) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_KEYUP; + PX_Object_Event_SetKeyUp(&e,event.key.keysym.sym); + PX_ApplicationPostEvent(&App,e); + } + if (event.type == SDL_QUIT) {}; + } + +} + + +#ifdef __cplusplus +extern "C" +#endif +int main(int argc, char *argv[]) +{ + + printf("PainterEngine Webassembly initializating...\n"); + SDL_Init(SDL_INIT_VIDEO); + info=SDL_GetVideoInfo(); + if(!PX_ApplicationInitialize(&App,info->current_w,info->current_h)) + { + printf("PainterEngine startup failed.\n"); + return PX_FALSE; + } + + screen = SDL_SetVideoMode(App.runtime.surface_width, App.runtime.surface_height, 32, SDL_SWSURFACE); + lastupdatetime=SDL_GetTicks(); + + emscripten_set_main_loop_arg(mainloop, 0, -1, 1); + return 0; +} diff --git a/UI/PainterEngine/platform/webassembly/makefile b/UI/PainterEngine/platform/webassembly/makefile new file mode 100644 index 0000000..2f10479 --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/makefile @@ -0,0 +1,58 @@ +#emscripten makefile +##################################################### +target :=PainterEngine.html +project_path := ../../project +painterengine_path := ../.. +##################################################### + +project_build := $(wildcard $(project_path)/*.c) +project_build_o := $(patsubst %.c,%.o,$(project_build)) + +painterengine_build_core := $(wildcard $(painterengine_path)/core/*.c) +painterengine_build_painterengine_o := $(patsubst %.c,%.o,$(painterengine_build_core)) + +painterengine_build_kernel := $(wildcard $(painterengine_path)/kernel/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_kernel)) + +painterengine_build_architecture := $(wildcard $(painterengine_path)/architecture/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_architecture)) + +painterengine_build_platform := $(wildcard $(painterengine_path)/platform/webassembly/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_platform)) + +painterengine_build_platform := $(wildcard $(painterengine_path)/platform/webassembly/*.cpp) +painterengine_build_painterengine_o += $(patsubst %.cpp,%.o,$(painterengine_build_platform)) + +all:$(project_build_o) $(painterengine_build_painterengine_o) + emcc $(project_build_o) $(painterengine_build_painterengine_o) \ + -O3 \ + -o $(target) \ + -I "$(painterengine_path)" \ + -I "$(project_path)" \ + -I "$(painterengine_path)/platform/webassembly" \ + --preload-file assets + emrun --no_browser --port 8080 PainterEngine.html + + +$(project_path)/%.o:$(project_path)/%.c + emcc -c $^ -o $@ -I "$(painterengine_path)" -I "$(painterengine_path)/platform/webassembly" + +$(painterengine_path)/architecture/%.o:$(painterengine_path)/architecture/%.c + emcc -c $^ -o $@ -I "$(painterengine_path)" + +$(painterengine_path)/kernel/%.o:$(painterengine_path)/kernel/%.c + emcc -c $^ -o $@ + +$(painterengine_path)/core/%.o:$(painterengine_path)/core/%.c + emcc -c $^ -o $@ + +$(painterengine_path)/platform/webassembly/%.o:$(painterengine_path)/platform/webassembly/%.c + emcc -c $^ -o $@ -I "$(project_path)" -I "$(painterengine_path)" -I "$(painterengine_path)/platform/webassembly" + +.PHONY:clean +clean: + -del /s "$(painterengine_path)\core\*.o" + -del /s "$(painterengine_path)\kernel\*.o" + -del /s "$(painterengine_path)\architecture\*.o" + -del /s "$(painterengine_path)\platform\webassembly\*.o" + -del /s "$(project_path)\*.o" diff --git a/UI/PainterEngine/platform/webassembly/px_audio.c b/UI/PainterEngine/platform/webassembly/px_audio.c new file mode 100644 index 0000000..d36ae36 --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/px_audio.c @@ -0,0 +1,44 @@ +#include "../modules/px_audio.h" +#include +#include +static PX_SoundPlay *SDL_SoundPlay; +static unsigned int SDL_volume=SDL_MIX_MAXVOLUME; +static void pcm_play_callback(void *ptr,Uint8 *out,int require_len) +{ + if (SDL_SoundPlay) + { + PX_SoundPlayRead(SDL_SoundPlay,out,require_len); + } + else + { + memset(out,0,require_len); + } +} + + +px_bool PX_AudioInitialize(PX_SoundPlay *soundPlay) +{ + SDL_AudioSpec wanted_spec; + SDL_SoundPlay=soundPlay; + + wanted_spec.freq = 44100; + wanted_spec.format = AUDIO_S16SYS; + wanted_spec.channels = 2; + wanted_spec.silence = 0; + wanted_spec.samples = 2048; + wanted_spec.callback = pcm_play_callback; + + if (SDL_OpenAudio(&wanted_spec, NULL)<0){ + return PX_FALSE; + } + + //Play + SDL_PauseAudio(0); + return PX_TRUE; +} + +void PX_AudioSetVolume(unsigned int volume) +{ + //invalid function + SDL_volume=volume; +} \ No newline at end of file diff --git a/UI/PainterEngine/platform/webassembly/px_file.c b/UI/PainterEngine/platform/webassembly/px_file.c new file mode 100644 index 0000000..46f55d5 --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/px_file.c @@ -0,0 +1,311 @@ + +#include "../modules/px_file.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include +#include "dirent.h" + +int PX_SaveDataToFile(void *buffer, int size, const char path[]) +{ + FILE *pf=fopen(path, "rb"); + if (pf) + { + fwrite(buffer, 1, size, pf); + fclose(pf); + return 1; + } + return 0; +} + + +PX_IO_Data PX_LoadFileToIOData(const char path[]) +{ + + PX_IO_Data io; + int fileoft=0; + FILE *pf=fopen(path, "rb"); + int filesize; + if (!pf) + { + goto _ERROR; + } + fseek(pf, 0, SEEK_END); + filesize=ftell(pf); + fseek(pf, 0, SEEK_SET); + + io.buffer=(unsigned char *)malloc(filesize+1); + if (!io.buffer) + { + goto _ERROR; + } + + while (!feof(pf)) + { + fileoft += (int)fread(io.buffer+fileoft, 1, 1024, pf); + } + fclose(pf); + + io.buffer[filesize]='\0'; + io.size=filesize; + return io; + _ERROR: + io.buffer=0; + io.size=0; + return io; +} + +void PX_FreeIOData(PX_IO_Data *io) +{ + if (io->size&&io->buffer) + { + free(io->buffer); + io->size=0; + io->buffer=0; + } +} + +int PX_FileExist(const char path[]) +{ + FILE *pf= fopen(path, "rb"); + if (pf) + { + fclose(pf); + return 1; + } + return 0; +} + + + + +int PX_GetDirectoryFileCount(const char path[], PX_FILEENUM_TYPE type, const char *filter) +{ + struct dirent* ent = NULL; + int count=0; + DIR *pDir; + + if( (pDir=opendir(path)) == NULL) + { + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + count++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + count++; + } + } + break; + case PX_FILEENUM_TYPE_FILE: + { + if (ent->d_type == DT_REG) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + count++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (ent->d_type == DT_DIR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + count++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + { + if (ent->d_type == DT_CHR) + { + if (filter&&filter[0]) + { + if (strstr(ent->d_name, filter)) + { + count++; + } + } else + { + count++; + } + } + } + break; + default: + break; + } + } + closedir(pDir); + return count; +} + +int PX_GetDirectoryFileName(const char path[], int count, char *FileName[260], PX_FILEENUM_TYPE type, const char *filter) +{ + struct dirent* ent = NULL; + int index=0; + DIR *pDir; + + if( (pDir=opendir(path)) == NULL) + { + return 0; + } + + while( (ent=readdir(pDir)) != NULL ) + { + if (index>=count) + { + return index; + } + + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + strcpy(FileName[index], ent->d_name); + index++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index], ent->d_name); + index++; + } + } + break; + case PX_FILEENUM_TYPE_FILE: + { + if (ent->d_type == DT_REG) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + strcpy(FileName[index], ent->d_name); + index++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index], ent->d_name); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (ent->d_type == DT_DIR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + strcpy(FileName[index], ent->d_name); + index++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index], ent->d_name); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + { + if (ent->d_type == DT_CHR) + { + if (filter&&filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(ent->d_name, pFilter)) + { + strcpy(FileName[index], ent->d_name); + index++; + break; + } + pFilter += strlen(pFilter)+1; + } + } else + { + strcpy(FileName[index], ent->d_name); + index++; + } + } + } + break; + default: + break; + } + } + closedir(pDir); + return index; +} diff --git a/UI/PainterEngine/platform/webassembly/px_tcp.c b/UI/PainterEngine/platform/webassembly/px_tcp.c new file mode 100644 index 0000000..0c1faad --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/px_tcp.c @@ -0,0 +1,149 @@ + +#include "../modules/px_tcp.h" +//GNU C +#include +#include +#include +#include +#include +#include +#include +#include + +int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type) +{ + int err; + int nZero=0; + int nRecvBuf=1024*1024*2; + int nSendBuf=1024*1024*2; + int optval=1; + int imode=1,rev; + tcp->type=type; + + if ((tcp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_TCP))==-1) + { + err = errno; + return 0; + } + + rev=ioctl(tcp->socket,FIONBIO,(u_long *)&imode); + setsockopt(tcp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + setsockopt(tcp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); + + if(rev == -1) + { + close(tcp->socket); + return 0; + } + + return 1; +} + +int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr) +{ + struct sockaddr_in to; + int ret; + to.sin_family=AF_INET; + to.sin_addr.s_addr=addr.ipv4; + to.sin_port=(addr.port); + + ret=connect(tcp->socket,(const struct sockaddr *)&to,sizeof(to)); + if (ret==0) + { + tcp->connectAddr=addr; + } + return ret; +} + +int PX_TCPSend(PX_TCP *tcp,void *buffer,int size) +{ + int length; + switch(tcp->type) + { + case PX_TCP_IP_TYPE_IPV4: + { + while(size>0) + { + if ((length=send(tcp->socket,(const char *)buffer,size,0))==-1) + { + return 0; + } + size-=length; + } + return 1; + } + break; + case PX_TCP_IP_TYPE_IPV6: + { + return 0; + } + break; + } + return 0; +} + +int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout) +{ + size_t ReturnSize; + struct timeval stimeout= {0,timeout*1000}; + setsockopt(tcp->socket,SOL_SOCKET,SO_SNDTIMEO,(int *)&stimeout,sizeof(struct timeval)); + + switch (tcp->type) + { + case PX_TCP_IP_TYPE_IPV4: + { + int SockAddrSize=sizeof(struct sockaddr_in); + if((ReturnSize=recv(tcp->socket,(char *)buffer,buffersize,0))!=-1) + { + return ReturnSize;; + } + else + return 0; + } + break; + case PX_TCP_IP_TYPE_IPV6: + { + return 0; + } + break; + } + return 0; +} + +int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr) +{ + struct sockaddr sockaddr; + int len; + *socket=accept(tcp->socket,(struct sockaddr *)&sockaddr,(socklen_t *)&len); + return *socket!=-1; +} + + +void PX_TCPFree(PX_TCP *tcp) +{ + close(tcp->socket); +} + + +int PX_TCPListen(PX_TCP *tcp,unsigned short listen_Port) +{ + struct sockaddr_in addrin; + addrin.sin_family=AF_INET; + addrin.sin_addr.s_addr=INADDR_ANY; + addrin.sin_port=(listen_Port); + + if (bind(tcp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) + { + close(tcp->socket); + return 0; + } + return 1; +} + +PX_TCP_ADDR PX_TCP_ADDR_IPV4(unsigned int ipv4,unsigned short port) +{ + PX_TCP_ADDR addr; + addr.ipv4=ipv4; + addr.port=port; + return addr; +} diff --git a/UI/PainterEngine/platform/webassembly/px_thread.c b/UI/PainterEngine/platform/webassembly/px_thread.c new file mode 100644 index 0000000..4e4be7c --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/px_thread.c @@ -0,0 +1,19 @@ +#include "../modules/px_thread.h" +#include +#include + +void *PX_ThreadRun(void *ptr) +{ + px_thread *pthread=(px_thread *)ptr; + pthread->isRun=1; + pthread->pfunc(pthread->userptr); + pthread->isRun=0; + return 0; +} + + +int PX_ThreadCreate(px_thread *pthread,func_thread func,void *ptr) +{ + pthread_t t; + return pthread_create( &t, NULL, PX_ThreadRun, pthread)==0; +} diff --git a/UI/PainterEngine/platform/webassembly/px_time.c b/UI/PainterEngine/platform/webassembly/px_time.c new file mode 100644 index 0000000..3bb2fed --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/px_time.c @@ -0,0 +1,77 @@ +#include "../modules/px_time.h" +#include "time.h" +#include +unsigned int PX_TimeGetTime() +{ + unsigned int uptime = 0; + struct timespec on; + if(clock_gettime(CLOCK_MONOTONIC, &on) == 0) + uptime = on.tv_sec*1000 + on.tv_nsec/1000000; + return uptime; +} + +int PX_TimeGetYear() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_year; +} + +int PX_TimeGetMouth() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_year; +} + +int PX_TimeGetDay() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_mon; +} + +int PX_TimeGetHour() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_hour; +} + +int PX_TimeGetMinute() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_min; +} + +int PX_TimeGetSecond() +{ + time_t timep; + struct tm *p; + time (&timep); + p=gmtime(&timep); + + return 1900+p->tm_sec; +} + +void PX_Sleep(unsigned int ms) +{ + usleep(ms*1000); +} + diff --git a/UI/PainterEngine/platform/webassembly/px_udp.c b/UI/PainterEngine/platform/webassembly/px_udp.c new file mode 100644 index 0000000..d95471b --- /dev/null +++ b/UI/PainterEngine/platform/webassembly/px_udp.c @@ -0,0 +1,157 @@ + +#include "../modules/px_udp.h" +//GNU C +#include +#include +#include +#include +#include +#include +#include +#include + +int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type) +{ + int err; + int nZero=0; + int nRecvBuf=1024*1024*2; + int nSendBuf=1024*1024*2; + int optval=1; + int imode=1,rev; + udp->type=type; + + if ((udp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) + { + err = errno; + return 0; + } + + rev=ioctl(udp->socket,FIONBIO,(u_long *)&imode); + setsockopt(udp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + setsockopt(udp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); + + if(rev == -1) + { + close(udp->socket); + return 0; + } + + if (setsockopt(udp->socket,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(int))==-1) + { + close(udp->socket); + return 0; + } + return 1; +} + +int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size) +{ + + int length; + switch(udp->type) + { + case PX_UDP_IP_TYPE_IPV4: + { + struct sockaddr_in to; + to.sin_family=AF_INET; + to.sin_addr.s_addr=addr.ipv4; + to.sin_port=(addr.port); + while(size>0) + { + if ((length=sendto(udp->socket,(const char *)buffer,size,0,(struct sockaddr *)&to,sizeof(struct sockaddr)))==-1) + { + return 0; + } + size-=length; + } + return 1; + } + break; + case PX_UDP_IP_TYPE_IPV6: + { +// sockaddr_in6 to; +// to.sin6_family=AF_INET6; +// to.sin6_port=htons(addr.port); +// px_memcpy(to.sin6_addr,addr.ipv6,sizeof(addr.ipv6)); +// while(size>0) +// { +// if ((length=sendto(udp->socket,(const char *)buffer,size,0,(LPSOCKADDR)&to,sizeof(sockaddr_in6)))==-1) +// { +// return 0; +// } +// size-=length; +// } +// return 1; + } + break; + } + return 0; +} + +int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize) +{ + size_t ReturnSize; + switch (udp->type) + { + case PX_UDP_IP_TYPE_IPV4: + { + struct sockaddr_in in; + socklen_t SockAddrSize=sizeof(struct sockaddr); + if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(struct sockaddr *)&in,&SockAddrSize))!=-1) + { + from_addr->ipv4=in.sin_addr.s_addr; + from_addr->port=in.sin_port; + *readsize=ReturnSize; + return 1; + } + else + return 0; + } + break; + case PX_UDP_IP_TYPE_IPV6: + { +// sockaddr_in6 in; +// int SockAddrSize=sizeof(SOCKADDR); +// if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(LPSOCKADDR)&in,&SockAddrSize))!=-1) +// { +// px_memcpy(from_addr->ipv6,in.sin6_addr,sizeof(from_addr->ipv6)); +// from_addr->port=in.sin_port; +// *readsize=ReturnSize; +// return 1; +// } +// else +// return 0; + } + break; + } + return 0; +} + +void PX_UDPFree(PX_UDP *udp) +{ + close(udp->socket); +} + + +int PX_UDPListen(PX_UDP *udp,unsigned short listen_Port) +{ + struct sockaddr_in addrin; + addrin.sin_family=AF_INET; + addrin.sin_addr.s_addr=INADDR_ANY; + addrin.sin_port=(listen_Port); + + if (bind(udp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) + { + close(udp->socket); + return 0; + } + return 1; +} + +PX_UDP_ADDR PX_UDP_ADDR_IPV4(unsigned int ipv4,unsigned short port) +{ + PX_UDP_ADDR addr; + addr.ipv4=ipv4; + addr.port=port; + return addr; +} diff --git a/UI/PainterEngine/platform/windows gdi/px_display.c b/UI/PainterEngine/platform/windows gdi/px_display.c new file mode 100644 index 0000000..bd7f6d1 --- /dev/null +++ b/UI/PainterEngine/platform/windows gdi/px_display.c @@ -0,0 +1,129 @@ +#include "px_display.h" +#pragma comment(lib,"Msimg32.lib") +static HWND g_hwng; +static HDC g_targetDC; +static HDC g_compatibleDC; +static int g_width,g_height; + +int PX_DisplayInitialize(HWND hwdn, int width, int height) +{ + g_hwng = hwdn; + g_width = width; + g_height = height; + g_targetDC = GetDC(hwdn); + if (!g_targetDC) + { + goto _ERROR; + } + g_compatibleDC = CreateCompatibleDC(g_targetDC); + if (!g_compatibleDC) + { + goto _ERROR; + } + + return 1; +_ERROR: + if (g_targetDC) ReleaseDC(g_hwng,g_targetDC); + if (g_compatibleDC) ReleaseDC(g_hwng,g_compatibleDC); + g_targetDC = 0; + g_compatibleDC = 0; + return 0; +} + +void PX_DisplayRender(void* bgra,int oftx,int ofty) +{ + typedef struct + { + unsigned char r, g, b, a; + }s_color; + + typedef struct + { + unsigned char b, g, r, a; + }d_color; + + BITMAPINFO bmi; + HBITMAP hbitmap=0; + void* prgbdata; + s_color* pclr = (s_color *)bgra; + d_color* pwclr; + int x, y; + + + + + ZeroMemory(&bmi, sizeof(BITMAPINFO)); + bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmi.bmiHeader.biBitCount = 32; + bmi.bmiHeader.biHeight = g_height; + bmi.bmiHeader.biWidth = g_width; + bmi.bmiHeader.biPlanes = 1; + + hbitmap = CreateDIBSection(NULL, &bmi, DIB_PAL_COLORS,&prgbdata, NULL, 0); + pwclr = (d_color*)prgbdata; + + for (y = 0; y < g_height; y++) + for (x = 0; x < g_width; x++) + { + pwclr[x + g_width * (g_height - y-1)].a = pclr[x + g_width * y].a; + pwclr[x + g_width * (g_height - y-1)].r = pclr[x + g_width * y].r; + pwclr[x + g_width * (g_height - y-1)].g = pclr[x + g_width * y].g; + pwclr[x + g_width * (g_height - y-1)].b = pclr[x + g_width * y].b; + } + + if (hbitmap) + { + RECT rect; + rect.left = oftx; + rect.right = oftx+ g_width; + rect.top = ofty; + rect.bottom = ofty+g_height; + SelectObject(g_compatibleDC, hbitmap); + BitBlt(g_targetDC, oftx, ofty, g_width, g_height, g_compatibleDC, 0, 0, SRCCOPY); + DeleteObject(hbitmap); + } +} + +void* PX_DisplayCaptureScreenBitmap(int *outSize) +{ + void *buffer; + BITMAPINFO bitmapInfo = { 0 }; + BITMAPFILEHEADER* pHeader; + HDC desktopDC = GetDC(g_hwng); + HDC comHDC = CreateCompatibleDC(desktopDC); + int screenWidth = GetSystemMetrics(SM_CXSCREEN); + int screenHeight = GetSystemMetrics(SM_CYSCREEN); + HBITMAP hBitmap = CreateCompatibleBitmap(desktopDC, screenWidth, screenHeight); + SelectObject(comHDC, hBitmap); + if (!BitBlt(comHDC, 0, 0, screenWidth, screenHeight, desktopDC, 0, 0, SRCCOPY)) + { + *outSize = 0; + return NULL; + } + bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + GetDIBits(comHDC, hBitmap, 0, screenHeight, NULL, &bitmapInfo, DIB_RGB_COLORS); + buffer = malloc(bitmapInfo.bmiHeader.biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO)); + if (!buffer) + { + *outSize = 0; + return NULL; + } + pHeader = (BITMAPFILEHEADER*)buffer; + ZeroMemory(pHeader, sizeof(BITMAPFILEHEADER)); + pHeader->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); + pHeader->bfType = 0x4D42; + pHeader->bfSize = bitmapInfo.bmiHeader.biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO); + + memcpy((BYTE *)buffer + sizeof(BITMAPFILEHEADER), &bitmapInfo.bmiHeader, sizeof(BITMAPINFO)); + bitmapInfo.bmiHeader.biCompression = BI_RGB; + GetDIBits(comHDC, hBitmap, 0, screenHeight, (BYTE*)buffer + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO), &bitmapInfo, DIB_RGB_COLORS); + + DeleteObject(hBitmap); + ReleaseDC(NULL,desktopDC); + DeleteDC(comHDC); + + * outSize = (bitmapInfo.bmiHeader.biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO)); + return buffer; +} + + diff --git a/UI/PainterEngine/platform/windows gdi/px_display.h b/UI/PainterEngine/platform/windows gdi/px_display.h new file mode 100644 index 0000000..2f68b3c --- /dev/null +++ b/UI/PainterEngine/platform/windows gdi/px_display.h @@ -0,0 +1,8 @@ +#ifndef PX_DISPLAY_H +#define PX_DISPLAY_H +#include "windows.h" + +int PX_DisplayInitialize(HWND hwdn, int width, int height); +void PX_DisplayRender(void* bgra,int x,int y); +void* PX_DisplayCaptureScreenBitmap(int* outSize); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/windows/makefile b/UI/PainterEngine/platform/windows/makefile new file mode 100644 index 0000000..34f83e6 --- /dev/null +++ b/UI/PainterEngine/platform/windows/makefile @@ -0,0 +1,61 @@ +#mingw32-64 makefile +##################################################### +target :=PainterEngine.exe +project_path := ..\..\project +painterengine_path := ..\.. +##################################################### + +project_build := $(wildcard $(project_path)/*.c) +project_build_o := $(patsubst %.c,%.o,$(project_build)) + +painterengine_build_core := $(wildcard $(painterengine_path)/core/*.c) +painterengine_build_painterengine_o := $(patsubst %.c,%.o,$(painterengine_build_core)) + +painterengine_build_kernel := $(wildcard $(painterengine_path)/kernel/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_kernel)) + +painterengine_build_architecture := $(wildcard $(painterengine_path)/architecture/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_architecture)) + +painterengine_build_platform := $(wildcard $(painterengine_path)/platform/windows/*.c) +painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_platform)) + +painterengine_build_platform := $(wildcard $(painterengine_path)/platform/windows/*.cpp) +painterengine_build_painterengine_o += $(patsubst %.cpp,%.o,$(painterengine_build_platform)) + +all:$(project_build_o) $(painterengine_build_painterengine_o) + gcc $(project_build_o) $(painterengine_build_painterengine_o) \ + -o $(project_path)\$(target) \ + -I "$(painterengine_path)" \ + -I "$(project_path)" \ + -I "$(painterengine_path)\platform\windows" \ + -L. -lwinmm -ld2d1 -lws2_32 -ldsound -lcomdlg32 + $(project_path)\$(target) + make clean + + +$(project_path)/%.o:$(project_path)/%.c + gcc -c $^ -o $@ -I "$(painterengine_path)" -I "$(painterengine_path)/platform/windows" + +$(painterengine_path)/architecture/%.o:$(painterengine_path)/architecture/%.c + gcc -c $^ -o $@ -I "$(painterengine_path)" + +$(painterengine_path)/kernel/%.o:$(painterengine_path)/kernel/%.c + gcc -c $^ -o $@ + +$(painterengine_path)/core/%.o:$(painterengine_path)/core/%.c + gcc -c $^ -o $@ + +$(painterengine_path)/platform/windows/%.o:$(painterengine_path)/platform/windows/%.c + gcc -c $^ -o $@ -I "$(project_path)" -I "$(painterengine_path)" -I "$(painterengine_path)/platform/windows" + + +.PHONY:clean +clean: + -del /s "$(painterengine_path)\core\*.o" + -del /s "$(painterengine_path)\kernel\*.o" + -del /s "$(painterengine_path)\architecture\*.o" + -del /s "$(painterengine_path)\platform\windows\*.o" + -del /s "$(project_path)\*.o" + + \ No newline at end of file diff --git a/UI/PainterEngine/platform/windows/mingw_build.bat b/UI/PainterEngine/platform/windows/mingw_build.bat new file mode 100644 index 0000000..ac08cdc --- /dev/null +++ b/UI/PainterEngine/platform/windows/mingw_build.bat @@ -0,0 +1 @@ +make \ No newline at end of file diff --git a/UI/PainterEngine/platform/windows/px_audio.cpp b/UI/PainterEngine/platform/windows/px_audio.cpp new file mode 100644 index 0000000..12f5ad2 --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_audio.cpp @@ -0,0 +1,394 @@ + +#include +#include +#pragma comment (lib,"dsound.lib") + +extern "C" +{ + #include "../../core/PX_Sound.h" + int PX_AudioInitialize(PX_SoundPlay *soundPlay); + int PX_AudioInitializeEx(); + void PX_AudioSetVolume( unsigned int Vol ); + void PX_AudioPlay( unsigned long Vol ); + int PX_AudioGetStandbyBufferSize(); + int PX_AudioWriteBuffer(void *pBuffer,size_t Size ); + BOOL PX_AudioCaptureOpen(GUID dev_id,int channel); + void PX_AudioCaptureClose(); + DWORD PX_AudioCaptureReadEx(void *pBuffer,px_int buffersize,px_int align); + DWORD PX_AudioCaptureRead(void *buffer,px_int buffersize); + LPDIRECTSOUNDBUFFER PX_AudioGetDirectSoundBuffer(); +}; + +#define DSOUND_BUFFER_SIZE (1764*16) + +static LPDIRECTSOUNDBUFFER DSound_lpdbsBuffer; +static DSBUFFERDESC DSound_dsbd; +static LPDIRECTSOUND DSound_lpds; +static WAVEFORMATEX DSound_waveformat; +static PX_SoundPlay *DSound_soundplay; +static px_byte DSound_data[DSOUND_BUFFER_SIZE]; +volatile static DWORD DSound_wPosition=0; + + + +DWORD _stdcall DEMO_DSoundProc(LPVOID p) +{ + px_dword wsize=0; + + while (!DSound_soundplay) + { + Sleep(10); + } + + while(1) + { + wsize=PX_AudioGetStandbyBufferSize(); + + if (PX_SoundPlayGetDataCount(DSound_soundplay)) + { + + if (wsize>DSOUND_BUFFER_SIZE) + { + wsize=DSOUND_BUFFER_SIZE; + } + PX_SoundPlayRead(DSound_soundplay,DSound_data,wsize); + PX_AudioWriteBuffer(DSound_data,wsize); + } + else + { + memset(DSound_data,0,DSOUND_BUFFER_SIZE); + PX_AudioWriteBuffer(DSound_data,wsize); + } + Sleep(10); + } +} + +extern HWND Win_Hwnd; +int PX_AudioInitialize(PX_SoundPlay *soundPlay) +{ + DSound_soundplay=soundPlay; + return 1; +} +int PX_AudioInitializeEx() +{ + VOID* pDSLockedBuffer =NULL; + DWORD dwDSLockedBufferSize =0; + HANDLE hThread; + DWORD threadId; + HWND hwnd=Win_Hwnd; + BOOL startThread=PX_TRUE; + /*Sound Play*/ + if (!DSound_soundplay) + { + return 1; + } + + //DSound created + if(DSound_lpds==NULL) + { + if(DirectSoundCreate(NULL,&DSound_lpds,NULL) == DS_OK) + { + if(DSound_lpds ->SetCooperativeLevel(hwnd,DSSCL_NORMAL)!=DS_OK) + { + return FALSE; + } + } + } + + + /////////////////////////////////////////////////////////////////////////// + //Create Sound buffer + + + DSound_waveformat.wFormatTag = WAVE_FORMAT_PCM; + DSound_waveformat.nSamplesPerSec = 44100;//44100; + DSound_waveformat.wBitsPerSample = 16;// + DSound_waveformat.nChannels = 2;// + DSound_waveformat.nBlockAlign = (DSound_waveformat.wBitsPerSample >> 3) * DSound_waveformat.nChannels;; + DSound_waveformat.nAvgBytesPerSec = DSound_waveformat.nBlockAlign * DSound_waveformat.nSamplesPerSec; + DSound_waveformat.cbSize = 0; + + memset(&DSound_dsbd,0,sizeof(DSBUFFERDESC)); + DSound_dsbd.dwSize = sizeof(DSBUFFERDESC); + DSound_dsbd.dwFlags=DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPOSITIONNOTIFY |DSBCAPS_GETCURRENTPOSITION2|DSBCAPS_CTRLVOLUME ; + DSound_dsbd.dwBufferBytes =DSOUND_BUFFER_SIZE; + DSound_dsbd.lpwfxFormat =&DSound_waveformat; + DSound_dsbd.dwReserved=0; + + + HRESULT hr; + if(FAILED(hr=DSound_lpds ->CreateSoundBuffer(&DSound_dsbd,&DSound_lpdbsBuffer,NULL))) + { + return FALSE; + } + + PX_AudioSetVolume(0); + + if(DSound_lpdbsBuffer ->Lock(0,DSOUND_BUFFER_SIZE,&pDSLockedBuffer,&dwDSLockedBufferSize,NULL,NULL,0)) + return FALSE; + + memset(pDSLockedBuffer,0,dwDSLockedBufferSize); + + DSound_lpdbsBuffer->Unlock(pDSLockedBuffer,dwDSLockedBufferSize,NULL,0); + DSound_lpdbsBuffer->Play(0,0,DSBPLAY_LOOPING); + + if(startThread) + hThread = CreateThread(NULL, 0, DEMO_DSoundProc, 0, 0, &threadId); + + return TRUE; +} + +LPDIRECTSOUNDBUFFER PX_AudioGetDirectSoundBuffer() +{ + return DSound_lpdbsBuffer; +} + + + +void PX_AudioSetVolume( unsigned int Vol ) +{ + DSound_lpdbsBuffer->SetVolume(Vol); +} + +void PX_AudioPlay( unsigned long Vol ) +{ + DSound_lpdbsBuffer->Play(0,0,DSBPLAY_LOOPING); +} + + +int PX_AudioGetStandbyBufferSize() +{ + DWORD PlayCursor,__w; + + if (FAILED(DSound_lpdbsBuffer->GetCurrentPosition(&PlayCursor,&__w))) + { + return 0; + } + + if (DSound_wPosition>PlayCursor) + { + return DSOUND_BUFFER_SIZE-(DSound_wPosition-PlayCursor); + } + else + { + return PlayCursor-DSound_wPosition; + } +} + +int PX_AudioWriteBuffer(void *pBuffer,size_t Size ) +{ + DWORD wbuf1_size,wbuf2_size; + VOID* pDSLockedBuffer =NULL; + DWORD dwDSLockedBufferSize =0; + + if (Size>DSOUND_BUFFER_SIZE) + { + PX_ASSERT(); + } + + wbuf1_size=DSOUND_BUFFER_SIZE-DSound_wPosition; + if (wbuf1_size>Size) + { + wbuf1_size= (DWORD)Size; + } + + Size-=wbuf1_size; + + if(DSound_lpdbsBuffer ->Lock(DSound_wPosition,wbuf1_size,&pDSLockedBuffer,&dwDSLockedBufferSize,NULL,NULL,0L)) + return FALSE; + + memcpy(pDSLockedBuffer,pBuffer,dwDSLockedBufferSize); + + DSound_lpdbsBuffer->Unlock(pDSLockedBuffer,dwDSLockedBufferSize,NULL,0); + + DSound_wPosition+=wbuf1_size; + + if (DSound_wPosition>=DSOUND_BUFFER_SIZE) + { + DSound_wPosition=0; + } + + if (Size) + { + pBuffer=((char *)pBuffer+wbuf1_size); + + wbuf2_size=(DWORD)Size; + + if(DSound_lpdbsBuffer ->Lock(0,wbuf2_size,&pDSLockedBuffer,&dwDSLockedBufferSize,NULL,NULL,0L)) + return FALSE; + + memcpy(pDSLockedBuffer,pBuffer,dwDSLockedBufferSize); + + DSound_lpdbsBuffer->Unlock(pDSLockedBuffer,dwDSLockedBufferSize,NULL,0); + + DSound_wPosition+=wbuf2_size; + } + + + return (DWORD)Size; +} + +#define DSOUNDCAPTURE_CHANNEL 1 +#define DSOUNDCAPTURE_SAMPLERATE 44100 +#define DSOUNDCAPTURE_BITS 16 +#define DSOUNDCAPTURE_BUFFER_SIZE (DSOUNDCAPTURE_SAMPLERATE*DSOUNDCAPTURE_CHANNEL*DSOUNDCAPTURE_BITS/8*2) //2 second cache buffer + +static LPDIRECTSOUNDCAPTURE8 DSoundCapture_pCapDev ; //capture device ptr +static LPDIRECTSOUNDCAPTUREBUFFER DSoundCapture_pCapBuf=PX_NULL ; //capture loop buffer ptr +static GUID DSoundCapture_guidCapDevId ; //capture device id +static WAVEFORMATEX DSoundCapture_wfxInput; //input wave format description struct +volatile static DWORD DSoundCapture_RPosition; + +BOOL PX_AudioCaptureOpen(GUID dev_id,int channel) +{ + HRESULT hr ; + + DSoundCapture_guidCapDevId = dev_id ; + + if (DSoundCapture_pCapBuf||DSoundCapture_pCapDev) + { + PX_AudioCaptureClose(); + } + + + // Create IDirectSoundCapture using the preferred capture device + hr = DirectSoundCaptureCreate(&DSoundCapture_guidCapDevId, &DSoundCapture_pCapDev, NULL ) ; + // init wave format + + if (FAILED(hr)) return PX_FALSE; + + // get the default capture wave formate + ZeroMemory(&DSoundCapture_wfxInput, sizeof(WAVEFORMATEX)) ; + DSoundCapture_wfxInput.wFormatTag = WAVE_FORMAT_PCM; + // 8KHz, 16 bits PCM, Mono + DSoundCapture_wfxInput.nSamplesPerSec = 44100 ; + DSoundCapture_wfxInput.wBitsPerSample = 16 ; + DSoundCapture_wfxInput.nChannels = channel ; + DSoundCapture_wfxInput.nBlockAlign = DSoundCapture_wfxInput.nChannels * ( DSoundCapture_wfxInput.wBitsPerSample / 8 ) ; + DSoundCapture_wfxInput.nAvgBytesPerSec = DSoundCapture_wfxInput.nBlockAlign * DSoundCapture_wfxInput.nSamplesPerSec; + + //Create CaptureBuffer + DSCBUFFERDESC dscbd; + + // Create the capture buffer + ZeroMemory( &dscbd, sizeof(dscbd) ); + dscbd.dwSize = sizeof(dscbd); + dscbd.dwBufferBytes = DSOUNDCAPTURE_BUFFER_SIZE; + dscbd.lpwfxFormat = &DSoundCapture_wfxInput ; // Set the format during creatation + + + + if( FAILED( hr = DSoundCapture_pCapDev->CreateCaptureBuffer( &dscbd, &DSoundCapture_pCapBuf, NULL ) ) ) + return PX_FALSE ; + + DSoundCapture_RPosition=0; + + DSoundCapture_pCapBuf->Start(DSCBSTART_LOOPING); + + return PX_TRUE; + +} + +#include "stdio.h" +DWORD PX_AudioCaptureReadEx(void *pBuffer,px_int buffersize,px_int align) +{ + DWORD rbuf1_size,rbuf2_size,Size=0; + VOID* pDSLockedBuffer =NULL; + DWORD dwDSLockedBufferSize =0; + + DWORD RecorderCursor,__r; + DWORD ReadySize; + + if (FAILED(DSoundCapture_pCapBuf->GetCurrentPosition(&RecorderCursor,&__r))) + { + return 0; + } + + if (DSoundCapture_RPosition>RecorderCursor) + { + ReadySize= DSOUNDCAPTURE_BUFFER_SIZE-(DSoundCapture_RPosition-RecorderCursor); + } + else + { + ReadySize= RecorderCursor-DSoundCapture_RPosition; + } + + if ((DWORD)buffersizeReadySize) + { + rbuf1_size=ReadySize; + } + + ReadySize-=rbuf1_size; + + if(DSoundCapture_pCapBuf ->Lock(DSoundCapture_RPosition,rbuf1_size,&pDSLockedBuffer,&dwDSLockedBufferSize,NULL,NULL,0L)) + return FALSE; + + memcpy(pBuffer,pDSLockedBuffer,dwDSLockedBufferSize); + Size+=dwDSLockedBufferSize; + DSoundCapture_pCapBuf->Unlock(pDSLockedBuffer,dwDSLockedBufferSize,NULL,0); + + DSoundCapture_RPosition+=rbuf1_size; + + if (DSoundCapture_RPosition>=DSOUNDCAPTURE_BUFFER_SIZE) + { + DSoundCapture_RPosition=0; + } + + if (ReadySize) + { + pBuffer=((char *)pBuffer+rbuf1_size); + + rbuf2_size=ReadySize; + + if(DSoundCapture_pCapBuf ->Lock(0,rbuf2_size,&pDSLockedBuffer,&dwDSLockedBufferSize,NULL,NULL,0L)) + return FALSE; + + memcpy(pBuffer,pDSLockedBuffer,dwDSLockedBufferSize); + + Size+=dwDSLockedBufferSize; + DSoundCapture_pCapBuf->Unlock(pDSLockedBuffer,dwDSLockedBufferSize,NULL,0); + + DSoundCapture_RPosition+=rbuf2_size; + } + return Size; +} + + + +DWORD PX_AudioCaptureRead(void *pBuffer,px_int buffersize) +{ + return PX_AudioCaptureReadEx(pBuffer,buffersize,1); +} + +void PX_AudioCaptureClose() +{ + if (DSoundCapture_pCapBuf) + { + DSoundCapture_pCapBuf->Stop(); + DSoundCapture_pCapBuf->Release(); + DSoundCapture_pCapBuf=PX_NULL; + } + if (DSoundCapture_pCapDev) + { + DSoundCapture_pCapDev->Release(); + DSoundCapture_pCapDev=PX_NULL; + } + + + DSoundCapture_RPosition=0; +} diff --git a/UI/PainterEngine/platform/windows/px_display.cpp b/UI/PainterEngine/platform/windows/px_display.cpp new file mode 100644 index 0000000..cb4c8bf --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_display.cpp @@ -0,0 +1,691 @@ +#include +#include +#include +#pragma comment(lib,"d2d1.lib") + +typedef struct +{ + UINT uMsg; + LPARAM lparam; + WPARAM wparam; +}WM_MESSAGE; + +extern "C" BOOL PX_CreateWindow( int windowWidth,int windowHeight, int surfaceWidth,int surfaceHeight,const char *name); +extern "C" BOOL PX_WindowResize(int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight); + +extern "C" int PX_GetScreenHeight(); +extern "C" int PX_GetScreenWidth(); +extern "C" int PX_SetWindowResizeable(); + +extern "C" HWND PX_GetWindowHwnd(); +extern "C" VOID PX_SystemReadDeviceState(); +extern "C" BOOL PX_SystemLoop(); +extern "C" BOOL PX_SystemRender(void *raw,int width,int height); +extern "C" BOOL PX_SystemisAvtivated(); +extern "C" BOOL PX_KeyboardDown(unsigned char X ); +extern "C" char *PX_KeyboardString(); +extern "C" char *PX_DragfileString(); +extern "C" BOOL PX_MouseLButtonDown(); +extern "C" BOOL PX_MouseRButtonDown(); +extern "C" BOOL PX_MouseMButtonDown(); +extern "C" POINT PX_MousePosition(); +extern "C" BOOL PX_KeyDown(unsigned char key); +extern "C" BOOL PX_MouseWheel(int *x,int *y,int *delta); +extern "C" BOOL PX_GetWinMessage(WM_MESSAGE *Msg); +extern "C" char *PX_OpenFileDialog(const char Filter[]); +extern "C" char *PX_MultFileDialog(const char Filter[]); +extern "C" char *PX_SaveFileDialog(const char Filter[],const char ext[]); +extern "C" double PX_GetWindowScale(); +#define WIN_MAX_INPUT_STRING_LEN 64 +#define WIN_MAX_INPUT_SPECKEY_LEN 0xff + + +#define WIN_KEYDOWN_BACKSPACE 1 +#define WIN_KEYDOWN_RETURN 2 +#define WIN_KEYDOWN_LEFT 3 +#define WIN_KEYDOWN_RIGHT 4 +#define WIN_KEYDOWN_UP 5 +#define WIN_KEYDOWN_DOWN 6 + + +#define WIN_MESSAGESTACK_SIZE 32 + +HWND Win_Hwnd; +int Win_Height; +int Win_Width; +double Win_Scale; +int Surface_Height; +int Surface_Width; +BOOL Win_Activated; +WM_MESSAGE Win_messageStack[WIN_MESSAGESTACK_SIZE]={0}; +unsigned char DInput_KeyBoardState[256]; +char DInput_AccepyFile[MAX_PATH]={0}; +POINT DInput_MousePosition; +POINT DInput_MouseWheelPosition; +POINT DInput_MouseWheelDelta; + + +unsigned int D2D_ColorConversion; +ID2D1Bitmap *D2D_pSurface; +ID2D1Factory* D2D_pDirect2dFactory; +ID2D1HwndRenderTarget *D2D_pRenderTarget; + + + + + +static WNDCLASSEXA Win_Wcx; + +///////////////////////////////////////////////////// +LRESULT CALLBACK AppWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +///////////////////////////////////////////////////// + + +void DInput_Update() +{ + POINT point; + GetCursorPos(&point); + ScreenToClient(Win_Hwnd,&point); + DInput_MousePosition=point; +} + +BOOL PX_D3DReset(HWND hWnd,int Width,int Height,BOOL bfullScreen) +{ + return TRUE; +} + +int PX_GetScreenHeight() +{ + return GetSystemMetrics(SM_CYSCREEN); +} + +int PX_GetScreenWidth() +{ + return GetSystemMetrics(SM_CXSCREEN); +} + +BOOL PX_WindowResize(int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight) +{ + HRESULT hr; + D2D1_SIZE_U size; + RECT rc; + + Win_Width=windowWidth; + Win_Height=windowHeight; + + GetClientRect(Win_Hwnd, &rc); + + size.width=rc.right - rc.left; + size.height=rc.bottom - rc.top; + + hr=D2D_pRenderTarget->Resize(size); + + if (FAILED(hr)) + { + return FALSE; + } + + size = D2D1::SizeU( + surfaceWidth, + surfaceHeight + ); + + Surface_Height=surfaceHeight; + Surface_Width=surfaceWidth; + + if(D2D_pSurface) + D2D_pSurface->Release(); + + D2D1_BITMAP_PROPERTIES bitmapformat; + bitmapformat.dpiX=0; + bitmapformat.dpiY=0; + bitmapformat.pixelFormat=D2D1::PixelFormat(DXGI_FORMAT_R8G8B8A8_UNORM,D2D1_ALPHA_MODE_IGNORE); + hr=D2D_pRenderTarget->CreateBitmap(size,bitmapformat,&D2D_pSurface); + D2D_ColorConversion=0; + + if (FAILED(hr)) + { + + D2D1_BITMAP_PROPERTIES bitmapformat; + bitmapformat.dpiX=0; + bitmapformat.dpiY=0; + bitmapformat.pixelFormat=D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,D2D1_ALPHA_MODE_IGNORE); + + hr=D2D_pRenderTarget->CreateBitmap(size,bitmapformat,&D2D_pSurface); + D2D_ColorConversion=1; + if(FAILED(hr)) + return FALSE; + } + + return TRUE; + +} +BOOL PX_CreateWindow( int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight,const char *name) +{ + HRESULT hr; + D2D1_SIZE_U size; + RECT rc; + + if (Win_Wcx.cbSize==0) + { + //////////////////////////////////////////////////////////////////////////// + // Initialize Window class struct + /////////////////////////////////////////////////////////////////////////// + Win_Wcx.cbSize = sizeof(WNDCLASSEX); + Win_Wcx.style = CS_CLASSDC; + Win_Wcx.lpfnWndProc = AppWindowProc; + Win_Wcx.cbClsExtra = 0; + Win_Wcx.cbWndExtra = 0; + Win_Wcx.hInstance = GetModuleHandle(NULL); + Win_Wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); + Win_Wcx.hCursor = LoadCursor(NULL, IDC_ARROW); + Win_Wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW); + Win_Wcx.lpszMenuName = NULL; + Win_Wcx.lpszClassName = "WindowCls"; + Win_Wcx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); + + + /////////////////////////////////////////////////////////////////////////// + //Class Register + /////////////////////////////////////////////////////////////////////////// + if(!RegisterClassExA(&Win_Wcx)) + return FALSE; + } + + + Win_Width=windowWidth; + Win_Height=windowHeight; + + //////////////////////////////////////////////////////////////////////////// + //Create window + //////////////////////////////////////////////////////////////////////////// +#ifdef _UNICODE + do + { + WCHAR wname[128]={0}; + MultiByteToWideChar(CP_ACP, 0,name, (int)strlen(name), wname,128); + Win_Hwnd = CreateWindowA("WindowCls", (LPCSTR)wname, + WS_OVERLAPPED|WS_SYSMENU|WS_MAXIMIZEBOX|WS_SIZEBOX, + CW_USEDEFAULT, CW_USEDEFAULT, + Win_Width, Win_Height, + NULL, NULL, GetModuleHandle(NULL), NULL); + } while (0); +#else + Win_Hwnd = CreateWindowA("WindowCls", name, + WS_OVERLAPPED|WS_SYSMENU|WS_MAXIMIZEBOX|WS_SIZEBOX, + CW_USEDEFAULT, CW_USEDEFAULT, + Win_Width, Win_Height, + NULL, NULL, GetModuleHandle(NULL), NULL); +#endif + + + + if(!Win_Hwnd) + { + MessageBoxA(0,"create window failed","error",MB_OK); + return FALSE; + } + + + //////////////////////////////////////////////////////////////////////////// + //Show window + //////////////////////////////////////////////////////////////////////////// + ShowWindow(Win_Hwnd, SW_SHOWNORMAL); + UpdateWindow(Win_Hwnd); + //CoInitialize(NULL); + DragAcceptFiles(Win_Hwnd,TRUE); + ////////////////////////////////////////////////////////////////////////// + // + + if((Win_Hwnd) == NULL) + return FALSE; + + hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,&D2D_pDirect2dFactory); + if (FAILED(hr)) + { + MessageBoxA(0,"could not create d2d factory","error",MB_OK); + return FALSE; + } + + GetClientRect(Win_Hwnd, &rc); + SetWindowPos(Win_Hwnd,0,0,0,windowWidth+windowWidth-(rc.right - rc.left),windowHeight+windowHeight-(rc.bottom - rc.top),SWP_NOMOVE); + GetClientRect(Win_Hwnd, &rc); + + + size.width=rc.right - rc.left; + size.height=rc.bottom - rc.top; + + hr=D2D_pDirect2dFactory->CreateHwndRenderTarget( + D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT, D2D1::PixelFormat(), 96.0F, 96.0F, D2D1_RENDER_TARGET_USAGE_NONE, D2D1_FEATURE_LEVEL_DEFAULT), + D2D1::HwndRenderTargetProperties(Win_Hwnd, size), + &D2D_pRenderTarget + ); + + if (FAILED(hr)) + { + MessageBoxA(0,"could not create d2d render target","error",MB_OK); + return FALSE; + } + + + size = D2D1::SizeU( + surfaceWidth, + surfaceHeight + ); + Surface_Height=surfaceHeight; + Surface_Width=surfaceWidth; + + + + D2D1_BITMAP_PROPERTIES bitmapformat; + bitmapformat.dpiX=0; + bitmapformat.dpiY=0; + bitmapformat.pixelFormat=D2D1::PixelFormat(DXGI_FORMAT_R8G8B8A8_UNORM,D2D1_ALPHA_MODE_IGNORE); + hr=D2D_pRenderTarget->CreateBitmap(size,bitmapformat,&D2D_pSurface); + D2D_ColorConversion=0; + + if (FAILED(hr)) + { + + D2D1_BITMAP_PROPERTIES bitmapformat; + bitmapformat.dpiX=0; + bitmapformat.dpiY=0; + bitmapformat.pixelFormat=D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,D2D1_ALPHA_MODE_IGNORE); + + hr=D2D_pRenderTarget->CreateBitmap(size,bitmapformat,&D2D_pSurface); + D2D_ColorConversion=1; + if(FAILED(hr)) + return FALSE; + } + + + if (FAILED(hr)) + { + MessageBoxA(0,"could not create d2d bitmap","error",MB_OK); + return FALSE; + } + + PX_GetWindowScale(); + return TRUE; +} +///////////////////////////////////////////////////////////// +char Win_Str[WIN_MAX_INPUT_STRING_LEN]={0}; +char Win_SpecKey[WIN_MAX_INPUT_SPECKEY_LEN]={0}; +int Win_CurrentIndex=0; +#include "stdio.h" +LRESULT CALLBACK AppWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + +// if(uMsg==0x246) +// printf("%x\n",uMsg); + WM_MESSAGE message; + int i; + + switch(uMsg) + { + case WM_MOUSEMOVE: + case WM_MBUTTONDOWN: + case WM_MBUTTONUP: + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + break; + case WM_KILLFOCUS: + { + Win_Activated=FALSE; + } + break; + case WM_SETFOCUS: + { + Win_Activated=TRUE; + } + break; + case WM_KEYDOWN: + { + Win_SpecKey[wParam]=1; + } + break; + case WM_MOUSEWHEEL: + { + DInput_MouseWheelPosition.x=GET_X_LPARAM(lParam); + DInput_MouseWheelPosition.y=GET_Y_LPARAM(lParam); + DInput_MouseWheelDelta.x=0; + DInput_MouseWheelDelta.y=GET_WHEEL_DELTA_WPARAM(wParam); + } + break; + case WM_CHAR: + { + if(Win_CurrentIndex=32||wParam==8) + { + Win_Str[Win_CurrentIndex++]=(char)wParam; + Win_Str[Win_CurrentIndex]='\0'; + } + } + } + break; + case WM_DROPFILES: + { + HDROP hdrop = (HDROP)wParam; + DragQueryFileA(hdrop, 0, DInput_AccepyFile, MAX_PATH); + DragFinish(hdrop); + } + break; + case WM_CLOSE: + { + PostQuitMessage(0); + exit(0); + } + break; + case WM_DESTROY: + { + PostQuitMessage(0); + return 0; + } + break; + case WM_SIZE: + { + + } + break; + default: return DefWindowProc(hWnd,uMsg,wParam,lParam); + } + + message.uMsg=uMsg; + message.wparam=wParam; + message.lparam=lParam; + for (i=0;iBeginDraw(); + D2D_pRenderTarget->Clear(); + if (D2D_ColorConversion) + { + int i; + DWORD *pData=(DWORD *)raw; + for (i=0;i>16)&0x000000FF)+((pData[i]<<16)&0x00FF0000); + } + } + D2D_pSurface->CopyFromMemory(&size,raw,width*sizeof(DWORD)); + D2D_pRenderTarget->DrawBitmap(D2D_pSurface,screenSize); + D2D_pRenderTarget->EndDraw(); + + return TRUE; +} + +BOOL PX_SystemisAvtivated() +{ + return Win_Activated; +} + +BOOL PX_KeyboardDown(unsigned char X) +{ + return (DInput_KeyBoardState[X]&0x80?TRUE:FALSE); +} + +BOOL PX_MouseLButtonDown() +{ + return GetAsyncKeyState(VK_LBUTTON) & 0xFF00; +} + +BOOL PX_MouseRButtonDown() +{ + return GetAsyncKeyState(VK_RBUTTON) & 0xFF00; +} + +BOOL PX_MouseMButtonDown() +{ + return GetAsyncKeyState(VK_MBUTTON) & 0xFF00; +} + +POINT PX_MousePosition() +{ + return DInput_MousePosition; +} + +char * PX_KeyboardString() +{ + if(Win_CurrentIndex!=0) + { + Win_CurrentIndex=0; + return Win_Str; + } + else + { + return 0; + } +} + +VOID PX_SystemReadDeviceState() +{ + DInput_Update(); +} + +char * PX_DragfileString() +{ + return DInput_AccepyFile; +} + +HWND PX_GetWindowHwnd() +{ + return Win_Hwnd; +} + +BOOL PX_KeyDown(unsigned char key) +{ + if (Win_SpecKey[key]) + { + Win_SpecKey[key]=0; + return TRUE; + } + return FALSE; +} + +BOOL PX_MouseWheel(int *x,int *y,int *delta) +{ + if (DInput_MouseWheelDelta.y!=0) + { + *x=DInput_MouseWheelPosition.x; + *y=DInput_MouseWheelPosition.y; + *delta=DInput_MouseWheelDelta.y; + DInput_MouseWheelDelta.y=0; + return TRUE; + } + return FALSE; +} + +BOOL PX_GetWinMessage(WM_MESSAGE *Msg) +{ + int i; + for (i=0;i=0) + { + if (szFile[oft]=='\\'||szFile[oft]=='/') + { + szFile[oft]=0; + break; + } + oft--; + } + } + return szFile; + } + return NULL; +} + +char *PX_SaveFileDialog(const char Filter[],const char ext[]) +{ + OPENFILENAMEA ofn; + static char szFile[MAX_PATH]; + ZeroMemory(&ofn,sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.lpstrFile = szFile; + ofn.lpstrFile[0] = TEXT('\0'); + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFilter = Filter;//TEXT("MirrorÎļþ(.mirror)\0*.mirror"); + ofn.nFilterIndex = 1; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.hwndOwner = Win_Hwnd; + ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST |OFN_NOCHANGEDIR; + + if (GetSaveFileNameA(&ofn)) + { + if (ext) + { + char uprFile[MAX_PATH]={0}; + char uprExt[MAX_PATH]={0}; + strcpy_s(uprExt,ext); + _strupr_s(uprExt,MAX_PATH); + strcpy_s(uprFile,szFile); + _strupr_s(uprFile,MAX_PATH); + if (!strstr(uprFile,uprExt)) + { + strcat_s(szFile,sizeof(szFile),ext); + } + } + return szFile; + } + return NULL; +} + + + + +int PX_SetWindowResizeable() +{ + return SetWindowLong(Win_Hwnd,GWL_STYLE,WS_OVERLAPPED|WS_SYSMENU); +} + +double PX_GetWindowScale() +{ + + HWND hWnd = GetDesktopWindow(); + HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST); + + + MONITORINFOEX miex; + miex.cbSize = sizeof(miex); + GetMonitorInfo(hMonitor, &miex); + int cxLogical = (miex.rcMonitor.right - miex.rcMonitor.left); + int cyLogical = (miex.rcMonitor.bottom - miex.rcMonitor.top); + + + DEVMODE dm; + dm.dmSize = sizeof(dm); + dm.dmDriverExtra = 0; + EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm); + int cxPhysical = dm.dmPelsWidth; + int cyPhysical = dm.dmPelsHeight; + + + double horzScale = ((double)cxPhysical / (double)cxLogical); + double vertScale = ((double)cyPhysical / (double)cyLogical); + + Win_Scale=horzScale; + return horzScale; +} diff --git a/UI/PainterEngine/platform/windows/px_display.h b/UI/PainterEngine/platform/windows/px_display.h new file mode 100644 index 0000000..02a1357 --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_display.h @@ -0,0 +1,46 @@ +#ifndef PX_PLATFORM_WINDOWS +#define PX_PLATFORM_WINDOWS + +#include +#include "stdio.h" +#include "time.h" +#pragma comment(lib,"User32.lib") +#pragma comment(lib,"Shell32.lib") +#pragma comment(lib,"Ole32.lib") +#pragma comment(lib,"winmm.lib" ) + + +typedef struct +{ + UINT uMsg; + LPARAM lparam; + WPARAM wparam; +}WM_MESSAGE; + +extern BOOL PX_CreateWindow( int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name); +extern BOOL PX_WindowResize(int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight); +extern int PX_GetScreenHeight(); +extern int PX_GetScreenWidth(); +extern int PX_SetWindowResizeable(); + +extern HWND PX_GetWindowHwnd(); +extern VOID PX_SystemReadDeviceState(); +extern BOOL PX_SystemLoop(); +extern BOOL PX_SystemRender(void *raw,int width,int height); +extern BOOL PX_SystemisAvtivated(); +extern BOOL PX_KeyboardDown(unsigned char X ); +extern char *PX_KeyboardString(); +extern char *PX_DragfileString(); +extern BOOL PX_MouseLButtonDown(); +extern BOOL PX_MouseRButtonDown(); +extern BOOL PX_MouseMButtonDown(); +extern POINT PX_MousePosition(); +extern BOOL PX_KeyDown(unsigned char key); +extern BOOL PX_MouseWheel(int *x,int *y,int *delta); +extern BOOL PX_GetWinMessage(WM_MESSAGE *Msg); +extern double PX_GetWindowScale(); + +extern char *PX_OpenFileDialog(const char Filter[]); +extern char *PX_MultFileDialog(const char Filter[]); +extern char *PX_SaveFileDialog(const char Filter[],const char ext[]); +#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/windows/px_file.c b/UI/PainterEngine/platform/windows/px_file.c new file mode 100644 index 0000000..63b42ba --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_file.c @@ -0,0 +1,351 @@ + +#include "../modules/px_file.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include "windows.h" + +int PX_SaveDataToFile(void *buffer,int size,const char path[]) +{ + char _path[MAX_PATH]; + FILE *pf; + if (path[0]=='\\'||path[0]=='/') + { + strcpy_s(_path,sizeof(_path),path+1); + } + else + { + strcpy_s(_path,sizeof(_path),path); + } + fopen_s(&pf,_path,"wb"); + if (pf) + { + fwrite(buffer,1,size,pf); + fclose(pf); + return 1; + } + return 0; +} + + + +PX_IO_Data PX_LoadFileToIOData(const char path[]) +{ + PX_IO_Data io; + int fileoft=0; + FILE *pf; + int filesize; + char _path[MAX_PATH]; + if (path[0]=='\\'||path[0]=='/') + { + strcpy_s(_path,sizeof(_path),path+1); + } + else + { + strcpy_s(_path,sizeof(_path),path); + } + + fopen_s(&pf,_path,"rb"); + if (!pf) + { + goto _ERROR; + } + + fseek(pf,0,SEEK_END); + filesize=ftell(pf); + fseek(pf,0,SEEK_SET); + + io.buffer=(unsigned char *)malloc(filesize+1); + if (!io.buffer) + { + goto _ERROR; + } + + while (!feof(pf)) + { + fileoft+=(int)fread(io.buffer+fileoft,1,1024,pf); + } + fclose(pf); + + io.buffer[filesize]='\0'; + io.size=filesize; + return io; +_ERROR: + io.buffer=0; + io.size=0; + return io; +} + +void PX_FreeIOData(PX_IO_Data *io) +{ + if (io->size&&io->buffer) + { + free(io->buffer); + io->size=0; + io->buffer=0; + } +} + +int PX_FileExist(const char path[]) +{ + char _path[MAX_PATH]; + FILE *pf; + if (path[0]=='\\'||path[0]=='/') + { + strcpy_s(_path,sizeof(_path),path+1); + } + else + { + strcpy_s(_path,sizeof(_path),path); + } + + fopen_s(&pf,_path,"rb");; + if (pf) + { + fclose(pf); + return 1; + } + return 0; +} + + + + +int PX_FileGetDirectoryFileCount(const char path[],PX_FILEENUM_TYPE type,const char *filter) +{ + HANDLE hFind; + int count=0; + WIN32_FIND_DATAA FindFileData; + char _findpath[MAX_PATH]; + + if (path[0]==0||(path[0]=='\\'&&path[1]=='\0')||(path[0]=='/'&&path[1]=='\0')) + { + if (type==PX_FILEENUM_TYPE_FILE) + { + return 0; + } + if (type==PX_FILEENUM_TYPE_FOLDER) + { + char drivers[128]; + int index=0; + if(GetLogicalDriveStringsA(128,drivers)) + { + while (drivers[index]) + { + count++; + index+= (int)(strlen(drivers))+1; + } + } + return count; + } + } + if (path[0]=='\\'||path[0]=='/') + { + strcpy_s(_findpath,sizeof(_findpath),path+1); + } + else + { + strcpy_s(_findpath,sizeof(_findpath),path); + } + + if (_findpath[strlen(path)-1]!='/'&&_findpath[strlen(path)-1]!='\\') + { + strcat_s(_findpath,sizeof(_findpath),"/"); + } + strcat_s(_findpath,sizeof(_findpath),"*.*"); + + hFind = FindFirstFileA(_findpath,&FindFileData); + if (hFind==INVALID_HANDLE_VALUE) + { + return 0; + } + do + { + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter[0]&&FindFileData.dwFileAttributes !=FILE_ATTRIBUTE_DIRECTORY) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(FindFileData.cFileName,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + } + + } else + { + count++; + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + case PX_FILEENUM_TYPE_FILE: + { + if (FindFileData.dwFileAttributes !=FILE_ATTRIBUTE_DIRECTORY) + { + if (filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(FindFileData.cFileName,pFilter)) + { + count++; + break; + } + pFilter+=strlen(pFilter)+1; + + } + } else + { + count++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (FindFileData.dwFileAttributes ==FILE_ATTRIBUTE_DIRECTORY) + { + count++; + } + } + break; + default: + break; + } + } while (FindNextFileA(hFind,&FindFileData)); + FindClose(hFind); + return count; +} + +int PX_FileGetDirectoryFileName(const char path[],int count,char FileName[][260],PX_FILEENUM_TYPE type,const char *filter) +{ + HANDLE hFind; + int index=0; + WIN32_FIND_DATAA FindFileData; + static char _findpath[MAX_PATH]; + + if (path[0]==0||(path[0]=='\\'&&path[1]=='\0')||(path[0]=='/'&&path[1]=='\0')) + { + int dcount=0; + if (type==PX_FILEENUM_TYPE_FILE) + { + return 0; + } + if (type==PX_FILEENUM_TYPE_FOLDER) + { + char drivers[128]; + int index=0; + if(GetLogicalDriveStringsA(128,drivers)) + { + while (drivers[index]) + { + strcpy_s(FileName[dcount],260,drivers+index); + dcount++; + index+=(int)(strlen(drivers)+1); + } + } + return dcount; + } + } + + if (path[0]=='\\'||path[0]=='/') + { + strcpy_s(_findpath,sizeof(_findpath),path+1); + } + else + { + strcpy_s(_findpath,sizeof(_findpath),path); + } + + if (_findpath[strlen(path)-1]!='/'&&_findpath[strlen(path)-1]!='\\') + { + strcat_s(_findpath,sizeof(_findpath),"/"); + } + strcat_s(_findpath,sizeof(_findpath),"*.*"); + + hFind = FindFirstFileA(_findpath,&FindFileData); + if (hFind==INVALID_HANDLE_VALUE) + { + return 0; + } + do + { + if (index>=count) + { + break; + } + + switch (type) + { + case PX_FILEENUM_TYPE_ANY: + { + if (filter[0]&&FindFileData.dwFileAttributes !=FILE_ATTRIBUTE_DIRECTORY) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(FindFileData.cFileName,pFilter)) + { + strcpy_s(FileName[index],260,FindFileData.cFileName); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy_s(FileName[index],260,FindFileData.cFileName); + index++; + } + } + break; + case PX_FILEENUM_TYPE_DEVICE: + case PX_FILEENUM_TYPE_FILE: + { + if (FindFileData.dwFileAttributes !=FILE_ATTRIBUTE_DIRECTORY) + { + if (filter[0]) + { + const char *pFilter=filter; + while (pFilter[0]) + { + if (strstr(FindFileData.cFileName,pFilter)) + { + strcpy_s(FileName[index],260,FindFileData.cFileName); + index++; + break; + } + pFilter+=strlen(pFilter)+1; + } + } else + { + strcpy_s(FileName[index],260,FindFileData.cFileName); + index++; + } + } + } + break; + case PX_FILEENUM_TYPE_FOLDER: + { + if (FindFileData.dwFileAttributes ==FILE_ATTRIBUTE_DIRECTORY) + { + strcpy_s(FileName[index],260,FindFileData.cFileName); + index++; + } + } + break; + default: + break; + } + } while (FindNextFileA(hFind,&FindFileData)); + FindClose(hFind); + return index; +} \ No newline at end of file diff --git a/UI/PainterEngine/platform/windows/px_main.c b/UI/PainterEngine/platform/windows/px_main.c new file mode 100644 index 0000000..0d185c8 --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_main.c @@ -0,0 +1,323 @@ + +//Platform supports +#include "PainterEngine_Application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#include "px_display.h" + +#ifdef __cplusplus +} +#endif + +//mouse informations +POINT main_zoomPoint; +px_int main_ZoomRegion; + +volatile px_bool main_exit=0; +////////////////////////////////////////////////////////////////////////// +DWORD WINAPI DEMO_RenderThreadFunc(LPVOID p) +{ + DWORD time,elapsed; + PX_Object_Event e; + WM_MESSAGE msg; + static POINT LastDownPoint; + px_float cursorx=-1,cursory=-1,cursorz=-1; + px_float cursorx_scale,cursory_scale; + + LastDownPoint.x=-1; + LastDownPoint.y=-1; + + /* px_char *keyBoardString;*/ + ////////////////////////////////////////////////////////////////////////// + //CreateWindow + + time=timeGetTime(); + + while(1) + { + + PX_SystemReadDeviceState(); + + elapsed=timeGetTime()-time; + time=timeGetTime(); + + cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; + cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; + + while (PX_GetWinMessage(&msg)) + { + px_char text[2]={0}; + e.Event=PX_OBJECT_EVENT_ANY; + switch(msg.uMsg) + { + case WM_SIZE: + { + px_float width=(px_float)((msg.lparam)&0xffff); + px_float height=(px_float)((msg.lparam>>16)&0xffff); + e.Event=PX_OBJECT_EVENT_WINDOWRESIZE; + PX_Object_Event_SetWidth(&e,width); + PX_Object_Event_SetHeight(&e,height); + + if (width!=0&&height!=0) + { + PX_ApplicationPostEvent(&App,e); + PX_WindowResize(App.runtime.surface_width,App.runtime.surface_height,(px_int)width, (px_int)height); + } + else + { + + } + + continue; + + } + break; + case WM_MOUSEMOVE: + { + if (msg.wparam&MK_LBUTTON) + { + e.Event=PX_OBJECT_EVENT_CURSORDRAG; + } + else + { + e.Event=PX_OBJECT_EVENT_CURSORMOVE; + } + + cursorx=(px_float)((msg.lparam)&0xffff); + cursory=(px_float)((msg.lparam>>16)&0xffff); + + PX_Object_Event_SetCursorX(&e,cursorx*cursorx_scale); + PX_Object_Event_SetCursorY(&e,cursory*cursory_scale); + } + break; + case WM_LBUTTONDOWN: + { + e.Event=PX_OBJECT_EVENT_CURSORDOWN; + cursorx=(px_float)((msg.lparam)&0xffff); + cursory=(px_float)((msg.lparam>>16)&0xffff); + PX_Object_Event_SetCursorX(&e,cursorx*cursorx_scale); + PX_Object_Event_SetCursorY(&e,cursory*cursory_scale); + + LastDownPoint.x=((msg.lparam)&0xffff); + LastDownPoint.y=((msg.lparam>>16)&0xffff); + } + break; + case WM_LBUTTONUP: + { + if (((msg.lparam)&0xffff)==LastDownPoint.x&&((msg.lparam>>16)&0xffff)==LastDownPoint.y) + { + e.Event=PX_OBJECT_EVENT_CURSORCLICK; + cursorx=(px_float)((msg.lparam)&0xffff); + cursory=(px_float)((msg.lparam>>16)&0xffff); + PX_Object_Event_SetCursorX(&e,cursorx*cursorx_scale); + PX_Object_Event_SetCursorY(&e,cursory*cursory_scale); + + LastDownPoint.x=-1; + LastDownPoint.y=-1; + PX_ApplicationPostEvent(&App,e); + } + e.Event=PX_OBJECT_EVENT_CURSORUP; + + cursorx=(px_float)((msg.lparam)&0xffff); + cursory=(px_float)((msg.lparam>>16)&0xffff); + PX_Object_Event_SetCursorX(&e,cursorx*cursorx_scale); + PX_Object_Event_SetCursorY(&e,cursory*cursory_scale); + } + break; + case WM_RBUTTONDOWN: + { + e.Event=PX_OBJECT_EVENT_CURSORRDOWN; + cursorx=(px_float)((msg.lparam)&0xffff); + cursory=(px_float)((msg.lparam>>16)&0xffff); + PX_Object_Event_SetCursorX(&e,cursorx*cursorx_scale); + PX_Object_Event_SetCursorY(&e,cursory*cursory_scale); + } + break; + case WM_RBUTTONUP: + { + e.Event=PX_OBJECT_EVENT_CURSORRUP; + cursorx=(px_float)((msg.lparam)&0xffff); + cursory=(px_float)((msg.lparam>>16)&0xffff); + PX_Object_Event_SetCursorX(&e,cursorx*cursorx_scale); + PX_Object_Event_SetCursorY(&e,cursory*cursory_scale); + } + break; + case WM_MBUTTONDOWN: + { + e.Event = PX_OBJECT_EVENT_CURSORMDOWN; + cursorx = (px_float)((msg.lparam) & 0xffff); + cursory = (px_float)((msg.lparam >> 16) & 0xffff); + PX_Object_Event_SetCursorX(&e, cursorx * cursorx_scale); + PX_Object_Event_SetCursorY(&e, cursory * cursory_scale); + } + break; + case WM_MBUTTONUP: + { + e.Event = PX_OBJECT_EVENT_CURSORMUP; + cursorx = (px_float)((msg.lparam) & 0xffff); + cursory = (px_float)((msg.lparam >> 16) & 0xffff); + PX_Object_Event_SetCursorX(&e, cursorx * cursorx_scale); + PX_Object_Event_SetCursorY(&e, cursory * cursory_scale); + } + break; + + case WM_KEYDOWN: + { + e.Event=PX_OBJECT_EVENT_KEYDOWN; + PX_Object_Event_SetKeyDown(&e,(px_uint)msg.wparam); + } + break; + case WM_MOUSEWHEEL: + { + RECT rect,crect; + GetClientRect(PX_GetWindowHwnd(),&crect); + GetWindowRect(PX_GetWindowHwnd(),&rect); + e.Event=PX_OBJECT_EVENT_CURSORWHEEL; + cursorx=(px_float)((msg.lparam)&0xffff)-rect.left; + cursory=(px_float)((msg.lparam>>16)&0xffff)-rect.top-((rect.bottom-rect.top)-crect.bottom)+2; + cursorz=(px_float)((px_short)((msg.wparam>>16)&0xffff)); + PX_Object_Event_SetCursorX(&e,cursorx*cursorx_scale); + PX_Object_Event_SetCursorY(&e,cursory*cursory_scale); + PX_Object_Event_SetCursorZ(&e,cursorz); + + } + break; + case WM_CHAR: + { + text[0]=(px_char)msg.wparam; + e.Event=PX_OBJECT_EVENT_STRING; + PX_Object_Event_SetStringPtr(&e,text); + } + break; + /* + case WM_GESTURE: + { + GESTUREINFO gi; + BOOL bHandled; + BOOL bResult; + ZeroMemory(&gi, sizeof(GESTUREINFO)); + + gi.cbSize = sizeof(GESTUREINFO); + + bResult = GetGestureInfo((HGESTUREINFO)msg.lparam, &gi); + bHandled = FALSE; + + if (bResult){ + // now interpret the gesture + switch (gi.dwID){ + case GID_ZOOM: + // Code for zooming goes here + + if (25>(main_zoomPoint.x-gi.ptsLocation.x)*(main_zoomPoint.x-gi.ptsLocation.x)+(main_zoomPoint.y-gi.ptsLocation.y)*(main_zoomPoint.y-gi.ptsLocation.y)) + { + e.Event=PX_OBJECT_EVENT_SCALE; + PX_Object_Event_SetScaleCursorX(&e,(px_float)gi.ptsLocation.x); + PX_Object_Event_SetScaleCursorY(&e,(px_float)gi.ptsLocation.y); + PX_Object_Event_SetScaleCursorZ(&e,(px_float)(gi.ullArguments-main_ZoomRegion)); + } + + main_zoomPoint.x=gi.ptsLocation.x; + main_zoomPoint.y=gi.ptsLocation.y; + main_ZoomRegion=(px_int)gi.ullArguments; + + bHandled = TRUE; + break; + case GID_PAN: + // Code for panning goes here + bHandled = TRUE; + break; + case GID_ROTATE: + // Code for rotation goes here + bHandled = TRUE; + break; + case GID_TWOFINGERTAP: + // Code for two-finger tap goes here + bHandled = TRUE; + break; + case GID_PRESSANDTAP: + // Code for roll over goes here + bHandled = TRUE; + break; + default: + // A gesture was not recognized + break; + } + CloseGestureInfoHandle((HGESTUREINFO)msg.lparam); + }else{ + DWORD dwErr = GetLastError(); + if (dwErr > 0){ + //MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK); + } + } + } + break; + */ + default: + continue; + } + + if(e.Event!=PX_OBJECT_EVENT_ANY) + { + PX_ApplicationPostEvent(&App,e); + } + + } + PX_ApplicationUpdate(&App,elapsed); + PX_ApplicationRender(&App,elapsed); + PX_SystemRender(App.runtime.RenderSurface.surfaceBuffer,App.runtime.surface_width,App.runtime.surface_height); + Sleep(0); + } + return 0; +} + +void setCurrentDirectory() +{ + px_char szExeFilePathFileName[MAX_PATH]; + px_char path[MAX_PATH]; + GetModuleFileNameA(NULL, szExeFilePathFileName, MAX_PATH); + PX_FileGetPath(szExeFilePathFileName,path,sizeof(path)); + if (path[PX_strlen(path)-1]==':') + { + PX_strcat(path,"\\"); + } + + SetCurrentDirectoryA(path); +} + +#ifdef _DEBUG + int main() +#else + int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ) +#endif +{ + HANDLE hThread; + DWORD threadId; + + setCurrentDirectory(); + PX_srand(time(NULL)); + if(!PX_ApplicationInitialize(&App,PX_GetScreenWidth(),PX_GetScreenHeight()))return 0; + if(!PX_CreateWindow(App.runtime.surface_width,App.runtime.surface_height,App.runtime.window_width,App.runtime.window_height,PX_APPLICATION_NAME)) + { + return 0; + } + +#ifdef PX_AUDIO_H + do + { + extern int PX_AudioInitializeEx(); + if(!PX_AudioInitializeEx())return 0; + } while (0); +#endif + ////////////////////////////////////////////////////////////////////////// + //CreateThread + + hThread = CreateThread(NULL, 0, DEMO_RenderThreadFunc, 0, 0, &threadId); + + while(PX_SystemLoop()&&!main_exit){}; + + return 0; +} + diff --git a/UI/PainterEngine/platform/windows/px_serialport.c b/UI/PainterEngine/platform/windows/px_serialport.c new file mode 100644 index 0000000..e2c9d96 --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_serialport.c @@ -0,0 +1,273 @@ + +#include "../modules/px_serialPort.h" +#include "windows.h" +const char* PX_SerialPortEnumComName(int index) +{ + static char szPortName[25]; + HKEY hKey; + CHAR Name[25]; + LONG Status; + DWORD dwIndex = 0; + DWORD dwName; + DWORD dwSizeofPortName; + DWORD Type; + + //RegDisableReflectionKey(HKEY_LOCAL_MACHINE); + LPCSTR data_Set="HARDWARE\\DEVICEMAP\\SERIALCOMM\\"; + long ret0 = (RegOpenKeyExA(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey)); + if(ret0 != ERROR_SUCCESS) + { + return 0; + } + + do + { + dwName = sizeof(Name); + dwSizeofPortName = sizeof(szPortName); + + Status = RegEnumValueA(hKey, dwIndex, Name, &dwName, NULL, &Type, + (LPBYTE)szPortName, &dwSizeofPortName); + + if((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA)) + { + if (dwIndex==index) + { + return szPortName; + } + } + dwIndex++; + } while((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA)); + RegCloseKey(hKey); + return NULL; +} + +const BOOL PX_SerialPortInitialize(PX_SerialPort *com,const char *name,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) +{ + COMMTIMEOUTS CommTimeouts; + DCB dcb; + + if (strlen(name)>4&&strlen(name)<6) + { + char comName[16]="\\\\.\\"; + strcat_s(comName,16,name); + com->Handle=(long long)CreateFileA(comName, + GENERIC_READ | GENERIC_WRITE, + 0, /** Share mode,No share if zero */ + NULL, /** */ + OPEN_EXISTING, /** This device should be existing */ + 0, + 0); + } + else + { + com->Handle=(long long)CreateFileA(name, + GENERIC_READ | GENERIC_WRITE, + 0, /** Share mode,No share if zero */ + NULL, /** */ + OPEN_EXISTING, /** This device should be existing */ + 0, + 0); + } + + + if (com->Handle==-1) + { + goto _ERROR; + } + + + CommTimeouts.ReadIntervalTimeout = 0; + CommTimeouts.ReadTotalTimeoutMultiplier = 0; + CommTimeouts.ReadTotalTimeoutConstant = 0; + CommTimeouts.WriteTotalTimeoutMultiplier = 0; + CommTimeouts.WriteTotalTimeoutConstant = 0; + + if(!SetCommTimeouts((HANDLE)com->Handle, &CommTimeouts)) + { + goto _ERROR; + } + + if(!GetCommState((HANDLE)com->Handle, &dcb)) + { + goto _ERROR; + } + + //Setup BCD + dcb.DCBlength = sizeof(DCB); + dcb.ByteSize=DataBits; + dcb.BaudRate=baudRate; + dcb.StopBits=stopBit-1; + switch (ParityType) + { + default: + case 'N': + case 'n': + dcb.Parity=NOPARITY ; + break; + case 'O': + case 'o': + dcb.Parity=ODDPARITY; + break; + case 'E': + case 'e': + dcb.Parity=EVENPARITY; + break; + case 'M': + case 'm': + dcb.Parity=MARKPARITY; + break; + } + + dcb.fRtsControl = RTS_CONTROL_ENABLE; + + com->BaudRate=baudRate; + com->DataBits=DataBits; + com->ParityType=ParityType; + com->StopBit=stopBit; + + + if(!SetCommState((HANDLE)com->Handle, &dcb)) + { + goto _ERROR; + } + + return 1; +_ERROR: + CloseHandle((HANDLE)com->Handle); + return 0; +} + +const int PX_SerialPortReset(PX_SerialPort *com,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) +{ + DCB dcb; + + if(!GetCommState((HANDLE)com->Handle, &dcb)) + { + goto _ERROR; + } + + dcb.ByteSize=DataBits; + dcb.BaudRate=baudRate; + dcb.StopBits=stopBit-1; + switch (ParityType) + { + default: + case 'N': + case 'n': + dcb.Parity=NOPARITY ; + break; + case 'O': + case 'o': + dcb.Parity=ODDPARITY; + break; + case 'E': + case 'e': + dcb.Parity=EVENPARITY; + break; + case 'M': + case 'm': + dcb.Parity=MARKPARITY; + break; + } + dcb.fRtsControl = RTS_CONTROL_ENABLE; + + com->BaudRate=baudRate; + com->DataBits=DataBits; + com->ParityType=ParityType; + com->StopBit=stopBit; + + if(!SetCommState((HANDLE)com->Handle, &dcb)) + { + goto _ERROR; + } + + return 1; +_ERROR: + CloseHandle((HANDLE)com->Handle); + return 0; +} + + + +size_t PX_SerialPortGetBufferBytes(PX_SerialPort *com) +{ + DWORD dwError = 0; + COMSTAT comstat; + UINT BytesInQue = 0; + + memset(&comstat, 0, sizeof(COMSTAT)); + + + if ( ClearCommError((HANDLE)com->Handle, &dwError, &comstat) ) + { + BytesInQue = comstat.cbInQue; + } + + return BytesInQue; +} + +const int PX_SerialPortWrite(PX_SerialPort *com,void *data,int size) +{ + DWORD WriteSize=0; + + if (com->Handle==-1) + { + return 0; + } + + + if (!WriteFile((HANDLE)com->Handle, data, size, &WriteSize, NULL)) + { + DWORD dwError = GetLastError(); + PurgeComm((HANDLE)com->Handle, PURGE_RXCLEAR | PURGE_RXABORT); + return WriteSize; + } + return WriteSize; +} + +const int PX_SerialPortRead(PX_SerialPort *com,void *data,int size) +{ + int Offset; + int QueSize; + DWORD rSize; + + if(com->Handle!=-1) + { + int BytesInQue = (int)PX_SerialPortGetBufferBytes(com); + + /*if Buffer is empty,sleep 10ms*/ + if ( BytesInQue == 0 ) + { + return 0; + } + + Offset=0; + QueSize=BytesInQue; + + if (QueSize>size) + { + QueSize=size; + BytesInQue=QueSize; + } + + while(QueSize>0) + { + ReadFile((HANDLE)com->Handle,(char *)data+Offset,QueSize,&rSize,NULL); + Offset+=rSize; + QueSize-=rSize; + } + return Offset; + } + return 0; +} + +void PX_SerialPortClose(PX_SerialPort *com) +{ + if (com->Handle!=0&&com->Handle!=-1) + { + CloseHandle((HANDLE)com->Handle); + com->Handle=0; + } + +} + diff --git a/UI/PainterEngine/platform/windows/px_tcp.c b/UI/PainterEngine/platform/windows/px_tcp.c new file mode 100644 index 0000000..b8780e8 --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_tcp.c @@ -0,0 +1,216 @@ + +#include "../modules/px_tcp.h" + +#pragma comment(lib,"ws2_32.lib") // Platform of MSVC +#pragma comment( lib,"winmm.lib" ) + +#include //header +#include +#include +#include "stdio.h" + + +int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type) +{ + WORD wVersionRequested; + WSADATA wsaData; + int err; + int nZero=0; + int nRecvBuf=1024*1024*2; + int nSendBuf=1024*1024*2; + int optval=TRUE; + + tcp->type=type; + + wVersionRequested = MAKEWORD( 1, 1 ); + err = WSAStartup( wVersionRequested, &wsaData ); + if ( err != 0 ) { + + return 0; + } + + if ( LOBYTE( wsaData.wVersion ) != 1 || + HIBYTE( wsaData.wVersion ) != 1 ) { + WSACleanup(); + return 0; + } + //Initialize socket + + if ((tcp->socket=(unsigned int)socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET) + { + return 0; + } + + setsockopt(tcp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + setsockopt(tcp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); + + return 1; +} + +int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr) +{ + SOCKADDR_IN to; + int ret; + to.sin_family=AF_INET; + to.sin_addr.s_addr=addr.ipv4; + to.sin_port=(addr.port); + + ret=connect(tcp->socket,(LPSOCKADDR)&to,sizeof(to)); + if (ret==0) + { + tcp->connectAddr=addr; + return 1; + } + return 0; +} + +int PX_TCPSend(PX_TCP *tcp,void *buffer,int size) +{ + char *sendBuffer=(char *)buffer; + int length; + switch(tcp->type) + { + case PX_TCP_IP_TYPE_IPV4: + { + do + { + if ((length=send(tcp->socket,(const char *)sendBuffer,size,0))==SOCKET_ERROR) + { + int error=WSAGetLastError(); + return 0; + } + sendBuffer+=length; + size-=length; + }while(size>0); + return 1; + } + break; + case PX_TCP_IP_TYPE_IPV6: + { + return 0; + } + break; + } + return 0; +} + +int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout) +{ + size_t ReturnSize; + int ret =setsockopt(tcp->socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&timeout,sizeof(timeout)); + + if(ret!=0) + { + return 0; + } + + switch (tcp->type) + { + case PX_TCP_IP_TYPE_IPV4: + { + int SockAddrSize=sizeof(SOCKADDR); + if((ReturnSize=recv(tcp->socket,(char *)buffer,buffersize,0))!=SOCKET_ERROR) + { + return (int)ReturnSize; + } + else + { + int error=WSAGetLastError(); + return 0; + } + } + break; + case PX_TCP_IP_TYPE_IPV6: + { + return 0; + } + break; + } + return 0; +} + +int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr) +{ + DWORD lasterror; + SOCKADDR_IN sockaddr_in; + int len=sizeof(SOCKADDR); + *socket=(unsigned int)accept((SOCKET)(tcp->socket),(LPSOCKADDR)&sockaddr_in,&len); + lasterror=WSAGetLastError(); + return *socket!=INVALID_SOCKET; +} + + +int PX_TCPIsConnecting(PX_TCP *tcp) +{ + char b; + int err,ret; + int timeout=1; + setsockopt(tcp->socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&timeout,sizeof(timeout)); + ret=recv(tcp->socket,&b,1,MSG_PEEK); + if ((err=WSAGetLastError())==10060) + { + return 1; + } + return ret>0; +} + +int PX_TCPKeepConnect(PX_TCP *tcp) +{ + if (!PX_TCPIsConnecting(tcp)) + { + return PX_TCPConnect(tcp,tcp->connectAddr); + } + return 1; +} + +int PX_TCPRecvCacheSize(PX_TCP *tcp) +{ + unsigned long bytesToRecv; + if (ioctlsocket(tcp->socket, FIONREAD, &bytesToRecv) == 0) + { + return bytesToRecv; + } + return 0; +} + +int PX_TCPReConnect(PX_TCP *tcp) +{ + return PX_TCPConnect(tcp,tcp->connectAddr); +} + +void PX_TCPFree(PX_TCP *tcp) +{ + closesocket(tcp->socket); +} + + +int PX_TCPListen(PX_TCP *tcp,unsigned short listen_Port) +{ + SOCKADDR_IN sockaddr_in; + memset(&sockaddr_in,0,sizeof(SOCKADDR_IN)); + sockaddr_in.sin_family=AF_INET; + sockaddr_in.sin_addr.s_addr=INADDR_ANY; + sockaddr_in.sin_port=(listen_Port); + + if (bind(tcp->socket,(LPSOCKADDR)&sockaddr_in,sizeof(sockaddr_in))!=0) + { + closesocket(tcp->socket); + return 0; + } + + if (listen(tcp->socket,5)!=0) + { + closesocket(tcp->socket); + return 0; + } + return 1; +} + +PX_TCP_ADDR PX_TCP_ADDR_IPV4(unsigned int ipv4,unsigned short port) +{ + PX_TCP_ADDR addr; + addr.ipv4=ipv4; + addr.port=port; + return addr; +} + diff --git a/UI/PainterEngine/platform/windows/px_thread.c b/UI/PainterEngine/platform/windows/px_thread.c new file mode 100644 index 0000000..1d46bff --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_thread.c @@ -0,0 +1,23 @@ +#include "../modules/px_thread.h" +#include "windows.h" + +DWORD WINAPI PX_ThreadRun(void *ptr) +{ + px_thread *pthread=(px_thread *)ptr; + pthread->isRun=1; + pthread->pfunc(pthread->userptr); + pthread->isRun=0; + return 0; +} + + +int PX_ThreadCreate(px_thread *pthread,func_thread func,void *ptr) +{ + pthread->pfunc=func; + pthread->userptr=ptr; + pthread->isRun=0; + if(CreateThread(NULL,0,PX_ThreadRun,pthread,0,&pthread->handle_ulong)!=INVALID_HANDLE_VALUE) + return 1; + else + return 0; +} diff --git a/UI/PainterEngine/platform/windows/px_time.c b/UI/PainterEngine/platform/windows/px_time.c new file mode 100644 index 0000000..b5ca457 --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_time.c @@ -0,0 +1,76 @@ +#include "../modules/px_time.h" +#include "time.h" +#include "windows.h" +#pragma comment (lib,"winmm.lib") + + +int PX_TimeGetYear() +{ + + time_t timep; + struct tm p; + time (&timep); + gmtime_s(&p,&timep); + + return 1900+p.tm_year; +} + +int PX_TimeGetMouth() +{ + time_t timep; + struct tm p; + time(&timep); + gmtime_s(&p, &timep); + + return p.tm_mon; +} + +int PX_TimeGetDay() +{ + time_t timep; + struct tm p; + time(&timep); + gmtime_s(&p, &timep); + + return p.tm_mday; +} + +int PX_TimeGetHour() +{ + time_t timep; + struct tm p; + time(&timep); + gmtime_s(&p, &timep); + + return p.tm_hour; +} + +int PX_TimeGetMinute() +{ + time_t timep; + struct tm p; + time(&timep); + gmtime_s(&p, &timep); + + return p.tm_min; +} + +int PX_TimeGetSecond() +{ + time_t timep; + struct tm p; + time(&timep); + gmtime_s(&p, &timep); + + return p.tm_sec; +} + +unsigned int PX_TimeGetTime() +{ + return timeGetTime(); +} + +void PX_Sleep(unsigned int ms) +{ + Sleep(ms); +} \ No newline at end of file diff --git a/UI/PainterEngine/platform/windows/px_udp.c b/UI/PainterEngine/platform/windows/px_udp.c new file mode 100644 index 0000000..d95796c --- /dev/null +++ b/UI/PainterEngine/platform/windows/px_udp.c @@ -0,0 +1,178 @@ + +#include "../modules/px_udp.h" + +#pragma comment(lib,"ws2_32.lib") // Platform of MSVC +#pragma comment( lib,"winmm.lib" ) + +#include //header +#include +#include +#include "stdio.h" + +int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type) +{ + WORD wVersionRequested; + WSADATA wsaData; + int err; + int nZero=0; + int nRecvBuf=1024*1024; + int nSendBuf=1024*1024; + int optval=TRUE; + int imode=1,rev; + udp->type=type; + + wVersionRequested = MAKEWORD( 1, 1 ); + err = WSAStartup( wVersionRequested, &wsaData ); + if ( err != 0 ) { + + return 0; + } + + if ( LOBYTE( wsaData.wVersion ) != 1 || + HIBYTE( wsaData.wVersion ) != 1 ) { + WSACleanup(); + return 0; + } + //Initialize socket + + + if ((udp->socket=(unsigned int)socket(AF_INET,SOCK_DGRAM,0))==INVALID_SOCKET) + { + return 0; + } + + rev=ioctlsocket(udp->socket,FIONBIO,(u_long *)&imode); + + + setsockopt(udp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + + setsockopt(udp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); + + if(rev == SOCKET_ERROR) + { + printf("ioctlsocket failed!"); + closesocket(udp->socket); + WSACleanup(); + return 0; + } + + if (setsockopt(udp->socket,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(int))==SOCKET_ERROR) + { + closesocket(udp->socket); + return 0; + } + return 1; +} + +int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size) +{ + + int length; + switch(udp->type) + { + case PX_UDP_IP_TYPE_IPV4: + { + SOCKADDR_IN to; + to.sin_family=AF_INET; + to.sin_addr.s_addr=addr.ipv4; + to.sin_port=(addr.port); + while(size>0) + { + if ((length=sendto(udp->socket,(const char *)buffer,size,0,(LPSOCKADDR)&to,sizeof(SOCKADDR)))==SOCKET_ERROR) + { + return FALSE; + } + size-=length; + } + return TRUE; + } + break; + case PX_UDP_IP_TYPE_IPV6: + { +// sockaddr_in6 to; +// to.sin6_family=AF_INET6; +// to.sin6_port=htons(addr.port); +// px_memcpy(to.sin6_addr,addr.ipv6,sizeof(addr.ipv6)); +// while(size>0) +// { +// if ((length=sendto(udp->socket,(const char *)buffer,size,0,(LPSOCKADDR)&to,sizeof(sockaddr_in6)))==SOCKET_ERROR) +// { +// return FALSE; +// } +// size-=length; +// } +// return TRUE; + } + break; + } + return 0; +} + +int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize) +{ + size_t ReturnSize; + switch (udp->type) + { + case PX_UDP_IP_TYPE_IPV4: + { + SOCKADDR_IN in; + int SockAddrSize=sizeof(SOCKADDR); + if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(LPSOCKADDR)&in,&SockAddrSize))!=SOCKET_ERROR) + { + from_addr->ipv4=in.sin_addr.s_addr; + from_addr->port=in.sin_port; + *readsize=(int)ReturnSize; + return 1; + } + else + return 0; + } + break; + case PX_UDP_IP_TYPE_IPV6: + { +// sockaddr_in6 in; +// int SockAddrSize=sizeof(SOCKADDR); +// if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(LPSOCKADDR)&in,&SockAddrSize))!=SOCKET_ERROR) +// { +// px_memcpy(from_addr->ipv6,in.sin6_addr,sizeof(from_addr->ipv6)); +// from_addr->port=in.sin_port; +// *readsize=ReturnSize; +// return 1; +// } +// else +// return 0; + } + break; + } + return 0; +} + +void PX_UDPFree(PX_UDP *udp) +{ + closesocket(udp->socket); +} + + +int PX_UDPListen(PX_UDP *udp,unsigned short listen_Port) +{ + SOCKADDR_IN sockaddr_in; + sockaddr_in.sin_family=AF_INET; + sockaddr_in.sin_addr.s_addr=INADDR_ANY; + sockaddr_in.sin_port=(listen_Port); + + if (bind(udp->socket,(LPSOCKADDR)&sockaddr_in,sizeof(sockaddr_in))==SOCKET_ERROR) + { + closesocket(udp->socket); + return 0; + } + return 1; +} + +PX_UDP_ADDR PX_UDP_ADDR_IPV4(unsigned int ipv4,unsigned short port) +{ + PX_UDP_ADDR addr; + addr.ipv4=ipv4; + addr.port=port; + return addr; +} + diff --git a/UI/PainterEngine/project/PainterEngine_Application.c b/UI/PainterEngine/project/PainterEngine_Application.c new file mode 100644 index 0000000..60985c2 --- /dev/null +++ b/UI/PainterEngine/project/PainterEngine_Application.c @@ -0,0 +1,530 @@ +#include "PainterEngine_Application.h" +#include +#include +#include +#include +#include"../elsecode/include/map.h" +#include"../elsecode/include/mine_map.h" +#include"../elsecode/include/opt.h" + + + +PX_Application App; + + + + +PX_Object* root = PX_NULL;// px룩 +PX_Object* cellbutton[10][10];//ʮСӵİť + +PX_Object* beginbutton;//ʼİťwelcome +PX_Object* rankingbutton;//аťwelcome +PX_Object* menubutton;//ҳIJ˵ + +PX_Object* easymode; +PX_Object* midmode; +PX_Object* hardmode; + +PX_Object* title;//ͼƬwelcome +px_texture titlepicture;//ͼƬwelcome +PX_Object* potatoboom;//ͼƬwelcome +px_texture potatoboompicture;//ͼƬwelcome +PX_Object* towelcomebutton;//ʼİťwelcome + +PX_Object* firstprize;//һͼƬrank +px_texture firstprizepicture;//һͼƬin rank +PX_Object* secondprize;//һͼƬrank +px_texture secondprizepicture;//һͼƬin rank +PX_Object* thirdprize;//һͼƬrank +px_texture thirdprizepicture;//һͼƬin rank +PX_Object* ranktitle;//һͼƬrank +px_texture ranktitlepicture;//һͼƬin rank + +px_shape flag;//ĵͼƬin game +px_shape mine; + +opt_t cell[100][100]; +map* Map=NULL; +int mode=3; + +/// +void WELCOME(); +void RANK(); +void Gameinit(); + +void Gamenow(); +void Lclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr); +void Rclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr); +void Mclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr); +map* Setmine(int mode); + + + + +///////////////////////////////////////////////////////////// +// +/* +px_float PX_Object_Event_GetCursorX(PX_Object_Event e); +px_float PX_Object_Event_GetCursorY(PX_Object_Event e); + +px_void(*ProcessFunc)(PX_Object*, PX_Object_Event e, px_void* ptr);///Ҽʱ· + +*/ +///////////////////////////////////////////////////// + + + +//Ϸڽе + + + + + + + + + + + + + + + + + + + +void Gameinit() +{ + ///任ɾԭҳobjectPainterengine provide)/// +//ɾ֮ǰİť + if (root){ + PX_ObjectDelete(root); + } + //´ + root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); + ///任ɾԭҳobjectPainterengine provide)/// +//ʼmap + map* p = Setmine(mode); + Map = p; + //cellbutton + printf("debug"); + for (int i = 1; i <= Map->mx; i++) + { + for (int j = 1; j <= Map->my; j++) + { + cell[j][i].y = i; + cell[j][i].x = j;//ji xy + cellbutton[j][i] = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, i * 51-51, j * 51-51, 47, 47, " ", PX_NULL); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_EXECUTE, Lclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); + //ɽcellbutton + } + }printf("debug"); +} + + + + + + + + +void Gamenow() +{ + printf("debug"); + + if (root) + { + PX_ObjectDelete(root); + } + //´ + + root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); + + + ///任ɾԭҳobjectPainterengine provide)/// + //printf("debug"); + for (int i = 1; i <= Map->mx; i++) + { + for (int j = 1; j <= Map->my; j++) + { + cell[j][i].y = i; + cell[j][i].x = j;//ji xy + + if (Map->stage[j][i] == MARKED) { + + cellbutton[j][i] = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, i * 51-51, j * 51-51, 47, 47, "?", PX_NULL); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_EXECUTE, Lclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); + } + if (Map->stage[j][i] == FLAGED) + { + cellbutton[j][i] = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, i * 51-51, j * 51-51, 47, 47, " ", PX_NULL); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_EXECUTE, Lclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); + PX_Object_PushButtonSetShape(cellbutton[j][i], &flag); + } + if (Map->stage[j][i] == UNCOVERED) + { + //printf("uncover%d %d\n", j, i); + cellbutton[j][i] = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, i * 51-51, j * 51-51, 47, 47, " ", PX_NULL); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_EXECUTE, Lclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); + + } + if (Map->stage[j][i] == COVERED) + { + //printf("cover%d %d\n", j, i); + cellbutton[j][i] = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, i * 51-51, j * 51-51, 47, 47, " ", PX_NULL); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_EXECUTE, Lclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); + PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); + if (opt_count(Map, j, i) == 0) { + PX_Object_PushButtonSetBorderColor(cellbutton[j][i], PX_COLOR(32, 255, 255, 255));;//Ϊɫť + + } + else { + switch (opt_count(Map, j, i)) + { + case 1:PX_Object_PushButtonSetText(cellbutton[j][i], "1"); break; + case 2:PX_Object_PushButtonSetText(cellbutton[j][i], "2"); break; + case 3:PX_Object_PushButtonSetText(cellbutton[j][i], "3"); break; + case 4:PX_Object_PushButtonSetText(cellbutton[j][i], "4"); break; + case 5:PX_Object_PushButtonSetText(cellbutton[j][i], "5"); break; + case 6:PX_Object_PushButtonSetText(cellbutton[j][i], "6"); break; + case 7:PX_Object_PushButtonSetText(cellbutton[j][i], "7"); break; + case 8:PX_Object_PushButtonSetText(cellbutton[j][i], "8"); break; + default: break; + } + } + + } + } + } + return; + +} + +////////////////////////////////////////////////////////////////////////////////// +Gamewin() { + + + + printf("you win"); +} + +Gamefail() { + for (int i = 0; i < Map->mx; i++) + { + for (int j = 0; j < Map->my; j++) { + if (Map->mineMap[j][i] == 1) { + PX_Object_PushButtonSetText(cellbutton[j][i], " "); + PX_Object_PushButtonSetShape(cellbutton[j][i], &mine); + PX_Object_PushButtonSetTextColor(cellbutton[j][i], PX_COLOR(255, 255, 0, 0)); + } + PX_ObjectSetEnabled(cellbutton[j][i], PX_FALSE);//ʹаťЧ޷ + } + } + + + printf("you lose"); +} + + + + + +////////////////////////////////////////////////////////////////////////////////// + +void Lclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr){ + if (PX_ObjectIsCursorInRegion(pObject, e)) + { + + opt_t* pcell = (opt_t*)ptr; + int temp; + temp= fnOptLeftClick(pcell->x, pcell->y, Map); + if (Map->mineMap[pcell->x][pcell->y] == 1) + { + Gamefail(); + }//׾ʧ + else if (opt_is_scuess(*Map)) { + Gamewin(); + } + else + { + + Gamenow(); + } + + } +} + +void Rclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + if (PX_ObjectIsCursorInRegion(pObject, e)) + { + + opt_t* pcell = (opt_t*)ptr; + int temp; + temp = fnOptRightClick(pcell->x, pcell->y, Map); + if(opt_is_scuess(*Map)) + { + Gamewin(); + } + else { + Gamenow(); + + } + + } + +} + + +void Mclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + if (PX_ObjectIsCursorInRegion(pObject, e)) + { + opt_t* pcell = (opt_t*)ptr; + int temp; + temp = fnOptMidClick(pcell->x, pcell->y, Map); + + + Gamenow(); + + } +} +///////////////////////////////////////////////////////////////////////// +void ceasy(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + if (PX_ObjectIsCursorInRegion(pObject, e)) + { + mode = 1; + Gameinit(); + + } + +} + +void cmid(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + if (PX_ObjectIsCursorInRegion(pObject, e)) + { + + Gameinit(); + + } + +} + +void chard(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + + mode = 1; + Gameinit(); + + + +} +void modechoose() { + ///任ɾԭҳobjectPainterengine provide)/// +//ɾ֮ǰİť + if (root) + { + PX_ObjectDelete(root); + } + //´ + root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); + ///任ɾԭҳobjectPainterengine provide)/// + + + easymode = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 218, 200, 228, 64, "easy", PX_NULL); + PX_ObjectRegisterEvent(easymode, PX_OBJECT_EVENT_EXECUTE, ceasy, &easymode); + + midmode = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 318, 300, 228, 64, "middle", PX_NULL); + PX_ObjectRegisterEvent(midmode, PX_OBJECT_EVENT_EXECUTE, cmid, &midmode); + + hardmode = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 418, 400, 228, 64, "hard", PX_NULL); + PX_ObjectRegisterEvent(hardmode, PX_OBJECT_EVENT_EXECUTE, chard, &hardmode); +} + + + +//////////////////////----------------------------------rank +void towelcomeclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr) +{ + WELCOME(); +} + + + +void RANK() +{ + ///任ɾԭҳobjectPainterengine provide)/// +//ɾ֮ǰİť + if (root) + { + PX_ObjectDelete(root); + } + //´ + root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); + ///任ɾԭҳobjectPainterengine provide)/// + + + towelcomebutton = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 318, 400, 228, 64, "Return", PX_NULL); + PX_ObjectRegisterEvent(towelcomebutton, PX_OBJECT_EVENT_EXECUTE, towelcomeclick, &towelcomebutton); + + + //һŰ + firstprize = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 90, 90, 75, 75, &firstprizepicture); + PX_ObjectRegisterEvent(firstprize, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); + secondprize = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 90, 190, 75, 75, &secondprizepicture); + PX_ObjectRegisterEvent(secondprize, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); + thirdprize = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 90, 290, 75, 75, &thirdprizepicture); + PX_ObjectRegisterEvent(thirdprize, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); + ranktitle = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 330, 20, 210, 75, &ranktitlepicture); + PX_ObjectRegisterEvent(ranktitle, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); + +} +//////////////////////----------------------------------rank + + + + + + + + +//////////////////////----------------------------------welcome + + + + +px_void beginclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//ʼťת +{ + modechoose(); + + + printf("NOW begin!\n"); +} + +px_void rankingclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//ťת +{ + RANK(); + printf("Is ranking\t"); +} + + +void WELCOME()//ʼ +{ + ///任ɾԭҳobjectPainterengine provide)/// + //ɾ֮ǰİť + if (root) + { + PX_ObjectDelete(root); + } + //´ + root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); + ///任ɾԭҳobject/// + + + + //ʼť + beginbutton = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 145, 400, 228, 64, "begin now", PX_NULL); + PX_ObjectRegisterEvent(beginbutton, PX_OBJECT_EVENT_EXECUTE, beginclick, &beginbutton); + + + rankingbutton = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 490, 400, 228, 64, "RANK", PX_NULL); + PX_ObjectRegisterEvent(rankingbutton, PX_OBJECT_EVENT_EXECUTE, rankingclick, &rankingbutton); + + + //ʼĺ + + //PX_FontModuleDrawText(&App.runtime.RenderSurface, PX_NULL, 395, 200, PX_ALIGN_MIDTOP, "TEXT", PX_COLOR(250, 0, 0, 0)); + //չʾ̬ı + //title=PX_Object_LabelCreate(&App.runtime.mp_ui, root, 395, 175, 256, 64, "Minesweeper", PX_NULL, PX_COLOR(255 ,106, 106, 0)); + //PX_ObjectRegisterEvent(title, PX_OBJECT_EVENT_ANY,PX_NULL, PX_NULL); + + title = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 40, -225, 800,800, &titlepicture ); + PX_ObjectRegisterEvent(title, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); + potatoboom = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 2, 415, 110, 105, &potatoboompicture); + PX_ObjectRegisterEvent(potatoboom, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); + + + //MENU + PX_Object_Menu_Item* pItem; + menubutton=PX_Object_MenuCreate(&App.runtime.mp_ui, root,10,10,100,PX_NULL); + + pItem = PX_Object_MenuAddItem(menubutton,PX_Object_MenuGetRootItem(menubutton),"Menu",PX_NULL,PX_NULL); + PX_Object_MenuAddItem(menubutton,pItem, "Color", PX_NULL, PX_NULL); + + // һصȴһpx_void callback(px_void* userptr),ȡںд + + +} + +/// ///////////////////////////////////////-----------------------welcome + + + + + + +px_bool PX_ApplicationInitialize(PX_Application* pApp, px_int screen_width, px_int screen_height)//ʼpxڲ +{ + PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height); + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &titlepicture, "titlepicture.traw");//ͼƬ + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//ͼƬ + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//ͼƬ + + + //ΪӭҳͼƬ + + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &titlepicture, "D:\\working\\PainterEngine\\project\\titlepicture2.traw");//ͼƬ + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &potatoboompicture, "D:\\working\\PainterEngine\\project\\potatoboom.traw"); +//עļַproject棬ΪβԵַ +//ΪаҳͼƬ + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &firstprizepicture, "D:\\working\\PainterEngine\\project\\firstprize.traw");//ͼƬ + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &secondprizepicture, "D:\\working\\PainterEngine\\project\\secondprize.traw"); + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &thirdprizepicture, "D:\\working\\PainterEngine\\project\\thirdprize.traw"); + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &ranktitlepicture, "D:\\working\\PainterEngine\\project\\ranktitlepicture.traw"); + + + + + + PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &flag, "D:\\working\\PainterEngine\\project\\flagpicture.traw"); + PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &mine, "D:\\working\\PainterEngine\\project\\minepicture.traw"); + + + WELCOME();//ֱǰwelcome + + return PX_TRUE; +} + +px_void PX_ApplicationUpdate(PX_Application* pApp, px_dword elpased) +{ + +} + +px_void PX_ApplicationRender(PX_Application* pApp, px_dword elpased) +{ + px_surface* pRenderSurface = &pApp->runtime.RenderSurface; + PX_RuntimeRenderClear(&pApp->runtime, PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR); + PX_ObjectRender(pRenderSurface, root, elpased); + + + +} + +px_void PX_ApplicationPostEvent(PX_Application* pApp, PX_Object_Event e) +{ + PX_ApplicationEventDefault(&pApp->runtime, e); + PX_ObjectPostEvent(root, e); + +} diff --git a/UI/PainterEngine/project/PainterEngine_Application.h b/UI/PainterEngine/project/PainterEngine_Application.h new file mode 100644 index 0000000..60aa9ce --- /dev/null +++ b/UI/PainterEngine/project/PainterEngine_Application.h @@ -0,0 +1,24 @@ +#ifndef PAINTERENGINE_APPLICATION_H +#define PAINTERENGINE_APPLICATION_H + +#ifdef __cplusplus +extern "C"{ +#endif + +#include "PainterEngine_Startup.h" +#ifdef __cplusplus +} +#endif +typedef struct +{ + PX_Runtime runtime; +}PX_Application; + +extern PX_Application App; + +px_bool PX_ApplicationInitialize(PX_Application *App,px_int screen_Width,px_int screen_Height); +px_void PX_ApplicationUpdate(PX_Application *App,px_dword elapsed); +px_void PX_ApplicationRender(PX_Application *App,px_dword elapsed); +px_void PX_ApplicationPostEvent(PX_Application *App,PX_Object_Event e); + +#endif diff --git a/UI/PainterEngine/project/PainterEngine_Startup.c b/UI/PainterEngine/project/PainterEngine_Startup.c new file mode 100644 index 0000000..fcb28f0 --- /dev/null +++ b/UI/PainterEngine/project/PainterEngine_Startup.c @@ -0,0 +1,295 @@ +#include "PainterEngine_Startup.h" + + +////////////////////////////////////////////////////////////////////////// +//Functions +static px_byte PX_ApplicationRuntime[PX_APPLICATION_MEMORYPOOL_UI_SIZE+PX_APPLICATION_MEMORYPOOL_RESOURCES_SIZE+PX_APPLICATION_MEMORYPOOL_GAME_SIZE+PX_APPLICATION_MEMORYPOOL_SPACE_SIZE]; +px_bool PX_ApplicationInitializeDefault(PX_Runtime *runtime, px_int screen_width, px_int screen_height) +{ + + + px_int surface_width=0,surface_height=0; + px_int window_width=0,window_height=0; + px_double wdh; + wdh=screen_width*1.0/screen_height; + surface_height=(px_int)(PX_sqrtd(PX_APPLICATION_SURFACE_SIZE*PX_APPLICATION_SURFACE_SIZE/wdh)); + surface_width=(px_int)(surface_height*wdh); + + + window_width=screen_width/2; + window_height=screen_height/2; + + + if(!PX_RuntimeInitialize(runtime,surface_width,surface_height,window_width,window_height,PX_ApplicationRuntime,sizeof(PX_ApplicationRuntime),PX_APPLICATION_MEMORYPOOL_UI_SIZE,PX_APPLICATION_MEMORYPOOL_RESOURCES_SIZE,PX_APPLICATION_MEMORYPOOL_GAME_SIZE)) + //if (!PX_RuntimeInitialize(runtime, 240, 240, 2240,2240 , PX_ApplicationRuntime, sizeof(PX_ApplicationRuntime), PX_APPLICATION_MEMORYPOOL_UI_SIZE, PX_APPLICATION_MEMORYPOOL_RESOURCES_SIZE, PX_APPLICATION_MEMORYPOOL_GAME_SIZE)) + return PX_FALSE; + return PX_TRUE; +} +px_void PX_ApplicationEventDefault(PX_Runtime *runtime,PX_Object_Event e) +{ + if (e.Event==PX_OBJECT_EVENT_WINDOWRESIZE) + { + px_int surface_width=0,surface_height=0; + px_double wdh; + + wdh=PX_Object_Event_GetWidth(e)*1.0/PX_Object_Event_GetHeight(e); + surface_height=(px_int)(PX_sqrtd(PX_APPLICATION_SURFACE_SIZE*PX_APPLICATION_SURFACE_SIZE/wdh)); + surface_width=(px_int)(surface_height*wdh); + + PX_RuntimeResize(runtime,surface_width,surface_height,(px_int)PX_Object_Event_GetWidth(e),(px_int)PX_Object_Event_GetHeight(e)); + return; + } +} + +#ifdef PAINTERENGIN_FILE_SUPPORT + +px_bool PX_LoadTextureFromFile(px_memorypool *mp,px_texture *tex,const px_char path[]) +{ + PX_IO_Data io; + + io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if (PX_TextureCreateFromMemory(mp,io.buffer,io.size,tex)) + { + PX_FreeIOData(&io); + return PX_TRUE; + } + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadShapeFromFile(px_memorypool *mp,px_shape *shape,const px_char path[]) +{ + PX_IO_Data io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if (PX_ShapeCreateFromMemory(mp,io.buffer,io.size,shape)) + { + PX_FreeIOData(&io); + return PX_TRUE; + } + PX_FreeIOData(&io); + return PX_FALSE; + +} + + +px_bool PX_LoadSoundFromFile(px_memorypool *mp,PX_SoundData *sounddata,const px_char path[]) +{ + PX_IO_Data io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if (PX_WaveVerify(io.buffer,io.size)) + { + px_uint offset=0,pcmSize,woffset; + pcmSize=PX_WaveGetPCMSize(io.buffer,io.size); + + if (pcmSize!=0) + { + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)io.buffer; + PX_WAVE_FMT_BLOCK *pfmt_block; + sounddata->mp=mp; + sounddata->buffer=(px_byte *)MP_Malloc(mp,pcmSize); + sounddata->size=pcmSize; + sounddata->channel=PX_WaveGetChannel(io.buffer,pcmSize)==1?PX_SOUND_CHANNEL_ONE:PX_SOUND_CHANNEL_DOUBLE; + if (!sounddata->buffer) + { + return PX_FALSE; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(io.buffer+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=sizeof(PX_WAVE_RIFF_HEADER); + offset+=8; + offset+=pfmt_block->dwFmtSize; + + pcmSize=0; + woffset=0; + while (offsetszDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + PX_memcpy(sounddata->buffer+woffset,io.buffer+offset,pBlock->dwDataSize); + offset+=pBlock->dwDataSize; + woffset+=pBlock->dwDataSize; + } + } + else + { + PX_FreeIOData(&io); + return PX_FALSE; + } + } + else + { + PX_FreeIOData(&io); + return PX_FALSE; + } + PX_FreeIOData(&io); + return PX_TRUE; +} + + +px_bool PX_LoadAnimationLibraryFromFile(px_memorypool *mp,PX_AnimationLibrary *lib,const px_char path[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if (PX_AnimationLibraryCreateFromMemory(mp,lib,io.buffer,io.size)) + { + PX_FreeIOData(&io); + return PX_TRUE; + } + PX_FreeIOData(&io); + return PX_FALSE; + +} + +px_bool PX_LoadScriptFromFile(px_memory *code,const px_char path[]) +{ + PX_IO_Data io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if(!PX_MemoryCopy(code,io.buffer,0,io.size)) + goto _ERROR; + + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; + +} + + +px_bool PX_LoadScriptInstanceFromFile(px_memorypool *mp,PX_ScriptVM_Instance *ins,const px_char path[]) +{ + PX_IO_Data io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if(!PX_ScriptVM_InstanceInitialize(ins,mp,io.buffer,io.size)) + goto _ERROR; + + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadTextureToResource(PX_ResourceLibrary *ResourceLibrary,const px_char Path[],const px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(ResourceLibrary,PX_RESOURCE_TYPE_TEXTURE,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadShapeToResource(PX_ResourceLibrary *ResourceLibrary,const px_char Path[],const px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(ResourceLibrary,PX_RESOURCE_TYPE_SHAPE,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadAnimationToResource(PX_ResourceLibrary *ResourceLibrary,const px_char Path[],const px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(ResourceLibrary,PX_RESOURCE_TYPE_ANIMATIONLIBRARY,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadScriptToResource(PX_ResourceLibrary *ResourceLibrary,const px_char Path[],const px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(ResourceLibrary,PX_RESOURCE_TYPE_SCRIPT,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + + +px_bool PX_LoadSoundToResource(PX_ResourceLibrary *ResourceLibrary,const px_char Path[],const px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(ResourceLibrary,PX_RESOURCE_TYPE_SOUND,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadFontModuleFromFile(PX_FontModule *fm,const px_char Path[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_FontModuleLoad(fm,io.buffer,io.size)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadJsonFromFile(PX_Json *json,const px_char *path) +{ + PX_IO_Data io=PX_LoadFileToIOData((px_char *)path); + if (!io.size) + { + return PX_FALSE; + } + + if(!PX_JsonParse(json,(px_char *)io.buffer))goto _ERROR; + + + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +#endif \ No newline at end of file diff --git a/UI/PainterEngine/project/PainterEngine_Startup.h b/UI/PainterEngine/project/PainterEngine_Startup.h new file mode 100644 index 0000000..d2019f6 --- /dev/null +++ b/UI/PainterEngine/project/PainterEngine_Startup.h @@ -0,0 +1,39 @@ +#ifndef PAINTERENGINE_STARTUP_H +#define PAINTERENGINE_STARTUP_H + +////////////////////////////////////////////////////////////////////////// +//Configures +#include "platform/modules/px_file.h" + +#define PX_APPLICATION_NAME "PainterEngine" +#define PX_APPLICATION_SURFACE_SIZE 680 + +#define PX_APPLICATION_MEMORYPOOL_UI_SIZE 1024*1024*16 +#define PX_APPLICATION_MEMORYPOOL_RESOURCES_SIZE 1024*1024*96 +#define PX_APPLICATION_MEMORYPOOL_GAME_SIZE 1024*1024*8 +#define PX_APPLICATION_MEMORYPOOL_SPACE_SIZE 1024*1024*8 +////////////////////////////////////////////////////////////////////////// + +#include "architecture/PainterEngine_Runtime.h" +px_bool PX_ApplicationInitializeDefault(PX_Runtime *runtime, px_int screen_width, px_int screen_height); +px_void PX_ApplicationEventDefault(PX_Runtime *runtime,PX_Object_Event e); + +#ifdef PAINTERENGINE_FILE_H +px_bool PX_LoadTextureFromFile(px_memorypool *mp,px_texture *tex,const px_char path[]); +px_bool PX_LoadShapeFromFile(px_memorypool *mp,px_shape *shape,const px_char path[]); +px_bool PX_LoadSoundFromFile(px_memorypool *mp,PX_SoundData *sounddata,const px_char path[]); +px_bool PX_LoadAnimationLibraryFromFile(px_memorypool *mp,PX_AnimationLibrary *lib,const px_char path[]); +px_bool PX_LoadScriptFromFile(px_memory *code,const px_char path[]); +px_bool PX_LoadScriptInstanceFromFile(px_memorypool *mp,PX_ScriptVM_Instance *ins,const px_char path[]); + +px_bool PX_LoadTextureToResource(PX_ResourceLibrary *presourcelib,const px_char Path[],const px_char key[]); +px_bool PX_LoadShapeToResource(PX_ResourceLibrary *presourcelib,const px_char Path[],const px_char key[]); +px_bool PX_LoadAnimationToResource(PX_ResourceLibrary *presourcelib,const px_char Path[],const px_char key[]); +px_bool PX_LoadScriptToResource(PX_ResourceLibrary *presourcelib,const px_char Path[],const px_char key[]); +px_bool PX_LoadSoundToResource(PX_ResourceLibrary *presourcelib,const px_char Path[],const px_char key[]); +px_bool PX_LoadFontModuleFromFile(PX_FontModule *fm,const px_char Path[]); +px_bool PX_LoadJsonFromFile(PX_Json *json,const px_char *path); +#endif + + +#endif diff --git a/UI/PainterEngine/project/firstprize.traw b/UI/PainterEngine/project/firstprize.traw new file mode 100644 index 0000000000000000000000000000000000000000..7353a282cda9ad80b34ae25551236fd7c7ac2bb5 GIT binary patch literal 22512 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 Cyu1$p literal 0 HcmV?d00001 diff --git a/UI/PainterEngine/project/minepicture.traw b/UI/PainterEngine/project/minepicture.traw new file mode 100644 index 0000000000000000000000000000000000000000..726a0d655a30ad21ec55107678da6cbc23d9e30b GIT binary patch literal 8472 zcmd5>TZkM*6zz}c>fJQW#!KfJg5FaSwn}~@~BZ~M$KSTmT{Ll|S#Nfv& z7!Vafi4jFaaY>>EQ9>kYSRad->F$}05q#i}#1CJrf}T^|cdTh<(w~buCq$sRav)IS;umn zg`RU|6xer@M>9|x;iEI_Yb-@uka1eRvmWzdJI3&Hb{q?Fuac)=#s1i3I?e?u&hjvy z)42CJ>L)lpJr2~6*=fpQ+*b(pu z(ct(u-n|Tr%gGP&TXbLGJUcAD#H~--=YZGS!UJ*nHO%GvTc=nj^|KqgwM#f2#JHc@ z`o8l5^%{YFZo_p}_roaLPhZ34QQC#yu#YD(wU$)(F)dt~3znVDo8~UcTP1-G3=o1rICI z+WpS8#<73QYTK@JRZ*O#SGzdjt#+8Yt)O;(l7ll3ud;N0+otb4nA(5Ew4bMqaX(63 z#KRj*dAz$R#gv@2s`?kx&exu^QtTAnvtmzu0^RwUb(U>nvdw)vcE=~GEMIiVCt}~( zPyVrAyD-aPq2~t9E{Tr4cOjWkypKHf2zl_%BdYs}0*v(mrDB zGp5|AxbvPgvG43N?dNIpEJt0Q=Xoy9qf?~}=K3DmXI@nX7x~2VntzagUn^rLs{_8b zYTmey;C)KAKhLxH9ys$n&*#ypLI(FepOQQ8QwG6n`yTfYJkOh0v&*fexPN;oqfc^o_ff{7p5Mg2is#vzW0|p-r&D! z^5fmQ{(lU2MEpj~OHu!3=p3N$hsCiUF8`ZJ*V(TIC!L4%c;2~~oV$(5{ErF#ei7W? X!*`hG*f7tgc>b)r)(PEot9bV>R0qA| literal 0 HcmV?d00001 diff --git a/UI/PainterEngine/project/potatoboom.traw b/UI/PainterEngine/project/potatoboom.traw new file mode 100644 index 0000000000000000000000000000000000000000..b00fc5e2d4339468fffabe3b26090dab6d57f372 GIT binary patch literal 47684 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 literal 0 HcmV?d00001 diff --git a/UI/PainterEngine/project/ranktitlepicture.traw b/UI/PainterEngine/project/ranktitlepicture.traw new file mode 100644 index 0000000000000000000000000000000000000000..966c34fb98a2e7801c08b5ca4c252f00825376d7 GIT binary patch literal 49712 zcmeHP33MG*8NMyFjdV%Ug;Exalu~IaAaGa?f)o(h1*|Lw5K%y&AYj>-69oiiRS=Lx zMJQ;3d3Rn~f(Tkfy3m#)oXS>NER;e?X69vSLJN6*-<>z}X5O2;mo_1J$@%X&f9}lO zW$yj%H~;?M~~ii z)TmLDMvNFSZb0-%Ix)}@*u0{m;{3|W%9W7MAZf^_kR{;pVFSJM(!c(T0C;-~c-jH^ z9M>N}-oSMu#Bdn*NA=&{Ny`T+0??~Ff} zlzy&maJLL)j|8`GMtl$C2I%fX(Bq*!-s?naCuODXQaW{`vYHN5RaJvKeMf!MIOLt8 zI93dGtG7^=`wOMrT9t4w*r@UD^d*@Dt6?hYJWt)99#Sl8kEYkQOi~?!wO42IXFc&^JL}gfF~*9_b!$da6&_y(5D= zuy;OJmOU%B>S}j1#&oU8%dx6$+(jkbbFyVIcDm`f*s>e*FyT%@8y>{F)62yuxM1;w zb3!D)cK=iG`!85o=_G<{8*4KRhOT{vd_}wp@lA*?g4_c6F!Q{oM|)_wcSf-1eO$0o z`$Y4lu7|GvS>%~^X2%sR_$-|sq^wUyg0IJ_g#8!8S5JrGTW}X+9xgNGYa6!3eJb)k zKObZAJS_YU6Yf<7-yN4|HJ%%NhjUjXTe5L~yk{lag73$@4f0Ynzq=ma(>>_RoycemM9-*7i^KNa~~khX!ow{Tjw zt}TpBm;+WSUeD;J10wm7&gFUBO=5hy8md=)31fOQ>RbTH=OpLt>Q$qI>MZx<$onI0 zHuE*->|D7fDBsxyZQEqi{;I|FlVEC5pONV{XvS`?9O4EX2t9PGTz5#jYhcJEyT%W>wNS;p(O&bL6zKFCA#7B3l zsg`{pcyp=J_I1z^FGj{fy9vy@rznn7I3(dw#6 zmL|wT$eWQi(N5CNQpjxB`um`5v~6EP{DH}*oeg;3W4OP=tIPQ_@^)m>*q48L=}!0U zDIbeoh{3bKW@uTu#e}vcWgRVx%F>jk1!d{Irk5LA*5@ub`MnHx=fpJ+Y0okp`Ma*) zax2o#A;9%BgKfT^%IXW+o0bdP(u`d_c)mPRCYHMxCvrb44?v%NIkySHy|&LsoqUfs z=UeW380Rz1dOeA?pXK})cI>4l|6{Ain&&+^?6&S$vZUDc#FGs5r5tQ$<7Yt+1!t<*BCH)}o~q3VEzcD648+hH&`R55bo$T1Tp zOxPkAkI+R)a@TThDmYf!ZAJPj;NMU%UmSO{;~W}$=%GSkuDdt5ezmGg9igf_U`M2m z!TmegccZ-ttoOCk4zZ!zUPhV)c?dQn>`DmjOYQy+F?HTt$lq}P59Il~cb}Sre0O0D zcRAL6#|F)zjUDJnw*}?j#J!z;H@_*Yy)5@RJYVBIH{bGN)}`U0kHB)CHt!6+0o0dp zPsH=C>c-GF6QfJnpM-r;&>re=XE0j&28^*Wo$k(`b6Aj&ObE+IiB<>v3(QUt7Ds&Z~>xxS}t_rM{l+!ct6k1XgnEp-yVFINz4(w9I)2k8QfV9X~*>?^abE7 z?pSbX4{&xNd4+f$nq_<;xZh-ZH@!>^X1v1awA$Ew8&ErwmEC}`hf_XRl zU1-eTd^dwzoLvc|8t(E z|BZVoodw$7zWw0!-)oO&56{9oXoG;eHoi0Zlie4P|0&455nPxj={|sG*BCML8*omn z-3eu0@$$mP>E!@kUQ2#L9>uF8zB=k#JYNU-)VF_e-CgcB_-i}zw@0`;&#eUBZ{^_~ zjF;gO)@Jl0WNfq`&FB?xOyjtlmk)JueG?AGmrHv(R9Eh`c0M%gn{c_#uAhN#EA02x z&g;QisJ>&Enwy%esvEWmp2gLZu)mEupv&2&jE^AFCiKI%!L|DYuHAy|kCe^ylQy{J zRGV_z?O7jvT%U5DLBDc;mfXEGomPW) z|EKYfVtx;;kvP}?;oUORj$(hz8Y`p+Iad_(>#|PnjU+=hsMq&;wCl=jKcR!^N9O(+ z_b<4&M|&$_f8F52y@v4Iq}_*+1|1IDCYd@K^`8g%ZqYLl#roI->0$0R{%goI%;SN- zws~P$ddj2AeM9quvE_sRXMaNxZ;$Kq5Nep~cQ1bRJXxE0Rd*|pVy{bZhj@ylX`+V}8?p90m+`!#GlhWXB4)+f`<5 zAGdA^=ZoiV{z^f4D&SA`2c-7y^VG5n|@4i!6l#{D<$rTJxy zPaE?ELs;)}PT;woxM2KgIM?9UVY%2#<9?1=FXZ50$L*8G)%t}!8<5=1Jtv^)a}V*L zv+IrJF8%w3LX^AhsxIBRPas@RuFb&q7UQn*>%y+r&MT05oIl$;s8YMvh58Ts7W-hi zfoFTUH{xSsIPQMa?4eP2*ESxGa#^3BcJ9lqqPOq+HFwE{xU;$1`Bg9m91E^3%$S({ zfY+c$upgD;xxkPeh$2Q69Q9&Y z*Ks{n%x3WGjkCoq_m`1&&?grT+~3XJ&(ZLSg#&#XL0^m>I5nKy7uWrlyJr80ItKez zja+|CQ%~aTigwO|a1S^%$2HIoaj2Txyh{XQo|6sdi{q}gy|Xy{PAunZkh5Vw-vNKy zk&(LMZgS5O)-{dI%f|B+)X&;J-JI2}Z`~Gc%2{h--9|fpQ$yHaYwRYRwf6(p2;655 z<3Jw_ebDKQJY-n$|eU+o+eDR0iv zIM+v>@%-7QhTQXP^hM+b@9a*t?csUZ=aY6;#QHXJ>+0;DXWRX{7<27u&feG;;(2II zXmF#S9Q$p?#^qY`PRu(mM9OntumnQC<}UH0@78i-&K+_b%-&N~r!ZUCpY`Wvb1tTN zI_@(*V4we~OFAuIEI~WZM8~` zzNQA9`V;ELdJOOLz8S5&-;&^)ri~P7hxdJPKSRThQUamhbC(#Jy-CjFW}UJI@tg1~ zJO=!6<^;AyXTdwS!oAkVQRX0%En%M)8nZUVGhv$=67VYr;}2hcp?Tl?ozHT#CF?6N z=NeLX7cAG6wsEh*Z-;hQDEcuN=;uq~Y%tF;Sf6C=2&QT0I}rHTBK&;`Hh%ux!Tfy? z1_XC~+{i`lndbUk{q(NHTyJZf9WeSFdbvA+e&B?C0qQ!-oaZW57vIgZ3_KUX-_*qU z1B%rVmrjoIY`bM&qpCmb`u~l4dJTPbGl9o-@G~6MmP92q=b&4nFBi?>HZyyeMYclztVt&ZV zF=Hwo`q7Ca+x`5Er%v|rBR!eP&vx;5nA1xSJ!w%NBEbLOXwKGT_+<8bOYs_KF{}F! zCwX-VA^^R65V(3piOXeZXZ$(Y62w%RBnSusf`A|(2nYg#fFK|U2m*qDARq_`0)l`b zAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_` g0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDAdp4i|940d;{X5v literal 0 HcmV?d00001 diff --git a/UI/PainterEngine/project/secondprize.traw b/UI/PainterEngine/project/secondprize.traw new file mode 100644 index 0000000000000000000000000000000000000000..f3d701a3d2c9578dd18e6b02dcf0d672dc2fc397 GIT binary patch literal 22512 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 literal 0 HcmV?d00001 diff --git a/UI/PainterEngine/project/testimage.traw b/UI/PainterEngine/project/testimage.traw new file mode 100644 index 0000000000000000000000000000000000000000..288a73d77597900b72d5ed4113cbd6a308ce1275 GIT binary patch literal 1048588 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


iJ&O^X1q+9={!YIQBiITu)zJuBJ!F`@<({*?-0u z@=@if>^_zHhVlJsXWjaMHD|Qd-~9gQDC77A+tJS0Gs)I`AXzAWnbLFBK09%G~5F30$&=-t>t80RjXF5FkK+0D%7v&KkK!5-N0t5&U zATYWD<$Ck+!#)mLG3~FW$B*unsAmKS5FkK+z$gmDT6hPyTf7#};Q4DjgXrm_ zcuw?*009C72oNAZfB=Es2~^fL?=WoRpOxC){9c6KT?tAiK!5-N0t5*3P9Wm97suLo ze;bN8E=ez_B#l+Q(@-)20t5&UAV7cs0Rp2e5Oa6FHxy%^A-n&$Xwy=)F*(ZDp}r9y zK!5-N0;4UEKleT2&XbFdk%}y@lw=>=dv$j0(LNJ;M}PnU0t5&UAV7dXF9qTr-wzZy zPEl62wHF4Hhn|1UUS0>vCP07y0RjXF^h2OrZQL{Fx;J_eFLhOBlD)hi{Z|J80t5&U zAV7cs0Rp2f5No&}(bd?b$Meo({mj3|_N!>)_sg~P(ioq8A?8M%TTZewV-C`L;`NE~ z{p;iV*OZdRE93Rc;`NK;cZ6d~NwXfuRO9uLaoqDNN%OhodiLzt@0pb(duq9wJvruD zJ)u%d|07;Mx>QXcK2c8}T&c}Gpj2z#w>-7!q4ECtQRWFzUlwJ2b2+S{{)?&0$JfqOR+_*55+Fc;009C72oNC98-Z2T>>fLh zIf{B6L?mxIPT1J2X0RjXF5FkK+z_1FG zYK<3mI=+eA`A=i}XynviG&^6s*1X%;^p?Gb)uNMjPfl&TY5ZpJsQ69c72)u?PAwNY zF6QDtq?2|zh5!Kq1PBlyFiZlKB)xaURL9TG*XYeXl%I)sZFL^I4U>zu5+Fc;009C7 z2oNAJd;&4|{4ERRd*}H)i?PsQw^SR$fmeS-I%;D31UE0t5&UATZ1V`%h;#jJ06y5bF}& zE%NXWtkgH{zu&r ztXq#}50|G`@qE?;BJX}&KIdx5e0x04b$ME;RssYF5FkK+009C72oNAZfB*pk1PBly zFgya4+ROtY_kL15AM6ji=HAn9RqD-04o^?ClmGz&1PBlyK!5-N0t5&UAV7cs0RjXF zEWg0m^!jV%_d&;cK99)fzb}7_w15Bs0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ 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 literal 0 HcmV?d00001 diff --git a/UI/PainterEngine/project/titlepicture2.traw b/UI/PainterEngine/project/titlepicture2.traw new file mode 100644 index 0000000000000000000000000000000000000000..d672a48726a29daa06bf020466ce348eb6ce3233 GIT binary patch literal 3030012 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z 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

h#`r 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

$H!E;Z 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�TpJy5wB+yoj)eS-c>=)?ZHg+Tdxs>4qKza+MEoq?LoK$~}u zNW#CMK2Y+5UMtKuw?W-OK3Pqf2-2LKFJbC3Nyd z#g9M-cJBZaQHq>VQxM1Lj;JMfr<^C8fecw!N0Olcab_nJhj6_Rfh4jnS0}$bC$~UW zPxv76Mt>+H0wQrV1!}K09t*uuGW6zs^z_p+n{Mxh@i8av3@0>_*)*kyAqIb3ocld{ z<(TiQkI&HNi5L7T_9?u6x zQWnJW{Bu=)mEqY2W({kDf$YGL9^`&3ohbVmOug@LKu?ie)KK={2T8v>i=4!}Io*A{ z(3ubMT-3$z^5hGDaGZ#F8yPe9rS{rFV*WB~Rv;8L^Rc~NqTWe4PMOhQWY4E~1?lM$ED}r27SW zfW`|iJX9PODFO9;@pMK`8hO?7+#E)WAbVc0{teo4kAKp=o7;-DWgukF%>x<4u-KGA zyF#B-=yE@XZ#A8m;JF@Asf zYun1B!6fdl5o_V%245`r5-K1aU0n|a`P4Q}%-W`S&WE8c3P3gBhTzrZ$4M1nzio|Z ze~YR)Pptn#ER*b+xKGL#edC)zuEE|HN(UERtILbc3OW-%S2NerQ$?y%z1pBIo9aYu$F13k;XRU&+VLZ&3bfTo8Ffjjq&UQ}T=Dr*{6TJb zi@S5$jxKs%*|^EObtCiSydtn?F^R46M;P>odbLGYUM4;P2IU$$9;D0+0alumJIC zw^whPA7S80vY9?apHa-`BLyaQDxhQ`JZjba)|{65qY>XU)Y zIE5Gw&GkL)_k#M)0;kT_b5voha-5SCC}Xc?52F#Tm-as{nvo+w>ni*B#2`)M~h6*Z*{ zo@jUnipJn9{jPVgtKhxNwXXPx*3I91sox>?n8Pnjc)dv6JAaFMyey;=;?Pa&xwQ!y z8I?`4>7ES$Yc!OPn21CnaUia0K-;-yG`FBI;r4ngotU!+$tTC7ufp879lWEi=u@dA zE?fIhi7hvuC9ws0!`AO1w~CB_7JNEsA~?MneOGki&>`Y&f?2sobc+v^I`i`7y0hhb z$TGC(x>~Z|II&&>#Ph;p*!;77;uS0A`9~%qxcF{FSKq5cYy)QuO$eM;Mi+4Nfpq2`OL0{9`4!Q7d<=j}||sTA*djdYD9Zce1{4M$CiV`?8xAXpESfSi+$ z_*vWd9RVjUArbKkVfhv@#mC8@c0Zig%oQxkd8+-ub0~Lyxzl;a`Q&g;%23E#43a)VxtW7+iKS%IMzK%s9Zj>e5_P?wiF*_`&rRxK$vw( z423#p3Wm(Dm#H*8ZeN}4v9w2b_SbFi8-?7FWX4w^nS9xt!*>_GZP!lxaMKbCo_#1H zdy@mM)i$AtdH|{);b4%u>yQo(eA>LtL%ilaUw??R@CorVQhNNI_S2SZaR8a94le)9 z-}XHa+ex|k7MBjNZ*Fb+*i0kp(!dmCrRa^Yf7(Q{rMzWrI`|YOZ+r=bgTskESa}5;5#_ie znN3fb5?)%IBO+`lFH1y?P@)@wbin9lV3`B>hUsgJU#)l*KIH<>lc-36qD976T?LZ-}>Ps3gyJb*a*{Od~ zk(FiQPvj}Cz=>~|FD(v~?ud`N#j|v}6#&|`@tf3CljnWGL^dZAoIH$55RB0ul(Mmc z?$3m4UKRM3+9CFZK>9`XL|yfG-nC%_;LM}^mXn-x`~`dcf}K+b5#t$^VmD_=x+G}9 z#TRq+uHa3@(uOSYwS%~SC#L64p#2WlTDQsp04!^7v;L*W{PA=gQv&Kh{}N$SqUUeY z@kEHsambDI-IT-+Rw@Gfr1TB~@85fLf(QWwoWK0H38zEYz3~B^ih?;iV<(oS3e!lR^x;5Brg~+t8-WxEq75RUO(-@r%l4x zXmLwo)*dX8ocHMqJUNEAdeaONICp;3eJ3V?<#2(bF>wTcy0pq_2|mW*%ZvL=2Jr=W z6wcXif_OL}+H@S8RIf_nYxb5^PRzsG6kZV71_4k;B*dB$OL*<<8c@OU32>e$LZM;k z18!r1#SFe=LHa|mj#fZMmOPdr%7H{FDs(pkP<;wFa@oKzc2OP_xL;nX_Zadj>fAl- z^)1_gY2l7!h|O-DcmVj2r!7Uj;&W|Z!Atz>a#679Oe?>zHXXcXz~#B~u^?$CljtTa zv4%;HetJEN$rmp9HdX-W!%C~I#SSAANPOrwE?gaKI*f9PBO)f8pZ03(pI-3-_#FvG z;oq1E`$gFzr}e2(4~r8(DC+2)s1w*O#Vdi=3I(^XM|l6zTqO{|*kRZNe)VH+aIyb- zLbYJ@>*4z1&$VL?rOz948D!3X-lNM&4A$YKJ`TLz<5D%lvvj8W8!~U0V{KEmbETrW z{U7E_7_I>9M(%fNrENT@sUj!8hZEd>lXYg4lG!WZtX^wOm2n&*nq)YN`lIoug$@wI zxd?V78UQJCX!FqnwF|sRkAIoXGtf@r6@;n!(iyL-t{v}!J}F<=rrLcFs-M(zT7tm^ zSi(fhosIrjF!6jR+IZ1m9rA1gupU6swR6Aum9pH3ZT2!=cabq};r*$-VbjFYkQb;G zeGWiv-^J$H9dZSqD87qk)g1Gl8qA74Zx#dSaRa=7*k)vUSRQr|@JI z|H9$(d(bdLJ!N+dUJd`yCs)`e$#G+`KQKCA*|~F~d2WhWle*p3#tO_h&QBqO&z-X+ zP#fL{?*ivTm^Ws|0(+8FM_RHo{&JYnJF>*S?VyWXfWe4?b{4#a&B_9=f8`@$HoQp% zd*TqAfT57SY<8?zXah2GAR>PBC|mF0N(2(^=a1dW^{8!uca_3XGk@~^%;$VN6k&@F zDuN10$$m-Taw_nf*;a59m=Jo6<6$?jyX51*?jn%ek2k0Gftt>jwni+>{I)TMsNJO> zrF7~6Yak``3+9QP(f#*HaXIU+Q7R6^%u-LArwj^ihZ**o{caXAZx^xx=Q}*+u9}h_ zRbSfpU)x2;b3wsG?XkDPzQE|~{L;{&QO+-We32;3YKw~od{{={#>rb4=6+}b%mnIb zPFY}HL}j3+GWm20AtR6AB_PK$d%36MYz!eE zOm{Bf+=WU?28qC8xB2hUTIUe+fM&YfPCruBZsq8F1r!uj!%9NF{KN#tkZ_shrzX{0 zAbM9=*79r%Ci+TGkJxZR40uc`UP?5OFCno~=iWRxE6Q(z{N!?(9#!N=1%JG$uykgo zO~l#)4k&U6TxGUAFNGzw2X#3oJv|X`5A0pjh>|3ayBvGt!$-+pERAYB?g( zI(~{vaq|)11??8z5UUwJMDE~0p(J<|)4KDq&{e)`tg96XcxA9sq7YR^^dVWdz}ssy z^XYmUp9RLu=q}3Q;;Zzzk(pjQ7i(sF7SAcGd5tBXp_qbR?!Hz}QG&B_^mX4qL6?rB zdng~7F6)_7Haed3W6W8bj<*k%nS|w`gzC5LWae)dUS^*SMQPa1Xhdr^cVDn^<=N$? zjR=V@=laAL=IS^cM64VQ!0cfkp{OyrJFI;s$LXDe&Z_nact%a{hlsKBAMCnEV=hS9 zRr`3=GPG}=qAPpG`_gZJGmiaaj6dxp-RPgakI(&Xtm^y`XvC$M-bvA=C+uK+SBPbH zYcgF;m7S`Y%q0%p_aegrMM?Dg8-%3x&Mp~jJvw9ghutl!dw}6v)*f&+Tu0Xv>4Y`q8PQw-6yJ*Y#exbAx1Th&?keK|>f<|6@lHOXmkB@X@yeNekVAo!iB4C3 z-_}W!_576-?-6-_UmY!dK%SRPpXH-v=ao{N%PfnyI&61ViYN)dNU?Y)cMe*rR%jis zAD=8|!$Z{2H)!AN+a1NHe1#~wc5+{KdcW@rDswizYKLfQh@^i{U`&+!sW`KEnPN5* zd;qGL?GW9`i79Cr3ngrq<+F_)<9$Hi|3;3ze_ ztuEyD%Uj1<=<w_8HR%@WGB<(=SMrep~~4rfQgb?3T# zpAx#H zN>eY&6bd2F@Pj^ijh^ZTYUO%HV2|GTdlTqWJhR{#Z~DWDgGHY_ntlbFUF{k{T)gQ_ z&0k-h5X@}%nEkkc=*oLziQpwspBnaI(H(R3}=^qfDhC z+^ZTHXZ^Os${Z7l(~FWLi19X2k&&I;PLeu?h9MDoa=B})L!=Y=+3me!JHxy(6V8Z!=|I0xaZA74orKRGA}a`7<-{(b+hQ;Lp&ww2 z%})Yu5{ic9TYDC3GQ1DTH#RhGGINr4=TJvUoH}E;%#OfCXnT(&|E^?-{t@^l8vu`^ zix^p9JuEm&+^Cee?_uFapkyE;9RlwvL)J^!fYQwXY#4IYwuu~4JaD~PZN$t}PeU2^ zS3tgYtX}ltPVus_bVfmOahb~wm1%bqROttrnzw)I_2)x2w9HJes!6wm2_Mg_;BSuUlD5BRhsSyqXu;W7ieG zd=E(^NP6)V9~Ol8FD0zwL)Ps;$hJz62Uh)_m5rA(29NF*SOzY3!Y4gBM5f$NCQFk|58jTsk>mA z*7(KtvdEI3E@t}19X@fE`9yKo;gb6U@>+S3;~ZMl@k+K=rfdj+d@I}dBgyQR+ynp{ zZvi1gY|(2yAWHds;+b+@-y-I>THu@sFtywg_R@l9J(y6OP)Z<0K}9_dk?42KNkWU8 zpK?vE2FS4rsjIX98R@=R1wEdRCfQh&?79Znm+%KZ;DiCQFN``-p@@MdVo&tct|Qqh zdT(oQu$x#a>O2iQ>u9uX|35r5P>|%daYp{TJ1kXL)&X8T5D?!NAb67|ryWF{f{c4KcLJGl92 zwuS6PGYY6J$k~?xiwJ}l4w2V;2Y`%$o}`;BnGhyD0LJG*S%Jhfg3BtOT!rSq6{gnx zT6M-9-^KZOGB1#BbrHeE;#z>_$E9z#;>5f_G6k%by*CQ#j(#Ksppl%^xt!HdX{Vorq$w?tE7wa z@pF%o2JL2zKQ=Y>coE#41Cf9bQI(RLsygOlMJeze0t=(3@wmo|GtkmbqV`UxCv9EU zz&<`}T1scn<9Km(g@7N{A|v(i?RHl_=QQIf;=Tm0Q8?}S`TltAJtlOW7Eg0vLT+tx*4@f=w)dB_G&pV>6gG{R?P5N!H^@@>>sA94OMrM_38ydS zKm40-{9#z*&ae|My02*Ve=skfsvAP}A(r=*9e$2!EzQF|miLE|EO$#+QMR?}+-zso zW`5$}n2zU6;RkDcUtlo!84@k6*cIk3m@EtRJy28oD;K2qfgz#_9vKkY#A|LJz==5K zAl+Dz7DZ?b%9>eF2>W4YeQPo87L!&rmmNDry695C2xEQT&10MWHWh6L z$EIh45mX%a{fC(Mn9G@|Zlk}7t987+Kh$#KsbF@&d~0ab2fJ)uUGJ&I?wd}sS9=FX zrcxbfG~tTev3>Y2CQ5l{jJZGMAYpraO10oU7qdxpq-l_>0wAWhWi{FCvpyg3_oPWt z$t=cUbYV@Pc$yp|0hx|F_V3z_ztAX`;o3Tv)0k<#&&-TUGs!iQPLxK3JkR0}wcu%~ z4-+i7O$@SNIBg{i(W5F-H$axqT@!ejNSNcC=?7Lc53Cvh{{%UF{=-^K^l<*Gxtybj zf>u+uED5OcWvUDkcT3R}!CISC6uZ5?y!G8H_&%XfURkkRNdTI|ElAhfv&%5inLX{+ z=D>@7e*ICH2fJ_*Gc)|<1c<32MpM`B((V2}1_%cx{JT-OEp_fPI>5X305V71H-Ruc z*U)@O*I0-s$B9)$QAzf98XrTG-PabflNBO&A)dF3lh8l~aYS6?j;!1mqrrxg%X=}8 z79=9QED(1ft&;%v;_em1v}3*QO3fh;4o}G?L8zG@LI*}Nj0$XdJrVE2K4vJciDjb zDd0&!IRb}IGCgQC(#_Vn+5C~q*ts8KYO}q^sX=2T*NfewcAq?E3C7TUl{*e2-LqZw zW{#77cU(Bp&DEl4rBeQtZWdEG+$haPK_CU&(xMtz*lMVt`A)&RCZ ztQ-F+5vAQ5x)^2J9d#DUm{8MN&qXzlk9*(5iS3xLWUlAcj$8Ek-AGu{JTaiV9wEN| zU!BRtU=0xm+%V+Id-q=YzB$%2!B$bhi7nn%+;GDD3z8ENy&bYF7epnVN0QFgT)Wos z5J-DKMXDg)P6A$`Gk z(+Y)ikOo_%3*n~Ryv9w=7M{tm-9W-t#R0}2z3UlsMaPayGju?60JEGp^Tz(}!WpR2 z&A`^=O^!b}ZlXRr3`PH>sL-p!Y}V92PdCFS^lJ@YRqWGrz1Cx6bQ>y?W`-Lo?48+q zWx_4Ek7>~Q9t&Qaw6Q2oRnP42&MW6&iB3ew%cJ<&L29O&Me39st7T0YuNU9{tW7Vl zung#v$?pJKbfl2+uG5mxt(%;G7yJ%MsC%oB!gtaWc_JTiua1JB=$L0p0jw*QfbNt( z4mIY)Zb#yRws?=uEq$L0Zf@K7^-VXZtTiA%k1iy zijAcjk2L>~#5Ib`j0(3~mz!iRjOsEK_koVpik+$df+c+}^$lU}R?;ApIg8ecrN zup8^X5q#-@yYMDVPguDm0C(#-1PQycEFyRZ%<_RxE`?^`)M65s*4G~|J}-Cg?`Mbj zP&nY^5XN!>ClM!>78M=eXB%dD2&_<1N8pbMUxOColL9DQASy9g85#<`lqq;9FDFfv z(llC0Z$VxXlF<3eFRwxR)NWJ0&8!CqXhec z@#sBQ{v;;*c8y|=LIXvZ9@b}2E;y@y&t~N56d;mOCd*as=cGyK@E~e<>2{)<6}PBV9oN{$!QfH*;UN20S20$XtK9 zSqjwto+iv^6hPnzwVEKIY_YfNRTeP!@&p#zvy0|v&)y+G@ zMz|&?Vwsx|D)(f3+L1MjEDyG_Kt;vkL7l^0n`tKOyp?^g#9aafa$FAj~JO)^-Dn7&%r;uE`Jc3o~Nqb zwXM2o5)Q&}b>KD}5~DOFwMLN(?_^3_KMdVEa6WyzE5`nr|NA^7Th`Ye3|QWFA^l!5 zXNHfir&FiJTpK{bEHS_>&FD=yuAG zSK%NBc=xVg0yt*|(ℑ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 uY?;oe}(!agZR5w#f86B*>wJQq2M#RAZ4 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%0DFpzd10 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�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

F1{;_2JFf3@R{+cd3e5D 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 *aH(b^vTw(u{v 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 n1pKf3`~Dyh3k~GJSoxhMDshVy4# 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®B>&275Wjr5{EfaGfyiLGN@Je8Rd4>_(Ly1@RaS1| zJL`v?Ee})YV-7b$?|>QqoJHP9b>HFL@}Ns9=e4Ci^R8Y#6VZWU6t*OnEBoT {kU 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 literal 0 HcmV?d00001 diff --git a/UI/PainterEngine/supports/old/Platform_Windows_D2D.cbak b/UI/PainterEngine/supports/old/Platform_Windows_D2D.cbak new file mode 100644 index 0000000..d43a638 --- /dev/null +++ b/UI/PainterEngine/supports/old/Platform_Windows_D2D.cbak @@ -0,0 +1,540 @@ +#include +#include +#pragma comment(lib, "d2d1.lib") + +typedef struct +{ + UINT uMsg; + LPARAM lparam; + WPARAM wparam; +} WM_MESSAGE; + +BOOL PX_CreateWindow(int Width, int Height, const char *name, BOOL bfullScreen); +HWND PX_GetWindowHwnd(void); +VOID PX_SystemReadDeviceState(void); +BOOL PX_SystemLoop(void); +BOOL PX_SystemRender(void *raw, int width, int height); +BOOL PX_SystemIsActivated(void); +BOOL PX_KeyboardDown(unsigned char X); +char *PX_KeyboardString(void); +char *PX_DragfileString(void); +BOOL PX_MouseLButtonDown(void); +BOOL PX_MouseRButtonDown(void); +BOOL PX_MouseMButtonDown(void); +POINT PX_MousePosition(void); +BOOL PX_KeyDown(unsigned char key); +BOOL PX_MouseWheel(int *x, int *y, int *delta); +BOOL PX_GetWinMessage(WM_MESSAGE *Msg); +char *PX_OpenFileDialog(const char Filter[]); +char *PX_SaveFileDialog(const char Filter[], const char ext[]); +char *PX_MultFileDialog(const char Filter[]); +char *PX_GetFileName(const char filePath[]); + + +#define WIN_MAX_INPUT_STRING_LEN 64 +#define WIN_MAX_INPUT_SPECKEY_LEN 0xff + +#define WIN_KEYDOWN_BACKSPACE 1 +#define WIN_KEYDOWN_RETURN 2 +#define WIN_KEYDOWN_LEFT 3 +#define WIN_KEYDOWN_RIGHT 4 +#define WIN_KEYDOWN_UP 5 +#define WIN_KEYDOWN_DOWN 6 + +#define WIN_MESSAGESTACK_SIZE 32 + +HWND Win_Hwnd; +int Win_Height; +int Win_Width; +BOOL Win_bFullScreen; +BOOL Win_Activated; +WM_MESSAGE Win_messageStack[WIN_MESSAGESTACK_SIZE] = {0}; +unsigned char DInput_KeyBoardState[256]; +char DInput_AcceptFile[MAX_PATH] = {0}; +POINT DInput_MousePosition; +POINT DInput_MouseWheelPosition; +POINT DInput_MouseWheelDelta; + +ID2D1Bitmap *D2D_pSurface; +ID2D1Factory *D2D_pDirect2dFactory; +ID2D1HwndRenderTarget *D2D_pRenderTarget; + +static WNDCLASSEXA Win_Wcx; + +///////////////////////////////////////////////////// +LRESULT CALLBACK AppWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +///////////////////////////////////////////////////// + +void DInput_Update() +{ + POINT point; + GetCursorPos(&point); + ScreenToClient(Win_Hwnd, &point); + DInput_MousePosition = point; +} + +BOOL PX_D3DReset(HWND hWnd, int Width, int Height, BOOL bfullScreen) +{ + return TRUE; +} + +BOOL PX_CreateWindow(int Width, int Height, const char *name, BOOL bfullScreen) +{ + HRESULT hr; + HINSTANCE hInstance; + D2D1_SIZE_U size; + D2D1_RENDER_TARGET_PROPERTIES render_target_properties; + D2D1_HWND_RENDER_TARGET_PROPERTIES hwnd_render_target_properties; + D2D1_BITMAP_PROPERTIES bitmapformat; + RECT rc; + + int nScreenWidth, nScreenHeight; + nScreenWidth = GetSystemMetrics(SM_CXSCREEN); + nScreenHeight = GetSystemMetrics(SM_CYSCREEN); + + hInstance = GetModuleHandleA(NULL); + + if (Win_Wcx.cbSize == 0) + { + //////////////////////////////////////////////////////////////////////////// + // Initialize Window class struct + /////////////////////////////////////////////////////////////////////////// + Win_Wcx.cbSize = sizeof(WNDCLASSEX); + Win_Wcx.style = CS_CLASSDC; + Win_Wcx.lpfnWndProc = AppWindowProc; + Win_Wcx.cbClsExtra = 0; + Win_Wcx.cbWndExtra = 0; + Win_Wcx.hInstance = hInstance; + Win_Wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); + Win_Wcx.hCursor = LoadCursor(NULL, IDC_ARROW); + Win_Wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW); + Win_Wcx.lpszMenuName = NULL; + Win_Wcx.lpszClassName = "WindowCls"; + Win_Wcx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); + + /////////////////////////////////////////////////////////////////////////// + // Class Register + /////////////////////////////////////////////////////////////////////////// + if (!RegisterClassExA(&Win_Wcx)) + return FALSE; + } + + + Win_Width = Width; + Win_Height = Height; + Win_bFullScreen = bfullScreen; + + //////////////////////////////////////////////////////////////////////////// + // Create window + //////////////////////////////////////////////////////////////////////////// + Win_Hwnd = CreateWindowA("WindowCls", name, + WS_OVERLAPPED | WS_SYSMENU, + CW_USEDEFAULT, CW_USEDEFAULT, + Width, Height, + NULL, NULL, hInstance, NULL); + + if (Win_Hwnd == NULL) + return FALSE; + + //////////////////////////////////////////////////////////////////////////// + // Show window + //////////////////////////////////////////////////////////////////////////// + ShowWindow(Win_Hwnd, SW_SHOWNORMAL); + UpdateWindow(Win_Hwnd); + //CoInitialize(NULL); + DragAcceptFiles(Win_Hwnd, TRUE); + //////////////////////////////////////////////////////////////////////////// + + if (Win_Hwnd == NULL) + return FALSE; + + hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory, NULL, (void **)&D2D_pDirect2dFactory); + if (FAILED(hr)) + { + return FALSE; + } + + GetClientRect(Win_Hwnd, &rc); + SetWindowPos(Win_Hwnd, 0, 0, 0, Width + Width - (rc.right - rc.left), Height + Height - (rc.bottom - rc.top), SWP_NOMOVE); + GetClientRect(Win_Hwnd, &rc); + + size.width=rc.right - rc.left; + size.height=rc.bottom - rc.top; + + render_target_properties.type = D2D1_RENDER_TARGET_TYPE_DEFAULT; + render_target_properties.pixelFormat.format = DXGI_FORMAT_UNKNOWN; + render_target_properties.pixelFormat.alphaMode = D2D1_ALPHA_MODE_UNKNOWN; + render_target_properties.dpiX = 0.0f; + render_target_properties.dpiY = 0.0f; + render_target_properties.usage = D2D1_RENDER_TARGET_USAGE_NONE; + render_target_properties.minLevel = D2D1_FEATURE_LEVEL_DEFAULT; + + hwnd_render_target_properties.hwnd = Win_Hwnd; + hwnd_render_target_properties.pixelSize = size; + hwnd_render_target_properties.presentOptions = D2D1_PRESENT_OPTIONS_NONE; + + hr = ID2D1Factory_CreateHwndRenderTarget(D2D_pDirect2dFactory, + &render_target_properties, + &hwnd_render_target_properties, + &D2D_pRenderTarget + ); + + if (FAILED(hr)) + { + return FALSE; + } + + + bitmapformat.dpiX = 0; + bitmapformat.dpiY = 0; + bitmapformat.pixelFormat.format = DXGI_FORMAT_R8G8B8A8_UNORM; + bitmapformat.pixelFormat.alphaMode = D2D1_ALPHA_MODE_IGNORE; + + size.width = Width; + size.height = Height; + hr = ID2D1HwndRenderTarget_CreateBitmap(D2D_pRenderTarget, size, NULL, 0, &bitmapformat, &D2D_pSurface); + + if (FAILED(hr)) + { + return FALSE; + } + + return TRUE; +} +///////////////////////////////////////////////////////////// +char Win_Str[WIN_MAX_INPUT_STRING_LEN] = {0}; +char Win_SpecKey[WIN_MAX_INPUT_SPECKEY_LEN] = {0}; +int Win_CurrentIndex = 0; +// #include +LRESULT CALLBACK AppWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + +// if (uMsg == 0x246) +// printf("%x\n",uMsg); + WM_MESSAGE message; + int i; + + switch (uMsg) + { + case WM_MOUSEMOVE: + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + break; + case WM_KILLFOCUS: + { + Win_Activated = FALSE; + break; + } + case WM_SETFOCUS: + { + Win_Activated = TRUE; + break; + } + case WM_KEYDOWN: + { + Win_SpecKey[wParam] = 1; + break; + } + case WM_MOUSEWHEEL: + { + DInput_MouseWheelPosition.x = GET_X_LPARAM(lParam); + DInput_MouseWheelPosition.y = GET_Y_LPARAM(lParam); + DInput_MouseWheelDelta.x = 0; + DInput_MouseWheelDelta.y = GET_WHEEL_DELTA_WPARAM(wParam); + break; + } + case WM_CHAR: + { + if (Win_CurrentIndex < WIN_MAX_INPUT_STRING_LEN - 1) + { + if (wParam >= 32 || wParam == 8) + { + Win_Str[Win_CurrentIndex++] = (char)wParam; + Win_Str[Win_CurrentIndex] = '\0'; + } + } + break; + } + case WM_DROPFILES: + { + HDROP hdrop = (HDROP)wParam; + DragQueryFileA(hdrop, 0, DInput_AcceptFile, MAX_PATH); + DragFinish(hdrop); + break; + } + case WM_CLOSE: + { + PostQuitMessage(0); + exit(0); + } + case WM_DESTROY: + { + PostQuitMessage(0); + return 0; + } + default: + return DefWindowProcA(hWnd, uMsg, wParam, lParam); + } + + message.uMsg = uMsg; + message.wparam = wParam; + message.lparam = lParam; + for (i = 0; i < WIN_MESSAGESTACK_SIZE; i++) + { + if (Win_messageStack[i].uMsg == 0) + { + Win_messageStack[i] = message; + break; + } + } + + return TRUE; +} + +BOOL PX_SystemLoop(void) +{ + MSG Msg; + ZeroMemory(&Msg, sizeof(MSG)); + + if (PeekMessageA(&Msg, NULL, 0, 0, PM_REMOVE)) + { + TranslateMessage(&Msg); + DispatchMessageA(&Msg); + } + else + { + Sleep(10); + } + return TRUE; +} + + +BOOL PX_SystemRender(void *raw, int width, int height) +{ + D2D1_RECT_U size; + size.left = 0; + size.right = width; + size.top = 0; + size.bottom = height; + + ID2D1HwndRenderTarget_BeginDraw(D2D_pRenderTarget); + ID2D1HwndRenderTarget_Clear(D2D_pRenderTarget, NULL); + ID2D1Bitmap_CopyFromMemory(D2D_pSurface, &size, raw, width * sizeof(DWORD)); + ID2D1HwndRenderTarget_DrawBitmap(D2D_pRenderTarget, D2D_pSurface, NULL, 1.0f, D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, NULL); + ID2D1HwndRenderTarget_EndDraw(D2D_pRenderTarget, NULL, NULL); + + return TRUE; +} + +BOOL PX_SystemIsActivated(void) +{ + return Win_Activated; +} + +BOOL PX_KeyboardDown(unsigned char X) +{ + return (DInput_KeyBoardState[X] & 0x80) != 0; +} + +BOOL PX_MouseLButtonDown(void) +{ + return GetAsyncKeyState(VK_LBUTTON) & 0xFF00; +} + +BOOL PX_MouseRButtonDown(void) +{ + return GetAsyncKeyState(VK_RBUTTON) & 0xFF00; +} + +BOOL PX_MouseMButtonDown(void) +{ + return GetAsyncKeyState(VK_MBUTTON) & 0xFF00; +} + +POINT PX_MousePosition(void) +{ + return DInput_MousePosition; +} + +char *PX_KeyboardString(void) +{ + if (Win_CurrentIndex != 0) + { + Win_CurrentIndex = 0; + return Win_Str; + } + else + { + return 0; + } +} + +VOID PX_SystemReadDeviceState(void) +{ + DInput_Update(); +} + +char *PX_DragfileString(void) +{ + return DInput_AcceptFile; +} + +HWND PX_GetWindowHwnd(void) +{ + return Win_Hwnd; +} + +BOOL PX_KeyDown(unsigned char key) +{ + if (Win_SpecKey[key]) + { + Win_SpecKey[key] = 0; + return TRUE; + } + return FALSE; +} + +BOOL PX_MouseWheel(int *x, int *y, int *delta) +{ + if (DInput_MouseWheelDelta.y != 0) + { + *x = DInput_MouseWheelPosition.x; + *y = DInput_MouseWheelPosition.y; + *delta = DInput_MouseWheelDelta.y; + DInput_MouseWheelDelta.y = 0; + return TRUE; + } + return FALSE; +} + +BOOL PX_GetWinMessage(WM_MESSAGE *Msg) +{ + int i; + for (i = 0; i < WIN_MESSAGESTACK_SIZE; i++) + { + if (Win_messageStack[i].uMsg != 0) + { + *Msg = Win_messageStack[i]; + ZeroMemory(&Win_messageStack[i], sizeof(WM_MESSAGE)); + return TRUE; + } + } + return FALSE; +} + + +char *PX_OpenFileDialog(const char Filter[]) +{ + OPENFILENAMEA ofn; + static char szFile[MAX_PATH]; + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.lpstrFile = szFile; + ofn.lpstrFile[0] = '\0'; + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFilter = Filter;//TEXT("Mirrorļ(.mirror)\0*.mirror"); + ofn.nFilterIndex = 1; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.hwndOwner = Win_Hwnd; + ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST; + + if (GetSaveFileNameA(&ofn)) + { + return szFile; + } + return NULL; +} + +char *PX_MultFileDialog(const char Filter[]) +{ + OPENFILENAMEA ofn; + static char szFile[MAX_PATH * 64]; + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.lpstrFile = szFile; + ofn.lpstrFile[0] = '\0'; + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFilter = Filter;//TEXT("Mirrorļ(.mirror)\0*.mirror"); + ofn.nFilterIndex = 1; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.hwndOwner = Win_Hwnd; + ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT; + + if (GetOpenFileNameA(&ofn)) + { + if (szFile[strlen(szFile) + 1] == '\0') + { + INT_PTR oft = strlen(szFile) - 1; + while (oft >= 0) + { + if (szFile[oft] == '\\' || szFile[oft] == '/') + { + szFile[oft] = 0; + break; + } + oft--; + } + } + return szFile; + } + return NULL; +} + +char *PX_SaveFileDialog(const char Filter[], const char ext[]) +{ + OPENFILENAMEA ofn; + static char szFile[MAX_PATH]; + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.lpstrFile = szFile; + ofn.lpstrFile[0] = '\0'; + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFilter = Filter;//TEXT("Mirrorļ(.mirror)\0*.mirror"); + ofn.nFilterIndex = 1; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.hwndOwner = Win_Hwnd; + ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST; + + if (GetSaveFileNameA(&ofn)) + { + if (ext != NULL) + { + char uprFile[MAX_PATH] = { 0 }; + char uprExt[MAX_PATH] = { 0 }; + strcpy_s(uprExt, MAX_PATH, ext); + _strupr_s(uprExt, MAX_PATH); + strcpy_s(uprFile, MAX_PATH, szFile); + _strupr_s(uprFile, MAX_PATH); + if (strstr(uprFile, uprExt) == NULL) + { + strcat_s(szFile, MAX_PATH, ext); + } + } + return szFile; + } + return NULL; +} + + +char *PX_GetFileName(const char filePath[]) +{ + INT_PTR offset = strlen(filePath) - 1; + while (offset != 0) + { + if (filePath[offset] == '/' || filePath[offset] == '\\') + { + offset++; + break; + } + offset--; + } + return (char *)filePath + offset; +} diff --git a/UI/PainterEngine/supports/old/Platform_Windows_D2D.hcbak b/UI/PainterEngine/supports/old/Platform_Windows_D2D.hcbak new file mode 100644 index 0000000..5f1f378 --- /dev/null +++ b/UI/PainterEngine/supports/old/Platform_Windows_D2D.hcbak @@ -0,0 +1,182 @@ +#ifndef PLATFORM_WINDOWS +#define PLATFORM_WINDOWS + +#include +#pragma comment(lib, "User32.lib") +#pragma comment(lib, "Shell32.lib") +#pragma comment(lib, "Ole32.lib") +#pragma comment(lib, "winmm.lib") + +#define PX_DIK_ESCAPE 0x01 +#define PX_DIK_1 0x02 +#define PX_DIK_2 0x03 +#define PX_DIK_3 0x04 +#define PX_DIK_4 0x05 +#define PX_DIK_5 0x06 +#define PX_DIK_6 0x07 +#define PX_DIK_7 0x08 +#define PX_DIK_8 0x09 +#define PX_DIK_9 0x0A +#define PX_DIK_0 0x0B +#define PX_DIK_MINUS 0x0C /* - on main keyboard */ +#define PX_DIK_EQUALS 0x0D +#define PX_DIK_BACK 0x0E /* backspace */ +#define PX_DIK_TAB 0x0F +#define PX_DIK_Q 0x10 +#define PX_DIK_W 0x11 +#define PX_DIK_E 0x12 +#define PX_DIK_R 0x13 +#define PX_DIK_T 0x14 +#define PX_DIK_Y 0x15 +#define PX_DIK_U 0x16 +#define PX_DIK_I 0x17 +#define PX_DIK_O 0x18 +#define PX_DIK_P 0x19 +#define PX_DIK_LBRACKET 0x1A +#define PX_DIK_RBRACKET 0x1B +#define PX_DIK_RETURN 0x1C /* Enter on main keyboard */ +#define PX_DIK_LCONTROL 0x1D +#define PX_DIK_A 0x1E +#define PX_DIK_S 0x1F +#define PX_DIK_D 0x20 +#define PX_DIK_F 0x21 +#define PX_DIK_G 0x22 +#define PX_DIK_H 0x23 +#define PX_DIK_J 0x24 +#define PX_DIK_K 0x25 +#define PX_DIK_L 0x26 +#define PX_DIK_SEMICOLON 0x27 +#define PX_DIK_APOSTROPHE 0x28 +#define PX_DIK_GRAVE 0x29 /* accent grave */ +#define PX_DIK_LSHIFT 0x2A +#define PX_DIK_BACKSLASH 0x2B +#define PX_DIK_Z 0x2C +#define PX_DIK_X 0x2D +#define PX_DIK_C 0x2E +#define PX_DIK_V 0x2F +#define PX_DIK_B 0x30 +#define PX_DIK_N 0x31 +#define PX_DIK_M 0x32 +#define PX_DIK_COMMA 0x33 +#define PX_DIK_PERIOD 0x34 /* . on main keyboard */ +#define PX_DIK_SLASH 0x35 /* / on main keyboard */ +#define PX_DIK_RSHIFT 0x36 +#define PX_DIK_MULTIPLY 0x37 /* * on numeric keypad */ +#define PX_DIK_LMENU 0x38 /* left Alt */ +#define PX_DIK_SPACE 0x39 +#define PX_DIK_CAPITAL 0x3A +#define PX_DIK_F1 0x3B +#define PX_DIK_F2 0x3C +#define PX_DIK_F3 0x3D +#define PX_DIK_F4 0x3E +#define PX_DIK_F5 0x3F +#define PX_DIK_F6 0x40 +#define PX_DIK_F7 0x41 +#define PX_DIK_F8 0x42 +#define PX_DIK_F9 0x43 +#define PX_DIK_F10 0x44 +#define PX_DIK_NUMLOCK 0x45 +#define PX_DIK_SCROLL 0x46 /* Scroll Lock */ +#define PX_DIK_NUMPAD7 0x47 +#define PX_DIK_NUMPAD8 0x48 +#define PX_DIK_NUMPAD9 0x49 +#define PX_DIK_SUBTRACT 0x4A /* - on numeric keypad */ +#define PX_DIK_NUMPAD4 0x4B +#define PX_DIK_NUMPAD5 0x4C +#define PX_DIK_NUMPAD6 0x4D +#define PX_DIK_ADD 0x4E /* + on numeric keypad */ +#define PX_DIK_NUMPAD1 0x4F +#define PX_DIK_NUMPAD2 0x50 +#define PX_DIK_NUMPAD3 0x51 +#define PX_DIK_NUMPAD0 0x52 +#define PX_DIK_DECIMAL 0x53 /* . on numeric keypad */ +#define PX_DIK_OEM_102 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ +#define PX_DIK_F11 0x57 +#define PX_DIK_F12 0x58 +#define PX_DIK_F13 0x64 /* (NEC PC98) */ +#define PX_DIK_F14 0x65 /* (NEC PC98) */ +#define PX_DIK_F15 0x66 /* (NEC PC98) */ +#define PX_DIK_KANA 0x70 /* (Japanese keyboard) */ +#define PX_DIK_ABNT_C1 0x73 /* /? on Brazilian keyboard */ +#define PX_DIK_CONVERT 0x79 /* (Japanese keyboard) */ +#define PX_DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ +#define PX_DIK_YEN 0x7D /* (Japanese keyboard) */ +#define PX_DIK_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */ +#define PX_DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ +#define PX_DIK_PREVTRACK 0x90 /* Previous Track (PX_DIK_CIRCUMFLEX on Japanese keyboard) */ +#define PX_DIK_AT 0x91 /* (NEC PC98) */ +#define PX_DIK_COLON 0x92 /* (NEC PC98) */ +#define PX_DIK_UNDERLINE 0x93 /* (NEC PC98) */ +#define PX_DIK_KANJI 0x94 /* (Japanese keyboard) */ +#define PX_DIK_STOP 0x95 /* (NEC PC98) */ +#define PX_DIK_AX 0x96 /* (Japan AX) */ +#define PX_DIK_UNLABELED 0x97 /* (J3100) */ +#define PX_DIK_NEXTTRACK 0x99 /* Next Track */ +#define PX_DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ +#define PX_DIK_RCONTROL 0x9D +#define PX_DIK_MUTE 0xA0 /* Mute */ +#define PX_DIK_CALCULATOR 0xA1 /* Calculator */ +#define PX_DIK_PLAYPAUSE 0xA2 /* Play / Pause */ +#define PX_DIK_MEDIASTOP 0xA4 /* Media Stop */ +#define PX_DIK_VOLUMEDOWN 0xAE /* Volume - */ +#define PX_DIK_VOLUMEUP 0xB0 /* Volume + */ +#define PX_DIK_WEBHOME 0xB2 /* Web home */ +#define PX_DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ +#define PX_DIK_DIVIDE 0xB5 /* / on numeric keypad */ +#define PX_DIK_SYSRQ 0xB7 +#define PX_DIK_RMENU 0xB8 /* right Alt */ +#define PX_DIK_PAUSE 0xC5 /* Pause */ +#define PX_DIK_HOME 0xC7 /* Home on arrow keypad */ +#define PX_DIK_UP 0xC8 /* UpArrow on arrow keypad */ +#define PX_DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ +#define PX_DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ +#define PX_DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ +#define PX_DIK_END 0xCF /* End on arrow keypad */ +#define PX_DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ +#define PX_DIK_NEXT 0xD1 /* PgDn on arrow keypad */ +#define PX_DIK_INSERT 0xD2 /* Insert on arrow keypad */ +#define PX_DIK_DELETE 0xD3 /* Delete on arrow keypad */ +#define PX_DIK_LWIN 0xDB /* Left Windows key */ +#define PX_DIK_RWIN 0xDC /* Right Windows key */ +#define PX_DIK_APPS 0xDD /* AppMenu key */ +#define PX_DIK_POWER 0xDE /* System Power */ +#define PX_DIK_SLEEP 0xDF /* System Sleep */ +#define PX_DIK_WAKE 0xE3 /* System Wake */ +#define PX_DIK_WEBSEARCH 0xE5 /* Web Search */ +#define PX_DIK_WEBFAVORITES 0xE6 /* Web Favorites */ +#define PX_DIK_WEBREFRESH 0xE7 /* Web Refresh */ +#define PX_DIK_WEBSTOP 0xE8 /* Web Stop */ +#define PX_DIK_WEBFORWARD 0xE9 /* Web Forward */ +#define PX_DIK_WEBBACK 0xEA /* Web Back */ +#define PX_DIK_MYCOMPUTER 0xEB /* My Computer */ +#define PX_DIK_MAIL 0xEC /* Mail */ +#define PX_DIK_MEDIASELECT 0xED /* Media Select */ + +typedef struct +{ + UINT uMsg; + LPARAM lparam; + WPARAM wparam; +} WM_MESSAGE; + +BOOL PX_CreateWindow(int Width, int Height, const char *name, BOOL bfullScreen); +HWND PX_GetWindowHwnd(void); +VOID PX_SystemReadDeviceState(void); +BOOL PX_SystemLoop(void); +BOOL PX_SystemRender(void *raw, int width, int height); +BOOL PX_SystemIsActivated(void); +BOOL PX_KeyboardDown(unsigned char X); +char *PX_KeyboardString(void); +char *PX_DragfileString(void); +BOOL PX_MouseLButtonDown(void); +BOOL PX_MouseRButtonDown(void); +BOOL PX_MouseMButtonDown(void); +POINT PX_MousePosition(void); +BOOL PX_KeyDown(unsigned char key); +BOOL PX_MouseWheel(int *x, int *y, int *delta); +BOOL PX_GetWinMessage(WM_MESSAGE *Msg); +char *PX_OpenFileDialog(const char Filter[]); +char *PX_MultFileDialog(const char Filter[]); +char *PX_GetFileName(const char filePath[]); +char *PX_SaveFileDialog(const char Filter[], const char ext[]); +#endif diff --git a/UI/PainterEngine/supports/old/Platform_Windows_D3D.cpp b/UI/PainterEngine/supports/old/Platform_Windows_D3D.cpp new file mode 100644 index 0000000..34e9462 --- /dev/null +++ b/UI/PainterEngine/supports/old/Platform_Windows_D3D.cpp @@ -0,0 +1,835 @@ + +#include "Platform_Windows_D3D.h" + + +#define WIN_MAX_INPUT_STRING_LEN 64 +#define WIN_MAX_INPUT_SPECKEY_LEN 0xff + + +#define WIN_KEYDOWN_BACKSPACE 1 +#define WIN_KEYDOWN_RETURN 2 +#define WIN_KEYDOWN_LEFT 3 +#define WIN_KEYDOWN_RIGHT 4 +#define WIN_KEYDOWN_UP 5 +#define WIN_KEYDOWN_DOWN 6 + +typedef enum +{ + DINPUT_IO_DEVICE_TYPE_KEYBOARD , + DINPUT_IO_DEVICE_TYPE_MOUSE , + DINPUT_IO_DEVICE_TYPE_JOY , +}DINPUT_IO_DEVICE_TYPE; + + +typedef struct +{ + IDirectInputDevice8 *pDIDevice; + GUID guid; +}DINPUT_INPUT_DEVICE; + +HWND Win_Hwnd; +int Win_Height; +int Win_Width; +BOOL Win_bFullScreen; +BOOL Win_Activated; +IDirect3D9 *DirectX_pDirect3D9; +IDirect3DDevice9 *DirectX_pD3DDevice; +ID3DXSprite *DirectX_pD3DSprite; +D3DPRESENT_PARAMETERS DirectX_d3dpp; +D3DDISPLAYMODE DirectX_DisplayMode; +unsigned int DirectX_Width; +unsigned int DirectX_Height; +char DirectX_BPP; +BOOL DirectX_HAREWARE; +BOOL DirectX_FullScreen; +IDirect3DTexture9 *DirectX_RenderTexture; + +IDirectInput8 *DInput_pDirectInput; +unsigned char DInput_KeyBoardState[256]; +char DInput_AccepyFile[MAX_PATH]={0}; +DIMOUSESTATE DInput_MouseState; +DIJOYSTATE DInput_JoyState; +POINT DInput_MousePosition; +int DInput_JoyDeviceIndex=0,DInput_KeyboardDeviceIndex=0,DInput_MouseDeviceIndex=0; +DINPUT_INPUT_DEVICE DInput_JoyDevice[8],DInput_KeyboardDevice[8],DInput_MouseDevice[8]; + + +static WNDCLASSEX Win_Wcx; + +///////////////////////////////////////////////////// +LRESULT CALLBACK AppWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +///////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////// +// Get BPP(Color bit) from D3DFORMAT /// +/////////////////////////////////////////////////////////////////// +//************************************ +// Method: GetFormatBPP +// FullName: GetFormatBPP +// Access: public +// Returns: CHAR +// Qualifier: +// Parameter: D3DFORMAT Format +//************************************ +static int GetFormatBPP( D3DFORMAT Format ) +{ + switch(Format) { + + case D3DFMT_A8R8G8B8: + case D3DFMT_X8R8G8B8: + return 32; + break; + + + case D3DFMT_R8G8B8: + return 24; + break; + + + case D3DFMT_R5G6B5: + case D3DFMT_X1R5G5B5: + case D3DFMT_A1R5G5B5: + case D3DFMT_A4R4G4B4: + return 16; + break; + + + case D3DFMT_A8P8: + case D3DFMT_P8: + return 8; + break; + + default: + return 0; + } +} + + +static BOOL CheckFormat( D3DFORMAT Format, BOOL Windowed, BOOL HAL ) +{ + + if(FAILED(IDirect3D9_CheckDeviceType(DirectX_pDirect3D9,D3DADAPTER_DEFAULT, + (HAL == TRUE) ? D3DDEVTYPE_HAL : D3DDEVTYPE_REF, + Format, Format, Windowed))) + return FALSE; + + return TRUE; +} + +BOOL DINPUT_CreateDevice(HWND hWnd,REFGUID guid,LPDIRECTINPUTDEVICE8 *ppInputDevice,DINPUT_IO_DEVICE_TYPE nType) +{ + DIPROPRANGE dipr; + + if(FAILED(IDirectInput8_CreateDevice(DInput_pDirectInput,guid,ppInputDevice,NULL))) + { + return FALSE; + } + + switch(nType) + { + case DINPUT_IO_DEVICE_TYPE_KEYBOARD: + if(FAILED(IDirectInputDevice8_SetDataFormat((*ppInputDevice),&c_dfDIKeyboard))) + { + IDirectInputDevice8_Release((*ppInputDevice)); + (*ppInputDevice)=NULL; + return FALSE; + } + break; + case DINPUT_IO_DEVICE_TYPE_MOUSE: + if(FAILED(IDirectInputDevice8_SetDataFormat((*ppInputDevice),&c_dfDIMouse))) + { + IDirectInputDevice8_Release((*ppInputDevice)); + (*ppInputDevice)=NULL; + return FALSE; + } + break; + case DINPUT_IO_DEVICE_TYPE_JOY: + if(FAILED(IDirectInputDevice8_SetDataFormat((*ppInputDevice),&c_dfDIJoystick))) + { + IDirectInputDevice8_Release((*ppInputDevice)); + (*ppInputDevice)=NULL; + return FALSE; + } + break; + default: + return FALSE; + } + + if(FAILED(IDirectInputDevice8_SetCooperativeLevel((*ppInputDevice),hWnd,DISCL_BACKGROUND|DISCL_NONEXCLUSIVE))) + { + IDirectInputDevice8_Release((*ppInputDevice)); + (*ppInputDevice)=NULL; + return FALSE; + } + + if (nType==DINPUT_IO_DEVICE_TYPE_JOY) + { + ZeroMemory(&dipr,sizeof DIPROPRANGE); + dipr.diph.dwSize=sizeof(dipr); + dipr.diph.dwHeaderSize=sizeof (dipr); + dipr.diph.dwObj=DIJOFS_X; + dipr.diph.dwHow=DIPH_BYOFFSET; + + dipr.lMin=-1024; + dipr.lMax=1024; + + if (FAILED(IDirectInputDevice8_SetProperty((*ppInputDevice),DIPROP_RANGE,&dipr.diph))) + { + IDirectInputDevice8_Release((*ppInputDevice)); + (*ppInputDevice)=NULL; + return FALSE; + } + } + if (FAILED(IDirectInputDevice8_Acquire((*ppInputDevice)))) + { + IDirectInputDevice8_Release((*ppInputDevice)); + (*ppInputDevice)=NULL; + return FALSE; + } + + return TRUE; +} + +BOOL CALLBACK DInput_RecvJoyDevice(LPCDIDEVICEINSTANCE pDevicsInst,LPVOID pvRef) +{ + if(DInput_JoyDeviceIndex>=8) + { + return TRUE; + } + + DInput_JoyDevice[DInput_JoyDeviceIndex].guid=pDevicsInst->guidInstance; + if(DINPUT_CreateDevice(Win_Hwnd,DInput_JoyDevice[DInput_JoyDeviceIndex].guid,&DInput_JoyDevice[DInput_JoyDeviceIndex].pDIDevice,DINPUT_IO_DEVICE_TYPE_JOY)) + { + DInput_JoyDeviceIndex++; + } + + return DIENUM_CONTINUE; +} + +BOOL CALLBACK DInput_RecvMouseDevice(LPCDIDEVICEINSTANCE pDevicsInst,LPVOID pvRef) +{ + if(DInput_MouseDeviceIndex>=8) + { + return TRUE; + } + + DInput_MouseDevice[DInput_MouseDeviceIndex].guid=pDevicsInst->guidInstance; + if(DINPUT_CreateDevice(Win_Hwnd,DInput_MouseDevice[DInput_MouseDeviceIndex].guid,&DInput_MouseDevice[DInput_MouseDeviceIndex].pDIDevice,DINPUT_IO_DEVICE_TYPE_MOUSE)) + { + DInput_MouseDeviceIndex++; + } + + return DIENUM_CONTINUE; +} + +BOOL CALLBACK DInput_RecvKeyboardDevice(LPCDIDEVICEINSTANCE pDevicsInst,LPVOID pvRef) +{ + if(DInput_KeyboardDeviceIndex>=8) + { + return TRUE; + } + + DInput_KeyboardDevice[DInput_KeyboardDeviceIndex].guid=pDevicsInst->guidInstance; + if(DINPUT_CreateDevice(Win_Hwnd,DInput_KeyboardDevice[DInput_KeyboardDeviceIndex].guid,&DInput_KeyboardDevice[DInput_KeyboardDeviceIndex].pDIDevice,DINPUT_IO_DEVICE_TYPE_KEYBOARD)) + { + DInput_KeyboardDeviceIndex++; + } + + return DIENUM_CONTINUE; +} + +BOOL DInput_ReadDevice(IDirectInputDevice8 *pDevice,void *DataBuffer,long BufferSize) +{ + HRESULT hr; + if (pDevice==NULL) + { + return FALSE; + } + while(TRUE) + { + IDirectInputDevice8_Poll(pDevice); + + if (SUCCEEDED(hr=IDirectInputDevice8_GetDeviceState(pDevice,BufferSize,(LPVOID)DataBuffer))) + { + break; + } + + if (hr!=DIERR_INPUTLOST&&hr!=DIERR_NOTACQUIRED) + { + return FALSE; + } + + if (FAILED(IDirectInputDevice8_Acquire(pDevice))) + { + return FALSE; + } + } + + return TRUE; +} + +void DInput_UpdateDevice() +{ + DInput_JoyDeviceIndex=0,DInput_KeyboardDeviceIndex=0,DInput_MouseDeviceIndex=0; + IDirectInput8_EnumDevices(DInput_pDirectInput,DI8DEVTYPE_JOYSTICK,DInput_RecvJoyDevice,NULL,DIEDFL_ATTACHEDONLY); + IDirectInput8_EnumDevices(DInput_pDirectInput,DI8DEVTYPE_MOUSE,DInput_RecvMouseDevice,NULL,DIEDFL_ATTACHEDONLY); + IDirectInput8_EnumDevices(DInput_pDirectInput,DI8DEVTYPE_KEYBOARD,DInput_RecvKeyboardDevice,NULL,DIEDFL_ATTACHEDONLY); +} + + +void DInput_Update() +{ + BOOL KeyBoardReaded=FALSE; + BOOL MouseReaded=FALSE; + BOOL JoyReaded=FALSE; + int i; + POINT point; + + for(i=0;i=32||wParam==8) + { + Win_Str[Win_CurrentIndex++]=(char)wParam; + Win_Str[Win_CurrentIndex]='\0'; + } + } + return 0; + } + break; + case WM_DROPFILES: + { + HDROP hdrop = (HDROP)wParam; + DragQueryFile(hdrop, 0, DInput_AccepyFile, MAX_PATH); + DragFinish(hdrop); + } + break; + case WM_CLOSE: + { + PostQuitMessage(0); + exit(0); + } + break; + case WM_DESTROY: + { + PostQuitMessage(0); + return 0; + } + break; + + default: return DefWindowProc(hWnd,uMsg,wParam,lParam); + } + return TRUE; +} + +BOOL PX_SystemLoop() +{ + MSG Msg; + ZeroMemory(&Msg, sizeof(MSG)); + + if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) + { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + else + { + Sleep(10); + } + return TRUE; +} + +// Reset device +HRESULT ResetDevice(D3DPRESENT_PARAMETERS d3dpp) +{ + // Check device state + HRESULT hr =IDirect3DDevice9_TestCooperativeLevel(DirectX_pD3DDevice); + + // Device can be reset now + if (SUCCEEDED(hr) || hr == D3DERR_DEVICENOTRESET) + { + // Reset device + IDirect3DDevice9_Reset(DirectX_pD3DDevice,&d3dpp) ; + + if (!PX_D3DReset(Win_Hwnd,Win_Width,Win_Height,Win_bFullScreen)) + { + return FALSE; + } + } + // Device is still in lost state, wait + else if (hr == D3DERR_DEVICELOST) + { + Sleep(10) ; + } + + return hr ; +} + +BOOL PX_SystemRender(void *raw,int witdh,int height) +{ + D3DLOCKED_RECT lrect; + HRESULT hr; + RECT Rect; + unsigned char *pBits; + + + hr=IDirect3DTexture9_LockRect(DirectX_RenderTexture,0, &lrect, NULL, 0); + if (FAILED(hr)) + { + return FALSE; + } + pBits=(unsigned char *)lrect.pBits; + + memcpy(pBits,raw,witdh*height*sizeof(DWORD)); + + IDirect3DTexture9_UnlockRect(DirectX_RenderTexture,0); + + + if(FAILED(IDirect3DDevice9_Clear(DirectX_pD3DDevice,0, NULL, D3DCLEAR_TARGET, D3DXCOLOR(1,0,0,1), 1.0, 0))) + return FALSE; + + hr=DirectX_pD3DDevice->BeginScene(); + if (FAILED(hr)) + { + return FALSE; + } + + hr=DirectX_pD3DSprite->Begin(D3DXSPRITE_ALPHABLEND); + if (FAILED(hr)) + { + return FALSE; + } + Rect.left=0; + Rect.top =0; + Rect.right =DirectX_Width; + Rect.bottom =DirectX_Height; + + + if(FAILED(DirectX_pD3DSprite->Draw(DirectX_RenderTexture,&Rect,NULL,&D3DXVECTOR3(0,0,0),D3DXCOLOR(1,1,1,1)))) + { + return FALSE; + } + + DirectX_pD3DSprite->End(); + DirectX_pD3DDevice->EndScene(); + if(FAILED(DirectX_pD3DDevice->Present(0,0,0,0))) + ResetDevice(DirectX_d3dpp); + + return TRUE; +} + +BOOL PX_SystemisAvtivated() +{ + return Win_Activated; +} + +BOOL PX_KeyboardDown(unsigned char X) +{ + return (DInput_KeyBoardState[X]&0x80?TRUE:FALSE); +} + +BOOL PX_MouseLButtonDown() +{ + return DInput_MouseState.rgbButtons[0]&0x80; +} + +BOOL PX_MouseRButtonDown() +{ + return DInput_MouseState.rgbButtons[1]&0x80; +} + +BOOL PX_MouseMButtonDown() +{ + return DInput_MouseState.rgbButtons[2]&0x80; +} + +POINT PX_MousePosition() +{ + return DInput_MousePosition; +} + +char * PX_KeyboardString() +{ + if(Win_CurrentIndex!=0) + { + Win_CurrentIndex=0; + return Win_Str; + } + else + { + return 0; + } +} + +VOID PX_SystemReadDeviceState() +{ + DInput_Update(); +} + +char * PX_DragfileString() +{ + return DInput_AccepyFile; +} + +HWND PX_GetWindowHwnd() +{ + return Win_Hwnd; +} + +BOOL PX_KeyDown(char key) +{ + if (Win_SpecKey[key]) + { + Win_SpecKey[key]=0; + return TRUE; + } + return FALSE; +} \ No newline at end of file diff --git a/UI/PainterEngine/supports/old/Platform_Windows_D3D.h b/UI/PainterEngine/supports/old/Platform_Windows_D3D.h new file mode 100644 index 0000000..91eb816 --- /dev/null +++ b/UI/PainterEngine/supports/old/Platform_Windows_D3D.h @@ -0,0 +1,181 @@ +#ifndef PLATFORM_WINDOWS +#define PLATFORM_WINDOWS + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma comment(lib,"d3dx9.lib") +#pragma comment(lib,"d3d9.lib") +#pragma comment(lib,"WINMM.LIB") +#pragma comment(lib,"DXGUID.LIB") +#pragma comment(lib,"dsound.lib") +#pragma comment(lib,"dinput8.lib") + +#define PX_DIK_ESCAPE 0x01 +#define PX_DIK_1 0x02 +#define PX_DIK_2 0x03 +#define PX_DIK_3 0x04 +#define PX_DIK_4 0x05 +#define PX_DIK_5 0x06 +#define PX_DIK_6 0x07 +#define PX_DIK_7 0x08 +#define PX_DIK_8 0x09 +#define PX_DIK_9 0x0A +#define PX_DIK_0 0x0B +#define PX_DIK_MINUS 0x0C /* - on main keyboard */ +#define PX_DIK_EQUALS 0x0D +#define PX_DIK_BACK 0x0E /* backspace */ +#define PX_DIK_TAB 0x0F +#define PX_DIK_Q 0x10 +#define PX_DIK_W 0x11 +#define PX_DIK_E 0x12 +#define PX_DIK_R 0x13 +#define PX_DIK_T 0x14 +#define PX_DIK_Y 0x15 +#define PX_DIK_U 0x16 +#define PX_DIK_I 0x17 +#define PX_DIK_O 0x18 +#define PX_DIK_P 0x19 +#define PX_DIK_LBRACKET 0x1A +#define PX_DIK_RBRACKET 0x1B +#define PX_DIK_RETURN 0x1C /* Enter on main keyboard */ +#define PX_DIK_LCONTROL 0x1D +#define PX_DIK_A 0x1E +#define PX_DIK_S 0x1F +#define PX_DIK_D 0x20 +#define PX_DIK_F 0x21 +#define PX_DIK_G 0x22 +#define PX_DIK_H 0x23 +#define PX_DIK_J 0x24 +#define PX_DIK_K 0x25 +#define PX_DIK_L 0x26 +#define PX_DIK_SEMICOLON 0x27 +#define PX_DIK_APOSTROPHE 0x28 +#define PX_DIK_GRAVE 0x29 /* accent grave */ +#define PX_DIK_LSHIFT 0x2A +#define PX_DIK_BACKSLASH 0x2B +#define PX_DIK_Z 0x2C +#define PX_DIK_X 0x2D +#define PX_DIK_C 0x2E +#define PX_DIK_V 0x2F +#define PX_DIK_B 0x30 +#define PX_DIK_N 0x31 +#define PX_DIK_M 0x32 +#define PX_DIK_COMMA 0x33 +#define PX_DIK_PERIOD 0x34 /* . on main keyboard */ +#define PX_DIK_SLASH 0x35 /* / on main keyboard */ +#define PX_DIK_RSHIFT 0x36 +#define PX_DIK_MULTIPLY 0x37 /* * on numeric keypad */ +#define PX_DIK_LMENU 0x38 /* left Alt */ +#define PX_DIK_SPACE 0x39 +#define PX_DIK_CAPITAL 0x3A +#define PX_DIK_F1 0x3B +#define PX_DIK_F2 0x3C +#define PX_DIK_F3 0x3D +#define PX_DIK_F4 0x3E +#define PX_DIK_F5 0x3F +#define PX_DIK_F6 0x40 +#define PX_DIK_F7 0x41 +#define PX_DIK_F8 0x42 +#define PX_DIK_F9 0x43 +#define PX_DIK_F10 0x44 +#define PX_DIK_NUMLOCK 0x45 +#define PX_DIK_SCROLL 0x46 /* Scroll Lock */ +#define PX_DIK_NUMPAD7 0x47 +#define PX_DIK_NUMPAD8 0x48 +#define PX_DIK_NUMPAD9 0x49 +#define PX_DIK_SUBTRACT 0x4A /* - on numeric keypad */ +#define PX_DIK_NUMPAD4 0x4B +#define PX_DIK_NUMPAD5 0x4C +#define PX_DIK_NUMPAD6 0x4D +#define PX_DIK_ADD 0x4E /* + on numeric keypad */ +#define PX_DIK_NUMPAD1 0x4F +#define PX_DIK_NUMPAD2 0x50 +#define PX_DIK_NUMPAD3 0x51 +#define PX_DIK_NUMPAD0 0x52 +#define PX_DIK_DECIMAL 0x53 /* . on numeric keypad */ +#define PX_DIK_OEM_102 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ +#define PX_DIK_F11 0x57 +#define PX_DIK_F12 0x58 +#define PX_DIK_F13 0x64 /* (NEC PC98) */ +#define PX_DIK_F14 0x65 /* (NEC PC98) */ +#define PX_DIK_F15 0x66 /* (NEC PC98) */ +#define PX_DIK_KANA 0x70 /* (Japanese keyboard) */ +#define PX_DIK_ABNT_C1 0x73 /* /? on Brazilian keyboard */ +#define PX_DIK_CONVERT 0x79 /* (Japanese keyboard) */ +#define PX_DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ +#define PX_DIK_YEN 0x7D /* (Japanese keyboard) */ +#define PX_DIK_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */ +#define PX_DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ +#define PX_DIK_PREVTRACK 0x90 /* Previous Track (PX_DIK_CIRCUMFLEX on Japanese keyboard) */ +#define PX_DIK_AT 0x91 /* (NEC PC98) */ +#define PX_DIK_COLON 0x92 /* (NEC PC98) */ +#define PX_DIK_UNDERLINE 0x93 /* (NEC PC98) */ +#define PX_DIK_KANJI 0x94 /* (Japanese keyboard) */ +#define PX_DIK_STOP 0x95 /* (NEC PC98) */ +#define PX_DIK_AX 0x96 /* (Japan AX) */ +#define PX_DIK_UNLABELED 0x97 /* (J3100) */ +#define PX_DIK_NEXTTRACK 0x99 /* Next Track */ +#define PX_DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ +#define PX_DIK_RCONTROL 0x9D +#define PX_DIK_MUTE 0xA0 /* Mute */ +#define PX_DIK_CALCULATOR 0xA1 /* Calculator */ +#define PX_DIK_PLAYPAUSE 0xA2 /* Play / Pause */ +#define PX_DIK_MEDIASTOP 0xA4 /* Media Stop */ +#define PX_DIK_VOLUMEDOWN 0xAE /* Volume - */ +#define PX_DIK_VOLUMEUP 0xB0 /* Volume + */ +#define PX_DIK_WEBHOME 0xB2 /* Web home */ +#define PX_DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ +#define PX_DIK_DIVIDE 0xB5 /* / on numeric keypad */ +#define PX_DIK_SYSRQ 0xB7 +#define PX_DIK_RMENU 0xB8 /* right Alt */ +#define PX_DIK_PAUSE 0xC5 /* Pause */ +#define PX_DIK_HOME 0xC7 /* Home on arrow keypad */ +#define PX_DIK_UP 0xC8 /* UpArrow on arrow keypad */ +#define PX_DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ +#define PX_DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ +#define PX_DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ +#define PX_DIK_END 0xCF /* End on arrow keypad */ +#define PX_DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ +#define PX_DIK_NEXT 0xD1 /* PgDn on arrow keypad */ +#define PX_DIK_INSERT 0xD2 /* Insert on arrow keypad */ +#define PX_DIK_DELETE 0xD3 /* Delete on arrow keypad */ +#define PX_DIK_LWIN 0xDB /* Left Windows key */ +#define PX_DIK_RWIN 0xDC /* Right Windows key */ +#define PX_DIK_APPS 0xDD /* AppMenu key */ +#define PX_DIK_POWER 0xDE /* System Power */ +#define PX_DIK_SLEEP 0xDF /* System Sleep */ +#define PX_DIK_WAKE 0xE3 /* System Wake */ +#define PX_DIK_WEBSEARCH 0xE5 /* Web Search */ +#define PX_DIK_WEBFAVORITES 0xE6 /* Web Favorites */ +#define PX_DIK_WEBREFRESH 0xE7 /* Web Refresh */ +#define PX_DIK_WEBSTOP 0xE8 /* Web Stop */ +#define PX_DIK_WEBFORWARD 0xE9 /* Web Forward */ +#define PX_DIK_WEBBACK 0xEA /* Web Back */ +#define PX_DIK_MYCOMPUTER 0xEB /* My Computer */ +#define PX_DIK_MAIL 0xEC /* Mail */ +#define PX_DIK_MEDIASELECT 0xED /* Media Select */ + +BOOL PX_CreateWindow( int Width,int Height,char *name,BOOL bfullScreen); +HWND PX_GetWindowHwnd(); +VOID PX_SystemReadDeviceState(); +BOOL PX_SystemLoop(); +BOOL PX_SystemRender(void *raw,int width,int hight); +BOOL PX_SystemisAvtivated(); +BOOL PX_KeyboardDown(unsigned char X ); +char *PX_KeyboardString(); +char *PX_DragfileString(); +BOOL PX_MouseLButtonDown(); +BOOL PX_MouseRButtonDown(); +BOOL PX_MouseMButtonDown(); +POINT PX_MousePosition(); +BOOL PX_KeyDown(char key); +#endif diff --git a/UI/PainterEngine/supports/old/Platform_Windows_WaveOut.c b/UI/PainterEngine/supports/old/Platform_Windows_WaveOut.c new file mode 100644 index 0000000..986970a --- /dev/null +++ b/UI/PainterEngine/supports/old/Platform_Windows_WaveOut.c @@ -0,0 +1,89 @@ +#include +#include "../../core/PX_Sound.h" + + +static HWAVEOUT main_hWaveOut; +static HANDLE main_waveEvent; +static PX_SoundPlay *main_soundplay=NULL; + +#define MAIN_WAVEBUFFER_BLOCK_LEN 1764 +#define MAIN_WAVEBUFFER_BLOCK_COUNT 8 + +static unsigned char main_wavebuffer[MAIN_WAVEBUFFER_BLOCK_LEN*MAIN_WAVEBUFFER_BLOCK_COUNT]={0}; + +DWORD _stdcall DEMO_waveOutProc(LPVOID p) +{ + WAVEHDR waveheader; + px_int QueueSize=0; + px_int wIndex=0; + + while (!main_soundplay) + { + Sleep(10); + } + + while(1) + { + if (!PX_SoundPlayGetDataCount(main_soundplay)) + { + QueueSize=0; + } + while (QueueSize=MAIN_WAVEBUFFER_BLOCK_COUNT) + { + wIndex=0; + } + } + + WaitForSingleObject(main_waveEvent,INFINITE); + ResetEvent(main_waveEvent); + if(QueueSize>0) + QueueSize--; + } +} + + +BOOL PX_AudioInitialize(HWND hwnd,PX_SoundPlay *soundPlay) +{ + WAVEFORMATEX waveformat; + HANDLE hThread; + DWORD threadId; + + waveformat.wFormatTag = WAVE_FORMAT_PCM; + waveformat.nSamplesPerSec = 44100;//44100; + waveformat.wBitsPerSample = 16;// + waveformat.nChannels = 2;// + waveformat.nBlockAlign = (waveformat.wBitsPerSample >> 3) * waveformat.nChannels;; + waveformat.nAvgBytesPerSec = waveformat.nBlockAlign * waveformat.nSamplesPerSec; + waveformat.cbSize = 0; + + main_waveEvent= CreateEvent(NULL,FALSE,FALSE,"PCM_DONE"); + + if(FAILED(waveOutOpen(&main_hWaveOut,WAVE_MAPPER,&waveformat,(DWORD_PTR)main_waveEvent,(DWORD_PTR)NULL,CALLBACK_EVENT))) + return FALSE; + + hThread = CreateThread(NULL, 0, DEMO_waveOutProc, 0, 0, &threadId); + + main_soundplay=soundPlay; + return TRUE; +} + + +void PX_AudioSetVolume(DWORD volume) +{ + waveOutSetVolume(main_hWaveOut,volume); +} -- Gitee From 3c4795ec797f43ed73cf78dd534cfcfbcd58731f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A8=E6=85=8E=E8=B0=A6=E8=99=9A?= <419875574@qq.com> Date: Thu, 23 Dec 2021 11:24:06 +0800 Subject: [PATCH 11/19] feat: combine UI and interaction logic --- .vscode/settings.json | 5 + UI/PainterEngine/elsecode/include/map.h | 11 - UI/PainterEngine/elsecode/include/mine_map.h | 46 --- UI/PainterEngine/elsecode/include/opt.h | 124 ------ .../platform/android/AndroidManifest.xml | 31 -- .../platform/android/CMakeLists.txt | 44 --- UI/PainterEngine/platform/android/px_audio.c | 120 ------ .../platform/android/px_display.c | 220 ----------- .../platform/android/px_display.h | 37 -- UI/PainterEngine/platform/android/px_file.c | 368 ------------------ UI/PainterEngine/platform/android/px_main.c | 163 -------- .../platform/android/px_serialport.c | 167 -------- UI/PainterEngine/platform/android/px_tcp.c | 150 ------- UI/PainterEngine/platform/android/px_thread.c | 19 - UI/PainterEngine/platform/android/px_time.c | 77 ---- UI/PainterEngine/platform/android/px_udp.c | 158 -------- UI/PainterEngine/platform/linux/makefile | 51 --- UI/PainterEngine/platform/linux/px_display.c | 33 -- UI/PainterEngine/platform/linux/px_display.h | 9 - UI/PainterEngine/platform/linux/px_file.c | 311 --------------- UI/PainterEngine/platform/linux/px_main.c | 147 ------- .../platform/linux/px_serialport.c | 167 -------- UI/PainterEngine/platform/linux/px_tcp.c | 149 ------- UI/PainterEngine/platform/linux/px_thread.c | 19 - UI/PainterEngine/platform/linux/px_time.c | 77 ---- UI/PainterEngine/platform/linux/px_udp.c | 157 -------- UI/PainterEngine/platform/macos/px_display.c | 33 -- UI/PainterEngine/platform/macos/px_display.h | 12 - UI/PainterEngine/platform/macos/px_file.c | 311 --------------- UI/PainterEngine/platform/macos/px_main.c | 147 ------- UI/PainterEngine/platform/macos/xmake.lua | 26 -- UI/PainterEngine/platform/modules/px_audio.h | 11 - UI/PainterEngine/platform/modules/px_file.h | 36 -- .../platform/modules/px_serialport.h | 21 - UI/PainterEngine/platform/modules/px_tcp.h | 36 -- UI/PainterEngine/platform/modules/px_thread.h | 21 - UI/PainterEngine/platform/modules/px_time.h | 12 - UI/PainterEngine/platform/modules/px_udp.h | 33 -- .../platform/webassembly/assets/readme.txt | 3 - .../platform/webassembly/index.html | 162 -------- UI/PainterEngine/platform/webassembly/main.c | 180 --------- .../platform/webassembly/makefile | 58 --- .../platform/webassembly/px_audio.c | 44 --- .../platform/webassembly/px_file.c | 311 --------------- .../platform/webassembly/px_tcp.c | 149 ------- .../platform/webassembly/px_thread.c | 19 - .../platform/webassembly/px_time.c | 77 ---- .../platform/webassembly/px_udp.c | 157 -------- .../platform/windows gdi/px_display.c | 129 ------ .../platform/windows gdi/px_display.h | 8 - .../architecture/PainterEngine_Console.c | 0 .../architecture/PainterEngine_Console.h | 0 .../architecture/PainterEngine_Designer.c | 0 .../architecture/PainterEngine_Designer.h | 0 .../architecture/PainterEngine_Executer.c | 0 .../architecture/PainterEngine_Executer.h | 0 .../architecture/PainterEngine_FoxLogo.h | 0 .../architecture/PainterEngine_Runtime.c | 0 .../architecture/PainterEngine_Runtime.h | 0 UI/{PainterEngine => }/core/PX_3D.c | 0 UI/{PainterEngine => }/core/PX_3D.h | 0 UI/{PainterEngine => }/core/PX_AES.c | 0 UI/{PainterEngine => }/core/PX_AES.h | 0 UI/{PainterEngine => }/core/PX_ANN.c | 0 UI/{PainterEngine => }/core/PX_ANN.h | 0 UI/{PainterEngine => }/core/PX_Arle.c | 0 UI/{PainterEngine => }/core/PX_Arle.h | 0 UI/{PainterEngine => }/core/PX_Base64.c | 0 UI/{PainterEngine => }/core/PX_Base64.h | 0 UI/{PainterEngine => }/core/PX_BaseGeo.c | 0 UI/{PainterEngine => }/core/PX_BaseGeo.h | 0 UI/{PainterEngine => }/core/PX_Bitmap.c | 0 UI/{PainterEngine => }/core/PX_Bitmap.h | 0 UI/{PainterEngine => }/core/PX_Core.h | 0 UI/{PainterEngine => }/core/PX_Delaunay.c | 0 UI/{PainterEngine => }/core/PX_Delaunay.h | 0 UI/{PainterEngine => }/core/PX_Effect.c | 0 UI/{PainterEngine => }/core/PX_Effect.h | 0 UI/{PainterEngine => }/core/PX_Font.c | 0 UI/{PainterEngine => }/core/PX_Font.h | 0 UI/{PainterEngine => }/core/PX_Hashmap.c | 0 UI/{PainterEngine => }/core/PX_Hashmap.h | 0 UI/{PainterEngine => }/core/PX_Huffman.c | 0 UI/{PainterEngine => }/core/PX_Huffman.h | 0 UI/{PainterEngine => }/core/PX_ImageFilter.c | 0 UI/{PainterEngine => }/core/PX_ImageFilter.h | 0 UI/{PainterEngine => }/core/PX_KalmanFilter.c | 0 UI/{PainterEngine => }/core/PX_KalmanFilter.h | 0 UI/{PainterEngine => }/core/PX_Linker.c | 0 UI/{PainterEngine => }/core/PX_Linker.h | 0 UI/{PainterEngine => }/core/PX_List.c | 0 UI/{PainterEngine => }/core/PX_List.h | 0 UI/{PainterEngine => }/core/PX_Log.c | 0 UI/{PainterEngine => }/core/PX_Log.h | 0 UI/{PainterEngine => }/core/PX_MFCC.c | 0 UI/{PainterEngine => }/core/PX_MFCC.h | 0 UI/{PainterEngine => }/core/PX_MathTable.h | 0 UI/{PainterEngine => }/core/PX_Memory.c | 0 UI/{PainterEngine => }/core/PX_Memory.h | 0 UI/{PainterEngine => }/core/PX_MemoryPool.c | 0 UI/{PainterEngine => }/core/PX_MemoryPool.h | 0 UI/{PainterEngine => }/core/PX_Packet.c | 0 UI/{PainterEngine => }/core/PX_Packet.h | 0 UI/{PainterEngine => }/core/PX_PointsMesh.c | 0 UI/{PainterEngine => }/core/PX_PointsMesh.h | 0 UI/{PainterEngine => }/core/PX_Quadtree.c | 0 UI/{PainterEngine => }/core/PX_Quadtree.h | 0 UI/{PainterEngine => }/core/PX_Quicksort.c | 0 UI/{PainterEngine => }/core/PX_Quicksort.h | 0 UI/{PainterEngine => }/core/PX_Sha256.c | 0 UI/{PainterEngine => }/core/PX_Sha256.h | 0 UI/{PainterEngine => }/core/PX_Sound.c | 0 UI/{PainterEngine => }/core/PX_Sound.h | 0 UI/{PainterEngine => }/core/PX_SoundModule.c | 0 UI/{PainterEngine => }/core/PX_SoundModule.h | 0 UI/{PainterEngine => }/core/PX_String.c | 0 UI/{PainterEngine => }/core/PX_String.h | 0 UI/{PainterEngine => }/core/PX_Surface.c | 0 UI/{PainterEngine => }/core/PX_Surface.h | 0 UI/{PainterEngine => }/core/PX_TRaw.c | 0 UI/{PainterEngine => }/core/PX_TRaw.h | 0 UI/{PainterEngine => }/core/PX_Texture.c | 0 UI/{PainterEngine => }/core/PX_Texture.h | 0 .../core/PX_TriangleCross.c | 0 UI/{PainterEngine => }/core/PX_Tuning.c | 0 UI/{PainterEngine => }/core/PX_Tuning.h | 0 UI/{PainterEngine => }/core/PX_Typedef.c | 0 UI/{PainterEngine => }/core/PX_Typedef.h | 0 UI/{PainterEngine => }/core/PX_Vector.c | 0 UI/{PainterEngine => }/core/PX_Vector.h | 0 UI/{PainterEngine => }/core/PX_Wave.c | 0 UI/{PainterEngine => }/core/PX_Wave.h | 0 UI/{PainterEngine => }/core/PX_curve25519.c | 0 UI/{PainterEngine => }/core/PX_curve25519.h | 0 UI/{PainterEngine => }/core/PX_rbtree.c | 0 UI/{PainterEngine => }/core/PX_rbtree.h | 0 UI/{PainterEngine => }/kernel/PX_2dxCommon.h | 0 UI/{PainterEngine => }/kernel/PX_3D_ObjData.c | 0 UI/{PainterEngine => }/kernel/PX_3D_ObjData.h | 0 UI/{PainterEngine => }/kernel/PX_Animation.c | 0 UI/{PainterEngine => }/kernel/PX_Animation.h | 0 UI/{PainterEngine => }/kernel/PX_Compiler.c | 0 UI/{PainterEngine => }/kernel/PX_Compiler.h | 0 UI/{PainterEngine => }/kernel/PX_Json.c | 0 UI/{PainterEngine => }/kernel/PX_Json.h | 0 UI/{PainterEngine => }/kernel/PX_Kernel.h | 0 UI/{PainterEngine => }/kernel/PX_Lexer.c | 0 UI/{PainterEngine => }/kernel/PX_Lexer.h | 0 .../kernel/PX_LiveFramework.c | 0 .../kernel/PX_LiveFramework.h | 0 UI/{PainterEngine => }/kernel/PX_MODBUS.c | 0 UI/{PainterEngine => }/kernel/PX_MODBUS.h | 0 UI/{PainterEngine => }/kernel/PX_MQTT.c | 0 UI/{PainterEngine => }/kernel/PX_MQTT.h | 0 UI/{PainterEngine => }/kernel/PX_Object.c | 0 UI/{PainterEngine => }/kernel/PX_Object.h | 0 .../kernel/PX_Object_Animation.c | 0 .../kernel/PX_Object_Animation.h | 0 .../kernel/PX_Object_AutoText.c | 0 .../kernel/PX_Object_AutoText.h | 0 .../kernel/PX_Object_COMBox.c | 0 .../kernel/PX_Object_COMBox.h | 0 .../kernel/PX_Object_CheckBox.c | 0 .../kernel/PX_Object_CheckBox.h | 0 .../kernel/PX_Object_Coordinate.c | 0 .../kernel/PX_Object_Coordinate.h | 0 .../kernel/PX_Object_CursorButton.c | 0 .../kernel/PX_Object_CursorButton.h | 0 .../kernel/PX_Object_DesignerBox.c | 0 .../kernel/PX_Object_DesignerBox.h | 0 .../kernel/PX_Object_Edit.c | 0 .../kernel/PX_Object_Edit.h | 0 .../kernel/PX_Object_Explorer.c | 0 .../kernel/PX_Object_Explorer.h | 0 .../kernel/PX_Object_IPBox.c | 0 .../kernel/PX_Object_IPBox.h | 0 .../kernel/PX_Object_Image.c | 0 .../kernel/PX_Object_Image.h | 0 .../kernel/PX_Object_Joystick.c | 0 .../kernel/PX_Object_Joystick.h | 0 .../kernel/PX_Object_Label.c | 0 .../kernel/PX_Object_Label.h | 0 .../kernel/PX_Object_List.c | 0 .../kernel/PX_Object_List.h | 0 .../kernel/PX_Object_MemoryView.c | 0 .../kernel/PX_Object_MemoryView.h | 0 .../kernel/PX_Object_Menu.c | 0 .../kernel/PX_Object_Menu.h | 0 .../kernel/PX_Object_MessageBox.c | 0 .../kernel/PX_Object_MessageBox.h | 0 .../kernel/PX_Object_Panc.c | 0 .../kernel/PX_Object_Panc.h | 0 .../kernel/PX_Object_Processbar.c | 0 .../kernel/PX_Object_Processbar.h | 0 .../kernel/PX_Object_Protractor.c | 0 .../kernel/PX_Object_Protractor.h | 0 .../kernel/PX_Object_PushButton.c | 0 .../kernel/PX_Object_PushButton.h | 0 .../kernel/PX_Object_RadioBox.c | 0 .../kernel/PX_Object_RadioBox.h | 0 .../kernel/PX_Object_RingProcessbar.c | 0 .../kernel/PX_Object_RingProcessbar.h | 0 .../kernel/PX_Object_ScaleBox.c | 0 .../kernel/PX_Object_ScaleBox.h | 0 .../kernel/PX_Object_ScrollArea.c | 0 .../kernel/PX_Object_ScrollArea.h | 0 .../kernel/PX_Object_Selectbar.c | 0 .../kernel/PX_Object_Selectbar.h | 0 .../kernel/PX_Object_Sliderbar.c | 0 .../kernel/PX_Object_Sliderbar.h | 0 .../kernel/PX_Object_TransformAdapter.c | 0 .../kernel/PX_Object_TransformAdapter.h | 0 .../kernel/PX_Object_VarBox.c | 0 .../kernel/PX_Object_VarBox.h | 0 .../kernel/PX_Object_Various.c | 0 .../kernel/PX_Object_Various.h | 0 .../kernel/PX_Object_VirtualKeyboard.c | 0 .../kernel/PX_Object_VirtualKeyboard.h | 0 .../kernel/PX_Object_Widget.c | 0 .../kernel/PX_Object_Widget.h | 0 UI/{PainterEngine => }/kernel/PX_Partical.c | 0 UI/{PainterEngine => }/kernel/PX_Partical.h | 0 UI/{PainterEngine => }/kernel/PX_Resource.c | 0 UI/{PainterEngine => }/kernel/PX_Resource.h | 0 UI/{PainterEngine => }/kernel/PX_ScriptCore.h | 0 .../kernel/PX_Script_ASMCompiler.c | 0 .../kernel/PX_Script_ASMCompiler.h | 0 .../kernel/PX_Script_Interpreter.c | 0 .../kernel/PX_Script_Interpreter.h | 0 UI/{PainterEngine => }/kernel/PX_Script_VM.c | 0 UI/{PainterEngine => }/kernel/PX_Script_VM.h | 0 UI/{PainterEngine => }/kernel/PX_Sync.c | 0 UI/{PainterEngine => }/kernel/PX_Sync.h | 0 UI/{PainterEngine => }/kernel/PX_UI.c | 0 UI/{PainterEngine => }/kernel/PX_UI.h | 0 UI/{PainterEngine => }/kernel/PX_World.c | 0 UI/{PainterEngine => }/kernel/PX_World.h | 0 .../platform/windows/makefile | 2 +- .../platform/windows/mingw_build.bat | 0 .../platform/windows/px_audio.cpp | 0 .../platform/windows/px_display.cpp | 0 .../platform/windows/px_display.h | 0 .../platform/windows/px_file.c | 0 .../platform/windows/px_main.c | 0 .../platform/windows/px_serialport.c | 0 .../platform/windows/px_tcp.c | 0 .../platform/windows/px_thread.c | 0 .../platform/windows/px_time.c | 0 .../platform/windows/px_udp.c | 0 .../project/PainterEngine_Application.c | 158 ++++---- .../project/PainterEngine_Application.h | 0 .../project/PainterEngine_Startup.c | 0 .../project/PainterEngine_Startup.h | 0 .../elsecode/src => project}/app.c | 0 .../project/firstprize.traw | Bin .../project/flagpicture.traw | Bin .../elsecode/src => project}/map.c | 0 .../project/minepicture.traw | Bin .../elsecode/src => project}/opt.c | 2 +- .../project/potatoboom.traw | Bin .../project/ranktitlepicture.traw | Bin .../project/secondprize.traw | Bin UI/{PainterEngine => }/project/testimage.traw | Bin .../project/thirdprize.traw | Bin .../project/titlepicture.traw | Bin .../project/titlepicture2.traw | Bin .../documents/PainterEngine API Manual.docx | Bin .../supports/logo/PainterEngineLogo.png | Bin .../supports/logo/logo_web.png | Bin .../supports/old/Platform_Windows_D2D.cbak | 0 .../supports/old/Platform_Windows_D2D.hcbak | 0 .../supports/old/Platform_Windows_D3D.cpp | 0 .../supports/old/Platform_Windows_D3D.h | 0 .../supports/old/Platform_Windows_WaveOut.c | 0 274 files changed, 86 insertions(+), 4932 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 UI/PainterEngine/elsecode/include/map.h delete mode 100644 UI/PainterEngine/elsecode/include/mine_map.h delete mode 100644 UI/PainterEngine/elsecode/include/opt.h delete mode 100644 UI/PainterEngine/platform/android/AndroidManifest.xml delete mode 100644 UI/PainterEngine/platform/android/CMakeLists.txt delete mode 100644 UI/PainterEngine/platform/android/px_audio.c delete mode 100644 UI/PainterEngine/platform/android/px_display.c delete mode 100644 UI/PainterEngine/platform/android/px_display.h delete mode 100644 UI/PainterEngine/platform/android/px_file.c delete mode 100644 UI/PainterEngine/platform/android/px_main.c delete mode 100644 UI/PainterEngine/platform/android/px_serialport.c delete mode 100644 UI/PainterEngine/platform/android/px_tcp.c delete mode 100644 UI/PainterEngine/platform/android/px_thread.c delete mode 100644 UI/PainterEngine/platform/android/px_time.c delete mode 100644 UI/PainterEngine/platform/android/px_udp.c delete mode 100644 UI/PainterEngine/platform/linux/makefile delete mode 100644 UI/PainterEngine/platform/linux/px_display.c delete mode 100644 UI/PainterEngine/platform/linux/px_display.h delete mode 100644 UI/PainterEngine/platform/linux/px_file.c delete mode 100644 UI/PainterEngine/platform/linux/px_main.c delete mode 100644 UI/PainterEngine/platform/linux/px_serialport.c delete mode 100644 UI/PainterEngine/platform/linux/px_tcp.c delete mode 100644 UI/PainterEngine/platform/linux/px_thread.c delete mode 100644 UI/PainterEngine/platform/linux/px_time.c delete mode 100644 UI/PainterEngine/platform/linux/px_udp.c delete mode 100644 UI/PainterEngine/platform/macos/px_display.c delete mode 100644 UI/PainterEngine/platform/macos/px_display.h delete mode 100644 UI/PainterEngine/platform/macos/px_file.c delete mode 100644 UI/PainterEngine/platform/macos/px_main.c delete mode 100644 UI/PainterEngine/platform/macos/xmake.lua delete mode 100644 UI/PainterEngine/platform/modules/px_audio.h delete mode 100644 UI/PainterEngine/platform/modules/px_file.h delete mode 100644 UI/PainterEngine/platform/modules/px_serialport.h delete mode 100644 UI/PainterEngine/platform/modules/px_tcp.h delete mode 100644 UI/PainterEngine/platform/modules/px_thread.h delete mode 100644 UI/PainterEngine/platform/modules/px_time.h delete mode 100644 UI/PainterEngine/platform/modules/px_udp.h delete mode 100644 UI/PainterEngine/platform/webassembly/assets/readme.txt delete mode 100644 UI/PainterEngine/platform/webassembly/index.html delete mode 100644 UI/PainterEngine/platform/webassembly/main.c delete mode 100644 UI/PainterEngine/platform/webassembly/makefile delete mode 100644 UI/PainterEngine/platform/webassembly/px_audio.c delete mode 100644 UI/PainterEngine/platform/webassembly/px_file.c delete mode 100644 UI/PainterEngine/platform/webassembly/px_tcp.c delete mode 100644 UI/PainterEngine/platform/webassembly/px_thread.c delete mode 100644 UI/PainterEngine/platform/webassembly/px_time.c delete mode 100644 UI/PainterEngine/platform/webassembly/px_udp.c delete mode 100644 UI/PainterEngine/platform/windows gdi/px_display.c delete mode 100644 UI/PainterEngine/platform/windows gdi/px_display.h rename UI/{PainterEngine => }/architecture/PainterEngine_Console.c (100%) rename UI/{PainterEngine => }/architecture/PainterEngine_Console.h (100%) rename UI/{PainterEngine => }/architecture/PainterEngine_Designer.c (100%) rename UI/{PainterEngine => }/architecture/PainterEngine_Designer.h (100%) rename UI/{PainterEngine => }/architecture/PainterEngine_Executer.c (100%) rename UI/{PainterEngine => }/architecture/PainterEngine_Executer.h (100%) rename UI/{PainterEngine => }/architecture/PainterEngine_FoxLogo.h (100%) rename UI/{PainterEngine => }/architecture/PainterEngine_Runtime.c (100%) rename UI/{PainterEngine => }/architecture/PainterEngine_Runtime.h (100%) rename UI/{PainterEngine => }/core/PX_3D.c (100%) rename UI/{PainterEngine => }/core/PX_3D.h (100%) rename UI/{PainterEngine => }/core/PX_AES.c (100%) rename UI/{PainterEngine => }/core/PX_AES.h (100%) rename UI/{PainterEngine => }/core/PX_ANN.c (100%) rename UI/{PainterEngine => }/core/PX_ANN.h (100%) rename UI/{PainterEngine => }/core/PX_Arle.c (100%) rename UI/{PainterEngine => }/core/PX_Arle.h (100%) rename UI/{PainterEngine => }/core/PX_Base64.c (100%) rename UI/{PainterEngine => }/core/PX_Base64.h (100%) rename UI/{PainterEngine => }/core/PX_BaseGeo.c (100%) rename UI/{PainterEngine => }/core/PX_BaseGeo.h (100%) rename UI/{PainterEngine => }/core/PX_Bitmap.c (100%) rename UI/{PainterEngine => }/core/PX_Bitmap.h (100%) rename UI/{PainterEngine => }/core/PX_Core.h (100%) rename UI/{PainterEngine => }/core/PX_Delaunay.c (100%) rename UI/{PainterEngine => }/core/PX_Delaunay.h (100%) rename UI/{PainterEngine => }/core/PX_Effect.c (100%) rename UI/{PainterEngine => }/core/PX_Effect.h (100%) rename UI/{PainterEngine => }/core/PX_Font.c (100%) rename UI/{PainterEngine => }/core/PX_Font.h (100%) rename UI/{PainterEngine => }/core/PX_Hashmap.c (100%) rename UI/{PainterEngine => }/core/PX_Hashmap.h (100%) rename UI/{PainterEngine => }/core/PX_Huffman.c (100%) rename UI/{PainterEngine => }/core/PX_Huffman.h (100%) rename UI/{PainterEngine => }/core/PX_ImageFilter.c (100%) rename UI/{PainterEngine => }/core/PX_ImageFilter.h (100%) rename UI/{PainterEngine => }/core/PX_KalmanFilter.c (100%) rename UI/{PainterEngine => }/core/PX_KalmanFilter.h (100%) rename UI/{PainterEngine => }/core/PX_Linker.c (100%) rename UI/{PainterEngine => }/core/PX_Linker.h (100%) rename UI/{PainterEngine => }/core/PX_List.c (100%) rename UI/{PainterEngine => }/core/PX_List.h (100%) rename UI/{PainterEngine => }/core/PX_Log.c (100%) rename UI/{PainterEngine => }/core/PX_Log.h (100%) rename UI/{PainterEngine => }/core/PX_MFCC.c (100%) rename UI/{PainterEngine => }/core/PX_MFCC.h (100%) rename UI/{PainterEngine => }/core/PX_MathTable.h (100%) rename UI/{PainterEngine => }/core/PX_Memory.c (100%) rename UI/{PainterEngine => }/core/PX_Memory.h (100%) rename UI/{PainterEngine => }/core/PX_MemoryPool.c (100%) rename UI/{PainterEngine => }/core/PX_MemoryPool.h (100%) rename UI/{PainterEngine => }/core/PX_Packet.c (100%) rename UI/{PainterEngine => }/core/PX_Packet.h (100%) rename UI/{PainterEngine => }/core/PX_PointsMesh.c (100%) rename UI/{PainterEngine => }/core/PX_PointsMesh.h (100%) rename UI/{PainterEngine => }/core/PX_Quadtree.c (100%) rename UI/{PainterEngine => }/core/PX_Quadtree.h (100%) rename UI/{PainterEngine => }/core/PX_Quicksort.c (100%) rename UI/{PainterEngine => }/core/PX_Quicksort.h (100%) rename UI/{PainterEngine => }/core/PX_Sha256.c (100%) rename UI/{PainterEngine => }/core/PX_Sha256.h (100%) rename UI/{PainterEngine => }/core/PX_Sound.c (100%) rename UI/{PainterEngine => }/core/PX_Sound.h (100%) rename UI/{PainterEngine => }/core/PX_SoundModule.c (100%) rename UI/{PainterEngine => }/core/PX_SoundModule.h (100%) rename UI/{PainterEngine => }/core/PX_String.c (100%) rename UI/{PainterEngine => }/core/PX_String.h (100%) rename UI/{PainterEngine => }/core/PX_Surface.c (100%) rename UI/{PainterEngine => }/core/PX_Surface.h (100%) rename UI/{PainterEngine => }/core/PX_TRaw.c (100%) rename UI/{PainterEngine => }/core/PX_TRaw.h (100%) rename UI/{PainterEngine => }/core/PX_Texture.c (100%) rename UI/{PainterEngine => }/core/PX_Texture.h (100%) rename UI/{PainterEngine => }/core/PX_TriangleCross.c (100%) rename UI/{PainterEngine => }/core/PX_Tuning.c (100%) rename UI/{PainterEngine => }/core/PX_Tuning.h (100%) rename UI/{PainterEngine => }/core/PX_Typedef.c (100%) rename UI/{PainterEngine => }/core/PX_Typedef.h (100%) rename UI/{PainterEngine => }/core/PX_Vector.c (100%) rename UI/{PainterEngine => }/core/PX_Vector.h (100%) rename UI/{PainterEngine => }/core/PX_Wave.c (100%) rename UI/{PainterEngine => }/core/PX_Wave.h (100%) rename UI/{PainterEngine => }/core/PX_curve25519.c (100%) rename UI/{PainterEngine => }/core/PX_curve25519.h (100%) rename UI/{PainterEngine => }/core/PX_rbtree.c (100%) rename UI/{PainterEngine => }/core/PX_rbtree.h (100%) rename UI/{PainterEngine => }/kernel/PX_2dxCommon.h (100%) rename UI/{PainterEngine => }/kernel/PX_3D_ObjData.c (100%) rename UI/{PainterEngine => }/kernel/PX_3D_ObjData.h (100%) rename UI/{PainterEngine => }/kernel/PX_Animation.c (100%) rename UI/{PainterEngine => }/kernel/PX_Animation.h (100%) rename UI/{PainterEngine => }/kernel/PX_Compiler.c (100%) rename UI/{PainterEngine => }/kernel/PX_Compiler.h (100%) rename UI/{PainterEngine => }/kernel/PX_Json.c (100%) rename UI/{PainterEngine => }/kernel/PX_Json.h (100%) rename UI/{PainterEngine => }/kernel/PX_Kernel.h (100%) rename UI/{PainterEngine => }/kernel/PX_Lexer.c (100%) rename UI/{PainterEngine => }/kernel/PX_Lexer.h (100%) rename UI/{PainterEngine => }/kernel/PX_LiveFramework.c (100%) rename UI/{PainterEngine => }/kernel/PX_LiveFramework.h (100%) rename UI/{PainterEngine => }/kernel/PX_MODBUS.c (100%) rename UI/{PainterEngine => }/kernel/PX_MODBUS.h (100%) rename UI/{PainterEngine => }/kernel/PX_MQTT.c (100%) rename UI/{PainterEngine => }/kernel/PX_MQTT.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Animation.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Animation.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_AutoText.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_AutoText.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_COMBox.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_COMBox.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_CheckBox.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_CheckBox.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Coordinate.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Coordinate.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_CursorButton.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_CursorButton.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_DesignerBox.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_DesignerBox.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Edit.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Edit.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Explorer.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Explorer.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_IPBox.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_IPBox.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Image.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Image.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Joystick.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Joystick.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Label.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Label.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_List.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_List.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_MemoryView.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_MemoryView.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Menu.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Menu.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_MessageBox.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_MessageBox.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Panc.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Panc.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Processbar.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Processbar.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Protractor.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Protractor.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_PushButton.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_PushButton.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_RadioBox.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_RadioBox.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_RingProcessbar.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_RingProcessbar.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_ScaleBox.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_ScaleBox.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_ScrollArea.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_ScrollArea.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Selectbar.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Selectbar.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Sliderbar.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Sliderbar.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_TransformAdapter.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_TransformAdapter.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_VarBox.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_VarBox.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Various.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Various.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_VirtualKeyboard.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_VirtualKeyboard.h (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Widget.c (100%) rename UI/{PainterEngine => }/kernel/PX_Object_Widget.h (100%) rename UI/{PainterEngine => }/kernel/PX_Partical.c (100%) rename UI/{PainterEngine => }/kernel/PX_Partical.h (100%) rename UI/{PainterEngine => }/kernel/PX_Resource.c (100%) rename UI/{PainterEngine => }/kernel/PX_Resource.h (100%) rename UI/{PainterEngine => }/kernel/PX_ScriptCore.h (100%) rename UI/{PainterEngine => }/kernel/PX_Script_ASMCompiler.c (100%) rename UI/{PainterEngine => }/kernel/PX_Script_ASMCompiler.h (100%) rename UI/{PainterEngine => }/kernel/PX_Script_Interpreter.c (100%) rename UI/{PainterEngine => }/kernel/PX_Script_Interpreter.h (100%) rename UI/{PainterEngine => }/kernel/PX_Script_VM.c (100%) rename UI/{PainterEngine => }/kernel/PX_Script_VM.h (100%) rename UI/{PainterEngine => }/kernel/PX_Sync.c (100%) rename UI/{PainterEngine => }/kernel/PX_Sync.h (100%) rename UI/{PainterEngine => }/kernel/PX_UI.c (100%) rename UI/{PainterEngine => }/kernel/PX_UI.h (100%) rename UI/{PainterEngine => }/kernel/PX_World.c (100%) rename UI/{PainterEngine => }/kernel/PX_World.h (100%) rename UI/{PainterEngine => }/platform/windows/makefile (98%) rename UI/{PainterEngine => }/platform/windows/mingw_build.bat (100%) rename UI/{PainterEngine => }/platform/windows/px_audio.cpp (100%) rename UI/{PainterEngine => }/platform/windows/px_display.cpp (100%) rename UI/{PainterEngine => }/platform/windows/px_display.h (100%) rename UI/{PainterEngine => }/platform/windows/px_file.c (100%) rename UI/{PainterEngine => }/platform/windows/px_main.c (100%) rename UI/{PainterEngine => }/platform/windows/px_serialport.c (100%) rename UI/{PainterEngine => }/platform/windows/px_tcp.c (100%) rename UI/{PainterEngine => }/platform/windows/px_thread.c (100%) rename UI/{PainterEngine => }/platform/windows/px_time.c (100%) rename UI/{PainterEngine => }/platform/windows/px_udp.c (100%) rename UI/{PainterEngine => }/project/PainterEngine_Application.c (72%) rename UI/{PainterEngine => }/project/PainterEngine_Application.h (100%) rename UI/{PainterEngine => }/project/PainterEngine_Startup.c (100%) rename UI/{PainterEngine => }/project/PainterEngine_Startup.h (100%) rename UI/{PainterEngine/elsecode/src => project}/app.c (100%) rename UI/{PainterEngine => }/project/firstprize.traw (100%) rename UI/{PainterEngine => }/project/flagpicture.traw (100%) rename UI/{PainterEngine/elsecode/src => project}/map.c (100%) rename UI/{PainterEngine => }/project/minepicture.traw (100%) rename UI/{PainterEngine/elsecode/src => project}/opt.c (99%) rename UI/{PainterEngine => }/project/potatoboom.traw (100%) rename UI/{PainterEngine => }/project/ranktitlepicture.traw (100%) rename UI/{PainterEngine => }/project/secondprize.traw (100%) rename UI/{PainterEngine => }/project/testimage.traw (100%) rename UI/{PainterEngine => }/project/thirdprize.traw (100%) rename UI/{PainterEngine => }/project/titlepicture.traw (100%) rename UI/{PainterEngine => }/project/titlepicture2.traw (100%) rename UI/{PainterEngine => }/supports/documents/PainterEngine API Manual.docx (100%) rename UI/{PainterEngine => }/supports/logo/PainterEngineLogo.png (100%) rename UI/{PainterEngine => }/supports/logo/logo_web.png (100%) rename UI/{PainterEngine => }/supports/old/Platform_Windows_D2D.cbak (100%) rename UI/{PainterEngine => }/supports/old/Platform_Windows_D2D.hcbak (100%) rename UI/{PainterEngine => }/supports/old/Platform_Windows_D3D.cpp (100%) rename UI/{PainterEngine => }/supports/old/Platform_Windows_D3D.h (100%) rename UI/{PainterEngine => }/supports/old/Platform_Windows_WaveOut.c (100%) diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..5e33924 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "opt.h": "c" + } +} \ No newline at end of file diff --git a/UI/PainterEngine/elsecode/include/map.h b/UI/PainterEngine/elsecode/include/map.h deleted file mode 100644 index 8f0815d..0000000 --- a/UI/PainterEngine/elsecode/include/map.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "mine_map.h" - -/** - * @brief 设置一个的雷 - * - * @param mode 难易度 - * @return map* 生成的地图的指针 - */ -map* Setmine(int mode); diff --git a/UI/PainterEngine/elsecode/include/mine_map.h b/UI/PainterEngine/elsecode/include/mine_map.h deleted file mode 100644 index 566d14f..0000000 --- a/UI/PainterEngine/elsecode/include/mine_map.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#define UNCOVERED 0 -#define COVERED 1 -#define FLAGED 2 -#define MARKED 3 - -/** - * @brief 扫雷地图 - * mx,my地图长宽 - * mineMap[i][j]=1 表示第i行第j列为雷 - * mode 表示困难度 - * stage[i][j] 表示地图显示状态 - * cnt 表示雷的总数 - * autobook 用于自动打开的数组 - */ -typedef struct map{ - int mineMap[105][105]; - int mx, my; - int mode; - int stage[105][105]; - int cnt; - int autobook[105][105]; -}map; - -#define ROW_1 10 -#define COL_1 10 -#define ROW_2 ROW_1 + 2 -#define COL_2 COL_1 + 2 -#define MINECOUNT 9 - -#define MODE_EASY 1 -#define MODE_MID 2 -#define MODE_HARD 3 - -#define MX_EASY 9 -#define MX_MID 16 -#define MX_HARD 16 - -#define MY_EASY 9 -#define MY_MID 16 -#define MY_HARD 30 - -#define NUM_EASY 10 -#define NUM_MID 40 -#define NUM_HARD 99 diff --git a/UI/PainterEngine/elsecode/include/opt.h b/UI/PainterEngine/elsecode/include/opt.h deleted file mode 100644 index 692a551..0000000 --- a/UI/PainterEngine/elsecode/include/opt.h +++ /dev/null @@ -1,124 +0,0 @@ -#pragma once -#include "mine_map.h" -#include - -/** - * @brief define status after click - * BOOM Indicates thunder - * UNALLOWED indicates that the behavior is not allowed - * ALLOWED indicates that the lattice was successfully opened - */ -#define BOOM 0 -#define UNALLOWED 1 -#define ALLOWED 2 - -/** - * @brief define Mouse Action - * - */ -#define OPT_LEFT_CLICK 1 -#define OPT_MID_CLICK 2 -#define OPT_RIGTH_CLICK 3 -#define OPT_TOTAL_CLICK 4 -/** - * @brief 用于数周围有多少个雷 - * - * @param map - * @param x - * @param y - * @return int 返回周围雷的数量 - */ - -/** - * @brief 单次操作数据 - * - */ -typedef struct -{ - int x,y; - int mode; -}opt_t; - -/** - * @brief 统计周围雷数量 - * - * @param map - * @param x - * @param y - * @return int - */ -int opt_count(map *map, int x, int y); -/** - * @brief 单次鼠标操作 - * - * @param m 地图 - * @param opt 操作数据,包含坐标,操作类型等信息 - * @return int 操作后状态 - */ -int opt(map* m, opt_t opt); - -/** - * @brief 鼠标左击 - * - * @param x - * @param y - * @param m 指向地图的一个指针 - * @return int 当次操作状态 - */ -int fnOptLeftClick(int x,int y,map *m); - -/** - * @brief 鼠标右击 - * - * @param x - * @param y - * @param m 指向地图的一个指针 - * @return int 当次操作状态 - */ -int fnOptRightClick(int x,int y,map *m ); - -/** - * @brief 鼠标中击 - * - * @param x - * @param y - * @param m 指向地图的一个指针 - * @return int 当次操作状态 - */ -int fnOptMidClick(int x,int y,map *m); - -/** - * @brief 用于自动展开地图 - * - * @param x - * @param y - * @param m 地图指针 - */ -void fnOptAuto(int x,int y, map *m); - -/** - * @brief 用于统计周围旗子数量 - * - * @param map - * @param x - * @param y - * @return int 旗子数量 - */ -int opt_flag_count(map* map, int x, int y); - -/** - * @brief 用于判断是否扫雷成功 - * - * @param m - * @return true - * @return false - */ -bool opt_is_scuess(map m); - -/** - * @brief 如果全部雷标记 打开剩余格子 - * - * @param m - * @return int - */ -int fnTotalFlag(map *m); diff --git a/UI/PainterEngine/platform/android/AndroidManifest.xml b/UI/PainterEngine/platform/android/AndroidManifest.xml deleted file mode 100644 index 8e608a2..0000000 --- a/UI/PainterEngine/platform/android/AndroidManifest.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/CMakeLists.txt b/UI/PainterEngine/platform/android/CMakeLists.txt deleted file mode 100644 index 57bb64f..0000000 --- a/UI/PainterEngine/platform/android/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -cmake_minimum_required(VERSION 3.6.0) - -################################################################# -#PainterEngine Directory -set(PAINTERENGINE_DIR D:/Git/PainterEngine) -#Project Directory -set(PAINTERENGINE_PROJECT_DIR D:/Git/project) -################################################################# -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c11 -O3 ") - -include_directories(${ANDROID_NDK}/sources/android/native_app_glue/) -include_directories(${PAINTERENGINE_DIR}) -include_directories(${PAINTERENGINE_DIR}/platform/android) -include_directories(${PAINTERENGINE_PROJECT_DIR}) - -find_library(log-lib log) - -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate") - -aux_source_directory(${PAINTERENGINE_PROJECT_DIR} PROJECT_DIR_SRC) -add_library(PainterEngineForAndroid SHARED ${PROJECT_DIR_SRC}) - -set(ANDROID_NATIVE_APP_GLUE ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c) -aux_source_directory(${PAINTERENGINE_DIR}/platform/android PAINTERENGINE_PLATFORM_ANDROID_SOURCES) -aux_source_directory(${PAINTERENGINE_DIR}/core PAINTERENGINE_CORE_SOURCES) -aux_source_directory(${PAINTERENGINE_DIR}/kernel PAINTERENGINE_KERNEL_SOURCES) -aux_source_directory(${PAINTERENGINE_DIR}/architecture PAINTERENGINE_ARCH_SOURCES) - -add_library(PAINTERENGINELIB - STATIC - ${ANDROID_NATIVE_APP_GLUE} - ${PAINTERENGINE_PLATFORM_ANDROID_SOURCES} - ${PAINTERENGINE_ARCH_SOURCES} - ${PAINTERENGINE_KERNEL_SOURCES} - ${PAINTERENGINE_CORE_SOURCES}) - -target_link_libraries(PainterEngineForAndroid - PAINTERENGINELIB - android - ${log-lib} - EGL - GLESv3 - OpenSLES - log) \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/px_audio.c b/UI/PainterEngine/platform/android/px_audio.c deleted file mode 100644 index d409563..0000000 --- a/UI/PainterEngine/platform/android/px_audio.c +++ /dev/null @@ -1,120 +0,0 @@ -#include "../modules/px_audio.h" - -#include "SLES/OpenSLES.h" -#include "SLES/OpenSLES_Android.h" - -//engine -SLObjectItf engineObject = PX_NULL; -SLEngineItf engineEngine = PX_NULL; - -//mixer -SLObjectItf outputMixObject = PX_NULL; -SLEnvironmentalReverbItf outputMixEnvironmentalReverb = PX_NULL; -SLEnvironmentalReverbSettings reverbSettings = SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR; - -//pcm -SLObjectItf pcmPlayerObject = PX_NULL; -SLPlayItf pcmPlayerPlay = PX_NULL; -SLVolumeItf pcmPlayerVolume = PX_NULL; - -SLAndroidSimpleBufferQueueItf pcmBufferQueue; -#define SL_PCM_BLOCK_SIZE 2048 -#define SL_PCM_BLOCK_COUNT 8 -static px_byte SL_PCMBuffer[SL_PCM_BLOCK_SIZE*SL_PCM_BLOCK_COUNT]; -static px_int SL_PCMrBlock=0; -static PX_SoundPlay *SL_soundPlay=PX_NULL; - - -void pcmBufferCallBack(SLAndroidSimpleBufferQueueItf bf, void * context) -{ - px_int SL_PCMwBlock; - - if(!SL_soundPlay) - { - PX_memset(SL_PCMBuffer,0,sizeof(SL_PCMBuffer)); - (*pcmBufferQueue)->Enqueue(pcmBufferQueue, SL_PCMBuffer, SL_PCM_BLOCK_SIZE); - return; - } - - - //write a block - (*pcmBufferQueue)->Enqueue(pcmBufferQueue, SL_PCMBuffer+SL_PCMrBlock*SL_PCM_BLOCK_SIZE, SL_PCM_BLOCK_SIZE); - - //read a block - SL_PCMwBlock=SL_PCMrBlock+SL_PCM_BLOCK_COUNT-1; - - if(SL_PCMwBlock>=SL_PCM_BLOCK_COUNT) - { - SL_PCMwBlock-=SL_PCM_BLOCK_COUNT; - } - PX_SoundPlayRead(SL_soundPlay,SL_PCMBuffer+SL_PCMwBlock*SL_PCM_BLOCK_SIZE,SL_PCM_BLOCK_SIZE); - - SL_PCMrBlock++; - if(SL_PCMrBlock>=SL_PCM_BLOCK_COUNT) - SL_PCMrBlock=0; -} - -px_bool PX_AudioInitialize(PX_SoundPlay *soundPlay) -{ - SLresult result; - SL_soundPlay=soundPlay; - //engine create - slCreateEngine(&engineObject, 0, 0, 0, 0, 0); - (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE); - (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine); - - const SLInterfaceID mids[1] = {SL_IID_ENVIRONMENTALREVERB}; - const SLboolean mreq[1] = {SL_BOOLEAN_FALSE}; - result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, mids, mreq); - if (SL_RESULT_SUCCESS != result) - return PX_FALSE; - result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE); - if (SL_RESULT_SUCCESS != result) - return PX_FALSE; - result = (*outputMixObject)->GetInterface(outputMixObject, SL_IID_ENVIRONMENTALREVERB, &outputMixEnvironmentalReverb); - if (SL_RESULT_SUCCESS == result) { - result = (*outputMixEnvironmentalReverb)->SetEnvironmentalReverbProperties( - outputMixEnvironmentalReverb, &reverbSettings); - } else - { - return PX_FALSE; - } - SLDataLocator_OutputMix outputMix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject}; - - - SLDataLocator_AndroidSimpleBufferQueue android_queue={SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE,2}; - SLDataFormat_PCM pcm={ - SL_DATAFORMAT_PCM, - 2, - SL_SAMPLINGRATE_44_1,//44100hz - SL_PCMSAMPLEFORMAT_FIXED_16,//16bits - SL_PCMSAMPLEFORMAT_FIXED_16,//16bits - SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT, - SL_BYTEORDER_LITTLEENDIAN - }; - - SLDataSource slDataSource = {&android_queue, &pcm}; - SLDataSink audioSnk = {&outputMix, NULL}; - const SLInterfaceID ids[3] = {SL_IID_BUFFERQUEUE, SL_IID_EFFECTSEND, SL_IID_VOLUME}; - const SLboolean req[3] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; - - result = (*engineEngine)->CreateAudioPlayer(engineEngine, &pcmPlayerObject, &slDataSource, &audioSnk, 3, ids, req); - (*pcmPlayerObject)->Realize(pcmPlayerObject, SL_BOOLEAN_FALSE); - (*pcmPlayerObject)->GetInterface(pcmPlayerObject, SL_IID_PLAY, &pcmPlayerPlay); - - - (*pcmPlayerObject)->GetInterface(pcmPlayerObject, SL_IID_BUFFERQUEUE, &pcmBufferQueue); - (*pcmBufferQueue)->RegisterCallback(pcmBufferQueue, pcmBufferCallBack, NULL); - (*pcmPlayerObject)->GetInterface(pcmPlayerObject, SL_IID_VOLUME, &pcmPlayerVolume); - - (*pcmPlayerPlay)->SetPlayState(pcmPlayerPlay, SL_PLAYSTATE_PLAYING); - - pcmBufferCallBack(pcmBufferQueue, NULL); - return PX_TRUE; -} - - -void PX_AudioSetVolume(unsigned int volume) -{ - (*pcmPlayerVolume)->SetVolumeLevel(pcmPlayerVolume, volume); -} diff --git a/UI/PainterEngine/platform/android/px_display.c b/UI/PainterEngine/platform/android/px_display.c deleted file mode 100644 index 04227d7..0000000 --- a/UI/PainterEngine/platform/android/px_display.c +++ /dev/null @@ -1,220 +0,0 @@ -#include "px_display.h" - -static const char PX_AndroidEngine_GL_VS[]="attribute vec4 vPosition;attribute vec4 vTex;varying vec2 textureCoordinate;void main(){gl_Position = vPosition;textureCoordinate = vTex.xy;}"; -static const char PX_AndroidEngine_GL_PS[]="precision mediump float;varying highp vec2 textureCoordinate;uniform sampler2D tex;void main(){gl_FragColor = texture2D(tex, textureCoordinate);}"; - -static const GLfloat PX_AndroidEngine_squareVertices[] = { - -1.0f, -1.0f, - 1.0f, -1.0f, - -1.0f, 1.0f, - 1.0f, 1.0f, -}; - -static const GLfloat PX_AndroidEngine_texturePosition[] = { - 0.0f, 1.0f, - 1.0f, 1.0f, - 0.0f, 0.0f, - 1.0f, 0.0f, -}; - - - - -static GLuint PX_AndroidEngine_LoadShader(GLenum type,const px_char *shaderSources) -{ - GLuint shader; - GLint compiled; - - shader=glCreateShader(type); - if(shader==0) return PX_FALSE; - - glShaderSource(shader,1,&shaderSources,PX_NULL); - glCompileShader(shader); - - glGetShaderiv(shader,GL_COMPILE_STATUS,&compiled); - - if(!compiled) - { - glDeleteShader(shader); - return PX_FALSE; - } - return shader; -} - -px_bool PX_AndroidEngine_InitializeDisplay(PX_AndroidEngine *engine) -{ - const int attrib_list[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; - const EGLint attribs[] = { - EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_BLUE_SIZE, 8, - EGL_GREEN_SIZE, 8, - EGL_RED_SIZE, 8, - EGL_NONE - }; - EGLint w, h, format; - EGLint numConfigs; - EGLConfig config; - EGLSurface surface; - EGLContext context; - EGLConfig ConfigsDesc[64]; - px_int i; - GLint linked; - EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); - - - - eglInitialize(display, 0, 0); - eglChooseConfig(display, attribs, PX_NULL,0, &numConfigs); - if(numConfigs>PX_COUNTOF(ConfigsDesc)) - { - numConfigs=PX_COUNTOF(ConfigsDesc); - } - eglChooseConfig(display, attribs,ConfigsDesc, numConfigs, &numConfigs); - - for (i=0; i < numConfigs; i++) - { - EGLint r, g, b, d, a; - if (eglGetConfigAttrib(display, ConfigsDesc[i], EGL_RED_SIZE, &r) && - eglGetConfigAttrib(display, ConfigsDesc[i], EGL_GREEN_SIZE, &g) && - eglGetConfigAttrib(display, ConfigsDesc[i], EGL_BLUE_SIZE, &b) && - eglGetConfigAttrib(display, ConfigsDesc[i], EGL_ALPHA_SIZE, &a)&& - eglGetConfigAttrib(display, ConfigsDesc[i], EGL_DEPTH_SIZE, &d) && - r == 8 && g == 8 && b == 8 &&a == 8&&d==0 ) - { - config = ConfigsDesc[i]; - break; - } - } - - if (i == numConfigs) { - config = ConfigsDesc[0]; - } - - /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is - * guaranteed to be accepted by ANativeWindow_setBuffersGeometry(). - * As soon as we picked a EGLConfig, we can safely reconfigure the - * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */ - eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format); - surface = eglCreateWindowSurface(display, config, engine->pAndroidApp->window, NULL); - context = eglCreateContext(display, config, EGL_NO_CONTEXT, attrib_list); - - if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) - { - return PX_FALSE; - } - - eglQuerySurface(display, surface, EGL_WIDTH, &w); - eglQuerySurface(display, surface, EGL_HEIGHT, &h); - - engine->display = display; - engine->context = context; - engine->surface = surface; - engine->width = w; - engine->height = h; - - // Initialize GL state. - glEnable(GL_CULL_FACE); - glEnable(GL_TEXTURE_2D); - glEnable(GL_TEXTURE0); - glEnable(GL_TEXTURE1); - glDisable(GL_DEPTH_TEST); - - //Initialize GL shader - engine->vertexShader=PX_AndroidEngine_LoadShader(GL_VERTEX_SHADER,PX_AndroidEngine_GL_VS); - if(engine->vertexShader==0) - return PX_FALSE; - engine->pixelsShader=PX_AndroidEngine_LoadShader(GL_FRAGMENT_SHADER,PX_AndroidEngine_GL_PS); - if(engine->pixelsShader==0) - return PX_FALSE; - - engine->programObject=glCreateProgram(); - if(engine->programObject==0) - return PX_FALSE; - - glAttachShader(engine->programObject,engine->vertexShader); - glAttachShader(engine->programObject,engine->pixelsShader); - - glLinkProgram(engine->programObject); - - glGetProgramiv(engine->programObject,GL_LINK_STATUS,&linked); - if(!linked) - { - glDeleteProgram(engine->programObject); - return PX_FALSE; - } - - glGenTextures(1,&engine->renderTexture); - - engine->vPosition=glGetAttribLocation(engine->programObject,"vPosition"); - engine->vTex=glGetAttribLocation(engine->programObject,"vTex"); - - glViewport(0,0,engine->width,engine->height); - - - return PX_TRUE; -} - -px_bool PX_AndroidEngine_FreeDisplay(PX_AndroidEngine *engine) -{ - if (engine->display != EGL_NO_DISPLAY) { - eglMakeCurrent(engine->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - if (engine->context != EGL_NO_CONTEXT) { - eglDestroyContext(engine->display, engine->context); - } - if (engine->surface != EGL_NO_SURFACE) { - eglDestroySurface(engine->display, engine->surface); - } - eglTerminate(engine->display); - } - - engine->display = EGL_NO_DISPLAY; - engine->context = EGL_NO_CONTEXT; - engine->surface = EGL_NO_SURFACE; - - glDetachShader(engine->programObject,engine->vertexShader); - glDetachShader(engine->programObject,engine->pixelsShader); - glDeleteShader(engine->pixelsShader); - glDeleteShader(engine->vertexShader); - glDeleteProgram(engine->programObject); - - return PX_TRUE; -} - -px_void PX_AndroidEngine_Render(PX_AndroidEngine* engine,px_int width,px_int height,px_byte *buffer) { - if (engine->display == NULL) - { - // No display. - return; - } - - //vertex data - glClearColor(0.0f,0.0f,0.0f,1.0f); - glClear (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); - - glUseProgram(engine->programObject); - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D,engine->renderTexture); - glTexImage2D(GL_TEXTURE_2D,\ - 0,\ - GL_RGBA,\ - width,\ - height,\ - 0,\ - GL_RGBA,\ - GL_UNSIGNED_BYTE,\ - buffer\ - ); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glUniform1i(glGetAttribLocation(engine->programObject,"tex"), 0); - - glVertexAttribPointer(engine->vPosition, 2, GL_FLOAT, GL_FALSE, 0,PX_AndroidEngine_squareVertices); - glEnableVertexAttribArray(engine->vPosition); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - glVertexAttribPointer(engine->vTex, 2, GL_FLOAT, 0, 0, PX_AndroidEngine_texturePosition); - glEnableVertexAttribArray(engine->vTex); - - eglSwapBuffers(engine->display, engine->surface); -} \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/px_display.h b/UI/PainterEngine/platform/android/px_display.h deleted file mode 100644 index bd95d91..0000000 --- a/UI/PainterEngine/platform/android/px_display.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef ANDROID_DISPLAY_H -#define ANDROID_DISPLAY_H -// -#include "jni.h" -#include "errno.h" -//opengl es -#include "EGL/egl.h" -#include "GLES3/gl3.h" - -//Android Native activity support -#include "android_native_app_glue.h" - -#include "../../kernel/PX_Object.h" - -typedef struct -{ - struct android_app *pAndroidApp; - EGLDisplay display; - EGLSurface surface; - EGLContext context; - - GLuint vertexShader; - GLuint pixelsShader; - GLuint programObject; - GLuint vPosition; - GLuint vTex; - GLuint renderTexture; - int32_t width; - int32_t height; - - px_bool PainterEngineReady; -}PX_AndroidEngine; - -px_bool PX_AndroidEngine_InitializeDisplay(PX_AndroidEngine *engine); -px_bool PX_AndroidEngine_FreeDisplay(PX_AndroidEngine *engine); -px_void PX_AndroidEngine_Render(PX_AndroidEngine* engine,px_int width,px_int height,px_byte *buffer); -#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/px_file.c b/UI/PainterEngine/platform/android/px_file.c deleted file mode 100644 index c42abe7..0000000 --- a/UI/PainterEngine/platform/android/px_file.c +++ /dev/null @@ -1,368 +0,0 @@ - -#include "../modules/px_file.h" -#include "stdio.h" -#include "stdlib.h" -#include "string.h" -#include -#include -#include "dirent.h" - -extern AAssetManager* PX_assetManager; - -int PX_SaveDataToFile(void *buffer,int size,const char path[]) -{ - FILE *pf=fopen(path,"wb"); - if (pf) - { - fwrite(buffer,1,size,pf); - fclose(pf); - return 1; - } - return 0; -} - -PX_IO_Data PX_LoadAssetsFileToIOData(const char path[]) -{ - int len; - PX_IO_Data io; - - AAsset* asset = AAssetManager_open(PX_assetManager, path, 0); - if(!asset) goto _ERROR; - - len=AAsset_getLength(asset); - - io.buffer=(unsigned char *)malloc(len+1); - io.size=len; - - AAsset_read(asset, io.buffer, io.size); - - AAsset_close(asset); - return io; - - _ERROR: - io.buffer=0; - io.size=0; - return io; -} - -PX_IO_Data PX_LoadFileToIOData(const char path[]) -{ - if (memcmp(path,"assets/",7)==0) - { - return PX_LoadAssetsFileToIOData(path+7); - } - else - { - PX_IO_Data io; - int fileoft=0; - FILE *pf=fopen(path,"rb"); - int filesize; - if (!pf) - { - goto _ERROR; - } - fseek(pf,0,SEEK_END); - filesize=ftell(pf); - fseek(pf,0,SEEK_SET); - - io.buffer=(unsigned char *)malloc(filesize+1); - if (!io.buffer) - { - goto _ERROR; - } - - while (!feof(pf)) - { - fileoft+=(int)fread(io.buffer+fileoft,1,1024,pf); - } - fclose(pf); - - io.buffer[filesize]='\0'; - io.size=filesize; - return io; -_ERROR: - io.buffer=0; - io.size=0; - return io; - } -} - -void PX_FreeIOData(PX_IO_Data *io) -{ - if (io->size&&io->buffer) - { - free(io->buffer); - io->size=0; - io->buffer=0; - } -} - -int PX_FileExist(const char path[]) -{ - FILE *pf= fopen(path,"rb"); - if (pf) - { - fclose(pf); - return 1; - } - return 0; -} - - - - -int PX_FileGetDirectoryFileCount(const char path[],PX_FILEENUM_TYPE type,const char *filter) -{ - struct dirent* ent = NULL; - int count=0; - DIR *pDir; - char oPath[260]={0}; - if(path[0]==0) - { - if(type==PX_FILEENUM_TYPE_FOLDER) - return 1; - return 0; - } - - - if( (pDir=opendir(path)) == NULL) - { - int err=errno; - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - switch (type) - { - case PX_FILEENUM_TYPE_ANY: - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - count++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - count++; - } - } - break; - case PX_FILEENUM_TYPE_FILE: - { - if (ent->d_type==DT_REG) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - count++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - case PX_FILEENUM_TYPE_FOLDER: - { - if (ent->d_type==DT_DIR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - count++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - case PX_FILEENUM_TYPE_DEVICE: - { - if (ent->d_type==DT_CHR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - count++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - default: - break; - } - } - closedir(pDir); - return count; -} - -int PX_FileGetDirectoryFileName(const char path[],int count,char FileName[][260],PX_FILEENUM_TYPE type,const char *filter) -{ - struct dirent* ent = NULL; - int index=0; - DIR *pDir; - - if(path[0]==0) - { - if(type==PX_FILEENUM_TYPE_FOLDER) - { - strcpy(FileName[0],"/sdcard"); - return 1; - } - return 0; - //strcat(oPath,"/sdcard"); - } - if( (pDir=opendir(path)) == NULL) - { - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - if (index>=count) - { - return index; - } - - switch (type) - { - case PX_FILEENUM_TYPE_ANY: - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - strcpy(FileName[index],ent->d_name); - index++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index],ent->d_name); - index++; - } - } - break; - case PX_FILEENUM_TYPE_FILE: - { - if (ent->d_type==DT_REG) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - strcpy(FileName[index],ent->d_name); - index++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index],ent->d_name); - index++; - } - } - } - break; - case PX_FILEENUM_TYPE_FOLDER: - { - if (ent->d_type==DT_DIR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - strcpy(FileName[index],ent->d_name); - index++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index],ent->d_name); - index++; - } - } - } - break; - case PX_FILEENUM_TYPE_DEVICE: - { - if (ent->d_type==DT_CHR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - strcpy(FileName[index],ent->d_name); - index++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index],ent->d_name); - index++; - } - } - } - break; - default: - break; - } - } - closedir(pDir); - return index; -} diff --git a/UI/PainterEngine/platform/android/px_main.c b/UI/PainterEngine/platform/android/px_main.c deleted file mode 100644 index 1dfc874..0000000 --- a/UI/PainterEngine/platform/android/px_main.c +++ /dev/null @@ -1,163 +0,0 @@ -//PainterEngine framework -#include "PainterEngine_Application.h" - - -// -#include "jni.h" -#include "errno.h" - -//Android Native activity support -#include "android_native_app_glue.h" - -#include "platform/modules/px_time.h" -#include "px_display.h" -#include "kernel/PX_Object.h" - -static PX_AndroidEngine engine; -volatile px_bool main_exit=0; -static px_int PX_AndroidEngine_Input(struct android_app* app, AInputEvent* event) { - PX_AndroidEngine* engine = (PX_AndroidEngine*)app->userData; - px_int32 EventType=AInputEvent_getType(event); - px_int32 EventCount=AMotionEvent_getPointerCount(event); - px_int32 action=AMotionEvent_getAction(event); - px_float cursorx_scale,cursory_scale; - px_int i; - px_float x,y; - PX_Object_Event e; - if(!engine->PainterEngineReady) return 0; - cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; - cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; - switch (action&AMOTION_EVENT_ACTION_MASK) - { - case AMOTION_EVENT_ACTION_MOVE: - { - for (i = 0; i < EventCount; ++i) - { - x=AMotionEvent_getX(event, i); - y=AMotionEvent_getY(event, i); - e.Event=PX_OBJECT_EVENT_CURSORDRAG; - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursory_scale); - PX_Object_Event_SetCursorIndex(&e,(action&AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)>>8); - PX_ApplicationPostEvent(&App,e); - } - } - break; - case AMOTION_EVENT_ACTION_POINTER_DOWN: - case AMOTION_EVENT_ACTION_DOWN: - { - for (i = 0; i < EventCount; ++i) - { - x=AMotionEvent_getX(event, i); - y=AMotionEvent_getY(event, i); - e.Event=PX_OBJECT_EVENT_CURSORDOWN; - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursory_scale); - PX_Object_Event_SetCursorIndex(&e,(action&AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)>>8); - PX_ApplicationPostEvent(&App,e); - } - } - break; - case AMOTION_EVENT_ACTION_POINTER_UP: - case AMOTION_EVENT_ACTION_UP: - { - for (i = 0; i < EventCount; ++i) - { - x=AMotionEvent_getX(event, i); - y=AMotionEvent_getY(event, i); - e.Event=PX_OBJECT_EVENT_CURSORUP; - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursory_scale); - PX_Object_Event_SetCursorIndex(&e,(action&AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)>>8); - PX_ApplicationPostEvent(&App,e); - } - } - break; - } - - return 0; -} - -void PX_AndroidEngine_CMD(struct android_app* app, int32_t cmd) -{ - PX_AndroidEngine* engine = (PX_AndroidEngine*)app->userData; - switch (cmd) - { - case APP_CMD_SAVE_STATE: - break; - case APP_CMD_INIT_WINDOW: - if (engine->pAndroidApp->window != NULL) - { - //PainterEngine Initialize - PX_AndroidEngine_InitializeDisplay(engine); - if(!engine->PainterEngineReady) - { - if(!PX_ApplicationInitialize(&App,engine->width,engine->height)) return ; - App.runtime.window_width=engine->width; - App.runtime.window_height=engine->height; - } - else - { - PX_Object_Event e; - e.Event=PX_OBJECT_EVENT_WINDOWRESIZE; - PX_Object_Event_SetWidth(&e,engine->width); - PX_Object_Event_SetHeight(&e,engine->height); - PX_ApplicationPostEvent(&App,e); - } - engine->PainterEngineReady=PX_TRUE; - } - - break; - case APP_CMD_TERM_WINDOW: - PX_AndroidEngine_FreeDisplay(engine); - break; - case APP_CMD_GAINED_FOCUS: - break; - case APP_CMD_LOST_FOCUS: - break; - } -} - - -ANativeActivity* PX_nativeActivity=PX_NULL; -AAssetManager* PX_assetManager=PX_NULL; - -void android_main(struct android_app *pApp) -{ - - px_dword lastUpdateTime,elpased; - int events; - struct android_poll_source *pSource; - pApp->userData=&engine; - pApp->onAppCmd = PX_AndroidEngine_CMD; - pApp->onInputEvent = PX_AndroidEngine_Input; - engine.pAndroidApp=pApp; - PX_nativeActivity = pApp->activity; - PX_assetManager = PX_nativeActivity->assetManager; - - - lastUpdateTime=PX_TimeGetTime(); - do - { - while (ALooper_pollAll(0, PX_NULL, &events, (void **) &pSource) >= 0) - { - if (pSource) - { - pSource->process(pApp, pSource); - if (pApp->destroyRequested != 0) { - PX_AndroidEngine_FreeDisplay(&engine); - return; - } - } - } - if(engine.PainterEngineReady) - { - elpased=PX_TimeGetTime()-lastUpdateTime; - lastUpdateTime=PX_TimeGetTime(); - PX_ApplicationUpdate(&App,elpased); - PX_ApplicationRender(&App,elpased); - } - - PX_AndroidEngine_Render(&engine,App.runtime.surface_width,App.runtime.surface_height,(px_byte *)App.runtime.RenderSurface.surfaceBuffer); - } while (!pApp->destroyRequested&&!main_exit); -} diff --git a/UI/PainterEngine/platform/android/px_serialport.c b/UI/PainterEngine/platform/android/px_serialport.c deleted file mode 100644 index 470d337..0000000 --- a/UI/PainterEngine/platform/android/px_serialport.c +++ /dev/null @@ -1,167 +0,0 @@ -#include "../modules/px_serialport.h" -#include "stdio.h" -#include "stdlib.h" -#include "string.h" -#include -#include -#include -#include -#include "dirent.h" - -const char* PX_SerialPortEnumComName(int index) -{ - struct dirent* ent = 0; - int count=0; - DIR *pDir; - static char COMName[260]; - - if( (pDir=opendir("/dev")) == NULL) - { - int err=errno; - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - if (count==index) - { - closedir(pDir); - COMName[0]=0; - strcpy(COMName, "/dev/"); - strcpy(COMName, ent->d_name); - return COMName; - } - } - closedir(pDir); - return 0; -} -const int PX_SerialPortReset(PX_SerialPort *com,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) -{ - struct termios newtio; - memset( &newtio, 0,sizeof( newtio ) ); - newtio.c_cflag |= CLOCAL | CREAD; - newtio.c_cflag &= ~CSIZE; - - switch( DataBits ) - { - case 5: - newtio.c_cflag |= CS5; - break; - case 6: - newtio.c_cflag |= CS6; - break; - case 7: - newtio.c_cflag |= CS7; - break; - case 8: - newtio.c_cflag |= CS8; - break; - default: - break; - } - - switch( ParityType ) - { - case 'O': - newtio.c_cflag |= PARENB; - newtio.c_cflag |= PARODD; - newtio.c_iflag |= (INPCK | ISTRIP); - break; - case 'E': - newtio.c_iflag |= (INPCK | ISTRIP); - newtio.c_cflag |= PARENB; - newtio.c_cflag &= ~PARODD; - break; - case 'N': - newtio.c_cflag &= ~PARENB; - break; - } - - switch( baudRate ) - { - case 2400: - cfsetispeed(&newtio, B2400); - cfsetospeed(&newtio, B2400); - break; - case 4800: - cfsetispeed(&newtio, B4800); - cfsetospeed(&newtio, B4800); - break; - case 9600: - cfsetispeed(&newtio, B9600); - cfsetospeed(&newtio, B9600); - break; - case 115200: - cfsetispeed(&newtio, B115200); - cfsetospeed(&newtio, B115200); - break; - case 460800: - cfsetispeed(&newtio, B460800); - cfsetospeed(&newtio, B460800); - break; - default: - cfsetispeed(&newtio, B9600); - cfsetospeed(&newtio, B9600); - break; - } - - if( stopBit == 1 ) - newtio.c_cflag &= ~CSTOPB; - else if ( stopBit == 2 ) - newtio.c_cflag |= CSTOPB; - - newtio.c_cc[VTIME] = 0; - newtio.c_cc[VMIN] = 0; - tcflush(com->Handle,TCIFLUSH); - if((tcsetattr(com->Handle,TCSANOW,&newtio))!=0) - { - return 0; - } - return 1; -} -const int PX_SerialPortInitialize(PX_SerialPort *com,const char *name,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) -{ - - com->BaudRate=baudRate; - com->DataBits=DataBits; - com->ParityType=ParityType; - com->StopBit=stopBit; - - com->Handle = open(name, O_RDWR | O_NOCTTY); - if(com->Handle < 0) - { - return 0; - } - - if(!PX_SerialPortReset(com,baudRate,DataBits,ParityType,stopBit)) - { - close(com->Handle); - return 0; - } - return 1; - -} - -const int PX_SerialPortWrite(PX_SerialPort *com,void *data,int size) -{ - if (com->Handle!=0) - { - return write(com->Handle,data,size); - } - return 0; -} -const int PX_SerialPortRead(PX_SerialPort *com,void *data,int size) -{ - if (com->Handle!=0) - { - return read(com->Handle,data,size); - } - return 0; -} -void PX_SerialPortClose(PX_SerialPort *com) -{ - if (com->Handle!=0) - { - close(com->Handle); - } -} \ No newline at end of file diff --git a/UI/PainterEngine/platform/android/px_tcp.c b/UI/PainterEngine/platform/android/px_tcp.c deleted file mode 100644 index a958df2..0000000 --- a/UI/PainterEngine/platform/android/px_tcp.c +++ /dev/null @@ -1,150 +0,0 @@ - -#include "../modules/px_tcp.h" -//GNU C -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type) -{ - int err; - int nZero=0; - int nRecvBuf=1024*1024*2; - int nSendBuf=1024*1024*2; - int optval=1; - int imode=1,rev; - tcp->type=type; - - if ((tcp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_TCP))==-1) - { - err = errno; - return 0; - } - - rev=ioctl(tcp->socket,FIONBIO,(u_long *)&imode); - setsockopt(tcp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); - setsockopt(tcp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); - - if(rev == -1) - { - close(tcp->socket); - return 0; - } - - return 1; -} - -int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr) -{ - struct sockaddr_in to; - int ret; - to.sin_family=AF_INET; - to.sin_addr.s_addr=addr.ipv4; - to.sin_port=(addr.port); - - ret=connect(tcp->socket,(const struct sockaddr *)&to,sizeof(to)); - if (ret==0) - { - tcp->connectAddr=addr; - } - return ret; -} - -int PX_TCPSend(PX_TCP *tcp,void *buffer,int size) -{ - int length; - switch(tcp->type) - { - case PX_TCP_IP_TYPE_IPV4: - { - while(size>0) - { - if ((length=send(tcp->socket,(const char *)buffer,size,0))==-1) - { - return 0; - } - size-=length; - } - return 1; - } - break; - case PX_TCP_IP_TYPE_IPV6: - { - return 0; - } - break; - } - return 0; -} - -int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout) -{ - size_t ReturnSize; - struct timeval stimeout= {0,timeout*1000}; - setsockopt(tcp->socket,SOL_SOCKET,SO_SNDTIMEO,(int *)&stimeout,(socklen_t)sizeof(struct timeval)); - - switch (tcp->type) - { - case PX_TCP_IP_TYPE_IPV4: - { - int SockAddrSize=sizeof(struct sockaddr_in); - if((ReturnSize=recv(tcp->socket,(char *)buffer,buffersize,0))!=-1) - { - return ReturnSize;; - } - else - return 0; - } - break; - case PX_TCP_IP_TYPE_IPV6: - { - return 0; - } - break; - } - return 0; -} - -int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr) -{ - struct sockaddr sockaddr; - int len; - *socket=accept(tcp->socket,(struct sockaddr *)&sockaddr,(socklen_t *)&len); - return *socket!=-1; -} - - -void PX_TCPFree(PX_TCP *tcp) -{ - close(tcp->socket); -} - - -int PX_TCPListen(PX_TCP *tcp,unsigned short listen_Port) -{ - struct sockaddr_in addrin; - addrin.sin_family=AF_INET; - addrin.sin_addr.s_addr=INADDR_ANY; - addrin.sin_port=(listen_Port); - - if (bind(tcp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) - { - close(tcp->socket); - return 0; - } - return 1; -} - -PX_TCP_ADDR PX_TCP_ADDR_IPV4(unsigned int ipv4,unsigned short port) -{ - PX_TCP_ADDR addr; - addr.ipv4=ipv4; - addr.port=port; - return addr; -} diff --git a/UI/PainterEngine/platform/android/px_thread.c b/UI/PainterEngine/platform/android/px_thread.c deleted file mode 100644 index 4e4be7c..0000000 --- a/UI/PainterEngine/platform/android/px_thread.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "../modules/px_thread.h" -#include -#include - -void *PX_ThreadRun(void *ptr) -{ - px_thread *pthread=(px_thread *)ptr; - pthread->isRun=1; - pthread->pfunc(pthread->userptr); - pthread->isRun=0; - return 0; -} - - -int PX_ThreadCreate(px_thread *pthread,func_thread func,void *ptr) -{ - pthread_t t; - return pthread_create( &t, NULL, PX_ThreadRun, pthread)==0; -} diff --git a/UI/PainterEngine/platform/android/px_time.c b/UI/PainterEngine/platform/android/px_time.c deleted file mode 100644 index 3bb2fed..0000000 --- a/UI/PainterEngine/platform/android/px_time.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "../modules/px_time.h" -#include "time.h" -#include -unsigned int PX_TimeGetTime() -{ - unsigned int uptime = 0; - struct timespec on; - if(clock_gettime(CLOCK_MONOTONIC, &on) == 0) - uptime = on.tv_sec*1000 + on.tv_nsec/1000000; - return uptime; -} - -int PX_TimeGetYear() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_year; -} - -int PX_TimeGetMouth() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_year; -} - -int PX_TimeGetDay() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_mon; -} - -int PX_TimeGetHour() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_hour; -} - -int PX_TimeGetMinute() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_min; -} - -int PX_TimeGetSecond() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_sec; -} - -void PX_Sleep(unsigned int ms) -{ - usleep(ms*1000); -} - diff --git a/UI/PainterEngine/platform/android/px_udp.c b/UI/PainterEngine/platform/android/px_udp.c deleted file mode 100644 index 93e6161..0000000 --- a/UI/PainterEngine/platform/android/px_udp.c +++ /dev/null @@ -1,158 +0,0 @@ - -#include "../modules/px_udp.h" -//GNU C -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type) -{ - int err; - int nZero=0; - int nRecvBuf=1024*1024*2; - int nSendBuf=1024*1024*2; - int optval=1; - int imode=1,rev; - udp->type=type; - - if ((udp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) - { - err = errno; - return 0; - } - - rev=ioctl(udp->socket,FIONBIO,(u_long *)&imode); - setsockopt(udp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); - setsockopt(udp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); - - if(rev == -1) - { - close(udp->socket); - return 0; - } - - if (setsockopt(udp->socket,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(int))==-1) - { - close(udp->socket); - return 0; - } - return 1; -} - -int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size) -{ - - int length; - switch(udp->type) - { - case PX_UDP_IP_TYPE_IPV4: - { - struct sockaddr_in to; - to.sin_family=AF_INET; - to.sin_addr.s_addr=addr.ipv4; - to.sin_port=(addr.port); - while(size>0) - { - if ((length=sendto(udp->socket,(const char *)buffer,size,0,(struct sockaddr *)&to,sizeof(struct sockaddr)))==-1) - { - return 0; - } - size-=length; - } - return 1; - } - break; - case PX_UDP_IP_TYPE_IPV6: - { -// sockaddr_in6 to; -// to.sin6_family=AF_INET6; -// to.sin6_port=htons(addr.port); -// px_memcpy(to.sin6_addr,addr.ipv6,sizeof(addr.ipv6)); -// while(size>0) -// { -// if ((length=sendto(udp->socket,(const char *)buffer,size,0,(LPSOCKADDR)&to,sizeof(sockaddr_in6)))==-1) -// { -// return 0; -// } -// size-=length; -// } -// return 1; - } - break; - } - return 0; -} - -int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize) -{ - size_t ReturnSize; - switch (udp->type) - { - case PX_UDP_IP_TYPE_IPV4: - { - struct sockaddr_in in; - socklen_t SockAddrSize=sizeof(struct sockaddr); - if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(struct sockaddr *)&in,&SockAddrSize))!=-1) - { - from_addr->ipv4=in.sin_addr.s_addr; - from_addr->port=in.sin_port; - *readsize=ReturnSize; - return 1; - } - else - return 0; - } - break; - case PX_UDP_IP_TYPE_IPV6: - { -// sockaddr_in6 in; -// int SockAddrSize=sizeof(SOCKADDR); -// if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(LPSOCKADDR)&in,&SockAddrSize))!=-1) -// { -// px_memcpy(from_addr->ipv6,in.sin6_addr,sizeof(from_addr->ipv6)); -// from_addr->port=in.sin_port; -// *readsize=ReturnSize; -// return 1; -// } -// else -// return 0; - } - break; - } - return 0; -} - -void PX_UDPFree(PX_UDP *udp) -{ - close(udp->socket); -} - - -int PX_UDPListen(PX_UDP *udp,unsigned short listen_Port) -{ - struct sockaddr_in addrin; - addrin.sin_family=AF_INET; - addrin.sin_addr.s_addr=INADDR_ANY; - addrin.sin_port=(listen_Port); - - if (bind(udp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) - { - close(udp->socket); - return 0; - } - return 1; -} - -PX_UDP_ADDR PX_UDP_ADDR_IPV4(unsigned int ipv4,unsigned short port) -{ - PX_UDP_ADDR addr; - addr.ipv4=ipv4; - addr.port=port; - return addr; -} diff --git a/UI/PainterEngine/platform/linux/makefile b/UI/PainterEngine/platform/linux/makefile deleted file mode 100644 index 709ec5d..0000000 --- a/UI/PainterEngine/platform/linux/makefile +++ /dev/null @@ -1,51 +0,0 @@ -#mingw32-64 makefile -##################################################### -target :=PainterEngine -project_path := ../../project -painterengine_path := ../.. -##################################################### - -project_build := $(wildcard $(project_path)/*.c) -project_build_o := $(patsubst %.c,%.o,$(project_build)) - -painterengine_build_core := $(wildcard $(painterengine_path)/core/*.c) -painterengine_build_painterengine_o := $(patsubst %.c,%.o,$(painterengine_build_core)) - -painterengine_build_kernel := $(wildcard $(painterengine_path)/kernel/*.c) -painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_kernel)) - -painterengine_build_architecture := $(wildcard $(painterengine_path)/architecture/*.c) -painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_architecture)) - -painterengine_build_platform := $(wildcard $(painterengine_path)/platform/linux/*.c) -painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_platform)) - -painterengine_build_platform := $(wildcard $(painterengine_path)/platform/linux/*.cpp) -painterengine_build_painterengine_o += $(patsubst %.cpp,%.o,$(painterengine_build_platform)) - -all:$(project_build_o) $(painterengine_build_painterengine_o) - gcc $(project_build_o) $(painterengine_build_painterengine_o) \ - -o $(target) \ - -I "$(painterengine_path)" \ - -I "$(project_path)" \ - -I "$(painterengine_path)/platform/linux" \ - -L. -lGL -lglut -lpthread - - -$(project_path)/%.o:$(project_path)/%.c - gcc -c $^ -o $@ -I "$(painterengine_path)" -I "$(painterengine_path)/platform/linux" - -$(painterengine_path)/architecture/%.o:$(painterengine_path)/architecture/%.c - gcc -c $^ -o $@ -I "$(painterengine_path)" - -$(painterengine_path)/kernel/%.o:$(painterengine_path)/kernel/%.c - gcc -c $^ -o $@ - -$(painterengine_path)/core/%.o:$(painterengine_path)/core/%.c - gcc -c $^ -o $@ - -$(painterengine_path)/platform/linux/%.o:$(painterengine_path)/platform/linux/%.c - gcc -c $^ -o $@ -I "$(project_path)" -I "$(painterengine_path)" -I "$(painterengine_path)/platform/linux" - - - diff --git a/UI/PainterEngine/platform/linux/px_display.c b/UI/PainterEngine/platform/linux/px_display.c deleted file mode 100644 index 979c491..0000000 --- a/UI/PainterEngine/platform/linux/px_display.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "px_display.h" -unsigned int rendertexture; - -int PX_CreateWindow(int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name) -{ - glutInitWindowSize(windowWidth, windowHeight); - glutCreateWindow(name); - glGenTextures(1,&rendertexture); - glBindTexture(GL_TEXTURE_2D, rendertexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - return 1; -} - -int PX_GetScreenHeight() -{ - return glutGet(GLUT_SCREEN_HEIGHT); -} - -int PX_GetScreenWidth() -{ - return glutGet(GLUT_SCREEN_WIDTH); -} - -int PX_SystemLoop() -{ - glutMainLoop(); - return 1; -} - - diff --git a/UI/PainterEngine/platform/linux/px_display.h b/UI/PainterEngine/platform/linux/px_display.h deleted file mode 100644 index e56980d..0000000 --- a/UI/PainterEngine/platform/linux/px_display.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PX_DISPLAY_H -#define PX_DISPLAY_H -#include - -int PX_CreateWindow( int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name); -int PX_GetScreenHeight(); -int PX_GetScreenWidth(); -int PX_SystemLoop(); -#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/linux/px_file.c b/UI/PainterEngine/platform/linux/px_file.c deleted file mode 100644 index 46f55d5..0000000 --- a/UI/PainterEngine/platform/linux/px_file.c +++ /dev/null @@ -1,311 +0,0 @@ - -#include "../modules/px_file.h" -#include "stdio.h" -#include "stdlib.h" -#include "string.h" -#include -#include "dirent.h" - -int PX_SaveDataToFile(void *buffer, int size, const char path[]) -{ - FILE *pf=fopen(path, "rb"); - if (pf) - { - fwrite(buffer, 1, size, pf); - fclose(pf); - return 1; - } - return 0; -} - - -PX_IO_Data PX_LoadFileToIOData(const char path[]) -{ - - PX_IO_Data io; - int fileoft=0; - FILE *pf=fopen(path, "rb"); - int filesize; - if (!pf) - { - goto _ERROR; - } - fseek(pf, 0, SEEK_END); - filesize=ftell(pf); - fseek(pf, 0, SEEK_SET); - - io.buffer=(unsigned char *)malloc(filesize+1); - if (!io.buffer) - { - goto _ERROR; - } - - while (!feof(pf)) - { - fileoft += (int)fread(io.buffer+fileoft, 1, 1024, pf); - } - fclose(pf); - - io.buffer[filesize]='\0'; - io.size=filesize; - return io; - _ERROR: - io.buffer=0; - io.size=0; - return io; -} - -void PX_FreeIOData(PX_IO_Data *io) -{ - if (io->size&&io->buffer) - { - free(io->buffer); - io->size=0; - io->buffer=0; - } -} - -int PX_FileExist(const char path[]) -{ - FILE *pf= fopen(path, "rb"); - if (pf) - { - fclose(pf); - return 1; - } - return 0; -} - - - - -int PX_GetDirectoryFileCount(const char path[], PX_FILEENUM_TYPE type, const char *filter) -{ - struct dirent* ent = NULL; - int count=0; - DIR *pDir; - - if( (pDir=opendir(path)) == NULL) - { - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - switch (type) - { - case PX_FILEENUM_TYPE_ANY: - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - count++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - count++; - } - } - break; - case PX_FILEENUM_TYPE_FILE: - { - if (ent->d_type == DT_REG) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - count++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - case PX_FILEENUM_TYPE_FOLDER: - { - if (ent->d_type == DT_DIR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - count++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - case PX_FILEENUM_TYPE_DEVICE: - { - if (ent->d_type == DT_CHR) - { - if (filter&&filter[0]) - { - if (strstr(ent->d_name, filter)) - { - count++; - } - } else - { - count++; - } - } - } - break; - default: - break; - } - } - closedir(pDir); - return count; -} - -int PX_GetDirectoryFileName(const char path[], int count, char *FileName[260], PX_FILEENUM_TYPE type, const char *filter) -{ - struct dirent* ent = NULL; - int index=0; - DIR *pDir; - - if( (pDir=opendir(path)) == NULL) - { - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - if (index>=count) - { - return index; - } - - switch (type) - { - case PX_FILEENUM_TYPE_ANY: - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - strcpy(FileName[index], ent->d_name); - index++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index], ent->d_name); - index++; - } - } - break; - case PX_FILEENUM_TYPE_FILE: - { - if (ent->d_type == DT_REG) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - strcpy(FileName[index], ent->d_name); - index++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index], ent->d_name); - index++; - } - } - } - break; - case PX_FILEENUM_TYPE_FOLDER: - { - if (ent->d_type == DT_DIR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - strcpy(FileName[index], ent->d_name); - index++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index], ent->d_name); - index++; - } - } - } - break; - case PX_FILEENUM_TYPE_DEVICE: - { - if (ent->d_type == DT_CHR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - strcpy(FileName[index], ent->d_name); - index++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index], ent->d_name); - index++; - } - } - } - break; - default: - break; - } - } - closedir(pDir); - return index; -} diff --git a/UI/PainterEngine/platform/linux/px_main.c b/UI/PainterEngine/platform/linux/px_main.c deleted file mode 100644 index dec1256..0000000 --- a/UI/PainterEngine/platform/linux/px_main.c +++ /dev/null @@ -1,147 +0,0 @@ -//Platform supports -#include "platform/linux/px_display.h" -#include "PainterEngine_Application.h" -static px_dword lastupdatetime; - -extern unsigned int rendertexture; -static px_int windowWidth; -static px_int windowHeight; - -px_void PX_glutDisplayResize(px_int width,px_int height) -{ - PX_Object_Event e; - e.Event=PX_OBJECT_EVENT_WINDOWRESIZE; - PX_Object_Event_SetWidth(&e,width); - PX_Object_Event_SetHeight(&e,height); - PX_ApplicationPostEvent(&App,e); -} - -void PX_glutDisplayFunction(void) -{ - px_dword elpased; - px_dword timenow; - px_surface *pRenderSurface=&App.runtime.RenderSurface; - - timenow=glutGet(GLUT_ELAPSED_TIME); - elpased=timenow-lastupdatetime; - lastupdatetime=timenow; - PX_ApplicationUpdate(&App,elpased); - PX_ApplicationRender(&App,elpased); - glClear(GL_COLOR_BUFFER_BIT); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pRenderSurface->width, pRenderSurface->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pRenderSurface->surfaceBuffer); - glEnable(GL_TEXTURE_2D); - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 0.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0); - glTexCoord2f(1.0, 1.0); glVertex3f(1.0, -1.0, 0.0); - glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 0.0); - glEnd(); - - glutSwapBuffers(); -} -px_void PX_glutOnAnyKeyDown(int key,px_int x,px_int y) -{ - PX_Object_Event e; - e.Event=PX_OBJECT_EVENT_KEYDOWN; - PX_Object_Event_SetKeyDown(&e,key); - PX_ApplicationPostEvent(&App,e); -} -px_void PX_glutOnAnsiKeyDown(px_uchar key,px_int x,px_int y) -{ - PX_Object_Event e; - px_char str[2]={0}; - e.Event=PX_OBJECT_EVENT_KEYDOWN; - PX_Object_Event_SetKeyDown(&e,key); - PX_ApplicationPostEvent(&App,e); - str[0]=key; - e.Event=PX_OBJECT_EVENT_STRING; - PX_Object_Event_SetStringPtr(&e,str); - PX_ApplicationPostEvent(&App,e); -} - -px_void PX_glutOnMouseEvent(int button,int state,int x,int y) -{ - PX_Object_Event e; - px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; - px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; - switch(button) - { - case GLUT_LEFT_BUTTON: - { - if (state==GLUT_DOWN) - { - e.Event=PX_OBJECT_EVENT_CURSORDOWN; - } - else - { - e.Event=PX_OBJECT_EVENT_CURSORUP; - } - } - break; - case GLUT_RIGHT_BUTTON: - { - if (state==GLUT_DOWN) - { - e.Event=PX_OBJECT_EVENT_CURSORRDOWN; - } - else - { - e.Event=PX_OBJECT_EVENT_CURSORRUP; - } - } - break; - default: - break; - } - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursorx_scale); - PX_ApplicationPostEvent(&App,e); -} -px_void PX_glutOnMouseDragEvent(int x,int y) -{ - PX_Object_Event e; - px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; - px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; - e.Event=PX_OBJECT_EVENT_CURSORDRAG; - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursorx_scale); - PX_ApplicationPostEvent(&App,e); -} -px_void PX_glutOnMouseMoveEvent(int x,int y) -{ - PX_Object_Event e; - px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; - px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; - e.Event=PX_OBJECT_EVENT_CURSORMOVE; - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursorx_scale); - PX_ApplicationPostEvent(&App,e); -} - - -int main(int argc,char **argv) -{ - glutInit(&argc,argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA ); - - PX_srand(314159); - if(!PX_ApplicationInitialize(&App,PX_GetScreenWidth(),PX_GetScreenHeight()))return 0; - if(!PX_CreateWindow(App.runtime.surface_width,App.runtime.surface_height,App.runtime.window_width,App.runtime.window_height,PX_APPLICATION_NAME)) - { - return 0; - } - windowWidth=App.runtime.window_width; - windowHeight=App.runtime.window_height; - - lastupdatetime=glutGet(GLUT_ELAPSED_TIME); - glutDisplayFunc(PX_glutDisplayFunction); - glutIdleFunc(PX_glutDisplayFunction); - glutReshapeFunc(PX_glutDisplayResize); - glutMouseFunc(PX_glutOnMouseEvent); - glutMotionFunc(PX_glutOnMouseDragEvent); - glutPassiveMotionFunc(PX_glutOnMouseMoveEvent); - glutKeyboardFunc(PX_glutOnAnsiKeyDown); - glutSpecialFunc(PX_glutOnAnyKeyDown); - PX_SystemLoop(); - return 0; -} \ No newline at end of file diff --git a/UI/PainterEngine/platform/linux/px_serialport.c b/UI/PainterEngine/platform/linux/px_serialport.c deleted file mode 100644 index 33377e2..0000000 --- a/UI/PainterEngine/platform/linux/px_serialport.c +++ /dev/null @@ -1,167 +0,0 @@ -#include "../modules/px_serialport.h" -#include "stdio.h" -#include "stdlib.h" -#include "string.h" -#include -#include -#include -#include -#include "dirent.h" - -const char* PX_SerialPortEnumComName(int index) -{ - struct dirent* ent = 0; - int count=0; - DIR *pDir; - static char COMName[260]; - - if( (pDir=opendir("/dev")) == NULL) - { - int err=errno; - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - if (count==index) - { - closedir(pDir); - COMName[0]=0; - strcpy(COMName, "/dev/"); - strcpy(COMName, ent->d_name); - return COMName; - } - } - closedir(pDir); - return 0; -} -const int PX_SerialPortReset(PX_SerialPort *com,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) -{ - struct termios newtio; - memset( &newtio, 0,sizeof( newtio ) ); - newtio.c_cflag |= CLOCAL | CREAD; - newtio.c_cflag &= ~CSIZE; - - switch( DataBits ) - { - case 5: - newtio.c_cflag |= CS5; - break; - case 6: - newtio.c_cflag |= CS6; - break; - case 7: - newtio.c_cflag |= CS7; - break; - case 8: - newtio.c_cflag |= CS8; - break; - default: - break; - } - - switch( ParityType ) - { - case 'O': - newtio.c_cflag |= PARENB; - newtio.c_cflag |= PARODD; - newtio.c_iflag |= (INPCK | ISTRIP); - break; - case 'E': - newtio.c_iflag |= (INPCK | ISTRIP); - newtio.c_cflag |= PARENB; - newtio.c_cflag &= ~PARODD; - break; - case 'N': - newtio.c_cflag &= ~PARENB; - break; - } - - switch( baudRate ) - { - case 2400: - cfsetispeed(&newtio, B2400); - cfsetospeed(&newtio, B2400); - break; - case 4800: - cfsetispeed(&newtio, B4800); - cfsetospeed(&newtio, B4800); - break; - case 9600: - cfsetispeed(&newtio, B9600); - cfsetospeed(&newtio, B9600); - break; - case 115200: - cfsetispeed(&newtio, B115200); - cfsetospeed(&newtio, B115200); - break; - case 460800: - cfsetispeed(&newtio, B460800); - cfsetospeed(&newtio, B460800); - break; - default: - cfsetispeed(&newtio, B9600); - cfsetospeed(&newtio, B9600); - break; - } - - if( stopBit == 1 ) - newtio.c_cflag &= ~CSTOPB; - else if ( stopBit == 2 ) - newtio.c_cflag |= CSTOPB; - - newtio.c_cc[VTIME] =0; - newtio.c_cc[VMIN] = 0; - tcflush(com->Handle,TCIFLUSH); - if((tcsetattr(com->Handle,TCSANOW,&newtio))!=0) - { - return 0; - } - return 1; -} -const int PX_SerialPortInitialize(PX_SerialPort *com,const char *name,unsigned int baudRate,unsigned int DataBits,char ParityType,unsigned int stopBit) -{ - - com->BaudRate=baudRate; - com->DataBits=DataBits; - com->ParityType=ParityType; - com->StopBit=stopBit; - - com->Handle = open(name, O_RDWR | O_NOCTTY); - if(com->Handle < 0) - { - return 0; - } - - if(!PX_SerialPortReset(com,baudRate,DataBits,ParityType,stopBit)) - { - close(com->Handle); - return 0; - } - return 1; - -} - -const int PX_SerialPortWrite(PX_SerialPort *com,void *data,int size) -{ - if (com->Handle!=0) - { - return write(com->Handle,data,size); - } - return 0; -} -const int PX_SerialPortRead(PX_SerialPort *com,void *data,int size) -{ - if (com->Handle!=0) - { - return read(com->Handle,data,size); - } - return 0; -} -void PX_SerialPortClose(PX_SerialPort *com) -{ - if (com->Handle!=0) - { - close(com->Handle); - } -} \ No newline at end of file diff --git a/UI/PainterEngine/platform/linux/px_tcp.c b/UI/PainterEngine/platform/linux/px_tcp.c deleted file mode 100644 index 0c1faad..0000000 --- a/UI/PainterEngine/platform/linux/px_tcp.c +++ /dev/null @@ -1,149 +0,0 @@ - -#include "../modules/px_tcp.h" -//GNU C -#include -#include -#include -#include -#include -#include -#include -#include - -int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type) -{ - int err; - int nZero=0; - int nRecvBuf=1024*1024*2; - int nSendBuf=1024*1024*2; - int optval=1; - int imode=1,rev; - tcp->type=type; - - if ((tcp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_TCP))==-1) - { - err = errno; - return 0; - } - - rev=ioctl(tcp->socket,FIONBIO,(u_long *)&imode); - setsockopt(tcp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); - setsockopt(tcp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); - - if(rev == -1) - { - close(tcp->socket); - return 0; - } - - return 1; -} - -int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr) -{ - struct sockaddr_in to; - int ret; - to.sin_family=AF_INET; - to.sin_addr.s_addr=addr.ipv4; - to.sin_port=(addr.port); - - ret=connect(tcp->socket,(const struct sockaddr *)&to,sizeof(to)); - if (ret==0) - { - tcp->connectAddr=addr; - } - return ret; -} - -int PX_TCPSend(PX_TCP *tcp,void *buffer,int size) -{ - int length; - switch(tcp->type) - { - case PX_TCP_IP_TYPE_IPV4: - { - while(size>0) - { - if ((length=send(tcp->socket,(const char *)buffer,size,0))==-1) - { - return 0; - } - size-=length; - } - return 1; - } - break; - case PX_TCP_IP_TYPE_IPV6: - { - return 0; - } - break; - } - return 0; -} - -int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout) -{ - size_t ReturnSize; - struct timeval stimeout= {0,timeout*1000}; - setsockopt(tcp->socket,SOL_SOCKET,SO_SNDTIMEO,(int *)&stimeout,sizeof(struct timeval)); - - switch (tcp->type) - { - case PX_TCP_IP_TYPE_IPV4: - { - int SockAddrSize=sizeof(struct sockaddr_in); - if((ReturnSize=recv(tcp->socket,(char *)buffer,buffersize,0))!=-1) - { - return ReturnSize;; - } - else - return 0; - } - break; - case PX_TCP_IP_TYPE_IPV6: - { - return 0; - } - break; - } - return 0; -} - -int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr) -{ - struct sockaddr sockaddr; - int len; - *socket=accept(tcp->socket,(struct sockaddr *)&sockaddr,(socklen_t *)&len); - return *socket!=-1; -} - - -void PX_TCPFree(PX_TCP *tcp) -{ - close(tcp->socket); -} - - -int PX_TCPListen(PX_TCP *tcp,unsigned short listen_Port) -{ - struct sockaddr_in addrin; - addrin.sin_family=AF_INET; - addrin.sin_addr.s_addr=INADDR_ANY; - addrin.sin_port=(listen_Port); - - if (bind(tcp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) - { - close(tcp->socket); - return 0; - } - return 1; -} - -PX_TCP_ADDR PX_TCP_ADDR_IPV4(unsigned int ipv4,unsigned short port) -{ - PX_TCP_ADDR addr; - addr.ipv4=ipv4; - addr.port=port; - return addr; -} diff --git a/UI/PainterEngine/platform/linux/px_thread.c b/UI/PainterEngine/platform/linux/px_thread.c deleted file mode 100644 index 4e4be7c..0000000 --- a/UI/PainterEngine/platform/linux/px_thread.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "../modules/px_thread.h" -#include -#include - -void *PX_ThreadRun(void *ptr) -{ - px_thread *pthread=(px_thread *)ptr; - pthread->isRun=1; - pthread->pfunc(pthread->userptr); - pthread->isRun=0; - return 0; -} - - -int PX_ThreadCreate(px_thread *pthread,func_thread func,void *ptr) -{ - pthread_t t; - return pthread_create( &t, NULL, PX_ThreadRun, pthread)==0; -} diff --git a/UI/PainterEngine/platform/linux/px_time.c b/UI/PainterEngine/platform/linux/px_time.c deleted file mode 100644 index cb243e8..0000000 --- a/UI/PainterEngine/platform/linux/px_time.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "../modules/px_time.h" -#include "time.h" -#include - -unsigned int PX_TimeGetTime() -{ - unsigned int uptime = 0; - struct timespec on; - if(clock_gettime(CLOCK_MONOTONIC, &on) == 0) - uptime = on.tv_sec*1000 + on.tv_nsec/1000000; - return uptime; -} - -int PX_TimeGetYear() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_year; -} - -int PX_TimeGetMouth() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_year; -} - -int PX_TimeGetDay() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_mon; -} - -int PX_TimeGetHour() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_hour; -} - -int PX_TimeGetMinute() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_min; -} - -int PX_TimeGetSecond() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_sec; -} - -void PX_Sleep(unsigned int ms) -{ - usleep(ms*1000); -} diff --git a/UI/PainterEngine/platform/linux/px_udp.c b/UI/PainterEngine/platform/linux/px_udp.c deleted file mode 100644 index d95471b..0000000 --- a/UI/PainterEngine/platform/linux/px_udp.c +++ /dev/null @@ -1,157 +0,0 @@ - -#include "../modules/px_udp.h" -//GNU C -#include -#include -#include -#include -#include -#include -#include -#include - -int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type) -{ - int err; - int nZero=0; - int nRecvBuf=1024*1024*2; - int nSendBuf=1024*1024*2; - int optval=1; - int imode=1,rev; - udp->type=type; - - if ((udp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) - { - err = errno; - return 0; - } - - rev=ioctl(udp->socket,FIONBIO,(u_long *)&imode); - setsockopt(udp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); - setsockopt(udp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); - - if(rev == -1) - { - close(udp->socket); - return 0; - } - - if (setsockopt(udp->socket,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(int))==-1) - { - close(udp->socket); - return 0; - } - return 1; -} - -int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size) -{ - - int length; - switch(udp->type) - { - case PX_UDP_IP_TYPE_IPV4: - { - struct sockaddr_in to; - to.sin_family=AF_INET; - to.sin_addr.s_addr=addr.ipv4; - to.sin_port=(addr.port); - while(size>0) - { - if ((length=sendto(udp->socket,(const char *)buffer,size,0,(struct sockaddr *)&to,sizeof(struct sockaddr)))==-1) - { - return 0; - } - size-=length; - } - return 1; - } - break; - case PX_UDP_IP_TYPE_IPV6: - { -// sockaddr_in6 to; -// to.sin6_family=AF_INET6; -// to.sin6_port=htons(addr.port); -// px_memcpy(to.sin6_addr,addr.ipv6,sizeof(addr.ipv6)); -// while(size>0) -// { -// if ((length=sendto(udp->socket,(const char *)buffer,size,0,(LPSOCKADDR)&to,sizeof(sockaddr_in6)))==-1) -// { -// return 0; -// } -// size-=length; -// } -// return 1; - } - break; - } - return 0; -} - -int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize) -{ - size_t ReturnSize; - switch (udp->type) - { - case PX_UDP_IP_TYPE_IPV4: - { - struct sockaddr_in in; - socklen_t SockAddrSize=sizeof(struct sockaddr); - if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(struct sockaddr *)&in,&SockAddrSize))!=-1) - { - from_addr->ipv4=in.sin_addr.s_addr; - from_addr->port=in.sin_port; - *readsize=ReturnSize; - return 1; - } - else - return 0; - } - break; - case PX_UDP_IP_TYPE_IPV6: - { -// sockaddr_in6 in; -// int SockAddrSize=sizeof(SOCKADDR); -// if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(LPSOCKADDR)&in,&SockAddrSize))!=-1) -// { -// px_memcpy(from_addr->ipv6,in.sin6_addr,sizeof(from_addr->ipv6)); -// from_addr->port=in.sin_port; -// *readsize=ReturnSize; -// return 1; -// } -// else -// return 0; - } - break; - } - return 0; -} - -void PX_UDPFree(PX_UDP *udp) -{ - close(udp->socket); -} - - -int PX_UDPListen(PX_UDP *udp,unsigned short listen_Port) -{ - struct sockaddr_in addrin; - addrin.sin_family=AF_INET; - addrin.sin_addr.s_addr=INADDR_ANY; - addrin.sin_port=(listen_Port); - - if (bind(udp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) - { - close(udp->socket); - return 0; - } - return 1; -} - -PX_UDP_ADDR PX_UDP_ADDR_IPV4(unsigned int ipv4,unsigned short port) -{ - PX_UDP_ADDR addr; - addr.ipv4=ipv4; - addr.port=port; - return addr; -} diff --git a/UI/PainterEngine/platform/macos/px_display.c b/UI/PainterEngine/platform/macos/px_display.c deleted file mode 100644 index 979c491..0000000 --- a/UI/PainterEngine/platform/macos/px_display.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "px_display.h" -unsigned int rendertexture; - -int PX_CreateWindow(int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name) -{ - glutInitWindowSize(windowWidth, windowHeight); - glutCreateWindow(name); - glGenTextures(1,&rendertexture); - glBindTexture(GL_TEXTURE_2D, rendertexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - return 1; -} - -int PX_GetScreenHeight() -{ - return glutGet(GLUT_SCREEN_HEIGHT); -} - -int PX_GetScreenWidth() -{ - return glutGet(GLUT_SCREEN_WIDTH); -} - -int PX_SystemLoop() -{ - glutMainLoop(); - return 1; -} - - diff --git a/UI/PainterEngine/platform/macos/px_display.h b/UI/PainterEngine/platform/macos/px_display.h deleted file mode 100644 index ef06bbf..0000000 --- a/UI/PainterEngine/platform/macos/px_display.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PX_DISPLAY_H -#define PX_DISPLAY_H - -#include -#include - - -int PX_CreateWindow( int surfaceWidth,int surfaceHeight,int windowWidth,int windowHeight, const char *name); -int PX_GetScreenHeight(); -int PX_GetScreenWidth(); -int PX_SystemLoop(); -#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/macos/px_file.c b/UI/PainterEngine/platform/macos/px_file.c deleted file mode 100644 index 828dabf..0000000 --- a/UI/PainterEngine/platform/macos/px_file.c +++ /dev/null @@ -1,311 +0,0 @@ - -#include "../modules/px_file.h" -#include "stdio.h" -#include "stdlib.h" -#include "string.h" -#include -#include "dirent.h" - -int PX_SaveDataToFile(void *buffer,int size,const char path[]) -{ - FILE *pf=fopen(path,"rb"); - if (pf) - { - fwrite(buffer,1,size,pf); - fclose(pf); - return 1; - } - return 0; -} - - -PX_IO_Data PX_LoadFileToIOData(const char path[]) -{ - - PX_IO_Data io; - int fileoft=0; - FILE *pf=fopen(path,"rb"); - int filesize; - if (!pf) - { - goto _ERROR; - } - fseek(pf,0,SEEK_END); - filesize=ftell(pf); - fseek(pf,0,SEEK_SET); - - io.buffer=(unsigned char *)malloc(filesize+1); - if (!io.buffer) - { - goto _ERROR; - } - - while (!feof(pf)) - { - fileoft+=(int)fread(io.buffer+fileoft,1,1024,pf); - } - fclose(pf); - - io.buffer[filesize]='\0'; - io.size=filesize; - return io; -_ERROR: - io.buffer = 0; - io.size = 0; - return io; -} - -void PX_FreeIOData(PX_IO_Data *io) -{ - if (io->size&&io->buffer) - { - free(io->buffer); - io->size=0; - io->buffer=0; - } -} - -int PX_FileExist(const char path[]) -{ - FILE *pf= fopen(path,"rb"); - if (pf) - { - fclose(pf); - return 1; - } - return 0; -} - - - - -int PX_GetDirectoryFileCount(const char path[],PX_FILEENUM_TYPE type,const char *filter) -{ - struct dirent* ent = NULL; - int count=0; - DIR *pDir; - - if( (pDir=opendir(path)) == NULL) - { - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - switch (type) - { - case PX_FILEENUM_TYPE_ANY: - { - if (filter&&filter[0]) - { - if (strstr(ent->d_name,filter)) - { - count++; - } - } else - { - count++; - } - } - break; - case PX_FILEENUM_TYPE_FILE: - { - if (ent->d_type==DT_REG) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - count++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - case PX_FILEENUM_TYPE_FOLDER: - { - if (ent->d_type==DT_DIR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - count++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - case PX_FILEENUM_TYPE_DEVICE: - { - if (ent->d_type==DT_CHR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - count++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - default: - break; - } - } - closedir(pDir); - return count; -} - -int PX_GetDirectoryFileName(const char path[],int count,char *FileName[260],PX_FILEENUM_TYPE type,const char *filter) -{ - struct dirent* ent = NULL; - int index=0; - DIR *pDir; - - if( (pDir=opendir(path)) == NULL) - { - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - if (index>=count) - { - return index; - } - - switch (type) - { - case PX_FILEENUM_TYPE_ANY: - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - strcpy(FileName[index],ent->d_name); - index++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index],ent->d_name); - index++; - } - } - break; - case PX_FILEENUM_TYPE_FILE: - { - if (ent->d_type==DT_REG) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - strcpy(FileName[index],ent->d_name); - index++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index],ent->d_name); - index++; - } - } - } - break; - case PX_FILEENUM_TYPE_FOLDER: - { - if (ent->d_type==DT_DIR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - strcpy(FileName[index],ent->d_name); - index++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index],ent->d_name); - index++; - } - } - } - break; - case PX_FILEENUM_TYPE_DEVICE: - { - if (ent->d_type==DT_CHR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name,pFilter)) - { - strcpy(FileName[index],ent->d_name); - index++; - break; - } - pFilter+=strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index],ent->d_name); - index++; - } - } - } - break; - default: - break; - } - } - closedir(pDir); - return index; -} diff --git a/UI/PainterEngine/platform/macos/px_main.c b/UI/PainterEngine/platform/macos/px_main.c deleted file mode 100644 index da3f9f2..0000000 --- a/UI/PainterEngine/platform/macos/px_main.c +++ /dev/null @@ -1,147 +0,0 @@ -//Platform supports -#include "px_display.h" -#include "PainterEngine_Application.h" -static px_dword lastupdatetime; - -extern unsigned int rendertexture; -static px_int windowWidth; -static px_int windowHeight; - -px_void PX_glutDisplayResize(px_int width,px_int height) -{ - PX_Object_Event e; - e.Event=PX_OBJECT_EVENT_WINDOWRESIZE; - PX_Object_Event_SetWidth(&e,width); - PX_Object_Event_SetHeight(&e,height); - PX_ApplicationPostEvent(&App,e); -} - -void PX_glutDisplayFunction(void) -{ - px_dword elpased; - px_dword timenow; - px_surface *pRenderSurface=&App.runtime.RenderSurface; - - timenow=glutGet(GLUT_ELAPSED_TIME); - elpased=timenow-lastupdatetime; - lastupdatetime=timenow; - PX_ApplicationUpdate(&App,elpased); - PX_ApplicationRender(&App,elpased); - glClear(GL_COLOR_BUFFER_BIT); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pRenderSurface->width, pRenderSurface->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pRenderSurface->surfaceBuffer); - glEnable(GL_TEXTURE_2D); - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 0.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0); - glTexCoord2f(1.0, 1.0); glVertex3f(1.0, -1.0, 0.0); - glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 0.0); - glEnd(); - - glutSwapBuffers(); -} -px_void PX_glutOnAnyKeyDown(int key,px_int x,px_int y) -{ - PX_Object_Event e; - e.Event=PX_OBJECT_EVENT_KEYDOWN; - PX_Object_Event_SetKeyDown(&e,key); - PX_ApplicationPostEvent(&App,e); -} -px_void PX_glutOnAnsiKeyDown(px_uchar key,px_int x,px_int y) -{ - PX_Object_Event e; - px_char str[2]={0}; - e.Event=PX_OBJECT_EVENT_KEYDOWN; - PX_Object_Event_SetKeyDown(&e,key); - PX_ApplicationPostEvent(&App,e); - str[0]=key; - e.Event=PX_OBJECT_EVENT_STRING; - PX_Object_Event_SetStringPtr(&e,str); - PX_ApplicationPostEvent(&App,e); -} - -px_void PX_glutOnMouseEvent(int button,int state,int x,int y) -{ - PX_Object_Event e; - px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; - px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; - switch(button) - { - case GLUT_LEFT_BUTTON: - { - if (state==GLUT_DOWN) - { - e.Event=PX_OBJECT_EVENT_CURSORDOWN; - } - else - { - e.Event=PX_OBJECT_EVENT_CURSORUP; - } - } - break; - case GLUT_RIGHT_BUTTON: - { - if (state==GLUT_DOWN) - { - e.Event=PX_OBJECT_EVENT_CURSORRDOWN; - } - else - { - e.Event=PX_OBJECT_EVENT_CURSORRUP; - } - } - break; - default: - break; - } - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursorx_scale); - PX_ApplicationPostEvent(&App,e); -} -px_void PX_glutOnMouseDragEvent(int x,int y) -{ - PX_Object_Event e; - px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; - px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; - e.Event=PX_OBJECT_EVENT_CURSORDRAG; - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursorx_scale); - PX_ApplicationPostEvent(&App,e); -} -px_void PX_glutOnMouseMoveEvent(int x,int y) -{ - PX_Object_Event e; - px_float cursorx_scale=App.runtime.surface_width*1.0f/App.runtime.window_width; - px_float cursory_scale=App.runtime.surface_height*1.0f/App.runtime.window_height; - e.Event=PX_OBJECT_EVENT_CURSORMOVE; - PX_Object_Event_SetCursorX(&e,x*cursorx_scale); - PX_Object_Event_SetCursorY(&e,y*cursorx_scale); - PX_ApplicationPostEvent(&App,e); -} - - -int main(int argc,char **argv) -{ - glutInit(&argc,argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA ); - - PX_srand(314159); - if(!PX_ApplicationInitialize(&App,PX_GetScreenWidth(),PX_GetScreenHeight()))return 0; - if(!PX_CreateWindow(App.runtime.surface_width,App.runtime.surface_height,App.runtime.window_width,App.runtime.window_height,PX_APPLICATION_NAME)) - { - return 0; - } - windowWidth=App.runtime.window_width; - windowHeight=App.runtime.window_height; - - lastupdatetime=glutGet(GLUT_ELAPSED_TIME); - glutDisplayFunc(PX_glutDisplayFunction); - glutIdleFunc(PX_glutDisplayFunction); - glutReshapeFunc(PX_glutDisplayResize); - glutMouseFunc(PX_glutOnMouseEvent); - glutMotionFunc(PX_glutOnMouseDragEvent); - glutPassiveMotionFunc(PX_glutOnMouseMoveEvent); - glutKeyboardFunc(PX_glutOnAnsiKeyDown); - glutSpecialFunc(PX_glutOnAnyKeyDown); - PX_SystemLoop(); - return 0; -} \ No newline at end of file diff --git a/UI/PainterEngine/platform/macos/xmake.lua b/UI/PainterEngine/platform/macos/xmake.lua deleted file mode 100644 index 49abf88..0000000 --- a/UI/PainterEngine/platform/macos/xmake.lua +++ /dev/null @@ -1,26 +0,0 @@ -target("demo") - ---input your painterengine directory here -painterengine_dir="" - -after_build(function(target) - -- import task modules - import("core.base.task") - -- run task modules - task.run("project", {kind = "compile_commands"}) -end) - -set_kind("binary") -set_optimize("faster") -set_targetdir("$(buildir)/$(mode)") - -add_includedirs(painterengine_dir) -add_includedirs(painterengine_dir .. "/platform/framework") - -add_files(painterengine_dir .. "/core/*.c") -add_files(painterengine_dir .. "/kernel/*.c") -add_files(painterengine_dir .. "/architecture/*.c") -add_files(painterengine_dir .. "/platform/framework/*.c") -add_files(painterengine_dir .. "/platform/macos/*.c") - -add_frameworks("GLUT", "OpenGL") diff --git a/UI/PainterEngine/platform/modules/px_audio.h b/UI/PainterEngine/platform/modules/px_audio.h deleted file mode 100644 index 64d1bff..0000000 --- a/UI/PainterEngine/platform/modules/px_audio.h +++ /dev/null @@ -1,11 +0,0 @@ - -#ifndef PX_AUDIO_H -#define PX_AUDIO_H - -#include "../../core/PX_Sound.h" - -int PX_AudioInitialize(PX_SoundPlay *soundPlay); -void PX_AudioSetVolume(unsigned int volume); - - -#endif diff --git a/UI/PainterEngine/platform/modules/px_file.h b/UI/PainterEngine/platform/modules/px_file.h deleted file mode 100644 index 0892a36..0000000 --- a/UI/PainterEngine/platform/modules/px_file.h +++ /dev/null @@ -1,36 +0,0 @@ - -#ifndef PAINTERENGINE_FILE_H -#define PAINTERENGINE_FILE_H - -#define PAINTERENGIN_FILE_SUPPORT -////////////////////////////////////////////////////////////////////////// -#include "stdio.h" -#include "stdlib.h" -#include "string.h" - -typedef struct -{ - unsigned char *buffer; - unsigned int size; -}PX_IO_Data; - -typedef enum -{ - PX_FILEENUM_TYPE_ANY, - PX_FILEENUM_TYPE_FOLDER, - PX_FILEENUM_TYPE_FILE, - PX_FILEENUM_TYPE_DEVICE, -}PX_FILEENUM_TYPE; - - -PX_IO_Data PX_LoadFileToIOData(const char path[]); -int PX_FileExist(const char respath[]); -int PX_CopyFile(const char respath[],const char destpath[]); -int PX_SaveDataToFile(void *buffer,int size,const char path[]); -void PX_FreeIOData(PX_IO_Data *io); - -int PX_FileGetDirectoryFileCount(const char path[],PX_FILEENUM_TYPE type,const char *filter); -int PX_FileGetDirectoryFileName(const char path[],int count,char FileName[][260],PX_FILEENUM_TYPE type,const char *filter); - -#endif - diff --git a/UI/PainterEngine/platform/modules/px_serialport.h b/UI/PainterEngine/platform/modules/px_serialport.h deleted file mode 100644 index 54b098e..0000000 --- a/UI/PainterEngine/platform/modules/px_serialport.h +++ /dev/null @@ -1,21 +0,0 @@ - -#ifndef PX_SERIALPORT_H -#define PX_SERIALPORT_H - -typedef struct -{ - long long Handle; - unsigned int BaudRate; - unsigned int DataBits; - char ParityType; - unsigned int StopBit; -}PX_SerialPort; - - -const char* PX_SerialPortEnumComName(int index); -const int PX_SerialPortInitialize(PX_SerialPort *com,const char *name,unsigned int baudRate,unsigned int DataBits/*5,6,7,8*/,char ParityType/*'O','E','N'*/,unsigned int stopBit/*0,1,2*/); -const int PX_SerialPortReset(PX_SerialPort *com,unsigned int baudRate,unsigned int DataBits/*5,6,7,8*/,char ParityType/*'O','E','N'*/,unsigned int stopBit/*0,1,2*/); -const int PX_SerialPortWrite(PX_SerialPort *com,void *data,int size); -const int PX_SerialPortRead(PX_SerialPort *com,void *data,int size); -void PX_SerialPortClose(PX_SerialPort *com); -#endif diff --git a/UI/PainterEngine/platform/modules/px_tcp.h b/UI/PainterEngine/platform/modules/px_tcp.h deleted file mode 100644 index 1ff6aee..0000000 --- a/UI/PainterEngine/platform/modules/px_tcp.h +++ /dev/null @@ -1,36 +0,0 @@ - -#ifndef PX_TCP_H -#define PX_TCP_H - -typedef enum -{ - PX_TCP_IP_TYPE_IPV4, - PX_TCP_IP_TYPE_IPV6 -}PX_TCP_IP_TYPE; - -typedef struct -{ - unsigned int port; - union - { - unsigned int ipv4; - unsigned int ipv6[4]; - }; -}PX_TCP_ADDR; - -typedef struct -{ - unsigned int listenPort; - unsigned int socket; - PX_TCP_IP_TYPE type; - PX_TCP_ADDR connectAddr; -}PX_TCP; - -int PX_TCPListen(PX_TCP *tcp,unsigned short listenPort); -int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type); -int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr); -int PX_TCPSend(PX_TCP *tcp,void *buffer,int size); -int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout); -int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr); -void PX_TCPFree(PX_TCP *tcp); -#endif diff --git a/UI/PainterEngine/platform/modules/px_thread.h b/UI/PainterEngine/platform/modules/px_thread.h deleted file mode 100644 index 79325b9..0000000 --- a/UI/PainterEngine/platform/modules/px_thread.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef PX_THREAD -#define PX_THREAD - -typedef void (*func_thread)(void *ptr); - -typedef struct -{ - union - { - void *handle_ptr; - unsigned int handle_uint; - unsigned long handle_ulong; - }; - func_thread pfunc; - void *userptr; - volatile int isRun; -}px_thread; - -int PX_ThreadCreate(px_thread *thread,func_thread func,void *ptr); - -#endif diff --git a/UI/PainterEngine/platform/modules/px_time.h b/UI/PainterEngine/platform/modules/px_time.h deleted file mode 100644 index b46d6ae..0000000 --- a/UI/PainterEngine/platform/modules/px_time.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PX_TIME_H -#define PX_TIME_H - -int PX_TimeGetYear(); -int PX_TimeGetMouth(); -int PX_TimeGetDay(); -int PX_TimeGetHour(); -int PX_TimeGetMinute(); -int PX_TimeGetSecond(); -unsigned int PX_TimeGetTime(); -void PX_Sleep(unsigned int ms); -#endif \ No newline at end of file diff --git a/UI/PainterEngine/platform/modules/px_udp.h b/UI/PainterEngine/platform/modules/px_udp.h deleted file mode 100644 index 1456339..0000000 --- a/UI/PainterEngine/platform/modules/px_udp.h +++ /dev/null @@ -1,33 +0,0 @@ - -#ifndef PX_UDP_H -#define PX_UDP_H - -typedef enum -{ - PX_UDP_IP_TYPE_IPV4, - PX_UDP_IP_TYPE_IPV6 -}PX_UDP_IP_TYPE; - -typedef struct -{ - unsigned int listenPort; - unsigned int socket; - PX_UDP_IP_TYPE type; -}PX_UDP; - -typedef struct -{ - unsigned int port; - union - { - unsigned int ipv4; - unsigned int ipv6[4]; - }; -}PX_UDP_ADDR; - -int PX_UDPListen(PX_UDP *udp,unsigned short listenPort); -int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type); -int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size); -int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize); -void PX_UDPFree(PX_UDP *udp); -#endif diff --git a/UI/PainterEngine/platform/webassembly/assets/readme.txt b/UI/PainterEngine/platform/webassembly/assets/readme.txt deleted file mode 100644 index 8d21944..0000000 --- a/UI/PainterEngine/platform/webassembly/assets/readme.txt +++ /dev/null @@ -1,3 +0,0 @@ -Put your resource files in this folder -use "assets/filename" to access your resource files. - diff --git a/UI/PainterEngine/platform/webassembly/index.html b/UI/PainterEngine/platform/webassembly/index.html deleted file mode 100644 index 20b633d..0000000 --- a/UI/PainterEngine/platform/webassembly/index.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - -

- - set - 限制解除 - - - - - - diff --git a/UI/PainterEngine/platform/webassembly/main.c b/UI/PainterEngine/platform/webassembly/main.c deleted file mode 100644 index 5f23df3..0000000 --- a/UI/PainterEngine/platform/webassembly/main.c +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2011 The Emscripten Authors. All rights reserved. -// Emscripten is available under two separate licenses, the MIT license and the -// University of Illinois/NCSA Open Source License. Both these licenses can be -// found in the LICENSE file. - -#ifdef _MSC_VER -#pragma comment(lib,"SDL.lib") -#pragma comment(lib,"winmm.lib") -#pragma comment(lib, "dxguid.lib") -#endif // _MSC_VER - - -#include -#include - -#ifdef __EMSCRIPTEN__ -#include -#endif - -#include "PainterEngine_Application.h" - -/////////////////////////////////////////////// -//global -SDL_Surface *screen; -const SDL_VideoInfo *info; -px_dword lastupdatetime; -px_int lastcursorx=-1,lastcursory=-1; -px_bool mouseldown=PX_FALSE; -/////////////////////////////////////////////// - - - - -void mainloop(void *ptr) -{ - px_dword elpased; - SDL_Event event; - px_dword timecurrent=SDL_GetTicks(); - - - elpased=timecurrent-lastupdatetime; - lastupdatetime=timecurrent; - - PX_ApplicationUpdate(&App,elpased); - PX_ApplicationRender(&App,elpased); - - - if (SDL_MUSTLOCK(screen)) SDL_LockSurface(screen); - PX_memcpy(screen->pixels,App.runtime.RenderSurface.surfaceBuffer,App.runtime.surface_width*App.runtime.surface_height*4); - if (SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); - SDL_Flip(screen); - - while (SDL_PollEvent(&event)) - { - if (SDL_MOUSEBUTTONDOWN == event.type) - { - if(SDL_BUTTON_LEFT == event.button.button) - { - px_int px = event.button.x; - px_int py = event.button.y; - PX_Object_Event e; - lastcursorx=px; - lastcursory=py; - mouseldown=PX_TRUE; - e.Event=PX_OBJECT_EVENT_CURSORDOWN; - PX_Object_Event_SetCursorX(&e,(px_float)px); - PX_Object_Event_SetCursorY(&e,(px_float)py); - PX_ApplicationPostEvent(&App,e); - } - else if(SDL_BUTTON_RIGHT == event.button.button) - { - px_int px = event.button.x; - px_int py = event.button.y; - PX_Object_Event e; - e.Event=PX_OBJECT_EVENT_CURSORRDOWN; - PX_Object_Event_SetCursorX(&e,(px_float)px); - PX_Object_Event_SetCursorY(&e,(px_float)py); - PX_ApplicationPostEvent(&App,e); - } - } - else if (SDL_MOUSEBUTTONUP== event.type) - { - if(SDL_BUTTON_LEFT == event.button.button) - { - px_int px = event.button.x; - px_int py = event.button.y; - PX_Object_Event e; - mouseldown=PX_FALSE; - if (px==lastcursorx&&py==lastcursory) - { - e.Event=PX_OBJECT_EVENT_CURSORCLICK; - PX_Object_Event_SetCursorX(&e,(px_float)px); - PX_Object_Event_SetCursorY(&e,(px_float)py); - PX_ApplicationPostEvent(&App,e); - } - - lastcursorx=px; - lastcursory=py; - e.Event=PX_OBJECT_EVENT_CURSORUP; - PX_Object_Event_SetCursorX(&e,(px_float)px); - PX_Object_Event_SetCursorY(&e,(px_float)py); - PX_ApplicationPostEvent(&App,e); - } - else if(SDL_BUTTON_RIGHT == event.button.button) - { - px_int px = event.button.x; - px_int py = event.button.y; - PX_Object_Event e; - e.Event=PX_OBJECT_EVENT_CURSORRUP; - PX_Object_Event_SetCursorX(&e,(px_float)px); - PX_Object_Event_SetCursorY(&e,(px_float)py); - PX_ApplicationPostEvent(&App,e); - } - } - else if (SDL_MOUSEMOTION == event.type) - { - px_int px = event.button.x; - px_int py = event.button.y; - PX_Object_Event e; - - if (mouseldown) - e.Event=PX_OBJECT_EVENT_CURSORDRAG; - else - e.Event=PX_OBJECT_EVENT_CURSORMOVE; - - PX_Object_Event_SetCursorX(&e,(px_float)px); - PX_Object_Event_SetCursorY(&e,(px_float)py); - PX_ApplicationPostEvent(&App,e); - } - else if (SDL_KEYDOWN == event.type) - { - PX_Object_Event e; - px_char str[2]={0}; - e.Event=PX_OBJECT_EVENT_KEYDOWN; - PX_Object_Event_SetKeyDown(&e,event.key.keysym.sym); - PX_ApplicationPostEvent(&App,e); - - str[0]=event.key.keysym.sym; - if ((str[0]>=0x20&&str[0]<=0x7E)||str[0]==0x08||str[0]==0x0d||str[0]==0x0a) - { - e.Event=PX_OBJECT_EVENT_STRING; - PX_Object_Event_SetStringPtr(&e,str); - PX_ApplicationPostEvent(&App,e); - } - - } - else if (SDL_KEYUP == event.type) - { - PX_Object_Event e; - e.Event=PX_OBJECT_EVENT_KEYUP; - PX_Object_Event_SetKeyUp(&e,event.key.keysym.sym); - PX_ApplicationPostEvent(&App,e); - } - if (event.type == SDL_QUIT) {}; - } - -} - - -#ifdef __cplusplus -extern "C" -#endif -int main(int argc, char *argv[]) -{ - - printf("PainterEngine Webassembly initializating...\n"); - SDL_Init(SDL_INIT_VIDEO); - info=SDL_GetVideoInfo(); - if(!PX_ApplicationInitialize(&App,info->current_w,info->current_h)) - { - printf("PainterEngine startup failed.\n"); - return PX_FALSE; - } - - screen = SDL_SetVideoMode(App.runtime.surface_width, App.runtime.surface_height, 32, SDL_SWSURFACE); - lastupdatetime=SDL_GetTicks(); - - emscripten_set_main_loop_arg(mainloop, 0, -1, 1); - return 0; -} diff --git a/UI/PainterEngine/platform/webassembly/makefile b/UI/PainterEngine/platform/webassembly/makefile deleted file mode 100644 index 2f10479..0000000 --- a/UI/PainterEngine/platform/webassembly/makefile +++ /dev/null @@ -1,58 +0,0 @@ -#emscripten makefile -##################################################### -target :=PainterEngine.html -project_path := ../../project -painterengine_path := ../.. -##################################################### - -project_build := $(wildcard $(project_path)/*.c) -project_build_o := $(patsubst %.c,%.o,$(project_build)) - -painterengine_build_core := $(wildcard $(painterengine_path)/core/*.c) -painterengine_build_painterengine_o := $(patsubst %.c,%.o,$(painterengine_build_core)) - -painterengine_build_kernel := $(wildcard $(painterengine_path)/kernel/*.c) -painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_kernel)) - -painterengine_build_architecture := $(wildcard $(painterengine_path)/architecture/*.c) -painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_architecture)) - -painterengine_build_platform := $(wildcard $(painterengine_path)/platform/webassembly/*.c) -painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_platform)) - -painterengine_build_platform := $(wildcard $(painterengine_path)/platform/webassembly/*.cpp) -painterengine_build_painterengine_o += $(patsubst %.cpp,%.o,$(painterengine_build_platform)) - -all:$(project_build_o) $(painterengine_build_painterengine_o) - emcc $(project_build_o) $(painterengine_build_painterengine_o) \ - -O3 \ - -o $(target) \ - -I "$(painterengine_path)" \ - -I "$(project_path)" \ - -I "$(painterengine_path)/platform/webassembly" \ - --preload-file assets - emrun --no_browser --port 8080 PainterEngine.html - - -$(project_path)/%.o:$(project_path)/%.c - emcc -c $^ -o $@ -I "$(painterengine_path)" -I "$(painterengine_path)/platform/webassembly" - -$(painterengine_path)/architecture/%.o:$(painterengine_path)/architecture/%.c - emcc -c $^ -o $@ -I "$(painterengine_path)" - -$(painterengine_path)/kernel/%.o:$(painterengine_path)/kernel/%.c - emcc -c $^ -o $@ - -$(painterengine_path)/core/%.o:$(painterengine_path)/core/%.c - emcc -c $^ -o $@ - -$(painterengine_path)/platform/webassembly/%.o:$(painterengine_path)/platform/webassembly/%.c - emcc -c $^ -o $@ -I "$(project_path)" -I "$(painterengine_path)" -I "$(painterengine_path)/platform/webassembly" - -.PHONY:clean -clean: - -del /s "$(painterengine_path)\core\*.o" - -del /s "$(painterengine_path)\kernel\*.o" - -del /s "$(painterengine_path)\architecture\*.o" - -del /s "$(painterengine_path)\platform\webassembly\*.o" - -del /s "$(project_path)\*.o" diff --git a/UI/PainterEngine/platform/webassembly/px_audio.c b/UI/PainterEngine/platform/webassembly/px_audio.c deleted file mode 100644 index d36ae36..0000000 --- a/UI/PainterEngine/platform/webassembly/px_audio.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "../modules/px_audio.h" -#include -#include -static PX_SoundPlay *SDL_SoundPlay; -static unsigned int SDL_volume=SDL_MIX_MAXVOLUME; -static void pcm_play_callback(void *ptr,Uint8 *out,int require_len) -{ - if (SDL_SoundPlay) - { - PX_SoundPlayRead(SDL_SoundPlay,out,require_len); - } - else - { - memset(out,0,require_len); - } -} - - -px_bool PX_AudioInitialize(PX_SoundPlay *soundPlay) -{ - SDL_AudioSpec wanted_spec; - SDL_SoundPlay=soundPlay; - - wanted_spec.freq = 44100; - wanted_spec.format = AUDIO_S16SYS; - wanted_spec.channels = 2; - wanted_spec.silence = 0; - wanted_spec.samples = 2048; - wanted_spec.callback = pcm_play_callback; - - if (SDL_OpenAudio(&wanted_spec, NULL)<0){ - return PX_FALSE; - } - - //Play - SDL_PauseAudio(0); - return PX_TRUE; -} - -void PX_AudioSetVolume(unsigned int volume) -{ - //invalid function - SDL_volume=volume; -} \ No newline at end of file diff --git a/UI/PainterEngine/platform/webassembly/px_file.c b/UI/PainterEngine/platform/webassembly/px_file.c deleted file mode 100644 index 46f55d5..0000000 --- a/UI/PainterEngine/platform/webassembly/px_file.c +++ /dev/null @@ -1,311 +0,0 @@ - -#include "../modules/px_file.h" -#include "stdio.h" -#include "stdlib.h" -#include "string.h" -#include -#include "dirent.h" - -int PX_SaveDataToFile(void *buffer, int size, const char path[]) -{ - FILE *pf=fopen(path, "rb"); - if (pf) - { - fwrite(buffer, 1, size, pf); - fclose(pf); - return 1; - } - return 0; -} - - -PX_IO_Data PX_LoadFileToIOData(const char path[]) -{ - - PX_IO_Data io; - int fileoft=0; - FILE *pf=fopen(path, "rb"); - int filesize; - if (!pf) - { - goto _ERROR; - } - fseek(pf, 0, SEEK_END); - filesize=ftell(pf); - fseek(pf, 0, SEEK_SET); - - io.buffer=(unsigned char *)malloc(filesize+1); - if (!io.buffer) - { - goto _ERROR; - } - - while (!feof(pf)) - { - fileoft += (int)fread(io.buffer+fileoft, 1, 1024, pf); - } - fclose(pf); - - io.buffer[filesize]='\0'; - io.size=filesize; - return io; - _ERROR: - io.buffer=0; - io.size=0; - return io; -} - -void PX_FreeIOData(PX_IO_Data *io) -{ - if (io->size&&io->buffer) - { - free(io->buffer); - io->size=0; - io->buffer=0; - } -} - -int PX_FileExist(const char path[]) -{ - FILE *pf= fopen(path, "rb"); - if (pf) - { - fclose(pf); - return 1; - } - return 0; -} - - - - -int PX_GetDirectoryFileCount(const char path[], PX_FILEENUM_TYPE type, const char *filter) -{ - struct dirent* ent = NULL; - int count=0; - DIR *pDir; - - if( (pDir=opendir(path)) == NULL) - { - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - switch (type) - { - case PX_FILEENUM_TYPE_ANY: - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - count++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - count++; - } - } - break; - case PX_FILEENUM_TYPE_FILE: - { - if (ent->d_type == DT_REG) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - count++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - case PX_FILEENUM_TYPE_FOLDER: - { - if (ent->d_type == DT_DIR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - count++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - count++; - } - } - } - break; - case PX_FILEENUM_TYPE_DEVICE: - { - if (ent->d_type == DT_CHR) - { - if (filter&&filter[0]) - { - if (strstr(ent->d_name, filter)) - { - count++; - } - } else - { - count++; - } - } - } - break; - default: - break; - } - } - closedir(pDir); - return count; -} - -int PX_GetDirectoryFileName(const char path[], int count, char *FileName[260], PX_FILEENUM_TYPE type, const char *filter) -{ - struct dirent* ent = NULL; - int index=0; - DIR *pDir; - - if( (pDir=opendir(path)) == NULL) - { - return 0; - } - - while( (ent=readdir(pDir)) != NULL ) - { - if (index>=count) - { - return index; - } - - switch (type) - { - case PX_FILEENUM_TYPE_ANY: - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - strcpy(FileName[index], ent->d_name); - index++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index], ent->d_name); - index++; - } - } - break; - case PX_FILEENUM_TYPE_FILE: - { - if (ent->d_type == DT_REG) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - strcpy(FileName[index], ent->d_name); - index++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index], ent->d_name); - index++; - } - } - } - break; - case PX_FILEENUM_TYPE_FOLDER: - { - if (ent->d_type == DT_DIR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - strcpy(FileName[index], ent->d_name); - index++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index], ent->d_name); - index++; - } - } - } - break; - case PX_FILEENUM_TYPE_DEVICE: - { - if (ent->d_type == DT_CHR) - { - if (filter&&filter[0]) - { - const char *pFilter=filter; - while (pFilter[0]) - { - if (strstr(ent->d_name, pFilter)) - { - strcpy(FileName[index], ent->d_name); - index++; - break; - } - pFilter += strlen(pFilter)+1; - } - } else - { - strcpy(FileName[index], ent->d_name); - index++; - } - } - } - break; - default: - break; - } - } - closedir(pDir); - return index; -} diff --git a/UI/PainterEngine/platform/webassembly/px_tcp.c b/UI/PainterEngine/platform/webassembly/px_tcp.c deleted file mode 100644 index 0c1faad..0000000 --- a/UI/PainterEngine/platform/webassembly/px_tcp.c +++ /dev/null @@ -1,149 +0,0 @@ - -#include "../modules/px_tcp.h" -//GNU C -#include -#include -#include -#include -#include -#include -#include -#include - -int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type) -{ - int err; - int nZero=0; - int nRecvBuf=1024*1024*2; - int nSendBuf=1024*1024*2; - int optval=1; - int imode=1,rev; - tcp->type=type; - - if ((tcp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_TCP))==-1) - { - err = errno; - return 0; - } - - rev=ioctl(tcp->socket,FIONBIO,(u_long *)&imode); - setsockopt(tcp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); - setsockopt(tcp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); - - if(rev == -1) - { - close(tcp->socket); - return 0; - } - - return 1; -} - -int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr) -{ - struct sockaddr_in to; - int ret; - to.sin_family=AF_INET; - to.sin_addr.s_addr=addr.ipv4; - to.sin_port=(addr.port); - - ret=connect(tcp->socket,(const struct sockaddr *)&to,sizeof(to)); - if (ret==0) - { - tcp->connectAddr=addr; - } - return ret; -} - -int PX_TCPSend(PX_TCP *tcp,void *buffer,int size) -{ - int length; - switch(tcp->type) - { - case PX_TCP_IP_TYPE_IPV4: - { - while(size>0) - { - if ((length=send(tcp->socket,(const char *)buffer,size,0))==-1) - { - return 0; - } - size-=length; - } - return 1; - } - break; - case PX_TCP_IP_TYPE_IPV6: - { - return 0; - } - break; - } - return 0; -} - -int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout) -{ - size_t ReturnSize; - struct timeval stimeout= {0,timeout*1000}; - setsockopt(tcp->socket,SOL_SOCKET,SO_SNDTIMEO,(int *)&stimeout,sizeof(struct timeval)); - - switch (tcp->type) - { - case PX_TCP_IP_TYPE_IPV4: - { - int SockAddrSize=sizeof(struct sockaddr_in); - if((ReturnSize=recv(tcp->socket,(char *)buffer,buffersize,0))!=-1) - { - return ReturnSize;; - } - else - return 0; - } - break; - case PX_TCP_IP_TYPE_IPV6: - { - return 0; - } - break; - } - return 0; -} - -int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr) -{ - struct sockaddr sockaddr; - int len; - *socket=accept(tcp->socket,(struct sockaddr *)&sockaddr,(socklen_t *)&len); - return *socket!=-1; -} - - -void PX_TCPFree(PX_TCP *tcp) -{ - close(tcp->socket); -} - - -int PX_TCPListen(PX_TCP *tcp,unsigned short listen_Port) -{ - struct sockaddr_in addrin; - addrin.sin_family=AF_INET; - addrin.sin_addr.s_addr=INADDR_ANY; - addrin.sin_port=(listen_Port); - - if (bind(tcp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) - { - close(tcp->socket); - return 0; - } - return 1; -} - -PX_TCP_ADDR PX_TCP_ADDR_IPV4(unsigned int ipv4,unsigned short port) -{ - PX_TCP_ADDR addr; - addr.ipv4=ipv4; - addr.port=port; - return addr; -} diff --git a/UI/PainterEngine/platform/webassembly/px_thread.c b/UI/PainterEngine/platform/webassembly/px_thread.c deleted file mode 100644 index 4e4be7c..0000000 --- a/UI/PainterEngine/platform/webassembly/px_thread.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "../modules/px_thread.h" -#include -#include - -void *PX_ThreadRun(void *ptr) -{ - px_thread *pthread=(px_thread *)ptr; - pthread->isRun=1; - pthread->pfunc(pthread->userptr); - pthread->isRun=0; - return 0; -} - - -int PX_ThreadCreate(px_thread *pthread,func_thread func,void *ptr) -{ - pthread_t t; - return pthread_create( &t, NULL, PX_ThreadRun, pthread)==0; -} diff --git a/UI/PainterEngine/platform/webassembly/px_time.c b/UI/PainterEngine/platform/webassembly/px_time.c deleted file mode 100644 index 3bb2fed..0000000 --- a/UI/PainterEngine/platform/webassembly/px_time.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "../modules/px_time.h" -#include "time.h" -#include -unsigned int PX_TimeGetTime() -{ - unsigned int uptime = 0; - struct timespec on; - if(clock_gettime(CLOCK_MONOTONIC, &on) == 0) - uptime = on.tv_sec*1000 + on.tv_nsec/1000000; - return uptime; -} - -int PX_TimeGetYear() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_year; -} - -int PX_TimeGetMouth() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_year; -} - -int PX_TimeGetDay() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_mon; -} - -int PX_TimeGetHour() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_hour; -} - -int PX_TimeGetMinute() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_min; -} - -int PX_TimeGetSecond() -{ - time_t timep; - struct tm *p; - time (&timep); - p=gmtime(&timep); - - return 1900+p->tm_sec; -} - -void PX_Sleep(unsigned int ms) -{ - usleep(ms*1000); -} - diff --git a/UI/PainterEngine/platform/webassembly/px_udp.c b/UI/PainterEngine/platform/webassembly/px_udp.c deleted file mode 100644 index d95471b..0000000 --- a/UI/PainterEngine/platform/webassembly/px_udp.c +++ /dev/null @@ -1,157 +0,0 @@ - -#include "../modules/px_udp.h" -//GNU C -#include -#include -#include -#include -#include -#include -#include -#include - -int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type) -{ - int err; - int nZero=0; - int nRecvBuf=1024*1024*2; - int nSendBuf=1024*1024*2; - int optval=1; - int imode=1,rev; - udp->type=type; - - if ((udp->socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) - { - err = errno; - return 0; - } - - rev=ioctl(udp->socket,FIONBIO,(u_long *)&imode); - setsockopt(udp->socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); - setsockopt(udp->socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); - - if(rev == -1) - { - close(udp->socket); - return 0; - } - - if (setsockopt(udp->socket,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(int))==-1) - { - close(udp->socket); - return 0; - } - return 1; -} - -int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size) -{ - - int length; - switch(udp->type) - { - case PX_UDP_IP_TYPE_IPV4: - { - struct sockaddr_in to; - to.sin_family=AF_INET; - to.sin_addr.s_addr=addr.ipv4; - to.sin_port=(addr.port); - while(size>0) - { - if ((length=sendto(udp->socket,(const char *)buffer,size,0,(struct sockaddr *)&to,sizeof(struct sockaddr)))==-1) - { - return 0; - } - size-=length; - } - return 1; - } - break; - case PX_UDP_IP_TYPE_IPV6: - { -// sockaddr_in6 to; -// to.sin6_family=AF_INET6; -// to.sin6_port=htons(addr.port); -// px_memcpy(to.sin6_addr,addr.ipv6,sizeof(addr.ipv6)); -// while(size>0) -// { -// if ((length=sendto(udp->socket,(const char *)buffer,size,0,(LPSOCKADDR)&to,sizeof(sockaddr_in6)))==-1) -// { -// return 0; -// } -// size-=length; -// } -// return 1; - } - break; - } - return 0; -} - -int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize) -{ - size_t ReturnSize; - switch (udp->type) - { - case PX_UDP_IP_TYPE_IPV4: - { - struct sockaddr_in in; - socklen_t SockAddrSize=sizeof(struct sockaddr); - if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(struct sockaddr *)&in,&SockAddrSize))!=-1) - { - from_addr->ipv4=in.sin_addr.s_addr; - from_addr->port=in.sin_port; - *readsize=ReturnSize; - return 1; - } - else - return 0; - } - break; - case PX_UDP_IP_TYPE_IPV6: - { -// sockaddr_in6 in; -// int SockAddrSize=sizeof(SOCKADDR); -// if((ReturnSize=recvfrom(udp->socket,(char *)buffer,buffersize,0,(LPSOCKADDR)&in,&SockAddrSize))!=-1) -// { -// px_memcpy(from_addr->ipv6,in.sin6_addr,sizeof(from_addr->ipv6)); -// from_addr->port=in.sin_port; -// *readsize=ReturnSize; -// return 1; -// } -// else -// return 0; - } - break; - } - return 0; -} - -void PX_UDPFree(PX_UDP *udp) -{ - close(udp->socket); -} - - -int PX_UDPListen(PX_UDP *udp,unsigned short listen_Port) -{ - struct sockaddr_in addrin; - addrin.sin_family=AF_INET; - addrin.sin_addr.s_addr=INADDR_ANY; - addrin.sin_port=(listen_Port); - - if (bind(udp->socket,(struct sockaddr *)&addrin,sizeof(struct sockaddr))==-1) - { - close(udp->socket); - return 0; - } - return 1; -} - -PX_UDP_ADDR PX_UDP_ADDR_IPV4(unsigned int ipv4,unsigned short port) -{ - PX_UDP_ADDR addr; - addr.ipv4=ipv4; - addr.port=port; - return addr; -} diff --git a/UI/PainterEngine/platform/windows gdi/px_display.c b/UI/PainterEngine/platform/windows gdi/px_display.c deleted file mode 100644 index bd7f6d1..0000000 --- a/UI/PainterEngine/platform/windows gdi/px_display.c +++ /dev/null @@ -1,129 +0,0 @@ -#include "px_display.h" -#pragma comment(lib,"Msimg32.lib") -static HWND g_hwng; -static HDC g_targetDC; -static HDC g_compatibleDC; -static int g_width,g_height; - -int PX_DisplayInitialize(HWND hwdn, int width, int height) -{ - g_hwng = hwdn; - g_width = width; - g_height = height; - g_targetDC = GetDC(hwdn); - if (!g_targetDC) - { - goto _ERROR; - } - g_compatibleDC = CreateCompatibleDC(g_targetDC); - if (!g_compatibleDC) - { - goto _ERROR; - } - - return 1; -_ERROR: - if (g_targetDC) ReleaseDC(g_hwng,g_targetDC); - if (g_compatibleDC) ReleaseDC(g_hwng,g_compatibleDC); - g_targetDC = 0; - g_compatibleDC = 0; - return 0; -} - -void PX_DisplayRender(void* bgra,int oftx,int ofty) -{ - typedef struct - { - unsigned char r, g, b, a; - }s_color; - - typedef struct - { - unsigned char b, g, r, a; - }d_color; - - BITMAPINFO bmi; - HBITMAP hbitmap=0; - void* prgbdata; - s_color* pclr = (s_color *)bgra; - d_color* pwclr; - int x, y; - - - - - ZeroMemory(&bmi, sizeof(BITMAPINFO)); - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biBitCount = 32; - bmi.bmiHeader.biHeight = g_height; - bmi.bmiHeader.biWidth = g_width; - bmi.bmiHeader.biPlanes = 1; - - hbitmap = CreateDIBSection(NULL, &bmi, DIB_PAL_COLORS,&prgbdata, NULL, 0); - pwclr = (d_color*)prgbdata; - - for (y = 0; y < g_height; y++) - for (x = 0; x < g_width; x++) - { - pwclr[x + g_width * (g_height - y-1)].a = pclr[x + g_width * y].a; - pwclr[x + g_width * (g_height - y-1)].r = pclr[x + g_width * y].r; - pwclr[x + g_width * (g_height - y-1)].g = pclr[x + g_width * y].g; - pwclr[x + g_width * (g_height - y-1)].b = pclr[x + g_width * y].b; - } - - if (hbitmap) - { - RECT rect; - rect.left = oftx; - rect.right = oftx+ g_width; - rect.top = ofty; - rect.bottom = ofty+g_height; - SelectObject(g_compatibleDC, hbitmap); - BitBlt(g_targetDC, oftx, ofty, g_width, g_height, g_compatibleDC, 0, 0, SRCCOPY); - DeleteObject(hbitmap); - } -} - -void* PX_DisplayCaptureScreenBitmap(int *outSize) -{ - void *buffer; - BITMAPINFO bitmapInfo = { 0 }; - BITMAPFILEHEADER* pHeader; - HDC desktopDC = GetDC(g_hwng); - HDC comHDC = CreateCompatibleDC(desktopDC); - int screenWidth = GetSystemMetrics(SM_CXSCREEN); - int screenHeight = GetSystemMetrics(SM_CYSCREEN); - HBITMAP hBitmap = CreateCompatibleBitmap(desktopDC, screenWidth, screenHeight); - SelectObject(comHDC, hBitmap); - if (!BitBlt(comHDC, 0, 0, screenWidth, screenHeight, desktopDC, 0, 0, SRCCOPY)) - { - *outSize = 0; - return NULL; - } - bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - GetDIBits(comHDC, hBitmap, 0, screenHeight, NULL, &bitmapInfo, DIB_RGB_COLORS); - buffer = malloc(bitmapInfo.bmiHeader.biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO)); - if (!buffer) - { - *outSize = 0; - return NULL; - } - pHeader = (BITMAPFILEHEADER*)buffer; - ZeroMemory(pHeader, sizeof(BITMAPFILEHEADER)); - pHeader->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); - pHeader->bfType = 0x4D42; - pHeader->bfSize = bitmapInfo.bmiHeader.biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO); - - memcpy((BYTE *)buffer + sizeof(BITMAPFILEHEADER), &bitmapInfo.bmiHeader, sizeof(BITMAPINFO)); - bitmapInfo.bmiHeader.biCompression = BI_RGB; - GetDIBits(comHDC, hBitmap, 0, screenHeight, (BYTE*)buffer + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO), &bitmapInfo, DIB_RGB_COLORS); - - DeleteObject(hBitmap); - ReleaseDC(NULL,desktopDC); - DeleteDC(comHDC); - - * outSize = (bitmapInfo.bmiHeader.biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO)); - return buffer; -} - - diff --git a/UI/PainterEngine/platform/windows gdi/px_display.h b/UI/PainterEngine/platform/windows gdi/px_display.h deleted file mode 100644 index 2f68b3c..0000000 --- a/UI/PainterEngine/platform/windows gdi/px_display.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef PX_DISPLAY_H -#define PX_DISPLAY_H -#include "windows.h" - -int PX_DisplayInitialize(HWND hwdn, int width, int height); -void PX_DisplayRender(void* bgra,int x,int y); -void* PX_DisplayCaptureScreenBitmap(int* outSize); -#endif \ No newline at end of file diff --git a/UI/PainterEngine/architecture/PainterEngine_Console.c b/UI/architecture/PainterEngine_Console.c similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_Console.c rename to UI/architecture/PainterEngine_Console.c diff --git a/UI/PainterEngine/architecture/PainterEngine_Console.h b/UI/architecture/PainterEngine_Console.h similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_Console.h rename to UI/architecture/PainterEngine_Console.h diff --git a/UI/PainterEngine/architecture/PainterEngine_Designer.c b/UI/architecture/PainterEngine_Designer.c similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_Designer.c rename to UI/architecture/PainterEngine_Designer.c diff --git a/UI/PainterEngine/architecture/PainterEngine_Designer.h b/UI/architecture/PainterEngine_Designer.h similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_Designer.h rename to UI/architecture/PainterEngine_Designer.h diff --git a/UI/PainterEngine/architecture/PainterEngine_Executer.c b/UI/architecture/PainterEngine_Executer.c similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_Executer.c rename to UI/architecture/PainterEngine_Executer.c diff --git a/UI/PainterEngine/architecture/PainterEngine_Executer.h b/UI/architecture/PainterEngine_Executer.h similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_Executer.h rename to UI/architecture/PainterEngine_Executer.h diff --git a/UI/PainterEngine/architecture/PainterEngine_FoxLogo.h b/UI/architecture/PainterEngine_FoxLogo.h similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_FoxLogo.h rename to UI/architecture/PainterEngine_FoxLogo.h diff --git a/UI/PainterEngine/architecture/PainterEngine_Runtime.c b/UI/architecture/PainterEngine_Runtime.c similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_Runtime.c rename to UI/architecture/PainterEngine_Runtime.c diff --git a/UI/PainterEngine/architecture/PainterEngine_Runtime.h b/UI/architecture/PainterEngine_Runtime.h similarity index 100% rename from UI/PainterEngine/architecture/PainterEngine_Runtime.h rename to UI/architecture/PainterEngine_Runtime.h diff --git a/UI/PainterEngine/core/PX_3D.c b/UI/core/PX_3D.c similarity index 100% rename from UI/PainterEngine/core/PX_3D.c rename to UI/core/PX_3D.c diff --git a/UI/PainterEngine/core/PX_3D.h b/UI/core/PX_3D.h similarity index 100% rename from UI/PainterEngine/core/PX_3D.h rename to UI/core/PX_3D.h diff --git a/UI/PainterEngine/core/PX_AES.c b/UI/core/PX_AES.c similarity index 100% rename from UI/PainterEngine/core/PX_AES.c rename to UI/core/PX_AES.c diff --git a/UI/PainterEngine/core/PX_AES.h b/UI/core/PX_AES.h similarity index 100% rename from UI/PainterEngine/core/PX_AES.h rename to UI/core/PX_AES.h diff --git a/UI/PainterEngine/core/PX_ANN.c b/UI/core/PX_ANN.c similarity index 100% rename from UI/PainterEngine/core/PX_ANN.c rename to UI/core/PX_ANN.c diff --git a/UI/PainterEngine/core/PX_ANN.h b/UI/core/PX_ANN.h similarity index 100% rename from UI/PainterEngine/core/PX_ANN.h rename to UI/core/PX_ANN.h diff --git a/UI/PainterEngine/core/PX_Arle.c b/UI/core/PX_Arle.c similarity index 100% rename from UI/PainterEngine/core/PX_Arle.c rename to UI/core/PX_Arle.c diff --git a/UI/PainterEngine/core/PX_Arle.h b/UI/core/PX_Arle.h similarity index 100% rename from UI/PainterEngine/core/PX_Arle.h rename to UI/core/PX_Arle.h diff --git a/UI/PainterEngine/core/PX_Base64.c b/UI/core/PX_Base64.c similarity index 100% rename from UI/PainterEngine/core/PX_Base64.c rename to UI/core/PX_Base64.c diff --git a/UI/PainterEngine/core/PX_Base64.h b/UI/core/PX_Base64.h similarity index 100% rename from UI/PainterEngine/core/PX_Base64.h rename to UI/core/PX_Base64.h diff --git a/UI/PainterEngine/core/PX_BaseGeo.c b/UI/core/PX_BaseGeo.c similarity index 100% rename from UI/PainterEngine/core/PX_BaseGeo.c rename to UI/core/PX_BaseGeo.c diff --git a/UI/PainterEngine/core/PX_BaseGeo.h b/UI/core/PX_BaseGeo.h similarity index 100% rename from UI/PainterEngine/core/PX_BaseGeo.h rename to UI/core/PX_BaseGeo.h diff --git a/UI/PainterEngine/core/PX_Bitmap.c b/UI/core/PX_Bitmap.c similarity index 100% rename from UI/PainterEngine/core/PX_Bitmap.c rename to UI/core/PX_Bitmap.c diff --git a/UI/PainterEngine/core/PX_Bitmap.h b/UI/core/PX_Bitmap.h similarity index 100% rename from UI/PainterEngine/core/PX_Bitmap.h rename to UI/core/PX_Bitmap.h diff --git a/UI/PainterEngine/core/PX_Core.h b/UI/core/PX_Core.h similarity index 100% rename from UI/PainterEngine/core/PX_Core.h rename to UI/core/PX_Core.h diff --git a/UI/PainterEngine/core/PX_Delaunay.c b/UI/core/PX_Delaunay.c similarity index 100% rename from UI/PainterEngine/core/PX_Delaunay.c rename to UI/core/PX_Delaunay.c diff --git a/UI/PainterEngine/core/PX_Delaunay.h b/UI/core/PX_Delaunay.h similarity index 100% rename from UI/PainterEngine/core/PX_Delaunay.h rename to UI/core/PX_Delaunay.h diff --git a/UI/PainterEngine/core/PX_Effect.c b/UI/core/PX_Effect.c similarity index 100% rename from UI/PainterEngine/core/PX_Effect.c rename to UI/core/PX_Effect.c diff --git a/UI/PainterEngine/core/PX_Effect.h b/UI/core/PX_Effect.h similarity index 100% rename from UI/PainterEngine/core/PX_Effect.h rename to UI/core/PX_Effect.h diff --git a/UI/PainterEngine/core/PX_Font.c b/UI/core/PX_Font.c similarity index 100% rename from UI/PainterEngine/core/PX_Font.c rename to UI/core/PX_Font.c diff --git a/UI/PainterEngine/core/PX_Font.h b/UI/core/PX_Font.h similarity index 100% rename from UI/PainterEngine/core/PX_Font.h rename to UI/core/PX_Font.h diff --git a/UI/PainterEngine/core/PX_Hashmap.c b/UI/core/PX_Hashmap.c similarity index 100% rename from UI/PainterEngine/core/PX_Hashmap.c rename to UI/core/PX_Hashmap.c diff --git a/UI/PainterEngine/core/PX_Hashmap.h b/UI/core/PX_Hashmap.h similarity index 100% rename from UI/PainterEngine/core/PX_Hashmap.h rename to UI/core/PX_Hashmap.h diff --git a/UI/PainterEngine/core/PX_Huffman.c b/UI/core/PX_Huffman.c similarity index 100% rename from UI/PainterEngine/core/PX_Huffman.c rename to UI/core/PX_Huffman.c diff --git a/UI/PainterEngine/core/PX_Huffman.h b/UI/core/PX_Huffman.h similarity index 100% rename from UI/PainterEngine/core/PX_Huffman.h rename to UI/core/PX_Huffman.h diff --git a/UI/PainterEngine/core/PX_ImageFilter.c b/UI/core/PX_ImageFilter.c similarity index 100% rename from UI/PainterEngine/core/PX_ImageFilter.c rename to UI/core/PX_ImageFilter.c diff --git a/UI/PainterEngine/core/PX_ImageFilter.h b/UI/core/PX_ImageFilter.h similarity index 100% rename from UI/PainterEngine/core/PX_ImageFilter.h rename to UI/core/PX_ImageFilter.h diff --git a/UI/PainterEngine/core/PX_KalmanFilter.c b/UI/core/PX_KalmanFilter.c similarity index 100% rename from UI/PainterEngine/core/PX_KalmanFilter.c rename to UI/core/PX_KalmanFilter.c diff --git a/UI/PainterEngine/core/PX_KalmanFilter.h b/UI/core/PX_KalmanFilter.h similarity index 100% rename from UI/PainterEngine/core/PX_KalmanFilter.h rename to UI/core/PX_KalmanFilter.h diff --git a/UI/PainterEngine/core/PX_Linker.c b/UI/core/PX_Linker.c similarity index 100% rename from UI/PainterEngine/core/PX_Linker.c rename to UI/core/PX_Linker.c diff --git a/UI/PainterEngine/core/PX_Linker.h b/UI/core/PX_Linker.h similarity index 100% rename from UI/PainterEngine/core/PX_Linker.h rename to UI/core/PX_Linker.h diff --git a/UI/PainterEngine/core/PX_List.c b/UI/core/PX_List.c similarity index 100% rename from UI/PainterEngine/core/PX_List.c rename to UI/core/PX_List.c diff --git a/UI/PainterEngine/core/PX_List.h b/UI/core/PX_List.h similarity index 100% rename from UI/PainterEngine/core/PX_List.h rename to UI/core/PX_List.h diff --git a/UI/PainterEngine/core/PX_Log.c b/UI/core/PX_Log.c similarity index 100% rename from UI/PainterEngine/core/PX_Log.c rename to UI/core/PX_Log.c diff --git a/UI/PainterEngine/core/PX_Log.h b/UI/core/PX_Log.h similarity index 100% rename from UI/PainterEngine/core/PX_Log.h rename to UI/core/PX_Log.h diff --git a/UI/PainterEngine/core/PX_MFCC.c b/UI/core/PX_MFCC.c similarity index 100% rename from UI/PainterEngine/core/PX_MFCC.c rename to UI/core/PX_MFCC.c diff --git a/UI/PainterEngine/core/PX_MFCC.h b/UI/core/PX_MFCC.h similarity index 100% rename from UI/PainterEngine/core/PX_MFCC.h rename to UI/core/PX_MFCC.h diff --git a/UI/PainterEngine/core/PX_MathTable.h b/UI/core/PX_MathTable.h similarity index 100% rename from UI/PainterEngine/core/PX_MathTable.h rename to UI/core/PX_MathTable.h diff --git a/UI/PainterEngine/core/PX_Memory.c b/UI/core/PX_Memory.c similarity index 100% rename from UI/PainterEngine/core/PX_Memory.c rename to UI/core/PX_Memory.c diff --git a/UI/PainterEngine/core/PX_Memory.h b/UI/core/PX_Memory.h similarity index 100% rename from UI/PainterEngine/core/PX_Memory.h rename to UI/core/PX_Memory.h diff --git a/UI/PainterEngine/core/PX_MemoryPool.c b/UI/core/PX_MemoryPool.c similarity index 100% rename from UI/PainterEngine/core/PX_MemoryPool.c rename to UI/core/PX_MemoryPool.c diff --git a/UI/PainterEngine/core/PX_MemoryPool.h b/UI/core/PX_MemoryPool.h similarity index 100% rename from UI/PainterEngine/core/PX_MemoryPool.h rename to UI/core/PX_MemoryPool.h diff --git a/UI/PainterEngine/core/PX_Packet.c b/UI/core/PX_Packet.c similarity index 100% rename from UI/PainterEngine/core/PX_Packet.c rename to UI/core/PX_Packet.c diff --git a/UI/PainterEngine/core/PX_Packet.h b/UI/core/PX_Packet.h similarity index 100% rename from UI/PainterEngine/core/PX_Packet.h rename to UI/core/PX_Packet.h diff --git a/UI/PainterEngine/core/PX_PointsMesh.c b/UI/core/PX_PointsMesh.c similarity index 100% rename from UI/PainterEngine/core/PX_PointsMesh.c rename to UI/core/PX_PointsMesh.c diff --git a/UI/PainterEngine/core/PX_PointsMesh.h b/UI/core/PX_PointsMesh.h similarity index 100% rename from UI/PainterEngine/core/PX_PointsMesh.h rename to UI/core/PX_PointsMesh.h diff --git a/UI/PainterEngine/core/PX_Quadtree.c b/UI/core/PX_Quadtree.c similarity index 100% rename from UI/PainterEngine/core/PX_Quadtree.c rename to UI/core/PX_Quadtree.c diff --git a/UI/PainterEngine/core/PX_Quadtree.h b/UI/core/PX_Quadtree.h similarity index 100% rename from UI/PainterEngine/core/PX_Quadtree.h rename to UI/core/PX_Quadtree.h diff --git a/UI/PainterEngine/core/PX_Quicksort.c b/UI/core/PX_Quicksort.c similarity index 100% rename from UI/PainterEngine/core/PX_Quicksort.c rename to UI/core/PX_Quicksort.c diff --git a/UI/PainterEngine/core/PX_Quicksort.h b/UI/core/PX_Quicksort.h similarity index 100% rename from UI/PainterEngine/core/PX_Quicksort.h rename to UI/core/PX_Quicksort.h diff --git a/UI/PainterEngine/core/PX_Sha256.c b/UI/core/PX_Sha256.c similarity index 100% rename from UI/PainterEngine/core/PX_Sha256.c rename to UI/core/PX_Sha256.c diff --git a/UI/PainterEngine/core/PX_Sha256.h b/UI/core/PX_Sha256.h similarity index 100% rename from UI/PainterEngine/core/PX_Sha256.h rename to UI/core/PX_Sha256.h diff --git a/UI/PainterEngine/core/PX_Sound.c b/UI/core/PX_Sound.c similarity index 100% rename from UI/PainterEngine/core/PX_Sound.c rename to UI/core/PX_Sound.c diff --git a/UI/PainterEngine/core/PX_Sound.h b/UI/core/PX_Sound.h similarity index 100% rename from UI/PainterEngine/core/PX_Sound.h rename to UI/core/PX_Sound.h diff --git a/UI/PainterEngine/core/PX_SoundModule.c b/UI/core/PX_SoundModule.c similarity index 100% rename from UI/PainterEngine/core/PX_SoundModule.c rename to UI/core/PX_SoundModule.c diff --git a/UI/PainterEngine/core/PX_SoundModule.h b/UI/core/PX_SoundModule.h similarity index 100% rename from UI/PainterEngine/core/PX_SoundModule.h rename to UI/core/PX_SoundModule.h diff --git a/UI/PainterEngine/core/PX_String.c b/UI/core/PX_String.c similarity index 100% rename from UI/PainterEngine/core/PX_String.c rename to UI/core/PX_String.c diff --git a/UI/PainterEngine/core/PX_String.h b/UI/core/PX_String.h similarity index 100% rename from UI/PainterEngine/core/PX_String.h rename to UI/core/PX_String.h diff --git a/UI/PainterEngine/core/PX_Surface.c b/UI/core/PX_Surface.c similarity index 100% rename from UI/PainterEngine/core/PX_Surface.c rename to UI/core/PX_Surface.c diff --git a/UI/PainterEngine/core/PX_Surface.h b/UI/core/PX_Surface.h similarity index 100% rename from UI/PainterEngine/core/PX_Surface.h rename to UI/core/PX_Surface.h diff --git a/UI/PainterEngine/core/PX_TRaw.c b/UI/core/PX_TRaw.c similarity index 100% rename from UI/PainterEngine/core/PX_TRaw.c rename to UI/core/PX_TRaw.c diff --git a/UI/PainterEngine/core/PX_TRaw.h b/UI/core/PX_TRaw.h similarity index 100% rename from UI/PainterEngine/core/PX_TRaw.h rename to UI/core/PX_TRaw.h diff --git a/UI/PainterEngine/core/PX_Texture.c b/UI/core/PX_Texture.c similarity index 100% rename from UI/PainterEngine/core/PX_Texture.c rename to UI/core/PX_Texture.c diff --git a/UI/PainterEngine/core/PX_Texture.h b/UI/core/PX_Texture.h similarity index 100% rename from UI/PainterEngine/core/PX_Texture.h rename to UI/core/PX_Texture.h diff --git a/UI/PainterEngine/core/PX_TriangleCross.c b/UI/core/PX_TriangleCross.c similarity index 100% rename from UI/PainterEngine/core/PX_TriangleCross.c rename to UI/core/PX_TriangleCross.c diff --git a/UI/PainterEngine/core/PX_Tuning.c b/UI/core/PX_Tuning.c similarity index 100% rename from UI/PainterEngine/core/PX_Tuning.c rename to UI/core/PX_Tuning.c diff --git a/UI/PainterEngine/core/PX_Tuning.h b/UI/core/PX_Tuning.h similarity index 100% rename from UI/PainterEngine/core/PX_Tuning.h rename to UI/core/PX_Tuning.h diff --git a/UI/PainterEngine/core/PX_Typedef.c b/UI/core/PX_Typedef.c similarity index 100% rename from UI/PainterEngine/core/PX_Typedef.c rename to UI/core/PX_Typedef.c diff --git a/UI/PainterEngine/core/PX_Typedef.h b/UI/core/PX_Typedef.h similarity index 100% rename from UI/PainterEngine/core/PX_Typedef.h rename to UI/core/PX_Typedef.h diff --git a/UI/PainterEngine/core/PX_Vector.c b/UI/core/PX_Vector.c similarity index 100% rename from UI/PainterEngine/core/PX_Vector.c rename to UI/core/PX_Vector.c diff --git a/UI/PainterEngine/core/PX_Vector.h b/UI/core/PX_Vector.h similarity index 100% rename from UI/PainterEngine/core/PX_Vector.h rename to UI/core/PX_Vector.h diff --git a/UI/PainterEngine/core/PX_Wave.c b/UI/core/PX_Wave.c similarity index 100% rename from UI/PainterEngine/core/PX_Wave.c rename to UI/core/PX_Wave.c diff --git a/UI/PainterEngine/core/PX_Wave.h b/UI/core/PX_Wave.h similarity index 100% rename from UI/PainterEngine/core/PX_Wave.h rename to UI/core/PX_Wave.h diff --git a/UI/PainterEngine/core/PX_curve25519.c b/UI/core/PX_curve25519.c similarity index 100% rename from UI/PainterEngine/core/PX_curve25519.c rename to UI/core/PX_curve25519.c diff --git a/UI/PainterEngine/core/PX_curve25519.h b/UI/core/PX_curve25519.h similarity index 100% rename from UI/PainterEngine/core/PX_curve25519.h rename to UI/core/PX_curve25519.h diff --git a/UI/PainterEngine/core/PX_rbtree.c b/UI/core/PX_rbtree.c similarity index 100% rename from UI/PainterEngine/core/PX_rbtree.c rename to UI/core/PX_rbtree.c diff --git a/UI/PainterEngine/core/PX_rbtree.h b/UI/core/PX_rbtree.h similarity index 100% rename from UI/PainterEngine/core/PX_rbtree.h rename to UI/core/PX_rbtree.h diff --git a/UI/PainterEngine/kernel/PX_2dxCommon.h b/UI/kernel/PX_2dxCommon.h similarity index 100% rename from UI/PainterEngine/kernel/PX_2dxCommon.h rename to UI/kernel/PX_2dxCommon.h diff --git a/UI/PainterEngine/kernel/PX_3D_ObjData.c b/UI/kernel/PX_3D_ObjData.c similarity index 100% rename from UI/PainterEngine/kernel/PX_3D_ObjData.c rename to UI/kernel/PX_3D_ObjData.c diff --git a/UI/PainterEngine/kernel/PX_3D_ObjData.h b/UI/kernel/PX_3D_ObjData.h similarity index 100% rename from UI/PainterEngine/kernel/PX_3D_ObjData.h rename to UI/kernel/PX_3D_ObjData.h diff --git a/UI/PainterEngine/kernel/PX_Animation.c b/UI/kernel/PX_Animation.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Animation.c rename to UI/kernel/PX_Animation.c diff --git a/UI/PainterEngine/kernel/PX_Animation.h b/UI/kernel/PX_Animation.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Animation.h rename to UI/kernel/PX_Animation.h diff --git a/UI/PainterEngine/kernel/PX_Compiler.c b/UI/kernel/PX_Compiler.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Compiler.c rename to UI/kernel/PX_Compiler.c diff --git a/UI/PainterEngine/kernel/PX_Compiler.h b/UI/kernel/PX_Compiler.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Compiler.h rename to UI/kernel/PX_Compiler.h diff --git a/UI/PainterEngine/kernel/PX_Json.c b/UI/kernel/PX_Json.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Json.c rename to UI/kernel/PX_Json.c diff --git a/UI/PainterEngine/kernel/PX_Json.h b/UI/kernel/PX_Json.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Json.h rename to UI/kernel/PX_Json.h diff --git a/UI/PainterEngine/kernel/PX_Kernel.h b/UI/kernel/PX_Kernel.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Kernel.h rename to UI/kernel/PX_Kernel.h diff --git a/UI/PainterEngine/kernel/PX_Lexer.c b/UI/kernel/PX_Lexer.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Lexer.c rename to UI/kernel/PX_Lexer.c diff --git a/UI/PainterEngine/kernel/PX_Lexer.h b/UI/kernel/PX_Lexer.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Lexer.h rename to UI/kernel/PX_Lexer.h diff --git a/UI/PainterEngine/kernel/PX_LiveFramework.c b/UI/kernel/PX_LiveFramework.c similarity index 100% rename from UI/PainterEngine/kernel/PX_LiveFramework.c rename to UI/kernel/PX_LiveFramework.c diff --git a/UI/PainterEngine/kernel/PX_LiveFramework.h b/UI/kernel/PX_LiveFramework.h similarity index 100% rename from UI/PainterEngine/kernel/PX_LiveFramework.h rename to UI/kernel/PX_LiveFramework.h diff --git a/UI/PainterEngine/kernel/PX_MODBUS.c b/UI/kernel/PX_MODBUS.c similarity index 100% rename from UI/PainterEngine/kernel/PX_MODBUS.c rename to UI/kernel/PX_MODBUS.c diff --git a/UI/PainterEngine/kernel/PX_MODBUS.h b/UI/kernel/PX_MODBUS.h similarity index 100% rename from UI/PainterEngine/kernel/PX_MODBUS.h rename to UI/kernel/PX_MODBUS.h diff --git a/UI/PainterEngine/kernel/PX_MQTT.c b/UI/kernel/PX_MQTT.c similarity index 100% rename from UI/PainterEngine/kernel/PX_MQTT.c rename to UI/kernel/PX_MQTT.c diff --git a/UI/PainterEngine/kernel/PX_MQTT.h b/UI/kernel/PX_MQTT.h similarity index 100% rename from UI/PainterEngine/kernel/PX_MQTT.h rename to UI/kernel/PX_MQTT.h diff --git a/UI/PainterEngine/kernel/PX_Object.c b/UI/kernel/PX_Object.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object.c rename to UI/kernel/PX_Object.c diff --git a/UI/PainterEngine/kernel/PX_Object.h b/UI/kernel/PX_Object.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object.h rename to UI/kernel/PX_Object.h diff --git a/UI/PainterEngine/kernel/PX_Object_Animation.c b/UI/kernel/PX_Object_Animation.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Animation.c rename to UI/kernel/PX_Object_Animation.c diff --git a/UI/PainterEngine/kernel/PX_Object_Animation.h b/UI/kernel/PX_Object_Animation.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Animation.h rename to UI/kernel/PX_Object_Animation.h diff --git a/UI/PainterEngine/kernel/PX_Object_AutoText.c b/UI/kernel/PX_Object_AutoText.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_AutoText.c rename to UI/kernel/PX_Object_AutoText.c diff --git a/UI/PainterEngine/kernel/PX_Object_AutoText.h b/UI/kernel/PX_Object_AutoText.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_AutoText.h rename to UI/kernel/PX_Object_AutoText.h diff --git a/UI/PainterEngine/kernel/PX_Object_COMBox.c b/UI/kernel/PX_Object_COMBox.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_COMBox.c rename to UI/kernel/PX_Object_COMBox.c diff --git a/UI/PainterEngine/kernel/PX_Object_COMBox.h b/UI/kernel/PX_Object_COMBox.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_COMBox.h rename to UI/kernel/PX_Object_COMBox.h diff --git a/UI/PainterEngine/kernel/PX_Object_CheckBox.c b/UI/kernel/PX_Object_CheckBox.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_CheckBox.c rename to UI/kernel/PX_Object_CheckBox.c diff --git a/UI/PainterEngine/kernel/PX_Object_CheckBox.h b/UI/kernel/PX_Object_CheckBox.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_CheckBox.h rename to UI/kernel/PX_Object_CheckBox.h diff --git a/UI/PainterEngine/kernel/PX_Object_Coordinate.c b/UI/kernel/PX_Object_Coordinate.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Coordinate.c rename to UI/kernel/PX_Object_Coordinate.c diff --git a/UI/PainterEngine/kernel/PX_Object_Coordinate.h b/UI/kernel/PX_Object_Coordinate.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Coordinate.h rename to UI/kernel/PX_Object_Coordinate.h diff --git a/UI/PainterEngine/kernel/PX_Object_CursorButton.c b/UI/kernel/PX_Object_CursorButton.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_CursorButton.c rename to UI/kernel/PX_Object_CursorButton.c diff --git a/UI/PainterEngine/kernel/PX_Object_CursorButton.h b/UI/kernel/PX_Object_CursorButton.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_CursorButton.h rename to UI/kernel/PX_Object_CursorButton.h diff --git a/UI/PainterEngine/kernel/PX_Object_DesignerBox.c b/UI/kernel/PX_Object_DesignerBox.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_DesignerBox.c rename to UI/kernel/PX_Object_DesignerBox.c diff --git a/UI/PainterEngine/kernel/PX_Object_DesignerBox.h b/UI/kernel/PX_Object_DesignerBox.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_DesignerBox.h rename to UI/kernel/PX_Object_DesignerBox.h diff --git a/UI/PainterEngine/kernel/PX_Object_Edit.c b/UI/kernel/PX_Object_Edit.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Edit.c rename to UI/kernel/PX_Object_Edit.c diff --git a/UI/PainterEngine/kernel/PX_Object_Edit.h b/UI/kernel/PX_Object_Edit.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Edit.h rename to UI/kernel/PX_Object_Edit.h diff --git a/UI/PainterEngine/kernel/PX_Object_Explorer.c b/UI/kernel/PX_Object_Explorer.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Explorer.c rename to UI/kernel/PX_Object_Explorer.c diff --git a/UI/PainterEngine/kernel/PX_Object_Explorer.h b/UI/kernel/PX_Object_Explorer.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Explorer.h rename to UI/kernel/PX_Object_Explorer.h diff --git a/UI/PainterEngine/kernel/PX_Object_IPBox.c b/UI/kernel/PX_Object_IPBox.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_IPBox.c rename to UI/kernel/PX_Object_IPBox.c diff --git a/UI/PainterEngine/kernel/PX_Object_IPBox.h b/UI/kernel/PX_Object_IPBox.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_IPBox.h rename to UI/kernel/PX_Object_IPBox.h diff --git a/UI/PainterEngine/kernel/PX_Object_Image.c b/UI/kernel/PX_Object_Image.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Image.c rename to UI/kernel/PX_Object_Image.c diff --git a/UI/PainterEngine/kernel/PX_Object_Image.h b/UI/kernel/PX_Object_Image.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Image.h rename to UI/kernel/PX_Object_Image.h diff --git a/UI/PainterEngine/kernel/PX_Object_Joystick.c b/UI/kernel/PX_Object_Joystick.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Joystick.c rename to UI/kernel/PX_Object_Joystick.c diff --git a/UI/PainterEngine/kernel/PX_Object_Joystick.h b/UI/kernel/PX_Object_Joystick.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Joystick.h rename to UI/kernel/PX_Object_Joystick.h diff --git a/UI/PainterEngine/kernel/PX_Object_Label.c b/UI/kernel/PX_Object_Label.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Label.c rename to UI/kernel/PX_Object_Label.c diff --git a/UI/PainterEngine/kernel/PX_Object_Label.h b/UI/kernel/PX_Object_Label.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Label.h rename to UI/kernel/PX_Object_Label.h diff --git a/UI/PainterEngine/kernel/PX_Object_List.c b/UI/kernel/PX_Object_List.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_List.c rename to UI/kernel/PX_Object_List.c diff --git a/UI/PainterEngine/kernel/PX_Object_List.h b/UI/kernel/PX_Object_List.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_List.h rename to UI/kernel/PX_Object_List.h diff --git a/UI/PainterEngine/kernel/PX_Object_MemoryView.c b/UI/kernel/PX_Object_MemoryView.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_MemoryView.c rename to UI/kernel/PX_Object_MemoryView.c diff --git a/UI/PainterEngine/kernel/PX_Object_MemoryView.h b/UI/kernel/PX_Object_MemoryView.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_MemoryView.h rename to UI/kernel/PX_Object_MemoryView.h diff --git a/UI/PainterEngine/kernel/PX_Object_Menu.c b/UI/kernel/PX_Object_Menu.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Menu.c rename to UI/kernel/PX_Object_Menu.c diff --git a/UI/PainterEngine/kernel/PX_Object_Menu.h b/UI/kernel/PX_Object_Menu.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Menu.h rename to UI/kernel/PX_Object_Menu.h diff --git a/UI/PainterEngine/kernel/PX_Object_MessageBox.c b/UI/kernel/PX_Object_MessageBox.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_MessageBox.c rename to UI/kernel/PX_Object_MessageBox.c diff --git a/UI/PainterEngine/kernel/PX_Object_MessageBox.h b/UI/kernel/PX_Object_MessageBox.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_MessageBox.h rename to UI/kernel/PX_Object_MessageBox.h diff --git a/UI/PainterEngine/kernel/PX_Object_Panc.c b/UI/kernel/PX_Object_Panc.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Panc.c rename to UI/kernel/PX_Object_Panc.c diff --git a/UI/PainterEngine/kernel/PX_Object_Panc.h b/UI/kernel/PX_Object_Panc.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Panc.h rename to UI/kernel/PX_Object_Panc.h diff --git a/UI/PainterEngine/kernel/PX_Object_Processbar.c b/UI/kernel/PX_Object_Processbar.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Processbar.c rename to UI/kernel/PX_Object_Processbar.c diff --git a/UI/PainterEngine/kernel/PX_Object_Processbar.h b/UI/kernel/PX_Object_Processbar.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Processbar.h rename to UI/kernel/PX_Object_Processbar.h diff --git a/UI/PainterEngine/kernel/PX_Object_Protractor.c b/UI/kernel/PX_Object_Protractor.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Protractor.c rename to UI/kernel/PX_Object_Protractor.c diff --git a/UI/PainterEngine/kernel/PX_Object_Protractor.h b/UI/kernel/PX_Object_Protractor.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Protractor.h rename to UI/kernel/PX_Object_Protractor.h diff --git a/UI/PainterEngine/kernel/PX_Object_PushButton.c b/UI/kernel/PX_Object_PushButton.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_PushButton.c rename to UI/kernel/PX_Object_PushButton.c diff --git a/UI/PainterEngine/kernel/PX_Object_PushButton.h b/UI/kernel/PX_Object_PushButton.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_PushButton.h rename to UI/kernel/PX_Object_PushButton.h diff --git a/UI/PainterEngine/kernel/PX_Object_RadioBox.c b/UI/kernel/PX_Object_RadioBox.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_RadioBox.c rename to UI/kernel/PX_Object_RadioBox.c diff --git a/UI/PainterEngine/kernel/PX_Object_RadioBox.h b/UI/kernel/PX_Object_RadioBox.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_RadioBox.h rename to UI/kernel/PX_Object_RadioBox.h diff --git a/UI/PainterEngine/kernel/PX_Object_RingProcessbar.c b/UI/kernel/PX_Object_RingProcessbar.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_RingProcessbar.c rename to UI/kernel/PX_Object_RingProcessbar.c diff --git a/UI/PainterEngine/kernel/PX_Object_RingProcessbar.h b/UI/kernel/PX_Object_RingProcessbar.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_RingProcessbar.h rename to UI/kernel/PX_Object_RingProcessbar.h diff --git a/UI/PainterEngine/kernel/PX_Object_ScaleBox.c b/UI/kernel/PX_Object_ScaleBox.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_ScaleBox.c rename to UI/kernel/PX_Object_ScaleBox.c diff --git a/UI/PainterEngine/kernel/PX_Object_ScaleBox.h b/UI/kernel/PX_Object_ScaleBox.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_ScaleBox.h rename to UI/kernel/PX_Object_ScaleBox.h diff --git a/UI/PainterEngine/kernel/PX_Object_ScrollArea.c b/UI/kernel/PX_Object_ScrollArea.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_ScrollArea.c rename to UI/kernel/PX_Object_ScrollArea.c diff --git a/UI/PainterEngine/kernel/PX_Object_ScrollArea.h b/UI/kernel/PX_Object_ScrollArea.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_ScrollArea.h rename to UI/kernel/PX_Object_ScrollArea.h diff --git a/UI/PainterEngine/kernel/PX_Object_Selectbar.c b/UI/kernel/PX_Object_Selectbar.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Selectbar.c rename to UI/kernel/PX_Object_Selectbar.c diff --git a/UI/PainterEngine/kernel/PX_Object_Selectbar.h b/UI/kernel/PX_Object_Selectbar.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Selectbar.h rename to UI/kernel/PX_Object_Selectbar.h diff --git a/UI/PainterEngine/kernel/PX_Object_Sliderbar.c b/UI/kernel/PX_Object_Sliderbar.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Sliderbar.c rename to UI/kernel/PX_Object_Sliderbar.c diff --git a/UI/PainterEngine/kernel/PX_Object_Sliderbar.h b/UI/kernel/PX_Object_Sliderbar.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Sliderbar.h rename to UI/kernel/PX_Object_Sliderbar.h diff --git a/UI/PainterEngine/kernel/PX_Object_TransformAdapter.c b/UI/kernel/PX_Object_TransformAdapter.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_TransformAdapter.c rename to UI/kernel/PX_Object_TransformAdapter.c diff --git a/UI/PainterEngine/kernel/PX_Object_TransformAdapter.h b/UI/kernel/PX_Object_TransformAdapter.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_TransformAdapter.h rename to UI/kernel/PX_Object_TransformAdapter.h diff --git a/UI/PainterEngine/kernel/PX_Object_VarBox.c b/UI/kernel/PX_Object_VarBox.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_VarBox.c rename to UI/kernel/PX_Object_VarBox.c diff --git a/UI/PainterEngine/kernel/PX_Object_VarBox.h b/UI/kernel/PX_Object_VarBox.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_VarBox.h rename to UI/kernel/PX_Object_VarBox.h diff --git a/UI/PainterEngine/kernel/PX_Object_Various.c b/UI/kernel/PX_Object_Various.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Various.c rename to UI/kernel/PX_Object_Various.c diff --git a/UI/PainterEngine/kernel/PX_Object_Various.h b/UI/kernel/PX_Object_Various.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Various.h rename to UI/kernel/PX_Object_Various.h diff --git a/UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.c b/UI/kernel/PX_Object_VirtualKeyboard.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.c rename to UI/kernel/PX_Object_VirtualKeyboard.c diff --git a/UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.h b/UI/kernel/PX_Object_VirtualKeyboard.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_VirtualKeyboard.h rename to UI/kernel/PX_Object_VirtualKeyboard.h diff --git a/UI/PainterEngine/kernel/PX_Object_Widget.c b/UI/kernel/PX_Object_Widget.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Widget.c rename to UI/kernel/PX_Object_Widget.c diff --git a/UI/PainterEngine/kernel/PX_Object_Widget.h b/UI/kernel/PX_Object_Widget.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Object_Widget.h rename to UI/kernel/PX_Object_Widget.h diff --git a/UI/PainterEngine/kernel/PX_Partical.c b/UI/kernel/PX_Partical.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Partical.c rename to UI/kernel/PX_Partical.c diff --git a/UI/PainterEngine/kernel/PX_Partical.h b/UI/kernel/PX_Partical.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Partical.h rename to UI/kernel/PX_Partical.h diff --git a/UI/PainterEngine/kernel/PX_Resource.c b/UI/kernel/PX_Resource.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Resource.c rename to UI/kernel/PX_Resource.c diff --git a/UI/PainterEngine/kernel/PX_Resource.h b/UI/kernel/PX_Resource.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Resource.h rename to UI/kernel/PX_Resource.h diff --git a/UI/PainterEngine/kernel/PX_ScriptCore.h b/UI/kernel/PX_ScriptCore.h similarity index 100% rename from UI/PainterEngine/kernel/PX_ScriptCore.h rename to UI/kernel/PX_ScriptCore.h diff --git a/UI/PainterEngine/kernel/PX_Script_ASMCompiler.c b/UI/kernel/PX_Script_ASMCompiler.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Script_ASMCompiler.c rename to UI/kernel/PX_Script_ASMCompiler.c diff --git a/UI/PainterEngine/kernel/PX_Script_ASMCompiler.h b/UI/kernel/PX_Script_ASMCompiler.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Script_ASMCompiler.h rename to UI/kernel/PX_Script_ASMCompiler.h diff --git a/UI/PainterEngine/kernel/PX_Script_Interpreter.c b/UI/kernel/PX_Script_Interpreter.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Script_Interpreter.c rename to UI/kernel/PX_Script_Interpreter.c diff --git a/UI/PainterEngine/kernel/PX_Script_Interpreter.h b/UI/kernel/PX_Script_Interpreter.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Script_Interpreter.h rename to UI/kernel/PX_Script_Interpreter.h diff --git a/UI/PainterEngine/kernel/PX_Script_VM.c b/UI/kernel/PX_Script_VM.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Script_VM.c rename to UI/kernel/PX_Script_VM.c diff --git a/UI/PainterEngine/kernel/PX_Script_VM.h b/UI/kernel/PX_Script_VM.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Script_VM.h rename to UI/kernel/PX_Script_VM.h diff --git a/UI/PainterEngine/kernel/PX_Sync.c b/UI/kernel/PX_Sync.c similarity index 100% rename from UI/PainterEngine/kernel/PX_Sync.c rename to UI/kernel/PX_Sync.c diff --git a/UI/PainterEngine/kernel/PX_Sync.h b/UI/kernel/PX_Sync.h similarity index 100% rename from UI/PainterEngine/kernel/PX_Sync.h rename to UI/kernel/PX_Sync.h diff --git a/UI/PainterEngine/kernel/PX_UI.c b/UI/kernel/PX_UI.c similarity index 100% rename from UI/PainterEngine/kernel/PX_UI.c rename to UI/kernel/PX_UI.c diff --git a/UI/PainterEngine/kernel/PX_UI.h b/UI/kernel/PX_UI.h similarity index 100% rename from UI/PainterEngine/kernel/PX_UI.h rename to UI/kernel/PX_UI.h diff --git a/UI/PainterEngine/kernel/PX_World.c b/UI/kernel/PX_World.c similarity index 100% rename from UI/PainterEngine/kernel/PX_World.c rename to UI/kernel/PX_World.c diff --git a/UI/PainterEngine/kernel/PX_World.h b/UI/kernel/PX_World.h similarity index 100% rename from UI/PainterEngine/kernel/PX_World.h rename to UI/kernel/PX_World.h diff --git a/UI/PainterEngine/platform/windows/makefile b/UI/platform/windows/makefile similarity index 98% rename from UI/PainterEngine/platform/windows/makefile rename to UI/platform/windows/makefile index 34f83e6..fa51ab9 100644 --- a/UI/PainterEngine/platform/windows/makefile +++ b/UI/platform/windows/makefile @@ -30,9 +30,9 @@ all:$(project_build_o) $(painterengine_build_painterengine_o) -I "$(project_path)" \ -I "$(painterengine_path)\platform\windows" \ -L. -lwinmm -ld2d1 -lws2_32 -ldsound -lcomdlg32 - $(project_path)\$(target) make clean + $(project_path)/%.o:$(project_path)/%.c gcc -c $^ -o $@ -I "$(painterengine_path)" -I "$(painterengine_path)/platform/windows" diff --git a/UI/PainterEngine/platform/windows/mingw_build.bat b/UI/platform/windows/mingw_build.bat similarity index 100% rename from UI/PainterEngine/platform/windows/mingw_build.bat rename to UI/platform/windows/mingw_build.bat diff --git a/UI/PainterEngine/platform/windows/px_audio.cpp b/UI/platform/windows/px_audio.cpp similarity index 100% rename from UI/PainterEngine/platform/windows/px_audio.cpp rename to UI/platform/windows/px_audio.cpp diff --git a/UI/PainterEngine/platform/windows/px_display.cpp b/UI/platform/windows/px_display.cpp similarity index 100% rename from UI/PainterEngine/platform/windows/px_display.cpp rename to UI/platform/windows/px_display.cpp diff --git a/UI/PainterEngine/platform/windows/px_display.h b/UI/platform/windows/px_display.h similarity index 100% rename from UI/PainterEngine/platform/windows/px_display.h rename to UI/platform/windows/px_display.h diff --git a/UI/PainterEngine/platform/windows/px_file.c b/UI/platform/windows/px_file.c similarity index 100% rename from UI/PainterEngine/platform/windows/px_file.c rename to UI/platform/windows/px_file.c diff --git a/UI/PainterEngine/platform/windows/px_main.c b/UI/platform/windows/px_main.c similarity index 100% rename from UI/PainterEngine/platform/windows/px_main.c rename to UI/platform/windows/px_main.c diff --git a/UI/PainterEngine/platform/windows/px_serialport.c b/UI/platform/windows/px_serialport.c similarity index 100% rename from UI/PainterEngine/platform/windows/px_serialport.c rename to UI/platform/windows/px_serialport.c diff --git a/UI/PainterEngine/platform/windows/px_tcp.c b/UI/platform/windows/px_tcp.c similarity index 100% rename from UI/PainterEngine/platform/windows/px_tcp.c rename to UI/platform/windows/px_tcp.c diff --git a/UI/PainterEngine/platform/windows/px_thread.c b/UI/platform/windows/px_thread.c similarity index 100% rename from UI/PainterEngine/platform/windows/px_thread.c rename to UI/platform/windows/px_thread.c diff --git a/UI/PainterEngine/platform/windows/px_time.c b/UI/platform/windows/px_time.c similarity index 100% rename from UI/PainterEngine/platform/windows/px_time.c rename to UI/platform/windows/px_time.c diff --git a/UI/PainterEngine/platform/windows/px_udp.c b/UI/platform/windows/px_udp.c similarity index 100% rename from UI/PainterEngine/platform/windows/px_udp.c rename to UI/platform/windows/px_udp.c diff --git a/UI/PainterEngine/project/PainterEngine_Application.c b/UI/project/PainterEngine_Application.c similarity index 72% rename from UI/PainterEngine/project/PainterEngine_Application.c rename to UI/project/PainterEngine_Application.c index 60985c2..3b167ed 100644 --- a/UI/PainterEngine/project/PainterEngine_Application.c +++ b/UI/project/PainterEngine_Application.c @@ -3,9 +3,9 @@ #include #include #include -#include"../elsecode/include/map.h" -#include"../elsecode/include/mine_map.h" -#include"../elsecode/include/opt.h" +#include"../../../include/map.h" +#include"../../../include/mine_map.h" +#include"../../../include/opt.h" @@ -14,40 +14,40 @@ PX_Application App; -PX_Object* root = PX_NULL;// px룩 -PX_Object* cellbutton[10][10];//ʮСӵİť +PX_Object* root = PX_NULL;//��������� ��px���룩 +PX_Object* cellbutton[10][10];//������ʮ��С���ӵİ�ť -PX_Object* beginbutton;//ʼİťwelcome -PX_Object* rankingbutton;//аťwelcome -PX_Object* menubutton;//ҳIJ˵ +PX_Object* beginbutton;//��ʼ�İ�ť����welcome���� +PX_Object* rankingbutton;//���а�ť����welcome���� +PX_Object* menubutton;//��ҳ�IJ˵��� PX_Object* easymode; PX_Object* midmode; PX_Object* hardmode; -PX_Object* title;//ͼƬwelcome -px_texture titlepicture;//ͼƬwelcome -PX_Object* potatoboom;//ͼƬwelcome -px_texture potatoboompicture;//ͼƬwelcome -PX_Object* towelcomebutton;//ʼİťwelcome - -PX_Object* firstprize;//һͼƬrank -px_texture firstprizepicture;//һͼƬin rank -PX_Object* secondprize;//һͼƬrank -px_texture secondprizepicture;//һͼƬin rank -PX_Object* thirdprize;//һͼƬrank -px_texture thirdprizepicture;//һͼƬin rank -PX_Object* ranktitle;//һͼƬrank -px_texture ranktitlepicture;//һͼƬin rank - -px_shape flag;//ĵͼƬin game +PX_Object* title;//�����ͼƬ����welcome���� +px_texture titlepicture;//�����ͼƬ����welcome���� +PX_Object* potatoboom;//�����ͼƬ����welcome���� +px_texture potatoboompicture;//�����ͼƬ����welcome���� +PX_Object* towelcomebutton;//��ʼ�İ�ť����welcome���� + +PX_Object* firstprize;//��һ��ͼƬ����rank���� +px_texture firstprizepicture;//��һ��ͼƬ��in rank +PX_Object* secondprize;//��һ��ͼƬ����rank���� +px_texture secondprizepicture;//��һ��ͼƬ��in rank +PX_Object* thirdprize;//��һ��ͼƬ����rank���� +px_texture thirdprizepicture;//��һ��ͼƬ��in rank +PX_Object* ranktitle;//��һ��ͼƬ����rank���� +px_texture ranktitlepicture;//��һ��ͼƬ��in rank + +px_shape flag;//���ĵ�ͼƬ��in game px_shape mine; opt_t cell[100][100]; map* Map=NULL; int mode=3; -/// +///�������� void WELCOME(); void RANK(); void Gameinit(); @@ -62,19 +62,19 @@ map* Setmine(int mode); ///////////////////////////////////////////////////////////// -// +//�������������� /* px_float PX_Object_Event_GetCursorX(PX_Object_Event e); px_float PX_Object_Event_GetCursorY(PX_Object_Event e); -px_void(*ProcessFunc)(PX_Object*, PX_Object_Event e, px_void* ptr);///Ҽʱ· +px_void(*ProcessFunc)(PX_Object*, PX_Object_Event e, px_void* ptr);//�����/�Ҽ�ʱ�����·����� */ ///////////////////////////////////////////////////// -//Ϸڽе +//��Ϸ���ڽ��е���� @@ -96,30 +96,30 @@ px_void(*ProcessFunc)(PX_Object*, PX_Object_Event e, px_void* ptr);// void Gameinit() { - ///任ɾԭҳobjectPainterengine provide)/// -//ɾ֮ǰİť + ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// +//ɾ��֮ǰ�İ�ť������� if (root){ PX_ObjectDelete(root); } - //´ + //���´��������� root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///任ɾԭҳobjectPainterengine provide)/// -//ʼmap + ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// +//��ʼ��map map* p = Setmine(mode); Map = p; - //cellbutton + //����cellbutton printf("debug"); for (int i = 1; i <= Map->mx; i++) { for (int j = 1; j <= Map->my; j++) { cell[j][i].y = i; - cell[j][i].x = j;//ji xy + cell[j][i].x = j;//j��i�� x��y cellbutton[j][i] = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, i * 51-51, j * 51-51, 47, 47, " ", PX_NULL); PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_EXECUTE, Lclickcell, &cell[j][i]); PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); - //ɽcellbutton + //���ɽ���cellbutton } }printf("debug"); } @@ -139,19 +139,19 @@ void Gamenow() { PX_ObjectDelete(root); } - //´ + //���´��������� root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///任ɾԭҳobjectPainterengine provide)/// + ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// //printf("debug"); for (int i = 1; i <= Map->mx; i++) { for (int j = 1; j <= Map->my; j++) { cell[j][i].y = i; - cell[j][i].x = j;//ji xy + cell[j][i].x = j;//j��i�� x��y�� if (Map->stage[j][i] == MARKED) { @@ -185,7 +185,7 @@ void Gamenow() PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); if (opt_count(Map, j, i) == 0) { - PX_Object_PushButtonSetBorderColor(cellbutton[j][i], PX_COLOR(32, 255, 255, 255));;//Ϊɫť + PX_Object_PushButtonSetBorderColor(cellbutton[j][i], PX_COLOR(32, 255, 255, 255));;//���Ϊ��ɫ��ť } else { @@ -227,7 +227,7 @@ Gamefail() { PX_Object_PushButtonSetShape(cellbutton[j][i], &mine); PX_Object_PushButtonSetTextColor(cellbutton[j][i], PX_COLOR(255, 255, 0, 0)); } - PX_ObjectSetEnabled(cellbutton[j][i], PX_FALSE);//ʹаťЧ޷ + PX_ObjectSetEnabled(cellbutton[j][i], PX_FALSE);//ʹ�����а�ť��Ч���޷���������� } } @@ -251,7 +251,7 @@ void Lclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr){ if (Map->mineMap[pcell->x][pcell->y] == 1) { Gamefail(); - }//׾ʧ + }//���׾�ʧ�� else if (opt_is_scuess(*Map)) { Gamewin(); } @@ -332,15 +332,15 @@ void chard(PX_Object* pObject, PX_Object_Event e, px_void* ptr) } void modechoose() { - ///任ɾԭҳobjectPainterengine provide)/// -//ɾ֮ǰİť + ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// +//ɾ��֮ǰ�İ�ť������� if (root) { PX_ObjectDelete(root); } - //´ + //���´��������� root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///任ɾԭҳobjectPainterengine provide)/// + ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// easymode = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 218, 200, 228, 64, "easy", PX_NULL); @@ -355,7 +355,7 @@ void modechoose() { -//////////////////////----------------------------------rank +//////////////////////----------------------------------rank ��� void towelcomeclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr) { WELCOME(); @@ -365,22 +365,22 @@ void towelcomeclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr) void RANK() { - ///任ɾԭҳobjectPainterengine provide)/// -//ɾ֮ǰİť + ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// +//ɾ��֮ǰ�İ�ť������� if (root) { PX_ObjectDelete(root); } - //´ + //���´��������� root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///任ɾԭҳobjectPainterengine provide)/// + ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// towelcomebutton = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 318, 400, 228, 64, "Return", PX_NULL); PX_ObjectRegisterEvent(towelcomebutton, PX_OBJECT_EVENT_EXECUTE, towelcomeclick, &towelcomebutton); - //һŰ + //��һ�������Ű� firstprize = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 90, 90, 75, 75, &firstprizepicture); PX_ObjectRegisterEvent(firstprize, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); secondprize = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 90, 190, 75, 75, &secondprizepicture); @@ -391,7 +391,7 @@ void RANK() PX_ObjectRegisterEvent(ranktitle, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); } -//////////////////////----------------------------------rank +//////////////////////----------------------------------rank ��� @@ -400,12 +400,12 @@ void RANK() -//////////////////////----------------------------------welcome +//////////////////////----------------------------------welcome ��� -px_void beginclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//ʼťת +px_void beginclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//��ʼ��ť����ת { modechoose(); @@ -413,28 +413,28 @@ px_void beginclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)// printf("NOW begin!\n"); } -px_void rankingclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//ťת +px_void rankingclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//������ť����ת { RANK(); printf("Is ranking\t"); } -void WELCOME()//ʼ +void WELCOME()//��ʼ������ { - ///任ɾԭҳobjectPainterengine provide)/// - //ɾ֮ǰİť + ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// + //ɾ��֮ǰ�İ�ť������� if (root) { PX_ObjectDelete(root); } - //´ + //���´��������� root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///任ɾԭҳobject/// + ///�任�����ɾ��ԭҳ���object��/// - //ʼť + //��ʼ��������ť beginbutton = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 145, 400, 228, 64, "begin now", PX_NULL); PX_ObjectRegisterEvent(beginbutton, PX_OBJECT_EVENT_EXECUTE, beginclick, &beginbutton); @@ -443,10 +443,10 @@ void WELCOME()// PX_ObjectRegisterEvent(rankingbutton, PX_OBJECT_EVENT_EXECUTE, rankingclick, &rankingbutton); - //ʼĺ + //��ʼ������ĺ��� //PX_FontModuleDrawText(&App.runtime.RenderSurface, PX_NULL, 395, 200, PX_ALIGN_MIDTOP, "TEXT", PX_COLOR(250, 0, 0, 0)); - //չʾ̬ı + //չʾ��̬�ı��� //title=PX_Object_LabelCreate(&App.runtime.mp_ui, root, 395, 175, 256, 64, "Minesweeper", PX_NULL, PX_COLOR(255 ,106, 106, 0)); //PX_ObjectRegisterEvent(title, PX_OBJECT_EVENT_ANY,PX_NULL, PX_NULL); @@ -456,40 +456,40 @@ void WELCOME()// PX_ObjectRegisterEvent(potatoboom, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); - //MENU + //����MENU PX_Object_Menu_Item* pItem; menubutton=PX_Object_MenuCreate(&App.runtime.mp_ui, root,10,10,100,PX_NULL); - pItem = PX_Object_MenuAddItem(menubutton,PX_Object_MenuGetRootItem(menubutton),"Menu",PX_NULL,PX_NULL); - PX_Object_MenuAddItem(menubutton,pItem, "Color", PX_NULL, PX_NULL); + pItem = PX_Object_MenuAddItem(menubutton,PX_Object_MenuGetRootItem(menubutton),"��Menu",PX_NULL,PX_NULL); + PX_Object_MenuAddItem(menubutton,pItem, "��Color", PX_NULL, PX_NULL); - // һصȴһpx_void callback(px_void* userptr),ȡںд + // ��������һ���ص����������������������ȴ���һ��px_void callback(px_void* userptr)����,����������������ȡ���ں�����д���� } -/// ///////////////////////////////////////-----------------------welcome +/// ///////////////////////////////////////-----------------------welcome��� -px_bool PX_ApplicationInitialize(PX_Application* pApp, px_int screen_width, px_int screen_height)//ʼpxڲ +px_bool PX_ApplicationInitialize(PX_Application* pApp, px_int screen_width, px_int screen_height)//��ʼ��������px�ڲ��� { PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height); - //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &titlepicture, "titlepicture.traw");//ͼƬ - //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//ͼƬ - //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//ͼƬ + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &titlepicture, "titlepicture.traw");//����ͼƬ���� + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//����ͼƬ���� + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//����ͼƬ���� - //ΪӭҳͼƬ + //����Ϊ��ӭҳͼƬ - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &titlepicture, "D:\\working\\PainterEngine\\project\\titlepicture2.traw");//ͼƬ + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &titlepicture, "D:\\working\\PainterEngine\\project\\titlepicture2.traw");//����ͼƬ���� PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &potatoboompicture, "D:\\working\\PainterEngine\\project\\potatoboom.traw"); -//עļַproject棬ΪβԵַ -//ΪаҳͼƬ - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &firstprizepicture, "D:\\working\\PainterEngine\\project\\firstprize.traw");//ͼƬ +//ע���ļ���ַ������project���棬Ϊ�β�������Ե�ַ������ �� +//����Ϊ���а�ҳͼƬ + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &firstprizepicture, "D:\\working\\PainterEngine\\project\\firstprize.traw");//����ͼƬ���� PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &secondprizepicture, "D:\\working\\PainterEngine\\project\\secondprize.traw"); PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &thirdprizepicture, "D:\\working\\PainterEngine\\project\\thirdprize.traw"); PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &ranktitlepicture, "D:\\working\\PainterEngine\\project\\ranktitlepicture.traw"); @@ -502,7 +502,7 @@ px_bool PX_ApplicationInitialize(PX_Application* pApp, px_int screen_width, px_i PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &mine, "D:\\working\\PainterEngine\\project\\minepicture.traw"); - WELCOME();//ֱǰwelcome + WELCOME();//ֱ��ǰ��welcome���� return PX_TRUE; } diff --git a/UI/PainterEngine/project/PainterEngine_Application.h b/UI/project/PainterEngine_Application.h similarity index 100% rename from UI/PainterEngine/project/PainterEngine_Application.h rename to UI/project/PainterEngine_Application.h diff --git a/UI/PainterEngine/project/PainterEngine_Startup.c b/UI/project/PainterEngine_Startup.c similarity index 100% rename from UI/PainterEngine/project/PainterEngine_Startup.c rename to UI/project/PainterEngine_Startup.c diff --git a/UI/PainterEngine/project/PainterEngine_Startup.h b/UI/project/PainterEngine_Startup.h similarity index 100% rename from UI/PainterEngine/project/PainterEngine_Startup.h rename to UI/project/PainterEngine_Startup.h diff --git a/UI/PainterEngine/elsecode/src/app.c b/UI/project/app.c similarity index 100% rename from UI/PainterEngine/elsecode/src/app.c rename to UI/project/app.c diff --git a/UI/PainterEngine/project/firstprize.traw b/UI/project/firstprize.traw similarity index 100% rename from UI/PainterEngine/project/firstprize.traw rename to UI/project/firstprize.traw diff --git a/UI/PainterEngine/project/flagpicture.traw b/UI/project/flagpicture.traw similarity index 100% rename from UI/PainterEngine/project/flagpicture.traw rename to UI/project/flagpicture.traw diff --git a/UI/PainterEngine/elsecode/src/map.c b/UI/project/map.c similarity index 100% rename from UI/PainterEngine/elsecode/src/map.c rename to UI/project/map.c diff --git a/UI/PainterEngine/project/minepicture.traw b/UI/project/minepicture.traw similarity index 100% rename from UI/PainterEngine/project/minepicture.traw rename to UI/project/minepicture.traw diff --git a/UI/PainterEngine/elsecode/src/opt.c b/UI/project/opt.c similarity index 99% rename from UI/PainterEngine/elsecode/src/opt.c rename to UI/project/opt.c index 2b8a40b..81cd61e 100644 --- a/UI/PainterEngine/elsecode/src/opt.c +++ b/UI/project/opt.c @@ -226,4 +226,4 @@ int fnTotalFlag(map *m) } } return ALLOWED; -} +} \ No newline at end of file diff --git a/UI/PainterEngine/project/potatoboom.traw b/UI/project/potatoboom.traw similarity index 100% rename from UI/PainterEngine/project/potatoboom.traw rename to UI/project/potatoboom.traw diff --git a/UI/PainterEngine/project/ranktitlepicture.traw b/UI/project/ranktitlepicture.traw similarity index 100% rename from UI/PainterEngine/project/ranktitlepicture.traw rename to UI/project/ranktitlepicture.traw diff --git a/UI/PainterEngine/project/secondprize.traw b/UI/project/secondprize.traw similarity index 100% rename from UI/PainterEngine/project/secondprize.traw rename to UI/project/secondprize.traw diff --git a/UI/PainterEngine/project/testimage.traw b/UI/project/testimage.traw similarity index 100% rename from UI/PainterEngine/project/testimage.traw rename to UI/project/testimage.traw diff --git a/UI/PainterEngine/project/thirdprize.traw b/UI/project/thirdprize.traw similarity index 100% rename from UI/PainterEngine/project/thirdprize.traw rename to UI/project/thirdprize.traw diff --git a/UI/PainterEngine/project/titlepicture.traw b/UI/project/titlepicture.traw similarity index 100% rename from UI/PainterEngine/project/titlepicture.traw rename to UI/project/titlepicture.traw diff --git a/UI/PainterEngine/project/titlepicture2.traw b/UI/project/titlepicture2.traw similarity index 100% rename from UI/PainterEngine/project/titlepicture2.traw rename to UI/project/titlepicture2.traw diff --git a/UI/PainterEngine/supports/documents/PainterEngine API Manual.docx b/UI/supports/documents/PainterEngine API Manual.docx similarity index 100% rename from UI/PainterEngine/supports/documents/PainterEngine API Manual.docx rename to UI/supports/documents/PainterEngine API Manual.docx diff --git a/UI/PainterEngine/supports/logo/PainterEngineLogo.png b/UI/supports/logo/PainterEngineLogo.png similarity index 100% rename from UI/PainterEngine/supports/logo/PainterEngineLogo.png rename to UI/supports/logo/PainterEngineLogo.png diff --git a/UI/PainterEngine/supports/logo/logo_web.png b/UI/supports/logo/logo_web.png similarity index 100% rename from UI/PainterEngine/supports/logo/logo_web.png rename to UI/supports/logo/logo_web.png diff --git a/UI/PainterEngine/supports/old/Platform_Windows_D2D.cbak b/UI/supports/old/Platform_Windows_D2D.cbak similarity index 100% rename from UI/PainterEngine/supports/old/Platform_Windows_D2D.cbak rename to UI/supports/old/Platform_Windows_D2D.cbak diff --git a/UI/PainterEngine/supports/old/Platform_Windows_D2D.hcbak b/UI/supports/old/Platform_Windows_D2D.hcbak similarity index 100% rename from UI/PainterEngine/supports/old/Platform_Windows_D2D.hcbak rename to UI/supports/old/Platform_Windows_D2D.hcbak diff --git a/UI/PainterEngine/supports/old/Platform_Windows_D3D.cpp b/UI/supports/old/Platform_Windows_D3D.cpp similarity index 100% rename from UI/PainterEngine/supports/old/Platform_Windows_D3D.cpp rename to UI/supports/old/Platform_Windows_D3D.cpp diff --git a/UI/PainterEngine/supports/old/Platform_Windows_D3D.h b/UI/supports/old/Platform_Windows_D3D.h similarity index 100% rename from UI/PainterEngine/supports/old/Platform_Windows_D3D.h rename to UI/supports/old/Platform_Windows_D3D.h diff --git a/UI/PainterEngine/supports/old/Platform_Windows_WaveOut.c b/UI/supports/old/Platform_Windows_WaveOut.c similarity index 100% rename from UI/PainterEngine/supports/old/Platform_Windows_WaveOut.c rename to UI/supports/old/Platform_Windows_WaveOut.c -- Gitee From f39fd919fc75dfe27d306e9c9714a485b49ce8b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A8=E6=85=8E=E8=B0=A6=E8=99=9A?= <419875574@qq.com> Date: Thu, 23 Dec 2021 11:56:12 +0800 Subject: [PATCH 12/19] fix: compile --- UI/platform/modules/px_audio.h | 11 ++ UI/platform/modules/px_file.h | 36 ++++++ UI/platform/modules/px_serialport.h | 21 ++++ UI/platform/modules/px_tcp.h | 36 ++++++ UI/platform/modules/px_thread.h | 21 ++++ UI/platform/modules/px_time.h | 12 ++ UI/platform/modules/px_udp.h | 33 +++++ UI/project/PainterEngine_Application.c | 163 +++++++++++++------------ 8 files changed, 253 insertions(+), 80 deletions(-) create mode 100644 UI/platform/modules/px_audio.h create mode 100644 UI/platform/modules/px_file.h create mode 100644 UI/platform/modules/px_serialport.h create mode 100644 UI/platform/modules/px_tcp.h create mode 100644 UI/platform/modules/px_thread.h create mode 100644 UI/platform/modules/px_time.h create mode 100644 UI/platform/modules/px_udp.h diff --git a/UI/platform/modules/px_audio.h b/UI/platform/modules/px_audio.h new file mode 100644 index 0000000..64d1bff --- /dev/null +++ b/UI/platform/modules/px_audio.h @@ -0,0 +1,11 @@ + +#ifndef PX_AUDIO_H +#define PX_AUDIO_H + +#include "../../core/PX_Sound.h" + +int PX_AudioInitialize(PX_SoundPlay *soundPlay); +void PX_AudioSetVolume(unsigned int volume); + + +#endif diff --git a/UI/platform/modules/px_file.h b/UI/platform/modules/px_file.h new file mode 100644 index 0000000..0892a36 --- /dev/null +++ b/UI/platform/modules/px_file.h @@ -0,0 +1,36 @@ + +#ifndef PAINTERENGINE_FILE_H +#define PAINTERENGINE_FILE_H + +#define PAINTERENGIN_FILE_SUPPORT +////////////////////////////////////////////////////////////////////////// +#include "stdio.h" +#include "stdlib.h" +#include "string.h" + +typedef struct +{ + unsigned char *buffer; + unsigned int size; +}PX_IO_Data; + +typedef enum +{ + PX_FILEENUM_TYPE_ANY, + PX_FILEENUM_TYPE_FOLDER, + PX_FILEENUM_TYPE_FILE, + PX_FILEENUM_TYPE_DEVICE, +}PX_FILEENUM_TYPE; + + +PX_IO_Data PX_LoadFileToIOData(const char path[]); +int PX_FileExist(const char respath[]); +int PX_CopyFile(const char respath[],const char destpath[]); +int PX_SaveDataToFile(void *buffer,int size,const char path[]); +void PX_FreeIOData(PX_IO_Data *io); + +int PX_FileGetDirectoryFileCount(const char path[],PX_FILEENUM_TYPE type,const char *filter); +int PX_FileGetDirectoryFileName(const char path[],int count,char FileName[][260],PX_FILEENUM_TYPE type,const char *filter); + +#endif + diff --git a/UI/platform/modules/px_serialport.h b/UI/platform/modules/px_serialport.h new file mode 100644 index 0000000..54b098e --- /dev/null +++ b/UI/platform/modules/px_serialport.h @@ -0,0 +1,21 @@ + +#ifndef PX_SERIALPORT_H +#define PX_SERIALPORT_H + +typedef struct +{ + long long Handle; + unsigned int BaudRate; + unsigned int DataBits; + char ParityType; + unsigned int StopBit; +}PX_SerialPort; + + +const char* PX_SerialPortEnumComName(int index); +const int PX_SerialPortInitialize(PX_SerialPort *com,const char *name,unsigned int baudRate,unsigned int DataBits/*5,6,7,8*/,char ParityType/*'O','E','N'*/,unsigned int stopBit/*0,1,2*/); +const int PX_SerialPortReset(PX_SerialPort *com,unsigned int baudRate,unsigned int DataBits/*5,6,7,8*/,char ParityType/*'O','E','N'*/,unsigned int stopBit/*0,1,2*/); +const int PX_SerialPortWrite(PX_SerialPort *com,void *data,int size); +const int PX_SerialPortRead(PX_SerialPort *com,void *data,int size); +void PX_SerialPortClose(PX_SerialPort *com); +#endif diff --git a/UI/platform/modules/px_tcp.h b/UI/platform/modules/px_tcp.h new file mode 100644 index 0000000..1ff6aee --- /dev/null +++ b/UI/platform/modules/px_tcp.h @@ -0,0 +1,36 @@ + +#ifndef PX_TCP_H +#define PX_TCP_H + +typedef enum +{ + PX_TCP_IP_TYPE_IPV4, + PX_TCP_IP_TYPE_IPV6 +}PX_TCP_IP_TYPE; + +typedef struct +{ + unsigned int port; + union + { + unsigned int ipv4; + unsigned int ipv6[4]; + }; +}PX_TCP_ADDR; + +typedef struct +{ + unsigned int listenPort; + unsigned int socket; + PX_TCP_IP_TYPE type; + PX_TCP_ADDR connectAddr; +}PX_TCP; + +int PX_TCPListen(PX_TCP *tcp,unsigned short listenPort); +int PX_TCPInitialize(PX_TCP *tcp,PX_TCP_IP_TYPE type); +int PX_TCPConnect(PX_TCP *tcp,PX_TCP_ADDR addr); +int PX_TCPSend(PX_TCP *tcp,void *buffer,int size); +int PX_TCPReceived(PX_TCP *tcp,void *buffer,int buffersize,int timeout); +int PX_TCPAccept(PX_TCP *tcp,unsigned int *socket,PX_TCP_ADDR *fromAddr); +void PX_TCPFree(PX_TCP *tcp); +#endif diff --git a/UI/platform/modules/px_thread.h b/UI/platform/modules/px_thread.h new file mode 100644 index 0000000..79325b9 --- /dev/null +++ b/UI/platform/modules/px_thread.h @@ -0,0 +1,21 @@ +#ifndef PX_THREAD +#define PX_THREAD + +typedef void (*func_thread)(void *ptr); + +typedef struct +{ + union + { + void *handle_ptr; + unsigned int handle_uint; + unsigned long handle_ulong; + }; + func_thread pfunc; + void *userptr; + volatile int isRun; +}px_thread; + +int PX_ThreadCreate(px_thread *thread,func_thread func,void *ptr); + +#endif diff --git a/UI/platform/modules/px_time.h b/UI/platform/modules/px_time.h new file mode 100644 index 0000000..b46d6ae --- /dev/null +++ b/UI/platform/modules/px_time.h @@ -0,0 +1,12 @@ +#ifndef PX_TIME_H +#define PX_TIME_H + +int PX_TimeGetYear(); +int PX_TimeGetMouth(); +int PX_TimeGetDay(); +int PX_TimeGetHour(); +int PX_TimeGetMinute(); +int PX_TimeGetSecond(); +unsigned int PX_TimeGetTime(); +void PX_Sleep(unsigned int ms); +#endif \ No newline at end of file diff --git a/UI/platform/modules/px_udp.h b/UI/platform/modules/px_udp.h new file mode 100644 index 0000000..1456339 --- /dev/null +++ b/UI/platform/modules/px_udp.h @@ -0,0 +1,33 @@ + +#ifndef PX_UDP_H +#define PX_UDP_H + +typedef enum +{ + PX_UDP_IP_TYPE_IPV4, + PX_UDP_IP_TYPE_IPV6 +}PX_UDP_IP_TYPE; + +typedef struct +{ + unsigned int listenPort; + unsigned int socket; + PX_UDP_IP_TYPE type; +}PX_UDP; + +typedef struct +{ + unsigned int port; + union + { + unsigned int ipv4; + unsigned int ipv6[4]; + }; +}PX_UDP_ADDR; + +int PX_UDPListen(PX_UDP *udp,unsigned short listenPort); +int PX_UDPInitialize(PX_UDP *udp,PX_UDP_IP_TYPE type); +int PX_UDPSend(PX_UDP *udp,PX_UDP_ADDR addr,void *buffer,int size); +int PX_UDPReceived(PX_UDP *udp,PX_UDP_ADDR *from_addr,void *buffer,int buffersize,int *readsize); +void PX_UDPFree(PX_UDP *udp); +#endif diff --git a/UI/project/PainterEngine_Application.c b/UI/project/PainterEngine_Application.c index 3b167ed..cc5eeb3 100644 --- a/UI/project/PainterEngine_Application.c +++ b/UI/project/PainterEngine_Application.c @@ -14,40 +14,40 @@ PX_Application App; -PX_Object* root = PX_NULL;//��������� ��px���룩 -PX_Object* cellbutton[10][10];//������ʮ��С���ӵİ�ť +PX_Object* root = PX_NULL;//定义根类型 (px必须) +PX_Object* cellbutton[10][10];//定义了十个小格子的按钮 -PX_Object* beginbutton;//��ʼ�İ�ť����welcome���� -PX_Object* rankingbutton;//���а�ť����welcome���� -PX_Object* menubutton;//��ҳ�IJ˵��� +PX_Object* beginbutton;//开始的按钮(在welcome里面 +PX_Object* rankingbutton;//排行榜按钮(在welcome里面 +PX_Object* menubutton;//首页的菜单栏 PX_Object* easymode; PX_Object* midmode; PX_Object* hardmode; -PX_Object* title;//�����ͼƬ����welcome���� -px_texture titlepicture;//�����ͼƬ����welcome���� -PX_Object* potatoboom;//�����ͼƬ����welcome���� -px_texture potatoboompicture;//�����ͼƬ����welcome���� -PX_Object* towelcomebutton;//��ʼ�İ�ť����welcome���� - -PX_Object* firstprize;//��һ��ͼƬ����rank���� -px_texture firstprizepicture;//��һ��ͼƬ��in rank -PX_Object* secondprize;//��һ��ͼƬ����rank���� -px_texture secondprizepicture;//��һ��ͼƬ��in rank -PX_Object* thirdprize;//��һ��ͼƬ����rank���� -px_texture thirdprizepicture;//��һ��ͼƬ��in rank -PX_Object* ranktitle;//��һ��ͼƬ����rank���� -px_texture ranktitlepicture;//��һ��ͼƬ��in rank - -px_shape flag;//���ĵ�ͼƬ��in game +PX_Object* title;//标题的图片框(在welcome里面 +px_texture titlepicture;//标题的图片(在welcome里面 +PX_Object* potatoboom;//标题的图片框(在welcome里面 +px_texture potatoboompicture;//标题的图片(在welcome里面 +PX_Object* towelcomebutton;//开始的按钮(在welcome里面 + +PX_Object* firstprize;//第一的图片框(在rank里面 +px_texture firstprizepicture;//第一的图片(in rank +PX_Object* secondprize;//第一的图片框(在rank里面 +px_texture secondprizepicture;//第一的图片(in rank +PX_Object* thirdprize;//第一的图片框(在rank里面 +px_texture thirdprizepicture;//第一的图片(in rank +PX_Object* ranktitle;//第一的图片框(在rank里面 +px_texture ranktitlepicture;//第一的图片(in rank + +px_shape flag;//旗帜的图片(in game px_shape mine; opt_t cell[100][100]; map* Map=NULL; int mode=3; -///�������� +///函数声明 void WELCOME(); void RANK(); void Gameinit(); @@ -62,19 +62,19 @@ map* Setmine(int mode); ///////////////////////////////////////////////////////////// -//�������������� +//辅助函数(不看 /* px_float PX_Object_Event_GetCursorX(PX_Object_Event e); px_float PX_Object_Event_GetCursorY(PX_Object_Event e); -px_void(*ProcessFunc)(PX_Object*, PX_Object_Event e, px_void* ptr);//�����/�Ҽ�ʱ�����·����� +px_void(*ProcessFunc)(PX_Object*, PX_Object_Event e, px_void* ptr);//点击左/右键时运行下方函数 */ ///////////////////////////////////////////////////// -//��Ϸ���ڽ��е���� +//游戏正在进行的组件 @@ -96,30 +96,30 @@ px_void(*ProcessFunc)(PX_Object*, PX_Object_Event e, px_void* ptr);//��� void Gameinit() { - ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// -//ɾ��֮ǰ�İ�ť������� + ///变换界面就删除原页面的object!(由Painterengine provide)/// +//删除之前的按钮(如果有 if (root){ PX_ObjectDelete(root); } - //���´��������� + //重新创建根对象 root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// -//��ʼ��map + ///变换界面就删除原页面的object!(由Painterengine provide)/// +//初始化map map* p = Setmine(mode); Map = p; - //����cellbutton + //生成cellbutton printf("debug"); for (int i = 1; i <= Map->mx; i++) { for (int j = 1; j <= Map->my; j++) { cell[j][i].y = i; - cell[j][i].x = j;//j��i�� x��y + cell[j][i].x = j;//j行i列 x行y cellbutton[j][i] = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, i * 51-51, j * 51-51, 47, 47, " ", PX_NULL); PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_EXECUTE, Lclickcell, &cell[j][i]); PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); - //���ɽ���cellbutton + //生成结束cellbutton } }printf("debug"); } @@ -139,19 +139,19 @@ void Gamenow() { PX_ObjectDelete(root); } - //���´��������� + //重新创建根对象 root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// + ///变换界面就删除原页面的object!(由Painterengine provide)/// //printf("debug"); for (int i = 1; i <= Map->mx; i++) { for (int j = 1; j <= Map->my; j++) { cell[j][i].y = i; - cell[j][i].x = j;//j��i�� x��y�� + cell[j][i].x = j;//j行i列 x行y列 if (Map->stage[j][i] == MARKED) { @@ -185,7 +185,7 @@ void Gamenow() PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORRDOWN, Rclickcell, &cell[j][i]); PX_ObjectRegisterEvent(cellbutton[j][i], PX_OBJECT_EVENT_CURSORMDOWN, Mclickcell, &cell[j][i]); if (opt_count(Map, j, i) == 0) { - PX_Object_PushButtonSetBorderColor(cellbutton[j][i], PX_COLOR(32, 255, 255, 255));;//���Ϊ��ɫ��ť + PX_Object_PushButtonSetBorderColor(cellbutton[j][i], PX_COLOR(32, 255, 255, 255));;//标记为黑色按钮 } else { @@ -211,23 +211,24 @@ void Gamenow() } ////////////////////////////////////////////////////////////////////////////////// -Gamewin() { +void Gamewin() { printf("you win"); } -Gamefail() { - for (int i = 0; i < Map->mx; i++) +void Gamefail() { + printf("debug2"); + for (int i = 1; i < Map->mx; i++) { - for (int j = 0; j < Map->my; j++) { + for (int j = 1; j < Map->my; j++) { if (Map->mineMap[j][i] == 1) { PX_Object_PushButtonSetText(cellbutton[j][i], " "); PX_Object_PushButtonSetShape(cellbutton[j][i], &mine); PX_Object_PushButtonSetTextColor(cellbutton[j][i], PX_COLOR(255, 255, 0, 0)); } - PX_ObjectSetEnabled(cellbutton[j][i], PX_FALSE);//ʹ�����а�ť��Ч���޷���������� + PX_ObjectSetEnabled(cellbutton[j][i], PX_FALSE);//使得所有按钮无效,无法继续点击! } } @@ -246,12 +247,14 @@ void Lclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr){ { opt_t* pcell = (opt_t*)ptr; + int temp; temp= fnOptLeftClick(pcell->x, pcell->y, Map); + if (Map->mineMap[pcell->x][pcell->y] == 1) { Gamefail(); - }//���׾�ʧ�� + }//是雷就失败 else if (opt_is_scuess(*Map)) { Gamewin(); } @@ -332,15 +335,15 @@ void chard(PX_Object* pObject, PX_Object_Event e, px_void* ptr) } void modechoose() { - ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// -//ɾ��֮ǰ�İ�ť������� + ///变换界面就删除原页面的object!(由Painterengine provide)/// +//删除之前的按钮(如果有 if (root) { PX_ObjectDelete(root); } - //���´��������� + //重新创建根对象 root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// + ///变换界面就删除原页面的object!(由Painterengine provide)/// easymode = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 218, 200, 228, 64, "easy", PX_NULL); @@ -355,7 +358,7 @@ void modechoose() { -//////////////////////----------------------------------rank ��� +//////////////////////----------------------------------rank 组件 void towelcomeclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr) { WELCOME(); @@ -365,22 +368,22 @@ void towelcomeclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr) void RANK() { - ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// -//ɾ��֮ǰ�İ�ť������� + ///变换界面就删除原页面的object!(由Painterengine provide)/// +//删除之前的按钮(如果有 if (root) { PX_ObjectDelete(root); } - //���´��������� + //重新创建根对象 root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// + ///变换界面就删除原页面的object!(由Painterengine provide)/// towelcomebutton = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 318, 400, 228, 64, "Return", PX_NULL); PX_ObjectRegisterEvent(towelcomebutton, PX_OBJECT_EVENT_EXECUTE, towelcomeclick, &towelcomebutton); - //��һ�������Ű� + //第一二三名排版 firstprize = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 90, 90, 75, 75, &firstprizepicture); PX_ObjectRegisterEvent(firstprize, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); secondprize = PX_Object_ImageCreate(&App.runtime.mp_resources, root, 90, 190, 75, 75, &secondprizepicture); @@ -391,7 +394,7 @@ void RANK() PX_ObjectRegisterEvent(ranktitle, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); } -//////////////////////----------------------------------rank ��� +//////////////////////----------------------------------rank 组件 @@ -400,12 +403,12 @@ void RANK() -//////////////////////----------------------------------welcome ��� +//////////////////////----------------------------------welcome 组件 -px_void beginclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//��ʼ��ť����ת +px_void beginclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//开始按钮的跳转 { modechoose(); @@ -413,28 +416,28 @@ px_void beginclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//�� printf("NOW begin!\n"); } -px_void rankingclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//������ť����ת +px_void rankingclick(PX_Object* pObject, PX_Object_Event e, px_void* ptr)//排名按钮的跳转 { RANK(); printf("Is ranking\t"); } -void WELCOME()//��ʼ������ +void WELCOME()//初始化函数 { - ///�任�����ɾ��ԭҳ���object������Painterengine provide)/// - //ɾ��֮ǰ�İ�ť������� + ///变换界面就删除原页面的object!(由Painterengine provide)/// + //删除之前的按钮(如果有 if (root) { PX_ObjectDelete(root); } - //���´��������� + //重新创建根对象 root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); - ///�任�����ɾ��ԭҳ���object��/// + ///变换界面就删除原页面的object!/// - //��ʼ��������ť + //初始化两个按钮 beginbutton = PX_Object_PushButtonCreate(&App.runtime.mp_ui, root, 145, 400, 228, 64, "begin now", PX_NULL); PX_ObjectRegisterEvent(beginbutton, PX_OBJECT_EVENT_EXECUTE, beginclick, &beginbutton); @@ -443,10 +446,10 @@ void WELCOME()//��ʼ������ PX_ObjectRegisterEvent(rankingbutton, PX_OBJECT_EVENT_EXECUTE, rankingclick, &rankingbutton); - //��ʼ������ĺ��� + //初始化界面的汉字 //PX_FontModuleDrawText(&App.runtime.RenderSurface, PX_NULL, 395, 200, PX_ALIGN_MIDTOP, "TEXT", PX_COLOR(250, 0, 0, 0)); - //չʾ��̬�ı��� + //展示静态文本框 //title=PX_Object_LabelCreate(&App.runtime.mp_ui, root, 395, 175, 256, 64, "Minesweeper", PX_NULL, PX_COLOR(255 ,106, 106, 0)); //PX_ObjectRegisterEvent(title, PX_OBJECT_EVENT_ANY,PX_NULL, PX_NULL); @@ -456,40 +459,40 @@ void WELCOME()//��ʼ������ PX_ObjectRegisterEvent(potatoboom, PX_OBJECT_EVENT_ANY, PX_NULL, PX_NULL); - //����MENU + //这是MENU PX_Object_Menu_Item* pItem; menubutton=PX_Object_MenuCreate(&App.runtime.mp_ui, root,10,10,100,PX_NULL); - pItem = PX_Object_MenuAddItem(menubutton,PX_Object_MenuGetRootItem(menubutton),"��Menu",PX_NULL,PX_NULL); - PX_Object_MenuAddItem(menubutton,pItem, "��Color", PX_NULL, PX_NULL); + pItem = PX_Object_MenuAddItem(menubutton,PX_Object_MenuGetRootItem(menubutton),"【Menu",PX_NULL,PX_NULL); + PX_Object_MenuAddItem(menubutton,pItem, "【Color", PX_NULL, PX_NULL); - // ��������һ���ص����������������������ȴ���һ��px_void callback(px_void* userptr)����,����������������ȡ���ں�����д���� + // ↑可以用一个回调函数!!!!!!必须先创建一个px_void callback(px_void* userptr)函数,【函数名可以任意取】在函数里写东西 } -/// ///////////////////////////////////////-----------------------welcome��� +/// ///////////////////////////////////////-----------------------welcome组件 -px_bool PX_ApplicationInitialize(PX_Application* pApp, px_int screen_width, px_int screen_height)//��ʼ��������px�ڲ��� +px_bool PX_ApplicationInitialize(PX_Application* pApp, px_int screen_width, px_int screen_height)//初始化函数(px内部) { PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height); - //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &titlepicture, "titlepicture.traw");//����ͼƬ���� - //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//����ͼƬ���� - //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//����ͼƬ���� + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &titlepicture, "titlepicture.traw");//加载图片!! + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//加载图片!! + //PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &shape_mine, "mine.traw");//加载图片!! - //����Ϊ��ӭҳͼƬ + //以下为欢迎页图片 - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &titlepicture, "D:\\working\\PainterEngine\\project\\titlepicture2.traw");//����ͼƬ���� + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &titlepicture, "D:\\working\\PainterEngine\\project\\titlepicture2.traw");//加载图片!! PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &potatoboompicture, "D:\\working\\PainterEngine\\project\\potatoboom.traw"); -//ע���ļ���ַ������project���棬Ϊ�β�������Ե�ַ������ �� -//����Ϊ���а�ҳͼƬ - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &firstprizepicture, "D:\\working\\PainterEngine\\project\\firstprize.traw");//����ͼƬ���� +//注意文件地址!放在project里面,为何不能用相对地址??? ↑ +//以下为排行版页图片 + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &firstprizepicture, "D:\\working\\PainterEngine\\project\\firstprize.traw");//加载图片!! PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &secondprizepicture, "D:\\working\\PainterEngine\\project\\secondprize.traw"); PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &thirdprizepicture, "D:\\working\\PainterEngine\\project\\thirdprize.traw"); PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &ranktitlepicture, "D:\\working\\PainterEngine\\project\\ranktitlepicture.traw"); @@ -502,7 +505,7 @@ px_bool PX_ApplicationInitialize(PX_Application* pApp, px_int screen_width, px_i PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &mine, "D:\\working\\PainterEngine\\project\\minepicture.traw"); - WELCOME();//ֱ��ǰ��welcome���� + WELCOME();//直接前往welcome函数 return PX_TRUE; } -- Gitee From 1702cd528cdcb4b8916fa028e2c33a5c5cc54e77 Mon Sep 17 00:00:00 2001 From: rainy <1072874017@qq.com> Date: Thu, 23 Dec 2021 13:12:22 +0800 Subject: [PATCH 13/19] refactor: move PainterEngine to lib fix: fix makefile --- UI/project/app.c | 2 - UI/project/map.c | 55 ----- UI/project/opt.c | 229 ------------------ .../architecture/PainterEngine_Console.c | 0 .../architecture/PainterEngine_Console.h | 0 .../architecture/PainterEngine_Designer.c | 0 .../architecture/PainterEngine_Designer.h | 0 .../architecture/PainterEngine_Executer.c | 0 .../architecture/PainterEngine_Executer.h | 0 .../architecture/PainterEngine_FoxLogo.h | 0 .../architecture/PainterEngine_Runtime.c | 0 .../architecture/PainterEngine_Runtime.h | 0 {UI => lib/PainterEngine}/core/PX_3D.c | 0 {UI => lib/PainterEngine}/core/PX_3D.h | 0 {UI => lib/PainterEngine}/core/PX_AES.c | 0 {UI => lib/PainterEngine}/core/PX_AES.h | 0 {UI => lib/PainterEngine}/core/PX_ANN.c | 0 {UI => lib/PainterEngine}/core/PX_ANN.h | 0 {UI => lib/PainterEngine}/core/PX_Arle.c | 0 {UI => lib/PainterEngine}/core/PX_Arle.h | 0 {UI => lib/PainterEngine}/core/PX_Base64.c | 0 {UI => lib/PainterEngine}/core/PX_Base64.h | 0 {UI => lib/PainterEngine}/core/PX_BaseGeo.c | 0 {UI => lib/PainterEngine}/core/PX_BaseGeo.h | 0 {UI => lib/PainterEngine}/core/PX_Bitmap.c | 0 {UI => lib/PainterEngine}/core/PX_Bitmap.h | 0 {UI => lib/PainterEngine}/core/PX_Core.h | 0 {UI => lib/PainterEngine}/core/PX_Delaunay.c | 0 {UI => lib/PainterEngine}/core/PX_Delaunay.h | 0 {UI => lib/PainterEngine}/core/PX_Effect.c | 0 {UI => lib/PainterEngine}/core/PX_Effect.h | 0 {UI => lib/PainterEngine}/core/PX_Font.c | 0 {UI => lib/PainterEngine}/core/PX_Font.h | 0 {UI => lib/PainterEngine}/core/PX_Hashmap.c | 0 {UI => lib/PainterEngine}/core/PX_Hashmap.h | 0 {UI => lib/PainterEngine}/core/PX_Huffman.c | 0 {UI => lib/PainterEngine}/core/PX_Huffman.h | 0 .../PainterEngine}/core/PX_ImageFilter.c | 0 .../PainterEngine}/core/PX_ImageFilter.h | 0 .../PainterEngine}/core/PX_KalmanFilter.c | 0 .../PainterEngine}/core/PX_KalmanFilter.h | 0 {UI => lib/PainterEngine}/core/PX_Linker.c | 0 {UI => lib/PainterEngine}/core/PX_Linker.h | 0 {UI => lib/PainterEngine}/core/PX_List.c | 0 {UI => lib/PainterEngine}/core/PX_List.h | 0 {UI => lib/PainterEngine}/core/PX_Log.c | 0 {UI => lib/PainterEngine}/core/PX_Log.h | 0 {UI => lib/PainterEngine}/core/PX_MFCC.c | 0 {UI => lib/PainterEngine}/core/PX_MFCC.h | 0 {UI => lib/PainterEngine}/core/PX_MathTable.h | 0 {UI => lib/PainterEngine}/core/PX_Memory.c | 0 {UI => lib/PainterEngine}/core/PX_Memory.h | 0 .../PainterEngine}/core/PX_MemoryPool.c | 0 .../PainterEngine}/core/PX_MemoryPool.h | 0 {UI => lib/PainterEngine}/core/PX_Packet.c | 0 {UI => lib/PainterEngine}/core/PX_Packet.h | 0 .../PainterEngine}/core/PX_PointsMesh.c | 0 .../PainterEngine}/core/PX_PointsMesh.h | 0 {UI => lib/PainterEngine}/core/PX_Quadtree.c | 0 {UI => lib/PainterEngine}/core/PX_Quadtree.h | 0 {UI => lib/PainterEngine}/core/PX_Quicksort.c | 0 {UI => lib/PainterEngine}/core/PX_Quicksort.h | 0 {UI => lib/PainterEngine}/core/PX_Sha256.c | 0 {UI => lib/PainterEngine}/core/PX_Sha256.h | 0 {UI => lib/PainterEngine}/core/PX_Sound.c | 0 {UI => lib/PainterEngine}/core/PX_Sound.h | 0 .../PainterEngine}/core/PX_SoundModule.c | 0 .../PainterEngine}/core/PX_SoundModule.h | 0 {UI => lib/PainterEngine}/core/PX_String.c | 0 {UI => lib/PainterEngine}/core/PX_String.h | 0 {UI => lib/PainterEngine}/core/PX_Surface.c | 0 {UI => lib/PainterEngine}/core/PX_Surface.h | 0 {UI => lib/PainterEngine}/core/PX_TRaw.c | 0 {UI => lib/PainterEngine}/core/PX_TRaw.h | 0 {UI => lib/PainterEngine}/core/PX_Texture.c | 0 {UI => lib/PainterEngine}/core/PX_Texture.h | 0 .../PainterEngine}/core/PX_TriangleCross.c | 0 {UI => lib/PainterEngine}/core/PX_Tuning.c | 0 {UI => lib/PainterEngine}/core/PX_Tuning.h | 0 {UI => lib/PainterEngine}/core/PX_Typedef.c | 0 {UI => lib/PainterEngine}/core/PX_Typedef.h | 0 {UI => lib/PainterEngine}/core/PX_Vector.c | 0 {UI => lib/PainterEngine}/core/PX_Vector.h | 0 {UI => lib/PainterEngine}/core/PX_Wave.c | 0 {UI => lib/PainterEngine}/core/PX_Wave.h | 0 .../PainterEngine}/core/PX_curve25519.c | 0 .../PainterEngine}/core/PX_curve25519.h | 0 {UI => lib/PainterEngine}/core/PX_rbtree.c | 0 {UI => lib/PainterEngine}/core/PX_rbtree.h | 0 .../PainterEngine}/kernel/PX_2dxCommon.h | 0 .../PainterEngine}/kernel/PX_3D_ObjData.c | 0 .../PainterEngine}/kernel/PX_3D_ObjData.h | 0 .../PainterEngine}/kernel/PX_Animation.c | 0 .../PainterEngine}/kernel/PX_Animation.h | 0 .../PainterEngine}/kernel/PX_Compiler.c | 0 .../PainterEngine}/kernel/PX_Compiler.h | 0 {UI => lib/PainterEngine}/kernel/PX_Json.c | 0 {UI => lib/PainterEngine}/kernel/PX_Json.h | 0 {UI => lib/PainterEngine}/kernel/PX_Kernel.h | 0 {UI => lib/PainterEngine}/kernel/PX_Lexer.c | 0 {UI => lib/PainterEngine}/kernel/PX_Lexer.h | 0 .../PainterEngine}/kernel/PX_LiveFramework.c | 0 .../PainterEngine}/kernel/PX_LiveFramework.h | 0 {UI => lib/PainterEngine}/kernel/PX_MODBUS.c | 0 {UI => lib/PainterEngine}/kernel/PX_MODBUS.h | 0 {UI => lib/PainterEngine}/kernel/PX_MQTT.c | 0 {UI => lib/PainterEngine}/kernel/PX_MQTT.h | 0 {UI => lib/PainterEngine}/kernel/PX_Object.c | 0 {UI => lib/PainterEngine}/kernel/PX_Object.h | 0 .../kernel/PX_Object_Animation.c | 0 .../kernel/PX_Object_Animation.h | 0 .../kernel/PX_Object_AutoText.c | 0 .../kernel/PX_Object_AutoText.h | 0 .../PainterEngine}/kernel/PX_Object_COMBox.c | 0 .../PainterEngine}/kernel/PX_Object_COMBox.h | 0 .../kernel/PX_Object_CheckBox.c | 0 .../kernel/PX_Object_CheckBox.h | 0 .../kernel/PX_Object_Coordinate.c | 0 .../kernel/PX_Object_Coordinate.h | 0 .../kernel/PX_Object_CursorButton.c | 0 .../kernel/PX_Object_CursorButton.h | 0 .../kernel/PX_Object_DesignerBox.c | 0 .../kernel/PX_Object_DesignerBox.h | 0 .../PainterEngine}/kernel/PX_Object_Edit.c | 0 .../PainterEngine}/kernel/PX_Object_Edit.h | 0 .../kernel/PX_Object_Explorer.c | 0 .../kernel/PX_Object_Explorer.h | 0 .../PainterEngine}/kernel/PX_Object_IPBox.c | 0 .../PainterEngine}/kernel/PX_Object_IPBox.h | 0 .../PainterEngine}/kernel/PX_Object_Image.c | 0 .../PainterEngine}/kernel/PX_Object_Image.h | 0 .../kernel/PX_Object_Joystick.c | 0 .../kernel/PX_Object_Joystick.h | 0 .../PainterEngine}/kernel/PX_Object_Label.c | 0 .../PainterEngine}/kernel/PX_Object_Label.h | 0 .../PainterEngine}/kernel/PX_Object_List.c | 0 .../PainterEngine}/kernel/PX_Object_List.h | 0 .../kernel/PX_Object_MemoryView.c | 0 .../kernel/PX_Object_MemoryView.h | 0 .../PainterEngine}/kernel/PX_Object_Menu.c | 0 .../PainterEngine}/kernel/PX_Object_Menu.h | 0 .../kernel/PX_Object_MessageBox.c | 0 .../kernel/PX_Object_MessageBox.h | 0 .../PainterEngine}/kernel/PX_Object_Panc.c | 0 .../PainterEngine}/kernel/PX_Object_Panc.h | 0 .../kernel/PX_Object_Processbar.c | 0 .../kernel/PX_Object_Processbar.h | 0 .../kernel/PX_Object_Protractor.c | 0 .../kernel/PX_Object_Protractor.h | 0 .../kernel/PX_Object_PushButton.c | 0 .../kernel/PX_Object_PushButton.h | 0 .../kernel/PX_Object_RadioBox.c | 0 .../kernel/PX_Object_RadioBox.h | 0 .../kernel/PX_Object_RingProcessbar.c | 0 .../kernel/PX_Object_RingProcessbar.h | 0 .../kernel/PX_Object_ScaleBox.c | 0 .../kernel/PX_Object_ScaleBox.h | 0 .../kernel/PX_Object_ScrollArea.c | 0 .../kernel/PX_Object_ScrollArea.h | 0 .../kernel/PX_Object_Selectbar.c | 0 .../kernel/PX_Object_Selectbar.h | 0 .../kernel/PX_Object_Sliderbar.c | 0 .../kernel/PX_Object_Sliderbar.h | 0 .../kernel/PX_Object_TransformAdapter.c | 0 .../kernel/PX_Object_TransformAdapter.h | 0 .../PainterEngine}/kernel/PX_Object_VarBox.c | 0 .../PainterEngine}/kernel/PX_Object_VarBox.h | 0 .../PainterEngine}/kernel/PX_Object_Various.c | 0 .../PainterEngine}/kernel/PX_Object_Various.h | 0 .../kernel/PX_Object_VirtualKeyboard.c | 0 .../kernel/PX_Object_VirtualKeyboard.h | 0 .../PainterEngine}/kernel/PX_Object_Widget.c | 0 .../PainterEngine}/kernel/PX_Object_Widget.h | 0 .../PainterEngine}/kernel/PX_Partical.c | 0 .../PainterEngine}/kernel/PX_Partical.h | 0 .../PainterEngine}/kernel/PX_Resource.c | 0 .../PainterEngine}/kernel/PX_Resource.h | 0 .../PainterEngine}/kernel/PX_ScriptCore.h | 0 .../kernel/PX_Script_ASMCompiler.c | 0 .../kernel/PX_Script_ASMCompiler.h | 0 .../kernel/PX_Script_Interpreter.c | 0 .../kernel/PX_Script_Interpreter.h | 0 .../PainterEngine}/kernel/PX_Script_VM.c | 0 .../PainterEngine}/kernel/PX_Script_VM.h | 0 {UI => lib/PainterEngine}/kernel/PX_Sync.c | 0 {UI => lib/PainterEngine}/kernel/PX_Sync.h | 0 {UI => lib/PainterEngine}/kernel/PX_UI.c | 0 {UI => lib/PainterEngine}/kernel/PX_UI.h | 0 {UI => lib/PainterEngine}/kernel/PX_World.c | 0 {UI => lib/PainterEngine}/kernel/PX_World.h | 0 .../platform/modules/px_audio.h | 0 .../PainterEngine}/platform/modules/px_file.h | 0 .../platform/modules/px_serialport.h | 0 .../PainterEngine}/platform/modules/px_tcp.h | 0 .../platform/modules/px_thread.h | 0 .../PainterEngine}/platform/modules/px_time.h | 0 .../PainterEngine}/platform/modules/px_udp.h | 0 .../platform/windows/mingw_build.bat | 0 .../platform/windows/px_audio.cpp | 0 .../platform/windows/px_display.cpp | 0 .../platform/windows/px_display.h | 0 .../PainterEngine}/platform/windows/px_file.c | 0 .../PainterEngine}/platform/windows/px_main.c | 0 .../platform/windows/px_serialport.c | 0 .../PainterEngine}/platform/windows/px_tcp.c | 0 .../platform/windows/px_thread.c | 0 .../PainterEngine}/platform/windows/px_time.c | 0 .../PainterEngine}/platform/windows/px_udp.c | 0 .../documents/PainterEngine API Manual.docx | Bin .../supports/logo/PainterEngineLogo.png | Bin .../PainterEngine}/supports/logo/logo_web.png | Bin .../supports/old/Platform_Windows_D2D.cbak | 0 .../supports/old/Platform_Windows_D2D.hcbak | 0 .../supports/old/Platform_Windows_D3D.cpp | 0 .../supports/old/Platform_Windows_D3D.h | 0 .../supports/old/Platform_Windows_WaveOut.c | 0 UI/platform/windows/makefile => makefile | 24 +- .../PainterEngine_Application.c | 6 +- .../PainterEngine_Application.h | 0 {UI/project => src}/PainterEngine_Startup.c | 0 {UI/project => src}/PainterEngine_Startup.h | 0 {UI/project => src}/firstprize.traw | Bin {UI/project => src}/flagpicture.traw | Bin {UI/project => src}/minepicture.traw | Bin {UI/project => src}/potatoboom.traw | Bin {UI/project => src}/ranktitlepicture.traw | Bin {UI/project => src}/secondprize.traw | Bin {UI/project => src}/testimage.traw | Bin {UI/project => src}/thirdprize.traw | Bin {UI/project => src}/titlepicture.traw | Bin {UI/project => src}/titlepicture2.traw | Bin 231 files changed, 16 insertions(+), 300 deletions(-) delete mode 100644 UI/project/app.c delete mode 100644 UI/project/map.c delete mode 100644 UI/project/opt.c rename {UI => lib/PainterEngine}/architecture/PainterEngine_Console.c (100%) rename {UI => lib/PainterEngine}/architecture/PainterEngine_Console.h (100%) rename {UI => lib/PainterEngine}/architecture/PainterEngine_Designer.c (100%) rename {UI => lib/PainterEngine}/architecture/PainterEngine_Designer.h (100%) rename {UI => lib/PainterEngine}/architecture/PainterEngine_Executer.c (100%) rename {UI => lib/PainterEngine}/architecture/PainterEngine_Executer.h (100%) rename {UI => lib/PainterEngine}/architecture/PainterEngine_FoxLogo.h (100%) rename {UI => lib/PainterEngine}/architecture/PainterEngine_Runtime.c (100%) rename {UI => lib/PainterEngine}/architecture/PainterEngine_Runtime.h (100%) rename {UI => lib/PainterEngine}/core/PX_3D.c (100%) rename {UI => lib/PainterEngine}/core/PX_3D.h (100%) rename {UI => lib/PainterEngine}/core/PX_AES.c (100%) rename {UI => lib/PainterEngine}/core/PX_AES.h (100%) rename {UI => lib/PainterEngine}/core/PX_ANN.c (100%) rename {UI => lib/PainterEngine}/core/PX_ANN.h (100%) rename {UI => lib/PainterEngine}/core/PX_Arle.c (100%) rename {UI => lib/PainterEngine}/core/PX_Arle.h (100%) rename {UI => lib/PainterEngine}/core/PX_Base64.c (100%) rename {UI => lib/PainterEngine}/core/PX_Base64.h (100%) rename {UI => lib/PainterEngine}/core/PX_BaseGeo.c (100%) rename {UI => lib/PainterEngine}/core/PX_BaseGeo.h (100%) rename {UI => lib/PainterEngine}/core/PX_Bitmap.c (100%) rename {UI => lib/PainterEngine}/core/PX_Bitmap.h (100%) rename {UI => lib/PainterEngine}/core/PX_Core.h (100%) rename {UI => lib/PainterEngine}/core/PX_Delaunay.c (100%) rename {UI => lib/PainterEngine}/core/PX_Delaunay.h (100%) rename {UI => lib/PainterEngine}/core/PX_Effect.c (100%) rename {UI => lib/PainterEngine}/core/PX_Effect.h (100%) rename {UI => lib/PainterEngine}/core/PX_Font.c (100%) rename {UI => lib/PainterEngine}/core/PX_Font.h (100%) rename {UI => lib/PainterEngine}/core/PX_Hashmap.c (100%) rename {UI => lib/PainterEngine}/core/PX_Hashmap.h (100%) rename {UI => lib/PainterEngine}/core/PX_Huffman.c (100%) rename {UI => lib/PainterEngine}/core/PX_Huffman.h (100%) rename {UI => lib/PainterEngine}/core/PX_ImageFilter.c (100%) rename {UI => lib/PainterEngine}/core/PX_ImageFilter.h (100%) rename {UI => lib/PainterEngine}/core/PX_KalmanFilter.c (100%) rename {UI => lib/PainterEngine}/core/PX_KalmanFilter.h (100%) rename {UI => lib/PainterEngine}/core/PX_Linker.c (100%) rename {UI => lib/PainterEngine}/core/PX_Linker.h (100%) rename {UI => lib/PainterEngine}/core/PX_List.c (100%) rename {UI => lib/PainterEngine}/core/PX_List.h (100%) rename {UI => lib/PainterEngine}/core/PX_Log.c (100%) rename {UI => lib/PainterEngine}/core/PX_Log.h (100%) rename {UI => lib/PainterEngine}/core/PX_MFCC.c (100%) rename {UI => lib/PainterEngine}/core/PX_MFCC.h (100%) rename {UI => lib/PainterEngine}/core/PX_MathTable.h (100%) rename {UI => lib/PainterEngine}/core/PX_Memory.c (100%) rename {UI => lib/PainterEngine}/core/PX_Memory.h (100%) rename {UI => lib/PainterEngine}/core/PX_MemoryPool.c (100%) rename {UI => lib/PainterEngine}/core/PX_MemoryPool.h (100%) rename {UI => lib/PainterEngine}/core/PX_Packet.c (100%) rename {UI => lib/PainterEngine}/core/PX_Packet.h (100%) rename {UI => lib/PainterEngine}/core/PX_PointsMesh.c (100%) rename {UI => lib/PainterEngine}/core/PX_PointsMesh.h (100%) rename {UI => lib/PainterEngine}/core/PX_Quadtree.c (100%) rename {UI => lib/PainterEngine}/core/PX_Quadtree.h (100%) rename {UI => lib/PainterEngine}/core/PX_Quicksort.c (100%) rename {UI => lib/PainterEngine}/core/PX_Quicksort.h (100%) rename {UI => lib/PainterEngine}/core/PX_Sha256.c (100%) rename {UI => lib/PainterEngine}/core/PX_Sha256.h (100%) rename {UI => lib/PainterEngine}/core/PX_Sound.c (100%) rename {UI => lib/PainterEngine}/core/PX_Sound.h (100%) rename {UI => lib/PainterEngine}/core/PX_SoundModule.c (100%) rename {UI => lib/PainterEngine}/core/PX_SoundModule.h (100%) rename {UI => lib/PainterEngine}/core/PX_String.c (100%) rename {UI => lib/PainterEngine}/core/PX_String.h (100%) rename {UI => lib/PainterEngine}/core/PX_Surface.c (100%) rename {UI => lib/PainterEngine}/core/PX_Surface.h (100%) rename {UI => lib/PainterEngine}/core/PX_TRaw.c (100%) rename {UI => lib/PainterEngine}/core/PX_TRaw.h (100%) rename {UI => lib/PainterEngine}/core/PX_Texture.c (100%) rename {UI => lib/PainterEngine}/core/PX_Texture.h (100%) rename {UI => lib/PainterEngine}/core/PX_TriangleCross.c (100%) rename {UI => lib/PainterEngine}/core/PX_Tuning.c (100%) rename {UI => lib/PainterEngine}/core/PX_Tuning.h (100%) rename {UI => lib/PainterEngine}/core/PX_Typedef.c (100%) rename {UI => lib/PainterEngine}/core/PX_Typedef.h (100%) rename {UI => lib/PainterEngine}/core/PX_Vector.c (100%) rename {UI => lib/PainterEngine}/core/PX_Vector.h (100%) rename {UI => lib/PainterEngine}/core/PX_Wave.c (100%) rename {UI => lib/PainterEngine}/core/PX_Wave.h (100%) rename {UI => lib/PainterEngine}/core/PX_curve25519.c (100%) rename {UI => lib/PainterEngine}/core/PX_curve25519.h (100%) rename {UI => lib/PainterEngine}/core/PX_rbtree.c (100%) rename {UI => lib/PainterEngine}/core/PX_rbtree.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_2dxCommon.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_3D_ObjData.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_3D_ObjData.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Animation.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Animation.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Compiler.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Compiler.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Json.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Json.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Kernel.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Lexer.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Lexer.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_LiveFramework.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_LiveFramework.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_MODBUS.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_MODBUS.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_MQTT.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_MQTT.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Animation.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Animation.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_AutoText.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_AutoText.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_COMBox.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_COMBox.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_CheckBox.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_CheckBox.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Coordinate.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Coordinate.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_CursorButton.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_CursorButton.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_DesignerBox.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_DesignerBox.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Edit.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Edit.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Explorer.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Explorer.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_IPBox.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_IPBox.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Image.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Image.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Joystick.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Joystick.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Label.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Label.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_List.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_List.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_MemoryView.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_MemoryView.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Menu.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Menu.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_MessageBox.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_MessageBox.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Panc.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Panc.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Processbar.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Processbar.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Protractor.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Protractor.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_PushButton.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_PushButton.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_RadioBox.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_RadioBox.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_RingProcessbar.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_RingProcessbar.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_ScaleBox.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_ScaleBox.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_ScrollArea.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_ScrollArea.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Selectbar.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Selectbar.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Sliderbar.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Sliderbar.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_TransformAdapter.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_TransformAdapter.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_VarBox.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_VarBox.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Various.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Various.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_VirtualKeyboard.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_VirtualKeyboard.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Widget.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Object_Widget.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Partical.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Partical.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Resource.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Resource.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_ScriptCore.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Script_ASMCompiler.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Script_ASMCompiler.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Script_Interpreter.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Script_Interpreter.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Script_VM.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Script_VM.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_Sync.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_Sync.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_UI.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_UI.h (100%) rename {UI => lib/PainterEngine}/kernel/PX_World.c (100%) rename {UI => lib/PainterEngine}/kernel/PX_World.h (100%) rename {UI => lib/PainterEngine}/platform/modules/px_audio.h (100%) rename {UI => lib/PainterEngine}/platform/modules/px_file.h (100%) rename {UI => lib/PainterEngine}/platform/modules/px_serialport.h (100%) rename {UI => lib/PainterEngine}/platform/modules/px_tcp.h (100%) rename {UI => lib/PainterEngine}/platform/modules/px_thread.h (100%) rename {UI => lib/PainterEngine}/platform/modules/px_time.h (100%) rename {UI => lib/PainterEngine}/platform/modules/px_udp.h (100%) rename {UI => lib/PainterEngine}/platform/windows/mingw_build.bat (100%) rename {UI => lib/PainterEngine}/platform/windows/px_audio.cpp (100%) rename {UI => lib/PainterEngine}/platform/windows/px_display.cpp (100%) rename {UI => lib/PainterEngine}/platform/windows/px_display.h (100%) rename {UI => lib/PainterEngine}/platform/windows/px_file.c (100%) rename {UI => lib/PainterEngine}/platform/windows/px_main.c (100%) rename {UI => lib/PainterEngine}/platform/windows/px_serialport.c (100%) rename {UI => lib/PainterEngine}/platform/windows/px_tcp.c (100%) rename {UI => lib/PainterEngine}/platform/windows/px_thread.c (100%) rename {UI => lib/PainterEngine}/platform/windows/px_time.c (100%) rename {UI => lib/PainterEngine}/platform/windows/px_udp.c (100%) rename {UI => lib/PainterEngine}/supports/documents/PainterEngine API Manual.docx (100%) rename {UI => lib/PainterEngine}/supports/logo/PainterEngineLogo.png (100%) rename {UI => lib/PainterEngine}/supports/logo/logo_web.png (100%) rename {UI => lib/PainterEngine}/supports/old/Platform_Windows_D2D.cbak (100%) rename {UI => lib/PainterEngine}/supports/old/Platform_Windows_D2D.hcbak (100%) rename {UI => lib/PainterEngine}/supports/old/Platform_Windows_D3D.cpp (100%) rename {UI => lib/PainterEngine}/supports/old/Platform_Windows_D3D.h (100%) rename {UI => lib/PainterEngine}/supports/old/Platform_Windows_WaveOut.c (100%) rename UI/platform/windows/makefile => makefile (82%) rename {UI/project => src}/PainterEngine_Application.c (99%) rename {UI/project => src}/PainterEngine_Application.h (100%) rename {UI/project => src}/PainterEngine_Startup.c (100%) rename {UI/project => src}/PainterEngine_Startup.h (100%) rename {UI/project => src}/firstprize.traw (100%) rename {UI/project => src}/flagpicture.traw (100%) rename {UI/project => src}/minepicture.traw (100%) rename {UI/project => src}/potatoboom.traw (100%) rename {UI/project => src}/ranktitlepicture.traw (100%) rename {UI/project => src}/secondprize.traw (100%) rename {UI/project => src}/testimage.traw (100%) rename {UI/project => src}/thirdprize.traw (100%) rename {UI/project => src}/titlepicture.traw (100%) rename {UI/project => src}/titlepicture2.traw (100%) diff --git a/UI/project/app.c b/UI/project/app.c deleted file mode 100644 index 7fc4a82..0000000 --- a/UI/project/app.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "../include/map.h" - diff --git a/UI/project/map.c b/UI/project/map.c deleted file mode 100644 index 67e0b72..0000000 --- a/UI/project/map.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include -#include "../include/map.h" -#include "../include/mine_map.h" - -map *Setmine(int mode) -{ - map *Map = malloc(sizeof(map)); - if (Map == NULL) - return NULL; - switch (mode) - { - case MODE_EASY: - Map->mx = MX_EASY; - Map->my = MY_EASY; - Map->cnt = NUM_EASY; - break; - case MODE_MID: - Map->mx = MX_MID; - Map->my = MY_MID; - Map->cnt = NUM_MID; - break; - case MODE_HARD: - Map->mx = MX_HARD; - Map->my = MY_HARD; - Map->cnt = NUM_HARD; - break; - default: - break; - } - for (int i = 0; i <= Map->mx; i++) - { - for (int j = 0; j <= Map->my; j++) - { - Map->autobook[i][j] = 0; - Map->mineMap[i][j] = 0; - Map->stage[i][j] = 0; - } - } - int cnt = 0; - srand((unsigned int)time(0)); - while (cnt < Map->cnt) - { - int x, y; - x = (rand() % (Map->mx)) + 1; - y = (rand() % (Map->my)) + 1; - if (Map->mineMap[x][y] == 0) - { - Map->mineMap[x][y] = 1; - cnt++; - } - } - return Map; -} diff --git a/UI/project/opt.c b/UI/project/opt.c deleted file mode 100644 index 81cd61e..0000000 --- a/UI/project/opt.c +++ /dev/null @@ -1,229 +0,0 @@ -#include "../include/mine_map.h" -#include "../include/opt.h" -#include -#include - -int opt(map *m, opt_t opt) -{ - /** - * @brief 操作类型 - * - */ - int optMode; - /** - * @brief 操作坐标 - * - */ - int optX, optY; - optX = opt.x; - optY = opt.y; - optMode = opt.mode; - if (optX < 1 || optX > m->mx || optY < 1 || optY > m->my) - return UNALLOWED; - switch (optMode) - { - case OPT_LEFT_CLICK: - return fnOptLeftClick(optX, optY, m); - break; - case OPT_MID_CLICK: - return fnOptMidClick(optX, optY, m); - break; - case OPT_RIGTH_CLICK: - return fnOptRightClick(optX, optY, m); - break; - case OPT_TOTAL_CLICK: - return fnTotalFlag(m); - break; - default: - return UNALLOWED; - break; - } -} - -int opt_count(map *map, int x, int y) -{ - int cnt = 0; - for (int i = x - 1; i <= x + 1; i++) - { - for (int j = y - 1; j <= y + 1; j++) - { - if (i < 1 || j < 1 || i > map->mx || j > map->my) - continue; - if (i == x && j == y) - continue; - if (map->mineMap[i][j] == 1) - cnt++; - } - } - return cnt; -} - -int opt_flag_count(map *map, int x, int y) -{ - int cnt = 0; - for (int i = x - 1; i <= x + 1; i++) - { - for (int j = y - 1; j <= y + 1; j++) - { - if (i < 1 || j < 1 || i > map->mx || j > map->my) - continue; - if (i == x && j == y) - continue; - if (map->stage[i][j] == FLAGED) - cnt++; - } - } - return cnt; -} - -int fnOptLeftClick(int x, int y, map *m) -{ - /** - * @brief 地图当前状态 - * - */ - int map_stage; - - map_stage = m->stage[x][y]; - /** - * @brief 判断当前格子是否是雷 - * - */ - bool map_mine; - map_mine = (m->mineMap[x][y] == 1) ? true : false; - /** - * @brief 左键实现 - * 如果当前格子被标记或者已经打开 - * 返回UNALLOWED - */ - if (map_stage == FLAGED || map_stage == COVERED || map_stage == MARKED) - return UNALLOWED; - - if (map_mine == true) - { - m->stage[x][y] = COVERED; - return BOOM; - } - - m->stage[x][y] = COVERED; - if (opt_count(m, x, y) == 0) - fnOptAuto(x, y, m); - return ALLOWED; -} - -int fnOptRightClick(int x, int y, map *m) -{ - - /** - * @brief 地图当前状态 - * - */ - int map_stage; - - map_stage = m->stage[x][y]; - switch (map_stage) - { - case COVERED: - return UNALLOWED; - break; - case UNCOVERED: - m->stage[x][y] = FLAGED; - break; - case FLAGED: - m->stage[x][y] = MARKED; - break; - case MARKED: - m->stage[x][y] = UNCOVERED; - break; - default: - return ALLOWED; - break; - } -} - -int fnOptMidClick(int x, int y, map *m) -{ - /** - * @brief 地图当前状态 - * - */ - int map_stage; - map_stage = m->stage[x][y]; - if (map_stage != COVERED) - return UNALLOWED; - if (opt_count(m, x, y) != opt_flag_count(m, x, y)) - return UNALLOWED; - fnOptAuto(x, y, m); - return ALLOWED; -} - -void fnOptAuto(int x, int y, map *m) -{ - if (m->autobook[x][y] == 1) - return; - m->autobook[x][y] = 1; - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - int fx = x + i, fy = y + j; - if (i == 0 && j == 0) - continue; - if (fx < 1 || fx > m->mx || fy < 1 || fy > m->my) - continue; - if (m->stage[fx][fy] == UNCOVERED) - { - m->stage[fx][fy] = COVERED; - if (opt_count(m, fx, fy) == 0) - fnOptAuto(fx, fy, m); - } - } - } - return; -} - -bool opt_is_scuess(map m) -{ - /** - * @brief 扫雷成功条件 - * 打开所有不是雷的格子 - * - */ - int coverCnt = 0; - for (int i = 1; i <= m.mx; i++) - { - for (int j = 1; j <= m.my; j++) - { - if (m.stage[i][j] == COVERED) - coverCnt++; - } - } - if (coverCnt == (m.mx * m.my - m.cnt)) - return true; - else - return false; -} - -int fnTotalFlag(map *m) -{ - int flagCnt = 0; - for (int i = 1; i <= m->mx; i++) - for (int j = 1; j <= m->my; j++) - if (m->stage[i][j] == FLAGED) - flagCnt++; - if (flagCnt != m->cnt) - return UNALLOWED; - - for (int i = 1; i <= m->mx; i++) - { - for (int j = 1; j <= m->my; j++) - { - if (m->stage[i][j] != UNCOVERED) - continue; - m->stage[i][j] = COVERED; - if (m->mineMap[i][j] == 1) - return BOOM; - } - } - return ALLOWED; -} \ No newline at end of file diff --git a/UI/architecture/PainterEngine_Console.c b/lib/PainterEngine/architecture/PainterEngine_Console.c similarity index 100% rename from UI/architecture/PainterEngine_Console.c rename to lib/PainterEngine/architecture/PainterEngine_Console.c diff --git a/UI/architecture/PainterEngine_Console.h b/lib/PainterEngine/architecture/PainterEngine_Console.h similarity index 100% rename from UI/architecture/PainterEngine_Console.h rename to lib/PainterEngine/architecture/PainterEngine_Console.h diff --git a/UI/architecture/PainterEngine_Designer.c b/lib/PainterEngine/architecture/PainterEngine_Designer.c similarity index 100% rename from UI/architecture/PainterEngine_Designer.c rename to lib/PainterEngine/architecture/PainterEngine_Designer.c diff --git a/UI/architecture/PainterEngine_Designer.h b/lib/PainterEngine/architecture/PainterEngine_Designer.h similarity index 100% rename from UI/architecture/PainterEngine_Designer.h rename to lib/PainterEngine/architecture/PainterEngine_Designer.h diff --git a/UI/architecture/PainterEngine_Executer.c b/lib/PainterEngine/architecture/PainterEngine_Executer.c similarity index 100% rename from UI/architecture/PainterEngine_Executer.c rename to lib/PainterEngine/architecture/PainterEngine_Executer.c diff --git a/UI/architecture/PainterEngine_Executer.h b/lib/PainterEngine/architecture/PainterEngine_Executer.h similarity index 100% rename from UI/architecture/PainterEngine_Executer.h rename to lib/PainterEngine/architecture/PainterEngine_Executer.h diff --git a/UI/architecture/PainterEngine_FoxLogo.h b/lib/PainterEngine/architecture/PainterEngine_FoxLogo.h similarity index 100% rename from UI/architecture/PainterEngine_FoxLogo.h rename to lib/PainterEngine/architecture/PainterEngine_FoxLogo.h diff --git a/UI/architecture/PainterEngine_Runtime.c b/lib/PainterEngine/architecture/PainterEngine_Runtime.c similarity index 100% rename from UI/architecture/PainterEngine_Runtime.c rename to lib/PainterEngine/architecture/PainterEngine_Runtime.c diff --git a/UI/architecture/PainterEngine_Runtime.h b/lib/PainterEngine/architecture/PainterEngine_Runtime.h similarity index 100% rename from UI/architecture/PainterEngine_Runtime.h rename to lib/PainterEngine/architecture/PainterEngine_Runtime.h diff --git a/UI/core/PX_3D.c b/lib/PainterEngine/core/PX_3D.c similarity index 100% rename from UI/core/PX_3D.c rename to lib/PainterEngine/core/PX_3D.c diff --git a/UI/core/PX_3D.h b/lib/PainterEngine/core/PX_3D.h similarity index 100% rename from UI/core/PX_3D.h rename to lib/PainterEngine/core/PX_3D.h diff --git a/UI/core/PX_AES.c b/lib/PainterEngine/core/PX_AES.c similarity index 100% rename from UI/core/PX_AES.c rename to lib/PainterEngine/core/PX_AES.c diff --git a/UI/core/PX_AES.h b/lib/PainterEngine/core/PX_AES.h similarity index 100% rename from UI/core/PX_AES.h rename to lib/PainterEngine/core/PX_AES.h diff --git a/UI/core/PX_ANN.c b/lib/PainterEngine/core/PX_ANN.c similarity index 100% rename from UI/core/PX_ANN.c rename to lib/PainterEngine/core/PX_ANN.c diff --git a/UI/core/PX_ANN.h b/lib/PainterEngine/core/PX_ANN.h similarity index 100% rename from UI/core/PX_ANN.h rename to lib/PainterEngine/core/PX_ANN.h diff --git a/UI/core/PX_Arle.c b/lib/PainterEngine/core/PX_Arle.c similarity index 100% rename from UI/core/PX_Arle.c rename to lib/PainterEngine/core/PX_Arle.c diff --git a/UI/core/PX_Arle.h b/lib/PainterEngine/core/PX_Arle.h similarity index 100% rename from UI/core/PX_Arle.h rename to lib/PainterEngine/core/PX_Arle.h diff --git a/UI/core/PX_Base64.c b/lib/PainterEngine/core/PX_Base64.c similarity index 100% rename from UI/core/PX_Base64.c rename to lib/PainterEngine/core/PX_Base64.c diff --git a/UI/core/PX_Base64.h b/lib/PainterEngine/core/PX_Base64.h similarity index 100% rename from UI/core/PX_Base64.h rename to lib/PainterEngine/core/PX_Base64.h diff --git a/UI/core/PX_BaseGeo.c b/lib/PainterEngine/core/PX_BaseGeo.c similarity index 100% rename from UI/core/PX_BaseGeo.c rename to lib/PainterEngine/core/PX_BaseGeo.c diff --git a/UI/core/PX_BaseGeo.h b/lib/PainterEngine/core/PX_BaseGeo.h similarity index 100% rename from UI/core/PX_BaseGeo.h rename to lib/PainterEngine/core/PX_BaseGeo.h diff --git a/UI/core/PX_Bitmap.c b/lib/PainterEngine/core/PX_Bitmap.c similarity index 100% rename from UI/core/PX_Bitmap.c rename to lib/PainterEngine/core/PX_Bitmap.c diff --git a/UI/core/PX_Bitmap.h b/lib/PainterEngine/core/PX_Bitmap.h similarity index 100% rename from UI/core/PX_Bitmap.h rename to lib/PainterEngine/core/PX_Bitmap.h diff --git a/UI/core/PX_Core.h b/lib/PainterEngine/core/PX_Core.h similarity index 100% rename from UI/core/PX_Core.h rename to lib/PainterEngine/core/PX_Core.h diff --git a/UI/core/PX_Delaunay.c b/lib/PainterEngine/core/PX_Delaunay.c similarity index 100% rename from UI/core/PX_Delaunay.c rename to lib/PainterEngine/core/PX_Delaunay.c diff --git a/UI/core/PX_Delaunay.h b/lib/PainterEngine/core/PX_Delaunay.h similarity index 100% rename from UI/core/PX_Delaunay.h rename to lib/PainterEngine/core/PX_Delaunay.h diff --git a/UI/core/PX_Effect.c b/lib/PainterEngine/core/PX_Effect.c similarity index 100% rename from UI/core/PX_Effect.c rename to lib/PainterEngine/core/PX_Effect.c diff --git a/UI/core/PX_Effect.h b/lib/PainterEngine/core/PX_Effect.h similarity index 100% rename from UI/core/PX_Effect.h rename to lib/PainterEngine/core/PX_Effect.h diff --git a/UI/core/PX_Font.c b/lib/PainterEngine/core/PX_Font.c similarity index 100% rename from UI/core/PX_Font.c rename to lib/PainterEngine/core/PX_Font.c diff --git a/UI/core/PX_Font.h b/lib/PainterEngine/core/PX_Font.h similarity index 100% rename from UI/core/PX_Font.h rename to lib/PainterEngine/core/PX_Font.h diff --git a/UI/core/PX_Hashmap.c b/lib/PainterEngine/core/PX_Hashmap.c similarity index 100% rename from UI/core/PX_Hashmap.c rename to lib/PainterEngine/core/PX_Hashmap.c diff --git a/UI/core/PX_Hashmap.h b/lib/PainterEngine/core/PX_Hashmap.h similarity index 100% rename from UI/core/PX_Hashmap.h rename to lib/PainterEngine/core/PX_Hashmap.h diff --git a/UI/core/PX_Huffman.c b/lib/PainterEngine/core/PX_Huffman.c similarity index 100% rename from UI/core/PX_Huffman.c rename to lib/PainterEngine/core/PX_Huffman.c diff --git a/UI/core/PX_Huffman.h b/lib/PainterEngine/core/PX_Huffman.h similarity index 100% rename from UI/core/PX_Huffman.h rename to lib/PainterEngine/core/PX_Huffman.h diff --git a/UI/core/PX_ImageFilter.c b/lib/PainterEngine/core/PX_ImageFilter.c similarity index 100% rename from UI/core/PX_ImageFilter.c rename to lib/PainterEngine/core/PX_ImageFilter.c diff --git a/UI/core/PX_ImageFilter.h b/lib/PainterEngine/core/PX_ImageFilter.h similarity index 100% rename from UI/core/PX_ImageFilter.h rename to lib/PainterEngine/core/PX_ImageFilter.h diff --git a/UI/core/PX_KalmanFilter.c b/lib/PainterEngine/core/PX_KalmanFilter.c similarity index 100% rename from UI/core/PX_KalmanFilter.c rename to lib/PainterEngine/core/PX_KalmanFilter.c diff --git a/UI/core/PX_KalmanFilter.h b/lib/PainterEngine/core/PX_KalmanFilter.h similarity index 100% rename from UI/core/PX_KalmanFilter.h rename to lib/PainterEngine/core/PX_KalmanFilter.h diff --git a/UI/core/PX_Linker.c b/lib/PainterEngine/core/PX_Linker.c similarity index 100% rename from UI/core/PX_Linker.c rename to lib/PainterEngine/core/PX_Linker.c diff --git a/UI/core/PX_Linker.h b/lib/PainterEngine/core/PX_Linker.h similarity index 100% rename from UI/core/PX_Linker.h rename to lib/PainterEngine/core/PX_Linker.h diff --git a/UI/core/PX_List.c b/lib/PainterEngine/core/PX_List.c similarity index 100% rename from UI/core/PX_List.c rename to lib/PainterEngine/core/PX_List.c diff --git a/UI/core/PX_List.h b/lib/PainterEngine/core/PX_List.h similarity index 100% rename from UI/core/PX_List.h rename to lib/PainterEngine/core/PX_List.h diff --git a/UI/core/PX_Log.c b/lib/PainterEngine/core/PX_Log.c similarity index 100% rename from UI/core/PX_Log.c rename to lib/PainterEngine/core/PX_Log.c diff --git a/UI/core/PX_Log.h b/lib/PainterEngine/core/PX_Log.h similarity index 100% rename from UI/core/PX_Log.h rename to lib/PainterEngine/core/PX_Log.h diff --git a/UI/core/PX_MFCC.c b/lib/PainterEngine/core/PX_MFCC.c similarity index 100% rename from UI/core/PX_MFCC.c rename to lib/PainterEngine/core/PX_MFCC.c diff --git a/UI/core/PX_MFCC.h b/lib/PainterEngine/core/PX_MFCC.h similarity index 100% rename from UI/core/PX_MFCC.h rename to lib/PainterEngine/core/PX_MFCC.h diff --git a/UI/core/PX_MathTable.h b/lib/PainterEngine/core/PX_MathTable.h similarity index 100% rename from UI/core/PX_MathTable.h rename to lib/PainterEngine/core/PX_MathTable.h diff --git a/UI/core/PX_Memory.c b/lib/PainterEngine/core/PX_Memory.c similarity index 100% rename from UI/core/PX_Memory.c rename to lib/PainterEngine/core/PX_Memory.c diff --git a/UI/core/PX_Memory.h b/lib/PainterEngine/core/PX_Memory.h similarity index 100% rename from UI/core/PX_Memory.h rename to lib/PainterEngine/core/PX_Memory.h diff --git a/UI/core/PX_MemoryPool.c b/lib/PainterEngine/core/PX_MemoryPool.c similarity index 100% rename from UI/core/PX_MemoryPool.c rename to lib/PainterEngine/core/PX_MemoryPool.c diff --git a/UI/core/PX_MemoryPool.h b/lib/PainterEngine/core/PX_MemoryPool.h similarity index 100% rename from UI/core/PX_MemoryPool.h rename to lib/PainterEngine/core/PX_MemoryPool.h diff --git a/UI/core/PX_Packet.c b/lib/PainterEngine/core/PX_Packet.c similarity index 100% rename from UI/core/PX_Packet.c rename to lib/PainterEngine/core/PX_Packet.c diff --git a/UI/core/PX_Packet.h b/lib/PainterEngine/core/PX_Packet.h similarity index 100% rename from UI/core/PX_Packet.h rename to lib/PainterEngine/core/PX_Packet.h diff --git a/UI/core/PX_PointsMesh.c b/lib/PainterEngine/core/PX_PointsMesh.c similarity index 100% rename from UI/core/PX_PointsMesh.c rename to lib/PainterEngine/core/PX_PointsMesh.c diff --git a/UI/core/PX_PointsMesh.h b/lib/PainterEngine/core/PX_PointsMesh.h similarity index 100% rename from UI/core/PX_PointsMesh.h rename to lib/PainterEngine/core/PX_PointsMesh.h diff --git a/UI/core/PX_Quadtree.c b/lib/PainterEngine/core/PX_Quadtree.c similarity index 100% rename from UI/core/PX_Quadtree.c rename to lib/PainterEngine/core/PX_Quadtree.c diff --git a/UI/core/PX_Quadtree.h b/lib/PainterEngine/core/PX_Quadtree.h similarity index 100% rename from UI/core/PX_Quadtree.h rename to lib/PainterEngine/core/PX_Quadtree.h diff --git a/UI/core/PX_Quicksort.c b/lib/PainterEngine/core/PX_Quicksort.c similarity index 100% rename from UI/core/PX_Quicksort.c rename to lib/PainterEngine/core/PX_Quicksort.c diff --git a/UI/core/PX_Quicksort.h b/lib/PainterEngine/core/PX_Quicksort.h similarity index 100% rename from UI/core/PX_Quicksort.h rename to lib/PainterEngine/core/PX_Quicksort.h diff --git a/UI/core/PX_Sha256.c b/lib/PainterEngine/core/PX_Sha256.c similarity index 100% rename from UI/core/PX_Sha256.c rename to lib/PainterEngine/core/PX_Sha256.c diff --git a/UI/core/PX_Sha256.h b/lib/PainterEngine/core/PX_Sha256.h similarity index 100% rename from UI/core/PX_Sha256.h rename to lib/PainterEngine/core/PX_Sha256.h diff --git a/UI/core/PX_Sound.c b/lib/PainterEngine/core/PX_Sound.c similarity index 100% rename from UI/core/PX_Sound.c rename to lib/PainterEngine/core/PX_Sound.c diff --git a/UI/core/PX_Sound.h b/lib/PainterEngine/core/PX_Sound.h similarity index 100% rename from UI/core/PX_Sound.h rename to lib/PainterEngine/core/PX_Sound.h diff --git a/UI/core/PX_SoundModule.c b/lib/PainterEngine/core/PX_SoundModule.c similarity index 100% rename from UI/core/PX_SoundModule.c rename to lib/PainterEngine/core/PX_SoundModule.c diff --git a/UI/core/PX_SoundModule.h b/lib/PainterEngine/core/PX_SoundModule.h similarity index 100% rename from UI/core/PX_SoundModule.h rename to lib/PainterEngine/core/PX_SoundModule.h diff --git a/UI/core/PX_String.c b/lib/PainterEngine/core/PX_String.c similarity index 100% rename from UI/core/PX_String.c rename to lib/PainterEngine/core/PX_String.c diff --git a/UI/core/PX_String.h b/lib/PainterEngine/core/PX_String.h similarity index 100% rename from UI/core/PX_String.h rename to lib/PainterEngine/core/PX_String.h diff --git a/UI/core/PX_Surface.c b/lib/PainterEngine/core/PX_Surface.c similarity index 100% rename from UI/core/PX_Surface.c rename to lib/PainterEngine/core/PX_Surface.c diff --git a/UI/core/PX_Surface.h b/lib/PainterEngine/core/PX_Surface.h similarity index 100% rename from UI/core/PX_Surface.h rename to lib/PainterEngine/core/PX_Surface.h diff --git a/UI/core/PX_TRaw.c b/lib/PainterEngine/core/PX_TRaw.c similarity index 100% rename from UI/core/PX_TRaw.c rename to lib/PainterEngine/core/PX_TRaw.c diff --git a/UI/core/PX_TRaw.h b/lib/PainterEngine/core/PX_TRaw.h similarity index 100% rename from UI/core/PX_TRaw.h rename to lib/PainterEngine/core/PX_TRaw.h diff --git a/UI/core/PX_Texture.c b/lib/PainterEngine/core/PX_Texture.c similarity index 100% rename from UI/core/PX_Texture.c rename to lib/PainterEngine/core/PX_Texture.c diff --git a/UI/core/PX_Texture.h b/lib/PainterEngine/core/PX_Texture.h similarity index 100% rename from UI/core/PX_Texture.h rename to lib/PainterEngine/core/PX_Texture.h diff --git a/UI/core/PX_TriangleCross.c b/lib/PainterEngine/core/PX_TriangleCross.c similarity index 100% rename from UI/core/PX_TriangleCross.c rename to lib/PainterEngine/core/PX_TriangleCross.c diff --git a/UI/core/PX_Tuning.c b/lib/PainterEngine/core/PX_Tuning.c similarity index 100% rename from UI/core/PX_Tuning.c rename to lib/PainterEngine/core/PX_Tuning.c diff --git a/UI/core/PX_Tuning.h b/lib/PainterEngine/core/PX_Tuning.h similarity index 100% rename from UI/core/PX_Tuning.h rename to lib/PainterEngine/core/PX_Tuning.h diff --git a/UI/core/PX_Typedef.c b/lib/PainterEngine/core/PX_Typedef.c similarity index 100% rename from UI/core/PX_Typedef.c rename to lib/PainterEngine/core/PX_Typedef.c diff --git a/UI/core/PX_Typedef.h b/lib/PainterEngine/core/PX_Typedef.h similarity index 100% rename from UI/core/PX_Typedef.h rename to lib/PainterEngine/core/PX_Typedef.h diff --git a/UI/core/PX_Vector.c b/lib/PainterEngine/core/PX_Vector.c similarity index 100% rename from UI/core/PX_Vector.c rename to lib/PainterEngine/core/PX_Vector.c diff --git a/UI/core/PX_Vector.h b/lib/PainterEngine/core/PX_Vector.h similarity index 100% rename from UI/core/PX_Vector.h rename to lib/PainterEngine/core/PX_Vector.h diff --git a/UI/core/PX_Wave.c b/lib/PainterEngine/core/PX_Wave.c similarity index 100% rename from UI/core/PX_Wave.c rename to lib/PainterEngine/core/PX_Wave.c diff --git a/UI/core/PX_Wave.h b/lib/PainterEngine/core/PX_Wave.h similarity index 100% rename from UI/core/PX_Wave.h rename to lib/PainterEngine/core/PX_Wave.h diff --git a/UI/core/PX_curve25519.c b/lib/PainterEngine/core/PX_curve25519.c similarity index 100% rename from UI/core/PX_curve25519.c rename to lib/PainterEngine/core/PX_curve25519.c diff --git a/UI/core/PX_curve25519.h b/lib/PainterEngine/core/PX_curve25519.h similarity index 100% rename from UI/core/PX_curve25519.h rename to lib/PainterEngine/core/PX_curve25519.h diff --git a/UI/core/PX_rbtree.c b/lib/PainterEngine/core/PX_rbtree.c similarity index 100% rename from UI/core/PX_rbtree.c rename to lib/PainterEngine/core/PX_rbtree.c diff --git a/UI/core/PX_rbtree.h b/lib/PainterEngine/core/PX_rbtree.h similarity index 100% rename from UI/core/PX_rbtree.h rename to lib/PainterEngine/core/PX_rbtree.h diff --git a/UI/kernel/PX_2dxCommon.h b/lib/PainterEngine/kernel/PX_2dxCommon.h similarity index 100% rename from UI/kernel/PX_2dxCommon.h rename to lib/PainterEngine/kernel/PX_2dxCommon.h diff --git a/UI/kernel/PX_3D_ObjData.c b/lib/PainterEngine/kernel/PX_3D_ObjData.c similarity index 100% rename from UI/kernel/PX_3D_ObjData.c rename to lib/PainterEngine/kernel/PX_3D_ObjData.c diff --git a/UI/kernel/PX_3D_ObjData.h b/lib/PainterEngine/kernel/PX_3D_ObjData.h similarity index 100% rename from UI/kernel/PX_3D_ObjData.h rename to lib/PainterEngine/kernel/PX_3D_ObjData.h diff --git a/UI/kernel/PX_Animation.c b/lib/PainterEngine/kernel/PX_Animation.c similarity index 100% rename from UI/kernel/PX_Animation.c rename to lib/PainterEngine/kernel/PX_Animation.c diff --git a/UI/kernel/PX_Animation.h b/lib/PainterEngine/kernel/PX_Animation.h similarity index 100% rename from UI/kernel/PX_Animation.h rename to lib/PainterEngine/kernel/PX_Animation.h diff --git a/UI/kernel/PX_Compiler.c b/lib/PainterEngine/kernel/PX_Compiler.c similarity index 100% rename from UI/kernel/PX_Compiler.c rename to lib/PainterEngine/kernel/PX_Compiler.c diff --git a/UI/kernel/PX_Compiler.h b/lib/PainterEngine/kernel/PX_Compiler.h similarity index 100% rename from UI/kernel/PX_Compiler.h rename to lib/PainterEngine/kernel/PX_Compiler.h diff --git a/UI/kernel/PX_Json.c b/lib/PainterEngine/kernel/PX_Json.c similarity index 100% rename from UI/kernel/PX_Json.c rename to lib/PainterEngine/kernel/PX_Json.c diff --git a/UI/kernel/PX_Json.h b/lib/PainterEngine/kernel/PX_Json.h similarity index 100% rename from UI/kernel/PX_Json.h rename to lib/PainterEngine/kernel/PX_Json.h diff --git a/UI/kernel/PX_Kernel.h b/lib/PainterEngine/kernel/PX_Kernel.h similarity index 100% rename from UI/kernel/PX_Kernel.h rename to lib/PainterEngine/kernel/PX_Kernel.h diff --git a/UI/kernel/PX_Lexer.c b/lib/PainterEngine/kernel/PX_Lexer.c similarity index 100% rename from UI/kernel/PX_Lexer.c rename to lib/PainterEngine/kernel/PX_Lexer.c diff --git a/UI/kernel/PX_Lexer.h b/lib/PainterEngine/kernel/PX_Lexer.h similarity index 100% rename from UI/kernel/PX_Lexer.h rename to lib/PainterEngine/kernel/PX_Lexer.h diff --git a/UI/kernel/PX_LiveFramework.c b/lib/PainterEngine/kernel/PX_LiveFramework.c similarity index 100% rename from UI/kernel/PX_LiveFramework.c rename to lib/PainterEngine/kernel/PX_LiveFramework.c diff --git a/UI/kernel/PX_LiveFramework.h b/lib/PainterEngine/kernel/PX_LiveFramework.h similarity index 100% rename from UI/kernel/PX_LiveFramework.h rename to lib/PainterEngine/kernel/PX_LiveFramework.h diff --git a/UI/kernel/PX_MODBUS.c b/lib/PainterEngine/kernel/PX_MODBUS.c similarity index 100% rename from UI/kernel/PX_MODBUS.c rename to lib/PainterEngine/kernel/PX_MODBUS.c diff --git a/UI/kernel/PX_MODBUS.h b/lib/PainterEngine/kernel/PX_MODBUS.h similarity index 100% rename from UI/kernel/PX_MODBUS.h rename to lib/PainterEngine/kernel/PX_MODBUS.h diff --git a/UI/kernel/PX_MQTT.c b/lib/PainterEngine/kernel/PX_MQTT.c similarity index 100% rename from UI/kernel/PX_MQTT.c rename to lib/PainterEngine/kernel/PX_MQTT.c diff --git a/UI/kernel/PX_MQTT.h b/lib/PainterEngine/kernel/PX_MQTT.h similarity index 100% rename from UI/kernel/PX_MQTT.h rename to lib/PainterEngine/kernel/PX_MQTT.h diff --git a/UI/kernel/PX_Object.c b/lib/PainterEngine/kernel/PX_Object.c similarity index 100% rename from UI/kernel/PX_Object.c rename to lib/PainterEngine/kernel/PX_Object.c diff --git a/UI/kernel/PX_Object.h b/lib/PainterEngine/kernel/PX_Object.h similarity index 100% rename from UI/kernel/PX_Object.h rename to lib/PainterEngine/kernel/PX_Object.h diff --git a/UI/kernel/PX_Object_Animation.c b/lib/PainterEngine/kernel/PX_Object_Animation.c similarity index 100% rename from UI/kernel/PX_Object_Animation.c rename to lib/PainterEngine/kernel/PX_Object_Animation.c diff --git a/UI/kernel/PX_Object_Animation.h b/lib/PainterEngine/kernel/PX_Object_Animation.h similarity index 100% rename from UI/kernel/PX_Object_Animation.h rename to lib/PainterEngine/kernel/PX_Object_Animation.h diff --git a/UI/kernel/PX_Object_AutoText.c b/lib/PainterEngine/kernel/PX_Object_AutoText.c similarity index 100% rename from UI/kernel/PX_Object_AutoText.c rename to lib/PainterEngine/kernel/PX_Object_AutoText.c diff --git a/UI/kernel/PX_Object_AutoText.h b/lib/PainterEngine/kernel/PX_Object_AutoText.h similarity index 100% rename from UI/kernel/PX_Object_AutoText.h rename to lib/PainterEngine/kernel/PX_Object_AutoText.h diff --git a/UI/kernel/PX_Object_COMBox.c b/lib/PainterEngine/kernel/PX_Object_COMBox.c similarity index 100% rename from UI/kernel/PX_Object_COMBox.c rename to lib/PainterEngine/kernel/PX_Object_COMBox.c diff --git a/UI/kernel/PX_Object_COMBox.h b/lib/PainterEngine/kernel/PX_Object_COMBox.h similarity index 100% rename from UI/kernel/PX_Object_COMBox.h rename to lib/PainterEngine/kernel/PX_Object_COMBox.h diff --git a/UI/kernel/PX_Object_CheckBox.c b/lib/PainterEngine/kernel/PX_Object_CheckBox.c similarity index 100% rename from UI/kernel/PX_Object_CheckBox.c rename to lib/PainterEngine/kernel/PX_Object_CheckBox.c diff --git a/UI/kernel/PX_Object_CheckBox.h b/lib/PainterEngine/kernel/PX_Object_CheckBox.h similarity index 100% rename from UI/kernel/PX_Object_CheckBox.h rename to lib/PainterEngine/kernel/PX_Object_CheckBox.h diff --git a/UI/kernel/PX_Object_Coordinate.c b/lib/PainterEngine/kernel/PX_Object_Coordinate.c similarity index 100% rename from UI/kernel/PX_Object_Coordinate.c rename to lib/PainterEngine/kernel/PX_Object_Coordinate.c diff --git a/UI/kernel/PX_Object_Coordinate.h b/lib/PainterEngine/kernel/PX_Object_Coordinate.h similarity index 100% rename from UI/kernel/PX_Object_Coordinate.h rename to lib/PainterEngine/kernel/PX_Object_Coordinate.h diff --git a/UI/kernel/PX_Object_CursorButton.c b/lib/PainterEngine/kernel/PX_Object_CursorButton.c similarity index 100% rename from UI/kernel/PX_Object_CursorButton.c rename to lib/PainterEngine/kernel/PX_Object_CursorButton.c diff --git a/UI/kernel/PX_Object_CursorButton.h b/lib/PainterEngine/kernel/PX_Object_CursorButton.h similarity index 100% rename from UI/kernel/PX_Object_CursorButton.h rename to lib/PainterEngine/kernel/PX_Object_CursorButton.h diff --git a/UI/kernel/PX_Object_DesignerBox.c b/lib/PainterEngine/kernel/PX_Object_DesignerBox.c similarity index 100% rename from UI/kernel/PX_Object_DesignerBox.c rename to lib/PainterEngine/kernel/PX_Object_DesignerBox.c diff --git a/UI/kernel/PX_Object_DesignerBox.h b/lib/PainterEngine/kernel/PX_Object_DesignerBox.h similarity index 100% rename from UI/kernel/PX_Object_DesignerBox.h rename to lib/PainterEngine/kernel/PX_Object_DesignerBox.h diff --git a/UI/kernel/PX_Object_Edit.c b/lib/PainterEngine/kernel/PX_Object_Edit.c similarity index 100% rename from UI/kernel/PX_Object_Edit.c rename to lib/PainterEngine/kernel/PX_Object_Edit.c diff --git a/UI/kernel/PX_Object_Edit.h b/lib/PainterEngine/kernel/PX_Object_Edit.h similarity index 100% rename from UI/kernel/PX_Object_Edit.h rename to lib/PainterEngine/kernel/PX_Object_Edit.h diff --git a/UI/kernel/PX_Object_Explorer.c b/lib/PainterEngine/kernel/PX_Object_Explorer.c similarity index 100% rename from UI/kernel/PX_Object_Explorer.c rename to lib/PainterEngine/kernel/PX_Object_Explorer.c diff --git a/UI/kernel/PX_Object_Explorer.h b/lib/PainterEngine/kernel/PX_Object_Explorer.h similarity index 100% rename from UI/kernel/PX_Object_Explorer.h rename to lib/PainterEngine/kernel/PX_Object_Explorer.h diff --git a/UI/kernel/PX_Object_IPBox.c b/lib/PainterEngine/kernel/PX_Object_IPBox.c similarity index 100% rename from UI/kernel/PX_Object_IPBox.c rename to lib/PainterEngine/kernel/PX_Object_IPBox.c diff --git a/UI/kernel/PX_Object_IPBox.h b/lib/PainterEngine/kernel/PX_Object_IPBox.h similarity index 100% rename from UI/kernel/PX_Object_IPBox.h rename to lib/PainterEngine/kernel/PX_Object_IPBox.h diff --git a/UI/kernel/PX_Object_Image.c b/lib/PainterEngine/kernel/PX_Object_Image.c similarity index 100% rename from UI/kernel/PX_Object_Image.c rename to lib/PainterEngine/kernel/PX_Object_Image.c diff --git a/UI/kernel/PX_Object_Image.h b/lib/PainterEngine/kernel/PX_Object_Image.h similarity index 100% rename from UI/kernel/PX_Object_Image.h rename to lib/PainterEngine/kernel/PX_Object_Image.h diff --git a/UI/kernel/PX_Object_Joystick.c b/lib/PainterEngine/kernel/PX_Object_Joystick.c similarity index 100% rename from UI/kernel/PX_Object_Joystick.c rename to lib/PainterEngine/kernel/PX_Object_Joystick.c diff --git a/UI/kernel/PX_Object_Joystick.h b/lib/PainterEngine/kernel/PX_Object_Joystick.h similarity index 100% rename from UI/kernel/PX_Object_Joystick.h rename to lib/PainterEngine/kernel/PX_Object_Joystick.h diff --git a/UI/kernel/PX_Object_Label.c b/lib/PainterEngine/kernel/PX_Object_Label.c similarity index 100% rename from UI/kernel/PX_Object_Label.c rename to lib/PainterEngine/kernel/PX_Object_Label.c diff --git a/UI/kernel/PX_Object_Label.h b/lib/PainterEngine/kernel/PX_Object_Label.h similarity index 100% rename from UI/kernel/PX_Object_Label.h rename to lib/PainterEngine/kernel/PX_Object_Label.h diff --git a/UI/kernel/PX_Object_List.c b/lib/PainterEngine/kernel/PX_Object_List.c similarity index 100% rename from UI/kernel/PX_Object_List.c rename to lib/PainterEngine/kernel/PX_Object_List.c diff --git a/UI/kernel/PX_Object_List.h b/lib/PainterEngine/kernel/PX_Object_List.h similarity index 100% rename from UI/kernel/PX_Object_List.h rename to lib/PainterEngine/kernel/PX_Object_List.h diff --git a/UI/kernel/PX_Object_MemoryView.c b/lib/PainterEngine/kernel/PX_Object_MemoryView.c similarity index 100% rename from UI/kernel/PX_Object_MemoryView.c rename to lib/PainterEngine/kernel/PX_Object_MemoryView.c diff --git a/UI/kernel/PX_Object_MemoryView.h b/lib/PainterEngine/kernel/PX_Object_MemoryView.h similarity index 100% rename from UI/kernel/PX_Object_MemoryView.h rename to lib/PainterEngine/kernel/PX_Object_MemoryView.h diff --git a/UI/kernel/PX_Object_Menu.c b/lib/PainterEngine/kernel/PX_Object_Menu.c similarity index 100% rename from UI/kernel/PX_Object_Menu.c rename to lib/PainterEngine/kernel/PX_Object_Menu.c diff --git a/UI/kernel/PX_Object_Menu.h b/lib/PainterEngine/kernel/PX_Object_Menu.h similarity index 100% rename from UI/kernel/PX_Object_Menu.h rename to lib/PainterEngine/kernel/PX_Object_Menu.h diff --git a/UI/kernel/PX_Object_MessageBox.c b/lib/PainterEngine/kernel/PX_Object_MessageBox.c similarity index 100% rename from UI/kernel/PX_Object_MessageBox.c rename to lib/PainterEngine/kernel/PX_Object_MessageBox.c diff --git a/UI/kernel/PX_Object_MessageBox.h b/lib/PainterEngine/kernel/PX_Object_MessageBox.h similarity index 100% rename from UI/kernel/PX_Object_MessageBox.h rename to lib/PainterEngine/kernel/PX_Object_MessageBox.h diff --git a/UI/kernel/PX_Object_Panc.c b/lib/PainterEngine/kernel/PX_Object_Panc.c similarity index 100% rename from UI/kernel/PX_Object_Panc.c rename to lib/PainterEngine/kernel/PX_Object_Panc.c diff --git a/UI/kernel/PX_Object_Panc.h b/lib/PainterEngine/kernel/PX_Object_Panc.h similarity index 100% rename from UI/kernel/PX_Object_Panc.h rename to lib/PainterEngine/kernel/PX_Object_Panc.h diff --git a/UI/kernel/PX_Object_Processbar.c b/lib/PainterEngine/kernel/PX_Object_Processbar.c similarity index 100% rename from UI/kernel/PX_Object_Processbar.c rename to lib/PainterEngine/kernel/PX_Object_Processbar.c diff --git a/UI/kernel/PX_Object_Processbar.h b/lib/PainterEngine/kernel/PX_Object_Processbar.h similarity index 100% rename from UI/kernel/PX_Object_Processbar.h rename to lib/PainterEngine/kernel/PX_Object_Processbar.h diff --git a/UI/kernel/PX_Object_Protractor.c b/lib/PainterEngine/kernel/PX_Object_Protractor.c similarity index 100% rename from UI/kernel/PX_Object_Protractor.c rename to lib/PainterEngine/kernel/PX_Object_Protractor.c diff --git a/UI/kernel/PX_Object_Protractor.h b/lib/PainterEngine/kernel/PX_Object_Protractor.h similarity index 100% rename from UI/kernel/PX_Object_Protractor.h rename to lib/PainterEngine/kernel/PX_Object_Protractor.h diff --git a/UI/kernel/PX_Object_PushButton.c b/lib/PainterEngine/kernel/PX_Object_PushButton.c similarity index 100% rename from UI/kernel/PX_Object_PushButton.c rename to lib/PainterEngine/kernel/PX_Object_PushButton.c diff --git a/UI/kernel/PX_Object_PushButton.h b/lib/PainterEngine/kernel/PX_Object_PushButton.h similarity index 100% rename from UI/kernel/PX_Object_PushButton.h rename to lib/PainterEngine/kernel/PX_Object_PushButton.h diff --git a/UI/kernel/PX_Object_RadioBox.c b/lib/PainterEngine/kernel/PX_Object_RadioBox.c similarity index 100% rename from UI/kernel/PX_Object_RadioBox.c rename to lib/PainterEngine/kernel/PX_Object_RadioBox.c diff --git a/UI/kernel/PX_Object_RadioBox.h b/lib/PainterEngine/kernel/PX_Object_RadioBox.h similarity index 100% rename from UI/kernel/PX_Object_RadioBox.h rename to lib/PainterEngine/kernel/PX_Object_RadioBox.h diff --git a/UI/kernel/PX_Object_RingProcessbar.c b/lib/PainterEngine/kernel/PX_Object_RingProcessbar.c similarity index 100% rename from UI/kernel/PX_Object_RingProcessbar.c rename to lib/PainterEngine/kernel/PX_Object_RingProcessbar.c diff --git a/UI/kernel/PX_Object_RingProcessbar.h b/lib/PainterEngine/kernel/PX_Object_RingProcessbar.h similarity index 100% rename from UI/kernel/PX_Object_RingProcessbar.h rename to lib/PainterEngine/kernel/PX_Object_RingProcessbar.h diff --git a/UI/kernel/PX_Object_ScaleBox.c b/lib/PainterEngine/kernel/PX_Object_ScaleBox.c similarity index 100% rename from UI/kernel/PX_Object_ScaleBox.c rename to lib/PainterEngine/kernel/PX_Object_ScaleBox.c diff --git a/UI/kernel/PX_Object_ScaleBox.h b/lib/PainterEngine/kernel/PX_Object_ScaleBox.h similarity index 100% rename from UI/kernel/PX_Object_ScaleBox.h rename to lib/PainterEngine/kernel/PX_Object_ScaleBox.h diff --git a/UI/kernel/PX_Object_ScrollArea.c b/lib/PainterEngine/kernel/PX_Object_ScrollArea.c similarity index 100% rename from UI/kernel/PX_Object_ScrollArea.c rename to lib/PainterEngine/kernel/PX_Object_ScrollArea.c diff --git a/UI/kernel/PX_Object_ScrollArea.h b/lib/PainterEngine/kernel/PX_Object_ScrollArea.h similarity index 100% rename from UI/kernel/PX_Object_ScrollArea.h rename to lib/PainterEngine/kernel/PX_Object_ScrollArea.h diff --git a/UI/kernel/PX_Object_Selectbar.c b/lib/PainterEngine/kernel/PX_Object_Selectbar.c similarity index 100% rename from UI/kernel/PX_Object_Selectbar.c rename to lib/PainterEngine/kernel/PX_Object_Selectbar.c diff --git a/UI/kernel/PX_Object_Selectbar.h b/lib/PainterEngine/kernel/PX_Object_Selectbar.h similarity index 100% rename from UI/kernel/PX_Object_Selectbar.h rename to lib/PainterEngine/kernel/PX_Object_Selectbar.h diff --git a/UI/kernel/PX_Object_Sliderbar.c b/lib/PainterEngine/kernel/PX_Object_Sliderbar.c similarity index 100% rename from UI/kernel/PX_Object_Sliderbar.c rename to lib/PainterEngine/kernel/PX_Object_Sliderbar.c diff --git a/UI/kernel/PX_Object_Sliderbar.h b/lib/PainterEngine/kernel/PX_Object_Sliderbar.h similarity index 100% rename from UI/kernel/PX_Object_Sliderbar.h rename to lib/PainterEngine/kernel/PX_Object_Sliderbar.h diff --git a/UI/kernel/PX_Object_TransformAdapter.c b/lib/PainterEngine/kernel/PX_Object_TransformAdapter.c similarity index 100% rename from UI/kernel/PX_Object_TransformAdapter.c rename to lib/PainterEngine/kernel/PX_Object_TransformAdapter.c diff --git a/UI/kernel/PX_Object_TransformAdapter.h b/lib/PainterEngine/kernel/PX_Object_TransformAdapter.h similarity index 100% rename from UI/kernel/PX_Object_TransformAdapter.h rename to lib/PainterEngine/kernel/PX_Object_TransformAdapter.h diff --git a/UI/kernel/PX_Object_VarBox.c b/lib/PainterEngine/kernel/PX_Object_VarBox.c similarity index 100% rename from UI/kernel/PX_Object_VarBox.c rename to lib/PainterEngine/kernel/PX_Object_VarBox.c diff --git a/UI/kernel/PX_Object_VarBox.h b/lib/PainterEngine/kernel/PX_Object_VarBox.h similarity index 100% rename from UI/kernel/PX_Object_VarBox.h rename to lib/PainterEngine/kernel/PX_Object_VarBox.h diff --git a/UI/kernel/PX_Object_Various.c b/lib/PainterEngine/kernel/PX_Object_Various.c similarity index 100% rename from UI/kernel/PX_Object_Various.c rename to lib/PainterEngine/kernel/PX_Object_Various.c diff --git a/UI/kernel/PX_Object_Various.h b/lib/PainterEngine/kernel/PX_Object_Various.h similarity index 100% rename from UI/kernel/PX_Object_Various.h rename to lib/PainterEngine/kernel/PX_Object_Various.h diff --git a/UI/kernel/PX_Object_VirtualKeyboard.c b/lib/PainterEngine/kernel/PX_Object_VirtualKeyboard.c similarity index 100% rename from UI/kernel/PX_Object_VirtualKeyboard.c rename to lib/PainterEngine/kernel/PX_Object_VirtualKeyboard.c diff --git a/UI/kernel/PX_Object_VirtualKeyboard.h b/lib/PainterEngine/kernel/PX_Object_VirtualKeyboard.h similarity index 100% rename from UI/kernel/PX_Object_VirtualKeyboard.h rename to lib/PainterEngine/kernel/PX_Object_VirtualKeyboard.h diff --git a/UI/kernel/PX_Object_Widget.c b/lib/PainterEngine/kernel/PX_Object_Widget.c similarity index 100% rename from UI/kernel/PX_Object_Widget.c rename to lib/PainterEngine/kernel/PX_Object_Widget.c diff --git a/UI/kernel/PX_Object_Widget.h b/lib/PainterEngine/kernel/PX_Object_Widget.h similarity index 100% rename from UI/kernel/PX_Object_Widget.h rename to lib/PainterEngine/kernel/PX_Object_Widget.h diff --git a/UI/kernel/PX_Partical.c b/lib/PainterEngine/kernel/PX_Partical.c similarity index 100% rename from UI/kernel/PX_Partical.c rename to lib/PainterEngine/kernel/PX_Partical.c diff --git a/UI/kernel/PX_Partical.h b/lib/PainterEngine/kernel/PX_Partical.h similarity index 100% rename from UI/kernel/PX_Partical.h rename to lib/PainterEngine/kernel/PX_Partical.h diff --git a/UI/kernel/PX_Resource.c b/lib/PainterEngine/kernel/PX_Resource.c similarity index 100% rename from UI/kernel/PX_Resource.c rename to lib/PainterEngine/kernel/PX_Resource.c diff --git a/UI/kernel/PX_Resource.h b/lib/PainterEngine/kernel/PX_Resource.h similarity index 100% rename from UI/kernel/PX_Resource.h rename to lib/PainterEngine/kernel/PX_Resource.h diff --git a/UI/kernel/PX_ScriptCore.h b/lib/PainterEngine/kernel/PX_ScriptCore.h similarity index 100% rename from UI/kernel/PX_ScriptCore.h rename to lib/PainterEngine/kernel/PX_ScriptCore.h diff --git a/UI/kernel/PX_Script_ASMCompiler.c b/lib/PainterEngine/kernel/PX_Script_ASMCompiler.c similarity index 100% rename from UI/kernel/PX_Script_ASMCompiler.c rename to lib/PainterEngine/kernel/PX_Script_ASMCompiler.c diff --git a/UI/kernel/PX_Script_ASMCompiler.h b/lib/PainterEngine/kernel/PX_Script_ASMCompiler.h similarity index 100% rename from UI/kernel/PX_Script_ASMCompiler.h rename to lib/PainterEngine/kernel/PX_Script_ASMCompiler.h diff --git a/UI/kernel/PX_Script_Interpreter.c b/lib/PainterEngine/kernel/PX_Script_Interpreter.c similarity index 100% rename from UI/kernel/PX_Script_Interpreter.c rename to lib/PainterEngine/kernel/PX_Script_Interpreter.c diff --git a/UI/kernel/PX_Script_Interpreter.h b/lib/PainterEngine/kernel/PX_Script_Interpreter.h similarity index 100% rename from UI/kernel/PX_Script_Interpreter.h rename to lib/PainterEngine/kernel/PX_Script_Interpreter.h diff --git a/UI/kernel/PX_Script_VM.c b/lib/PainterEngine/kernel/PX_Script_VM.c similarity index 100% rename from UI/kernel/PX_Script_VM.c rename to lib/PainterEngine/kernel/PX_Script_VM.c diff --git a/UI/kernel/PX_Script_VM.h b/lib/PainterEngine/kernel/PX_Script_VM.h similarity index 100% rename from UI/kernel/PX_Script_VM.h rename to lib/PainterEngine/kernel/PX_Script_VM.h diff --git a/UI/kernel/PX_Sync.c b/lib/PainterEngine/kernel/PX_Sync.c similarity index 100% rename from UI/kernel/PX_Sync.c rename to lib/PainterEngine/kernel/PX_Sync.c diff --git a/UI/kernel/PX_Sync.h b/lib/PainterEngine/kernel/PX_Sync.h similarity index 100% rename from UI/kernel/PX_Sync.h rename to lib/PainterEngine/kernel/PX_Sync.h diff --git a/UI/kernel/PX_UI.c b/lib/PainterEngine/kernel/PX_UI.c similarity index 100% rename from UI/kernel/PX_UI.c rename to lib/PainterEngine/kernel/PX_UI.c diff --git a/UI/kernel/PX_UI.h b/lib/PainterEngine/kernel/PX_UI.h similarity index 100% rename from UI/kernel/PX_UI.h rename to lib/PainterEngine/kernel/PX_UI.h diff --git a/UI/kernel/PX_World.c b/lib/PainterEngine/kernel/PX_World.c similarity index 100% rename from UI/kernel/PX_World.c rename to lib/PainterEngine/kernel/PX_World.c diff --git a/UI/kernel/PX_World.h b/lib/PainterEngine/kernel/PX_World.h similarity index 100% rename from UI/kernel/PX_World.h rename to lib/PainterEngine/kernel/PX_World.h diff --git a/UI/platform/modules/px_audio.h b/lib/PainterEngine/platform/modules/px_audio.h similarity index 100% rename from UI/platform/modules/px_audio.h rename to lib/PainterEngine/platform/modules/px_audio.h diff --git a/UI/platform/modules/px_file.h b/lib/PainterEngine/platform/modules/px_file.h similarity index 100% rename from UI/platform/modules/px_file.h rename to lib/PainterEngine/platform/modules/px_file.h diff --git a/UI/platform/modules/px_serialport.h b/lib/PainterEngine/platform/modules/px_serialport.h similarity index 100% rename from UI/platform/modules/px_serialport.h rename to lib/PainterEngine/platform/modules/px_serialport.h diff --git a/UI/platform/modules/px_tcp.h b/lib/PainterEngine/platform/modules/px_tcp.h similarity index 100% rename from UI/platform/modules/px_tcp.h rename to lib/PainterEngine/platform/modules/px_tcp.h diff --git a/UI/platform/modules/px_thread.h b/lib/PainterEngine/platform/modules/px_thread.h similarity index 100% rename from UI/platform/modules/px_thread.h rename to lib/PainterEngine/platform/modules/px_thread.h diff --git a/UI/platform/modules/px_time.h b/lib/PainterEngine/platform/modules/px_time.h similarity index 100% rename from UI/platform/modules/px_time.h rename to lib/PainterEngine/platform/modules/px_time.h diff --git a/UI/platform/modules/px_udp.h b/lib/PainterEngine/platform/modules/px_udp.h similarity index 100% rename from UI/platform/modules/px_udp.h rename to lib/PainterEngine/platform/modules/px_udp.h diff --git a/UI/platform/windows/mingw_build.bat b/lib/PainterEngine/platform/windows/mingw_build.bat similarity index 100% rename from UI/platform/windows/mingw_build.bat rename to lib/PainterEngine/platform/windows/mingw_build.bat diff --git a/UI/platform/windows/px_audio.cpp b/lib/PainterEngine/platform/windows/px_audio.cpp similarity index 100% rename from UI/platform/windows/px_audio.cpp rename to lib/PainterEngine/platform/windows/px_audio.cpp diff --git a/UI/platform/windows/px_display.cpp b/lib/PainterEngine/platform/windows/px_display.cpp similarity index 100% rename from UI/platform/windows/px_display.cpp rename to lib/PainterEngine/platform/windows/px_display.cpp diff --git a/UI/platform/windows/px_display.h b/lib/PainterEngine/platform/windows/px_display.h similarity index 100% rename from UI/platform/windows/px_display.h rename to lib/PainterEngine/platform/windows/px_display.h diff --git a/UI/platform/windows/px_file.c b/lib/PainterEngine/platform/windows/px_file.c similarity index 100% rename from UI/platform/windows/px_file.c rename to lib/PainterEngine/platform/windows/px_file.c diff --git a/UI/platform/windows/px_main.c b/lib/PainterEngine/platform/windows/px_main.c similarity index 100% rename from UI/platform/windows/px_main.c rename to lib/PainterEngine/platform/windows/px_main.c diff --git a/UI/platform/windows/px_serialport.c b/lib/PainterEngine/platform/windows/px_serialport.c similarity index 100% rename from UI/platform/windows/px_serialport.c rename to lib/PainterEngine/platform/windows/px_serialport.c diff --git a/UI/platform/windows/px_tcp.c b/lib/PainterEngine/platform/windows/px_tcp.c similarity index 100% rename from UI/platform/windows/px_tcp.c rename to lib/PainterEngine/platform/windows/px_tcp.c diff --git a/UI/platform/windows/px_thread.c b/lib/PainterEngine/platform/windows/px_thread.c similarity index 100% rename from UI/platform/windows/px_thread.c rename to lib/PainterEngine/platform/windows/px_thread.c diff --git a/UI/platform/windows/px_time.c b/lib/PainterEngine/platform/windows/px_time.c similarity index 100% rename from UI/platform/windows/px_time.c rename to lib/PainterEngine/platform/windows/px_time.c diff --git a/UI/platform/windows/px_udp.c b/lib/PainterEngine/platform/windows/px_udp.c similarity index 100% rename from UI/platform/windows/px_udp.c rename to lib/PainterEngine/platform/windows/px_udp.c diff --git a/UI/supports/documents/PainterEngine API Manual.docx b/lib/PainterEngine/supports/documents/PainterEngine API Manual.docx similarity index 100% rename from UI/supports/documents/PainterEngine API Manual.docx rename to lib/PainterEngine/supports/documents/PainterEngine API Manual.docx diff --git a/UI/supports/logo/PainterEngineLogo.png b/lib/PainterEngine/supports/logo/PainterEngineLogo.png similarity index 100% rename from UI/supports/logo/PainterEngineLogo.png rename to lib/PainterEngine/supports/logo/PainterEngineLogo.png diff --git a/UI/supports/logo/logo_web.png b/lib/PainterEngine/supports/logo/logo_web.png similarity index 100% rename from UI/supports/logo/logo_web.png rename to lib/PainterEngine/supports/logo/logo_web.png diff --git a/UI/supports/old/Platform_Windows_D2D.cbak b/lib/PainterEngine/supports/old/Platform_Windows_D2D.cbak similarity index 100% rename from UI/supports/old/Platform_Windows_D2D.cbak rename to lib/PainterEngine/supports/old/Platform_Windows_D2D.cbak diff --git a/UI/supports/old/Platform_Windows_D2D.hcbak b/lib/PainterEngine/supports/old/Platform_Windows_D2D.hcbak similarity index 100% rename from UI/supports/old/Platform_Windows_D2D.hcbak rename to lib/PainterEngine/supports/old/Platform_Windows_D2D.hcbak diff --git a/UI/supports/old/Platform_Windows_D3D.cpp b/lib/PainterEngine/supports/old/Platform_Windows_D3D.cpp similarity index 100% rename from UI/supports/old/Platform_Windows_D3D.cpp rename to lib/PainterEngine/supports/old/Platform_Windows_D3D.cpp diff --git a/UI/supports/old/Platform_Windows_D3D.h b/lib/PainterEngine/supports/old/Platform_Windows_D3D.h similarity index 100% rename from UI/supports/old/Platform_Windows_D3D.h rename to lib/PainterEngine/supports/old/Platform_Windows_D3D.h diff --git a/UI/supports/old/Platform_Windows_WaveOut.c b/lib/PainterEngine/supports/old/Platform_Windows_WaveOut.c similarity index 100% rename from UI/supports/old/Platform_Windows_WaveOut.c rename to lib/PainterEngine/supports/old/Platform_Windows_WaveOut.c diff --git a/UI/platform/windows/makefile b/makefile similarity index 82% rename from UI/platform/windows/makefile rename to makefile index fa51ab9..d75f699 100644 --- a/UI/platform/windows/makefile +++ b/makefile @@ -1,8 +1,8 @@ #mingw32-64 makefile ##################################################### -target :=PainterEngine.exe -project_path := ..\..\project -painterengine_path := ..\.. +target := MineSweeper.exe +project_path := src +painterengine_path := lib\PainterEngine ##################################################### project_build := $(wildcard $(project_path)/*.c) @@ -23,31 +23,33 @@ painterengine_build_painterengine_o += $(patsubst %.c,%.o,$(painterengine_build_ painterengine_build_platform := $(wildcard $(painterengine_path)/platform/windows/*.cpp) painterengine_build_painterengine_o += $(patsubst %.cpp,%.o,$(painterengine_build_platform)) + all:$(project_build_o) $(painterengine_build_painterengine_o) + mkdir $(project_path)\..\target gcc $(project_build_o) $(painterengine_build_painterengine_o) \ - -o $(project_path)\$(target) \ + -o $(project_path)\..\target\$(target) \ -I "$(painterengine_path)" \ -I "$(project_path)" \ -I "$(painterengine_path)\platform\windows" \ - -L. -lwinmm -ld2d1 -lws2_32 -ldsound -lcomdlg32 - make clean + -L. -lwinmm -ld2d1 -lws2_32 -ldsound -lcomdlg32 -std=c99 + mingw32-make clean $(project_path)/%.o:$(project_path)/%.c - gcc -c $^ -o $@ -I "$(painterengine_path)" -I "$(painterengine_path)/platform/windows" + gcc -c $^ -o $@ -I "$(painterengine_path)" -I "$(painterengine_path)/platform/windows" -std=c99 $(painterengine_path)/architecture/%.o:$(painterengine_path)/architecture/%.c - gcc -c $^ -o $@ -I "$(painterengine_path)" + gcc -c $^ -o $@ -I "$(painterengine_path)" -std=c99 $(painterengine_path)/kernel/%.o:$(painterengine_path)/kernel/%.c - gcc -c $^ -o $@ + gcc -c $^ -o $@ -std=c99 $(painterengine_path)/core/%.o:$(painterengine_path)/core/%.c - gcc -c $^ -o $@ + gcc -c $^ -o $@ -std=c99 $(painterengine_path)/platform/windows/%.o:$(painterengine_path)/platform/windows/%.c - gcc -c $^ -o $@ -I "$(project_path)" -I "$(painterengine_path)" -I "$(painterengine_path)/platform/windows" + gcc -c $^ -o $@ -I "$(project_path)" -I "$(painterengine_path)" -I "$(painterengine_path)/platform/windows" -std=c99 .PHONY:clean diff --git a/UI/project/PainterEngine_Application.c b/src/PainterEngine_Application.c similarity index 99% rename from UI/project/PainterEngine_Application.c rename to src/PainterEngine_Application.c index cc5eeb3..d13df22 100644 --- a/UI/project/PainterEngine_Application.c +++ b/src/PainterEngine_Application.c @@ -3,9 +3,9 @@ #include #include #include -#include"../../../include/map.h" -#include"../../../include/mine_map.h" -#include"../../../include/opt.h" +#include"../include/map.h" +#include"../include/mine_map.h" +#include"../include/opt.h" diff --git a/UI/project/PainterEngine_Application.h b/src/PainterEngine_Application.h similarity index 100% rename from UI/project/PainterEngine_Application.h rename to src/PainterEngine_Application.h diff --git a/UI/project/PainterEngine_Startup.c b/src/PainterEngine_Startup.c similarity index 100% rename from UI/project/PainterEngine_Startup.c rename to src/PainterEngine_Startup.c diff --git a/UI/project/PainterEngine_Startup.h b/src/PainterEngine_Startup.h similarity index 100% rename from UI/project/PainterEngine_Startup.h rename to src/PainterEngine_Startup.h diff --git a/UI/project/firstprize.traw b/src/firstprize.traw similarity index 100% rename from UI/project/firstprize.traw rename to src/firstprize.traw diff --git a/UI/project/flagpicture.traw b/src/flagpicture.traw similarity index 100% rename from UI/project/flagpicture.traw rename to src/flagpicture.traw diff --git a/UI/project/minepicture.traw b/src/minepicture.traw similarity index 100% rename from UI/project/minepicture.traw rename to src/minepicture.traw diff --git a/UI/project/potatoboom.traw b/src/potatoboom.traw similarity index 100% rename from UI/project/potatoboom.traw rename to src/potatoboom.traw diff --git a/UI/project/ranktitlepicture.traw b/src/ranktitlepicture.traw similarity index 100% rename from UI/project/ranktitlepicture.traw rename to src/ranktitlepicture.traw diff --git a/UI/project/secondprize.traw b/src/secondprize.traw similarity index 100% rename from UI/project/secondprize.traw rename to src/secondprize.traw diff --git a/UI/project/testimage.traw b/src/testimage.traw similarity index 100% rename from UI/project/testimage.traw rename to src/testimage.traw diff --git a/UI/project/thirdprize.traw b/src/thirdprize.traw similarity index 100% rename from UI/project/thirdprize.traw rename to src/thirdprize.traw diff --git a/UI/project/titlepicture.traw b/src/titlepicture.traw similarity index 100% rename from UI/project/titlepicture.traw rename to src/titlepicture.traw diff --git a/UI/project/titlepicture2.traw b/src/titlepicture2.traw similarity index 100% rename from UI/project/titlepicture2.traw rename to src/titlepicture2.traw -- Gitee From beb764d2d3e19f03bf97b51b6fc856b1e859c13a Mon Sep 17 00:00:00 2001 From: rainy <1072874017@qq.com> Date: Thu, 23 Dec 2021 13:18:43 +0800 Subject: [PATCH 14/19] docs: rewrite README.md --- .gitignore | 3 ++- README.en.md | 36 ------------------------------------ README.md | 12 ++++++------ 3 files changed, 8 insertions(+), 43 deletions(-) delete mode 100644 README.en.md diff --git a/.gitignore b/.gitignore index 175c707..68cfa46 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ *.exe .vs/ .gitee/ -test/ \ No newline at end of file +test/ +target/ \ No newline at end of file diff --git a/README.en.md b/README.en.md deleted file mode 100644 index 6c9bb8f..0000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# MineSweeper - -#### Description -{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md index d985e98..63d5edf 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,23 @@ # MineSweeper #### 介绍 -扫雷捏。 +扫雷。 #### 软件架构 基于 `PainterEngine` 实现。 +#### 编译 +必须使用 `Threads = win32` 下安装的 `mingw-w64` 进行编译。 + +在根目录下直接使用 `mingw32-make.exe` 进行编译,编译结果位于 `/target/MineSweeper.exe`。 #### TODOList ~~一定会做的~~ - 基础交互 - [ ] UI - - [√] 逻辑处理 + - [x] 逻辑处理 - [ ] 局面选项(长宽等等) - [ ] 存档、读档 - 高级设计 - - 无猜 - - [ ] 强无猜 - - [ ] 弱无猜 - - [ ] 竞速无猜 - [ ] 高级统计 <= 这东西要是做不出来就扔了吧,都不是专业选手 \ No newline at end of file -- Gitee From dfd6a1805a2f0a342f962571eb9f4cf4e92f7db5 Mon Sep 17 00:00:00 2001 From: rainy <1072874017@qq.com> Date: Thu, 23 Dec 2021 13:21:02 +0800 Subject: [PATCH 15/19] refactor: why we need this log? --- log/team.txt | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 log/team.txt diff --git a/log/team.txt b/log/team.txt deleted file mode 100644 index 83115bf..0000000 --- a/log/team.txt +++ /dev/null @@ -1,5 +0,0 @@ -map -record -opt -ui - -- Gitee From a943323814cd4228cea404333c524c86d83fecc6 Mon Sep 17 00:00:00 2001 From: rainy <1072874017@qq.com> Date: Thu, 23 Dec 2021 13:32:02 +0800 Subject: [PATCH 16/19] fix: load graph assets --- README.md | 2 +- {src => assets}/firstprize.traw | Bin {src => assets}/flagpicture.traw | Bin {src => assets}/minepicture.traw | Bin {src => assets}/potatoboom.traw | Bin {src => assets}/ranktitlepicture.traw | Bin {src => assets}/secondprize.traw | Bin {src => assets}/testimage.traw | Bin {src => assets}/thirdprize.traw | Bin {src => assets}/titlepicture.traw | Bin {src => assets}/titlepicture2.traw | Bin makefile | 3 +-- src/PainterEngine_Application.c | 16 ++++++++-------- src/app.c | 2 -- 14 files changed, 10 insertions(+), 13 deletions(-) rename {src => assets}/firstprize.traw (100%) rename {src => assets}/flagpicture.traw (100%) rename {src => assets}/minepicture.traw (100%) rename {src => assets}/potatoboom.traw (100%) rename {src => assets}/ranktitlepicture.traw (100%) rename {src => assets}/secondprize.traw (100%) rename {src => assets}/testimage.traw (100%) rename {src => assets}/thirdprize.traw (100%) rename {src => assets}/titlepicture.traw (100%) rename {src => assets}/titlepicture2.traw (100%) delete mode 100644 src/app.c diff --git a/README.md b/README.md index 63d5edf..8dbff16 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ #### 编译 必须使用 `Threads = win32` 下安装的 `mingw-w64` 进行编译。 -在根目录下直接使用 `mingw32-make.exe` 进行编译,编译结果位于 `/target/MineSweeper.exe`。 +在根目录下直接使用 `mingw32-make.exe` 进行编译,编译结果位于 `/MineSweeper.exe`。 #### TODOList ~~一定会做的~~ diff --git a/src/firstprize.traw b/assets/firstprize.traw similarity index 100% rename from src/firstprize.traw rename to assets/firstprize.traw diff --git a/src/flagpicture.traw b/assets/flagpicture.traw similarity index 100% rename from src/flagpicture.traw rename to assets/flagpicture.traw diff --git a/src/minepicture.traw b/assets/minepicture.traw similarity index 100% rename from src/minepicture.traw rename to assets/minepicture.traw diff --git a/src/potatoboom.traw b/assets/potatoboom.traw similarity index 100% rename from src/potatoboom.traw rename to assets/potatoboom.traw diff --git a/src/ranktitlepicture.traw b/assets/ranktitlepicture.traw similarity index 100% rename from src/ranktitlepicture.traw rename to assets/ranktitlepicture.traw diff --git a/src/secondprize.traw b/assets/secondprize.traw similarity index 100% rename from src/secondprize.traw rename to assets/secondprize.traw diff --git a/src/testimage.traw b/assets/testimage.traw similarity index 100% rename from src/testimage.traw rename to assets/testimage.traw diff --git a/src/thirdprize.traw b/assets/thirdprize.traw similarity index 100% rename from src/thirdprize.traw rename to assets/thirdprize.traw diff --git a/src/titlepicture.traw b/assets/titlepicture.traw similarity index 100% rename from src/titlepicture.traw rename to assets/titlepicture.traw diff --git a/src/titlepicture2.traw b/assets/titlepicture2.traw similarity index 100% rename from src/titlepicture2.traw rename to assets/titlepicture2.traw diff --git a/makefile b/makefile index d75f699..fbfeece 100644 --- a/makefile +++ b/makefile @@ -25,9 +25,8 @@ painterengine_build_painterengine_o += $(patsubst %.cpp,%.o,$(painterengine_buil all:$(project_build_o) $(painterengine_build_painterengine_o) - mkdir $(project_path)\..\target gcc $(project_build_o) $(painterengine_build_painterengine_o) \ - -o $(project_path)\..\target\$(target) \ + -o $(project_path)\..\$(target) \ -I "$(painterengine_path)" \ -I "$(project_path)" \ -I "$(painterengine_path)\platform\windows" \ diff --git a/src/PainterEngine_Application.c b/src/PainterEngine_Application.c index d13df22..a128de3 100644 --- a/src/PainterEngine_Application.c +++ b/src/PainterEngine_Application.c @@ -488,21 +488,21 @@ px_bool PX_ApplicationInitialize(PX_Application* pApp, px_int screen_width, px_i //以下为欢迎页图片 - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &titlepicture, "D:\\working\\PainterEngine\\project\\titlepicture2.traw");//加载图片!! - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &potatoboompicture, "D:\\working\\PainterEngine\\project\\potatoboom.traw"); + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &titlepicture, "assets\\titlepicture2.traw");//加载图片!! + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &potatoboompicture, "assets\\potatoboom.traw"); //注意文件地址!放在project里面,为何不能用相对地址??? ↑ //以下为排行版页图片 - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &firstprizepicture, "D:\\working\\PainterEngine\\project\\firstprize.traw");//加载图片!! - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &secondprizepicture, "D:\\working\\PainterEngine\\project\\secondprize.traw"); - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &thirdprizepicture, "D:\\working\\PainterEngine\\project\\thirdprize.traw"); - PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &ranktitlepicture, "D:\\working\\PainterEngine\\project\\ranktitlepicture.traw"); + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &firstprizepicture, "assets\\firstprize.traw");//加载图片!! + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &secondprizepicture, "assets\\secondprize.traw"); + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &thirdprizepicture, "assets\\thirdprize.traw"); + PX_LoadTextureFromFile(&pApp->runtime.mp_resources, &ranktitlepicture, "assets\\ranktitlepicture.traw"); - PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &flag, "D:\\working\\PainterEngine\\project\\flagpicture.traw"); - PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &mine, "D:\\working\\PainterEngine\\project\\minepicture.traw"); + PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &flag, "assets\\flagpicture.traw"); + PX_LoadShapeFromFile(&pApp->runtime.mp_resources, &mine, "assets\\minepicture.traw"); WELCOME();//直接前往welcome函数 diff --git a/src/app.c b/src/app.c deleted file mode 100644 index 7fc4a82..0000000 --- a/src/app.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "../include/map.h" - -- Gitee From bb866af76fdbb9c046e3971fb9031201a1860818 Mon Sep 17 00:00:00 2001 From: rainy <1072874017@qq.com> Date: Thu, 23 Dec 2021 13:38:40 +0800 Subject: [PATCH 17/19] refactor: use sprintf instead of switch --- src/PainterEngine_Application.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/PainterEngine_Application.c b/src/PainterEngine_Application.c index a128de3..f34500c 100644 --- a/src/PainterEngine_Application.c +++ b/src/PainterEngine_Application.c @@ -189,18 +189,10 @@ void Gamenow() } else { - switch (opt_count(Map, j, i)) - { - case 1:PX_Object_PushButtonSetText(cellbutton[j][i], "1"); break; - case 2:PX_Object_PushButtonSetText(cellbutton[j][i], "2"); break; - case 3:PX_Object_PushButtonSetText(cellbutton[j][i], "3"); break; - case 4:PX_Object_PushButtonSetText(cellbutton[j][i], "4"); break; - case 5:PX_Object_PushButtonSetText(cellbutton[j][i], "5"); break; - case 6:PX_Object_PushButtonSetText(cellbutton[j][i], "6"); break; - case 7:PX_Object_PushButtonSetText(cellbutton[j][i], "7"); break; - case 8:PX_Object_PushButtonSetText(cellbutton[j][i], "8"); break; - default: break; - } + int count = opt_count(Map, j, i); + char text[2]; + sprintf(text, "%d", count); + if(count) PX_Object_PushButtonSetText(cellbutton[j][i], text); } } @@ -212,9 +204,6 @@ void Gamenow() ////////////////////////////////////////////////////////////////////////////////// void Gamewin() { - - - printf("you win"); } -- Gitee From 3451509e6a5d629c7ddf27f2f0083750821384f7 Mon Sep 17 00:00:00 2001 From: rainy <1072874017@qq.com> Date: Thu, 23 Dec 2021 16:08:33 +0800 Subject: [PATCH 18/19] feat: generate map after click --- .gitignore | 3 ++- include/map.h | 13 +++++++++++-- include/mine_map.h | 4 +++- makefile | 8 ++++---- src/PainterEngine_Application.c | 4 +--- src/map.c | 20 ++++++++++++++++++-- src/opt.c | 2 ++ 7 files changed, 41 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 68cfa46..c34b03e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ .vs/ .gitee/ test/ -target/ \ No newline at end of file +target/ +MineSweeper.zip diff --git a/include/map.h b/include/map.h index 1596a12..6c1f57d 100644 --- a/include/map.h +++ b/include/map.h @@ -3,9 +3,18 @@ #include "mine_map.h" /** - * @brief 设置一个的雷 + * @brief 生成一个地图 * * @param mode 难易度 * @return map* 生成的地图的指针 */ -map* Setmine(int mode); \ No newline at end of file +map *CreateMap(int mode); + +/** + * @brief 在地图上生成雷 + * + * @param *Map 地图的指针 + * @param posx 在地图上点击的位置 + * @param posy 在地图上点击的位置 + */ +void Setmine(map *Map, int posx, int posy); \ No newline at end of file diff --git a/include/mine_map.h b/include/mine_map.h index d07856f..a1e4aa3 100644 --- a/include/mine_map.h +++ b/include/mine_map.h @@ -1,4 +1,5 @@ #pragma once +#include #define UNCOVERED 0 #define COVERED 1 @@ -21,6 +22,7 @@ typedef struct map{ int stage[105][105]; int cnt; int autobook[105][105]; + bool generated; }map; #define ROW_1 10 @@ -41,7 +43,7 @@ typedef struct map{ #define MY_MID 16 #define MY_HARD 30 -#define NUM_EASY 10 +#define NUM_EASY 30 #define NUM_MID 40 #define NUM_HARD 99 diff --git a/makefile b/makefile index fbfeece..c9bfb3d 100644 --- a/makefile +++ b/makefile @@ -53,10 +53,10 @@ $(painterengine_path)/platform/windows/%.o:$(painterengine_path)/platform/window .PHONY:clean clean: - -del /s "$(painterengine_path)\core\*.o" - -del /s "$(painterengine_path)\kernel\*.o" - -del /s "$(painterengine_path)\architecture\*.o" - -del /s "$(painterengine_path)\platform\windows\*.o" +# -del /s "$(painterengine_path)\core\*.o" +# -del /s "$(painterengine_path)\kernel\*.o" +# -del /s "$(painterengine_path)\architecture\*.o" +# -del /s "$(painterengine_path)\platform\windows\*.o" -del /s "$(project_path)\*.o" \ No newline at end of file diff --git a/src/PainterEngine_Application.c b/src/PainterEngine_Application.c index f34500c..6515071 100644 --- a/src/PainterEngine_Application.c +++ b/src/PainterEngine_Application.c @@ -56,7 +56,6 @@ void Gamenow(); void Lclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr); void Rclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr); void Mclickcell(PX_Object* pObject, PX_Object_Event e, px_void* ptr); -map* Setmine(int mode); @@ -105,8 +104,7 @@ void Gameinit() root = PX_ObjectCreate(&App.runtime.mp_ui, PX_NULL, 0, 0, 0, 0, 0, 0); ///变换界面就删除原页面的object!(由Painterengine provide)/// //初始化map - map* p = Setmine(mode); - Map = p; + Map = CreateMap(mode); //生成cellbutton printf("debug"); for (int i = 1; i <= Map->mx; i++) diff --git a/src/map.c b/src/map.c index 67e0b72..b76a1b5 100644 --- a/src/map.c +++ b/src/map.c @@ -1,10 +1,11 @@ #include #include #include +#include #include "../include/map.h" #include "../include/mine_map.h" -map *Setmine(int mode) +map *CreateMap(int mode) { map *Map = malloc(sizeof(map)); if (Map == NULL) @@ -29,6 +30,12 @@ map *Setmine(int mode) default: break; } + Map -> generated = false; + return Map; +} + +void Setmine(map *Map, int posx, int posy) +{ for (int i = 0; i <= Map->mx; i++) { for (int j = 0; j <= Map->my; j++) @@ -45,11 +52,20 @@ map *Setmine(int mode) int x, y; x = (rand() % (Map->mx)) + 1; y = (rand() % (Map->my)) + 1; + if(abs(posx - x) <= 1 && abs(posy - y) <= 1) continue; if (Map->mineMap[x][y] == 0) { Map->mineMap[x][y] = 1; cnt++; } } - return Map; + Map -> generated = true; +#ifdef DEBUG + puts("\nMap INFO:"); + for (int i = 0; i <= Map->mx; i++) + { + for (int j = 0; j <= Map->my; j++) putchar(Map -> mineMap[i][j] + '0'); + putchar('\n'); + } +#endif } diff --git a/src/opt.c b/src/opt.c index 81cd61e..704bf44 100644 --- a/src/opt.c +++ b/src/opt.c @@ -1,5 +1,6 @@ #include "../include/mine_map.h" #include "../include/opt.h" +#include "../include/map.h" #include #include @@ -78,6 +79,7 @@ int opt_flag_count(map *map, int x, int y) int fnOptLeftClick(int x, int y, map *m) { + if(!m -> generated) Setmine(m, x, y); /** * @brief 地图当前状态 * -- Gitee From 0365cb316add8697df231a0bd8224ea643c59920 Mon Sep 17 00:00:00 2001 From: rainy <1072874017@qq.com> Date: Thu, 23 Dec 2021 16:43:58 +0800 Subject: [PATCH 19/19] feat: generate map from given seed --- include/map.h | 3 ++- src/map.c | 10 ++++++---- src/opt.c | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/map.h b/include/map.h index 6c1f57d..f4e7cc9 100644 --- a/include/map.h +++ b/include/map.h @@ -16,5 +16,6 @@ map *CreateMap(int mode); * @param *Map 地图的指针 * @param posx 在地图上点击的位置 * @param posy 在地图上点击的位置 + * @param seed 随机种子 */ -void Setmine(map *Map, int posx, int posy); \ No newline at end of file +void Setmine(map *Map, int posx, int posy, unsigned int seed); \ No newline at end of file diff --git a/src/map.c b/src/map.c index b76a1b5..c2ca6a9 100644 --- a/src/map.c +++ b/src/map.c @@ -34,8 +34,9 @@ map *CreateMap(int mode) return Map; } -void Setmine(map *Map, int posx, int posy) +void Setmine(map *Map, int posx, int posy, unsigned int seed) { + for (int i = 0; i <= Map->mx; i++) { for (int j = 0; j <= Map->my; j++) @@ -46,7 +47,7 @@ void Setmine(map *Map, int posx, int posy) } } int cnt = 0; - srand((unsigned int)time(0)); + srand(seed); while (cnt < Map->cnt) { int x, y; @@ -62,9 +63,10 @@ void Setmine(map *Map, int posx, int posy) Map -> generated = true; #ifdef DEBUG puts("\nMap INFO:"); - for (int i = 0; i <= Map->mx; i++) + printf("Seed: %u\n", seed); + for (int i = 1; i <= Map->mx; i++) { - for (int j = 0; j <= Map->my; j++) putchar(Map -> mineMap[i][j] + '0'); + for (int j = 1; j <= Map->my; j++) putchar(Map -> mineMap[i][j] + '0'); putchar('\n'); } #endif diff --git a/src/opt.c b/src/opt.c index 704bf44..6b45af9 100644 --- a/src/opt.c +++ b/src/opt.c @@ -79,7 +79,7 @@ int opt_flag_count(map *map, int x, int y) int fnOptLeftClick(int x, int y, map *m) { - if(!m -> generated) Setmine(m, x, y); + if(!m -> generated) Setmine(m, x, y, (unsigned int)time(NULL)); /** * @brief 地图当前状态 * -- Gitee

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 literal 0 HcmV?d00001 diff --git a/UI/PainterEngine/project/titlepicture.traw b/UI/PainterEngine/project/titlepicture.traw new file mode 100644 index 0000000000000000000000000000000000000000..9a515994a2a3fd840bba98d17c0866e75418ca69 GIT binary patch literal 3030012 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μ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 literal 0 HcmV?d00001 diff --git a/lib/mine_map.h b/lib/mine_map.h index 3ab2ddb..b2f1198 100644 --- a/lib/mine_map.h +++ b/lib/mine_map.h @@ -5,18 +5,20 @@ #define FLAGED 2 #define MARKED 3 -/* -*ɨ׵ͼ -*mineMap 0ʾף1ʾ -*mx, my ʾͼĸߣ -*mode ͼѶ -*stage ӵǰ״̬ δ/Ѿ/ӱ/ʺű -*cnt Ѿǵ -*/ +/** + * @brief 扫雷地图 + * mx,my地图长宽 + * mineMap[i][j]=1 表示第i行第j列为雷 + * mode 表示困难度 + * stage[i][j] 表示地图显示状态 + * cnt 表示雷的总数 + * autobook 用于自动打开的数组 + */ typedef struct map{ int mineMap[105][105]; int mx, my; int mode; int stage[105][105]; int cnt; + int autobook[105][105]; }map; diff --git a/lib/opt.exe b/lib/opt.exe new file mode 100644 index 0000000000000000000000000000000000000000..e1c478bdc3196edd58be3da52a9884373f89124a GIT binary patch literal 1806768 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

Dey&^_N!VIxaF1c@fnjGULF5F%3lDkd(K+-;~ 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 z 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