From 314ee8b4765a864412d5a74874455a6a1cd9e48f Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sun, 15 Oct 2023 21:05:54 -0400 Subject: [PATCH] speed up embedding, download dialog --- asm.jrt | 3 ++- assemble.com | Bin 12989 -> 13032 bytes assemble.jrt | 4 +-- dialer.com | Bin 21830 -> 35011 bytes dialer.jrt | 54 ++++++++++++++++++++++++++++++++++++---- dialtest.com | Bin 0 -> 23577 bytes embed.jrt | 8 +++--- file.jrt | 16 ++++++++++-- jort.com | Bin 4879 -> 4901 bytes rick.jrt | 68 ++++++++++++++++++++------------------------------- tinyjort.com | Bin 4880 -> 4921 bytes zipoff.com | Bin 20400 -> 20509 bytes zipoff.jrt | 12 +++++---- zipstub.seg | Bin 4601 -> 4615 bytes 14 files changed, 104 insertions(+), 61 deletions(-) create mode 100755 dialtest.com diff --git a/asm.jrt b/asm.jrt index 8790877..21013b9 100755 --- a/asm.jrt +++ b/asm.jrt @@ -86,7 +86,8 @@ array patchtable 10 2 cells * allot : L! [ ' ' , ] 2 cells + target swap ! ; array anonlabels 10 cells allot -: <@ ( labelid -- ) cells anonlabels + @ @+ ; +: L<@ ( labelid -- addr ) cells anonlabels + @ ; +: <@ ( labelid -- ) L<@ @+ ; : :> ( labelid -- ) cells anonlabels + target swap ! ; : memreg create , does> @ oparg-base ! oparg-complete! ; diff --git a/assemble.com b/assemble.com index a2a8abf53a75e2c5c77fc98f40b898f847e8fef8..f49ac7fc06459e8a8b1d7d7b7335581b4d28c54a 100755 GIT binary patch literal 13032 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 literal 12989 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 s?Gr0~9U7kBCmJ;RuHn1$@u?Y!$aIXWB>pF diff --git a/assemble.jrt b/assemble.jrt index 1373d40..379713f 100755 --- a/assemble.jrt +++ b/assemble.jrt @@ -5,9 +5,7 @@ s" asm.jrt" loadfile :init segalloc ' comseg redefine ; : writecom ( filename -- ) - overwrite >r 0x100 - begin dup target < while dup b@t r@ fputc 1+ repeat - drop r target 0x100 - 0x100 r@ comseg farfwrite r here 0x100 - 0x100 r@ fwrite -Hil`9^NEk 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 delta 4154 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 w>t w>t w>t w>t ; : defembed ( filename desc -- ) - over [ tdict-lookup open drop , ] filebytes target embed-bytes + over T] open target swap embed-file t' embed-size t' embed-write deffile ; : deffake ( filename desc size -- ) t' noop t' rand-write deffile ; } @@ -160,8 +160,54 @@ import embed.jrt : write-file ( file -- ) dup filename overwrite >r r@ over filedata > ( st ch -- st+1 ) over b! 1+ ; +: digit>> ( st state n div -- st state n ) + /mod swap dup if ( st state n digit ) + $0 + >r > ( state n st ) + > >rot then then ; +: nsep>> ( st state n -- st state n ) + over if > >rot then ; +: n>st ( n -- st ) + numstr 0 > 1000 digit>> nsep>> 100 digit>> 10 digit>> + swap drop $0 + char>> 0 char>> drop numstr ; + +: draw-download-progress ( size progress -- ) + 12 12 textxy! dup n>st draw-text + swap 40 / / 20 12 textxy! 0xb2 draw-hrepeat ; + +: download-file ( file -- ) dup write-file + >r textstate st draw-text + 20 12 textxy! 40 0xb0 draw-hrepeat + 2dup draw-download-progress + 30 delay + begin 15 delay 256 rand 0x1f & + + 2dup > while + 2dup draw-download-progress repeat + drop dup draw-download-progress 60 delay restore textstate! ; + dbg" BBSes" +: tolower ( ch -- ch ) + dup [ key A lit ] >= over [ key Z lit ] <= and + if [ key a key A - lit ] + then ; + +: readch ( -- ch ) + begin sleep-key key>ch dup printable? not while drop repeat ; + +: inputch readch tolower dup emit nl ; + : xmit-screen ( rle -- ) rle-decode textpen @ (( each i 8 >> textpen ! pass next )) xmit-iter @@ -171,8 +217,6 @@ dbg" BBSes" import rick.jrt dbg" menu" -: snapshot 1 0 pagecopy ; : restore 0 1 pagecopy ; - var menu-onclose : close-menu ( cp -- ) menu-onclose ! restore suspend ; : menu-options (( @@ -307,5 +351,5 @@ var curr-logobit ' go ' main redefine dbg" saving" +{ here s", dialer.com" s" dialtest.com" writeenv } -{ s" dialer.com" writecom } diff --git a/dialtest.com b/dialtest.com new file mode 100755 index 0000000000000000000000000000000000000000..3609993dfeaa5709a5bf9852ae47ef5b14d9d695 GIT binary patch literal 23577 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

