Merge pull request #170 from A2osX/bobbi-cat-utils

Bobbi cat utils
This commit is contained in:
Rémy GIBERT 2021-07-05 19:25:10 +02:00 committed by GitHub
commit 7d1f7507a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 1489 additions and 956 deletions

View File

@ -1,376 +1,242 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF bin/cat .TF bin/cat
*-------------------------------------- *--------------------------------------
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i
.INB inc/kernel.i .INB inc/kernel.i
.INB inc/mli.i .INB inc/mli.i
.INB inc/mli.e.i .INB inc/mli.e.i
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR ZPBIN .OR ZPBIN
ZS.START ZS.START
ZPPtr1 .BS 2 ZPPtr1 .BS 2
ZPBufPtr .BS 2 ZPBufPtr .BS 2
ByteIndex .BS 1 ByteIndex .BS 1
ArgCount .BS 1 ArgCount .BS 1
FileCount .BS 1 FileCount .BS 1
bPause .BS 1 bPause .BS 1
bPrintAll .BS 1 bDummy .BS 1
bLineNum .BS 1 bIsTTY .BS 1
bSuppressBlankLine .BS 1 ArgIndex .BS 1
ArgIndex .BS 1 hBuf .BS 1
hBuf .BS 1 hFile .BS 1
hFile .BS 1 ZS.END .ED
LineNum .BS 2
bPrintedBlankLine .BS 1
ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02) .DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1 .DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT S.PS.F .DA #S.PS.F.EVENT S.PS.F
.DA #0 .DA #0
.DA CS.END-CS.START CS .DA CS.END-CS.START CS
.DA DS.END-DS.START DS .DA DS.END-DS.START DS
.DA #64 SS .DA #64 SS
.DA #ZS.END-ZS.START Zero Page Size .DA #ZS.END-ZS.START Zero Page Size
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
*-------------------------------------- *--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.CRLF .DA MSG.CRLF L.MSG.CRLF .DA MSG.CRLF
L.MSG.INIT .DA MSG.INIT L.MSG.INIT .DA MSG.INIT
L.MSG.LINENUM .DA MSG.LINENUM .DA 0
L.MSG.CTRLCHAR .DA MSG.CTRLCHAR
L.ASCII .DA ASCII
.DA 0
*-------------------------------------- *--------------------------------------
CS.INIT clc CS.INIT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN CS.RUN
.1 inc ArgCount .1 stz bIsTTY
lda ArgCount
>SYSCALL ArgV inc ArgCount
bcs .7 lda ArgCount
>SYSCALL ArgV
bcs .7
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)
cmp #'-' cmp #'-'
bne .4 bne .4
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
ldx #OptionList.Cnt-1 ldx #OptionList.Cnt-1
.2 cmp OptionList,x .2 cmp OptionList,x
beq .3 beq .3
dex dex
bpl .2 bpl .2
.99 >PUSHW L.MSG.USAGE .99 >PUSHW L.MSG.USAGE
>PUSHBI 0 >PUSHBI 0
>SYSCALL PrintF >SYSCALL PrintF
lda #E.SYN lda #E.SYN
sec sec
.9 rts .9 rts
.3 ldy OptionVars,x .3 ldy OptionVars,x
lda #$80 lda #$80
sta 0,y sta 0,y
bra .1 bra .1
.4 inc FileCount .4 inc FileCount
bra .1 scan for any other args bra .1 scan for any other args
.7 lda FileCount .7 lda FileCount
beq .99 beq .99
>LDYAI 256 >LDYAI 256
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
>STYA ZPBufPtr >STYA ZPBufPtr
stx hBuf stx hBuf
ldy #S.PS.hStdOut ldy #S.PS.hStdOut
lda (pPS),y lda (pPS),y
tax tax
lsr lsr
bcc CS.RUN.LOOP bcc CS.RUN.LOOP
lda Nod.Table.hFD-2,x lda Nod.Table.hFD-2,x
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)
beq CS.RUN.LOOP beq CS.RUN.LOOP
cmp #S.FD.T.PIPE inc bIsTTY
beq CS.RUN.LOOP
>PUSHW L.MSG.INIT
>PUSHW L.MSG.INIT >PUSHBI 0
>PUSHBI 0 >SYSCALL PrintF
>SYSCALL PrintF
*-------------------------------------- *--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y lda (pPS),y
>SYSCALL FEOF >SYSCALL FEOF
bcs .90 IO error bcs .90 IO error
tay tay
bne .10 no char bne .10 no char
>SYSCALL GetChar >SYSCALL GetChar
bcs .9 IO error bcs .9 IO error
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
beq .9 Abort.... beq .9 Abort....
cmp #$13 Ctrl-S cmp #$13 Ctrl-S
bne .10 bne .10
lda bPause lda bPause
eor #$ff eor #$ff
sta bPause sta bPause
bne CS.RUN.LOOP bne CS.RUN.LOOP
.10 lda bPause .10 lda bPause
bne CS.RUN.LOOP Pause... bne CS.RUN.LOOP Pause...
.11 lda hFile .11 lda hFile
bne .2 bne .2
.1 inc ArgIndex .1 inc ArgIndex
lda ArgIndex lda ArgIndex
>SYSCALL ArgV >SYSCALL ArgV
bcs .99 No more arg...the end! bcs .99 No more arg...the end!
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)
cmp #'-' cmp #'-'
beq .1 An option, skip... beq .1 An option, skip...
>LDYA ZPPtr1 >LDYA ZPPtr1
jsr CS.RUN.OPEN jsr CS.RUN.OPEN
.90 bcs .9 .90 bcs .9
sta hFile sta hFile
.2 >PUSHA .2 lda hFile
>PUSHW ZPBufPtr >SYSCALL GetC
>PUSHWI 254 Leave room for CRLF bcs .7
>SYSCALL FGetS
bcs .7
jsr CS.RUN.PRINT pha
bcc CS.RUN.LOOP >SYSCALL PutChar
rts pla
.7 cmp #MLI.E.EOF cmp #C.CR
bne .9 bne CS.RUN.LOOP
jsr CS.RUN.CLOSE lda bIsTTY
jmp CS.RUN.LOOP beq CS.RUN.LOOP
.99 lda #0 Exit with no Error lda #C.LF
.9 sec >SYSCALL PutChar
rts
bra CS.RUN.LOOP
.7 cmp #MLI.E.EOF
bne .9
jsr CS.RUN.CLOSE
jmp CS.RUN.LOOP
.99 lda #0 Exit with no Error
.9 sec
rts
*-------------------------------------- *--------------------------------------
CS.RUN.OPEN stz bPrintedBlankLine Reset this flag for the new file CS.RUN.OPEN >PUSHYA
>PUSHYA >PUSHBI O.RDONLY+O.TEXT
>PUSHBI O.RDONLY+O.TEXT >PUSHBI S.FI.T.TXT
>PUSHBI S.FI.T.TXT >PUSHWZ Aux type
>PUSHWZ Aux type >SYSCALL FOpen
>SYSCALL FOpen rts
rts
*-------------------------------------- *--------------------------------------
CS.RUN.PRINT inc LineNum CS.QUIT lda hBuf
bne .10 beq CS.RUN.CLOSE
>SYSCALL FreeMem
inc LineNum+1 CS.RUN.CLOSE lda hFile
beq .8
.10 lda bSuppressBlankLine stz hFile
bpl .2
lda (ZPBufPtr) >SYSCALL FClose
bne .1 Empty line ? .8 clc
rts
lda bPrintedBlankLine
bmi .8
lda #$ff
sta bPrintedBlankLine
bra .2
.1 stz bPrintedBlankLine
.2 jsr CS.RUN.PRINTNUM
bcs .99
lda bPrintAll
bmi .3
ldy #$ff
.20 iny
lda (ZPBufPtr),y
beq .21
cmp #C.SPACE
bcs .20
lda #C.SPACE
sta (ZPBufPtr),y
bra .20
.21 >LDYA ZPBufPtr
>SYSCALL PutS
rts
.3 stz ByteIndex
.4 ldy ByteIndex
lda (ZPBufPtr),y
beq .7
cmp #C.SPACE
bcc .5
>SYSCALL PutChar
.99 bcs .9
bra .62
.8 clc
rts
.5 tax
>LDYA L.ASCII
>STYA ZPPtr1
.6 dex
bmi .61
lda ZPPtr1
sec
adc (ZPPtr1)
sta ZPPtr1
bcc .6
inc ZPPtr1+1
bra .6
.61 >PUSHW L.MSG.CTRLCHAR
>PUSHW ZPPtr1
>PUSHBI 2
>SYSCALL PrintF
bcs .9
.62 inc ByteIndex
bne .4
.7 >PUSHW L.MSG.CRLF
>PUSHBI 0
>SYSCALL PrintF
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.PRINTNUM clc CS.DOEVENT sec
lda bLineNum rts
bpl .8
>PUSHW L.MSG.LINENUM
>PUSHW LineNum
>PUSHBI 2
>SYSCALL PrintF
.8 rts
*--------------------------------------
CS.QUIT lda hBuf
beq CS.RUN.CLOSE
>SYSCALL FreeMem
CS.RUN.CLOSE lda hFile
beq .8
stz hFile
>SYSCALL FClose
.8 clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
OptionList .AS "ANSans" OptionList .AS "x"
OptionList.Cnt .EQ *-OptionList OptionList.Cnt .EQ *-OptionList
OptionVars .DA #bPrintAll,#bLineNum,#bSuppressBlankLine,#bPrintAll,#bLineNum,#bSuppressBlankLine OptionVars .DA #bDummy
*-------------------------------------- *--------------------------------------
MSG.USAGE .AS "Usage : CAT File1 [File2...]\r\n" MSG.USAGE .AS "Usage : CAT File1 [File2...]"
.AS " -A : Show All non printable characters\r\n" MSG.CRLF .AZ "\r\n"
.AS " -N : Number all output lines\r\n" MSG.INIT .AZ "\e[?7h" Enable Line Wrap
.AS " -S : Suppress repeated empty output lines"
MSG.CRLF .AZ "\r\n"
MSG.INIT .AZ "\e[?7h" Enable Line Wrap
MSG.LINENUM .AZ "%5D:"
MSG.CTRLCHAR .AZ "[%S]"
*-------------------------------------- *--------------------------------------
ASCII >PSTR "NUL" .DUMMY
>PSTR "SOH" .OR 0
>PSTR "STX"
>PSTR "ETX"
>PSTR "EOT"
>PSTR "ENQ"
>PSTR "ACK"
>PSTR "BEL"
>PSTR "BS"
>PSTR "TAB"
>PSTR "LF"
>PSTR "VT"
>PSTR "FF"
>PSTR "CR"
>PSTR "SO"
>PSTR "SI"
>PSTR "DLE"
>PSTR "DC1"
>PSTR "DC2"
>PSTR "DC3"
>PSTR "DC4"
>PSTR "NAK"
>PSTR "SYN"
>PSTR "ETB"
>PSTR "CAN"
>PSTR "EM"
>PSTR "SUB"
>PSTR "ESC"
>PSTR "FS"
>PSTR "GS"
>PSTR "RS"
>PSTR "US"
*--------------------------------------
.DUMMY
.OR 0
DS.START DS.START
DS.END .ED DS.END .ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/bin/cat.s SAVE usr/src/bin/cat.s

