Added Copy/paste functions

This commit is contained in:
Rémy GIBERT 2016-02-25 18:02:57 +01:00
parent 006d3904b7
commit c182de64c0
3 changed files with 251 additions and 94 deletions

View File

@ -5,28 +5,16 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
BUF.CheckSelected
sec
lda BUF.COffset
ldy #SelStart
sbc (pData),y
lda BUF.COffset+1
iny
sbc (pData),y
bcc .9
lda BUF.COffset
ldy #SelEnd
sbc (pData),y
lda BUF.COffset+1
iny
sbc (pData),y
rts CC if in selection
.9 sec
rts
*--------------------------------------
BUF.InsertClipboard BUF.InsertClipboard
ldy #hClipBoard
lda (pData),y
beq .8
>SYSCALL SYS.GetMemPtrA
>STYA ClipboardPtr
jsr BUF.ComputeCOffset
ldy #FileLen ldy #FileLen
lda (pData),y lda (pData),y
sec sec
@ -41,40 +29,36 @@ BUF.InsertClipboard
jsr BUF.GetNewYA jsr BUF.GetNewYA
bcs .9 bcs .9
jsr BUF.ComputeCOffset
>LDYA BUF.COffset >LDYA BUF.COffset
>STYA TmpCount >STYA TmpCount
ldy #0
jsr BUF.CopyCount jsr BUF.CopyCount
phy
clc
lda BufPtr
ldy #ClipboardLen ldy #ClipboardLen
adc (pData),y lda (pData),y
sta BufPtr sta TmpCount
iny iny
lda BufPtr+1 lda (pData),y
adc (pData),y sta TmpCount+1
sta BufPtr+1
jsr BUF.CopyClipboard
ply
jsr BUF.CopyTail jsr BUF.CopyTail
.4 ldy #FileLen .4 ldy #ClipboardLen+1
lda (pData),y lda (pData),y
inc tax
sta (pData),y dey
bne .8 lda (pData),y
clc
ldy #FileLen
adc (pData),y
sta (pData),y
iny iny
lda (pData),y txa
inc adc (pData),y
sta (pData),y sta (pData),y
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -100,12 +84,10 @@ BUF.InsertA sta TmpByte
>LDYA BUF.COffset >LDYA BUF.COffset
>STYA TmpCount >STYA TmpCount
ldy #0
.1 jsr BUF.CopyCount .1 jsr BUF.CopyCount
.2 lda TmpByte .2 lda TmpByte
sta (BufPtr),y sta (BufPtr)
inc BufPtr inc BufPtr
bne .3 bne .3
inc BufPtr+1 inc BufPtr+1
@ -125,6 +107,82 @@ BUF.InsertA sta TmpByte
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
BUF.DelSel jsr BUF.GetSelLen
bcs .8
>STYA SelLen
.10 jsr BUF.ComputeCOffset
ldy #SelStart
lda (pData),y
sta TmpCount
sec
sbc BUF.COffset
iny
lda (pData),y
sta TmpCount+1
sbc BUF.COffset+1
bcs .11
ldy #FileY
lda (pData),y
sec
sbc #1
sta (pData),y
iny
lda (pData),y
sbc #0
sta (pData),y
ldy #FileX
lda #0
sta (pData),y
bra .10
.11 ldy #FileLen
lda (pData),y
sec
sbc SelLen
pha
iny
lda (pData),y
sbc SelLen+1
ply
iny
bne .1
inc
.1 jsr BUF.GetNewYA
bcs .9
jsr BUF.CopyCount
lda BufPtrBackup
clc
adc SelLen
sta BufPtrBackup
lda BufPtrBackup+1
adc SelLen+1
sta BufPtrBackup+1
jsr BUF.CopyTail
ldy #FileLen
lda (pData),y
sec
sbc SelLen
sta (pData),y
ldy #FileLen+1
lda (pData),y
sbc SelLen+1
sta (pData),y
jsr BUF.ResetSel
.8 clc
.9 rts
*--------------------------------------
BUF.Del ldy #FileLen BUF.Del ldy #FileLen
lda (pData),y lda (pData),y
iny iny
@ -158,11 +216,9 @@ BUF.Del ldy #FileLen
>LDYA BUF.COffset >LDYA BUF.COffset
>STYA TmpCount >STYA TmpCount
ldy #0
jsr BUF.CopyCount jsr BUF.CopyCount
lda (BufPtrBackup),y lda (BufPtrBackup)
tax Save deleted char for later tax Save deleted char for later
inc BufPtrBackup inc BufPtrBackup
@ -180,28 +236,17 @@ BUF.Del ldy #FileLen
lda (pData),y lda (pData),y
sbc #0 sbc #0
sta (pData),y sta (pData),y
jsr BUF.ResetSel
txa Get back deleted char txa Get back deleted char
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
BUF.SelToClipboard BUF.SelToClipboard
ldy #SelEnd+1 jsr BUF.GetSelLen
lda (pData),y bcs .8
tax >STYA TmpCount
dey
lda (pData),y
sec
ldy #SelStart
sbc (pData),y
sta TmpCount
iny
txa
sbc (pData),y
bcc .8
sta TmpCount+1
ora TmpCount
beq .8
ldy #hClipBoard ldy #hClipBoard
lda (pData),y lda (pData),y
@ -231,6 +276,19 @@ BUF.SelToClipboard
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA BufPtr >STYA BufPtr
lda BufPtr
clc
ldy #SelStart
adc (pData),y
sta BufPtr
lda BufPtr+1
iny
adc (pData),y
sta BufPtr+1
ldy #0
.2 jsr DecTmpCount .2 jsr DecTmpCount
beq .8 beq .8
lda (BufPtr),y lda (BufPtr),y
@ -240,27 +298,47 @@ BUF.SelToClipboard
inc BufPtr+1 inc BufPtr+1
inc ClipboardPtr+1 inc ClipboardPtr+1
bra .2 bra .2
jsr BUF.ResetSel
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
BUF.CopyClipboard
jsr DecTmpCount
beq .9
lda (ClipboardPtr)
sta (BufPtr)
inc ClipboardPtr
bne .1
inc ClipboardPtr+1
.1 inc BufPtr
bne BUF.CopyClipboard
inc BufPtr+1
bra BUF.CopyClipboard
.9 rts
*--------------------------------------
BUF.CopyCount jsr DecTmpCount BUF.CopyCount jsr DecTmpCount
beq .9 beq .9
lda (BufPtrBackup),y lda (BufPtrBackup)
sta (BufPtr),y sta (BufPtr)
iny inc BufPtrBackup
bne BUF.CopyCount bne .1
inc BufPtrBackup+1 inc BufPtrBackup+1
.1 inc BufPtr
bne BUF.CopyCount
inc BufPtr+1 inc BufPtr+1
bra BUF.CopyCount bra BUF.CopyCount
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
BUF.CopyTail lda (BufPtrBackup),y BUF.CopyTail lda (BufPtrBackup)
beq .9 beq .9
sta (BufPtr),y sta (BufPtr)
iny inc BufPtrBackup
bne BUF.CopyTail bne .1
inc BufPtrBackup+1 inc BufPtrBackup+1
.1 inc BufPtr
bne BUF.CopyTail
inc BufPtr+1 inc BufPtr+1
bra BUF.CopyTail bra BUF.CopyTail
.9 rts .9 rts
@ -387,6 +465,67 @@ BUF.GetNewYA >STYA TmpLen
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
BUF.ResetSel lda #0
ldy #SelStart
sta (pData),y
iny
sta (pData),y
ldy #SelEnd
sta (pData),y
iny
sta (pData),y
rts
*--------------------------------------
BUF.CheckSelected
sec
lda BUF.COffset
ldy #SelStart
sbc (pData),y
lda BUF.COffset+1
iny
sbc (pData),y
bcc .9
lda BUF.COffset
ldy #SelEnd
sbc (pData),y
lda BUF.COffset+1
iny
sbc (pData),y
rts CC if in selection
.9 sec
rts
*--------------------------------------
* Out : CC if ok, YA=SelLen
*--------------------------------------
BUF.GetSelLen ldy #SelEnd
lda (pData),y
sec
ldy #SelStart
sbc (pData),y
tax
ldy #SelEnd+1
lda (pData),y
sec
ldy #SelStart+1
sbc (pData),y
bcc .9
phx
ply
bne .8
tax
beq .9
.8 clc
rts
.9 sec
rts
*--------------------------------------
MAN MAN
SAVE BIN/EDIT.S.BUF SAVE BIN/EDIT.S.BUF
LOAD BIN/EDIT.S LOAD BIN/EDIT.S

