A2osX/BIN/EDIT.S.SCRN.txt
2019-10-03 08:25:27 +02:00

529 lines
9.0 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
*--------------------------------------
SCRN.Init >LDYAI 510+5+5+4+1 potentially 255*\\ NORM,INV,CEOL & \0
>SYSCALL Getmem
bcs .9
>STYA LineBufPtr
txa
>STA.G hLineBuffer
>LDA.G ScreenH
dec
>PUSHA
>PUSHBI 1
>LDYA L.SEQ.INIT
>SYSCALL printf
bcs .9
lda #0
ldy #FileX
sta (pData),y
ldy #FileY
sta (pData),y
iny
sta (pData),y
ldy #ScreenX
sta (pData),y
ldy #ScreenY
sta (pData),y
iny
sta (pData),y
jsr SCRN.UpdateTopBar
bcs .9
jsr SCRN.UpdateViewPort
bcs .9
jsr SCRN.UpdateMain
.9 rts
*--------------------------------------
SCRN.UpdateTopBar
lda #1
jsr SCRN.InvLineA
bcs .9
>LDA.G hFileName
beq .1
>SYSCALL GetMemPtr
bra .2
.1 >LDYA L.MSG.NEWFILE
.2 >PUSHYA
>PUSHBI 2
>LDYA L.MSG.TOPBAR
>SYSCALL printf
.9 rts
*--------------------------------------
SCRN.UpdateMain >LDA.G ScreenY
sta TmpIndex
iny
lda (pData),y
sta TmpIndex+1
lda #0
sta TmpByte
>LDA.G ViewPortH
sta TmpCount
.1 lda TmpIndex
ldx TmpIndex+1
jsr BUF.GetLineAX Y = line length
bcs .5
lda TmpByte
jsr SCRN.UpdateLineAtALenY
bcs SCRN.UpdateMain.9
.3 inc TmpByte
inc TmpIndex
bne .4
inc TmpIndex+1
.4 dec TmpCount
bne .1
jmp SCRN.GotoCurXCurY
.5 ldx #0
ldy TmpByte
jsr GotoXY
bcs SCRN.UpdateMain.9
>PUSHBI 0
>LDYA L.SEQ.CEOL
>SYSCALL printf
bcs SCRN.UpdateMain.9
inc TmpByte
dec TmpCount
bne .5
jmp SCRN.GotoCurXCurY
SCRN.UpdateMain.9
rts
*--------------------------------------
SCRN.UpdateCurrentLine
>LDA.G ScreenY+1
tax
dey
lda (pData),y
clc
>ADC.G CurY
bcc .1
inx
.1 jsr BUF.GetLineAX
bcs SCRN.UpdateMain.9
phy
>LDA.G CurY
ply
*--------------------------------------
* A = Target Screen Y position
* BufPtr = Text line start, Y = len
*--------------------------------------
SCRN.UpdateLineAtALenY
stz bSelected
sty TmpLen
ldx #0
tay
jsr GotoXY
bcs SCRN.UpdateMain.9
>LDYA LineBufPtr
>STYA ZPPTR1
>LDA.G ScreenW
tax
>LDA.G ScreenX
cmp TmpLen
bcs .8
tay
clc
adc BUF.LOffset
sta BUF.COffset
lda #0
adc BUF.LOffset+1
sta BUF.COffset+1
tya
* clc
adc BufPtr
sta BufPtr
bcc .1
inc BufPtr+1
.1 lda (BufPtr)
beq .8
cmp #C.CR
beq .8
jsr BUF.CheckSelected
eor bSelected
bpl .5
jsr SCRN.ToggleSel
.5 lda (BufPtr)
cmp #'\'
beq .50
cmp #'%'
bne .51
.50 pha
lda #'\'
jsr SCRN.ToLineBuf
pla
.51 jsr SCRN.ToLineBuf
inc BufPtr
bne .6
inc BufPtr+1
.6 inc BUF.COffset
bne .7
inc BUF.COffset+1
.7 dex
bne .1
.8 bit bSelected
bpl .80
jsr SCRN.ToggleSel
.80 ldy #0
.81 lda SEQ.CEOL,y
beq .82
jsr SCRN.ToLineBuf
iny
bra .81
.82 sta (ZPPTR1)
>PUSHBI 0
>LDYA LineBufPtr
>SYSCALL printf
.9 rts
*--------------------------------------
SCRN.ToggleSel ldy #0
lda bSelected
eor #$ff
sta bSelected
bpl .1
ldy #6
.1 lda SEQ.NORM,y
beq .8
jsr SCRN.ToLineBuf
iny
bra .1
.8 rts
*--------------------------------------
SCRN.ToLineBuf sta (ZPPTR1)
inc ZPPTR1
bne .8
inc ZPPTR1+1
.8 rts
*--------------------------------------
SCRN.UpdateStatusBar
>PUSHBI 1
>PUSHB.G ScreenH
>PUSHBI 2
>LDYA L.MSG.GOTOXY
>SYSCALL printf
bcs .9
>PUSHBI 0
>LDYA L.SEQ.INV
>SYSCALL printf
bcs .9
>LDA.G PromptMode
bne .2
>LDA.G FileY
tax
iny
lda (pData),y
inx
bne .1
inc
.1 >PUSHA
txa
>PUSHA
>LDA.G FileX
inc
>PUSHA
>PUSHW BufLen
>PUSHBI 5
>LDYA L.MSG.STATUSBAR
>SYSCALL printf
bcs .9
lda #58
jsr SCRN.ClearEOLA
bcs .9
>PUSHBI 0
>LDYA L.SEQ.NORM
>SYSCALL printf
bcs .9
jmp SCRN.GotoCurXCurY
.9 rts
*--------------------------------------
.2 eor #PromptModeHelp
beq .3
>PUSHW pData
lda #2
.3 >PUSHA
>LDA.G ScreenH
jsr SCRN.InvLineA
bcs .9
ldy #PromptMode
lda (pData),y
tax
>LDYA L.MSG.STATUSBAR,x
>SYSCALL printf
bcs .9
rts
*--------------------------------------
SCRN.UpdateStatusBarErrA
pha
ldy #ScreenH
lda (pData),y
dec
jsr SCRN.InvLineA
pla
>PUSHA
>PUSHBI 1
>LDYA L.MSG.STATUSBAR.E
>SYSCALL printf
rts
*--------------------------------------
SCRN.CursorAdjust
.1 jsr BUF.ComputeCOffset
bcc .8
>DECW.G FileY
>STZ.G FileX
bra .1
.8 rts
*--------------------------------------
SCRN.ClearEOLA pha
.1 pla
ldy #ScreenW
cmp (pData),y
bcs .8
inc
pha
lda #' '
>SYSCALL PutChar
bcc .1
plx
rts
.8 clc
.9 rts
*--------------------------------------
SCRN.InvLineA sta .2+1
lda #1
>PUSHA
lda .2+1
>PUSHA
>PUSHBI 2
>LDYA L.MSG.GOTOXY
>SYSCALL printf
bcs .9
>PUSHBI 0
>LDYA L.SEQ.INV
>SYSCALL printf
bcs .9
ldy #ScreenW
lda (pData),y
.1 pha
lda #' '
>SYSCALL PutChar
pla
bcs .9
dec
bne .1
lda #1
>PUSHA
.2 lda #$ff
>PUSHA
>PUSHBI 2
>LDYA L.MSG.GOTOXY
>SYSCALL printf
.9 rts
*--------------------------------------
SCRN.GotoCurXCurY
ldy #CurX
lda (pData),y
tax
ldy #CurY
lda (pData),y
tay
GotoXY txa
inc
>PUSHA
tya
inc
inc
>PUSHA
>PUSHBI 2
>LDYA L.MSG.GOTOXY
>SYSCALL printf
GotoXY.RTS rts
*--------------------------------------
SCRN.UpdateViewPort
lda #$ff
sta bNotRepaint
.1 ldy #FileX
lda (pData),y
ldy #ScreenX
cmp (pData),y
bcs .2 out of left border ?
ldy #ScreenX yes
lda (pData),y
dec
sta (pData),y
stz bNotRepaint
bra .1
.2 clc
ldy #ScreenX
lda (pData),y
ldy #ScreenW
adc (pData),y
dec
ldy #FileX
cmp (pData),y
bcs .3 out of right border ?
ldy #ScreenX
lda (pData),y
inc
sta (pData),y
stz bNotRepaint
bra .2
.3 ldy #FileY+1
lda (pData),y
tax
dey
lda (pData),y A,X = FileY
ldy #ScreenY
cmp (pData),y
iny
txa
sbc (pData),y
bcs .4 out of top border ?
ldy #ScreenY move viewport up one line....
lda (pData),y
sbc #0 CC from BCS
sta (pData),y
iny
lda (pData),y
sbc #0
sta (pData),y
bit bNotRepaint
bpl .3
jsr SCRN.scrollDn ...and move content one line down
bcs GotoXY.RTS
.4 ldy #ScreenY+1
lda (pData),y
tax
dey
lda (pData),y
ldy #ViewPortHm1
clc
adc (pData),y
bcc .41
inx
.41 ldy #FileY A,X = screen bottom
cmp (pData),y
txa
iny FileY > screen bottom ?
sbc (pData),y
bcs .5 CS : fileY>= screen bottom
* clc from BCS
ldy #ScreenY move viewport down one line....
lda (pData),y
adc #1
sta (pData),y
iny
lda (pData),y
adc #0
sta (pData),y
bit bNotRepaint
bpl .4
jsr SCRN.scrollUp ...and move content one line up
bcs .9
bra .4
.5 sec
ldy #FileX
lda (pData),y
ldy #ScreenX
sbc (pData),y
ldy #CurX
sta (pData),y
sec
ldy #FileY
lda (pData),y
ldy #ScreenY
sbc (pData),y
ldy #CurY
sta (pData),y
bit bNotRepaint
bmi .6
jsr SCRN.UpdateMain
bcs .9
.6 jsr SCRN.UpdateStatusBar
bcs .9
jmp SCRN.GotoCurXCurY
.9 rts
*--------------------------------------
SCRN.scrollUp ldy #CurX
lda (pData),y
inc
>PUSHA
ldy #CurY
lda (pData),y
inc
inc
>PUSHA
>PUSHBI 2
>LDYA L.SEQ.SCROLLUP
>SYSCALL printf
bcs .9
ldy #ScreenY+1
lda (pData),y
tax
dey
lda (pData),y
clc
ldy #ViewPortHm1
adc (pData),y
bcc .1
inx
.1 jsr BUF.GetLineAX
bcs .9
ldy #ViewPortHm1
lda (pData),y
jmp SCRN.UpdateLineAtALenY
.9 rts
*--------------------------------------
SCRN.scrollDn ldy #CurX
lda (pData),y
inc
>PUSHA
ldy #CurY
lda (pData),y
inc
inc
>PUSHA
>PUSHBI 2
>LDYA L.SEQ.SCROLLDN
>SYSCALL printf
bcs .9
ldy #ScreenY+1
lda (pData),y
tax
dey
lda (pData),y
jsr BUF.GetLineAX
bcs .9
lda #0
jmp SCRN.UpdateLineAtALenY
.9 rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/EDIT.S.SCRN
LOAD USR/SRC/BIN/EDIT.S
ASM