View File

@ -1,8 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*---------------------------------------
* DU: Disk Usage - Bobbi - June 15, 2021
*---------------------------------------
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
@ -30,6 +27,7 @@ hLineBuf .BS 1
ZPLineBuf .BS 2 ZPLineBuf .BS 2
bPass2 .BS 1 bPass2 .BS 1
bDirLevel .BS 1 bDirLevel .BS 1
bIsTTY .BS 1
ZS.END ZS.END
.ED .ED
*-------------------------------------- *--------------------------------------
@ -74,6 +72,9 @@ CS.INIT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN CS.RUN
stz bIsTTY
jsr CS.RUN.ISATTY
.1 stz bDirLevel .1 stz bDirLevel
>INC.G ArgCount >INC.G ArgCount
>SYSCALL ArgV >SYSCALL ArgV
@ -391,10 +392,24 @@ CS.RUN.PrintCwd >PUSHW L.MSG.CWD
*-------------------------------------- *--------------------------------------
CS.RUN.NewLine lda #C.CR CS.RUN.NewLine lda #C.CR
>SYSCALL PutChar >SYSCALL PutChar
lda bIsTTY
beq .9
lda #C.LF lda #C.LF
>SYSCALL PutChar >SYSCALL PutChar
clc .9 rts
rts *--------------------------------------
CS.RUN.ISATTY ldy #S.PS.hStdOut
lda (pPS),y
tax
lsr
bcc .9
lda Nod.Table.hFD-2,x
>SYSCALL GetMemPtr
>STYA ZPPtr1
lda (ZPPtr1)
beq .9
inc bIsTTY
.9 rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT sec CS.DOEVENT sec
rts rts

