From c65339bd599304bdd0456e9011f2051659fdf382 Mon Sep 17 00:00:00 2001 From: IgorA Date: Mon, 28 Dec 2009 23:19:20 +0000 Subject: [PATCH] add program 'TextEditor' version 29.12.09 git-svn-id: svn://kolibrios.org@1338 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/other/t_edit/build.bat | 13 + programs/other/t_edit/info/asm.syn | Bin 0 -> 51240 bytes programs/other/t_edit/info/cpp_kol_cla.syn | Bin 0 -> 10334 bytes programs/other/t_edit/info/cpp_kol_dar.syn | Bin 0 -> 10334 bytes programs/other/t_edit/info/cpp_kol_def.syn | Bin 0 -> 10334 bytes programs/other/t_edit/info/cpp_win_dar.syn | Bin 0 -> 175736 bytes programs/other/t_edit/info/default.syn | Bin 0 -> 51240 bytes programs/other/t_edit/info/html.syn | Bin 0 -> 21596 bytes programs/other/t_edit/info/voc_eng_rus.syn | Bin 0 -> 246590 bytes programs/other/t_edit/info/win_const.syn | Bin 0 -> 117251 bytes programs/other/t_edit/load_lib.mac | 634 +++++++ programs/other/t_edit/msgbox.obj | Bin 0 -> 3040 bytes programs/other/t_edit/readme.htm | 170 ++ programs/other/t_edit/strlen.inc | 71 + programs/other/t_edit/t_button.inc | 601 +++++++ programs/other/t_edit/t_data.inc | 461 +++++ programs/other/t_edit/t_draw.inc | 1291 ++++++++++++++ programs/other/t_edit/t_edit.asm | 875 ++++++++++ programs/other/t_edit/t_edit.png | Bin 0 -> 16837 bytes programs/other/t_edit/t_work.inc | 1759 ++++++++++++++++++++ programs/other/t_edit/te_icon.bmp | Bin 0 -> 21654 bytes 21 files changed, 5875 insertions(+) create mode 100644 programs/other/t_edit/build.bat create mode 100644 programs/other/t_edit/info/asm.syn create mode 100644 programs/other/t_edit/info/cpp_kol_cla.syn create mode 100644 programs/other/t_edit/info/cpp_kol_dar.syn create mode 100644 programs/other/t_edit/info/cpp_kol_def.syn create mode 100644 programs/other/t_edit/info/cpp_win_dar.syn create mode 100644 programs/other/t_edit/info/default.syn create mode 100644 programs/other/t_edit/info/html.syn create mode 100644 programs/other/t_edit/info/voc_eng_rus.syn create mode 100644 programs/other/t_edit/info/win_const.syn create mode 100644 programs/other/t_edit/load_lib.mac create mode 100644 programs/other/t_edit/msgbox.obj create mode 100644 programs/other/t_edit/readme.htm create mode 100644 programs/other/t_edit/strlen.inc create mode 100644 programs/other/t_edit/t_button.inc create mode 100644 programs/other/t_edit/t_data.inc create mode 100644 programs/other/t_edit/t_draw.inc create mode 100644 programs/other/t_edit/t_edit.asm create mode 100644 programs/other/t_edit/t_edit.png create mode 100644 programs/other/t_edit/t_work.inc create mode 100644 programs/other/t_edit/te_icon.bmp diff --git a/programs/other/t_edit/build.bat b/programs/other/t_edit/build.bat new file mode 100644 index 0000000000..bf5b11b5d4 --- /dev/null +++ b/programs/other/t_edit/build.bat @@ -0,0 +1,13 @@ +if not exist bin mkdir bin +@fasm.exe -m 16384 ..\..\develop\libraries\box_lib\trunk\box_lib.asm bin\box_lib.obj +@kpack bin\box_lib.obj + +@fasm.exe -m 16384 t_edit.asm bin\t_edit.kex +@kpack bin\t_edit.kex +@copy ..\..\develop\libraries\box_lib\trunk\tl_sys_16.bmp bin\tl_sys_16.bmp +@copy ..\..\develop\libraries\box_lib\trunk\tl_nod_16.bmp bin\tl_nod_16.bmp +@copy msgbox.obj bin\msgbox.obj +@copy te_icon.bmp bin\te_icon.bmp +if not exist bin\info mkdir bin\info +copy info\* bin\info\* +pause \ No newline at end of file diff --git a/programs/other/t_edit/info/asm.syn b/programs/other/t_edit/info/asm.syn new file mode 100644 index 0000000000000000000000000000000000000000..a9e91a26a877d721a1dc6c9d8891f45270e38704 GIT binary patch literal 51240 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 WiQot-YPmnl2#P}&EvD9jNP zK^XYU4|U8Y1s`Y zIpzG{UbSSTLcYOTVHvWpI%RFGEelP_AqvfuCM;vK(B{;lo?dJX8pA{_m9LYq+~#x^ z8o?@-^JB8W)@Q^FpVq`w+y+(a<4UT?~Ij4CE^d*nlY`5Fd7 zY6yI@r}TSFS9e0(r7$@Wa%#%*(d4=IWEckoSfp(`e2DRkwwu(D3?lhG)ajA@`P|HS zA@7_jUci|8WNs#RrZ8Q=ME<~$Qzr*4E5vOtqYl;7yox=Ls71c;3UXDe8*sHUX}fMI zRu>tXqG_ge>H#b*rHN(f6auK(2`jf489kcItNv2EA*Z>TUdxkn%Q}f=$tMyTF7a4# zPMq4~%Doo7u~QuzO}QaeXjf}7i#mh#Ll<(-gG|pNwm~G)%JC1J-VTLc9*^GLsgaXM zj`dO{F?HTalZlD#Q0&cUDuLc2rl;v?tB;4J8<-uH(~Z}Vl&x4A(WO*0g9Q?3?bJwC zoInedu}QBjrB~C$Oo&`B@Zsa9_A~>`+}l|;7R+qt@yM*uWwx*kzUnSwN1OBH{Mo|X zOaV^TCgI%~%IJ!VypUQmW+e>a9yVb~jaXJmxRnIkfuejq_5y9wBS!W^yQ!r0P-R(C zlN;;E(U+Yb>pL`;4;|~tTsrlQs5#i6jS-Qg-pdk+u(OxYc6)pr27>7sgt9}9T8p4I zUv|8Y{TQQ@`_vXp@zCj`w&{{C`DQH-fq}iam}`~mSg;bGb|YWuLDc6k*F$keEEC>g zR;HmW?P$QxLpcp=nSP)|FI@; z$?=@rxjk^=)G^DjH&RzP#l9{R7jnHN76qu;Ul$XM*vX4^HkOKuq@#_~Dk~V*o@gfB zR)67OM=e}H#$eT})UlF~gko=&<@909i<5wG`+-&Wb}6J(^R8eC-!c}ZEH>O5Fcg}S zjRj@_wMV25Ix7>~MBA>7bquIy!vBAWxD%?s6EY&F1uLiQvy3@x*GkGI&NyZv%4_LG z_Pwrm46{R>^~Bg$jr=%L-EccSr6!|tMpNy!ZaLO@$<+=j`vqQ+#C5p{9$QS1=ad`E z2h<@FO}|zSRxuc-4Jg8ekjezv#pB-TgvEJO8)md5m3o!&6aOzXi84aLHty_^*zZ&^pvwlb|K?&>&j9lv2> zhQwc{BUWm1&2bOQg1#} z9bh+;Rzc)$aVW^PReLGQz;q5*NJ;If_%T!0@zOx z(SWN(y}6ng*R^Na(z->9z04>^A!2Hvj6e~=XHcPY)+j`-tokx(;n%QK%F3kl_?hI> z!jCOvB8nWlco^%Lmt7psMf01T^dAOM&=yAD@@Nsuw19p+B@{5*|Ns2;FVox*5_Nm2 zgOJ9m)~)u%)O{`(2Qd#qG{>RBI`v2p~gjYxFD>X zw$)n>j5^y4qXmod5J%b+1b?N@T%+RwupdOw7AZ{1=uKW5o6jO64;S*-eD|71+vi)p zh)#P6Pd#$NBLgTY9t-Ev$3b>^GCYXD^rRXQz}H~k8`8IGN>W5u^%NzSNBTK?7V7v? z8K>$3yUxT^?o279rVd^cSN$r^Jo2#m0^M@Q(S7$!ZtU8g)oAk^M59BLUV(#f5L z%rMER&gR5fZ>fXy!m|j~sdhv17($qNvxW`eol^*D`j&Fw=txC$H!6I$n~_FiH#eOR z3fsd0saD0D7?j#~2^Ib^?QV_Z!Qy^?<7l)7)qb7DgH0=KM+{} literal 0 HcmV?d00001 diff --git a/programs/other/t_edit/info/cpp_kol_cla.syn b/programs/other/t_edit/info/cpp_kol_cla.syn new file mode 100644 index 0000000000000000000000000000000000000000..bd6f13d21eb3fe9773de618cd582cf0feaa0ca64 GIT binary patch literal 10334 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 A9{>OV literal 0 HcmV?d00001 diff --git a/programs/other/t_edit/info/cpp_win_dar.syn b/programs/other/t_edit/info/cpp_win_dar.syn new file mode 100644 index 0000000000000000000000000000000000000000..f7a2e4638554f32f9e2bd7b96b4aafcea6316d35 GIT binary patch literal 175736 zcmcG%3!GfpRi9fL+hb#JNJ0#R8$)3n&x}1Ywl%i#lTfeju2H?F9^KMFC`#QWb)o92 zrn*`h8A6OPwgY~f_l4Y+Mm_40)GZQj2;>*IfC=GV2#+`r5^!j>>=_%4XD}f^LWuKU z`*qH#I%ltS?#*p`R8{AEXPvdz-h1u$-Y?2zGH?FkOy&#k#FuZxfAsf-Oy(DU;TP0@ zU--foGWdTcv!k!S^PTU^Wboe?cJzfkT$ca6@SnF|G*4*!*O_`gnv|7tq?|4xVhKk4vaONak@I{e?H!+#?k{+sFW-%5x7b~^mu zro%sx4*z%Q@ZU*?|86?`->1WWFCG3L(&7Ix9sc|2@IOe0e=;5ZpVHxfm<~Tohu=zv zAEm=@r^7#$4*zsI{Hb*K)9LWfq{Ba(4*#Qc_?>k4GwJZprNf_1hd-AN|KoJ{=hNYT zk`DjR>F_^IhyRy!_@AZ2|2!T37wPc-nhyVO>F~cyhyV9<_+O>N|3^BU+8Oe{7k;gf zJ*K#0U;B0$|CJhlxs1+`7SDhA^S&;-);}{C^(9Ze@FjPBU3PG0geRo9TzH10_lH{| zP4N2XWq^;?1|n57E@h2$c}SJ+gVE}6dyQ594MzIrq<40sC$S?1_3w&63mto<{lN_ha|5NEkTws_-xN`>|K03+k&`iDBT_ ztJ6upKm0KJ{n!I65(bVvkWQHgz9IZ{^7jpO>)3*g*dUjTkQ`R?2u;1A7ROuhj8^~rbV?f@re zCjA5cMkxyp_}8by-;@r2b2|JjDez3@*jv-#ZxiDGOmWBFCQOn4(%`G((O~@Gx+Kd! zFY~;&t!_;xgV9;Z1B9;)CK8l%A^Z%a_j?`f-Ui(dI5e7(PV?)3OE58e(-Cw#cY1=cCEJ|1uNSAEI; zd_+3oXMA|rkgLPN=IL>dOZZM1;O7VZ3!b1xq>qOiqxChh^zm@av7uO99dDc-`|Tc8 zW+P4Zfb@;EK~I{SfNy#;2dNTDGvm>;H}I$68GJJ4bO{nLqys#L;nIOqrhjJ3BU!5xl8zW1a{&$G+K(}B zaLNp}kO)>e$L;X(>N!FA6v8)pqaLSy2%m1UNyep_wehMTX9qaieZzs+i}lwAoWrB2 zvbqy~W-#=nnOS_RFZN<2T@Y5M%=!Lky58e5tHU2#?QimdwKxS6wr5h9vkW>p)+T*6 zUY+#exHm=iW5he0GU^4dU;4>VUOn4eJDZ}^*7${iP?@v6?Xz482&I{`YlG9hE%pH$ zRN&*&-`4jT{tv=I9bVjAKRxv&f^T?Ukbuul#@i@ZeRYCx0$v|(rpemt2 z)Qui8D_1fFcHda#k~$g2Wo;CDj2^T2>iS?P*1bR47KpcrU;{YiSLTrb-`YYV^VK*a zLG4d_Dg67!c&!g*7+nHGj@P!?vLmqjXgq~Foa#>cc=b%5N(4q5Ynd_JJ1QMgLlVxH z27xle{+ZtDR9fAKbgnKIjwaw~>SDkJc`vLxXo%0(GpY*7Pvd!^U znaS!XO_h1l-x_aER=EW4qz_it1$Fo+zR4Ap4j&JPDcagwt7zN~PfIH(8fT-`Dznv} zz+b;ZYMHI|{&0xSE@5%7H8?x!O}C|%*%}VkSj~g14X4rDS{GNY$j3~ltbAvgX>U64 zRhU)Ya|w70`1Y1Onx<#dlzb?$1)ZHvnQ8yAX^Q&Hbg)4+4r!@99gHrn_SjaRHRN=R z&Kb6G5adX?+-V{No;#_ZG6Gk z$ciSh^F8E`-c*`b&!2v5bt;7TC0(3;w9c!5MFDQyM?7( zvsLo55M=R%^2t)MyHNK?|7uvq;>)?FAI@YJ4BpJ;%LSP_BzfwYFaJGb_2 z+gsBWYQkM;_E)FAr=FLY!%L4PKS22C?69AktR_SH&QJyQZUL$IzcTn1Rm2Jy_&~j& zioOodYe*S|GaN*$ynv$V?%Z@b@d%9E0-n!R+9{$bztC-#3T*1itSe>i0*3dU=G*Uu@kXf@gM=@A+Thi0p;9iK2;WNjjs%>q zb{9+S!cvKO;=efQz{}O#Vkt?eyY8g7+PStLfBW4kuR{rRiukirc)CJR!i^H8ZvbV zZ?#c$ATJ5DH@Hl5ox~u$Tq~APY*))Qf1WbZg{mvdKzgSp(_TsMKE&sxAkFCdiRck6 zovJfRn|%FbD22>_4e(~JSgz+g?RMScEH$1lx2rjUi`SOv=IanzoqzY-6)jy_w=&X2 z!K7Dd>BZ6l#VZ$3hnMq>TpNkTV-yt*Bi-R|I_aHQH;Xs?<*UXQDmg!9EvoUwX1&wk z5PF4ZfQ`igy{=Tj?FF8I<_=y8K1tD=?~x}NY=MC5T~TTb zbQjgI1H98JH6^MW%PdP>Fd4Fcb}(vS_9(s0^YLy=% z+#YZG9z@Hgkk=*UQmfE}d-Bl~RKkn8W>~9x9{JW6saREbv)(8o3wlN4rj>5+O1b4t zY6f4*wOZ|Fxwgnu4Gj+eTWS_^EiQu?yjDj=vb5ODRhCLgY5$oZsP$46K6|;;^lI*c z>im-GUP!i&QO4ouUMPF&<_2$-s|{iOoua8#=d{)e8tI)zLvF}!u2|HulpM%R=Hp*v zEYmHPDyVfbPyA_smj(Sw^k$`dcL9}JMs_Hus=Zq8Fzty~yx2;o=4}UkOWv&14dbO^ zxy|rScWMo{OVwhoozprd{i}ltypoqV${D=EH2*bTuE9y7g-h8lNe^{hyYw_U@8bfUJ z+~CsIgu$gXLxb1q#qx5w$oAGcyjou_`I}hQ?g(nFPB>pRbkcPvaIR8b^p!XcM=C2n z%9REx5kMJf{l`d`RyhpLmm4ZGDP0)GYj3) z!UB0QKDb(XsYXs}Q1tcaj#Tvd7+Wwf9@$@mXk znpvnf3ndzXDV_A!47Kz{>Y90Yq1^P>BCRqSujDw|=)OeWnvWzay<9`VSFh9;Nq>}= zouqW5byo$Y)GaM^EA>JyA!4E`YU$M+?|jvB1~(bQpV(cj*6Itn0!nUg^@qf3>9soQ z%*rb2mGS?)>Wc#$wb~96FI=BDlUV6w#T3e@?suNI(wC7}>rGC56I28=jVI8x{c?*P zV%5qtkOWY4fvSPvgz3ro+pYviL5EbU3IQUufp4zEn9Q-KYIUBfVKd zLDS7uR&uA3GqnyaN!NI-&cwef`iA&WO@y$An*!m;cxKNtrNbmfE$)tyRoYA0?x7N8yO0 zg~8eF2_I7y*Ou{%Hqx=*%aj+aM3Hob7kZO^qPg8$1DvcskpxvqM_*S9Q!g<~-HD3% z0_nwKrJHM_t}3VpBfS$|EYmc@dXwt}w0IM;{XWlF=B^^9a$z3m7rHN( z3nkY+poU`j{qFnM11IUIi04l6(=V3|URf-3MdQv|I^nRUWPT1QLpY6?VqPNGLt}B_ z6akCV94(J;x8|`pnkW+OExwYgwR4rqiITte7Qvg%`iei%hjEpHt(NhhVZ4fIxXk3# zFpgXlFEhBR@Cw?Ub#$X)sHfe|6+C_GGdP;(612d2j%b3GwtHJPIr-hj6JUZm`V`pJ zFnD`6cnzBb7J1_a5bg^JTA>fu4&yx^D_Rsla9QBIkmFcImNc>pD8yYubux<`Z62T zS{*&(aAosM=*quvI3~$1i43oUDw=5V{=a3FX|^j=pGh>iQ%Os20j!jm*~!1_q*L^> zQ#lr1YL#J8(&i5xE}A*o{&FiF!vMuR0_&?mWPUM%i|yV&qg&dI$(UQzN0lq=YqLF^ z5{&*0OgeQ|p8uk7tfn1boWB=yCBQ{(bHWE(z0+8YxIG=~MtzJ_dnv%%liq0SOn+kU z#C~dA?HU++f94|LurOZT-eOjCe%Dt} znjz^I%Gj1SDrf%JuLU@*qRjXFRv`gKdK(Kg=jBDO{I#!CcnK3MN*&CdK&_lxfs4Fa zDlV3~YK30nK$d%r#apP-z zdEF%rh=;R_~mk|jM4C9@27(b+%w@P6cmS}%0Z2P zW{sZ1WwSv;IA8g(u}ZUEVVMFuYu8Dy=9-I`%^C_;+}8kCMQa=qzUJ@-dR)kFQ<4t@ z(eDmtD@*D*hqFC7QM|p>sj{6ACPl)KuDqcRiKxP%Us@Sil;Saq*GiO|{AP*Zv>ef2 z<%r;z#=OW*ObnFqtY-+qs&RM#k?JO>%@U^ZNTx+;=^{l)r7&JVe{FnMq*LDD>9RJQ zQktv{T$T=;GHEg&r0aUE3sb@uCp}H(gLJA#^0Q)`^fY-@NiVc(TqWDas-Tlr1>PxR zDyobdbGXae2`1E+=W&52kQJ(U0ZB)bj2mVkRaR6L0(h4uU(#G%Z$L*5hrVqLllYfL z{-ML0rAIon_QX3e{OkU<)*ZbHSU1cro?40E%Uu3`(N|gNqK>Y8hl`qsWK6Pq3o}P$ ztDy{@W>F`k*Xm1H79c2|v@$i6OTJ1HsjdDrE?sM7bhmE63Q7Fb(q(P{LJaPo3l+Rf zo5)=g;$pY-sGAiQbN)eI8uD~VTqc|qgRJt@LFfJ#?;mGQQ2lfcQ z8N6PtqQ@n;ob)Y%V=+Xr>m6{2;(FSAl4xAlxL|Nc%h0$sAqG{nNt4BEyuMN?VoM9m zyAqVz%U$4tIC8oJUoH#hEg@FX>xvm7CCqb4R$JZCx|3*;HiTpI#ZAGyj2HiJWcRyE zBXL7Mz%ls%`%Q9fRwrH5?hmBP<{v2OYl3yXnM~UTb$g>UTCZYnV`}+(Ew7|+Z!C;Q z(}mu~0Fy4ZlKAfpq!XUVndg5yz$KdeWq{XdcXn33iPh~5^b~D!%8*VJ)blw^nK&<+ z%MrnIo0~~yG1oP|b*_+K7*BA9PYwI&dmd3Z<`&_^nJV_U_K@n9#1_q9Z%Puk=1w7=mMjhjX~rmKjo8Q|rS+P2XzU*pm#S4J5e*-{%%2WQxRKrJ0O zwzBl=q3(up?LoW`S$q>abNhQPBhoi9Q%GQVEnPenN#oODfezR4svRg(?Dy7?yyW<> zKb5Giqp8@J_SGug4UU;$>ZBr1d>Q;aWhJPOT;dI{#?gT(5Dh^N7sOG3k2m>lSJF~R z7o;s>@n`V07IlvE-LD46R=;Iz-Ks@+{?+&dr)lKRo#k_g!l^J27~Sf=*q>s4WI^im zfYS>+I@?=H8Q|5ysM>q1JUTPBcVa&+F6m~5fG}R^kIpjNY$$w5*B@eEAH5jH1&LDQ z+tA33a8Hck|<_1J{oY_Bbp#Y@Wyy^+h0@~94C#a(T1oU=6@+1;Vfcz;Q70A zS1jJ~D`B70_+U5`>7or;(NlGcr-y~%IV&jkQ%SctuYVX9=&$fW?@0iyAKZws@51wPy0qwN$WAB|(Q_@~bA8&8 z>iE3SVT(v*NhQ5j5NTp{uN4Zt;c9E}4pti@T^Om_GPQy*QZ2qTn6^=mP{Hy2W0bMk zkIStyIF~`9IGaHXZnK|I8H)>*k>*yb45djy(lK}gjSk-GCcW1RO`&5l(k(6ws=>yw<;9EM(st^BLfE9BUKGh%t3NGlPqqZ@TZ_vodOE#BdYZNe@MeDv&B|F- z=YCsd(zHEV>*EXZ9>epJ@>=Vql|k_?@*Bo7n>d-IKWV9hUgm-qzM!RFBp)E?RWQO*rs&vw2JvtT_c5_%<*!&3Lg52SPiXOMpWWpw4CB2Q)X?UxU{T(i`y1|zb&=g&O z%juf81{b6prtY?>@r7K4nZ_PuZVbXK zU>7Y+h-zYSmUnsKuPW&Z$E0eSQWA)X`Sz^CF)M@L@%a^BO+h8;nD&#a#R!aCYB(GN z=4EET=S=230lrdZPe;i7yumS%fcB@vwvg;5N~F8RTb(?&{L0i}_)3Y`VVKr9Egm4Q$JajE)td zF-bpyn*h}5Sc~{=A|g0e-RViSiF5uVIJS^%Rz&2;g`gH+EMcE>98<$Y*DOwXDJC}U zrCD6*V{guXTAX&A5G+u)cumbep;_TI%=yNuSMAeglTADh*VL`W?G+P`D<2-m$K$jw zSvM}!@pub)1yOct&NK;l()Obkr|3yGhE|~PiO2?sJ$k%K&$l^L9B_=KViYU%nGK#a7jN+^%3CBX( zB9d&yx49UU|5H<+v3RS~^zG{PHD99*xzf$kc~Um?NuNsrUa$Dvg%+^k@M5W2&U24^ zG{7a*&VTN3>_vwY)EM#qF^V%Amu0@-@TF32c|IS{nCKN*Ye-J8da&&9D%LJ`k}4(k zB_oG>Ye*LVn8Pun3mauN?Tz@)pK&F_qT)QcAxx_Z~wTFYQ3JwBT5iQ=3! zD+WjNN;2u{+ZBE{wZ_=CA;R$Dmy_-qPi`5yz%E;SvNdh5_n0=EdW@vgS-`TsBBji* zhhAO&=!hRN%1BzDP$m0yI;i7GskgfBg5>)`x{oIpdXqK(-bO|S;S0lR61(TIVNwT zUVxS9&E!S61{bzetn@-bu-#ptOaX`SB-X-JAoV{+8KH2i3^vQ49dNtUzYr2O_ti*8 zJsfAhq28I;z=|lN78p_;eokKWf{`w4Hd)!0I(tI#!RXP2FcJy-{79bXsg) z=3ii>OFN7#jta-jd*^<>=oKzSO3&Fc(#tjKd_ZRuRw8y6D_yF_#chP@@D^4Q%)Ni^ zg2Pi;20NQz-v;apfE5UHB10FPbdBTRj!!3pCoi-NM87pKBuS)oAX~{@Hfv>?#evwGkZ*$Ii4;N98Z@Bj{CHU z(LG%vIG!#M98Z@Bj;Bim$I~T(k3y)njm<>M^)4{l?(F^lR~YN9_rKqk(bYh;woC zUrZu!c)fCJF=2;xdN{yEHIxAF))%@}Z0;66#$fa^IJT@p=O!uz=-TyFDd%w1e#E@(W(;>qenaDIqt22Yl&O%%a>`6vPRl}s*0szji2sjp;; z!F?rD4DNOBHfsmUc-{Lv?sf0;xYxbU<6ieZkNe{_9IH6m2NQ_D^t4x}psvQjUkRY9T*qRMs@LNgm=8)mo1^bt5^~d6Be*)~rxDdMm z?LTq2IXFV?7Dnm>Z=d<5m7$*3u5XObKBe(usew%x^|T3rbd943NmfJ4H`0@WXO*DO zUvWXja1)%br)Ev~?>iiuEwQyudO~}#t{OY?H9Qp?#r;WFKcIuEr2CWZ94_u5hwlCg zo>koiRk8eFR(!cPJ4)QyvFqyWzviWr@4)$2DK$TdConcr6&}Nj&ff# zj{X0O65+;>gr^8<3nQSk{hs#?cU%I-R>h*Ghf${0z$_AO`1S>V*BTNLgn2W}j!0x4 zZ5fNhdH6?hXK*ed5ROJ|7c>9VR1Oy*^Iu+SbXRy8^PrkV-@fJlY93FX%azHz-{!yym?j z97i(IC`{5}q@>h8i{KbmqlgM?8~y&(_XfJ_8C}u)GrulIam*RS-kr(f|9J@K(ih%z zJA~^Y8ye~J=2si5RB@z3TW9nQ|NI|Dy6AL|Oy>Ukv}JI(qniLAJ!DXuGph7z8JIL4ES@jObnP1+`<*YtRneGyB{)kaL6X5(2 zqY=Eu9(5VPF`IhXs+jmm%JipdVQ*hB^@Aoi0N>mk4pw{IDMA!fg>P+Q!E=*%%y+?_ z5^>tRNu@}IPp6Z?Y3x_L6YNy-PeQn0E`;vdw!;g(&8g(*DPu^r{d9gf7@ea9Jx<>I7j1WiW39^k{h2EU$5N|YzOXV_ zo31B5b2ZQ%xMF97MSgzitF2`Um|V0~8GHBTR*xEG2xm4!n#ETH2a8$hbV`_D{*S{q z^W(=NA)EX0{!mb{;D?(m^oan+J|$RcLt6vP35{GZ%4|<)!E5O}{)yb4{Sm?S=2)|c z{r$lGE}FD-q?$o;_I@mkV-=+!jcH|y1ukzuqn~opaah^FxAfDhZ?Xp#MxUFGH+eT^ zl>+_SMDQ{br!zRe5L8PqJ=U6D6zt<; zlvx;H-k>_x&sjMBiTMe_r>AG&2_9pgWL1DJS*K-Xt+0i z%1K{Z!D4MJNA-)wgF2{7*#ApnM}rGaMASNI=_mS=5!Mu9HU1-h-dvE9(o zXAM4htUrw2nE&^didF{eJS5#*RvEp_SX?$~yvgnY zXY8)=__}N)1X}mj6sLNwuIGnSk8R%XEF*N+E~po`AhtJTQ>9Vn;ucnq3vz4}PfEKk zxMAFEX;B*CshG_{e<=v6QpVt&gq>Nx9KEMnIx^|${u*Vb(qou?9$y7I8Q=hO!-2mx z_Nx(`wjAiKqM3phOyWwZ7ocy}CutmJzp`G~VuQap^3q3}2^> zL=)l6#)`Aj+k>gE>Ji2TO-jNiy^C=0zU?5C5&x}D1Zq)f2V0d3)`y^fMpUCUNfOE| z;rvQ{WN*t{O#V>PTR6cWw@9ZLB!l{n!51*lM~?_`@6!8_3?m&U5k4Ban)ub>Se!dI z*=+Y(->tBr)KX2F+=Z>;NC&HLRLo2azK9NngLN3djtOJ=#0-0SvCp;Ej5t zD1H_JusH3> zk~~6ULmI`s6LZuf5$RnFRF;}*Qc*(cwD?N3%cd`*JJ#=XX{t?q#p#&zg{0Rj7%AgV zO|L(sEkpY|*dy7K#G30Qz0EA84v8>$yUiRS9hFYFG06430yjnbO^aSt%nr+%>QaaA7L5(j{&H@->dB{Vf!g z?1VIpv&T-EfEwwK)@3eF;~0x|k9)qHQx5xX-K#5FI}Y9NUg{6dt}_i!dg*r?=>zNm zhfY1g6G}QxQ1RbfOc z>35YeYX%32v+U34g0fu1hC_uCEBp5xp0F9y{0osHAsyAKa*dnF`sYqMoym^b3aISW zk`45CUayiEq+^FO6d?2Oj$A1Rc%fPM&(Fexy#TM(BZ6XoJQm>On7DZQ@hFb@VqW!s zeFksE>fkPZDW>&nyLU;M+KPWKoO~2tVTzA;hj1M1T24Ox(S;_JB@t?EOQx)>% z;u0O&D@ek|GE10Yu6MMG@>AobY(9&ZDSJPNAmt8d|JPk{OW8X4Scnw}Z z5!NvIyTZ$hn10E`X(sar*6wA>e3fzmG0RND)zZ6kc5}1bVpTG@v}$PalZ8qS+gS*e zq3LE+r2Z7?X6u11Z}p>WjQ@ zQn`=v}a=HGj3m0p}L6ABPQ4{AbzXr;;}m3q3h9c%^_$ zSK;@+z@wzQ#b1ZVJ%8_+k?vgwp2_^{8Qi-bIg|M!tdt5X19$KHJ28X%7fxl~KZ6&G z>_N{)nQD&D)}*Mx8@UR<=F;LtY%nI5Oa2&nLo_k9#F*v*!+no4ylf*D5gC;`o z=US2UyRkpCXbR((Ab}gaJldMlse2(K%zgdV0I%ZE3vLu?-{M>S$#hOw>;#ehH8 z0S_shON&l;7}tl(`GXvizC73(oc4{YS!Es_k2iewh$!=LeJPih4cS2VyG~&83C)e2 z1VR$OLH9}?n{(wWg$i4XBtzasIO>t;6~lt%7A@bX)tQb=B^?_x(S~8gQjt4i+u%#N7A@eZ`IkT#ySKV($Obj6PSsz3 zGtw1~-Y%gswYp?ofK#SME5%BS&0J-vHkN6lAJboFGB_PQ zjzPP89dE#(R;TULop#;lhciinl1{izzX?Ls<&G*n;5fR4b|vYo@u&bTU2j0nyx@DC zbZj{tm6G&JONSFn0;1O)F7kQCGBl9PXr9UZpHBAxFP-$R{?f`UA_>$Am?glCf;ybe zjX;-P(Z7X2fMXMsq?Dqq^Tltmi2%xAdu>5>b<#=kN6{~dHVgU7gcms+o2^%Q*A&71 zE{Q@A!JF(*jKi_I5NbzL$owyd3(OK$1~{{Hk=_-SPR8*&f&j+`5(%~rhrmfE97SLF zUd;CZuQ%8PW_8DkIP7P^W)O>4TZTgsk(&SOzCQxb9-$@LDTFv1sD{O9t!ptXF-HYPrTR;)$c}U~6x={Ws&d4V`k8S0U#MDTo zXGHuz>AVVDcmH9i(l>eK%ig9flUFX19SL8E;Ot2FAc}J%;qQy!>`3^{2+od#|3(C7 zN5VfJ!KtUn6aAUY-*|i2knBkKYaK2csa^@;f^OYShpXhmJ@HY8W2BlNX#bfg&Po6G z1}|ajRjSr{&4?lV5Z=HTyD!&4ROK7A-50P{rB2h67jq3}1q$UR;DuaasZ`8Y{qgFg z11|VB@v*@&(oH4UUQPV8xb7im>xKp|)u;oNrIph|PDl`?}fCD^QV79E14L; z;D*HoiT&eFcc~N8Nel~BFnvbg2rMq~d7p5~NPV7>E{jqaNLxng^9(MU>`2zv(q&%5 z;ksj&9%ufvbgADk$|zjmH!NPqV43c&^=qS*5xJRTf6rQmTT`fB`3i?OakPNd#5H$WJWsr^2oXCBFfWxCLBBa zVW6p5XXn@JSUu6L2-o~5-A{C@>F{Pc96OpWFtx}angsK$2!2E*g1fP`jc%?s#)A>F z!4#UeRV-k~#vS@?%)f;9x3+p``|O5cB#H3x+ThGZ*$zz(m+cSYa4cgVuC*t<(bk#q zWFsyJ-(xH@KHqO)b3YvH$WEbA($9;!66W*zz z>ql@lo5HCtRggFEDubs;z%|t0skd`h&$!=4I(44W7W&-OYJ+3ygme)^ZJ~>XvtX*U z4Jvv7g%6N2<%KjowS-r(QL$tqtC8Mj_j}f6RX9#QPu@E}Vt#{5>pz6o+pT7SZw~)~ zE^IW8BX9f*VKOiNMxDg4uR=sY&ks_D_FK<4J1u7Or%52aiz>56sJiujgJWL}4z>3w zuWoOs36j{m%3e+U1YXZqyZJVbU2I}9lBXCW83?Mz`LU)DE@%TO1&wrFs@6|(bN($Z zT!?0ILADO*UaU!0mO0B9ob6XI${3t=s|K$uq*BJKGGB}C5TM$H*2`b?d z+lO$8bwapgDRTrz4<@sSDvU4kQ5C{FXq|Hl7(=*Z1+Kv*!3?E$jk8I{dIAiWvsQ^n zS2!!)>Mk&1Sh~hjN|&a0nagvYKoX-N-3>0)-QZH)CFv!k4B@OM;3=94s2B>C>RRc* zC2Ma(I6I0#EdGo#<$Nhu)mOa#TD*W&KY|&U0nV1%A!YcX0Ij2uo?_7t**#5)G`OUe zZImJD+^XbIP!-NpA7*i8Rq_nZtx68z-c6Q>Gk+$il2ys{1mQS0BE^6y;c9YscLD8x z``Y=>>))uQFVv_ZR9{hZ=KWnpqzv$anp%X-@v9Awd?#J^0WQ_KK{F#=54;7ymJe~%5W#ZS{9#1dYW<-(%IPo<_$(V z+S`mxG;eU4Ob}8r@vFhrVXy-E24^P|M0HQGtiFy`JUliteJThl;mRNRr#R6AqBZ7=xlm$htBgDR*sF?@j@}kt@gS&rG(fBj@cIe4 z?(McZN|zOH3<=zCa2=`2GAoq@Z0N50u@@%2jlQ`T^FbXhXU=T(^|D^?lGm;(Yz)rt zoBNN$xYotD_v|wU-|UZQh4JZeZ?YDnZ}<}Feql%ps>4?kzXPW;wfPAvnaszVY>neUqFY2I!6&T2(`K)IS>}F zcQ6M zSW;aycoox@x~Ot;=N%ec9eFF*dLoQtED_aOocf-;VTHlX-U_Tf1}B$S;sy>7*a+^6 zPi-xWcN#Py7z=`Fu~_m-)){=U=q9ti7i)JVy^0nh z*R2uW%Q1UT=2A7Eb3OKkK+$Z`mi=P$QeaGN9FDc)D$AF(~qm^;Ee=X0Q zKzeb~yAU#Q?AI;$PYNoe(|>1~ZL~fc#kq6YE-pCfoMh7OR|1@qYy)F-C){rr{eZ%^ za2A)Ere%dBeiANZKAO14hQWL|`RIpEFX*uhS4 z;Khob_ei`Pdz(+zEk`5d%@aXft0H^gQoHoB5 z#W`)>f@XrKXzZ^I%3ZOD}+!CI1cJDe8{9j_W3T_UPwgQ3A>&Gj8p1~~e#i~3B3gw~spV{p9# zSi8Q6b*8>I7+ejl$reG7GR@K=hJt9zC4cHM(%bcV1@qnfibG3-V^=1A+lCNs`j!@( zWh|dauB(#tMRYPV)qHC$g9}>a>Is9>h?!(%D5SQ5-4Q zr?R_8(mSnIIfp@0!ID?P`@P}d9er~ko)a|pZwPSF36=^+_q*pjbEi1IXdLUV`#Ao1qqiBp7xO)Y)9K?eMC4L{i_{5l z!I5=g-SvsnOeH9g&Zc(?L;w0ZzM)_+@7@zm0mPk*=2UF#Hdq)7sz^Q0_FIZ-N=3xDIi`s}>)b#j(&d zITQu>^pJGk>JEokCZL(j-$R*hq)R$SUx*5_!YNWw!DarQ3gi6oP=DcYY)r_A#_jLz zSY^-~!uK)%u)`%OEc4=JD_yX!O(yfU058`{IK#`|wE6W2&c1=R>C|?|6d0T^fCaKX z`}}MKXXk)Dgq_^9^ad6{u)1H1;H>Tsq5C|L&g%a25uDZi#G_U^E14|zI}XPVV046@ zzfQaMO;$Q^ez(5!4sS1Ys(Eht?fas*TFUN;)=vhwzt*m06m}A zoC255#Wz7k8Yq=&tsENyt&C`8Z(vBOL8zc`|7hvh`00db&oGUP4=mHTbo#rp46Sv2 zxQvlXzKuxImv9;-ox-cl=?$&LDL)C~)#5Z5FW46;j0>eBj)bZ!%K#_U`9VRQ-hro> z&`t@4;)$l=daa0?6jXzg{e?JrniSHVV?qzU@6RYhcq(O#9}`M9nVX@NWvZC;qjtI~ zFD!NZGe}8y!t>Zfl-Z?(Oki8V7VgDL8HR8~(nrJ8;^jR?yjH zlsQ?fEOJBgjgWLbzl=SA!ATb!J8shqbT1W|eTOkmFQkm>+2ynkEW?xGL~v5*^=wdu z^(BX^YOs2t?;nc`t5;#1wt#155L?_Yj4>|64hM)+ zyeT-oKZE1Q2zHaJpA8(xDZwGwzZS+*xztkvmwGECJ)KKEMbiL%CNcM{Wdttu72o3W z>Zx=t^^_oakv>+LbT0K&I+uD%lzana2p8mStNV#u?cp+CXSR4cmx@E#PNr}i!nU)s zJ2h729#}~iWNsJKR37-0ZJf(IFyVq&3WA!-1E1pj(M)a zD%zg3WQpAy)ZkRxM<)#ekSJIsvJj5-e^>zMe@5eGiKa=Vo)3+qlR$g0#D<3vp>fin zxm+r~&LddeisHx9;SZ(5UoXS4`VZ@9TUZ}*%DyCZeI{rD&=CuY#j{?qsz}O0- zjlpTPHa5b=0EM47IF?K>t8TRzjh_@|Rg>ONrNJB6{Rv68$gIbB*i<1JWgM8@Rvo0i zfSwO<3?5*E_7f{u(cZ`1BX z(Wc)Ap*YDvzAD$`H;)YUW=!TvWe)pgud9es-B1q`3Ef7+0u?Nv#Z#%TiqQ5w@YHV~*#U5rif2It1KNs;jx ztBe}#rQKNRvhPnzZ8&XWKbd`9qmb< z%-|mBzT$>4g6j$244!6ubwzwmxr)`5F1r6q%}$LUkkiU2oQHLqS;1mn+7yOH<^`Rj z7N_Ag5pITH608@xtaX3O86;k+FFr}-D+j@B5>6+=G&oZeGtLDTRB0qUo&{`d|xuL^G)AI((i7q z_J)1C&qK+-<)_8<{9Z3SvC=2~{-{01W)FRCwVRSY84riN_CM{U0~gOWZmp7Zt9)Es z2G>X#oPM;bcFbt>rtslOe_wn~8`9zaReEQ`xSk`MB$=*%HjKBXIB3cH%$E&~GNUyd zKwqBrH`s~cDyXA1mNQx!yf&T=&J0$2Q)b1W!l${_DdwmPVoKxrbA|D6%uEaaCL7dg z{v7tuM$OFo_rVZ;cC;pVfyy5JX`ZG8Z!vR%uLsg;4z_O(6w>l99Zs{;858PYY0HQv zv(p0>pCABO7dXdjw-kR&*J1W#AyZ* zy1g-48Lav8D!tc8-=1u7DNJdpah#$#U^a@^VG85zaS;mvSA8kd;5w_8ITvYkH#wW; zwCk59{cEI;SKEWBUQ5Jk7dJh=R|ov{8&;Vm zERq)Z0*jY7uup$^wAOzt$%5v()?MKhtXN@aV;P(>!0YmdPIus&{Rx@VlmGrU77%D< zs{PS6r-!<4@B!A@R0bOZpYk6Lq>tCO1u4cVQ)822#E^|1wh8wsVgsgiZwwym!(saW ze#z-hYnZWceCRd)OUG7stnB4h*yuNFWzezD_D5$PanhT8S`p<}UES5vbsa_Eg2Q+d zE3|x02J*wWV7-;W`$I|QaMI1W5d{>0-XhINpQ3D9UB_~HPegsd8B%uQMG(}BTM*mh zYllXei&%%YVb&mZw&Jb%FP$>vdUL~pcPF*X=OcJwy*KHtA`_zCJV8(8+~0jjg<2Vs z&el)9KY~BJz2&cu{ak>fCcsp!v~ETjb!td|lHWda#`~Pcm$7(pjm`|63*XEIgAe)_ zHpi1Gj52e7=4TZ5)~_DmmVce^ECiBS|Ww5!$YJbD) zEW^^pjzjCt*C0%a)VQGTW|U!%n?dZp6-h+n+vYT$nJAzCN%;C$;!V}F1}~tr@umRt zB7@g2jQVSh@#glXryRy32G<@t-{TUz!L=plgEo6b;oH;V_yX#*qctwjgp>P~Enii- zPkU2YO-u*XdFxqCqrdk|tZH0TZ6@8PlkvHJZnQ?_wx_vWLXn(i$=35N_Ubj8u$31!`V?R ztC?1&R_`>5*h#I>u-6klH7;BE<&@#h-*xZO(uJxRyKf@J^F0tRLp7OV6(`QnyzM4p z*1a|6%WD;Wm&36aRVxOwm%b~&F;GpT+O-n4u1Xr%yc)qNiFxPHy!yNjDs+eRTBqvQ z=654FEim*-e;GU}*!nZJnOYJRZR&(GpGJ>sv2|l~GfR@PfspWw`H|$CHylCiBZtoLk!RMem3xQ!e;psuAFr z3&AF_UyI;unwfrwQ-)S`a%tuz-xo%U3e zOu7o;f+@9OWfZ=MT_in4cUU@x@Ug+B_cXc?&Tk>=VwHl*=%I`mk}g?y8Nwx-D1~s$ zkaV$^^d*E#_FM|%@MD-loO~7tUKzqEiP5?5Ns7>QjjMgGkhhZ#-cS-A{)Y~iYz*;4 z1ZOvf_;i5lYz@EXaodG=I%U*&rmvJ#+B;k@WhwLBfpkeF_~QYtmi$$*1v~R+>`t?J z{8rCozV^GF?vhII{}tephT4H82V zE<0V>NT&^}F>i^HZGvjNX#vw@+x{oCbh9L~-Ruh`?Ry}H~TQfMfD~H2r%9XDMtl#T!974#Yudwc_ z8o{X^1XZ;8aDdBltJYng_%4p7W(m{B3nf0Pv~=1gK{Wrz;5HF>6T34cs_!O;Fsaf> zFI0K;fvQ2-6Jk6o~*^f0ajP(AUrYsa}Y|6a#%MNqDWb*IDTIQ~S0i0;Xra>3;BF$e ziZ51otc}GkU3`7dNasQQ#xPDZtC^|f2G>iN>o|+0<=t)9;+SAs5p-i4yq(Jn3Sk$k zG7sr+s-+4KHEI|7!`x)jLoXToN1lL2R)tW6#`}02d578tG~tB|kwDAyd+YXKc;lG#}JE)~lsUY@%(flo@ZF9;dK7cGVn@ z$cD0L8jmoB#IrW28s~@Yj3G77mNr(pIv8P15>Lu9(z$3xnQht3HKU9~3!tAf1!a-W zPr$JbYs{H)R=UMeH)NimpceaE=i1{69D0 zwbD=9r@2op{WKR$67xegsN>aYZ-n`1LS-a6~~uws?!?`!gktu{)H({3Fo}9W5P`$a%?RTZ=dQNRg|oJ_;X> zF?oD+mT?+RIy^9a7yK#dbRZ@_apL*kt96$+cJpSEu5n&G9?|$VH$Tq?OW|vSJoYWO zmwcZF_bv$tJ+E+@QOmcrzRFr=GTz>lm)c9YvTPj;S>~?xQVX-i*o>q?K)UOE7Yb1F zSHihLGV}CbnxK|fh0RYLtK!+f1|MOPOTUNdzU-gUeYA<$Kcd`6IQGLojk8o~CS@Db z49|INN_eGralDN=hNCUaMZ}zGk4gcKQk?oIzmri786v_ffPDmN*Np+qNZS?ip2z1 z;oSKZfeeMCYPvn?OFW0d$9|_C2v@P%Ae>cOJ*1^$a;$9qiNfhPwEl$#+BTv0#(vc} zlt~dy6T-y>WrOe(LDhKfH0G#d*;TC4=AzRbC998%;N#UY%HZC}yGV?lAnAf>2lmC3 z-kY70{mFeQytg(O^A$r9rIevXCzAANaQ;jctE7@HI*L*~q4BMn^;JK1r~gpMd3I~${LpWRJgc4t`b2DlgI~>a!)4$ z!i96rl`;w!lzUdXuzu}uG(Rhn8ktf?tq>A6!AJU#E3dj`j@Zf!M~C6i8Dj?z#yW*jF?@-}uyP+Q%lT#Fs%E5CYU0+tc8Q|sG0%k7B=DI-{B|6u}aqG#WcFzRTYjqlNtg+_{8r^H6!{=R4YjxQW zl9AqQV_JQ#$ZVS8q|-(yh$Ec`J=QeRY44UwsdTcz?C@rAHJ-^P0jrGIr>gWWT|h_D zkv&d7mMS-$eyk+y!Bo;^{itML!bLq|nan-!4dZMv{Q3wkYWkBh@G={lD4tFaurA6! zmZhk5Z;nq=K@%$W1+5^%zA>Ehcb0H|G@R3W{?-fqTuf0)5P3eN_+_qr`m&|>)x{oHPk<(e7 zOYGsBNCcfttO3@8=368o>F=seVj7ou4@h4=(S2=_#M$czD)86MUQYV0@#9IiXRmAg zq1nqxzcv2)q}#LCHU5U#%SpdA{>G%+v)48L^|P0gerx>LJePEP z_PW6fg;FEACKEhl@M1Bzw zxxNs(n)ub=EhI9DMg~8L?Y7$j-r}gcCu$J7p>dJk^pwG+rH#dfg_*^L;w>&L%q%V} z%q%V}%q%V}%q%V}%q%V}%q%V}%q%V}%nU9xyG=94(v$!yYSzMUHEG|r878j;4i(^G>3NN-8@@w9&IuR^+nb1vx)A@NFfjR*$ zp-oV+t-`~i%At{t(=I|9CVw?JR>dYWp*tEchpu?P8oY)*s0H;C6V!*jB11Q|^oKjC zEF(B?QNKb<#~DQ;vm4#jkwzgE6TfQdg47aLrlLDi6NRc9-{|Ty6|83vRV0lv-lYuY zrOiOP?-OAL9&1yveS6Vz%QwP0je_T)vQ zOs9e#>X64&#ENJB$m8?l3MWx;0)Gq%MURykxd5 z;vUnutk{DrgXaY4h2CuOPD_$IEWTKjWmhA8(YKLBDEtP;Nlc-O$zKgFJWRpr-Yg3a zy$vkWtQWBF2)db*^-y=TGLJBnyRGr2`^|hYxWvD|!}<4Sx`MJ=N*Dvb^XWEqx_= zG5MFqPbLG=I~wP_k$XntkGkK?7lYU9vYIF1dRV*92v)agh{xcPamq06-;vi!U&(cm z7|YVx#=r{|><=S(20;ammbpwm;dD47dX6h?zNzJKwND#+qOroUR2aJqa<1&Bbplog zAa(Q2PRrl^zZ1rBmJJiFe{S$<>rv@unWTGw`xlzy?NOW^9kw_tR|m}EtlTIr*~urQ zJ8+3URvF+DeH5&U>_she9kS;3K~`lY^q zjqW}r!jBugb)t~hXLKgF=050j*MnaV*HNkQcc*FT8mC5X_{}rlKNXVRKy}G9h<&3; zM!IS^7xHL8`+EQ!&Q=GMY5|T7i@5X9Y$CwIRk3(O zR?Y`FHvE+pHi#z7x?@My{!tK3ZS=cUm`ds|&*6D)@Z9Kbq!%kpZ*~-?DV{MYCAbvD zX>USIHw|vjev9JO)}oiTiNNTtTM7B(A@Qhm+ULl-kkR03f3YeGdhGf;t8e(X#r+0x zPiPz)cA`i);jSir3E{=%GMm2xJVlBmWlE9(-$1&ka0+moS=TOesXo9(Wm$kX>LLNj*toS*;tI080_=qynG5r?h5?|n0yn=mOd7o#p2M%pUZ$0D4-u!;+ zfens&c_UxXHIqwLtITq_AnBHNxU3u7;QCx}zSrB}&D=^sU>Iu|!r5>lUIXb8;SR4i z=xk!HfnadGDQIH;*Ei0&Xu>R!7JO2r&`OXL!@bQ zyebx^`huVhsdmcEpIG#6EdJIHIO!*GVzxjRYe?V{T@1c}!7M&~xkP{sAyGya{Iygv zfetEgdV$X-`kuqlRm6982GT`GJqI{8d!}|czbq&VHVZ7egH zy|8q`v9E2CCgyrXx_=wo+fF)a`$Zh|Tx829E#2a5fn)F#!{Dfp%c2y)HPWTsoe`XO zWE!Ug!)Cx&e9$UW#&Yu%Ws}0|Rke|t*EbnuNP2+N5}^3h5XJ?A&jAiU8G1pyaASAU z9a+z_t6wBV8k|isQR)0hOrU#;b`vR+qCP{oV3kcc5nu{D4QKd=eFNQ5yKdqEe@ZYo zDuu;zu2N^39@db+`4*hZO;qJ1yisrXZEuxnbg*izw#bzUv3PP6Xk3)Mc3tKJ&N?ua zCY^LXH4^V|zeNcBcY!kHN@am|%cRRme=qoum2M`L6!Vor#oNBo%2=G8S{uQ6{WV_I z19wtoEG|^W;9_Nv*r^knYX_NVqRmHgn6>Ne7o+$vK?N@9SqN}Z10ldsEfDm_OOmnP=Sl;l7a3`onQSqD!|#I z?A<|7vFfYDWxszD#U(!2C_~aEyYqx_$?iNMoNHpe5tF;1W zMU$$v?zKW8S1E8CsN)fbi=3FlWlqfDOXYT(?fVIov85AJm|5K|&XgZBxIeWA%GlCL zsEoyh$_NWHt9zAFJeMW|-5VHv5x0hG1>*;}a@#6nabZwJUdHK;nlH8d+X*ccliI_$ zpfGT_WQZh``4p~);@pelz8K3SwyS2I(YPp*dd_huoNs>Gpemf}w)j{`I(j>CilQ37 zOYV&fq$|AKQV)0>nhh!)HpDcvej}tziyg92CN-(b9pl?a$1HGo-?~)c6x&T-HzLl;M)D zPG=5p(#AR7S!o{+E5r1(K=_|TaJV|I%fcBFJ);%I=PBil?%44KZVdfmIz+MmzVf3^ zI&CO9~I02+EIooO(z#qkE%Xuaq!>CfD|NTo}BK!)*AX#s$^kj7~;6e1@oO zwKx@G{HUO{%&C@|Ai$=AK)R&K7f3IPhAEwNQD0Xe9XRim4BjsI1}5hcK^xtjtX1eK ztvlhY)qlt(;0|&|=#}wbe?Ei@dnC0os9iTD3DW4k3^S&fh_sw;sKMZTcGbFTr-88m zE&y@3Cr3FPmK4M*;dDq*6J=9;?6|8h{g_S!*cvU@XnO}R=$UT`aGKHO#3X$A#VF4C z)R+B$QwD?7YR(u6*aX>`%why@mGjt?Y%#gS{v(ImZQT+j(~S@Rpj8HqpoJ#4nCpc< zWbx8TOmLy?M7XhV9ZiHc8k}jMki&JQvsC0~=d>`p1;b5h5CcVE!xP{@I&f^7!5q2f za2N;k8*&xDg&Z!Kl^O~v;p{A@z%rF~Q?Rp}Q-(U4`DE;HY^$hFYV}tn98OzSR}i(O zqAzkCZmRA+Hk=3~^L0apR5)u%r;KciJcsL0h&tq^;vN`@EHmK~#C%te#ihBfW^?uY!r!HM@Fo|CX@KY_mTkPEq zr?b;Ull^r9ZZBaqiQo5TGCvnc#|R8tYLos(I^mpUzVyc|j%k`Ggqb0pVt`As$9aP< zH}&RzIH;OCd75;$xS+fV;{vZ5#sv{&@Fl)6OlDVhhweh!;>$vwl))(}qegGKu3ne? z&rd76-wm8aNyu0K@1#5M(Ncf7nJhMRN8@Yb3k#F+hT1nibaVcz!yA*aV4rB<-!w18 zbLH6I_uQPnb?jT_uf<;Jz%rT4vEJ53?CrRV&&wP;jg6DzZp~i%c4hZtr?Fr4x!HR$ zzu&9zRpFsPBmv5-_NIapv-Il-$0>?2@1DE#Lq?flZ)6w zHEo$QW0~~#7<@A5kJjSk&0m8ugERA&oco1nK>EwDhfY90QUp(A{~;;DfUxHk^3qzghep{jo5a zL3bP*B0YP7k{C|<+V&rBsMY^#|5(|5>%u@>d_ekieIO|f)GHJ|5uBK%6(W4X`*sa0 z-KUd__80p}(l2iIQ6#YFS8B^_j|M5ui95DE+7cy$H)!eS2b1Zx;LO{K!N&tGBe`%P zs28Y|?@E%eGUNpuJ|=Nu@6gJ8hkKRe%dzj2P+-0f(oq-t&bJGBg&q4&q4*!u(*Hpk z;hAIKCB(05>6z;XkMBLbd+XZ4ZuXvoqr<(YcJ}vn@5$`%W)F8R?;m7t9UUHAJGi{_ zT=v?*{;i{({iB`CmA%8=Ye##Rce0nSU4QoJ-Tl4ivY*;{^7_H$%*}&Kdq)SCN!s2$ z5#jiGbN6uf(+5|wHxIJ6ukBpjIoiGcZ05%P!Q%&6dd<`Ocb>#sZtUV6hkH+E4zBFS z-vIHpQn@W$(FpxOe^F2~zK#Y&*BP34aaGggkO< z2E4X^aP!(8Aalx4{Qc~e>(6Cx?(Fa4g?q5Y;cZg&;Iezp9DFkS^rx=xJaKIYRAJp5 z@I6CZ+1o)h><}<>MtAmJdgtXkmkthhvQJ&!J=(c%PI;rz?VE_O>n5<~B zZ^2v4S>5;Jt33}I--`wM#~y=B-v>A+7@wu+LA1D1rpx+70!7%9;M5Ouni&Xnq?Nj6 z&o#nDy_q`BR){K=z30mAwS&XGL!>p8A`Y(Ylg(yMeV%=YsO&Ao|BY)0PXbqmwwnFg zXV~`Q+CZO2dVluP&eemJ)Nt83Baj3l8Fie03!_Ygeb3gQIJQcaD%P_p(=a%vYU5@5>-p+`7Dj+>4B! z(V6_x!F9?|`XiK~KCpZ9@Zjdb;Zu7D`#aa4q5OGk@7B@o4f^((!@W-(WplMwIrAYA z^BcjzU14`yN%`rP&FdpD1iN4)*)|7%^~2Crz(c(j{ExSq|t>((xO+`-|&{+;a2 z!{=@s+@uz}$>*n=? z&+Om1k$rmikUq#s9NftKFn*EGMr=K!e!yDSc3`$EJDj0s94k;>oaQOHR z@?_wSvL;s`-DUT8p4d4;OqfeI?tBKW6mN#ZzPyL;c*~{T>pPhb(Mu3Ob@TR>9nvv- zaCBq$=-O?HS*Pg%f~B0d)07OTRn5HbDr`?r2HHvBqrL0T7^#_$DDyf?evtANSzaYe zm5z}xk&yS5JGrrQ_?g4ol!_0IkVbE5l&pQ{ib}c$crg2+gIm{OE1ONtb<*7wSx7f1 zx{zD$T!j=w`={VgC=nxplZ!-BcNqyKv+^>#4`x2Hhr;t3GU;2g)aR3hYs(L(_o5kh ze|F{{IJK=QoLS+O;al6F9y*@IG3)oeH6p^`wC@of2tRDTt3Ef}3QK_fpzbw<;_|^2 z6wF8%pSy-sh*Wg_;MVOdlGG9M0CEB%67hBo)Q)dO+@ z*AA{z?mR-}<8#+{bpfmkX7}{Hg?uafKo+O$oE~T4OS7%%#bN)x%!hZ79uBF7aS5(M z6*Ri;p?q&vy#Yz(;0Rd=FCbraRb{?|8@DN9vb$7KIk<{w-`jgD^5Y$-l+}gJ7E+~2 zY=_KicCOu@efkJbBLYbx9Qj_O^W<&xNgVU*=;bKT(}aXD8xOjA}c~@$WjgdiikYvy|$e-n(`Ez-ox% z=(2hhTpR!B-aZQWTgE3N*v5-foSG1$I?0Ip=t1_0U1dFFvBE+ZJ^rN<*5cOMt?aAm zf|^B1Gw5(7#=8pzOW3 zve$PnBQw~-;xZ+$la2c#kAHaQ(!tXx2?1S?+(?$I97I&gyY8S6AWx302j_C6ORBJ% zu|)RX7+E&VNXnjIe-Q3Bd+(VA~1kr?kSsBBODzc$OOr)^yV>DPM7>=j(RzWZGEklfPl^=Hrk(phmQPKG1f$gK>)T#tS^|9lzbH>f6hl)X*<^hqk2G9N_^`QU+DsFvC)SfThpvtFfS zcMW;`#)H|#{u!h4JKEBK?s+`n;;?d-U16dKrZ=<$|NVn{nE_Z(pT2om>zjREMWh&qn>; zbD57(w*rbVRi%Y5rZ$Ogo}ikL-QRlxZG@~!4NvXb5}9fXt`-e*Z)J<^u0BhV&YH}86FFQhQA~ z2c_5!QlzUzP=)-~(H;^5q5?%2wKw0&81*T%wGNTnVBf%-?%fw?V(dvRJ4CUnyHO2D zg`6S*bsbbN_HJCJVvO>~?d#7`?G%0y)i~7Q@4OZ6?TIVM0QM%DWH)xX#W3o9sI5L5m?bvR!K)xmBjc+|m@-lJ((YAgjQ*OeNm3NYh{79) z_gEpRwI^$t=-9ad|9A^+yX?KMypODaM!@bNED1NQ8^hOjuIVl}@``AjqOo{QWijN8 z>$_KOKWp+NavPkfidMKpw3AU4p{jZK4S2-^h})1rRf9qzvDGK)xO@B{b%^}&L7q<< zAs<8UqDm{29(9C}PE=t+mDlviAb^yl(YIiOjQoyrhVr%rVPaMJ)rB=$pVT6uce0~}@noYnHKorUHN;&D2g%iD zFa*PjdsgMz+cyrbKaKM7S(_K^?Y-=q++(QfdtEC$^QZrR@U8xrhFp&-8PNKRaXey2 z9(~#2?h{DBJC_lsrp`gtI*Qf(1FA9T=r?`?o(pc{e%;Wt*#K=Bs+c3ypr;xo#MK>G z_y*!VaMJMwkB%#ygu*Wi=f!7L{37ecG@R@bwowZSwJ0P4w9T_td3Hx52ar3R{6RQ$YrZPGiN?Tyy5Yv{pvIr@>p zFFd$;2aN_~F${DBwOACKS9d;#!&GIh1{EUFA}OtC|h;TMtzd%{~m2o<)uEP za5_|dTj<_+S{3BFl+IpOPK}(@>t5?}t@28j;f0VCwI_x;FeoZNI{l*e2!6|UrIkjQ z8DZq1=yk6^F!zy^uBcwm+qzL{J3{X*QA^afRMmAJ%)ZZb7VoOk-n8LW zkq?u>i|YJRYIUo0qzl#mvh%`CXE0@SYLrla3Mw|Lx~jUWb*m%XGi`e?;Lp+iM21nl ztq*42yL02tHH0Ki2BnmwKz;C#lhvMEb2JZGD5F2Z-|oUWkd&NcClCvi$_&-hw|DkQXF*g^yYSI~a@67gZ*|qGQ!|VA8{=iy<`XIcmqDb%qKl zx|FHw5804>(T9-q&=qGoo@}otC7XTRxQW&l8eX4Q&vi6M! zGw-IsGq~={^h!N4bML|eGP&yJTIg*Ih8NN4V$#cjMpTUIN;wrRss$ADRLm$);u}6R zI})Tx(i!ddYba&1F>f%<>6-^AbDyIj9(a+%+t&`ztEheQE%Z*sJeTk`s(h>W?V_qh`G2NA}QLh{`_o3+!ay{My&z#VgkQEB(RQ_33?? zDD?IJ%OJta-XwY1aS0>}+d~pbZ;(K*|6c~ZQ6lMe66pVnF*y-5RbS4>?L_4T7Y+ne}l*PDpq z^u1&*J=p4sk@Tg3iVCUP{gR8x_uewcnQbV;GV&XrK6u0jnH zRIqe9Q6&jR6b^4c?h;NU0wak-$8iv2C|`9?fgVp*#i1HoR~?LJhui$>jv ze3Vl?L{uQNO%N1C{ZLR6Z4uTjB7I2&L6B|66)H=GBsa-ht++^_##WU)^eMn_#IZ)? zaQKxtGm<5Piuo1#`>(b4KKqjsiE@~a1SRU=^pIod zvbe4B*zvcP^F?V)Mm@j~JC&aCZGYjV6R+oM+RqZ44Rs26;fw;13HZ>24C%|=uvl)x zqR(Q!M57Tz!Us_!LE(-5$G(`McMl?*^`E^1CIjsD0)90dZfm8qTpV}b%{}K)@$%W~ zke+$%)ZB%4=FhZz?=0rcRa&s4Q9*du;$QQ4X>g9kw8%qyxY1TZCJM+&Xe&Mi1LY_wm+va}$On zG~I}8a!Wagixh^KZ~YDn757%}iJOzjyXH%ks0Nc`y#5O9x%B4%EQq;)4@JeAlj!4Bxvr#lR;|0)R_1JP6OOqu9sxI4m{S|6Tlu~E zsjCkN8QiNDj3Ui+xA$Ei;O#bV!G_G0Wr7f*ZU>2kbtaddW;$32J~@!jZ^54`!liDe zn!IYS_6fAWY-!`mY{y6mOglUl)?^Uo3_3YxdqZph8Ep~_!0&E0rRCO~(@F8DgxVskT{BF4-1o)=w!GyMF| zPuM1g=H$Ke=4iP=$;bxa^XR+LV4bIB@x~@pF#CeFalt-N)^P@DK0 z-FhS9_HyJi-AB<;h|U2ARd72rlC6xE)Fy}LvVnJ0W?-G9_$0zkFiKD!VcbFO2JT|Z ztE*f)VDWfF0}O+t(E`gBZr2w0dbINx9GPL{(@jhxav%tYW2yjHTN{iBA}3*}icTmW z#+^e9gSm{xTeFqODaVHp)*=Mh0nF8LMdHjh0ZM79-lkS#I|7>KuqJ48FCNM&5zgeH zPr%rj!$q=E_A%odfEzdBUwf?`W;SY?fY_}VT@ZcumHkc}BGIP#Z#rTs!ENN2JW79~ zF!1>6^3V{Fve($0lwW7f0%L#%>x;MhYJI^8D2Ir~99-*o=y!_8Z4NkO5V>$-1+#T` zB7uoOp<~2Rh`{<4+x+VSDH%m$#xYN%lN!uesdmG@Y_FV%{jkWIQ=8kx?oApSi9En1 zOR$ZHd>o^p*{QHn6I#pI-EA=astc=>2$B85Ln4ymV~jX!xsb>vU}=muDbmdD$yWP? zkYf9;6|)zMv+rLxGjqbCX5VbZphV2UAs$MS4ixp#i6)N}VIon`WO8pHLE{z!kCN$8 zTEHb+3U(;2%za2E;MMx?UlBTupuTeY`mK+aZ%+LDkT5tbM8%L?IUQ1#ueRhxZ<~y_ zIPK$)V6W?n6NS~IhQC^q75t(-#O^)b{BnEp`2zyEMw5@t1=8JG1KNVe2*j9t=fQYu zIM@n)L&fK4{9 zi8guRlUuj%EKktEmq^qr7j92HzjE=NiDwTjLb14Vd6}%nDZd&)E#3KbG55*!8@DE2 z`T~ml+49}1xL8ZMio7AP;_>>JAnkDg#D4UT79}~eaPBl~xA5upPnHWM$`qczbYjm2 ze*6QVL_X)9f2}JuH@F0g-c9ju-Ug~_uZxx9=Q*Xtg#TMk2qUb9wTE6O1Z-c z3@t_`3Sv&GQ-#e&9nS^JT~ zpq&Pw%OmkIyvjTV{Df$GTV0`YDF~`t%+#9A)D)M6p<%S-dR%_(%W4cxFufIGHc zuZ98tkHsf-dRwEh!Gw@yn$>%X$uOdL@5b^kV+4CpXHbF7Dz`a_9&-gH>LU=uD@z`5 z>wC6kG2Ff4N>mT7p1k60TYn^RaJ4`+h>_d9^pWcfwNHYYQ2XR}*x6DHLiD$M8h#c}A&ZO{PnqcCzx-X}YkRb^k8yMcFsvb5a^_!Nr-!C- zhTwV0&F01Bhm%*r3OB!zHfqE~&kWw}rgcOqXj4GYZ2&W$NMXl0m= zuLvdEGQ=pwT^Y8gn@=888|!6}-^PHEpV)VhydwotB%N{r`(uBGD>k%GjqBf&N69DF z3aY&~LaJkU{+Jx<7m$lO(T>oDm>m zt^4@Ih$aQ}B)(Y5oFtL~bUB)fdatu7JivY%Cnc0a<+8`}MaX**WF*g3B^MovOF<(+ z3Uw3YMjTK|EAzeSmM#XoDOJ`~1r0d;pgl3}e$UNF;xODQs0(lGGQAlaQxYe=gwVx|Jtd`?=GG-;|X?<8&9$Y+8}YtTAdn(a&i8A>wXq~ z9HOxaY6hf5o!lrq^_eY#s=LLp-(lri4B;_>wMxCuW5{sv#n`dp;#(K4U7A}ud!9>- z=Re@~WlYtW0Sch-H3mdzp*Z%3(na=SBlV-%9WI%y2qx6zj` z7MyjRPN-9*^9DpmPASva$!=`q0|=zn$exrN*$9GWx27*%E`(TSqzuSV5;?BCr$ve* zJs4-og9LmRGtDsZ)CQT&Yc}L+oIzj%(%Djqiz0v{Mjeh|{5ab}_Bb(<7;B(ylPBLI zlMS_%O9g+kXX6WJD?=QHyf^>=yuU5}Z@O3z3eq{?i&kJm7mGggA4$qE zUOyQITBi7Dj?{+n7^)q>(4&Lmd9jAYDX>12pCtnf+0sTbguUsD z-5cHwl}oXl*d23+tW;wF88}#1(CG40TN~2`!Idy>2^LjHU_2qcjT}eZwu6-&$7NVz zc*WPeaiXbz-*+t+z2485MB~;^_^Q|kiR~C7#CT?arF>_#1;z)(V~0C?blX?S;zS|qAB!fPa@y-S|zMo!nwuVm$ z9%vtRlrKPfI!h<5pp=M~aGn_~3Mx`KZg?><*Yv<<{-_Z>;O)KBHPTr^(g;p#$F||CJIt1%at1FjbEBo*0uhM*dcGKta$aB|} z0w$waAIibiRkU|hK8HKIPq(^3HF7K4JXkA#4Fai7WD2FtUw(UjPg2`YOK3ZLwxd+a z{_d+kdHUf`*@pMCZB>-IFRbwuJl_ZrcG|c`A7(H>{L$bh;Sd{`YcR$kz+RS~o5>MQ zN@rloqU6LOJX3*jCMA zxx%V>j2CN%ZisBv^7}$7Q3wr`e=7hHeQ;~=5(7?{L%9OIgHLdBn*vNp*l$-TYSS)x z(o{?as1nGbHi@eomX34|$|IXH2}?0c`SV9fYOgnoL}~(P&~D-ZYbG^OSg4Tigk~kx zOKQu0hul=2J^V(r&tISF(p(dN0J!oAGjr3-JRAe{%a)@PmjgEKBpY@%@DeHG#!K*N zL|$TVkO(Ah(=T9WQW2OMG)+NV z$a>j|N!o*&bWw7Y!i>tmF9MQRvH!OW9R^x)T_wskDa~!>2lLDHjjt9Rl~JwCyQ^p>o0(8 zSwH+3*(yIms$L6TE}Uf_0o}aTO)c7LXR||AO! zIlYbm`~s7rjLXFC{)d>*?FC{KUlgB!->-fLjA$`ON=L^PGG1FpHv79Xl$9M?$-z}~ zK)PRCZ>KDA1o(3zU=^@a``9|Vudq<1LaH`R{^SWkk5sTB93y{vm;r^Z_88DtD!3qD z&o6J>n!R!Bh8Kfd{Po>?%b#Ale&_n9Tvc=D?!v8K+&&RgQ~;*(WC#|0Elb7NDVjc( zdw+*0ftckaU&aQTr-BqO1m7y|D6@E`v=V%wl@X|aPD6w`rhNIJ>OxE?W#$dry zb*KkTs923+CVt!ISSu4OdDNZ)X}O2D?ozLNMknGauo>$y7fr*PHkR7V8k*m4YYlGP zL$roZ*kLOUqZg9Y%BG}@tkSgGU2E;tEprO@sTLcM%~&)R$N|lrlpWsLmQiaknO#^? zg~;~oEABUNYNa2?uSjE6Mc<7!^eJmWHG__-=Q5N}@8j;^tW0UCWVP}9x z)-x;)wYn3eNKu6jQ#IK5Z-5NH&++%3a%TL1dX*v3*P&Ls_jqHl6;hQg3u(JJ{)6KX zgXEs|)SWH9^0MTfXKKGkfoAkA#DcgnivVc$lm=)59z;$>SiAzUR>D}I0+5YxSM-y2wn_X zlN>@zMlBW3B!^(^CX)M>wt>~gV%kL#uy-u1VQ+^&;{5|w2R^%*C2LP5P|y*|nxPVM z;f$erB6n2&od6$2uwv&(P9-gY$K{U7dpujL;th>;&Gj}B1eop0r?MMB%0L)c6WOM~ zkmx?%YAvQQ$RJy|l&D=(MeJ>ZrOjuTRhA8rkBBnG6;)#RFED=TaK3Jq-NK%-wzCF& z;YxKsHI#Rl#u>s#1p`ozd7b-WEWnQgJ{n8S4ZoXH$;y2^53X_c&(f>o?5h56?G?ie zY{i}L<(uq;Xf8X&)o4Owga;EE1^aC=A=kK`EGm-A2qUg>G~*P1Q2!+U7S`~O##a=R zSZiwojD%wT*iik_pu{LPFN%nS&=v$_)hAZ(EX2gdO$pJH7~dXGP!63csdf_!`AV2+ zO4-crb($@*3t0YxEAWcN<$Lz~44IvG7e40psPnf!{_N)R5BbY}umbRJ7PXiCN~+yo zI(uqi>HOTKydnOc`|RHBGj=iTiFy@qkHO0izE79M5wFblhd|O8EZklfa5f_LG3gOj zQVF`?9Ki4M_M8sj`ytvMnT31K8@342tlWdWtGw=K)L*f{%Wi#BTzbG-luyhC1BJ*0 z!G4QnSL$Dgj-o7r9#c3I22D8g=C+BICZs5*x@Me%CNiv1TQ!ie8b?T&NHrI#_HCqk zZv!nrmBqw>WpUKM^_MK!-zyGO8_TvRY>ezoaD;j`{&r#6#26AQdYk6?9x!sO(_gG{>5X6HKWDQ{ThLl{E+t)-M@JNqEFQ#RZkw_Z+Ad z{vM^hOh34j_*=dCC_X(&e&P&QS2S?Ap;u%PgfcYBz=6(}9Apcac7c#!7obt zzC~Yi!eL9Q7^L~w1h_7VovNz?84ptUlwyu35$4)zQ(1ymV7_3qtLiIJ8k^XR?c1*xmt`Tj8LJC%M%v5La zdn+D=O6iAGGK%v=me-x@AN|{hgx<|8ojR|H>faWNcYgWqT~gRR@mJ^CE_GYm<;AaD z656||OcJCKRbm_yI&stkw6Z`|RR?igQ-u;+O5Prnvrg}8oCeben~x!-7QqKWIM-AJ z3kAXu1C(lUOHX?O0#U<*wGdHXabm@i-w|?vA+5n}w#1rIHFV{&1kv9d|<~8|j}EXLN5wJ;HB)V~KjbL|SEB<4|~&a5`E`CU$+X(#pdUa~qD^4> zA)$`Ez3FV^b%s~60>T3i#bC+>J*sxfvBe{PAU0JF=-^DM{5Ezyjl0YiU)J&sq#2`9 zNUK*op+(mJnqs`U))=vu5-vF@jy`x}7i1KB zhMT3umJjwhA&p!Dmv9}eT}&oXAcb8sM4OgWg1X+^I;oQ}-PfRg)Y%55c-q+Vuv1LO za&|Oh3_n++4>miwBKI>pi&@y1N#`?baSrKN?_PgyQ^_(XVYT=!v)vFqWgdW;C3ndEFkGtcbnwx?f&={G z`knZ+b`|@FT-DBQ1n z+e%Xip2Cx$jX(mGwPc+uLPDft$SEamw9RXwY83FOGamLLxu^-Yh7q$_z!M|+XfmL{ z1&2Xq=B&1NU+uu}tQywRo#o{suZHyq@Y3DdRIC)niy8omNg5%bfr2l;t2hxez7T}c5k)mUYEB8^JuC}CO z1et?nLNs;lB|(>0TSJ^>LSjueh4<{BR3BB_H@Na@tv$)ztLFIF*r4OM23ZXkbU44m z1sP+><3ZB2J_kmiKP>H6`deqc9ZD;G#lZaD_HY#fjR=QY?b-#C<-?ixg=9L1D-w+P zpStMYUkbOQ%iG%9Xs@n=mc!*qvKIC8%mJ$Jispu_D!hT54n?uwE8}O~E#?W7tpwuO zfW>pJY!_otR}?BMsXm(0YQSuxUySo%h&a08UbB%x?CD)NVK}>kDWBN-X%FB{#)fAs z@yk-LY|qDVXnq~_c24ZpgqbjE0B$)bs7)^k7c==;jOGD9^oRg{4@^9Js7I|?t5gJN%{-}AL zkGhok=T&YV+?L#rSK>?=;g@Z$0)P+=qBQ@|H@dJVO*$4S8hC0u-qVphK9X%4vK!q4Iqlpw8r9~w^ z@G%xr2cfoRNU_}26t&EPUZ>39OKA?N*0piq_DBWFn5#f z5<$(^+uS_s*_hz@lFBr>qSRM(QSjyI{-cd)TrXSS&Uzag`W0nU^}a8xhoYq8xJyI# z>E9T3+!-sPFr>xyMm6_w%FNttL%oHy@z#(MtP*I`7Flan@$)pdnNEqvlA}zg+>|LT z%O7d4iLq13n*YkR2DFmcKMGeJymZLfa^qLwfLNhJGYlXdXD@bEhhjTZ z&t;TIW{K>Mc zMVQt_EDaO26?ie6ndsLqYnB_U!gGuyp?f<8tzWu$>D^1Sjcr#-b@J-zv#K0EeH3cC zYAAAIBWi|_cau%pNf@6j8N08SEexuxO6+ayjNqLiub#1nA*(TjvXeLEEfovV)N1o& zvQ4envJvpqTG#|Fa-tk{7>1bmp zne_CoJx9qWsk%~CXEJ3*l>j|{g>?}NP(MoJl-x=B1qVW>BS|dNKc`WV?Vn$s8*>Or zDWe|02UdZ!q{;Il?v)5O+4FupZx_8ehYQ0shtkq)iL<4W@p{r+i2-2p@;Br^boYIexjX?=M^+=%(?bZ1z2AYIa(S zPEV#0l}7fW*-q&MP$b5Fj`%~kY2+}l;fVB1#;uju5MYODegl4uULkfOt|Nx#pZCS1 z*`e~2$=fR?F6Xg?N&y>Lq26{Yl&WR&$Af(H;)?6Na#x%I2%Dyj$4Ol?Z&3EkePm{M}S7!Du;Cy%%O4}{YnNB{r; literal 0 HcmV?d00001 diff --git a/programs/other/t_edit/info/default.syn b/programs/other/t_edit/info/default.syn new file mode 100644 index 0000000000000000000000000000000000000000..b391ed74c756ad1c99ebecad5f9d0594a6810906 GIT binary patch literal 51240 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 literal 0 HcmV?d00001 diff --git a/programs/other/t_edit/info/voc_eng_rus.syn b/programs/other/t_edit/info/voc_eng_rus.syn new file mode 100644 index 0000000000000000000000000000000000000000..0a8c50d337cdf6c7ce2eeaf74f21b76dca59332f GIT binary patch literal 246590 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 aD1U02_~d__(|V?dJ)w8dc<)nLy81s8_Ey~h literal 0 HcmV?d00001 diff --git a/programs/other/t_edit/info/win_const.syn b/programs/other/t_edit/info/win_const.syn new file mode 100644 index 0000000000000000000000000000000000000000..d66f53e5a5ad690f03a31a0a27ace32f6f3d35ee GIT binary patch literal 117251 zcmdVD4UlBlbspB1#e68G# zgG;4*ExcP^s#kREfSILoqrV7zdDyL0#8#HthMA@1A%+y6g@2#G--($-7Zq zUkl*FrS71&8hzj&hVV|U6$O_{zh&XgVWm;8oE6agXX3p%T&eXdt2NK#mtIMenK1IMVUc(Ke3TFS;6>VuY&9fJ4zP+^!$3hpgj$GMpvpk8lPYgj&- z^;UdNS?WsGxo1Fq(9&_w)Q4x}xs=L`StnJG80xgFGB-=@bAg1+e@x-sa<$%G8ua_^ zh_W>BrFy?vR;YN>GsC4eh&JcnJ@<{Fu3h6TbyYLzRfc-CwoKzHHPplFOPz8bLKEo} zZil7r;SZgAXs&(17qjqAe0??WCMp!G^V_(EbJ6M=+(L!)@{$MX;m;f zva)0rr`2Ai3ynbUEc|ET));HGBai%m=^3J4?Y28rNPQt$`v*te!W;EobaX9zwcP9V zyY<$JV2xQgR9>xHDfc9qwD49Nwp(qbTW+k@io|U*ZECyLgqmEdb)%fK%uvsGRlqyT z;{LJBcsO>J^@ura;k|mZqcoX`nO}!vM-I!?su`u?MwUv?e!K0NVYSwP zp(i}Cox95O(jjgB0l(g18>xub=9(M;N2SS zhv98exN|B?L-ZiL9BO8Wwm3}0ykQ3LMTQCRMTV)j+FnfsvwYxKss;Vy;F?}U(+r%Ao=zQ`)`%Ft;$>#J z-L2Hf`CdC0w+s#S74n8Wyj<_btw_g=fj7z$+VZ|i+FBkYN4?&{!q;xJSBQTsQG+76 zF}(9asZ~qM!$!MOE*O|Bi-vl$EGu7r&cf})hzq+P)mD4CT*1m6HGhb_q26l4X69bu zSLXk3-wOfu9ChsG%YCT6=p=E}sTUVuhCSXg-cet}Ty1wH_H9$q&_y(XvG(gdF}h}$ z=|BWvT;+FQ_^pN4TCxpEk6AcOJUG$BmZtDEC>VM6dFlk0XP<$0>&v?Jz`%Q$9i$~A zTE_H`gLiASmfTX?R5IOGYYkZ$Sn3<9sE6x!oxu2Eg5PS9o*`ec$|x|r4_a^nk_TRL zyjge;J2)wTl#1ATc}*d`zNzaQz54n_eA~gpO3bXn_t&c})mPpx23ZN-sCTdhT`t3I zIP4&HS}#^L1czep4$GB(eXX|C?iL!t|JrJ?0A49~NRu(2v;X_yKWv1+z&oAwcK0lT z+m%Qsd1jUnlO^wQt2#^7{r(q2>P!6=DQ)++f}bh%K7vRqtFW+R{g5dGYXd_*~)=@W=n1fOi95?v|T1|LXYOE3Gofv6jJkNJV=9_@}BLirr ze!Q^^U#nMY-T)#?I789>@|a}?mPUC)PU-qjEWEK&8LDDgEMk}y6=Fpb^C#X3P9Y)W zI!Rkl2Umt29h~w$BEsu>$H8HPX}EXr^>V9UZZyu;;>%M8-tD&6<6;@YStK2o`9DK= z6RCYd!dnQ3Q#zk!`Ypp7Fs$3~6Tp|<@0Tm9>7Qpm&A_q$(7^jxoyt{_I4SIEqcOB_ zi8#YKX%K@dhled3!l;Lnju}?qUWzB&yl7_=!-eo6dUP*@x7x#QyWNLdwa9q;pF%i{ zFhqP~4#t0(f!CVtxF6!Z?=e%GdG7+g7L8<7LinI{wguB*R!D;1AGh#czpjYHmOk&` z!!y-}>_?>+k<37DmwHl=!Ej~Z+K{}ZZs5%}R=}WbIUg-`_KWsqM??xov_FU3%vT1^ z^3{uLB!1AqjXyGOp9Jt`yIO8Yras{fb#gG)8^$tcDnFueaK&oGWT7rTR;JyN(2Wph_t*{odDQFm78-fGk$*g2a^hANnpw zT{X48>EUF#Q&?M^fZUNoIBJKr23%6Th#SiH%&>N@gE$SA;h06R{N0Xs`0|h&35x@( zWnmQm%O1{NV8HWaHuIg~T@^{b=ihV8U~VAsP8Y(j_IXEHmmII3^we8z`0}92GJMYd zvhU%@q+3;WylJW`H2mf7aZT;^8)TpqcDd)vQ11cQs0k^I|H@OR;TMC?PkparMuZYK zfB4^ba8-KQ&v`f;m(?XSHfBMTZe`%wey<^3R~sM{2a`!U%Y%-rRaa_5K4Ven7Y+NJ z;XPO!LNW|JL)3Bjq}+nNPX}p)e-;j&mtpC3+Of$BQU;E&ZGVI4FAWeSF0$QH_&Lok z$itVLeUdMM6Awpb5r=oy>b*LGE5)K|cn3TZKL%Cz&%?1E&{j)0W#Qqv*QSD>DV+6Q0m^^v;T`O6X;P8M`@hb8@NjV@<3~MQ+&5?8 z{nbHJ-11ogMn`&OK-<4Lp4}IQ8QqZL83%9GXg0;WB?G4eCGqtj14mZeikRn;G80LU zbq#gALj$N-w@vNV5Ea%$*$p!)Mu?>lUcouae8-Px-oh7~+E7Z1Ol`n*a^RU+Wb%Q! zF*9-^c$c?JPCB}{S%vdWzP-7nMr*=UXny=^K z3QeF}RPh3$j^lr@2q>2;%K6s!IXD>T!w(!kt@7UQckpiQkpbltD#g*Q5#ilYhi8qdZW3U=p8^cTs3r)=G zG4kbk*XH6|-rcIbPrP1l&+FX1~oqWvD?E}r3xaD#~@I9pc z1m2gCtO-M@3m17b4D;bX%DfXCJ7HRCQZhN8e%iyKt>v?Pzv|&I2g)&LA;0UNcsS-= zT{y{CD*fvezFrs4y_Y`lADE^>AJH)goIVh9^{68qyf;{q!c-m(M|QbFPW7BFOuzDQ zoZx_OK}rMj@ILbV5x7AsVo|nvcm*3AC`*L$QXc%Ld3dz7^Kht;YT^ED9^N9?Sdsf; z9v+?M^Kke`kzDH=m;Epgr$k)LmHhalgD=&vmB>=c`^~{^%0j1(Ju$W*{csCv^5wpY{q*p2wF(3*2Bp6_IF8e<3@O!V(81{sOmxKM zazsA^w+(1h!Gip3gbW;^60_MZbktfEdh99Dn*T#WT>Q&HWd+HS_C zc!qk9>=g7#xiLfvWS$6R;OkwSSfM~zd$6*aI|L5CQo{*W6d=I?-`H@?!f7t$(luYs z!kM39yn|C>14XigK)!>Uv%TakYQYzT*rU;DvtpAE$7_bIyp*JTIP35{d_J7gUx#_E z&WHEV`53bKaDD;2=#-0t)9@5`h#!ayTv|KQxysaQ!kM)hIP7wqG3?ii?Rduw@(a5) zRJn-?SW4Z%^SatMlRh}={VuYFq!3IBHxsE)wA?EkbpscBG7A@bG7A@blHiDbRw1&D zSPm z=Z|?f!X&8CB#`fB;X;0F=`$X_S}U*3&*Pac`c)5?2=jx#?%_=YoCZZkiF?T#9v-!j z9Q?a~z;z^opE!>Z@k7!h_j@?jX?d6i9^OahwtHvc&!6*fBy7vW^tZBbsW*Saz*m+| zpLyW49A+RcF`L{PiO5Pm~*@m@pjmoWGEHI6!>y?ktR*51kT;;B<`xGulIQrG$l92{%S z%zNj4ebY`p$c(mlj-_62(Y_OY2n45wD~%zo;CV+aJiG^A)ZF{$zVPscdIp(D$g@Bk zA3m%(lED|Ax`E^WgBVX1UL1Q%N&m?|X4Dco5~ZIW7-CL0ho{rO=X|o%Q}~%2Q2LdH zYf?VwAqO9HQG0^L_<@wx{HGlF{qrdQO%6OpJ_jD_n;dwoZ*t%ddQRs*a|0W0ikpJWShaC8i&!hY|^YB===g7?I#f0GWVnT2_#!U|IiwVK$ z#f0GWVnT3wF(Ej;m=K&^ObAXdCIqp5%n^b!iwVJ*#f0F@VnT2x#{9g@oLNi=&MYPb zXBHEJGm8m9jP;yhim{#pkFlNukFlNukI8QiJSM*m-X3t8$Ph+HET4T2-fnEH6r2Gi zMQLRQ)KwNr3LmzYhfQQx=ew7!4z_Tln8L3GqX1sLm`OPgM_Gd!9Fw_DX2(0H(kYTB z9Ca$X<=2S(58XfJd!|=LISXtL(AfTJyV%8Ose5>o^OSnMvDzNUN9!H+CNk^u-KUv` zSU8GY;mn}y;h%%Y!!{W>r6wcBFf2|(2;s1rmxM}*Iq(=eSvc~RP+z(|gwG(qjB*H9 zY@TxA#q4C@a&%$_UQE{vZU!EkM+NZM%H$=IWrk;IY-P%U$5y5scvQW+shu(tRqylg zsCu7=N7eg0JgVO3;qh?|M-|0WhLtviI5V3wzhvMD5R+=+DUJtQ{q~@nL1&n0X5gK? zl_8Hhg>iFfXGhghCwMOHEWA}iwR@`$C?&o@p|)b)1$9afhP+d;D#>}l8y;@LQ$@k-;8D|&9okDo<{UrpbDny^vKWxX#~lyHiTbKU zy!5C4glj6n#ir7`4DUSzzvx6p^bLR0Q^(Ol)z-sN?;wFdiroD-o;n5yDHB3Y?N{gE zP#*CBo@uJ1F7^(=v8f#*>5HTI*^$Zo_TxWjI+Edaq`-8mv2(_6&cln-cuJ)Q{=<~I zeEz!hQ~-C;0O3H4YbuV@o)ylX{1*Xr&e_d$#N00r{>hYgMf&?A8TeW)){A)8P5?*I z7mC6Zl{+NP{*MeCVKo}4IhOqwOMfcmT~Vn2*RpV=i{Us|G5P;9fJ^cPmcH|cQf5rZ zh9Z5@`RYcM3`Z&p=^Hlx;T}s}RbHc1>Nt3UNP)kDW)3k+} z3b>+90^==Q$BOB9P^Z%PV)6{=Tk5DP6g_X?MuFkORlwyUhK@SJ!5|v$kqlKgN(~71Ds)aAZkfcWnnYMqh@MuXdpbJ>cMv45CYcW6QyD_RChrkBUtI*K|$*X90khC`LYj!^IKDq5%$0 z$34W!F$0e}ez`!6t6T_qNE{Eiw3`eP#^=N54{|Li1!eyQ?aOvbnpFVife}F#mEe< z;d{_ru=KNLIjC20Vy7ZiFf5gR#ls6uGx-+!55#+wjE8zl z3J3gcPn{}JVb2GXCUVoy?*?$HN$6jh|KUCVk?k4WeB5ovy<2r(^-HR)*_k+3Nf& zj`~7NS-rYS)o>IdY@51@IGs6GM(>GL2xS3YRhez*dehX^p$mSp*&NwES?W0Wr)sZ- zi}$Y(C-}#3+)UJ#7rtLj9Gvg&saFu06oMIs`jCnub>kHq17_k0KMXYgv(#(nP$3$J z0+h^fCRQk;s_=80poA1B-9@8_9_lM%}#tgh# z6)Py&o@th&g;@P-EnKQ6?eGk*;)I^=_(=$lrX?HtA^iPv$kf6YxEmaY(TDY>P^H+m z)ly%mBdaJ?5-A(tdJ#V@b#o4ULwt#aqXddre}-OS;m~3&+yoLmxBp8<#2#+1mX~zi zOQPOb!oj8`TmdkX=M%Khf3$FHpM_gV%o7%V7KeT`BWvO48I=_gz}fZfxy=9I;VAZ6 z5h~1q0>g2UZM{dKujswE^gaux(wgv&R;2NG_acxI>xO@pO4buX*>M|Vl zI*_a@T1=K11iw^8x-6Uu|G*)=)W#d&upJb+Qy5OgY816#-T zFh_lnTck0nDCMrZ!O}3(KC9dE*^XS~(rGY*F@oi$t5|K|G)A!B^3Oi_PBpxPx`#(| zr5$`BO+Yck1vCMN9Ld~RuU89Cxcq&u2^cQjnojNYyf30SKz$L#0XTJ}Y}0sV2(DEe zpuUJE09@7tzaMs_YK>1j5-xk?!QVpieYLnI!P z!cAd99d(qypj+9OPzovPFf!C}2MgWkD7QERmqR@UPPH@YRkNW4QOujuW0Zt``9oarXooOZ5uhifZkxf31rzV3FYpZGII6Re?NDpIRk zikK7ijDw3i?JRXg49rnS_11D%r?9~c-R*$OW^0Yeh`OEuoPtR7tMtz@L$%H%DE-~S zDfyBVHp&Y{lXN_sIbZLVW0^kzbzQ95Q>U$v#EPeGwpsB#Xfu@=zbjL0;?VD?pREbT zxsK%d!44)Gf#RXHO{FV=q2a|#CLJ6uW_e@odxm3<3c+#I(a>@aSCj~MO$2bHR*QHG z?{9Qacv1FA25`>r6rKURS%%wKy3@f<28Np(c(EXeGb9Vgh8xRBh9Qt`9?|>Vh7`*neIPQP#;Uq0$Q0P_$E@s7i*PmsH1T#ck3<}+w zfr~+*P6jRpg)U{_Vo>On3|zb^<;xkk7!>*+JX{sD`4<6P;p_bVA94N8;vzk9#={Y` zkz-C9S-3>~XDz&jv)p7FMrINHX%xUa2sg!M9pGQL@MR9Au}CG@YPx+b}GO%%Tl+7r2Dq;r-K`}akUU<|6t*@7CD(kG_6h4RJl(Kc?U-X zR6*QPN1b2nge1;=N3LR+D6yLE1&$dumKk9c@UOLSSZ%7-TKE87G0nJoxUR7b$CYCB zKJ0hTV&Ml1rwlDzmMz|c6vDB+k>W5G?#-V(9# z;fm~33-8sa_y}&{jq_q8vd;&^6d`#7r_2d;NVB=D8`Q@8ti0p0Z+)siQQt5}x<#9x zdxoqZ$xRfDs!oYL;d$38G24-5(=QAW{n_wtLuGL-cEvNJ)p?e>Zb&^dv;)=XJWE}b z_mehNr!_n?#@k7c3;#?U|{QMhzXkC~o9;eTBYu7PWpCd>Pvr4%wt9sV#{`OFekyj^AL zI4X$fi+C3$HI}HK9X6Cn-WJ|m4BlM~jw8~`f)(k9skPiim4sg1d=dXYno96N3!587 zkdoo#xl$wpn~rReQ9HmPi8Yw-o2v{MEwARYBETqiuY`fwYSmj{6ph%eJIg+f)=))vlC8z1{D1 zEAqza_l#OHa8z51XAhT>6FgU2IC7a`F!BpAL!~~Jx`Uojz3lmv`Vhudged=M)4*8@{On@dIroGxa@lm;0k+|8M4%khHRgcQW+gwnP2bViisESUTwk0EGEqR zp0V(_b(MCcg^P;M^4?fph#3plGGpOdW}1uj3@Y>&UhKl7Z~teTN^niz2XIaA1aQqc zqzoM1C?PjIgs;d$6~G7BX-Q%hz%|EbEL_vfK;8{p6d9)p5Iz)pB}1LzB6-KVq7y^v z2EHJ5t-R}0p4SAL5e;~^a4qi^uH{`LF99qLrQ3qUeq$q%k9%;hj zpJk@LR4Yd-xf`^HSCD2ZIXD99Fv%@}=nu<`?AA3@JY1d2O#QxyL|VAU4z|n?b?LAb zaUa43^I;Y)9JZQ)ONXrjc(g(S;p{)lyXLSJJwb4~OI#oPA~**=hs)6#X1{K2vE>$R zRod&E6dd3F6ElFDTjfwW1y_)}X65~~aO2NeZA$@=3>+CZxQ8R=ZO(<$%+0TS=-}r% zNUDl#8Mi7EbvdP54G@=Zb^#|2*w?y7825Z7D9sTPm&IYlHy( z-e|X0=ms%KnfNLBfVMb*bxhTV(^w33JlM* zD)(0l=StxU`W7w*hO@jca9R-8;E~2&FK@`~6Eg&7eIy@VB>14uiw*J{P=W*%rYiNq z*I2j>9tdDFn?Su3;J%Q4lod}M{t%gQ^u6WXcy`sy0Ny^U=e-a1Ta68o zyk!RPc!#GlL)Qw(A@)+~(`NMm9CZd!WI0#D(=V@jxFRB7D!pOhbhJfTZxT)I08YH% z5VPo#BKR`4^9USp&RIL}|gEMfcT9AdigYR^A zGhL=obQApy+#HmiZ=(Cg!uhr`7*;JolUX=d{Z^bC4dLe6V_baED7+`Z!tKGxp~R1c z)5NYx4s5hH1CNcT=^F>fz3E81vbV=l&VuW@?9UnaO0}N-`^;}MaMH#r5vh0Z^)gkC z6LV-nII^zT+?!z_{56E*k~=7PGe-(EyoFO*pGggmCz6No?#fa*d~?oc3&(vFbWJjp zWLzoi5^Yq&JJOcg2s&zlHpC2$ua+g(K6CD<6TI4%mJiRnh09M^W;B$E9|K3kA4S6y zcK~MKa(+<;j+?KAS``_14?`O_$qjs^hCF<_TE}*8;SU2xf&li2%XA-4A(H=K;18pU zEUuSW6HmwnaJgSxzcckFQotnVRX|>PJOe4V-nJ z0&OLd>dvZ4)e`k}@<-w_2be$bWe;K_YvIe~dSuN=JHf&wM~i#F!h3@rR;4P3Wn)JQ zX5n$xsb{*Ub@x2~%74s40649AV8(Hn|MTy8IE@gteeoy0mVw8yc;R38QO68X2OKZR z=Yzlf%@j_FuM#(Z4q3=h8|+yHoQsocfZAJR^P6r;^e?UB55?mnOD zE5v{7$2?qPke|5U!|9-4oOY@79$dV_yhGk8ms!C7(-ck(m8!jd>9nVA;ikm}ulo5j zvv6BtGoP!!{9pzy_qvCJY(B|g6h4Dn+icHhb~ZnSnp_O0L0t{#sUvR@71a>b0Phxb+4Z2;=~jp}xp51u%mHNK(ap)5C`Ps;o9bxZ>1p z2nQ$Xq;T*K3!>gsn31+4VL>beZ{xBV*v#$qh+#$Co1SUX$p8)a4!#yOPEEIX>U8Ug zX^Twt}cje;Mxo= z=ABaOAFk8sNSJ)J*oN4^+v`KR<;8R-k6zLLh#8!b=QMA{xH>p_(iO+BL%5PU#z@IJ zHx+PF1+qua2m#;=)Q=<^lE#TLMT$DmeNRobaOzO^bSTfp{nQ5?!`d)P3pq4z3*56yC2lYY1=Gm*IUW@rMd&$Gu4ED_``rzP7^D2Z>8Ac(=#lf9;@D7Jvh?jA_5!@Im`dGHsMJ3ZP+v@?ZfI@_ zM7PQberDuZFDS7BXi)3$p}oRDq} zD8$DB0sK<9OEA=%*n3h|tyqf4!pT_#Ck+}QtSZg*evGX$pt;3^f(cuH(>Er(6)&{#phuQokR$meey{lxPzc8DjDi z9mII3Ij7rh4DYIx^H(e!kz{4fEv6251Et8MrRo1lsS{kP{(cr& ze8fB4qEL2%E4@_u>I__QOO2skYc!B%QAe>)p}3}nBc;|pLBn1A&%syW|0#>LifvO- zC>-VVq@Kh}Ep>(~qO2iY5u`G3s^%oJ^4BmYQn)mzrQh>#m3{p*G@PL>Mn7pJI>;kQ z;kfq{8@Wi8-S5M?Zs5r1!tuQNx#Ho(U;aS=mnyVbLWa7kniD-?;B>}KC1VDTGj0vC z#YBm>aLom*H;{4=z^V9?ZBgM51Mk&wv{YD@N*_mBzl9H4XQhlpexreFi{M)7lsQV} z?+ZRz_#*Mub@dHl-0$n=g7QI24#*j1_&#$PY({k*CvoW9 zGDYSU&QS-a@R|w^D^*pF!!}hD4C0Y6O(nQ0>Yu{h$VLsJ0IrERW#BgI7||dpyai)O z{1?DAb)`eNqId(rH&FSjp^4oZnc2W@PfnN2?8>6TThJO)%3hBk2`&2E?ra zJ!0UTGbnbWgR5+@pYhD7R_!l)xM+hpJ`L}!_Mn5CMrsuyJ<>K+mACXSJu|A@A7aQb zqh!UvQKO5(h=}&%b;bXv@(EFQaGYz1Z4qBe;dDI|POKs0t$2m{I~h31Ow^_G=a6V; znF00Ipc&`pRt8S_Zc*x|aQHB#j)bn_UZKDIW)>c21$n8Ekd!)SUB%Y4pU;6u+>*bZ zfm4}}=uYw59toKNobUTCY;Pk2XHOSiuu_y2`pfh1Vi72n{+BFV%Cz`Fq&ue_iEfXN z)cF*St+^;-zng)JGV_ZN63YxF8A>wqL$F~}xR`qP(Rp}GX8v9dJR&pSH3*pz^gyY! zF$<52*xoEWE@J;r1}=)&Pp*Z$LkJ3Gm;dl{v+!jchbn&Ldy!qk!$gHLaX3~{T0DTu zp41F=7{XO)0}@cDL%Q%qz|bx}I~u^r>)I0vA_wruR@HZxh0}pM9AXv2cL7}E0}SAb z2#*^kVus->IFT4xi$m(zQR1*>w8CZpUq-ni-vtF90=U2j6A0j%G{69^Imr{i;jk~@ zIQ=?+YYzT|aOg2aw2G@I;Uxi_M2v1dNMAkw$-w!r73OwPsUm*vQ9oBz=M?^S1}>gc z`27@arZv=LL~Zx6NwvIl;5oKR+E!b*!h=?NC8e&hYX9dH&KYP;ct3@ImKnf>UN4nS z$~VS^l~e;a zb(R&&hk;{rpkUmI7)5v#r03z%Ara3Ec>rS;uxYD@qim}rUm-JWq!<#B|9k4HgX~ts z&@;N(YN(t04itT9;JBF$VVIgcR0d92`zm*og*zdL3cK$}nD2&hHN4WSDoPZ1W`q^e z4xNWDA_U-l5g}kWET)LGm_K=D^g>W^XFx^bEMf##DO9810q1o!b}entkpzd?rg;N3 zmEfq|+H0Z02DX8*e<8fxGB1c6rt@&P$SLY1EZ-rV?`e$VE!s!uVR)g9BI`!jVK!u4z7tHrA=kJit9rxb(5;uM!~3Fw3dK_!;#)l zI6N(!F8D3(kMu7Nu0MrO0!-$QvhrGgwOrRZjg8DSvBkpe^KpNn;h%U1e3eRor7bG_ zWZ`f}is!P3hJ`DynP7OQsX7hrs4I3ft}(<+cOdIhizj%Wsy|VINBMFJ3s(h)ZO;t4 zXY0LH)xZ*U+>pu}XPkVO3T9fkyYC5eHd;x-!WXzEmzbfHT3Y)gO=GFAmV2Ul|7~mT zgF4{s0(7I7_w)Ua8W97WN|efjMh)*xmLrKy@EEgO>LVQAsewBV2_-P5|{%+uB+^^D41AkD0xxX9u``xe7 zPXkA#4c$Kj|DX=cGJ}qMXfZhIN$CC=W;79Srf1=(dm1k*Z(nZV%KMmTdZ4LvZ-k0@ z3-9;ir8^ug1DE}08QzzWV(17&e;VpS2qUFn;Yw4?_6!p7>!^j3QYrdmsZ(gU2oip8 z;R{?Vhhf4Fi0ssmPX1?0T?$gWhYdWM8RDSy)51{$yQ%LP?Ui4SdVNiCwmW4;DkejG z?->&U9l40vN$_Y;m`K}yre~-gueK}}QSU*>G#pv#=a8bVDe3Ouum>D}v7ZL6;+x1= zxOTO1aOGm=;7aliu3XFdPYgy!Icu`;7SQ|aHWJfxKhF#Tq$7=jnSKMO4+*>$8_qH+d9|j(;;vP`2@D}p6 z750g3DiX4F{|xnq2MhI#&WHp9hC0sms=7UeKdkB~+YbvLG}UE-U;`s3 zwNtJt>;g|6aD`nE!WDKw2v;oKAzZO^hj7Kx9l{k$cL-N3-634Dbcb-o(rw_1TS<(R zSvcM3r`bRoc*jeq@WH~%3V9()4vsTO0%88Mg|Ad~)78Oa*>=HeEgYwpgD;CeTDbB6 zl51+Wt|%0Rmpbb03X&t`8j=S7NHMqBzZiHo`(^QO7Oq(+|6i})yNfN9@mux+-Yhdh zK!P9mo{zeY>}ppVOMS6*wY%85+6!6}{b-ocmE{2;3zx!D?v)OXtdBAdP`R&*ep)z{ zVJw1#-&=UA+(8^he!{|0_h|u5&>JjK7)DE7#@PlKW)KAr8&v$+zz4;E>|ZQgqf_tk z0=$-`QT&^szFrK-{>8x0Wxp)`&A@dE5>yNvu}$4S3rDp{6&~>Q@(|-+*T&=luQZT1 zs(Hpx$7WbZpWswO1UJPs`tt6^!}7G{mBq6 zTw#Gx`HY1(dmpit^u?hf-cxuyPYA@aa4`nz;38ear-O@hvv5s@Z@@d?8h#uzfNS_+ zxRLkbgB6DF|I7`Oha>J}{*?Fsucq+jbIWzyB$S8Bd}o#DK@e0DXiBdCqm;VI!=CBr zoL?<<1Fsj{s+~TU!s&3pvb0EfIBX8wO)B{@19-P4cf5mhb$QwNba3&$Mbq3Aj+4E* z#RmI5B+rP!toQr{KdODWx^Po@+QB)Ws&nuqDPC=Px71O%F^6pMRTfT}TEQRZKW5={ zW+{4KN*3PitwhmI-YxIOFvkrv^K6)JveYU6IeH4v!ui|*?pW{PG;k4R`rg6g9pWh% zI1ch*Nl^G}19)|g|~C?c~rkm8+3SYxbjAI4zTnws`T|dJ|b9m>hHp zrit|Je9q0cW|;T{?b2D?!yCc=w<$B{P}ohui|a_hHN05(GU7+Fe1TEJJI*&@jjY72 zRBD!o(+eW)w14t&-5oU^uBu3uGJ`|lR1OD8%0(=F-S<11+Fp8CI=vA#RXW~QDxLU? zLC+8z=Ut09vETcqT6kd*iBjotPaW2N74^uf;`(H$JGi*uSoi{wXG{;>kfOPky4J&( zfy;`_z)4`l3Ap7u5;s!t!2oa<|7WQayxrt;Fj3u<3#Ux}{I`T~MZ7nKLr=>5q;RhRXA_(zFYsx#U>nN zD6H1Yjkd7$a2*M_yo19~rPK-DX?Nm%@8F$59~aNBNNYkaym$xt035Uxrw%s9B1&6d_EOj+A5O#86OZyz1@`apij-jt)6^ntVt_hKl zm|E%#kKgLRLT%xN`>GkqH*nP;9eBmTaC!UbcxSlew)mrur*L>XQ7)C^cd_Nk@y_si zj~|FAGzX_5WWq+P6)=NBxHEm0`>UnSmyIZvj}Wdf;VoRetk<#@z?Zsh_?qJ(Vhdj& zlMX%(uKW!lKyT)Di2u@1=SmD@Lr8)Uz$KUG=ln1+^;T^i7ut~Q_;=5J2&hwi>$$(r zeBt4PT5qFOnfdG7uMRH6$mqGRc;1~36P6k`Jsez6c{6Znsqt|1Ih;kb@k3$h$aUzZ zshCTEtJMYP6MZXW*K}!>)X=AR|iMba}{o z2Nf+4n?S605DmoGruI?fN?vMwM|!xxlcf%wp;}uVoEEY89xiMuZgQgp0Z|H4>Y6Q| z>-UWwF8xx3DLr+SuPddl@{L+}zY+^f&Itist1R{kJ!N<&xY+AIaKXWG1y*4&#k2C0 z0i1&1WEu({Ny7}RYdfMURmdwYT@#9HOv^Lfmnbvqw?U98Rg;V zNyWGloNCO8_oJ3df5Q$FDjbzN{b&G#2H~HlaLVY)9hczC@=u$Nr20vKOFH$}QaFOt z{0J7GK|5JBI`ps^B5T z!p$%dywj1o2F!W5F*>D7UQ@UUVqgi3Bwz;A0mn7GLMcX19XmwiH;e^332whFEJm=o!O^j(1JP^3p%` znm~1z@%LYJ%#e8<&Cesj?0L8Qxj64$+@(w|SMBLX9?+Qh%5PH?GbUh>qDrin$kM$Z@j`;8Q?N&EPH3t#J+ z5_U`SO-RJMgDcjX5U$XwAzU#~7QQNPhPlfuT#4pkLQ~h2cu+6BFuu7zy*b@~V=~S4bNbJWRsuVo8H_WB@=vob!WN_uBMyg{q0F|bGkdeHQvL!0y@dT6s^0nHyJ0>{cEGW zQF3&1f3&$X-kX34B83O{C&}LE`si>nabN8o-=6R*ws%IG6MV*7u8wy`rI+X>XdwUb zXlq0~Cey>+@!|GSGP#j*Iz_V#dB-VrpkcN2{Egl59zB_IrvV>McHXj7OD}Wx`ks9G z=HvjKv3a~X-I^StImy>C7<=fHo$0|*f*v}=kYZrL7ueX|KRQIqw?@~;$@l8-u#wP~_F-I?4P9~^Fi(#{y{9!@utt(`l;(W;7hW^kKAGG)#M8+pQ=D$^jgza#Xzb=>3({_z zb?o?hW4to~&q-0UJ~zDz!QoLmL=PS%+bn=b?s+^H_Qt)XFIn+8FmOl*3GAp4|J?M( z=KknSlCE2mgPp145FNkCk7A~pE}VN+@aSZ3YrK7s9FDh--lUG)JiZD+-~q5L9*N{$ znI_lA+o8$fQK9mMj28{^1ZpxF7=NHuDB)K--pWK-49r7acdSd1qgz-d$r~Oms zpLxbjd476w0B!Tu4Vur}c#JwC*}|7Q<2%VdsipDGTL;^2obt%9Dms{MjrXrlcBfF; z7*7Z*tuyGnUFhCD=r(+hX}v$X&I`@S1VRLL@j9fzEEt=#pd4bZParD4b~xf+NAzow zvWSI+wb^tNiyzMpOO#gz&%?FpsXRvI&Pz4!alGrkVAiwJ=O&|_>9wTvYew59SP5x_ zS$$$MLE*E8FYzEkdtQALoW6?hxA&o{_weM)(B7o8xAC><{nCpEdsALDdG+1Ia&dFC zGdbKJokWjOH$&arNlxEyR_D#quaNn066$z!axmFNpHB~yBhp{5(n?Tz1xCj7zJu|; zUw10i`?~EW4f8hU)b6Qd<-(Qf<%@smLjT#H!BX(oC))>h1pu)k)C*%s9$smTnVUxt z#~fPSa`Age)qaD8gjU<9FI@S|rOTfzeBaAo`vx0J5q>5&HnI4T)E!Q4=5h1<9*?jY zo^h&fZ;UVr_DG0IU&3;_hb4n8BIrIeaSxx#7P&c1_9oZ&#;+#VSc#3@3P`K7H^QKv zjBSNgkTmFcFI-d)-y$n3srHAa@HAg@@bb>lb;vo1_S6_tEYGZDkD<&rj}NAY8A~sH z3H}J{VT5<#X%--we0vZmqpf)z%T6Jto3RX2awJAHbMehh7lnK2j#>8efk+`-`l!hoT`l0o|9Lqey%0R^#tl$=2SrrK+AZ_0`7Pcn`% z#B3{(#lbD7L4bzAfZq-6u#Ts_*k^9FPw^bpJ@n1IJ0f;zdrg$dyPcqf_cj-m6c zJ%Yu0dNAI7%TvL-Cc$9%G2rf;BuBRRJ-Jk}{R-|Z* z!Tm0ca=zp)$UXIz9gfj1^y~q)2FZyZxtDrjf>mW7Vhy#3RR-d}J=#u=wnsPYq}sw> zW1FWKX2#BV>*#GZfo_a2+ji}MK=qB1EiC;cnBg1niu6gaTeiuV?^x_CVnN~e?i$w_DjsJQ*xqth>46_rt2dyzpf*mLjh&kY*gKFR45@jYwI1dKbTY<0 zRnqy>*Nl}Bq3~tlTzuQjMYC7KE*W+pX(?EI%q45`9moqCit{`1?#0JHp46VWcqO?x z**=_NQQU=&dTsRT4(VOq+fUylEeg|v)bTw}Tt5F~a{lQjk|!=-`k8xXUO2sZ45Jn5 zVR{%?QCLWBjNY8UY~p2|&C|`qzu9ccVLo83F_L~v+>Vk6w=lVAOCF93y9%(qzQqfh znUTpRPjZ^H58Usim>af=>TLP++G%%M%+?;SQkbr9z{Nnb z?j#y;4QhtQY!h>Ib9+3~C~D7S*DQCYNkvTZgknW+T74>c-fu9-^s#$LUINi&&?*=V zuwLs8{k2ayJ@C2l_7r&tlsImj~IrQv<;Qg4KtY z`5Sv9c$r|4=RB3;nk#$*ERd`d&ma#VqzB_$wD9M>!5Zi{r%g zr1}8+%N))M-bTwgzi$lleZCi7ob~KcyQkhshe5FB>#HRhY8`;TLi>G~546)5B|m=u z{dn=Z>;Cl%7oYt2m3vEB&e1}(&1Gq3t@C#zau;0C&(08NKAq@8PTUcm>oZQ$sg7=s<*8Dr| zB;ffvP5#;26Zj3MLB{ugM@Lrng)`_-^M~gz5U>QyJ06|1Mm9Nbu!6M2|<{f<30G& zu&>2toxMs%8r(NC1AoTT2?ieHz8H6Bblm+_j+Tse?;K8S7sAY;XbbNpX*?!abFgx6 z?~LFd$7dShTd66Tah_p@9ZumGNKk_1RPqJ4>hrVM9Ggc^(hM-m#bom~z9t7ab_v7- zdzm2iYzmw-e>vKlz+-RxdZl@OdB`nhymu=3obidw?uwI@CW_P22@k%4JEQ~mf8q(i z!D<{Eq)Zm)TNJ|e`@)u^G`l=Z-#{%qu0DMiws%pyLREp#hBX$@jgEcdcXiX zNOsYgw_&@}1_=*1>j8Tw=k4DmQ{KED{-EIf0R}rV2=1-Pc5-lVOnpcl2{X%#rr3^* zPn~-QDKNvOa_elZS~6p|xxMo?R1+EU*f}01ukDPko#g++5xfHxXJbd^jaQGhj^K`< zP|O%=%Q0Y>?_MZB_0*-u-%0m*ae;*eSu`)Zi5++#IM~Z$+mAW8wSROCKj=>$i%DyE zJ0L5QC7V2gPO#_;9;bKjMH$k+NU=0#8~&d|#5$-$S#^LbD9g>`8*l)!FNya!2uE&? zx2C%skIabMCItFJX-$P zrOQ_yE6x1}7jUh?ieT0w;9;?tkL@K}lb8zbH{asc*y zFGCmZP{b_R9ifZf+9nNkYjgme^uB!XX#V>z>|>J7fBh0R&*Uz`5(uq~?bNk-%omRK z52pKe2TT6;JMT+QJcyAcwkB{x%<}W7zC-1c^6t*w?|{y0&wKaP<*KLaFcvze zKOpn4rI9ND^cM#k3#uhAyvxD9{XwbO*sPr`BF z6A|8~4K>UaTIju3b)1}-AsYnSr8xb}lUb)8d(e+C$)`J45ym!4x{L77Jc((;s|o97 z$~WQkkHaSK ze=w6yT*MTdhaj8a>NXb16A+f1Ka(kn{2zo@F!A9kI`PA~FoBAKk4@O~(*sO{6F>D% z-jK(qjT4h%%?u~;jYfOj77HgU5_2%LBFVxU zA<|7reuYlbcCA@@E(o{T=p%x7lh?`lx|dKufU}_>O5^07=XbGhqZq+G2=!C;#3=L; zV<+Q$!%2I&HSCo8t4)+ft(`+n*He@?VM1xx>0F0dW+^21ypnDTZyl0>aL=jI=bi8( z_k?|-WFUK)4W${%F6`!_2@n(fbCAp#BI2++!G~&$k#2Vr7SfE!>-`aQDoC-7Jvc>nKbKy5a3|i}>;TP(TS{{=DwzRUr zn(PK7EdiOd$#!t`%M} zr1?=eLa=)(Vb>K+0LKuy0{7s;TH|i@b^kMiH9HX#b^ZVGpWqZx|z0h~? z^ibwEI>kiSDO3zQ55JRB7S`JS^fs1wT2|8@Kn#4*2F?$Y-DgcGD%+-IRQs>+1^#k@3rom`A8zk83&>5ZAd7}?2)^-QfhY?vjvR0Q+2#9qFl17~_ zVZ^S{HoM6Y-15+9@0vcboxixWz6))~mgRNQpk{{VwVnR5OW`u${(sc=d2Qnt1=pr| zeS_>&{$si>yoNt0BBE;d*8Reh1Y5zL~U- zBmKeAPrKS9ayh0D3hkmf7E1g3ttstfu&JiJFt(J^EH_Hi+DQ=p+?>35l-yH$`iXmJ z>6&3?{+pM=RJrLP`^znz+eZn9K{&LZAbzxeeMD{nERUQNhP@hj**F-1bsIq&{K`$C ze0tLmcrWLe2)+IAHO!69{1f?on6)6@?OsId?^(U{sSA1Cn9mPtdf9RxCzChFJGZc@ zNB_aS6!a1@@NZz`g8Vu9D`&FZgPugv>pcl!a=NYXrS_C~#p;2Cpmv>Jt=9t+$zP(VlEF>!5dc_o1?^n)W`Sdfi7rVD)b!qU;OW1-Q zj&MlJ_-CDHUz1(zQC5kr{~Z%_= zWM3sP^x{=?6b0HpbMfg@7oWapQYCxOK6B;5r#j~^pa0YaWU48oHmz=s3IK^NIRGv5I z#WNhx`!O4YC%=&OlY8f!k1UZdc`gDK#09)3okCeb2!WG1X}Dc1VK(S8>;9j63HFRZ zn1@4QdF&POGSjjg@>*&+v5LE(hQNn$TVXPqqpakt_VMkYbc5Mwz8)25c)WKhHxAJ4kT#CN&zh8HpO9^=14Y9G}U*c(AUX}3V9M&7MA z+pq;9jO4+@acb-w%{e3MMA<^1kp1{*L~<3&#%)ZiTVRuYUcPigSoH#~yYUg9$Jsv_KPk3G%$tiobV=;m z(3!_uM{iQTGj>=9lRNm}Dj;#Gm!RBNK#xuq!A3|=QPU!4=NP53m;y8iK2XvT_Bpgp zc`E^5ry~l}7S&U>P9b3z6VlbKun%}M#G3vWuJkYb?3MCU7oU9kWYRBVjicWa{^H&u z3N#;FAp$;Z)q6)|*h#Sn9h3Zqtrm+b`UD%ZnV~DAq z=r1*?RrEUtS(_K0c?LPbCM6X;iv^m?vlIhgbQ1*F?WsL8gwf?(MqMmQvBG`;Eu@>ilr6-(vYA2f2IJ@$Nu@NHf8CbZ>RovH2`i2#G5K*m z2qFTf2$H$r*fDj2uq#L%8m3|fAG5%Ko1{lPNJqwbmyJEPPK0(xsP2Q48904MYR8;8 z7x@l{WEXjkcSQhOtud;@rLVWsI^13B8iQlqGc9??q{tjTb_2Lcwmu3Nj^OGp)FNS@ z(9t9>1%ZB8sAJt|(9A}r1{Nk9 z+mPeip>Es6(HiV2sS<~CbkIT_c{S(9PdA~%{s89c-DsyjP(~L~Dk)>{M5UxphZ7UW zMI#ekuZsif?>4<+HS$i_OH~0S%ifKGNt^s`(Mfr8Q+y#cl`^!rl1iU-uP)Lqr;-n1I`VA|OOXKlvzr)~8XdtWuu19?j;6Ji=syP-+=v;E*mI zT{A=tyT!!*^9ghnl#khTP)%2qNCo3aV}3of4Xytcc|F#0gv-WM1;NRaKIh}5mZB?) z%8J;WO-(f^JUGyeVEPr>(P@5*ag^ys-MtAs>^bb(El1*t(ZtVjmfyGZIGT6|Y3z zzBiHqi{JSpNC>g1-P#*%PZJD}>7J>v;VJeJxYnJK^(wlziA$>c{dxsbp8kRxTpw9{ zWZ4mNw~bFqUn~+l>?>b?7evR$;ojNM+ha|r5&*Xky5G4MP@@eF=}pXL&UK;FTEXtb z4#y#%;lOAx_AS)p>GP?z{^bi7lJL~p%bRzoa2k*}cTA^jpnDGR)Zts$sqkSN{49Dn zJ*7xUED2CA`zTUDyH|cOda>ZW*bDic(WB2{u0B>Gk+!9$VSFPhTgrlHTl`q*01f~u z=0O2VXe7pQ7iGW7KFV9+$7bl!Fh7Rq6WM=wvD-Hy+`K=UFV@Yu*EW(;`m3;7@jgEO zjn9;JI$hR!mkvro73IQ%)=;$Aq=~_g4;?ctc!c|p#(>Wt;h__pK*lLt zJmyD~5U_uIIJt9gj0CTkWO@$@R4NZzHD8QP7-(D)Jyo_LAE=j>kc@pI$=P~)+S!;TUI zRwR_^qsD0mvj|F%qDt7y!RmmNVHcRoXZoly5*H@$B~#P_vABdc5;W5}lM-tLz1YNP zDV9OLRO`!TnedKSHW;T{*RUXO!VE*$--K5uNLLAhX9X>I0e&<%HhCuD2W4fB4v+SW z2IfWNT_O`^fd@bt-qU?*;cM{sBcT*|HIbpnO%%P2gI$=e-gw)E-wj1)*%w5$W%i1+ zUeLdrJ0tip-@^HEyz-LeJs-tgxxd5seHV#y9}Q(Ox!(vOrQG#T?;C zwkbNf&kI$-n7l~jGj7Fvntqm;m^6<&mOyY<*uUVyhzDjADpBD7WRK$^ul}K6b48t* z@=BDKFjvrpo%8um*$G14(p@?Z1Z8N|3(wU9Qagprx)q7yyqkhXGJQr$0Lz#{(m2^= zLZvTFHNkxLUnZv;NiKFqJR+u#VFBg#5!ntvvlf7Sy0jw}n4(rP<9mU=qqXcU?%&O0 zDy_{cow=hT|E(r(hc|;p-Pv-S`RLRRI2^r7y0M@wyt31*wR_OFk&XnJ#5vNpNh#75 zA(_Ay;_h2CLF{qrB8_RwYLbZJ)GYFO$uWk6E&Rac12ATwgC;m#hGjN&hMica&5$*X zvh_Kc5UmpXNG5sJcR5+ZE^=tK2Gr^yEkXx`=G`7{4#b^qe5DXNq39Lvh?%oipo?jS z&F|cKsUU|wk-w9GI$yVRDwlTVP&lA`J6kR?=rOPV$aunxb(=IS^2S&XZVjMVm#tLg zOj#-O4i2 zvKJ^|?(8kne{A$2#=A?lgE>-wV~E7DUF0xP;59Z#K9OyXoQquIk=pG8tcTysrurxfTIG2AC6M#WXOL7Qd*_DF@Y z$W*3gZ+(Y@-w)iET9aJ*%4AhZG!BBQ?=~ob>`P1_2mxjx`Evv=a?KU-A$DiZ8adKa z@KVv{4%`{{>f{EOHhyOeV%1M?Y=K;wtLSL!5FNUJ2a*UK3tom1skBxD8QHAu^4@2% z4beEtHG_(Jl_pMlf!s-+N9OWU{@gPcuJPyedNlsEX)m?I^=;<&^0|7`T<0b=bu%cr z0fB=J8k%0DdgkVJF3H^1uu5c(%%!dT(Y7O(N}yX%*v6))!eMF4avxa}pG|b-2nM@V zYdYpUNDfx4e$)Y2sm!3+{SCJIsh%<{K|z?cm(^2lLuNI8I)=$V%j ZYnk}gmpmB?o(K +; 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 the 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 Alexey Teplov aka ''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 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. +;***************************************************************************** +; This macros based on source code: +; - Alexey Teplov / Алексей Теплов +; Mario79, Mario - Marat Zakiyanov / Марат Закиянов +; Diamondz - Evgeny Grechnikov / Евгений Гречников +;------------------------ +; DESCRIPTION +; Macro load_library +; Logick of work. +; A first time we must to check system path, where I belive find a system library. System path is "/sys/lib/". +; If I cannot found my library, i must to check second way. Second way is current dirrectory. +; If we cannot load library, we must show the error message: +; "I'm sorry,the programm cannot found system library box_lib.obj." +; "The find was make on 2 ways: /sys/lib/ and current dirrectory." +; +; +;--------------------------------------------------------------------- +; Macro sys_load_library +; A first time we must to check own path in current dirrectory the program, where I belive find a system library. +; If I cannot found my library, i must to check second way. Second way is system path a "/sys/lib/". +; If we cannot load library, we must show the error message: +; "I'm sorry,the programm cannot found system library box_lib.obj." +; "The find was make on 2 ways: /sys/lib/ and current dirrectory." +; +;--------------------------------------------------------------------- +; How can I use it? +;--------------------------------------------------------------------- +;-Example using single load library +;-universal load library/librarys +;load_library library_name__, cur_dir_path__, library_path__, system_path__, \ +;err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__ +;-if return code =-1 then exit, else normally work +; cmp eax,-1 +; jz exit +;- Well, if you get +; +;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +;DATA данные +;Всегда соблюдать последовательность в имени. +;system_path__ db '/sys/lib/' +;library_name__ db 'box_lib.obj',0 +; Если есть желание разъединить, то нужно использовать следующию конструкцию +;system_path__ db '/sys/lib/box_lib.obj',0 +;... любая последовательность других команд и определений. +;library_name__ db 'box_lib.obj',0 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;err_message_found_lib__ db 'Sorry I cannot found library box_lib.obj',0 +;head_f_i__: +;head_f_l__ db 'System error',0 +;err_message_import__ db 'Error on load import library box_lib.obj',0 + +;myimport: +; +;edit_box_draw dd aEdit_box_draw +;edit_box_key dd aEdit_box_key +;edit_box_mouse dd aEdit_box_mouse +;version_ed dd aVersion_ed +; +;check_box_draw dd aCheck_box_draw +;check_box_mouse dd aCheck_box_mouse +;version_ch dd aVersion_ch +; +;option_box_draw dd aOption_box_draw +;option_box_mouse dd aOption_box_mouse +;version_op dd aVersion_op + +; dd 0 +; dd 0 +; +;aEdit_box_draw db 'edit_box',0 +;aEdit_box_key db 'edit_box_key',0 +;aEdit_box_mouse db 'edit_box_mouse',0 +;aVersion_ed db 'version_ed',0 + +;aCheck_box_draw db 'check_box_draw',0 +;aCheck_box_mouse db 'check_box_mouse',0 +;aVersion_ch db 'version_ch',0 + +;aOption_box_draw db 'option_box_draw',0 +;aOption_box_mouse db 'option_box_mouse',0 +;aVersion_op db 'version_op',0 + +;--------------------------------------------------------------------- +macro @use_library +{ + +local __sc +local lp +local lp1 +local correction +;local end_tr +local exit_ +;/equ +err_message1 equ dword [esp+8] +head1 equ dword [esp+4] + + +__sc.frame equ dword [__sc+0] +__sc.grab equ dword [__sc+4] +__sc.grab_button equ dword [__sc+8] +__sc.grab_button_text equ dword [__sc+12] +__sc.grab_text equ dword [__sc+16] +__sc.work equ dword [__sc+20] +__sc.work_button equ dword [__sc+24] +__sc.work_button_text equ dword [__sc+28] +__sc.work_text equ dword [__sc+32] +__sc.work_graph equ dword [__sc+36] + +;;;;;;;;;;;CALC WIDTH & HIGHT WINDOW & CENTER MONITOR POSITION;;;;;;;;;; +show_err_: +;check memory + push dword [arrea_xx] + pop eax + test eax,eax + jnz @f + + mcall 68,11 + mcall 68,12,4096 + push eax + pop dword [arrea_xx] + + push head1 + pop dword[eax] + + push 0x0 + pop dword[eax+4] + +@@: + mov eax,48 ;get system color + mov ebx,3 + mov ecx,__sc + mov edx,sizeof.system_colors + mcall +;----------------------------------- + xor eax,eax + mov esi,err_message1 + mov ecx,30 +align 4 +lp: add ecx,7 + lodsb + test eax,eax + jnz lp + + push dword [arrea_xx] + pop ebp + +align 4 +@@: add ebp,4 + mov eax,dword [ebp] + + test eax,eax + jnz @b + + push err_message1 + pop dword[ebp] + + mov dword [ebp+4],eax + + mcall 48,5 ;get system window + cmp word[on_x],cx + jae @f; не нужно обновлять + + sub eax,ecx + shl eax,15 + mov ax,cx + mov dword [on_x],eax + +@@: + add word [on_y],12 + sub bx,word [on_y] + shl ebx,15 + mov bx,word [on_y] + mov dword [on_y],ebx + + ret + + +;;;;;;;;;;;DRAW WINDOW;;;;;;;;;;;;;; +align 4 +start__: + mcall 40,0x5 ;set mask on events rewraw window and get id button. +.red_win: +;draw_window: + mcall 12,1 + + xor eax,eax + mov ebp,dword [arrea_xx] ; set point + mov ebx,dword [on_x] + mov ecx,dword [on_y] + mov edx,__sc.work + or edx,0x33000000 + mov esi,__sc.grab_text + xor edi,edi + mov edi,dword [ebp] ;head1 + mcall + + mov ebx,(10*65536+25-12) + add ebp,4 ;inc index + +@@: + mov eax,4 + add bx,12 + mov ecx,__sc.grab_text + or ecx,0x90000000 + mov edx,dword [ebp] ;err_message1 + mcall + + add ebp,4 ;inc index + + mov eax,dword [ebp] + test eax,eax + jnz @b + + mcall 12,2 +align 4 + +.still: ;main loop + mcall 10 ;wait event + dec eax + jz .red_win + sub eax,2 + jnz .still ;go to main loop +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.button: + mcall 17 ;get id button + test ah,ah ;if in ah 0, then go to still + jz .still + mcall -1 + ret + +align 4 +__sc system_colors +on_x dd 0x0 +on_y dd 0x0000004E +arrea_xx dd 0x0 +rb 0x50 +end_tr: + +;--------------------------------------------------------------------- +@library_name equ dword [esp+12] +@cur_dir_path equ dword [esp+8] +@library_path equ dword [esp+4] + +align 4 +@copy_path: + mov ebx,@library_name + mov esi,@cur_dir_path + mov edi,@library_path + + xor eax,eax + cld +.lp1: + lodsb + stosb + test eax,eax + jnz .lp1 + mov esi,edi + + std +.lp2: + lodsb + cmp al,'/' + jnz .lp2 + mov edi,esi + mov esi,ebx + add edi,2 + + + cld +.lp3: + lodsb + stosb + test eax,eax + jnz .lp3 +;--------------------------------------------------------------------- + ret +} + + + +macro sys_load_library library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__ +{ +local end_steep +local exit +;--------------------------------------------------------------------- +; loading Box_Lib library + + mcall 68,19,system_path__ ; load of sys directory + test eax,eax + jnz end_steep + + copy_path library_name__, cur_dir_path__, library_path__ ;the macros making way /current pach a program/+ name system library + + mcall 68,19,library_path__ ; load of alternative + test eax,eax + jnz end_steep + show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window + jmp exit + + +align 4 +end_steep: + + import_boxlib myimport, err_message_import__, head_f_i__ ;import +exit: + test eax,eax + jz @f + + mcall 51,1,start__,end_tr ; создаем новый поток по шаблону + or eax,-1 +@@: + +;--------------------------------------------------------------------- +} + + +macro load_library library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__ +{ +local end_steep +local exit +;--------------------------------------------------------------------- +; loading Box_Lib library + + copy_path library_name__, cur_dir_path__, library_path__ ;the macros making way /current pach a program/+ name system library + + mcall 68,19,library_path__ ; load of alternative + test eax,eax + jnz end_steep + + mcall 68,19,system_path__ ; load of sys directory + test eax,eax + jnz end_steep + + show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window + jmp exit + +align 4 +end_steep: + + import_boxlib myimport, err_message_import__, head_f_i__ ;import +exit: + test eax,eax + jz @f + + mcall 51,1,start__,end_tr ; создаем новый поток по шаблону + or eax,-1 +@@: + +;--------------------------------------------------------------------- +} +macro sys_load_libraries _start,_end +{ +local exit_lp2 +local lp2 +local lp +local end_steep +local next +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +library_name__ equ [ebp] +cur_dir_path__ equ [ebp+4] +library_path__ equ [ebp+8] +system_path__ equ [ebp+12] +err_message_found_lib__ equ [ebp+16] +head_f_l__ equ [ebp+20] +my_import equ [ebp+24] +err_message_import__ equ [ebp+28] +head_f_i__ equ [ebp+32] +adr_load_lib equ dword [ebp+36] +status_lib equ dword [ebp+40] + + mov ebp,_start + mov ecx,((_end-_start)/ll_struc_size) + +align 4 +lp: push ecx + mcall 68,19,system_path__ ; load of sys directory + test eax,eax + jnz end_steep + + copy_path library_name__, cur_dir_path__, library_path__ ;the macros making way /current pach a program/+ name system library + + mcall 68,19,library_path__ ; load of alternative + test eax,eax + jnz end_steep + + or status_lib,0x1 ; status of code - enable error - not found library + + show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window + jmp next + +align 4 +end_steep: + mov adr_load_lib,eax ;save adr lib in memory + import_boxlib my_import, err_message_import__, head_f_i__ ;import + + test eax,eax + jz next + + or status_lib,0x2 ; status of code - enable error - import error + +next: + pop ecx + add ebp,ll_struc_size + dec ecx + jnz lp + +;---------------------------------- + mov ebp,_start + mov ecx,((_end-_start)/ll_struc_size) + +align 4 +lp2: + mov eax,status_lib + test eax,eax + jz @f + + mcall 51,1,start__,end_tr ; создаем новый поток по шаблону + or eax,-1 + jmp exit_lp2 + +@@: + add ebp,ll_struc_size + dec ecx + jnz lp2 +exit_lp2: +} + +macro load_libraries _start,_end +{ +local lp2 +local exit_lp2 +local lp +local end_steep +local next +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +library_name__ equ [ebp] +cur_dir_path__ equ [ebp+4] +library_path__ equ [ebp+8] +system_path__ equ [ebp+12] +err_message_found_lib__ equ [ebp+16] +head_f_l__ equ [ebp+20] +my_import equ [ebp+24] +err_message_import__ equ [ebp+28] +head_f_i__ equ [ebp+32] +adr_load_lib equ dword [ebp+36] +status_lib equ dword [ebp+40] + + mov ebp,_start + mov ecx,((_end-_start)/ll_struc_size) + +align 4 +lp: push ecx + + copy_path library_name__, cur_dir_path__, library_path__ ;the macros making way /current pach a program/+ name system library + + mcall 68,19,library_path__ ; load of alternative + test eax,eax + jnz end_steep + + mcall 68,19,system_path__ ; load of sys directory + test eax,eax + jnz end_steep + + or status_lib,0x1 ; status of code - enable error - not found library + + show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window + jmp next + +align 4 +end_steep: + mov adr_load_lib,eax ;save adr lib in memory + + import_boxlib my_import, err_message_import__, head_f_i__ ;import + + test eax,eax + jz next + + or status_lib,0x2 ; status of code - enable error - import error + +next: + pop ecx + add ebp,ll_struc_size + dec ecx + jnz lp + +;----------------------------------------------- + mov ebp,_start + mov ecx,((_end-_start)/ll_struc_size) + +align 4 +lp2: + mov eax,status_lib + test eax,eax + jz @f + + mcall 51,1,start__,end_tr ; создаем новый поток по шаблону + or eax,-1 + jmp exit_lp2 + +@@: + add ebp,ll_struc_size + dec ecx + jnz lp2 +exit_lp2: + +} + + +macro copy_path lib_name,dir_path,lib_path +{ + pushad ;save all registers + push dword lib_name + push dword dir_path + push dword lib_path + + call @copy_path + + add esp,12 + popad ;restore all registers +} + +macro show_error_window err_message, head +{ pushad ;save all registers + push dword err_message + push dword head + + call show_err_ + + add esp,8 + popad ;restore all registers + or eax,-1 ;увы +} + + +macro import_boxlib myimport, err_message_import__, head_f_i__ +{ +local import_loop +local import_find +local lp +local import_find_next +local import_found +local import_done +local exit +local e.exit +local import_not_found +; initialize import + + mov edx, eax + mov esi,myimport +import_loop: + lodsd + test eax, eax + jz import_done + push edx +import_find: + mov ebx, [ds:edx] + test ebx, ebx + jz import_not_found + push eax +lp: + mov cl, [ds:eax] + cmp cl, [ds:ebx] + jnz import_find_next + test cl, cl + jz import_found + inc eax + inc ebx + jmp lp +import_find_next: + pop eax + add edx, 8 + jmp import_find +import_found: + pop eax + mov eax, [ds:edx+4] + mov [esi-4], eax + pop edx + jmp import_loop +import_not_found: + add esp,4 + show_error_window err_message_import__, head_f_i__ ;show error message /create window + jmp e.exit +import_done: + xor eax,eax +e.exit: +;--------------------------------------------------------------------- +} +ll_struc_size = 44;($-library_name__) ; constant size of struct +struc l_libs library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, my_import, err_message_import__, head_f_i__; struct for loading libraries +{ +.library_name__ dd library_name__ ; имя загружаемой библиотеки +.cur_dir_path__ dd cur_dir_path__ ; указатель на буфер в котором содержиться путь от куда была запущена программа + +.library_path__ dd library_path__ ; указатель на буфер в котором будет софоримирован путь к библиотеки, если нужно вычислить путь до либы с места запуска программы, обычно нужно, в случаях, если либа расположена в той же папке +.complete_path dd system_path__ ; путь который четко содержит путь + +.err_message_found_lib__ dd err_message_found_lib__ +.head_f_l__ dd head_f_l__ +.my_import dd my_import +.err_message_import__ dd err_message_import__ +.head_f_i__ dd head_f_i__ + +.adr_load_lib dd 0x0 +.status_lib dd 0x0 ;status of load library +; +} diff --git a/programs/other/t_edit/msgbox.obj b/programs/other/t_edit/msgbox.obj new file mode 100644 index 0000000000000000000000000000000000000000..b1db8e31fbd1395f2ebd119b5ad9f9a98c1e0f47 GIT binary patch literal 3040 zcmeH}VQ5=b6oBu`%ZpjJm}omYWx;}TvuI_t1m@aGs&kexFipEPP1(XMc~GO3wl9N? zjlJ$w?c0MHL}WkeSeN~jS=fHOEQskc(sng!LDW%ys6~7w1$AR?KVsrJ_pw9qm;UdC z-1D7t&%O8DbI*G(`vrl$wrlG?b0cF8hHYGUUViI{!rAV=bu-om=-XiHdq6a>P_V0a zvYe?x)9>xf-M*~fZ~UY4lUQFK?fOiIes9{d#+pi*J7Hp0gf0_xGIs45pkmNOk=?=B z@Sldg&WKL2GIucoKGgsktSE#A^EaWVz&)FDvf&Sb$IP-1C=4VUo*p#(32mGwGANoa0%Sq`yKqmZ{oR#N9xlkhi(N?Ue1Xwu7NVn{|#=an{MljC#3yX2F;E%cT{(!W}@lzf_FnQ>m^{cUZrf z$hov!jS(0D@7?_HNtY2giu>rdWNk&li_g?CoT!x~6nfso$cw>ff5h;h>x*B(Bo8j3 z7fk43tS^5+|FxQQe;{Fngu1(W4;sAcw1UHW9Kziz6!ZXIdlru(XWYzkfLSQ))mzk; zm?CL;=P#=!)}`S`zgJX9j9YE>B<}`Gw-dPqHmPAve<;8d8v8c2w<26iI)n-SKDEQ%RJr+ zHwyWZl~{5m=DorKRH;_->VB;K!?C{p$f4^__OE<|%@&A>KX(~?f{g>4ioscl7X_$M zKFbZy=Yx4Tg6sVM_8cVf1twxD*V}pq)-$l4f&Y{N_;^B_hWE}7@SV8^at^+wH$eK< zyoTO>BQ`J+Kcd7L&`5l6Xiz~KjVp3;Xh0c!XK0kQ!hZPraj_nv7*U*PjL0DRkZ6+V zBGF}{&xz)Vz9zaw^gGdAqQelJ9bbZIl;{}IDWbDP9}}G?xOmv(`C3>Ie zEYUfl^F&vO7KnZ#x + +Оглавление + + + + + +

