NEW PREFIX AUTO 4,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 stz ArgIndex stz ArgPattern stz hFile .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 >PUSHBI 0 >LDYA L.MSG.USAGE >SYSCALL printf pla sec .9 rts .8 lda hFile bne .80 ldy #S.PS.hStdIn lda (pPS),y tax lda OF.Table.hFD-1,x >SYSCALL GetMemPtr >STYA ZPPtr1 lda (ZPPtr1) cmp #S.FD.T.PIPE bne .97 .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 bne .1 ldy #S.PS.hStdIn lda (pPS),y .1 >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 pha >PUSHWZ Aux type >PUSHBI S.FI.T.TXT >PUSHBI O.RDONLY+O.TEXT pla >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 LineNum >PUSHBI 2 >LDYA L.MSG.NUMLINE >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 hBuf beq .1 >SYSCALL FreeMem .1 lda hFILE beq .2 >SYSCALL FClose .2 .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