View File

@ -26,9 +26,9 @@ AUTO 6
* ^T = Go To Top of file * ^T = Go To Top of file
***** ^U ***** ^U
* ^V = Paste Block * ^V = Paste Block
* ^W = * ^W = Erase line
* ^X = Cut Block * ^X = Cut Block
* ^Y = * ^Y = End Of File
* ^Z = Undo * ^Z = Undo
*-------------------------------------- *--------------------------------------
Ctrl.Invalid Ctrl.Invalid
@ -91,9 +91,12 @@ Ctrl.C jsr BUF.SelToClipboard
rts rts
.9 jmp Ctrl.Q .9 jmp Ctrl.Q
*-------------------------------------- *--------------------------------------
Ctrl.D Ctrl.D jsr BUF.DelSel
clc bcs .9
rts jsr SCRN.UpdateMain
bcs .9
jmp SCRN.UpdateStatusBar
.9 jmp Ctrl.Q
*-------------------------------------- *--------------------------------------
Ctrl.E jsr BUF.ComputeCOffset Ctrl.E jsr BUF.ComputeCOffset
lda BUF.COffset lda BUF.COffset
@ -328,9 +331,17 @@ Ctrl.S lda #PromptModeSave
rts rts
.9 jmp Ctrl.Q .9 jmp Ctrl.Q
*-------------------------------------- *--------------------------------------
Ctrl.T Ctrl.T lda #0
clc ldy #FileX
sta (pData),y
ldy #FileY
sta (pData),y
iny
sta (pData),y
jsr SCRN.UpdateViewPort
bcs .9
rts rts
.9 jmp Ctrl.Q
*-------------------------------------- *--------------------------------------
Ctrl.FS ldy #FileY+1 Ctrl.FS ldy #FileY+1
lda (pData),y lda (pData),y
@ -395,9 +406,15 @@ Ctrl.W
clc clc
rts rts
*-------------------------------------- *--------------------------------------
Ctrl.X Ctrl.X jsr BUF.SelToClipboard
clc bcs .99
rts jsr BUF.DelSel
bcs .9
jsr SCRN.UpdateMain
bcs .9
jmp SCRN.UpdateStatusBar
.9 jmp Ctrl.Q
.99 rts
*-------------------------------------- *--------------------------------------
Ctrl.Y Ctrl.Y
clc clc

