home *** CD-ROM | disk | FTP | other *** search
Text File | 2019-04-13 | 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 )