From a66047ccd5ff6d5d43494bd35140caaa37efb365 Mon Sep 17 00:00:00 2001 From: burniouf Date: Mon, 10 Oct 2022 13:58:50 +0200 Subject: [PATCH] GREP --- .Docs/Commands.md | 21 ++++++ .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/GREP.S.txt | 139 ++++++++++++++++++++++++++------------- 3 files changed, 114 insertions(+), 46 deletions(-) diff --git a/.Docs/Commands.md b/.Docs/Commands.md index 8683d644..fb56154a 100644 --- a/.Docs/Commands.md +++ b/.Docs/Commands.md @@ -24,6 +24,27 @@ exists, thus return value is limited to whether or not a valid argument was given. +# GREP +Print lines that match patterns + +## Arguments +**-H** +Help screen +**-I** +Ignoce case +**-N** +Print line number +**-Q** +Quiet mode +**-S** +Silent mode +**-V** +Invert match + +## Return Value +if **-Q** specified, always 0 +otherwise, 0 if a match found, E.NOKEY if not + # MKDIR Create directories diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 9b11998232d488c3e6949c90b8b2ddbef769b3a9..11440fa1914f854e432ab84d98579b8989624f1a 100644 GIT binary patch delta 6325 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 delta 4848 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 256 + >SYSCALL GetMem + bcs .99 -CS.RUN.LOOP >SLEEP + >STYA ZPBufPtr + stx hBuf + +.1 >SLEEP >PUSHB hFile >PUSHW ZPBufPtr >PUSHWI 256 >SYSCALL FGetS - bcs .9 + bcs .7 inc LineNum bne .2 @@ -79,20 +109,30 @@ CS.RUN.LOOP >SLEEP .2 jsr CS.RUN.PRINT - bcc CS.RUN.LOOP + bcc .1 + rts -.9 cmp #MLI.E.EOF - bne .99 +.7 cmp #MLI.E.EOF + bne .98 + + lda bQuiet + bmi .8 + + bit bFound + bmi .8 + + lda #E.NOKEY + sec + rts - lda #0 Exit with no Error - -.99 sec -CS.RUN.LOOP.RTS rts +.8 lda #0 Exit with no Error +.98 sec +.99 rts *-------------------------------------- CS.RUN.CheckArgs jsr CS.RUN.NextArg - bcs .4 + bcs .7 lda (ZPPtr1) cmp #'-' @@ -116,31 +156,36 @@ CS.RUN.CheckArgs sta hFile bra CS.RUN.CheckArgs - +*-------------------------------------- .1 ldy #1 lda (ZPPtr1),y + beq .97 - ldx #OptionList.Cnt-1 +.2 ldx #OptionList.Cnt-1 -.2 cmp OptionList,x - beq .3 +.3 cmp OptionList,x + beq .4 dex - bpl .2 + bpl .3 bra .97 -.3 txa +.4 txa lsr - beq .98 + beq .98 -H or -h tax - lda #$80 - sta bIgnoreCase-1,x - bra CS.RUN.CheckArgs + sec + ror bIgnoreCase-1,x + iny + lda (ZPPtr1),y + bne .2 -.4 lda hFile - bne .80 + bra CS.RUN.CheckArgs +*-------------------------------------- +.7 lda hFile + bne .8 ldy #S.PS.hStdIn lda (pPS),y @@ -157,17 +202,10 @@ CS.RUN.CheckArgs lda (pPS),y sta hFile -.80 >LDYAI 256 - >SYSCALL GetMem - bcs .9 - - >STYA ZPBufPtr - stx hBuf - -* clc +.8 clc .9 rts - +*-------------------------------------- .97 lda #E.SYN .98 pha @@ -239,7 +277,14 @@ CS.RUN.PRINT >LDYA ZPBufPtr eor bInvertMatch bpl .8 - lda bLineNum + sec + ror bFound + + lda bQuiet + ora bSilent + bmi .8 + + bit bLineNum bpl .7 >PUSHW L.MSG.NUMLINE @@ -286,16 +331,18 @@ CS.DOEVENT sec *-------------------------------------- CS.END *-------------------------------------- -OptionList .AS "HhIiNnVv" +OptionList .AS "HhIiNnQqSsVv" 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\r\n" - .AS " -V : Invert Match" -MSG.CRLF .AZ "\r\n" -MSG.NUMLINE .AZ "%5D:" +MSG.USAGE .CS "Usage : GREP or CMD|GREP \r\n" + .CS " -H : This help screen\r\n" + .CS " -I : Ignore Case\r\n" + .CS " -N : Print line Number\r\n" + .CS " -Q : Quiet Mode\r\n" + .CS " -S : Silent Mode\r\n" + .CS " -V : Invert Match" +MSG.CRLF .CZ "\r\n" +MSG.NUMLINE .CZ "%5D:" *-------------------------------------- .DUMMY .OR 0