mirror of
https://github.com/david-schmidt/Davex.git
synced 2025-10-31 11:26:44 -07:00
Command line editing:
* On a GS, Control-U cancels the entire line like Control-X. (Right-arrow is Control-U, but without the Control key down.) * On a GS, Control-K clears to end-of-line like Control-Y. (Up-arrow is Control-K, but without the Control key down.) * Insert mode is on by default.
This commit is contained in:
@@ -27,6 +27,7 @@ rc_spch:
|
|||||||
x98: jmp (ksw)
|
x98: jmp (ksw)
|
||||||
|
|
||||||
rdchar2:
|
rdchar2:
|
||||||
|
lsr ControlKeyDown
|
||||||
bit speech
|
bit speech
|
||||||
bmi rc_spch
|
bmi rc_spch
|
||||||
jmp (ksw)
|
jmp (ksw)
|
||||||
@@ -95,7 +96,8 @@ rc_l1: lda keyboard
|
|||||||
jsr poll_inslot
|
jsr poll_inslot
|
||||||
bcs rc_l1
|
bcs rc_l1
|
||||||
bcc h_key2
|
bcc h_key2
|
||||||
h_key: sta kbdstrb
|
h_key: jsr CaptureModifierState
|
||||||
|
sta kbdstrb
|
||||||
h_key2: sta theKey
|
h_key2: sta theKey
|
||||||
pla
|
pla
|
||||||
sta invflg
|
sta invflg
|
||||||
@@ -104,6 +106,22 @@ h_key2: sta theKey
|
|||||||
jsr pr_bs
|
jsr pr_bs
|
||||||
lda theKey
|
lda theKey
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
CaptureModifierState:
|
||||||
|
pha
|
||||||
|
; If running on an Apple IIgs, check the Control key in the modifiers register.
|
||||||
|
lda xc_req
|
||||||
|
and #8
|
||||||
|
beq @notGS
|
||||||
|
lda $c025 ;bit 1 (value $02) = Control down
|
||||||
|
lsr a
|
||||||
|
lsr a ; into Carry flag
|
||||||
|
ror ControlKeyDown
|
||||||
|
@notGS: pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
ControlKeyDown:
|
||||||
|
.byte 0 ; bit 7 set if Control was down on last keypress
|
||||||
theKey: .byte 0
|
theKey: .byte 0
|
||||||
vcout: jmp (vid_csw)
|
vcout: jmp (vid_csw)
|
||||||
;
|
;
|
||||||
@@ -347,8 +365,8 @@ mygetln2:
|
|||||||
sta exec_flag ;bit 7
|
sta exec_flag ;bit 7
|
||||||
ldx #0
|
ldx #0
|
||||||
stx longest
|
stx longest
|
||||||
stx insert_mode
|
|
||||||
lda #<-1
|
lda #<-1
|
||||||
|
sta insert_mode ; insert mode is on by default
|
||||||
sta hist_level
|
sta hist_level
|
||||||
mg_l1: ldy longest
|
mg_l1: ldy longest
|
||||||
lda #space
|
lda #space
|
||||||
@@ -471,11 +489,11 @@ mgdispatch:
|
|||||||
.addr ctrlr-1
|
.addr ctrlr-1
|
||||||
.addr mg_err-1 ;s
|
.addr mg_err-1 ;s
|
||||||
.addr mg_err-1 ;t
|
.addr mg_err-1 ;t
|
||||||
.addr ctrlu-1
|
.addr ctrlu-1 ;u = right arrow
|
||||||
.addr mg_err-1 ;v
|
.addr mg_err-1 ;v
|
||||||
.addr mg_err-1 ;w
|
.addr mg_err-1 ;w
|
||||||
.addr ctrlx-1
|
.addr ctrlx-1
|
||||||
.addr ctrly-1 ;y
|
.addr ctrly-1 ;y - erase remainder of line
|
||||||
.addr mg_err-1 ;z
|
.addr mg_err-1 ;z
|
||||||
.addr ctrlx-1 ;esc = ctrlx (for new //e kbd "clear")
|
.addr ctrlx-1 ;esc = ctrlx (for new //e kbd "clear")
|
||||||
.addr mg_err-1 ;ctrl-backslash
|
.addr mg_err-1 ;ctrl-backslash
|
||||||
@@ -513,7 +531,7 @@ tglInsert:
|
|||||||
sta insert_mode
|
sta insert_mode
|
||||||
jmp mg_l1
|
jmp mg_l1
|
||||||
;**********************
|
;**********************
|
||||||
ctrly: stx xsave ;truncate cmd lin at cursor
|
ctrly: stx xsave ;truncate cmd line at cursor
|
||||||
|
|
||||||
yblanks:
|
yblanks:
|
||||||
jsr pr_sp
|
jsr pr_sp
|
||||||
@@ -578,7 +596,6 @@ f_cont: pha
|
|||||||
jmp mgfind_l1
|
jmp mgfind_l1
|
||||||
|
|
||||||
ctrlh: ;backspace
|
ctrlh: ;backspace
|
||||||
lsr insert_mode
|
|
||||||
cpx #0
|
cpx #0
|
||||||
bne bs_ok
|
bne bs_ok
|
||||||
jmp mg_err
|
jmp mg_err
|
||||||
@@ -596,7 +613,6 @@ ctrli: sec
|
|||||||
jmp mg_l1
|
jmp mg_l1
|
||||||
|
|
||||||
ctrlx:
|
ctrlx:
|
||||||
lsr insert_mode
|
|
||||||
jsr mg_can
|
jsr mg_can
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
@@ -607,7 +623,6 @@ mg_can: jsr backx
|
|||||||
jsr backx
|
jsr backx
|
||||||
ldx #0
|
ldx #0
|
||||||
stx longest
|
stx longest
|
||||||
lsr insert_mode
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
mgdelete:
|
mgdelete:
|
||||||
@@ -658,11 +673,14 @@ ctrlj: ;down arrow
|
|||||||
bmi ctrlk
|
bmi ctrlk
|
||||||
jmp ctrlr
|
jmp ctrlr
|
||||||
|
|
||||||
ctrlk: ;up arrow
|
ctrlk: ;up arrow or Control-K
|
||||||
inc hist_level
|
bit ControlKeyDown
|
||||||
|
bpl :+
|
||||||
|
jmp ctrly
|
||||||
|
: inc hist_level
|
||||||
jmp ctrlr
|
jmp ctrlr
|
||||||
|
|
||||||
ctrld: lsr insert_mode ;delete at cursor
|
ctrld:
|
||||||
cpx longest
|
cpx longest
|
||||||
bcc len_ok
|
bcc len_ok
|
||||||
jmp mg_err
|
jmp mg_err
|
||||||
@@ -685,9 +703,11 @@ dl_back:
|
|||||||
bne dl_back
|
bne dl_back
|
||||||
jmp mg_l1
|
jmp mg_l1
|
||||||
|
|
||||||
ctrlu:
|
ctrlu: ; right arrow or Control-U
|
||||||
lsr insert_mode
|
bit ControlKeyDown
|
||||||
cpx longest
|
bpl :+
|
||||||
|
jmp ctrlx
|
||||||
|
: cpx longest ; right arrow
|
||||||
bcc len_ok2
|
bcc len_ok2
|
||||||
jmp mg_err
|
jmp mg_err
|
||||||
len_ok2:
|
len_ok2:
|
||||||
|
|||||||
Reference in New Issue
Block a user