#3}hE?){cc{5$gZ(_tFT zl^qjv;if!2w6#R=RTIxQS%tgA)F)15uAg{KF3v*W$^uSb2WmXI_+sTt-Qrrjo?a8p z{MdSPZc@9kHvw0{YwYmEf5H?_pb!6P*q^0a8?nam(RYhf*P#s4S~wgMCLUmxXHGyh z(w?o8(7;q?W~`y_EFf$8#2_%c%l59pIe^EH2Rm*2yMsWc)RwP|V2H8NZMwspk6t}< zt!4vNMYo67;WJlHT8nrI0B>EYx3{l$ucfW!Zkj8#TC3iEJ=nN$gdw)vYhGH5O-Eta z`fI;$h`UCIxc2PYFkdfy{D(B%e(eR6Tx3Y!1HxYGjuONg zKF)z19y;snlbT>egzV!53lQ=Be5p*q>JHV<1jOL=Ss}S zVO%a<%R7mWx}!2svJU%kzD{3wDQg;7xeljvz<_KWXj@00XzKK};uA+eEEworhkY)A z&{nOgYw17`_9ImABO>IyU@aTiwhj~YC|ogcNwaps1soVw54?$@@Twp#U_1kxP&q9< n_|j}p<*I;uf8f@22-147X-F3929Gq!jI%#DNO7(BTqgTJ3?O&q literal 0 HcmV?d00001 diff --git a/embed.jrt b/embed.jrt index 6e40052..0e5152b 100755 --- a/embed.jrt +++ b/embed.jrt @@ -35,12 +35,14 @@ var rle-run : encode-rle ( call with iterator that returns bytes ) >rle-start each i iterate if i 8 << | >rle else drop then next >rle-done ; : embed-rle ( host-filename -- ) open filebytes encode-rle ; -: embed-bytes ( -- ) target 0 w>t each i >t next target swap !t ; -: embed ( host-filename -- ) open filebytes embed-bytes ; +: embed-file ( fp -- ) + >r target 0 w>t 0xffff target r@ T] fread arg (( dup @ swap cell + +arg ( pend p ) diff --git a/file.jrt b/file.jrt index c5299e0..68ca5b0 100755 --- a/file.jrt +++ b/file.jrt @@ -55,24 +55,36 @@ NEXT 0 VAR, fcount -:ASM fread +:ASM farfread + POP DS ( seg ) +0 :> MOV AH 0x3f # POP BX ( fp ) POP DX ( buffer ) POP CX ( length ) INT 0x21 # + MOV BX CS + MOV DS BX MOV t& fcount @+ AX ( save number of bytes read ) NEXT -:ASM fwrite +DEF fread 0 L<@ w>t + +:ASM farfwrite + POP DS ( seg ) +0 :> MOV AH 0x40 # POP BX ( fp ) POP DX ( buffer ) POP CX ( length ) INT 0x21 # + MOV BX CS + MOV DS BX MOV t& fcount @+ AX ( save number of bytes written ) NEXT +DEF fwrite 0 L<@ w>t + -1 CONST EOF 0 VAR, fbuffer :t fgetc ( fp -- c ) diff --git a/jort.com b/jort.com index 84d3e4718f9f7ab0b9badeda533ed1bf19e42ced..c9e859ed469c25b7cfd855f0482d5f25f3ddb440 100755 GIT binary patch delta 2397 zcmYLKeQZf4J~ab(6KPuCiXM&Vmp@o zyqL+I6N)NF%IK6=wbP=0NE>Vd(he4_LZcyB=mSh?JE=%PY-nvGq%>kv5mOZL;hp=O z!XNMH-rqU*-1G4}=e}CEzi#=gU}X7`z*oU9jH||xz-}!cJQc_rzcDsz$AagLB}T1& z^~mxOj;#301b31YM2L2#qkZX^Wx}v<@7ND_bo}&O%^)8UhEDIB9vz%2-?vBLVNt^t z-r_va`pgE{M#_H_d=Tx*Mx$mLRuF&_0teAurWJ-!GD6M@*Jw&OD;(gugaNMG+fM%{ zbN9I9KC(GA4Mz1!u@| z(GV$w(|A{iO3)~VsEU7w{N6{QEAGO}TwsRxg0(wkB2=WqT#>fZJz}Fc?n%&;*pj0; z>X64o`Sz_n=5F|%I3}E{Su@k_URzH^XnXoc+cs=z>uANu3kO6FVo3}g>ZU}dTV^Almj`b(oZ0MV>&t8X>&g;Xbbfm9R!4gU?7v>0 zJ?-Mz^TnlQY4*Kx|Mgrp`0@hDs^UaeWcTSX``dE=Tuc6F|CH3U^rn=5yMOM1{2wYi z``1!+9mqcB=ei8$`II~~y>H^gQF*&K@e=QF_4Ct@KQ}JG-~MEmr0?8+RQ`$U&oP<6 zDlEc>a#GxZ1PN0a`nr+tnN(-kY=(#IDtV=}Mnr1$#+u=I`w97;jY|{``g+rmhw$Jq zrfdOA@qofuTvXWV68)Jng}cK_jt-N9J_o-ADM4RX9P&%W=bpXIk2Peo{cpKuorx5& z5~+G-w8VqzkiRNkR~3N}-K+dvVc<$tbiru6b5{l>&-xB|kfL_8a@WIK)Qau6nMBEx z>H%cYD-t7b#7y5F#2zeBd5Qby>9!5mf zICnT$u3i(OHrD%=-vhtsWZC{mEh09IACgP+Ksdz;%y!36Cyq0WSqst1xmUFUD_0_g z{mB@H9r%WJM3cV3klhIF*Z%2OaW-H*Q)$z36-UXmpK#S$x0f;Rmez>1okahpHSLb( zViS*&YOS3v(?3J`6`vQH%`|g0iDR<4fManzHo_Lg0}P%a59%LcjG5GfnG9^!w^q4* z)2K_3O-9UgG~V0S3^9G+29RGV$AOgBZuGh;<+V>$7Okio?l!|cnEr4NUbIVZr|;^I z(S!PJ6E%=@uid^4mCfAk_(#b}KbubH^sms_9F^sEdO@$!9nyjy)#W?Ex#Vs@5-{G8 zzzN;f6ZF42W8S~)ueB=jXIs!~mpA#n#OiiCgpr*Up87e`W$ucxt|{>jiQ7->-y+Z2 z-TL>*-S(UMJ^F$aqW41%Gy6%vAzZ*N=}QW4YCg!vlJQuQ5%38VG;5SJ<#96`V2p9d zLV%L|9l~%yhwRlokf~)PU}GahYvH{25{`-U-cdBaEqKtEppC(A2FL0kC7D`OW)-u7 zvw=r~%t(kn5-cpkanKbY=AbtjOImkg11M$?5F~F7hA>%SvX-;DB5Wz855%!>z zG3Osfk+LD#>KWh?^aFItA@^!tNOWSoXUG+Oi{XQC-0V!^NSYya^spg-6-(~^d2gEC i^1gA&_>Zvy!x$$a|8@@aeV-!D2l+bR2LLx*s{bEq+vYL= delta 2400 zcmYjS3v3kE6@Bl`&g^`4c4l|B0TDphGKP@Y;C?7|zz%9mKoQM0q6uIn)ZU%7r`})p zQ!lOQ+ElIVrcH=PRoa>qC80@Vydeby`4HpEXi`=ps-n1Z+J+=_i!cT$Y6(u2DDJ(p zCS;{qy?5??_ubFA_x-W{iTb*k{|58IF9K7+^TvC|!9Y~&3LXn|89y;LYKMap25+eP zdw;4M;i-0ffXq3^ zagMKQ{~Ba>i#`&u7mL1PKsv#8pRaK*JtTUFnXq!CLN)1gk&#FS?g%lN)JY+x!oNeG z^D@#Ici|N-P!T*Nw>ND9G{}beK^A5SsZJW_60BV+umW@FYDpoHR5F{2n+-kYUh;G4 zgm}JYT_s!^vY!(}!jlqDtfW1zthYZ9!^LOaZ90eHz9h9uUINj(2TOE=Jiu2k`M!+n zac+ZriFatDEP#oa6*t`+WhIGZb5Sd~aBQoLemy2Tw7?EYW7059i^C92|xuRUr9a@gX&{K3rX3_xUDa_mr=|hUuu+fv+Mb*nrQWrhQ7; zL^s+WD>Xe~;6W~tZa_O_VHTv%_&ly<075L~EBO#KRLKQn@s6%6NFMYa;ed0h=%UGv z1X44^7}?_rT2!wqh?_~k*Q?J1dwysS_zd-awag;w5pEogQ~Md;a`v%e|JiqYG36@@ zW%d^LA@`ZEUcJPBCfu+7UL9luu)yW=rcAyF%mYlx>(J^3{GrXLH`zNhKjwx)^yyfpW&-LCE~e#7t3A-_Nt zlq&R~|5aHbTlQ?*zP;_Y78BXq4U! zNC?8Qy(<9u1k7T~=UlyJKy9e=jGrSv>cF9LN*x4j7(R!7N8?B&jaA0oVbF=g3_@!m zRz3G)t%wsOk%mr0WZGIxfKM=n-X0L#YTQz)kpQ8 z>IwFDy}*_@^e;N2R?JOl7*bjms)--5m+7@FEBzjt>vp>VX^thort-AY?6R;!%7Q~5 zhCQ@B3|FkmmrZQ4_vv46^agmEPv)%ZyMS`6Z1xOM?(cejAs7S7utr^-g!~&|*-mDpk{R!TZbLT6h!I1b7lP@vTOZUxYwH ztR52L(5`?;GA76{;;W5*6*3b|eMyMqJZ%gz^tlbZPOulj zDTm6Mha@_HKovTzw-{a$iJKism~ItX&z>^GwIpXH_x>Q2!CRg+&Kd6-D9k UPxQzCIwaJ4PZRnEA#P*+ANtAB)c^nh diff --git a/rick.jrt b/rick.jrt index 35eb61e..57ec037 100755 --- a/rick.jrt +++ b/rick.jrt @@ -1,76 +1,60 @@ +dbg" Rick's Clubhouse BBS" array rick-welcome-rle { s" rickclub.bin" open filebytes 18 lines-of encode-rle } array rick-menu-rle { s" rickmenu.bin" open filebytes 7 lines-of encode-rle } +dbg" login" : login l" To login as a guest, leave your name blank." begin x" Enter your name: " readline nl dup b@ while x" Sorry, I don't recognize " xmit l" !" nl repeat nl + cyan fg! l" Welcome, guest! We hope you decide to apply for a full membership." l" Guest accounts have limited access." l" If you have any questions, feel free to page the sysop - I'll be happy" l" to chat with you if I'm around!" l" -- Rick" nl ; -: tolower ( ch -- ch ) - dup [ key A lit ] >= over [ key Z lit ] <= and - if [ key a key A - lit ] + then ; -: readch ( -- ch ) - begin sleep-key key>ch dup printable? not while drop repeat ; - deferred rick-menu noop : page-rick - l" Paging Sysop........" - 500 delay - l" Sorry, guess he's not home!" + x" Paging Sysop..." + 5 times each 100 delay [ key . lit ] emit next nl + l" Sorry, guess they're not home!" ' rick-menu ; -dbg" swine.com" s" swine.com" +dbg" files" +s" swine.com" s" Swine Meeper - A fun freeware puzzler. Find all the truffles!" defembed swine.com -dbg" dirtrect.com" s" dirtrect.com" -s" Dirty Rectangles - A simple textmode graphics demo" +s" dirtrect.com" +s" A simple textmode graphics demo advertising the game development collective\called Dirty Rectangles." defembed dirtrect.com -dbg" kpshrink4.kps" s" kpshrink4.kps" +s" assemble.com" +s" I think this is an 8086 assembler, but I don't have any documentation for\it and it doesn't use a standard syntax. Some kind of Forth system?" +defembed assemble.com + +( +s" kpshrink4.kps" s" KP Shrinker 4.0 - Compressor and decompressor for KPS files\Requires an earlier version of PK Shrinker to extract." 59943 deffake kpshrink4.kps -dbg" mazecr3d.kps" s" mazecr3d.kps" +s" mazecr3d.kps" s" Maze Crazy 3D - Explore a fascinating maze filled with twists and turns\in 3 incredible dimensions! Includes instructions for building a PC adapter\for the Virtua Glove." 48371 deffake mazecr3d.kps +) : rick-filelist (( - kpshrink4.kps yield - dirtrect.com yield - mazecr3d.kps yield swine.com yield + dirtrect.com yield + assemble.com yield )) ; -: xmit-desc ( st -- ) - chars (( each i [ key \ lit ] = if nl else pass then next )) - xmit-iter ; - -array numstr 7 allot -key 0 const $0 -: char>> ( st ch -- st+1 ) over b! 1+ ; -: digit>> ( st state n div -- st state n ) - /mod swap dup if ( st state n digit ) - $0 + >r > ( state n st ) - > >rot then then ; -: nsep>> ( st state n -- st state n ) - over if > >rot then ; -: n>st ( n -- st ) - numstr 0 > 1000 digit>> nsep>> 100 digit>> 10 digit>> - swap drop $0 + char>> 0 char>> drop numstr ; - : list-files 1 each blue bg! yellow fg! x" [" dup .digit x" ]" lcyan fg! black bg! sp emit i filename xmit @@ -78,20 +62,20 @@ key 0 const $0 lgray fg! nl i filedesc xmit-desc nl nl 1+ next drop ; -: inputch readch tolower dup emit nl ; - -: download-file ( file -- ) write-file ; ( todo: more elaborate ) : select-file x" Type the number of a file, or Q to return to the menu: " inputch dup [ key q lit ] = if drop ' rick-menu return then [ key 1 lit ] - dup 0 >= over rick-filelist count < and if - rick-filelist nth + rick-filelist nth lblue fg! x" Downloading " dup filename xmit l" ..." - download-file l" Done!" ' rick-menu return then - drop lred fg! l" Sorry, that is not a valid selection." ' select-file ; + download-file l" Done!" else + drop lred fg! l" Sorry, that is not a valid selection." then + ' select-file ; : rick-files nl rick-filelist list-files ' select-file ; +dbg" menu" + :noname ( -- cp ) nl rick-menu-rle xmit-screen nl 0 begin diff --git a/tinyjort.com b/tinyjort.com index ff06f738f2c5fcfa6d49d6a112d6d55e33d2bf4c..7e84c53c2057710bc8d53e1ca5a7d4c5e20af872 100755 GIT binary patch delta 2461 zcmZWqeQZ$KN@P@Z1m=ie9p-3CQ$XW*V)+2weoj`ACmx zg-{6}!&kUZ$YJgZcbw_w2AN)OC*k=Vd5?4Ob?QMX>*C7f3OCPG(GKVy=Oh$LCNjyG zS#QRp7Ha0lNY_-Y>-ss)i(Fv^e}iAm6BJ6rRRJQP4n9C+_|H4|6(2#}F<1UDNE}>Y zy~x_1GC@=%BTSKWk|TTvKkkW>pMys^;^3!w@&2uS=6>`BKgLbfHdZ>_YwHP*+P8gc z$CmBwU2PC~{`WkCq6rAyjT`;X&wiIn=3#%qMWig6nZNVBybl4oo|-P5nkJfNo6Z+mLo80d{)-uI)_VB*V}&~#@~wrNjRV4bgC^pc);aUq z!qB~@^H00EyZ%XGlOZCD%+Czn>*}lu3wP?X=UjPqy13jB=iXc>+{tD2pZy1CWqu;d z)B993cXXj}vvuID!lcl=ToVU=SGc)m;MK*QJuKAJ1w985qI(v zFR%_%KR@&BXU948&KbKbeCbg~e9m=fO2nuEs&Gj>z$bwnAtIvwUZ8&_6%3gz=n1<< z{Ial_2c{*XEhue&M_jhGL1IvUG9CU392|k1$zqXgk|?KNlIZF(NlBBin~-v31fTRd z@X2DFoRl0qEcx8CRl3-xxJGQ+SH;>*`+*}?JXKGPmf3*p;Iia(p&$s5qtf3bD%>dZ zt}qe{_GCcwecz}D7;Cpk4}HByuG)^73DE43j{}Wf6eyR&W-1v?SWrRAdP^>ogYu|n z98RvW4@%3)a>;&O`a=GwRA$TMFP>|jyX+qM26LCSYt3dWCvBmm*qzIKq*DvUcTEEm@dQXA^6D;~5jNV9!aE`n?X zJ_q-MG?bzRrn@P>2gP8dQELHGJ@<-|r{#*Lpg}3apan;jvx@MU4A>2#)5^d6G7JZ( zXDV%4F0h1e`7yIr>Ge|P>FNfk?KJpzOHm#m7rVHG*D9T4o%$i@Z~MHc#Y|II55UxH z$-|J`360Prc@Py>aEp2gV$7u0W-`cBpQ&;Crb87_HW4<{kyx_71-+mS-bMJQ(iwyo z)^GK?kcIW%tuA%}Hq>i|`XK$GKDg*7YA5-l`b{#f-ZxQ;4!GCGb^zGS-H*S7XZ&?F6a-3BC}yj!AOR9{o$#G_H>ePn;6)ZjnaoVxOn zZGJDddfg78WT%C%@iVyF?1|E@DYFhP*xS^lIAZsz>u{s}8+Dl~ivjW|%0XtYYYtwj z*=6MXo3>(2cX!l5ZpWfn@=^$7zfKb!2=Hnvs8ERQPqPoD=7)+*a(o7 zXxe)j#>BL@1m>gqNnf0F=${RaC&55wC4gzgiu$M8Q#v&gAW!M}bubS0X&A2tb(=f` zJw`#t_0y24MxAz0FdRvNlFs-x&k=YAutwKA-L->H=v);L9vczv&#rZ)%3s1hL4if9DLX;^&-E2x@As~fd4p>#B5W!x@a zp);tN3gOht#voH>Up8(q)#hAcuqX^;uBz+j3S{!vduHd#K~X5DF;8Mcu_nE z^{!y7^%y=BikZO#jHC*#BNGOPtY~8YkCSP7%LU_Og9KJV7~@L<{+$d`hu;I553zN= LKOl71rTTvXTkY`= delta 2492 zcmY*b4Qv$06`q;B{k_}Uz1=IVD5coNhS1o-O-qR5pPKvt)1_^dGpPC-+Oy+)bFmZoB34Bb5Dh)v@`mL`o2(1>Cujadi0;@Ey@9HLT7bZ z{ZRjX-HR+%k4~_!VVgzqj1h^UjBu=d`?jrTYKFO(P#T_`UlA8L6z|WNIRiZ>9J~Mj zjlW?T)bZW*=zDm6r@*6lcRn6BGN=wCG%7&M9wQe;CA=3O7p{=Ba9lXZb_+vnudkE* zTPToM1sA_b{p@t!b1akN!W>(5e+G>A2>}#MC9|o7(O_6+4u!;HWZRhP6V#pX;AI|A;e05!BW(awBqMB*bP`KkzEm7%EV5lJ zkOFb>O3{Do)IMVe`ngjQmf}6mpM_oa%OZ=+WI9JL`8%;)fY;%36|GLscWl+DG=5QF>$SApJz9Cjx=@W1Od^g3vnzslJ5DN^fnj^#0JMkjzN@M1-p`j&;u-ol6k8e zYV?^jJoke~-{CF*-ZatlLDT6XcTp-%jy*Lke2`oA@!f;h?zPtq&aNJi<{B?ZczWH; zNAtt>ji%ENd)fc^%3#|?3FXM#^ze;somFt~T0{O_56@2(mtK@+4$lu>E9AAG{TJtD zaUw6$^HenR>-oXibpuBRC#B}47o>sxgR`p!4%}Sr0W(GtilGaPx&l@IW+k37|7u$n zQh&t%i|J=4PQB#cB2GNXxopGS^n;I%3+OG!`BeJa9WVJG^C%whW7G(BdELKNTn}Q1 z5iIx{jNnn;g{LA}WGLWb!}*iH6}LEIpvLY5q2#P|1C3MWX2JT~fX|Bz zK$xTgr2qwWS@ghoBGQuu%Om_D1{5d@9-53;RHv(q12D z$^@Q!ppW`w4uqbma-|xk9oI=}f>&jW=t0_QyJWvdts#+0_2tv(9;Zuw-2PV3#lt}k zEr1ogFZc#ra(&mvO`AF%*tl+U2Wr6xcS|BNEz5|R5tvRTOc_#UlR=%W@;VAZ>a#g& zrZb5ISs+w(z7iY);u#-C--oSx@s%LG$Uh~Fx7z@WEC90%M$NE3As@mHuPQEHtYCZ} zAYq{I@XG-C48qbWMN@l1ZU)o=S{*J<+Xqt+Gt`2}t0>&DR z7WOjk;vXwEt*4cS&h|=D!8?_GigXi$E`WC4t-KSIVX8pE(-|YTP`k+>W{J}4qXL~# z?uFux0l!H_x$U{o{v}M5PU2Tjf&DV?L+wU}Qr!xZvwaOr%DbRn+5!xsa0M??UsoV? z>91$As72kp$ZN0Vs)X{%n30JmQvK~{vooM9u~!2a?KPr(kmqP0M0`Z;Brm9~li~nu#H43-xS;B{dbbkFoodQw?a#iXiZ>v~!@tyEoR{Xaw;i-HH6r1Ylk~*sX zRJF)I)B;)T;&)Yo&A6A+PDp8)t0sQ0)1=n6)dhVx*XuP8)io{oWtqj@MvqAws?53g zF<8TtfMHFm^7#<0&K~ufHXmYfKAAJCUlnSnmHaD*@k-cHk;3E-RDk@y8FKL_Di5R+ zX3`k&qP2dGP*LI0K-CDgyTN;vLU1#6d_P3R=Hg0-;DOs(`viPaw#uMvEfo-*Okq-s zrhI2%5>5F^aOnNoC~uMF+RfRtSR*)F3(mCKUE2GhT8&15ZJJ+p@um>QE5N!$J`C+h zeV){IL-KizHeVzbPlJ(uS2`FAK4sIYCAAE(TfBvfZB3|pRg-m=e_Fc>zC5c!EQ%TQ zcL0_CIk-uf)WgMH+~drL7TIrUFpiA4nKW}|ie{b8Jlc$-GC_@W2sW!_(!qoY0-^-H z#}r8)GYq#|ts(lqWHd6+0TE9NTmbrfYJX>w>OK|xZ%+gy%D$0|3kx-r;z|A^)?SfoDt Smy-w&bM^cm5xVYm)c*h>2lMv; diff --git a/zipoff.com b/zipoff.com index 32c449bd51c365025487c4c00b58b66175dfc663..223dda0b9d7e788f4acb91b4aad552fa50cafa08 100755 GIT binary patch literal 20509 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 literal 20400 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 diff --git a/zipoff.jrt b/zipoff.jrt index 1021ab9..b51a545 100755 --- a/zipoff.jrt +++ b/zipoff.jrt @@ -39,6 +39,7 @@ array $DOFAR asm-com : tdict-lookup word tdict dict-lookup ; +: T] tdict-lookup not if err return then state if , then ; immediate : te tdict-lookup interpretword ; immediate : tlookup ( -- tcp ) tdict-lookup not if dup err then cell + @ ; : t' tlookup interpretnumber ; immediate @@ -144,20 +145,21 @@ dbg" CREATE" var comfilename -: readcom ( filename ) open 0x100 target! - begin dup fgetc dup EOF != while >t repeat drop close ; +: readcom ( filename ) open >r + 0x100 0xffff over r@ comseg farfread + fcount @ + target! =l0vr6XSW%PoVXgRpu!Imo3?-D(q^&kht;N<>8m$qo=gjV=MSskl zx!?KbJC8Xt_f{WXGw>8IEweiy10AsXc#uEteY5<;)|P1V_+v-Mx-O)=uZYi6!|s#K z;$2aGqVE5O_rzv!E5YN5Lkv2F!S;(zaf-hzGW<3hg3rVV91#hK!#rBA@jT~H`is(s zE6$6Spu17Y&x)2vFjb<~zY9anf2FUNZr$>%7P&sL1QyibiiRf4z=0@ zoE1Nd2Ap?jGkg~g@|J-nEddA8Z;92f?$9#)tN=F5YqcOBfy1UXX$&ew`_R-6;vTCJAUf?6Ebv2)sQ>5JlN=X()G)gEA;6q^A0yTd~`NcXrF zU}1Jc3oBI%HDA(cJ;PTmNwN{eolxH}Td9XwgYtA!^uSdupeNuN&~f++qfzA)U?1ph zsB(uN)EzzSD0d0?M2}2f4tDx=fZ<|Azbat<2e2_+k+yFSrjV-&dXXSMD9E3OZtD?6 z+r3-SipR1{66^;B`+?x4)EVVzQ-27aOIPWBr(Yk%$m0-&llpXF)vx9lm+bhj_OhMAH~*7fLD^saoJmNk_Bl{ps_{UEj%fW|+tHNoLNz6TlHCe#?`-~9`C%!>m11zvpiV2M;+0-WJ5!4B6Eb=nG@sOo#usUM0qLWN9dvdK8*!F9FZ{qDO!1`oRs(FgLx^D1)(d zv#|mC(p|WyX zJz7Sw=ZgAyTN74>tVsvWS$JEKVhG*E?IccX5^}JC;;@%xp;NiID=Eml$X*s=4x<)} zL%T`eA^6m6H$PHqFD7;Y_e}Y)80Snn;W4w<#F|c;RI@W?H`eThGbWX6of5&U)dtU? zyl3u{$M|m3lY?JTE^ohTT*7s!wf;iaaLeSC$t!E!Hnz6#K31eH^F=3Q`7Mfs9+r?* zVujfZ4>P(DGyEn#B@I>xapF|M9#19IdSJ;i&)<#Jo!*bFy6O~upD6LXUoucJR}op5 zh%8jQ)qPgZ8VJs9kIdB_xja{=9tAuGE5nnFvUDw#B8S`1;kMaUozJx@w_*GAr446n zPs^WwG%DbAd$x7WKLu+XS_2GNjZK$;+w%}+Nqk6(kH>y{FB`!QeN6>04>dNo^Xt>4 zHFgZRU1av#Mb<`RP>$Pl0n@0LgKyK{Su58-872!JNKuu=swL#aX DObjm> delta 1838 zcmZ8hZEO@p7`}HFT01+lx4TBth&`&MP>q~b=#hej9!>v94jVtpam~eW2?1&l6I368w^#y#>Lldo4>XK(NG&K^ za0qW1XjPN2-#$!hUJa=kB}ajbDM2-)48x$hO-+#;^dcjHyF4q9Ex6vMJcgWniSwD{ z+K+P5= z)&-?sb<>1BN3|8f`MC2J!|wh$=UgE_R4T+NHZB z^t0&Hbf_o50LHwEepr1=Ev$4ZIL=;nEeALQ62 zxQ;^(KIUCKCebkIMf?mGwaURco>3Y|65Kw^!VJf5vtWc5lnEvTF7pu8Jli#vg<35E6F67lEcUzB`2Sd~Xl>;p{IJ$ft})MUd08FOgjlDf zWfVc&kBCRhK}wtFg4@bdn0p*+vV{5fX?YAN2e#x2`y$pxD4j&5ICN>Eue@*<*&-@t zSz0o_N5+7K<}4F5qR^PBFmM!V2-dxzv!Z6yy`yQidFM)v7-?!BiM7EzH4jci%eMeS!m8e zha|noudzAYF2u!J2wB)b3D`}t&@EleaS@~|vYUj7MMR4wpi>v$VfaAr)ZdZoMU=mY zd-8rP#<(s{cvSDz@$klUQL__zKi2Gp6S^o_y%fQ$w_l4yN&2TkbntK2$wh9bKA?E(M)npK;C@3eC1eXPe)f zo^6&-KmyW6MoAHo<-8%YoJ7dVDB{t&VHEtB=+DM-Zh2#nE9UPs2X|zEadiNkHD`=o zW1sxb;JG@E_>bWKdUNQkaJT~kZ4@CwQuvT~kH>4~Zj#3i-DQdj6`|I=ZMf_66}4s@ZW|ucHa*sp+91DR yiVOIzS;Ul1p~dZSN*nO5td{j1hFi!P0ACfPvG8G9xk5NUK*OW~GhUF6lkhKf5H-I5