From a99bc6c5daee90246f8e3d4152652040b3b1b05d Mon Sep 17 00:00:00 2001 From: fernando Date: Mon, 30 Dec 2013 17:10:32 +0100 Subject: [PATCH] Changeset: 120 Ajustes al menu --- foxbin2prg.pjt | Bin 277794 -> 304062 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 526 +++++++++++++++++++++++++++++++++---------------- 3 files changed, 361 insertions(+), 165 deletions(-) diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 93d38b90bce607ca4be85fcd870651e0c24f3e77..e43a5b078375e68ad57104ec88c2deffbb332913 100644 GIT binary patch delta 44436 zcmeIb2Yi)9_BVd!nOo9HZ-j7@(0eF~G)<#uNJ0{d2*wCOvkM^vu&wI_*4{D7>{>yw zS454v;tH0vAOgDf0w^w^C@4|{;{SVQp8MRJg5vJ){ro@g=l8n%g!xW;rkpwF%$YOK zz5D0b7ylU_MwHV`L|Lm>L_}Jv6RbI2@8Dd@9WZEcqlidceOq`}kBoo*^VKhRNOpIN zC@3$=t1KE{R5Edvq?914DlaN1EiW8flvh|(zWV*dsZsvKF-4VCg?W{EqsvRjSLWpx z=jD$pL8*v|Wrz*bk(yVMS3GWNUU`0T>4b?zRTV{*6Uz!p3yY95y;WL4aZz50lbX^h zl^bOjLSmRE>cTffny<>!@ikGRcc<)sBBdE<+?-4!L{%F2o=krY{+ z#|g!#r=nU?obH{j7DX$Irf{B+$TBOhu(4-WPOn+DHM3{V&-Tr%onJq@`ofVIYeBBX zvCTjH;7v9xy6E#PqAA^7UO42AdvZj1ygZvS)Z#Nla=iC|MW_!i zJxsJu(tcOtg(X=-B^_{+=dh%H{rY)yG#zc0G|@w0R9QN{v~Xf^sSBZ^DN*=4x^xOC zW?)(QnANY8jQ3ctOO<<)@c9=?H0`ki9`YXW;t9hOPR&Vl>Jhx`Xb-&FdqCoGQF97a zB46y00`6B7;qU%PyfOjN-eB~ucaJuwBgzU!AsGcdyEYzej;7SHhupW*A@^6J`DBXn zA1OfUJ~thR)_-I4-wyh3to|FP|HkXT3Hom$J&FPRgqjm6>Ih0>2nzE@^Pm<8j8i2# z5qkuYqsuCfY8-BGLE#kBG#PA~ADIJf<5s(ZNf?JfO6ZFU_(c!5cu`?N%NG?Ew0+Sr z-jjua40%x)4b&sUL(RRw;51%8DcP?FJfsR2Wi)4lqImFDMC|E61@@!>@7g#Z98H`j z?ZHm54!Jj4%^fgU1*l>L(n_r69!yUkMN)qCj6W`{_sy&s<_oRD!?T-&+117J&_phG zz15ui8|4lQ>hHm8oC;<$dmI5p$)k3! z(Tx_p4h!_Uk8D|(6Leuo(tlJhF*9!HP>UME12xQPRRbsJ8eIH(UZea((cgOzt&+dmFAyXd3sq9LM0Q&7nP4Iu#OxQ)=}v- zX)Gn$Nplf%{lhLAUo^hdd)PzZ_v6bdod_=#l#U;tS5g=fGrq`QQIR($SSpN56|{Z3 z;J1hC#G=B9<-r2sq($B_O1Mp`^Tu$}LNFw^-|n7%0h(xJq*DOB$tyn%Z!Q>{SDsf; zSyawrVP`(A==2s{4kN@sP8StB<-JsK+PJdOrR7dcgdQeTSAuSP$zNPLW?VsDvG;Ho zkM=l7_KJ1}H=K%#CKVOy*R^bn6=5cZOQM3-O_e5Ol$mOK;IIkfhIb--#YeWa^@K6&Z! z14PZW)bIiZBB1Vs5Mv1K@lXY*#LMG~8RED=Kjf>{5ma{6d*q;%%zrUo-XjI*u+K)4 z7oVUAsw`o($Hnxpdch+%jgeOiBZ6JLs+1@ZDW0*Sc_eg#{`XpGDte;mEu?z9kLWH) zUF?AhanVE(d1^H6`uJ#b1~05iA)A2JT{NYjsEn7Z7s{X) z`ighImkdv8{QeQ2-wVA;YjaRLq0MnYTg8iWR6N%GA_$WH)FWRZ57!ezTCMA#wV_x# z5J$V#A4NU3RLOTQU=S@SU+<*mA6S9<+uNtLF6;iDC{2IZcmg z=TtE2%2H;}MeUL?hBPMf|BWVZNdlC6?9t3lWeHTud;I*oienC_SEyl=MOo7uW#TI- zuWw7KCyM4%e+P@m>d$+<-@zT!^ogQVSG_qgY#`>CY=F67Ms$nyu5$Z|oH$<6mxPj; zs_83y;yj16GE>Qe!O-Fu|F+)3@?u@w*!kQDb#8&^6BR*0+lgA#PmC99)s0g`PvKX4 zCy3$!e-h1+_TKKRqk0>ww|P)w3W}@v9lJ_cB;R)gY!KS{`D)Z)ku2t`S56asllKtx z^L|Ey*PB-%4!P&5H)2GWlRFS=`51Aoo`_2PKZ zOT4XyPZp&Llu)Uj7%1EW)-czekbDH2LF{U=ae05T-m<*d98URq>%p2%j5DXfc#P`UKL3x z`@?M^#*)bkGlLOns_rC_l6xQ)QE_$@ghnX&LfYj91e+rX)u``8vOg+NA|U8o5Oi)m zWb0l$vM-(vB=C;sKqA5F)6IubgffLc$+Y4J59@G0g3f?$!T~2OD9*v?tzsAah>QR>l%Lu0 zR5shhgEnJPQvplP6uQlRv$nY4Wtn(cl93j1AXb-dPG>~g(%3}!>Kt*0GutKqL>7~Q&6UC=5Q`I{ps=LnjH#gaft0kYw(0`^Oo zmP)8Puqa^@0rLYZ?ik2!=prxfFs6)DC|*2^U6I4qay(9YDpn#71!w4v3|ybzOsz1; zsr|njp;IwJ?F}j@tR;m+g!_;7W-igrNP~Dr2Z#rQmS!f@jUMo%!Z3$k^stA`rVta^ z6OqAjHbq{9kX0P+>2W)do{6!rsh+SG)8u5r!RW<|xdf9S^xTxV2Im z!6alaqftD7Y*GBgb;$juTQgryI?#s(>`7%}(&1g}!A7PPpep_s)P&sUy4CDv;d5~Y zbz`$Q!H0(Q#kp%#U03G77tS?ui8vl{XkxWENB7admKnphu#s>bK0<> zQm|>gHdgG(*NdmK+Pzt%GV|?BurbV<+b}0FaxaY1CdR8{=GQDpjFjP$8Sp~)aWi0M zt!)@^yWG{^f+aIcZ4trT?3fIgS<`>VUQVPU=D^(L<7L{1+}nPg0e3^I{zC@b!(p%? z44C=ruQFifQvb&o@KwiPz-4X7iPU$SMapr~Q$+Z$aqCF|N;?*}X6EX!;{Xc>mu-&l zJ7UjC53p+{${@RL$*ub!Ex@h8Fb}z3cDKW=KldD)TYuv|Oa>ks!S~R`(zUU&_@b^C_wC3-wweihQs;y(Jw8kf1 z@FW`xOe=d%q`Klm(N%r;p@>&EhKY0$t#UhwUV~C>J58i*%Zb9jPy3N;oczz$lC zjiqKEG>s^hmTGaBNbvJ6htIeoIqEQ!*w^^*Yc>H0H}v7n%U6)7?yhSqz9Q*U;lXzM0r(j_thXKcDrW4U2?Y9D2RGeb7_^lODY3=*jmW-Jp= z4xTP}y5i}Er#qe=1bc8Lj}1#Wbln7lo#zf9wTn(QAv^IXRDG6nx-1{pW%DtU*}8_& z^QRwj7fHxHD6njRv+Iqd{mc{7`8+FvHtRF%UUbM66UOJ9Ra^rfQ2F&HrZ-*+1x;J7 z`|ut{OVQry&QHXHekl5=j5Vk%%&?Ocas9|saL|hO@!traCLV65CLb-2A8>(qSh3bo z`=V$+FYOl9AZ|eGYIuDzePgM*C@eG3nt$ACr8n*PRLm2ichl6*#RDP>_2wcYpId=) zo<{eRu?!BmXNLz0MSUgG)yOTP8_LYwBKo4N>a-o}uW758iEzd?F>>&+s@W2O_S-|> z#i$scMg(fUZkxCO6?ncB^Ky?>!Pk+7qhjhH)*&_{1EnAMQp`YUG_NlISfvj{VXW}_ z0I}?PcNQpbtUdyt%xC34Mg^*S;VW^L>Dhw`s4l}aHZ~?Cy`$Q)ZAU7mrG}7f#IK+fHvEfJ3$9njGDd1uJ}XlZV6ayF!V@gsUW5o zmL_tZfDRl^puC0|=hmJ#*Ee%v{p{Kq)idV~^O-e=1;B^g+Ng@xooGv=p^h{fp8x~4 zS~*a}Sq%w#GvPbwx8%~(KC!^0 zYssbcN;beG6YM9<-BZ{K5F5hW`-`Af%|gJ*W~GH@n-s_fmB=-;MZWaVe18t)LnF94 zO`>QXPq8>d+MWg(A5f-h);ep7ei39DP}DO1(!|e7&$H#PIWhA>?GMd8k_a zy+{%%>Z|WzhxDqLJt7Os1MCxKL8#FCJ2CrA;#G^G*!9szf=Zd;o^OTd^vK568EzU| zfI3pMn{s+$2riL_+z(mySa>N=1dcQ)!nPa3u(@(~uyViqJ*RfqKaiERJg(ie!xPNv zZgz6Qvf)&k*}hJQbl$H7h7X3IL+;_maH4ncY|p|9FFWL(#EjlnO6*~9miP>Gs@!ES zam+$aV2SH6mUtAFIEIh^)hm3Ds@^NIT%2rFLbQYTKxTnw=*?M9aDkV*j7q5UYn5=R z%Pc~~bhQ^@H)j!EYyb4D6fa6?}sUgAUe__9G$Awl9@REaNeL6fi03{sY42%lHj~Q;+{5u2C}&iW#kU z9XNd+x5;WlcXNJ)?rJd$$3bDyyv1mj!Z7hMK?>9Pn4x1U5=*zh)5DHg_oAx*2}^3@ zQIQUt2IwvhbVqzjd@QQbBxO?#Y5@hoi_K6C?>A6^O*OSGs0PL2gG$7CAex#0(V!M4 z8k{si+0YMQv!)l2ua@x0)RtauXL_+- zvkYsw<`)s0-SIb%|9GyqhfecDN5m*u(`JtS9t&I7fR{kaIkgu*{4G6t@k4k7PW7># z3*d-}qZdp9J0LReE@*v7##%aN3I}B^3nDJko;~<w$_j787sW(Ls?W`RaR zU=L(U24=8Xm_@Ji^CX6kv?tNsc-E#wF+|VWR74z5ma2lu5sn%rR8pf zi;GGcefyJcsj~X^NF?p=+{&Aq4?NlRxs`SJvdz}ho8|DhF1fBW?H1+5LE;47zLypk zWA6^%5Ae(9aiA)j=c179Bwi18@c+zYoShM(}&3%CN{IISYtyv(>$58agXuXOdpOFGaa01&W z;qvIxc`)M%!kj0tcOf#FzsSl{g7>pNmx^Z3`1P7FRM>k&7)9mA6^-Yj>=dR<*peJz841xc9IpE zWW|O@qS`K&U9G>JdfDwbSQxqgX|ZttB+d&nIE`k8*@%;dRK0&<7RD#e*l}ndGu|rO zU1jqp2a(Y^3JfDZJN)uQ1dg&X>KQzH9vo%2=n>lSvgHhZXd9(%GT=6{g(tL)rP@oW z{WgZ9jefkky_UhM5YjNN_17A92HPtPRcOCsOn6AoO;QH3bOIf~;1LfKz|%%3M>EYQ z*n&M#y>L0q0eq=FvU3S{Hj4H+p%SQ0-5Qf!AK zrE-d=MT%*(ihIyX^9OG#uzx^nyD4^;#wM!$*jS~3{ThyKxYxkMz$^tTJ`rrL120q1 zDf?uw2EnY37nez3f`m^9WYZxx+&*Kda+}tY5B>p;qy{D+Gpl)Aa+@}W8pl$TniNRY zMOjbLc{NH2AQ#;am-S2aeF^*lAN8=ayX3bXwA9k+R)W8SQ9O+5dmR|rzJNbJX}|pC z%nbWs^@F#uLmjLB+$S8J!b9C8p1{m428+2XycjSEha;)ii19Ub3o9?IuNgIJWJ|2Y zXQ9J2(2Mb33dcjV*;8Ug`Z(af~jQaI*nY!G!rW~6T zQBE@u477{-GRwHku#5<>j6t@~Kgg%E%`tph#<8I2t+F1m(w6P8yjB*e#l1z>Z1e&v zxMWgMc|~bC7MQ*4DuQcK&6{Z@!YM&7QRFDFJ+xhjDVmbucmM@&bXD0GwhBu#gQ+2R zx`OE)gX!!*#7ar~iDx5~eV>D=p^PDtir~M0y1AOBxd7J`^u0Eo*FnGQ5Lf)5pS{{L zMD(5kr+4jk#V>RCNh-Cvf~GzB`5h^(Qv%&cZ=DeAzuGj@O0t#<<}}vnLM^)68rW}u zHn%YCM}hV$Y8EW4FPJ-16MxHyM9kwvHE*8PRrFO8F0-;K*JIjy3P|6mBZs3=xPP!T z)`UR*U)T&|u082xETBcRz|mxcqS;7f(TqRX;aRj_sI3b{>adoD!p!o~wsdeYTS~Kl z&;lzA&A8Ea_6}F|>)?-hrFNRz(_nekpx3SL(JhEg(^Y~81jU+V2w|zccUsBOhUMGW zBGig_crV;%hOEjA*}%chkj0?a1+#0a>w<&UI*Nzw3^Qzl^sr6Zi1xy0=i_1Pz{3_= zgFSF=@hby|!vA9fx2)yBUH_jCTn967&IJ)YbRxF#r45}@YI%q9d&L^G^CWK%6oX__ zQN>mU9JixFui+WhL;Gp>bEYJ~i33F30`p|l7#-J^c&wIb<*;4Vk=1?=EA-masqScV zvWZ}}4S5J3ZN161PuGKdJ2k+!J;vwT_WFU@5R9BXjUD3U0~fNivC$m#9CE$rX8mcC zP|HiKo=IU;<-x{gdLQ4U>e&lxMxNm*I1sKT3>68gzAvn)2YJSrv#Rc;R`=s%t39hi z$o_cvDQs?4WqIYeAH$bcqQI*RVpbH&5Cc3=J&ubdN}MDTm9NZ7wEn7BkZXcy?$Wq- zS&|yN(@Is%m!j3zEwiFB_^yh+v;>hGa)pVfYrI)IU3u*!s(@D;`YKh@M|0gg^sas2DQs^;FyY=h&=nCk&sCXM+2@D%d&BWVUe?7tXL!2+F>@C z?Jygtp#|J-jHlZAiIvjs@`>K-*4x;J+|AeHg3Y`JnbP>d{)Ft%jV|9&4b>J~Y;D6@ zB-vYAwebqeb(+!tNFO_BB@cISkL<(!PBvrku7fYDVz*@M9@^pvO$`~gV;dOA!!Fzh zh0420Bu}>BDmao3pGe{OZ^Vf1A(~Y8QKLqTm_4_==A3?|XaB({SI7~fB_RhEMQ2zy zVW8(NW|TQ++bqi6ch`Q zPl4BA9h&;TpJc`OJJR8#maW%ZB#>F}aWFu7f6sfDKUf&Jr!oG?&@I;;a?j!`q{c=B za)d-fKcv=P*;7zE_IcR|przn5nhEgsJTSJ!Ee4l8_-?{A)nzUaE%v+?TNp6|v3s%e zw1GR8_sci)r7?ThV$HC1mAYHg3+V7jGXmkICBBLx+c@H5ZNbOGm0#UZHn+ZCN%b6v zd>zA+RMs$eM$OEH4T#gT!tBbtLT}sk`SgwE73Z8phX=Ly3fNaBmih9Ei$mYjUd4L1 zYG0%Zzih+^-m~=^x1eTDkKCSZ{?+vN+db89npH@LN0~R_ zPUE;q_@02z^yv6sVh>#ghy=3(3ee;BuB*AHLnMuRhoyxhMN@=LiW_gW!h7oVqc;&P zNYELVI8)huZbQC$c{CrgqH00sq51^VZU!ArHeCrU5IYCbd~`THkj6`-by;4Mj<9lr z?`?G(6K=S=@k=oFkKAfgg4G#bTLB&yvZpp5Yw%(lUNR1Q@(y5mHn-Ny9=mJS z&0apZ4QPK$?jpX;X=`b2>V;i7Z_16e(9xemWJycC#9vEk&@7nywJ{vp=ZWkoj{BDE z9K@VaI|n(|MYh=_8?O=e*cJ4}m(X6ZKXvRPrfRlYxL~!=dzg@p4i8!_VjZI-4+39v zY2S)q8xH0hLqVE6wno+X`Lr%-`A1fSI%}up9mJb@ux#!0#2esfw30XV+TTbgXw0mi z^&0jEQP=OZ(xO8)-AU4Hy5YFO_As;Q=1U)NCO4Pp&89oC&88a$Wqr8=>pIsY4gfbZ zyKUZJ1Zfzy!#ckLjRaRE@7Vy@EMl zU|#_nml1t@&X!|056(Fwv8^#5@37atpPST|xxTK?)Q>W$!TPm5047g3>9P$7EchsB=nNVWVH9KIy>>rCZ&}Z@ zquA(T1_T~NDsLC|)!M88(?4GuwAE9be`9{xMJ)vk3stf96NmPU?|}FJ9JFt;1%jIa ztE1k@fe6@nqlG=7%(e%Bz*22{K$>F@7%TNTvJWm`A$7UnRi!WGu(E}PlWr6$c-@4U z3Jg0?1FEdlLRMlcCg!tB8lunItIaT%Q027kZXKI#z55;#&|9I*+O-9Yh`*xw8YNfn z5Vxa4?^>yzJ7x0)P}CMT$OKil%!*EKeY(&>J7Y6l=tKq&9(YT_3YuQ1Y`!-uSX=0f zz5ttAxR03^$6>Z$R5Irdn5xmz#7SP!xYW%;bqVVxEQTZ8gwk!xIC?Tp&$*|itJ z59gq8?>d*y7`_mg{oe2c_t04z#LKuKE|0#V|2Bt6dRDb&R92roYE&;Z?wL>n9cY_;WbE@#UqHd-Uux9?Y;uPc1?9 z?&=uLu1=58XPo##$R)P_`tNG@)aDQk=|60@ZY0Y{eL|nl?u0yi3XWkNBZGAY2C9Y* zSJ?yQ4C1ei6YlPh8CMb`9W%(n*|y{%%#xizfFIZfhbY4X4_WbKja zSZ}>mg07y163-5Q&|8;Dt+xg(F(4+vxjg|RB%e3LhU%@3<>g<&bslH0^LS^Szpd?l z>cuZDuRj4UL%89sH<7TZI&PG4X(=vBSxz3hLUwhOH($rk*e@&f>ebl#zBiov?b*62*^Jg0SR+78~P6lKO8_= zq9MYOm|a;+8MC>7={&>~jmAPu9&$e-3}xw3wv2dy+meMRv-wvmfM`18-W{j_vdED# zJA*a+njmI5e2Y2wYb_7WWU+!4Di6`hfIBusWWXJp&o^L@&fkUegn&R~`PV`qvU@`d zDP`L)F-ZZb*PRc}!r4<8ayN~@)Jtm5tC?MuSGS<1p>}QqGvE)5A)OZ)j!5f|a0 zDmok~gCF1Gdjag`kCQ9y;M+!HLPLE_A76T$X~W3{YrMSC4%qCN;IWxym5{GA;+)%P z#C~(2<07sG-on1p(Yy9Qm9z7+rifRwW0@|`%2uERvijio=!01Yrvg4*jNM=H8dkte zwqQDJS2h>dIR~4Zy_q&~s-%yVVgfmAJ`WG(;ZSIyqNB(;L)F&1t#qrq+vw)_W&zW# z@ps2NQ}r=eXN$E{`*>VXH&oHhgE8x5AH;?+vu2^t(c+VGZY2Zn>~R; zVnx_UVpi^-H08KM@ z7g2wU3@y5Pw0R0L>U**UNa(}E6M@F@b=W@8v=0i;VZWfNCq0L=sY?IXr=+x`sH&<@ zana~X{4;)BVPSDmpYm~I##UB!Iw-tRC>@4_Ij&fL(xXMiR!GIiS+BoU#qiYU!A!#d zq2+kT&+rM<{|z{0y$c(D<8T9gU${o%{u~aI^{8x?*n)(Pib-lU9^h@xoc6(3bUNzC ziK%|0IhI76obf_(xA5D4e;-M!=gtPgTKgZ<5_n35RGF zCp=9dSwdRn=T*XIL8hv(kyr|5p_|#B?&5y&keEvxT$9}jP0}vimR1#%jVq|cx2$wi z?sO{1G~H-ffnOZ627GHt*YN$X*I-v*uXMgDgNE5#9MCc|d$zxDpV4^1+H#KDIj8B; z;)IJ=0`G@f*_F+T-Qa1lV$F*AGwy%g>1nZ>zR`_3`eE_{gX$d#rU64+g-L{Aj+o`ABF z>pA59v!}TW>OX9euNyYZ-F*54oh^O+M|n^k9|YETS~j$dht&_Q9fe!;pn%Qn8SVE% z?=>+*?M=j+p7zTeV;;0IzlV{+(U8KK_C+`x=w#ViY&LpJv3z=+tg>d~%T|1xXyqK! z$nOu)QQ2t(%4JJLtz=!1m-zE#=Z@g9UhecrpGoLwQ-PwH8%*&jIn-}~x zoAXJwfT%_}`+H@mQh(FT(H3Cct12wYpEyQ+GSiB*Dvdag_WqBFb7&WO@rDPlA^s=g zoT~{D=WOA?K^jx^NKkhb%OlI^#o$nmlxOn!uOxlERt1=4IBUo7fS91vW)qAfwNtdz zhPUeRNp1Ls+ESaHXZ~BM&7Z~m{5Pa_?*9g<%_`9ElG^xs<$ou&Sx?ZSxvkW81Uks* z_@uUUq_!>b|6{3L=!ndq{Qq52`!c73cE$d2NbUE3y@r-jn^l9L)CMiLCoCd@QhVm{ zNNr;fZOtyubcC-_6|jn1h%)Rz?ai=SyUa?n_64OruXrQ%?}5~RrKQw==2%iczzGjJ zFa9s2exR}!{sXB$8B+hAi-{+_V%|^+lYPj@k}eq>WF(`Z2o>vHeYPa-zn_k!RGIlHg1eb(Cj1h)?7HR!r_fRO~>w* z?V&B)&yBWsH5Y2Z@jo8#@7%Lwv!f@WV%Gi>X%4dG8KA8_^UurcEzzk>yd`K{S7R(zs z){)T?ZNguV%ZiT6M%er7qk`9uQ9!gXyX*U3W*cK%MjX>&q{_}@{q21{gILJ!0AZeMF2C_{y*@lM-V(^+G2Rk0*=fwa4uczrQr}6zbwhlZ zI0fG3Y#wCY0iNc#D-4SGj&ShIgf3_Wf4UI=@f{Mhf-O!XXW?7XIn3gH+B1ATu>}Ts zS&<9P>79oCGS48K4Y>!X;;2L>KEVrAs2xBqgH*I%7g3D&pT+%ww>|jUA@?-f+uk`E zY|~_9ngRzq_PXax{MW8tm7Ob+>+aW$Fr<`ePFmS=hm+PY`(nkI&?ygu*~bsN(BO|# z@RpRPSpQN*d-I6{n-#W1z@_@pkO=R*Z>2&Q9K%yB3GO5I!L~WpwD?$)**dd+J(bgJ zfEdiTCwOwsdW;9R6}7pN|Atd~6u!t}j29lA5W$~l33m*$*&fb^n|Z8HW8f3Wk5T71 z+vyA+uN)nG9~(A?w_q*01#Svwlbxd$J!yn7(;}Yi{_!NEBA*o zE?s*Bg*$dQ{R-P_ETp~;roLRuaA-82uUFyQ0EgT=1TIpW(ZhfpqXXd-&gL~Xj`{T~ zI`9FX=1dSTBY(3zniw$8nSP^uNWWY3-F8><^F`Zs+T{;?21WNB4GS0!b-Uth_o(1d z#+$A`W9iTNFp=2Z3~+j$Ox#5@%Pznt62K=)*p*?VOJ54J%VF&OA>UyM%{`t6vxZM} zgI;>L`M*8Md~UfS*caV!tc4PvAxJ}s?a^T@`C56Dc?$e&77YWH+T(wctND~xbvsr& zW3>B?w*4I1uEq(crs7(p z?H^*UgW>*GrG0VfjM=p7 znA#i;8Sq76UD|P$H$V7b?ip-y8#VfBH-FLmc)Up3=bZdGB+R8gSTTWuL#{8p)6=6` zan-uud}so0;g1x;J42aiWD92Mw|O3OK<1`6`fTZ%fLip0(JGKtYgV|IFOS$-Ah$E7 z#Tm(%qb$p`RMw=4Llpdsj|@FVi5d!J?#f^%j=||7DLi=c;SQW?4?L}_Clilzdr;9ds#;?l!K2gFy$KNuuHX z@L6F|0$$)S|8|6QYf+* zN5*hwEn{vmw`KJOVGR7f6xyC@z6{r{jN$Vivpn(pL9K+0UZ3p=8TL)!+_sFVb^n%( z3BIM>muMN|hnM;;d^xtp?FbF-lom2+?iNDEkum8lWDIB5G6q$I67%uNn2~(QbbLZ4 zcw20(?Zcd+V#mRU`8ju}ROuAZg@2D!VU^f9vcWE?Bye8CM>@e>QycHXfQ-ShieLYX z%<-Pf{EtW-=j;Y2x|Qm&czlzIeW6rzyv!0cs(-vJ^l#0;Q74YABdENl4z~nG*UqlV z!>`40To|3-P`jX}c=hh9ZSkO?LW3oq6 z-FbYgsS4ldu05x2W*3gekJr(-l5v$kGV18SRQzV0AZ!9*T&SolFFpNj6`de^h~esl z1le7zRA(m0tVCBIlMB}?=hmH9)3Bhn;bql`6!hom1nG-d-`8a5NUCh4>?n4s!wE7o zVQj964x^d46Tv_Kb+hV|D6_1xp{g`dCiQI^YBEI8EQ|nOVPOa4B`2BKNP;P-1O^~D zaG&<&Fts#MCZ|S?2oxDpv!JqePEEyv>N)i%ovi+mD08f;0`(QYAh}R^lVlHT`e>D# zB(u}v$Cy&lG#hrMYK+_Lg|#!QFCL?2C&_LR`D0CTBB`|rGBM(eaR#T7x*<=dW-dI{ z;CQOT2YI!3X9I4I&25-6zIb!7+LMGbZ;v;5dXQS0FMCwIQW7Ym=aWCK1P9Rt)ibLX zR9`+TkT!pA!vZLL_4D)UX6n0W^M9;0X+b)8uHM9i41eEw>Xu~L-}28>uO-V9tl{%j zbF%De^*B#`o+eY&h!h!-_UJ`iPEs_@XsD@PP=ojUp=QQ{6&I_j6q%iV@Dh_8V<+p6 zy3ejXyWe7UTZ+ud%=(K-kFe86qw6=@aVex0mCBT}uei+QiL&#Q*VLm!hwa!vN%o8V z=o*tV#m>obRpm7^<~GbUCcF!;HyI+SW={Qr3r*6I>yH8_cumCGcn@Neqt zRE%K5ttvWAre;jN%_PUtd@QZ{szQ)j-Fz&y`Pba0^3r6cRdl(BTB-h?1|r?Qk|!(6I_)7P(q(qUm{lex zR?!Wo%A~NW0(@wp;)ADDOh-&<$!Rj&%3rHyr^`;(4eQi3>1adum(|1Rva>b&6}28% zT&1Er%8p^irZ?m*E{UJ3+@J<@lwG`cZP4|rOFGF;NhfVKFAE{6>)%(`b(HBzlRx4l z7e1!oEcZ=cs27lwzHA#OVV53Ex@!kVdDPmDGRZsS8w2}~Nv2zy;?#wmWVUrjvbv*_%!!zu##y}ts@*URQ$Hxf z!M^D-B|WOM!68*m?!r-FrdKZf>J|g;ReG0x8iWo(WG+XAo6LV7WPr{bHbjHa%-^5L zQ4zW_>(OCqO(uqX=|~+Jns5Io726qOHTGmRpfgxoWxkr&S@yE_=Bve>Wl!tMBK1gT z*}1>>G%gy6k6(PH)s@!OFzMY|s($V)2P8jLW|AYQ0_zoQ z>D;+9-z`_C_`oyYn5zEZ!$4npmb%s_J6e~VtseBr%#$9RWy-`EaRdhi{&m(uTv{Dp zINKz}w@5PdyRL3o7Mee?UUkiqU30&$4>ZiM#c?GC#S;sQ>gSngTh`&$eq|p2LQV5L z^`|Tlc)x|}_AF4rvkTSpS(w_g3)SaY7@aRKRLxmf5R0!+owBifvu{y_*bu+*mInQMenAi|H_*6&nhee#V@aZbf z6&)It`T|GAghu6T<|zDbOR(VX4><}y$wGxrWy?R~xVX@4>$Y-Kye+T~e#IyOl~>mp z!IM9G?!1LHGq$TUa%4yUAGVwHAbWXmhl%mfg1LM&alpn#0ch4Ju}yuoJGoRM)QD+ZvWQg4AXH;y*0ZzCKY3Emo@h(ztPe7CP^S# zSGo2(&YWfs<7MA70&iK}MW$G9eXrJcfow?GqyF7R`iAV@V^TX%eRae9n!=j%YG>4p ztD7}<^Inq>%c@BE-1CDeg+HkgU1j#@L5EC^a9UUo(Oy%SU(o9)M`d7Et87^?uCOYv zpa2fK&)P{Xo4VtuTG>^0lk>?^Z+8VXZ}zHhyE1jhtEg_WcaM#oEYyf^j^Oua@rfMR ziOcTm9E^e^5=Z5BQ&ruh@01I=nItzidR$@mo(5`liuEhz2*sh16Ct)Za+--$H}=G` zpWRb^+6@c$;+{%$$HZN0mk4J9VXbUj;oZFhZE*U&+m15Cwx%Cv$ZSJwXY@Dmajl5D zs-kS_V3QOwo{=XYDjwAYC~?n8I*)GW**PDYS92!KT|+Pi2(drrZ6_F!6zY+*@UENM8$TOjIh*UA|I1 zWn!;Ev)Zrj@pCyo$7#fMe^h&W$mEpNxg6iciT`+>#=1x4E6z8Gt$TFhMI7JNDU|wW zgIniYv54clIr(P%MP1WV`i5SAnTcR6g$!Yn-eX5MfrQnHL8zHOWyqzrw_&+m6>ftO#?Q5%eSjJePqv}XI|sMoW>=qGTQ_Jwr=EyL8IHpjPDjF~$Z>|E3N;$qX6;ql@u_WCPT=c27h$U; z#?VkoZ=EIN{`O-QG9gb&>pZ-lVdlEar8B6#=@8D5VJ3HAE{h@zZohLs#hTR6&fOPh z;#$w%qdNX1XZG@wIp0Yw24TYrb zy0&z^Xq3Q;%3T+qnb9>%LHNiaHCUvsrq7` z?4&XqWC?D$>$fPoMuNtsBmUYnqe0#(RNMlYX3F30l)s~?+XDHd=zOOWbC(lZ?u1q} z9atzowUX|3V(xK5D^W9zo|JJ?l|Bu6-TgG`eQks6pfaD6k?OLi<($a(ova@;9erBvw_G10Mm_QzKJ(Jy zIeCwI`g!DE`<&dD^qG_Ob0_qLdh>ZXCUT1tv9&4V@AA*y#>rVR>hJ6DmaJD~3cges z`y7_Sm+NGKP(xmq9qu3UigdYmaxoS62AVbDb@^)Kw@x*?o3h@JcZts5IWgZmp*>D$ zuflvJH~sXcd|D>`;6(rEg!ZX_Y>?MR{^UgLZ<_Ruoa&B*7l*xs4mR=NiPS?*%+DMG zJrk|Q4{Dob^3ByUu_@(!d4W*3ekwaO-T8q$;!=-&Do-@iDPe&%i`vz+^;7x0jB-0M z9-&^^Ad{M2*djl-T>I%gv-Cs{wX{+u#y8ZQ6SC^~vnVQS6J~2sxpehsqu(sB!UeV* z3(47@m{aqvlWCoeh~p(4l07K*RBp9Q9L|?0**gZG4bV%>>$EqFLv7cyIV5egGAunL z_(@N3s?3g@VZOLF10qbVJzb_ph6p{wChJd=9m2RZPM$Dkl`QmB-gwztrH+>q!m&A6 zSnuQruLwxjLNe9ane@P}dRO-J>AQe>cH^C1Bsif&(;r{U>!K|` zCw7CCZKhlOP%Lx8XX;*_UEQGj7;bx8=9Tk2_6Ren_0?+Lc-hfTgifHA&auh4r&E3b z_JJWy*R&ie*xQt;ubz3#GPcBLYV+mJ;GyFsGv8S>V#lvvw1A~P(s?6jZ_!#`BhmcRZ?A{abeSEnLHyV310N?_bRIm#LES#|v*AXTHs6%`j&m|?NMpR`@L)Cu3nOi7kYP5wsu zWJ8!sUBofhA#mF_GFx6A;ZiRl;HOx8nay+^hN)9gU#ofAl)xFUS5&#yttfl#RUB3SFTtgHq#HXKt=75ojPu&y|mccOL1~Bt&n+8I73aldC#tK%T~%_Okm~a&S573qcZ6x7N{w*M4WwkL2P0fjT%hUM z2-id*Uq*?TDAy2O$LJ_mMIdL6S`+08>uBbxL9VhkQMQ<8<%)9gve;{JIlSpaWZ+R~ zkbz`@3^T+8WRj|1w5xZD$*>B9Gf-5Z!<)z?ayy$;v}=!BuA(cNu1;{(#`t~c*D?^t zkDkpKLm}2;G?!wGw$UnDO6xFIdFXuuMsF=*^5_R~kN$U?H2>y{t;o+Wi^JcwdUQ=( zXv`8_CLiV3(I#Q$X$kG6JU^x+4*%oV@QVf$S-E)e33MTr(I#t?CFLesO$BJ$X4;DX z3BiB2BKMPcF|R3PEd(rz9m?Z941IBI@LOhy_byxj7 zvso5r%tb@;Xb?h6Q54M)9J|SF3g+olDVCyGgW!2KmG4DZ=&D)|^HMPZ6S)Gt-HU0h z$NDu>%3aGx1B6&jPx@QTp@kQ3vjpOD#X$VK82_%5Tk$tn57|83i&Yr%mh;NwWhQAT zNck_`O`wuIQHW=W#oeh!C*rKd7@4KgbaOE}u~<&<__=qX1Jb$|H#+Ukw>Du+bgNr5 znj0*{Br9JxuH622pcQO3uN%|k`PP#mD*#RQV`z9-*2xJX1M|&Q?S%oN!CGPE$<=sK zHbx;%+$5?otK3v9Q){WU#J$8FXWcDw!5_f3#1CSXwGAln2#iBMriclY{}(U*?lgKc z-Vu-Z25Xh&-waaY%mVbtk*$lhzYe&$1283l2G0`~%FaWhe`k{?|7x2XP%UN>?Qg&J z$8Nmp@V!j-4<@FEm%W?GP{byx5buKA8^ltO^AFPen~!PzfdptT9=ApFs1WZIatY{V zi6-o}9AqIlP66g)Am*llm$fLOFVRj*^C(cMDd*Qi&rFS*akeWDMP79e6xDb+is}WL zC+5k;#EVt0C>_V^sQ}ZJkM%duy_kdx9mO=~=`x)2CK2SLLBijLH>|}wzV-~{1#eAX z62_Gt&+E89zwd=7sQp>4roJRr(8Kg7ono!fPraM*!*mwn7x5zzkGKH{zob6QcJ&T_ z!rJ1Khdvn&%$!p_DH=7>-5wv4Jb;6vUt9!K2pY zxVl#i0Nm)pgMXLfA%0NBj@Wy2xXjD(x%5c4dx-PyK_fN-zvh0IObnMi3le9emG`D; z)6g!i+RnbPT)K~53fF(*bLk=4;^FWqF8;fv>7_2N-Y$PpbQ7v6LwknO+ga~{$nK&0 z=|=7?s^urv{`W@Yc?fjyTKxMumk)Ue4IfNBvrWt*j)_=7TksIV8!;+-kYhQ*5Q?q- zivxb$UrN+r0@3+`aBfXB2w_=HbSW^r_NWKKJz+w=8F(phDZ(!=A{u7lO^7>hF}@yp zCD9gO_@~gQtBCHpnkWsL{z<^Y;E?q)o^HS=1JAsc=zBc5z=gp6W!Dis4yUYPh&UAy zOK&1dZ$!nwa37)J2p8j71Y7|;_#UDuD~UD$p9%Z}!sRf-^8V;-U>6LrpFTnKZ{Qn% zuUkdb`B|b7(77K1egolGpCf7jeoBy^z5)351)?R0corGd8ua`{>@0!*0sIcaeO@BE z6ZoINA0zB}mFQvM&w(F9I2WeZjlejir}YRA_<-mqU>sA^CkWTVOo}hw(m>!?_&vpc zj7|WbX!(g&0sQbO(F{b4K!zJ(Iz8tLqKklWiIQ$Y_(B*z8-W)BuR!=aSS{BBuK?}_ z|NA}riSRo$^e|(XD}QVz8Ul>dLu&km=rs~_Ht;`z=LZEhL5E?Hyb>74cXYQ$(9d2$w*&th_+Hrj&Vfbj0pKIRQLu@<2OHQ1U=N0UDy(4j zupxa090S}NR-{LV3c}B75x$j96mz!#h$NK6y- zCGai4EB+v8)*M0E;Y5E0?p!D65xDXU1bzZ|P6J$%E)g^p_%-0aBfRt)K{o^Az6y=J zR?uP)!`Hw9qn34}pvP_!bR-<}??%KKje`EQ3@?bljve?sC1~~E1eF6v16SXQ+je;7 z19t$v^)^8t+#zTQa02k+JK=wDm!NxqlYrMC{NjCro&-(Do=mPu@!Y|<&3)~I(?8gP|ep*lo@Ce`=pAod^IYHL~j|1-V zJf`F&3^VW?;Hb5jo>v5a@SQFNE`L=}C8#$h3abM62*NMEffIH=B5p%O-J61bc}vjA zzz+i7yuEahOyI6R zqqoAMwZK;c53?-Vn2J-R7@{wM|CDCY>W&tz1pX2Dj0}q|?PSr*z_{#5eKReZ=CkO1 zU@r*IlVwqUcdWnNh{!<1H{C573XhT44&YqCUm|=qd_wYoOMs(Kv}n{&i|T+U0q;im z+*2%C42)lJqNF^F-Y&N24d9i)mzG#`7LK`k#S%Ra?4D#%HGCwd1HTWPINzcj7h?U5 zi~|Eg#C7nEP`6lA4;&84f9zINxWb|-@kE)x4R>3#3Jd%?;E}**K4Q^x&snq&xE6Tk z^XSnl7M+%WRRjDD!aH8K=x@MJ0N?zEML)f5(ObZ81FzU%(PRF1v49iN07Oi~;(zEP zi~?{JmdfcLTl6>>z+B)yz*E8Gmu|P{KHy^D!mok9wdgb8xxiDtx9I1eEb5s=bQ$nn zI7WZ489fGG4Ls==i&lU^JPf=UxYR3gOFl}{PDK2Oh`XaDjgObqB^kqwrE>t`4>NGM z06Y?SA>9Hbxb1~4SWFMulZIT8rmz0qXRt)?u!VldiX(aFw-~snbS_Q-8`M|uEXFrG@J|gKR;I6=9 zAH|Tu@c1+^FYQxalyu`iB@KaWe*$>;>k^Ky$OHTm@JRpL=<)lKRv=;rBECoXPg^B@ z3)~S)t@Ad7AxlSP5S;+LbcdwyZzRnJ&I4{j_}*_NT>(56c;arD?!J@M2wVnyH^TG3 zmvk5KWZ=X-_|iHq-#-kz5ZHhJPe|M^={-bTjEK>=+dUYDM83RmCGb{+cO1ceZ{Qn% zm%@hl6r_mggf!r3Faj>gcF{cGL0HNIb6j-e5EpF)z6^Ne2`;)G!oNHdL1`%%}!)Ao*#=7VY;J1PAALpV4(_Hi!a3a?BgVSAf(R>&E zp)=7e;KvuZ=*z#kD9(q_yTTjQd{ zY@!!p!T;C2=%Ofyt?7vP3>kcHy69;Q-u&xbC$4Nr0ogca~>2)}|S8#ocaS4%qq27Th9Ziq+$ zo`mpEpSm!VkY2#cx4P(tZ7w<;I1@PaOZ?jTS1vjSI0twc!VheB(L&&Uz_%O%{@Fzl zT`(oUgAZdwkGLom7{3oi2NC||sEcxd{ih(}Itb-4mYYsR#Ax81o#t# zH$=H<8Sq5l`yfMi;YsKUrUUHHbko~-(t*zaKC`o%u7_C70mgS~}*=`yD%-q$L zQ+WDCp^?xB9zj7BV~mTr&XS!EU-4_CJIq(m_Paym{o)>`k z0q;ThFrKx*_|+oHQEuvo=QZGiz%vl8!}FFO5kDj1K7dttHUb|3{siF(x4P+Hz;WR3 z=Og?Yo&&&1z~3T#_j3FoJ#Zi3d+&AAY4^ElYEN)V;PVhpe!@*NfUAHD5xxwH!y~}; zzz-wb>jiXjJtA&G#LEC9UUpMhFNjOvc?du8DuxjF72qlV#J3{ecGH=_+kuyEaMPN1 z-K2nBkRK;}f*)hr=B6XSIlx^J?*5IN2KL6wfu|w-*B{+<7VsII|0g%yb=d8vD-dxp zB8DCTQ3(&d1iT#hJCBEM^?E3)4|)guD#D+~dZ-uhMqm+#pAt>;&|F~r^d${I`0NZ1 zJpggz^@=&HpW96fNuw0KGs9=r5@S?yasp(!k13;P>+5@+kiJt_Ry7QdguaR z0Ri_g!p~w8@EC9s@NR@Z^Uv_mMnrT%#JpJ^dS^B&1Re$a1Hx}Lpu+wj7~mm)_Rv;5 z4*{PG9CZms=L!$425tl{M0nIKxQGk zhnITk7T{UHulfPjlzHiHMEnsEXHM{9&+nxtfE$3PAiNmQ^S}#$V=KHg{|qm^1biE? zoaUw1&cY`UfS&`NR_&$hW_l^-1k5?`hqYe%+Z->|0)GeGzs^gW>d`6SaOfERIp=w4 z_F^w>K}0Dc8WHyV#Y>}4B$@!c@^UZj!gCIA1#r?8Udn9rQXTLj;0lDh|IJIU1K$RG zCc?w+^3oCDXMpPvo^qd;1`Gu!1-=g9a~|>1*}%Ixg8yF)aOSgKT84;$tYjd3?Q_t_ zPs0C!S0lU%PXzFA;K?tb0k3%}8+bNw9>QBTcxfT<&A{GwyyV974Dd4GQJZmB^D{4P z1b!8GF~axm^-|Aapr=mY{~rU~;SHlV5pfZ;mX{DdIX;Xo91g|kQCo3X3Kb{mQ*JqG*^!k=I#^FtVz611E<$6NGA>|C;9p-cexYk(e)jmqFS@BrYM z%PhJJ`+(8$*oXq3z1yO%p|*EQ!iWNI?Svn|84g7@8C(#!8R1-L-M6J+{__#hr(9A8 zsMV)nO`ZnqK1b5UP{DQr{{{GDs9={s1^WPvyBs(VD%hn^!Db?S6`nCr!FEFhi-Zbx zE$|b!;#%2*F3N|>bp!Bvgdc?p_7C8jfa{@xDX3sE*_i)Z5HS@hSTaMLCP=FnfIR~|bmkZjjfb##2RH@7=Ozf7 zuYvysTr|l;-$0hkg6#ML_&)5}SK`?Myao7-8V{Y0XFKp#;AqI2k04w8yAbg;BCebd zX$9dh3&JB3^K{C6XdPt1m5>Foz=NLlP#kzYOsLcy_zi^V3lBX3+y{6y!jFJe_W~Rip-0ye(r+EU}bk002$+dI&-QLzm7 zs2&>|ZlYs2M_dY01A>W>8uoVM@7JRh2IZ14mHOhid$F%2?)Z6?b)%M0&$_6Pwu{qn zvr6TWMAJUwbevvH>%8%BY^4tiuO8Ydfi10`(`hbyZex9?H_a}7w6s1gxRzCK?v=sz zS6}Ou&!VbF^=`=$tLOLj518uO=ua){kEPYNp{tC18tP0Vs#o{!&TQ4kdiVC-=h~>! zhd3e|UFd^4lgGyPeTMq+F%&EoD=g5f(MOuUMs!)BE4+Gbc1(gowJK@XIJIxzUendo z(8y_+iCiczdr)@zuz}esq>K?8)to_^at9a3qFA`~oPw6Dt2L3iR>NV&;X;iTx~m@M z8{%sfC^!z48iObg^?d5nF1u2#JK^6eZn%g))LN7J?3WFVp-?GJDiq^H?d<-BMo$XP zsxv)Lb*38D7(gD@dK9A7>8Y8r6Nur~^3V#OdMGn<@)~q@F*q%KgkhUEvu$?TmRD7q zmAE)da3SY)(&Tj}Ij-ZaUno7zaiQw%!!3RE+e0H9jsAPXE|jd_iR>EL=(Jj`+IK`? z+RYYJ3U7?XfTNsh+%9@kn!OXjXZLq>MUze`jox|<7pei8tJjSPYH8S!b+l`YI%v3v zCi~q3{q90xb*BDGW6$b$Mg&-ISJODfrRfyuP@&YvF@pNVc|&|X28%b?8)&|%fo4Yo zS131}EA{%hT%K!{rj0v9`){~I7l(nLZ!{qFx&c)hkmt+8gSN)kdcr?C@x}=Bhx9cs zy68rjE8hBCk)0LF8#U^e6s@1)iE7o?M{2y#Qp+i@l$S{D7~M(Cv@X`?>y6w&tk^R6G{D8kY6{}*avf_ zX=<27`6L!78d6xWRZbmDY5UYM=2WAvb3UoY1oMXC7u1nci%6eC9=hv#%G*7=uK`og zKCRA%zz=IZ=54a8z*C|GA3&rYaz>*vVPM+@*Sb=0tsBW=Ulhma z#r9HJNGJ@(#bpIQRPZ$_7z%$V^r2uFiV|iFg{SB{UkPCMRbLtuP`&>zvtQsXeJ0L% zu({%0m9^bibM3tLe;ud$@c*>qZ0NYxG(PGEZwvW1-ZtSs_cjm1+dOq|^CC>D+jyI2 zb8oBe_?IR9@7>4iX7_>O2KULayN{RQK3NX;@ed?dtVlUSv+v4C%QF@y8~o?{7JPp5 z9*9g}jf0)@ZOAoO${3NBk(1Xyd$3%W#HDL2Oq^9%EK`IhXRU?e!4l2(sUlK5*g#(n zFD^G?zFe0sb8&4Hi)KY=O0-|F?!`khayq zZ_LE%v42HmL%4CqLE-E&+13fo+e)9hA^e)@ii;zd zx?^aUlb+Hb>8ro&F5`NGc)0}+V=oBbO1PxAXg8eQ?cy*f9vaSec*x26OG9HImIP0c zJ%VKgc)?_lOc#QY5(FdOAHU))){bBa7Gzkuits6y0)`?VadrgjsLGW^Dr@SBnxL2(LSHe5vF@scXv13OnM4DDJ56b^kSLfm0Xr^<7#QSb+sI;go$?w znWZ}VUuIj2aco)<_tl!Mn(78q<9OlmrV<`>#Y|WtSpzqtYwQvhB+=_n7GlNXZ^ja6 zMqn~yT{DXH1+-~ZMGQ-Ftf*Hshl$&nz2fe$(0s*3GV4!6c5SP_>`S$NNI#TXe`-vj zR?+p=v@}dN{9~b--;tUU{ozKEUPLz4UhAsW29nnID!;g);j`Kx+IUPvu@L-HwZ7`+bLRUgabFQ*JBsHNJMPm&Igz4au2bb{CGl)hrW!CzO z#D5`8_m@H7keP<}ADo^&JlE$U3_ur7hfI`KTu@mVAk(4(wb7Nvgx!U-qR|h|;tfk_ zmpP%$FWN6HJx*Ra0#~ybE4~jrh3m>lDD7#0p@_08tnf2K6Mb`)7$_nPLmY-=PT`Kj zMK>6WLJ#S+vLV?Gjmgx`zg{-{#+wO}`7pE=#55-R`Rs2mqVc$=#%?sXMPj}6KRKt) zLttwd?-6*ae4MtAtPZqm( zSsTn465hZuTzT+LJT>6y2nnyuztF!eamN}Cvve3a?_?LZKn>@z=_r>yBYQ|zXoU*W zo-yFe0H^Wh{bv2oJMJ!Y-0k|>_h!d&b8SehzkUD1rBZd5vcjj(mm$VDtGEL>)?WHu zw6^z~-Ej<>5VOnPGMNXRc&)a++5s;nw5U1VLO zU@sAu3Y8X6(J*p$ul;%a4H0&LB^cE^HnMh+XH3Q#3qrNplrlwJp$ESOx0&dq$oRt z$2sUC>6%LSl~zm*aKGedl*wo!HI;=`0q)$D%ivpX`X2{h8CGuzzPF96)*HgH45v3J zWX$^8;49-#^C0q{$B=GhmC^S<3%-Z{o8a3LZM|Lawd(8tzYo5x5sGdJzB0D{+u$oB zRFfn9UGN?I->q5;|0ek6+}_IqZ|`N|6}t!Cye`7qhC00M@4_;|s@|hFgyjS%|4mqy ze(4Cy2#s~76{g0qvXgF%%iA;`VY#gy zmZK4t+o2uJ!!k~Egyr`&5q^NRk#V`Lka0PxPIJcP_V&2k!5Nn?X<}!*65!v~+~|(` zklTYuq@~Ekz8_dCvF`x$ld-vg*(!fxEtnCZ@AYpMp|u*n#tpQty5`#mW)fw&JXmBL z!PBO@i1A{HV&W0zC&ImWh}d?7xwLje>MD0p-Erv8+IpU;Z|lfB)0-Njadmfb{s@a= zZo=~@3$vQ3u@&WAcB5J!nOZPvjdcwBkBBzGs1=Gc7Gm=9l&c^p(yO ziTx*eS_Gjv!vpkljZ?D}$ElIGJJoJB%25`5quHs=?G`n+`;gOajN{y!n-ocNxjzU^nYVS7f*em3y16bP$`G$ujS$ zQ@vc|ZuBT=LGD*t^=F0zTombyzOk1mpBePkD?!ABE1{zDID6WPO&KBF&&uc`1DnYHRFJb_+mf3q3rI^1kV&KP&J3zJ7BmqF+6qzXh8YJRCM>oMU5+J8LN# z&asF6VKdBVwuhIa(zCy^du2h4Q83+Eu(%hV%A?M+Ug)Gz=NTS}aC7%6QKIq!n+o~Z z1(t8s!!)8wlDwM-eVejp8RGR<126l@*nnpd>EP0N6PuFfH+<_%Oa1Io8dj1WQCgP~ zrA>t7IYGVwF_PzQevM;e@rmEu2G!R1DXU(N7U>rez?R!mzuI=3i9 z(x1#SOvZJ*e$mqs>|b~~B*&HoBDlHM7j^s`8xL~tziI2jtNGT2WA{Uv4zxOK!9k3d z1M=m8@$Suxfxu|$ONpMk%B93Y*l>{XSZ)O}pJw4Wku{~FGHg4mDIv|P4RusQ4xv)F z=Ji6G*PG?2hek+qy6>SGLDKgQit;NgxJw{iCwJKn^Hn7TN9fmX4ZHPcIdi>SaX$F4 z*-pu~hKKrzZ8#M#PQJau+AvM9S{7rKYY!%i%*L;T%jjp3lMelG_Rt|l*)m>MD$TNB zRFiudvR(2~Ae0(S6xRm#KbO~;Rx0+6(8zI$CNuaea;L+Hx6-)UWZY`n@3fA60aTSq zk+g2K!_-vO^p~?H9{8O`oB9VCeVr-H*fY>GD7nR>&&{qf3L6m>a}%eAJLYERI#U`N zo~+s@C%QStF*$V^lha*J&M^57)|j08McGxPP_o#VkT5786^s-rOn+pFX_}D9sxcw; z`Z9%bEmw_s82Vo@E7^=owk2Tk8uH;)ORdd%3+S zw@i$;S=c%eE=&o>YqmU0Gq{Scu~7O+SHY^SZ>FSO^PseW`FN?EuWyK-9o*2^q1g#? zX(m{en*(x_R)3wXU+=Pq+=+)NM|?$!Rc9($dqz*-z*h^ts+8m!4NL=uZneRm>qiK4W?Hmuy4h(7yr4vhI4ULym zlb=~Ut#Z=OcD*NM%p6}>R#jA5lAK#rF(J;V?nx!n3yP-|=Hop@(ZrJc7E+BbUQz$S z{qug46y`*KeBX)@zFI-)8M%2wvqyd+hEL@2tgDzek+){Aiq#W&Ou+R-qn0bBm6l8| ztf(rg*d~5L2^%b~Pvp^TvxuI=TO=QBZ`8BUgu==aY}geP7tJoHxVxaZv|_}dfk{b5 zu?tNoO)VHdWm?%BF?|w`2`TDk6x?(}`@4ztlXyVJi`|W4cbZsOHMnqQReoy9fchSW z(n~6_^h_s%T%tW0VeQVn`8> zH&4&dYm1ah9-$;=idT!cMR_h$Y$@Wclu`Y};UXTcRAq_!A|9YJ=idSHvwMUUrr)jJYmKvI7U7T4aj!fnq zlm%tNXA1ACq*jQmDZHi9VVWqNf?nG+OP<2Xlg3vR7E~4HRFqCG9ACBiez9f>j}5&( z$0+u)7whk>ii^f|nI}$6;c*FEXiQmU@}R=0rP1~RA1WOu+t*Yw z@k#MpF%N0=-BZS?e)byZtx2U5jI(<`W0VDvczO*Fa=YtUgDoWPT!XQSe@+xmMW@`o zMEqka4-UUW809`xSyfR~mY)s}D5=B@sVo&@$5bAvw0T|}oyr43o?L3w^rWJaO89hs zw%)uSUJ#xoJS1S%%SN#aVb?i-U{Oio{mVqp68O%i%VhrtiTY*SP3f>w%q!usZi#Oh z)x$`hjWrH`9Z2o z!ncfDLVF+9p?P`6FH)uH<>n7g8X%_v&p$_EZaEJWiR;n+m`h?`8QMAIitsMy5n5JZ z!Gtwer5xkd53k^0gK*9WXkkfWPXqL+Xu?x$1&n+YAW|yOQ!fU|&!AYt5eqA;LiNhcjct#TDi_1ppjZQ>vCye) zbZA~VudP(M8kJA9H$YalBzM%IdF7B!Vr(T3RaSNpy(@XFHP`>Q5q>8suCifMIRXnQ0nGAWRJ9$w5k_m++RRtAthIH>|Xgx_% z|B~#ILg{Z0+$CmJ@s5E@1{lR|l#5AdOpeWi#P%v4udE#=&Qzh3?;9oDr@`&U-Yep# z@yH%e6d33DI)YF}X8*w%>G?S+gIY~Aik$IDFUn6Fn39|OT9L3$<8f}?rWkc1NR<7P zMEjFsz7pVL}8F?x4s|-hr#b47fYCdHmY&rty3uU6mbRMfD zSBZP4qnAFa5_6_wK8$}*yfht?S6w7_qda8J%Z5Eq$}F0hU0j%)SyWg&p>k!7Xq?VN ztp8kY6yq&R#k7*~2zj#3#1)3Nncr{IRUXX;Xu+GZmS=O-<6ET4tGVjleNyG!Ty^1~ zRQW)a?wnVXzm+=Q=GF3kkSag>DtpHfN&YZiP-3issl}z`(+bxd5#P_?Vb=Bb@}}T& z;ka>zMpdPGSmOHpY_PFvr|T4Oi@mq)`X)PD>>7t1^%rR;01JGd*EV%K)nMIZ8Rz$+8QdF+D7kKJ*5xK_~PMB6v_~r>|Gze}iO~`{Miy%rkr$4u_uD(SQ=3%SXP`HZ18ZhY?<(RLO*#rLcjFpGyM z_nsB^&EnBvozBTxVQ6t#K}BU@dg1h<@rC_M?kf%cRn*Ml!OG(o#MW6nHgnb=MnzYe zR)+MTFg-P`3}4b=6pr!Bx5xbc>G>&XX&Je>jrO7&Z>;@Q5jUH+;_v;%#K75TO|T-S z%!VJg@f1(Y=85rv!3r!!NFPbKSJ!n6}RjyYuN$Q_| zx}~EH&U^3F%1{}-i^zm_N8aLAHFmx4P41hYo3pIFaZ0oP9MTagPndD|T-VMb<^di( z{M{b6Hy__i>Z6?XkUoQS-*eliMx!#n@_qUTk2z+Cj|~Q*tp~U zd6Hspx#Ox~hTd@t=SCXb>^2wX8>(PAY^fq}E)PhUHTL%A{v0Ruan443St!cp@W7xk zMN;3wsgEw!S-+#9r^=1Oo9}2&mDIO%o-}5L!8g}CHCyUiIqR*NBi!cl= z?6K_1GJ|h!z^vD#zOA!fuT{d^3Olc?6G>Jc*wcN3EXO+*yB+_{2H$Mw3!Bupch-C1 zeKFt4w9+CBlR7f`d*(IeDkGq z_DOw`v!3r4V(>gP{gJPvKG~@s|E<9{pMU(2)OT{$Tk)fKWga5Tsl(#Kc|0Vr(-B$T z8Oer>w7G>9c=|edMEp9Bx9OgL)F|_p4rvsn;{nJ>WB;@l+5@CftOv+rV$ggZ>^AL$ zadsdH-!5vPVmqztm8x^1W>}4zC4`!dREzLmhlHQ(RDiyuBrD)o3xw1_S1fiaMD89w%=XzHzLFHicysoC$84mhQQPU%Z2p{LzMOoD2W*4)GyH+7=>SI#P5+eW#oSCoiv zoSJW)(s%aL@ht%R>8kiNLiG{COP%F@$XV}u5$3I4jlhGC{XTwlNR2W$!K$BaNr>9OBThLhopwrRq=XyvzOjXC z-OoC!oU>UY)mK^6uTIT*r}Udsx**^HfwtUebu+hIbgC~orQbzF3-uquuLat(wS}5% za{tp=cEu(Ki@Dc2HCJsZiRzn7bWKF{>uuFKRh)0DdW%1j)ZVtVWOWM{os&`I-c>!X z2%i)+Fm#hU$LVf#U&Yk?g6Rb%;|o>F%pN-E^+3@#MU7Hsg@}R_wVg67UVa9P)hTMI zGNX$DKT2@#YJg8F;8i=MOBm48D48k2)Z2hJC1mt5;HZRScZ&K{Tw+eDNK8|cm4Y0R zFFz}CWF>#GG7ar`C`as(%4c)LHTn5^j_8n%&n-D(JU)Bx$&vTrF1MP~hUH?{C^rN9 z&ckx??eXuL6=e_9i}1zc?12OE+X(#9p?j`4kgkR+59Wyr>1v3wYq)UBP{Wi-BSq^B zT)A(N$jVT|?;J8kUIC9D1M`hvG#D4NTWno!^dm~`KfAc0IJ-iu$WUXIu~xAsLye4> zHcwV}?2PMGk*?}(>$^ZGnQ9v);c?L}Q*EJSJT7wO=fjJ{tW31$)kWfkOtrN#{8_O( z6DBL36{j-Qc*X5`;oDD*)p|THO$*=kioY1xPxV(OEfod*)K*IAQn9d~8mCNOD%SN= zBbCKV#pnHC=!xZ`7AGnzmy570@cpYqdKP%eDlsVw7hJhUEX-1)`TDoGcr#0l;F=LF%Kvh72^F_fFwS{{sx~jMA9=1TFPEt#yHrD$cbm$P~EVKPG zNgc+RDtb>=yWl58zM^WfnyVWS=O?Q!Ax1A&;El!sie=?W5*x~PvrCGK?M$_sUc7)R zxTBDvcs#mVFOG{Df;Ko?@we5KA!OS#MZIX^Tj)XC`{inp7r)4o#JB~j4O?<+=`HH3 z)aZwgS_587V_6L?k_X4SY^tG)R72}U=A&w&d6AN0dyU={vmaI4h_#QZ_qFjcCDF&) z3OWiS(Vk7R59D>puTeCNjMZu=NA!G5ZJq4{+>h(*z~?e)Umh@V+Q%@FW0u!VqBmQu zAX)b!+Ob3D*KXkbO3G)lA)6jki=uXzlV~N)bCv&&^-H2RsG}z3qd0LTEwlArs3zjo z@snzRb?9KCrP)MN8R6lW=tIa)<`B&WW2c`sK;Af!=y9;jbPhpIwG!b8j<6R;e?pFa zl;|6968J;Nkqe2uFFgKN|Hm(NEx~!5-_0UfDvF ztP;He&a&ac?-ES{Z(?ZuWWc}PCz=VxyQna8DCgV#g$+(xtrya&7$@+qW8 zFM|(*pWaR6hrDPPxDNalbvr=R#)KOMABKDsSx#qgCp>786^YIc zY{lLQMR)KRWHVimz1$5R0R9H@hsTM^z=#)38As)x%Jb=(c_f8SVTB zqf4k@0*`x=(W~$td|8fM!GjhtI)ek>JtKGUg2jw>S2G#{_6ARV7Q4I8F{%Ljg4aNP z<0VG(!4_~9wka3j_y!yTPJD$?3Xa28D8iul8Bp>%qhG*DVBeLvyEWK%a3{J0{5s^* zZ!<~*j{`rs9(TKm(f#0A;4dM6jor!Dzz>7x*cjdU9-|Myi@+Bk&)bSR;8(zLAK-hK zIIQQOsDa`yK#y&Veg{j(Iu7}>9gMDnH-L+F;-Pgnb|^iFc7hK;{tVM00lWuX@(DJ_ zzhE>D{44l1$PGAN2VVfM+0W>ULyX=8hrti-{~kYFK8^YJ2NWZrSa}AUt(VX$Pk1GG zE94{Pb;+Ld0fyB(F#0%sY1h7Dl`{72CQImpIWcbSK!CNi{4S_No;V$ z`ollKJ+>(H!uty4fp>v3wV_>#Zq3n;*NU)qajgYN**p9dgMGO?zA$L8f zP=^4b6!00yU9sJ8A9w<|0l}dDm_i%Cv%xjT6>0^vGWc=u z`;Zs3r?x)Y~2dUCRY@fQjx=}t}&8JzZm zO>pd88CFhhvp6ZiL;+A7g6xMpKNj2t{6apbodukp19t~c9>-~95vLmP-C*-%POeDk zzXgv3Z-e|o1*f0Ev%rHZIoBe_zQd5nK-5xC(#W;T=wE!OOwxAiHhh^e1=&cs=Cz zkU9rpZT}uTZU?8|@W)Zcfj#9+duA`X>j0-sP{c!_9^~`@*3vWJPT+*E@k6q2I5mKK zfl>U|j&`KCe>7GL?$J ztHHBtR4QJh(mL>7@VvKFvaC}{iNy`#Yr@nQa0d=AD82%hKpweCB|q?G@Lb5BY*DEf z7~guLbC92TSEYX7I$3`!dgKF@CW0AaNqfj`aa4j8@DRu^Zc}Ln*aY4Nxp0R{4}q;_ zD11Ir={k-#pzr`c_Ax5&QR!WmN0=EY@{GyWW1R4SE4E8y%()Qm}`Z^Bd-y4bn7tjM2F~+En1`foUd=HKZ zEigsE7a;dhOf&`DAN)DwMsA`Ca4vX>YN8WZx95Y$fU7io#ni(@i@^7TH$v{^Zz3D` z74X-PzX`%QEinH7grY^Li9W{P9ctYYV+6ho*+0TWJ;0xX--|O*J`%VB@bBOkAg}3e zqUXTr2**D{t{P|}k5(8{@G8jf=9}nsZ~>z0Rmi`N$4#_G_5=2tV4@4i=SEwh_z((9 zxrwG#n&>m|cJLdJ8?mr|3qA^to^7J;I6ULAG=s-No`S;<{0q1m@+&xkz$d|9LOzTm z9DEuac)y8aO_T-Zi07jr`yrFa28V(z3r(~Y$69a{ z_$1^7)h5~m9t7S5`A=cOpH;ySfWw|Q(F?DdD54EK9^7e}iQZgkqLJX$;A4=Z*O;vI z929av`Q!}~O?t;fZ-c)CGh`j@Y$iGl{vEt>8^-%16Aem$Q)0b%4zl>%L=S=Gg0l~@ z%eN+a2izaL@;eiGA2HE);K|_CkncHRBHu(T_24mQP2_gY3Zqa|L(%1&i3VRb(f#0U z;Bv^b>rJ!+{0n#)#$WoO2ULyR+9G=bzhTlS#6zQaa2OV--jFx@X*3qx z7hD#EvPg}#f%CxwAYZq(#Mhmnm<>heRvPU{&?u@MRy(jyTa6w})+hzM7W_Ko%iT4a z1>O(t+e@RXDH?qWz5otO#RW296wI;0-3xh8KaFDABWVR6>#xzBIj{$A3mymA+Usr@ zgklI3uaDJeNCAFR5561x0OZA!HBvhuG=n!mUN=*t{@|_PuOMp=X!H_z7q}PXvyW-? z7Wf4CsmC>HSftTWu!a?J$zuE&1c6@ahzuBf`en^Z%U?q)ptuW)k04)oOQS8|B5;d! z8dYx6=mhuyaLs0o27G{T-6!G62V4Sq+%DV|cqjO`k2Kn_PornRN5Nl1o^(K?Prz5e z%OG#XaUOgXeDMG>O|P#s`W*@dOYT1o;d|&f+9jjK;5OfD)c3eXUBKE}D}do1um zaOIt5>Y8q*EbuDuKFAII%v1&511AGt*HpzUxoNQZN&q!~+Mz zfgIvz$cGl=VV9$EVTk_=pTS+>S!mv2YoUAVDtA1%|}kTG5||8_yJc=&mw2+h#8_Hhj_Xbr+1MP zM#4co!V&*B_Tm(coNosd0jLl-gwq8i2;<=(1Hc=wa}biD(jepmgTX&S9*z9qEAS9- z)M%A1&clj{{2&j!aX!kCAFM`xAhVpPr&NkZeh`ZF{~qu;$l1$aAAGMB3O^(W(~%&o zhGHx@`VEzqVSPUjmRZr@_pqGqz+W!G@>>oL->Fh7EXPlQ=Ysb`erqoh7VsnBk^7LW zVEMfWeiz*CxJn;k`F#Yd>ke?mNtFg-wOs|aegj1vVA}8aF$EMqfaCDY{0o*xS1gzA zNUN3xW8uJR7=+c%54<08G}eYxa7XZGklU{@(L%)j4De~ly%4%rBXr*dz6d!Gp*aGf zxDdP-@+5@f0|^-a$xsBJG~u~lqrnKRR&Xjp>25!bVi6f122c0b=<@_jEwBJTny8V| zL!)kpbT5N9Lmq`lX9KSS2WDv$fFlWkY&Cc<Wa zg8@|d61;w)Mi&vO4k2=V2VU{KM)MJfh9eMN0QW#3DnsDGwkcf($L-cA9C74+FoR$0 zgZviagb8uL4?O0aMsFf6yblfnkG`tWOvHh9R?Pd3P$VD@+=Y3+7u*H>7vy5h^S+q3 zDd6Y?{A4xDOz(k*gSSE+glYC7rrAVr1LV!a&1C9|Ak}m9G<^S~a`cR%k_n|VDn}QT u$uF`Lj4m!6Ur;={3SY$>jUUI)99LA5EDBbr9m3^bRFwZ=Je~hJYW_d^0(Mpa diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index cea648327c9b8d06c8ca5042e9308f6b75541e9a..f953f01b52bfff948f1384d977a4a5ef5b6d0489 100644 GIT binary patch delta 72 zcmZ3-vyO+wfR{&ZBg+mJHWL#|6GQXKhgfQ~!AuhdC~yl=P;gTK0#g&PSQSv5hmnCn N!Nl0yVsa+yQ2-Dt4Nd?6 delta 72 zcmZ3-vyO+wfR{&lBg+mJHX~z03v=VihgfQ~flPCA3kE1~3sF#TQvd=}6BCe76%aEs QGB7BZm>QW+&SX6b01f&LI{*Lx diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6ad5bd7..0e372d4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -693,7 +693,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.c_OriginalFileName = tcOriginalFileName .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- - .o_Conversor.Convertir( @toModulo ) + .o_Conversor.Convertir( @toModulo, .F., THIS ) .c_TextLog = .c_TextLog + CR_LF + .o_Conversor.c_TextLog && Recojo el LOG que haya generado el conversor .normalizarCapitalizacionArchivos() ENDWITH && THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -793,12 +793,16 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE RenameFile LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS Scripting.FileSystemObject - LOCAL lcLog + LOCAL lcLog, laFile(1,5) THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) lcLog = '' DO (tcEXE_CAPS) WITH tcFileName, '', 'F', lcLog, .T. - toFSO.MoveFile( tcFileName, tcFileName ) - THIS.writeLog( ' => Se renombrará a [' + tcFileName + ']' ) + IF ADIR( laFile, tcFileName, '', 1 ) > 0 AND laFile(1,1) <> JUSTFNAME(tcFileName) + toFSO.MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(tcFileName) ), tcFileName ) + THIS.writeLog( ' => Se renombrará a [' + tcFileName + ']' ) + ELSE + THIS.writeLog( ' => No se renombrará a [' + tcFileName + '] porque ya estaba correcto.' ) + ENDIF ENDPROC @@ -1156,8 +1160,12 @@ DEFINE CLASS c_conversor_base AS SESSION * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF THIS.writeLog( '' ) THIS.writeLog( C_CONVERTING_FILE_LOC + THIS.c_OutputFile + '...' ) ENDPROC @@ -1263,7 +1271,20 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE doBackup - LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3 + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toEx (@? IN ) Objeto Exception con información del error + * tlRelanzarError (v? IN ) Indica si se debe relanzar el error + * tcBakFile_1 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,frx,lbx,dbf,dbc,mnx,vc2,sc2,pj2,etc) + * tcBakFile_2 (@? OUT) Nombre del archivo backup 2 (vct,sct,pjt,frt,lbt,fpt,dct,mnt,etc) + * tcBakFile_3 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,cdx,dcx,etc) + * toFoxbin2prg (v! IN ) Referencia al objeto principal + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3, toFoxbin2prg + + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3 @@ -1273,6 +1294,10 @@ DEFINE CLASS c_conversor_base AS SESSION tcBakFile_1 = FORCEEXT(THIS.c_OutputFile, lcExt_1 + lcNext_Bak) DO CASE + CASE INLIST( lcExt_1, toFoxbin2prg.c_PJ2, toFoxbin2prg.c_VC2, toFoxbin2prg.c_SC2, toFoxbin2prg.c_FR2 ; + , toFoxbin2prg.c_LB2, toFoxbin2prg.c_DB2, toFoxbin2prg.c_DC2, toFoxbin2prg.c_MN2 ) + *-- Extensiones TEXTO + CASE lcExt_1 = 'DBF' *-- DBF lcExt_2 = 'FPT' @@ -1295,20 +1320,25 @@ DEFINE CLASS c_conversor_base AS SESSION ENDCASE IF NOT EMPTY(lcExt_1) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) - IF EMPTY(lcExt_3) + *-- LOG + DO CASE + CASE EMPTY(lcExt_2) + THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) ) + CASE EMPTY(lcExt_3) THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 ) - ELSE + OTHERWISE THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) - ENDIF + ENDCASE - RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) + *-- COPIA BACKUP + COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) IF NOT EMPTY(lcExt_2) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) - RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) + COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) ENDIF IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) - RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) + COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) ENDIF ENDIF @@ -1398,7 +1428,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* PROCEDURE getDBFmetadata *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -1456,8 +1485,12 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* - FUNCTION GetTimeStamp(tnTimeStamp) + FUNCTION GetTimeStamp + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tnTimeStamp (v! IN ) Timestamp en formato numérico + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tnTimeStamp *-- CONVIERTE UN DATO TIMESTAMP NUMERICO USADO POR LOS ARCHIVOS SCX/VCX/etc. EN TIPO DATETIME TRY LOCAL lcTimeStamp,lnYear,lnMonth,lnDay,lnHour,lnMinutes,lnSeconds,lcTime,lnHour,ltTimeStamp,lnResto ; @@ -1537,8 +1570,12 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* PROCEDURE get_SeparatedLineAndComment + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Línea a separar del comentario + * tcComment (@? OUT) Comentario + *--------------------------------------------------------------------------------------------------- LPARAMETERS tcLine, tcComment LOCAL ln_AT_Cmt tcComment = '' @@ -1553,7 +1590,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* PROCEDURE get_SeparatedPropAndValue *-- Devuelve el valor separado de la propiedad. *-- Si se indican más de 3 parámetros, evalúa el valor completo a través de las líneas de código @@ -2282,7 +2318,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -2308,8 +2343,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) ENDPROC @@ -2818,28 +2857,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC - PROCEDURE createMenu_RecordHeader - *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * tnMenuType (!v IN ) Indica el tipo de menu. 1=Menu, 4=Shortcut, 5=TopLevel Form Menu - *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS tnMenuType - - INSERT INTO TABLABIN ; - ( 'OBJTYPE' ; - , 'OBJCODE' ; - , 'PROCTYPE' ; - , 'MARK' ; - , 'LOCATION' ) ; - VALUES ; - ( tnMenuType ; - , 22 ; - , 1 ; - , CHR(4) ; - , 1 ) - ENDPROC - - ******************************************************************************************************************* PROCEDURE emptyRecord LOCAL loReg @@ -4104,8 +4121,12 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -4118,7 +4139,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo la librería THIS.createClasslib() @@ -4139,6 +4160,8 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN @@ -4375,8 +4398,12 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -4389,7 +4416,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo el form THIS.createForm() @@ -4410,6 +4437,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN @@ -4654,12 +4683,14 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toProject (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toProject, toEx AS EXCEPTION + LPARAMETERS toProject, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toProject, @toEx ) #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -4672,7 +4703,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo solo la cabecera del proyecto THIS.createProject() @@ -4693,6 +4724,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN @@ -5373,12 +5406,14 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toReport (@! OUT) Objeto generado de clase CL_REPORT con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toReport, toEx AS EXCEPTION + LPARAMETERS toReport, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toReport, @toEx ) #IF .F. LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -5391,7 +5426,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo el reporte THIS.createReport() @@ -5411,6 +5446,8 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN lnCodError @@ -5767,12 +5804,14 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toTable (@! OUT) Objeto generado de clase CL_TABLE con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toTable, toEx AS EXCEPTION + LPARAMETERS toTable, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toTable, @toEx ) #IF .F. LOCAL toTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -5785,7 +5824,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toTable ) @@ -5802,6 +5841,8 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN lnCodError @@ -6010,12 +6051,14 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toDatabase, toEx AS EXCEPTION + LPARAMETERS toDatabase, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toDatabase, @toEx ) #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -6028,7 +6071,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo la tabla *THIS.createTable() @@ -6048,6 +6091,8 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN lnCodError @@ -6068,7 +6113,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin STORE '' TO lcIndex, lcFieldDef toDatabase.updateDBC( THIS.c_OutputFile ) - *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) CATCH TO loEx @@ -6170,12 +6214,14 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toMenu (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toMenu, toEx AS EXCEPTION + LPARAMETERS toMenu, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toMenu, @toEx ) #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -6188,11 +6234,10 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo la tabla THIS.createMenu() - *THIS.createMenu_RecordHeader( lnMenuType ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toMenu ) @@ -6209,6 +6254,8 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN lnCodError @@ -6293,8 +6340,6 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin lnCodError = 0 STORE '' TO lcIndex, lcFieldDef - *THIS.createMenu_RecordHeader( lnMenuType ) - toMenu.updateMENU( THIS.c_OutputFile ) @@ -6375,8 +6420,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) ENDPROC @@ -7845,8 +7894,12 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -7937,6 +7990,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el VC2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -7980,12 +8035,14 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toModulo, @toEx ) #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -8098,6 +8155,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el SC2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8143,8 +8202,12 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -8397,6 +8460,8 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg ENDTEXT + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el PJ2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8448,7 +8513,16 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg ******************************************************************************************************************* PROCEDURE Convertir - LPARAMETERS toModulo, toEx AS EXCEPTION + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto + * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -8518,6 +8592,8 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg THIS.write_DETALLE_REPORTE( @loRegCur ) ENDIF + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el FR2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8562,8 +8638,12 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Contenido del texto generado * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -8583,6 +8663,8 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, THIS.c_InputFile ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el DB2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8635,12 +8717,14 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toDatabase, toEx AS EXCEPTION + LPARAMETERS toDatabase, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toDatabase, @toEx ) #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -8660,6 +8744,8 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el DC2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8704,12 +8790,14 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * totoMenu (@! OUT) Objeto generado de clase CL_MENU con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toMenu, toEx AS EXCEPTION + LPARAMETERS toMenu, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toMenu, @toEx ) #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -8726,6 +8814,8 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el DC2 IF THIS.l_Test toMenu = C_FB2PRG_CODE @@ -14071,6 +14161,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] @@ -14125,6 +14216,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE .LOCATION = 1 .SETUPTYPE = 1 .CLEANTYPE = 1 + .ITEMNUM = STR(0,3) ENDWITH FOR I = I + 0 TO tnCodeLines @@ -14501,6 +14593,75 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE PROCEDURE updateMENU + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcOutputFile (@! IN/OUT) Contenido de la línea en análisis + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcOutputFile + + SELECT TABLABIN + + IF THIS.l_Debug + STRTOFILE( '', 'Opciones.txt' ) + ENDIF + + THIS.UpdateMenu_Recursivo( THIS, 0 ) + ENDPROC + + + PROCEDURE UpdateMenu_Recursivo + LPARAMETERS toObj as Collection, tnNivel + LOCAL loReg, loEx as Exception + + TRY + IF VARTYPE( toObj.oReg ) = 'O' + loReg = toObj.oReg + INSERT INTO TABLABIN FROM NAME loReg + *APPEND BLANK + *GATHER NAME loReg MEMO + + IF THIS.l_Debug + STRTOFILE( REPLICATE(C_TAB,tnNivel) ; + + 'ObjType=' + TRANSFORM(loReg.ObjType) ; + + ', ObjCode=' + TRANSFORM(loReg.ObjCode) ; + + ', Name=' + TRANSFORM(loReg.NAME) ; + + ', LevelName=' + TRANSFORM(loReg.LEVELNAME) ; + + ', ItemNum=' + TRANSFORM(loReg.ItemNum) ; + + ', Location=' + TRANSFORM(loReg.Location) ; + + ', Prompt=' + TRANSFORM(loReg.PROMPT) ; + + ', Message=' + TRANSFORM(loReg.Message) ; + + ', KeyName=' + TRANSFORM(loReg.KEYNAME) ; + + ', KeyLabel=' + TRANSFORM(loReg.KeyLabel) ; + + ', Comment=' + TRANSFORM(loReg.Comment) ; + + ', SkipFor=' + TRANSFORM(loReg.SkipFor) ; + + CR_LF ; + , 'Opciones.txt', 1 ) + ENDIF + + ELSE + IF THIS.l_Debug + STRTOFILE( REPLICATE(C_TAB,tnNivel) ; + + 'Objeto [' + toObj.Class + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ; + + CR_LF ; + , 'Opciones.txt', 1 ) + ENDIF + + ENDIF + + IF toObj.Count > 0 THEN + FOR EACH loReg IN toObj FOXOBJECT + THIS.UpdateMenu_Recursivo( loReg, tnNivel + 1 ) + ENDFOR + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY ENDPROC @@ -14514,6 +14675,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -14522,6 +14684,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 + n_ParentCount = 0 PROCEDURE analizarBloque @@ -14541,12 +14704,13 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE TRY LOCAL loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcSubName, lcComment, loReg, loEx AS EXCEPTION + LOCAL llBloqueEncontrado, lcSubName, lcComment, lnLast_I, loReg, loEx AS EXCEPTION STORE '' TO lcSubName, lcComment - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg - loReg.OBJTYPE = 2 + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + loReg.OBJTYPE = 2 + loReg.ITEMNUM = STR(0,3) *LEFT( tcLine, 13 ) == 'DEFINE POPUP ' llBloqueEncontrado = .T. @@ -14576,13 +14740,18 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' loOption = CREATEOBJECT("CL_MENU_OPTION") + lnLast_I = I loOption.c_ParentName = loReg.LEVELNAME loOption.n_ParentCode = loReg.OBJCODE - loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - THIS.ADD( loOption ) - IF loOption.oReg.OBJCODE <> 77 + loOption.n_ParentCount = THIS.Count + IF NOT loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + I = lnLast_I + llBloqueEncontrado = .F. EXIT ENDIF + THIS.ADD( loOption ) + loOption.oReg.ITEMNUM = STR(THIS.Count,3) + loReg.NUMITEMS = THIS.Count loOption = NULL OTHERWISE && Otro valor @@ -14688,6 +14857,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -14696,6 +14866,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 + n_ParentCount = 0 PROCEDURE analizarBloque @@ -14715,12 +14886,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE TRY LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcComment, loReg, loEx AS EXCEPTION ; + LOCAL llBloqueEncontrado, lcComment, loReg, lnLast_I, loEx AS EXCEPTION ; , llPadOBar_Analizado STORE '' TO lcComment - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + loReg.ITEMNUM = STR(0,3) *IF LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' llBloqueEncontrado = .T. @@ -14745,22 +14917,36 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE CASE THIS.analizarBloque_DefinePAD( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) *llPadOBar_Analizado = .T. + IF EMPTY(loReg.PROMPT) + *-- Esta opción no corresponde a este nivel. Debe subir. + llBloqueEncontrado = .F. + EXIT + ENDIF IF loReg.OBJCODE <> 77 EXIT ENDIF CASE THIS.analizarBloque_DefineBAR( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) *llPadOBar_Analizado = .T. + IF EMPTY(loReg.PROMPT) + *-- Esta opción no corresponde a este nivel. Debe subir. + llBloqueEncontrado = .F. + EXIT + ENDIF IF loReg.OBJCODE <> 77 EXIT ENDIF CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' loBarPop = CREATEOBJECT("CL_MENU_BARPOP") + lnLast_I = I loBarPop.c_ParentName = loReg.LEVELNAME loBarPop.n_ParentCode = loReg.OBJCODE - loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + loBarPop.n_ParentCount = THIS.Count THIS.ADD( loBarPop ) + IF NOT loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + I = I - 1 + ENDIF loBarPop = NULL EXIT @@ -14781,6 +14967,8 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE THROW + FINALLY + loBarPop = NULL ENDTRY RETURN llBloqueEncontrado @@ -14828,62 +15016,66 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.NAME = lcPadName *ENDIF loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + + IF loReg.LEVELNAME # THIS.c_ParentName + EXIT + ENDIF + loReg.PROMPT = ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ' COLOR ' ) ) loReg.SCHEME = INT( VAL( ALLTRIM( STREXTRACT( tcLine, ' COLOR SCHEME ', ';', 1, 2 ) ) ) ) *-- ANALISIS DEL "DEFINE PAD" - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + IF ';' $ tcLine + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) - IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe - lnPos = AT( '&'+'&', tcLine ) - IF lnPos > 0 - *-- Busco si tiene comentario - loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) - tcLine = LEFT( tcLine, lnPos - 1 ) - lnPos = 0 + IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe + lnPos = AT( '&'+'&', tcLine ) + IF lnPos > 0 + *-- Busco si tiene comentario + loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) + tcLine = LEFT( tcLine, lnPos - 1 ) + lnPos = 0 + ENDIF ENDIF - ENDIF - DO CASE - CASE LEFT( tcLine, 10 ) == 'NEGOTIATE ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, 'NEGOTIATE ', ';', 1, 2 ) ) - lnNegContainer = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 1, ',' )), 6, '_' ) ; - , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) - lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; - , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) - loReg.LOCATION = lnNegContainer + lnNegObject * 2^4 - - CASE LEFT( tcLine, 4 ) == 'KEY ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) - lnPos = AT( ',', lcExpr ) - loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) - loReg.KEYLABEL = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) + DO CASE + CASE LEFT( tcLine, 10 ) == 'NEGOTIATE ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, 'NEGOTIATE ', ';', 1, 2 ) ) + lnNegContainer = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 1, ',' )), 6, '_' ) ; + , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) + lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; + , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) + loReg.LOCATION = lnNegContainer + lnNegObject * 2^4 + + CASE LEFT( tcLine, 4 ) == 'KEY ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) + lnPos = AT( ',', lcExpr ) + loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) + loReg.KEYLABEL = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) - CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' - loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) + CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' + loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) - CASE LEFT( tcLine, 8 ) == 'MESSAGE ' - loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + CASE LEFT( tcLine, 8 ) == 'MESSAGE ' + loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - CASE LEFT( tcLine, 8 ) == 'PICTURE ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + CASE LEFT( tcLine, 8 ) == 'PICTURE ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - CASE LEFT( tcLine, 8 ) == 'PICTRES ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - loReg.SYSRES = 1 + CASE LEFT( tcLine, 8 ) == 'PICTRES ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.SYSRES = 1 - OTHERWISE - * Nada - ENDCASE + OTHERWISE + * Nada + ENDCASE - IF NOT ';' $ tcLine && Fin - I = I + 1 - EXIT - ENDIF - ENDFOR - - I = I - 1 + IF NOT ';' $ tcLine && Fin + EXIT + ENDIF + ENDFOR + ENDIF && ';' $ tcLine * Estructuras ejemplo a analizar: @@ -14996,65 +15188,69 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.NAME = lcBarName ENDIF loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + + IF loReg.LEVELNAME # THIS.c_ParentName + EXIT + ENDIF + loReg.PROMPT = ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ';', 1, 2 ) ) + *loReg.ItemNum = STR(THIS.n_ParentCount + 1,3) *-- ANALISIS DEL "DEFINE BAR" - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + IF ';' $ tcLine + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) - IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe - lnPos = AT( '&'+'&', tcLine ) - IF lnPos > 0 - *-- Busco si tiene comentario - loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) - tcLine = LEFT( tcLine, lnPos - 1 ) - lnPos = 0 + IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe + lnPos = AT( '&'+'&', tcLine ) + IF lnPos > 0 + *-- Busco si tiene comentario + loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) + tcLine = LEFT( tcLine, lnPos - 1 ) + lnPos = 0 + ENDIF ENDIF - ENDIF - DO CASE - CASE LEFT( tcLine, 10 ) == 'NEGOTIATE ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, 'NEGOTIATE ', ';', 1, 2 ) ) - lnNegContainer = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 1, ',' )), 6, '_' ) ; - , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) - lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; - , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) - loReg.LOCATION = lnNegContainer + lnNegObject * 2^4 - - CASE LEFT( tcLine, 4 ) == 'KEY ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) - lnPos = AT( ',', lcExpr ) - loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) - loReg.KEYLABEL = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) + DO CASE + CASE LEFT( tcLine, 10 ) == 'NEGOTIATE ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, 'NEGOTIATE ', ';', 1, 2 ) ) + lnNegContainer = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 1, ',' )), 6, '_' ) ; + , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) + lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; + , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) + loReg.LOCATION = lnNegContainer + lnNegObject * 2^4 + + CASE LEFT( tcLine, 4 ) == 'KEY ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) + lnPos = AT( ',', lcExpr ) + loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) + loReg.KEYLABEL = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) - CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' - loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) + CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' + loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) - CASE LEFT( tcLine, 8 ) == 'MESSAGE ' - loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + CASE LEFT( tcLine, 8 ) == 'MESSAGE ' + loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - CASE LEFT( tcLine, 8 ) == 'PICTURE ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + CASE LEFT( tcLine, 8 ) == 'PICTURE ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - CASE LEFT( tcLine, 8 ) == 'PICTRES ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - loReg.SYSRES = 1 + CASE LEFT( tcLine, 8 ) == 'PICTRES ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.SYSRES = 1 - OTHERWISE - * Nada - ENDCASE + OTHERWISE + * Nada + ENDCASE - IF NOT ';' $ tcLine && Fin - I = I + 1 - EXIT - ENDIF - ENDFOR - - I = I - 1 + IF NOT ';' $ tcLine && Fin + EXIT + ENDIF + ENDFOR + ENDIF && ';' $ tcLine IF LEFT(lcBarName,1) == '_' *-- Es un BAR del Sistema, así que no tiene ON BAR ni nada más. - loReg.ItemNum = 0 && *FDB* ASIGNAR ESTO BIEN!! loReg.OBJCODE = 78 && Bar# EXIT ENDIF