TextEditor версия от 29.12.2009

+

О программе

+

Программа для работы с текстовыми файлами. + Лицензия свободная.

+

+

Внешний вид программы, с открытым текстовым файлом.

+

Обсуждение программы здесь: http://board.kolibrios.org/viewtopic.php?f=9&t=1222

+ +

Возможности

+
    +
  • Открытие (Ctrl+O)/Сохранение файла.
  • +
  • Редактирование: Повтор/Отмена действия (Ctrl+Z), Вырезать/Копировать (Ctrl+C)/Вставить (Ctrl+V), Поиск (Ctrl+F, F3).
  • +
  • Выделение цветом слов, заданных в файле синтаксиса. Вывод справки по ним, если она есть (нажатием F1 когда курсор на слове).
  • +
+ +

После создания программы TextEditor в Kolibri стало 2 программы для работы с текстом, + у каждой из них есть свои сильные и слабые стороны. + Проведу (не полное) сравнение программ TinyPad и TextEditor:

+ + + + + + + + + + + + +
ДействияTinyPadTextEditorКомментарий
Работа с несколькими документамиестьнетпока не планирую сделать
Поддержка кодировок KOI8M, OEMестьнетхотелось-бы сделать
Подсветка синтаксисаподсветка заранее зашита в программуподсветка берется из файлов, которые может указать пользователь. Также есть возможность получать справку по подсвечиваемым словам (если она есть в файлах подсветки, навести курсор на слово и нажать F1).
Многократная отмена/повтор действийнетесть
Ограничения на размер файловнетесть
+ +

