Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornComputing_199310.adf » 93_10s » 8/Huff2

8/Huff2

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornComputing_199310.adf » 93_10s
Filename: 8/Huff2
Read OK:
File size: 1698 bytes
Load address: 0000
Exec address: 0000
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
   10REM Huffman Screen Decoder
   20REM by Andrew Bennett
   30REM (c) Acorn Computing
   40:
   50DIM os% 200
   60IF PAGE<&3000 PROCreloc(&3000)
   70:
   80PROCsetup
   90PROCmakedecompact
  100END
  110:
  120DEF PROCsetup
  130zp%=&70:dest%=&1900
  140ident%=&FADE
  150:
  160osargs=&FFDA:osasci=&FFE3
  170osfind=&FFCE:osbget=&FFD7
  180osbput=&FFD4:osbyte=&FFF4
  190:
  200fn2=zp%:fn1=fn2+2
  210f2_add=fn1+2:txt=f2_add+2
  220ENDPROC
  230:
  240DEF PROCmakedecompact
  250command$="HUFFSC"
  260:
  270FOR opt%=0 TO 2 STEP 2
  280P%=dest%
  290[OPT opt%
  300.decompact
  310JSR getnames
  320BCS dc_exit
  330JSR open1
  340BCS dc_exit
  350JSR checkfile
  360BCS dc_close1
  370JSR getlengths
  380JSR maketree
  390JSR open2
  400JSR decompress
  410.dc_close1
  420JSR close1
  430.dc_exit
  440RTS
  450:
  460.checkfile
  470JSR get1
  480BCS nothuff
  490CMP #ident% MOD 256
  500BNE nothuff
  510JSR get1
  520BCS nothuff
  530CMP #ident% DIV 256
  540BNE nothuff
  550CLC
  560RTS
  570:
  580.nothuff
  590LDX #nhuf_txt MOD 256
  600LDY #nhuf_txt DIV 256
  610JMP mess
  620:
  630.nhuf_txt
  640OPT FNequs("Not a compressed file")
  650OPT FNequb(13)
  660:
  670.getlengths
  680LDX #0
  690.gl_loop1
  700JSR get1
  710STA total,X
  720INX
  730CPX #3
  740BNE gl_loop1
  750LDX #0
  760.gl_loop2
  770JSR get1
  780STA bits,X
  790INX
  800BNE gl_loop2
  810RTS
  820:
  830.maketree
  840LDY #&FF
  850LDX #0
  860STX mt_next
  870.mt_loop1
  880LDA #&FF
  890STA nodes,X
  900STA tree,X
  910LDA bits,X
  920BNE mt_skip1
  930DEY
  940.mt_skip1
  950INX
  960BNE mt_loop1
  970STY mt_objects
  980.mt_loop2
  990LDY #0
 1000STY mt_sm1
 1010LDX #1
 1020STX mt_sm2
 1030LDA bits
 1040CMP bits+1
 1050BCS mt_noswap
 1060STX mt_sm1
 1070STY mt_sm2
 1080.mt_noswap
 1090INX
 1100.mt_loop3
 1110LDY mt_sm2
 1120LDA bits,Y
 1130CMP bits,X
 1140BCS mt_next1
 1150STX mt_sm2
 1160LDY mt_sm1
 1170LDA bits,Y
 1180CMP bits,X
 1190BCS mt_next1
 1200STX mt_sm1
 1210STY mt_sm2
 1220.mt_next1
 1230INX
 1240BNE mt_loop3
 1250LDX mt_sm1
 1260DEC bits,X
 1270LDY #0
 1280JSR mt_trace
 1290LDX mt_sm2
 1300LDA #0
 1310STA bits,X
 1320LDY #1
 1330JSR mt_trace
 1340INC mt_next
 1350DEC mt_objects
 1360BNE mt_loop2
 1370RTS
 1380:
 1390.mt_trace
 1400LDA nodes,X
 1410CMP #&FF
 1420BNE mtt_loop1
 1430LDA mt_next
 1440STA nodes,X
 1450LDA #0
 1460BEQ mtt_cont
 1470.mtt_loop1
 1480TAX
 1490LDA tree,X
 1500CMP #&FF
 1510BNE mtt_loop1
 1520LDA mt_next
 1530STA tree,X
 1540LDA #1
 1550.mtt_cont
 1560CPY #1
 1570LDY mt_next
 1580BCS mtt_right
 1590STA treelt,Y
 1600TXA
 1610STA treel,Y
 1620RTS
 1630.mtt_right
 1640STA treert,Y
 1650TXA
 1660STA treer,Y
 1670RTS
 1680:
 1690.decompress
 1700LDA #1
 1710STA dcm_bits
 1720DEC root
 1730.dcm_loop1
 1740JSR dcm_dobyte
 1750JSR put2
 1760LDA total
 1770BNE dcm_nodec1
 1780LDA total+1
 1790BNE dcm_nodec2
 1800DEC total+2
 1810.dcm_nodec2
 1820DEC total+1
 1830.dcm_nodec1
 1840DEC total
 1850LDA total
 1860ORA total+1
 1870ORA total+2
 1880BNE dcm_loop1
 1890RTS
 1900:
 1910.dcm_dobyte
 1920LDY root
 1930.dcmd_loop1
 1940TYA
 1950TAX
 1960JSR dcm_dobit
 1970CMP #0
 1980BNE dcmd_right
 1990LDA treel,X
 2000TAY
 2010LDA treelt,X
 2020BNE dcmd_loop1
 2030BEQ dcmd_done
 2040.dcmd_right
 2050LDA treer,X
 2060TAY
 2070LDA treert,X
 2080BNE dcmd_loop1
 2090.dcmd_done
 2100TYA
 2110RTS
 2120:
 2130.dcm_dobit
 2140DEC dcm_bits
 2150BNE dcm_next
 2160JSR get1
 2170STA dcm_data
 2180LDA #8
 2190STA dcm_bits
 2200.dcm_next
 2210ASL dcm_data
 2220LDA #0
 2230ROL A
 2240RTS
 2250]
 2260PROCfilehandling(command$)
 2270PROCmessage
 2280[OPT opt%
 2290.codeend
 2300:
 2310.dcm_bits
 2320.mt_objects OPT FNequb(0)
 2330.dcm_data
 2340.mt_sm1 OPT FNequb(0)
 2350.mt_sm2 OPT FNequb(0)
 2360.root
 2370.mt_next OPT FNequb(0)
 2380:
 2390.total OPT FNequw(0):OPT FNequb(0)
 2400:
 2410.tree OPT FNds(256)
 2420.nodes OPT FNds(256)
 2430:
 2440.treel OPT FNds(255)
 2450.treelt OPT FNds(255)
 2460.treer OPT FNds(255)
 2470.treert OPT FNds(255)
 2480:
 2490.bits OPT FNds(256)
 2500]
 2510NEXT
 2520PROCoscli("SAVE "+command$+" "+STR$~decompact+" +"+STR$~(codeend-decompact)+" "+STR$~(decompact OR &FFFF0000)+" "+STR$~(decompact OR &FFFF0000))
 2530ENDPROC
 2540:
 2550DEF PROCfilehandling(comm$)
 2560[OPT opt%
 2570.getnames
 2580LDA #1
 2590LDY #0
 2600LDX #fn2
 2610JSR osargs
 2620LDY #0
 2630JSR skipspace
 2640CMP #13
 2650BEQ syntax
 2660CLC
 2670TYA
 2680ADC fn2
 2690STA fn1
 2700LDA fn2+1
 2710ADC #0
 2720STA fn1+1
 2730JSR findspace
 2740CMP #13
 2750BEQ gn_exit
 2760LDA #13
 2770STA (fn2),Y
 2780INY
 2790JSR skipspace
 2800CMP #13
 2810BNE syntax
 2820.gn_exit
 2830CLC
 2840RTS
 2850:
 2860.syntax
 2870LDX #syn_txt MOD 256
 2880LDY #syn_txt DIV 256
 2890JMP mess
 2900:
 2910.syn_txt
 2920OPT FNequs("Syntax: "+comm$+" <src>")
 2930OPT FNequb(13)
 2940:
 2950.ss_loop1
 2960INY
 2970.skipspace
 2980LDA (fn2),Y
 2990CMP #32
 3000BEQ ss_loop1
 3010RTS
 3020:
 3030.fs_loop1
 3040INY
 3050.findspace
 3060LDA (fn2),Y
 3070CMP #13
 3080BEQ fs_exit
 3090CMP #32
 3100BNE fs_loop1
 3110.fs_exit
 3120RTS
 3130:
 3140.open1
 3150LDA #64
 3160LDX fn1
 3170LDY fn1+1
 3180JSR osfind
 3190STA han1
 3200CMP #0
 3210BEQ cant_op1
 3220CLC
 3230RTS
 3240:
 3250.cant_op1
 3260LDX #op_txt MOD 256
 3270LDY #op_txt DIV 256
 3280JSR mess
 3290LDX fn1
 3300LDY fn1+1
 3310JMP mess
 3320:
 3330.op_txt
 3340OPT FNequs("Can't open ")
 3350OPT FNequb(0)
 3360:
 3370.close1
 3380LDA #0
 3390LDY han1
 3400JMP osfind
 3410:
 3420.get1
 3430LDY han1
 3440JMP osbget
 3450:
 3460.open2
 3470LDA #132
 3480JSR osbyte
 3490STX f2_add
 3500STY f2_add+1
 3510RTS
 3520:
 3530.put2
 3540LDY #0
 3550STA (f2_add),Y
 3560INC f2_add
 3570BNE p2_ninc1
 3580INC f2_add+1
 3590.p2_ninc1
 3600RTS
 3610:
 3620.han1 OPT FNequb(0)
 3630]
 3640ENDPROC
 3650:
 3660DEF PROCmessage
 3670[OPT opt%
 3680.mess
 3690STX txt
 3700STY txt+1
 3710LDY #0
 3720.ms_loop1
 3730LDA (txt),Y
 3740BEQ ms_exit
 3750JSR osasci
 3760INY
 3770CMP #13
 3780BNE ms_loop1
 3790.ms_exit
 3800SEC
 3810RTS
 3820:
 3830.phex
 3840PHA
 3850LSR A
 3860LSR A
 3870LSR A
 3880LSR A
 3890JSR pdig
 3900PLA
 3910AND #15
 3920.pdig
 3930CMP #10
 3940BCC pd_nn
 3950ADC #6
 3960.pd_nn
 3970ADC #48
 3980JMP osasci
 3990]
 4000ENDPROC
 4010:
 4020DEF FNds(n%)
 4030LOCAL i%
 4040FOR i%=1 TO n%
 4050[OPT opt%
 4060OPT FNequb(0)
 4070]
 4080NEXT
 4090=opt%
 4100:
 4110DEF FNequb(a%)
 4120?P%=a%:P%=P%+1
 4130=opt%
 4140:
 4150DEF FNequw(a%)
 4160!P%=a%:P%=P%+2
 4170=opt%
 4180:
 4190DEF FNequd(a%)
 4200!P%=a%:P%=P%+4
 4210=opt%
 4220:
 4230DEF FNequs(a$)
 4240$P%=a$:P%=P%+LENa$
 4250=opt%
 4260:
 4270DEF PROCoscli($os%)
 4280X%=os%:Y%=os% DIV 256
 4290CALL &FFF7
 4300ENDPROC
 4310:
 4320DEF PROCreloc(a%)
 4330PROCoscli("KEY0FOR I%="+STR$(TOP-PAGE)+" TO 0 STEP -1:I%?&"+STR$~a%+"=I%?&"+STR$~PAGE+":N.|MPAGE=&"+STR$~a%+"|MO.|MRUN|M")
 4340*FX138,0,128
 4350END

