A2osX/BIN/EDIT.S.CTRL.txt

666 lines
10 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
.LIST OFF
*--------------------------------------
* ^A = Help
* ^B = Begin Block
* ^C = Copy Block
* ^D = Delete Block
* ^E = End Block
* ^F = Find...
* ^G = Go To SOL
******** ^H = BS
******** ^I = TAB
******** ^J = LF
******** ^K = VT
* ^L = Go To EOL
******** ^M = CR
* ^N = Find Next
* ^O = Page Up
* ^P = Page Down
* ^Q = Quit
* ^R = Replace...
* ^S = Save
* ^T = Go To Top of file
******** ^U = FS
* ^V = Paste Block
* ^W = Erase line
* ^X = Cut Block
* ^Y = End Of File
*--------------------------------------
Ctrl.DEL jsr BUF.ComputeCOffset
lda BUF.COffset
ora BUF.COffset+1 No Backspace possible
beq .8
jsr Ctrl.BS
bcs .9
jmp Ctrl.Z
.8 clc
.9 rts
*--------------------------------------
Ctrl.Invalid
clc
Ctrl.Invalid.RTS
rts
*--------------------------------------
Ctrl.A >STZ.G bUpdateStatus
>LDYA L.MSG.HELP
>STYA ZPPTR1
stz TmpByte
.1 ldx #0
ldy TmpByte
jsr SCRN.GotoXY
bcs .9
lda (ZPPTR1)
beq .8
>PUSHW L.MSG.HELPLINE
>PUSHW ZPPTR1
>PUSHBI 2
>SYSCALL PrintF
bcs .9
inc TmpByte
lda (ZPPTR1)
sec
adc ZPPTR1
sta ZPPTR1
bcc .1
inc ZPPTR1+1
bra .1
.8 jsr SCRN.ResetStatusBar
>PUSHW LineBufPtr
>PUSHW L.MSG.STATUSBAR.H
>PUSHBI 0
jsr SCRN.LineBufSprintf
bcs .9
jsr SCRN.LineBufOut
bcs .9
jsr GetCh
bcs .9
jmp SCRN.Repaint
.9 rts
*--------------------------------------
Ctrl.C jmp BUF.SelToClipboard
*--------------------------------------
Ctrl.B jsr BUF.ComputeCOffset
lda BUF.COffset
>STA.G SelStart
lda BUF.COffset+1
iny
sta (pData),y
jmp SCRN.UpdateMain
*--------------------------------------
Ctrl.E jsr BUF.ComputeCOffset
lda BUF.COffset
>STA.G SelEnd
lda BUF.COffset+1
iny
sta (pData),y
jmp SCRN.UpdateMain
*--------------------------------------
Ctrl.G >LDA.G FileX
beq .8
lda #0
sta (pData),y
jmp SCRN.UpdateViewPort
.8 clc
rts
*--------------------------------------
Ctrl.BS >LDA.G FileX
beq .1 already at beginning of line
dec
sta (pData),y
bra .3
.1 >LDA.G FileY+1
tax
dey
ora (pData),y
beq .8
lda (pData),y
bne .2
dex
.2 dec
jsr BUF.GetLineAX
bcs .8
tya
>STA.G FileX
>DECW.G FileY
.3 jmp SCRN.UpdateViewPort
.8 clc
rts
*--------------------------------------
Ctrl.TAB jsr BUF.InsertTAB
bcs .9
lda TmpByte
beq .9 nothing to do
* clc
>ADC.G FileX
sta (pData),y
>LDA.G CurX
clc
adc TmpByte
sta (pData),y
sec
>SBC.G ScreenX
sec
>SBC.G ScreenW
bcs .1
jsr SCRN.UpdateCurrentLine
bcs .9
bra .8
.1 lda TmpByte
clc
>ADC.G ScreenX
sta (pData),y
jsr SCRN.UpdateViewPort
.8 jsr SCRN.GotoCurXCurY
jmp SCRN.UpdateStatusBar
.9 rts
*--------------------------------------
Ctrl.LF jsr BUF.GetNextLine
bcs .8
tya Y = line length
>CMP.G FileX
bcs .2
sta (pData),y
.2 >INCW.G FileY
jmp SCRN.UpdateViewPort
.8 clc
rts
*--------------------------------------
Ctrl.VT >LDA.G FileY+1
tax
dey
ora (pData),y
beq .8
lda (pData),y
bne .1
dex
.1 dec
jsr BUF.GetLineAX
bcs .8
tya Y = line length
>CMP.G FileX
bcs .2
sta (pData),y
.2 >DECW.G FileY
jmp SCRN.UpdateViewPort
.8
Ctrl.VT.8 clc
rts
*--------------------------------------
Ctrl.L jsr BUF.GetLine
bcs Ctrl.VT.8
tya Y = line length
>STA.G FileX
jmp SCRN.UpdateViewPort
*--------------------------------------
Ctrl.CR lda #C.CR
jsr BUF.InsertA
bcs .99
jsr SCRN.LineBufInitEdit CEOL
>STZ.G FileX
>INCW.G FileY
>STZ.G CurX
>LDA.G CurY
>CMP.G ViewPortHm1
bne .1
jsr SCRN.LineBufOut Bottom line, CEOL...
bcs .99
jmp SCRN.UpdateViewPort ...and scroll
.1 dec
>CMP.G ViewPortHm1
beq .6 No scroll needed
>PUSHW LineBufPtr
>PUSHW L.SEQ.SCROLLCURDN
>LDA.G CurY
inc
inc
>PUSHA
>LDA.G ScreenH
dec
>PUSHA
>PUSHBI 2
jsr SCRN.LineBufSprintf
.99 bcs .9
>PUSHW LineBufPtr
>PUSHW L.SEQ.SCROLLRGN
>LDA.G ScreenH
dec
>PUSHA
>PUSHBI 1
jsr SCRN.LineBufSprintf
bcs .9
.6 jsr SCRN.LineBufOut
bcs .9
>INC.G CurY
jsr BUF.ComputeCOffset
jsr SCRN.UpdateCurrentLine
jmp SCRN.GotoCurXCurY
.9 rts
*--------------------------------------
Ctrl.O ldy #FileY+1
lda (pData),y
tax
dey
lda (pData),y
ldy #ViewPortH
sec
sbc (pData),y
pha
txa
sbc #0
bcc .8
ldy #FileY+1
sta (pData),y
dey
pla
sta (pData),y
>LDA.G ScreenY
sec
>SBC.G ViewPortH
>STA.G ScreenY
>LDA.G ScreenY+1
sbc #0
sta (pData),y
>STZ.G FileX
>STA.G ScreenX
jmp SCRN.UpdateMainAndStatus
.8 pla
*--------------------------------------
Ctrl.T jsr SCRN.Home
jmp SCRN.UpdateMainAndStatus
*--------------------------------------
Ctrl.P ldy #FileY+1
lda (pData),y
tax
dey
lda (pData),y
ldy #ViewPortH
clc
adc (pData),y
bcc .1
inx
.1 pha
phx
jsr BUF.GetLineAX A,X = FileY+PAGE
bcs .8
ldy #FileY+1
pla
sta (pData),y
dey
pla
sta (pData),y
>LDA.G ViewPortH
clc
>ADC.G ScreenY
sta (pData),y
iny
lda (pData),y
adc #0
sta (pData),y
>STZ.G FileX
>STA.G ScreenX
jmp SCRN.UpdateMainAndStatus
.8 pla
pla
clc
rts
*--------------------------------------
Ctrl.Y jsr BUF.GetNextLine
bcs .1
>INCW.G FileY
bra Ctrl.Y
.1 jsr BUF.GetLine
tya Y = line length
>STA.G FileX
>LDA.G FileY
sec
>SBC.G ViewPortHm1
tax
>LDA.G FileY+1
sbc #0
bcs .2
>LDA.G FileY
tax
lda #0
.2 >STA.G ScreenY+1
dey
txa
sta (pData),y
jmp SCRN.UpdateMainAndStatus
*--------------------------------------
Ctrl.F >LDYA L.DLG.FIND
jsr DLG.Open
jsr DLG.Run
cmp #C.CR
bne .8
.8 jsr DLG.Close
clc
rts
*--------------------------------------
Ctrl.N
clc
rts
*--------------------------------------
Ctrl.R clc
rts
*--------------------------------------
Ctrl.Q >LDA.G bUnSaved
beq .8
>STZ.G bUpdateStatus
jsr SCRN.ResetStatusBar
>PUSHW LineBufPtr
>PUSHW L.MSG.STATUSBAR.U
>PUSHBI 0
jsr SCRN.LineBufSprintf
bcs .9
jsr SCRN.LineBufOut
bcs .9
.1 jsr GetCh
bcs .9
cmp #'a
bcc .2
cmp #'z'+1
bcs .2
eor #$20
.2 cmp #'Y'
beq .8
cmp #'N'
beq .80
bra .1
.8 lda #$ff
>STA.G bExit
.80 jsr SCRN.UpdateStatusBar
jmp SCRN.GotoCurXCurY
.9 rts
*--------------------------------------
Ctrl.S >LDYA L.DLG.SAVE
jsr DLG.Open
jsr DLG.Run
pha
jsr DLG.Close
pla
cmp #C.CR
bne .8
jsr FILE.Save
bcc .1
pha
jsr SCRN.ResetStatusBar
>PUSHW L.MSG.STATUSBAR.E
pla
>PUSHA ERROR CODE
>PUSHBI 1
bra .2
.1 jsr SCRN.ResetStatusBar
>PUSHW LineBufPtr
>PUSHW L.MSG.STATUSBAR.S
>LDA.G hFileName
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI 2
.2 jsr SCRN.LineBufSprintf
jsr SCRN.LineBufOut
bcs .9
.8 jsr SCRN.UpdateTopBar
jmp SCRN.GotoCurXCurY
.9 rts
*--------------------------------------
Ctrl.FS jsr BUF.GetLine
bcs .8
tya Y = line length
>CMP.G FileX
beq .1 already at end of line
lda (pData),y
inc
sta (pData),y
bra .3
.1 jsr BUF.GetNextLine
bcs .8
>INCW.G FileY
>STZ.G FileX
.3 jmp SCRN.UpdateViewPort
.8 clc
.9 rts
*--------------------------------------
Ctrl.V jsr BUF.InsertClipboard
bcs .9
jsr SCRN.UnSaved
jmp SCRN.UpdateMainAndStatus
.9 rts
*--------------------------------------
Ctrl.W jsr BUF.ComputeCOffset Y=line len
phy
lda BUF.LOffset
ldy #SelStart
sta (pData),y
lda BUF.LOffset+1
iny
sta (pData),y
ply Get back line len
clc
lda (BufPtr),y
beq .1 last line \0 ending
sec delete CR
.1 tya
adc BUF.LOffset
ldy #SelEnd
sta (pData),y
lda BUF.LOffset+1
adc #0
iny
sta (pData),y
bra Ctrl.D
.8
Ctrl.W.RTS rts
*--------------------------------------
Ctrl.X jsr BUF.SelToClipboard
bcs Ctrl.W.RTS
Ctrl.D jsr BUF.DelSel
bcs Ctrl.D.8
jsr BUF.ResetSel
jsr SCRN.CursorAdjust
jsr SCRN.UpdateViewPort
jsr SCRN.UnSaved will update TopBar
jmp SCRN.UpdateMainAndStatus
Ctrl.D.8 clc
rts
*--------------------------------------
Ctrl.Z jsr BUF.ComputeCOffset
lda BUF.COffset
eor FileLen
bne .1
lda BUF.COffset+1
eor FileLen+1
beq Ctrl.D.8
.1 jsr BUF.DelCharAtCursor
bcs Ctrl.W.RTS
cmp #C.CR did we DEL a CR ?
bne .8
>LDA.G CurY
>CMP.G ViewPortHm1
beq .8 Bottom line, all done
dec
>CMP.G ViewPortHm1
beq .8 No scroll needed
>PUSHW L.SEQ.SCROLLCURUP
>LDA.G CurY
inc
inc
>PUSHA
>LDA.G ScreenH
dec
>PUSHA
>PUSHBI 2
>SYSCALL PrintF
bcs .9
jsr SCRN.ResetScrollRgn
bcs .9
jsr SCRN.UpdateCurrentLine
bcs .9
jsr SCRN.UpdateLast
bcs .9
.8 jsr SCRN.UpdateCurrentLine
bcs .9
.80 jsr SCRN.UnSaved
jsr SCRN.GotoCurXCurY
jmp SCRN.UpdateStatusBar
.9 rts
*--------------------------------------
MAN
SAVE usr/src/bin/edit.s.ctrl
LOAD usr/src/bin/edit.s
ASM