A2osX/BIN/EDIT.S.SCRN.txt
2017-12-22 22:24:30 +01:00

569 lines
8.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
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
*--------------------------------------
SCRN.Init ldy #ScreenH
lda (pData),y
dec
>PUSHA
>LDYA L.SEQ.INIT
>SYSCALL PrintF.YA
bcs .9
lda #12
>SYSCALL PutChar.A
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
ldy #hFileName
lda (pData),y
beq .1
>SYSCALL GetMemPtr.A
bra .2
.1 >LDYA L.MSG.NEWFILE
.2 >PUSHYA
>LDYA L.MSG.TOPBAR
>SYSCALL PrintF.YA
.9 rts
*--------------------------------------
SCRN.UpdateMain ldy #ScreenY
lda (pData),y
sta TmpIndex
iny
lda (pData),y
sta TmpIndex+1
lda #0
sta TmpByte
ldy #ViewPortH
lda (pData),y
sta TmpCount
.1 lda TmpIndex
ldx TmpIndex+1
jsr BUF.GetLineAX Y = line length
bcs .5
lda TmpByte
jsr SCRN.UpdateLineAtALenY
bcs .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 .9
>LDYA L.SEQ.CEOL
>SYSCALL PrintF.YA
bcs .9
inc TmpByte
dec TmpCount
bne .5
jmp SCRN.GotoCurXCurY
.9 rts
*--------------------------------------
SCRN.UpdateCurrentLine
ldy #ScreenY+1
lda (pData),y
tax
dey
lda (pData),y
clc
ldy #CurY
adc (pData),y
bcc .1
inx
.1 jsr BUF.GetLineAX
bcs .9
phy
ldy #CurY
lda (pData),y
ply
jsr SCRN.UpdateLineAtALenY
.9 rts
*--------------------------------------
SCRN.UpdateLineAtALenY
stz bSelected
sty TmpLen
ldx #0
tay
jsr GotoXY
bcs .9
ldy #ScreenW
lda (pData),y
tax
ldy #ScreenX
lda (pData),y
tay
.1 cpy TmpLen
bcs .3
jsr BUF.GetCharAtY
beq .3
cmp #13
beq .3
phx
phy
pha
jsr BUF.CheckSelected
jsr SCRN.UpdateAttrC
pla
bcs .11
>SYSCALL PutChar.A
.11 ply
plx
bcs .9
.2 iny
dex
bne .1
.3 sec
jsr SCRN.UpdateAttrC
bcs .9
>LDYA L.SEQ.CEOL
>SYSCALL PrintF.YA
bcs .9
rts
.9 jmp Ctrl.Q
*--------------------------------------
* CC = set INV, CS = set NORM
*--------------------------------------
SCRN.UpdateAttrC
bcc .1
bit bSelected
bpl .8
>LDYA L.SEQ.NORM
>SYSCALL PrintF.YA
bcs .9
stz bSelected
rts
.1 bit bSelected
bmi .8
>LDYA L.SEQ.INV
>SYSCALL PrintF.YA
bcs .9
lda #$ff
sta bSelected
.8 clc
rts
.9 jmp Ctrl.Q
*--------------------------------------
SCRN.UpdateStatusBar
lda #1
>PUSHA
ldy #ScreenH
lda (pData),y
>PUSHA
>LDYA L.MSG.GOTOXY
>SYSCALL PrintF.YA
bcs .9
>LDYA L.SEQ.INV
>SYSCALL PrintF.YA
bcs .9
ldy #PromptMode
lda (pData),y
bne .2
ldy #FileY
lda (pData),y
tax
iny
lda (pData),y
inx
bne .1
inc
.1 >PUSHA
txa
>PUSHA
ldy #FileX
lda (pData),y
inc
>PUSHA
ldy #FileLen+1
>PUSHB (pData),y
dey
>PUSHB (pData),y
>LDYA L.MSG.STATUSBAR
>SYSCALL PrintF.YA
bcs .9
lda #58
jsr SCRN.ClearEOLA
bcs .9
>LDYA L.SEQ.NORM
>SYSCALL PrintF.YA
bcs .9
jmp SCRN.GotoCurXCurY
.9 jmp Ctrl.Q
.2 cmp #PromptModeHelp
beq .3
>PUSHW pData
.3 ldy #ScreenH
lda (pData),y
jsr SCRN.InvLineA
bcs .9
ldy #PromptMode
lda (pData),y
tax
>LDYA L.MSG.STATUSBAR,x
>SYSCALL PrintF.YA
bcs .9
rts
*--------------------------------------
SCRN.UpdateStatusBarErrA
sta .1+1
ldy #ScreenH
lda (pData),y
dec
jsr SCRN.InvLineA
bcs .9
.1 lda #$ff
>PUSHA
>LDYA L.MSG.STATUSBAR.E
>SYSCALL PrintF.YA
bcs .9
rts
.9 jmp Ctrl.Q
*--------------------------------------
SCRN.ClearEOLA pha
.1 pla
ldy #ScreenW
cmp (pData),y
bcs .8
inc
pha
lda #' '
>SYSCALL PutChar.A
bcc .1
plx
rts
.8 clc
.9 rts
*--------------------------------------
SCRN.InvLineA sta .2+1
lda #1
>PUSHA
lda .2+1
>PUSHA
>LDYA L.MSG.GOTOXY
>SYSCALL PrintF.YA
bcs .9
>LDYA L.SEQ.INV
>SYSCALL PrintF.YA
bcs .9
ldy #ScreenW
lda (pData),y
.1 pha
lda #' '
>SYSCALL PutChar.A
pla
bcs .9
dec
bne .1
lda #1
>PUSHA
.2 lda #$ff
>PUSHA
>LDYA L.MSG.GOTOXY
>SYSCALL PrintF.YA
.9 rts
*--------------------------------------
SCRN.GotoCurXCurY
ldy #CurX
lda (pData),y
tax
ldy #CurY
lda (pData),y
tay
GotoXY txa
inc
>PUSHA
tya
inc
inc
>PUSHA
>LDYA L.MSG.GOTOXY
>SYSCALL PrintF.YA
bcs .9
rts
.9 jmp Ctrl.Q
*--------------------------------------
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
bcc .3
jmp Ctrl.Q
.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
jsr SCRN.GotoCurXCurY
bcs .9
rts
.9 jmp Ctrl.Q
*--------------------------------------
SCRN.scrollUp ldy #CurX
lda (pData),y
inc
>PUSHA
ldy #CurY
lda (pData),y
inc
inc
>PUSHA
>LDYA L.SEQ.SCROLLUP
>SYSCALL PrintF.YA
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
jsr SCRN.UpdateLineAtALenY
bcs .9
rts
.9 jmp Ctrl.Q
*--------------------------------------
SCRN.scrollDn ldy #CurX
lda (pData),y
inc
>PUSHA
ldy #CurY
lda (pData),y
inc
inc
>PUSHA
>LDYA L.SEQ.SCROLLDN
>SYSCALL PrintF.YA
bcs .9
ldy #ScreenY+1
lda (pData),y
tax
dey
lda (pData),y
jsr BUF.GetLineAX
bcs .9
lda #0
jsr SCRN.UpdateLineAtALenY
bcs .9
rts
.9 jmp Ctrl.Q
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/EDIT.S.SCRN
LOAD /A2OSX.SRC/BIN/EDIT.S
ASM