� Huffman Screen Decoder
� by Andrew Bennett
� (c) Acorn Computing
(:
2
� os% 200
<� �<&3000 �reloc(&3000)
F:
P
�setup
Z�makedecompact
d�
n:
x� �setup
�zp%=&70:dest%=&1900
�ident%=&FADE
�:
�osargs=&FFDA:osasci=&FFE3
�osfind=&FFCE:osbget=&FFD7
�osbput=&FFD4:osbyte=&FFF4
�:
�fn2=zp%:fn1=fn2+2
�f2_add=fn1+2:txt=f2_add+2
��
�:
�� �makedecompact
�command$="HUFFSC"
:
� opt%=0 � 2 � 2
P%=dest%
"
[OPT opt%
,.decompact
6JSR getnames
@BCS dc_exit
J
JSR open1
TBCS dc_exit
^JSR checkfile
hBCS dc_close1
rJSR getlengths
|JSR maketree
�
JSR open2
�JSR decompress
�.dc_close1
�JSR close1
�.dc_exit
�RTS
�:
�.checkfile
�JSR get1
�BCS nothuff
�CMP #ident% � 256
�BNE nothuff
�JSR get1
BCS nothuff
CMP #ident% � 256
BNE nothuff
&CLC
0RTS
::
D.nothuff
NLDX #nhuf_txt � 256
XLDY #nhuf_txt � 256
bJMP mess
l:
v
.nhuf_txt
�&OPT �equs("Not a compressed file")
�OPT �equb(13)
�:
�.getlengths
�
LDX #0
�
.gl_loop1
�JSR get1
�STA total,X
�INX
�
CPX #3
�BNE gl_loop1
�
LDX #0
�
.gl_loop2
JSR get1
STA bits,X
INX
 BNE gl_loop2
*RTS
4:
>
.maketree
HLDY #&FF
R
LDX #0
\STX mt_next
f
.mt_loop1
pLDA #&FF
zSTA nodes,X
�STA tree,X
�LDA bits,X
�BNE mt_skip1
�DEY
�
.mt_skip1
�INX
�BNE mt_loop1
�STY mt_objects
�
.mt_loop2
�
LDY #0
�STY mt_sm1
�
LDX #1
�STX mt_sm2
LDA bits
CMP bits+1
BCS mt_noswap
$STX mt_sm1
.STY mt_sm2
8.mt_noswap
BINX
L
.mt_loop3
VLDY mt_sm2
`LDA bits,Y
jCMP bits,X
tBCS mt_next1
~STX mt_sm2
�LDY mt_sm1
�LDA bits,Y
�CMP bits,X
�BCS mt_next1
�STX mt_sm1
�STY mt_sm2
�
.mt_next1
�INX
�BNE mt_loop3
�LDX mt_sm1
�DEC bits,X
�
LDY #0
JSR mt_trace

LDX mt_sm2

LDA #0
STA bits,X
(
LDY #1
2JSR mt_trace
<INC mt_next
FDEC mt_objects
PBNE mt_loop2
ZRTS
d:
n
.mt_trace
xLDA nodes,X
�CMP #&FF
�BNE mtt_loop1
�LDA mt_next
�STA nodes,X
�
LDA #0
�BEQ mtt_cont
�.mtt_loop1
�TAX
�LDA tree,X
�CMP #&FF
�BNE mtt_loop1
�LDA mt_next
�STA tree,X

LDA #1

.mtt_cont

CPY #1
"LDY mt_next
,BCS mtt_right
6STA treelt,Y
@TXA
JSTA treel,Y
TRTS
^.mtt_right
hSTA treert,Y
rTXA
|STA treer,Y
�RTS
�:
�.decompress
�
LDA #1
�STA dcm_bits
�DEC root
�.dcm_loop1
�JSR dcm_dobyte
�JSR put2
�
LDA total
�BNE dcm_nodec1
�LDA total+1
�BNE dcm_nodec2
DEC total+2
.dcm_nodec2
DEC total+1
&.dcm_nodec1
0
DEC total
:
LDA total
D�A total+1
N�A total+2
XBNE dcm_loop1
bRTS
l:
v.dcm_dobyte
�LDY root
�.dcmd_loop1
�TYA
�TAX
�JSR dcm_dobit
�
CMP #0
�BNE dcmd_right
�LDA treel,X
�TAY
�LDA treelt,X
�BNE dcmd_loop1
�BEQ dcmd_done
�.dcmd_right
LDA treer,X
TAY
LDA treert,X
 BNE dcmd_loop1
*.dcmd_done
4TYA
>RTS
H:
R.dcm_dobit
\DEC dcm_bits
fBNE dcm_next
pJSR get1
zSTA dcm_data
�
LDA #8
�STA dcm_bits
�
.dcm_next
�ASL dcm_data
�
LDA #0
�	ROL A
�RTS
�]
��filehandling(command$)
��message
�
[OPT opt%
�.codeend
�:
	
.dcm_bits
	.mt_objects OPT �equb(0)
	
.dcm_data
	$.mt_sm1 OPT �equb(0)
	..mt_sm2 OPT �equb(0)
	8	.root
	B.mt_next OPT �equb(0)
	L:
	V$.total OPT �equw(0):OPT �equb(0)
	`:
	j.tree OPT �ds(256)
	t.nodes OPT �ds(256)
	~:
	�.treel OPT �ds(255)
	�.treelt OPT �ds(255)
	�.treer OPT �ds(255)
	�.treert OPT �ds(255)
	�:
	�.bits OPT �ds(256)
	�]
	��
	؃�oscli("SAVE "+command$+" "+�~decompact+" +"+�~(codeend-decompact)+" "+�~(decompact � &FFFF0000)+" "+�~(decompact � &FFFF0000))
	��
	�:
	�� �filehandling(comm$)

[OPT opt%


.getnames

LDA #1

LDY #0
(LDX #fn2
2JSR osargs
<
LDY #0
FJSR skipspace
PCMP #13
ZBEQ syntax
dCLC
nTYA
xADC fn2
�STA fn1
�
LDA fn2+1
�
ADC #0
�
STA fn1+1
�JSR findspace
�CMP #13
�BEQ gn_exit
�LDA #13
�STA (fn2),Y
�INY
�JSR skipspace
�CMP #13
�BNE syntax
.gn_exit
CLC
RTS
":
,.syntax
6LDX #syn_txt � 256
@LDY #syn_txt � 256
JJMP mess
T:
^.syn_txt
h(OPT �equs("Syntax: "+comm$+" <src>")
rOPT �equb(13)
|:
�
.ss_loop1
�INY
�.skipspace
�LDA (fn2),Y
�CMP #32
�BEQ ss_loop1
�RTS
�:
�
.fs_loop1
�INY
�.findspace
�LDA (fn2),Y
�CMP #13
BEQ fs_exit
CMP #32
BNE fs_loop1
&.fs_exit
0RTS
::
D
.open1
NLDA #64
XLDX fn1
b
LDY fn1+1
lJSR osfind
vSTA han1
�
CMP #0
�BEQ cant_op1
�CLC
�RTS
�:
�
.cant_op1
�LDX #op_txt � 256
�LDY #op_txt � 256
�JSR mess
�LDX fn1
�
LDY fn1+1
�JMP mess
�:

.op_txt

OPT �equs("Can't open ")

OPT �equb(0)

 :

*.close1

4
LDA #0

>LDY han1

HJMP osfind

R:

\	.get1

fLDY han1

pJMP osbget

z:

�
.open2

�LDA #132

�JSR osbyte

�STX f2_add

�STY f2_add+1

�RTS

�:

�	.put2

�
LDY #0

�STA (f2_add),Y

�INC f2_add

�BNE p2_ninc1

�INC f2_add+1

.p2_ninc1
RTS
:
$.han1 OPT �equb(0)
.]
8�
B:
L� �message
V
[OPT opt%
`	.mess
jSTX txt
t
STY txt+1
~
LDY #0
�
.ms_loop1
�LDA (txt),Y
�BEQ ms_exit
�JSR osasci
�INY
�CMP #13
�BNE ms_loop1
�.ms_exit
�SEC
�RTS
�:
�	.phex
PHA

	LSR A
	LSR A
	LSR A
(	LSR A
2JSR pdig
<PLA
F	� #15
P	.pdig
ZCMP #10
d
BCC pd_nn
n
ADC #6
x
.pd_nn
�ADC #48
�JMP osasci
�]
��
�:
�
� �ds(n%)
�� i%
�� i%=1 � n%
�
[OPT opt%
�OPT �equb(0)
�]
��
�	=opt%
:
� �equb(a%)
?P%=a%:P%=P%+1
"	=opt%
,:
6� �equw(a%)
@!P%=a%:P%=P%+2
J	=opt%
T:
^� �equd(a%)
h!P%=a%:P%=P%+4
r	=opt%
|:
�� �equs(a$)
�$P%=a$:P%=P%+�a$
�	=opt%
�:
�� �oscli($os%)
�X%=os%:Y%=os% � 256
�� &FFF7
��
�:
�� �reloc(a%)
�h�oscli("KEY0FOR I%="+�(�P-�)+" TO 0 STEP -1:I%?&"+�~a%+"=I%?&"+�~�+":N.|MPAGE=&"+�~a%+"|MO.|MRUN|M")
�*FX138,0,128
��
�
00000000  0d 00 0a 1c f4 20 48 75  66 66 6d 61 6e 20 53 63  |..... Huffman Sc|
00000010  72 65 65 6e 20 44 65 63  6f 64 65 72 0d 00 14 17  |reen Decoder....|
00000020  f4 20 62 79 20 41 6e 64  72 65 77 20 42 65 6e 6e  |. by Andrew Benn|
00000030  65 74 74 0d 00 1e 19 f4  20 28 63 29 20 41 63 6f  |ett..... (c) Aco|
00000040  72 6e 20 43 6f 6d 70 75  74 69 6e 67 0d 00 28 05  |rn Computing..(.|
00000050  3a 0d 00 32 0d de 20 6f  73 25 20 32 30 30 0d 00  |:..2.. os% 200..|
00000060  3c 1b e7 20 90 3c 26 33  30 30 30 20 f2 72 65 6c  |<.. .<&3000 .rel|
00000070  6f 63 28 26 33 30 30 30  29 0d 00 46 05 3a 0d 00  |oc(&3000)..F.:..|
00000080  50 0a f2 73 65 74 75 70  0d 00 5a 12 f2 6d 61 6b  |P..setup..Z..mak|
00000090  65 64 65 63 6f 6d 70 61  63 74 0d 00 64 05 e0 0d  |edecompact..d...|
000000a0  00 6e 05 3a 0d 00 78 0c  dd 20 f2 73 65 74 75 70  |.n.:..x.. .setup|
000000b0  0d 00 82 17 7a 70 25 3d  26 37 30 3a 64 65 73 74  |....zp%=&70:dest|
000000c0  25 3d 26 31 39 30 30 0d  00 8c 10 69 64 65 6e 74  |%=&1900....ident|
000000d0  25 3d 26 46 41 44 45 0d  00 96 05 3a 0d 00 a0 1d  |%=&FADE....:....|
000000e0  6f 73 61 72 67 73 3d 26  46 46 44 41 3a 6f 73 61  |osargs=&FFDA:osa|
000000f0  73 63 69 3d 26 46 46 45  33 0d 00 aa 1d 6f 73 66  |sci=&FFE3....osf|
00000100  69 6e 64 3d 26 46 46 43  45 3a 6f 73 62 67 65 74  |ind=&FFCE:osbget|
00000110  3d 26 46 46 44 37 0d 00  b4 1d 6f 73 62 70 75 74  |=&FFD7....osbput|
00000120  3d 26 46 46 44 34 3a 6f  73 62 79 74 65 3d 26 46  |=&FFD4:osbyte=&F|
00000130  46 46 34 0d 00 be 05 3a  0d 00 c8 15 66 6e 32 3d  |FF4....:....fn2=|
00000140  7a 70 25 3a 66 6e 31 3d  66 6e 32 2b 32 0d 00 d2  |zp%:fn1=fn2+2...|
00000150  1d 66 32 5f 61 64 64 3d  66 6e 31 2b 32 3a 74 78  |.f2_add=fn1+2:tx|
00000160  74 3d 66 32 5f 61 64 64  2b 32 0d 00 dc 05 e1 0d  |t=f2_add+2......|
00000170  00 e6 05 3a 0d 00 f0 14  dd 20 f2 6d 61 6b 65 64  |...:..... .maked|
00000180  65 63 6f 6d 70 61 63 74  0d 00 fa 15 63 6f 6d 6d  |ecompact....comm|
00000190  61 6e 64 24 3d 22 48 55  46 46 53 43 22 0d 01 04  |and$="HUFFSC"...|
000001a0  05 3a 0d 01 0e 14 e3 20  6f 70 74 25 3d 30 20 b8  |.:..... opt%=0 .|
000001b0  20 32 20 88 20 32 0d 01  18 0c 50 25 3d 64 65 73  | 2 . 2....P%=des|
000001c0  74 25 0d 01 22 0d 5b 4f  50 54 20 6f 70 74 25 0d  |t%..".[OPT opt%.|
000001d0  01 2c 0e 2e 64 65 63 6f  6d 70 61 63 74 0d 01 36  |.,..decompact..6|
000001e0  10 4a 53 52 20 67 65 74  6e 61 6d 65 73 0d 01 40  |.JSR getnames..@|
000001f0  0f 42 43 53 20 64 63 5f  65 78 69 74 0d 01 4a 0d  |.BCS dc_exit..J.|
00000200  4a 53 52 20 6f 70 65 6e  31 0d 01 54 0f 42 43 53  |JSR open1..T.BCS|
00000210  20 64 63 5f 65 78 69 74  0d 01 5e 11 4a 53 52 20  | dc_exit..^.JSR |
00000220  63 68 65 63 6b 66 69 6c  65 0d 01 68 11 42 43 53  |checkfile..h.BCS|
00000230  20 64 63 5f 63 6c 6f 73  65 31 0d 01 72 12 4a 53  | dc_close1..r.JS|
00000240  52 20 67 65 74 6c 65 6e  67 74 68 73 0d 01 7c 10  |R getlengths..|.|
00000250  4a 53 52 20 6d 61 6b 65  74 72 65 65 0d 01 86 0d  |JSR maketree....|
00000260  4a 53 52 20 6f 70 65 6e  32 0d 01 90 12 4a 53 52  |JSR open2....JSR|
00000270  20 64 65 63 6f 6d 70 72  65 73 73 0d 01 9a 0e 2e  | decompress.....|
00000280  64 63 5f 63 6c 6f 73 65  31 0d 01 a4 0e 4a 53 52  |dc_close1....JSR|
00000290  20 63 6c 6f 73 65 31 0d  01 ae 0c 2e 64 63 5f 65  | close1.....dc_e|
000002a0  78 69 74 0d 01 b8 07 52  54 53 0d 01 c2 05 3a 0d  |xit....RTS....:.|
000002b0  01 cc 0e 2e 63 68 65 63  6b 66 69 6c 65 0d 01 d6  |....checkfile...|
000002c0  0c 4a 53 52 20 67 65 74  31 0d 01 e0 0f 42 43 53  |.JSR get1....BCS|
000002d0  20 6e 6f 74 68 75 66 66  0d 01 ea 15 43 4d 50 20  | nothuff....CMP |
000002e0  23 69 64 65 6e 74 25 20  83 20 32 35 36 0d 01 f4  |#ident% . 256...|
000002f0  0f 42 4e 45 20 6e 6f 74  68 75 66 66 0d 01 fe 0c  |.BNE nothuff....|
00000300  4a 53 52 20 67 65 74 31  0d 02 08 0f 42 43 53 20  |JSR get1....BCS |
00000310  6e 6f 74 68 75 66 66 0d  02 12 15 43 4d 50 20 23  |nothuff....CMP #|
00000320  69 64 65 6e 74 25 20 81  20 32 35 36 0d 02 1c 0f  |ident% . 256....|
00000330  42 4e 45 20 6e 6f 74 68  75 66 66 0d 02 26 07 43  |BNE nothuff..&.C|
00000340  4c 43 0d 02 30 07 52 54  53 0d 02 3a 05 3a 0d 02  |LC..0.RTS..:.:..|
00000350  44 0c 2e 6e 6f 74 68 75  66 66 0d 02 4e 17 4c 44  |D..nothuff..N.LD|
00000360  58 20 23 6e 68 75 66 5f  74 78 74 20 83 20 32 35  |X #nhuf_txt . 25|
00000370  36 0d 02 58 17 4c 44 59  20 23 6e 68 75 66 5f 74  |6..X.LDY #nhuf_t|
00000380  78 74 20 81 20 32 35 36  0d 02 62 0c 4a 4d 50 20  |xt . 256..b.JMP |
00000390  6d 65 73 73 0d 02 6c 05  3a 0d 02 76 0d 2e 6e 68  |mess..l.:..v..nh|
000003a0  75 66 5f 74 78 74 0d 02  80 26 4f 50 54 20 a4 65  |uf_txt...&OPT .e|
000003b0  71 75 73 28 22 4e 6f 74  20 61 20 63 6f 6d 70 72  |qus("Not a compr|
000003c0  65 73 73 65 64 20 66 69  6c 65 22 29 0d 02 8a 11  |essed file")....|
000003d0  4f 50 54 20 a4 65 71 75  62 28 31 33 29 0d 02 94  |OPT .equb(13)...|
000003e0  05 3a 0d 02 9e 0f 2e 67  65 74 6c 65 6e 67 74 68  |.:.....getlength|
000003f0  73 0d 02 a8 0a 4c 44 58  20 23 30 0d 02 b2 0d 2e  |s....LDX #0.....|
00000400  67 6c 5f 6c 6f 6f 70 31  0d 02 bc 0c 4a 53 52 20  |gl_loop1....JSR |
00000410  67 65 74 31 0d 02 c6 0f  53 54 41 20 74 6f 74 61  |get1....STA tota|
00000420  6c 2c 58 0d 02 d0 07 49  4e 58 0d 02 da 0a 43 50  |l,X....INX....CP|
00000430  58 20 23 33 0d 02 e4 10  42 4e 45 20 67 6c 5f 6c  |X #3....BNE gl_l|
00000440  6f 6f 70 31 0d 02 ee 0a  4c 44 58 20 23 30 0d 02  |oop1....LDX #0..|
00000450  f8 0d 2e 67 6c 5f 6c 6f  6f 70 32 0d 03 02 0c 4a  |...gl_loop2....J|
00000460  53 52 20 67 65 74 31 0d  03 0c 0e 53 54 41 20 62  |SR get1....STA b|
00000470  69 74 73 2c 58 0d 03 16  07 49 4e 58 0d 03 20 10  |its,X....INX.. .|
00000480  42 4e 45 20 67 6c 5f 6c  6f 6f 70 32 0d 03 2a 07  |BNE gl_loop2..*.|
00000490  52 54 53 0d 03 34 05 3a  0d 03 3e 0d 2e 6d 61 6b  |RTS..4.:..>..mak|
000004a0  65 74 72 65 65 0d 03 48  0c 4c 44 59 20 23 26 46  |etree..H.LDY #&F|
000004b0  46 0d 03 52 0a 4c 44 58  20 23 30 0d 03 5c 0f 53  |F..R.LDX #0..\.S|
000004c0  54 58 20 6d 74 5f 6e 65  78 74 0d 03 66 0d 2e 6d  |TX mt_next..f..m|
000004d0  74 5f 6c 6f 6f 70 31 0d  03 70 0c 4c 44 41 20 23  |t_loop1..p.LDA #|
000004e0  26 46 46 0d 03 7a 0f 53  54 41 20 6e 6f 64 65 73  |&FF..z.STA nodes|
000004f0  2c 58 0d 03 84 0e 53 54  41 20 74 72 65 65 2c 58  |,X....STA tree,X|
00000500  0d 03 8e 0e 4c 44 41 20  62 69 74 73 2c 58 0d 03  |....LDA bits,X..|
00000510  98 10 42 4e 45 20 6d 74  5f 73 6b 69 70 31 0d 03  |..BNE mt_skip1..|
00000520  a2 07 44 45 59 0d 03 ac  0d 2e 6d 74 5f 73 6b 69  |..DEY.....mt_ski|
00000530  70 31 0d 03 b6 07 49 4e  58 0d 03 c0 10 42 4e 45  |p1....INX....BNE|
00000540  20 6d 74 5f 6c 6f 6f 70  31 0d 03 ca 12 53 54 59  | mt_loop1....STY|
00000550  20 6d 74 5f 6f 62 6a 65  63 74 73 0d 03 d4 0d 2e  | mt_objects.....|
00000560  6d 74 5f 6c 6f 6f 70 32  0d 03 de 0a 4c 44 59 20  |mt_loop2....LDY |
00000570  23 30 0d 03 e8 0e 53 54  59 20 6d 74 5f 73 6d 31  |#0....STY mt_sm1|
00000580  0d 03 f2 0a 4c 44 58 20  23 31 0d 03 fc 0e 53 54  |....LDX #1....ST|
00000590  58 20 6d 74 5f 73 6d 32  0d 04 06 0c 4c 44 41 20  |X mt_sm2....LDA |
000005a0  62 69 74 73 0d 04 10 0e  43 4d 50 20 62 69 74 73  |bits....CMP bits|
000005b0  2b 31 0d 04 1a 11 42 43  53 20 6d 74 5f 6e 6f 73  |+1....BCS mt_nos|
000005c0  77 61 70 0d 04 24 0e 53  54 58 20 6d 74 5f 73 6d  |wap..$.STX mt_sm|
000005d0  31 0d 04 2e 0e 53 54 59  20 6d 74 5f 73 6d 32 0d  |1....STY mt_sm2.|
000005e0  04 38 0e 2e 6d 74 5f 6e  6f 73 77 61 70 0d 04 42  |.8..mt_noswap..B|
000005f0  07 49 4e 58 0d 04 4c 0d  2e 6d 74 5f 6c 6f 6f 70  |.INX..L..mt_loop|
00000600  33 0d 04 56 0e 4c 44 59  20 6d 74 5f 73 6d 32 0d  |3..V.LDY mt_sm2.|
00000610  04 60 0e 4c 44 41 20 62  69 74 73 2c 59 0d 04 6a  |.`.LDA bits,Y..j|
00000620  0e 43 4d 50 20 62 69 74  73 2c 58 0d 04 74 10 42  |.CMP bits,X..t.B|
00000630  43 53 20 6d 74 5f 6e 65  78 74 31 0d 04 7e 0e 53  |CS mt_next1..~.S|
00000640  54 58 20 6d 74 5f 73 6d  32 0d 04 88 0e 4c 44 59  |TX mt_sm2....LDY|
00000650  20 6d 74 5f 73 6d 31 0d  04 92 0e 4c 44 41 20 62  | mt_sm1....LDA b|
00000660  69 74 73 2c 59 0d 04 9c  0e 43 4d 50 20 62 69 74  |its,Y....CMP bit|
00000670  73 2c 58 0d 04 a6 10 42  43 53 20 6d 74 5f 6e 65  |s,X....BCS mt_ne|
00000680  78 74 31 0d 04 b0 0e 53  54 58 20 6d 74 5f 73 6d  |xt1....STX mt_sm|
00000690  31 0d 04 ba 0e 53 54 59  20 6d 74 5f 73 6d 32 0d  |1....STY mt_sm2.|
000006a0  04 c4 0d 2e 6d 74 5f 6e  65 78 74 31 0d 04 ce 07  |....mt_next1....|
000006b0  49 4e 58 0d 04 d8 10 42  4e 45 20 6d 74 5f 6c 6f  |INX....BNE mt_lo|
000006c0  6f 70 33 0d 04 e2 0e 4c  44 58 20 6d 74 5f 73 6d  |op3....LDX mt_sm|
000006d0  31 0d 04 ec 0e 44 45 43  20 62 69 74 73 2c 58 0d  |1....DEC bits,X.|
000006e0  04 f6 0a 4c 44 59 20 23  30 0d 05 00 10 4a 53 52  |...LDY #0....JSR|
000006f0  20 6d 74 5f 74 72 61 63  65 0d 05 0a 0e 4c 44 58  | mt_trace....LDX|
00000700  20 6d 74 5f 73 6d 32 0d  05 14 0a 4c 44 41 20 23  | mt_sm2....LDA #|
00000710  30 0d 05 1e 0e 53 54 41  20 62 69 74 73 2c 58 0d  |0....STA bits,X.|
00000720  05 28 0a 4c 44 59 20 23  31 0d 05 32 10 4a 53 52  |.(.LDY #1..2.JSR|
00000730  20 6d 74 5f 74 72 61 63  65 0d 05 3c 0f 49 4e 43  | mt_trace..<.INC|
00000740  20 6d 74 5f 6e 65 78 74  0d 05 46 12 44 45 43 20  | mt_next..F.DEC |
00000750  6d 74 5f 6f 62 6a 65 63  74 73 0d 05 50 10 42 4e  |mt_objects..P.BN|
00000760  45 20 6d 74 5f 6c 6f 6f  70 32 0d 05 5a 07 52 54  |E mt_loop2..Z.RT|
00000770  53 0d 05 64 05 3a 0d 05  6e 0d 2e 6d 74 5f 74 72  |S..d.:..n..mt_tr|
00000780  61 63 65 0d 05 78 0f 4c  44 41 20 6e 6f 64 65 73  |ace..x.LDA nodes|
00000790  2c 58 0d 05 82 0c 43 4d  50 20 23 26 46 46 0d 05  |,X....CMP #&FF..|
000007a0  8c 11 42 4e 45 20 6d 74  74 5f 6c 6f 6f 70 31 0d  |..BNE mtt_loop1.|
000007b0  05 96 0f 4c 44 41 20 6d  74 5f 6e 65 78 74 0d 05  |...LDA mt_next..|
000007c0  a0 0f 53 54 41 20 6e 6f  64 65 73 2c 58 0d 05 aa  |..STA nodes,X...|
000007d0  0a 4c 44 41 20 23 30 0d  05 b4 10 42 45 51 20 6d  |.LDA #0....BEQ m|
000007e0  74 74 5f 63 6f 6e 74 0d  05 be 0e 2e 6d 74 74 5f  |tt_cont.....mtt_|
000007f0  6c 6f 6f 70 31 0d 05 c8  07 54 41 58 0d 05 d2 0e  |loop1....TAX....|
00000800  4c 44 41 20 74 72 65 65  2c 58 0d 05 dc 0c 43 4d  |LDA tree,X....CM|
00000810  50 20 23 26 46 46 0d 05  e6 11 42 4e 45 20 6d 74  |P #&FF....BNE mt|
00000820  74 5f 6c 6f 6f 70 31 0d  05 f0 0f 4c 44 41 20 6d  |t_loop1....LDA m|
00000830  74 5f 6e 65 78 74 0d 05  fa 0e 53 54 41 20 74 72  |t_next....STA tr|
00000840  65 65 2c 58 0d 06 04 0a  4c 44 41 20 23 31 0d 06  |ee,X....LDA #1..|
00000850  0e 0d 2e 6d 74 74 5f 63  6f 6e 74 0d 06 18 0a 43  |...mtt_cont....C|
00000860  50 59 20 23 31 0d 06 22  0f 4c 44 59 20 6d 74 5f  |PY #1..".LDY mt_|
00000870  6e 65 78 74 0d 06 2c 11  42 43 53 20 6d 74 74 5f  |next..,.BCS mtt_|
00000880  72 69 67 68 74 0d 06 36  10 53 54 41 20 74 72 65  |right..6.STA tre|
00000890  65 6c 74 2c 59 0d 06 40  07 54 58 41 0d 06 4a 0f  |elt,Y..@.TXA..J.|
000008a0  53 54 41 20 74 72 65 65  6c 2c 59 0d 06 54 07 52  |STA treel,Y..T.R|
000008b0  54 53 0d 06 5e 0e 2e 6d  74 74 5f 72 69 67 68 74  |TS..^..mtt_right|
000008c0  0d 06 68 10 53 54 41 20  74 72 65 65 72 74 2c 59  |..h.STA treert,Y|
000008d0  0d 06 72 07 54 58 41 0d  06 7c 0f 53 54 41 20 74  |..r.TXA..|.STA t|
000008e0  72 65 65 72 2c 59 0d 06  86 07 52 54 53 0d 06 90  |reer,Y....RTS...|
000008f0  05 3a 0d 06 9a 0f 2e 64  65 63 6f 6d 70 72 65 73  |.:.....decompres|
00000900  73 0d 06 a4 0a 4c 44 41  20 23 31 0d 06 ae 10 53  |s....LDA #1....S|
00000910  54 41 20 64 63 6d 5f 62  69 74 73 0d 06 b8 0c 44  |TA dcm_bits....D|
00000920  45 43 20 72 6f 6f 74 0d  06 c2 0e 2e 64 63 6d 5f  |EC root.....dcm_|
00000930  6c 6f 6f 70 31 0d 06 cc  12 4a 53 52 20 64 63 6d  |loop1....JSR dcm|
00000940  5f 64 6f 62 79 74 65 0d  06 d6 0c 4a 53 52 20 70  |_dobyte....JSR p|
00000950  75 74 32 0d 06 e0 0d 4c  44 41 20 74 6f 74 61 6c  |ut2....LDA total|
00000960  0d 06 ea 12 42 4e 45 20  64 63 6d 5f 6e 6f 64 65  |....BNE dcm_node|
00000970  63 31 0d 06 f4 0f 4c 44  41 20 74 6f 74 61 6c 2b  |c1....LDA total+|
00000980  31 0d 06 fe 12 42 4e 45  20 64 63 6d 5f 6e 6f 64  |1....BNE dcm_nod|
00000990  65 63 32 0d 07 08 0f 44  45 43 20 74 6f 74 61 6c  |ec2....DEC total|
000009a0  2b 32 0d 07 12 0f 2e 64  63 6d 5f 6e 6f 64 65 63  |+2.....dcm_nodec|
000009b0  32 0d 07 1c 0f 44 45 43  20 74 6f 74 61 6c 2b 31  |2....DEC total+1|
000009c0  0d 07 26 0f 2e 64 63 6d  5f 6e 6f 64 65 63 31 0d  |..&..dcm_nodec1.|
000009d0  07 30 0d 44 45 43 20 74  6f 74 61 6c 0d 07 3a 0d  |.0.DEC total..:.|
000009e0  4c 44 41 20 74 6f 74 61  6c 0d 07 44 0e 84 41 20  |LDA total..D..A |
000009f0  74 6f 74 61 6c 2b 31 0d  07 4e 0e 84 41 20 74 6f  |total+1..N..A to|
00000a00  74 61 6c 2b 32 0d 07 58  11 42 4e 45 20 64 63 6d  |tal+2..X.BNE dcm|
00000a10  5f 6c 6f 6f 70 31 0d 07  62 07 52 54 53 0d 07 6c  |_loop1..b.RTS..l|
00000a20  05 3a 0d 07 76 0f 2e 64  63 6d 5f 64 6f 62 79 74  |.:..v..dcm_dobyt|
00000a30  65 0d 07 80 0c 4c 44 59  20 72 6f 6f 74 0d 07 8a  |e....LDY root...|
00000a40  0f 2e 64 63 6d 64 5f 6c  6f 6f 70 31 0d 07 94 07  |..dcmd_loop1....|
00000a50  54 59 41 0d 07 9e 07 54  41 58 0d 07 a8 11 4a 53  |TYA....TAX....JS|
00000a60  52 20 64 63 6d 5f 64 6f  62 69 74 0d 07 b2 0a 43  |R dcm_dobit....C|
00000a70  4d 50 20 23 30 0d 07 bc  12 42 4e 45 20 64 63 6d  |MP #0....BNE dcm|
00000a80  64 5f 72 69 67 68 74 0d  07 c6 0f 4c 44 41 20 74  |d_right....LDA t|
00000a90  72 65 65 6c 2c 58 0d 07  d0 07 54 41 59 0d 07 da  |reel,X....TAY...|
00000aa0  10 4c 44 41 20 74 72 65  65 6c 74 2c 58 0d 07 e4  |.LDA treelt,X...|
00000ab0  12 42 4e 45 20 64 63 6d  64 5f 6c 6f 6f 70 31 0d  |.BNE dcmd_loop1.|
00000ac0  07 ee 11 42 45 51 20 64  63 6d 64 5f 64 6f 6e 65  |...BEQ dcmd_done|
00000ad0  0d 07 f8 0f 2e 64 63 6d  64 5f 72 69 67 68 74 0d  |.....dcmd_right.|
00000ae0  08 02 0f 4c 44 41 20 74  72 65 65 72 2c 58 0d 08  |...LDA treer,X..|
00000af0  0c 07 54 41 59 0d 08 16  10 4c 44 41 20 74 72 65  |..TAY....LDA tre|
00000b00  65 72 74 2c 58 0d 08 20  12 42 4e 45 20 64 63 6d  |ert,X.. .BNE dcm|
00000b10  64 5f 6c 6f 6f 70 31 0d  08 2a 0e 2e 64 63 6d 64  |d_loop1..*..dcmd|
00000b20  5f 64 6f 6e 65 0d 08 34  07 54 59 41 0d 08 3e 07  |_done..4.TYA..>.|
00000b30  52 54 53 0d 08 48 05 3a  0d 08 52 0e 2e 64 63 6d  |RTS..H.:..R..dcm|
00000b40  5f 64 6f 62 69 74 0d 08  5c 10 44 45 43 20 64 63  |_dobit..\.DEC dc|
00000b50  6d 5f 62 69 74 73 0d 08  66 10 42 4e 45 20 64 63  |m_bits..f.BNE dc|
00000b60  6d 5f 6e 65 78 74 0d 08  70 0c 4a 53 52 20 67 65  |m_next..p.JSR ge|
00000b70  74 31 0d 08 7a 10 53 54  41 20 64 63 6d 5f 64 61  |t1..z.STA dcm_da|
00000b80  74 61 0d 08 84 0a 4c 44  41 20 23 38 0d 08 8e 10  |ta....LDA #8....|
00000b90  53 54 41 20 64 63 6d 5f  62 69 74 73 0d 08 98 0d  |STA dcm_bits....|
00000ba0  2e 64 63 6d 5f 6e 65 78  74 0d 08 a2 10 41 53 4c  |.dcm_next....ASL|
00000bb0  20 64 63 6d 5f 64 61 74  61 0d 08 ac 0a 4c 44 41  | dcm_data....LDA|
00000bc0  20 23 30 0d 08 b6 09 52  4f 4c 20 41 0d 08 c0 07  | #0....ROL A....|
00000bd0  52 54 53 0d 08 ca 05 5d  0d 08 d4 1b f2 66 69 6c  |RTS....].....fil|
00000be0  65 68 61 6e 64 6c 69 6e  67 28 63 6f 6d 6d 61 6e  |ehandling(comman|
00000bf0  64 24 29 0d 08 de 0c f2  6d 65 73 73 61 67 65 0d  |d$).....message.|
00000c00  08 e8 0d 5b 4f 50 54 20  6f 70 74 25 0d 08 f2 0c  |...[OPT opt%....|
00000c10  2e 63 6f 64 65 65 6e 64  0d 08 fc 05 3a 0d 09 06  |.codeend....:...|
00000c20  0d 2e 64 63 6d 5f 62 69  74 73 0d 09 10 1c 2e 6d  |..dcm_bits.....m|
00000c30  74 5f 6f 62 6a 65 63 74  73 20 4f 50 54 20 a4 65  |t_objects OPT .e|
00000c40  71 75 62 28 30 29 0d 09  1a 0d 2e 64 63 6d 5f 64  |qub(0).....dcm_d|
00000c50  61 74 61 0d 09 24 18 2e  6d 74 5f 73 6d 31 20 4f  |ata..$..mt_sm1 O|
00000c60  50 54 20 a4 65 71 75 62  28 30 29 0d 09 2e 18 2e  |PT .equb(0).....|
00000c70  6d 74 5f 73 6d 32 20 4f  50 54 20 a4 65 71 75 62  |mt_sm2 OPT .equb|
00000c80  28 30 29 0d 09 38 09 2e  72 6f 6f 74 0d 09 42 19  |(0)..8..root..B.|
00000c90  2e 6d 74 5f 6e 65 78 74  20 4f 50 54 20 a4 65 71  |.mt_next OPT .eq|
00000ca0  75 62 28 30 29 0d 09 4c  05 3a 0d 09 56 24 2e 74  |ub(0)..L.:..V$.t|
00000cb0  6f 74 61 6c 20 4f 50 54  20 a4 65 71 75 77 28 30  |otal OPT .equw(0|
00000cc0  29 3a 4f 50 54 20 a4 65  71 75 62 28 30 29 0d 09  |):OPT .equb(0)..|
00000cd0  60 05 3a 0d 09 6a 16 2e  74 72 65 65 20 4f 50 54  |`.:..j..tree OPT|
00000ce0  20 a4 64 73 28 32 35 36  29 0d 09 74 17 2e 6e 6f  | .ds(256)..t..no|
00000cf0  64 65 73 20 4f 50 54 20  a4 64 73 28 32 35 36 29  |des OPT .ds(256)|
00000d00  0d 09 7e 05 3a 0d 09 88  17 2e 74 72 65 65 6c 20  |..~.:.....treel |
00000d10  4f 50 54 20 a4 64 73 28  32 35 35 29 0d 09 92 18  |OPT .ds(255)....|
00000d20  2e 74 72 65 65 6c 74 20  4f 50 54 20 a4 64 73 28  |.treelt OPT .ds(|
00000d30  32 35 35 29 0d 09 9c 17  2e 74 72 65 65 72 20 4f  |255).....treer O|
00000d40  50 54 20 a4 64 73 28 32  35 35 29 0d 09 a6 18 2e  |PT .ds(255).....|
00000d50  74 72 65 65 72 74 20 4f  50 54 20 a4 64 73 28 32  |treert OPT .ds(2|
00000d60  35 35 29 0d 09 b0 05 3a  0d 09 ba 16 2e 62 69 74  |55)....:.....bit|
00000d70  73 20 4f 50 54 20 a4 64  73 28 32 35 36 29 0d 09  |s OPT .ds(256)..|
00000d80  c4 05 5d 0d 09 ce 05 ed  0d 09 d8 83 f2 6f 73 63  |..]..........osc|
00000d90  6c 69 28 22 53 41 56 45  20 22 2b 63 6f 6d 6d 61  |li("SAVE "+comma|
00000da0  6e 64 24 2b 22 20 22 2b  c3 7e 64 65 63 6f 6d 70  |nd$+" "+.~decomp|
00000db0  61 63 74 2b 22 20 2b 22  2b c3 7e 28 63 6f 64 65  |act+" +"+.~(code|
00000dc0  65 6e 64 2d 64 65 63 6f  6d 70 61 63 74 29 2b 22  |end-decompact)+"|
00000dd0  20 22 2b c3 7e 28 64 65  63 6f 6d 70 61 63 74 20  | "+.~(decompact |
00000de0  84 20 26 46 46 46 46 30  30 30 30 29 2b 22 20 22  |. &FFFF0000)+" "|
00000df0  2b c3 7e 28 64 65 63 6f  6d 70 61 63 74 20 84 20  |+.~(decompact . |
00000e00  26 46 46 46 46 30 30 30  30 29 29 0d 09 e2 05 e1  |&FFFF0000)).....|
00000e10  0d 09 ec 05 3a 0d 09 f6  1a dd 20 f2 66 69 6c 65  |....:..... .file|
00000e20  68 61 6e 64 6c 69 6e 67  28 63 6f 6d 6d 24 29 0d  |handling(comm$).|
00000e30  0a 00 0d 5b 4f 50 54 20  6f 70 74 25 0d 0a 0a 0d  |...[OPT opt%....|
00000e40  2e 67 65 74 6e 61 6d 65  73 0d 0a 14 0a 4c 44 41  |.getnames....LDA|
00000e50  20 23 31 0d 0a 1e 0a 4c  44 59 20 23 30 0d 0a 28  | #1....LDY #0..(|
00000e60  0c 4c 44 58 20 23 66 6e  32 0d 0a 32 0e 4a 53 52  |.LDX #fn2..2.JSR|
00000e70  20 6f 73 61 72 67 73 0d  0a 3c 0a 4c 44 59 20 23  | osargs..<.LDY #|
00000e80  30 0d 0a 46 11 4a 53 52  20 73 6b 69 70 73 70 61  |0..F.JSR skipspa|
00000e90  63 65 0d 0a 50 0b 43 4d  50 20 23 31 33 0d 0a 5a  |ce..P.CMP #13..Z|
00000ea0  0e 42 45 51 20 73 79 6e  74 61 78 0d 0a 64 07 43  |.BEQ syntax..d.C|
00000eb0  4c 43 0d 0a 6e 07 54 59  41 0d 0a 78 0b 41 44 43  |LC..n.TYA..x.ADC|
00000ec0  20 66 6e 32 0d 0a 82 0b  53 54 41 20 66 6e 31 0d  | fn2....STA fn1.|
00000ed0  0a 8c 0d 4c 44 41 20 66  6e 32 2b 31 0d 0a 96 0a  |...LDA fn2+1....|
00000ee0  41 44 43 20 23 30 0d 0a  a0 0d 53 54 41 20 66 6e  |ADC #0....STA fn|
00000ef0  31 2b 31 0d 0a aa 11 4a  53 52 20 66 69 6e 64 73  |1+1....JSR finds|
00000f00  70 61 63 65 0d 0a b4 0b  43 4d 50 20 23 31 33 0d  |pace....CMP #13.|
00000f10  0a be 0f 42 45 51 20 67  6e 5f 65 78 69 74 0d 0a  |...BEQ gn_exit..|
00000f20  c8 0b 4c 44 41 20 23 31  33 0d 0a d2 0f 53 54 41  |..LDA #13....STA|
00000f30  20 28 66 6e 32 29 2c 59  0d 0a dc 07 49 4e 59 0d  | (fn2),Y....INY.|
00000f40  0a e6 11 4a 53 52 20 73  6b 69 70 73 70 61 63 65  |...JSR skipspace|
00000f50  0d 0a f0 0b 43 4d 50 20  23 31 33 0d 0a fa 0e 42  |....CMP #13....B|
00000f60  4e 45 20 73 79 6e 74 61  78 0d 0b 04 0c 2e 67 6e  |NE syntax.....gn|
00000f70  5f 65 78 69 74 0d 0b 0e  07 43 4c 43 0d 0b 18 07  |_exit....CLC....|
00000f80  52 54 53 0d 0b 22 05 3a  0d 0b 2c 0b 2e 73 79 6e  |RTS..".:..,..syn|
00000f90  74 61 78 0d 0b 36 16 4c  44 58 20 23 73 79 6e 5f  |tax..6.LDX #syn_|
00000fa0  74 78 74 20 83 20 32 35  36 0d 0b 40 16 4c 44 59  |txt . 256..@.LDY|
00000fb0  20 23 73 79 6e 5f 74 78  74 20 81 20 32 35 36 0d  | #syn_txt . 256.|
00000fc0  0b 4a 0c 4a 4d 50 20 6d  65 73 73 0d 0b 54 05 3a  |.J.JMP mess..T.:|
00000fd0  0d 0b 5e 0c 2e 73 79 6e  5f 74 78 74 0d 0b 68 28  |..^..syn_txt..h(|
00000fe0  4f 50 54 20 a4 65 71 75  73 28 22 53 79 6e 74 61  |OPT .equs("Synta|
00000ff0  78 3a 20 22 2b 63 6f 6d  6d 24 2b 22 20 3c 73 72  |x: "+comm$+" <sr|
00001000  63 3e 22 29 0d 0b 72 11  4f 50 54 20 a4 65 71 75  |c>")..r.OPT .equ|
00001010  62 28 31 33 29 0d 0b 7c  05 3a 0d 0b 86 0d 2e 73  |b(13)..|.:.....s|
00001020  73 5f 6c 6f 6f 70 31 0d  0b 90 07 49 4e 59 0d 0b  |s_loop1....INY..|
00001030  9a 0e 2e 73 6b 69 70 73  70 61 63 65 0d 0b a4 0f  |...skipspace....|
00001040  4c 44 41 20 28 66 6e 32  29 2c 59 0d 0b ae 0b 43  |LDA (fn2),Y....C|
00001050  4d 50 20 23 33 32 0d 0b  b8 10 42 45 51 20 73 73  |MP #32....BEQ ss|
00001060  5f 6c 6f 6f 70 31 0d 0b  c2 07 52 54 53 0d 0b cc  |_loop1....RTS...|
00001070  05 3a 0d 0b d6 0d 2e 66  73 5f 6c 6f 6f 70 31 0d  |.:.....fs_loop1.|
00001080  0b e0 07 49 4e 59 0d 0b  ea 0e 2e 66 69 6e 64 73  |...INY.....finds|
00001090  70 61 63 65 0d 0b f4 0f  4c 44 41 20 28 66 6e 32  |pace....LDA (fn2|
000010a0  29 2c 59 0d 0b fe 0b 43  4d 50 20 23 31 33 0d 0c  |),Y....CMP #13..|
000010b0  08 0f 42 45 51 20 66 73  5f 65 78 69 74 0d 0c 12  |..BEQ fs_exit...|
000010c0  0b 43 4d 50 20 23 33 32  0d 0c 1c 10 42 4e 45 20  |.CMP #32....BNE |
000010d0  66 73 5f 6c 6f 6f 70 31  0d 0c 26 0c 2e 66 73 5f  |fs_loop1..&..fs_|
000010e0  65 78 69 74 0d 0c 30 07  52 54 53 0d 0c 3a 05 3a  |exit..0.RTS..:.:|
000010f0  0d 0c 44 0a 2e 6f 70 65  6e 31 0d 0c 4e 0b 4c 44  |..D..open1..N.LD|
00001100  41 20 23 36 34 0d 0c 58  0b 4c 44 58 20 66 6e 31  |A #64..X.LDX fn1|
00001110  0d 0c 62 0d 4c 44 59 20  66 6e 31 2b 31 0d 0c 6c  |..b.LDY fn1+1..l|
00001120  0e 4a 53 52 20 6f 73 66  69 6e 64 0d 0c 76 0c 53  |.JSR osfind..v.S|
00001130  54 41 20 68 61 6e 31 0d  0c 80 0a 43 4d 50 20 23  |TA han1....CMP #|
00001140  30 0d 0c 8a 10 42 45 51  20 63 61 6e 74 5f 6f 70  |0....BEQ cant_op|
00001150  31 0d 0c 94 07 43 4c 43  0d 0c 9e 07 52 54 53 0d  |1....CLC....RTS.|
00001160  0c a8 05 3a 0d 0c b2 0d  2e 63 61 6e 74 5f 6f 70  |...:.....cant_op|
00001170  31 0d 0c bc 15 4c 44 58  20 23 6f 70 5f 74 78 74  |1....LDX #op_txt|
00001180  20 83 20 32 35 36 0d 0c  c6 15 4c 44 59 20 23 6f  | . 256....LDY #o|
00001190  70 5f 74 78 74 20 81 20  32 35 36 0d 0c d0 0c 4a  |p_txt . 256....J|
000011a0  53 52 20 6d 65 73 73 0d  0c da 0b 4c 44 58 20 66  |SR mess....LDX f|
000011b0  6e 31 0d 0c e4 0d 4c 44  59 20 66 6e 31 2b 31 0d  |n1....LDY fn1+1.|
000011c0  0c ee 0c 4a 4d 50 20 6d  65 73 73 0d 0c f8 05 3a  |...JMP mess....:|
000011d0  0d 0d 02 0b 2e 6f 70 5f  74 78 74 0d 0d 0c 1c 4f  |.....op_txt....O|
000011e0  50 54 20 a4 65 71 75 73  28 22 43 61 6e 27 74 20  |PT .equs("Can't |
000011f0  6f 70 65 6e 20 22 29 0d  0d 16 10 4f 50 54 20 a4  |open ")....OPT .|
00001200  65 71 75 62 28 30 29 0d  0d 20 05 3a 0d 0d 2a 0b  |equb(0).. .:..*.|
00001210  2e 63 6c 6f 73 65 31 0d  0d 34 0a 4c 44 41 20 23  |.close1..4.LDA #|
00001220  30 0d 0d 3e 0c 4c 44 59  20 68 61 6e 31 0d 0d 48  |0..>.LDY han1..H|
00001230  0e 4a 4d 50 20 6f 73 66  69 6e 64 0d 0d 52 05 3a  |.JMP osfind..R.:|
00001240  0d 0d 5c 09 2e 67 65 74  31 0d 0d 66 0c 4c 44 59  |..\..get1..f.LDY|
00001250  20 68 61 6e 31 0d 0d 70  0e 4a 4d 50 20 6f 73 62  | han1..p.JMP osb|
00001260  67 65 74 0d 0d 7a 05 3a  0d 0d 84 0a 2e 6f 70 65  |get..z.:.....ope|
00001270  6e 32 0d 0d 8e 0c 4c 44  41 20 23 31 33 32 0d 0d  |n2....LDA #132..|
00001280  98 0e 4a 53 52 20 6f 73  62 79 74 65 0d 0d a2 0e  |..JSR osbyte....|
00001290  53 54 58 20 66 32 5f 61  64 64 0d 0d ac 10 53 54  |STX f2_add....ST|
000012a0  59 20 66 32 5f 61 64 64  2b 31 0d 0d b6 07 52 54  |Y f2_add+1....RT|
000012b0  53 0d 0d c0 05 3a 0d 0d  ca 09 2e 70 75 74 32 0d  |S....:.....put2.|
000012c0  0d d4 0a 4c 44 59 20 23  30 0d 0d de 12 53 54 41  |...LDY #0....STA|
000012d0  20 28 66 32 5f 61 64 64  29 2c 59 0d 0d e8 0e 49  | (f2_add),Y....I|
000012e0  4e 43 20 66 32 5f 61 64  64 0d 0d f2 10 42 4e 45  |NC f2_add....BNE|
000012f0  20 70 32 5f 6e 69 6e 63  31 0d 0d fc 10 49 4e 43  | p2_ninc1....INC|
00001300  20 66 32 5f 61 64 64 2b  31 0d 0e 06 0d 2e 70 32  | f2_add+1.....p2|
00001310  5f 6e 69 6e 63 31 0d 0e  10 07 52 54 53 0d 0e 1a  |_ninc1....RTS...|
00001320  05 3a 0d 0e 24 16 2e 68  61 6e 31 20 4f 50 54 20  |.:..$..han1 OPT |
00001330  a4 65 71 75 62 28 30 29  0d 0e 2e 05 5d 0d 0e 38  |.equb(0)....]..8|
00001340  05 e1 0d 0e 42 05 3a 0d  0e 4c 0e dd 20 f2 6d 65  |....B.:..L.. .me|
00001350  73 73 61 67 65 0d 0e 56  0d 5b 4f 50 54 20 6f 70  |ssage..V.[OPT op|
00001360  74 25 0d 0e 60 09 2e 6d  65 73 73 0d 0e 6a 0b 53  |t%..`..mess..j.S|
00001370  54 58 20 74 78 74 0d 0e  74 0d 53 54 59 20 74 78  |TX txt..t.STY tx|
00001380  74 2b 31 0d 0e 7e 0a 4c  44 59 20 23 30 0d 0e 88  |t+1..~.LDY #0...|
00001390  0d 2e 6d 73 5f 6c 6f 6f  70 31 0d 0e 92 0f 4c 44  |..ms_loop1....LD|
000013a0  41 20 28 74 78 74 29 2c  59 0d 0e 9c 0f 42 45 51  |A (txt),Y....BEQ|
000013b0  20 6d 73 5f 65 78 69 74  0d 0e a6 0e 4a 53 52 20  | ms_exit....JSR |
000013c0  6f 73 61 73 63 69 0d 0e  b0 07 49 4e 59 0d 0e ba  |osasci....INY...|
000013d0  0b 43 4d 50 20 23 31 33  0d 0e c4 10 42 4e 45 20  |.CMP #13....BNE |
000013e0  6d 73 5f 6c 6f 6f 70 31  0d 0e ce 0c 2e 6d 73 5f  |ms_loop1.....ms_|
000013f0  65 78 69 74 0d 0e d8 07  53 45 43 0d 0e e2 07 52  |exit....SEC....R|
00001400  54 53 0d 0e ec 05 3a 0d  0e f6 09 2e 70 68 65 78  |TS....:.....phex|
00001410  0d 0f 00 07 50 48 41 0d  0f 0a 09 4c 53 52 20 41  |....PHA....LSR A|
00001420  0d 0f 14 09 4c 53 52 20  41 0d 0f 1e 09 4c 53 52  |....LSR A....LSR|
00001430  20 41 0d 0f 28 09 4c 53  52 20 41 0d 0f 32 0c 4a  | A..(.LSR A..2.J|
00001440  53 52 20 70 64 69 67 0d  0f 3c 07 50 4c 41 0d 0f  |SR pdig..<.PLA..|
00001450  46 09 80 20 23 31 35 0d  0f 50 09 2e 70 64 69 67  |F.. #15..P..pdig|
00001460  0d 0f 5a 0b 43 4d 50 20  23 31 30 0d 0f 64 0d 42  |..Z.CMP #10..d.B|
00001470  43 43 20 70 64 5f 6e 6e  0d 0f 6e 0a 41 44 43 20  |CC pd_nn..n.ADC |
00001480  23 36 0d 0f 78 0a 2e 70  64 5f 6e 6e 0d 0f 82 0b  |#6..x..pd_nn....|
00001490  41 44 43 20 23 34 38 0d  0f 8c 0e 4a 4d 50 20 6f  |ADC #48....JMP o|
000014a0  73 61 73 63 69 0d 0f 96  05 5d 0d 0f a0 05 e1 0d  |sasci....]......|
000014b0  0f aa 05 3a 0d 0f b4 0d  dd 20 a4 64 73 28 6e 25  |...:..... .ds(n%|
000014c0  29 0d 0f be 08 ea 20 69  25 0d 0f c8 0f e3 20 69  |)..... i%..... i|
000014d0  25 3d 31 20 b8 20 6e 25  0d 0f d2 0d 5b 4f 50 54  |%=1 . n%....[OPT|
000014e0  20 6f 70 74 25 0d 0f dc  10 4f 50 54 20 a4 65 71  | opt%....OPT .eq|
000014f0  75 62 28 30 29 0d 0f e6  05 5d 0d 0f f0 05 ed 0d  |ub(0)....]......|
00001500  0f fa 09 3d 6f 70 74 25  0d 10 04 05 3a 0d 10 0e  |...=opt%....:...|
00001510  0f dd 20 a4 65 71 75 62  28 61 25 29 0d 10 18 12  |.. .equb(a%)....|
00001520  3f 50 25 3d 61 25 3a 50  25 3d 50 25 2b 31 0d 10  |?P%=a%:P%=P%+1..|
00001530  22 09 3d 6f 70 74 25 0d  10 2c 05 3a 0d 10 36 0f  |".=opt%..,.:..6.|
00001540  dd 20 a4 65 71 75 77 28  61 25 29 0d 10 40 12 21  |. .equw(a%)..@.!|
00001550  50 25 3d 61 25 3a 50 25  3d 50 25 2b 32 0d 10 4a  |P%=a%:P%=P%+2..J|
00001560  09 3d 6f 70 74 25 0d 10  54 05 3a 0d 10 5e 0f dd  |.=opt%..T.:..^..|
00001570  20 a4 65 71 75 64 28 61  25 29 0d 10 68 12 21 50  | .equd(a%)..h.!P|
00001580  25 3d 61 25 3a 50 25 3d  50 25 2b 34 0d 10 72 09  |%=a%:P%=P%+4..r.|
00001590  3d 6f 70 74 25 0d 10 7c  05 3a 0d 10 86 0f dd 20  |=opt%..|.:..... |
000015a0  a4 65 71 75 73 28 61 24  29 0d 10 90 14 24 50 25  |.equs(a$)....$P%|
000015b0  3d 61 24 3a 50 25 3d 50  25 2b a9 61 24 0d 10 9a  |=a$:P%=P%+.a$...|
000015c0  09 3d 6f 70 74 25 0d 10  a4 05 3a 0d 10 ae 12 dd  |.=opt%....:.....|
000015d0  20 f2 6f 73 63 6c 69 28  24 6f 73 25 29 0d 10 b8  | .oscli($os%)...|
000015e0  17 58 25 3d 6f 73 25 3a  59 25 3d 6f 73 25 20 81  |.X%=os%:Y%=os% .|
000015f0  20 32 35 36 0d 10 c2 0b  d6 20 26 46 46 46 37 0d  | 256..... &FFF7.|
00001600  10 cc 05 e1 0d 10 d6 05  3a 0d 10 e0 10 dd 20 f2  |........:..... .|
00001610  72 65 6c 6f 63 28 61 25  29 0d 10 ea 68 f2 6f 73  |reloc(a%)...h.os|
00001620  63 6c 69 28 22 4b 45 59  30 46 4f 52 20 49 25 3d  |cli("KEY0FOR I%=|
00001630  22 2b c3 28 b8 50 2d 90  29 2b 22 20 54 4f 20 30  |"+.(.P-.)+" TO 0|
00001640  20 53 54 45 50 20 2d 31  3a 49 25 3f 26 22 2b c3  | STEP -1:I%?&"+.|
00001650  7e 61 25 2b 22 3d 49 25  3f 26 22 2b c3 7e 90 2b  |~a%+"=I%?&"+.~.+|
00001660  22 3a 4e 2e 7c 4d 50 41  47 45 3d 26 22 2b c3 7e  |":N.|MPAGE=&"+.~|
00001670  61 25 2b 22 7c 4d 4f 2e  7c 4d 52 55 4e 7c 4d 22  |a%+"|MO.|MRUN|M"|
00001680  29 0d 10 f4 10 2a 46 58  31 33 38 2c 30 2c 31 32  |)....*FX138,0,12|
00001690  38 0d 10 fe 05 e0 0d ff                           |8.......|
00001698