Некоторые недоработки

+
    +
  • Если открыть большой файл, размер которого больше чем: + maxChars equ 100002 ;(...+2) + он откроется не весь, а первые maxChars-2 символов из файла + (о чем выдается сообщение).
  • +
  • При сохранении программа не спрашивает о замене существ. файла.
  • +
  • Срабатывали кнопки под меню, потому я их сдвинул влево.
  • +
+ +

О работе программы

+

Раздел для программистов (и интересующихся людей), в котором расказаны + некоторые идеи, на которых построена данная программа.

+ +

Для работы с текстом программа использует структуры:

+
struct symbol
+  c db ?	;  +0 символ
+  col db ?	;  +1 цвет
+  perv dd ? ;  +2
+  next dd ? ;  +6 указатели
+  tc dd ?	; +10 врем. создания
+  td dd ?	; +14 врем. удаления
+ends
+

Каждая из таких структур сохраняет один символ в переменной 'c'. Переменные + 'perv' и 'next' хранят индексы первого и следующего символов. Благодаря чему + текст создается в виде цепочки символов (двунаправленный список).

+

'tc' - время создания символа, при отмене действия текстовый редактор "знает" + какие символы отображать, а какие нет (хотя все символы "висят" в памяти).

+

'td' - время удаления символа, заполняется при удалении, при отмене действия + удаления символов, текст может быть восстановлен.

