Posts: 2,697
Threads: 327
Joined: Apr 2022
Reputation:
217
Isn't * a valid filename character in Linux/Mac? Wouldn't that make "*.*" a singular file search criteria just like "foo.bas" would be?
Posts: 372
Threads: 23
Joined: May 2022
Reputation:
56
(09-17-2023, 12:04 AM)grymmjack Wrote: OK I think there might be a bug in MacOS for this, for sure. Does passing "" work in Windows too @dav? Might want to do that way instead to make work everywhere if you like.
This works:
`IN$ = _OpenFileDialog$("Open File to encode...", "", "", "All files", -1)`
Note: passing `""` instead of `"*.*"`
@a740g FYI
Yeah. macOS does not like *.*. I'll check if we can handle that as a special case.
This should work too for all platforms:
`IN$ = _OpenFileDialog$("Open File to encode...", , , "All files", -1)`
Posts: 730
Threads: 120
Joined: Apr 2022
Reputation:
106
09-27-2023, 06:00 PM
(This post was last modified: 09-27-2023, 10:46 PM by Dav.)
I have updated the BASFILE program once again - mainly to fix a conflict with the output code and this forum. Now generated output can be safely posted on the forum without any errors (the posted code was breaking before because of the ' symbol in the encoded data).
I've upgraded encoding method from Base64 to Base85 to make a smaller output code. Although not the most efficient method out there, I decided to go with Base85 for this as it offers a good balance of space efficiency and decoding speed.
Another change - BASFILE output now sets up the output code as a FUNCTION to call to decode the data and have it ready to go as a BASFILE$ string. Having it set up this way makes it easier to incorporate encoded files to your programs, just insert the Function.
- Dav
EDIT: Hmm.. looks like the forum QB tag still doesn't display encoded data correctly. Not sure why, I'll have to ask @grymmjack for advice on that. Still can post in the old CODE tag ok.
Anyway, here's an example of what the new output looks like and can do. Thanks to the new "memory" option in several QB64-PE functions now, loading a background image from code is easy.
Code: (Select All) Screen _NewImage(1000, 650, 32)
Paper& = _LoadImage(BASFILE$, 32, "memory")
_PutImage (0, 0)-(_Width, _Height), Paper&
Function BASFILE$ ()
'Returns decoded file as BASFILE$
A$ = ""
A$ = A$ + "3O.JPTD,^.<:rURPnd-DR*1\-EjLZcX/Iedwco;==\n0sP[mXXhRMvTg1NHRV5r{Y5U.1{,a"
A$ = A$ + "}.ur^|bFNkq|^*mASvr)Y_Z9ks2+_ATwo]f2/H^Mv{*;odt-/i7dblw9Irun5eMQ0zjws7(c"
A$ = A$ + "OUiwM5?m|JZS,/a5,/4=342ag{=bM=.rHu/VToy/g>lNLi3dk];]z^28SfO^mZ+F/PC<6UzA"
A$ = A$ + "(VyuSilWG8_?L0s-\+CRH]mRu*8V[\n+4rhM:,rtHt'PJw2yK;un)Hi4)HwM.}V\(N.AIvB,"
A$ = A$ + "r(:C^g64xIou*3zMi0-Mj*(qWoLntYWG60D>*JRk6y*.x[iTcEWT=O(eGYLF5L|2K55,:(9y"
A$ = A$ + "x6SI.WS9*Ul^OI<MvqU>w_)/9_OOVP?b<[cw;G>6Ra=Rd*>yMhejpm<khM_ujEO/vXyj.p>I"
A$ = A$ + "65=/f8LGFaP+.Q>\s}hP[IYTvMLCWZZfw'TEgdaM.Poym)Wzzzt}MsUyZ|4aC)j4sOnTiaPJ"
A$ = A$ + "l,W?-H{nfHI^f:2nWrTfIiYOexjs6SI95pHY8od<36gEq}u{(MT41j5,f9O6RMb.b2FvCVQj"
A$ = A$ + "O;+|I0(|YAG0foB-bnsJWN.io)iJ3Od_g8E0[g4nZM.iPerh{*MwK^gkx4P*{<WJB{:SRj'P"
A$ = A$ + "zk4uf\+5WZkAd=q<P{.NOT7]w*mWM=T*^KSPIO\9Gp=B<5={ktobI>DkjT_IQ>0yh,pAXl]P"
A$ = A$ + "z]4kOdgGc4*4{{Tr\1cxE.E}7p7cgE]4:F?Xu,GaE5yF:^DUg8]rK|FrU|aNP?oo'9o|eaNj"
A$ = A$ + "C:pM7eEkMRDTBEg.sOBc>)J{nq/u|dqFQlJfa4e)GGQxpGTOq(yJxD,<5Zns:N'Piz=jho0Y"
A$ = A$ + "A7L[wI2e:Jv(>dM^qb9(vM8{elxW-r+2r,ZRXuVCg7eqe7PN0J74Mdvr::\hH*d{,SzBaNGI"
A$ = A$ + "CrEHhH_k9D)O=PacWM*rAFM6oevnwTjNg*^F=(l[P.WO9AvK({_4qabvJlaWt]LxSd\+tD[q"
A$ = A$ + "HG[:.*F5.2-n,/e1xT871bQLauOko4}t+qMa9WC(9/hb-'{)yF^BzN>'VH7p}xDGYP's*qgp"
A$ = A$ + "L2xAPUQfuGZ5^<5]pzc}k1f/91S4a]1+20Dj*s3yj]Em=U,BG=mhoytq1w:)67^.TJHR\/lW"
A$ = A$ + "AqJzh=98Mhp=i_:?^^kYq:t7vI^_nWHdRrlLU}\O;'RGnY32{SQW\hhkm<NLlkqe[:ayjP>J"
A$ = A$ + "gd2-lK:m=XhM^?S*liCQWrcpPj?(^1'MJhEhL4x[OD]Kg\>'85dNW0I_|8J->Qq4<bH9>2qW"
A$ = A$ + "'CEw]Z4be6ow(NIW9XLg*1ecSQiFOo'*i2yI2+I?=e6X6^fd;ElEAEeVczNqCOWz4Wv<',.U"
A$ = A$ + ")HRsy1A)vb(;?g/AgNy<AS\3Nc*ll'gxd-:EBIW8K3Ej/F/RD5SjcCIj?;J6X<P?5jD=m}Qx"
A$ = A$ + "6IGED]DqD)U'JIZ03TtPs22L;'9sju7>WYEh(<Xp]kmIIx0nau48c4xMx.:{K]V,V:lhALL]"
A$ = A$ + "KnGn+bQBdvLX]U3lUP<+vqpgPbqs3b0,]b,HqTMp;VRdL.i?UnU83FBf]mNY>a5la4(/(qvD"
A$ = A$ + "[Pwgbp:>XZlYUCgVisk4Tie}-rW*tRu,BSaam1P26R(/(|b(a40\h\|nER>iXdpA,(wReeUr"
A$ = A$ + "+=HM:_0=.7YPYkvEOdSLL,>>vSk{Gd)rF3NlV}S:-1|<PuBX[xguAcpCuoaQqq.DRmgkH0J<"
A$ = A$ + "Yd8C]8X?Da0f-^i5VlU;s;.2kvxHzTwPF_eW.JUppDec=Rp5=a0b)T<*jxx,9t}F<x0R*s1D"
A$ = A$ + "6B<YjwPY>r:6<I7qCqnwF(=zMm[>M?O^^OlnD,d|U?VS^>r]Bh/s7t.l9t(y:E4)ThpQP?By"
A$ = A$ + "-fI(TrVtTWr1*dXtODu(O-N)6Jna4<-[yeC:36NeMw_N+axi}*k]mFtUH{7YWc,R9Rv6F/zb"
A$ = A$ + "owAauf]=Vf-4QpvS;bNgt^V]X/DYuRtmjVkiVK8,R}:s0b7)[UMibza=_eLMGxSQ{OcQ<Y'("
A$ = A$ + "S;?>bnIT(acYZTz,zv+xxM'w6dvLGSW,joa=(_)-M.{sEn7LO6AA6VIEjs>U?2w^0)IMag.["
A$ = A$ + "1F:aVM,yV<3WLnc\l'0CERXKY.meXD.DtaklB>)ZKVexcEC[y_c9{6?J*\H?sYp\9P2F^D71"
A$ = A$ + "4sx2YzBlzdW/V<|d\ULXX?mxIHJ2R;Od3fL+43kmo+2'xrbk*7|(0//6>{p^][N|(VCX]TtK"
A$ = A$ + "8:u-[cW|w.U2r<s)M{TN^bm)tfU{_p^QG7;=bkEZpAOcP4543_r>P<4w3f5fjPg3^MChWNiy"
A$ = A$ + "vqT}9reKiziDn[KX=TDU}LAzFUT.mwR*T{=4](FxgS*sVdeo8lkTP4ACMO+=mb<G[nez1A}>"
A$ = A$ + "TVE7u1K;;kfR_R3LOy.4'Fu;C8,Sr['Eju\T)(RDZUHeiFCN.}mn7z:M[:}Y/]wbdvSm:h.g"
A$ = A$ + "nrRoRcsWs70fLSN4.P-O4yLp9\|1vds0)hsLT(ow'wnqXGkM^t|z|*hWAwXlCHQi-Dwm(Aoi"
A$ = A$ + "x0(djTrknXXnRtU?bVks/ahLafd2JRX=ro?p]Wo/JwAJ,eHPML-aory5f:')^dl:M;S^gDG>"
A$ = A$ + "ZQp/\4Zd'5tOnQJ[D(XP3ktWlnVbbR5Bk)o1|'tHm\cm<gc7nw>B|>,r.=B_6adR^JD'/1M]"
A$ = A$ + "->S_-xyL63+2+r>B}04pcnEf[l\jMWO'1oMR^.TlcsLHxyo)mEmST]T6E*{c:PqKR=VViqz2"
A$ = A$ + "P]Ub3G(Zv?8HL|x5GnMO/2Bm}Q7RCG-RTPPdS'i|O)tnd-xUV(RQ\L2KgQA/m6S0G)cG]Bm^"
A$ = A$ + "[VeNVzmr]KQUDEE9Pk?aD=FmIj8697M+M7r/Rp0KTrz*Tp+Z6o3LI4k-M?_]2Jpv'\eQNwxB"
A$ = A$ + "+)<I3lSGZ(st|\;jV7j;9qpDk4'mdHKV+D;QW:Z*B[{r7h^v}5oQAq6VP(T{[={9skj^WRTp"
A$ = A$ + "pRE?OvbdjGOn2EUOagN0j5D;1nDy3pB)Z2^+2/BzpnXtknA;D2Z{5|I/L>Wu>(QpmFpB?ZU6"
A$ = A$ + "}wk)OQhv.ByALSQs|_r{f+v83\vndMdbNHYfA=/I0>Eh^:q>Z{Yt\:jBt+8A*]sjNO1Z3M;,"
A$ = A$ + "2C(/25IU^9*gB{2[\MpWZSo/V;Ti:2-e/bn(7^Xu(}Ypuj;r^M7G>.>kqZ};,5Ty8zb\,WB'"
A$ = A$ + "u3gNG/.2?cr,j3cPO}U6o\7QW[g29;YrZ(S1taqjV1o5cA/(gOrISzBWw^JhK[shMs_Hhj55"
A$ = A$ + "^1w1-{9Vxa<2zFj4=l]|-Tx:D3/K-MafCG5W7_:*mr-Y1(TDsHxGbIL^xiQu9Jl|^n>^;>N-"
A$ = A$ + "(k:RYzVJ[u_jxkOVk(H-_T9Gc_t{05uG|(rzC8ovnjkY[<1u3Lif=_7J9l;q.RSd5kJ\G5PL"
A$ = A$ + "3Rt:-9x'_z)5]v_.PR'bb.f0[+Td/9aP;T_WvIfUqcx<\s142pvR,^5K5OeU:[UB5wAW3Q;u"
A$ = A$ + "PUY32zawBc9)Q>[Qdf1O.f(r/u?,*OtNt9|RW*v>;>-.BelFhc_|hdt:,PVD)G]oe0Sm5_0y"
A$ = A$ + "uG2FoOIiPhCL[1lW0{vh=+_u(P/7b41OhlWA0Y21+oF;a:2^:a^e\iN<XD-?4bcs054a6H1["
A$ = A$ + "FFrGpSd0PH-?MQ-^49ip60A9xSKp4(LjhHR9h-{QPSE})RFb^^x_Pt};d,'3+L-.hL\B(w'f"
A$ = A$ + "TWH?4gFAbEahyj4LreNA1o?{A)um\.6tFU,AW|-j^RQDH,,24;-EA1kv/,)iPTH4'1,o+UXO"
A$ = A$ + "]0kX/<tBtFWVZ)^iDgUPN+9eQKoo1T._{3mSf'eVgzK9L/,:(iS+ZLhWQHKgK{cso(,8|9V,"
A$ = A$ + "-TVaNG|>{m1}p)V+6xIuGoOa;p'qIqCHb-g6o|sx),8,1cW4x1vzey};'7[Pk|A/3x7pmO]j"
A$ = A$ + "N63eL<0]fxM^B/6>ccX343ZDo?l5Z?Ihm]|M,b9839\HY<UzvYshS48uPH4xP\?HEy=G\Wlm"
A$ = A$ + "uCMG7sv{ssNZhc)K;>Wj.CwKEST7Gw6t7\GfC.g5.2.Pf-5G},.-S8i=,|R<5_HunpAq=AbN"
A$ = A$ + "pVoFOmWS)'7u/BqZ4BZ_?)S-^HD>l.?5XWec?P1^Y-mZ*gMMnGnOvi7IJ0Ck}o:n>ukb5ly}"
A$ = A$ + "]J?:3fuH6MBo=yOG[<=uk2vv-TCFY|vmaJl3;Emd^D'[FQ\.b'5A\Bw361^1d(K+c1r2Ngdh"
A$ = A$ + "*=zJt874L=_a<e5TJ34jFVIhb;,=rfInwKW]/J**Gs{Ov;q8FB8QzYvlHKiP-z=>Jdp('qaH"
A$ = A$ + "5RbnCSkEr9{:MaYmC(h8:jm8DcH0>/o]:\y3C*N0{,rhfU8+>}YyDq)LM9:^0XoXEHcP'(Yf"
A$ = A$ + "]yKFuD6lhz(4;Q20ewYVU8Af.0TJ-0?zJUgzsLUpSu5RI*0q;Kc;8ym+-\Rl^3}kQ)jZi:+y"
A$ = A$ + "q2adMc(2dC\9.9)1XPdJZxpt:GL*9U*Y9t;qJ0;e\<o{(,)'pr'g<VA;+smC49jc_<p2caWj"
A$ = A$ + "D1LjHlZc^\FLaT?,lz4GJOhf.JOguM,w8_6xbV^N}O1/Tz[]iRJ'B\*{c<=9d[H_B7qsQ;*]"
A$ = A$ + "nLX2d;DWt*2myx|)0)<|.,-J:Y53=>RW46+MhNgAsu]M+hXP_:'b326Uf5Xq5B/zw)[lm)h}"
A$ = A$ + "Qkb;.(sy;??F9)PUk.OjA87FwQS'?-lRbC>cB9M74-fM0lDEg5?fhB\1r*pKsEwSHm}5vlDU"
A$ = A$ + "4PM71h6V<+|sxOT^5j(o\(/H(>-|Yc(c_q?r->Q=m7u/M8y>L^Y7;C_uqw9N+pLbe2eg+3Ch"
A$ = A$ + "Z]4b0J?g=:C'\ncwJ_|n:a>)dxY\?RG?]7B'xy8Xt*+Qs??6l/u4Oo.(R0oSW*zNDmmH=xNs"
A$ = A$ + "'oKfKtBsf0zrIR3l^G9zp8k*-?jaznhO1SIZn?]6(3Il[i1D4KuO*<ug\P9K6hv0?'_f5'-N"
A$ = A$ + "VJo>\KX=Rqmw0gACjUSCH7_?rkAADSu-;6fD[taBp,jBu[6Lqwg(N=|,aCjMS8:9i/;iP=,U"
A$ = A$ + "j(Ht6Y,>h,Bn1k4=qG+o63mJ3WDSS[TN\;1UJ]a|p_wPu-=+5OEPnhV>lfK_1W-u3)y(L|C9"
A$ = A$ + "AsNHrhHr)JBN8,sYRM5/U.dUT(lcUq{UsxX(e_xhcXAwlr5FAkebM{O2oy/Sp'Da^G)(zc7+"
A$ = A$ + "X^|FZp}i=N{mHyY>-N=KkDsGU*\;e3[sGG1d16UU7ror)/\hwM06PUgZbOBh_GS9;5.f-2q^"
A$ = A$ + "XWY:'}6Q6rO\nOFx=Wc+:Vb'V|s7Mt?0K3Wx_'A_JrGzVgoB6/{C2NFz=tdt8RRRN25MFJ<b"
A$ = A$ + "Ebk<\\Jagnp>4_WuU5kZ*gnsdl80j);IiULTM+\A;T4^N,R{6\<?zkloKg<._6-W1.5gH?2w"
A$ = A$ + "5.*Jj-_1tBSyeTd|jR_R<h2DRzaW3Cu7qMe69]:W?;vUDvZ+//'[GD6Wi4jUR|hxGk2|s7m."
A$ = A$ + "dSQO3a?vsad-(BGk7]yF1uF38_91]r0'PnzdBf{f0MsouLe?Njes1e2IGCvwfUmOwM\rosWw"
A$ = A$ + "qLw[6.JcpIayrY*DAR4R^48e\WK;0Hu7/-s2}nUNpY(lIh\*COnV;7oPZ'hAy|Pn='I|k]Fs"
A$ = A$ + "Tfz|:YrP{\J)7pjR7AhsD=f:kJ?1;^(L<U,81Z+;RbPtt\9Xz+r>[/;z58S9FYSGo;YJ0uWq"
A$ = A$ + "cmVUG_CUfeP=qI3]\X6CcWt{<>w9Bw9N:mV>kK5psVPGV='^+B*z\4'S9qp:x*GT)vZP[_6n"
A$ = A$ + "mN\:}mdi9jcaM-sjl<Z+c0V>0cyrD5Uu5XzPX_vW):aZMY'B)NIZ0V4YWd/i]EUMbiZ:d4:c"
A$ = A$ + "G-s(iAgeX:IS.;8tA{i5lM?u5kW\^-;?;dTQ:9h;u6?.Ack|rb1tjpJ^kPEDgD,5rVRlzyrV"
A$ = A$ + "\7d27|7=q]Y(*fX}69Y{5N.j)O0JoSHgSJd>'F0t){/n-fdEcwUb;lC0U_'c<R^BvZNj[ndd"
A$ = A$ + "PEW{f4N/8xL=8,RcV\;YbbFecG\O[Sp-Asxztr11|hV0j9y\q8JkBvp}|/<^h==R6pk^7.}Q"
A$ = A$ + "/2OZu*S[Rxn+[y]+SUczX9Mw=sbk_*8k?Z+grb}{2k]evAdyXw(RnAO'Xsl^Q5HQDBw(A,eq"
A$ = A$ + "]XCGpjB(=L9nC]-6}.w2QtowC5]]B<c(gwCU)q:::_93D8ES;Bi/TJRJ1+Kf8s7]>p.2M\h6"
A$ = A$ + "v:R]afQ4.9kOLqs'Ed(IRxm5Jl.>e,<6WB_9y3Kn\Gs5X?nl5wdra0hXU=ACrW0LrES5e>'M"
A$ = A$ + "Dn;mu<ESeW3M{f=:3]>mG>81b2PTN(?i5cSQgW^Uu6nA6^0o;DBq\?82N>TYN?M}PE{}9\nI"
A$ = A$ + "i-S^hO:hdR'fH;u1y3KVeVl9O8H]z'R.?,OqSMuQC_C,=[D_'j)IKOs-naVEap+Zi=4ZSGq7"
A$ = A$ + "L'_nm7KCBT1<FUw.cdax9zS)p^Jo:Qk2O(3l_']Qa(mGNoo<yayzQaHX3SOiPWsgchzzV;hG"
A$ = A$ + "8{NtJtBPWFlSUs-N0aXm*B]oClE3_t*g,>NWDkLV5ON];Q]o\+_Ak3J'M(97/^Q[Ec6h7\qw"
A$ = A$ + "=SXSw[=2m1y]LG:wMO)r1CJtPwiy3s(4Jr-Vi}qb9(8r\vP,MqS.z6Q[(2?N\XwuUtkgU'dx"
A$ = A$ + "Zx6dNT7fPoaQqfNF|}\<h(H7I{Em}>R(B\Cg:}Pmq+EOj5QfbN|MmoGZK<smlc/3\H^hNe:t"
A$ = A$ + "9pSuabmS;LRqnsP>Y.3CSG.G9f__\lE/-{H/V2F/8y8akQb_)M:LUQA?NwW8)UVHAGcg68vi"
A$ = A$ + "dcguP?cX(l/[Gu7]vF>Cf94SRa(jHGZ?lp|eFz2-_S+zR4';mjWz1?LpGm]*?i/gb+X3{Bsv"
A$ = A$ + "O[nyH<DI:hn*UGBW508B4f|jR;xh9hsEJCDK[/8xtwos^82gOb^nmtv1\qxNj*NT)ZQHkN}="
A$ = A$ + "=NVmvbp-8A'x<Wy_MT2WrJ{9oqrkrlQJESR3XETN,6:b;kVwaE8b((uKCpE5ON}hGyPjQ6}5"
A$ = A$ + "i<xewC1Ur?]|2jc+kM68^r67fW5m:Jh85sXuz2jEheI8x3t3*.HGU}YTR.QBxuV88Ro*UVN*"
A$ = A$ + "KBxASCQWbYkKx4PC6aX<NY.?};Bs2UB+,\k1-z[fBvo,Jv\T8Ik<3/TMoYYsP0(xKyPyv<IJ"
A$ = A$ + "NP14UnW<cPTza3IXDzdZa3(}'0:<csj0O>7pG>Q7_4'fzX5pu<JsB3\QH2|v,t(pRq3|QW)5"
A$ = A$ + "R8J0nBk84oczMpC2[1ZWWc:HQ^o1tq|X.J6u1YKY2c^{7zb/xh.dR83ROg+EfNKHUU{{sa=["
A$ = A$ + ">F2Y9=JK1e9'6wvB2S3BOuP''zY}\s3Ju3{+eA_JWjYa:XIH^6(03ag8C{s85ETl*Y0Q>hjw"
A$ = A$ + ",RIyt+dEMZ[LTwx|D0<w8')uKEs2XXzq*xM5UJ*3jKT9R30MRJb[y\9E[7;b94GyF(rgy'(9"
A$ = A$ + "X'/(6v\fAYOfMiBRJjQU1R=:MRK5?5.ycvY0)/p(7G2Az:v16I:aWm[lxWWM/vz)24S-,Us}"
A$ = A$ + ":2wlhhZJJ,M,zj\M^z[Ca^/D6+C]RTuGRv(3[rLod,ovkdDR>:T\S:kyeQ<ZKq1tPN.<lTQn"
A$ = A$ + "7BIHP/D:S_{-N6B+HjzrlRDSILx12cl'HzUT=fA6KU2g5v/2Tq(nWjAbaim<as|+QV1x8-<a"
A$ = A$ + "X3S:Ppt3t0BJFl2Go>l1y1pK2Ge'mm)u[ug,7t(ne(x\v<Kx^Im(soH*q*^xw)}O<]\b/Y^>"
A$ = A$ + "ye>:hqia4kK=WJ.feVhTvg7oFJE'WpUN7TmWk0;c3x'h-ThsaOSc802*V_?t;>APOj=dMlfy"
A$ = A$ + "}LW^s_bHYU/JfPC*wq;}TcC4|7Po/_||O3VEG4FQ3S<5N>DcFo\.mq((_5sr1Nl<e8Fo+>{-"
A$ = A$ + "a^p|j;hGgfh;^,iEBhOw?a^)h;aud7)l{NJ2zLnFI^_kg[/zGAf\=3DN;NX:XAuue[H.yHG{"
A$ = A$ + "H-+M7^V^zhB:mg)kAk6?icqq8lcH>PW6i4nSIFx|c,dsW(</-w)uQcyyFzdYK{9oAK>1;>[e"
A$ = A$ + "2Lg<m1qx0RqMCBMVOi{8sY{AHsR:v2(q6,9LJk>Xbp_u8s[bFyat=X{-vLpo;1Am??aDq=u["
A$ = A$ + "tznyn\/lv^3Em\;2N)ky-S*;KhqmvWwQc<iCveil,BR)ZA-}\tqU*K*50taKUYl4GH]vMNMM"
A$ = A$ + ",O:{./W0M;p-7,\L.R<A5OH/\_o:W2/08fAFUn-Dyar{qem'DCL]>XqnL'\sVgXUb8yT_<b0"
A$ = A$ + "]pX1_[efC.6Fo\jzW)C/iZGUM\X<HNW=9G[t5+)e+gkpv)\?:aQn0dh59}pSx'xuuWI)hmzV"
A$ = A$ + ",5qhNW|PR\LV:RNtG/FUw'GkCacApBQ'QL28QmarGH->[Y^?hwk2(ZY8IWU9hNL0y-3wvmD?"
A$ = A$ + "VeXQ5YZwR-x.DJc0aTe8=eioB6/4BZ;AAH9.IHkW\4WsFzVRJU'gFRE:FSwJKL-bdULT(o-<"
A$ = A$ + "1Hcv0UQr(4aS^_HVANyL,fa<s<1}S9wfZ;crrnZi.(r/o=f-;kR<RrDV)f:?iv9DdH,8uV<;"
A$ = A$ + "gXrwf:Zt>Io20O6^mDT}sid7]r]Mz.S[yX]hs'hVjT3gXIn26Q[RK<]>dr/Ow1kO/_HJGmN_"
A$ = A$ + "E\.ixEVJSCv58wMyUJ^pHX\rQBmIesNQddBy\';GcXnk9Z/;1}4z)w8+Y_ILGOM;)bGD_<l2"
A$ = A$ + "+0N8jn{dS0v\>:_dQTKj+zx:^Da\hzIvqx=/,vr5+/8r*V9+bhOoobb{FnJ>lA9t]94/x^o\"
A$ = A$ + "R+4KCB(3Qn(?a\=uyCxHkPz1Y7eK)oql5Qr;;AgRP2|JBV8-yjm/'f2rR-a-,fT5U0].(C=L"
A$ = A$ + "(4]G50ZZxd}Ez88L3+)n^b)dJidC5xvy0-8izkyBYsH>a.-G8MpAm]I;rK\rapQR8hrJ4BLY"
A$ = A$ + "uZFjFM5Kt^Aw)W*rC]<}=P3abY*75.F,9BY27dc3Z6^C>.F'uU.buh_<y1y_v<S(4aOHVaN3"
A$ = A$ + "aIE{B[+biVJCf.}fUk4{zoVwS>QKpdfG|-=*q>SC48{I^sEy93d'l1sV-7YnKvc7:P|F.90R"
A$ = A$ + "AS-3tlE^[=8Hgy(;ox=7R\?3*uvl?ygf\PRg65Jrmemhgt^^8m1\z;=pz?N^61egQ93JzP+_"
A$ = A$ + "h2g62mxc>),x'[5r8BG08o^Z2^*;[9W\rtE.,K_ZbG_d(9aAUyH/D?Ft^2R.yye(.)O^iRa]"
A$ = A$ + "k2quHV>2)Nl9h;j,pRm]aH\DOTCy;Q{Y]=Jso)zOk)0UYdb>hX5aECuf^<vthJZwcq8rcJH'"
A$ = A$ + "n/5qpGpz'+C)rjrroBPHv:=x\fI)4p]kvYFE(=LG*g2n>{de)Z)mnKPmo0nu=_XRXHVEj.Ix"
A$ = A$ + "x,yLxpytM;k6GhTO/\.]p5qVFnK?fWOAx}qjkQaL52HRzF'/SKv.ar{_HjAzMx4c;Wp>2hOf"
A$ = A$ + "-TW{)akFCI1N<qkTVDG;WYI6}vE0J(bd9_9RHkiKqiv65NprBtJ/7j3T0X>d]WIs\<Y).^yI"
A$ = A$ + "YMasK5uk:r+]6)]CM70w.Pcs655\1Rbn4ohv>dBM<p6]1I+M1Uve+(HB1_KVix^}JT5/;T6/"
A$ = A$ + "gVODo>r}F+a0:y3KZqa'=*ybcQ]b-^;'-/veq3Ys3AHLFmh9OF\/'Tc:NkX<SzwE)V4)Ryeg"
A$ = A$ + "gvc-L4h[pA^u1J4NiHC93YiWZctf:+zUyo*mXuW.^GmJtugj-x;wsCMulwyO4CD>vwF=/xm/"
A$ = A$ + "ki==Q/x-Ftm?k*r7n<oD/XHbXTaQW9+X}(V?7mdGqybd<9U</KPq)AOq7FR+LJHKfkS{I*4o"
A$ = A$ + "^VrM.1yDnoD11d[+=kExVraO|({YKe9=c1Y^F6q0guCYgp-A<}*riGUzjWq{{DD<ruHYV[|K"
A$ = A$ + "2=+zEFM*uNOh;;Htfy1MrY6Y,uG4TqHBq:T]_/=}LF1[1Bgj5l0XJa9cw[:fRXNk(g.C5YLQ"
A$ = A$ + "{{BgDlAh}r*7Xws2i4F.JGjnSw[l4;29nP)'Lx*Pt-zvo(F9ARdZn2fg[q;v8*8:XFMN+5\u"
A$ = A$ + "8qb^yRAkMysk=JanN.o.a5N88t44?E/zrJH1A\+pp_JJ{J^1SFB3m[.1?Qug,ez0Cs'v2RK6"
A$ = A$ + "q3v=Dy=|N'Oa.b-?L{nlso,1qgdyn<6whboi]_zj)f}rV[{74,Q+jYaG1cHd_gOjwJpH1aLp"
A$ = A$ + "YX}b<]9cZj<z-*_-zn\?eW\SAjDL8(k]cE(WRAJtssBj^w7THBh\g8l4dR7gNz8-E0oh.j]{"
A$ = A$ + "B3q9U.V8-/D6q(|S:B7rf<?RO4zZ4j*E1cKZTlN*ZUV)]_oNIx{yl16Kzn{Fj1odF2*Em]V9"
A$ = A$ + "k<UAo-TkmTZ?=>B[9?Sg_;vbKk,,slpBVhM?bxvd_I-if:Y91M5wNVG:6j})Zs)udQsyw?-4"
A$ = A$ + "Qcy[0?cikOuct4MI9Yb<f67fn=KbvNR[TDfI>*D=Z.zJO,dKEl{:qp';-yXN4[PTgl2P>>:{"
A$ = A$ + ")8.c|0_uG>.}[nsGh|ltN;cNZG(vk0uQ{;{P|2/fsD:TOU,RksHf/c'z]r|pqtab74.inUFs"
A$ = A$ + "V45>'_PP^B[*=[NUcrlphds8xPQYp1xXBWesJoPG8CCXBFNt<[4|Ai*oIFObNipeZT1^rnDG"
A$ = A$ + "vDIiNsL)dp^p_M'UyjCTQk+8<V8>DipMHw0t<'n:f;hAf<9>q{QISo;]+wrfXR4{1{qFM19["
A$ = A$ + "nNY]],Hp]>l4O[sc:uIs:*2TiCSn>ID<r^;w9zvkBPVlu43AcLC{dUbnBe14|o}YT-Woiqh^"
A$ = A$ + "anWp};mAdOgNwidlx>F]K]zl97.U]jF\nFqD7Er<4\sWW1b,(Uv.1Cdy"
For i = 39 To 125
If i <> 64 And i <> 96 Then c$ = c$ + Chr$(i)
Next: Dim v As _Unsigned Long
a = Val(Mid$(A$, 1, 1))
For i& = 2 To Len(A$) Step 5: v = 0
For j& = 0 To 4: p& = 85 ^ (4 - j&)
c& = InStr(c$, Mid$(A$, i& + j&, 1)) - 1
v = v + c& * p&: Next: o$ = o$ + MKL$(v)
Next: btemp$ = Mid$(o$, 1, Len(o$) - a + 1)
BASFILE$ = _Inflate$(btemp$, 8874)
End Function
Posts: 207
Threads: 13
Joined: Apr 2022
Reputation:
52
Hi Dav,
nice idea with that Base85 encoding, so you can safly store it in strings without getting the IDE into trouble with binary data.
Guess you're lucky with it for your needs, but have to tell that your methods are deathly inefficient for larger files like digital photos or MP3 music.
Have tested a ~250KB picture, needs ~12sec. for encoding and ~3sec. for decoding/writeback.
However, a ~500KB picture already needs ~80sec. for encoding and ~18sec. for decoding/writeback.
Then tested with an ~1.5MB MP3 file, no idea how long, I aborted encoding after 10min.
I had the same problem with my MakeDATA and MakeCARR programs. It's basically the way how QB64 handles things like
A$ = A$ + "Hello", it gets a new string and then 1st copies the current A$ and then the added string (Hello) into the new string and then makes that the new A$. So obviously this copying with each and every string addition/concatenation gives us an exponential raising copy loop.
It's ok as long as A$ won't grow to more than a couple 10000 chars, but gets really nasty if it grows into millions of chars, which have to be copied with every addition you do.
So you should be able to precalculate the length needed for your output string and pre-define it as
A$ = SPACE$(length) and then using MID$ with an counting offset to replace the spaces in A$ with the actual content. That way the given literal strings are directly copied into the existing A$, hence you don't have that ever copying of the growing A$ itself. This alone shoud give your code a speed boost for such big files from several minutes down to seconds.
A second thing I see is your use of MID$(x$,x,1), when reading just one char ASC(x$,x) is about 5x faster, even if you in turn maybe need to do ASC(x$,x) = ASC("char") if you can't modify your entire logic to operate on ASCII codes rather than single chars.
Posts: 730
Threads: 120
Joined: Apr 2022
Reputation:
106
09-28-2023, 12:01 AM
(This post was last modified: 09-28-2023, 01:33 AM by Dav.)
Hi @RhoSigma! Thanks for those tips! Never thuoght of pre-SPACEing the needed string and MID$ing it in. What a great idea. I'll get working on that and see what happens. THANKS!
EDIT: I just roughly re-wrote the Encoder using SPACE$/MID$ swapping like you suggested, already a HUGE speed increase! On my laptop a 200k file took 5.55 secs encoding the old way - but only .05 sec with your way. Wow!
EDIT2: Just re-did the decoder now, just as fast! 200k string decoded in the blink of an eye! Now I'm going to data-test to make sure data is not getting messed up.
- Dav
Posts: 730
Threads: 120
Joined: Apr 2022
Reputation:
106
09-28-2023, 02:00 AM
(This post was last modified: 09-28-2023, 03:19 AM by Dav.)
Hey, @RhoSigma. Try these - they are lightning fast now! Thanks to you! 1MB done in the blink of an eye. A new BASFILE will be done tomorrow with speed changes. Almost had it worked out tonight but have to quit for the evening. In addition to decoder change I’m changing lines A$ = A$ + ... with MID$ too.
- Dav
Code: (Select All)
'==========
'BASE85.BAS - v0.30
'==========
'Base85 Encoder/Decoder Functions.
'Coded by Dav for QB64-PE 3.8.0, SEP/2023
'CREDIT: Thanks to RhoSigma for helping me make these lightning fast!!
a1$ = Space$(1000000) ' make a 1MB string to test encoder/decoder speed
Print
Print "Original size:"; Len(a1$); "bytes."
Print
t1# = Timer
Print "Encoding"; Len(a1$); "bytes....";
a2$ = Base85Encode$(a1$)
Print Timer - t1#; "secs, output size:"; Len(a2$)
Print
t1# = Timer
Print "Decoding"; Len(a2$); "bytes....";
a3$ = Base85Decode$(a2$)
Print Timer - t1#; "secs, output:"; Len(a3$)
Print
If a1$ = a3$ Then
Print "Original Data and Decoded Data Match!"
Print Len(a1$), Len(a3$)
Else
Print "Original Data and Decoded DO NOT Match!"
Print Len(a1$), Len(a3$)
End If
Function Base85Encode$ (in$)
For i = 39 To 125 'Make 85 character set to use
If i <> 64 And i <> 96 Then c$ = c$ + Chr$(i)
Next
Dim v As _Unsigned Long
t$ = in$ 'make a working copy so in$ isn't changed
If Len(t$) Mod 4 > 0 Then 'pad needed bytes on end
a = 5 - Len(t$) Mod 4
t$ = t$ + Space$(a - 1)
End If
out$ = Space$(Len(t$) * 1.25): outb& = 1
For i& = 1 To Len(t$) Step 4
v = CVL(Mid$(t$, i&, 4))
For j& = 4 To 0 Step -1
p& = 85 ^ j&
r& = v \ p&
v = v Mod p&
Mid$(out$, outb&, 1) = Mid$(c$, r& + 1, 1)
outb& = outb& + 1
Next
Next
Base85Encode$ = LTrim$(RTrim$(Str$(a))) + out$
End Function
Function Base85Decode$ (in$)
For i = 39 To 125 'Make an 85 character set
If i <> 64 And i <> 96 Then c$ = c$ + Chr$(i)
Next
Dim v As _Unsigned Long
t$ = in$ 'use a working copy so in$ isn't changed
a = Val(Mid$(t$, 1, 1)) 'grab pad number
out$ = Space$(Len(t$) / 1.25 - 1): outb& = 1
For i& = 2 To Len(in$) Step 5: v = 0
For j& = 0 To 4: p& = 85 ^ (4 - j&)
cv& = InStr(c$, Mid$(t$, i& + j&, 1)) - 1
v = v + cv& * p&
Next
Mid$(out$, outb&, 4) = MKL$(v)
outb& = outb& + 4
Next
Base85Decode$ = Mid$(out$, 1, Len(out$) - a + 1)
End Function
Posts: 207
Threads: 13
Joined: Apr 2022
Reputation:
52
Good, 0.273 for encoding here and 0.277 for decoding on my 12yrs. old Win7 HP Laptop.
Then modified to load the entire "qb64pe.exe" ~9MB into the test string instead and it gave me 2.363 for encoding and 2.859 for decoding.
Now that are speeds we can live with in happiness
Posts: 2,697
Threads: 327
Joined: Apr 2022
Reputation:
217
But the question then becomes: *Can the IDE handle such large amounts of data?* Just as you mentioned a large string becoming slow to process as it grows, QB64's IDE is the same -- it's all stored in a single idet$ variable. Once it gets so large, it spends more time moving back and forth in memory than it does processing your input.
Posts: 207
Threads: 13
Joined: Apr 2022
Reputation:
52
09-28-2023, 10:56 AM
(This post was last modified: 09-28-2023, 10:57 AM by RhoSigma.)
(09-28-2023, 10:03 AM)SMcNeill Wrote: But the question then becomes: *Can the IDE handle such large amounts of data?* Just as you mentioned a large string becoming slow to process as it grows, QB64's IDE is the same -- it's all stored in a single idet$ variable. Once it gets so large, it spends more time moving back and forth in memory than it does processing your input.
That's true, especially if the code isn't already properly formatted for the current IDE settings it could become a big problem when the IDE needs to add in spaces for indention and separation or needs to change the case from camel to all caps or vice versa.
That's the reason why after "MakeDATA" I did another tool "MakeCARR" which moved all the havy data out into a C/C++ header file while the .bm file which is actually incuded in the program and hence processed by the IDE just holds the write back function which does access the data on the C/C++ side.
Posts: 730
Threads: 120
Joined: Apr 2022
Reputation:
106
09-28-2023, 11:05 AM
(This post was last modified: 09-28-2023, 12:09 PM by Dav.)
Yeah, large sources really bog down here for me. I would only be using this for a few smaller files, but testing on large ones. I better properly format the output, that's another good suggestion.
EDIT: Got the new BASFILE with the speed change working. Output function decodes a 3.8MB file in .43 secs. Using the MID$ calls instead of A$=A+ added a lot to the output size, so I had to increase the line length of the data to compensate and decrease. The code is uglier but loads faster. Perhaps 160 character length is too long. I'm going to post a sample here to show what it outputs, and also to say hi to you guys...
- Dav
Code: (Select All) Screen _NewImage(700, 600, 32)
hi& = _LoadImage(BASFILE$, 32, "memory")
_PutImage (0, 0)-(_Width, _Height), hi&
Function BASFILE$ ()
'Returns decoded file as BASFILE$
A$ = Space$(7346): a& = 1
Mid$(A$, a&, 160) = "0stPC'{<7A='?'v6>VkBh'CL6q'H(<WzzC*T'.3jG*:*vM*:G.L*s9VT0(h]n+pI<j/H{g82\reP2\j2u71is*6Q2:R3Y\[8:bX7y>V}?BAN{fwC.?]g==ex<*UZ'I'\o'w,OTvU'<(uB'CC0H'CL9/''00*''''": a& = a& + 160
Mid$(A$, a&, 160) = "''CC0((\(w5)ufjFhBf8W'(kVC'{>X0([vt5''LL4'P_|R(?>U01]Myr-0fh^1x]VYQTPxb2=.'0-}G4H2s68bQwaC].KcEi2wY_C4:FWr8KuCG9e[5a=Yef:>sKXKChU0|E*:{5HvESgJ8+FwN-4vQOFribS:|B": a& = a& + 160
Mid$(A$, a&, 160) = ";TTc4LX-GQyYG-E2\vibX^8OTpbi3\7d*qeVgYlAnht;u<j5yhMmf^-zo(Dx3r;[+VsUAumvhwI,x+=sOyD{f_'>GQS''001t8_*RsKdOU9'2F*/0k/(d7{q1*G97+wV0wF7=qoCcQpm+]o7*L06co46tnv_hsjM": a& = a& + 160
Mid$(A$, a&, 160) = "=x*QZHo>8[dciYC3i0O57Z;i8J?mq/=h^8NWhHlzo.wBD<Qa=6R=|O<EJ4Jwi3z52Ums-z4H{DG-:x/y1'=6dqdEpI=Lg\[ysKd|Vw)rN=/2|HH=eHcTGe4+<;ryY=:iCKNm:z^][,TfG^F(KBIws=^:K?4::g/x": a& = a& + 160
Mid$(A$, a&, 160) = "'+XDg.[g1=rU7Q|lm5o[C3}huE08Gj}R=q+40-tHT3RGIr4F?xrpbOXcs1MnCNPJjVN|V28\D.l?*3+c3f:L3XAA<}|[8OT*Ba0j)U=4*ZhagOrWXs,>x5=LUUwtNg7yjVN9+p,8?LH1lwNooDmG>[/G8_dGb(zz": a& = a& + 160
Mid$(A$, a&, 160) = "</HrjJ2xUEeKux_z+kf*fJT\-/+U5u8L<gZyJ'hjK]yJxFL=<ql:c?\0]yUit>^nlEDk13TQl:[t8ura]^5wQ;jF5XQkJa/r0\dOYr)K-5lT|RYlCkyg'h(J:Rnf31n,uw:2<h+UU^z'1<(}wW2det{uT,698*_]": a& = a& + 160
Mid$(A$, a&, 160) = "}\Fdj<[0R]y_|Qo4jeA=q,D(C^Z3;|Fwp/Bf:7mTY075EIZczMwb{3Rgl1=3s95Z3f:d,-5LQk.s2nh\JuVbwALC^vTt7V;4>]Q7YSwoAq\aX)/?<P\Y)|6o0yOR5N'K.:Okdbx/qb16i8iyj^6TA_rhUhFnI[D,": a& = a& + 160
Mid$(A$, a&, 160) = "tLN;v,3}ysG;c(cO]49^EG)Iv0Bhlh?S{*h[U3eOU9S;*Z:RA{?dR_Q0<Yucl+Wb4ciD6tzlM8AW+\Jn)=2-ZK\}Q,k)Ntg8[Nd[Z)k[zwm=9l*/=_//O+m2zVikWA0v7Ejj7>*jM6:\s)^TY,OCWGx*Si(E=\A(": a& = a& + 160
Mid$(A$, a&, 160) = "uPeCD='<.m(TY3<3'*TTI9h>XtLzj^1e}X=4N>45GXQ{u(S8-8OJ<fhaRzcI:>f-vt0,JB6Eio^'26zq)0KdHE3Ji4:krlK1g4v>P_W0kU?\eOpsET7j?tb=D>0jlbEPJ,sDPu(b:CVVePM[CT8Q[Y2K<h;v:?D3": a& = a& + 160
Mid$(A$, a&, 160) = "dHz;,NEcrt3fzqpZuRb3z<1)9wkU/E==^aJF_e}HZM*7J,hZ7Kkr5T|zIYrc|E5z3C\dFh=(4I9==U0<U:}l_pxT>-f:p'wi2?zYs(UAI\GE9?h2u1]+/52\gZXn+eerupKk*Ej+_=^_3\9K?|>Lu_K>]2[ABc+[": a& = a& + 160
Mid$(A$, a&, 160) = "^jz-^1K/YVV;T.=*QeX(lP?)8{sxP)DJ\q.zn6,<-Vr7SadY?uFZX5wAL29bfC]moo[.Ds=6wr+hr74(nI?^tF[hf]gYl:A\+BtEZ_ag{z8)(GRHZZh:H<jgLowK+D3X-CS.r[3f,WBY<jd==q;bD8NT_J7>Ly*M": a& = a& + 160
Mid$(A$, a&, 160) = "ri*K4B_AnpV9l>=QPDfnY(|OgdB8r_4W^o<bEbScMJ.N}p;DaZ<:tc;yZo6Q>AUB+A,c*yFlW]t,-pEGP7)QVz)f*D?lrbJYZ{0VzuR)lsrK'zeM}x6,'83s3+vkGs=oBs1K\66+UwPf?==xFqN(,;S52j49dcf4": a& = a& + 160
Mid$(A$, a&, 160) = "F[C*nvD)Q==]9M5^kwnIrn.7_vIpp6h[,z4)cVbzc9z:^b[U=Y.:URpZ\>:^3?xOLb:sN(=A3SWxD>]tG*EvzXy/6etx0sLTj6G^/f)uN^ql[bG4V|0Y:jG3br0=K=J02M9n-L'S4L<SxN|4*po5MrH?Z{=Jm?h]": a& = a& + 160
Mid$(A$, a&, 160) = "\8H,NCf:=gfV+v;M:qDM1k)rg=K9{I++v|+nTQ)q)Ha-Ly_p7NV,'5W+l1)iKG(A..3\tN8Cp02OX:\at/M,}*GU<IPR/qOSY7]ska6(gujoHvO+FZla8Mk9O]Zf-k)DeA4J6y9S[+=uQpGzP<l2Y2WiL1b?9-N[": a& = a& + 160
Mid$(A$, a&, 160) = "isCZG6\lD1NUht|;H6h|rDn^9BU{4QSsN<Fx0/Ev(Yckc*]|PX1\MeNk=gC\uk7dBk_7F/E<e7(JCKiO'^kc5?b3[?kdHL3w/|3XVU+pxP5C2Ij=ARZ)X6h>*QOBMS;?V+xB(aV<Z=miM<+[8AOJwjl9=sCQ7zzQ": a& = a& + 160
Mid$(A$, a&, 160) = "^Bt4[yL{4qh2ngD/,Jkho5,s:C'EDxv87Mu;q^0tD\zaXc\K4a63X5kYJ,qjo-itshkVom)N0]BylZh3yUvVgQ_s3N(O/ge;:S'nQ(D29j0v[Ca=C6c<?FnP,?a)qbs3(JYe6gN-CkkBWSF8v,LT3C_ep=]1?vwF": a& = a& + 160
Mid$(A$, a&, 160) = "m>s6oRH1Wu_/*28K'PKmfx?gY6xE'+W[fz>f/H'][?FB=dL;wJt^0CSg]:twmlSljFt2dSOlQ}='2^9^4)E'}u_p9ZtdmWn*\D9sS5od8xlXB4tFx/|TXE5ZUm_FkLHOwBo+<gyn.t/Ihgdw01J(iA1D6=C^JZnE": a& = a& + 160
Mid$(A$, a&, 160) = "lV61JN1\2;]k+KTl]w^{7yhx>Nk\HjQgBk<;2Ng*z]w-{Kc2049gdHt\JB{{LK?HhHhTp|W_MRpdSuoKJi_L5TB0)gw.FwTV6yhD+m<]Va6>1}r'NW6<[N_U)hMyhobXgH3+Dyi].(9p{ZhZ)77T_Gn^Pu+Yd04a": a& = a& + 160
Mid$(A$, a&, 160) = "PbG'W6H.X.gsEc*>s*|NWBF3t}'/A.lX5dHP[M.rgwn41+A4VeQRN>Xv._{Mq*2z)JV/-PzOh)F2-XYe_BP1suDD\.cj_bo[Zwgm6SFC\T1]am'zY3)yw_9eFM7>TStfHMQ]FrYe_1Gb\W7vzi=:Hf{cOM81?J(Z": a& = a& + 160
Mid$(A$, a&, 160) = "kQ_qY0ZR\7'>YB\'Vl{RT]8t[r^IPf=*;adsp/3*EoMR]x]FgGky<>M8]7OO{NtihhTS22uImb2LmAcBSH2uLK_}:7dgqlB7yX0rIGCq3Rf;j<^of2f<^/*myk8?0COL0N/:d:v,ab+F{Ih5wH]C?<s1S0oVg>hI": a& = a& + 160
Mid$(A$, a&, 160) = "ym4MiP^za{tKqbq)Bo{nWvyLwN7N_pgAJj*x3kUZ6j|7qcQW;;Tf0kOU2_3>Xpo{8)rCZnR/s0^Lf)x:^]Kw,7g/][]NWRU(BBWd_8-g?OFJOU*]2,M2haB99UeZ,IWm0yN+x9l/kmNW)6s]iJ6zwhvwQ>n8J28m": a& = a& + 160
Mid$(A$, a&, 160) = "1NLxA<+?4b{w*5{NQ,h7A2gzi;jdF?tBy}Me1\0Pf(Cpuqnl]y*tnc9RYhK'sNm-(wsL.wWTWt{o3*{S>i(g28x|I]fWty/N<0(y7PTlat\O0:=Irl6tM)yd5-z0h_v5UCHLWyzx]up6u)Gss;]HYtGS1}12m{D8": a& = a& + 160
Mid$(A$, a&, 160) = "H.n,qKCA}1f]hKv37_xge?1+RTpIb2H^u(?ij-T/=3i/+8CR+)0Pbj}hY9ujzsQB|j<8[(JQ}H/J2AP[4s4R1]IvlYeUfK|jwq4O}RI+PzFw7HNll:|U]h:f3Z8C9gV'S_{;hN\c8OuMTzYZw}]Cf?qe7-3]/amI": a& = a& + 160
Mid$(A$, a&, 160) = ":47HdxT5(RyCKnc^mAnR_Er]mJENSrR+2Hw|y/y-x^6r6Y)F8q-ESj\=T4TZEJ3EtvV)k9G^Xy40F7]on^sl.?]Luz|+z}-fNeBj*:DJbi9nylcc*kbFwXavB+L>rY>q0\WM):Dy3ZPx[9EvJHsfF8\?-cN?p:'E": a& = a& + 160
Mid$(A$, a&, 160) = "Q+w^:Jn.7gz<*+'y]jtP:HKste,LO9(owdW7BFrMuo9-mv((6iQr--3o^p[6RH;+ruS}8Q5qX_rb)C>)j_fh[WRk=tzHy_S6*D.\kU/JxnstP(q'*[*N)5p{8X-*|D3O5lQInfh2VPjTvBaod.]t71?ajr/gm/>B": a& = a& + 160
Mid$(A$, a&, 160) = "2ZrKp6J8,Y):[qUFgA28w9ng]76}it/vBueOQ{j*IxWm5ez{FIGL4LFA(TC0-CTy<6>)jBocZwo]L[R.x:?vz_.hD8d'x]xr8n/OF1}q=yGXv(}KJ[V8qzT]hlXG^<]rLZ5)9]lD9I<,_i,Hq4Fjw9.G-q:=/)-T": a& = a& + 160
Mid$(A$, a&, 160) = "9r5?|dO,Coh6R)}u(AeldTW6RWvTO(zu8XpbW.[,/+DnIO1x6TaO54,Z\)Y\eH[FEc1D9P?C:4]OiBJ7t7:vUKnA<]7jQ>^jCUdE',hjN+N_+|VU.u>|US'W<0L|2;n-7xB)ALhG>0TQ/YjMV7=pIP<dgM/.+iSu": a& = a& + 160
Mid$(A$, a&, 160) = "o9QOOaj(DI|LXalF7wKCoU^Gfrp)Tis2AQn/iOebaFA[VJ46hD9Z6O(^tXH]1>X:dM>wgM.A8{0b_z1c4q:p_JnA?tU+7rGT;htMZnjI]Zmp4Ybl[[)G,>CQcsKMZ/wk]E{G\Wg/a[]KdIustE]4k.WqreeRJTO1": a& = a& + 160
Mid$(A$, a&, 160) = "ji]ch/DC'\l\Z}9ZVn-DXVN+E4erPfl7k[eA6Ns|XGHTkL70B:|lUlyMr*HenG.h'<7kZ?3Ne>7oQjb);YkeY2SkWK|^JaShEjydZe)oZRmq'.,FoWa1cGZNz(UEQ'0Ny>0Co_>68>fvk/s.Uiz(.T7,|acM1xd\": a& = a& + 160
Mid$(A$, a&, 160) = "[j6+8oH*DhMq=|=nIwdd98JjX*Asn6F4+Oz\Lj2Iue=dUuW6B;/]j7yEM*FQ1bMfosVBf:fJnKbuS=cPb4]|*'tsO|k]t.<pQd_UJLwp*)mK*kbv3'K9ZQ:c26XzwFZ>n}}qmI<3jfEHEd|ch>kq_O.:ju?KS(3/": a& = a& + 160
Mid$(A$, a&, 160) = "U-O'[8c)^]i<_\jRD?q\Hpk0T*<Ld3H_|DFtO?NoEVVHf7ZIh;X;>t_-q{>ImS]TJgto>,*y.wQ8KKLJ|1F='lc8x8ygE{]h-K0I]Q,yer8<sD-spOY-BQGM2^jtIyq}uPK\'Qkf)FLwSvmJlmR5EZhAQ2e8wcKC": a& = a& + 160
Mid$(A$, a&, 160) = "Dq;puy0?ZiGigiKw]|FvW8'+lcv,wZ69;xNFVW?:LoK.<UsFUkX'C<'xyb3_I)QwGRmpvELz_HlEee+Bqs0A5nZUXh?n1NxXKXh]UpXc\jpmy9.ui?2A=a9N?>taZ0W1/V1WT\HhshvF]loYGw1qWDXGixsVY^MM": a& = a& + 160
Mid$(A$, a&, 160) = "SO8_iB3QlM_';rCxJS*CgG1hXFAi*?B]nb6^3NHAROpi[snkfGy8hx}in_<K9<^:nl.hs?oqa9x.Jr+(I2W'-3NkRx.u:Y;9*)5efL]yc),E9G=>Jh\>7q(yT3t4,)U2EB;;]WpGW)>Ka_p.U_K5ntGUawo>n>/U": a& = a& + 160
Mid$(A$, a&, 160) = "]t=}8de|xb<0]LFcS0MG8MH;d0RUjOf)'T3+^ta0_w'ohWuPC5h,zOECLF(.-ujgcR;OVK>n8p\):HMboO,{A)Z[4me0eeVEr{\<6*[fTi*06Xe<9zSV-[h]^2DrgZzh'q(aBLP3_q:IS<N0yN=xSAJfhFBe1Plw": a& = a& + 160
Mid$(A$, a&, 160) = "x'W'368EK^uf(,|1VtiYSmO_?.)efzU1ZUtnmdP</0Z/qclmha}Xy60oq/Ys)^/^=D{8mGj01VV(KPiaj/AxA4pB^{SSH3ox,9pymK3)\kClnr;l?2X/TML3c\;[ME0va<-P|))(3Tpxaf'4B(;z2Sc7C^-Hvqq4": a& = a& + 160
Mid$(A$, a&, 160) = "M0w.h8ORG'x^1le<3/(X'B^M5oU^gw5Yl5VGt/HHkBll[^<v7C9;YT'pi/se9TPZcn[I(s-z_unsm]D.dhw5}Hy:L5P'C>>aP>q-rXw*oA-cR4TJ1up[LQO=WkeX(<bz-Si]-F;8s27V.>a>}2<>=W]w1Nr6XwxU": a& = a& + 160
Mid$(A$, a&, 160) = "}Ty.(IPYMn0'R-qykwUx4mTaJSvU[6il{utU?Ift9;O>*y,.+F?wR]-3cQ9[(6j-?sVqqs8ii{n1SDAD[OG9kSbtt/KEk?zx'MBMpP17eT'd[h',Z{_s?D;puF>Z|2.u8IR_2V*XjXs{;>w(}Jd+dZDjUT2h<33,": a& = a& + 160
Mid$(A$, a&, 160) = "V0'\6hr?kv-9v|v_'>O5cVLTve'/^RgV9lv2(pv4.tGXcb=mb9=y7GNjVI'C|d>oA*'C=JzObRfpiK6H00;o\bzs]jA7.NHzv=0M}<:dSNa3<?nBv<20<s^Xz\mQk6,o[R|?MpDedF3]Gy])m.:C^HF4=yKFQZeP": a& = a& + 160
Mid$(A$, a&, 160) = "<tY=4XxXkXR2[PuuZoao>qSJ=uktaFA39:,TVCD]<FrGJm;e\bH-=\;9[nSi)_7pz}YN-6s^>o\Z<?}RcV^g4n2B6iuU[^Ixlutvso;qjVHQl}gj,M?f:anQzI6AKR]2ptS]2uN+5b:ozxNbPvr0V\_Yg>vTw(Zs": a& = a& + 160
Mid$(A$, a&, 160) = "B'CASTzIR*+)?XyRH7evK{4C-tw:o]uD{vUjyh1t7,k51vPbNaW)Cs0]ekwWFbx*/UYb.l7rz*Z|PZR3dU2fbbd/C8W'R_/bT^2Dx<>g*irN*:wdYy-Q8N3Q](4\tma(;vPCvN3UljR6(3s|':>:8-PX[PStpUhW": a& = a& + 160
Mid$(A$, a&, 160) = "Te]BNrn.cDtnUIP57M<ZwHqxDTNZHL<w[BsF]ra*m7we.jJF+71'+6iDUis9=hxTECE*cw4Q;[iw/')wjMq_kRLv*:c//}_G5O5nAePsjkeie<Lcf0A;^b>(gOR|MO:od;t0F+\qJv_+T70]oF,<W_DZl4=\0Ki;": a& = a& + 160
Mid$(A$, a&, 160) = "F^PBnwjm;D^9F;s]'C}iSOnY8K;:NIWAZyl6fFkZ^JkA'RQuARcpYDs^F+f]t-rIuZT3-NXXuOLwgkdKr6QT8z9\)ehU0njo*c(0Y>GhCy)<ua2d4(+_r*/R-e,I5Hm<}L}a,Eg7mNE,>4ut?tQ4AX=0<=mFTS29": a& = a& + 160
Mid$(A$, a&, 160) = "um51MzPzHetjT*9}2y2>}6sJ)FpySK>F7*yy/j+E(1|Do5L<XV_81dmoh-iDDM8V1}b)bUQlzC^CC_(Z-[ec9<tM=vztLVWQ-y)X)EG9U85;yqC*pNez'+8>CecO,49sZWNNI?cbWwW_LO<LAKh]/>En.XAv;toy": a& = a& + 160
Mid$(A$, a&, 160) = "Vzymw7wTrskTjc^D??3>PczscPHXq;zQ|qsc52^G,xnkDSurbd0NLQ]ABO:m(){LNyVeU-z\q:o7:O6pF;}.YA^FYII*Jc66/;]'22dXC\M0i0h\idTvL*T7{8IVhwL7;98;u-4_]41=)j|rPgaKsK*[GJ[w,Iyb": a& = a& + 160
Mid$(A$, a&, 160) = ">(Sz5wtkBH9')O2?2Q6Sa0Mp|T,-j\nn;_^;yR0o\N<da?kz79jR<0ibm-Sg;440ReeNfMlzaun(9?1oK^TxLvBSe3;EvX/NNLN)Ls{;EDkvjcV+PJ6D'cx{bdt9M(^'Cm,P>O\74Hc1Trcvy=+3:2<7;c{{WBFz": a& = a& + 160
Mid$(A$, a&, 160) = "K9mJ(\kNC+TC1OpcI/v;t'GRL;6NZsne3'xop/4,p9VtyEr3d(sL8=9MdK?t'UwZWyA=U:V^4},|:asCb];]MQ.u}/i9,(\<,E:?HXdT.Uc1+?'HL;j1(9(1\B_tLILE:AuWIvv2o,Q>M-bX0"
o$ = Space$(5876): oc& = 1
For i = 39 To 125
If i <> 64 And i <> 96 Then c$ = c$ + Chr$(i)
Next: Dim v As _Unsigned Long
a = Val(Mid$(A$, 1, 1))
For i& = 2 To Len(A$) Step 5: v = 0
For j& = 0 To 4: p& = 85 ^ (4 - j&)
c& = InStr(c$, Mid$(A$, i& + j&, 1)) - 1
v = v + c& * p&: Next: Mid$(o$, oc&, 4) = MKL$(v)
oc& = oc& + 4
Next: btemp$ = Mid$(o$, 1, Len(o$) - a + 1)
BASFILE$ = _Inflate$(btemp$, 5865)
End Function
|