home *** CD-ROM | disk | FTP | other *** search
- ;*** GREP PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:GREP"
-
- JMP GREP═AIN
- .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
-
- INVERSE╞LAG .BUF 1
- IGNORE├ASE╞LAG .BUF 1
- DISPLAY╞ILENAME╞LAG .BUF 1
- ANCHOR╠EFT╞LAG .BUF 1
- ANCHOR╥IGHT╞LAG .BUF 1
- STRING╠EN .BUF 1
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- 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
- 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
- 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
- ROL ZP+1
- CLC
- LDA ACE┴RGV
- ADC ZP
- STA ZP
- LDA ACE┴RGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- CHECKSTOP = *
- JSR STOPKEY
- BCS +
- RTS
- + LDA #<STOPPED═SG
- LDY #>STOPPED═SG
- JSR EPUTS
- LDA #1
- LDX #0
- JMP EXIT
- STOPPED═SG = *
- .ASC "<╙TOPPED>"
- .BYTE CHR├╥,0
-
- ;===GREP===
- GREP┴RG = 2
- GREP╬AME = 4
- IN┬UF╠EN = 6
- GREP╙TRING = 8
-
- GREP═AIN = *
- ;** CHECK ARGUMENT COUNT
- LDA #0
- STA INVERSE╞LAG
- STA IGNORE├ASE╞LAG
- STA DISPLAY╞ILENAME╞LAG
- STA ANCHOR╠EFT╞LAG
- STA ANCHOR╥IGHT╞LAG
- LDA ACE┴RGC+1
- BNE GREP┼NOUGH┴RGS
- LDA ACE┴RGC
- CMP #3
- BCS GREP┼NOUGH┴RGS
-
- GREP╒SAGE = *
- LDA #<GREP╒SAGE═SG
- LDY #>GREP╒SAGE═SG
- JMP EPUTS
-
- GREP╒SAGE═SG = *
- .ASC "USAGE: GREP [-[I][V]] [^]SUBSTR[$] FILES"
- .BYTE CHR├╥,0
-
- GREP┼NOUGH┴RGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACE═EM╘OP+0
- SBC #<GREP╔N┬UF
- STA IN┬UF╠EN
- LDA ACE═EM╘OP+1
- SBC #>GREP╔N┬UF
- STA IN┬UF╠EN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA GREP┴RG
- STY GREP┴RG+1
- JSR GETARG
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE SUBSTR┴RG
- INC GREP┴RG
- - INY
- LDA (ZP),Y
- BEQ SUBSTR┴RG
- CMP #"I"
- BNE +
- LDA #$FF
- STA IGNORE├ASE╞LAG
- + CMP #"V"
- BNE +
- LDA #$FF
- STA INVERSE╞LAG
- + JMP -
-
- SUBSTR┴RG = *
- LDA GREP┴RG
- LDY #0
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA GREP╙TRING
- STY GREP╙TRING+1
- BIT IGNORE├ASE╞LAG
- BPL +
- JSR FOLD╙TRING
- + JSR CHECK┴NCHORS
- INC GREP┴RG
-
- FIRST┴RG = *
- LDA GREP┴RG
- LDY #0
- JSR GETARG
- LDA ZP
- ORA ZP+1
- BNE +
- JMP GREP╒SAGE
- + CLC
- LDA GREP┴RG
- ADC #1
- LDY #0
- JSR GETARG
- LDA ZP
- ORA ZP+1
- BEQ NEXT┴RG
- LDA #$FF
- STA DISPLAY╞ILENAME╞LAG
-
- NEXT┴RG = *
- JSR CHECKSTOP
- LDA GREP┴RG
- LDY GREP┴RG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA GREP╬AME
- STY GREP╬AME+1
- ORA ZP+1
- BEQ GREP┼XIT
- JSR GREP
- BCC +
- JSR GREP┼RROR
- + INC GREP┴RG
- BNE +
- INC GREP┴RG+1
- + JMP NEXT┴RG
-
- GREP┼XIT = *
- RTS
-
- FOLD╙TRING = *
- LDY #0
- - LDA (GREP╙TRING),Y
- BNE +
- RTS
- + CMP #"┴"
- BCC +
- CMP #"┌"+1
- BCS +
- SEC
- SBC #"┴"-"A"
- STA (GREP╙TRING),Y
- + INY
- BNE -
- RTS
-
- CHECK┴NCHORS = *
- LDY #0
- LDA (GREP╙TRING),Y
- CMP #"^"
- BNE +
- LDA #$FF
- STA ANCHOR╠EFT╞LAG
- INC GREP╙TRING
- BNE +
- INC GREP╙TRING+1
- + LDY #255
- - INY
- LDA (GREP╙TRING),Y
- BNE -
- STY STRING╠EN
- DEY
- CPY #255
- BEQ +
- LDA (GREP╙TRING),Y
- CMP #"$"
- BNE +
- LDA #$FF
- STA ANCHOR╥IGHT╞LAG
- LDA #0
- STA (GREP╙TRING),Y
- STY STRING╠EN
- + RTS
-
- GREP┼RROR = *
- LDA #<GREP┼RROR═SG1
- LDY #>GREP┼RROR═SG1
- JSR EPUTS
- LDA GREP╬AME
- LDY GREP╬AME+1
- JSR EPUTS
- LDA #<GREP┼RROR═SG2
- LDY #>GREP┼RROR═SG2
- JMP EPUTS
-
- GREP┼RROR═SG1 = *
- .ASC "┼RROR READING FILE "
- .BYTE CHR╤UOTE,0
-
- GREP┼RROR═SG2 = *
- .BYTE CHR╤UOTE,CHR├╥,0
-
- BUF╨TR = 10
- BUF├OUNT = 12
- INFILE = 14
-
- GREP = *
- ;** OPEN FILE
- LDA GREP╬AME
- LDY GREP╬AME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** ENCODE FILE
- JSR GREP┬ODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- LINE╠EN = $40 ;(2)
- LINE╨TR = $42 ;(2)
-
- GREP┬ODY = *
- LDA #0
- STA BUF├OUNT
- STA BUF├OUNT+1
- - JSR GETLINE
- BCC +
- RTS
- + JSR CHECK╠INE
- BIT INVERSE╞LAG
- BMI +
- BCC -
- JSR WRITE╠INE
- JMP -
- + BCS -
- JSR WRITE╠INE
- JMP -
-
- LINE╥ESET = $44 ;(2)
- STRING╨OS = $46 ;(1)
-
- CHECK╠INE = * ;() : .├├=NO_MATCH, .├╙=MATCH
- BIT ANCHOR╥IGHT╞LAG
- BPL CHECK╙UBSTR
- CLC
- LDA LINE╨TR
- ADC LINE╠EN
- STA LINE╨TR
- LDA LINE╨TR+1
- ADC LINE╠EN+1
- STA LINE╨TR+1
- SEC
- LDA LINE╨TR
- SBC STRING╠EN
- STA LINE╨TR
- LDA LINE╨TR+1
- SBC #0
- STA LINE╨TR+1
-
- CHECK╙UBSTR = *
- LDA LINE╨TR
- LDY LINE╨TR+1
- STA LINE╥ESET
- STY LINE╥ESET+1
- INC LINE╥ESET
- BNE +
- INC LINE╥ESET+1
- + LDY #0
- STY STRING╨OS
-
- CHECK├HAR = *
- + LDY STRING╨OS
- LDA (GREP╙TRING),Y
- BEQ END╧F╙TRING
- LDY #0
- CMP (LINE╨TR),Y
- BNE MISMATCH
- - INC STRING╨OS
- INC LINE╨TR
- BNE +
- INC LINE╨TR+1
- + JMP CHECK├HAR
-
- MISMATCH = *
- LDY #0
- LDA (LINE╨TR),Y
- BEQ END╧F╠INE
- BIT IGNORE├ASE╞LAG
- BPL +
- CMP #"┴"
- BCC +
- CMP #"┌"+1
- BCS +
- SEC
- SBC #"┴"-"A"
- LDY STRING╨OS
- CMP (GREP╙TRING),Y
- BEQ -
- + LDA LINE╥ESET
- LDY LINE╥ESET+1
- STA LINE╨TR
- STY LINE╨TR+1
- JMP CHECK╙UBSTR
-
- END╧F╠INE = *
- CLC
- RTS
-
- END╧F╙TRING = *
- BIT ANCHOR╠EFT╞LAG
- BMI +
- SEC
- RTS
- + LDA LINE╥ESET
- BNE +
- DEC LINE╥ESET+1
- + DEC LINE╥ESET
- LDA LINE╥ESET
- CMP #<GREP╠INE
- BNE END╧F╠INE
- LDA LINE╥ESET+1
- CMP #>GREP╠INE
- BNE END╧F╠INE
- SEC
- RTS
-
- WRITE╠INE = *
- LDA DISPLAY╞ILENAME╞LAG
- BEQ +
- LDA GREP╬AME
- LDY GREP╬AME+1
- JSR PUTS
- LDA #":"
- JSR PUTCHAR
- + LDA #<GREP╠INE
- LDY #>GREP╠INE
- STA ZP
- STY ZP+1
- LDA LINE╠EN
- LDY LINE╠EN+1
- LDX #STDOUT
- JSR WRITE
- LDA #CHR├╥
- JSR PUTCHAR
- RTS
-
- GETLINE = * ;() : LINE╠EN, LINE╨TR
- ;** IGNORES CHARS BEYOND MAX LINE LEN, IGNORES LAST LINE NOT ENDING IN ├╥,
- ;** LINE ENDS WITH \0
- LDA #0
- STA LINE╠EN
- STA LINE╠EN+1
- LDA #<GREP╠INE
- LDY #>GREP╠INE
- STA LINE╨TR
- STY LINE╨TR+1
- - JSR GET┬YTE
- BCC +
- RTS
- + CMP #CHR├╥
- BNE +
- LDA #0
- LDY #0
- STA (LINE╨TR),Y
- LDA #<GREP╠INE
- LDY #>GREP╠INE
- STA LINE╨TR
- STY LINE╨TR+1
- CLC
- RTS
- + LDX LINE╠EN+1
- CPX #>MAX╠INE╠EN
- BCS -
- LDY #0
- STA (LINE╨TR),Y
- INC LINE╨TR
- BNE +
- INC LINE╨TR+1
- + INC LINE╠EN
- BNE +
- INC LINE╠EN+1
- + JMP -
-
- GET┬YTE = *
- LDA BUF├OUNT
- ORA BUF├OUNT+1
- BEQ GET┬YTE╞ILL┬UF
- LDY #0
- LDA (BUF╨TR),Y
- INC BUF╨TR
- BNE +
- INC BUF╨TR+1
- + LDX BUF├OUNT
- BNE +
- DEC BUF├OUNT+1
- + DEC BUF├OUNT
- CLC
- RTS
-
- GET┬YTE╞ILL┬UF = *
- JSR CHECKSTOP
- LDA #<GREP╔N┬UF
- LDY #>GREP╔N┬UF
- STA ZP
- STY ZP+1
- STA BUF╨TR
- STY BUF╨TR+1
- LDA IN┬UF╠EN
- LDY IN┬UF╠EN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUF├OUNT
- STY BUF├OUNT+1
- JMP GET┬YTE
- + SEC
- RTS
-
- ;===THE END===
- GREP┬SS = *
- GREP╠INE = GREP┬SS
- GREP╔N┬UF = GREP╠INE+MAX╠INE╠EN
-