+

'col' - используется для цветовой разметки.

+ +

Теперь немного о функциях:

+

GetTexPervPos - переход на предыдущий символ в цепи (через указатель 'perv')

+

GetTexNextPos - переход на следующий символ в цепи (через указатель 'next')

+

SymbNotVis - определяет видимый ли указанный символ на экране (в зависимости + от значений 'tc' и 'td')

+

IteratNext - переход на следующий видимый символ в цепи. Использует для + работы функции GetTexNextPos и SymbNotVis.

+

IteratPerv - переход на предедущий видимый символ в цепи.

+ +

ItPoNextUc - найти следующую позицию указанного символа (edx-поз. начала + поиска, bl->код искомого символа)

+

GetPosByParam - берет позицию символа по координатам (esi->коорд. x, знак; + ecx->коорд. y, строка)

+

GoToPos - переставляет курсор в указанную позицию, если указанная позиция + находится вне экрана, то также переставляются скролинги (ecx->коорд. x, знак; edx->коорд. y, строка)

+ +

Формат файла подсветки *.syn

+ + + + + + + + + + + + + + + + +
ЭлементРазмер (байт)
Количество цветов текста
4
Количество подсвечиваемых слов
4
Цвета интерфейса
4*6
Цвета для текста
4*(кол. цв. текста)
Структуры со свойствами и описаниями слов
sizeof(TexColViv)*(кол. слов)
Разделительный символ, означающий начало описаний слов (всегда равен 0)
1 байт
Описания слов (строки текста с 0-ми в конце)
(длинна справочного текста + 1)
+