File diff suppressed because it is too large Load Diff

281
BIN/NL.S.txt Normal file
View File

@ -0,0 +1,281 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/nl
*--------------------------------------
.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
ZPBufPtr .BS 2
hFile .BS 1
hBuf .BS 1
char .BS 1
LineCount .BS 2
bPause .BS 1
bPipe .BS 1
bIsTTY .BS 1
bNewLine .BS 1
bDummy .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 Segment Size
.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.LINENUM .DA MSG.LINENUM
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN stz bPipe
stz bIsTTY
stz bNewLine
inc bNewLine
jsr CS.RUN.ISATTY
jsr CS.RUN.CheckArgs
bcs CS.RUN.LOOP.RTS
stz LineCount
stz LineCount+1
inc LineCount
CS.RUN.LOOP lda bPipe If reading from pipe
bne .2 No ^C/^S handling
ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcs .9 I/O Error
tay
bne .1 No char
>SYSCALL GetChar
bcs .9 I/O error
cmp #$03 Ctrl-C
beq .9
cmp #$13 Ctrl-S
bne .1
lda bPause
eor #$ff
sta bPause
bne CS.RUN.LOOP
.1 lda bPause
bne CS.RUN.LOOP
.2 >SLEEP
lda hFile
>SYSCALL GetC
bcs .7
jsr CS.RUN.PRINTBYTE
bra CS.RUN.LOOP
.7 cmp #MLI.E.EOF
bne .9
.8 lda #0 Exit with no Error
.9 sec
CS.RUN.LOOP.RTS rts
*--------------------------------------
CS.RUN.CheckArgs jsr CS.RUN.NextArg
bcs .4
lda (ZPPtr1)
cmp #'-'
beq .1
.11 lda hFile
bne .97
>LDYA ZPPtr1
jsr CS.RUN.OPEN
bcs .9
sta hFile
bra CS.RUN.CheckArgs
.1 ldy #1
lda (ZPPtr1),y
ldx #OptionList.Cnt-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
bra .97
.3 txa
lsr
beq .98
tax
lda #$80
sta bDummy-1,x
bra CS.RUN.CheckArgs
.4 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
inc bPipe
.80 >LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPBufPtr
stx hBuf
* clc
.9 rts
.97 lda #E.SYN
.98 pha
>PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
pla
sec
rts
*--------------------------------------
CS.RUN.NextArg inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .9
>STYA ZPPtr1
.9 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.ISATTY ldy #S.PS.hStdOut
lda (pPS),y
tax
lsr
bcc .9
lda Nod.Table.hFD-2,x
>SYSCALL GetMemPtr
>STYA ZPPtr1
lda (ZPPtr1)
beq .9
inc bIsTTY
.9 rts
*--------------------------------------
CS.QUIT lda hFile
beq .1
>SYSCALL FClose
.1 lda hBuf
beq .8
>SYSCALL FreeMem
.8 clc
rts
*--------------------------------------
CS.RUN.PRINTBYTE pha
lda bNewLine
beq .2
stz bNewLine
>PUSHW L.MSG.LINENUM
>PUSHW LineCount
>PUSHBI 2
>SYSCALL PrintF
.2 pla
pha
>SYSCALL PutChar
pla
cmp #C.CR
bne .9
lda bIsTTY
beq .4
lda #C.LF
>SYSCALL PutChar
.4 inc bNewLine
inc LineCount
bne .9
inc LineCount+1
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "x"
OptionList.Cnt .EQ *-OptionList
*--------------------------------------
MSG.USAGE .AS "Usage : NL <File> or CMD|NL"
MSG.CRLF .AZ "\r\n"
MSG.LINENUM .AZ "%5D "
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/nl.s
ASM

