A2osX/BIN/SH.S.CL.txt
2023-05-16 18:53:52 +02:00

345 lines
5.0 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
*--------------------------------------
CL.Init >LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPCLBuf
txa
>STA.G CL.hBuf
.9 rts
*--------------------------------------
CL.PrintPrompt >PUSHW L.PS1
>PUSHW ZPCLBuf
>SYSCALL Expand
bcs .9
>LDYA ZPCLBuf
jsr IO.EscOutYA
lda #0
sta (ZPCLBuf)
.1 >LDYA L.MSG.PROMPT
jsr IO.OutYA
.9 rts
*--------------------------------------
CL.READN0A tax
CL.READN0X
>PUSHW ZPCLBuf
>PUSHW L.FMT.Byte
txa
>PUSHA
>PUSHBI 1
>SYSCALL SPrintF
bcs .9
lda #$ff
>STA.G CL.bReady
* clc
.9 rts
*--------------------------------------
CL.CHARIN tax
>LDA.G CL.bEscMode \e ?
beq .4
cpx #'['
beq .8 \e[
lda #0
sta (pData),y Y=bEscMode
txa
ldx #IN.EscCharsCnt-1
.1 cmp IN.EscChars,x
beq .2
dex
bpl .1
.8 clc
rts invalid \e[ sequence
.2 >LDA.G CL.MaxCnt
bne .3
lda IN.EscCodes,x
bra CL.READN0A
.3 txa
asl
tax
jmp (J.ESC,x)
*--------------------------------------
.4 cpx #C.ESC
bne .5
lda #$ff
>STA.G CL.bEscMode
clc
rts
.5 >LDA.G CL.MaxCnt
beq CL.READN0X
cpx #C.SPACE
bcc CL.CHARIN.CTRL
cpx #C.DEL
bne CL.Insert
*--------------------------------------
* Erase char BEFORE cursor
*--------------------------------------
>LDA.G CL.Len
beq .8
>LDA.G CL.Ptr
beq .8
>LDA.G CL.bSilent
bmi .6
jsr CL.BS.OUT
lda #C.SPACE
>SYSCALL PutChar
jsr CL.BS.OUT
.6 >DEC.G CL.Ptr
jmp CL.DEL
*--------------------------------------
CL.Insert >LDA.G CL.Len
>CMP.G CL.MaxCnt
beq .8 Buffer full, discard...
inc
>STA.G CL.Len
pha
.1 ply
dey
lda (ZPCLBuf),y Move from Ptr To end of buffer forward...
iny
sta (ZPCLBuf),y
dey
phy
tya
>CMP.G CL.Ptr
bne .1
ply Y=CL.Ptr
* >LDA.G CL.Ptr
txa
sta (ZPCLBuf),y
>INC.G CL.Ptr
>LDA.G CL.bSilent
bmi .7
txa
>SYSCALL PutChar
bcs .9
jsr CL.PrintEOL
.7 >LDA.G CL.MaxCnt READ N = 1, don't wait for CR
dec
bne .8
lda #$ff
>STA.G CL.bReady
.8 clc
.9 rts
*--------------------------------------
CL.CHARIN.CTRL cpx #C.CR
beq .18
cpx #C.EOF
beq .19
cpx #C.TAB
bne .1
jmp HIS.Select
.1 cpx #26 Ctrl-Z
beq CL.SUPPR
cpx #3 Ctrl-C
bne .8
jmp CL.CLR
.18 jsr CheckLFAfterCR Check for any extra LF
bcs .9
.19 lda #$ff
>STA.G CL.bReady
.8 clc
.9 rts
*--------------------------------------
* Erase char UNDER cursor
*--------------------------------------
CL.SUPPR >LDA.G CL.Len
beq CL.PrintEOL.8
>LDA.G CL.Ptr
>CMP.G CL.Len
beq CL.PrintEOL.8
*--------------------------------------
CL.DEL pha CL.Ptr
.1 ply
iny
lda (ZPCLBuf),y
dey
sta (ZPCLBuf),y
iny
phy
tya
>CMP.G CL.Len
bne .1
pla
>DEC.G CL.Len
>LDA.G CL.bSilent
bmi CL.PrintEOL.8
*--------------------------------------
CL.PrintEOL >LDA.G CL.Ptr
>CMP.G CL.Len
beq CL.PrintEOL.8
.1 pha
tay
lda (ZPCLBuf),y
>SYSCALL PutChar
pla
inc
>CMP.G CL.Len
bne .1
lda #C.SPACE
>SYSCALL PutChar
>LDA.G CL.Ptr
.3 >CMP.G CL.Len
beq .4
pha
jsr CL.BS.OUT
pla
inc
bra .3
.4 jmp CL.BS.OUT
CL.PrintEOL.8 clc
rts
*--------------------------------------
CL.BS >LDA.G CL.Ptr
beq CL.BS.8
dec
sta (pData),y
>LDA.G CL.bSilent
bpl CL.BS.OUT
CL.BS.8 clc
rts
CL.BS.OUT lda #C.BS
>SYSCALL PutChar
rts
*--------------------------------------
CL.FS >LDA.G CL.Ptr
>CMP.G CL.Len
beq CL.BS.8
inc
>STA.G CL.Ptr
>LDA.G CL.bSilent
bmi CL.BS.8
CL.FS.OUT >LDYA L.MSG.FS
jmp IO.OutYA
*--------------------------------------
CL.CLR >STZ.G HIS.Ptr
CL.CLR.1 lda (ZPCLBuf)
beq CL.Reset.1
>LDA.G CL.bSilent
bmi CL.Reset
.1 >LDA.G CL.Ptr
>CMP.G CL.Len
beq .2
inc
>STA.G CL.Ptr
jsr CL.FS.OUT
bra .1
.2 ldy #0
.3 lda #C.DEL
sta (ZPCLBuf),y
iny
lda (ZPCLBuf),y
bne .3
>LDYA ZPCLBuf
jsr IO.OutYA
*--------------------------------------
CL.Reset lda #0
sta (ZPCLBuf)
CL.Reset.1 lda #0
ldy #CL.Ptr
.1 sta (pData),y
iny
cpy #CL.bEscMode+1
bne .1
rts
*--------------------------------------
CL.ReadResetV sec Verbose mode
CL.ReadReset lda #$ff
>STA.G CL.MaxCnt
adc #0 CC = silent
iny CL.bSilent
sta (pData),y
rts
*--------------------------------------
MAN
SAVE usr/src/bin/sh.s.cl
LOAD usr/src/bin/sh.s
ASM