KERNEL : more terminal fixes

LIBTUI : DLG fix
This commit is contained in:
burniouf 2023-05-01 09:35:39 +02:00
parent 77f6c2664a
commit 0ea8d62a96
6 changed files with 202 additions and 179 deletions

Binary file not shown.

View File

@ -24,19 +24,17 @@ DLG.New lda #S.OBJ.T.DLG
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPPtr2 >STYA ZPPtr2
ldy #S.CTX.W ldy #S.OBJ.W
lda (ZPPtr2),y lda (ZPPtr2),y
sec sec
ldy #S.OBJ.W
sbc (ZPObjPtr),y sbc (ZPObjPtr),y
lsr lsr
ldy #S.OBJ.X1 ldy #S.OBJ.X1
sta (ZPObjPtr),y sta (ZPObjPtr),y
ldy #S.CTX.H ldy #S.OBJ.H
lda (ZPPtr2),y lda (ZPPtr2),y
sec sec
ldy #S.OBJ.H
sbc (ZPObjPtr),y sbc (ZPObjPtr),y
lsr lsr
ldy #S.OBJ.Y1 ldy #S.OBJ.Y1

View File

@ -305,7 +305,9 @@ LIB.GetCTX >LDYA ZPObjPtr
.8 ldy #S.OBJ.hParent .8 ldy #S.OBJ.hParent
lda (ZPCtxPtr),y lda (ZPCtxPtr),y
beq *
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
bcs *
>STYA ZPCtxPtr >STYA ZPCtxPtr
rts rts

View File

@ -251,7 +251,7 @@ CS.BUT.Init >PUSHB hSCRN hParent
.9 .9
CS.BUT.Init.RTS rts CS.BUT.Init.RTS rts
*-------------------------------------- *--------------------------------------
CS.RUN.DLGSAVE >PUSHB hCTX hParent CS.RUN.DLGSAVE >PUSHB hSCRN hParent
>PUSHBI 70 W >PUSHBI 70 W
>PUSHBI 11 H >PUSHBI 11 H
>PUSHW L.DLGS.Title >PUSHW L.DLGS.Title
@ -270,6 +270,7 @@ CS.RUN.DLGSAVE >PUSHB hCTX hParent
bcs .9 bcs .9
sta ZPPtr1 sta ZPPtr1
>PUSHB hDLGS hParent >PUSHB hDLGS hParent
>PUSHBI 57 X1 >PUSHBI 57 X1
>PUSHBI 7 Y1 >PUSHBI 7 Y1
@ -285,7 +286,8 @@ CS.RUN.DLGSAVE >PUSHB hCTX hParent
lda ZPPtr1 lda ZPPtr1
>LIBCALL hLIBTUI,LIBTUI.Activate >LIBCALL hLIBTUI,LIBTUI.Activate
.1 lda hDLGS
lda hDLGS
>LIBCALL hLIBTUI,LIBTUI.Exec >LIBCALL hLIBTUI,LIBTUI.Exec
.9 php .9 php
@ -306,6 +308,7 @@ CS.QUIT >LDA.G TBOX1.hBuf
beq .1 beq .1
>SYSCALL FreeMem >SYSCALL FreeMem
.1 lda hCTX .1 lda hCTX
beq .2 beq .2

View File

