A2osX/BIN/EDIT.S.BUF.txt
2016-01-29 18:05:08 +01:00

394 lines
6.2 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.

PR#3
PREFIX /A2OSX.SRC
NEW
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 #FileLen
lda (pData),y
sec
ldy #ClipboardLen
adc (pData),y
pha
ldy #FileLen+1
lda (pData),y
ldy #ClipboardLen+1
adc (pData),y
ply
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
iny
lda BufPtr+1
adc (pData),y
sta BufPtr+1
ply
jsr BUF.CopyTail
.4 ldy #FileLen
lda (pData),y
inc
sta (pData),y
bne .8
iny
lda (pData),y
inc
sta (pData),y
.8 clc
.9 rts
*--------------------------------------
BUF.InsertA sta TmpByte
jsr BUF.ComputeCOffset
cpy #255
bne .10
clc
rts
.10 ldy #FileLen
lda (pData),y
sec
adc #1
pha
iny
lda (pData),y
adc #0
ply
jsr BUF.GetNewYA
bcs .9
>LDYA BUF.COffset
>STYA TmpCount
ldy #0
.1 jsr BUF.CopyCount
.2 lda TmpByte
sta (BufPtr),y
inc BufPtr
bne .3
inc BufPtr+1
.3 jsr BUF.CopyTail
.4 ldy #FileLen
lda (pData),y
inc
sta (pData),y
bne .8
iny
lda (pData),y
inc
sta (pData),y
.8 clc
.9 rts
*--------------------------------------
BUF.Del ldy #FileLen
lda (pData),y
iny
ora (pData),y
bne .10
clc exit with A=0
rts
.10 jsr BUF.ComputeCOffset
lda BUF.COffset
clc
ldy #FileLen
sbc (pData),y
lda BUF.COffset+1
iny
sbc (pData),y
bcc .11
lda #0 exit with A=0
clc
rts
.11 lda (pData),y
pha
dey
lda (pData),y
tay
pla
jsr BUF.GetNewYA
bcs .9
>LDYA BUF.COffset
>STYA TmpCount
ldy #0
jsr BUF.CopyCount
lda (BufPtrBackup),y
tax Save deleted char for later
inc BufPtrBackup
bne .3
inc BufPtrBackup+1
.3 jsr BUF.CopyTail
ldy #FileLen
lda (pData),y
sec
sbc #1
sta (pData),y
iny
lda (pData),y
sbc #0
sta (pData),y
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
ldy #hClipBoard
lda (pData),y
beq .1
>SYSCALL SYS.FreeMemA
.1 >PUSHW TmpCount
>PUSHB 0
>SYSCALL SYS.GetMem
bcs .9
>STYA ClipboardPtr
txa
ldy #hClipBoard
sta (pData),y
ldy #ClipBoardLen
lda TmpCount
sta (pData),y
iny
lda TmpCount+1
sta (pData),y
ldy #hBuffer
lda (pData),y
>SYSCALL SYS.GetMemPtrA
>STYA BufPtr
.2 jsr DecTmpCount
beq .8
lda (BufPtr),y
sta (ClipboardPtr),y
iny
bne .2
inc BufPtr+1
inc ClipboardPtr+1
bra .2
.8 clc
.9 rts
*--------------------------------------
BUF.CopyCount jsr DecTmpCount
beq .9
lda (BufPtrBackup),y
sta (BufPtr),y
iny
bne BUF.CopyCount
inc BufPtrBackup+1
inc BufPtr+1
bra BUF.CopyCount
.9 rts
*--------------------------------------
BUF.CopyTail lda (BufPtrBackup),y
beq .9
sta (BufPtr),y
iny
bne BUF.CopyTail
inc BufPtrBackup+1
inc BufPtr+1
bra BUF.CopyTail
.9 rts
*--------------------------------------
* Out : Y = Line Length
*--------------------------------------
BUF.ComputeCOffset
ldy #FileY+1
lda (pData),y
tax
dey
lda (pData),y
jsr BUF.GetLineAX
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.GetLineAX >STAX BUF.TmpLine1
stz BUF.LOffset
stz BUF.LOffset+1
ldy #hBuffer
lda (pData),y
>SYSCALL SYS.GetMemPtrA
>STYA BufPtr
stz BUF.TmpLine2
stz BUF.TmpLine2+1
.1 ldy #0
.2 lda (BufPtr),y
beq .7
cmp #13
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.GetCharAtY tya
clc
adc BUF.LOffset
sta BUF.COffset
lda #0
adc BUF.LOffset+1
sta BUF.COffset+1
lda (BufPtr),y
clc
rts
*--------------------------------------
BUF.GetNewYA >STYA TmpLen
ldy #hBufferBackup
lda (pData),y
beq .1
>SYSCALL SYS.FreeMemA
.1 ldy #hBuffer
lda (pData),y
ldy #hBufferBackup
sta (pData),y
>SYSCALL SYS.GetMemPtrA
>STYA BufPtrBackup
>PUSHW TmpLen
>PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem
bcs .9
>STYA BufPtr
txa
ldy #hBuffer
sta (pData),y
.9 rts
*--------------------------------------
MAN
SAVE BIN/EDIT.S.BUF
LOAD BIN/EDIT.S
ASM