home *** CD-ROM | disk | FTP | other *** search
- ;*** ╒╬┬├╧─┼: BCODE DECODER VERSION 1.00 - BY ├RAIG ┬RUCE - 25-╬OV-93
-
- ;ASSUMES 1-65535 SEGMENTS, 1-65536 TEMP FILES MAX, 0-4 ╟ FILE LENGTH, 64 FRAGS
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:UNBCODE"
-
- JMP MAIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- CHR╠╞ = $0A
- CHR├╥ = $0D
- CHR╤UOTE = $22
- TRUE = $FF
- FALSE = $00
-
- MAX├HUNK = 64
- MAX╠INE = 85
- MAX╞ILENAME = 85
- MAX╚AVE = 64
- MAX╘EMPNAME = 20
- COPY┬UF╙IZE = 4096
- VERSION .ASC "1.00"
- .BYTE 0
-
- HR╞ROM╙EG = 0 ;(2)
- HR╘O╙EG = 2 ;(2)
- HR╘EMP╞ILE╬AME = 4 ;(2)
- HR╓ALID╠ENGTH = 6 ;(4)
- HR╔S┼ND = 10 ;(1)
- HR╞ILENAME = 11 ;(17)
- HR╙IZE = 32 ;(REALLY 28)
-
- ASCII╞ILE .BUF 1
- TEMP .BUF 1
-
- PROG╬AME .BUF 2
- INFORMATIVE .BUF 1
- VERBOSE .BUF 1
- DEBUG .BUF 1
- READ╞ILENAME .BUF 2
- READ╠INE╬UM .BUF 4
- HAVE├OUNT .BUF 1
- STATUS╞ILE┼XISTS .BUF 1
- NEXT╘EMP╬AME .BUF 2
- FILENAME╒SED .BUF 1
-
- ARG = 2 ;(2)
- NAME = 4 ;(2)
- IN┬UF╠EN = 6 ;(2)
- BUF╨TR = 8 ;(2)
- BUF├OUNT = 10 ;(2)
- INFILE = 12 ;(1)
- OUTFILE = 13 ;(1)
- OUT╬AME = 14 ;(2)
- SEGNUM = 16 ;(4)
- CONVERT╠EN = 20 ;(1)
- GETLINE╨OS = 21 ;(1)
- SCAN╓AL = 22 ;(4)
- CRC = 26 ;(4)
- BYTES = 30 ;(4)
- IS┼ND = 34 ;(1)
- CUR╚AVE = 35 ;(1)
- TEMP╬AME = 36 ;(4) : REALLY ONLY USES 2
- H = 40 ;(2)
- NEXT╚ = 42 ;(2)
- HAVE╥EC = 44 ;(1)
- FIN = 45 ;(1)
- FOUT = 46 ;(1)
- WORK = 112 ;(16)
-
- CRC╘ABLE0 = *
- .BYTE $00,$96,$2C,$BA,$19,$8F,$35,$A3,$32,$A4,$1E,$88,$2B,$BD,$07,$91
- .BYTE $64,$F2,$48,$DE,$7D,$EB,$51,$C7,$56,$C0,$7A,$EC,$4F,$D9,$63,$F5
- .BYTE $C8,$5E,$E4,$72,$D1,$47,$FD,$6B,$FA,$6C,$D6,$40,$E3,$75,$CF,$59
- .BYTE $AC,$3A,$80,$16,$B5,$23,$99,$0F,$9E,$08,$B2,$24,$87,$11,$AB,$3D
- .BYTE $90,$06,$BC,$2A,$89,$1F,$A5,$33,$A2,$34,$8E,$18,$BB,$2D,$97,$01
- .BYTE $F4,$62,$D8,$4E,$ED,$7B,$C1,$57,$C6,$50,$EA,$7C,$DF,$49,$F3,$65
- .BYTE $58,$CE,$74,$E2,$41,$D7,$6D,$FB,$6A,$FC,$46,$D0,$73,$E5,$5F,$C9
- .BYTE $3C,$AA,$10,$86,$25,$B3,$09,$9F,$0E,$98,$22,$B4,$17,$81,$3B,$AD
- .BYTE $20,$B6,$0C,$9A,$39,$AF,$15,$83,$12,$84,$3E,$A8,$0B,$9D,$27,$B1
- .BYTE $44,$D2,$68,$FE,$5D,$CB,$71,$E7,$76,$E0,$5A,$CC,$6F,$F9,$43,$D5
- .BYTE $E8,$7E,$C4,$52,$F1,$67,$DD,$4B,$DA,$4C,$F6,$60,$C3,$55,$EF,$79
- .BYTE $8C,$1A,$A0,$36,$95,$03,$B9,$2F,$BE,$28,$92,$04,$A7,$31,$8B,$1D
- .BYTE $B0,$26,$9C,$0A,$A9,$3F,$85,$13,$82,$14,$AE,$38,$9B,$0D,$B7,$21
- .BYTE $D4,$42,$F8,$6E,$CD,$5B,$E1,$77,$E6,$70,$CA,$5C,$FF,$69,$D3,$45
- .BYTE $78,$EE,$54,$C2,$61,$F7,$4D,$DB,$4A,$DC,$66,$F0,$53,$C5,$7F,$E9
- .BYTE $1C,$8A,$30,$A6,$05,$93,$29,$BF,$2E,$B8,$02,$94,$37,$A1,$1B,$8D
-
- CRC╘ABLE1 = *
- .BYTE $00,$30,$61,$51,$C4,$F4,$A5,$95,$88,$B8,$E9,$D9,$4C,$7C,$2D,$1D
- .BYTE $10,$20,$71,$41,$D4,$E4,$B5,$85,$98,$A8,$F9,$C9,$5C,$6C,$3D,$0D
- .BYTE $20,$10,$41,$71,$E4,$D4,$85,$B5,$A8,$98,$C9,$F9,$6C,$5C,$0D,$3D
- .BYTE $30,$00,$51,$61,$F4,$C4,$95,$A5,$B8,$88,$D9,$E9,$7C,$4C,$1D,$2D
- .BYTE $41,$71,$20,$10,$85,$B5,$E4,$D4,$C9,$F9,$A8,$98,$0D,$3D,$6C,$5C
- .BYTE $51,$61,$30,$00,$95,$A5,$F4,$C4,$D9,$E9,$B8,$88,$1D,$2D,$7C,$4C
- .BYTE $61,$51,$00,$30,$A5,$95,$C4,$F4,$E9,$D9,$88,$B8,$2D,$1D,$4C,$7C
- .BYTE $71,$41,$10,$20,$B5,$85,$D4,$E4,$F9,$C9,$98,$A8,$3D,$0D,$5C,$6C
- .BYTE $83,$B3,$E2,$D2,$47,$77,$26,$16,$0B,$3B,$6A,$5A,$CF,$FF,$AE,$9E
- .BYTE $93,$A3,$F2,$C2,$57,$67,$36,$06,$1B,$2B,$7A,$4A,$DF,$EF,$BE,$8E
- .BYTE $A3,$93,$C2,$F2,$67,$57,$06,$36,$2B,$1B,$4A,$7A,$EF,$DF,$8E,$BE
- .BYTE $B3,$83,$D2,$E2,$77,$47,$16,$26,$3B,$0B,$5A,$6A,$FF,$CF,$9E,$AE
- .BYTE $C2,$F2,$A3,$93,$06,$36,$67,$57,$4A,$7A,$2B,$1B,$8E,$BE,$EF,$DF
- .BYTE $D2,$E2,$B3,$83,$16,$26,$77,$47,$5A,$6A,$3B,$0B,$9E,$AE,$FF,$CF
- .BYTE $E2,$D2,$83,$B3,$26,$16,$47,$77,$6A,$5A,$0B,$3B,$AE,$9E,$CF,$FF
- .BYTE $F2,$C2,$93,$A3,$36,$06,$57,$67,$7A,$4A,$1B,$2B,$BE,$8E,$DF,$EF
-
- CRC╘ABLE2 = *
- .BYTE $00,$07,$0E,$09,$6D,$6A,$63,$64,$DB,$DC,$D5,$D2,$B6,$B1,$B8,$BF
- .BYTE $B7,$B0,$B9,$BE,$DA,$DD,$D4,$D3,$6C,$6B,$62,$65,$01,$06,$0F,$08
- .BYTE $6E,$69,$60,$67,$03,$04,$0D,$0A,$B5,$B2,$BB,$BC,$D8,$DF,$D6,$D1
- .BYTE $D9,$DE,$D7,$D0,$B4,$B3,$BA,$BD,$02,$05,$0C,$0B,$6F,$68,$61,$66
- .BYTE $DC,$DB,$D2,$D5,$B1,$B6,$BF,$B8,$07,$00,$09,$0E,$6A,$6D,$64,$63
- .BYTE $6B,$6C,$65,$62,$06,$01,$08,$0F,$B0,$B7,$BE,$B9,$DD,$DA,$D3,$D4
- .BYTE $B2,$B5,$BC,$BB,$DF,$D8,$D1,$D6,$69,$6E,$67,$60,$04,$03,$0A,$0D
- .BYTE $05,$02,$0B,$0C,$68,$6F,$66,$61,$DE,$D9,$D0,$D7,$B3,$B4,$BD,$BA
- .BYTE $B8,$BF,$B6,$B1,$D5,$D2,$DB,$DC,$63,$64,$6D,$6A,$0E,$09,$00,$07
- .BYTE $0F,$08,$01,$06,$62,$65,$6C,$6B,$D4,$D3,$DA,$DD,$B9,$BE,$B7,$B0
- .BYTE $D6,$D1,$D8,$DF,$BB,$BC,$B5,$B2,$0D,$0A,$03,$04,$60,$67,$6E,$69
- .BYTE $61,$66,$6F,$68,$0C,$0B,$02,$05,$BA,$BD,$B4,$B3,$D7,$D0,$D9,$DE
- .BYTE $64,$63,$6A,$6D,$09,$0E,$07,$00,$BF,$B8,$B1,$B6,$D2,$D5,$DC,$DB
- .BYTE $D3,$D4,$DD,$DA,$BE,$B9,$B0,$B7,$08,$0F,$06,$01,$65,$62,$6B,$6C
- .BYTE $0A,$0D,$04,$03,$67,$60,$69,$6E,$D1,$D6,$DF,$D8,$BC,$BB,$B2,$B5
- .BYTE $BD,$BA,$B3,$B4,$D0,$D7,$DE,$D9,$66,$61,$68,$6F,$0B,$0C,$05,$02
-
- CRC╘ABLE3 = *
- .BYTE $00,$77,$EE,$99,$07,$70,$E9,$9E,$0E,$79,$E0,$97,$09,$7E,$E7,$90
- .BYTE $1D,$6A,$F3,$84,$1A,$6D,$F4,$83,$13,$64,$FD,$8A,$14,$63,$FA,$8D
- .BYTE $3B,$4C,$D5,$A2,$3C,$4B,$D2,$A5,$35,$42,$DB,$AC,$32,$45,$DC,$AB
- .BYTE $26,$51,$C8,$BF,$21,$56,$CF,$B8,$28,$5F,$C6,$B1,$2F,$58,$C1,$B6
- .BYTE $76,$01,$98,$EF,$71,$06,$9F,$E8,$78,$0F,$96,$E1,$7F,$08,$91,$E6
- .BYTE $6B,$1C,$85,$F2,$6C,$1B,$82,$F5,$65,$12,$8B,$FC,$62,$15,$8C,$FB
- .BYTE $4D,$3A,$A3,$D4,$4A,$3D,$A4,$D3,$43,$34,$AD,$DA,$44,$33,$AA,$DD
- .BYTE $50,$27,$BE,$C9,$57,$20,$B9,$CE,$5E,$29,$B0,$C7,$59,$2E,$B7,$C0
- .BYTE $ED,$9A,$03,$74,$EA,$9D,$04,$73,$E3,$94,$0D,$7A,$E4,$93,$0A,$7D
- .BYTE $F0,$87,$1E,$69,$F7,$80,$19,$6E,$FE,$89,$10,$67,$F9,$8E,$17,$60
- .BYTE $D6,$A1,$38,$4F,$D1,$A6,$3F,$48,$D8,$AF,$36,$41,$DF,$A8,$31,$46
- .BYTE $CB,$BC,$25,$52,$CC,$BB,$22,$55,$C5,$B2,$2B,$5C,$C2,$B5,$2C,$5B
- .BYTE $9B,$EC,$75,$02,$9C,$EB,$72,$05,$95,$E2,$7B,$0C,$92,$E5,$7C,$0B
- .BYTE $86,$F1,$68,$1F,$81,$F6,$6F,$18,$88,$FF,$66,$11,$8F,$F8,$61,$16
- .BYTE $A0,$D7,$4E,$39,$A7,$D0,$49,$3E,$AE,$D9,$40,$37,$A9,$DE,$47,$30
- .BYTE $BD,$CA,$53,$24,$BA,$CD,$54,$23,$B3,$C4,$5D,$2A,$B4,$C3,$5A,$2D
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- EPUTCHAR = *
- LDX #STDERR
- JMP PUTC
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTC┬UFFER
- LDA #<PUTC┬UFFER
- LDY #>PUTC┬UFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTC┬UFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETC┬UFFER
- LDY #>GETC┬UFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETC┬UFFER
- RTS
- + SEC
- RTS
- GETC┬UFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACE┴RGV
- ADC ZP+0
- STA ZP+0
- LDA ACE┴RGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- RTS
-
- ;===UNBCODE===
- MAIN = *
- ;** CHECK FOR LARGE ENOUGH ╘╨┴
- SEC
- LDA #<BSS┼ND
- CMP ACE═EM╘OP+0
- LDA #>BSS┼ND
- SBC ACE═EM╘OP+1
- BCC TPA╧K
- LDA #<TPA═SG
- LDY #>TPA═SG
- JSR EPUTS
- DIE = *
- LDA #1
- LDX #0
- JMP EXIT
-
- TPA═SG = *
- .ASC "╔NSUFFICIENT PROGRAM SPACE TO RUN UNBCODE"
- .BYTE CHR├╥,0
-
- TPA╧K = *
- ;** CHECK ARGUMENT COUNT
- LDA ACE┴RGC+1
- BEQ +
- JMP ENOUGH┴RGS
- + LDA ACE┴RGC+0
- CMP #2
- BCC USAGE
- JMP ENOUGH┴RGS
-
- USAGE = *
- LDA #<USAGE═SG
- LDY #>USAGE═SG
- JSR EPUTS
- JMP DIE
-
- USAGE═SG = *
- .ASC "USAGE: UNBCODE [-V] [-I] [-D] [-HELP] FILENAME ..."
- .BYTE CHR├╥
- .ASC " [-V]=VERBOSE, [-I]=INFORMATIVE, [-D]=DEBUGGING INFO"
- .BYTE CHR├╥,0
-
- ENOUGH┴RGS = *
- ;** SET GLOBALS
- LDA #TRUE
- STA INFORMATIVE
- LDA #FALSE
- STA VERBOSE
- LDA #FALSE
- STA DEBUG
- LDA #0
- LDY #0
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA PROG╬AME+0
- STY PROG╬AME+1
- LDA #FALSE
- STA FILENAME╒SED
- LDA #0
- STA TEMP╨REFIX
- STA TEMP╬AME+2
- STA TEMP╬AME+3
- JSR LOAD╙TATUS╞ILE
-
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACE═EM╘OP+0
- SBC #<IN┬UF
- STA IN┬UF╠EN+0
- LDA ACE═EM╘OP+1
- SBC #>IN┬UF
- STA IN┬UF╠EN+1
- LDA #0
- STA ARG+0
- STA ARG+1
-
- MAIN╬EXT = *
- JSR CHECK╙TOP
- INC ARG+0
- BNE +
- INC ARG+1
- + LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- ORA ZP+1
- BEQ MAIN┼XIT
- LDA ZP+0
- LDY ZP+1
- STA NAME+0
- STY NAME+1
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE +
- JSR HANDLE╞LAGS
- JMP MAIN╬EXT
- + JSR ECHO
- JSR UNBCODE
- BCC +
- JSR ERROR
- + JMP MAIN╬EXT
-
- MAIN┼XIT = *
- ;XX SHOULD READ FROM STDIN IF NO FILES
- JSR SAVE╙TATUS╞ILE
- RTS
-
- HANDLE╞LAGS = *
- INY
- LDA (ZP),Y
- BNE +
- RTS
- + CMP #"D"
- BEQ FLAG─
- CMP #"V"
- BEQ FLAG╓
- CMP #"I"
- BEQ FLAG╔
- CMP #"H"
- BNE +
- JMP USAGE
- + NOP
- ;XX UNRECOGNIZED OPTION
- JMP HANDLE╞LAGS
-
- FLAG─ = *
- LDA #TRUE
- STA DEBUG
- STA VERBOSE
- STA INFORMATIVE
- ;XX PRINT STUFF
- JMP HANDLE╞LAGS
-
- FLAG╓ = *
- LDA #TRUE
- STA VERBOSE
- STA INFORMATIVE
- ;XX PRINT VERSION
- JMP HANDLE╞LAGS
-
- FLAG╔ = *
- LDA #TRUE
- STA INFORMATIVE
- JMP HANDLE╞LAGS
-
- ERROR = *
- LDA #<ERROR═SG1
- LDY #>ERROR═SG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ERROR═SG2
- LDY #>ERROR═SG2
- JSR EPUTS
- RTS
-
- ERROR═SG1 = *
- .ASC "┼RROR ATTEMPTING TO UNBCODE FILE "
- .BYTE CHR╤UOTE,0
- ERROR═SG2 = *
- .BYTE CHR╤UOTE
- .ASC ", CONTINUING"
- .BYTE CHR├╥,0
-
- ECHO = *
- LDA #<ECHO═SG1
- LDY #>ECHO═SG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ECHO═SG2
- LDY #>ECHO═SG2
- JMP EPUTS
-
- ECHO═SG1 = *
- .ASC "UNBCODING FILE "
- .BYTE CHR╤UOTE,0
-
- ECHO═SG2 = *
- .BYTE CHR╤UOTE
- .ASC "..."
- .BYTE CHR├╥,0
-
- CHECK╙TOP = *
- JSR STOPKEY
- BCS +
- RTS
- + LDA #<STOPPED═SG
- LDY #>STOPPED═SG
- JSR EPUTS
- JMP DIE
-
- STOPPED═SG = *
- .ASC "<╙TOPPED>"
- .BYTE CHR├╥,0
-
- .SEQ UNBCODEHELP.S
-
- STAT╞CB .BUF 1
- STAT╚╥ .BUF 1
-
- WRITE╙TATUS─ATA = * ;( STAT╞CB )
- LDA #255
- STA STAT╚╥
- WRITE╙TATUS╬EXT = *
- INC STAT╚╥
- LDA STAT╚╥
- CMP HAVE├OUNT
- BCC +
- RTS
- + JSR GET╚
- LDY #10
- - LDA (H),Y
- STA WORK,Y
- DEY
- BPL -
- ;** FROM SEGMENT
- LDX #WORK+HR╞ROM╙EG
- JSR WRITE╬UM5
- ;** TO SEGMENT
- LDX #WORK+HR╘O╙EG
- JSR WRITE╬UM5
- ;** BEG/MID/END
- LDX #12
- LDA WORK+HR╔S┼ND
- BNE +
- LDX #6
- LDA WORK+HR╞ROM╙EG+0
- CMP #1
- BNE +
- LDA WORK+HR╞ROM╙EG+1
- CMP #0
- BNE +
- LDX #0
- + TXA
- LDY #>BEG═ID┼ND═SG
- CLC
- ADC #<BEG═ID┼ND═SG
- BCC +
- INY
- + LDX STAT╞CB
- JSR FPUTS
- ;** LENGTH
- LDX #WORK+HR╓ALID╠ENGTH
- JSR WRITE╬UM10
- ;** TEMP NAME
- LDA #<TEMP╬AME╨REFIX
- LDY #>TEMP╬AME╨REFIX
- LDX STAT╞CB
- JSR FPUTS
- LDX #WORK+HR╘EMP╞ILE╬AME
- JSR WRITE╬UM5
- ;** FILENAME
- LDA H+0
- LDY H+1
- CLC
- ADC #HR╞ILENAME
- BCC +
- INY
- + LDX STAT╞CB
- JSR FPUTS
- LDA #CHR├╥
- LDX STAT╞CB
- JSR PUTC
- JMP WRITE╙TATUS╬EXT
-
- BEG═ID┼ND═SG = *
- .BYTE "B","E","G"," "," ",0
- .BYTE "M","I","D"," "," ",0
- .BYTE "E","N","D"," "," ",0
- TEMP╬AME╨REFIX = *
- .ASC "0┬├"
- .BYTE 0
-
- SAVE╙TATUS╞ILE = *
- BIT VERBOSE
- BPL +
- LDA #<SAVE╙TAT═SG
- LDY #>SAVE╙TAT═SG
- JSR EPUTS
- + LDA #<STATUS╞ILENAME
- LDY #>STATUS╞ILENAME
- STA ZP+0
- STY ZP+1
- LDA HAVE├OUNT
- BNE ++
- LDA STATUS╞ILE┼XISTS
- BNE +
- RTS
- + JSR REMOVE
- RTS
- + LDA #"W"
- JSR OPEN╧VERWRITE
- BCC +
- LDA #<STATUS╫RITE┼RR═SG
- LDY #>STATUS╫RITE┼RR═SG
- JSR EPUTS
- LDA #STDERR
- + STA STAT╞CB
- JSR WRITE╙TATUS─ATA
- LDA STAT╞CB
- CMP #STDERR
- BEQ +
- JSR CLOSE
- + RTS
-
- SAVE╙TAT═SG = *
- .ASC "SAVING STATUS FILE 0┬├-╙╘┴╘"
- .BYTE CHR├╥,0
- STATUS╞ILENAME = *
- .ASC "0┬├-╙╘┴╘"
- .BYTE 0
- STATUS╫RITE┼RR═SG = *
- .ASC "├ANNOT OPEN "
- .BYTE CHR╤UOTE
- .ASC "0┬├-╙╘┴╘"
- .BYTE CHR╤UOTE
- .ASC ", WRITING STATUS TO STDERR:"
- .BYTE CHR├╥,0
-
- DISCARD╙EGMENT = *
- LDA CUR╚AVE
- JSR GET╚
- LDY #HR╞ROM╙EG
- LDA SEGNUM+0
- CMP (H),Y
- BNE DISCARD┴PPENDED╙EG
- INY
- LDA SEGNUM+1
- CMP (H),Y
- BNE DISCARD┴PPENDED╙EG
-
- ;** THIS IS THE ONLY SEGMENT IN THE FRAGMENT, DELETE IT
- LDA #<DISC═SG
- LDY #>DISC═SG
- JSR EPUTS
- JSR FETCH╘EMP╬AME
- LDA #TRUE
- JSR GET╘EMP╬AME╙TR
- LDA #<TEMP╬AME╙TR
- LDY #>TEMP╬AME╙TR
- STA ZP+0
- STY ZP+1
- JSR REMOVE
- LDA CUR╚AVE
- JSR REMOVE╚AVE╥EC
-
- DISCARD╙EG┼XIT = *
- BIT DEBUG
- BPL +
- LDX #STDERR
- STX STAT╞CB
- JSR WRITE╙TATUS─ATA
- + RTS
-
- DISC═SG = *
- .ASC "DISCARDING SEGMENT"
- .BYTE CHR├╥,0
-
- DISCARD┴PPENDED╙EG = *
- LDY #HR╘O╙EG
- SEC
- LDA SEGNUM+0
- SBC #1
- STA (H),Y
- INY
- LDA SEGNUM+1
- SBC #0
- STA (H),Y
- LDA #<DISC┴PP═SG
- LDY #>DISC┴PP═SG
- JSR EPUTS
- ;** GET AND OPEN NEW TEMP FILE
- JSR GET╘EMP╞ILE╬AME╧NLY
- LDA #"W"
- STA FILE═ODE
- JSR OPEN╘EMP╞ILE
- LDA OUTFILE
- STA FOUT
- BCS DISCARD╙EG┼XIT
- ;** OPEN OLD TEMP FILE
- LDA CUR╚AVE
- JSR GET╚
- LDY #HR╘EMP╞ILE╬AME
- LDA (H),Y
- PHA
- LDA TEMP╬AME+0
- STA (H),Y
- PLA
- STA TEMP╬AME+0
- INY
- LDA (H),Y
- PHA
- LDA TEMP╬AME+1
- STA (H),Y
- PLA
- STA TEMP╬AME+1
- LDA #"R"
- STA FILE═ODE
- JSR OPEN╘EMP╞ILE
- LDA OUTFILE
- STA FIN
- BCC +
- LDA FOUT
- JSR CLOSE
- JMP DISCARD╙EG┼XIT
- + STA FIN
- ;** COPY VALID CONTENTS INTO NEW TEMP FILE
- LDX #3
- LDY #HR╓ALID╠ENGTH+3
- - LDA (H),Y
- STA BYTES,X
- DEY
- DEX
- BPL -
- JSR COPY╞ILE
- ;** REMOVE OLD TEMP FILE
- LDA #<TEMP╬AME╙TR
- LDY #>TEMP╬AME╙TR
- STA ZP+0
- STY ZP+1
- JSR REMOVE
- JMP DISCARD╙EG┼XIT
-
- DISC┴PP═SG = *
- .ASC "DISCARDING APPENDED SEGMENT"
- .BYTE CHR├╥,0
-
- LOAD╙TATUS╞ILE = *
- BIT VERBOSE
- BPL +
- LDA #<LOAD╙TAT═SG
- LDY #>LOAD╙TAT═SG
- JSR EPUTS
- + LDA #0
- STA HAVE├OUNT
- LDA #FALSE
- STA STATUS╞ILE┼XISTS
- LDA #1
- LDY #0
- STA NEXT╘EMP╬AME+0
- STY NEXT╘EMP╬AME+1
- LDA #<STATUS╞ILENAME
- LDY #>STATUS╞ILENAME
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCS +
- STA STAT╞CB
- LDA #TRUE
- STA STATUS╞ILE┼XISTS
- JSR SCAN╙TATUS╞ILE
- LDA STAT╞CB
- JSR CLOSE
- + RTS
-
- LOAD╙TAT═SG = *
- .ASC "SCANNING STATUS FILE 0┬├-╙╘┴╘"
- .BYTE CHR├╥,0
-
- SS╨OS .BUF 1
-
- SCAN╙TATUS╞ILE = *
- ;** READ STATUS LINE
- LDX #0
- STX SS╨OS
- - LDX STAT╞CB
- JSR GETC
- BCC +
- RTS
- + CMP #CHR├╥
- BEQ +
- LDX SS╨OS
- CPX #MAX╠INE-1
- BCS -
- STA IN╠INE,X
- INC SS╨OS
- JMP -
- + LDA #0
- LDX SS╨OS
- STA IN╠INE,X
- CPX #42
- BCC SCAN╙TATUS╞ILE
- STA IN╠INE+52
-
- ;** SCAN STATUS LINE
- BIT DEBUG
- BPL +
- LDA #<IN╠INE
- LDY #>IN╠INE
- JSR EPUTS
- LDA #CHR├╥
- JSR EPUTCHAR
- + LDX #HR╙IZE-1
- LDA #0
- - STA TEMP╚AVE╥EC,X
- DEX
- BPL -
-
- ;0----+----1----+----2----+----3----+----4----+----5----+--
- ;00001 00002 BEG 0000001140 0┬├00007 NEW4
- ;00004 00004 END 0000000189 0┬├00004 1234567890123456.
- ;00002 00003 END 0000000529 0┬├00006 NEW5
-
- ;** FILENAME
- LDX #0
- - LDA IN╠INE+41,X
- STA TEMP╚AVE╥EC+HR╞ILENAME,X
- BEQ +
- INX
- BNE -
- ;** IS┼ND
- + LDX #TRUE
- LDA IN╠INE+14
- CMP #"E"
- BEQ +
- LDX #FALSE
- + STX TEMP╚AVE╥EC+HR╔S┼ND
- ;** FROM╙EG
- LDY #0
- JSR SCAN╬UM
- BCS SCAN┼RR
- LDA SCAN╓AL+0
- LDY SCAN╓AL+1
- STA TEMP╚AVE╥EC+HR╞ROM╙EG+0
- STY TEMP╚AVE╥EC+HR╞ROM╙EG+1
- ;** TO╙EG
- LDY #7
- JSR SCAN╬UM
- BCS SCAN┼RR
- LDA SCAN╓AL+0
- LDY SCAN╓AL+1
- STA TEMP╚AVE╥EC+HR╘O╙EG+0
- STY TEMP╚AVE╥EC+HR╘O╙EG+1
- ;** VALID╠ENGTH
- LDY #19
- JSR SCAN╬UM
- BCS SCAN┼RR
- LDA SCAN╓AL+0
- LDY SCAN╓AL+1
- STA TEMP╚AVE╥EC+HR╓ALID╠ENGTH+0
- STY TEMP╚AVE╥EC+HR╓ALID╠ENGTH+1
- LDA SCAN╓AL+2
- LDY SCAN╓AL+3
- STA TEMP╚AVE╥EC+HR╓ALID╠ENGTH+2
- STY TEMP╚AVE╥EC+HR╓ALID╠ENGTH+3
- ;** TEMP╞ILE╬AME
- LDY #34
- JSR SCAN╬UM
- BCS SCAN┼RR
- LDA SCAN╓AL+0
- LDY SCAN╓AL+1
- STA TEMP╚AVE╥EC+HR╘EMP╞ILE╬AME+0
- STY TEMP╚AVE╥EC+HR╘EMP╞ILE╬AME+1
-
- ;** STORE STATUS INFO
- LDA HAVE├OUNT
- CMP #MAX╚AVE
- BCC +
- LDA #<SCAN╘OO═ANY╞RAGS
- LDY #<SCAN╘OO═ANY╞RAGS
- JSR EPUTS
- SCAN┼RR = *
- JMP SCAN╙TATUS╞ILE
- + LDA HAVE├OUNT
- INC HAVE├OUNT
- JSR GET╚
- LDY #HR╙IZE-1
- - LDA TEMP╚AVE╥EC,Y
- STA (H),Y
- DEY
- BPL -
- JMP SCAN╙TATUS╞ILE
-
- SCAN╘OO═ANY╞RAGS = *
- .ASC "TOO MANY FRAGMENTS IN 0┬├-╙╘┴╘, IGNORING FRAGMENT"
- .BYTE CHR├╥,0
-
- ;===BSS===
- BSS = *
- IN╠INE = BSS+0
- TEMP╨REFIX = IN╠INE+MAX╠INE
- TEMP╬AME╙TR = TEMP╨REFIX+20
- HAVES = TEMP╬AME╙TR+MAX╞ILENAME
- COPY┬UF = HR╙IZE*MAX╚AVE+HAVES
- DECODE╘ABLE = COPY┬UF+COPY┬UF╙IZE
- TEMP╚AVE╥EC = DECODE╘ABLE+256
- IN┬UF = TEMP╚AVE╥EC+HR╙IZE
- BSS┼ND = IN┬UF+64
-