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/BIN/EDIT.S.SCRN LOAD USR/SRC/BIN/BIN/EDIT.S ASM