353
BIN/OD.S.txt Normal file
View File

@ -0,0 +1,353 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/od
*--------------------------------------
.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
ZPBufPtr .BS 2
hFile .BS 1
hBuf .BS 1
char .BS 1
ByteCount .BS 3
bPause .BS 1
bPipe .BS 1
bIsTTY .BS 1
bTemp .BS 1
bDummy .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 Segment Size
.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.OFFSET .DA MSG.OFFSET
L.MSG.HEXBYTE .DA MSG.HEXBYTE
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN stz bPipe
stz bIsTTY
jsr CS.RUN.ISATTY
jsr CS.RUN.CheckArgs
bcs CS.RUN.LOOP.RTS
stz ByteCount
stz ByteCount+1
stz ByteCount+2
CS.RUN.LOOP lda bPipe If reading from pipe
bne .2 No ^C/^S handling
ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcs .9 I/O Error
tay
bne .1 No char
>SYSCALL GetChar
bcs .9 I/O error
cmp #$03 Ctrl-C
beq .9
cmp #$13 Ctrl-S
bne .1
lda bPause
eor #$ff
sta bPause
bne CS.RUN.LOOP
.1 lda bPause
bne CS.RUN.LOOP
.2 >SLEEP
lda hFile
>SYSCALL GetC
bcs .7
jsr CS.RUN.PRINTBYTE
bra CS.RUN.LOOP
.7 cmp #MLI.E.EOF
bne .9
jsr CS.RUN.FINISHUP
.8 lda #0 Exit with no Error
.9 sec
CS.RUN.LOOP.RTS rts
*--------------------------------------
CS.RUN.CheckArgs jsr CS.RUN.NextArg
bcs .4
lda (ZPPtr1)
cmp #'-'
beq .1
.11 lda hFile
bne .97
>LDYA ZPPtr1
jsr CS.RUN.OPEN
bcs .9
sta hFile
bra CS.RUN.CheckArgs
.1 ldy #1
lda (ZPPtr1),y
ldx #OptionList.Cnt-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
bra .97
.3 txa
lsr
beq .98
tax
lda #$80
sta bDummy-1,x
bra CS.RUN.CheckArgs
.4 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
inc bPipe
.80 >LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPBufPtr
stx hBuf
* clc
.9 rts
.97 lda #E.SYN
.98 pha
>PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
pla
sec
rts
*--------------------------------------
CS.RUN.NextArg inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .9
>STYA ZPPtr1
.9 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.ISATTY ldy #S.PS.hStdOut
lda (pPS),y
tax
lsr
bcc .9
lda Nod.Table.hFD-2,x
>SYSCALL GetMemPtr
>STYA ZPPtr1
lda (ZPPtr1)
beq .9
inc bIsTTY
.9 rts
*--------------------------------------
CS.QUIT lda hFile
beq .1
>SYSCALL FClose
.1 lda hBuf
beq .8
>SYSCALL FreeMem
.8 clc
rts
*--------------------------------------
CS.RUN.PRINTBYTE
pha Char is in A
lda ByteCount Divisible by 16
and #$0f
sta bTemp
bne .2
>PUSHW L.MSG.OFFSET Print offset
lda ByteCount+2
>PUSHA
lda ByteCount+1
>PUSHA
lda ByteCount
>PUSHA
>PUSHBI 3
>SYSCALL PrintF
.2 ldy bTemp Offset mod 16
pla Character
pha
sta (ZPBufPtr),y
>PUSHW L.MSG.HEXBYTE
pla
>PUSHA
>PUSHBI 1
>SYSCALL PrintF
.6 inc ByteCount
bne .7
inc ByteCount+1
bne .7
inc ByteCount+2
.7 lda bTemp
cmp #$0f
bne .9
jsr CS.RUN.PRINTASCII
.9 rts
*--------------------------------------
CS.RUN.PRINTASCII
lda #'>'
>SYSCALL PutChar
ldy #$00
.7 lda (ZPBufPtr),y
phy
cmp #$7f
bcs .75 Character >= $7f
cmp #C.SPACE
bcc .75 Character < Space
bra .8
.75 lda #'.'
.8 >SYSCALL PutChar
ply
cpy bTemp
beq .85
iny
bra .7
.85 lda #'<'
>SYSCALL PutChar
lda #C.CR
>SYSCALL PutChar
lda bIsTTY
beq .9
lda #C.LF
>SYSCALL PutChar
.9 rts
*--------------------------------------
CS.RUN.FINISHUP
lda ByteCount
and #$0f
bne .1
rts
.1 pha
lda #' '
>SYSCALL PutChar
lda #' '
>SYSCALL PutChar
lda #' '
>SYSCALL PutChar
pla
inc
cmp #$10
bne .1
.2 jsr CS.RUN.PRINTASCII
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "x"
OptionList.Cnt .EQ *-OptionList
*--------------------------------------
MSG.USAGE .AS "Usage : OD <File> or CMD|OD"
MSG.CRLF .AZ "\r\n"
MSG.OFFSET .AZ "%h%h%h "
MSG.HEXBYTE .AZ "%h "
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/od.s
ASM

View File

@ -1,5 +1,3 @@
NEW
AUTO 3,1
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
@ -253,6 +251,9 @@ CS.RUN.OPEN >PUSHYA
CS.RUN.PRINT >LDYA ZPBufPtr CS.RUN.PRINT >LDYA ZPBufPtr
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) If null first time
beq .8
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
beq .7 EOL. No match. beq .7 EOL. No match.
@ -290,11 +291,12 @@ CS.RUN.PRINT >LDYA ZPBufPtr
* Hit EOL but not end of pattern, return * Hit EOL but not end of pattern, return
.7 jsr CS.RUN.NoMatch .7 jsr CS.RUN.NoMatch
lda #C.CR .8 lda #C.CR
>SYSCALL PutChar >SYSCALL PutChar
lda #C.LF lda #C.LF
>SYSCALL PutChar >SYSCALL PutChar
clc
.9 clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.GotMatch phy CS.RUN.GotMatch phy
@ -377,6 +379,3 @@ MSG.CRLF .AZ "\r\n"
DS.START DS.START
DS.END .ED DS.END .ED
*-------------------------------------- *--------------------------------------
MAN
SAVE usr/src/bin/sed.s
ASM