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
.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
ldy #hClipBoard
lda (pData),y
beq .8
>SYSCALL SYS.GetMemPtrA
>STYA ClipboardPtr
jsr BUF.ComputeCOffset
ldy #FileLen
lda (pData),y
sec
@ -41,40 +29,36 @@ BUF.InsertClipboard
jsr BUF.GetNewYA
bcs .9
jsr BUF.ComputeCOffset
>LDYA BUF.COffset
>STYA TmpCount
ldy #0
jsr BUF.CopyCount
phy
clc
lda BufPtr
ldy #ClipboardLen
adc (pData),y
sta BufPtr
lda (pData),y
sta TmpCount
iny
lda BufPtr+1
adc (pData),y
sta BufPtr+1
lda (pData),y
sta TmpCount+1
jsr BUF.CopyClipboard
ply
jsr BUF.CopyTail
.4 ldy #FileLen
.4 ldy #ClipboardLen+1
lda (pData),y
inc
sta (pData),y
bne .8
tax
dey
lda (pData),y
clc
ldy #FileLen
adc (pData),y
sta (pData),y
iny
lda (pData),y
inc
txa
adc (pData),y
sta (pData),y
.8 clc
.9 rts
*--------------------------------------
@ -100,12 +84,10 @@ BUF.InsertA sta TmpByte
>LDYA BUF.COffset
>STYA TmpCount
ldy #0
.1 jsr BUF.CopyCount
.2 lda TmpByte
sta (BufPtr),y
sta (BufPtr)
inc BufPtr
bne .3
inc BufPtr+1
@ -125,6 +107,82 @@ BUF.InsertA sta TmpByte
.8 clc
.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
lda (pData),y
iny
@ -158,11 +216,9 @@ BUF.Del ldy #FileLen
>LDYA BUF.COffset
>STYA TmpCount
ldy #0
jsr BUF.CopyCount
lda (BufPtrBackup),y
lda (BufPtrBackup)
tax Save deleted char for later
inc BufPtrBackup
@ -180,28 +236,17 @@ BUF.Del ldy #FileLen
lda (pData),y
sbc #0
sta (pData),y
jsr BUF.ResetSel
txa Get back deleted char
clc
.9 rts
*--------------------------------------
BUF.SelToClipboard
ldy #SelEnd+1
lda (pData),y
tax
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
jsr BUF.GetSelLen
bcs .8
>STYA TmpCount
ldy #hClipBoard
lda (pData),y
@ -231,6 +276,19 @@ BUF.SelToClipboard
>SYSCALL SYS.GetMemPtrA
>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
beq .8
lda (BufPtr),y
@ -240,27 +298,47 @@ BUF.SelToClipboard
inc BufPtr+1
inc ClipboardPtr+1
bra .2
jsr BUF.ResetSel
.8 clc
.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
beq .9
lda (BufPtrBackup),y
sta (BufPtr),y
iny
bne BUF.CopyCount
lda (BufPtrBackup)
sta (BufPtr)
inc BufPtrBackup
bne .1
inc BufPtrBackup+1
.1 inc BufPtr
bne BUF.CopyCount
inc BufPtr+1
bra BUF.CopyCount
.9 rts
*--------------------------------------
BUF.CopyTail lda (BufPtrBackup),y
BUF.CopyTail lda (BufPtrBackup)
beq .9
sta (BufPtr),y
iny
bne BUF.CopyTail
sta (BufPtr)
inc BufPtrBackup
bne .1
inc BufPtrBackup+1
.1 inc BufPtr
bne BUF.CopyTail
inc BufPtr+1
bra BUF.CopyTail
.9 rts
@ -387,6 +465,67 @@ BUF.GetNewYA >STYA TmpLen
.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
SAVE BIN/EDIT.S.BUF
LOAD BIN/EDIT.S

View File

@ -26,9 +26,9 @@ AUTO 6
* ^T = Go To Top of file
***** ^U
* ^V = Paste Block
* ^W =
* ^W = Erase line
* ^X = Cut Block
* ^Y =
* ^Y = End Of File
* ^Z = Undo
*--------------------------------------
Ctrl.Invalid
@ -91,9 +91,12 @@ Ctrl.C jsr BUF.SelToClipboard
rts
.9 jmp Ctrl.Q
*--------------------------------------
Ctrl.D
clc
rts
Ctrl.D jsr BUF.DelSel
bcs .9
jsr SCRN.UpdateMain
bcs .9
jmp SCRN.UpdateStatusBar
.9 jmp Ctrl.Q
*--------------------------------------
Ctrl.E jsr BUF.ComputeCOffset
lda BUF.COffset
@ -328,9 +331,17 @@ Ctrl.S lda #PromptModeSave
rts
.9 jmp Ctrl.Q
*--------------------------------------
Ctrl.T
clc
Ctrl.T lda #0
ldy #FileX
sta (pData),y
ldy #FileY
sta (pData),y
iny
sta (pData),y
jsr SCRN.UpdateViewPort
bcs .9
rts
.9 jmp Ctrl.Q
*--------------------------------------
Ctrl.FS ldy #FileY+1
lda (pData),y
@ -395,9 +406,15 @@ Ctrl.W
clc
rts
*--------------------------------------
Ctrl.X
clc
rts
Ctrl.X jsr BUF.SelToClipboard
bcs .99
jsr BUF.DelSel
bcs .9
jsr SCRN.UpdateMain
bcs .9
jmp SCRN.UpdateStatusBar
.9 jmp Ctrl.Q
.99 rts
*--------------------------------------
Ctrl.Y
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.NEWFILE >PSTRING "(new file)"
MSG.GOTOXY >PSTRING "\e[%d;%dH"
MSG.HELP >PSTRING "All commands:"
>PSTRING "(* = Not yet implemented)"
MSG.HELP >PSTRING "All commands: (* = Not yet implemented)"
>PSTRING "------------"
>PSTRING " Ctrl-A : This help screen"
>PSTRING " Ctrl-B : Mark begining of block"
>PSTRING " Ctrl-C : * Copy block to clipboard"
>PSTRING " Ctrl-D : * Delete marked block"
>PSTRING " Ctrl-E : Mark end of block"
>PSTRING " Ctrl-B : Mark beginning of selection"
>PSTRING " Ctrl-C : Copy selection to clipboard"
>PSTRING " Ctrl-D : Delete selection"
>PSTRING " Ctrl-E : Mark end of selection"
>PSTRING " Ctrl-F : * Find a string..."
>PSTRING " Ctrl-G : Go to start 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-R : * Replace found string with..."
>PSTRING " Ctrl-S : Save file to disk..."
>PSTRING " Ctrl-T : * Go to top of file"
>PSTRING " Ctrl-V : * Past clipboard"
>PSTRING " Ctrl-W : "
>PSTRING " Ctrl-X : * Cut block to clipboard"
>PSTRING " Ctrl-Y : "
>PSTRING " Ctrl-T : Go to top of file"
>PSTRING " Ctrl-V : Past clipboard at cursor position"
>PSTRING " Ctrl-W : * Erase current line"
>PSTRING " Ctrl-X : Cut block to clipboard"
>PSTRING " Ctrl-Y : * Go to bottom of file"
>PSTRING " Ctrl-Z : * Undo previous change"
.HS 00
EscChars >PSTRING "DBAC"
@ -506,6 +506,7 @@ TmpByte .BS 1
TmpLen .BS 2
TmpCount .BS 2
TmpIndex .BS 2
SelLen .BS 2
BUF.LOffset .BS 2
BUF.COffset .BS 2
BUF.TmpLine1 .BS 2