View File

@ -476,13 +476,13 @@ MSG.STATUSBAR.S >PSTRING "\e[%d;1H\e[7mSave:%S\e[K\e[0m"
MSG.STATUSBAR.E >PSTRING "\e[%d;1H\e[7mError:%h\e[K\e[0m" MSG.STATUSBAR.E >PSTRING "\e[%d;1H\e[7mError:%h\e[K\e[0m"
MSG.NEWFILE >PSTRING "(new file)" MSG.NEWFILE >PSTRING "(new file)"
MSG.GOTOXY >PSTRING "\e[%d;%dH" MSG.GOTOXY >PSTRING "\e[%d;%dH"
MSG.HELP >PSTRING "All commands:" MSG.HELP >PSTRING "All commands: (* = Not yet implemented)"
>PSTRING "(* = Not yet implemented)" >PSTRING "------------"
>PSTRING " Ctrl-A : This help screen" >PSTRING " Ctrl-A : This help screen"
>PSTRING " Ctrl-B : Mark begining of block" >PSTRING " Ctrl-B : Mark beginning of selection"
>PSTRING " Ctrl-C : * Copy block to clipboard" >PSTRING " Ctrl-C : Copy selection to clipboard"
>PSTRING " Ctrl-D : * Delete marked block" >PSTRING " Ctrl-D : Delete selection"
>PSTRING " Ctrl-E : Mark end of block" >PSTRING " Ctrl-E : Mark end of selection"
>PSTRING " Ctrl-F : * Find a string..." >PSTRING " Ctrl-F : * Find a string..."
>PSTRING " Ctrl-G : Go to start of current line" >PSTRING " Ctrl-G : Go to start of current line"
>PSTRING " Ctrl-L : Go to end of current line" >PSTRING " Ctrl-L : Go to end of current line"
@ -492,11 +492,11 @@ MSG.HELP >PSTRING "All commands:"
>PSTRING " Ctrl-Q : Quit" >PSTRING " Ctrl-Q : Quit"
>PSTRING " Ctrl-R : * Replace found string with..." >PSTRING " Ctrl-R : * Replace found string with..."
>PSTRING " Ctrl-S : Save file to disk..." >PSTRING " Ctrl-S : Save file to disk..."
>PSTRING " Ctrl-T : * Go to top of file" >PSTRING " Ctrl-T : Go to top of file"
>PSTRING " Ctrl-V : * Past clipboard" >PSTRING " Ctrl-V : Past clipboard at cursor position"
>PSTRING " Ctrl-W : " >PSTRING " Ctrl-W : * Erase current line"
>PSTRING " Ctrl-X : * Cut block to clipboard" >PSTRING " Ctrl-X : Cut block to clipboard"
>PSTRING " Ctrl-Y : " >PSTRING " Ctrl-Y : * Go to bottom of file"
>PSTRING " Ctrl-Z : * Undo previous change" >PSTRING " Ctrl-Z : * Undo previous change"
.HS 00 .HS 00
EscChars >PSTRING "DBAC" EscChars >PSTRING "DBAC"
@ -506,6 +506,7 @@ TmpByte .BS 1
TmpLen .BS 2 TmpLen .BS 2
TmpCount .BS 2 TmpCount .BS 2
TmpIndex .BS 2 TmpIndex .BS 2
SelLen .BS 2
BUF.LOffset .BS 2 BUF.LOffset .BS 2
BUF.COffset .BS 2 BUF.COffset .BS 2
BUF.TmpLine1 .BS 2 BUF.TmpLine1 .BS 2