NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF bin/grep *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/kernel.i .INB inc/mli.i .INB inc/mli.e.i *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ArgIndex .BS 1 ArgPattern .BS 1 ZPPtr1 .BS 2 ZPPatternPtr .BS 2 ZPBufPtr .BS 2 hFile .BS 1 hBuf .BS 1 LineNum .BS 2 char .BS 1 bIgnoreCase .BS 1 bLineNum .BS 1 ZS.END .ED *-------------------------------------- * 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 *-------------------------------------- .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 *-------------------------------------- CS.RUN .10 jsr CS.RUN.NextArg bcs .8 lda (ZPPtr1) cmp #'-' beq .1 lda ArgPattern bne .11 lda ArgIndex sta ArgPattern >LDYA ZPPtr1 >STYA ZPPatternPtr bra .10 .11 lda hFile bne .97 >LDYA ZPPtr1 jsr CS.RUN.OPEN bcs .9 sta hFile bra .10 .1 ldy #1 lda (ZPPtr1),y ldx #OptionList.Cnt-1 .2 cmp OptionList,x beq .3 dex bpl .2 bra .97 .3 txa beq .98 lsr tax lda #$80 sta bIgnoreCase-1,x bra .10 scan for any other args .97 lda #E.SYN .98 pha >PUSHW L.MSG.USAGE >PUSHBI 0 >SYSCALL PrintF pla sec .9 rts .8 lda hFile bne .80 ldy #S.PS.hStdIn lda (pPS),y tax lsr bcs .97 lda Nod.Table.hFD-2,x >SYSCALL GetMemPtr >STYA ZPPtr1 lda (ZPPtr1) cmp #S.FD.T.PIPE bne .97 ldy #S.PS.hStdIn lda (pPS),y sta hFile .80 >LDYAI 256 >SYSCALL GetMem bcs .9 >STYA ZPBufPtr stx hBuf stz LineNum stz LineNum+1 CS.RUN.LOOP >SLEEP >PUSHWI 256 >PUSHW ZPBufPtr lda hFile >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 rts *-------------------------------------- CS.RUN.OPEN >PUSHYA >PUSHBI O.RDONLY+O.TEXT >PUSHBI S.FI.T.TXT >PUSHWZ Aux type >SYSCALL FOpen bcs .9 sta hFile .9 rts *-------------------------------------- CS.RUN.PRINT >LDYA ZPBufPtr >STYA ZPPtr1 .1 lda (ZPPtr1) beq .8 ldy #$ff .2 iny lda (ZPPtr1),y bne .3 lda (ZPPatternPtr),y bne .8 .3 lda (ZPPatternPtr),y beq .6 jsr CS.RUN.toUpper sta char lda (ZPPtr1),y jsr CS.RUN.toUpper cmp char beq .2 inc ZPPtr1 bne .1 inc ZPPtr1+1 bra .1 .6 lda bLineNum bpl .7 >PUSHW L.MSG.NUMLINE >PUSHW LineNum >PUSHBI 2 >SYSCALL PrintF bcs .9 .7 >LDYA ZPBufPtr >SYSCALL PutS rts .8 clc .9 rts *-------------------------------------- CS.RUN.NextArg inc ArgIndex lda ArgIndex >SYSCALL ArgV bcs .9 >STYA ZPPtr1 .9 rts *-------------------------------------- CS.RUN.toUpper bit bIgnoreCase bpl .9 cmp #'a' bcc .9 cmp #'z'+1 bcs .9 eor #$20 .9 rts *-------------------------------------- CS.QUIT lda hFile beq .1 >SYSCALL FClose .1 lda hBuf beq .8 >SYSCALL FreeMem .8 clc rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.END *-------------------------------------- OptionList .AZ "HhIiNn" OptionList.Cnt .EQ *-OptionList *-------------------------------------- MSG.USAGE .AS "Usage : GREP or CMD|GREP \r\n" .AS " -H : This help screen\r\n" .AS " -I : Ignore Case\r\n" .AS " -N : Print line Number" MSG.CRLF .AZ "\r\n" MSG.NUMLINE .AZ "%5D:" *-------------------------------------- .DUMMY .OR 0 DS.START DS.END .ED *-------------------------------------- MAN SAVE usr/src/bin/grep.s ASM