NEW
PREFIX
AUTO 4,1
				.LIST OFF
*--------------------------------------
SCRN.Init		>LDA.G ScreenH
				dec
				>PUSHA
				>PUSHBI 1
				>LDYA L.SEQ.INIT
				>SYSCALL printf
				bcs .9
				
				lda #12
				>SYSCALL PutChar
				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 .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
				
				>PUSHBI 0
				>LDYA L.SEQ.CEOL
				>SYSCALL printf
				bcs .9
				
				inc TmpByte
				dec TmpCount
				bne .5
				
				jmp SCRN.GotoCurXCurY

.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 .9

				phy
				>LDA.G CurY
				ply
				jsr SCRN.UpdateLineAtALenY
.9				rts
*--------------------------------------
SCRN.UpdateLineAtALenY
				stz bSelected
				sty TmpLen
				ldx #0
				tay
				jsr GotoXY
				bcs .9
				
				>LDA.G ScreenW
				tax
				
				>LDA.G ScreenX
				tay
				
.1				cpy TmpLen
				bcs .3
				
				jsr BUF.GetCharAtY
				beq .3
				
				cmp #C.CR
				beq .3

				phx
				phy
				pha
				jsr BUF.CheckSelected
				jsr SCRN.UpdateAttrC
				pla
				bcs .11
				
				>SYSCALL PutChar
.11				ply
				plx
				bcs .9
				
.2				iny
				dex
				bne .1
				
.3				sec
				jsr SCRN.UpdateAttrC
				bcs .9

				>PUSHBI 0
				>LDYA L.SEQ.CEOL
				>SYSCALL printf
				bcs .9
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
* CC = set INV, CS = set NORM
*--------------------------------------
SCRN.UpdateAttrC
				bcc .1
				bit bSelected
				bpl .8
				>PUSHBI 0
				>LDYA L.SEQ.NORM
				>SYSCALL printf
				bcs .9
				stz bSelected
				rts
				
.1				bit bSelected
				bmi .8
				>PUSHBI 0
				>LDYA L.SEQ.INV
				>SYSCALL printf
				bcs .9
				lda #$ff
				sta bSelected

.8				clc
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
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
				
				ldy #FileLen+1
				>PUSHB (pData),y
				dey
				>PUSHB (pData),y
				>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				jmp Ctrl.Q				
				
.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
				bcs .9
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
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
				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
				>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
				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
				>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
				jsr SCRN.UpdateLineAtALenY
				bcs .9
				rts
.9				jmp Ctrl.Q
*--------------------------------------
MAN
SAVE USR/SRC/BIN/EDIT.S.SCRN
LOAD USR/SRC/BIN/EDIT.S
ASM
