A2osX/BIN/SH.S.IO.txt
2023-05-18 18:12:57 +02:00

426 lines
6.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
IO.Reset jsr IO.Reset.In
jsr IO.Reset.Out
jmp IO.Reset.Err
*--------------------------------------
IO.Pipe.In jsr IO.Pipe.OpenR Open last created PIPE
bcs .9
pha
ldy #S.PS.hStdIn
lda (pPS),y
>STA.G IO.hIn
pla
ldy #S.PS.hStdIn
sta (pPS),y
.9 rts
*--------------------------------------
IO.Set.In pha
jsr IO.Reset.In
ldy #S.PS.hStdIn
lda (pPS),y
>STA.G IO.hIn
pla
ldy #S.PS.hStdIn
sta (pPS),y
rts
*--------------------------------------
IO.Pop.In clc
.HS B0 BCS
*--------------------------------------
IO.Reset.In sec
>LDA.G IO.hIn
beq .8
bcc .1
ldy #S.PS.hStdIn
jsr IO.Close.Y
.1 ldy #S.PS.hStdIn
sta (pPS),y
>STZ.G IO.hIn
.8 clc
rts
*--------------------------------------
IO.Pipe.Out >PUSHEA.G IO.DEVFIFO
>PUSHWZ mode
>SYSCALL MKFIFO
bcs .9
jsr IO.Pipe.OpenW Open for OUTPUT
bcs .9
pha
ldy #S.PS.hStdOut
lda (pPS),y
>STA.G IO.hOut
pla
ldy #S.PS.hStdOut
sta (pPS),y
.9 rts
*--------------------------------------
IO.Set.Out pha
jsr IO.Reset.Out
ldy #S.PS.hStdOut
lda (pPS),y
>STA.G IO.hOut
pla
ldy #S.PS.hStdOut
sta (pPS),y
clc
rts
*--------------------------------------
IO.Pop.Out clc
.HS B0 BCS
*--------------------------------------
IO.Reset.Out sec
>LDA.G IO.hOut
beq .8
bcc .1
ldy #S.PS.hStdOut
jsr IO.Close.Y
.1 ldy #S.PS.hStdOut
sta (pPS),y
>STZ.G IO.hOut
.8 rts
*--------------------------------------
IO.Set.Err pha
jsr IO.Reset.Err
ldy #S.PS.hStdErr
lda (pPS),y
>STA.G IO.hErr
pla
ldy #S.PS.hStdErr
sta (pPS),y
rts
*--------------------------------------
IO.Reset.Err >LDA.G IO.hErr
beq .8
ldy #S.PS.hStdErr
jsr IO.Close.Y
ldy #S.PS.hStdErr
sta (pPS),y
>STZ.G IO.hErr
.8 rts
*--------------------------------------
IO.Close.Y pha
lda (pPS),y
>SYSCALL FClose
pla
rts
*--------------------------------------
IO.Pipe.OpenR ldx #O.RDONLY+O.TEXT
bra IO.Pipe.Open
IO.Pipe.OpenW ldx #O.WRONLY+O.TEXT
IO.Pipe.Open >LEA.G IO.DEVFIFO
*--------------------------------------
IO.FOpenYAX >PUSHYA
txa
>PUSHA
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
>SYSCALL FOpen
rts
*--------------------------------------
IO.StatArgVBufPtr
>LDYA ZPArgVBufPtr
IO.StatYA >PUSHYA
>PUSHW ZPCLBuf
>SYSCALL Stat
bcs .9
ldy #S.STAT.MODE+1
lda (ZPCLBuf),y
and #$F0
.9 rts
*--------------------------------------
IO.Exec >PUSHW ZPArgVBufPtr
>PUSHBI S.PS.F.CLOSEONX
>SYSCALL ExecL
rts
*--------------------------------------
IO.PrintBatchErrMsg
>LDYA ZPInputBuf
>STYA ZPPtr1
ldy #S.PS.RC
lda (pPS),y
cmp #E.SYN
beq .10
>LDYA ZPInputCmdPtr
bra .11
.10 >LDYA ZPInputBufPtr
.11 >STYA ZPPtr2
stz ZPTmpW Line Count
stz ZPTmpW+1
.1 inc ZPTmpW
bne .2
inc ZPTmpW+1
.2 ldy #$ff
.3 iny
lda (ZPPtr1),y
beq .4 EoF
cmp #C.CR
bne .3 Scan until EoL
.4 tya
clc
adc ZPPtr1
tax
lda ZPPtr1+1
adc #0
pha
cpx ZPPtr2
sbc ZPPtr2+1
pla
bcs .41
inx
bne .40
inc
.40 stx ZPPtr1
sta ZPPtr1+1
bra .1
.41 ldy #$ff
.5 iny
lda (ZPPtr1),y
sta (ZPCLBuf),y
beq .6
eor #C.CR
bne .5
sta (ZPCLBuf),y
.6 ldy #S.PS.hStdErr
lda (pPS),y
>PUSHA
>PUSHW L.MSG.BATCHLINE
>PUSHW ZPCLBuf
>PUSHBI 2
>SYSCALL FPrintF
ldy #$ff
ldx #'-'
.7 iny
lda (ZPCLBuf),y
beq .8
txa
sta (ZPCLBuf),y
bra .7
.8 ldy #S.PS.hStdErr
lda (pPS),y
>PUSHA
>PUSHW L.MSG.BATCHERR
>PUSHW ZPCLBuf
>PUSHW ZPTmpW
>PUSHBI 4
>SYSCALL FPrintF
rts
*--------------------------------------
IO.PrintErrMsg ldy #S.PS.RC
lda (pPS),y
>PUSHA
>PUSHW ZPCLBuf
>SYSCALL GetErrMsg
.8 ldy #S.PS.hStdErr
lda (pPS),y
>PUSHA
>PUSHW L.MSG.ERROR
ldy #S.PS.RC
lda (pPS),y
>PUSHA
>PUSHW ZPCLBuf
>PUSHBI 3
>SYSCALL FPrintF
rts
*--------------------------------------
IO.EscOutYA >STYA ZPPtr1 In
>STYA ZPPtr2 Out
ldy #0
.1 jsr GetPtr1NextChar
beq .8
cmp #'\'
bne .6
lda (ZPPtr1)
beq .7
ldx #OUT.EscCharsCnt-1
.2 cmp OUT.EscChars,x
beq .5
dex
bpl .2
stz ZPTmpW
jsr ToUpperCase
cmp #'X'
bne .3
.20 jsr IncPtr1
lda (ZPPtr1)
beq .40
jsr IO.IsHexDigit
bcs .40
asl ZPTmpW
asl ZPTmpW
asl ZPTmpW
asl ZPTmpW
ora ZPTmpW
sta ZPTmpW
bra .20
.3 jsr IO.IsOctDigit
bcs .40
jsr IncPtr1
asl ZPTmpW
asl ZPTmpW
asl ZPTmpW
ora ZPTmpW
sta ZPTmpW
lda (ZPPtr1)
bne .3
.40 lda ZPTmpW
bra .6
.4 tax
lda #'\'
sta (ZPPtr2),y
iny
txa
bra .6
.5 lda OUT.EscCodes,x
jsr IncPtr1
.6 sta (ZPPtr2),y
iny
bra .1
.7 lda #'\'
sta (ZPPtr2),y
iny
lda #0
.8 sta (ZPPtr2),y
>LDYA ZPPtr2
*--------------------------------------
IO.OutYA >PUSHYA
>PUSHBI 0
>SYSCALL PrintF
rts
*--------------------------------------
IO.IsOctDigit cmp #'0'
bcc .9
cmp #'7'+1
bcs .9
and #%00000111
clc
rts
.9 sec
rts
*--------------------------------------
IO.IsHexDigit cmp #'0'
bcc .9
cmp #'9'+1
bcc .8
cmp #'A'
bcc .9
cmp #'Z'+1
bcc .7
cmp #'a'
bcc .9
cmp #'z'+1
bcc .9
* sec
sbc #$20
.7 sec
sbc #'A'-10
.8 and #$0F
clc
rts
.9 sec
rts
*--------------------------------------
MAN
SAVE usr/src/bin/sh.s.io
LOAD usr/src/bin/sh.s
ASM