A2osX/BIN/GREP.S.txt

308 lines
5.0 KiB
Plaintext
Raw Normal View History

2019-03-13 11:37:05 +00:00
NEW
2020-03-03 16:44:52 +00:00
AUTO 3,1
2019-03-13 11:37:05 +00:00
.LIST OFF
.OP 65C02
.OR $2000
2020-03-03 16:44:52 +00:00
.TF bin/grep
2019-03-13 11:37:05 +00:00
*--------------------------------------
2020-05-25 21:03:11 +00:00
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/kernel.i
.INB inc/mli.i
.INB inc/mli.e.i
2019-03-13 11:37:05 +00:00
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ArgIndex .BS 1
ArgPattern .BS 1
2020-08-17 20:47:31 +00:00
ZPPtr1 .BS 2
2019-03-13 11:37:05 +00:00
ZPPatternPtr .BS 2
ZPBufPtr .BS 2
hFile .BS 1
hBuf .BS 1
LineNum .BS 2
char .BS 1
2021-04-16 19:17:18 +00:00
2019-03-13 11:37:05 +00:00
bIgnoreCase .BS 1
bLineNum .BS 1
2021-04-15 20:52:08 +00:00
bInvertMatch .BS 1
2021-04-16 19:17:18 +00:00
2020-08-17 20:47:31 +00:00
ZS.END .ED
2019-03-13 11:37:05 +00:00
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
2019-10-03 06:25:27 +00:00
*--------------------------------------
2019-03-13 11:37:05 +00:00
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.CRLF .DA MSG.CRLF
L.MSG.NUMLINE .DA MSG.NUMLINE
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
2021-04-15 20:52:08 +00:00
CS.RUN jsr CS.RUN.CheckArgs
bcs CS.RUN.LOOP.RTS
stz LineNum
stz LineNum+1
CS.RUN.LOOP >SLEEP
>PUSHB hFile
>PUSHW ZPBufPtr
>PUSHWI 256
>SYSCALL FGetS
bcs .9
inc LineNum
bne .2
inc LineNum+1
.2 jsr CS.RUN.PRINT
bcc CS.RUN.LOOP
rts
.9 cmp #MLI.E.EOF
bne .99
lda #0 Exit with no Error
.99 sec
CS.RUN.LOOP.RTS rts
*--------------------------------------
CS.RUN.CheckArgs
jsr CS.RUN.NextArg
bcs .4
2019-03-13 11:37:05 +00:00
lda (ZPPtr1)
cmp #'-'
beq .1
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
lda ArgPattern
bne .11
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
lda ArgIndex
sta ArgPattern
>LDYA ZPPtr1
>STYA ZPPatternPtr
2021-04-15 20:52:08 +00:00
bra CS.RUN.CheckArgs
2019-03-13 11:37:05 +00:00
.11 lda hFile
bne .97
>LDYA ZPPtr1
jsr CS.RUN.OPEN
bcs .9
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
sta hFile
2021-04-15 20:52:08 +00:00
bra CS.RUN.CheckArgs
2019-10-03 06:25:27 +00:00
2019-03-13 11:37:05 +00:00
.1 ldy #1
lda (ZPPtr1),y
ldx #OptionList.Cnt-1
2021-04-16 19:17:18 +00:00
2019-03-13 11:37:05 +00:00
.2 cmp OptionList,x
beq .3
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
dex
bpl .2
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
bra .97
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
.3 txa
2021-04-16 19:17:18 +00:00
lsr
2019-03-13 11:37:05 +00:00
beq .98
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
tax
lda #$80
sta bIgnoreCase-1,x
2021-04-15 20:52:08 +00:00
bra CS.RUN.CheckArgs
.4 lda hFile
2019-03-13 11:37:05 +00:00
bne .80
2019-10-26 14:33:37 +00:00
2019-03-13 11:37:05 +00:00
ldy #S.PS.hStdIn
lda (pPS),y
tax
2020-12-15 13:23:22 +00:00
2021-07-24 20:42:23 +00:00
lda hFDs-1,x
2019-03-13 11:37:05 +00:00
>SYSCALL GetMemPtr
>STYA ZPPtr1
lda (ZPPtr1)
cmp #S.FD.T.PIPE
bne .97
2019-10-26 14:33:37 +00:00
ldy #S.PS.hStdIn
lda (pPS),y
sta hFile
2019-03-13 11:37:05 +00:00
.80 >LDYAI 256
>SYSCALL GetMem
bcs .9
2020-12-23 14:54:57 +00:00
2019-03-13 11:37:05 +00:00
>STYA ZPBufPtr
stx hBuf
2021-04-15 20:52:08 +00:00
* clc
2020-12-23 14:54:57 +00:00
2021-04-15 20:52:08 +00:00
.9 rts
2019-03-13 11:37:05 +00:00
2021-04-15 20:52:08 +00:00
.97 lda #E.SYN
2021-04-16 19:17:18 +00:00
2021-04-15 20:52:08 +00:00
.98 pha
>PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
pla
sec
2019-03-13 11:37:05 +00:00
rts
*--------------------------------------
2021-04-15 20:52:08 +00:00
CS.RUN.NextArg inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .9
2021-04-16 19:17:18 +00:00
2021-04-15 20:52:08 +00:00
>STYA ZPPtr1
.9 rts
*--------------------------------------
2020-03-03 16:44:52 +00:00
CS.RUN.OPEN >PUSHYA
2019-03-13 11:37:05 +00:00
>PUSHBI O.RDONLY+O.TEXT
2020-03-03 16:44:52 +00:00
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
2019-03-13 11:37:05 +00:00
>SYSCALL FOpen
bcs .9
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
sta hFile
.9 rts
*--------------------------------------
CS.RUN.PRINT >LDYA ZPBufPtr
>STYA ZPPtr1
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
.1 lda (ZPPtr1)
2021-04-16 19:17:18 +00:00
beq .4
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
ldy #$ff
.2 iny
lda (ZPPtr1),y
bne .3
lda (ZPPatternPtr),y
2021-04-15 20:52:08 +00:00
bne .4
2019-03-13 11:37:05 +00:00
.3 lda (ZPPatternPtr),y
beq .6
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
jsr CS.RUN.toUpper
sta char
lda (ZPPtr1),y
jsr CS.RUN.toUpper
cmp char
beq .2
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
inc ZPPtr1
bne .1
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
inc ZPPtr1+1
bra .1
2021-04-15 20:52:08 +00:00
.4 clc not matching
2019-03-13 11:37:05 +00:00
2021-04-15 20:52:08 +00:00
.HS B0 BCS
.6 sec matching
ror
eor bInvertMatch
bpl .8
lda bLineNum
2019-03-13 11:37:05 +00:00
bpl .7
2020-01-29 21:45:06 +00:00
>PUSHW L.MSG.NUMLINE
2019-03-13 11:37:05 +00:00
>PUSHW LineNum
>PUSHBI 2
2020-02-28 07:21:46 +00:00
>SYSCALL PrintF
2019-03-13 11:37:05 +00:00
bcs .9
2021-04-15 20:52:08 +00:00
2019-03-13 11:37:05 +00:00
.7 >LDYA ZPBufPtr
2020-02-28 07:21:46 +00:00
>SYSCALL PutS
2019-03-13 11:37:05 +00:00
rts
.8 clc
.9 rts
*--------------------------------------
CS.RUN.toUpper bit bIgnoreCase
bpl .9
2021-04-16 19:17:18 +00:00
2019-03-13 11:37:05 +00:00
cmp #'a'
bcc .9
2021-04-16 19:17:18 +00:00
2019-03-13 11:37:05 +00:00
cmp #'z'+1
bcs .9
2021-04-16 19:17:18 +00:00
2019-03-13 11:37:05 +00:00
eor #$20
.9 rts
*--------------------------------------
2020-08-17 20:47:31 +00:00
CS.QUIT lda hFile
2019-03-13 11:37:05 +00:00
beq .1
2019-10-26 14:33:37 +00:00
>SYSCALL FClose
2019-03-13 11:37:05 +00:00
2019-10-26 14:33:37 +00:00
.1 lda hBuf
beq .8
>SYSCALL FreeMem
2019-03-13 11:37:05 +00:00
.8 clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.END
*--------------------------------------
2021-04-16 19:17:18 +00:00
OptionList .AS "HhIiNnVv"
2019-03-13 11:37:05 +00:00
OptionList.Cnt .EQ *-OptionList
*--------------------------------------
MSG.USAGE .AS "Usage : GREP <pattern> <File> or CMD|GREP <pattern>\r\n"
.AS " -H : This help screen\r\n"
.AS " -I : Ignore Case\r\n"
2021-04-15 20:52:08 +00:00
.AS " -N : Print line Number\r\n"
.AS " -V : Invert Match"
2019-03-13 11:37:05 +00:00
MSG.CRLF .AZ "\r\n"
MSG.NUMLINE .AZ "%5D:"
*--------------------------------------
.DUMMY
.OR 0
DS.START
2019-10-26 14:33:37 +00:00
DS.END .ED
2019-03-13 11:37:05 +00:00
*--------------------------------------
MAN
2020-05-25 21:03:11 +00:00
SAVE usr/src/bin/grep.s
2019-03-13 11:37:05 +00:00
ASM