Замечания.

+
    +
  • Все слова должны быть расположены в порядке следования их ASCII кодов. + Возможно в будущих версиях формат файлов подсветки будет изменен.
  • +
+ +
+

Автор

+

Игорь А. (IgorA) - разработка программы.

+ +

Спасибо

+
    +
  • Евтихов Максим (Maxxxx32) - элемент EditBox.
  • +
  • Алексей Теплов (Lrz) - элемент EditBox, макрос load_library.
  • +
  • Mario79 - элемент скроллинг.
  • +
  • Diamond - за программу KlbrInWin, и помощь при написании программы.
  • +
  • Insolor - за тестирование программы на ошибки.
  • +
  • Leency и другим, кто помогал на форуме советами.
  • +
+ + + \ No newline at end of file diff --git a/programs/other/t_edit/strlen.inc b/programs/other/t_edit/strlen.inc new file mode 100644 index 0000000000..f7564b93ad --- /dev/null +++ b/programs/other/t_edit/strlen.inc @@ -0,0 +1,71 @@ +; strlen function +; +; Copyright (c) 2003 Thomas Mathys +; killer@vantage.ch +; +; 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 +; +;%ifndef _STRLEN_INC +;%define _STRLEN_INC + + +;******************************************************************** +; returns the length of an asciiz string +; input : esi = pointer to string +; output : eax = string length +; destroys : nothing +;******************************************************************** +strlen: + push ecx + push edi + pushfd + cld ; ! + mov ecx,-1 + mov edi,esi ; find terminating zero + xor al,al + repne scasb + mov eax,edi ; calculate string length + sub eax,esi + dec eax + popfd + pop edi + pop ecx + ret + + + +; linlen function +; +; Copyright (c) 2009 Igor Afanasiev + +linlen: + push ecx + push edi + pushfd + cld ; ! + mov ecx,eax + inc ecx + mov edi,esi ; find terminating zero + mov al,13 + repne scasb + mov eax,edi ; calculate string length + sub eax,esi + dec eax + popfd + pop edi + pop ecx + ret +;%endif + diff --git a/programs/other/t_edit/t_button.inc b/programs/other/t_edit/t_button.inc new file mode 100644 index 0000000000..bdf1890fbd --- /dev/null +++ b/programs/other/t_edit/t_button.inc @@ -0,0 +1,601 @@ +but_NewFile: + push eax ebx + call CanSave + cmp al,1 + jne @f + push thread + push msgbox_2 + call [mb_create] ;message: save changes in file? + ;mov eax,5 + ;mov ebx,50 + ;int 0x40 + push msgbox_2_funct + call [mb_setfunctions] + jmp .ret_f + @@: + call On_NewFile + .ret_f: + pop ebx eax + ret + +On_NewFile: + push eax + mov al,1 + call Clear + call draw_but_toolbar + call draw_main_win + pop eax + ret + +On_SaveAndNewFile: + call but_SaveFile + cmp byte[err_sav],0 + jne @f + call On_NewFile + @@: + ret + +but_OpenFile: + push eax + call CanSave + cmp al,1 + jne @f + push thread + push msgbox_5 + call [mb_create] ;message: save changes in file? + push msgbox_5_funct + call [mb_setfunctions] + jmp .ret_f + @@: + call On_OpenFile + .ret_f: + pop eax + ret + +On_OpenFile: + push eax ebx + mov eax,70 + mov [run_file_70.func_n], 0 + mov [run_file_70.param1], 0 + mov [run_file_70.param2], 0 + mov [run_file_70.param3], maxChars-2 ;sizeof.symbol + m2m [run_file_70.param4], [tex] + mov [run_file_70.rezerv], 0 + push dword[edit1.text] + pop dword[run_file_70.name] + mov ebx,run_file_70 + int 0x40 + + cmp eax,0 + je @f + cmp eax,6 + je @f + cmp ax,10 + jl .zifra_0_9 + mov al,'?' + sub ax,48 + .zifra_0_9: + add ax,48 + + mov byte[msgbox_4.err],al + push thread + push msgbox_4 + call [mb_create] ;message: Can-t open text file! + jmp .ret_f + @@: + mov [err_opn],1 + cmp ebx,-1 + je .ret_f + ;if open file + call OpenFile + call draw_but_toolbar + call draw_main_win + cmp ebx,maxChars-2 + jl .ret_f + push thread + push msgbox_1 + call [mb_create] + .ret_f: + pop ebx eax + ret + +but_SaveFile: + push eax ebx ecx edx + call CanSave + cmp al,0 + je .no_save + + mov ecx,maxChars + call mem_Alloc + push eax + + mov edx,[tex] + xor ecx,ecx + @@: + call IteratNext + cmp edx,[tex_1] + jle @f ;edx = [tex] or edx = [tex]+sizeof.symbol + mov bl,[edx] + mov byte[eax],bl + inc eax + inc ecx + jmp @b + @@: + + cmp ecx,0 + je @f + pop eax + mov [run_file_70.param4],eax + push eax + mov eax,70 + mov [run_file_70.func_n], 2 + mov [run_file_70.param1], 0 + mov [run_file_70.param2], 0 + mov [run_file_70.param3], ecx + mov [run_file_70.rezerv], 0 + push [edit1.text] + pop [run_file_70.name] + mov ebx,run_file_70 + int 0x40 + + mov [err_sav],al + + cmp eax,0 + je .no_msg +; cmp eax,6 +; je @f + cmp ax,10 + jl .zifra_0_9 + mov al,'?' + sub ax,48 + .zifra_0_9: + add ax,48 + + mov byte[msgbox_6.err],al + push thread + push msgbox_6 + call [mb_create] ;message: Can-t save text file! + jmp @f + .no_msg: + m2m [ls_tim],[ch_tim] + @@: + + pop ecx + call mem_Free + .no_save: + pop edx ecx ebx eax + ret + +but_FindText: + push eax ebx ecx edx edi + call GetPos + mov eax,[edit2.text] + mov bl,byte[eax] + @@: + call GetFindRezult + cmp bh,1 + je @f ; find + + call IteratNext + cmp edx,[tex_1] + jle @f + jmp @b + @@: + cmp bh,0 + je @f + call GetTexCoords + inc ebx ;move cursor right + mov [sel.x1],ebx + mov [sel.y1],eax + mov edx,eax + mov ecx,ebx + call GoToPos + mov edx,edi + call GetTexCoords + mov [sel.x0],ebx + mov [sel.y0],eax + call draw_main_win + jmp .end_find + @@: + push thread + push msgbox_7 + call [mb_create] ;message: Can not find text + .end_find: + pop edi edx ecx ebx eax + ret + +;input: +; eax - text need find +; bl - first symbol to find +; edx - first symbol pointer +;output: +; bh - rezult +; edx - last text position (if find sucess) +; edi - first symbol pointer +GetFindRezult: + push eax + mov bh,1 + mov edi,edx ;copy edx + @@: + cmp byte[edx],bl + jne .no_text + + inc eax ;*** get next symbol (in find text) *** + mov bl,byte[eax] + cmp bl,0 + je @f ;end of find text + + call IteratNext ;*** get next symbol (in editor text) *** + cmp edx,[tex_1] + jle @f ;end of editor text + + jmp @b + .no_text: + xor bh,bh + mov edx,edi ;restore edx + @@: + pop eax + mov bl,byte[eax] ;restore bl + ret + +but_OpenSyntax: + cmp byte[panel_id],TE_PANEL_SYNTAX + jne @f + push dword tree1 + call dword [tl_node_get_data] + pop dword [fn_col_option] + call InitColText + call CmColored + call draw_main_win + @@: + ret + +but_select_word: + push eax ebx ecx edx + + call GetPos + push edx + call ItPervColorTag + cmp edx,[tex_1] + jle @f + call GetTexCoords + mov [sel.x0],ebx + mov [sel.y0],eax + @@: + pop edx + call ItNextColorTag + cmp edx,[tex_1] + jle @f + call GetTexCoords + mov [sel.x1],ebx + mov [sel.y1],eax + @@: + pop edx ecx ebx eax + call draw_but_toolbar + call draw_main_win + jmp still + +but_cut: + call but_Copy + call SetUndo + push bx + mov bl,1 + call SelTextDel + pop bx + cmp al,1 + jne @f + call draw_but_toolbar + call draw_main_win + @@: + jmp still + +;output: +; al = 1 if copy text +but_Copy: + push ax + call IsSel + cmp al,0 + jne @f + pop ax + ret ;if not selected text + @@: + call SelNormalize + + push ebx ecx edx esi + mov esi,[seln.x1] + mov ecx,[seln.y1] + call GetPosByParam + mov ebx,edx + mov esi,[seln.x0] + mov ecx,[seln.y0] + call GetPosByParam + mov esi,ebx + + xor ecx,ecx + mov ebx,buf + ;mov edx,[tex] + @@: + cmp edx,[tex_1] ;end of file + jle @f + cmp edx,esi ;end of select + je @f + inc ecx + cmp ecx,BUF_SIZE ;owerflow bufer + je @f + + mov al,byte[edx] + mov byte[ebx],al + inc ebx + + call IteratNext + jmp @b + @@: + add ecx,buf + mov byte[ebx],0 + + cmp ecx,0 + je @f + call draw_but_toolbar + call draw_bufer + @@: + pop esi edx ecx ebx ax + ret + +but_paste: + push eax bx esi edi + mov esi,buf + call strlen + cmp eax,1 + jl @f + call SetUndo + mov esi,eax + mov bx,0x0101 + call SelTextDel + mov edi,buf + call TextAdd + call draw_but_toolbar + call draw_main_win + @@: + pop edi esi bx eax + jmp still + +but_find: + cmp byte[panel_id],TE_PANEL_NULL + je @f + mov byte[panel_id],TE_PANEL_NULL + mov word[wndMain.left],0 + jmp .e_if + @@: + mov byte[panel_id],TE_PANEL_FIND + mov word[wndMain.left],TE_PANEL_WIDTH + .e_if: + call EvSize + call draw_main_win + jmp still + +but_replace: + jmp still + +but_find_key_w: + jmp still + +but_sumb_upper: + push edi + mov [conv_table],EvUpper + call ConvertSelText + cmp edi,0 + je @f + call draw_main_win + @@: + pop edi + jmp still + +but_sumb_lover: + push edi + mov [conv_table],EvLover + call ConvertSelText + cmp edi,0 + je @f + call draw_main_win + @@: + pop edi + jmp still + +but_reverse: + push eax ebx + call IsSel + cmp al,0 + je @f + call SelNormalize + push esi ecx edx + mov esi,[seln.x0] + mov ecx,[seln.y0] + call GetPosByParam + mov eax,edx + mov esi,[seln.x1] + cmp esi,0 + je .beg_str + dec esi + .beg_str: + mov ecx,[seln.y1] + call GetPosByParam + ;call GetTexPervPos + mov ebx,edx + pop edx ecx esi + ;cmp eax,... + ;je @f + call Revers + @@: + pop ebx eax + call draw_main_win + jmp still + +but_undo: + mov eax,[tim_Undo] + cmp [ch_tim],eax + jbe still + inc [tim_Undo] + ;call CmColored + jmp red_win + +but_redo: + cmp [tim_Undo],1 + jb still + dec [tim_Undo] + ;call CmColored + jmp red_win + + +but_sumb_invis: + xor [invis],1 + jmp red_win + +but_k_words_show: + xor byte[mode_colored],1 + cmp byte[mode_colored],0 + je red_win + call CmColored + +; push eax ebx ecx esi edi +; mov eax,dword[cur_x] +; ColToIndexOffset eax,edx +; mov eax,4 +; mov ebx,50*65536+75 +; mov ecx,0x40ffffff +; mov edi,0x404040 +; mov esi,10 +; int 0x40 +; +; mov eax,47 +; mov ecx,250 +; mov esi,0xffff80 +; mov edx,50*65536+80 +; mov esi,FkPos;[keyW] +; @@: +; mov ebx,0x30001 +; cmp dx,300 +; jl .no_br +; mov dx,80 +; add edx,0x200000 +; .no_br: +; add dx,10 +; push ecx esi +; mov ecx,esi +; cmp dword[ecx],-1 +; jne .no_minus +; mov ebx,0x10000 +; mov ecx,1 +; .no_minus: +; mov esi,0xffff00 +; int 0x40 +; pop esi ecx +; add esi,4 +; loop @b +; pop edi esi ecx ebx eax + jmp red_win + +but_CtrlHome: + mov [cur_x],0 + mov [cur_y],0 + mov [wScr.position],0 + mov [hScr.position],0 + + call draw_but_toolbar + call draw_main_win + ret + +but_synt_show: + cmp byte[panel_id],TE_PANEL_NULL + je @f + mov byte[panel_id],TE_PANEL_NULL + mov word[wndMain.left],0 + jmp .e_if + @@: + mov byte[panel_id],TE_PANEL_SYNTAX + mov word[wndMain.left],TE_PANEL_WIDTH + .e_if: + call EvSize + call draw_main_win + jmp still + +sel_KeyUp: + cmp [dragk],1 + je @f + call SelStart + mov [dragk],1 + @@: + push dx + call CurMoveUp + cmp dl,8 + jne @f + call OnInitialUpdate + @@: + pop dx + call SelMove + call draw_main_win + ret + +sel_KeyDown: + cmp [dragk],1 + je @f + call SelStart + mov [dragk],1 + @@: + push dx + call CurMoveDown + cmp dl,8 + jne @f + call OnInitialUpdate + @@: + pop dx + call SelMove + call draw_main_win + ret + +sel_KeyLeft: + cmp [dragk],1 + je @f + call SelStart + @@: + push dx + call CurMoveLeft + call SelMove + cmp [dragk],1 + je @f + mov [dragk],1 + mov dl,8 + @@: + cmp dl,8 + jne @f + call OnInitialUpdate + call draw_main_win + jmp .end_f + @@: + call draw_cur_line + .end_f: + pop dx + ret + +sel_KeyRight: + cmp [dragk],1 + je @f + call SelStart + @@: + push dx + call CurMoveRight + call SelMove + cmp [dragk],1 + je @f + mov [dragk],1 + mov dl,8 + @@: + cmp dl,8 + jne @f + call OnInitialUpdate + call draw_main_win + jmp .end_f + @@: + call draw_cur_line + .end_f: + pop dx + ret \ No newline at end of file diff --git a/programs/other/t_edit/t_data.inc b/programs/other/t_edit/t_data.inc new file mode 100644 index 0000000000..ee02e109c8 --- /dev/null +++ b/programs/other/t_edit/t_data.inc @@ -0,0 +1,461 @@ +;--- данные программы ---------------------------------------------- +fn_col_option dd def_col_file +fn_syntax_dir db 'info/',0 +def_col_file db 'default.syn',0 + +system_dir0 db '/sys/lib/' +boxlib_name db 'box_lib.obj',0 + +system_dir1 db '/sys/lib/' +msgbox_name db 'msgbox.obj',0 + +fn_icon_tl_sys db 'tl_sys_16.bmp',0 +fn_icon_tl_nod db 'tl_nod_16.bmp',0 +;--------------------------------------------------------------------- +fileinfo: + dd 5 + dd 0 + dd 0 + dd 0 + dd file_info +string: + db 0 + dd file_name + +;plugin dd 0 + +;--------------------------------------------------------------------- +align 4 +myimport: +edit_box_draw dd aEdit_box_draw +edit_box_key dd aEdit_box_key +edit_box_mouse dd aEdit_box_mouse +version_ed dd aVersion_ed + +check_box_draw dd aCheck_box_draw +check_box_mouse dd aCheck_box_mouse +version_ch dd aVersion_ch + +option_box_draw dd aOption_box_draw +option_box_mouse dd aOption_box_mouse +version_op dd aVersion_op + +scrollbar_ver_draw dd aScrollbar_ver_draw +scrollbar_ver_mouse dd aScrollbar_ver_mouse +scrollbar_hor_draw dd aScrollbar_hor_draw +scrollbar_hor_mouse dd aScrollbar_hor_mouse +version_scrollbar dd aVersion_scrollbar + +dinamic_button_draw dd aDbutton_draw +dinamic_button_mouse dd aDbutton_mouse +version_dbutton dd aVersion_dbutton + +menu_bar_draw dd aMenu_bar_draw +menu_bar_mouse dd aMenu_bar_mouse +version_menu_bar dd aVersion_menu_bar + + tl_data_init dd sz_tl_data_init + tl_data_clear dd sz_tl_data_clear + tl_info_clear dd sz_tl_info_clear + tl_key dd sz_tl_key + tl_mouse dd sz_tl_mouse + tl_draw dd sz_tl_draw + tl_info_undo dd sz_tl_info_undo + tl_info_redo dd sz_tl_info_redo + tl_node_add dd sz_tl_node_add + tl_node_set_data dd sz_tl_node_set_data + tl_node_get_data dd sz_tl_node_get_data + tl_node_delete dd sz_tl_node_delete + tl_cur_beg dd sz_tl_cur_beg + tl_cur_next dd sz_tl_cur_next + tl_cur_perv dd sz_tl_cur_perv + tl_node_close_open dd sz_tl_node_close_open + tl_node_lev_inc dd sz_tl_node_lev_inc + tl_node_lev_dec dd sz_tl_node_lev_dec +dd 0,0 + +aEdit_box_draw db 'edit_box',0 +aEdit_box_key db 'edit_box_key',0 +aEdit_box_mouse db 'edit_box_mouse',0 +aVersion_ed db 'version_ed',0 + +aCheck_box_draw db 'check_box_draw',0 +aCheck_box_mouse db 'check_box_mouse',0 +aVersion_ch db 'version_ch',0 + +aOption_box_draw db 'option_box_draw',0 +aOption_box_mouse db 'option_box_mouse',0 +aVersion_op db 'version_op',0 + +aScrollbar_ver_draw db 'scrollbar_v_draw',0 +aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 +aScrollbar_hor_draw db 'scrollbar_h_draw',0 +aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 +aVersion_scrollbar db 'version_scrollbar',0 + +aDbutton_draw db 'dbutton_draw',0 +aDbutton_mouse db 'dbutton_mouse',0 +aVersion_dbutton db 'version_dbutton',0 + +aMenu_bar_draw db 'menu_bar_draw',0 +aMenu_bar_mouse db 'menu_bar_mouse',0 +aVersion_menu_bar db 'version_menu_bar',0 + + sz_tl_data_init db 'tl_data_init',0 + sz_tl_data_clear db 'tl_data_clear',0 + sz_tl_info_clear db 'tl_info_clear',0 + sz_tl_key db 'tl_key',0 + sz_tl_mouse db 'tl_mouse',0 + sz_tl_draw db 'tl_draw',0 + sz_tl_info_undo db 'tl_info_undo',0 + sz_tl_info_redo db 'tl_info_redo',0 + sz_tl_node_add db 'tl_node_add',0 + sz_tl_node_set_data db 'tl_node_set_data',0 + sz_tl_node_get_data db 'tl_node_get_data',0 + sz_tl_node_delete db 'tl_node_delete',0 + sz_tl_cur_beg db 'tl_cur_beg',0 + sz_tl_cur_next db 'tl_cur_next',0 + sz_tl_cur_perv db 'tl_cur_perv',0 + sz_tl_node_close_open db 'tl_node_close_open',0 + sz_tl_node_lev_inc db 'tl_node_lev_inc',0 + sz_tl_node_lev_dec db 'tl_node_lev_dec',0 +;-------------------------------------------------- +align 4 +msgbox_lib_import: + mb_create dd amb_create + mb_reinit dd amb_reinit + mb_setfunctions dd amb_setfunctions + dd 0,0 + amb_create db 'mb_create',0 + amb_reinit db 'mb_reinit',0 + amb_setfunctions db 'mb_setfunctions',0 +;--------------------------------------------------------------------- +align 4 +wScr: +.x: +.size_x dw 16 ;+0 +.start_x dw 50 ;+2 +.y: +.size_y dw 300 ;+4 +.start_y dw 50 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +.cur_area dd 30 ;+20 +.position dd 0 ;+24 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 +;--------------------------------------------------------------------- +align 4 +hScr: +.x: +.size_x dw 150 ;+0 +.start_x dw 0 ;+2 +.y: +.size_y dw 16 ;+4 +.start_y dw 50 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +.cur_area dd 30 ;+20 +.position dd 0 ;+24 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 +;--------------------------------------------------------------------- +align 4 +ws_dir_lbox: ;дочерний скроллинг для элемента ListBox +.x: +.size_x dw 16 ;+0 +.start_x dw 0 ;+2 +.y: +.size_y dw 30 ;+4 +.start_y dw 70 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +.cur_area dd 30 ;+20 +.position dd 0 ;+24 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84;--------------------------------------------------------------------- + +align 4 +menu_data_1: +.type: dd 0 ;+0 +.x: +.size_x dw 35 ;+4 +.start_x dw 5 ;+6 +.y: +.size_y dw 15 ;+8 +.start_y dw 5 ;+10 +.text_pointer: dd menu_text_area ;0 ;+12 +.pos_pointer: dd menu_text_area.1 ;0 ;+16 +.text_end dd menu_text_area.end ;0 ;+20 +.mouse_pos dd 0 ;+24 +.mouse_keys dd 0 ;+28 +.x1: +.size_x1 dw 70 ;+32 +.start_x1 dw 5 ;+34 +.y1: +.size_y1 dw 15 ;+36 +.start_y1 dw 20 ;+38 +.bckg_col dd 0xeeeeee ;+40 +.frnt_col dd 0xff ;+44 +.menu_col dd 0xffffff ;+48 +.select dd 0 ;+52 +.out_select dd 0 ;+56 +.buf_adress dd 0 ;+60 +.procinfo dd procinfo ;0 ;+64 +.click dd 0 ;+68 +.cursor dd 0 ;+72 +.cursor_old dd 0 ;+76 +.interval dd 16 ;+80 +.cursor_max dd 0 ;+84 +.extended_key dd 0 ;+88 +.menu_sel_col dd 0x00cc00 ;+92 +.bckg_text_col dd 0 ; +96 +.frnt_text_col dd 0xffffff ;+100 +.mouse_keys_old dd 0 ;+104 +.font_height dd 8 ;+108 +.cursor_out dd 0 ;+112 +.get_mouse_flag dd 0 ;+116 +;------------------------- + +TE_PANEL_NULL equ 0 +TE_PANEL_FIND equ 1 +TE_PANEL_SYNTAX equ 2 +TE_PANEL_WIDTH equ 150 ;ширина панели + +count_of_dir_list_files equ 15 + +el_focus dd 0 +mouse_dd dd 0 +tree1 tree_list 264,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ + 16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TE_PANEL_WIDTH-17,120, 0,0,0, el_focus,\ + ws_dir_lbox,0 + +;dir_list memory +tree_file_struct: + dd 1 + dd 0,0,count_of_dir_list_files + dd dir_mem + db 0 + dd file_name ;sys_path + +dir_mem rb 32+304*count_of_dir_list_files + + +menu_text_area: +db '” ©«',0 +.1: +db '‘®§¤ вм',0 +db 'ЋвЄалвм',0 +db '‘®еа ­Ёвм',0 +db '‚л室',0 +.end: +db 0 + +;-------- +msgbox_1: + dw 0 + db '‚­Ё¬ ­ЁҐ',0 ;+2 = +MB_TEXT_OFFSET + db '” ©« Ў®«ми®©, Ї®в®¬г ®вЄалв ­Ґ ўҐбм.',13 + db ' 1. ЏаЁ ҐЈ® б®еа ­Ґ­ЁЁ Ўг¤гв Ї®вҐап­л "­Ґ ®вЄалўиЁҐбп" бЁ¬ў®«л.',13 + db ' 2. ‚ ¤®Єг¬Ґ­в ­Ґ«м§п ¤®Ў ў«пвм ⥪бв, в. Є. Ї ¬пвм § ­пв .',0 + db 'џ Ї®­п«( )',0 ;button1 + db 0 +msgbox_2: + db 3,0 + db '‚­Ё¬ ­ЁҐ',0 ;+2 = +MB_TEXT_OFFSET + db '‘®еа ­Ёвм Ё§¬Ґ­Ґ­Ёп ў д ©«Ґ?',0 + db '‘®еа ­Ёвм',0 + db 'ЌҐ б®еа ­пвм',0 + db 'Ћв¬Ґ­ ',0 + db 0 +msgbox_2_funct: + dd On_SaveAndNewFile + dd On_NewFile + dd 0 + +msgbox_3: + db 1,0 + db '‚­Ё¬ ­ЁҐ',0 ;+2 = +MB_TEXT_OFFSET + db 'ЋиЁЎЄ  ЇаЁ ®вЄалвЁЁ д ©«  б 梥⮢묨 ­ бва®©Є ¬Ё!',13,\ + 'Џ®в®¬г ўл¤Ґ«Ґ­ЁҐ б«®ў 梥⮬ ­Ґ ў®§¬®¦­®.',13,\ + ' (Є®¤ ®иЁЎЄЁ=' + .err: db '?' + db ')',0 + db '‡ Єалвм',0 + db 0 + +msgbox_4: + db 1,0 + db '‚­Ё¬ ­ЁҐ',0 ;+2 = +MB_TEXT_OFFSET + db 'ЋиЁЎЄ  ЇаЁ ®вЄалвЁЁ д ©« !',13,\ + '‚®§¬®¦­® Ё¬п д ©«  ўўҐ¤Ґ­® ­Ґ Їа ўЁ«м­®.',13,\ + ' (Є®¤ ®иЁЎЄЁ=' + .err: db '?' + db ')',0 + db '‡ Єалвм',0 + db 0 + +msgbox_5: + db 3,0 + db '‚­Ё¬ ­ЁҐ',0 ;+2 = +MB_TEXT_OFFSET + db '‘®еа ­Ёвм Ё§¬Ґ­Ґ­Ёп ў д ©«Ґ?',0 + db 'ЌҐ б®еа ­пвм',0 + db 'Ћв¬Ґ­ ',0 + db 0 +msgbox_5_funct: +; dd but_SaveFile + dd On_OpenFile + dd 0 + +msgbox_6: + db 1,0 + db '‚­Ё¬ ­ЁҐ',0 ;+2 = +MB_TEXT_OFFSET + db 'ЋиЁЎЄ  ЇаЁ б®еа ­Ґ­ЁЁ д ©« !',13,\ + '‚®§¬®¦­® Ё¬п д ©«  ўўҐ¤Ґ­® ­Ґ Їа ўЁ«м­®.',13,\ + ' (Є®¤ ®иЁЎЄЁ=' + .err: db '?' + db ')',0 + db '‡ Єалвм',0 + db 0 +msgbox_7: + db 1,0 + db '’ҐЄбв ­Ґ ­ ©¤Ґ­',0 ;+2 = +MB_TEXT_OFFSET + db '„®бвЁЈ­гв Є®­Ґж ¤®Єг¬Ґ­в .',13,\ + 'Џ®Їа®Ўг©вҐ ЇҐаҐ©вЁ ў ­ з «® ¤®Єг¬Ґ­в ',13,\ + 'Ё«Ё Ё§¬Ґ­Ёвм § Їа®б Ё Ї®ўв®аЁвм Ї®ЁбЄ.',0 + db '‡ Єалвм',0 + db 0 +msgbox_8: + db 3,0 + db '‚­Ё¬ ­ЁҐ',0 ;+2 = +MB_TEXT_OFFSET + db '„«п ўл室  § ўҐаиЁвҐ а Ў®вг б д ©«®¬.',13,\ + 'Џ®Їа®Ўг©вҐ б®еа ­Ёвм Ё§¬Ґ­Ґ­Ёп ў д ©«Ґ',13,\ + 'Ё«Ё ­ з вм ­®ўл© Їгбв®©.',0 + db 'Ћв¬Ґ­ ',0 + db 0 + +txtFindCapt db 'Џ®ЁбЄ',0 +txtFindNext db 'Ќ ©вЁ ¤ «ҐҐ',0 +txtFormatCapt db '”®а¬ в',0 +txtFormatApply db 'ЏаЁ¬Ґ­Ёвм',0 +;------ +align 4 +EvChar db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +EvUpper db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 + db 80,81,82,83,84,85,86,87,88,89,90,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +EvLover db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 + db 112,113,114,115,116,117,118,119,120,121,122,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +conv_table dd 0 + + +KM_SHIFT equ 0x00010000 +KM_CTRL equ 0x00020000 +KM_ALT equ 0x00040000 +KM_NUMLOCK equ 0x00080000 + +; KEY CODES +KEY_F1 equ 0x0000003B +KEY_F2 equ 0x0000003C +KEY_F3 equ 0x0000003D + diff --git a/programs/other/t_edit/t_draw.inc b/programs/other/t_edit/t_draw.inc new file mode 100644 index 0000000000..485c6bd981 --- /dev/null +++ b/programs/other/t_edit/t_draw.inc @@ -0,0 +1,1291 @@ +mouse_wnd_main: + push eax ebx ecx + mcall 37,2 ;get mouse buttons + + cmp al,1 + jne @f + mcall 37,1 ;get mouse coords + mov ebx,[wndMain.top] + add ebx,[recMain.top] + cmp ax,bx + jl @f ;y_mousey_wnd + + mov ebx,[wndMain.left] + add ebx,[recMain.left] + mov ecx,eax + shr ecx,16 + cmp cx,bx + jl @f ;x_mousex_wnd + + call draw_cursor_sumb + call wnd_main_click + ;call draw_main_cursor ;??? + jmp .no_in_wnd + @@: + call wnd_main_mouse_scroll + cmp [dragm],0 + je .no_in_wnd + mov [dragm],0 + call draw_but_toolbar + call draw_main_win + .no_in_wnd: + pop ecx ebx eax + ret + +; input: +; eax->(x,y) +wnd_main_click: + push ecx edx + + push eax + shr eax,16 + and eax,0xffff + sub eax,[wndMain.left] + sub eax,[recMain.left] + + xor edx,edx + mov ecx,[recMain.width] + div cx + ;inc eax + cmp eax,[hScr.cur_area] + jle @f + mov eax,[hScr.cur_area] + @@: + ;dec eax + mov [cur_x],eax + pop eax + + push eax + and eax,0xffff + sub eax,[wndMain.top] + sub eax,[recMain.top] + + xor edx,edx + mov ecx,[recMain.height] + div cx + inc eax + cmp eax,[wScr.cur_area] + jle @f + mov eax,[wScr.cur_area] + @@: + dec eax + mov [cur_y],eax + pop eax + + cmp [dragm],0 + je @f + call SelMove + jmp .sel_move + @@: + mov [dragm],1 + call SelStart + .sel_move: + pop edx ecx + ret + +wnd_main_mouse_scroll: + push eax ebx + mcall 37,7 + cmp ax,0 + je .no_scroll + mov ebx,dword[wScr.position] ;copy old scroll position + and eax,0xffff + btr ax,15 + jae @f + or eax,0xffff8000 + @@: + add dword[wScr.position],eax + + mov eax,[wScr.position] + cmp eax,[wScr.max_area] + jb @f + mov dword[wScr.position],ebx ;if scroll position out of range + jmp .no_scroll + @@: + call draw_main_win + .no_scroll: + pop ebx eax + ret + +draw_but_toolbar: + + push ebx ecx edx + mov ecx,0x40000000 +; mov edx,5*65536+25 + mov edx,85*65536+2 + call draw_but_icon + + inc cx +; mov edx,30*65536+25 + mov edx,110*65536+2 + call draw_but_icon + +call CanSave +cmp al,1 +je @f +and ecx,0xffff +@@: + inc cx +; mov edx,55*65536+25 + mov edx,135*65536+2 + call draw_but_icon +or ecx,0x40000000 + + inc cx + mov edx,85*65536+25 + call draw_but_icon + +call IsSel +cmp al,0 +jne @f +and ecx,0xffff +@@: + inc cx ; Cut + mov edx,110*65536+25 + call draw_but_icon + + inc cx ; Copy + mov edx,135*65536+25 + call draw_but_icon + + mov cx,10 ; Upper + mov edx,265*65536+25 + call draw_but_icon + + inc cx ; Lower + mov edx,290*65536+25 + call draw_but_icon + + inc cx ; Reverse + mov edx,315*65536+25 + call draw_but_icon +or ecx,0x40000000 + +cmp byte[buf],0 +jne @f +and ecx,0xffff +@@: + mov cx,6 ; Paste + mov edx,160*65536+25 + call draw_but_icon +or ecx,0x40000000 + + inc cx + mov edx,185*65536+25 + call draw_but_icon + + inc cx + mov edx,210*65536+25 + call draw_but_icon + + inc cx + mov edx,235*65536+25 + call draw_but_icon + +mov ebx,[tim_Undo] +cmp [ch_tim],ebx +jg @f +and ecx,0xffff +@@: + mov cx,13 + mov edx,345*65536+25 + call draw_but_icon +or ecx,0x40000000 + +cmp [tim_Undo],1 +jge @f +and ecx,0xffff +@@: + inc cx + mov edx,370*65536+25 + call draw_but_icon +or ecx,0x40000000 + + inc cx + mov edx,400*65536+25 + call draw_but_icon + + inc cx + mov edx,425*65536+25 + call draw_but_icon + + mov cx,17 + mov edx,450*65536+25 + call draw_but_icon + + pop edx ecx ebx + ret + + +;input: +; ebx = x*2^16+y coords to left up point clear line +; esi = 0 clear all rows +; edi - number text line +clear_line_before_draw: + push eax ebx ecx edx + sub ebx,0x10001 ;отнимаем отступы для выравнивания буквы по центру + cmp esi,0 + jne @f + add bx,word[recMain.height] + inc edi ; ??? + ror ebx,16 + mov bx,word[wndMain.left] + add bx,word[recMain.left] + ror ebx,16 + @@: + + mov ax,word[wndMain.height] + add ax,word[wndMain.top] + cmp ax,bx + jl .no_clear + sub ax,bx + + mov cx,bx + shl ecx,16 + + mov bx,word[wndMain.width] + sub bx,word[recMain.left] + mov cx,word[recMain.height] + mov edx,[WND_WORK_COLOR] + + cmp esi,0 + je .pusto + cmp ax,cx + jge @f + .pusto: + mov cx,ax + @@: + + call IsSel + cmp al,0 + je @f + cmp [seln.y0],edi + jg @f + cmp [seln.y1],edi + jl @f + mov edx,[SELECT_COLOR] ;draw selected line + @@: + + mov eax,13 ;rect + int 0x40 + + call IsSel + cmp al,0 + je .no_clear + + mov al,13 ;rect + mov cx,word[recMain.height] + cmp [seln.y0],edi + jne @f + push bx + mov edx,[seln.x0] ; верхняя полоса (затирает слева) + cmp edx,[hScr.position] + jle .in_wnd + sub edx,[hScr.position] + imul edx,[recMain.width] + mov bx,dx + jmp .no_wnd + .in_wnd: + mov bx,0 + .no_wnd: + mov edx,[WND_WORK_COLOR] + int 0x40 + pop bx + @@: + cmp [seln.y1],edi + jne @f + mov edx,[seln.x1] ; нижняя полоса (затирает справа) + cmp edx,[hScr.position] + jle .in_wnd2 + sub edx,[hScr.position] + imul edx,[recMain.width] + sub bx,dx + shl edx,16 + add ebx,edx + .in_wnd2: + + mov edx,[WND_WORK_COLOR] + int 0x40 + @@: + + .no_clear: + pop edx ecx ebx eax + ret + +;include 't_debug.inc' +draw_main_win: + push eax ebx ecx edx edi esi +;---debug--- +;mov ecx,0 +;@@: +;call DebugSymb +;inc ecx +;cmp ecx,10 +;jge @f +;jmp @b +;@@: +;ret +;---debug--- + + mov eax,4 ;draw text + mov esi,1 + mov ecx,[tex_colors] + push dword[ecx] + pop ecx + + mov ebx,[wndMain.left] + add ebx,[recMain.left] + inc ebx + shl ebx,16 + add ebx,[wndMain.top] + add ebx,[recMain.top] + inc ebx + + call SelNormalize ;need before draw select + mov edi,[wScr.position] + + call clear_line_before_draw + call GetFirstVisiblePos + cmp edx,0 + je .no_draw_text + @@: + call IteratNext + cmp edx,[tex_1] + jle .no_draw_text + +;--- debug +;cmp dword[edx+6],maxChars +;jge .no_draw_text +;--- debug + + ; *** цветовая разметка + cmp byte[mode_colored],0 + je .no_col_change + cmp byte[edx+1],0 + je .no_col_change + call GetSymbColor + .no_col_change: + + cmp byte [edx],13 + jne .no_13 + cmp [invis],1 + jne .no_invis + push edx + mov edx,symbol_new_line + int 0x40 + pop edx + .no_invis: + add bx,word [recMain.height] + ;optimized output \/ + mov ax,word [wndMain.height] + add ax,word [wndMain.top] + cmp bx,ax + jg .no_draw_text + mov ax,4 + ;optimized output /\ + ror ebx,16 + mov bx,word [wndMain.left] + add bx,word [recMain.left] + inc ebx + ror ebx,16 + inc edi ;increment line number + call clear_line_before_draw + call OptDrawLineLeft + jmp @b + .no_13: + + int 0x40 + ror ebx,16 + add bx,word [recMain.width] + mov si,word [wndMain.left] + add si,word [wndMain.width] + cmp bx,si + jl .no_opt + call OptDrawLineRight + .no_opt: + mov si,1 + ror ebx,16 + jmp @b + .no_draw_text: + xor esi,esi + call clear_line_before_draw + + + mov eax,13 + ;top panel with caption + mov ebx,[wndMain.left] +; add ebx,[recMain.left] + shl ebx,16 + add ebx,[wndMain.width] +; sub ebx,[recMain.left] + mov edx,[WND_WORK_COLOR] + mov ecx,[wndMain.top] ;draw caption + shl ecx,16 + add ecx,[recMain.top] + mov edx,[WND_CAPT_COLOR] + int 0x40 + ;left panel with numbers +; mov ebx,[wndMain.left] +; shl ebx,16 +; add ebx,[recMain.left] + ;mov cx,word[wndMain.height] +; mov cx,word[recMain.top] +; int 0x40 + + call draw_line_numbers + call draw_main_cursor + +;--------------------------------------------- +; set all_redraw flag for draw all ScrollBar +; In some cases it is necessity to draw only the area +; of moving of a "runner", for acceleration of output - +; in this case the flag needs to be reset to 0 (zero). + xor eax,eax + inc eax + mov [wScr.all_redraw],eax + mov [hScr.all_redraw],eax + +; draw for Vertical ScrollBar + push dword wScr + call [scrollbar_ver_draw] + push dword hScr + call [scrollbar_hor_draw] +; reset all_redraw flag + xor eax,eax + mov [wScr.all_redraw],eax + mov [hScr.all_redraw],eax +;--------------------------------------------- + + mov eax,13 + ;left-bottom square + mov bx,word[wndMain.left] + shl ebx,16 + mov bx,word[recMain.left] + mov ecx,[wndMain.top] + add ecx,[wndMain.height] + shl ecx,16 + mov cx,word[hScr.size_y] + inc cx + mov edx,[sc.work] + int 0x40 + + ;right-bottom square + mov ebx,[wndMain.left] + add ebx,[wndMain.width] + shl ebx,16 + mov bx,word[wScr.size_x] + inc bx + int 0x40 + + pop esi edi edx ecx ebx eax + call draw_panel_find + call draw_panel_syntax + ret + +;txtBUp db 24 +;txtBDn db 25 +;txtBRi db 26 +;txtBLe db 27 +draw_panel_find: + cmp byte[panel_id],TE_PANEL_FIND ;if not panel + jne @f + push eax ebx ecx edx + + mov eax,13 ;рисование прямоугольника + mov ebx,TE_PANEL_WIDTH + mov cx,word[wndMain.top] + shl ecx,16 + mov cx,20 + mov edx,[sc.work] + int 0x40 + + mov eax,4 ;рисование текста + mov ebx,30*65536+5 + add bx,word[wndMain.top] + mov ecx,[sc.work_text] + or ecx,0x80000000 + mov edx,txtFindCapt + int 0x40 + + push dword edit2 + call [edit_box_draw] + + mov eax,13 ;рисование прямоугольника + mov ebx,TE_PANEL_WIDTH + mov cx,word[wndMain.top] + add cx,20+15 ; 15 - height text box + shl ecx,16 + mov cx,word[wndMain.height] + add cx,word[hScr.size_y] + sub cx,20+15-1 ; 15 - height text box + mov edx,[sc.work] + int 0x40 + + mov eax,8 ;кнопка + mov ebx,5*65536+85 + mov cx,word[wndMain.top] + add cx,20+15+5 + shl ecx,16 + mov cx,20 + mov edx,201 ;button id + mov esi,[sc.work_button] + int 0x40 + + mov eax,4 ;рисование текста + mov ebx,15*65536+(20+15+10) + add bx,word[wndMain.top] + mov ecx,[sc.work_text] + or ecx,0x80000000 + mov edx,txtFindNext + int 0x40 + + pop edx ecx ebx eax + ret + @@: + push eax edx + mov eax,8 + mov edx,201 + or edx,0x80000000 + int 0x40 + pop edx eax + ret + +draw_panel_syntax: + cmp byte[panel_id],TE_PANEL_SYNTAX ;if not panel + jne @f + push eax ebx ecx edx + + mov eax,13 ;рисование прямоугольника + mov ebx,TE_PANEL_WIDTH + mov cx,word[wndMain.top] + shl ecx,16 + mov cx,20 + mov edx,[sc.work] + int 0x40 + + push dword tree1 + call dword[tl_draw] + + mov [ws_dir_lbox.all_redraw],1 + push dword ws_dir_lbox + call dword[scrollbar_ver_draw] + + ror ecx,16 + add ecx,dword[tree1.box_height] + add ecx,20 + ror ecx,16 + mov cx,word[wndMain.height] + add cx,word[hScr.size_y] + sub cx,20 + sub ecx,dword[tree1.box_height] + inc cx + int 0x40 + + mov eax,8 ;кнопка + mov ebx,5*65536+65 + mov cx,word[wndMain.top] + add cx,25 + add ecx,dword[tree1.box_height] + shl ecx,16 + mov cx,20 + mov edx,200 ;button id + mov esi,[sc.work_button] + int 0x40 + + mov eax,4 ;рисование текста + mov ebx,30*65536+5 + add bx,word[wndMain.top] + mov ecx,[sc.work_text] + or ecx,0x80000000 + mov edx,txtFormatCapt + int 0x40 + + mov ebx,10*65536+30 + add ebx,dword[tree1.box_height] + add bx,word[wndMain.top] + mov edx,txtFormatApply + int 0x40 + + pop edx ecx ebx eax + ret + @@: + push eax edx + mov eax,8 + mov edx,200 + or edx,0x80000000 + int 0x40 + pop edx eax + ret + +draw_cur_line: + push eax ebx ecx edx esi edi + + mov edi,[cur_y] + + mov ebx,[wndMain.left] + add ebx,[recMain.left] + inc ebx + shl ebx,16 + add ebx,edi + imul bx,word[recMain.height] + add ebx,[wndMain.top] + add ebx,[recMain.top] + inc ebx + + add edi,[wScr.position] + mov esi,1 + call SelNormalize ;need before draw select + call clear_line_before_draw + + mov esi,[hScr.position] + mov ecx,edi + call GetPosByParam + + cmp [gpOpt],2 + jne .no_draw_text +; mov eax,4 ;draw text + call GetSymbColor + mov esi,1 ;draw 1 symbol + @@: + ;call IteratNext + cmp edx,[tex_1] + jle .no_draw_text + + ; *** цветовая разметка + cmp byte[mode_colored],0 + je .no_col_change + cmp byte[edx+1],0 + je .no_col_change + call GetSymbColor + .no_col_change: + + mov eax,4 ;draw text + cmp byte [edx],13 + jne .no_13 + cmp [invis],1 + jne .no_draw_text + push edx + mov edx,symbol_new_line + int 0x40 + pop edx + jmp .no_draw_text + .no_13: + + int 0x40 + ror ebx,16 + add bx,word[recMain.width] +; cmp bx,word[wndMain.width] + mov ax,word[wndMain.width] + add ax,word[wndMain.left] ;ax = отступ по оси x + cmp bx,ax + jge .no_draw_text ;Opt + ror ebx,16 + call IteratNext + jmp @b + .no_draw_text: + + pop edi esi edx ecx ebx eax + call draw_main_cursor + ret + +MIN_M_WND_H equ 100 +MIN_W_SCRL_ARE equ 3 +MIN_H_SCRL_ARE equ 3 +EvSize: + push eax ecx edx edi + m2m [wndMain.width],[procinfo.client_box.width] + mov ax,word[wndMain.left] + sub word[wndMain.width],ax + mov eax,[wScr] ;+0 size_x + sub word[wndMain.width],ax + + m2m [wndMain.height],[procinfo.client_box.height] + cmp [wndMain.height],MIN_M_WND_H + jg @f + mov [wndMain.height],MIN_M_WND_H + @@: + + mov ax,word[hScr.size_y] + sub word[wndMain.height],ax + mov eax,[wndMain.height] ;.height = .top+.height + mov word[hScr.start_y],ax + mov eax,[wndMain.top] + sub word[wndMain.height],ax + + m2m word[wScr.start_x],word[wndMain.width] + mov ax,word[wndMain.left] + add [wScr.start_x],ax + m2m word[wScr.size_y],word[wndMain.height] + + m2m word[hScr.start_x],word[recMain.left] + add [hScr.start_x],ax ;ax=[wndMain.left] + mov eax,[wndMain.width] + sub ax,word[recMain.left] + mov word[hScr.size_x],ax + + mov eax,[wndMain.height] ;calculate lines in page + sub eax,[recMain.top] + xor edx,edx + mov ecx,[recMain.height] + div ecx + cmp eax,MIN_W_SCRL_ARE + jg @f + mov eax,MIN_W_SCRL_ARE + @@: + mov [wScr.cur_area],eax + + mov eax,[wndMain.width] ;calculate cols in page + sub eax,[recMain.left] + xor edx,edx + mov ecx,[recMain.width] + div ecx + cmp eax,MIN_H_SCRL_ARE + jg @f + mov eax,MIN_H_SCRL_ARE + @@: + dec eax ; ??? + mov [hScr.cur_area],eax + + mov edi,dword tree1 + m2m tl_box_top,dword[wndMain.top] + add tl_box_top,20 + + m2m dword[edit2.top],dword[wndMain.top] + add dword[edit2.top],20 + + pop edi edx ecx eax + call OnInitialUpdate + ret + +OnInitialUpdate: + mov [wScr.redraw],1 + mov [hScr.redraw],1 + ret + +;output: +; edx = pointer to symbol +; edx = 0 if text not in screen +GetFirstVisiblePos: + push ecx + mov edx,[tex] + xor ecx,ecx + @@: + cmp ecx,[wScr.position] + je @f + call IteratNext + cmp edx,[tex_1] + jle @f + cmp byte [edx],13 + jne @b + inc ecx + jmp @b + @@: + + cmp ecx,[wScr.position] + je @f + xor edx,edx + @@: + cmp ecx,[wScr.max_area] + jle @f + mov [wScr.max_area],ecx + @@: + pop ecx + call OptDrawLineLeft + ret + + + +;input: +; edx = pointer to symbol +;output: +; edx = pointer to first left symbol +OptDrawLineLeft: + push ecx + mov ecx,[hScr.position] + cmp ecx,0 + je .ret_f + push eax + mov eax,edx + + cmp edx,[tex] + jne @f + call IteratNext + jmp .beg_cycle + @@: + + cmp ecx,0 + je @f + + cmp byte[edx],13 + jne @f + call IteratNext + .beg_cycle: + @@: + cmp edx,[tex_1] + jle @f + cmp byte[edx],13 + je @f + cmp ecx,0 + je @f + mov eax,edx + call IteratNext + dec ecx + jmp @b + @@: + mov edx,eax + pop eax + .ret_f: + pop ecx + call GetSymbColor + ret + +;input: +; edx = pointer to symbol +;output: +; edx = pointer to 13 symbol +OptDrawLineRight: + push eax + mov eax,edx + @@: + cmp edx,[tex_1] + jle @f + cmp byte[edx],13 + je @f + mov eax,edx + call IteratNext + jmp @b + @@: + mov edx,eax ;perv sumbol + pop eax + call GetSymbColor + ret + +txtRow db '‘ва®Є ',0 +txtCol db '‡­ Є',0 +txtOtm db 'Ћв¬Ґ­л',0 + +draw_main_cursor: + push eax ebx ecx edx edi esi + + mov eax,13 ;draw cursor + mov ecx,[wndMain.top] ;calc rect -> y0,y1 + add ecx,[recMain.top] + mov edx,[cur_y] + imul edx,[recMain.height] + add ecx,edx + + cmp [curMod],1 + jne @f + mov edx,[recMain.height] + inc edx ; 1->1, 3->2, 5->3, ... + shr edx,1 + add ecx,edx + @@: + shl ecx,16 + add ecx,[recMain.height] + cmp [curMod],1 + jne @f + shr cx,1 + @@: + + mov ebx,[wndMain.left] ;calc rect -> x0,x1 + add ebx,[recMain.left] + mov edx,[cur_x] + imul edx,[recMain.width] + add ebx,edx + shl ebx,16 + add ebx,[recMain.width] + + mov edx,[CURSOR_COLOR] + int 0x40 + + call GetPos + cmp [gpOpt],2 + jne @f + mov eax,4 ;draw text + mov esi,1 + ror ecx,16 + mov bx,cx + add ebx,0x10001 + cmp [curMod],1 + jne .no_up_tetx + mov cx,word[recMain.height] + inc cx ; 1->1, 3->2, 5->3, ... + shr cx,1 + sub bx,cx + .no_up_tetx: + mov ecx,[CUR_TEXT_COLOR] + call ConvertInvisSymb + int 0x40 + @@: + + + + mov eax,4 + mov ebx,[wndMain.left] + add ebx,[recMain.left] + shl ebx,16 + add ebx,[wndMain.top] + add ebx,3 + mov ecx,[WND_BORD_COLOR] + or ecx,0x80000000 + mov edx,txtRow + int 0x40 + + add ebx,0x500000 + mov edx,txtCol + int 0x40 + + cmp [tim_Undo],0 + je @f + add ebx,0x500000 + mov edx,txtOtm + int 0x40 + sub ebx,0x500000 + @@: + + call draw_bufer + call draw_help_f1 + + mov eax,47 ;draw cursor coords + mov esi,[WND_BORD_COLOR] + or esi,0x40000000 + mov edi,[WND_WORK_COLOR] + + mov edx,ebx + ror edx,16 + sub edx,35 + ror edx,16 + ;add edx,3 + mov ebx,0x40000 ;Row=... + mov ecx,[cur_y] + inc ecx + add ecx,[wScr.position] + int 0x40 + + ;mov ebx,0x40000 ;Col=... + mov ecx,[cur_x] + inc ecx + add ecx,[hScr.position] + add edx,0x500000 + int 0x40 + + cmp [tim_Undo],0 + je @f + mov ecx,[tim_Undo] + add edx,0x500000 + int 0x40 + @@: + + pop esi edi edx ecx ebx eax + ret + + +draw_bufer: + push eax ebx ecx edx esi edi + cmp byte[buf],0 + je @f + mov ebx,[wndMain.left] + add ebx,[recMain.left] + add bx,250 + shl ebx,16 + add ebx,[wndMain.top] + add ebx,3 + mov ecx,[WND_BORD_COLOR] + or ecx,0x40000000 + mov edi,[WND_WORK_COLOR] + + mov edx,txtBuf + mov esi,buf + call strlen + cmp eax,15 + jle .crop_buf + mov eax,15 + .crop_buf: + mov esi,7 + add esi,eax + + mov eax,4 + int 0x40 + @@: + pop edi esi edx ecx ebx eax + ret + +draw_help_f1: + push eax ebx ecx edx edi + mov eax,13 ;clear place before draw help + mov ebx,[wndMain.left] + add ebx,[recMain.left] + shl ebx,16 + add ebx,[wndMain.width] + sub ebx,[recMain.left] + mov ecx,[wndMain.top] + add ecx,13 + shl ecx,16 + add ecx,[recMain.height] + mov edx,[WND_CAPT_COLOR] + int 0x40 + + cmp [help_id],-1 + je @f;.no_help + mov eax,[help_id] + ColToIndexOffset eax,edx + + ;SetCoordinates + mov ebx,[wndMain.left] + add ebx,[recMain.left] + shl ebx,16 + add ebx,[wndMain.top] + add ebx,13 ;=3+10 + + ;SetTextColor + xor eax,eax + mov al,byte[edx+MAX_COLOR_WORD_LEN+6] + shl ax,2 + mov ecx,[tex_colors] + add ecx,eax + push dword[ecx] + pop ecx + or ecx,0xc0000000 ;SetTextStyles + mov edi,[WND_WORK_COLOR] + + mov eax,4 + int 0x40 + + ;*** draw help string *** + mov ecx,[WND_BORD_COLOR] + or ecx,0x80000000 + mov edi,dword[edx+MAX_COLOR_WORD_LEN] + cmp edi,0 + je @f + add edi,dword[tex_help_f1] + mov edx,edi + add ebx,0x500000 + int 0x40 + @@: + ;.no_help: + pop edi edx ecx ebx eax + ret + +draw_line_numbers: + push eax ebx ecx edx esi ;edi + ;line numbers + mov eax,47 + mov esi,[WND_BORD_COLOR] + ;or esi,0x40000000 + ;mov edi,[WND_WORK_COLOR] + mov ebx,0x40000 ;format + + mov ecx,[wScr.position] + inc ecx + mov dx,3 + add dx,word[wndMain.left] + shl edx,16 + mov dx,word[wndMain.top] + add dx,word[recMain.top] + @@: + +push eax ebx ecx edx + mov eax,13 + ;left panel with numbers + mov ebx,[wndMain.left] + shl ebx,16 + add ebx,[recMain.left] + mov cx,dx +; mov ecx,[wndMain.top] ;draw caption +; add ecx,[recMain.top] + shl ecx,16 + mov cx,word [recMain.height] + mov edx,[WND_CAPT_COLOR] + int 0x40 +pop edx ecx ebx eax + + int 0x40 + inc ecx + add dx,word[recMain.height] + sub dx,word[wndMain.top] + cmp dx,word[wndMain.height] + jge @f + add dx,word[wndMain.top] + jmp @b + @@: + + pop esi edx ecx ebx eax + ret + + +draw_cursor_sumb: ;this function need to optimize output + push eax ecx edx + mov eax,13 ;rect + mov ebx,[wndMain.left] + add ebx,[recMain.left] + mov edx,[cur_x] + imul edx,[recMain.width] + add ebx,edx + shl ebx,16 + add ebx,[recMain.width] + + mov ecx,[wndMain.top] ;calc rect -> y0,y1 + add ecx,[recMain.top] + mov edx,[cur_y] + imul edx,[recMain.height] + add ecx,edx + shl ecx,16 + add ecx,[recMain.height] + + mov edx,[WND_WORK_COLOR] + push ecx + call SelNormalize + + mov ecx,[wScr.position] + sub [seln.y0],ecx + sub [seln.y1],ecx + + mov ecx,[cur_y] + cmp ecx,[seln.y0] + jl .no_cur_sel + cmp ecx,[seln.y1] + jg .no_cur_sel + mov edx,[SELECT_COLOR] + + cmp ecx,[seln.y0] + jne @f + mov ecx,[cur_x] + add ecx,[hScr.position] + cmp ecx,[seln.x0] + jge @f + mov edx,[WND_WORK_COLOR] + @@: + + mov ecx,[cur_y] + cmp ecx,[seln.y1] + jne .no_cur_sel + mov ecx,[cur_x] + add ecx,[hScr.position] + cmp ecx,[seln.x1] + jl .no_cur_sel + mov edx,[WND_WORK_COLOR] + + .no_cur_sel: + pop ecx + int 0x40 + + call GetPos + cmp [gpOpt],2 + jne @f + push esi + mov eax,4 ;draw text + mov esi,1 + ror ecx,16 + mov bx,cx + add ebx,0x10001 + ;mov ecx,[WND_TEXT_COLOR] + call GetSymbColor + call ConvertInvisSymb + int 0x40 + pop esi + @@: + + pop edx ecx eax + ret + + + +;input: +; edx = pointer to text +;output: +; ecx = color +; if mode_colored=0 then ecx=WND_TEXT_COLOR +GetSymbColor: + mov ecx,[WND_TEXT_COLOR] + + push eax edx + cmp byte[mode_colored],0 + je .exit + jmp .on_first + @@: + call IteratPerv + cmp edx,[tex_1] + jle .exit + .on_first: + xor eax,eax + mov al,byte[edx+1] + cmp al,0 + je @b + + ;cmp al,0xff + ;je .exit + cmp eax,[ColColor] + jge .exit + + shl ax,2 ;*4 + mov ecx,[tex_colors] + add ecx,eax + push dword[ecx] + pop ecx + .exit: + pop edx eax + ret + +;input: +; edx = pointer to text +ConvertInvisSymb: + cmp [invis],1 + jne @f + cmp byte [edx],13 + jne @f + mov edx,symbol_new_line + @@: + ret + +;input: +; ecx = 0x4000____ +; cx = icon index +; edx = x*2^16+y +draw_but_icon: + push eax ebx + + mov eax,8 ;кнопка + push ecx edx esi + mov ebx,edx + mov edx,ecx + add edx,3 + mov cx,bx + shl ecx,16 + mov cx,19 ;=20-1 + mov bx,19 ;=20-1 + mov esi,[sc.work_button] + int 0x40 + pop esi edx ecx + + mov ebx,ecx + ror ebx,16 + cmp bx,0x4000 + jne @f + + mov eax,7 ;bmp + mov ebx,[bmp_icon] + push ecx + and ecx,0xffff + imul ecx,1200 + add ebx,ecx + mov ecx,20 + shl ecx,16 + add ecx,20 + int 0x40 + pop ecx + + @@: + pop ebx eax + ret + diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm new file mode 100644 index 0000000000..82678bef1d --- /dev/null +++ b/programs/other/t_edit/t_edit.asm @@ -0,0 +1,875 @@ +;Огромная благодарность Maxxxx32, Diamond, Heavyiron +;и другим программистам, а также +;Теплову Алексею ( www.lrz.land.ru) + + +use32 + org 0x0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 0x01 + dd start + dd i_end ; размер приложения + dd mem + dd stacktop + dd file_name;buf_cmd_lin + dd sys_path + +MAX_COLOR_WORD_LEN equ 40 +maxChars equ 100002 ;(...+2) +BUF_SIZE equ 1000 ;bufer for copy|paste +maxColWords equ 10000 + + +include '../../macros.inc' +;include '../../develop/libraries/box_lib/load_lib.mac' +include 'load_lib.mac' ;include old file +include '../../develop/libraries/box_lib/trunk/tree_list.mac' +include '../../develop/libraries/box_lib/trunk/editbox_ex.mac' + +include 't_data.inc' +include 'strlen.inc' +include 't_work.inc' ;text work functions +include 't_draw.inc' ;draw main window functions +include 't_button.inc' + +@use_library + +start: + mov eax,48 + mov ebx,3 + mov ecx,sc + mov edx,sizeof.system_colors + mcall + + m2m [wScr.bckg_col],[sc.work] + m2m [wScr.frnt_col],[sc.work_button] + m2m [wScr.line_col],[sc.work_button_text] + + m2m [hScr.bckg_col],[sc.work] + m2m [hScr.frnt_col],[sc.work_button] + m2m [hScr.line_col],[sc.work_button_text] + + + mcall 68,11 + or eax,eax + jz button.exit + + mcall 66,1,1 ;scan code + ;mcall 26,2,1,conv_tabl + + mov ecx,sizeof.symbol*maxChars + call mem_Alloc + mov [tex],eax + mov [tex_1],eax + add [tex_1],sizeof.symbol + mov [tex_end],eax + add [tex_end],sizeof.symbol*maxChars + + mcall 40,0x27 + + call Clear + +;------------------------------------------------- + mov ecx,maxColWords*sizeof.TexColViv + add ecx,40 + call mem_Alloc + mov [options_file],eax + mov [options_file_end],eax + add [options_file_end],maxColWords*sizeof.TexColViv + add [options_file_end],40 + +;------------------------------------------------- +; init bmp file + mov ecx,1200*18 + call mem_Alloc + mov [bmp_icon],eax + + mov esi,file_name + call strlen + mov ecx,eax + mov edi,buf_cmd_lin + rep movsb + + copy_path fn_icon,sys_path,file_name + + mov eax,70 ;load icon file + mov [run_file_70.func_n], 0 + mov [run_file_70.param1], 54 + mov [run_file_70.param2], 0 + mov [run_file_70.param3], 1200*18 + m2m [run_file_70.param4], [bmp_icon] + mov [run_file_70.rezerv], 0 + mov [run_file_70.name], file_name + mov ebx,run_file_70 + int 0x40 + + cmp ebx,-1 + mov [err_ini0],1 + je @f ;if open file + mov [err_ini0],0 + @@: + +load_libraries l_libs_start,load_lib_end + +;Їа®ўҐаЄ  ­  бЄ®«мЄ® г¤ з­® § Јг§Ё« бм ­ и  «ЁЎ  + mov ebp,lib0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct +@@: + mov ebp,lib1 ; + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct +@@: + + +;--------------------------------------------------------------------- + push dword tree1 + call dword[tl_data_init] +;--------------------------------------------------------------------- +; читаем bmp файл с курсорами и линиями + copy_path fn_icon_tl_sys,sys_path,file_name + + mov ecx,3*256*13 + call mem_Alloc + mov dword[tree1.data_img_sys],eax + + mov [run_file_70.func_n], 0 + mov [run_file_70.param1], 54 + mov [run_file_70.param2], 0 + mov [run_file_70.param3], 3*256*13 + mov [run_file_70.param4], eax + mov [run_file_70.rezerv], 0 + mov [run_file_70.name], file_name + + mov eax,70 ;load icon file + mov ebx,run_file_70 + int 0x40 + cmp ebx,0 + jg @f + mov dword[tree1.data_img_sys],0 + @@: +;--------------------------------------------------------------------- +; читаем bmp файл с иконками узлов + copy_path fn_icon_tl_nod,sys_path,file_name + + mov ecx,3*256*2 + call mem_Alloc + mov dword[tree1.data_img],eax + +; mov [run_file_70.func_n], 0 +; mov [run_file_70.param1], 54 +; mov [run_file_70.param2], 0 + mov [run_file_70.param3], 3*256*2 + mov [run_file_70.param4], eax +; mov [run_file_70.rezerv], 0 +; mov [run_file_70.name], file_name + + mov eax,70 ;load icon file + mov ebx,run_file_70 + int 0x40 + cmp ebx,0 + jg @f + mov dword[tree1.data_img],0 + @@: +;------------------------------------------------------------------------------ + copy_path fn_syntax_dir,sys_path,file_name ;берем путь к папке с файлами синтаксиса + mov eax,70 + mov ebx,tree_file_struct + int 0x40 + +cmp ebx,-1 +je .end_dir_init + + mov eax,dir_mem + add eax,32+4+1+3+4*6+8 +mov ecx,ebx +@@: + cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' + je .filter + push dword tree1 + push dword 0x10000 ;1*2^16 - где 1 номер иконки с книгой + push dword eax + call dword[tl_node_add] + + push dword tree1 + call dword[tl_cur_next] + .filter: + add eax,304 + loop @b +.end_dir_init: + +; push dword tree1 +; push dword 0 +; push dword file_name +; call dword[tl_node_add] + + +;--- load color option file --- + call InitColText + +;--- get cmd line --- + cmp byte[buf_cmd_lin+3],0 ;buf_cmd_lin + je @f ;if file names exist + mov esi,buf_cmd_lin + call strlen ;eax=strlen + mov [edit1.size],eax + call but_OpenFile + @@: + + +red_win: + mov eax,12 + mov ebx,1 + mcall + + xor eax,eax + mov ebx,10*65536+485 + mov ecx,10*65536+280 + mov edx,[sc.work] + or edx,0x73000000 + mov edi,hed + mcall + + mcall 9,procinfo,-1 + call EvSize + + mov eax,13 ;rect + xor ebx,ebx + xor ecx,ecx + mov bx,word [procinfo.client_box.width] + inc bx + mov cx,word [wndMain.top] + mcall + + push dword edit1 + call [edit_box_draw] + +; draw for Menu 1 + push dword menu_data_1 + call [menu_bar_draw] + + call draw_but_toolbar + + cmp [err_ini0],1 + jne @f + mov eax,4 + mov ebx,[wndMain.left] + add ebx,[recMain.left] + shl ebx,16 + add ebx,[wndMain.top] + add ebx,[recMain.top] + mov ecx,0x80ff0000 + mov edx,txtErrIni0 + int 0x40 + + add ebx,10 ;move <--y--> + mov ecx,0x80ff0080 + mov edx,file_name + int 0x40 + @@: + + cmp [err_ini0],1 + je @f + call draw_main_win + @@: + + cmp [err_opn],1 + jne @f + ;mov eax,4 + mov ebx,10*65536+35 + mov ecx,0x80ff0000 + mov edx,txtErrOpen + mcall + @@: + + mov eax,12 + mov ebx,2 + mcall + +still: + mov eax,10 + mcall + + cmp al,1 ;изм. положение окна + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 + jz mouse + + jmp still + + + +mouse: + push dword edit1 + call [edit_box_mouse] + + test word [edit1.flags],10b;ed_focus ; Ґб«Ё ­Ґ ў д®ЄгбҐ, ўл室Ё¬ + jne still + +;----------------------------------------------- + cmp [hScr.delta2],0 + jne .horizontal +.vertical: + mov eax,[wScr.max_area] + cmp eax,[wScr.cur_area] + jbe .horizontal +; mouse event for Vertical ScrollBar + push dword wScr + call [scrollbar_ver_mouse] + mov eax,wScr.redraw + xor ebx,ebx + cmp [eax],ebx + je @f + mov [eax],ebx + + call draw_main_win + ;call mouse_wnd_main + jmp still +@@: + cmp [wScr.delta2],0 + jne still +.horizontal: + mov eax,[hScr.max_area] + cmp eax,[hScr.cur_area] + jbe .other +; mouse event for Horizontal ScrollBar + push dword hScr + call [scrollbar_hor_mouse] + mov eax,hScr.redraw + xor ebx,ebx + cmp [eax],ebx + je .other + mov [eax],ebx + call draw_main_win + jmp still +.other: + cmp [wScr.delta2],0 + jne still + cmp [hScr.delta2],0 + jne still + + call mouse_wnd_main + + cmp byte[panel_id],TE_PANEL_FIND ;if not panel + jne @f + push dword edit2 + call [edit_box_mouse] + @@: + cmp byte[panel_id],TE_PANEL_SYNTAX ;if not panel + jne .menu_bar_1 ;@f + push dword tree1 + call [tl_mouse] +;----------------------------------------------- +.menu_bar_1: + mov [menu_data_1.get_mouse_flag],1 +; mouse event for Menu 1 + push dword menu_data_1 + call [menu_bar_mouse] + cmp [menu_data_1.click],dword 1 + jne .mnu_1 + cmp [menu_data_1.cursor_out],dword 4 + je button.exit + cmp [menu_data_1.cursor_out],dword 3 + jne @f + call but_SaveFile + @@: + cmp [menu_data_1.cursor_out],dword 2 + jne @f + call but_OpenFile + @@: + cmp [menu_data_1.cursor_out],dword 1 + jne @f + call but_NewFile + @@: + ;cmp [menu_data_1.cursor_out],dword 0 + ;jne @f +.mnu_1: + jmp still +;--------------------------------------------------------------------- + +KeyConvertToASCII: + mov ebx,conv_tabl ;convert scan to ascii + ror ax,8 + xor ah,ah + add bx,ax + mov ah,byte[ebx] + ret + +key: + mov ecx,1 + mcall 66,3 + xor ebx,ebx + test al,0x03 ;[Shift] + jz @f + inc cl + or ebx,KM_SHIFT + @@: + test al,0x0c ;[Ctrl] + jz @f + or ebx,KM_CTRL + @@: + test al,0x30 ;[Alt] + jz @f + or ebx,KM_ALT + @@: + test al,0x80 ;[NumLock] + jz @f + or ebx,KM_NUMLOCK + @@: + + mov [keyUpr],ebx + mcall 26,2,,conv_tabl + mcall 2 + +; push dword tree1 ;??? +; call [tl_key] ;??? + + test word [edit1.flags],10b;ed_focus ; Ґб«Ё ­Ґ ў д®ЄгбҐ, ўл室Ё¬ + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still +; cmp [keyUpr],0 +; jne still + + call KeyConvertToASCII + + push dword edit1 + call [edit_box_key] + jmp still + @@: + + test word [edit2.flags],10b;ed_focus ; Ґб«Ё ­Ґ ў д®ЄгбҐ, ўл室Ё¬ + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still +; cmp [keyUpr],0 +; jne still + + call KeyConvertToASCII + push dword edit2 + call [edit_box_key] + jmp still + @@: + + cmp ah,KEY_F1 ;[F1] + jne @f + call ShowHelpF1 + jmp still + @@: + cmp ah,KEY_F3 ;[F3] + jne @f + call but_FindText + jmp still + @@: + + test [keyUpr],KM_CTRL ;Ctrl+... + jz .key_Ctrl + + cmp ah,24 ;Ctrl+O + jne @f + call but_OpenFile + @@: + cmp ah,33 ;Ctrl+F + jne @f + cmp byte[panel_id],TE_PANEL_FIND + je @f + call but_find + @@: + cmp ah,44 ;Ctrl+Z + je but_undo + cmp ah,46 ;Ctrl+C + jne @f + call but_Copy + @@: + cmp ah,47 ;Ctrl+V + je but_paste + cmp ah,49 ;Ctrl+N + jne @f + call but_NewFile + @@: + cmp ah,199 ;Ctrl+Home + jne @f + call but_CtrlHome + @@: + ;jmp still + .key_Ctrl: + + test [keyUpr],KM_SHIFT ;Shift+... + jz .key_Shift + cmp ah,72 ;Shift+Up + jne @f + call sel_KeyUp + @@: + cmp ah,75 ;Shift+Left + jne @f + call sel_KeyLeft + @@: + cmp ah,77 ;Shift+Right + jne @f + call sel_KeyRight + @@: + cmp ah,80 ;Shift+Down + jne @f + call sel_KeyDown + @@: + ;mov [dragk],1 ;начинаем выделение от клавиатуры + jmp .key_MoveCur + .key_Shift: +;------------------------------------------------- + cmp ah,72 ;178 ;Up + jne @f + push dx + call draw_cursor_sumb + call CurMoveUp + cmp dl,8 + jne .no_red_0 + call OnInitialUpdate + call draw_main_win + pop dx + jmp @f + .no_red_0: + call draw_main_cursor + pop dx + mov [dragk],0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,80 ;177 ;Down + jne @f + push dx + call draw_cursor_sumb + call CurMoveDown + cmp dl,8 + jne .no_red_1 + call OnInitialUpdate + call draw_main_win + pop dx + jmp @f + .no_red_1: + call draw_main_cursor + pop dx + mov [dragk],0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,75 ;176 ;Left + jne @f + push dx + call draw_cursor_sumb + call CurMoveLeft + cmp dl,8 + jne .no_red_2 + call OnInitialUpdate + call draw_main_win + pop dx + jmp @f + .no_red_2: + call draw_main_cursor + pop dx + mov [dragk],0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,77 ;179 ;Right + jne @f + push dx + call draw_cursor_sumb + call CurMoveRight + cmp dl,8 + jne .no_red_3 + call OnInitialUpdate + call draw_main_win + pop dx + jmp @f + .no_red_3: + call draw_main_cursor + pop dx + mov [dragk],0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,71 ;180 ;Home + jne @f + push dx + call draw_cursor_sumb + call CurMoveX_FirstChar + cmp dl,8 + jne .no_red_4 + call OnInitialUpdate + call draw_main_win + pop dx + jmp @f + .no_red_4: + call draw_main_cursor + pop dx + mov [dragk],0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,79 ;181 ;End + jne @f + push dx + call draw_cursor_sumb + call CurMoveX_LastChar + cmp dl,8 + jne .no_red_5 + call OnInitialUpdate + call draw_main_win + pop dx + jmp @f + .no_red_5: + call draw_main_cursor + pop dx + mov [dragk],0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,73 ;184 ;PageUp + jne @f + push dx + call CurMovePageUp + cmp dl,0 + pop dx + je @f + call OnInitialUpdate + call draw_main_win + @@: + cmp ah,81 ;183 ;PageDown + jne @f + push dx + call CurMovePageDown + cmp dl,0 + pop dx + je @f + call OnInitialUpdate + call draw_main_win + mov [dragk],0 ;заканчиваем выделение от клавиатуры + @@: +;------------------------------------------------- + cmp [keyUpr],0 + jne still + .key_MoveCur: + + cmp ah,69 ;[Pause Break] + je still + cmp ah,120 ;[Fn] + je still + cmp ah,0x80 ;if key up + ja still + call KeyConvertToASCII + + ;mov [dragk],0 ;заканчиваем выделение от клавиатуры + + push ebx + xor ebx,ebx + mov bl,ah + add ebx,EvChar ;add char to text + cmp byte [ebx],1 + jne @f + push esi edi + call SetUndo + mov bx,0x0101 + call SelTextDel + mov esi,1 + mov byte [key_new],ah + mov edi,dword key_new + cmp [curMod],1 + je .no_ins_mod + call TextDel + xor bl,1 + .no_ins_mod: + call TextAdd + call draw_but_toolbar + cmp byte [key_new],13 + jne .dr_m_win + call draw_main_win + jmp .dr_cur_l + .dr_m_win: + call draw_cur_line + .dr_cur_l: + pop edi esi + @@: + pop ebx + + cmp ah,8 ;[<-] + jne @f + push ax bx + call SetUndo + + mov bx,0x0001 + call SelTextDel + cmp al,1 + je .del_one_b + call TextDel + .del_one_b: + call draw_but_toolbar + call draw_main_win + pop bx ax + @@: + + cmp ah,182 ;Delete + jne @f + push ax bx + call SetUndo + + mov bx,0x0101 + call SelTextDel + cmp al,1 + je .del_one_d + call TextDel + .del_one_d: + call draw_but_toolbar + call draw_main_win + pop bx ax + @@: + + cmp ah,185 ;Ins + jne @f + call draw_cursor_sumb + xor [curMod],1 + call draw_main_cursor + @@: + + jmp still + +button: +; cmp [menu_active],1 ;если нажали меню, то сначала реакция на меню +; jne @f ;mouse.menu_bar_1 +; mov [menu_active],0 +; jmp still +; @@: + + mcall 17 ;получить код нажатой кнопки + cmp ah,3 + jne @f + call but_NewFile + @@: + cmp ah,4 + jne @f + call but_OpenFile + @@: + cmp ah,5 + jne @f + call but_SaveFile + @@: + cmp ah,6 + jz but_select_word + cmp ah,7 + jz but_cut + cmp ah,8 + jne @f + call but_Copy + @@: + cmp ah,9 + jz but_paste + cmp ah,10 + jz but_find + cmp ah,11 + jz but_replace + cmp ah,12 + jz but_find_key_w + cmp ah,13 + jz but_sumb_upper + cmp ah,14 + jz but_sumb_lover + cmp ah,15 + jz but_reverse + cmp ah,16 + jz but_undo + cmp ah,17 + jz but_redo + cmp ah,18 + jz but_sumb_invis + cmp ah,19 + jz but_k_words_show + cmp ah,20 + jz but_synt_show + + cmp ah,200 + jne @f + call but_OpenSyntax + @@: + cmp ah,201 + jne @f + call but_FindText + @@: + + cmp ah,1 + jne still +.exit: + ;push eax + call CanSave + cmp al,1 + jne @f + push thread + push msgbox_8 + call [mb_create] ;message: save changes in file? + jmp still + @@: + mov ecx,[tex] + call mem_Free + mov ecx,[bmp_icon] + call mem_Free + mov ecx,[options_file] + call mem_Free + push dword tree1 + call dword[tl_data_clear] + mcall -1 ;выход из программы + + + +txtErrOpen db 'ЌҐ ­ ©¤Ґ­ д ©«, Їа®ўҐам⥠Їа ўЁ«м­®бвм Ё¬Ґ­Ё',0 +txtErrIni0 db 'ЌҐ ®вЄал«бп д ©« б ЁЄ®­Є ¬Ё',0 +err_ini0 db 0 + +edit1 edit_box 250, 220, 5, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_cmd_lin, mouse_dd, 0 +edit2 edit_box TE_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0 + +buf_cmd_lin db 302 dup(0) +buf_find db 302 dup(0) + +err_message_found_lib0 db 'Sorry I cannot found library box_lib.obj',0 +head_f_i0: +head_f_l0 db 'System error',0 +err_message_import0 db 'Error on load import library box_lib.obj',0 +err_message_found_lib1 db 'Sorry I cannot found library msgbox.obj',0 +;head_f_i1: +;head_f_l1 db 'System error',0 +err_message_import1 db 'Error on load import library msgbox.obj',0 + +;library structures +l_libs_start: + lib0 l_libs boxlib_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l0, myimport,err_message_import0, head_f_i0 + lib1 l_libs msgbox_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l0, msgbox_lib_import, err_message_import1, head_f_i0 +load_lib_end: + + +i_end: + align 16 + procinfo process_information + thread: + rb 1024 +stacktop: + sys_path: + rb 4096 + file_name: + rb 4096 + file_name_rez: + rb 4096 + file_info: + rb 40 +mem: diff --git a/programs/other/t_edit/t_edit.png b/programs/other/t_edit/t_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c2fdb8074e77a8e73343f0a26a678a46673442 GIT binary patch literal 16837 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

