A2osX/BIN/EDIT.S.BUF.txt
2019-05-29 07:58:28 +02:00

542 lines
7.8 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
*--------------------------------------
BUF.InsertClipboard
ldy #hClipBoard
lda (pData),y
beq .8
>SYSCALL GetMemPtr
>STYA ClipboardPtr
jsr BUF.ComputeCOffset
lda BufLen
sec
ldy #ClipboardLen
adc (pData),y
pha
lda BufLen+1
iny
adc (pData),y
ply
jsr BUF.GetNewYA
bcs .9
>LDYA BUF.COffset
jsr BUF.CopyCount
jsr BUF.CopyClipboard
jsr BUF.CopyTail
.4 ldy #ClipboardLen
lda (pData),y
clc
adc BufLen
sta (pData),y
iny
lda (pData),y
adc BufLen+1
sta (pData),y
.8 clc
.9 rts
*--------------------------------------
BUF.InsertA sta TmpByte
jsr BUF.ComputeCOffset
cpy #255
bne .10
clc
rts
.10 lda BufLen
clc
adc #2
pha
lda BufLen+1
adc #0
ply
jsr BUF.GetNewYA
bcs .9
>LDYA BUF.COffset
.1 jsr BUF.CopyCount
.2 lda TmpByte
sta (BufPtr)
inc BufPtr
bne .3
inc BufPtr+1
.3 jsr BUF.CopyTail
.4 lda BufLen
clc
adc #1
sta BufLen
bcc .8
inc BufLen+1
.8 clc
.9 rts
*--------------------------------------
BUF.DelSel jsr BUF.GetSelLen
bcs .8
>STYA SelLen
.10 jsr BUF.ComputeCOffset
>LDA.G SelStart
cmp BUF.COffset
iny
lda (pData),y
sbc BUF.COffset+1
bcs .11
>DECW.G FileY
>STZ.G FileX
bra .10
.11 lda BufLen
sec
sbc SelLen
pha
lda BufLen+1
sbc SelLen+1
ply
iny
bne .1
inc
.1 jsr BUF.GetNewYA
bcs .9
>LDYA.G SelStart
jsr BUF.CopyCount
lda BufPtrBackup
clc
adc SelLen
sta BufPtrBackup
lda BufPtrBackup+1
adc SelLen+1
sta BufPtrBackup+1
jsr BUF.CopyTail
lda BufLen
sec
sbc SelLen
sta BufLen
lda BufLen+1
sbc SelLen+1
sta BufLen+1
jsr BUF.ResetSel
.8 clc
.9 rts
*--------------------------------------
* Erase char at CurXY
*--------------------------------------
BUF.DelCharAtCursor
>LDYA BufLen
jsr BUF.GetNewYA BufferLen-1
bcs .9
>LDYA BUF.COffset
jsr BUF.CopyCount
.3 lda (BufPtrBackup)
pha Save deleted char for later
inc BufPtrBackup
bne .4
inc BufPtrBackup+1
.4 jsr BUF.CopyTail
lda BufLen
bne .5
dec BufLen+1
.5 dec BufLen
jsr BUF.ResetSel
pla Get back deleted char
clc
.9 rts
*--------------------------------------
BUF.SelToClipboard
jsr BUF.GetSelLen
bcs .8
>STYA SelLen
>LDA.G hClipBoard
beq .1
>SYSCALL FreeMem
.1 >LDYA SelLen
>SYSCALL GetMem
bcs .9
>STYA ClipboardPtr
txa
>STA.G hClipBoard
ldy #hBuffer
lda (pData),y
>SYSCALL GetMemPtr
pha
tya
* clc
>ADC.G SelStart
sta BufPtr
pla
>ADC.G SelStart+1
sta BufPtr+1
lda SelLen
ldy #ClipBoardLen+1
sta (pData),y
eor #$ff
tax
iny
lda SelLen
sta (pData),y
eor #$ff
pha
ldy #0
.2 inx
bne .3
pla
inc
beq .7
pha
.3 lda (BufPtr),y
sta (ClipboardPtr),y
iny
bne .2
inc BufPtr+1
inc ClipboardPtr+1
bra .2
.7 jsr BUF.ResetSel
.8 clc
.9 rts
*--------------------------------------
BUF.CopyClipboard
>LDA.G ClipboardLen
eor #$ff
tax
iny
lda (pData),y
eor #$ff
pha
ldy #0
.1 inx
bne .2
pla
inc
beq .3
pha
.2 lda (ClipboardPtr),y
sta (BufPtr),y
iny
bne .1
inc ClipboardPtr+1
inc BufPtr+1
bra .1
.3 tya
clc
adc ClipboardPtr
sta ClipboardPtr
bcc .4
inc ClipboardPtr+1
.4 tya
clc
adc BufPtr
sta BufPtr
bcc .8
inc BufPtr+1
.8 rts
*--------------------------------------
BUF.CopyCount eor #$ff
pha
tya
eor #$ff
tax
ldy #0
.1 inx
bne .2
pla
inc
beq .3
pha
.2 lda (BufPtrBackup),y
sta (BufPtr),y
iny
bne .1
inc BufPtrBackup+1
inc BufPtr+1
bra .1
.3 tya
clc
adc BufPtrBackup
sta BufPtrBackup
bcc .4
inc BufPtrBackup+1
.4 tya
clc
adc BufPtr
sta BufPtr
bcc .8
inc BufPtr+1
.8 rts
*--------------------------------------
BUF.CopyTail lda (BufPtrBackup)
sta (BufPtr)
beq .9
inc BufPtrBackup
bne .1
inc BufPtrBackup+1
.1 inc BufPtr
bne BUF.CopyTail
inc BufPtr+1
bra BUF.CopyTail
.9 rts
*--------------------------------------
* Out : Y = Line Length
*--------------------------------------
BUF.ComputeCOffset
jsr BUF.GetLine
bcs .9
phy save line length
ldy #FileX
lda (pData),y
clc
adc BUF.LOffset
sta BUF.COffset
lda #0
adc BUF.LOffset+1
sta BUF.COffset+1
ply
clc
.9 rts
*--------------------------------------
BUF.GetLine ldy #FileY+1
lda (pData),y
tax
dey
lda (pData),y
BUF.GetLineAX sta BUF.TmpLine1
stx BUF.TmpLine1+1
stz BUF.LOffset
stz BUF.LOffset+1
ldy #hBuffer
lda (pData),y
>SYSCALL GetMemPtr
>STYA BufPtr
stz BUF.TmpLine2
stz BUF.TmpLine2+1
.1 ldy #0
.2 lda (BufPtr),y
beq .7
cmp #C.CR
beq .3
iny
bne .2
.3 lda BUF.TmpLine1
cmp BUF.TmpLine2
bne .4
lda BUF.TmpLine1+1
cmp BUF.TmpLine2+1
beq .8
.4 tya
sec
adc BufPtr
sta BufPtr
bcc .5
inc BufPtr+1
.5 tya
sec
adc BUF.LOffset
sta BUF.LOffset
bcc .6
inc BUF.LOffset+1
.6 inc BUF.TmpLine2
bne .1
inc BUF.TmpLine2+1
bra .1
.7 lda BUF.TmpLine1
cmp BUF.TmpLine2
bne .9
lda BUF.TmpLine1+1
cmp BUF.TmpLine2+1
bne .9
.8 clc Y = Line length
rts
.9 sec
rts
*--------------------------------------
BUF.GetNewYA phy
pha
>LDA.G hBufferBackup
beq .1
>SYSCALL FreeMem
.1 >LDA.G hBuffer
>STA.G hBufferBackup
>SYSCALL GetMemPtr
>STYA BufPtrBackup
pla
ply
>SYSCALL GetMem
bcs .9
>STYA BufPtr
txa
>STA.G hBuffer
.9 rts
*--------------------------------------
BUF.ResetSel ldy #SelStart
lda #0
.1 sta (pData),y
iny
cpy #SelEnd+2
bne .1
rts
*--------------------------------------
BUF.CheckSelected
ldy #SelStart
lda BUF.COffset
cmp (pData),y
iny
lda BUF.COffset+1
sbc (pData),y
bcc .9
iny #SelEnd
lda BUF.COffset
cmp (pData),y
iny
lda BUF.COffset+1
sbc (pData),y
.9 ror $80 = selected
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 USR/SRC/BIN/EDIT.S.BUF
LOAD USR/SRC/BIN/EDIT.S
ASM