@ -63,7 +63,7 @@ int main(int argc, char *argv[])
do { do {
e = tuiExec(hSCRN); e = tuiExec(hSCRN);
if (e == EV_SAVE) { if (e == EV_SAVE) {
short int hDLGS = tuiNewDlg(hCTX, 70, 11, "Save As..."); short int hDLGS = tuiNewDlg(hSCRN, 70, 11, "Save As...");
short int hOKBut = tuiNewBut(hDLGS, 50, 7, 13, EV_OK, " OK "); short int hOKBut = tuiNewBut(hDLGS, 50, 7, 13, EV_OK, " OK ");
short int hCanBut = tuiNewBut(hDLGS, 57, 7, 3, EV_CANCEL, "Cancel"); short int hCanBut = tuiNewBut(hDLGS, 57, 7, 3, EV_CANCEL, "Cancel");
tuiDraw(hDLGS); tuiDraw(hDLGS);

View File

@ -66,25 +66,25 @@ TERMX.STATUS tya
beq TERMX.OPEN.E beq TERMX.OPEN.E
jsr TERMX.CBLNK jsr TERMX.CBLNK
ldy #S.DCB.TTY.OUTTAIL ldy #S.DCB.TTY.OUTTAIL
lda (ZPDCBPtr),y lda (ZPDCBPtr),y
iny iny
* sec
eor (ZPDCBPtr),y OUTHEAD eor (ZPDCBPtr),y OUTHEAD
bne .8 bne .8
bit bActive bit bActive
bpl .7 bpl .7
bit OPENAPPLE jsr TERMX.CheckOA
bmi .7 bmi .7
bit KBD bit KBD
bmi .8 bmi .8
.7 lda #$ff .7 lda #$ff EOF = TRUE
.HS 2C BIT ABS .HS 2C BIT ABS
.8 lda #0 .8 lda #0 EOF = FALSE
clc clc
rts rts
@ -160,28 +160,21 @@ TERMX.READ bit bActive is screen active?
jsr TERMX.CBLNK jsr TERMX.CBLNK
bit OPENAPPLE jsr TERMX.CheckOA
bpl .1 bmi .6 Open apple key, not for us...
jsr TERMX.Title.ON
bra .6 Open apple key, not for us...
.1 jsr TERMX.Title.OFF
lda KBD lda KBD
bpl .6 bpl .6
sta KBDSTROBE sta KBDSTROBE
and #$7F and #$7F
cmp #C.ESC cmp #C.ESC
bne .10 bne .1
lda #3 lda #3
.10 ldx #KeyMap.Cnt-1 .1 ldx #KeyMap.Cnt-1
.2 cmp KeyMap,x .2 cmp KeyMap,x
beq .3 beq .3
@ -786,7 +779,7 @@ TERMX.HOME lda #0
ldy #S.DCB.TTY.CH ldy #S.DCB.TTY.CH
sta (ZPDCBPtr),y sta (ZPDCBPtr),y
TERMX.HOME.8 clc clc
rts rts
*-------------------------------------- *--------------------------------------
TERMX.G0 ldx #$80 TERMX.G0 ldx #$80
@ -810,132 +803,6 @@ TERMX.G1 ldx #$40
jmp TERMX.SETM.0 jmp TERMX.SETM.0
*-------------------------------------- *--------------------------------------
TERMX.IAC ldy #S.DCB.TTY.INBUF
lda (ZPDCBPtr),y
inc
sta (ZPDCBPtr),y
tay
jsr TERM.GetBufByte
sta (ZPDCBPtr),y
cpy #S.DCB.TTY.INBUF+1 CMD ?
beq TERMX.HOME.8 yes, wait for additional bytes
ldy #S.DCB.TTY.INBUF+1
lda (ZPDCBPtr),y get back CMD
cmp #SB
bne .1 not a SB/SE....stop with CMD/SUBCMD
jsr TERM.GetBufByte
cmp #SE
bne TERMX.HOME.8 wait for ending SE....keep bIACMode
bra TERMX.IAC.SB
ldy #S.DCB.TTY.INBUF+1
lda (ZPDCBPtr),y get back CMD
.1 cmp #IAC
beq TERMX.IAC.SB.9
sec
sbc #WILL
bcc TERMX.IAC.SB.9
asl
tax
ldy #S.DCB.TTY.INBUF+2
lda (ZPDCBPtr),y Get SUBCMD in A
jmp (.8,x)
.8 .DA TERMX.IAC.WILL
.DA TERMX.IAC.WONT
.DA TERMX.IAC.DO
.DA TERMX.IAC.DONT
*--------------------------------------
TERMX.IAC.SB ldy #S.DCB.TTY.INBUF+2
lda (ZPDCBPtr),y Get SUBCMD in A
cmp #TN.O.TTYPE
bne TERMX.IAC.SB.9
iny
lda (ZPDCBPtr),y
cmp #SB.SEND
bne TERMX.IAC.SB.9
ldx #0
.1 lda SB.IS.TTYPE,x
jsr TERMX.COUT
inx
cpx #SB.IS.TTYPE.LEN
bne .1
TERMX.IAC.SB.9 jmp TERMX.SETM.0
*--------------------------------------
TERMX.IAC.WILL ldx #WILLDO.CNT-1
.1 cmp WILLDO,x
beq .7
dex
bpl .1
ldx #WILLDONT.CNT-1
.2 cmp WILLDONT,x
beq TERMX.IAC.WONT Send DONT
dex
bpl .2
jmp TERMX.SETM.0
.7 ldx #DO
bra TERMX.IAC.SendAX
*--------------------------------------
TERMX.IAC.DO ldx #DOWILL.CNT-1
.1 cmp DOWILL,x
beq .7
dex
bpl .1
ldx #DOWONT.CNT-1
.2 cmp DOWONT,x
beq TERMX.IAC.DONT Send WONT
dex
bpl .2
jmp TERMX.SETM.0
.7 ldx #WILL
.HS 2C BIT ABS
*--------------------------------------
TERMX.IAC.DONT ldx #WONT
.HS 2C BIT ABS
*--------------------------------------
TERMX.IAC.WONT ldx #DONT
*--------------------------------------
TERMX.IAC.SendAX
pha push CMD
phx
lda #IAC
jsr TERMX.COUT
pla
jsr TERMX.COUT
pla
jsr TERMX.COUT
jmp TERMX.SETM.0
*--------------------------------------
TERMX.RIS ldy #S.DCB.TTY.M TERMX.RIS ldy #S.DCB.TTY.M
.1 lda RESET.VALUES-S.DCB.TTY.M,y .1 lda RESET.VALUES-S.DCB.TTY.M,y
@ -1008,12 +875,12 @@ TERMX.EL ldx CsiPCnt
beq TERMX.EL0 Erase EOL beq TERMX.EL0 Erase EOL
lda CsiP lda CsiP
beq TERMX.EL0 Erase EOL beq TERMX.EL0 0:Erase EOL
cmp #1 dec
beq TERMX.EL1 Erase SOL beq TERMX.EL1 1:Erase SOL
cmp #2 Erase Line dec 2:Erase Line
beq TERMX.EL2 beq TERMX.EL2
TERMX.EL.8 clc TERMX.EL.8 clc
@ -1213,15 +1080,15 @@ TERMX.ED ldx CsiPCnt
beq TERMX.ED0 beq TERMX.ED0
.1 lda CsiP .1 lda CsiP
beq TERMX.ED0 beq TERMX.ED0 0...
cmp #1 dec 1 ?
beq TERMX.ED1 beq TERMX.ED1
.2 cmp #2 .2 dec 2 ?
beq TERMX.ED2 beq TERMX.ED2
clc TERMX.ED.8 clc
rts rts
*-------------------------------------- *--------------------------------------
TERMX.ED0 ldy #S.DCB.TTY.CV Erase Cursor -> Bottom TERMX.ED0 ldy #S.DCB.TTY.CV Erase Cursor -> Bottom
@ -1275,11 +1142,151 @@ TERMX.ED.2 sty .1+1
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
TERMX.Title.ON ldy #S.DCB.TTY.bTITLE TERMX.IAC ldy #S.DCB.TTY.INBUF
lda (ZPDCBPtr),y lda (ZPDCBPtr),y
bmi TERMX.RTS2 inc
sta (ZPDCBPtr),y
tay
lda #$ff jsr TERM.GetBufByte
sta (ZPDCBPtr),y
cpy #S.DCB.TTY.INBUF+1 CMD ?
beq TERMX.ED.8 yes, wait for additional bytes
ldy #S.DCB.TTY.INBUF+1
lda (ZPDCBPtr),y get back CMD
cmp #SB
bne .1 not a SB/SE....stop with CMD/SUBCMD
jsr TERM.GetBufByte
cmp #SE
bne TERMX.ED.8 wait for ending SE....keep bIACMode
bra TERMX.IAC.SB
ldy #S.DCB.TTY.INBUF+1
lda (ZPDCBPtr),y get back CMD
.1 cmp #IAC
beq TERMX.IAC.SB.9
sec
sbc #WILL
bcc TERMX.IAC.SB.9
asl
tax
ldy #S.DCB.TTY.INBUF+2
lda (ZPDCBPtr),y Get SUBCMD in A
jmp (.8,x)
.8 .DA TERMX.IAC.RWILL
.DA TERMX.IAC.RWONT
.DA TERMX.IAC.RDO
.DA TERMX.IAC.RDONT
*--------------------------------------
TERMX.IAC.SB ldy #S.DCB.TTY.INBUF+2
lda (ZPDCBPtr),y Get SUBCMD in A
cmp #TN.O.TTYPE
bne TERMX.IAC.SB.9
iny
lda (ZPDCBPtr),y
cmp #SB.SEND
bne TERMX.IAC.SB.9
ldx #0
.1 lda SB.IS.TTYPE,x
jsr TERMX.COUT
inx
cpx #SB.IS.TTYPE.LEN
bne .1
TERMX.IAC.SB.9 jmp TERMX.SETM.0
*--------------------------------------
TERMX.IAC.RWILL cmp #TN.O.ECHO
* beq TERMX.IAC.SDO
beq TERMX.IAC.SB.9
ldx #TERMX.IAC1.L-1
.1 cmp TERMX.IAC1,x
beq TERMX.IAC.SB.9
dex
bpl .1
.8 bra TERMX.IAC.SDONT
*--------------------------------------
TERMX.IAC.RWONT ldx #TERMX.IAC1.L-1
.1 cmp TERMX.IAC1,x
beq TERMX.IAC.SDO
dex
bpl .1
jmp TERMX.SETM.0
*--------------------------------------
TERMX.IAC.RDO cmp #TN.O.ECHO
beq TERMX.IAC.SWONT
ldx #TERMX.IAC1.L-1
.1 cmp TERMX.IAC1,x
beq TERMX.IAC.SWILL
dex
bpl .1
bra TERMX.IAC.SWONT
*--------------------------------------
TERMX.IAC.RDONT ldx #TERMX.IAC1.L-1
.1 cmp TERMX.IAC1,x
beq TERMX.IAC.SWILL
dex
bpl .1
jmp TERMX.SETM.0
*--------------------------------------
TERMX.IAC.SWILL ldx #WILL
.HS 2C BIT ABS
*--------------------------------------
TERMX.IAC.SWONT ldx #WONT
.HS 2C BIT ABS
*--------------------------------------
TERMX.IAC.SDO ldx #DO
.HS 2C BIT ABS
*--------------------------------------
TERMX.IAC.SDONT ldx #DONT
*--------------------------------------
pha push CMD
phx
lda #IAC
jsr TERMX.COUT
pla
jsr TERMX.COUT
pla
jsr TERMX.COUT
jmp TERMX.SETM.0
*--------------------------------------
TERMX.CheckOA lda OPENAPPLE
php
bpl .5 Restore Title
ldy #S.DCB.TTY.bTITLE
lda (ZPDCBPtr),y
bmi .8
inc
sta (ZPDCBPtr),y sta (ZPDCBPtr),y
jsr TERM.GetDevName jsr TERM.GetDevName
@ -1315,20 +1322,25 @@ TERMX.Title.ON ldy #S.DCB.TTY.bTITLE
cpy #80 cpy #80
bne .4 bne .4
TERMX.RTS2 rts plp
*-------------------------------------- rts
TERMX.Title.OFF ldy #S.DCB.TTY.bTITLE
lda (ZPDCBPtr),y
bpl TERMX.RTS2
lda #$0 .5 ldy #S.DCB.TTY.bTITLE
lda (ZPDCBPtr),y
bpl .8
dec
sta (ZPDCBPtr),y sta (ZPDCBPtr),y
ldx #0
jsr TERMX.SCR0CPY
.8 plp
rts
*-------------------------------------- *--------------------------------------
TERMX.LINE0CPY ldx #0
.HS 2C BIT ABS
TERMX.SCRCPY ldx #23 TERMX.SCRCPY ldx #23
.1 lda ZPDCBPtr TERMX.SCR0CPY lda ZPDCBPtr
clc clc
adc BUF.BL,x adc BUF.BL,x
sta .80+1 sta .80+1
@ -1357,7 +1369,7 @@ TERMX.SCRCPY ldx #23
plx plx
dex dex
bpl .1 bpl TERMX.SCR0CPY
rts rts
@ -1545,15 +1557,22 @@ EscModes .DA #0,#0,#0,#0,#0,#0,#S.DCB.TTY.M.CSI,#S.DCB.TTY.M.G0,#S.DCB.TTY.M.G1
CsiCodes .AS "ABCDHJKfhlmnr" CsiCodes .AS "ABCDHJKfhlmnr"
CsiCodes.Cnt .EQ *-CsiCodes CsiCodes.Cnt .EQ *-CsiCodes
*-------------------------------------- *--------------------------------------
WILLDO .DA #TN.O.BINARY,#TN.O.SGA,#TN.O.ECHO * Enabled both sides
WILLDO.CNT .EQ *-WILLDO *--------------------------------------
WILLDONT .DA #TN.O.TSPEED,#TN.O.LINEMODE,#TN.O.STATUS TERMX.IAC1 .DA #TN.O.BINARY,#TN.O.SGA,#TN.O.TTYPE,#TN.O.NAWS
WILLDONT.CNT .EQ *-WILLDONT TERMX.IAC1.L .EQ *-TERMX.IAC1
DOWILL .DA #TN.O.BINARY,#TN.O.SGA,#TN.O.TTYPE,#TN.O.NAWS *--------------------------------------
DOWILL.CNT .EQ *-DOWILL * Disabled both sides
DOWONT .DA #TN.O.ECHO,#TN.O.NEWENV,#TN.O.XDISPLOC *--------------------------------------
.DA #TN.O.TSPEED,#TN.O.LFLOW,#TN.O.AUTH *TERMX.IAC0 .DA #TN.O.TSPEED,#TN.O.LINEMODE,#TN.O.STATUS
DOWONT.CNT .EQ *-DOWONT * .DA #TN.O.NEWENV,#TN.O.XDISPLOC
* .DA #TN.O.LFLOW,#TN.O.AUTH
*TERMX.IAC0.L .EQ *-TERMX.IAC0
*--------------------------------------
* Enabled Local, Disabled remote
*--------------------------------------
*TERMX.IAC10 .DA #TN.O.ECHO
*TERMX.IAC10.L .EQ *-TERMX.IAC10
*-------------------------------------- *--------------------------------------
SB.IS.TTYPE .DA #IAC,#SB,#TN.O.TTYPE,#SB.IS SB.IS.TTYPE .DA #IAC,#SB,#TN.O.TTYPE,#SB.IS
TERMX.ENQ.REP .AS "vt100" TERMX.ENQ.REP .AS "vt100"
@ -1571,6 +1590,7 @@ RESET.VALUES .DA #0 MODE
.DA #0 CH.SAVE .DA #0 CH.SAVE
.DA #0 CV .DA #0 CV
.DA #0 CV.SAVE .DA #0 CV.SAVE
.DA #0 SCROLLTOP .DA #0 SCROLLTOP
.DA #23 SCROLLBOT .DA #23 SCROLLBOT
.DA #$80 bCURON .DA #$80 bCURON