0>YgLzyl#^YN%YgC*VnyE%8D` z+HgGj^9$aD(SwPkw-OUP1cV1xfzpvfbPPo~CtR}No+ouP;Q9v)j5-Hq4^BU1@|rQt zFl~Vx&XA0Z0t}%(y@ci-$}BNSkI^PME!{@o6KeD~EI}*nIDQ4aPj;G@UHMHvQ`*p= z)K-u8^P>lE2MWgL1cH2y1m7(Px3M+vl55h_JRNvb4dg9g#5VfCxk@1>9)Y0gaXZFA z$%7?<_IDHULH52OFJ8NIU=LMb-c(DNtVvyf_2Q{$pdsuxkZ}$q6FO!@QH1EjB<}a~ z!%#u5VwGqq&mWSkRFx&)#+aaPglh+U7*Z9qd|8 zWz}9Q&Q!Y#O<)2Y3EhL}1`N zP&AtOHm0^0L%a&xW)Nqevd_xk%$m6Hb=#bIOg3|-3+96CE;~ewMc`KlLpMG$no}*L zO&AL4u8L(W@^JdB(a`^B2bt$jl(o{*uFF%ue-;O)$&zxA?@~fwkI|?F*1iaS5=VX` zN+}vxV9RtEt3jY8b^WaH!X{2;V#%TNpwo8A6_N20`F!sJChB-}M%jG|emnGcFpycq zLAzO1;wey=VWlKOfIy%*J>)B$+xNt|uRlIKWP7<}%!=l@^d*NFkeXM(eF3(Eznv5Pw5Y*q-?P~ke^0w z_31>+PCUC04aFV(H3DP1_#d@Os8J(aM^xmWc8(yd!y64r2o~rP$e4pJ6bPU)4;{#_ zBojWpLS2$+gcy{r`ed4V=--K&>RNWgy32H(x3?$L9E#{7b~Z1S%~9fuJCp$(AjHia zXQTrraKyy_1}?}Z8hw%lW7NI!ll+XR?`n8*JOxskm8ik8;YM{YKM7h6DgT-paQc9A zu?YH+8mt35Ec|3)<~wAnCS&xC=<;T(StR1@ui!7BagX#%YXJ$%^Wu}Y+NN#9GMF&* zEe~23G{mOD_;_C3zcel;xKLLjqL;zVf3QqIv+{}R5m{>YSPbh^JS{$(w-GG0nMMFn4)%V%r+s2hvOJt&*QJG?J~bm z!hi)Itk>hEpcsqT_hxWdHq-s>OFG448$^_(%JO71YADXya&TJt?Bu41CopmUxIS1? zu-Ws;rJi_TKSX>X`iXuCijy#3)Yiqnqodd;lz53Oau^fNN_b^%YaRFLr`a63w&{!e zEnL(=^^mX6CyhY|Y7C2O4eJDpQpoJb^P;G&w#)sy)hH(CGd--AxyyW9Ue>pB{FfIi3Y82Hs;v&JT)O?lq-+wLe dBe)6hn(FHC8;dkW{a=PhDvBBkU*#-<{tsDbM6Cb- literal 0 HcmV?d00001 diff --git a/programs/other/t_edit/t_work.inc b/programs/other/t_edit/t_work.inc new file mode 100644 index 0000000000..b15cb4adf1 --- /dev/null +++ b/programs/other/t_edit/t_work.inc @@ -0,0 +1,1759 @@ +struct f70 + func_n dd ? + param1 dd ? + param2 dd ? + param3 dd ? + param4 dd ? + rezerv db ? + name dd ? +ends + +struct TexSelect + x0 dd ? + y0 dd ? + x1 dd ? + y1 dd ? +ends + +struct TexColViv + Text rb MAX_COLOR_WORD_LEN; // слово + f1 dd 0 + wwo db ? ; whole words only + endc db ? ; символ конца выделения (wwo&4) + color db ? ; номер цвета +ends + +struct symbol + c db ? ; +0 символ + col db ? ; +1 цвет + perv dd ? ; +2 + next dd ? ; +6 указатели + tc dd ? ; +10 врем. создания + td dd ? ; +14 врем. удаления +ends + +ColColor dd 1 +ColWords dd 0 +CURSOR_COLOR dd 0x808080 +WND_CAPT_COLOR dd 0x80 +WND_WORK_COLOR dd 0x0 +WND_BORD_COLOR dd 0xd0d0d0 +SELECT_COLOR dd 0x208080 +CUR_TEXT_COLOR dd 0xff0000 +WND_TEXT_COLOR dd 0xffff00 + +options_file dd 0 +options_file_end dd 0 +tex_colors dd 0 +tex_help_f1 dd 0 + +FkPos: rd 256 +Col dd 0 ;указатель на структуры ключевых слов TexColViv + +conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код +keyUpr dd 0 +err_opn db 0 ;ошибка открытия файла +err_sav db 0 ;ошибка сохранения файла +panel_id db 0 ;номер открытой панели + +ch_tim dd ? ; количество изменений в файле +ls_tim dd ? ; время последнего сохранения +co_tim dd ? ; время последней цветовой разметки +tim_Undo dd ? ; количество отмененных действий +gpOpt db 0 +mode_colored db 1 ; режим выделения слов цветом (0-выкл. 1-вкл.) + +txtBuf db 'ЃгдҐа: ' +buf db BUF_SIZE dup(0) +key_new db 0 ; символ, который будет добавлятся с клавиатуры +tex dd 0 +tex_1 dd 0 +tex_end dd 0 + +hed db 'TextEditor 29.12.09',0 ;подпись окна +sc system_colors + +wndMain BOX 0,50,440,150 +recMain BOX 30,23,7,10 + +curMod db 1 +cur_x dd 0 +cur_y dd 0 +invis db 0 ;режим показа непечатаемых символов +symbol_new_line db 20 ;символ завершения строки +dragm db 0 ;выделение от мыши +dragk db 0 ;выделение от клавиатуры +sel TexSelect 0,0,0,0 ;структура выделения +seln TexSelect ;дополнительная структура выделения +help_id dd -1 ;идентификатор для справки + +fn_icon db 'te_icon.bmp',0 +bmp_icon dd 0 +run_file_70 f70 + + +;input: +; reg = index +;output: +; reg = pointer to 'tex' struct +macro ConvertIndexToPointer reg { + imul reg,sizeof.symbol + add reg,[tex] +} + + +;output: +; al = 1 - can save +CanSave: + push ecx + mov ecx,[ch_tim] + sub ecx,[tim_Undo] + mov al,1 + cmp [ls_tim],ecx + jne @f + dec al + @@: + pop ecx + ret + + +;output: +; al = 1 - selected +IsSel: + push ebx + xor al,al + cmp [dragm],1 + je @f + mov al,1 + mov ebx,[sel.x0] + cmp ebx,[sel.x1] + jne @f + mov ebx,[sel.y0] + cmp ebx,[sel.y1] + jne @f + xor al,al + @@: + pop ebx + ret + +SelNormalize: + push ecx esi edi + mov esi,sel + mov edi,seln + mov ecx,sizeof.TexSelect + rep movsb + + jmp @f + .swp_f: + mov ecx,[seln.x0] + m2m [seln.x0],[seln.x1] + mov [seln.x1],ecx + + mov ecx,[seln.y0] + cmp ecx,[seln.y1] ;(sel.y0>sel.y1) + jle .end_f + m2m [seln.y0],[seln.y1] + mov [seln.y1],ecx + + jmp .end_f + @@: + + mov ecx,[seln.y0] + cmp ecx,[seln.y1] ;(sel.y0>sel.y1) + jg .swp_f + + cmp ecx,[seln.y1] ;(sel.y0==sel.y1) + jne .end_f + mov ecx,[seln.x0] + cmp ecx,[seln.x1] ;(sel.x0>sel.x1) + jg .swp_f + + .end_f: + pop edi esi ecx + ret + +SelStart: + push ecx + mov ecx,[cur_x] + add ecx,[hScr.position] + mov [sel.x0],ecx + mov [sel.x1],ecx + + mov ecx,[cur_y] + add ecx,[wScr.position] + mov [sel.y0],ecx + mov [sel.y1],ecx + pop ecx + ret + +SelMove: + push ecx + mov ecx,[cur_x] + add ecx,[hScr.position] + mov [sel.x1],ecx + + mov ecx,[cur_y] + add ecx,[wScr.position] + mov [sel.y1],ecx + pop ecx + ret + +;input: +; al = 1 - clear all memory +Clear: + mov [cur_x],0 + mov [cur_y],0 + mov [ch_tim],0 + mov [ls_tim],0 + mov [co_tim],0 + mov [tim_Undo],0 + mov [help_id],-1 + + mov [wScr.position],0 + mov [wScr.max_area],100 + mov [wScr.redraw],1 + mov [hScr.position],0 + mov [hScr.max_area],100 + + mov [sel.x0],0 + mov [sel.y0],0 + mov [sel.x1],0 + mov [sel.y1],0 + + cmp al,0 + je .exit + + push ecx edx + mov ecx,sizeof.symbol*maxChars + mov edx,[tex] + @@: + mov byte [edx],0 + inc edx + loop @b + mov edx,[tex] + mov dword [edx+6],1 + pop edx ecx + + .exit: + ret + + +;--- out_reg = Col[keyw[ind_reg]].Text[0] --- +macro ColToIndexOffset ind_reg,out_reg { + mov out_reg,ind_reg + imul out_reg,sizeof.TexColViv + add out_reg,[Col] +} + + + +InitColText: + push eax ebx ecx esi edi + +; mov ebx,fn_col_option +; mov esi,sys_path +; mov edi,file_name + mov ebx,dword[fn_col_option] + copy_path ebx,fn_syntax_dir,file_name_rez + copy_path file_name_rez,sys_path,file_name + + mov eax,70 + mov [run_file_70.func_n], 0 + mov [run_file_70.param1], 0 + mov [run_file_70.param2], 0 + mov ebx,[options_file_end] + sub ebx,[options_file] + mov [run_file_70.param3], ebx + m2m [run_file_70.param4], [options_file] + mov [run_file_70.rezerv], 0 + mov [run_file_70.name], file_name + mov ebx,run_file_70 + int 0x40 + + mov ecx,0x100 + mov edi,FkPos + @@: + mov dword[edi],-1 + add edi,4 + loop @b + + + ;init: ColColor, ColWords, ... + mov dword[ColColor],1 + mov dword[ColWords],0 + mov dword[tex_help_f1],0 + mov [help_id],-1 ;идентификатор слова для справки + + cmp eax,6 + je @f + cmp eax,0 + je @f + cmp ax,10 + jl .zifra_0_9 + mov al,'?' + sub ax,48 + .zifra_0_9: + add ax,48 + + mov byte[msgbox_3.err],al + push thread + push msgbox_3 + call [mb_create] ;message: Can-t open color options file! + jmp .no_colors + @@: + + mov esi,[options_file] + mov edi,ColColor + mov ecx,9*4 + rep movsb + + mov eax,[options_file] + add eax,32 + mov dword[tex_colors],eax + + mov eax,dword[ColColor] ;init: Col (offset to key words) + add eax,8 + shl eax,2 + add eax,[options_file] + mov dword[Col],eax + + mov ecx,dword[ColWords] ;init: FkPos (first key positions) + xor eax,eax + @@: + ColToIndexOffset eax,edi + xor ebx,ebx + mov bl,byte[edi] + shl bx,2 + mov esi,FkPos + add esi,ebx + cmp dword[esi],-1 + jne .no_ch_key + mov dword[esi],eax + .no_ch_key: + inc eax + loop @b + + ;init: tex_help_f1 + mov ecx,dword[ColWords] + imul ecx,sizeof.TexColViv + add ecx,dword[Col] + mov dword[tex_help_f1],ecx + + ;copy new colors in dir_list +; m2m dword[eax+28],dword[WND_WORK_COLOR] +; m2m dword[eax+32],dword[SELECT_COLOR] +; m2m dword[eax+36],dword[WND_CAPT_COLOR] +; m2m dword[eax+40],dword[WND_TEXT_COLOR] +; m2m dword[eax+44],dword[CUR_TEXT_COLOR] + + .no_colors: + pop edi esi ecx ebx eax + ret + + +;input: +; ebx = file size +OpenFile: + mov [err_opn],0 + push eax ;destination + push ecx ;for cycle + push edx ;source + + xor al,al + call Clear + mov eax,ebx + mov ecx,ebx + add eax,2 + ConvertIndexToPointer eax + mov edx,[tex] + add edx,ebx + push ebx + @@: + mov ebx,[edx] + mov byte [eax],bl + mov dword [eax+2],ecx + inc dword [eax+2] + mov dword [eax+6],ecx + add dword [eax+6],3 + ;mov byte[eax+1],0 ;col=0 + mov dword [eax+10],-1 ;tc=-1 + mov dword [eax+14],0 ;td=0 + + cmp ecx,0 + je @f + dec ecx + dec edx + sub eax,sizeof.symbol + jmp @b + @@: + pop ebx + add eax,2 + mov dword [eax],0 ; first sumbol 'perv=0' + + mov edx,[tex] + ; begining sumbol 'perv=0' 'next=2' + mov dword [edx+2],0 + mov dword [edx+6],2 + + add edx,sizeof.symbol + mov dword [edx+6],0 ; last sumbol 'next=0' + mov dword [edx+2],ebx ; last sumbol 'perv=last' + inc dword [edx+2] + + mov edx,ebx + inc edx ;2 = rezerv sumbols + imul edx,sizeof.symbol + add edx,[tex] + mov dword [edx+6],1 ; last sumbol 'next=1' + + @@: ;clear memory, need if before was open big file + add edx,sizeof.symbol + cmp edx,[tex_end] + jge @f + mov dword[edx+10],0 + mov dword[edx+14],0 + jmp @b + @@: + + call GetNumLines + cmp eax,100 + jge @f + mov eax,100 + @@: + mov [wScr.max_area],eax +; mov [wScr.redraw],1 + pop edx ecx eax + call CmColored + ret + +;input: +; edx = pointer to symbol struct +;output: +; edx = pointer to 'perv' visible symbol struct +IteratPerv: + cmp [tim_Undo],0 + je .else + push ebx + @@: + call GetTexPervPos + cmp edx,[tex] + je @f + call SymbNotVis + cmp bl,1 + je @b + cmp byte[edx],10 ;пропуск символа с кодом 10 + je @b + @@: + pop ebx + ret + .else: + call GetTexPervPos + cmp edx,[tex] + je .endif + cmp dword [edx+14],0 + jne .else + cmp byte[edx],10 ;пропуск символа с кодом 10 + je .else + .endif: + ret + + +;input: +; edx = pointer to symbol struct +;output: +; edx = pointer to 'next' visible symbol struct +IteratNext: + cmp [tim_Undo],0 + je .else + push ebx + @@: + call GetTexNextPos + cmp edx,[tex_1] + jle @f + call SymbNotVis + cmp bl,1 + je @b + cmp byte[edx],10 ;пропуск символа с кодом 10 + je @b + @@: + pop ebx + ret + .else: + call GetTexNextPos + cmp edx,[tex_1] + jle .endif + cmp dword [edx+14],0 + jne .else + cmp byte[edx],10 ;пропуск символа с кодом 10 + je .else + .endif: + ret + +;input: +; edx = pointer to symbol struct +; bl = symbol end of select +ItPoNextUc: + @@: + cmp bl,byte[edx] + je @f + cmp edx,[tex_1] + jle @f + call IteratNext + jmp @b + @@: + call IteratNext + ret + +;input: +; edx = pointer to symbol struct +ItPervColorTag: + @@: + cmp byte[edx+1],0 + jne @f + call IteratPerv + cmp edx,[tex_1] + jle @f + jmp @b + @@: + ret + +;input: +; edx = pointer to symbol struct +ItNextColorTag: + @@: + call IteratNext + cmp byte[edx+1],0 + jne @f + cmp edx,[tex_1] + jle @f + jmp @b + @@: + ;call IteratNext + ret + +;input: +; edx = pointer to symbol struct +;output: +; bl = 1 if sumbol not visible +; (tex[i].td+tim_Undo<=ch_tim && tex[i].td) || (tex[i].tc>ch_tim-tim_Undo) +SymbNotVis: + push eax + + xor bl,bl + + cmp dword [edx+14],0 + je @f + mov eax,[edx+14] ;eax=tex[i].td + add eax,[tim_Undo] + cmp eax,[ch_tim] + jg @f + mov bl,1 + pop eax + ret + @@: + + mov eax,[ch_tim] + sub eax,[tim_Undo] + cmp [edx+10],eax + jle @f + or bl,1 + @@: + + pop eax + ret + + +;input: +; bh = 1 - move cursor after text add +; bl = 1 - change time when text add +; esi = add text len +; edi = pointer to text string +TextAdd: + push ebp + mov ebp,esp + sub esp,4*2 + + push eax ;po_t + push ecx edx edi + + call GetPos + call GetTexPervPos + call GetTexArrIndex ;eax=po_t + + mov dword[ebp-4],0 ;count new spaces + cmp [gpOpt],2 + je @f + push eax ebx ;c_sp=cur[cn].x+Scroller->XPos-StrLen(cur[cn].y+Scroller->YPos); + mov eax,[cur_x] + add eax,[hScr.position] + mov dword[ebp-4],eax + + mov eax,[cur_y] + add eax,[wScr.position] + call StrLen + sub dword[ebp-4],ebx + pop ebx eax + @@: + + mov dword[ebp-8],0 ;count new lines + cmp [gpOpt],0 + jne @f + push eax + mov eax,[cur_y] + add eax,[wScr.position] + inc eax + mov dword[ebp-8],eax + + call GetNumLines + sub dword[ebp-8],eax + pop eax + @@: + + mov edx,sizeof.symbol + shl edx,1 + add edx,[tex] + @@: ;for(i=2;i cur_x + mov [gpOpt],1 + cmp eax,ecx + jge @f ; Row >= cur_y + .u1_0: + mov [gpOpt],0 + inc ebx + cmp byte [edx],13 + jne @b + cmp eax,ecx + jge @f ; Row >= cur_y + inc eax + xor ebx,ebx + jmp @b + @@: + cmp eax,ecx + jne @f ; Row = cur_y + inc [gpOpt] + @@: + cmp [gpOpt],0 + jne @f + mov edx,[tex_1] + ;call GetTexPervPos + @@: + pop ebx eax + ret + + +;input: +; eax = Row +;output: +; ebx = str len +StrLen: + push edx ecx + ;ecx = Row, from cycle + + xor ebx,ebx + xor ecx,ecx + mov edx,[tex] + @@: + call IteratNext + cmp edx,[tex_1] + jle @f + inc ebx + cmp byte [edx],13 + jne @b + dec ebx ;lenght minus 1 sumbol to paragraph + cmp eax,ecx + je @f + xor ebx,ebx + inc ecx + jmp @b + @@: + + cmp eax,ecx + je @f + xor ebx,ebx + @@: + + pop ecx edx + ret + + +;output: +; edx = symbol position +;output: +; eax = number of line +; ebx = symbol position in line +GetTexCoords: + push edx + xor eax,eax + xor ebx,ebx + @@: + call IteratPerv + + cmp eax,0 + jne .no_col_mov + inc ebx + .no_col_mov: + + cmp edx,[tex_1] + jle @f + cmp byte [edx],13 + jne @b + inc eax + jmp @b + @@: + dec ebx + pop edx + ret + +;output: +; eax = num lines +GetNumLines: + push edx + mov eax,1 + mov edx,[tex] + @@: + call IteratNext + cmp edx,[tex_1] + jle @f + cmp byte [edx],13 + jne @b + inc eax + jmp @b + @@: +;... +;dec eax + pop edx + ret + +SetUndo: + mov [dragk],0 ;заканчиваем выделение от клавиатуры + cmp [tim_Undo],1 + jl .no_work + + push eax ebx edx + mov edx,[tex] + call GetTexNextPos ;long i=tex[0].next; + mov eax,[tim_Undo] + sub [ch_tim],eax ;ch_tim-=tim_Undo; + mov eax,[ch_tim] + cmp [ls_tim],eax ;if(ls_tim>ch_tim) + jle @f + mov dword [ls_tim],0 + @@: + cmp edx,[tex] + je @f + + ;if(tex[i].tc>ch_tim){ // если создание символа было отменено + cmp [edx+10],eax + jle .no_u1 + mov dword [edx+10],0 + mov dword [edx+14],0 + + mov ebx,[edx+2] + imul ebx,sizeof.symbol + add ebx,[tex];.next + m2m dword [ebx+6],dword [edx+6] ;tex[tex[i].perv].next=tex[i].next; + + mov ebx,[edx+6] + imul ebx,sizeof.symbol + add ebx,[tex];.perv + m2m dword [ebx+2],dword [edx+2] ;tex[tex[i].next].perv=tex[i].perv; + + .no_u1: + + ;else if(tex[i].td>ch_tim) tex[i].td=0; // если удаление символа было отменено + cmp [edx+14],eax + jle .no_u2 + mov dword [edx+14],0 + .no_u2: + + call GetTexNextPos + jmp @b + @@: + mov dword [tim_Undo],0 + mov eax,[co_tim] + cmp [ch_tim],eax + jge @f + mov [co_tim],0 + @@: + pop edx ebx eax + .no_work: + ret + +;input: +; ecx = Col +; edx = Row +GoToPos: + mov [cur_x],ecx + sub edx,[wScr.position] + + cmp edx,[wScr.cur_area] ;[cur_y] > [.cur_area] + jl @f + push ebx + mov ebx,edx + sub ebx,[wScr.cur_area] + inc ebx + add [wScr.position],ebx + sub edx,ebx + pop ebx + ; ??? redrav + @@: + mov [cur_y],edx + ret + +;input: +; bl = 1 change time when delete text +;output: +; al = 1 if delete +SelTextDel: + call IsSel + cmp al,0 + jne @f + ret + @@: + ;call SelEnd + call SelNormalize + push esi edi ecx edx + mov esi,[seln.x1] + mov ecx,[seln.y1] + call GetPosByParam + mov edi,edx + + mov esi,[seln.x0] + mov ecx,[seln.y0] + call GetPosByParam + + cmp bl,0 + je @f + inc [ch_tim] + + @@: + cmp edx,[tex] + je @f + cmp edx,edi ;if(i==te)break; + je @f + m2m dword[edx+14],dword[ch_tim] + xor bl,bl ;n_tim=false; + call IteratNext + jmp @b + @@: + cmp bl,0 + je @f + dec [ch_tim] + xor al,al + @@: + cmp bl,0 + jne @f + mov ecx,[seln.x0] + mov edx,[seln.y0] + call GoToPos + mov [sel.x0],0 + mov [sel.y0],0 + mov [sel.x1],0 + mov [sel.y1],0 + @@: + pop edx ecx edi esi + + ret + + +CmColored: + push eax edx + mov eax,[ch_tim] + sub eax,[tim_Undo] + mov dword[co_tim],eax + mov edx,[tex] + @@: + call IteratNext + cmp edx,[tex_1] + jle @f + mov byte[edx+1],0 + jmp @b + @@: + + cmp dword[ColWords],1 + jl .no_colors + mov edx,[tex] + @@: + call TextFSColor + cmp edx,[tex_1] + jle .no_colors + jmp @b + .no_colors: + pop edx eax + ret + + + +;input: +; edx = pointer to start symbol +;output: +; edx = pointer to next symbol +TextFSColor: + ;eax = word_n + ;ecx = l_pos + push ebp + mov ebp,esp + sub esp,10 ;2*4+2*1 + ;bP = dword[ebp-4] + ;eP = dword[ebp-8] + ;fnd = byte[ebp-12] + ;f_color = byte[ebp-13] + + push eax ebx ecx esi edi + mov dword[ebp-4],1 + mov dword[ebp-4],1 + mov byte[ebp-12],0 + mov byte[ebp-13],1 + @@: + call IteratNext + cmp edx,[tex_1] + jle @f + + xor ebx,ebx + mov bl,byte[edx] +;mov byte[buf],bl +;mov byte[buf+1],0 + shl bx,2 ;ebx*=4 + add ebx,FkPos + mov eax,dword[ebx] + cmp eax,0 + jl @b ;if( (word_n=FkPos[(unsigned char)tex[i].c])>-1 ){ + + mov ecx,eax + ;while(l_posword_n && Col[keyw[l_pos-1]].Text[pos]!=tex[i].c) + .wh_3b: + cmp ecx,eax + jle .wh_3e + dec ecx + ColToIndexOffset ecx,ebx + inc ecx + ;cmp byte[ebx+edi],byte[edx] + push ax + mov al,byte[ebx+edi] + mov bl,al + pop ax + cmp bl,byte[edx] + je .wh_3e + dec ecx + jmp .wh_3b + .wh_3e: + + ColToIndexOffset eax,ebx + cmp byte[ebx+edi],0 + jne .if_0 ;if(Col[keyw[word_n]].Text[pos]==0){ + mov dword[ebp-8],edx ;eP=i; + ColToIndexOffset eax,esi + mov bl,byte[esi+MAX_COLOR_WORD_LEN+6] + mov byte[ebp-13],bl ;f_color=Col[keyw[word_n]].color; + +mov byte[ebp-12],1 +;... esi = Col[keyw[word_n]] + mov bl,byte[esi+MAX_COLOR_WORD_LEN+4] + cmp bl,0 ;if(Col[keyw[word_n]].wwo) + je .if_2n + push edx + mov edx,dword[ebp-4] + call IteratPerv +; mov bh,bl + + btr bx,0 ;1-1 + jae .if_3e ;if(Col[keyw[word_n]].wwo&1) + ;u1= !(isalnum(cont_s)||cont_s=='_') + call isalnum + jae .if_3e + mov byte[ebp-12],0 + .if_3e: + + btr bx,3 ;4-1 + jae .if_4e ;if(Col[keyw[word_n]].wwo&8) + ;u1= !isalpha(cont_s); + call isalpha + jae .if_4e + mov byte[ebp-12],0 + .if_4e: + + + mov edx,dword[ebp-8] +; call IteratNext + + btr bx,1 ;2-1 + jae .if_5e ;if(Col[keyw[word_n]].wwo&2) + ;u1= !(isalnum(cont_s)||cont_s=='_') + call isalnum + jae .if_5e + mov byte[ebp-12],0 + .if_5e: + + btr bx,4 ;5-1 + jae .if_6e ;if(Col[keyw[word_n]].wwo&16) + ;u1= !isalpha(cont_s); + call isalpha + jae .if_6e + mov byte[ebp-12],0 + .if_6e: + + btr bx,2 ;3-1 + jae .if_7e ;if(Col[keyw[word_n]].wwo&4) + mov bl,byte[esi+MAX_COLOR_WORD_LEN+5] + call ItPoNextUc + cmp edx,[tex_1] + jle .if_7e + mov dword[ebp-8],edx + .if_7e: + + pop edx + .if_2n: +; if(i!=1){ // не конец документа +; cont_s=tex[eP].c; +; if(Col[keyw[word_n]].wwo&2) u2= !(isalnum(cont_s)||cont_s=='_'); // не букв.-числ. символ +; if(u2 && Col[keyw[word_n]].wwo&16) u2= !isalpha(cont_s); // не числ. символ +; if(Col[keyw[word_n]].wwo&4) eP=ItPoNextUc(eP,Col[keyw[word_n]].endc); + + cmp eax,ecx + je .wh_2e ;if(word_n==l_pos) break; // do double - если слово точно последнее + .if_0: + + cmp edx,[tex_1] + jle .wh_2e ;if(i==1) break; + + ;while(l_pos>word_n && Col[keyw[word_n]].Text[pos]!=tex[i].c) + .wh_4b: + cmp ecx,eax + jle .wh_4e + ColToIndexOffset eax,ebx + ;cmp byte[ebx+edi],byte[edx] + push ax + mov al,byte[ebx+edi] + mov bl,al + pop ax + cmp bl,byte[edx] + je .wh_4e + inc eax + jmp .wh_4b + .wh_4e: + + cmp eax,ecx + je .wh_2e;if(word_n==l_pos) break; + inc edi ;pos++; + jmp .wh_2b + .wh_2e: + + cmp byte[ebp-12],1 ;if(fnd)break; + je @f + mov edx,dword[ebp-4];i=bP; + jmp @b + @@: + + cmp byte[ebp-12],1 + jne .if_1e ;if(fnd){ // выделение найденого текста +; if(!mode_sf1 || (mode_sf1 && strlen(Col[keyw[word_n]].f1->c_str())>0)){ + mov eax,dword[ebp-4] + mov bl,byte[ebp-13] + mov byte[eax+1],bl ;tex[bP].col=f_color; + mov eax,dword[ebp-8] + mov byte[eax+1],0xff ;tex[eP].col=255; +; return ItPoPerv(eP); // возвращаем позицию конца вхождения + mov edx,dword[ebp-8] + call GetTexPervPos + jmp @f + .if_1e: + mov edx,[tex] + @@: + + pop edi esi ecx ebx eax + mov esp,ebp + pop ebp + ret + + +;input: +; edx = pointer to char (byte) +;output: +; cf=1 if symbol is... +tab_all_num db 0,0,0,0,0,0,11111111b,11b,11111110b,0xff,0xff,111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0,0,0;,0,0,0,0,0,0 - tab_alpha_0,0,0,0,0,0 +tab_alpha db 0,0,0,0,0,0,0,0,11111110b,0xff,0xff,111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + ;db 0,0,0,0,0,0,11111111b,11b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +isalnum: + push eax ebx + mov al,byte[edx] ;al=offset + shr al,3 + and eax,11111b + mov ebx,tab_all_num + add ebx,eax + mov ah,byte[ebx] + mov al,byte[edx] ;al=bit + and ax,111b + m2m bx,word[ebx] + btr bx,ax + pop ebx eax + ret +isalpha: + push eax ebx + mov al,byte[edx] ;al=offset + shr al,3 + and eax,11111b + mov ebx,tab_alpha + add ebx,eax + mov ah,byte[ebx] + mov al,byte[edx] ;al=bit + and ax,111b + m2m bx,word[ebx] + btr bx,ax + pop ebx eax + ret + + +ShowHelpF1: + push eax edx + + call GetPos + push edx + call ItNextColorTag + mov eax,edx + pop edx + call ItPervColorTag + + cmp eax,[tex] + jle @f + cmp edx,[tex_1] + jle @f + call FindHelpId + @@: + pop edx eax + ;call draw_main_cursor + call draw_help_f1 + ret + +;input: +; edx = position begin 'symbol' struct +; eax = position end 'symbol' struct +FindHelpId: +; ecx = word_n +; ebx = l_pos + mov [help_id],-1 + + push ebx ecx + xor ebx,ebx + mov bl,byte[edx] + shl bx,2 ;ebx*=4 + add ebx,FkPos + mov ecx,dword[ebx] + cmp ecx,0 + jl .if_0e ;if( (word_n=FkPos[(unsigned char)tf[0]])>-1 ){ + push esi edi + mov ebx,ecx ;l_pos=word_n; + ColToIndexOffset ecx,esi + push cx + mov cl,byte[esi] + @@: + cmp ebx,dword[ColWords] ;while(l_posword_n + jle .wh_0e + dec ebx + ColToIndexOffset ebx,edi + inc ebx + cmp byte[edi+esi],dl ;&& Col[keyw[l_pos-1]].Text[pos]!=tf[i]) + je .wh_0e + dec ebx ;l_pos--; + jmp .wh_0b + .wh_0e: + + .wh_1b: + cmp ebx,ecx ;while(l_pos>word_n + jle .wh_1e + ColToIndexOffset ecx,edi + cmp byte[edi+esi],dl + je .wh_1e + inc ecx ;word_n++; + jmp .wh_1b + .wh_1e: + pop dx + + cmp ecx,ebx ;if(word_n==l_pos) break; + je @f + call IteratNext ;pos++; + cmp edx,eax ;for(...;i5Qqu{2oM4)s0Bu;uA@Th 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