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