From f50fee89e4f489a1af8a86d74d13b3d80ea33b3a Mon Sep 17 00:00:00 2001 From: burniouf Date: Sat, 20 Jan 2024 14:13:22 +0100 Subject: [PATCH] LIBTUI : Added Show/Hide and FindActive API MAN & NETCONFIG updated --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/MAN.S.txt | 4 +- BIN/NETCONFIG.S.txt | 2130 ++++++++++++++++++++------------------ BIN/TUITEST.S.txt | 116 ++- INC/LIBTUI.I.txt | 6 +- LIB/LIBTUI.S.BUT.txt | 6 +- LIB/LIBTUI.S.CBOX.txt | 16 +- LIB/LIBTUI.S.CONT.txt | 2 +- LIB/LIBTUI.S.DLG.txt | 8 +- LIB/LIBTUI.S.LABEL.txt | 8 +- LIB/LIBTUI.S.LBOX.txt | 10 +- LIB/LIBTUI.S.OBJ.txt | 83 +- LIB/LIBTUI.S.RADIO.txt | 8 +- LIB/LIBTUI.S.TBOX.txt | 7 +- LIB/LIBTUI.S.TLINE.txt | 11 +- LIB/LIBTUI.S.txt | 3 + 16 files changed, 1348 insertions(+), 1070 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 810982b9fee4a184a60b6df5a1ed70d3fd08197a..6734d59bc2b8a8e927fc129405b16d51d356be8c 100644 GIT binary patch delta 184203 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 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 h6JP>NfC(@GCcp%k025#WOn?b60VeQ&i@+T3e*+bjNG|{Y delta 412225 zcmbTf3tW^{`Z#`OaNvdEHq3p7%W#Jo92itCY9<5dpeP8aprs&SQV57>TGogcG`nfF zoZQ`tEG;Svt)zR_R;%t-*zR^Qx9qZAcH0)Wc5B-%zvnsUyzk6l`~81D|N7v}Jm;L} zJm)#jd2Z*t=iU1KPjOq}Z{)K{liUSqrdz+5G;dNtL80;1>6-LOo`QJetu5@!6vM5% zHFp4nm~PDt$D$m=qqX66QL2j{Jrcjre(Ul0*zG^LcKzg1jsE0PTjnK%k+Wf>Ge6cy z#y=vC$pzU_qq!T^->9PRNq;{5h4dHGUrRroKAN{l9ivhY6FP0P+Ci6ZR^LZ;6{;T( zrK(lOwy3F!zH*Iv`e4z#{DEuL$F2=~sa3BfMF|9HJ^mBm#V>1bO^wVQ_%Q6)hm(Fe zeG+y#dS{|$x+>G!P+nVA>#nJ;AndJmk=D_@gF|oUv~YFq#6AoDSUisT%?u} zy!FSAzFCu6FlqGr4dG{&Iwdo49?zOgj22SwE^labucVZa#4Q)u~=nbd1uF= z*TU7l9&c~k02FTX5S>jFF1-b77ZROa0DKHEg;*T|u&Q!>>w@mKc5K=2nM$mwbnjTW z#hfO}tGc`!R8yU6cQ)7cc#U_SyMc8D^Ohq6 z+(`e8SigW6a}{Vs^<0LekeHn`|8%(N5|>ieP+hgK@&;^DL`-=Bu(zg>Au1u}$qKYu zhJv)1-3qu|0T&WeKE3;NxY1dll-8A1RMoH^V1PQ0fX`vXdq`p-J$E|Xu9`x>$B(Jh z@FY8owmBix}XqK)`bOgFy~o}wzD`=M-Jsf@wBsI^?m`D|THWMmkY=sP42}zhE zW8;ugVxB7?Rb5@}z1qgzNE1$hkEZ+)2&xJ$Udl^huIB}VeH=W680QNx46l)~1BB98 z9RN0Q;4~sF;3S$Cio%|Tj=s)zjtHcsMu2DbENJiAz(u%(SZd|k^?faU8`keaVhceY z7s+stch*H=A+gla@jr%}{q=I$l9paxRz#!*(fwjkSiYvCvu!==9+rb<39gZ)yo`x= z(NrQe@-~JhfGdlcEf*p!<7N8gP$n-4UKAx=!po8`rF;Jro)o?UaGO`shu_qg(wcdZ zwFR27)#9%0>t&@VKFQkcSUz= zV=$^UK?O~L0#_kP?x5Ga8J?uNoc;Udq_;;@3F;CStF(^OYwLw#T>I{-woPn$IPwCLydFzv-&^6$g*}V#}T`g*aV%x&8C0+xi z-o*`WUw7a9_RUN#WV$TZin7WjY*h(nkVLJ8}BB0 zJKg_wc#?ew)M2X3UAZKP2OeVINl(8WZVMkkM((2L-wroL?&fWc*U|WQ!VPoxkjf?Q zMT@Jr#?C155Zm<#@>RR*E2}HZ8!9W9dB`X!B-R^5No`$aeSKvGV@pQK6e8U?diP`D zD%I$uGvSXECB%@Q%-jn92-eb5FvT$Xa(qPj4F3W%w~5KAGgEKK_(#ScoqAWh>p_=y zGM#ey)D_c=MXzRcr~WIeDchSnKea1&DEF(ZiT`iU+@3k?`oPsW`NWi`r`|X1+M*9K zKghhr<dVv46m{ixk%9f&A@- z$)W$h48N~%?{)9aZ*{*g`BeU?{MYia#vA!3Ma{3+?-wQyL-`AnpMifj!1LKZ*)kw?@HN`j97T>h6 z_{#;wmgd)>R64w{_`tuR(9%2!|mEEw?!i zdCwdwKjY)oyt$6?#39EK@2v6YWj@DOS!)=kt4~qVnJdhT@ORKKb2P@44|Y&DKuGr>w%sgprt`us!cADju)h9sljtx##M}%7=B1 zf2O^1_Lj4^<3ES(sqDkXK8C}B%F@pctAl=?9iD_W4=e;u9w1x8o?Be(_>|sP8&N7j zZ(D(uPw8j15f4kX#SCK&y>n4SMt)84;o9OI6+0{2=CsXies;8YJlt_j#%Ejq)qJoL z>m96MwT+w%13kYe!qT)VBc#yG3r*|;82s!y*2S~E#bZX8Qtx=&fvRn<2v|eX&xpe%|p>gyblaJfCZ<-!%_e97)vC5HU0S;jAHz<6*k0A!4HiWbe^b z$A_sShLc+@)cXsTM zBf*IrKpw!lU*QOFqG0?BrQgU4IpG4Vj0ng048LFoc5FD}-RV04|5S}949CHMne_hu z;EbDd2KvCsK`jTRHm3*+Ik zE7W1+)_q>bFLSFCoH*Vd2P(jYP9`t@eO`oZ6AIMvHkBG9TsdrzDy$Kogbax~;!U4jjfj-?Bkr?@O`hf^GJbJD%qC+)K=QTxm?Dbg( zmo~Gx0KEn4wrnWgk(A}g%No9&E^3M}(np&jlBTg*zG2NLXQz+-cTMx~B&?b^q#mBV z&pR|58Vp4Yt6-2bvmA3XN1_2GRHiY@BCK;jI>-JE%QzgHWI9Y)L#km7j2d`56b_~Y z+YQA|Xd59qVjM_y-0q}3%OV!~&*Y&7ADRtIDt!7rZ}pix_*HfUNLb_@myURCG7M{& z??2+(z0dc+_@omjwtkJ(u*ocF0{9L%7;5!_<$F+Eyih;#0mtik<6)=9zGVyN)G7Rl zYFAlYW~P6Xrk7$9NC2ExwjUpc0` z9rqLhCJ8V(3{3@F!yJHY8?w@|-Z|t2K^nRw!s=HQ4*9C#pLq`W#|G!I1_V#YLrQP`Q_8%F|FRD}RkQ2K_dE$ww6*?ZdS_j%V0!4f&K z2L=UI_yijn*B$?H!)(B$ggK_-+;UD1hfOb0W(B6E8oCWe?zpE0C)wrF66uw4!(J+>kuTUANlTM?1uugqbS)O!}0-9eB&Q-&%) z@?#!wJmMM827acW8vB|_f7`;g8pnVK;ZXqR%izmBV-YZRG{%m*J+ig2fDUvt=8oha zH;n6J0f!eU1Z(13VqK3~$Rz_G=T6%J2 z#GHn2JbMi%9N&0GVlx&NM4mZN1nTO$R~9yBER2U=XllM|Ti6Vv^X96?@-u1*;!!R$ zLF`jO?2}%pX~y5ilgr1y0kMyP5q#pIt<4cDBCbY>aa7S0%@K>EaVf-y0n4jD&84|5 z5ufDa8UXo=+vj~{3Cu$ju3yKH4fUD{{<&Zo&sr6cslL}q+gC-*UXJS?Sit-gz+wUZ zLaTe7BPn}Ovc|Mb(`eXeIPYpR_Ke4kY1oed7pt8)!_nCDY~HgM+!v`eVscinQjL@q zBVZnnW|%Wkm5im(<*gC6S&SGY<-klVl;UL#hpU;J$ODd}J^(kO_Bt>t2fi{zhJ?^3 zTO$&4WPc)V>(7xGizJr7vPzfH$ioI3SCZLzF^6+N0W z9FNEw70%O>Z4s3*eEea|s6FZbM^)eHG^^g6#VDF=}>$p)aN-EG**;(%O!1;F|%#Ppkv;>1FItjR!hfL zM^+cG{P1Y)VC45ImQJR%w@2O%z$u1ZU)&xEe^KzKg}-R{i-Esb_=|(Tc=*%7UjqE; z;ScK@;m-trX85y=esR0?r^bY6@<$^NXTSa^Zv`fmcl~hQI{L$TTWl5$%kli{P>W4< z%x0e*nI8WF**mLtalOx5)nBk<4$-|x_I9?l^skxI(b*0e5MurfUH2QW$?=k?*HlLI zFN^O>`=LgC$5rhl;}yC!&7L%REZu&eq;k_0d3ML>;XHf2iW&xEr_f1m`)+*}`CS#u zNss;X(KILKq+cCf^wf+N)!+(S(XOHbJNzZWUlRN!!(R&gIp8l9{?gzt9sV-lFBAT< z;4d5gaz={^a=$(kKawOTrE8a@7MP;xbgeU;Ww~jK);TNwmRYR)nIAvunufV=`iRzP zEH#sloDBZNj~^vfA$+4gue!?Hu(-<2@*yyf-`!!JwEU>O4x^|PE2 zR*7HEt6&lcea|kDmgIYL<)5bsv zs{{yX;gD9*E&yrc5JnxVqig37B#&dhd^Lw~0vSxYj8mAlhI5mpsayKmcgd3?1BkJM zH^!M#fac3NkkcOkUom*M)703>3t6gBDKo7VO_1~ew2MO-`3lt7&7n911!(S}U4T7O zWCyc)>5X?gGyUs%RW3*^m~Dq)5Nn_4jm>>Ud!S$gFA!`F6j(Nj0>;`P_>}_FMEE8K zpU>qYs0Z_A-hlBxfX8|j2a8Dv6i8Q#m9d3xIp9oDT|-s(IQ6P)*@x55TjB8P+xu#J zyL*UnD~B=u%0NRut51J(z^PXow(}orS7&Pz|5$wl5|rLEp>|*x@&veH&%CaUD5BY zCy6)HX6Qn-mu|V&nW)-F_uuPGR^3A1yU%G$PP}zO%en1+tYLW_Nx2R2C#!xzJ@-Sy zLAnq>D81r-r(KNzyOr@31WCSM-I0Q1#cmUOPutACP)K2VHufGg>uFFTc-eH$E_7fXI;tv6{_kcxXad^&Db2JOQ?(fh0bR z%(5FFnNS2gN*`f8#sEJzN07OK{^tcMllc#Y2>9{^$hRireUWg z@>$MI`*U>cRfAQX@;p5?3>-R6KOc4`Cci*1`@G0qUR_gPc@wG|B5OFL7MvmkHP!cXdr!#SLh4t2-#qKuTcP}iMxb$bhXO(r8mg_ z*3MQE^#|fErM-RYiS$QKko8ZDpv4Q3q&;ozN)zpy3Q4-RN&J51A;=w=-k~k)Tn0KX zN^4Ww-=mj2=(M%IPgtd#9@w~Qy&^YnGtqxQ_Fulfw;zWLs{+G{N+27Z)d7uZ?gYHupXzk+a>av|nS~@qh6XR#}ywhngd`|XvbZsWuzslvr_&2J0 z$Z4qfJK5jXE}Cn;B>RcsA6U1wpVPF1;Wdnhz}A2bCYtl)4r2c&5=6T%%Qd>BuaJ^W z#QHT1VQo);4ztxl1?6qZCDOk*0~7yE_dn#cFZhP+?^&~n=)XlAoBEg40$SKha(RgK zA6_K=7e8Bw{`(8KqWe*Bh3%fW>uJ}UPLn#3(2MLYTZ~qv+P|uOUB7z@F@@3Dhn+^X zMnzxv$YtdVWjs|)+* z^tQJzXkSaDSS;O4qT*HVLJ*(LBu=N=-`WGS#poj11n8}`wcibcGGJYQ3z3YxJH3f_ z7c|!~7L|JnMFDWbhOJF>ZU5P>ldu%nm#ku<9L&BHUZit`77-~;6|o;>IVpqoJnT&L zXR7#=WdSA1lnJMdO*6Ez*(B(;ox?Oa9DymZ|WXOgCG6G<;;U&FgW4W(7E8sXirBGN0_ z_lWhayTdjouGwCIz2w(Op54R)eRWu@sdvVV?Lr!Q&sbp zBS)MX)dKe2-`mm#R7nf@Afjqi<@N5$g%w1q<&gMADy|-Ha(nChJtUz{C2P1FI7C+u zHJA>(1p%-I8hBIVVpU~*xx1?CCU;qVe;USRX(V$A1J-Qly9Kp1eSD$L9J!P?NNl9* zjymm;P5kGgW%L(Eowbq6`OlO~=$A*G$;L}n%-2sZosyS6wP*)yf)nEkn);~I;9nV3 zdkp5JlkR!UnH0H} zH%#uLBk;4LoBvGeQ89Z~Q(aScy}Nu_f7&JO%OSAMY+IWKJKMZcY%f----~AyoJ3mB zq1k;@_qa1lwSksA?#y1akwX)&WC*=wb+@?7VNw8{XKmUJFCId&Y=R*PU@-uz7A~o* ztFI)6%?RgxPbr=;wE+6IT}4M8cUq@h&C#Z8;b?2>Dk|$5s(0hmrkA_xYx2^wJF|)Q z8o{grl6fut{&8nUv|oXwY^8a}oXOGs3M6wIU2+WSY!5(o&;fwN>{L1Vw0i5uw}_?2;!%8AT| z6Bjkr)fEeO2?Ps((>L>W?!EN!QRigvJ#~YzO9t=Nn5gLqrz3h!UQcz$`o6p#IQc=n zPdI%hgEqvLU;%;P`1BJ_qcJwL2!nl792OapwK~O`>Jmb#%^^lT^~C4uN8_G!X2-=s zm(VazOg{B*ubWLoNc1 za-@|wZ%4O9vJs~6ViVDQnN?d;i^q4g$?&Umka;sH!kcl>mXl74DwVE#6T$~e8ol|X z)0~hoaXgu~HC6lXdtUej)$(57nM#VV7g!*5HK@{fQ$YI0T&AbW(xw!XzZ&_Yh^hS zAVyYESxvMRVqAs9Fo#brBMr#H$u-Okf;Dsl$U`!GwDVPGx@sQX`>N9r4Ve*U^1y3Z zKu2D68sWqf6B34}qP?@duiZm3Yq3$1RJpdNZ!FHrUJwU z2@i!k82H2KD^&d?v5D5c=Cu38;UwE~qA-wid?$)iI(Xoa+*scZvUDkzB?-Yl21&9E5XAO;ufG zjU?-Gn*KWI=PPK{>oAJ7LDj(5#1WQZiVJ_MxVuZW_t~_~i z%Gbbp*Fx5S31umXg>-*pcpfLd-mUOgVS=-&)M+`SY)sDXYRdww>EgfBbWu2WwdlSG=Sl~$AUM4JSZwYE1 zEG*Fwsxy%+f|H8BAnqdOoN{plnF4Ic@%6+`p{!t#O?BuoBO=`nl%q=8&&A06D_V2f zX>$LXcZvFMS$l8y((c~2vc4u_yi-v7EMLj1=+Cd>{hlJqX#|77XKcTuYr@W<#^ef`Uc z@j*h5oP#vXL$vt~@Hh|i5b9wOLP0z(x-mi+jujyE22~$sew5JEkHCSnK1T0;!)aM_ zEOa3C?VaBC%R0J<6=H5>Wx`xFw6ER6@dbK%KEyyT2A84-{*piqCp=$a zYW0HU@mpXu>g*B{don~sG0f%#F%V|+<$)slssh))&b#BQqcArQ&f!U8f}N)WQwWiE zi9Ch+KTc=^P5vZi^G(hr!&?C^$(rB%j+h-TgW^CNk|ESK3?Bxq6QS2F9}~KDlFOv}3z|qn2Y^X{M<=T?U;6YJqN$tYS1a1nbqdL?poyB_;75 zvy!R$ZLmWr95;m840o!)oyKt6tr?+%1lnNH;&f*6-XQX3y=9Buazt-V(VL6+mXSx_ zdK(;t$*ecOThxYd`9e+?2u{N>?!uqtreP`vGmZ%<))gV4Y|>C=BdC>F7t+0FoR+*AD1k(PA`eR%Kx-Kn zg-!(e6U1Cc-S0U~$@S0z1U9GzU=@LJ%3>rA#Ry|6t_VDAV2aglNr=;v!< zEALx^Ad^|?ZM;|e4kk<4#(}_E$GP3b6as{nOd;&%3kLQxPW;)K?72QrcTT-$cZi5< zZvZxM+a=w^sWtEAD#N^wNrwMcBsxS#HImrdV4ywVR`Qkc3qXQ`SWIjbvtIHXhd4F+ zFTm48tiMvZid#LVxr`dLp zOPIW_6`$FB2!#tQ!To%6*~7HweMmPvhzzwwKE#n_9;Q#d50dyWm&8X<675ma5uU9y zKg!xhNssYq&UlY=&D<7&=p3(~{Q)Xq#iS>NY=!0W6^FO&reZ@p-srl=mdOWHv zYb+=HT(_l&-!gpe>HR1LS}KD^dGTuzhg3IrF&HoEH?QwM9u3UWr93bMlQm5t~R04yCnGI?dQiK_e9C?CCAU6x- z7B#(l7HCnMdhi3M)o)kx2t85FRt8F-5~9T?;V?m$d3Lf~kv^FZJ81Vwo1(`3qk3N% zF{P>l)(X(Lz1?lFyODS!>j<)fI^IGiRt1HM9dj)8q9W?le}VN z6(JS)$ST>$ymRE9#K^QhtP80Xcy6#tDH9aWzYve3np3<$u1m}{jN-^zPO)nd9r?^@ zq?Z5MjH7@1%o&vmSx)PyHOlpaiY|Cy?xVLBL>3RuaGGfRgRZ|Gi*;3n`yq%##TnSm zAqmgO5noje?m3nd?Xx0?C?$FbBw0)c0TnzQRJE*<1(RrTqhAmaUTGN^wGDm-`FwOcGT4r)tS|OYiOEUUX-krOofW)yKU1cH0!NzV7XQVH9 zrqT+rBXS^utcAAT$1ZWwzO5OR!Umd!%s$t$cuFRme{kAL2%736V5h zFSDIm(La3vVuD2NVADe4L>M2EsoM#Z7YWgDgO+>4e2 zahztI*eHd_5FKo}i0##)H<@gL)|l2}Tinf(nNwzj7!fTM-{JpPjxpBIf+Uy0 zvnbFD%)Yy7fFblkmZzhSBtRG%G?9(qH8-&6(!Q9BUBZ%(3QbU9DXWmzh!tR^HVG2p z@JM%GcViRLEe~k|6kft8^xG~42R&pXXNeawuok~t9m+N*J3A^ zL)cGhsA{OLB&H5}ce2ZV4<>3Q6B1z`fQ>|@1qbsK_h{0&X?o}0u->lG6j^op^pcd3U zJZ*jrz57X<-mkq@X&b*av^EB`*srt=16;^qY=^2Stc4_MCm#I3Xg7L5ZVzt4?m*{k z>rB4~suc_hmM{{e>p8M$3}(C9BjC&nr0T)+Ib8PCn-v1YglP9dEj(3GL@c+c+*9f7 z1ulc?R>sSP5Z59vV+KX9+3T`N!tJPeLpt0qsQ;y)ej3sLT2U5a9*OY|##_Jb&i^TA zcZq=(6T{s>bjose4^jb9c95La2|2qrs5+A~;~^GGgB}1MrrNu-w*!u?N%yIo;kaRy zd_Uci>Pj*Ui)MkdRhbXc!>O(eNcCeT(4adk>p$5UeMH5b(GgZ5PY1!U(COT7vpy;S z>|}UdduI#Y`Ox1)QXi)a(p-+rQ8^`0EwAz?aa@XrfUEo|#{RWWi&g%ts8G0*`0t)>d9mV;E36PJ-teLVQP!;PrI0>h5x&gEQ($}Lf6b2cTMYYqh!(?X%#jol z+bI=Yk>RrFe;3pPV}IhSv_IWtSHG^J$zMCoC1VpSNDw0TbON?N2yAeL#h*fGYJ|k% zn~V>az9snZ&INopb0Htz6?{0WbSd-UJq4oh!FG<1pyY#~GA=+L;bK5B4-z2l$3QK! zNhI+T)-_%Cywl|WRM;Yjow4(D$QF^OY}b?VbfTaSnOsHNkq{m0s*7q6Jg}ZoFWwuRUB&iO{Oa)6GCdH zO9D$!rwNICKsLi!;HP#*(Aq3l?s7@ZZKy3$%_LFrpA_1ST6GW*6E1F0)ev_JwZ*M# zY)C)2?s)W_C`aE35Pb)&%qEaX9*0ks^cbImeKjaJW%~*Nc~Bdm-pr_j#J0?0(dWc67l zYtF2RSWP)Y?+Zt%h2{ zq%Ks;CKV!e$n4ZewVazVbvP>Mmf6$>^+cPxSdhO&kPkMsQ7t>*icM`2vbF4g%GPo* zQn0C)1`#UT)RpwtPM6K!98|>B-zqhxq9@qTR=#%aZESf#Y5<=>xQU6ooI`5o!wRxY z`qct?V2NwjunYzqOC~WLz>g^Tyt45MHlPHlQ_c26rL{tex){7r>IOK5j_X3wPLaJr zB}nT<{;7{sn!14wyIhW!xMDo8zB34o6C?9cVo!#^*3`x5EKQ$F^=5DC1vH z_heT}0u`g+@&#-AcBW43`_*h$QJmAQcZ-{>i1C+dx(`yEGk(p70yHPw312~M0;a|| zq);b^({S|rZoUj`2k6?*Xs_V3j_&@6v<)+nP$xY=8{Mu% z^@D19zAsll`!LoEHAoNhz7ikdr12m<@RSZSOCy|slq2+{+m&2$6y*=jQa_5=0(k&T z5j-Y}j&T};4r`m9fTZkUJdFGl4jEG=#-|yTCharII+UK{vTZr8rXM_?WX#aL0Mjgv zOXF!Fc$#p+Skr$)hw@!%{+9p=?khk_97`4Hs8n^=7l z(Y?jWlp-R%BZTV=XKC`gYWlXvm8d$)SW#^L^F(EZcc_u*_kcR4luL;2+yn+>exRl) z$DQeg9|GkVAC{2#j|KmQ8*Ta|qz&_w;q>pPtkXr(XCgiOc}Oh~E~xWYAn1Y<8GqwK zWBPkY1L1%hzhr3r(mw>+@sL_P>wEs^(EbzAg5&U&LcMSt^#9_JAa^tB8%2eDD|q@J z&QsfWOamL4Gk1Nczwuv2T9NttpJlW52jC#O@4)4sLWr&>nIw#Hd9Er<=CUOWzQXoa zVCl0iiFOjeF;azNCE;Ncv;(hVjG+BRE<<)?m~0=J+hx**!IDzK9eJLj>G`QHLu5=C z-yevjM+#l~sc~UHGc)mFJi<@75E1Mm=ozAFgFs{qsl+G7^mACvh!rNrqL3>l#$uz3 zrn$_k?Mi{{eeSPDRBO1fSqet#3n0BTNlPoRHPTsnyD^Rl(bl& zU&_j3w2g8(F*Y%h^Op&dmvj8dmoWVN!?vxWD5g({FFT35F$}z9OoZvL^dmfg z9E0FZTu`)|1-5A<_G$ouY>5LGTg1#xC6U*LaT6D{H4HrJzRfKpuAi@V5tqbm3mzV1 z+@LLg980$o88Ne!pON&y$h8Adh;|aT5_Y3Z;H*p6ajr&PA0{>zq#FdEZyeP%>e5yC zWP#+=5NAI;YC;{gE_*m$F4$j8%Sv435t=A?sLrINW7Uwg5-6t9iv3AF~X&jT%u&{8tN{tqw%uA60xLV{-m zSoYk?F=~Z=UrLNN{!~HRjV@h`Hi=_~-7aG?y}Q(9NOrJo9rWB2QUx{ak$Vxo*f`DlR2IIkq5VUZo!V(n`dJSP9XT0xr1nHQ1nm*F1ym@U76! zgo@~_0F@U(Me{69r5qb=ufz>aqJyUigfNT8A!duogLY-m&fw+eV42MX5*e%Ekux}3 z+E6LZvCiS=He-A^QrZ4giG!^3#G%glVxZMHP<9^xJV2{p>nt=vW3lUj~Rczq7@E8F*OxBK%tHKe^)%;U)8Q{{c5oAEd z;Bq=vm0<8+A?9ofiC-IvUh2Z70BWY2W6<^p?n4f~7fZ@?g`#&D+GFZ)^bH#E%4B|>y`Qfh0I8eU98XBJU3K(P5&Z*=%_=YeBur8rlmL&EY?Jg-G*}-H;im=8s-1 z2rdOV($xqWgf%BIwS>FqC;_@fygD2~vC5@Z!GA6VLI+WZISJZPs zQRB8zbemu`Jawo6rA=Z$V>2blOn^|^ZjaDp9if`c0C_=tn5C0*6jXRHM}-DAc5{w` z0uPiTM|(w2va;6o2_DHzj0SbijpTT%7c>eyFz<5U58$zQMHG&<@(@(6X^ya zXg4ypm~RR$MTK=U*j3A3>Obx@!!xnyPL$pvtm{lDNRN zR9OVe!N`2_)PNkOnxmhCE%{XX)$I<*zBQJ(SS7}Q7Qa+NQlC~d`vJd zXiPBri3VfBrWhR(FeoGztVvKP1~!E$#zGRA4Q@Cp3=NnOqRk~n=B7XpVgftDovEGe zYY)}A)R(|xtNopLyix-eg~WkNkNG&hI!PQj_ks0Hv~FmP5!)1^11kd-ED*3o6*5u6 zKxYc4H*qT6+u*V%fRzbS&tTh%n5Bp=7RccJ1EtJ@&5oLZo*X_=q60G$%m$(bW5PxU zhyP}CCr;7$J|clJ0WXYRyw3&qj#Mx^=m$fAsv_79YQbV~J4iG>7;X%>>DUbqUgpWq zYlE3UH5;=a$Sg`=8<_5`t1j!6LBbUQFUILopO0RXv9}^Ni`!(3xi_u3(xV5)>`^FQ&EZxjI!B zn^8Bo@vQn3qFu*_3G!}UkAfj2fU^wVBY@|9FsRK2l`r?c3FlSx4wo*0+LtZ8@oL`t z7Uny|C=c_(GqZk9!B$oh9kmU$65Insj5~OfohVuc|1MNbj0o9S?+%>^jNGpa7;Dhy zp~jk>xW17KJ)b)gb+e+y_6mu)CD>};3ey0TNTAW_kC{=?>a0QfX`?GM5>z<`P=@_< z(KAkc#xDbXK^h9rIyd4IsM=q__;EL?gc$DNvwtU_eNgDi?85`4px4>#-_54C{x+nMw;KB(HzC}MN z_X5eVr+IBO$u)iw|4b+{&9k_mpA&Vmo3ly$^Px3jUkD(mBGE4bYL;P|LJTi44+9sb zV({V4NVjK7$nmb2-y#C!U~UVz8z+UgaS9NzJXRsW$8LEIeC+l$z#x2#*F#Csoeq$~ zcE01^2(4iGBXY8TDsa*u7+gYBdfv9VmE*ojQUv4CUm0lq7L6u zGCiJtx!P5lpu^!Q0uA~61g2o34S`q>?$CS@9-=Yvc*$a+ADG|-khEqAX`O`&~cc*;~70TmOhmMM}I0xQlV2e3!Jjp(b!HGT<0~Jn)_V2 z)Z6ER%$+vSjeNn1E+%9Ib4U(ME}TX^+y_~aI5v4nFsUL?pKz-SFq+@$k`!-b>TiGt zKM)z4IQ5t~HM21qVS!%QkcGfW_f0Y@z0Eu_h* zPH@G*G1x&g8Q|2%WGdW&BS6{kLtOEaBix2u0(UDN+UQc77FObs{0Y8;lc`$29h@=l zHi*NxfsKEC(2Vh23!-r&b!^r^c$ilS?it+L1^Nfm)H{j3kdrQ3eYAGqrU{Qq1G7jZ z@Y677VJss1^@3gecFyYdE=<7U#R`6NsX!F!zr;;fTo=53#WVwOgWBQk@hLupqEiT{OL?vkK3%SEu!#e?cY+S_DawK?q z=mr_<*|ikO;M?I%0!HxTLKq0?0(>|bdx(i`0z%}ciRlM%u4KOkyg7EU3myT8T8X+F zAKk~xX#ydxn^3R|CzM00obIP3X*#*bYwS zGG0}G`2{#_YhhJ@&gQHD^`P8j5(D?S1U6fHpi6Kt;Du3~x4m4}Q`gfCSGyeaUbyDM zsNJA&Pr4FG1-5NsGF4>5p#EpOiQ1xApKAo}YXxpUjo9LHsJP!(Y~1#9EZ@$vH^8O9 zbr0Gd3LVA)K8w4=EbbQM?D?PM+@O$iqaf!dPEOj*^zALKRJdXlC)udor*tBL7l@nN z#$V8u*IfDtX^_nm{d0G&B@ewo?S4@gJUQ_A(36vX%|EqwKoQ>rgG*PoUIX`93^9^v zvfdS;HXdLE+l}`I6O5}3R!h_&q?NXOImMt(8m8Y~<4R0_5SbLbXK+~I8k!^6$bOjW z;$7CksV?o5N1$)!2a=d0q8+A-FmxB21>n`8&Xj|F>oI!MwXl>%84pa+;L9=B1ClV( zQ`~<^dWMc&>q<<0HmC@kG~7jqJ`OOHRLBEaU!*a9zyue0gY)BmNjN{R@R|~MVb~(^ zBt|Pp0hdqVJM$Za&?gh=5OB$Y$&_B@&A~h49YPvpO!1dai+1o5zdzup!6Ag3_;@&$ z@TUtl8o)1OCmr7sxTX^QI~Q&-fOi&Te}K(r6*l|-3@wq(MI`2Zna$ukMty*R40D>n zZwsbB3fwla9SZIm(`BDh_(YTI8?u<~(R`%@ zj%ihNtZ!M>+1^I)Dsh?OEpbW%w$(;Yl(>?UC%CiVw(12M5C;R(>*_=k^G(|=Tmb|p zvZBGIReVz$dVhA_ocrvFvTvHiGz4tJLxNFp+O>{=Tbe5DR~mh57uc_KmSD)r;I4qk z0!k2tuml5y9>O7E_VmzhmpZ){{Sw^2QZf?k_y)!uB0=q9hR?6uGzjMh!CwtlX;MD# zKnq^0a7iN|omfIKm&nd-#Y`oPdHf;PX+qx>3813yq+(uTC=n$Ay{9JcHT%fx)7I z!Qz3zl7Yd}fx+nmgEIyOXATTrG%z@8VDRFB!Px_YWdnoWfx+@agB3Q3y}<9GPcvxV zNJUl@d^r&9C|8ZN)9GitCDHIR7Jga|p6OUb&spas(i0;UDfHblUNe2*j5j_4Dp;Tb zec_DPL1!GP(3xxRKlpA3duy7E`hWpzM84~F81vc7;10Xl2X)H)2z`Qm6rt@_i9(OHjH zyr_mywrx4HrEm)Ddc2*tXc{s6LdEiz9yfbWEdU`IJ*dL#ZyAWyg9k|{yB)*hUIT6S z@T-1fZ&y{Y>w)22rf@~@{!zFF^`Pp|GD&^xsfw3gFO4THiLj}jW}N-gM|Um7mvBGl z$c8QdhRS-_b?5(uFHO^sh4@;JG$X-xWMj2mKU`Ni`onc|X8tZ3GJPg4{@G@_Zhc-B zz4B3A-s-qS!d{JXGp7W$ACNAO_!*l_)?PQuFy2AdRQ0v5^@uBs<5I~Q zxHY(56epyypYV9!+8gK(i|6M2LNn{#!KHIEsoH0Fcc5|Zu}0rLb21^$hYJg8=Ck*! zX26}JaE~hh%F7m(S5~tZEN7I@p|5_XbJHJ>c_S}kok2us457>vN|~9g!CN&H$}EC1 zdd>BD+v&b%BU9iO)g#YFnyqR45_`x**DR{5Z&_ zd0t(VPCc>4scL5i-S@sNSCvUsPeq$l@ci~ek=gXIoAPvY_^h!)ZJta$cDpf3g0oKe zKx0ZiExX5;3_DTH_xRw&ShOEMrqBcT_|hEH;Ff(ZA9&3zyWKbNlcW~WkFjzw)!ggL zfHz#vzt@+dPA#QQ{7jinJMRU=GwAjA`jXTsGimCHswB1fBKrEhK9gz|{RB#BO`_dR z3lIAAIiOe2B$U^?s}@$lD^cJ+hb*Au!nKv*p> z;wdd&t@VOxx$T4Z`Ep>hgjqu_ha__i)qQTW(f8H%$aJZL%ZBxG0>eNus%vU$;b|SP z9r#{ql6nQN?f9ljbp%1a}*UD&nmDYwn_zGTX zP@hD<5#u$MHUXUVWlP}BUx>dMM%W$SMD~Xf^JbcIzt5C&6=G@)Z4ME**b;)~_!47c zxP~qo_UYsNV*G4C8C%8hzpaw;H2ok!S{9N+`~)5|1mft|h3^2zgCy*fnF7+bhyMDw z*G|t4`%Gc5BSXiId!01lbDOnbVf&Tf#CH)bgyY=RA+a|Ip=4d+&8htPUt+x(nvVa* zYg8w~ruqXuJ6<%6v$6LDZ)C!)qMlbU-*y`vd%$Nk|3bi*_QR_%ke~JJmF2W&*q4MY zB}3Hh=r%EDVLzWyc*9BQgTBQ1zk;^n4FvrVc;fp9^boaA5Gc(ZzzE%)SeIYPj|WGH z<}QHZt__BFrn~9TgFa)*J)E1sEggjO0Y?J-cIzP+-J(~#Mj!6lupz?}&Ym5RKGxkI z41lz*Za4s#I(5fVqI)0!C@k3FBMTr4K=WSq=F)TVt|?=v{|>R=8bNo?Doq=am^c&Sxm= z1^SP}zRbBV%4pzCBn6CDzX?D*JCIk9Sdh61tbx1zUJd|CfmQBTIICP%NI9^YC@Mh; z+;W1hd)Q}EXPjgt<$}ysd*K}d5~LrP)cj7+^m`QffI8cS(`lLonFzUmPGZ7q0f>ju zXnj4nXZ98)_PTVEImWs0{@<%24O&cFfX;)}rFjE{%lZc{F{YwF1`vua{uF?C3K<(9 zi6N6wI1Sifd5fNV#Ai0ZW)mND6?i{8Fbkad4)3()?^RLZXP_g?yI9qvwx6ZTM|`%K zkj+q*MSWjyIlQGu^B&aG!j2SMNIQrm?sU!ifT@A93V4PCH7)0f_rm}&g5Zw=5YJR3 zIQHWJq=3Xi7DOf=0?$tf{reH0IqXy5z}DY-O{&k7sj1^{Y=Ha+n;Vhv$ow19q1c7p zY-%w5AtM!JK>kC9cuE)7}m(y(dj~w--)&4usp&${mC^Cs4&%i0u zw*iQ!bVqq#Z|CHCV)#!0D%%9hcW`0yqducL{l9#Qn;-Q_v5;vIVrBhNNK__dROC)T zDnJJ%kifMIqFWU`0=Oot0|m12u!IR1t|TzBiv(ZNCsEa7zO*b2#NWgmu7W9%O)xqo zJK2my@We}&M5`Y2WoE+dLoy}BxO{bxq>%xzdVIv9RqdzEr@Xj*xaf#4DZHZdGGd9L ze}2qow#BO81Wg=ImN2iDXdrb%tU47P`B#;BIV5gmWSqS^Na4tkVzzJ$0RX#xGQk)C zz<_J!69eRVSQ{~1gr%EtsHsU>Il)s(;%uA_5pY}KC0j^CDdcwK9;X#E9R^t*8Nz5V zLb^u=OyLt;PD~E!Ip#B3A>R|yd3j4$YkMb2Ph$kwwUF}>(;Lg~EduWZ-FuRnh3vA? z?$^DVRBg6WOOpc(ii4Yr(2)_eW;%IY^m`KG^B@VtLu8I z3h+{k782{>_;}YDg#sP;5k}1voTI6toEiPpX$ooKX^im04k=G z3(Dl_^!gQg*K~N(3}5myIXvkilrMBQHX$0fN)G;Jt;H>H`3HsDH z$O?&Jp*yTC7d60tssIYpDmhKD;q$^XG;;uwFc;EYoDahD*7`&nxN>~%S-ImCP!zSRgqUU=sX zyfLM-V^!aVjx^Y{g16={ID1D9#JC;2{<6zy=Tp8Wc=f<5Px;a!J2^CCEj|B~FC7jf z8K3rL`U5Y62^j4?>`g5g*7kcY=}ja0b?_b(e0d846*5q7FlY(`tq%rGWuU%b&@=?4 z!R18(Tt)QBr+o(h#$Z@6Yk6fbsDy#wYNJ5QQUvk0$H;_v3K;CF;A$Q=0K?TGFg60i z76n#-17%}Kx(0#3Tt4`z{hjbex&H31cEl`Q%Q=|kr(2FyWJYe~KePMk1IH?|BDe9M zsoUv0$0{5pI|O=o3r=a_+PUxst}aAk-YI%Oc+pxfy!MRY9^kE$cTvx1MN*V@oaFIq`1Kz&G)*kal zK?m%@YzRD{t-n>pZ8zk52=#HSOk|3tDvp8>xc*7l%(&uYT^;WE7ntWbt! zDWEAbC|dzd6`+J1009|*j80!=JCKs#k#iVu8lbk`4JY#oWe6#lLhn9q%7>S6orVv( zqSdyD?p~gk>3@4myrV@$$hk?sAhW{>DREReIy1U5&SiX-;m(|yIX`oG=DV3+WPYD% z&&tor$SThAX3fnaECu<7ma1#)`yndf~D{Cp37)A!!;rm1cj{poq1=Gsis z*V@z3<8JNlTFtU-lbX_0WG^9;3-Y7R{qPYX1qFr1(cD>8Z|xjBkQYmzUY@5@n`em> z(8b&(v(Kh2FICx8Wpv9+Rq&=oFa7IFRmrMyo*1gY#88SlvyxW5T$Q1kL%UwCN=iwZ z3#lPrO?`vA0baAhUcjjQBB?%lC9y?i;QhWukx~8wMr){S| z!hZA9% z1UaKC`P#B=qPpKzSyh{<=O7qUmZF-F957ePELm2#6k!^$Ex4T zg3rYZZ{qJy1Z8i4q?O{*h?I_D8=yiL8St=VVhiL)4Uo-}T`{5ZN$d`!0p4MXsdb{+ z2_bL7fRe1kgsSw7@8*uK%lg4xBB|GlfbCgtxE~T^!Q=w9F*geCutYAT z%tV*W;PDJ6B+n)^GVN9BG1^5cbl-&)Z&4~%%_%EytQ0kGy`ZM~Hl=3S;)a^4T2T{{ za1%N=4k|V4E9;i9di4Ai35FW|?MjK#e*XpS4Zl=s$sr`sL%wc8H@UxNSzO4_v9v7u zMDRMVJ2^8knu&rG9rGV-cheVM0}(vH%UI4<5Ba(Y2=(_~n7cg)wM6a~l6b+aM?atF zA)hw^ixDz<6LPrVOAJp);`$+r3yD3E#Wg@mPv8b;i6?oD4)=hju1pbB&Pe zLo`CdF;87ctdEH0!GffqymiJ1$UdwyYX012pznWM6&ZI#Fpx>U@hJU&?cHg7ROP+E z@sk;an1Nt2lgT6@FxlAD$pWGxpaEHCL_p9|ty&@kp&%-tg7rGaiehUiYU{DKy+vDX zX-NgOwVPX)Te-Ft)M{PYLhAzJTE(_5xA*@nXPFt=em=eTkICA5rTL)gF?lnf8U_`(Y8L*U?3&UnTz#LHn`#i&hpC->Y0MAQ61@xF zU=CDs&79qR%CxI`*DPvZD(9({J?Hm2YC@*m{CTPx`e2%KVeiU$CppO<`3h!79y03! z`O9O^Zo8&yRuD#9#CuP?>;3SbT1lF5kFOWBk4Btku4*g2ngQozXt3ne)RqXT;Ck{$1I&vY)$8?8-I|))OYHXH1!{>=*9v$Fnv0 zNAxT3K4Xk*T8^p3IIqS=tj-^Si&ElX}VQvg*btb8_#xOXb_V zt0i_q+87JgRFBMi)w+71SHnKX-S}j-uKg8h>6ebRiT$QJ{)UqA4OP<4sB1M|#$%}& z1V_E*xKBNq9Wg^17gcx8q%)XR=u z?+kt0ojWX99~~>xPc8gSwljY~mYI`6uqCA(Q5|#1zjy=s{Jf-q<fSYd%MESc z3TbIhNTZ@UO@zx5Q=PZeE-=nXNYkP{OZpY5h}s4fCwYi`bF*ZppQ5^UJ(WE%KhSGz zGgTQYn@!C=t$SWdo1*R`B29^En^j8-Vz}DU+Bv8wwlhdRaIR1@$I31tt%~7#tF#-{ zSI;|dRt1vJpJnH|v!Bimp3z!WW)8hf&*H_a>}^QFt+$*>R2yW`nWQW3#hZG;h3huD zckRm7y01K)9n{&92rtRZ(zBEJeq+^HAtnu!`rwj}jwj39^yAq?UizL%&E>=+&5{0z zCs}9eWQ(Y>%FJ>G*Q>@md-hH?7zjUyar(R?-O@CmG+nB_s#zX`%w6F5J*$`d)$|_~ z`tnXfHDMOjGLiPTpxVAFf2XaD_3`gvM|pqlEs*VWFcMZipx6u zNG~0^MfTJ2pJ5V5Nis`{0j06k-V*qAPPNMxlNlDhW}m**7xbxPyIfjg^;Ngiw3iI+ zQu&20qt~c!5a~`N?)H(%WRtvooRgV%(wy0|&T!(=XU}VZ?zsB2br(u+{PAwn^Rj12 zv#ftZJzZUp&CF%$LVKK3DZTg9$x|omRLEE6?Tc1BD|q8XzYz0!dlqjndDzu!q*I@5 z+4fG;oz4(xxHW-U-FTBfA)LS5(a+ai{`7_EI499vv@KN!$tmXW@M^CzcFLu-SMAXi z>O1x3UGOyHR6pG>qN?43dDrOd<)!I}8Ira8!gJZ?25I*-MbGxNc8t?N(l=ioJ>?Sx zS}7MUrBOOr9ehSly0gt6SrxQCYRd zmrJ9v-mA_sX||qS=I-1g4Kvb`tX}hvD*L!?J; zX++j<`J+P@>&EZ;vR>1~tX}iSmw3|NYyR`f++FhCxPGaxQ1G7LXWE^n#$gm1gt z6nMl6g%CXdTGkY@mLcmbwt4=kxXf3u6O@m*+^yf8ZJR7@$6kJ3wXX<* z^n2O5yqA|0K|Kym^Xh$NQ1A9wpI`4m(yDxmzMRN?@TcVea>7+_V@zB%^LO3V?t{Ct zsTtC)T%7wgLD13qZQQj%fb?@XS%0wKi_~$od;=zRo!hY|TU+;OyP|#t8|2mY8C}YH z^P0HgdSBwRW`7vD(Y<3&cEkzNn(QU3C1k*$v?_Z+TB8028=y9ZecZLL?QaYy2FGsl zDe69ND*A;WB`@)tgCJ8;HwZ8ly(JtV6|MWCd;cG^srp-OxUQ%zhEi?&k}gET)HEg& z2H1D=ZU0&3ZhkS_GU=;9inIZdO!`p)zrea@HHI#cJH4NFD z4;t=JFQuCHW^1S186@fD@{J%!SGMw-L4dqumstZm=nkj;TV?J8FG)SWZ9{cEPn$Mt z_O#Pf7fq*it13!!D%NjHAtO<~V@q+DdPAp5k>3`i>6K!85Hw!D>c2Y(kW$teb+9~#WGE@x>VnjaCt8FUiF`|eP&HEcAqWcSVv9Ur%s#=KPYpD@6Fcb ze;8!v74SzvkbVtZ`Qso!3V46`SLy-#OBFEG@>~0$4cFz<3v}@wlHj0t@~ppb`^-ee z!=_LzKP_|L-GHcs1gf90n;u5b-RFmg)dOgnvk-hYO7X;aw{5}+-FARSu&cM`Tw-+4LV^63ae^mAOlg_vM zg&;|t?^vh$#URMkqv0hlJ*kIxPj0L7a;PeMb&`ws1@XNkUkQS2RrZHMR8{I_x(0uL z^71gXdCglA)aLb2ZQf9|c~fUS@~t3Mowe+_e-45=^#Nb|cA0zIYuQAk?VV8B59kCI zz8kFVCGeLZsMGWf`D-Xdl|A`48=#H_|J6qPJufsU_xqu8f1t|!q0V;F{{$)OY-Mly zdk|#HEfYWZLbK<0c{@{?+x=#?C0ZAWxDV~l)-IH(AH4IZm)0RckgbAD2H~xwZ!wYs ziV`>U1HI6o3gzzhH?pk*Ws(S|uEJzFDHf!rvy`1kW`*!GFzkc9v;--5fzwuLi$BB` z|L`E9msV8}WQ$)Ngy?Q<$#_xXruYdjH0b44ql(`WFHhPpKi8TsKex&RkE-WYn@k$v zmD~2bst-bJ7pMmJqPMa&$)UjlzpGWFd`ez-wHoF={8qNPa=3gJ+T8Bf$wZI3|JixX zK|I^bN~V+WGPPN>1|d>q-MQ;jd2S6t{Z3aSY?!_RggRY~R0U{CRE&yvk2a%CRa?fm z+y9(xZaX4K%yhAmi732Mm@ZaFNr`nAtBgWx9Im=p#bg2s?*XR6%spXx_tbT|bKcIT zCUgaHV<)TPiD$jQ24pl(j_1Ix@yxXLNE9-S#Gv*)lv7ozc)!-2Df#4ehgoaLLGw z)NoRBiZb)Mlg-r`)}QKUSUFF9-Q4d@HeY#}-ehB9rx`G50jM}#ePUhR>BK*xz`Ph5 zr)`0Wq+Y~C>OShe_HH&+c7_R)7cc{kl4&=*PVLgCE~e(%FfUrF&hiTHJqMmGGnag8 zW^JV59CyWEcCK_G>@i=0w-0^`oW!}3n&~6v?*M~jE{
    ExtA_3M|Fc8Qz^Wmv%lW{Gs%8_;&4nWmupBK23M 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 hLIBTUI,LIBTUI.Init >PUSHBI 0 Y1 >PUSHBI 80 W >PUSHBI 22 H - >PUSHBI 0 F lda hFileBuf >SYSCALL GetMemPtr >PUSHYA >PUSHW BufSize + >PUSHBI 0 F >LIBCALL hLIBTUI,LIBTUI.NewTBox .99 bcs .9 @@ -347,7 +347,7 @@ hLIBTUI .BS 1 ENV.MANPATH .AZ "MANPATH" FILE.INDEX .AZ "index" *-------------------------------------- -MSG.ScrTitle .CZ "A2osX-MAN - uit" +MSG.ScrTitle .CZ "A2osX-MAN - UP/DOWN : Scroll, LEFT/RIGHT : Prev/Next link, uit" *-------------------------------------- MSG.USAGE .CS "Usage : MAN [#htag]" MSG.CRLF .CS "\r\n" diff --git a/BIN/NETCONFIG.S.txt b/BIN/NETCONFIG.S.txt index d0482d90..2d9b29b3 100644 --- a/BIN/NETCONFIG.S.txt +++ b/BIN/NETCONFIG.S.txt @@ -1,1000 +1,1130 @@ -NEW - AUTO 3,1 - .LIST OFF - .OP 65C02 - .OR $2000 - .TF bin/netconfig -*-------------------------------------- - .INB inc/macros.i - .INB inc/a2osx.i - .INB inc/mli.i - .INB inc/mli.e.i - .INB inc/libtui.i -*-------------------------------------- -* Constants -*-------------------------------------- -EV.SAVE .EQ $C0 -EV.OK .EQ $CE -EV.CANCEL .EQ $CF -SCR.X1 .EQ 3 -SCR.X2 .EQ 27 -SCR.X3 .EQ 52 -SCR.Y1 .EQ 1 -SCR.Y2 .EQ 12 -*-------------------------------------- -* Zero Page Segment, up to 32 bytes -*-------------------------------------- - .DUMMY - .OR ZPBIN -ZS.START -hFile .BS 1 -hBuf1 .BS 1 -hCTX .BS 1 -hSCRN .BS 1 -hItem1 .BS 1 -hDLGS .BS 1 -hDLGitem .BS 1 -ZPPtr1 .BS 2 -ZPTmpPtr1 .BS 2 -ZPTmpPtr2 .BS 2 -ZPTmpPtr3 .BS 2 -ZPTmpPtr4 .BS 2 -ZPBufPtr .BS 1 -ZS.END .ED -*-------------------------------------- -* File Header (16 Bytes) -*-------------------------------------- -CS.START cld - jmp (.1,x) - .DA #$61 6502,Level 1 (65c02) - .DA #1 BIN Layout Version 1 - .DA #0 S.PS.F - .DA #0 - .DA CS.END-CS.START Code Length To Relocate - .DA DS.END-DS.START Data Segment to Allocate - .DA #16 Stack Size - .DA #ZS.END-ZS.START Zero Page Size - .DA 0 -*-------------------------------------- -.1 .DA CS.INIT - .DA CS.RUN - .DA CS.DOEVENT - .DA CS.QUIT - -L.LIBTUI .DA LIBTUI -*-------------------------------------- -L.NETSTART .DA NETSTART -L.HOSTNAME .DA HOSTNAME -L.NETWORK .DA NETWORK -L.NETWORKIP .DA NETWORKIP -L.NETWORKET .DA NETWORKET -L.TCPIP.CONF .DA TCPIP.CONF -L.SCRN.Title .DA SCRN.Title -L.SCRN.Status .DA SCRN.Status -L.SCRN.StatusSv .DA SCRN.StatusSv -L.HOST.Label .DA HOST.Label -L.IFACE.Label .DA IFACE.Label -L.IFACE.List .DA IFACE.List -L.AUTOIP.Label .DA AUTOIP.Label -L.AUTOIP.List .DA AUTOIP.List -L.PROTO.Label .DA PROTO.Label -L.LIBTCPIP.Label .DA LIBTCPIP.Label -L.LIBETALK.Label .DA LIBETALK.Label -L.SERV.Label .DA SERV.Label -L.TELNET.Label .DA TELNET.Label -L.HTTPD.Label .DA HTTPD.Label -L.BBSD.Label .DA BBSD.Label -L.MANUAL.Label .DA MANUAL.Label -L.IPADDR.Label .DA IPADDR.Label -L.MASK.Label .DA MASK.Label -L.GATEWAY.Label .DA GATEWAY.Label -L.NS1.Label .DA NS1.Label -L.NS2.Label .DA NS2.Label -L.DOM.Label .DA DOM.Label -L.BUTQ.Label .DA BUTQ.Label -L.BUTS.Label .DA BUTS.Label -L.DLGS.Title .DA DLGS.Title -L.DLGS.Text .DA DLGS.Text -L.DLGS.Label .DA DLGS.Label -L.BUT.OK .DA BUT.OK -L.BUT.Cancel .DA BUT.Cancel -L.NS.Hdr .DA NS.Hdr -L.NS.Uth .DA NS.Uth -L.NS.Lanc .DA NS.Lanc -L.NS.U2 .DA NS.U2 -L.NS.Dan2Eth .DA NS.Dan2Eth -L.NS.Udeth .DA NS.Udeth -L.NS.Udeth.D .DA NS.Udeth.D -L.NS.networkd .DA NS.networkd -L.NS.libtcpip .DA NS.libtcpip -L.NS.libetalk .DA NS.libetalk -L.NS.amper .DA NS.amper -L.NS.telnetd .DA NS.telnetd -L.NS.httpd .DA NS.httpd -L.NS.bbsd .DA NS.bbsd -L.IP.Hash .DA IP.Hash -L.Host.Hdr .DA Host.Hdr -L.EOL .DA EOL -*L.Str.debug .DA Str.debug -L.IP.Keywords .DA IP.Keywords -J.IP.Keywords .DA CS.IPR.addr - .DA CS.IPR.mask - .DA CS.IPR.gway - .DA CS.IPR.ns1 - .DA CS.IPR.dom - .DA 0 -*-------------------------------------- -CS.INIT >LDYA L.LIBTUI - >SYSCALL LoadLib - bcs CS.INIT.RTS - - sta hLIBTUI -* clc -CS.INIT.RTS rts -*-------------------------------------- -CS.RUN >LDYA 80 - >SYSCALL GetMem -* bcs CS.RUN.RTS - >STYA ZPTmpPtr1 - stx hBuf1 - - jsr CS.HOSTR Read HOSTNAME file - jsr CS.IPR Read TCPIP.CONF file - jsr CS.File.Close CS.IPR doesn't close the file - - >LIBCALL hLIBTUI,LIBTUI.Init - bcs CS.RUN.RTS - sta hCTX - jsr CS.SCRN.Init - bcs CS.RUN.RTS - jsr CS.HOST.INIT - bcs CS.RUN.RTS - jsr CS.IFACE.Init - bcs CS.RUN.RTS - jsr CS.AUTOIP.Init - bcs CS.RUN.RTS - jsr CS.PROTO.Init - bcs CS.RUN.RTS - jsr CS.SERV.Init - bcs CS.RUN.RTS - jsr CS.IP.Init - bcs CS.RUN.RTS - jsr CS.BUT.Init - bcs CS.RUN.RTS - jsr CS.SCRN.Draw Will Call SCRN.Draw - lda hItem1 - >LIBCALL hLIBTUI,LIBTUI.Activate - -*-------------------------------------- -CS.RUN.LOOP2 lda hSCRN - >LIBCALL hLIBTUI,LIBTUI.Exec - bcs CS.RUN.RTS - cmp #EV.RESIZE - bne .1 - jsr CS.SCRN.Draw - bcs CS.RUN.RTS - bra CS.RUN.LOOP2 -.1 cmp #EV.SAVE - bne .2 - jsr CS.DLG.SAVE - bcc CS.RUN.LOOP2 -.2 cmp #EV.QUIT - bne CS.RUN.LOOP2 -CS.RUN.QUIT lda hSCRN - >LIBCALL hLIBTUI,LIBTUI.Destroy -CS.RUN.QUIT2 lda hBuf1 - >SYSCALL FreeMem - lda hLIBTUI - >SYSCALL UnloadLib - lda #0 - sec -CS.RUN.RTS rts -*-------------------------------------- -CS.HOSTR >LDYA L.HOSTNAME etc/hostname - JSR CS.File.OpenRD - bcc CS.HOSTR.Loop - rts -CS.HOSTR.Loop jsr CS.File.Read - bcs .1 - lda (ZPTmpPtr1) - beq CS.HOSTR.Loop - cmp #'#' - beq CS.HOSTR.Loop -.1 >LEA.G HOST.Buf - >STYA ZPTmpPtr4 - ldy #0 Copy setting to var string -CS.HOSTR.Loop2 lda (ZPTmpPtr1),y - cmp #0 - beq .2 - sta (ZPTmpPtr4),y - iny - cpy #$0F - bcc CS.HOSTR.Loop2 -.2 lda #0 - sta (ZPTmpPtr4),y -* clc - jmp CS.File.Close -*-------------------------------------- -CS.IPR >LDYA L.TCPIP.CONF etc/tcpip.conf - JSR CS.File.OpenRD - bcc CS.IPR.Loop - rts -CS.IPR.Loop jsr CS.File.Read - bcs .8 -.1 ldy #$ff -.2 iny -.21 lda (ZPTmpPtr1),y - cmp #C.SPACE - beq .3 - cmp #'#' - bne .2 - lda #1 - >STA.G AUTOIP.Var Preselect Manual IP radio - - inc ZPTmpPtr1 - bcc .21 - inc ZPTmpPtr2+1 - bra .21 -.3 lda L.IP.Keywords Whole word, check - sta ZPTmpPtr2 - lda L.IP.Keywords+1 - sta ZPTmpPtr2+1 - ldx #0 -.4 phy save keyword len - tya - cmp (ZPTmpPtr2) - bne .6 empty -.5 lda (ZPTmpPtr2),y check next char - dey - cmp (ZPTmpPtr1),y - bne .6 no match - tya - bne .5 - ply discard keyword len - jsr CS.IPR.Keyword keyword matched - action it - bcc CS.IPR.Loop - rts -.6 lda (ZPTmpPtr2) - sec - adc ZPTmpPtr2 - sta ZPTmpPtr2 - bcc .7 - inc ZPTmpPtr2+1 -.7 inx - inx - ply reset keyword len - lda (ZPTmpPtr2) - bne .4 - bra CS.IPR.Loop -.8 clc - jmp CS.File.Close - -CS.IPR.Keyword lda ZPTmpPtr1+1 Move ptr to after keyword+space - sta ZPTmpPtr3+1 - iny - clc - tya - adc ZPTmpPtr1 - sta ZPTmpPtr3 - bcc .81 - inc ZPTmpPtr3+1 -.81 jmp (J.IP.Keywords,x) - -CS.IPR.addr >LEA.G IPADDR.Buf - >STYA ZPTmpPtr4 -CS.IPR.Copy ldy #0 Copy setting to correct var -CS.IPR.Copy.L lda (ZPTmpPtr3),y - beq .9 - sta (ZPTmpPtr4),y - iny - cpy #$10 - bcc CS.IPR.Copy.L -.9 lda #0 - sta (ZPTmpPtr4),y - clc - rts -CS.IPR.mask >LEA.G MASK.Buf - >STYA ZPTmpPtr4 - jmp CS.IPR.Copy -CS.IPR.gway >LEA.G GATEWAY.Buf - >STYA ZPTmpPtr4 - jmp CS.IPR.Copy -CS.IPR.ns1 >LEA.G NS1.Buf - >STYA ZPTmpPtr4 - lda (ZPTmpPtr4) - bne CS.IPR.ns2 NS1 already populated - jmp CS.IPR.Copy -CS.IPR.ns2 >LEA.G NS2.Buf - >STYA ZPTmpPtr4 - jmp CS.IPR.Copy -CS.IPR.dom >LEA.G DOM.Buf - >STYA ZPTmpPtr4 - jsr CS.IPR.Copy - sec last one so sec - rts -*-------------------------------------- -CS.File.OpenRD stz hFile - >PUSHYA - >PUSHBI O.RDONLY - >PUSHBI 0 Type - >PUSHWZ Aux type - >SYSCALL FOpen - bcs .9 - sta hFile -.9 rts -*-------------------------------------- -CS.File.Read >PUSHB hFile - >PUSHW ZPTmpPtr1 - >PUSHWI 80 - >SYSCALL FGetS - bcs .9 - lda (ZPTmpPtr1) - beq CS.File.Read - clc -.9 rts -*-------------------------------------- -CS.File.OpenWR >PUSHYA - >PUSHBI O.CREATE+O.WRONLY+O.TRUNC - >PUSHBI $04 Type Text - >PUSHWZ Aux type - >SYSCALL FOpen - bcs .9 - sta hFile -.9 rts -*-------------------------------------- -CS.File.Write >PUSHB hFile - >PUSHW ZPTmpPtr1 - >SYSCALL FPutS - rts -*-------------------------------------- -CS.File.Close php - pha - lda hFile - beq .8 - >SYSCALL FClose -.8 pla - plp - rts -*-------------------------------------- -CS.SCRN.Init >PUSHB hCTX hParent - >PUSHBI S.OBJ.F.bTitle+S.OBJ.F.bStatus - >LIBCALL hLIBTUI,LIBTUI.NewScrn - bcs .9 - sta hSCRN - >PUSHA - >PUSHBI S.OBJ.pTITLE - >PUSHEA.G SCRN.TitleBuf - >LIBCALL hLIBTUI,LIBTUI.SetProp - >PUSHB hSCRN - >PUSHBI S.OBJ.pSTATUS - >PUSHW L.SCRN.Status - >LIBCALL hLIBTUI,LIBTUI.SetProp -.9 rts -*-------------------------------------- -CS.HOST.INIT >PUSHB hSCRN hParent - >PUSHBI SCR.X1 - >PUSHBI SCR.Y1 - >PUSHW L.HOST.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - bcs .9 - >PUSHB hSCRN hParent - >PUSHBI SCR.X1+9 - >PUSHBI SCR.Y1 - >PUSHBI 18 W - >PUSHEA.G HOST.Buf - >PUSHWI 15 Len - >LIBCALL hLIBTUI,LIBTUI.NewTLine - sta hItem1 -.9 rts -*-------------------------------------- -CS.IFACE.Init >PUSHB hSCRN hParent - >PUSHBI SCR.X1 - >PUSHBI SCR.Y1+2 - >PUSHW L.IFACE.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - bcs .9 - >PUSHB hSCRN hParent - >PUSHBI SCR.X1 - >PUSHBI SCR.Y1+3 - >PUSHBI 0 HK - >PUSHBI 0 EV - >PUSHW L.IFACE.List - >PUSHEA.G IFACE.Var - >LIBCALL hLIBTUI,LIBTUI.NewRadio -.9 rts -*-------------------------------------- -CS.AUTOIP.Init >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y1+2 - >PUSHW L.AUTOIP.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - bcs .9 - >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y1+3 - >PUSHBI 0 HK - >PUSHBI 0 EV - >PUSHW L.AUTOIP.List - >PUSHEA.G AUTOIP.Var - >LIBCALL hLIBTUI,LIBTUI.NewRadio -.9 rts - -CS.PROTO.Init >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y1+6 - >PUSHW L.PROTO.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - bcs .1 - >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y1+7 - >PUSHBI 0 HK - >PUSHBI 0 EV - >PUSHW L.LIBTCPIP.Label - >PUSHEA.G LIBTCPIP.Var - >LIBCALL hLIBTUI,LIBTUI.NewCBox -.1 bcs .9 - >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y1+8 - >PUSHBI 0 HK - >PUSHBI 0 EV - >PUSHW L.LIBETALK.Label - >PUSHEA.G LIBETALK.Var - >LIBCALL hLIBTUI,LIBTUI.NewCBox -.9 rts - -CS.SERV.Init >PUSHB hSCRN hParent - >PUSHBI SCR.X3 - >PUSHBI SCR.Y1+2 - >PUSHW L.SERV.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - bcc .1 - rts -.1 >PUSHB hSCRN hParent - >PUSHBI SCR.X3 - >PUSHBI SCR.Y1+3 - >PUSHBI 0 - >PUSHBI 0 - >PUSHW L.TELNET.Label - >PUSHEA.G TELNET.Var - >LIBCALL hLIBTUI,LIBTUI.NewCBox - bcc .2 - rts -.2 >PUSHB hSCRN hParent - >PUSHBI SCR.X3 - >PUSHBI SCR.Y1+4 - >PUSHBI 0 - >PUSHBI 0 - >PUSHW L.HTTPD.Label - >PUSHEA.G HTTPD.Var - >LIBCALL hLIBTUI,LIBTUI.NewCBox - bcc .3 - rts -.3 >PUSHB hSCRN hParent - >PUSHBI SCR.X3 - >PUSHBI SCR.Y1+5 - >PUSHBI 0 - >PUSHBI 0 - >PUSHW L.BBSD.Label - >PUSHEA.G BBSD.Var - >LIBCALL hLIBTUI,LIBTUI.NewCBox - rts - -CS.IP.Init >PUSHB hSCRN hParent - >PUSHBI SCR.X1 - >PUSHBI SCR.Y2 - >PUSHW L.MANUAL.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - - >PUSHB hSCRN hParent - >PUSHBI SCR.X1 - >PUSHBI SCR.Y2+2 - >PUSHW L.IPADDR.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - >PUSHB hSCRN hParent - >PUSHBI SCR.X1 - >PUSHBI SCR.Y2+3 - >PUSHBI 18 W - >PUSHEA.G IPADDR.Buf - >PUSHWI 15 Len - >LIBCALL hLIBTUI,LIBTUI.NewTLine - - >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y2+2 - >PUSHW L.MASK.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y2+3 - >PUSHBI 18 W - >PUSHEA.G MASK.Buf - >PUSHWI 15 Len - >LIBCALL hLIBTUI,LIBTUI.NewTLine - - >PUSHB hSCRN hParent - >PUSHBI SCR.X3 - >PUSHBI SCR.Y2+2 - >PUSHW L.GATEWAY.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - >PUSHB hSCRN hParent - >PUSHBI SCR.X3 - >PUSHBI SCR.Y2+3 - >PUSHBI 18 W - >PUSHEA.G GATEWAY.Buf - >PUSHWI 15 Len - >LIBCALL hLIBTUI,LIBTUI.NewTLine - - >PUSHB hSCRN hParent - >PUSHBI SCR.X1 - >PUSHBI SCR.Y2+5 - >PUSHW L.NS1.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - >PUSHB hSCRN hParent - >PUSHBI SCR.X1 - >PUSHBI SCR.Y2+6 - >PUSHBI 18 W - >PUSHEA.G NS1.Buf - >PUSHWI 15 Len - >LIBCALL hLIBTUI,LIBTUI.NewTLine - - >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y2+5 - >PUSHW L.NS2.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - >PUSHB hSCRN hParent - >PUSHBI SCR.X2 - >PUSHBI SCR.Y2+6 - >PUSHBI 18 W - >PUSHEA.G NS2.Buf - >PUSHWI 15 Len - >LIBCALL hLIBTUI,LIBTUI.NewTLine - - >PUSHB hSCRN hParent - >PUSHBI SCR.X3 - >PUSHBI SCR.Y2+5 - >PUSHW L.DOM.Label - >LIBCALL hLIBTUI,LIBTUI.NewLabel - >PUSHB hSCRN hParent - >PUSHBI SCR.X3 - >PUSHBI SCR.Y2+6 - >PUSHBI 25 W - >PUSHEA.G DOM.Buf - >PUSHWI 65 Len - >LIBCALL hLIBTUI,LIBTUI.NewTLine - rts -*-------------------------------------- -CS.BUT.Init >PUSHB hSCRN hParent - >PUSHBI 50 X1 - >PUSHBI 20 Y1 - >PUSHBI 19 Ctrl-S - >PUSHBI EV.SAVE - >PUSHW L.BUTS.Label - >LIBCALL hLIBTUI,LIBTUI.NewBut - bcs .9 - - >PUSHB hSCRN hParent - >PUSHBI 65 X1 - >PUSHBI 20 Y1 - >PUSHBI 17 Ctrl-Q - >PUSHBI EV.QUIT - >PUSHW L.BUTQ.Label - >LIBCALL hLIBTUI,LIBTUI.NewBut -.9 rts -*-------------------------------------- -CS.DLG.SAVE >PUSHB hCTX hParent - >PUSHBI 70 W - >PUSHBI 11 H - >PUSHW L.DLGS.Title - >LIBCALL hLIBTUI,LIBTUI.NewDlg - bcs .9 - sta hDLGS - >PUSHB hDLGS hParent - >PUSHBI 2 X1 - >PUSHBI 2 Y1 - >PUSHW L.DLGS.Text - >LIBCALL hLIBTUI,LIBTUI.NewLabel - bcs .9 - >PUSHB hDLGS hParent - >PUSHBI 2 - >PUSHBI 4 Y1 - >PUSHBI 0 - >PUSHBI 0 - >PUSHW L.DLGS.Label - >PUSHEA.G DLGS.Var - >LIBCALL hLIBTUI,LIBTUI.NewCBox - bcc CS.DLG.SAVE2 -.9 rts -CS.DLG.SAVE2 sta hDLGitem - >PUSHB hDLGS hParent - >PUSHBI 48 X1 - >PUSHBI 7 Y1 - >PUSHBI C.CR Hotkey ENTER - >PUSHBI EV.OK - >PUSHW L.BUT.OK - >LIBCALL hLIBTUI,LIBTUI.NewBut - bcs .8 - >PUSHB hDLGS hParent - >PUSHBI 57 X1 - >PUSHBI 7 Y1 - >PUSHBI 3 Hotkey Ctrl-C - >PUSHBI EV.CANCEL - >PUSHW L.BUT.Cancel - >LIBCALL hLIBTUI,LIBTUI.NewBut - bcs .8 - lda hDLGS - >LIBCALL hLIBTUI,LIBTUI.Draw - bcc .9 -.8 rts -.9 lda hDLGitem - >LIBCALL hLIBTUI,LIBTUI.Activate -CS.DLG.Loop lda hDLGS - >LIBCALL hLIBTUI,LIBTUI.Exec - cmp #EV.OK - bne .1 - >PUSHB hSCRN - >PUSHBI S.OBJ.pSTATUS - >PUSHW L.SCRN.StatusSv - >LIBCALL hLIBTUI,LIBTUI.SetProp - jsr CS.IPW write tcpip.conf - jsr CS.HOSTW write hostname - jsr CS.NETW write startup system script - >LDA.G DLGS.Var -* cmp #0 - beq .1 - jsr CS.SHW write startup shell script - bra .2 -.1 cmp #EV.CANCEL - bne CS.DLG.Loop - -.2 php - pha - lda hDLGS - >LIBCALL hLIBTUI,LIBTUI.Destroy - lda hSCRN - >LIBCALL hLIBTUI,LIBTUI.Draw - pla - plp -.9 rts -*-------------------------------------- -CS.HOSTW >LDYA L.HOSTNAME - jsr CS.File.OpenWR - bcc .1 - rts -.1 >PUSHB hFile - >PUSHW L.HOST.Hdr - >SYSCALL FPutS - >PUSHB hFile - >PUSHEA.G HOST.Buf - >SYSCALL FPutS - >PUSHB hFile - >PUSHW L.EOL - >SYSCALL FPutS - jmp CS.File.Close -*-------------------------------------- -CS.IPW >LDYA L.TCPIP.CONF - jsr CS.File.OpenWR - bcc .1 - rts -.1 >LDA.G AUTOIP.Var - bne CS.IPW.addr - >PUSHB hFile - >PUSHW L.IP.Hash - >SYSCALL FPutS -CS.IPW.addr >PUSHB hFile - >PUSHW L.IPADDR.Label - >SYSCALL FPutS - >PUSHB hFile - >PUSHEA.G IPADDR.Buf - >SYSCALL FPutS - >PUSHB hFile - >PUSHW L.EOL - >SYSCALL FPutS - >LDA.G AUTOIP.Var - bne CS.IPW.mask - >PUSHB hFile - >PUSHW L.IP.Hash - >SYSCALL FPutS -CS.IPW.mask >PUSHB hFile - >PUSHW L.MASK.Label - >SYSCALL FPutS - >PUSHB hFile - >PUSHEA.G MASK.Buf - >SYSCALL FPutS - >PUSHB hFile - >PUSHW L.EOL - >SYSCALL FPutS - >LDA.G AUTOIP.Var - bne CS.IPW.gway - >PUSHB hFile - >PUSHW L.IP.Hash - >SYSCALL FPutS -CS.IPW.gway >PUSHB hFile - >PUSHW L.GATEWAY.Label - >SYSCALL FPutS - >PUSHB hFile - >PUSHEA.G GATEWAY.Buf - >SYSCALL FPutS - >PUSHB hFile - >PUSHW L.EOL - >SYSCALL FPutS - >LDA.G AUTOIP.Var - bne CS.IPW.ns1 - >PUSHB hFile - >PUSHW L.IP.Hash - >SYSCALL FPutS -CS.IPW.ns1 >PUSHB hFile - >PUSHW L.NS1.Label - >SYSCALL FPutS - >PUSHB hFile - >PUSHEA.G NS1.Buf - >SYSCALL FPutS - >PUSHB hFile - >PUSHW L.EOL - >SYSCALL FPutS - >LDA.G AUTOIP.Var - bne CS.IPW.ns2 - >PUSHB hFile - >PUSHW L.IP.Hash - >SYSCALL FPutS -CS.IPW.ns2 >PUSHB hFile - >PUSHW L.NS1.Label Must use NS1 label again - >SYSCALL FPutS - >PUSHB hFile - >PUSHEA.G NS2.Buf - >SYSCALL FPutS - >PUSHB hFile - >PUSHW L.EOL - >SYSCALL FPutS - >LDA.G AUTOIP.Var - bne CS.IPW.dom - >PUSHB hFile - >PUSHW L.IP.Hash - >SYSCALL FPutS -CS.IPW.dom >PUSHB hFile - >PUSHW L.DOM.Label - >SYSCALL FPutS - >PUSHB hFile - >PUSHEA.G DOM.Buf - >SYSCALL FPutS - >PUSHB hFile - >PUSHW L.EOL - >SYSCALL FPutS - jmp CS.File.Close -*-------------------------------------- -CS.SHW >LDYA L.Netstart Write network startup shell script - jsr CS.File.OpenWR - bcc .0 - rts -.0 >PUSHB hFile - >PUSHW L.NS.Hdr - >SYSCALL FPutS - >LDA.G IFACE.var - cmp #0 - bne .1 - >PUSHB hFile - >PUSHW L.NS.Uth - >SYSCALL FPutS - bra .3 -.1 cmp #1 - bne .2 - >PUSHB hFile - >PUSHW L.NS.Lanc - >SYSCALL FPutS - bra .3 -.2 cmp #2 - bne .4 - >PUSHB hFile - >PUSHW L.NS.U2 - >SYSCALL FPutS -.3 bra CS.SHW.netd -.4 cmp #3 - bne .5 - >PUSHB hFile - >PUSHW L.NS.Dan2Eth - >SYSCALL FPutS - bra CS.SHW.netd -.5 cmp #4 - bne .6 - >PUSHB hFile - >PUSHW L.NS.UdEth - >SYSCALL FPutS - bra CS.SHW.netd -.6 cmp #5 - bne CS.SHW.netd - >PUSHB hFile - >PUSHW L.NS.UdEth.D - >SYSCALL FPutS - -CS.SHW.netd >PUSHB hFile - >PUSHW L.NS.networkd - >SYSCALL FPutS - >LDA.G LIBTCPIP.Var - beq CS.SHW.etalk - >PUSHB hFile - >PUSHW L.NS.libtcpip - >SYSCALL FPutS -CS.SHW.etalk >LDA.G LIBETALK.Var - beq CS.SHW.amper - >PUSHB hFile - >PUSHW L.NS.libetalk - >SYSCALL FPutS -cs.SHW.amper >PUSHB hFile - >PUSHW L.NS.amper - >SYSCALL FPutS - >LDA.G TELNET.Var - beq CS.SHW.httpd - >PUSHB hFile - >PUSHW L.NS.telnetd - >SYSCALL FPutS -CS.SHW.httpd >LDA.G HTTPD.Var - beq CS.SHW.bbsd - >PUSHB hFile - >PUSHW L.NS.httpd - >SYSCALL FPutS -CS.SHW.bbsd >LDA.G BBSD.Var - beq CS.SHW.close - >PUSHB hFile - >PUSHW L.NS.bbsd - >SYSCALL FPutS -CS.SHW.close jmp CS.File.Close -*.9 rts -*-------------------------------------- -CS.NETW >LDYA L.NETWORK Write network startup system script - jsr CS.File.OpenWR - bcc .0 - rts -.0 >LDA.G LIBTCPIP.Var - bpl CS.NETW.etalk - >PUSHB hFile - >PUSHW L.NETWORKIP - >SYSCALL FPutS -CS.NETW.etalk >LDA.G LIBETALK.Var - bpl .9 - >PUSHB hFile - >PUSHW L.NETWORKET - >SYSCALL FPutS -.9 jmp CS.File.Close - -*-------------------------------------- -CS.DOEVENT sec do not discard TIMER event - rts -*-------------------------------------- -CS.QUIT >LDA.G hBuf1 - beq .1 - >SYSCALL FreeMem -.1 lda hCTX - beq .2 - >LIBCALL hLIBTUI,LIBTUI.Close -.2 lda hLIBTUI - beq .8 - >SYSCALL UnloadLib -.8 clc - rts -*-------------------------------------- -CS.SCRN.Draw lda hSCRN - >SYSCALL GetMemPtr - >STYA ZPPtr1 - >PUSHEA.G SCRN.TitleBuf - >PUSHW L.SCRN.Title - ldy #S.OBJ.X1 -.1 lda (ZPPtr1),y - >PUSHA - iny - cpy #S.OBJ.InnerH+1 - bne .1 - >PUSHBI 10 - >SYSCALL sprintf - lda hSCRN - >LIBCALL hLIBTUI,LIBTUI.Draw - rts -*-------------------------------------- -CS.END -*-------------------------------------- -LIBTUI .AZ "libtui" -hLIBTUI .BS 1 -*-------------------------------------- -NETSTART .AZ "${HOME}netstart" -HOSTNAME .AZ "${ROOT}etc/hostname" -TCPIP.CONF .AZ "${ROOT}etc/tcpip.conf" -NETWORK .AZ "$[ROOT]etc/network" -NETWORKIP .CZ "ipconfig/r" -NETWORKET .CZ "etconfig/r" -*-------------------------------------- -IP.Keywords .PS "address" - .PS "netmask" - .PS "gateway" - .PS "nameserver" - .PS "dnsdomain" - .DA #0 -*-------------------------------------- -SCRN.Title .AZ " NetConfig" -SCRN.Status .AZ " " -SCRN.StatusSv .AZ " Settings saved successfully" -*-------------------------------------- -HOST.Label .AZ "Hostname:" -*Host.Text .BS 16 -*-------------------------------------- -IFACE.Label .AZ "Interface" -IFACE.List .CS "Uthernet\r" - .CS "LanCeGS\r" - .CS "Uthernet2\r" - .CS "Dan2Eth\r" - .CS "UdEth\r" - .CZ "UdEth.D (DMA)" -*-------------------------------------- -AUTOIP.Label .AZ "Auto or Manual IP" -AUTOIP.List .CS "Auto/DHCP\r" - .CZ "Manual/Static" -*-------------------------------------- -PROTO.Label .AZ "Protocol" -LIBTCPIP.Label .AZ "TCP/IP" -LIBETALK.Label .AZ "Ethertalk" -*-------------------------------------- -SERV.Label .AZ "Services" -TELNET.Label .AZ "telnetd" -HTTPD.Label .AZ "httpd" -BBSD.Label .AZ "bbsd" -*-------------------------------------- -MANUAL.Label .AZ "MANUAL IP SETTINGS (Ignored for Auto/DHCP)" -IPADDR.Label .AZ "address " -MASK.Label .AZ "netmask " -GATEWAY.Label .AZ "gateway " -NS1.Label .AZ "nameserver " -NS2.Label .AZ "nameserver 2" -DOM.Label .AZ "dnsdomain " -*-------------------------------------- -BUTS.Label .AZ "(^S)ave..." -BUTQ.Label .AZ "(^Q)uit" -DLGS.Title .AZ "Save Config" -DLGS.Text .AZ "Save the system config files?" -DLGS.Label .AZ "Create NETSTART script in user home directory" -BUT.OK .AZ " OK " -BUT.Cancel .AZ "Cancel" -*-------------------------------------- -EOL .CZ "\r" -NS.Hdr .CZ "#!/bin/sh\r" -NS.Uth .CZ "insdrv uthernet.drv 00:0E:3A:12:34:56\r" -NS.Lanc .CZ "insdrv lancegs.drv 00:0E:3A:12:34:56\r" -NS.U2 .CZ "insdrv uthernet2.drv 00:08:DC:12:34:56\r" -NS.Dan2Eth .CZ "insdrv dan2eth.drv 00:08:DC:12:34:56\r" -NS.Udeth .CZ "insdrv udeth.drv 00:08:DC:12:34:56\r" -NS.Udeth.D .CZ "insdrv udeth.d.drv 00:08:DC:12:34:56\r" -NS.networkd .CZ "NOHUP networkd " -NS.libtcpip .CZ "libtcpip " -NS.libetalk .CZ "libetalk " -NS.amper .CZ "&\r" -NS.telnetd .CZ "NOHUP telnetd 6502 &\r" -NS.httpd .CZ "NOHUP httpd &\r" -NS.bbsd .CZ "NOHUP bbsd &\r" -*Str.debug .AZ "var = " -IP.Hash .AZ "#" -HOST.Hdr .CZ "# Put hostname here (max 15 characters)\r" -*-------------------------------------- - .DUMMY - .OR 0 -DS.START -IFACE.Var .BS 1 -AUTOIP.Var .BS 1 -LIBTCPIP.Var .BS 1 -LIBETALK.Var .BS 1 -TELNET.Var .BS 1 -HTTPD.Var .BS 1 -BBSD.Var .BS 1 -DLGS.Var .BS 1 -HOST.Buf .BS 16 -IPADDR.Buf .BS 16 -MASK.Buf .BS 16 -GATEWAY.Buf .BS 16 -NS1.Buf .BS 16 -NS2.Buf .BS 16 -DOM.Buf .BS 16 -SCRN.TitleBuf .BS 10 -Overflow.Buf .BS 80 -DS.END .ED -*-------------------------------------- -MAN -SAVE usr/src/bin/netconfig.s -ASM \ No newline at end of file +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF bin/netconfig +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/mli.i + .INB inc/mli.e.i + .INB inc/libtui.i +*-------------------------------------- +* Constants +*-------------------------------------- +EV.SAVE .EQ $C0 +EV.OK .EQ $CE +EV.CANCEL .EQ $CF +SCR.X1 .EQ 3 +SCR.X2 .EQ 27 +SCR.X3 .EQ 52 +SCR.Y1 .EQ 1 +SCR.Y2 .EQ 12 +*-------------------------------------- +* Zero Page Segment, up to 32 bytes +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +hFile .BS 1 +hBuf1 .BS 1 +hCTX .BS 1 +hSCRN .BS 1 +hItem1 .BS 1 +hDLGS .BS 1 +hDLGitem .BS 1 +ZPPtr1 .BS 2 +ZPTmpPtr1 .BS 2 +ZPTmpPtr2 .BS 2 +ZPTmpPtr3 .BS 2 +ZPTmpPtr4 .BS 2 +ZPBufPtr .BS 1 +ZS.END .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA #0 S.PS.F + .DA #0 + .DA CS.END-CS.START Code Length To Relocate + .DA DS.END-DS.START Data Segment to Allocate + .DA #16 Stack Size + .DA #ZS.END-ZS.START Zero Page Size + .DA 0 +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT + +L.LIBTUI .DA LIBTUI +*-------------------------------------- +L.NETSTART .DA NETSTART +L.HOSTNAME .DA HOSTNAME +L.NETWORK .DA NETWORK +L.NETWORKIP .DA NETWORKIP +L.NETWORKET .DA NETWORKET +L.TCPIP.CONF .DA TCPIP.CONF +L.SCRN.Title .DA SCRN.Title +L.SCRN.Status .DA SCRN.Status +L.SCRN.StatusSv .DA SCRN.StatusSv +L.HOST.Label .DA HOST.Label +L.IFACE.Label .DA IFACE.Label +L.IFACE.List .DA IFACE.List +L.AUTOIP.Label .DA AUTOIP.Label +L.AUTOIP.List .DA AUTOIP.List +L.PROTO.Label .DA PROTO.Label +L.LIBTCPIP.Label .DA LIBTCPIP.Label +L.LIBETALK.Label .DA LIBETALK.Label +L.SERV.Label .DA SERV.Label +L.TELNET.Label .DA TELNET.Label +L.HTTPD.Label .DA HTTPD.Label +L.BBSD.Label .DA BBSD.Label +L.MANUAL.Label .DA MANUAL.Label +L.IPADDR.Label .DA IPADDR.Label +L.MASK.Label .DA MASK.Label +L.GATEWAY.Label .DA GATEWAY.Label +L.NS1.Label .DA NS1.Label +L.NS2.Label .DA NS2.Label +L.DOM.Label .DA DOM.Label +L.BUTQ.Label .DA BUTQ.Label +L.BUTS.Label .DA BUTS.Label +L.DLGS.Title .DA DLGS.Title +L.DLGS.Text .DA DLGS.Text +L.DLGS.Label .DA DLGS.Label +L.BUT.OK .DA BUT.OK +L.BUT.Cancel .DA BUT.Cancel +L.NS.Hdr .DA NS.Hdr + +T.NICs .DA NS.Uth Table of 6 ptrs -> NIC lines + .DA NS.Lanc + .DA NS.U2 + .DA NS.Dan2Eth + .DA NS.Udeth + .DA NS.Udeth.D + +L.NS.networkd .DA NS.networkd +L.NS.libtcpip .DA NS.libtcpip +L.NS.libetalk .DA NS.libetalk +L.NS.amper .DA NS.amper +L.NS.telnetd .DA NS.telnetd +L.NS.httpd .DA NS.httpd +L.NS.bbsd .DA NS.bbsd +L.IP.Hash .DA IP.Hash +L.Host.Hdr .DA Host.Hdr +L.EOL .DA EOL +*L.Str.debug .DA Str.debug +L.IP.Keywords .DA IP.Keywords +J.IP.Keywords .DA CS.IPR.addr + .DA CS.IPR.mask + .DA CS.IPR.gway + .DA CS.IPR.ns1 + .DA CS.IPR.dom + .DA 0 +*-------------------------------------- +CS.INIT >LDYA L.LIBTUI + >SYSCALL LoadLib + bcs CS.INIT.RTS + + sta hLIBTUI +* clc +CS.INIT.RTS rts +*-------------------------------------- +CS.RUN >LDYAI 80 !!! >LDYAI immediate value of 80, not >LDYA content of memory location 80 + >SYSCALL GetMem + bcs CS.INIT.RTS + + >STYA ZPTmpPtr1 + stx hBuf1 !!! don't forget to free() it in CS.QUIT + + jsr CS.HOSTR Read HOSTNAME file + jsr CS.IPR Read TCPIP.CONF file + jsr CS.File.Close CS.IPR doesn't close the file + + >LIBCALL hLIBTUI,LIBTUI.Init + bcs CS.RUN.RTS + + sta hCTX + jsr CS.SCRN.Init + bcs CS.RUN.RTS + + jsr CS.HOST.INIT + bcs CS.RUN.RTS + + jsr CS.IFACE.Init + bcs CS.RUN.RTS + + jsr CS.AUTOIP.Init + bcs CS.RUN.RTS + + jsr CS.PROTO.Init + bcs CS.RUN.RTS + + jsr CS.SERV.Init + bcs CS.RUN.RTS + + jsr CS.IP.Init + bcs CS.RUN.RTS + + jsr CS.BUT.Init + bcs CS.RUN.RTS + + jsr CS.SCRN.Draw Will Call SCRN.Draw + lda hItem1 + >LIBCALL hLIBTUI,LIBTUI.Activate +*-------------------------------------- +CS.RUN.LOOP2 lda hSCRN + >LIBCALL hLIBTUI,LIBTUI.Exec + bcs CS.RUN.RTS + + cmp #EV.RESIZE + bne .1 + + jsr CS.SCRN.Draw + bcs CS.RUN.RTS + + bra CS.RUN.LOOP2 + +.1 cmp #EV.SAVE + bne .2 + + jsr CS.DLG.SAVE + bcc CS.RUN.LOOP2 + +.2 cmp #EV.QUIT + bne CS.RUN.LOOP2 + + lda hSCRN + >LIBCALL hLIBTUI,LIBTUI.Destroy + +*CS.RUN.QUIT2 lda hBuf1 !!! All done by CS.QUIT +* >SYSCALL FreeMem +* lda hLIBTUI +* >SYSCALL UnloadLib + + lda #0 + sec +CS.RUN.RTS rts +*-------------------------------------- +CS.HOSTR >LDYA L.HOSTNAME etc/hostname + JSR CS.File.OpenRD + bcc CS.HOSTR.Loop + rts +CS.HOSTR.Loop jsr CS.File.Read + bcs .1 + lda (ZPTmpPtr1) + beq CS.HOSTR.Loop + cmp #'#' + beq CS.HOSTR.Loop +.1 >LEA.G HOST.Buf + >STYA ZPTmpPtr4 + + ldy #0 Copy setting to var string + +CS.HOSTR.Loop2 lda (ZPTmpPtr1),y +* cmp #0 !!! not required + beq .2 + + sta (ZPTmpPtr4),y + iny + cpy #$0F + bcc CS.HOSTR.Loop2 + +.2 lda #0 + sta (ZPTmpPtr4),y +* clc + jmp CS.File.Close +*-------------------------------------- +CS.IPR >LDYA L.TCPIP.CONF etc/tcpip.conf + JSR CS.File.OpenRD + bcc CS.IPR.Loop + rts + +CS.IPR.Loop jsr CS.File.Read + bcs .8 +.1 ldy #$ff +.2 iny +.21 lda (ZPTmpPtr1),y + cmp #C.SPACE + beq .3 + cmp #'#' + bne .2 + lda #1 + >STA.G AUTOIP.Var Preselect Manual IP radio + + inc ZPTmpPtr1 + bcc .21 + inc ZPTmpPtr2+1 + bra .21 +.3 lda L.IP.Keywords Whole word, check + sta ZPTmpPtr2 + lda L.IP.Keywords+1 + sta ZPTmpPtr2+1 + ldx #0 +.4 phy save keyword len + tya + cmp (ZPTmpPtr2) + bne .6 empty +.5 lda (ZPTmpPtr2),y check next char + dey + cmp (ZPTmpPtr1),y + bne .6 no match + tya + bne .5 + ply discard keyword len + jsr CS.IPR.Keyword keyword matched - action it + bcc CS.IPR.Loop + rts +.6 lda (ZPTmpPtr2) + sec + adc ZPTmpPtr2 + sta ZPTmpPtr2 + bcc .7 + inc ZPTmpPtr2+1 +.7 inx + inx + ply reset keyword len + lda (ZPTmpPtr2) + bne .4 + + bra CS.IPR.Loop + +.8 clc + jmp CS.File.Close + +CS.IPR.Keyword lda ZPTmpPtr1+1 Move ptr to after keyword+space + sta ZPTmpPtr3+1 + iny + clc + tya + adc ZPTmpPtr1 + sta ZPTmpPtr3 + bcc .81 + + inc ZPTmpPtr3+1 + +.81 jmp (J.IP.Keywords,x) + +CS.IPR.addr >LEA.G IPADDR.Buf + + >STYA ZPTmpPtr4 + +CS.IPR.Copy ldx #15 "255.255.255.255" + \0 = 16 + +CS.IPR.CopyX ldy #0 Copy setting to correct var + +.1 lda (ZPTmpPtr3),y + beq .9 + + sta (ZPTmpPtr4),y + iny + dex + bne .1 + +.9 lda #0 + sta (ZPTmpPtr4),y + + clc + rts + +CS.IPR.mask >LEA.G MASK.Buf + >STYA ZPTmpPtr4 + jmp CS.IPR.Copy + +CS.IPR.gway >LEA.G GATEWAY.Buf + >STYA ZPTmpPtr4 + jmp CS.IPR.Copy + +CS.IPR.ns1 >LEA.G NS1.Buf + >STYA ZPTmpPtr4 + + lda (ZPTmpPtr4) + bne CS.IPR.ns2 NS1 already populated + jmp CS.IPR.Copy + +CS.IPR.ns2 >LEA.G NS2.Buf + >STYA ZPTmpPtr4 + jmp CS.IPR.Copy + +CS.IPR.dom >LEA.G DOM.Buf + >STYA ZPTmpPtr4 + + ldx #31 !!! max 32 for domain name + jsr CS.IPR.CopyX + sec last one so sec + rts +*-------------------------------------- +CS.File.OpenRD stz hFile + >PUSHYA + >PUSHBI O.RDONLY + >PUSHBI 0 Type + >PUSHWZ Aux type + >SYSCALL FOpen + bcs .9 + + sta hFile + +.9 rts +*-------------------------------------- +CS.File.Read >PUSHB hFile + >PUSHW ZPTmpPtr1 + >PUSHWI 80 + >SYSCALL FGetS + bcs .9 + + lda (ZPTmpPtr1) + beq CS.File.Read + +* clc + +.9 rts +*-------------------------------------- +CS.File.OpenWR >PUSHYA + >PUSHBI O.CREATE+O.WRONLY+O.TRUNC + >PUSHBI $04 Type Text + >PUSHWZ Aux type + >SYSCALL FOpen + bcs .9 + sta hFile +.9 rts +*-------------------------------------- +CS.File.FPutSYA pha + >PUSHB hFile + pla + >PUSHYA + >SYSCALL FPutS + rts +*-------------------------------------- +CS.File.Close php + pha + lda hFile + beq .8 + >SYSCALL FClose +.8 pla + plp + rts +*-------------------------------------- +CS.SCRN.Init >PUSHB hCTX hParent + >PUSHBI S.OBJ.F.bTitle+S.OBJ.F.bStatus + >LIBCALL hLIBTUI,LIBTUI.NewScrn + bcs .9 + + sta hSCRN + + >PUSHA + >PUSHBI S.OBJ.pTITLE + >PUSHEA.G SCRN.TitleBuf + >LIBCALL hLIBTUI,LIBTUI.SetProp + + >PUSHB hSCRN + >PUSHBI S.OBJ.pSTATUS + >PUSHW L.SCRN.Status + >LIBCALL hLIBTUI,LIBTUI.SetProp + +.9 rts +*-------------------------------------- +CS.HOST.INIT >PUSHB hSCRN hParent + >PUSHBI SCR.X1 + >PUSHBI SCR.Y1 + >PUSHW L.HOST.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + bcs .9 + + >PUSHB hSCRN hParent + >PUSHBI SCR.X1+9 + >PUSHBI SCR.Y1 + >PUSHBI 18 W + >PUSHEA.G HOST.Buf + >PUSHWI 15 Len + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewTLine + sta hItem1 +.9 rts +*-------------------------------------- +CS.IFACE.Init >PUSHB hSCRN hParent + >PUSHBI SCR.X1 + >PUSHBI SCR.Y1+2 + >PUSHW L.IFACE.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + bcs .9 + + >PUSHB hSCRN hParent + >PUSHBI SCR.X1 + >PUSHBI SCR.Y1+3 + + >PUSHWZ +* >PUSHBI 0 HK +* >PUSHBI 0 EV + + >PUSHW L.IFACE.List + >PUSHEA.G IFACE.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewRadio + +.9 rts +*-------------------------------------- +CS.AUTOIP.Init >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y1+2 + >PUSHW L.AUTOIP.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + bcs .9 + >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y1+3 + + >PUSHWZ +* >PUSHBI 0 HK +* >PUSHBI 0 EV + + >PUSHW L.AUTOIP.List + >PUSHEA.G AUTOIP.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewRadio +.9 rts + +CS.PROTO.Init >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y1+6 + >PUSHW L.PROTO.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + bcs .1 + + >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y1+7 + + >PUSHWZ +* >PUSHBI 0 HK +* >PUSHBI 0 EV + + >PUSHW L.LIBTCPIP.Label + >PUSHEA.G LIBTCPIP.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewCBox +.1 bcs .9 + >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y1+8 + + >PUSHWZ +* >PUSHBI 0 HK +* >PUSHBI 0 EV + + >PUSHW L.LIBETALK.Label + >PUSHEA.G LIBETALK.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewCBox +.9 rts + +CS.SERV.Init >PUSHB hSCRN hParent + >PUSHBI SCR.X3 + >PUSHBI SCR.Y1+2 + >PUSHW L.SERV.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + bcc .1 + rts +.1 >PUSHB hSCRN hParent + >PUSHBI SCR.X3 + >PUSHBI SCR.Y1+3 + + >PUSHWZ +* >PUSHBI 0 HK +* >PUSHBI 0 EV + + >PUSHW L.TELNET.Label + >PUSHEA.G TELNET.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewCBox + bcc .2 + rts +.2 >PUSHB hSCRN hParent + >PUSHBI SCR.X3 + >PUSHBI SCR.Y1+4 + + >PUSHWZ +* >PUSHBI 0 HK +* >PUSHBI 0 EV + + >PUSHW L.HTTPD.Label + >PUSHEA.G HTTPD.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewCBox + bcc .3 + + rts + +.3 >PUSHB hSCRN hParent + >PUSHBI SCR.X3 + >PUSHBI SCR.Y1+5 + + >PUSHWZ +* >PUSHBI 0 HK +* >PUSHBI 0 EV + + >PUSHW L.BBSD.Label + >PUSHEA.G BBSD.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewCBox + rts + +CS.IP.Init >PUSHB hSCRN hParent + >PUSHBI SCR.X1 + >PUSHBI SCR.Y2 + >PUSHW L.MANUAL.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + + >PUSHB hSCRN hParent + >PUSHBI SCR.X1 + >PUSHBI SCR.Y2+2 + >PUSHW L.IPADDR.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + + >PUSHB hSCRN hParent + >PUSHBI SCR.X1 + >PUSHBI SCR.Y2+3 + >PUSHBI 18 W + >PUSHEA.G IPADDR.Buf + >PUSHWI 15 Len + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewTLine + + >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y2+2 + >PUSHW L.MASK.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + + >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y2+3 + >PUSHBI 18 W + >PUSHEA.G MASK.Buf + >PUSHWI 15 Len + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewTLine + + >PUSHB hSCRN hParent + >PUSHBI SCR.X3 + >PUSHBI SCR.Y2+2 + >PUSHW L.GATEWAY.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + + >PUSHB hSCRN hParent + >PUSHBI SCR.X3 + >PUSHBI SCR.Y2+3 + >PUSHBI 18 W + >PUSHEA.G GATEWAY.Buf + >PUSHWI 15 Len + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewTLine + + >PUSHB hSCRN hParent + >PUSHBI SCR.X1 + >PUSHBI SCR.Y2+5 + >PUSHW L.NS1.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + + >PUSHB hSCRN hParent + >PUSHBI SCR.X1 + >PUSHBI SCR.Y2+6 + >PUSHBI 18 W + >PUSHEA.G NS1.Buf + >PUSHWI 15 Len + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewTLine + + >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y2+5 + >PUSHW L.NS2.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + + >PUSHB hSCRN hParent + >PUSHBI SCR.X2 + >PUSHBI SCR.Y2+6 + >PUSHBI 18 W + >PUSHEA.G NS2.Buf + >PUSHWI 15 Len + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewTLine + + >PUSHB hSCRN hParent + >PUSHBI SCR.X3 + >PUSHBI SCR.Y2+5 + >PUSHW L.DOM.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + + >PUSHB hSCRN hParent + >PUSHBI SCR.X3 + >PUSHBI SCR.Y2+6 + >PUSHBI 25 W + >PUSHEA.G DOM.Buf + >PUSHWI 65 Len + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewTLine + rts +*-------------------------------------- +CS.BUT.Init >PUSHB hSCRN hParent + >PUSHBI 50 X1 + >PUSHBI 20 Y1 + >PUSHBI 19 Ctrl-S + >PUSHBI EV.SAVE + >PUSHW L.BUTS.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewBut + bcs .9 + + >PUSHB hSCRN hParent + >PUSHBI 65 X1 + >PUSHBI 20 Y1 + >PUSHBI 17 Ctrl-Q + >PUSHBI EV.QUIT + >PUSHW L.BUTQ.Label + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewBut +.9 rts +*-------------------------------------- +CS.DLG.SAVE >PUSHB hCTX hParent + >PUSHBI 70 W + >PUSHBI 11 H + >PUSHW L.DLGS.Title + >LIBCALL hLIBTUI,LIBTUI.NewDlg + bcs .9 + + sta hDLGS + >PUSHB hDLGS hParent + >PUSHBI 2 X1 + >PUSHBI 2 Y1 + >PUSHW L.DLGS.Text + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewLabel + bcs .9 + + >PUSHB hDLGS hParent + >PUSHBI 2 + >PUSHBI 4 Y1 + +* >PUSHBI 0 +* >PUSHBI 0 + >PUSHWZ HotKey, EV + + >PUSHW L.DLGS.Label + >PUSHEA.G DLGS.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewCBox + bcc CS.DLG.SAVE2 +.9 rts +CS.DLG.SAVE2 sta hDLGitem + >PUSHB hDLGS hParent + >PUSHBI 48 X1 + >PUSHBI 7 Y1 + >PUSHBI C.CR Hotkey ENTER + >PUSHBI EV.OK + >PUSHW L.BUT.OK + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewBut + + bcs .8 + + >PUSHB hDLGS hParent + >PUSHBI 57 X1 + >PUSHBI 7 Y1 + >PUSHBI 3 Hotkey Ctrl-C + >PUSHBI EV.CANCEL + >PUSHW L.BUT.Cancel + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewBut + bcs .8 + + lda hDLGS + >LIBCALL hLIBTUI,LIBTUI.Draw + bcc .9 +.8 rts +.9 lda hDLGitem + >LIBCALL hLIBTUI,LIBTUI.Activate +CS.DLG.Loop lda hDLGS + >LIBCALL hLIBTUI,LIBTUI.Exec + cmp #EV.OK + bne .1 + >PUSHB hSCRN + >PUSHBI S.OBJ.pSTATUS + >PUSHW L.SCRN.StatusSv + >LIBCALL hLIBTUI,LIBTUI.SetProp + jsr CS.IPW write tcpip.conf + jsr CS.HOSTW write hostname + jsr CS.NETW write startup system script + >LDA.G DLGS.Var +* cmp #0 + beq .1 + jsr CS.SHW write startup shell script + bra .2 +.1 cmp #EV.CANCEL + bne CS.DLG.Loop + +.2 php + pha + lda hDLGS + >LIBCALL hLIBTUI,LIBTUI.Destroy + lda hSCRN + >LIBCALL hLIBTUI,LIBTUI.Draw + pla + plp +.9 rts +*-------------------------------------- +CS.HOSTW >LDYA L.HOSTNAME + jsr CS.File.OpenWR + bcc .1 + rts +.1 >LDYA L.HOST.Hdr + jsr CS.File.FPutSYA + + >LEA.G HOST.Buf + jsr CS.File.FPutSYA + + >LDYA L.EOL + jsr CS.File.FPutSYA + + jmp CS.File.Close +*-------------------------------------- +CS.IPW >LDYA L.TCPIP.CONF + jsr CS.File.OpenWR + bcc .1 + + rts + +.1 >LDA.G AUTOIP.Var + bne CS.IPW.addr + + >LDYA L.IP.Hash + jsr CS.File.FPutSYA + +CS.IPW.addr >LDYA L.IPADDR.Label + jsr CS.File.FPutSYA + + >LEA.G IPADDR.Buf + jsr CS.File.FPutSYA + + >LDYA L.EOL + jsr CS.File.FPutSYA + + >LDA.G AUTOIP.Var + bne CS.IPW.mask + + >LDYA L.IP.Hash + jsr CS.File.FPutSYA + +CS.IPW.mask >LDYA L.MASK.Label + jsr CS.File.FPutSYA + + >LEA.G MASK.Buf + jsr CS.File.FPutSYA + + >LDYA L.EOL + jsr CS.File.FPutSYA + + >LDA.G AUTOIP.Var + bne CS.IPW.gway + + >LDYA L.IP.Hash + jsr CS.File.FPutSYA + +CS.IPW.gway >LDYA L.GATEWAY.Label + jsr CS.File.FPutSYA + + >LEA.G GATEWAY.Buf + jsr CS.File.FPutSYA + + >LDYA L.EOL + jsr CS.File.FPutSYA + + >LDA.G AUTOIP.Var + bne CS.IPW.ns1 + + >LDYA L.IP.Hash + jsr CS.File.FPutSYA + +CS.IPW.ns1 >LDYA L.NS1.Label + jsr CS.File.FPutSYA + + >LEA.G NS1.Buf + jsr CS.File.FPutSYA + + >LDYA L.EOL + jsr CS.File.FPutSYA + + >LDA.G AUTOIP.Var + bne CS.IPW.ns2 + + >LDYA L.IP.Hash + jsr CS.File.FPutSYA + +CS.IPW.ns2 >LDYA L.NS1.Label Must use NS1 label again + jsr CS.File.FPutSYA + + >LEA.G NS2.Buf + jsr CS.File.FPutSYA + + >LDYA L.EOL + jsr CS.File.FPutSYA + + >LDA.G AUTOIP.Var + bne CS.IPW.dom + + >LDYA L.IP.Hash + jsr CS.File.FPutSYA + +CS.IPW.dom >LDYA L.DOM.Label + jsr CS.File.FPutSYA + + >LEA.G DOM.Buf + jsr CS.File.FPutSYA + + >LDYA L.EOL + jsr CS.File.FPutSYA + jmp CS.File.Close +*-------------------------------------- +CS.SHW >LDYA L.Netstart Write network startup shell script + jsr CS.File.OpenWR + bcc .0 + + rts + +.0 >LDYA L.NS.Hdr + jsr CS.File.FPutSYA + + >LDA.G IFACE.var range = 0..5 + asl + tax X = 0..10 + + >LDYA T.NICs,x + jsr CS.File.FPutSYA + +CS.SHW.netd >LDYA L.NS.networkd + jsr CS.File.FPutSYA + + >LDA.G LIBTCPIP.Var + beq CS.SHW.etalk + + >LDYA L.NS.libtcpip + jsr CS.File.FPutSYA + +CS.SHW.etalk >LDA.G LIBETALK.Var + beq CS.SHW.amper + + >LDYA L.NS.libetalk + jsr CS.File.FPutSYA + +cs.SHW.amper >LDYA L.NS.amper + jsr CS.File.FPutSYA + + >LDA.G TELNET.Var + beq CS.SHW.httpd + + >LDYA L.NS.telnetd + jsr CS.File.FPutSYA + +CS.SHW.httpd >LDA.G HTTPD.Var + beq CS.SHW.bbsd + + >LDYA L.NS.httpd + jsr CS.File.FPutSYA + +CS.SHW.bbsd >LDA.G BBSD.Var + beq CS.SHW.close + + >LDYA L.NS.bbsd + jsr CS.File.FPutSYA +CS.SHW.close jmp CS.File.Close +*.9 rts +*-------------------------------------- +CS.NETW >LDYA L.NETWORK Write network startup system script + jsr CS.File.OpenWR + bcc .0 + + rts + +.0 >LDA.G LIBTCPIP.Var + bpl CS.NETW.etalk + + >LDYA L.NETWORKIP + jsr CS.File.FPutSYA + +CS.NETW.etalk >LDA.G LIBETALK.Var + bpl .9 + + >LDYA L.NETWORKET + jsr CS.File.FPutSYA + +.9 jmp CS.File.Close +*-------------------------------------- +CS.DOEVENT sec do not discard TIMER event + rts +*-------------------------------------- +CS.QUIT lda hBuf1 !!! ZP, .... +* >LDA.G hBuf1 !!! ...not in DS + beq .1 + + >SYSCALL FreeMem + +.1 lda hCTX + beq .2 + + >LIBCALL hLIBTUI,LIBTUI.Close + +.2 lda hLIBTUI + beq .8 + + >SYSCALL UnloadLib + +.8 clc + rts +*-------------------------------------- +CS.SCRN.Draw lda hSCRN + >SYSCALL GetMemPtr + >STYA ZPPtr1 + >PUSHEA.G SCRN.TitleBuf + >PUSHW L.SCRN.Title !!! NO %d.... + +* ldy #S.OBJ.X1 +*.1 lda (ZPPtr1),y +* >PUSHA +* iny +* cpy #S.OBJ.InnerH+1 +* bne .1 +* >PUSHBI 10 !!! .... so DATA byte count = 0 + + + >PUSHBI 0 + + >SYSCALL sprintf + lda hSCRN + >LIBCALL hLIBTUI,LIBTUI.Draw + rts +*-------------------------------------- +CS.END +*-------------------------------------- +LIBTUI .AZ "libtui" +hLIBTUI .BS 1 +*-------------------------------------- +NETSTART .AZ "${HOME}netstart" +HOSTNAME .AZ "${ROOT}etc/hostname" +TCPIP.CONF .AZ "${ROOT}etc/tcpip.conf" +NETWORK .AZ "$[ROOT]etc/network" +NETWORKIP .CZ "ipconfig/r" +NETWORKET .CZ "etconfig/r" +*-------------------------------------- +IP.Keywords .PS "address" + .PS "netmask" + .PS "gateway" + .PS "nameserver" + .PS "dnsdomain" + .DA #0 +*-------------------------------------- +SCRN.Title .AZ " NetConfig" +SCRN.Status .AZ " " +SCRN.StatusSv .AZ " Settings saved successfully" +*-------------------------------------- +HOST.Label .AZ "Hostname:" +*Host.Text .BS 16 +*-------------------------------------- +IFACE.Label .AZ "Interface" +IFACE.List .CS "Uthernet\r" + .CS "LanCeGS\r" + .CS "Uthernet2\r" + .CS "Dan2Eth\r" + .CS "UdEth\r" + .CZ "UdEth.D (DMA)" +*-------------------------------------- +AUTOIP.Label .AZ "Auto or Manual IP" +AUTOIP.List .CS "Auto/DHCP\r" + .CZ "Manual/Static" +*-------------------------------------- +PROTO.Label .AZ "Protocol" +LIBTCPIP.Label .AZ "TCP/IP" +LIBETALK.Label .AZ "Ethertalk" +*-------------------------------------- +SERV.Label .AZ "Services" +TELNET.Label .AZ "telnetd" +HTTPD.Label .AZ "httpd" +BBSD.Label .AZ "bbsd" +*-------------------------------------- +MANUAL.Label .AZ "MANUAL IP SETTINGS (Ignored for Auto/DHCP)" +IPADDR.Label .AZ "address " +MASK.Label .AZ "netmask " +GATEWAY.Label .AZ "gateway " +NS1.Label .AZ "nameserver " +NS2.Label .AZ "nameserver 2" +DOM.Label .AZ "dnsdomain " +*-------------------------------------- +BUTS.Label .AZ "(^S)ave..." +BUTQ.Label .AZ "(^Q)uit" +DLGS.Title .AZ "Save Config" +DLGS.Text .AZ "Save the system config files?" +DLGS.Label .AZ "Create NETSTART script in user home directory" +BUT.OK .AZ " OK " +BUT.Cancel .AZ "Cancel" +*-------------------------------------- +EOL .CZ "\r" +NS.Hdr .CZ "#!/bin/sh\r" +NS.Uth .CZ "insdrv uthernet.drv 00:0E:3A:12:34:56\r" +NS.Lanc .CZ "insdrv lancegs.drv 00:0E:3A:12:34:56\r" +NS.U2 .CZ "insdrv uthernet2.drv 00:08:DC:12:34:56\r" +NS.Dan2Eth .CZ "insdrv dan2eth.drv 00:08:DC:12:34:56\r" +NS.Udeth .CZ "insdrv udeth.drv 00:08:DC:12:34:56\r" +NS.Udeth.D .CZ "insdrv udeth.d.drv 00:08:DC:12:34:56\r" +NS.networkd .CZ "NOHUP networkd " +NS.libtcpip .CZ "libtcpip " +NS.libetalk .CZ "libetalk " +NS.amper .CZ "&\r" +NS.telnetd .CZ "NOHUP telnetd 6502 &\r" +NS.httpd .CZ "NOHUP httpd &\r" +NS.bbsd .CZ "NOHUP bbsd &\r" +*Str.debug .AZ "var = " +IP.Hash .AZ "#" +HOST.Hdr .CZ "# Put hostname here (max 15 characters)\r" +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +IFACE.Var .BS 1 +AUTOIP.Var .BS 1 +LIBTCPIP.Var .BS 1 +LIBETALK.Var .BS 1 +TELNET.Var .BS 1 +HTTPD.Var .BS 1 +BBSD.Var .BS 1 +DLGS.Var .BS 1 + +HOST.Buf .BS 16 +IPADDR.Buf .BS 16 +MASK.Buf .BS 16 +GATEWAY.Buf .BS 16 +NS1.Buf .BS 16 +NS2.Buf .BS 16 + +DOM.Buf .BS 32 !!! enough room for ending \0 + +SCRN.TitleBuf .BS 81 !!! maximum screen width + \0 + +DS.END .ED +*-------------------------------------- +MAN +SAVE usr/src/bin/netconfig.s +ASM diff --git a/BIN/TUITEST.S.txt b/BIN/TUITEST.S.txt index aa475b82..d33eeb6b 100644 --- a/BIN/TUITEST.S.txt +++ b/BIN/TUITEST.S.txt @@ -10,6 +10,7 @@ NEW .INB inc/libtui.i *-------------------------------------- EV.SAVE .EQ $C0 +EV.CHECKBOX .EQ $C1 EV.OK .EQ $CE EV.CANCEL .EQ $CF *-------------------------------------- @@ -20,8 +21,11 @@ ZPPtr1 .BS 2 hCTX .BS 1 hSCRN .BS 1 + hTBOX1 .BS 1 -hDLGS .BS 1 +hRADIO1 .BS 1 + +hDLGSAVE .BS 1 ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -53,11 +57,11 @@ L.TBOX1.Status .DA TBOX1.Status L.LBOX1.List .DA LBOX1.List L.LABEL.Label .DA LABEL.Label L.TLINE.Default .DA TLINE.Default -L.RADIO1.List .DA RADIO1.List L.CBOX1.Label .DA CBOX1.Label +L.RADIO1.List .DA RADIO1.List L.BUTQ.Label .DA BUTQ.Label L.BUTS.Label .DA BUTS.Label -L.DLGS.Title .DA DLGS.Title +L.DLGSAVE.Title .DA DLGSAVE.Title L.BUT.OK .DA BUT.OK L.BUT.Cancel .DA BUT.Cancel .DA 0 @@ -73,30 +77,30 @@ CS.INIT >LDYA L.LIBTUI CS.INIT.RTS rts *-------------------------------------- CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init - bcs CS.RUN.RTS + bcs CS.INIT.RTS sta hCTX jsr CS.SCRN.Init - bcs CS.RUN.RTS + bcs CS.INIT.RTS jsr CS.TBOX1.Init - bcs CS.RUN.RTS + bcs CS.INIT.RTS jsr CS.LBOX1.Init - bcs CS.RUN.RTS + bcs CS.INIT.RTS - jsr CS.TLINE.Init - bcs CS.RUN.RTS + jsr CS.TLINE1.Init + bcs CS.INIT.RTS - jsr CS.RADIO.Init - bcs CS.RUN.RTS + jsr CS.CBOX1.Init + bcs CS.INIT.RTS - jsr CS.CBOX.Init - bcs CS.RUN.RTS + jsr CS.RADIO1.Init + bcs CS.INIT.RTS jsr CS.BUT.Init - bcs CS.RUN.RTS + bcs CS.INIT.RTS jsr CS.SCRN.Draw Will Call SCRN.Draw @@ -121,7 +125,25 @@ CS.RUN.LOOP lda hSCRN jsr CS.RUN.DLGSAVE bcc CS.RUN.LOOP -.2 cmp #EV.QUIT +.2 cmp #EV.CHECKBOX + bne .8 + + >LDA.G CBOX1.Var + bne .20 + + lda hRADIO1 + >LIBCALL hLIBTUI,LIBTUI.Hide + bcc CS.RUN.LOOP + + rts + +.20 lda hRADIO1 + >LIBCALL hLIBTUI,LIBTUI.Show + bcc CS.RUN.LOOP + + rts + +.8 cmp #EV.QUIT bne CS.RUN.LOOP lda hSCRN @@ -168,11 +190,11 @@ CS.TBOX1.Init >LDYAI 1024 >PUSHBI 1 Y1 >PUSHBI 44 W >PUSHBI 20 H - >PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder+S.OBJ.F.bTitle+S.OBJ.F.bStatus >LDA.G TBOX1.hBuf >SYSCALL GetMemPtr >PUSHYA >PUSHWI 1024 + >PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder+S.OBJ.F.bTitle+S.OBJ.F.bStatus+S.OBJ.F.bEdit >LIBCALL hLIBTUI,LIBTUI.NewTBox bcs .9 @@ -195,16 +217,17 @@ CS.LBOX1.Init >PUSHB hSCRN hParent >PUSHBI 1 Y1 >PUSHBI 20 W >PUSHBI 9 H - >PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder >PUSHW L.LBOX1.List >PUSHEA.G LBOX1.Var + >PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder >LIBCALL hLIBTUI,LIBTUI.NewLBox rts *-------------------------------------- -CS.TLINE.Init >PUSHB hSCRN hParent +CS.TLINE1.Init >PUSHB hSCRN hParent >PUSHBI 50 X1 >PUSHBI 11 Y1 >PUSHW L.LABEL.Label + >PUSHBI 0 >LIBCALL hLIBTUI,LIBTUI.NewLabel bcs .9 @@ -214,6 +237,7 @@ CS.TLINE.Init >PUSHB hSCRN hParent >PUSHBI 25 W >PUSHEA.G TLINE.Buf >PUSHWI 65 Len + >PUSHBI 0 >LIBCALL hLIBTUI,LIBTUI.NewTLine >PUSHEA.G TLINE.Buf @@ -222,25 +246,33 @@ CS.TLINE.Init >PUSHB hSCRN hParent .9 rts *-------------------------------------- -CS.RADIO.Init >PUSHB hSCRN hParent +CS.CBOX1.Init >PUSHB hSCRN hParent >PUSHBI 50 X1 >PUSHBI 14 Y1 >PUSHBI 0 + >PUSHBI EV.CHECKBOX + >PUSHW L.CBOX1.Label + >PUSHEA.G CBOX1.Var + >PUSHBI 0 + >LIBCALL hLIBTUI,LIBTUI.NewCBox + rts +*-------------------------------------- +CS.RADIO1.Init >PUSHB hSCRN hParent + >PUSHBI 50 X1 + >PUSHBI 16 Y1 + >PUSHBI 0 >PUSHBI 0 >PUSHW L.RADIO1.List >PUSHEA.G RADIO1.Var - >LIBCALL hLIBTUI,LIBTUI.NewRadio - rts -*-------------------------------------- -CS.CBOX.Init >PUSHB hSCRN hParent - >PUSHBI 50 X1 - >PUSHBI 18 Y1 - >PUSHBI 0 >PUSHBI 0 - >PUSHW L.CBOX1.Label - >PUSHEA.G CBOX1.Var - >LIBCALL hLIBTUI,LIBTUI.NewCBox - rts + >LIBCALL hLIBTUI,LIBTUI.NewRadio + bcs .9 + + sta hRADIO1 + + >LIBCALL hLIBTUI,LIBTUI.Hide + +.9 rts *-------------------------------------- CS.BUT.Init >PUSHB hSCRN hParent >PUSHBI 50 X1 @@ -248,6 +280,7 @@ CS.BUT.Init >PUSHB hSCRN hParent >PUSHBI 19 Ctrl-S >PUSHBI EV.SAVE >PUSHW L.BUTS.Label + >PUSHBI 0 >LIBCALL hLIBTUI,LIBTUI.NewBut bcs .9 @@ -257,6 +290,7 @@ CS.BUT.Init >PUSHB hSCRN hParent >PUSHBI 17 Ctrl-Q >PUSHBI EV.QUIT >PUSHW L.BUTQ.Label + >PUSHBI 0 >LIBCALL hLIBTUI,LIBTUI.NewBut .9 CS.BUT.Init.RTS rts @@ -264,45 +298,49 @@ CS.BUT.Init.RTS rts CS.RUN.DLGSAVE >PUSHB hCTX hParent >PUSHBI 70 W >PUSHBI 11 H - >PUSHW L.DLGS.Title + >PUSHW L.DLGSAVE.Title + >PUSHBI 0 >LIBCALL hLIBTUI,LIBTUI.NewDlg bcs CS.BUT.Init.RTS - sta hDLGS + sta hDLGSAVE - >PUSHB hDLGS hParent + >PUSHA +* >PUSHB hDLGSAVE hParent >PUSHBI 50 X1 >PUSHBI 7 Y1 >PUSHBI C.CR >PUSHBI EV.OK >PUSHW L.BUT.OK + >PUSHBI 0 >LIBCALL hLIBTUI,LIBTUI.NewBut bcs .9 sta ZPPtr1 - >PUSHB hDLGS hParent + >PUSHB hDLGSAVE hParent >PUSHBI 57 X1 >PUSHBI 7 Y1 >PUSHBI 3 Ctrl-C >PUSHBI EV.CANCEL >PUSHW L.BUT.Cancel + >PUSHBI 0 >LIBCALL hLIBTUI,LIBTUI.NewBut bcs .9 - lda hDLGS + lda hDLGSAVE >LIBCALL hLIBTUI,LIBTUI.Draw bcs .9 lda ZPPtr1 >LIBCALL hLIBTUI,LIBTUI.Activate -.1 lda hDLGS +.1 lda hDLGSAVE >LIBCALL hLIBTUI,LIBTUI.Exec .9 php pha - lda hDLGS + lda hDLGSAVE >LIBCALL hLIBTUI,LIBTUI.Destroy lda hSCRN @@ -392,7 +430,7 @@ CBOX1.Label .AZ "Check Me" *-------------------------------------- BUTS.Label .AZ "(^S)ave..." BUTQ.Label .AZ "(^Q)uit" -DLGS.Title .AZ "Save As..." +DLGSAVE.Title .AZ "Save As..." BUT.OK .AZ " OK " BUT.Cancel .AZ "Cancel" *-------------------------------------- @@ -400,8 +438,8 @@ BUT.Cancel .AZ "Cancel" .OR 0 DS.START SCRN.TitleBuf .BS 80 -CBOX1.Var .BS 1 TLINE.Buf .BS 65 +CBOX1.Var .BS 1 RADIO1.Var .BS 1 LBOX1.Var .BS 1 TBOX1.hBuf .BS 1 diff --git a/INC/LIBTUI.I.txt b/INC/LIBTUI.I.txt index beb8fb78..d0cb2163 100644 --- a/INC/LIBTUI.I.txt +++ b/INC/LIBTUI.I.txt @@ -20,6 +20,9 @@ LIBTUI.GetProp .EQ 34 LIBTUI.SetProp .EQ 36 LIBTUI.Activate .EQ 38 LIBTUI.Deactivate .EQ 40 +LIBTUI.FindActive .EQ 42 +LIBTUI.Show .EQ 44 +LIBTUI.Hide .EQ 46 *-------------------------------------- S.CTX.hSCRN .EQ 0 S.CTX.hClipBrd .EQ 1 @@ -58,7 +61,8 @@ S.OBJ.F.bEdit .EQ %00000001 S.OBJ.S .EQ 2 S.OBJ.S.bActive .EQ %10000000 S.OBJ.S.bDisabled .EQ %01000000 -S.OBJ.S.bHasChilds .EQ %00100000 +S.OBJ.S.bHidden .EQ %00100000 +S.OBJ.S.bHasChilds .EQ %00010000 S.OBJ.S.bCurOn .EQ %00000001 S.OBJ.hParent .EQ 3 S.OBJ.X1 .EQ 4 diff --git a/LIB/LIBTUI.S.BUT.txt b/LIB/LIBTUI.S.BUT.txt index 82e9a366..2f7e6613 100644 --- a/LIB/LIBTUI.S.BUT.txt +++ b/LIB/LIBTUI.S.BUT.txt @@ -2,11 +2,15 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* BUT.New hParent,X1,Y1,HK,EV,pLabel 7 +* BUT.New hParent,X1,Y1,HK,EV,pLabel,F 8 *-------------------------------------- BUT.New lda #S.OBJ.T.BUT jsr OBJ.Create bcs .9 + + >PULLA + ldy #S.OBJ.F + sta (ZPObjPtr),y ldy #S.BUT.pLabel jsr OBJ.PullWordY diff --git a/LIB/LIBTUI.S.CBOX.txt b/LIB/LIBTUI.S.CBOX.txt index 15bc1d8c..7af8ebe3 100644 --- a/LIB/LIBTUI.S.CBOX.txt +++ b/LIB/LIBTUI.S.CBOX.txt @@ -2,12 +2,16 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* CBOX.New hParent,X1,Y1,HK,EV,pLabel,pVar 9 +* CBOX.New hParent,X1,Y1,HK,EV,pLabel,pVar,F 10 *-------------------------------------- CBOX.New lda #S.OBJ.T.CBOX jsr OBJ.Create bcs .9 + >PULLA + ldy #S.OBJ.F + sta (ZPObjPtr),y + ldy #S.OBJ.pVar jsr OBJ.PullWordY @@ -52,7 +56,7 @@ CBOX.New lda #S.OBJ.T.CBOX * clc rts -.9 >POP 9 +.9 >POP 10 .99 rts *-------------------------------------- @@ -85,12 +89,16 @@ CBOX.Run ldy #S.BUT.HotKey >PUSHA jsr OBJ.Draw.Body inc pStack - + bcs .99 + + ldy #S.CBOX.EV + lda (ZPObjPtr),y +* clc rts .9 lda #0 sec - rts +.99 rts *-------------------------------------- CBOX.Draw ldx #'<' diff --git a/LIB/LIBTUI.S.CONT.txt b/LIB/LIBTUI.S.CONT.txt index 54e7c9fe..28cea2ba 100644 --- a/LIB/LIBTUI.S.CONT.txt +++ b/LIB/LIBTUI.S.CONT.txt @@ -114,7 +114,7 @@ CONT.Run lda (pStack) Event ldy #S.OBJ.S lda (ZPPtr2),y - and #S.OBJ.S.bDisabled + and #S.OBJ.S.bDisabled+S.OBJ.S.bHidden bne .10 ply diff --git a/LIB/LIBTUI.S.DLG.txt b/LIB/LIBTUI.S.DLG.txt index dafc6914..0914905d 100644 --- a/LIB/LIBTUI.S.DLG.txt +++ b/LIB/LIBTUI.S.DLG.txt @@ -2,12 +2,16 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* DLG.New hParent,W,H,pTitle 5 +* DLG.New hParent,W,H,pTitle,F 6 *-------------------------------------- DLG.New lda #S.OBJ.T.DLG jsr OBJ.Create bcs .9 + >PULLA + ldy #S.OBJ.F + sta (ZPObjPtr),y + ldy #S.OBJ.pTitle jsr OBJ.PullWordY @@ -48,7 +52,7 @@ DLG.New lda #S.OBJ.T.DLG * clc rts -.9 >POP 5 +.9 >POP 6 rts *-------------------------------------- MAN diff --git a/LIB/LIBTUI.S.LABEL.txt b/LIB/LIBTUI.S.LABEL.txt index abfdbaca..f2a32bcb 100644 --- a/LIB/LIBTUI.S.LABEL.txt +++ b/LIB/LIBTUI.S.LABEL.txt @@ -2,12 +2,16 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* LABEL.New hParent,X1,Y1,pLabel 5 +* LABEL.New hParent,X1,Y1,pLabel,F 6 *-------------------------------------- LABEL.New lda #S.OBJ.T.LABEL jsr OBJ.Create bcs .9 + >PULLA + ldy #S.OBJ.F + sta (ZPObjPtr),y + ldy #S.OBJ.S lda #S.OBJ.S.bDisabled sta (ZPObjPtr),y @@ -28,7 +32,7 @@ LABEL.New lda #S.OBJ.T.LABEL * clc rts -.9 >POP 5 +.9 >POP 6 .99 rts *-------------------------------------- LABEL.Draw ldy #S.LABEL.pLabel diff --git a/LIB/LIBTUI.S.LBOX.txt b/LIB/LIBTUI.S.LBOX.txt index e6eb26fc..4d6cf567 100644 --- a/LIB/LIBTUI.S.LBOX.txt +++ b/LIB/LIBTUI.S.LBOX.txt @@ -2,22 +2,22 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* LBOX.New hParent,X1,Y1,W,H,F,pList,pVar 10 +* LBOX.New hParent,X1,Y1,W,H,pList,pVar,F 10 *-------------------------------------- LBOX.New lda #S.OBJ.T.LBOX jsr OBJ.Create bcs .9 + >PULLA + ldy #S.OBJ.F + sta (ZPObjPtr),y + ldy #S.OBJ.pVar jsr OBJ.PullWordY ldy #S.OBJ.pBuf jsr OBJ.PullWordY - >PULLA - ldy #S.OBJ.F - sta (ZPObjPtr),y - jsr OBJ.PullHW jsr OBJ.PullY1X1hParent diff --git a/LIB/LIBTUI.S.OBJ.txt b/LIB/LIBTUI.S.OBJ.txt index 46d75807..1c4c35cd 100644 --- a/LIB/LIBTUI.S.OBJ.txt +++ b/LIB/LIBTUI.S.OBJ.txt @@ -219,7 +219,7 @@ OBJ.Run ldx ZPObjPtr ldy #S.OBJ.S lda (ZPObjPtr),y - and #S.OBJ.S.bDisabled + and #S.OBJ.S.bDisabled+S.OBJ.S.bHidden bne .9 ldy #1 @@ -280,7 +280,54 @@ OBJ.Run ldx ZPObjPtr *-------------------------------------- OBJ.Draw >PUSHA hObj - jsr OBJ.Draw.Top + lda (pStack) + jsr LIB.GetOBJ + + ldy #S.OBJ.S + lda (ZPObjPtr),y + and #S.OBJ.S.bHidden + beq .5 + + ldy #S.OBJ.Y1 + lda (ZPObjPtr),y + >PUSHA + +.1 jsr LB.Init + + jsr LB.SetColor + + ldy #S.OBJ.X1 + lda (ZPObjPtr),y + tax + lda (pStack) + tay + jsr LB.GotoXY + + ldy #S.OBJ.W + lda (ZPObjPtr),y + + tax + + lda #C.SPACE + +.2 jsr LB.COut + iny + dex + bne .2 + + jsr IO.LBWrite + bcs .98 + + lda (pStack) + ldy #S.OBJ.Y2 + cmp (ZPObjPtr),y + inc + sta (pStack) + bcc .1 + + bra .8 +*-------------------------------------- +.5 jsr OBJ.Draw.Top bcs .99 jsr OBJ.Draw.Body @@ -316,7 +363,7 @@ OBJ.Draw >PUSHA hObj cmp #S.OBJ bne .6 - clc +.8 clc .98 inc pStack @@ -727,6 +774,36 @@ OBJ.FindActive ldx ZPObjPtr rts *-------------------------------------- +OBJ.Show pha + + jsr LIB.GetOBJ + + jsr OBJ.CurOff + + ldy #S.OBJ.S + lda (ZPObjPtr),y + and #S.OBJ.S.bHidden^$ff + sta (ZPObjPtr),y + + pla + + jmp OBJ.Draw +*-------------------------------------- +OBJ.Hide pha + + jsr LIB.GetOBJ + + jsr OBJ.CurOff + + ldy #S.OBJ.S + lda (ZPObjPtr),y + ora #S.OBJ.S.bHidden + sta (ZPObjPtr),y + + pla + + jmp OBJ.Draw +*-------------------------------------- OBJ.CurUpdPos ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bEdit diff --git a/LIB/LIBTUI.S.RADIO.txt b/LIB/LIBTUI.S.RADIO.txt index a0008498..11db7651 100644 --- a/LIB/LIBTUI.S.RADIO.txt +++ b/LIB/LIBTUI.S.RADIO.txt @@ -2,12 +2,16 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* RADIO.New hParent,X1,Y1,HK,EV,pList,pVar 9 +* RADIO.New hParent,X1,Y1,HK,EV,pList,pVar,F 10 *-------------------------------------- RADIO.New lda #S.OBJ.T.RADIO jsr OBJ.Create bcs .9 + >PULLA + ldy #S.OBJ.F + sta (ZPObjPtr),y + ldy #S.OBJ.pVar jsr OBJ.PullWordY @@ -74,7 +78,7 @@ RADIO.New lda #S.OBJ.T.RADIO * clc rts -.9 >POP 9 +.9 >POP 10 rts *-------------------------------------- diff --git a/LIB/LIBTUI.S.TBOX.txt b/LIB/LIBTUI.S.TBOX.txt index e71f02b5..a2339422 100644 --- a/LIB/LIBTUI.S.TBOX.txt +++ b/LIB/LIBTUI.S.TBOX.txt @@ -2,23 +2,24 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* TBOX.New hParent,X1,Y1,W,H,F,pBuf,BufSize 10 +* TBOX.New hParent,X1,Y1,W,H,pBuf,BufSize,F 10 *-------------------------------------- TBOX.New lda #S.OBJ.T.TBOX jsr OBJ.Create bcs .9 - jsr OBJ.PullBuf - >PULLA ldy #S.OBJ.F sta (ZPObjPtr),y + jsr OBJ.PullBuf + jsr OBJ.PullHW jsr OBJ.PullY1X1hParent jsr CONT.Insert + bcs .99 lda hObj diff --git a/LIB/LIBTUI.S.TLINE.txt b/LIB/LIBTUI.S.TLINE.txt index 2e3409d2..4f00b332 100644 --- a/LIB/LIBTUI.S.TLINE.txt +++ b/LIB/LIBTUI.S.TLINE.txt @@ -2,18 +2,19 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* TLINE.New hParent,X1,Y1,W,pBuf,MaxLen 8 +* TLINE.New hParent,X1,Y1,W,pBuf,MaxLen,F 8 *-------------------------------------- TLINE.New lda #S.OBJ.T.TLINE jsr OBJ.Create bcs .9 - jsr OBJ.PullBuf - + >PULLA ldy #S.OBJ.F - lda #S.OBJ.F.bHScroll+S.OBJ.F.bEdit + ora #S.OBJ.F.bHScroll+S.OBJ.F.bEdit sta (ZPObjPtr),y + jsr OBJ.PullBuf + >PULLA ldy #S.OBJ.W sta (ZPObjPtr),y @@ -34,7 +35,7 @@ TLINE.New lda #S.OBJ.T.TLINE * clc rts -.9 >POP 7 +.9 >POP 8 .99 rts *-------------------------------------- diff --git a/LIB/LIBTUI.S.txt b/LIB/LIBTUI.S.txt index 6329ea06..0431853d 100644 --- a/LIB/LIBTUI.S.txt +++ b/LIB/LIBTUI.S.txt @@ -70,6 +70,9 @@ CS.START cld .DA LIB.SetProp .DA OBJ.Activate .DA OBJ.Deactivate + .DA OBJ.FindActive + .DA OBJ.Show + .DA OBJ.Hide *-------------------------------------- J.ObjDestroy .DA OBJ.Destroy .DA OBJ.Destroy