A2osX/BIN/FORTH.S.CL.txt
2021-06-05 17:48:54 +02:00

274 lines
4.1 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.PrintPrompt >PUSHW L.MSG.PROMPT
>PUSHBI 0
>SYSCALL PrintF
rts
*--------------------------------------
CL.READN0A tax
CL.READN0X >PUSHW ZPCLBuf
>PUSHW L.FMT.Byte
txa
>PUSHA
>PUSHBI 1
>SYSCALL SPrintF
bcs .9
lda #$ff
sta CL.bReady
* clc
.9 rts
*--------------------------------------
CL.CHARIN tax
bit CL.bEscMode \e ?
bpl .4
cpx #'['
beq .8 \e[
stz CL.bEscMode
txa
ldx #EscChars.Cnt-1
.1 cmp EscChars,x
beq .2
dex
bpl .1
.8 rts invalid \e[ sequence
.2 lda CL.MaxCnt
bne .3
lda EscChars.Remap,x
bra CL.READN0A
.3 txa
asl
tax
jmp (J.ESC,x)
*--------------------------------------
.4 cpx #C.ESC
bne .5
lda #$ff
sta CL.bEscMode
clc
rts
.5 lda CL.MaxCnt
beq CL.READN0X
cpx #C.SPACE
bcc CL.CHARIN.CTRL
cpx #C.DEL
bne CL.Insert
*--------------------------------------
* Erase char BEFORE cursor
*--------------------------------------
lda CL.Len
beq .8
lda CL.Ptr
beq .8
lda #C.BS
>SYSCALL PutChar
dec CL.Ptr
jmp CL.DEL
*--------------------------------------
CL.Insert ldy CL.Len
cpy CL.MaxCnt
beq .8 Buffer full, discard...
iny
sty CL.Len
.1 dey
lda (ZPCLBuf),y Move from Ptr To end of buffer forward...
iny
sta (ZPCLBuf),y
dey
cpy CL.Ptr
bne .1
txa
sta (ZPCLBuf),y
inc CL.Ptr
>SYSCALL PutChar
jsr CL.PrintEOL
lda CL.MaxCnt
dec MaxCnt = 1, don't wait for CR
bne .8
lda #$ff
sta CL.bReady
.8 clc
rts
*--------------------------------------
CL.CHARIN.CTRL cpx #C.CR
beq .8
cpx #C.EOF
beq .9
cpx #3 Ctrl-C
beq CL.CLR
cpx #C.TAB
bne .1
jmp HIS.Select
.1 cpx #26 Ctrl-Z
bne .8
jmp CL.SUPPR
.8 jsr CheckLFAfterCR
bcs .9
lda #$ff
sta CL.bReady
clc
.9 rts
*--------------------------------------
CL.CLR lda (ZPCLBuf)
beq CL.Reset.1
.1 lda CL.Ptr
cmp CL.Len
beq .2
inc
sta CL.Ptr
lda #C.FS
>SYSCALL PutChar
bra .1
.2 ldy #0
.3 lda #C.DEL
sta (ZPCLBuf),y
iny
lda (ZPCLBuf),y
bne .3
jsr CL.Print
*--------------------------------------
CL.Reset lda #0
sta (ZPCLBuf)
CL.Reset.1 ldx #CL.Ptr
.1 stz 0,x
inx
cpx #CL.bEscMode+1
bne .1
>LDYA ZPCLBuf
>STYA ZPCLBufPtr
rts
*--------------------------------------
CL.BS lda CL.Ptr
beq .9
dec CL.Ptr
lda #C.BS
>SYSCALL PutChar
.9 rts
*--------------------------------------
CL.NAK lda CL.Ptr
cmp CL.Len
beq .9
inc
sta CL.Ptr
lda #C.FS
>SYSCALL PutChar
.9 rts
*--------------------------------------
* Erase char UNDER cursor
*--------------------------------------
CL.SUPPR lda CL.Len
beq CL.PrintEOL.8
lda CL.Ptr
cmp CL.Len
beq CL.PrintEOL.8
*--------------------------------------
CL.DEL ldy CL.Ptr
.1 iny
lda (ZPCLBuf),y
dey
sta (ZPCLBuf),y
iny
cpy CL.Len
bne .1
dec CL.Len
*--------------------------------------
CL.PrintEOL lda CL.Ptr
.1 cmp CL.Len
beq .2
pha
tay
lda (ZPCLBuf),y
>SYSCALL PutChar
pla
inc
bra .1
.2 lda #C.SPACE
>SYSCALL PutChar
lda CL.Ptr
.3 cmp CL.Len
beq .4
pha
lda #C.BS
>SYSCALL PutChar
pla
inc
bra .3
.4 lda #C.BS
>SYSCALL PutChar
CL.PrintEOL.8 clc
rts
*--------------------------------------
CL.Print ldy #S.PS.hStdOut
lda (pPS),y
>PUSHA
>PUSHW ZPCLBuf
>SYSCALL FPutS
rts
*--------------------------------------
MAN
SAVE usr/src/bin/forth.s.cl
LOAD usr/src/bin/forth.s
ASM