From fe13be19e46c0a49fe676d5a22b66132926f7d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 15 Aug 2019 14:48:58 +0200 Subject: [PATCH] Kernel 0.93+ --- .Docs/Shell Developers Guide.md | 2 +- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/SH.S.CL.txt | 25 ++- BIN/SH.S.CMD.txt | 187 ++++++++++------ BIN/SH.S.CORE.txt | 127 ++++++----- BIN/SH.S.EXP.txt | 4 +- BIN/SH.S.IO.txt | 11 +- BIN/SH.S.txt | 375 ++++++++++++++------------------ SHARED/X.ERRORS.S.txt | 2 +- 9 files changed, 379 insertions(+), 354 deletions(-) diff --git a/.Docs/Shell Developers Guide.md b/.Docs/Shell Developers Guide.md index 99351e3d..6a1288e0 100644 --- a/.Docs/Shell Developers Guide.md +++ b/.Docs/Shell Developers Guide.md @@ -134,7 +134,7 @@ Notice that the DO X and DO Y logic is swapped between the two cases. | PUSHD | Working | Save actual working directory
PUSHD \ do also a CD to \ | | PWD | Working | Print Working Directory | | RD | Working | Delete an empty directory | -| READ | Working | -S : no echo (password)
-P : "prompt message" | +| READ | Working | -S : no echo (password)
-P : "prompt message"
-N maxchar | | REN | Working | Rename a file, directory or volume | | SET | Working | -X : toggle debug mode
-C : toggle Control-C break mode
-E : toggle error printing mode
-F : delete all declared functions | | SHIFT | Working | Remove $1 from cmd line | diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 2fd5e3a40ec877c2e5c2bd9348ca239b6c5f9475..d4090cd68836eb5704b68046949e426a900974e9 100644 GIT binary patch delta 226098 zcmaHU31C!3(tpoP9!xTsWHQH_$pu3a2nl4!1tcg($N`a%ge1t}l>p(8ki;Y?xVn=8 z0tkqJD-EtkL{Oum0TpyrL{}7Ck9h66h>G{FqQ(owRr&v_`@P8o{Qlp5lIia1>gww1 z>h7xQe(k@Wjc&((-Tw&-i%uOC^~k9(s{y~_BX9mq8IB*msGHLUB;!Z6<&nw(HxD$J z9{JW9HE3Iu^^vn9ravw~AF2H0SE}TTT3z|s!OG7J-ADY)`Jr*=y!xvGh0}|C#j{Im zeAQE#@{w^TbA4>wd1Y%$UqNL>C9`}2==t*lzHAopnbDWeTiRNg<3IS7zrA5WT_CyG zS6n@(oQ40_n7*U6em*mQVcbbD<}Z!uhlgdbA*YNXEp5K6UkfFrWyQ?;wQ;9Fm9lUl zQ@=6poKRg;;F}VdSG;0LTSa4WMF}(a8h6fb0P=4&Yl?v;V$YF}lwZ*f7@l#7||C)wWc=E~}{kt^AdpQ*_?)rAFRWr2k)_4Ui@ zm#r#jS#)t=-tvVD>sy#|hPd;K#+{0)VqbOJ(#qux4b1t!KS2Mhac65=U0|w?U-^xy z|NaNn9cM$UgSbLwV|8g9e&RKoVx+`+j#j{E7scTUpxJyu5Al@`WR^ zm@HU8{stZd(XPl zJT6mz@q?7jW=U=nw>7A)jKH|S;*0AVme(_jM*>3flvq$_iPLbQtMN#uCYX5ogT|rO zL=7&BWezs+OCL1)MtG6cSRe4^Gf$Gqm&N-DooLXVV)A8E{yp8s>tc6(;$=_$;w>B2 zZRtAe{WQ({Kk^M-g_*+S9!_yv!`}L#QoRhdQW<{M4t5bn9BZ~Qg%4mQ+v|dJLqIsZ`{fF9&^{( z&h=Z5BhQ5L@RXBrJ>g{yDad`Fay#GKcf51+>&JV?$92BPXJnc@@hA2jkK1~@^G5U{ ze8a9J@Ws0?rE~MX0(oL-g69b9dx*zIWB}#amLn z?A~QUEx;^<>YP z9i1o8>U&#{mwlbmc_7>LSh}q=kxdzv5uMCFW?oW(2ajB8x*(0WuQgR%Q8>K2sN?sw zzjc|t|48f3-~G{^kG=1u?fzuXr})zujq&(2tl;V+{I>OtJ-;GbjP;t2 zIzC?WNyn$P-jww2-;X`pYd-dNZ`iT3JrUlQvc2QEZ=ET9%9gb5r;c6M6X~r_?@sdG zn%4bFyE4@~K7H{qYmef6B&~hmv1C;EAQgFC%v1Z|1n=I7Uhk>YEsFPs;q8j|*|fFa zdNcW*>rAfsKxRE=?F~P60mc}0zXn27+2Gx~k*ah@0NR_G)}7RDLS-+&6TIzd-S2|{ zoA;6Q?ub3TY5wrAj^6gLT2$>~+fMEN&z}FTIo0vio^LZ12*M=pUT-S(gU*2<@Fz4< zo43WY=5)tTyHD-;YD*Y#XU)$YXLhm9v)<9eyY1evj zKI(ldY5!^48T|Rr{?k2gbgjs%J-YAb-htlh(zX~qwRyFKbMDkGL&whx&S126^qL{H zkl^<37GIk$8vJ?BnO!F#JKb^AV%OQJi{qvW`PL!7S?sALvetaj@nx5{;}>+8N8ezI zPmM|g;oS*GevvG8?EdAj7eCw6wwS%5Y|AHI%p1jL++Z4FiArlfjX5JSuD`)FsLGbM z|5VQzFZ~gdW0SY5-P!A@?JDrjOY8o*Y)yLCOYO$47bx{b*#{x16J^#BQ;F@-VE^tf z_Iyd4{iW;z{uQW-d4lryq-}{H;uQSiu^UXI{qLo9o7=+#yfU4O5Inz+9^2J&Tve1((7NNc|c1WfAqVS|vp@QzPN1dSw$nd#jF)=%BB z?fBx_{l|Ni`}Sdmc0C7Ou|3`UZMt{xh}x-L?1dBCPSAf{VK1EEXTLX^`70YtN#+Yi zbjM5uApdEDshU!6PDLGFwb3-vFqr!{nvNRk`P5CO3ykd*{KieDVa89A_+y()x!G=UtK<$PE7ptr?+H#%?wZHQw#xmv1)3)f^tv?K@W36V|z* zJ@(ja{N2AY5Th48zg(j9UI@120~8t zBvW$8vD)5Cy(jt0n@zDs^yTx-rb+2G2x5A7GVyua3F^(RPU?l7w1E{$a5HI1=&QeG z@~WFm&4$DL?>Cuz1~>oiCR4RVQ_<~jKm7!+++w=OKW@P{oi~yKA4fI4pugf+wb0K% z(mw52Wlubj;*cXO+M7-7{k?q@*n6xTQjOvtL_r%B+`s?CXD0~PXZZWsiFPv;t&tt< zxpU7qy+^${DZ7Rd=t%DZe{$#h`;Oas_n+*E*!}gMZ+0C*LG7LosdIZyiY`*_-zXQu zH@B~yiq4y;B`jQrZ|?aK5_z`s1{!og17K!gC841kzgLUJGd zgYKZ{44<{tG}Qj4fS9DAnB@IAjc?s*8Z`)gjXL%xETHqZ@%Oiy z(kzdp^?bhPSKBj~lia?|w8>8k_#ItuLwM0Z9AWmJ9Mhe)OYke1+Lr(8_?6}yP0IvK zOAn@Hxc8UrEnn1jJzER?j~=e09s+3BXP}H067d5WowluS(4T1hai!x|$H(-~M|*zt z)N<3!rg(o!4l)F|n7sRsk9(=-*KLIE=d^D1{WZe{v?100{APf#lzvTKt*NmiZaVF50<{zo>!<`{J*3g5Mbj$VxuNjz4wO>@q-t7 z_m21O+DwFQCE?s8S7YbyPyAvX-hb-Y@ZPb^8iUiNCH_w6(xgQAa9sE^R# z_$LnkcuPii=azku3mq;*qreMgmW+bF8ZJ@87_4!6bhoj6QY~uGjQt5S_OgCc_A{EY zANE7>ra%!EisG>HLwFoixX|6Ci=)7uxE?chU-uuqZjHC=NM0>wkjGoXhumVSj_OJ3 zbsh8e{UPmc#`i>R$TUMt#*vVexzf9y$H<|5J8(o2L_*KN4W;cQCtWX~D1|?> z-85oASTcUQdGB_UE9XJ)-o0M$*QwnXt^JNhqEN6-h<%=S_E==~yek#i-W)GY&%N0^ zkDIdmcZ@3we+r|V-__pn{e!o8_uekhq`$Nw0;EO^zp~>8!WZ}89p1fniXsPEFy?ie zi+||&VgIT2l&)uqjI`dL9=zYX_W=QN3Lt;V>;9BLsOZG8%X;1s+V%}f4tww+@7{+6 zWaV>fzu(Y1V9yVk3GHEfez2)~e(3m-VD2wlJa*6bJp=aqI21@cqJ@EbzQZo3(<@pW zo7Y{^`QpCg$D(^CwC8z|9NV7d9n14}m`03orwy;|Y6rWpDT5GR)_a<8?rQ&1BtE6Y zE$tue`R>?&?nz>)$HD|w?%ZLT4E=p#hiRB$8#nDV-RG~Yst{*Xmhz{{>a6SWXKKat z;_F$_jc zsGj97ttmWOSWtbWsJNtHX4zXM6>rR%T3U9b^o8=`*>9CqRP+>=RUauiR$Tr(yXUD1 zhYn>;IFxlLd%~gYLu|;q@3M^NGmd1uknw89arX3(r+rUd__XiPgr_r#U(YB%l2P_n zM%j^!DQ{&=Il>;;d;i1JE1qWs<Dj2Sh|2{P9+7^S93(Saskw z)1*gjr>t!1urU_w&7BJ)Q%#Y)vNFt7JDfc>9rQ-~IdrhgYptpF@b`>q0;~|nRt+rE;$g3i)WNc*M5hjq;zugOCXBs_+7@kGwJCZ1SEU_%sr-OZ79G&X4t{XQa?BKW=ihYr=i15nCmCx|Y9m&T%p*#~7 zm6~B*_uCW7!QY-3VCpflI@G-sNzPWIKID1!VM?i2OdBA zK5XnWY;2Hu_I=1}oj<*4LH#C~W7}_>S6R2bwSKdfe$+Uxy12$ysHY#3>0&*7K&EF? zdNi7edE7V;GF0TN-lk!A!YI<^T8-!@jnxhH_02a?aV}Gz;;$ccy8KTYYnCjlhebhD ztM)-ci<#pYV_}(ZabX$qwQkrBQ&weLi%!6^lrF1p)Y6XUC_S&LzHY%vt&013BaJVt zFtDuv(>h6*{RQLHQrKpYv&mO0c;t9dWED0oZ`9f5I4ZJA8yD2C&`Eg7SX$v*T&g!2 z^AC}(Sl*^}Ip$@NQQXp^Wej=M$d6o`Fxc^$kqjS`XO?X970(EyGjETP|8#A_ps?3r zSGs3cq_IR;fmp=%2F>JU{=p#Z9j+e@q7&2yU*+<)!o_th%zfG*jW%;DwZ4HdX-xfz z+qxoM(|$JWT+%o{5L(DAXAIIrk;mM>oL>&vvHZ{A%Oi8!8fN}gHa_$>-rN>vihxImV32f04wg3tVrqNpRZ7p4fk`)N;N0-L4!0Q7W%3y3kr)_^j zHP2$oL&Tfq*hg3#4Il%kGeUU#k_3r<#4i{YVa|yfK|;f zrRqG6d{sk`o5|GI41IRT($?a}1%=BNFiQ{70OK)ec%5i}!{E!!l(bJ&-b7CPTgdr8 zI`Fnu8I1ZTK&}5W_(p>u*qk$2+&g^Py^*nojKG|Pn12ACdrpdK(?9Gh?3=gD`Z0|kI!gBFh))f^v3yD6O6K@X%GmI^ zm4t~b$Cl60pqz+t{~>}rd6xeoi#RxzDPMr#Wk*9QEQ1KOtEMIFvi|%|Q zYWtO5%KsKsvbHxj)G^n0L}Ac09Y~s9QIy0iHyL;Ord9_sQE`hA>yWRa(pOe7rL=Ip zub?K7R8S5e>sA0!s-g-twgqdLZFh!6%^;9N7-Wp70A$40{3Xr$!DS`8jzEtLT7IkMZNk}{Olt6k{ zFa@MD?$+s_UQjdDS5i51`vK>~2=i{)z2rSSV6b~~i>sTbaON2v*nZHd-t%Cjc{KD^%e;V4R+ZHy4RwoP z{&q=+ghLIgEttkPljB2iLy;zX_}Sf&NoBDiR)6Tkist%8=8S{Vg_vsE&xeZ49xs(5 zV5;lee5H-dmJq~TF|($C(%H^BZ)e^lK1{Cd(VfFM2d`tS7a93)!-XF~j-JM(74e0yJ28p$?O`I zoX%f+G%_i3#2+*Q3}yuT#+^an(A98SB48xnWvb*+^&*f^};IVnSvhI55A6n zHbosY?ax@X%Zh}K()~HmFf7L3x0*}c)sB`d0nKNW$tAkD~j7A~ym+tarIg*+c+0 z0z;05;d)@$tYZKG^bxadG45PYKR*Bre&JHGKmpBLwnS(`s2^sz85nZ6lPZn;i(Yv& zGehAlXb!~Onsj|3T{Gn1c)^Im3Uut#xchfLrGS}w}YbuQ& zY5JNfspakJQOnAo|L`TU_^*#E`!h60j|p(a>-&##NV|=OIqjGwJZoUG&MB` zXqwrkD4NGrRtPUu#IDoM%oizw$fPm_tiqm^Z~5IFmpdJ;yUG|R{#?! zmr79&%4LQk4h;!a{E1gw@sZUaRqjs)&EzLvaV1W>7&&4C0nIlu(7JRw5B&UQ$%>_|X`@p?wxg^L7^QDpvBQE1p2gRi?zPw*&ut!m@0J#yh)C1u` zuakXJ<{{fYzh5ta*}On@!CWuF%nM}?;uk688ZIf_tWD6hozZJMZ3jAI9@vL*%eJh0 zc!nMSISxKN!#QK#5QG=dB-VF=kWuSYO#!A}2c=jlbms)~MN%D`r%AuQQihr9p59-V z`tpPu+FY*r{wt(jPOjt=mspbq%)rE--^%Y?Vs)EXY!weIv3d;E{MIGb!4WkQRGn$$ z&rVStrr3*(yr5Nenc3i3{i@BTYVLvYb7bz}DXP;HH`mBJmsnLlGhd=LeW}Ffyi8J9 zxVV1)QaS;aPi8Tf2Nk?rA1qe@7maN`i>eKlm0|Sif(6m@f(11NlbK~cl^|#$>J8eD z6qgrm_7xX}G4q?ogE5E0P8qgeX&bd})Z@;BqaJs?Za8TCo9lPO!QY>B8Eu}b@&cUH z%|C=;--|=nk71Ddm2A*yo^c{Jq1^dXSja|lenV4hJv09dSlVQs2`!WH4=ntbu=E`y zFcJR?(~rQvh6!m-{Ec7wgeRfwcWPq(S`yko36y~QY)D4+%*lb8ifP4Iat$QUE1BKc zZ(>3;%_arJu4LXYh0m~?9sDAf$5N&!!5#a>;B4KpdNE4}BAfL0tkOXC=rPP;*3(d4 z!Z5+i;Xu~_v=KDZ(RYi&edv5%Bw^Gy(TnP_N3&S9nTQi~6efZr`aEoIo5BraRaaq5 zNNw!RiW{$H7JG0aTb;63$tii6EZn6?rkPc3mbrmE)^p%hmwBZBf1d9c9360|AM$o2 z-JbNnJT-rCetLdc{)qhS{KEVh`IqG{&c8N)Oa9IIMJbOA-86J&%G3FW^UscK8fnS6 zapZ@-DWf{F?;Q1WW^ZQi$egU9nFF#O%6KDl$H*}j~zoR*wJIltyq zjj0-QI``@^e;M=enBzIt(TDt_4~?EOZcN&RX(eeFiT`TSW~a>>cgZ+=-jKZEd3AY> zc?-v_8MkTN_WZs1_vGI_?$|g61FF}S?2Q{nKK0&A=^25s{??JgDMDcr3nO>?WUnj3s|@XavgKjE}d1iaVw6opER?zF() zGJ)I*Y4`PfAzfI5kC}QR;T3(ia|5CwqT1g)=ID8?tDRg??Jstj@@hM8fN?%e0)M9g zI|cBE?UDCWX@o88WSzC=z0MoR4To5brSRLsN9N5+?!F?#Hz#pSKNi+o>Rlk+W~ZcA z?!g4_-bC*%;g`$Uf3kO&cjVCBC-;0P-5MUjgnPG~vd0}z)z=0j*q36lESz46SSD$D zW62HLHX@IIn4rd9U|vRhiTTXl2uKDhN6Ir>67X235k_g#uWkR+mwDF8Y zb-aJM+>1D`mU{(k0K{CN!>Rci32I(Jn2=t{cG5Z2er=E{X~AQbKLxif%5`YYem(61 zR<4~hUIMIP%Ab+#@U!$C*r-x$mR7UQ8~{?Xx(x7B(TYt%{j96I zIxym9Kt=q8c1^rDDZy#h|xDV+z`;ipfR`8}F?&Uj12R|7$4QY5QrpO;)4; zr`v(se1|3scZN1j%1`M;anxNJfrY-3YUbKSK%~_86JFKgx7-b6V#Cg?d*s#=7K}_5 zb1&@|#YUyjS5#caocEnSQs(4IZS=1|0rl`_hFWPI30_YqnqhG z*rb_h?EB7Xj1At;BfRRMx<}6Kqy5p)9O94pF(&tj2hafUyAKln$<;UYXRPIMjg8nC zK0$2!n;2kz*NK4+m+};G?&%=sCWCW_NT!_rXPCaO9hUe#&l3Lff@z!kH(-Abl*ws~ zaxrp$?`!gTYVwFSaxaATL5$ps)c(<6`xrU(7y-@UMMG3u-b+Cu{vnA-e3_*Oid*Vh z>jU$#u?Wm8FDkAI%wOKp+JqzND-tN~RlaG68tZ>ek^!ppSwSY@9yDox9gXyxs`fX| z?S=a0A61We8@Xg)C?j!!Fq{7=8y)no{*+BFz67g&agermG%o&|xQMDDTqK^U$N#7` zWcm#$T%9flTsPjKLU7BafnJ$J_Z)sCtAb4tW835eu~V9&w`rs zb4|u^k|XKtrz&xzqaA}2M>-1K>{o^}9Ub?~r!+M>>no{8m9N=4X2K2jDqq%kv2Xkw%H zE2zQl%K6**-E#dd7&g*;R+3=GVT@KAi$SwdX0d1!S%t-HO%0?Xz?2)B2RbfO6xbo{ z17LjYCqv3WWIN4d7(S=d;hJp|#()UGm@Q;}MW-W?h_Y&S&O%IH=86(cj50?91bi{u zG@@cOqHsR7qn6D`2b)f6P1eaf2Z7WiP1T2;IPW)WXt;gW`W=8pP91Ti*E&{GOC zM-=*e%oPJnIPZy5l!!KNUCdk#(iS3{Vz+&T!lLDr0yNmg_^DxP;(QeX(Rz-#QgK6M zoE|aFLcK%G6C2VF5n2rQ0WA0CIEmF6&w_p3C3DEWkrZu$c@xh9>@ zCZ-nrA%`ZTEpwry-(IA%MW@?Ytj(0^e$1r$HZZS%DJ9gIDM1z4j}=qVG{!lmG)N&$ zy_;a9k-G$C8Y+9s`buebtUGtIOqczPE0=Jyinj5KN2<1%3Z1}8Ic}9=-1vSa+-^5l zY5S0BSvj$WcaKyP{4@L58zLDOgACg&eWsQ9zzo2hY<1 z<`irU3T8`vT|;wS8x+laVARx{=o%?GWdSP2)RQ2G_|sw+@((gpPu?OFS{4%*F(DB6 zup}sw*ais`YUGtbDvYDBp*Bc?_AcY2eCl9B6R+^8p3G*QZPLZY>{n51+Q}U=wT4Bu zNXmR!`7EW4bDx?#Y`G?s)i6)_YJ5edRV)(cAz^!gqe#Iyh`CqrlRj1TuOu?B#qyfJ zoz|!5KS?q*7pLpGkoL5jAk2KdwtC_WBrdr4r8u|)K$9g5*6_PhFR`A_Vah5rVO}ja z6pl6h*^q%LYwghJO&tX@Iu1jUDY-0qeLrH-Z{WK|scHU=XhxdN&70&_#B!qq#P;5a z(@c;2tnpp;vQ1AnFc$qE*ITfa`ZaL@_T8{{w!K4L3yr<@dyP9dFA zEsQAGOe5tGr=R}Hc9%qrt1@EJy6)y5{^oT0cT@9wBueETBpmk=VE?-J>6%p5wR8o0 z6n;OBxuj~$I1LHq_@Fjd_X@ITl@zPMIah|0n&e$&p znpA*1B*s6A{dBqTca01*)2TL4*U%6sF29&L4)i0KvTO(Ych>#5&``r-o(LIWI4hXr zN!mPW+C;c7D7I%(HddNLa_B>))qEHe5k>*?vy%Mi=h)7=1r)17Rax}kC7VPtn^~R@ zaw+CWC?L5jUI+yxcg2ffed1A&M|vDS2L4vIYWLIWN6Qdxtgc+%x;W4XGapl5(ia8E zqspq%@)~A&Srg}cW_?xT3wh?1*ML8whmNoD_MY^PuJ z_HC`V{|xB_!Y%$4(gg(Iywlg)e}@86Z*iKTlY-~086!#w=fG)FAKz=NA@zicA91CpjC{afA_C2aNfes(%w&eKxc7f>EM3 zsQ)e17hWe>zZms#mJ#)_-N%WB*?tVI4`0pczUF_T>NwEkYR#8G>7CK4=i|suhZ*<( zw1KC6GlfCIkaAHmv^@?tk_>EKaKK^C-pOXoZzJQ2gPyl zINdZ_^$dl_Norcyokd&`Gl$6?zBui~4lux_C{|RXdm#UCw5l4z4ZMAk)mh}knTD1V zeexo>6F25?NU`F4Be^mj-NHFXv_Rd8La7Bu9Bn;}wecBaRF8uWIkW~62%U0pTTwLO zSDpQvm{|@j!4wxYqUwzxJjjKkPbewHvx{+i&jT=9tPH`Scn~7cf>RGI;yyGLkMc+y zdGu3|n~po$8A%w~dGuIy;0&C2g34Jlb(;rE9z_hHI2KZi5lIHkaH1pwt(t;l{`PY= zTFOuqr3~X&j#ZNfr-q=N+1M&==;q-PaZ);eaI89{d_)KkG?Xy2kE9;p>;xl3hBjnA zZOBFee{3d2KWTmHXeK>!wYWOy&e{&ky;sc!PSQ2-`HE7ZWz0G9&={Y~EA!O2xX}O- ztdI^(p>#;&I>+#Re^wkZV`YoxJXtL>pWm0Kjv9Y~{AGvxH+p?n;lbwIl86QbrF!#xf08eUw~a)P{ovKKo(J^kE?mQ?5eHYKyV0a zF5X0ITXcm%#2w{lc1*^dQCp=brU=nZV!fO}hyG^fs6w-4#bhSdVo903I;5wR$<&z! zzZ{%?fXc<7#5{{k1I^4bJ2?L893YU(Mwzc&)XRw+{>j%$%mr7VK}T(nVjaX@7ecYL2h7t1VZP+f;0655ICW4$ zJ!zb4X(hmBYDCuRnx>`oje)|(Hs)SLlb*sc7K2W51&(FzD}xbxU~Oq@^)*Y{<}YTJ zrP|0sp*PUTF4O0Hc`8#IQK%i{5MN#)&!E<3ZSZL^jK0bsl%S-7MYrgIgCNSE#UfiZ zM&+(zN*ncfxo-E->1LLzH6pPnTmz7p6&ij$-p{qNKTF6y$&_mWYWtHg3DNjK-ZPo| zI^w4^!4$Oc+vcj_M(6cBCZIS*{8{TLw344%Y1e~aCHt5XKyK_RGXC(uBCF#<%WBzs zXaQvn)##vzym_$bYn`>M1%QkIh+2<^gJi_sz~8%2^(@>FN;hq^5Z1R*7xsu7b;V}h zEC)Doi;(Ler~B{owt};m3+8Q_G~6tuVaQ+jCF51E=N8FCnm0iN%*72n#u4lA?~p9j zFL&E_hETS!zG)$|+}g*UzoN6|+YG|IXSrSC1ruy{LV_~o<@?l3Y}7jmiJ13VP%|^% zMNCDA$S!RNGnxHv(CsJNW^iS+>;_JnJuu+xL0j&7#1zucTR2UK5k~N>zK&S$)1~qf zYy!HFPiq-A0r#W2>w%EY1S>xntgP%cBp^oVAtDJeONe(bgaEbrFjF$Jn5&x~o}fCH z?gKo{lpJQ>Z-7yD1+!38E=Bfavq%Kx3W^aMs62)?;}4MF(Y7y$4(6x2=8-FyauDU# z$4QQaL=>>7CqSSk99hisH$HKq>dt=>nNnHl+;cq@(veoNGsnO@-Pe&r!0dU3--PM| z4;yZ0?q{V!zrguiNKI`49r$;WG^Rc;gi2fsnM0NfX`ecx>5>=te};{pufUoY%Atq}`xIz`ZK|Dm9t~lwCo^iYtM6b83ybT}=B6Q_WjVb>^I{F>bFLG;C37r4d za6-2nr+&RFw>=4#6DZJvB;E(=;M{e8pe>TllhmSS1JDM;{UK^;_K7}@GRsFnB3z#k z*Y%Z7JEJL|5@nx}$VkedTSW*j^%flekKwP(jriSQ3>u6v{KiGrfeye5aJ4In#!2_>pvz9fxYNlSy=(Ie@k^j*Xii*r4DSy;xm6Ki~ga1^2dHjkO;UpTx(;E67VZC4qT%7gTzcIxG2zMAF_IPk?uxXRPyY57B+rs5XByJFw7<<=X*>h6W2&r z$y!)ZiWa6cRIr?`j1@~`drC?pI(#9NPoGw_1fIoF8m3H%X;2owzEDjZnl15Qc6f3`KO|TCtdz_> z+9*yiBisne)ehi&#c3=OF}iYwLuXTLt~+0n;ddf5H^{)Mdbv4Ae6AQu#OE^Gc#KTu zcEP%BvP>9Tgi>eLv_f zmZLrlalApIF)BEuPLZQ7&U6TJV?#=DyXH2ZIw%v-Z9>t6SSDSFbR%i*CnI{;n>ZGX zb(V)TA-yTgQh~1LZx@E8O4+~U8KQsMt-4==n~asMGTyr*7?kJDbFfVodYgI zaopv6S_wi~5bbszs#rw2^)ZVs!IjrvGp!y0z=(U(ktHnPcb2H}hK2me5;c3wBCP|o z#4iSZ>k^HLsfb&)T&dBP&nyjE9CQ|oU1sFbGgWnRWTRdgv^Sx$tC=L`907@J(RsO= zg|`Z3u3>R)P-eKAQt()$V}xb7P9C#f9oqag!RD0}Kp(%-D8dOHi2t)(8?2-J31#WVdPFKenU21aB_9ag!WlfEX4oAA700i;LQQZXtfdgw1OshN0Ww4`Z>wiR68HmGsDsNbiLjPP#T!3Jny0kr z=n>hg3s6zG+!ElcqYFuTQP%3&D3UKDS%zp9uRNx1uZ6SKkQesF_B#48c+eLYCWTmO zAWI_pk>ReV-l~!U6OC&qI$72~nw`0a@uqpIIw%zYp5f;MVDHb|X#!?SI$#{|$Msok zrK=E*IH6uN|KA|E;6f#v%!sR+8WzZ2I!E!qegqC>_OCP;ez-rZB>V4xFYcUXAE>N>-r^uvtDh$~2%EUOVw3^Zn42NrBN#mk41o@&|oQ9WNTi*x3 zEEgev94;?cGUqh>T(U3#mveP}^Z4uV`V)&Quofz`6n<#Sb>L zoL^Y4ruZw)t;k|3S$fBO_^{gQ1C^zf#VmFPGD0zAOppaJRV;nI(1hXEp1rji zMKwTN-+=I&AOJJZ)aKyDD1%upaB%_upk7TKF$?K_EzU;9AGMe;hi5HR;~jIga@tkl zDpxU!yM$k{P>uCodQL^zS@UJG;USmv9ShaL{)j8&TuWz4ErvX;PBRH>Q3I>zQ#^7& zykq9W_9`&Hsj&_B0hwhU>d`J6p=tB`)gf4BSr9B%>-!g%3HzdDApjcd{bHBA2rYXS zlaoQrBs%EQD{|tRd<=YilnbkvwozOPXbZf3B$@D6QNSY|pJN+^mt-w23PM%_nIi** z)gueWL+3Z4g4#@?C#v+_v_?z<+<{a%98N$eN5t2+O8&&R@hywgICZ%!H(xDXFv9b9 z;R=3uk$SF0He zRmYTe0J;Jipl1G?T2WTST&v`?7qX?_B@=Oy)-@WqaBXw|LCRYG;5z(vuV>=w z>gBE*qyz{ARm&TF^g5oh0U*|mx_p|gt?N8iMpE*Cm(nT zS<+S}7Bk+k1o4D$6Vh4|Y==TkEbtGCLmp0Xx1fe)JG=_Gs0jC53=iU$18;_lP=r10 z1YqK=P^GzbgD zohb2k^5Iuv9^9qX$Yrs2LlCq3ZVgo<7`+U5nFB$PxUf{^@8c2A6(h9vSyv`Y4|TpSjk0+97-c(e4ICEi0k zxA^mYn7Nqde@Z%~JmJCKDxkJ_ybYgpzHzNSGPWr5?5#k~mF z9Jzg(qrmCMY;g36-AHb32MKA^KQ#Fy31E>gqm(pKF04nd09<`l7vBp~*VI%LRRoeQ zNMe!j@#$c(uS@xKvPkmlk>M&A5<`x?k#F(pW$K88x8;CZ{)qwAHp>WFB#+ymclfQ# zU|{+8|2=39xb*sQU<~t|2mvS25*Dih=6pXSAG!`#-I?oybE;F!gyW>7RG&r>bS?Np zQ0)DPPij;L5BM0rhkU~88&$92Q@*xQ9aaE8A5%XMZ9uIHQY*Mof-|ngv z{@)}DTAQJyeOYU@wZr|pqyPa4eOfsUPasfF8H_60t~02{4Z_e88t*1FzDe3Y1fALx z@xT*EQ-t#Pf0|Wmh5}0oUO$m97YrmL>$}u((mt4tGEJ*(GSK)V4FpEbz|Zr8QS(1 z!T9m=?p{=aG<_>@BC?1TorC3Fvt(iJf;uM1!RQ?LQg)GHK zj~XO9;3O1hDQ3=+xO21l)vaodU-JXHa}A>QIXc`tT6QLSOh2cWIyMwq7d1Es#ZuzU zr|}Mk+hncAVfUJ*mIbYWwz_!~{y7finwaui=c<+*C;W)CRD_VgJQwys>1zr}t}-6o zN|?YeYE$F=lZd(U?r#CIqbHMKv?5tO*5OD>styDl+Ki?C>vG^=NH|%U4J!j<19086vW#hR;C#7s=UY_v`Fuel1-k-E zCHGj`bjc)NHh|j#4Rx(;{$LN<7B6WHLVDq%)H*CWOCF2>x=CFGeim1$Van|ge8461 zg>?wbUBJ{Tk`qLStkuRWK;hZpHDX{_;|w5$K4KP`j~CPXay$)($C9*mU+mawSe^pany?A> z&~Uh$&@;hSdq1~DmN?}x*4S!*YS4rY|!D1_{tt|khJym{(2H7XbtxRb}`{p(| z3(d5vO|NiZTG} zxdVzDaah8aNesaTaUGx?>m?5g{Q6DqZ05K@%UiHuj()j&1DK;lA8n*gZ=#tmV(M-r zU;0WG1LtO6Z_pX#CcwpP>C-fzC7U_75}3ANfxzjAC$ww>a=*4@-AuLq(hpZQOWv;W z0IFvVn1_QWUT(_B3JezloRW!a*j(e;4kB+SxhDj9w+iP5!UeVB+feMjU3M@uMzI{k zneWh;bf+dYI2LpQ-f>ruA@a66c(f~+739&~8jnUZJPvZ-3N`88EnnIr53E&h_Bfm` z_3f0z1+$hGe#af^Geg`baE{2_PRylUlvc*f@5wz&+WY+BJJsP;*yoWpmUsQhK!=O| z*yqWYe?%yq`q6nH6i0>)U>^|0ks;PgXz}ewl`(!i&2Ap3ZJx{w&t&12{v3K+4EKU( zhqgwp9n9aNNy%NY`5R3yVy1K$?P&16<9rM8RO zEGi0#!Xm#YgCs{INl)BWiubZ|n9YU^3c(O`Cwz)r!>q0B0YxL9Y{-0 z-6m>bEQ@j?XL^xn01p_rkP?0m(Lg@4sg&WLRdkae2=6hukx?b#5!4&wp(Ly*qJgYz zL_dj)atRL#RM zqJ#mZgDD5`@e(GVxxC2Gjqn?Y+HBmq8-h%-tq7=WxV4h_?{}$jHya}Vv;A(>!;SxS z{%8AcHQJvH!0K6e=5MNCOm+^7NfC9cB^BAZ%sCVp@&Uk_jiLd(nlVg{p)D0WgvQ+J(fj}L{4dm z6a#cV14%r5CxMNuXAiMNa9R^s_4 z_@LNa{r#etsZ4WwidXNT(@T+|?<2*Fg9rn^h;O+^RYy$Ii=;VBJjn;`S%z$FZz~?# zLxt)5byS#L-dBPJV?90Lm(A1)ZmCThVFYUEJcQv1Qud2Fh zWLa6$q9yYynzb6SGkL?ks>gUS&i}JiXRUlT&^8-w()uY-K(gk@bhe(Ji!{Btrln&p zWtt6Num$1vmlMylHx_V6y+ZOhp_a!SQ{so$$)pW8B{a?=$ZY|OhW(WMNyB|vbO20R zz_SJp7=pL8V=fyw$e6egF1)aWNZ3fB9?9T2W-$+J88F(ggg@IDIoxn1FPJbuH7w!T8+q2&0nUrfO|o@6453+^P=Scj^3oavddWISSIsPE4wyo<;-ZS; zi;EF2ZEFo?&6tTA<~E6I=yLvS7os(<=AU(`gACVj<$iUTVFe#~znWlJ$xH87lML7L zhWi2XC%%U(a7hGVaezi;yfW+DL8E^DlIKjQ4Zv18SVV9p!r5-39{C z6KrrmE0RmVdc9C4S^O%knEYYEnv`IJR_FpXl?BZ;HEYz-H8 zoHwBPkPOEHiXjp4?kg6gU1B-1iiG`Ed zwufevGaF2}IsnBU+hM^CrfK11cGz-*Ika%Hm|OdDM7X7&uDR3nz<#saMYwP6;~$FPkt+w}~6}VjWoI(xSYE#XdyhNS^!B3Nhof-z@QAzVRV7VKL0f zqM8JOATt-N%Ar}}={V>9^D>$GNdLSn0qKGbI1u$;MJi9RoT zE*pA?|BrAy!@b=wj2`9%-Rcly^0WLJ{2k_a4s4-|ZJVj8xD^-kcVyv#W-)Q`mnA;W zU+RWlJHkKjR+ARJAe(`reNigI=%b|8NuzEf7l7lKo+PWKc*f8Cl7v+MK}FED^5r9_ zi^e5w2(t?{&{B>A25f%S{IIxz)pS)VtA}shr)EaMR4vSxWRy|g(V!kNwDzU4C>!P^Mmkq@tb*q{?8>>xf3UF?s# z|4+)4Pk-^-c3M)S^E(L_S+vR!2GO6@xV_cf(nMUMg(3D#2&!brXAoEBFMr5rUiT=L z&Hs`4`q%T2%L^|tuz5@Q(HO46+8rD-jp1;FGHJk24TcbYZ=N6yJj{hl{+hRz9KLu*|oK2WUyTM3h}`x2}<$IuxR6*O{C9}Kyec$J^}pDp4`pK z?`W%UZ3_rWTA4FZQldBKrziz0jN5V$@WzwfD~ul$Go^*&xrUtA4n`zNjz~f>nH5Ft zoQ|2T_3(|ugV@rtyt$2;VFf3{6dA%b^Y<`W%b7~{8+6Yf(vD>~+9B&6ZiK-u&fMu_ ziVThqtTp7GLhKB{gtexR?XZ$FJB;G}*>3U4&Qb*TC_p4;>ccOtX|I`A*T!Ets7ClL zSpX!f6dX?3gevDe-sfr%dCUUCxv)h67`Ag3F_!Fs1fx45`%q(04T*^6Q-_0f4NTchEqweFYWNV?sx_->Ar$5;Nh)^F zS`6;UIegI*>WIOxKxgLHcmPnk5MxFLNWRwk8?O-Xb$#Udm2I9mmv|xOorW=nXiNZ z(!!>|+{~P?HHWyX5FLi=vCDMP)xPQ1$YUnio&HsGMk4Y}fGACbshP~72!OmwV+w7Z z`oGjsh=7=uzTUQ?mI}kNQ~*K?OEU#?!OVQFDrOFto5#q=7@&^yAx48KFg&xkmHf`9 zRL>$!08z}n0ra8X9ye~nvh zpvPa`Ms*F}a!7TJf<;+W!{o*V85RX|vbZKG=L_u0`h0;onW-D7l5?O!)?@c3{>>p( z&A+iv9&pAd1F~>k$x~nrrb01u-V`!=T6Df=3%}~Hs>V6C(HsnNNO0n2p!fcTKl=&3wM~KAboC7FjN(<92o9qd13Rq9 zq0B30ZrGEBW4Av(CoIV|LCR!YEK^}t7V}AlQ)#1Y>6A@UI4tbUEJ3p@>(*egQ-Z&A zdg~(Qxtn_KF5V3|#~zx|eR5ib3v>4bg;e(VUh46EQi^nZI;t+gL}Sha{NuxFcFcpI zg7h0^#9q`=AL7lAt4?F=!~DW$RgZrktui9cwXdU0*$+tPBf4W(|k}aPwvP2VZbJ=L%3?6kkT9fH$x$R6GWsx2^vXr=QGFC+SCZyZyeJ2 zn2$XmcRi=3B|nQsEYDHPP~#BOzf+^nV-T<-SB?6)x12fN%A~BL_JwTw$Xr-BAT%r`*qvv8i{2xZGR(VHVX*z zTapy>+Zx7yN{s&ae;GvVtJp|wkV8zL(ioA$?CAQbr zepf3wabC%LTFLw8m3&~>=@;BTDT#4?XgL4DotTekR`$7};b!QU0h{2bvbUi=DCIM- z-1RvvE5s?NYu$CCUy6|q89!Owgtth%aBu!n^U9pk1{fmx6)-uzmQ4iTAjbOv-v9(W zAn#T$Kq9^+u@&9<$rXn-5eXp_?5{-PZ#0d?0|UQnLmPDWGRs-n ztPfW#&A2}!dSZ~_`F5kRkAoY?w`Vs|j`kk&2HN;V<2xMmkiUMRRuKTyTXCT_dH}wh zAs=Hv7KHRDh^9Z;@`ZW4v9JE?oHxQKIBCh42IDk&j6?iHaL}j#}2?c&Ju@i7t;ZX$*HAQ->su6*Xab z-R3Kp8%V;B@k19}+Hz@Q5=+VB)yMEvlze{8F*VgNj^BAqbq#i1U?fv48B{lkDnrYX znE66U@6hr5OH^4HKS9c3W@blCQ($`C()vJYn{*)FQe?_eb{b&`=RFI%)s z`h7i+7D%M-$wvJ`CR(fxq|*1YQrX}_e)&tVJs0uoUs5yt#S%EW#8_I+1)|b&;Fuz_ zZByxf3tGiDEPOu10^(YYOyJ`dxLG597vf77He9I@31M$dV$pa+TBOO^isW=HNw!ub z%k`umOJNd=snF8W&>gdeA)#0)ZPq;x{g)SeI$PCtw=UH6T%d-%+>*Bz|X6 ziM2VHN@D(~tF%Wqff%fh2>tU zalH5O!B<)bPwtYB(mU@L7wl*T>9MSM6H0<6J{T<1AIj^yLFeAf+pn~$riXD4umV@- z+}(e4H*TMi``)pue)oP_#}Ii9zl~^1_>h_VQ6gLJ;mD0ip@eX@xep*)m_O%s&;yIO z6jRsI##{&W?9xEW;jo3P@st#EKdxua?I>tyXqu0!F|bp5p3t-5J+9$%ms%~b)}JiJ zapFlM&-%CB?QuPI4ozfv%{U~kKsxv#d@aM~eJ12)VOi7P5ZZ9|o|RUUKh%s&3W>Q6 z{{b@PS**p*=j2u(SvzsjWfa%nW0=hKR~F!De93-EG^@=xPBHtt_^Q91MwTDiQTVHN!o zsK2_tWhDX|aWw{kR7)EA?(~qM+47D~6&rqB+xbWi`c@;>k%S2EjrQIDfmKa?7gflN z>hE`7M>#>G@LoS0RGq2sYw-QSKLEITvOlxGAWI1$Z3XIwuecR42+Zsgm|c ztoV$jJfxv>_o6uJzA%`WFt|gO^T)zGUi;N1I_9rJ5Ajfp3HF>7{PQr+;M|qS7j|bh z=vosg*0oDIM;{){SiKdOkH2Ip>jut_BVh{#nYsT}dbrm`9twlyYQstRff5QW%b64K^aYZ7v@ zi0&6&99K{_vzXb}^@GK+#J%3c17qw?qw@xC7~pY?+<a>h^f@uMl z=JW>!Z#Kz?XZ|91%gnb(znxH#Q1-5&=)11G^p_R==3x?ANkto;;naqPv@ckSnbS1X z=^E-0CJ~L2I8qV=ZA&3H@@>wW%&JK|a z-M&622xGoPa%*|^sN(R9wDDk<4v!Oj z&-zA8n{?Klp-tZ!M65Uc*S@B2qo!{ULWrgvcgUvurZny`0xr3;|Hz7kpH~j_L>qST z+JPR|guC^25$)*M9aJKEM2lCScFk2 zjX4fUB11UuK5P>2Ys9*rCH&{@A>4oGADTR_$&TmGtEwCUy`C3PP3*k;?y{pT7X2df z%jm%a3MFHnqb9z^Xm+_A$ACxM*K6YB{)cG7<#_qLCPuufx>x8 zQ>uNj(Rh<>hRx$};{j9vM1KwCs82Py9lQXO!`blsr@HFDBl2v+BcdwhOIRg!ek|kUmfA``ke#ieiph~2V*XCSijYf zp3%UyM(q2dBSN8>%kl?+s#VK`42ZzBveI&VEidpB; zqGX5d3}Y!dVf?hsle9QDOyAsM?ADOvi0{CeN6T-}*~ZAGgWJEc@~CIdli!`Q=WBw8;$Mg0W&oKW4Ne)zmby8U0{q^XA;PD1jFw10sX{&u9VJp(k za>f0K8M%^~ONg8mus6$dk7FvhK#|=S2~if;drN`AaS?q0ufZ?(;^h_8ig_AHr(JKE zM(cD*tFt^z-}#N%C`0O*t0I_}yOG{NB2De63})tRlm}IHMldUT9d?aX;)8ziRa)*X zJ3KL7=Bn0#wt)_P3t1yuPyc`I-TiYNRUOCiP0Y$B*S6{9=4Nk_HleA+)P^S7sVxJH z{9yZoGmc{sEk5vMX`6)7l9tjoV>oG+z?q|of|0EXn+Z!+E>Dg>pwG5Xj-PRb^8=I z4Rih3{wdZFyNm6mUx?`T)K!QE+~F1uChwdmbiPO9>$WSP-`425y)+tGH*NV)W9mV} zW|I+HBs7d}oA_>Kt)O{}%a8du+x+6trFJ#X;@0G(@>JH)x#??F-!(Zi&z1{q#u_)D zDSx@`J_M;V-{G>F+o>g-SKBERqhYtHX_xvalf#lm%uU?W+!>k?wR_a=V@hSL z;d9ruw0)QKySX5zk#wJ*P~+%9v&PS}Zglo-QP8lv)~+0&_3|``ZWdv7(QRdM%;l$f zuglNC$ZE}r6uhbZX#J7+zgkMWvv)KoeBF-2EdHkMY4a)Qy(*oi_hnxB(EW1mw{<6_ z?N2|g;dg9%pnPA&J+|71k&jcWLa>n9&JepeKESen_WO(mQKfO|MVwtk)HPP-kXy zER=tkWjuUXX>yPFqiA`}N7FS)f0PxO$9%>6e=)}*7zdO_k;PXNPW&TjxKQ z{;jewpLWMz^n9|WChji3Fx3+JxhkFFi!-%|bHB){rnXUpKv-(e;)n!^B#2r69oA4EL+<&?3 z)c@Q5tG3jCrsd1DrN+;e-d<-`ANSRKDYVu6%9d;i<*-$YBL<2f#u$;G^X#MQny%nihH#5v+1v;%@g0EUwlDmhFQAH zOR{5zy-MHGXU@|!45k;)!dpVyRkGXtoI_1-by=*e&$Z&4U3^||&g*y$Z_CbqxjX-P zEA083L573m2%3ytVuyBKNFsr}fNV5krFS7>ypvO}6f4!1M8(q$$8~oDO zo3t^%`85m7-{=>ZAMy*#Zwb$_!G_MQ$yMzw3l`nvf26BN)4gt+`i+})xZHMglPJ#C z7nF8{X3p2<{+&us#hjg)LL`_|PLr*$ zZ;X93`%5^Yqcq$as;6Olhr2@?Yb%Yq-&?t7DobNZ8SRz123ZRGbT!p`tePw5Hk0T5 zhCq)kwE_?Lb3Ujt@ZFksj}5nt56_#NV2|1W?$)9`xre>F=g{C3>8cca?edw zrKep@y72jAax(6`@&(nT?)0M<-Geu;kZ?sGNwq_y;ID15E81&HQ+(DOE^EMQ;t2cE zd=M$TYoD)*@Y+)MTf6N1%Qbf$tK~lg5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** u5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009XcZhXV4n*RayM$vQt delta 225493 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.G CL.Len + >CMP.G READ.N + beq .8 Buffer full, discard... inc - beq .9 Buffer full, discard... - sta (pData),y + >STA.G CL.Len pha @@ -128,21 +129,23 @@ CL.Insert >LDA.G CL.Len txa sta (ZPCLBuf),y - >LDA.G bREAD.S - bpl .2 - >INC.G CL.Ptr - clc - rts -.2 txa + >LDA.G bREAD.S + bmi .7 + + txa >SYSCALL PutChar + jsr CL.PrintEOL - >INC.G CL.Ptr +.7 >LDA.G READ.N READ N = 1, don't wait for CR + dec + bne .8 - jmp CL.PrintEOL + lda #$ff + >STA.G CL.bReady -.9 clc +.8 clc rts *-------------------------------------- CL.CLR lda (ZPCLBuf) diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index f377fd0e..79203d07 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -7,12 +7,16 @@ CMD.. lda (ZPArgVBufPtr) >LDYA ZPArgVBufPtr jsr IO.Load - bcs .99 - >LDYA ZPArgVBufPtr - jmp CORE.Load.YAX exec cmd file and continue + bcs CMD.SHIFTA.RTS -.9 jmp CMD.Exec.CSYN -.99 rts + >LDYA ZPArgVBufPtr + jsr CORE.Load.YAX Exec . file + bcs CMD.SHIFTA.RTS + + lda #$C0+C.. + jmp CORE.StkPush + +.9 jmp CMD.E.CSYN *-------------------------------------- CMD.NOHUP lda #S.PS.F.NOHUP tsb CORE.PSFlags @@ -33,7 +37,7 @@ CMD.SHIFTA >SYSCALL ArgV sta (pPS),y .8 clc - rts +CMD.SHIFTA.RTS rts *-------------------------------------- CMD.PUSHD >LDA.G PUSHD.STACK cmp #PUSHD.STACK+PUSHD.STACK.MAX @@ -69,7 +73,7 @@ CMD.POPD >LDA.G PUSHD.STACK CMD.POPD.RTS rts -CMD.POPD.CSYN jmp CMD.Exec.CSYN +CMD.POPD.CSYN jmp CMD.E.CSYN *-------------------------------------- CMD.PWD ldy #S.PS.hCWD lda (pPs),y @@ -285,7 +289,7 @@ CMD.SET.1 .8 clc .9 rts -.99 jmp CMD.Exec.CSYN +.99 jmp CMD.E.CSYN CMD.SET.UNSET >LDYA ZPVarNamePtr >SYSCALL UnsetEnv @@ -319,16 +323,16 @@ CMD.SET.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.In bcs .9 - lda #$ff - >STA.G bREAD.S secret - >STA.G bReadMode + lda #255 + >STA.G READ.N + >STA.G bREAD.S + + jmp CMD.READ.VAR - >SLEEP - clc .9 rts *-------------------------------------- CMD.DATE sec - .HS 90 bcc + .HS 90 BCC CMD.TIME clc php >LEA.G TimeBuf @@ -444,10 +448,16 @@ CMD.GETKEY lda (ZPArgVBufPtr) >LDYA ZPArgVBufPtr >SYSCALL SetEnv -.9 rts +.9 +CMD.GETKEY.RTS rts *-------------------------------------- CMD.READ lda (ZPArgVBufPtr) - beq .9 + beq .9 + + stz ZPVarNamePtr+1 + >STZ.G bREAD.S + dec + >STA.G READ.N .1 jsr CMD.IsSwitch bcs .4 @@ -457,10 +467,10 @@ CMD.READ lda (ZPArgVBufPtr) lda #$ff >STA.G bREAD.S - bra .7 + bra .5 -.2 cmp #'P' - bne .9 +.2 cmp #'P' + bne .3 jsr CORE.ArgV.Next beq .9 @@ -468,39 +478,73 @@ CMD.READ lda (ZPArgVBufPtr) >PUSHBI 0 >LDYA ZPArgVBufPtr >SYSCALL printf - bcs .99 - bra .7 + bcs CMD.GETKEY.RTS + bra .5 + +.9 jmp CMD.E.CSYN + +.3 cmp #'N' + bne .9 + + jsr CORE.ArgV.Next + beq .9 + + >LDYA ZPArgVBufPtr + >SYSCALL AToL + bcs CMD.GETKEY.RTS + + >PULLA + >STA.G READ.N + + inc pStack + inc pStack + inc pStack + + bra .5 .4 >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr - >LDA.G bReadMode - bne .9 - lda #$ff - >STA.G bReadMode - -.7 jsr CORE.ArgV.Next +.5 jsr CORE.ArgV.Next bne .1 - >LDA.G bReadMode + lda ZPVarNamePtr+1 beq .9 - clc -.99 rts -.9 jmp CMD.Exec.CSYN +CMD.READ.VAR jsr CL.Reset + +.1 >SYSCALL GetChar + bcs .9 + + jsr CL.CHARIN + + >LDA.G CL.bReady + bpl .1 + + lda (ZPCLBuf) + bne .2 + + >LDYA ZPVarNamePtr + >SYSCALL UnSetEnv + rts + +.2 >PUSHW ZPCLBuf + + >LDYA ZPVarNamePtr + >SYSCALL SetEnv + +.9 rts *-------------------------------------- CMD.SLEEP lda (ZPArgVBufPtr) - beq .9 + beq CMD.REN.CSYN >LDYA ZPArgVBufPtr >SYSCALL AToL - bcs .9 + bcs CMD.REN.CSYN >PULLL.G Sleep clc rts - -.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.PAUSE lda #$FF >STA.G bPause @@ -508,13 +552,11 @@ CMD.PAUSE lda #$FF rts *-------------------------------------- CMD.MD lda (ZPArgVBufPtr) - beq .9 + beq CMD.REN.CSYN >LDYA ZPArgVBufPtr >SYSCALL MKDir rts - -.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.REN lda (ZPArgVBufPtr) beq .9 @@ -529,10 +571,11 @@ CMD.REN lda (ZPArgVBufPtr) rts .90 >PULLYA -.9 jmp CMD.Exec.CSYN +.9 +CMD.REN.CSYN jmp CMD.E.CSYN *-------------------------------------- CMD.RD lda (ZPArgVBufPtr) - beq .9 + beq CMD.REN.CSYN >PUSHEA.G StatBuf >LDYA ZPArgVBufPtr @@ -541,13 +584,11 @@ CMD.RD lda (ZPArgVBufPtr) >LDA.G StatBuf+S.STAT.P.TYPE cmp #S.FI.T.DIR - bne .9 + bne CMD.REN.CSYN >LDYA ZPArgVBufPtr >SYSCALL Remove .99 rts - -.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.FUNCTION lda (ZPArgVBufPtr) beq .9 @@ -580,7 +621,7 @@ CMD.FUNCTION lda (ZPArgVBufPtr) lda (ZPArgVBufPtr),y beq .11 -.9 jmp CMD.Exec.CSYN +.9 jmp CMD.E.CSYN .99 rts *-------------------------------------- @@ -659,7 +700,11 @@ CMD.CALL >LDA.G hFuncList bcs CMD.CALL.RTS >LDYA ZPArgVBufPtr FUNC PARAM1 PARAM2... - jmp CORE.Load.YAX + jsr CORE.Load.YAX Exec FUNC + bcs CMD.CALL.RTS + + lda #$C0+C.CALL + jmp CORE.StkPush *-------------------------------------- CMD.EXIT lda (ZPArgVBufPtr) beq .1 no arg, exit 0 @@ -678,12 +723,18 @@ CMD.EXIT lda (ZPArgVBufPtr) inc pStack .1 sta M32.ACC - -.2 jsr CORE.StkPull + +.2 jsr CORE.StkPull Pull everything until CALL . CL... bcs .9 - cmp #$C0 in CALL / . context ? - beq CMD.EXIT.CALL + cmp #$C0+C.. in CALL . CL context ? + beq CMD.EXIT.FILE + + cmp #$C0+C.CALL + beq CMD.EXIT.FILE + + cmp #$C0+C.CLEXEC + beq CMD.EXIT.SH jsr CMD.EXIT.POP bcc .2 @@ -694,7 +745,14 @@ CMD.EXIT lda (ZPArgVBufPtr) * sec rts *-------------------------------------- -CMD.EXIT.CALL jsr CORE.StkPull +CMD.EXIT.SH jsr CMD.EXIT.FILE + + lda #$ff + >STA.G bExitOnEOF + clc + rts +*-------------------------------------- +CMD.EXIT.FILE jsr CORE.StkPull >SYSCALL freemem Code buffer ldy #S.PS.hARGV @@ -776,11 +834,12 @@ CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult jsr CORE.StkPull remove C.CASE jsr CORE.StkGet and #$7F + sta (pDATA),y .8 clc rts -.9 jmp CMD.Exec.CSYN +.9 jmp CMD.E.CSYN *-------------------------------------- * stack-1 hVALUE * stack SWITCH TOKEN @@ -793,6 +852,7 @@ CMD.SWITCH jsr CORE.StkGetCtx jsr EXP.GET bcs .9 + >SYSCALL strdup bcs .9 @@ -850,17 +910,20 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult ora #C.CASE jmp CORE.StkPush -.9 jmp CMD.Exec.CSYN +.9 +CMD.E.CSYN lda #E.CSYN + sec + rts *-------------------------------------- CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult - bcs .9 + bcs CMD.E.CSYN and #$3F cmp #C.SWITCH beq .1 cmp #C.CASE - bne .9 + bne CMD.E.CSYN jsr CORE.StkPull remove C.CASE @@ -868,11 +931,9 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult and #$C0 ora #C.DEFAULT jmp CORE.StkPush - -.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult - bcs CMD.END.CSYN + bcs CMD.E.CSYN and #$3F cmp #C.SWITCH @@ -882,7 +943,7 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult beq .2 cmp #C.DEFAULT - bne CMD.END.CSYN + bne CMD.E.CSYN .2 jsr CORE.StkPull remove C.CASE or C.DEFAULT @@ -890,27 +951,25 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult jsr CORE.StkPull get hVALUE >SYSCALL freemem rts - -CMD.END.CSYN jmp CMD.Exec.CSYN *-------------------------------------- CMD.FOR jsr CORE.StkGetCtx lda (ZPArgVBufPtr) - beq CMD.END.CSYN + beq CMD.E.CSYN >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr jsr CORE.ArgV.Next - beq CMD.END.CSYN + beq CMD.E.CSYN >PUSHW ZPArgVBufPtr >LDYA L.IN >SYSCALL StrCaseCmp - bcs CMD.END.CSYN + bcs CMD.E.CSYN jsr CORE.ArgV.Next - beq CMD.END.CSYN + beq CMD.E.CSYN lda #8 Make sure 8 bytes free on stack jsr CORE.StkCheck diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 146e537e..c9634a19 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -21,20 +21,18 @@ CORE.FUNCRESET >LDA.G hFuncList >SYSCALL SListFree >STZ.G hFuncList -.8 -CORE.FUNCRESET.RTS - rts +.8 rts *-------------------------------------- -CORE.Load.YAX stx M32.ACC X=Code to Execute +CORE.Load.YAX stx M32.ACC X = Code to Execute jsr CORE.ArgV.Dup Y,A = ArgV - bcs CORE.FUNCRESET.RTS - sta M32.ACC+2 A=ARGC - stx M32.ACC+1 X=ARGV + bcs .9 + sta M32.ACC+2 A = ARGC + stx M32.ACC+1 X = hARGV lda #8 jsr CORE.StkCheck - bcs CORE.FUNCRESET.RTS + bcs .9 >LDYA ZPInputBuf jsr CORE.StkPushYA @@ -48,7 +46,7 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute ldy #S.PS.hARGV lda (pPS),y - jsr CORE.StkPush old ARGV + jsr CORE.StkPush old hARGV ldy #S.PS.ARGC lda M32.ACC+2 new ARGC @@ -56,18 +54,18 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute iny #S.PS.hARGV lda M32.ACC+1 - sta (pPS),y new ARGV + sta (pPS),y new hARGV lda M32.ACC new code jsr CORE.StkPush - lda M32.ACC +* lda M32.ACC >SYSCALL GetMemPtr >STYA ZPInputBuf >STYA ZPInputBufPtr - lda #$C0 - jmp CORE.StkPush +* clc +.9 rts *-------------------------------------- * http://heirloom.sourceforge.net/sh/sh.1.html *-------------------------------------- @@ -94,13 +92,16 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute * set hStdOut = Std *-------------------------------------- CORE.Run.EOF jsr CORE.StkPull - bcs .9 + bcs * - cmp #$C0 in CALL / . context ? + cmp #$C0+C.. check CALL . CL context + beq .1 + cmp #$C0+C.CALL + beq .1 + cmp #$C0+C.CLEXEC bne .9 - jsr CMD.EXIT.CALL - bcs .9 +.1 jsr CMD.EXIT.FILE jsr IO.Reset @@ -108,7 +109,7 @@ CORE.Run.EOF jsr CORE.StkPull sec rts Ending 0, CS,A=0 -.9 lda #E.UNEXP +.9 lda #E.UNEXPEOF sec rts *-------------------------------------- @@ -305,12 +306,14 @@ CORE.SkipLine jsr CORE.GetNextCharNB * search ZPInputBufPtr/ZPArgVBufPtr in Y,A table *-------------------------------------- CORE.LookupInputBuf - >STYA ZPPtr1 - >LDYA ZPInputBufPtr - bra CORE.Lookup -CORE.LookupArgVBuf - >STYA ZPPtr1 + sec + .HS 90 BCC +CORE.LookupArgVBuf + clc + >STYA ZPPtr1 Keywords table >LDYA ZPArgVBufPtr + bcc CORE.Lookup + >LDYA ZPInputBufPtr CORE.Lookup >STYA ZPPtr2 @@ -318,47 +321,59 @@ CORE.Lookup >STYA ZPPtr2 .1 ldy #$ff -.2 iny - lda (ZPPtr2),y - beq .3 Src Keyword end - - jsr CORE.IsSpaceOrEndCmd - bcc .3 Src Keyword end +.2 jsr .7 get next valid char in src text + bcs .3 - lda (ZPPtr1),y - beq .4 Table Keyword end - lda (ZPPtr2),y +.20 jsr ToUpperCase + + eor (ZPPtr1),y match table char ? + asl compare only 7 bits + bne .4 no match...get next table keyword - jsr ToUpperCase - - cmp (ZPPtr1),y - beq .2 + bcc .2 not last char in this keyword + + jsr .7 next char in text... + bcc .4 valid....failed + +.8 tya Keyword Len - bra .4 - -.3 lda (ZPPtr1),y - bne .4 - - tya Keyword Len - dey clc -.8 rts - -.4 jsr IncPtr1 + rts - lda (ZPPtr1) - bne .4 +.3 dey + lda (ZPPtr1),y was last char in this keyword ? + bmi .8 + + iny + +.41 jsr IncPtr1 skip chars to next keyword + +.4 lda (ZPPtr1) + bpl .41 jsr IncPtr1 .6 inx - lda (ZPPtr1) Array Ending 0, must be an external Cmd.... + lda (ZPPtr1) Array Ending 0, lookup failed bne .1 lda #E.SYN sec rts + +.7 iny + lda (ZPPtr2),y Get Src text char... + beq .9 end of text + + jsr CORE.IsSpaceOrEndCmd + bcc .9 end of valid chars + + clc + rts + +.9 sec + rts *-------------------------------------- * ArgV *-------------------------------------- @@ -388,7 +403,7 @@ CORE.ArgV.Dup >STYA ZPPtr1 >STYA ZPPtr2 - lda #$ff Arg count-1 (skip $0) + lda #$ff Arg count-1 (skip $0) pha .5 pla @@ -666,16 +681,22 @@ CORE.StkGetCtx jsr CORE.StkGet tax bcs .1 no context... - cmp #$C0 in a call... + cmp #$C0+C.. in a call... beq .1 CS + cmp #$C0+C.CALL + beq .1 CS + + cmp #$C0+C.CLEXEC + beq .1 CS + and #$80 get current.. lsr becomes parent - bra .2 + bra .8 .1 lda #$40 ...set Parent = true -.2 sta CORE.TestResult +.8 sta CORE.TestResult txa rts diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index d7e5adc5..1440c89c 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -28,11 +28,11 @@ EXP.GET jsr CORE.ArgV.Next jsr EXP.FPU.EXEC - jsr CORE.ArgV.Next another op ? + jsr CORE.ArgV.Next another op ? bne .2 .8 >PUSHBI 4 ACC on stack - >PUSHW L.M32.Printf + >PUSHW L.FMT.Long >LEA.G M32.BUF >SYSCALL sprintf bcs .9 diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 8bbb1107..6b090e24 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -199,7 +199,7 @@ IO.PrintBatchErrMsg >PUSHBI 2 >PUSHW L.MSG.BATCHLINE - jsr .80 + jsr IO.PrintErr ldy #$ff ldx #'-' @@ -217,11 +217,7 @@ IO.PrintBatchErrMsg >PUSHBI 4 >PUSHW L.MSG.BATCHERR -.80 ldy #S.PS.hStdErr - lda (pPS),y - >SYSCALL fprintf - -.9 rts +.80 bra IO.PrintErr *-------------------------------------- IO.PrintErrMsg pha Save EC for PrintF @@ -255,7 +251,8 @@ IO.PrintErrMsg pha Save EC for PrintF >PUSHA >PUSHBI 3 >PUSHW L.MSG.ERROR - ldy #S.PS.hStdErr + +IO.PrintErr ldy #S.PS.hStdErr lda (pPS),y >SYSCALL fprintf rts diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index f2b01988..d67699b9 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -1,5 +1,5 @@ NEW - AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 @@ -48,6 +48,8 @@ C.ELSE .EQ 31 C.FI .EQ 32 C.END .EQ 33 *-------------------------------------- +C.CLEXEC .EQ 63 +*-------------------------------------- E.CSYN .EQ $C0 E.ESYN .EQ $C1 E.STACKERROR .EQ $C2 @@ -57,7 +59,7 @@ E.NOFOR .EQ $C5 E.NOIF .EQ $C6 E.BADFTYPE .EQ $C7 E.FUNDEF .EQ $C8 -E.UNEXP .EQ $C9 +E.UNEXPEOF .EQ $C9 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I @@ -125,6 +127,7 @@ L.MSG.PID .DA MSG.PID L.FMT.DATE .DA FMT.DATE L.FMT.TIME .DA FMT.TIME L.FMT.GETKEY .DA FMT.GETKEY +L.FMT.Long .DA FMT.Long J.ESC .DA CL.BS left arrow .DA HIS.GetNext .DA HIS.GetPrev @@ -187,10 +190,9 @@ J.EXP.OP.UNARY .DA EXP.OP.UNARY.D L.EXP.OP.BINARY .DA EXP.OP.BINARY L.EXP.OP.MATH .DA EXP.OP.MATH L.EXP.OP.LOGIC .DA EXP.OP.LOGIC -L.HOME .DA HOME L.HOME.PROFILE .DA HOME.PROFILE +L.HOME .DA HOME L.PS1 .DA PS1 -L.M32.Printf .DA M32.Printf L.ERR.Codes .DA ERR.Codes L.ERR.Messages .DA ERR.Messages .DA 0 @@ -222,7 +224,12 @@ CS.RUN jsr CL.Init lda (pPS),y >SYSCALL GetMemPtr plx - jsr CORE.Load.YAX + jsr CORE.Load.YAX Exec Batch file + bcs CS.INIT.RTS + + lda #$C0+C.. + jsr CORE.StkPush + bra CS.RUN.LOOP *-------------------------------------- .1 jsr CMD.CD.HOME @@ -235,26 +242,22 @@ CS.RUN jsr CL.Init >SYSCALL printf bcs CS.INIT.RTS - >PUSHEA.G StatBuf - >LDYA L.HOME.PROFILE - >SYSCALL STAT - bcs CS.RUN.LOOP no profile... - >LDYA L.HOME.PROFILE jsr IO.Load - bcs CS.RUN.LOOP + bcs CS.RUN.LOOP No profile... + >LDYA L.HOME.PROFILE - jsr CORE.Load.YAX exec profile and continue + jsr CORE.Load.YAX Exec profile and continue -* bcs CS.RUN.LOOP + bcs CS.RUN.LOOP + + lda #$C0+C.. + jsr CORE.StkPush *-------------------------------------- CS.RUN.LOOP >SLEEP .1 jsr CheckSleep - beq .3 - - >LDA.G bSET.C - bne CS.RUN.LOOP + beq .2 ldy #S.PS.hStdIn lda (pPS),y @@ -268,67 +271,69 @@ CS.RUN.LOOP >SLEEP bcs .9 I/O err cmp #3 Ctrl-C - bne CS.RUN.LOOP + bne .11 lda (pData) batch mode ? beq CS.RUN.LOOP >LDA.G bSET.C beq .8 + bra CS.RUN.LOOP + +.11 cmp #19 test Ctrl-s + bne CS.RUN.LOOP -.3 >LDA.G bPause - bpl .6 - -.4 >SYSCALL GetChar - bcs .9 I/O err - -.5 cmp #3 Ctrl-C - bne .60 - - lda (pData) batch mode ? - beq .61 - - >LDA.G bSET.C - beq .8 - bra .61 - -.60 tax - - >LDA.G bPause - asl - bpl .61 not from PAUSE command - - cpx #C.CR - bne .4 - -.61 >STZ.G bPause - bra .62 - -.6 >LDA.G bReadMode read mode ? - bne .7 - -.62 lda (pData) batch mode ? - beq CS.RUN.INTERACTIVE - - jmp CS.RUN.BATCH -.7 jmp CS.RUN.READ - + lda #$80 + >STA.G bPause + bra CS.RUN.LOOP +*-------------------------------------- .8 lda #3 User Interrupt sec .9 rts *-------------------------------------- -CS.RUN.INTERACTIVE - >LDA.G bExitOnEOF - beq .10 - - jmp CS.RUN.LOOP.EXIT +.2 >LDA.G bPause + bpl .6 -.10 jsr IO.Reset +.3 >SYSCALL GetChar + bcs .9 I/O err + + cmp #3 Ctrl-C + bne .4 + + lda (pData) batch mode ? + beq .5 + + >LDA.G bSET.C + beq .8 + bra .5 + +.4 tax + + >LDA.G bPause + asl $ff ? + bpl .5 not from PAUSE command + + cpx #C.CR + bne .3 + +.5 >STZ.G bPause +*-------------------------------------- +.6 lda (pData) batch mode ? + + bne CS.RUN.BATCH +*-------------------------------------- +CS.RUN.INTERACTIVE + jsr IO.Reset jsr CL.Reset + jsr CL.PrintPrompt bcs .9 - + + >STZ.G bREAD.S + dec + >STA.G READ.N + .1 >SYSCALL GetChar bcs .9 I/O error @@ -361,7 +366,11 @@ CS.RUN.INTERACTIVE >SYSCALL GetMemPtr Y,A =ARGV plx - jsr CORE.Load.YAX X = Copy of CL + jsr CORE.Load.YAX Exec CL + bcs .9 + + lda #$C0+C.CLEXEC + jsr CORE.StkPush .6 jsr CORE.Run @@ -369,68 +378,7 @@ CS.RUN.INTERACTIVE .9 rts *-------------------------------------- -CS.RUN.READ jsr CL.RESET - -.1 >SYSCALL GetChar - bcs CS.RUN.READ.9 - - jsr CL.CHARIN - - >LDA.G CL.bReady - bpl .1 - - lda (ZPCLBuf) - bne .2 - - >LDYA ZPVarNamePtr - >SYSCALL UnSetEnv - bra .7 - -.2 >PUSHW ZPCLBuf - - >LDYA ZPVarNamePtr - >SYSCALL SetEnv - -.7 php - pha - - >STZ.G bReadMode - >STA.G bREAD.S - - pla - plp - -.8 jmp CS.RUN.LOOP.END -CS.RUN.READ.9 rts -*-------------------------------------- -CS.RUN.BATCH >LDA.G bSET.C - bne .2 - - ldy #S.PS.hStdIn - lda (pPS),y - >SYSCALL feof - bcs .2 unsupported - - tay - bne .2 - - >SYSCALL GetChar - bcs CS.RUN.READ.9 - - cmp #3 test Ctrl-c - bne .1 - - bra CS.RUN.LOOP.END CS - -.1 cmp #19 test Ctrl-s - bne .2 - - lda #$80 - >STA.G bPause - clc - jmp CS.RUN.LOOP.END - -.2 >LDA.G bSET.X +CS.RUN.BATCH >LDA.G bSET.X beq .5 ldy #$ff @@ -452,27 +400,25 @@ CS.RUN.BATCH >LDA.G bSET.C bcs CS.RUN.LOOP.RTS .5 jsr CORE.Run - bcc CS.RUN.LOOP.END - - tay 0 = EOF - bne CS.RUN.LOOP.END - - lda #0 - sec CS.RUN.LOOP.END ldy #S.PS.RC sta (pPs),y bcc CS.RUN.LOOP.80 tay - beq CS.RUN.LOOP.80 + beq CS.RUN.LOOP.80 0 = EOF >LDA.G bSET.E bmi CS.RUN.LOOP.80 + + jsr CORE.StkGet + cmp #$C0+C.CLEXEC + beq .1 + jsr IO.PrintBatchErrMsg bcs CS.RUN.LOOP.RTS - ldy #S.PS.RC +.1 ldy #S.PS.RC lda (pPs),y jsr IO.PrintErrMsg @@ -518,6 +464,7 @@ CS.DOEVENT lda (pEvent) CS.QUIT jsr HIS.Quit jsr CL.Quit jsr CORE.Quit + clc rts *-------------------------------------- @@ -621,12 +568,12 @@ MSG.PID .AZ "PID=%d\r\n" FMT.DATE .AZ "%A (%w), %B %d %Y" FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)" FMT.GETKEY .AZ "%d" -M32.Printf .AZ "%L" +FMT.Long .AZ "%L" *-------------------------------------- -HOME .AZ "${HOME}" HOME.PROFILE .AZ "${HOME}PROFILE" -PS1 .AZ "${PS1}" .HS 00 To Make It ArgV +PS1 .AZ "${PS1}" +HOME .AZ "${HOME}" *-------------------------------------- EscChars .AS 'DBAC' EscChars.Cnt .EQ *-EscChars @@ -634,76 +581,82 @@ EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS *-------------------------------------- IN .AZ "IN" *-------------------------------------- -CMD .AZ ".." - .AZ "." - .AZ "CD" - .AZ "NOHUP" - .AZ "DATE" - .AZ "ECHO" - .AZ "EXIT" - .AZ "GETKEY" - .AZ "MD" - .AZ "PAUSE" - .AZ "PWD" - .AZ "RD" - .AZ "READ" - .AZ "REN" - .AZ "SET" - .AZ "SLEEP" - .AZ "SHIFT" - .AZ "TIME" - .AZ "PUSHD" - .AZ "POPD" - .AZ "FUNCTION" - .AZ "CALL" - .AZ "BREAK" - .AZ "SWITCH" - .AZ "CASE" - .AZ "DEFAULT" - .AZ "FOR" - .AZ "WHILE" - .AZ "IF" - .AZ "NEXT" - .AZ "LOOP" - .AZ "ELSE" - .AZ "FI" - .AZ "END" +CMD .AT ".." + .AT "." + .AT "CD" + .AT "NOHUP" + .AT "DATE" + .AT "ECHO" + .AT "EXIT" + .AT "GETKEY" + .AT "MD" + .AT "PAUSE" + .AT "PWD" + .AT "RD" + .AT "READ" + .AT "REN" + .AT "SET" + .AT "SLEEP" + .AT "SHIFT" + .AT "TIME" + .AT "PUSHD" + .AT "POPD" + .AT "FUNCTION" + .AT "CALL" + .AT "BREAK" + .AT "SWITCH" + .AT "CASE" + .AT "DEFAULT" + .AT "FOR" + .AT "WHILE" + .AT "IF" + .AT "NEXT" + .AT "LOOP" + .AT "ELSE" + .AT "FI" + .AT "END" + .HS 00 +CORE.IO .AT "&" + .AT "<" + .AT ">>" + .AT ">" + .AT "1>>" + .AT "1>" + .AT "2>>" + .AT "2>" + .HS 00 +EXP.BEGIN .AT "![" + .AT "[" + .HS 00 +EXP.OP.UNARY .AT "-D" + .AT "-E" + .AT "-F" + .AT "-N" + .AT "-Z" + .HS 00 +EXP.OP.BINARY .AT "=" + .AT "!=" + .AT ".<" + .AT "<=" + .AT ".>" + .AT ">=" + .AT "-EQ" + .AT "-NE" + .AT "-LT" + .AT "-LE" + .AT "-GT" + .AT "-GE" + .HS 00 +EXP.OP.MATH .AT "+" + .AT "-" + .AT "*" + .AT "/" + .AT "MOD" + .HS 00 +EXP.OP.LOGIC .AT "AND" + .AT "OR" .HS 00 *-------------------------------------- -* https://www.tldp.org/LDP/abs/html/io-redirection.html -*-------------------------------------- -CORE.IO .AZ "&" - .AZ "<" - .AZ ">>" - .AZ ">" - .AZ "1>>" - .AZ "1>" - .AZ "2>>" - .AZ "2>" - .HS 00 -*-------------------------------------- -EXP.BEGIN .AZ "![" - .AZ "[" - .HS 00 -EXP.OP.UNARY .AZ "-D" - .AZ "-E" - .AZ "-F" - .AZ "-N" - .AZ "-Z" - .HS 00 -EXP.OP.BINARY .AZ "=" - .AZ "!=" - .AZ ".<" - .AZ "<=" - .AZ ".>" - .AZ ">=" - .AZ "-EQ" - .AZ "-NE" - .AZ "-LT" - .AZ "-LE" - .AZ "-GT" - .AZ "-GE" - .HS 00 EXP.OP.BINARY.BITS .DA #%010 .DA #%101 @@ -718,16 +671,8 @@ EXP.OP.BINARY.BITS .DA #%110 .DA #%001 .DA #%011 -EXP.OP.MATH .AZ "+" - .AZ "-" - .AZ "*" - .AZ "/" - .AZ "MOD" - .HS 00 + EXP.OP.MATH.FPU .DA #FPU.ADD32,#FPU.SUB32,#FPU.IMUL32,#FPU.IDIV32,#FPU.IMOD32 -EXP.OP.LOGIC .AZ "AND" - .AZ "OR" - .HS 00 *-------------------------------------- .INB USR/SRC/SHARED/X.ERRORS.S *-------------------------------------- @@ -739,7 +684,6 @@ PUSHD.STACK .BS PUSHD.STACK.MAX+1 hFuncList .BS 1 -bReadMode .BS 1 bExitOnEOF .BS 1 bEscMode .BS 1 @@ -750,6 +694,7 @@ bSET.E .BS 1 bSET.X .BS 1 bREAD.S .BS 1 +READ.N .BS 1 Sleep .BS 4 StatBuf .BS S.STAT diff --git a/SHARED/X.ERRORS.S.txt b/SHARED/X.ERRORS.S.txt index 78506bc4..1754452f 100644 --- a/SHARED/X.ERRORS.S.txt +++ b/SHARED/X.ERRORS.S.txt @@ -41,7 +41,7 @@ ERR.Codes .DA #MLI.E.IO .DA #E.NOIF .DA #E.BADFTYPE .DA #E.FUNDEF - .DA #E.UNEXP + .DA #E.UNEXPEOF *-------------------------------------- ERR.Count .EQ *-ERR.Codes *--------------------------------------