home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-02-12 | 14.4 KB | 1,080 lines |
- ;*** SORT PROGRAM - BY ├RAIG ┬RUCE, STARTED 13-╩UN-93
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:SORT"
-
- JMP MAIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $40
-
- CHR├╥ = $0D
- CHR╤UOTE = $22
- MAX╠INE╠EN = 2049
- TRUE = $FF
- FALSE = $00
-
- REVERSE╞LAG .BUF 1
- IGNORE├ASE╞LAG .BUF 1
- KEY╨OSITION .BUF 1
-
- ;******** 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
-
- 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
-
- 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
-
- ;===MAIN===
- ARG = 2
- NAME = 4
- STRING = 8
-
- MAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA #0
- STA REVERSE╞LAG
- STA IGNORE├ASE╞LAG
- LDA #1
- STA KEY╨OSITION
- LDA ACE┴RGC+1
- BNE ENOUGH┴RGS
- LDA ACE┴RGC
- CMP #2
- BCS ENOUGH┴RGS
-
- USAGE = *
- LDA #<USAGE═SG
- LDY #>USAGE═SG
- JMP EPUTS
-
- USAGE═SG = *
- .ASC "USAGE: SORT [-[I][V]] [+COLUMN] FILE ..."
- .BYTE CHR├╥,0
-
- ENOUGH┴RGS = *
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA ARG+0
- STY ARG+1
- JSR GETARG
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE KEY┴RG
- INC ARG+0
- - INY
- LDA (ZP),Y
- BEQ KEY┴RG
- CMP #"I"
- BNE +
- LDA #TRUE
- STA IGNORE├ASE╞LAG
- + CMP #"V"
- BNE +
- LDA #TRUE
- STA REVERSE╞LAG
- + JMP -
-
- KEY┴RG = *
- LDA ARG
- LDY #0
- JSR GETARG
- LDY #0
- LDA (ZP),Y
- CMP #"+"
- BNE FILE┴RG
- JSR GET╦EY╨OSITION
- INC ARG
-
- FILE┴RG = *
- JSR SORT╔NIT
- - JSR STOPKEY
- BCS STOPPED
- LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA NAME+0
- STY NAME+1
- ORA ZP+1
- BEQ MAIN┼XIT
- JSR SORT╥EAD
- BCC +
- JSR ERROR
- + INC ARG+0
- BNE +
- INC ARG+1
- + JMP -
-
- MAIN┼XIT = *
- JSR SORT╥EAL
- JSR SORT╨RINT
- JSR SORT├LEAN
- RTS
-
- KEY─IGIT = $71
-
- GET╦EY╨OSITION = *
- LDA #0
- STA KEY╨OSITION
- INY
- - LDA (ZP),Y
- CMP #"0"
- BCC +
- CMP #"9"+1
- BCS +
- AND #$0F
- STA KEY─IGIT
- LDA KEY╨OSITION
- ASL
- ASL
- CLC
- ADC KEY╨OSITION
- ASL
- CLC
- ADC KEY─IGIT
- STA KEY╨OSITION
- INY
- BNE -
- + RTS
-
- STOPPED = *
- LDA #<STOPPED═SG
- LDY #>STOPPED═SG
- JSR EPUTS
- LDA #1
- JMP EXIT
- STOPPED═SG = *
- .ASC "<╙TOPPED>"
- .BYTE CHR├╥,0
-
- ERROR = *
- LDA #<ERROR═SG1
- LDY #>ERROR═SG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ERROR═SG2
- LDY #>ERROR═SG2
- JMP EPUTS
- ERROR═SG1 = *
- .ASC "┼RROR READING FILE "
- .BYTE CHR╤UOTE,0
- ERROR═SG2 = *
- .BYTE CHR╤UOTE,CHR├╥,0
-
- BUF╨TR = 10 ;(1)
- BUF├OUNT = 12 ;(1)
- INFILE = 14 ;(1)
-
- SORT╥EAD = *
- ;** OPEN FILE
- LDA NAME+0
- LDY NAME+1
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- JSR READ┬ODY
- LDA INFILE
- JSR CLOSE
- RTS
-
- ;===SORT ROUTINES===
-
- SORTHEAD = 30 ;(4)
- SORT╨ = 34 ;(4)
- SORT╤ = 38 ;(4)
- HEADER = 42 ;(5)
-
- SORT╔NIT = *
- LDA #"S"
- JSR ECHO╙TATUS
- JSR MALLOC╔NIT
- LDA KEY╨OSITION
- CMP #1
- BCC +
- SBC #1
- + STA KEY╨OSITION
- LDX #3
- LDA #ACE═EM╬ULL
- - STA SORTHEAD,X
- DEX
- BPL -
- RTS
-
- READ┬ODY = *
- LDA #"R"
- JSR ECHO╙TATUS
- LDA #0
- STA BUF├OUNT
- - JSR GETLINE
- BCS +
- JSR POSITION╠INE
- JSR STORELINE
- BCS +
- LDA #"."
- JSR ECHO╙TATUS
- JMP -
- + RTS
-
- SORT╥EAL = *
- LDA REVERSE╞LAG
- BMI +
- LDA #"V"
- JSR ECHO╙TATUS
- JSR REVERSE╞ILE
- + RTS
-
- SORT╨RINT = *
- LDA #"W"
- JSR ECHO╙TATUS
- LDA #13
- JSR ECHO╙TATUS
- JSR WRITEFILE
- RTS
-
- SORT├LEAN = *
- ;LDA #"F"
- ;JSR ECHO╙TATUS
- ;JSR FREEFILE
- ;LDA #13
- ;JSR ECHO╙TATUS
- RTS
-
- ;*** FETCHLINE( SORT╨=╠INE╨TR, .┴┘=╥AM0BUF )
-
- FETCHLINE = *
- STA ZP+0
- STY ZP+1
- LDX #3
- - LDA SORT╨,X
- STA MP,X
- DEX
- BPL -
- LDX #HEADER
- LDY #5
- JSR ZPLOAD
- LDA HEADER+4
- LDY #0
- JMP FETCH
-
- ;*** SORT╟╘CMP( SORTLINE, CMPLINE ) : .├=█SORTLINE >= CMPLINE▌
-
- SORT╟╘CMP = *
- LDX #0
- CLC
- LDA KEY╨OSITION
- ADC #6
- CMP SORTBUFLEN
- BCC +
- INX
- + CMP CMPBUFLEN
- BCC +
- INX
- INX
- + TXA
- BEQ DO├OMPARE
- CMP #2
- RTS
-
- DO├OMPARE = *
- BIT IGNORE├ASE╞LAG
- BMI DO├ASELESS├OMPARE
- LDY KEY╨OSITION
- - LDA SORTLINE,Y
- CMP CMPLINE,Y
- BNE +
- CMP #0
- BEQ +
- INY
- BNE -
- + RTS
-
- CASELESS├HAR = $72
-
- DO├ASELESS├OMPARE = *
- LDY KEY╨OSITION
- - LDA SORTLINE,Y
- JSR LOWCASE
- PHA
- LDA CMPLINE,Y
- JSR LOWCASE
- STA CASELESS├HAR
- PLA
- CMP CASELESS├HAR
- BNE +
- CMP #0
- BEQ +
- INY
- BNE -
- + RTS
-
- LOWCASE = *
- CMP #"┴"
- BCC +
- CMP #"┌"+1
- BCS +
- AND #$7F
- + RTS
-
- ;*** POSITION╠INE( SORTLINE ) : SORT╤=PREV, SORT╨=NEXT
-
- POSITION╠INE = *
- LDX #3
- - LDA #ACE═EM╬ULL
- STA SORT╤,X
- LDA SORTHEAD,X
- STA SORT╨,X
- DEX
- BPL -
-
- POSITION╙EARCH = *
- LDA SORT╨+3
- CMP #ACE═EM╬ULL
- BEQ POSITION┼XIT
- LDA #<CMPBUF
- LDY #>CMPBUF
- JSR FETCHLINE
- JSR SORT╟╘CMP
- BCS POSITION┼XIT ;** CONTROLS SORT ORDER
- LDX #3
- - LDA SORT╨,X
- STA SORT╤,X
- LDA CMPBUF,X
- STA SORT╨,X
- DEX
- BPL -
- BMI POSITION╙EARCH
-
- POSITION┼XIT = *
- RTS
-
- ;*** STORELINE( SORTLINE ) █BETWEEN SORT╤ AND SORT╨▌
-
- STORELINE = *
- LDA SORTBUFLEN
- LDY #0
- JSR MALLOC
- BCC +
- RTS
- + LDX #3
- - LDA SORT╨,X
- STA SORTBUF,X
- DEX
- BPL -
- LDA #<SORTBUF
- LDY #>SORTBUF
- STA ZP+0
- STY ZP+1
- LDA SORTBUFLEN
- LDY #0
- JSR STASH
- LDA SORT╤+3
- CMP #ACE═EM╬ULL
- BEQ STORELINE╞IRST
- LDX #3
- - LDA MP,X
- LDY SORT╤,X
- STA SORT╤,X
- STY MP,X
- DEX
- BPL -
- LDX #SORT╤
- LDY #4
- JSR ZPSTORE
- CLC
- RTS
-
- STORELINE╞IRST = *
- LDX #3
- - LDA MP,X
- STA SORTHEAD,X
- DEX
- BPL -
- CLC
- RTS
-
- ;*** WRITEFILE()
-
- WRITEFILE = *
- LDX #3
- - LDA SORTHEAD,X
- STA SORT╨,X
- DEX
- BPL -
-
- WRITE╠INE = *
- LDA SORT╨+3
- CMP #ACE═EM╬ULL
- BEQ WRITE┼XIT
- LDA #<SORTBUF
- LDY #>SORTBUF
- JSR FETCHLINE
- JSR PUTLINE
- LDX #3
- - LDA SORTBUF,X
- STA SORT╨,X
- DEX
- BPL -
- JMP WRITE╠INE
-
- WRITE┼XIT = *
- RTS
-
- ;*** REVERSE╠IST()
-
- REVERSE╞ILE = *
- LDX #3
- - LDA SORTHEAD,X
- STA MP,X
- LDA #ACE═EM╬ULL
- STA SORTHEAD,X
- DEX
- BPL -
-
- REVERSE╠INE = *
- LDA MP+3
- CMP #ACE═EM╬ULL
- BEQ REVERSE┼XIT
- LDX #SORT╨
- LDY #4
- JSR ZPLOAD
- LDX #SORTHEAD
- LDY #4
- JSR ZPSTORE
- LDX #3
- - LDA MP,X
- STA SORTHEAD,X
- LDA SORT╨,X
- STA MP,X
- DEX
- BPL -
- BMI REVERSE╠INE
-
- REVERSE┼XIT = *
- RTS
-
- ;*** FREEFILE()
-
- FREEFILE = *
- LDX #3
- - LDA SORTHEAD,X
- STA MP,X
- DEX
- BPL -
-
- FREE╠INE = *
- LDA MP+3
- CMP #ACE═EM╬ULL
- BNE +
- RTS
- + LDX #HEADER
- LDY #5
- JSR ZPLOAD
- LDA HEADER+4
- LDY #0
- JSR FREE
- LDX #3
- - LDA HEADER,X
- STA MP,X
- DEX
- BPL -
- JMP FREE╠INE
-
- ECHO╙TATUS = *
- LDX #STDERR
- JMP PUTC
-
- ;===DYNAMIC MEMORY ROUTINES===
-
- MALLOC╫ORK = $60
-
- MALLOC╚EAD .BUF 4
- TPA╞REE╞IRST .BUF 1
- TPA╞REE═IN .BUF 1
- TPA╞REE╨AGES .BUF 1
- TPA┴REA╙TART .BUF 1
- TPA┴REA┼ND .BUF 1
-
- ;*** MALLOC╔NIT()
-
- MALLOC╔NIT = *
- LDA #ACE═EM╬ULL
- STA MALLOC╚EAD+3
- LDX #0
- LDA #$FF
- - STA TPA╞REEMAP,X
- INX
- BNE -
- LDX #>BSS┼ND
- LDA #<BSS┼ND
- BEQ +
- INX
- + STX TPA╞REE╞IRST
- STX TPA┴REA╙TART
- LDX ACE═EM╘OP+1
- STX MALLOC╫ORK
- STX TPA┴REA┼ND
- TXA
- SEC
- SBC TPA╞REE╞IRST
- BCS +
- LDA #0
- + STA TPA╞REE╨AGES
- CLC
- ADC #1
- STA TPA╞REE═IN
- LDX TPA╞REE╞IRST
- CPX MALLOC╫ORK
- BCS +
- LDA #$00
- - STA TPA╞REEMAP,X
- INX
- CPX MALLOC╫ORK
- BCC -
- + RTS
-
- LIB╨AGES .BUF 1
-
- LIB╨AGE┴LLOC = * ;( .┴=PAGES ) : [MP]
- STA LIB╨AGES
- LDX #$00
- LDY #ACE═EM╔NTERNAL-1
- JSR PAGEALLOC
- BCS +
- RTS
- + JSR TPA╨AGE┴LLOC
- BCS +
- RTS
- + LDA LIB╨AGES
- LDX #ACE═EM╔NTERNAL
- LDY #$FF
- JSR PAGEALLOC
- BCS +
- RTS
- + LDA #<NOMEM═SG
- LDY #>NOMEM═SG
- JSR EPUTS
- LDA #1
- JMP EXIT
-
- NOMEM═SG = *
- .BYTE CHR├╥
- .ASC "╔NSUFFICIENT MEMORY, ABORTING."
- .BYTE CHR├╥,0
-
- NEWMAX .BUF 1
-
- TPA╨AGE┴LLOC = * ;( LIB╨AGES ) : [MP]
- LDA LIB╨AGES
- CMP TPA╞REE═IN
- BCS TPA╞REEMAP╞ULL
- ;** FIRST FREE
- LDX TPA╞REE╞IRST
- LDA TPA╞REEMAP,X
- BEQ ++
- - INX
- BEQ TPA╞REEMAP╞ULL
- LDA TPA╞REEMAP,X
- BNE -
- STX TPA╞REE╞IRST
- JMP ++
- TPA╞REEMAP╞ULL = *
- LDA LIB╨AGES
- CMP TPA╞REE═IN
- BCS +
- STA TPA╞REE═IN
- + SEC
- RTS
-
- ;** SEARCH
- + DEX
- - LDY LIB╨AGES
- - INX
- BEQ TPA╞REEMAP╞ULL
- LDA TPA╞REEMAP,X
- BNE --
- DEY
- BNE -
-
- ;** ALLOCATE
- STX NEWMAX
- LDY LIB╨AGES
- LDA #$41
- - STA TPA╞REEMAP,X
- DEX
- DEY
- BNE -
- INX
- CPX TPA╞REE╞IRST
- BNE +
- LDY NEWMAX
- INY
- STY TPA╞REE╞IRST
- + SEC
- LDA TPA╞REE╨AGES
- SBC LIB╨AGES
- STA TPA╞REE╨AGES
- LDA #0
- LDY #ACE═EM╔NTERNAL
- STA MP+0
- STX MP+1
- STA MP+2
- STY MP+3
- CLC
- RTS
-
- MALLOC╠EN╙AVE .BUF 3
-
- MALLOC = *
- STA MALLOC╠EN╙AVE+0
- STY MALLOC╠EN╙AVE+1
- JSR LIB═ALLOC
- BCS +
- RTS
- + LDX MALLOC╠EN╙AVE+1
- LDA MALLOC╠EN╙AVE+0
- BEQ +
- INX
- + TXA
- CPX #>1024
- BCS +
- LDX #>1024
- + TXA
- STA MALLOC╠EN╙AVE+2
- JSR LIB╨AGE┴LLOC
- BCC +
- RTS
- + LDA #0
- LDY MALLOC╠EN╙AVE+2
- JSR FREE
- LDA MALLOC╠EN╙AVE+0
- LDY MALLOC╠EN╙AVE+1
- JMP MALLOC
-
- ;*** MALLOC( .┴┘=┬YTES ) : [MP]=╞AR╨OINTER
-
- MALLOC═EM╬EXT╨TR = MALLOC╫ORK+0 ;(4)
- MALLOC═EM╠ENGTH = MALLOC╫ORK+4 ;(2)
- MALLOC╠ENGTH = MALLOC╫ORK+6 ;(2)
- MALLOC╤ = MALLOC╫ORK+8 ;(4)
-
- LIB═ALLOC = *
- CLC
- ADC #7
- BCC +
- INY
- + AND #$F8
- STA MALLOC╠ENGTH
- STY MALLOC╠ENGTH+1
- LDX #3
- - LDA MALLOC╚EAD,X
- STA MP,X
- LDA #ACE═EM╬ULL
- STA MALLOC╤,X
- DEX
- BPL -
-
- MALLOC╠OOK = *
- LDA MP+3
- CMP #ACE═EM╬ULL
- BNE +
-
- MALLOC┼RROR┼XIT = *
- LDA #ACE═EM╬ULL
- STA MP+3
- LDA #ACE┼RR╔NSUFFICIENT═EMORY
- STA ERRNO
- SEC
- RTS
-
- + LDX #MALLOC═EM╬EXT╨TR
- LDY #6
- JSR ZPLOAD
- LDA MALLOC═EM╠ENGTH
- CMP MALLOC╠ENGTH
- LDA MALLOC═EM╠ENGTH+1
- SBC MALLOC╠ENGTH+1
- BCS MALLOC╟OT┬LOCK
- LDX #3
- - LDA MP,X
- STA MALLOC╤,X
- LDA MALLOC═EM╬EXT╨TR,X
- STA MP,X
- DEX
- BPL -
- JMP MALLOC╠OOK
-
- MALLOC╟OT┬LOCK = *
- LDA MALLOC═EM╠ENGTH
- CMP MALLOC╠ENGTH
- BNE +
- LDA MALLOC═EM╠ENGTH+1
- SBC MALLOC╠ENGTH+1
- BEQ MALLOC╘AKE╫HOLE┬LOCK
- + SEC
- LDA MALLOC═EM╠ENGTH
- SBC MALLOC╠ENGTH
- STA MALLOC═EM╠ENGTH
- LDA MALLOC═EM╠ENGTH+1
- SBC MALLOC╠ENGTH+1
- STA MALLOC═EM╠ENGTH+1
- LDX #MALLOC═EM╬EXT╨TR
- LDY #6
- JSR ZPSTORE
- CLC
- LDA MP+0
- ADC MALLOC═EM╠ENGTH
- STA MP+0
- LDA MP+1
- ADC MALLOC═EM╠ENGTH+1
- STA MP+1
- CLC
- RTS
-
- MALLOC╘AKE╫HOLE┬LOCK = *
- LDA MALLOC╤+3
- CMP #ACE═EM╬ULL
- BNE +
- LDX #3
- - LDA MALLOC═EM╬EXT╨TR,X
- STA MALLOC╚EAD,X
- DEX
- BPL -
- CLC
- RTS
- + LDX #3
- - LDA MP,X
- LDY MALLOC╤,X
- STA MALLOC╤,X
- STY MP,X
- DEX
- BPL -
- LDX #MALLOC═EM╬EXT╨TR
- LDY #4
- JSR ZPSTORE
- LDX #3
- - LDA MALLOC╤,X
- STA MP,X
- DEX
- BPL -
- CLC
- RTS
-
- ;*** FREE( [MP]=╞AR╨OINTER, .┴┘=╠ENGTH ) █ALTERS [MP]▌
-
- FREE═EM╬EXT╨TR = MALLOC╫ORK+0 ;(4)
- FREE═EM╠ENGTH = MALLOC╫ORK+4 ;(2)
- FREE╠ENGTH = MALLOC╫ORK+6 ;(2)
- FREE╬EW╨TR = MALLOC╫ORK+8 ;(4)
- FREE╤ = MALLOC╫ORK+12 ;(4)
-
- FREE = *
- CLC
- ADC #7
- BCC +
- INY
- + AND #$F8
- STA FREE╠ENGTH+0
- STY FREE╠ENGTH+1
- LDX #3
- - LDA MP,X
- STA FREE╬EW╨TR,X
- LDA MALLOC╚EAD,X
- STA MP,X
- LDA #ACE═EM╬ULL
- STA FREE╤,X
- DEX
- BPL -
-
- FREE╙EARCH╠OOP = *
- LDA MP+3
- CMP #ACE═EM╬ULL
- BEQ FREE├OALESCE╤AND╬EW
- LDA MP+0
- CMP FREE╬EW╨TR+0
- LDA MP+1
- SBC FREE╬EW╨TR+1
- LDA MP+2
- SBC FREE╬EW╨TR+2
- LDA MP+3
- SBC FREE╬EW╨TR+3
- BCS FREE├OALESCE╤AND╬EW
- + LDX #FREE═EM╬EXT╨TR
- LDY #4
- JSR ZPLOAD
- LDX #3
- - LDA MP,X
- STA FREE╤,X
- LDA FREE═EM╬EXT╨TR,X
- STA MP,X
- DEX
- BPL -
- BMI FREE╙EARCH╠OOP
-
- FREE├OALESCE╤AND╬EW = *
- LDX #3
- - LDA FREE╤,X
- STA MP,X
- DEX
- BPL -
- LDA MP+3
- CMP #ACE═EM╬ULL
- BNE +
- ;** PREV IS HEAD
- LDX #3
- - LDA MALLOC╚EAD,X
- STA FREE═EM╬EXT╨TR,X
- LDA FREE╬EW╨TR,X
- STA MALLOC╚EAD,X
- DEX
- BPL -
- LDA FREE╠ENGTH+0
- LDY FREE╠ENGTH+1
- STA FREE═EM╠ENGTH+0
- STY FREE═EM╠ENGTH+1
- JMP FREE├OALESCE╬EW┴ND╨
-
- ;** PREV IS REAL
- + LDX #FREE═EM╬EXT╨TR
- LDY #6
- JSR ZPLOAD
- LDA MP+3
- CMP FREE╬EW╨TR+3
- BNE +
- LDA MP+2
- CMP FREE╬EW╨TR+2
- BNE +
- CLC
- LDA MP+0
- ADC FREE═EM╠ENGTH
- TAX
- LDA MP+1
- ADC FREE═EM╠ENGTH+1
- CMP FREE╬EW╨TR+1
- BNE +
- CPX FREE╬EW╨TR
- BNE +
- ;** PREV DOES COALESCE
- CLC
- LDA FREE═EM╠ENGTH
- ADC FREE╠ENGTH
- STA FREE═EM╠ENGTH
- LDA FREE═EM╠ENGTH+1
- ADC FREE╠ENGTH+1
- STA FREE═EM╠ENGTH+1
- LDX #3
- - LDA FREE╤,X
- STA FREE╬EW╨TR,X
- DEX
- BPL -
- BMI FREE├OALESCE╬EW┴ND╨
-
- ;** PREV DOES NOT COALESCE
- + LDX #FREE╬EW╨TR
- LDY #4
- JSR ZPSTORE
- LDA FREE╠ENGTH+0
- LDY FREE╠ENGTH+1
- STA FREE═EM╠ENGTH+0
- STY FREE═EM╠ENGTH+1
-
- FREE├OALESCE╬EW┴ND╨ = *
- LDA FREE╬EW╨TR+3
- CMP FREE═EM╬EXT╨TR+3
- BNE +
- LDA FREE╬EW╨TR+2
- CMP FREE═EM╬EXT╨TR+2
- BNE +
- CLC
- LDA FREE╬EW╨TR
- ADC FREE═EM╠ENGTH
- TAX
- LDA FREE╬EW╨TR+1
- ADC FREE═EM╠ENGTH+1
- CMP FREE═EM╬EXT╨TR+1
- BNE +
- CPX FREE═EM╬EXT╨TR
- BNE +
-
- ;** NEW AND NEXT COALESCE
- LDX #3
- - LDA FREE═EM╬EXT╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA FREE═EM╠ENGTH+1
- PHA
- LDA FREE═EM╠ENGTH+0
- PHA
- LDX #FREE═EM╬EXT╨TR
- LDY #6
- JSR ZPLOAD
- CLC
- PLA
- ADC FREE═EM╠ENGTH+0
- STA FREE═EM╠ENGTH+0
- PLA
- ADC FREE═EM╠ENGTH+1
- STA FREE═EM╠ENGTH+1
-
- + LDX #3
- - LDA FREE╬EW╨TR,X
- STA MP,X
- DEX
- BPL -
- LDX #FREE═EM╬EXT╨TR
- LDY #6
- JSR ZPSTORE
- CLC
- RTS
-
- ;=== LINE ╔/╧ ROUTINES ===
-
- YSAVE = $70
-
- GETLINE = * ;( INFILE ) : SORTLINE, .├╙=EOF
- LDY #0
- - STY YSAVE
- JSR GET┬YTE
- LDY YSAVE
- BCS +
- STA SORTLINE,Y
- INY
- CPY #240
- BCS GETLINE┼XIT
- CMP #13
- BNE -
- DEY
-
- GETLINE┼XIT = *
- LDA #0
- STA SORTLINE,Y
- CLC
- TYA
- ADC #6
- STA SORTBUFLEN
- CLC
- + RTS
-
- PUTLINE = * ;( SORTBUF )
- JSR STOPKEY
- BCC +
- JSR STOPPED
- + LDY SORTBUFLEN
- LDA #13
- STA SORTBUF-1,Y
- LDA #<SORTLINE
- LDY #>SORTLINE
- STA ZP+0
- STY ZP+1
- SEC
- LDA SORTBUFLEN
- SBC #5
- LDY #0
- LDX #STDOUT
- JSR WRITE
- LDY SORTBUFLEN
- LDA #0
- STA SORTBUF-1,Y
- RTS
-
- GET┬YTE = *
- LDA BUF├OUNT
- BEQ GET┬YTE╞ILL┬UF
- LDY BUF╨TR
- LDA IN┬UF,Y
- INC BUF╨TR
- DEC BUF├OUNT
- CLC
- RTS
-
- GET┬YTE╞ILL┬UF = *
- JSR STOPKEY
- BCC +
- JSR STOPPED
- + LDA #<IN┬UF
- LDY #>IN┬UF
- STA ZP+0
- STY ZP+1
- LDA #254
- LDY #0
- STY BUF╨TR
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUF├OUNT
- JMP GET┬YTE
- + SEC
- RTS
-
- ;===BSS===
-
- BSS = *
- SORTBUF = BSS+0
- SORTBUFLEN = SORTBUF+4
- SORTLINE = SORTBUF+5
- CMPBUF = SORTBUF+256
- CMPBUFLEN = CMPBUF+4
- CMPLINE = CMPBUF+5
- IN┬UF = CMPBUF+256
- TPA╞REEMAP = IN┬UF+256
- BSS┼ND = TPA╞REEMAP+256
-