From 3c93b1392175efa99fe309f55f174497c6d5c1a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 4 Jan 2016 08:25:43 +0100 Subject: [PATCH] New Full Screen Editor --- BIN/EDIT.S.BUF.txt | 239 +++++++++++++++++++ BIN/EDIT.S.CTRL.txt | 551 ++++++++++++++++++++++++++++++++++++++++++++ BIN/EDIT.S.SCRN.txt | 436 +++++++++++++++++++++++++++++++++++ BIN/EDIT.S.txt | 453 ++++++++++++++++++++++++++++-------- 4 files changed, 1588 insertions(+), 91 deletions(-) create mode 100644 BIN/EDIT.S.BUF.txt create mode 100644 BIN/EDIT.S.CTRL.txt create mode 100644 BIN/EDIT.S.SCRN.txt diff --git a/BIN/EDIT.S.BUF.txt b/BIN/EDIT.S.BUF.txt new file mode 100644 index 00000000..e2405732 --- /dev/null +++ b/BIN/EDIT.S.BUF.txt @@ -0,0 +1,239 @@ +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.InsertA sta TmpChar + jsr BUF.ComputeCOffset + cpy #255 + bne .10 + clc + rts + +.10 ldy #FileLen + lda (pData),y + clc + adc #2 + pha + iny + lda (pData),y + adc #0 + ply + jsr BUF.GetNewYA + bcs .9 + >STYA BufPtr + + >LDYA BUF.COffset + >STYA TmpCount + + ldy #hBufferBackup + lda (pData),y + >SYSCALL SYS.GetMemPtrA + >STYA BufPtrBackup + + ldy #0 +.1 jsr DecTmpCount + beq .2 + lda (BufPtrBackup),y + sta (BufPtr),y + iny + bne .1 + inc BufPtrBackup+1 + inc BufPtr+1 + bra .1 + +.2 lda TmpChar + sta (BufPtr),y + inc BufPtr + bne .3 + inc BufPtr+1 + +.3 lda (BufPtrBackup),y + beq .4 + sta (BufPtr),y + iny + bne .3 + inc BufPtrBackup+1 + inc BufPtr+1 + bra .3 + +.4 ldy #FileLen + lda (pData),y + inc + sta (pData),y + bne .5 + iny + lda (pData),y + inc + sta (pData),y + +.5 clc + + +.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.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.GetLineAX >STAX BUF.TmpLine1 + + stz BUF.LOffset + stz BUF.LOffset+1 + + ldy #hBuffer + lda (pData),y + >SYSCALL SYS.GetMemPtrA + >STYA BufPtr + + lda (BufPtr) + beq .99 + + 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 .99 + lda BUF.TmpLine1+1 + cmp BUF.TmpLine2+1 + bne .99 + +.8 lda BUF.LOffset + sta BUF.COffset + lda BUF.LOffset+1 + sta BUF.COffset+1 + clc Y = Line length + rts + +.99 sec + rts +*-------------------------------------- +BUF.GetNewYA >STYA TmpLen + ldy #hBufferBackup + lda (pData),y + beq .1 + >SYSCALL SYS.FreeMemA + ldy #hBufferBackup + lda #0 + sta (pData),y + +.1 >PUSHW TmpLen + >PUSHBI S.MEM.F.INIT0 + >SYSCALL SYS.GetMem + bcs .9 + + phy + pha + + ldy #hBuffer + lda (pData),y + ldy #hBufferBackup + sta (pData),y + + txa + ldy #hBuffer + sta (pData),y + + pla + ply + clc + rts + +.9 sec + rts +*-------------------------------------- +MAN +SAVE BIN/EDIT.S.BUF +LOAD BIN/EDIT.S +ASM diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt new file mode 100644 index 00000000..8304efdb --- /dev/null +++ b/BIN/EDIT.S.CTRL.txt @@ -0,0 +1,551 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* ^A = Help +* ^B = Begin Block +* ^C = Copy Block +* ^D = Delete Block +* ^E = End Block +* ^F = Find... +* ^G = Go To SOL +***** ^H +* ^I = +***** J,K +* ^L = Go To EOL +***** ^M +* ^N = Find Next +* ^O = Page Up +* ^P = Page Down +* ^Q = Quit +* ^R = Replace... +* ^S = Save +* ^T = Go To Top of file +***** ^U +* ^V = Paste Block +* ^W = +* ^X = Cut Block +* ^Y = +* ^Z = Undo +*-------------------------------------- +Ctrl.Invalid + clc + rts +*-------------------------------------- +Ctrl.A ldy #PromptMode + lda #PromptModeHelp + sta (pData),y + + ldx #0 + ldy #0 + jsr GotoXY + + >LDYA L.MSG.HELP + >STYA ZPPTR1 + +.1 >LDYA ZPPTR1 + >SYSCALL SYS.PSTROutYA + bcs .9 + >LDYA L.SEQ.CEOL + >SYSCALL SYS.PSTROutYA + bcs .9 + + sec + lda (ZPPTR1) + adc ZPPTR1 + sta ZPPTR1 + bcc .2 + inc ZPPTR1+1 + +.2 lda (ZPPTR1) + beq .8 + + lda #13 + >SYSCALL SYS.CoutA + bcs .9 + bra .1 + +.8 jsr UpdateStatusBar + bcs .9 + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.B jsr BUF.ComputeCOffset + lda BUF.COffset + ldy #SelStart + sta (pData),y + lda BUF.COffset+1 + iny + sta (pData),y + jsr UpdateMain + bcs .9 + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.C ldy #SelEnd+1 + lda (pData),y + tax + dey + lda (pData),y + + sec + ldy #SelStart + sbc (pData),y + sta TmpLen + iny + txa + sbc (pData),y + bcs .8 + sta TmpLen+1 + + ldy #hClipBoard + lda (pData),y + beq .1 + + >SYSCALL SYS.FreeMemA + +.1 + +.8 clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.D + clc + rts +*-------------------------------------- +Ctrl.E jsr BUF.ComputeCOffset + lda BUF.COffset + ldy #SelEnd + sta (pData),y + lda BUF.COffset+1 + iny + sta (pData),y + jsr UpdateMain + bcs .9 + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.F lda #PromptModeFind + ldy #PromptMode + sta (pData),y + + jsr UpdateStatusBar + bcs .9 + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.G ldy #FileX + lda (pData),y + beq .8 + lda #0 + sta (pData),y + jsr UpdateViewPort + bcs .9 +.8 clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.BS ldy #FileX + lda (pData),y + beq .1 already at begining of line + dec + sta (pData),y + bra .3 + +.1 ldy #FileY+1 + lda (pData),y + tax + dey + ora (pData),y + beq .8 + + lda (pData),y + bne .2 + dex +.2 dec + + jsr BUF.GetLineAX + bcs .8 + tya + ldy #FileX + sta (pData),y + + sec + ldy #FileY + lda (pData),y + sbc #1 + sta (pData),y + iny + lda (pData),y + sbc #0 + sta (pData),y + +.3 jsr UpdateViewPort + bcs .9 + +.8 clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.TAB + clc + rts +*-------------------------------------- +Ctrl.LF ldy #FileY+1 + lda (pData),y + tax + dey + lda (pData),y + inc + bne .1 + inx +.1 jsr BUF.GetLineAX + bcs .8 + + tya Y = line length + ldy #FileX + cmp (pData),y + bcs .2 + sta (pData),y + +.2 ldy #FileY + lda (pData),y + inc + sta (pData),y + bne .3 + iny + lda (pData),y + inc + sta (pData),y + +.3 jsr UpdateViewPort + bcs .9 + +.8 clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.VT ldy #FileY+1 + lda (pData),y + tax + dey + ora (pData),y + beq .8 + + lda (pData),y + bne .1 + dex +.1 dec + + jsr BUF.GetLineAX + bcs .8 + + tya Y = line length + ldy #FileX + cmp (pData),y + bcs .2 + sta (pData),y + +.2 sec + ldy #FileY + lda (pData),y + sbc #1 + sta (pData),y + iny + lda (pData),y + sbc #0 + sta (pData),y + + jsr UpdateViewPort + bcs .9 +.8 clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.L ldy #FileY+1 + lda (pData),y + tax + dey + lda (pData),y + jsr BUF.GetLineAX + bcs .8 + + tya Y = line length + ldy #FileX + sta (pData),y + jsr UpdateViewPort + bcs .9 +.8 clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.CR lda #13 + jsr BUF.InsertA + bcs .9 + ldy #FileX + lda #0 + sta (pData),y + jsr UpdateMain + bcs .9 + + clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.N + clc + rts +*-------------------------------------- +Ctrl.O + clc + rts +*-------------------------------------- +Ctrl.P + clc + rts +*-------------------------------------- +Ctrl.Q lda #$FF + ldy #bCANCEL + sta (pData),y + clc + rts +*-------------------------------------- +Ctrl.R lda #PromptModeReplace + ldy #PromptMode + sta (pData),y + jsr UpdateStatusBar + bcs .9 + + clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.S lda #PromptModeSave + ldy #PromptMode + sta (pData),y + + ldy #hFileName + lda (pData),y + beq .2 + + >SYSCALL SYS.GetMemPtrA + >STYA ZPPTR1 + + lda (ZPPTR1) + tay + +.1 lda (ZPPTR1),y + sta (pData),y + dey + bpl .1 + +.2 jsr UpdateStatusBar + bcs .9 + + clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.T + clc + rts +*-------------------------------------- +Ctrl.FS ldy #FileY+1 + lda (pData),y + tax + dey + lda (pData),y + jsr BUF.GetLineAX + bcs .8 + + tya Y = line length + ldy #FileX + cmp (pData),y + beq .1 already at end of line + + lda (pData),y + inc + sta (pData),y + bra .3 + +.1 ldy #FileY+1 + lda (pData),y + tax + dey + lda (pData),y + inc + bne .2 + inx + +.2 jsr BUF.GetLineAX + bcs .8 + + ldy #FileY CC + lda (pData),y + adc #1 + sta (pData),y + iny + lda (pData),y + adc #0 + sta (pData),y + + ldy #FileX + lda #0 + sta (pData),y + +.3 jsr UpdateViewPort + bcs .9 + +.8 clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Ctrl.V + clc + rts +*-------------------------------------- +Ctrl.W + clc + rts +*-------------------------------------- +Ctrl.X + clc + rts +*-------------------------------------- +Ctrl.Y + clc + rts +*-------------------------------------- +Ctrl.Z + clc + rts +*-------------------------------------- +Ctrl.ESC ldy #bEscMode + lda #$ff + sta (pData),y + inc + ldy #EscBuffer + sta (pData),y + clc + rts +*-------------------------------------- +Ctrl.DEL + clc + rts +*-------------------------------------- +Prompt.Editor pha + ldy #bInit + lda (pData),y + asl + pla + bcs .1 + + cmp #$1B + beq Ctrl.ESC + + cmp #3 Ctrl-C ? + beq .9 + + clc + rts + +.1 cmp #127 + beq .4 + + cmp #$20 + bcs .7 + + asl + tax + jmp (J.CTRL,x) + +.4 jmp Ctrl.DEL + +.7 jsr BUF.InsertA + bcs .9 + jsr UpdateCurrentLine + bcs .9 + jsr Ctrl.FS + bcs .9 + rts + +.9 jmp Ctrl.Q +*-------------------------------------- +Prompt.Help ldy #PromptMode + lda #0 + sta (pData),y + jsr UpdateMain + bcs .9 + jsr UpdateStatusBar + bcs .9 + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Prompt.Find cmp #3 + bne .1 + + ldy #PromptMode + lda #0 + sta (pData),y + jsr UpdateStatusBar + bcs .9 + rts + +.1 cmp #13 + bne .2 + +.2 + + clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Prompt.Replace cmp #3 + bne .1 + + ldy #PromptMode + lda #0 + sta (pData),y + jsr UpdateStatusBar + bcs .9 + rts + +.1 cmp #13 + bne .2 + +.2 + + + clc + rts +.9 jmp Ctrl.Q +*-------------------------------------- +Prompt.Save cmp #3 + bne .1 + + ldy #PromptMode + lda #0 + sta (pData),y + jsr UpdateStatusBar + bcs .9 + rts + +.1 cmp #13 + bne .2 + + +.2 + +.8 clc + rts + +.9 jmp Ctrl.Q +*-------------------------------------- +MAN +SAVE BIN/EDIT.S.CTRL +LOAD BIN/EDIT.S +ASM diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt new file mode 100644 index 00000000..dbf3e268 --- /dev/null +++ b/BIN/EDIT.S.SCRN.txt @@ -0,0 +1,436 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +InitScreen ldy #ScreenH + lda (pData),y + dec + dec + >PUSHA + >LDYA L.SEQ.INIT + >SYSCALL SYS.PSTRoutYA + bcs .9 + lda #12 + >SYSCALL SYS.CoutA + 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 UpdateTopBar + bcs .9 + jsr UpdateViewPort + bcs .9 + jsr UpdateMain +.9 rts +*-------------------------------------- +UpdateTopBar ldy #hFileName + lda (pData),y + beq .1 + >SYSCALL SYS.GetMemPtrA + bra .2 + +.1 >LDYA L.MSG.NEWFILE + +.2 >PUSHYA + + >LDYA L.MSG.TOPBAR + >SYSCALL SYS.PSTRoutYA + bcs .9 + + + clc +.9 rts +*-------------------------------------- +UpdateMain ldy #ScreenY + lda (pData),y + sta TmpIndex + iny + lda (pData),y + sta TmpIndex+1 + + lda #0 + sta TmpCount + +.1 >LDAX TmpIndex + jsr BUF.GetLineAX Y = line length + bcs .5 + + lda TmpCount + jsr UpdateLineAtALenY + bcs .9 + +.3 inc TmpIndex + bne .4 + inc TmpIndex+1 + +.4 inc TmpCount + lda TmpCount + cmp #22 + bne .1 + jmp GotoCurXCurY + +.5 ldx #0 + ldy TmpCount + jsr GotoXY + bcs .9 + + >LDYA L.SEQ.CEOL + >SYSCALL SYS.PSTROutYA + bcs .9 + + inc TmpCount + lda TmpCount + cmp #22 + bne .5 + + jmp GotoCurXCurY + +.9 rts +*-------------------------------------- +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 UpdateLineAtALenY +.9 rts +*-------------------------------------- +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 UpdateAttrC + pla + bcs .11 + + >SYSCALL SYS.COutA +.11 ply + plx + bcs .9 + +.2 iny + dex + bne .1 + +.3 sec + jsr UpdateAttrC + bcs .9 + + >LDYA L.SEQ.CEOL + >SYSCALL SYS.PSTRoutYA + bcs .9 + + clc +.9 rts +*-------------------------------------- +* CC = set INV, CS = set NORM +*-------------------------------------- +UpdateAttrC bcc .1 + bit bSelected + bpl .8 + + >LDYA L.SEQ.NORM + >SYSCALL SYS.PSTRoutYA + bcs .9 + stz bSelected + rts + +.1 bit bSelected + bmi .8 + + >LDYA L.SEQ.INV + >SYSCALL SYS.PSTRoutYA + bcs .9 + lda #$ff + sta bSelected + +.8 clc +.9 rts +*-------------------------------------- +UpdateStatusBar ldy #PromptMode + lda (pData),y + tax + bne .2 + + ldy #FileY+1 + lda (pData),y + tax + dey + lda (pData),y + inc + bne .1 + inx +.1 >PUSHAX + + ldy #FileX + lda (pData),y + inc + >PUSHA + + ldy #FileLen+1 + >PUSHB (pData),y + dey + >PUSHB (pData),y + + ldy #ScreenH + lda (pData),y + dec + >PUSHA + >LDYA L.MSG.STATUSBAR + >SYSCALL SYS.PSTRoutYA + rts + +.2 >PUSHW pData + ldy #ScreenH + lda (pData),y + dec + >PUSHA + >LDYA L.MSG.STATUSBAR,x + >SYSCALL SYS.PSTRoutYA + rts +*-------------------------------------- +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 SYS.PSTRoutYA + rts +*-------------------------------------- +UpdateViewPort lda #$ff + sta bNotRepaint + +.1 ldy #FileX + lda (pData),y + ldy #ScreenX + cmp (pData),y + bcs .2 out of left border ? + + ldy #ScreenX + lda (pData),y + dec + sta (pData),y + stz bNotRepaint + bra .1 + +.2 ldy #ScreenX + lda (pData),y + clc + adc #79 + 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 sec + ldy #FileY + lda (pData),y + ldy #ScreenY + sbc (pData),y + ldy #FileY+1 + lda (pData),y + ldy #ScreenY+1 + sbc (pData),y + bcs .4 out of top border ? + + sec + ldy #ScreenY + lda (pData),y + sbc #1 + sta (pData),y + iny + lda (pData),y + sbc #0 + sta (pData),y + bit bNotRepaint + bpl .3 + jsr scrollDn + bcc .3 + rts + +.4 clc + ldy #ScreenY + lda (pData),y + adc #21 + pha + iny + lda (pData),y + adc #0 + tax + pla + sec + ldy #FileY + sbc (pData),y + txa + iny + sbc (pData),y + bcs .5 out of bottom border ? + + clc + ldy #ScreenY + lda (pData),y + adc #1 + sta (pData),y + iny + lda (pData),y + adc #0 + sta (pData),y + bit bNotRepaint + bpl .4 + jsr scrollUp + bcc .4 + rts + +.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 UpdateMain + bcs .9 +.6 jsr UpdateStatusBar + bcs .9 + jsr GotoCurXCurY +.9 rts +*-------------------------------------- +scrollUp lda #$1B + >SYSCALL SYS.CoutA + bcs .9 + lda #'M' + >SYSCALL SYS.CoutA + bcs .9 + + ldy #ScreenY+1 + lda (pData),y + tax + dey + lda (pData),y + clc + adc #21 + bcc .1 + inx +.1 jsr BUF.GetLineAX + bcs .9 + + lda #21 + jsr UpdateLineAtALenY + bcs .9 + + + clc +.9 rts +*-------------------------------------- +scrollDn lda #$1B + >SYSCALL SYS.CoutA + bcs .9 + lda #'D' + >SYSCALL SYS.CoutA + bcs .9 + + ldy #ScreenY+1 + lda (pData),y + tax + dey + lda (pData),y + jsr BUF.GetLineAX + bcs .9 + + lda #0 + jsr UpdateLineAtALenY + bcs .9 + + + + clc +.9 rts + +*-------------------------------------- +MAN +SAVE BIN/EDIT.S.SCRN +LOAD BIN/EDIT.S +ASM diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index 3dc4f21f..8ce06164 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -7,20 +7,20 @@ AUTO 6 .OP 65C02 .OR $2000 .TF /A2OSX.BOOT/BIN/EDIT -*-------------------------------------- -* ^C = Exit (Cancel) -* ^KH = Help -* ^KB = Begin Block -* ^KK = End Block -* ^KC = Copy Block -* ^KV = Move Block *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I - .INB INC/LIBSTR.I *-------------------------------------- ZPPTR1 .EQ ZPBIN ZPPTR2 .EQ ZPBIN+2 +BufPtr .EQ ZPBIN+4 +BufPtrBackup .EQ ZPBIN+6 +*-------------------------------------- +PromptBufferMax .EQ 64 +PromptModeHelp .EQ 2 +PromptModeFind .EQ 4 +PromptModeReplace .EQ 6 +PromptModeSave .EQ 8 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -40,36 +40,85 @@ CS.START cld .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT +L.SEQ.DETECT .DA SEQ.DETECT +L.SEQ.INIT .DA SEQ.INIT +L.SEQ.RESET .DA SEQ.RESET L.SEQ.INV .DA SEQ.INV L.SEQ.NORM .DA SEQ.NORM +L.SEQ.CEOL .DA SEQ.CEOL L.MSG.TOPBAR .DA MSG.TOPBAR +L.MSG.STATUSBAR .DA MSG.STATUSBAR +L.MSG.STATUSBAR.H .DA MSG.STATUSBAR.H +L.MSG.STATUSBAR.F .DA MSG.STATUSBAR.F +L.MSG.STATUSBAR.R .DA MSG.STATUSBAR.R +L.MSG.STATUSBAR.S .DA MSG.STATUSBAR.S L.MSG.NEWFILE .DA MSG.NEWFILE +L.MSG.GOTOXY .DA MSG.GOTOXY +L.MSG.HELP .DA MSG.HELP +J.PROMPT .DA Prompt.Editor + .DA Prompt.Help + .DA Prompt.Find + .DA Prompt.Replace + .DA Prompt.Save +J.CTRL .DA Ctrl.Invalid + .DA Ctrl.A + .DA Ctrl.B + .DA Ctrl.C + .DA Ctrl.D + .DA Ctrl.E + .DA Ctrl.F + .DA Ctrl.G + .DA Ctrl.BS + .DA Ctrl.TAB + .DA Ctrl.LF + .DA Ctrl.VT + .DA Ctrl.L + .DA Ctrl.CR + .DA Ctrl.N + .DA Ctrl.O + .DA Ctrl.P + .DA Ctrl.Q + .DA Ctrl.R + .DA Ctrl.S + .DA Ctrl.T + .DA Ctrl.FS + .DA Ctrl.V + .DA Ctrl.W + .DA Ctrl.X + .DA Ctrl.Y + .DA Ctrl.Z + .DA Ctrl.ESC + .DA Ctrl.Invalid + .DA Ctrl.Invalid + .DA Ctrl.Invalid + .DA Ctrl.Invalid .DA 0 *-------------------------------------- -CS.INIT lda #0 - ldy #DS.END-DS.START-1 - -.1 sta (pData),y - dey - bpl .1 - +CS.INIT stz hFile + stz TmpLen + stz TmpLen+1 + + lda #$ff + ldy #bSaved + sta (pData),y + ldy #S.PS.hARGS lda (pPs),y - beq .7 + beq .3 >SYSCALL SYS.GetMemPtrA >STYA ZPPTR1 lda (ZPPTR1) cmp #'/' - bne .10 + bne .1 ldy #S.PS.hARGS lda (pPs),y >SYSCALL SYS.PStrCpyA - bra .3 + bra .2 -.10 ldy #S.PS.hARGS +.1 ldy #S.PS.hARGS lda (pPs),y >PUSHA ldy #S.PS.hPREFIX @@ -77,50 +126,102 @@ CS.INIT lda #0 >PUSHA >SYSCALL SYS.PStrCat -.3 ldy #hFileName +.2 ldy #hFileName sta (pData),y >SYSCALL SYS.LoadFileA - bcs .9 - bra .8 + bcc .21 + jmp .99 -.7 >PUSHWI 2048 - >PUSHBI 0 - >SYSCALL SYS.GetMem - bcs .9 - >LDYAI 0 +.21 stx hFile + >STYA TmpLen -.8 pha Y,A = len,X=hMem - tya - ldy #FileLen - sta (pData),y +.3 >LDYA TmpLen iny - pla - sta (pData),y - + bne .4 + inc + +.4 >PUSHYA + >PUSHBI S.MEM.F.INIT0 + >SYSCALL SYS.GetMem + bcs .98 + >STYA ZPPTR2 txa ldy #hBuffer sta (pData),y - lda #$80 - ldy #bSaved - sta (pData),y - ldy #bInsert - sta (pData),y + lda hFile + beq .7 - jsr InitScreen + >SYSCALL SYS.GetMemPtrA + >STYA ZPPTR1 + + >LDYA TmpLen + >STYA TmpCount + + ldy #0 + +.5 jsr DecTmpCount + beq .6 + lda (ZPPTR1),y + sta (ZPPTR2),y + iny + bne .5 + inc ZPPTR1+1 + inc ZPPTR2+1 + bra .5 + +.6 jsr .98 + +.7 ldy #FileLen + lda TmpLen + sta (pData),y + iny + lda TmpLen+1 + sta (pData),y lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc -.9 rts + rts + +.98 lda hFile + beq .99 + >SYSCALL SYS.FreeMemA + sec +.99 rts *-------------------------------------- -CS.RUN ldy #bCANCEL +CS.RUN ldy #bCancel lda (pData),y bne .9 + + ldy #bInit + lda (pData),y + bne .8 + + >LDYA L.SEQ.DETECT + >SYSCALL SYS.PSTRoutYA Send Query for term W & H + bcs .9 - clc +.1 ldy #bCancel + lda (pData),y + bne .9 + + >SYSCALL SYS.Sleep + + ldy #ScreenW Wait for Response from terminal + lda (pData),y for W & H + beq .1 + + jsr InitScreen + bcs .9 + + ldy #bInit + lda #$ff + sta (pData),y + +.8 clc rts .9 sec @@ -138,87 +239,257 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? ldy #S.EVT.DATAHI is it an O or SAPPLE key ? lda (pEvent),y - bne .9 + bmi .9 test only OA, bug in Applewin for #,@... +* bne .9 ldy #S.EVT.DATALO lda (pEvent),y - cmp #$03 Ctrl-C - bne .1 - lda #$FF - ldy #bCANCEL + tax + + ldy #bEscMode + lda (pData),y + asl + txa + bcc .1 + + cmp #'[' + beq .8 + + ldy #EscBuffer + lda (pData),y + inc sta (pData),y - bra .8 -.1 cmp #$20 + clc + adc #EscBuffer + tay + txa + sta (pData),y + cmp #64 + + bcc .8 + jsr CS.DOEVENT.Esc + bcs .8 Not translated, exit + +.1 pha + ldy #PromptMode + lda (pData),y + tax + pla + jmp (J.PROMPT,x) + .8 clc - rts + rts .9 sec + rts +*-------------------------------------- +CS.DOEVENT.Esc ldy #bEscMode + lda #0 + sta (pData),y + + ldy #EscBuffer + lda (pData),y + clc + adc #EscBuffer + tay + + lda (pData),y + + ldx EscChars +.1 cmp EscChars,x + beq .2 + dex + bne .1 + cmp #'R' Response to cursor position query? + beq .3 + sec + rts + +.2 lda EscAscii,x + clc + rts + +.3 stz TmpChar + + ldy #EscBuffer +.4 lda (pData),y + cmp #';' + beq .5 + + and #$0f + pha + lda TmpChar + asl + asl + clc + adc TmpChar + asl + sta TmpChar + pla + clc + adc TmpChar + sta TmpChar + iny + bra .4 + +.5 phy + lda TmpChar + ldy #ScreenH + sta (pData),y + ply + + stz TmpChar + + ldy #EscBuffer +.6 lda (pData),y + cmp #'R' + beq .7 + + and #$0f + pha + lda TmpChar + asl + asl + clc + adc TmpChar + asl + sta TmpChar + pla + clc + adc TmpChar + sta TmpChar + iny + bra .6 + +.7 lda TmpChar + ldy #ScreenW + sta (pData),y + + clc rts *-------------------------------------- CS.QUIT ldy #hBuffer lda (pData),y + beq .1 >SYSCALL SYS.FreeMemA - ldy #hFileName +.1 ldy #hBufferBackup + lda (pData),y + beq .2 + >SYSCALL SYS.FreeMemA + +.2 ldy #hClipBoard + lda (pData),y + beq .3 + >SYSCALL SYS.FreeMemA + +.3 ldy #hFileName lda (pData),y beq .8 >SYSCALL SYS.FreeMemA -.8 clc - rts -*-------------------------------------- -InitScreen lda #0 - ldy #cPos - sta (pData),y - ldy #rPos - sta (pData),y - - lda #12 - >SYSCALL SYS.CoutA - bcs .9 - jsr UpdateTopBar - bcs .9 - clc -.9 rts -*-------------------------------------- -UpdateTopBar ldy #hFileName - lda (pData),y - beq .1 - >SYSCALL SYS.GetMemPtrA - bra .2 - -.1 >LDYA L.MSG.NEWFILE - -.2 >PUSHYA - - >LDYA L.MSG.TOPBAR +.8 >LDYA L.SEQ.RESET >SYSCALL SYS.PSTRoutYA bcs .9 - - - clc + lda #12 + >SYSCALL SYS.CoutA .9 rts *-------------------------------------- +DecTmpCount lda TmpCount + bne .1 + lda TmpCount+1 + beq .9 + dec TmpCount+1 +.1 dec TmpCount + ora #$ff make sure NZ +.9 rts +*-------------------------------------- + .INB BIN/EDIT.S.BUF + .INB BIN/EDIT.S.CTRL + .INB BIN/EDIT.S.SCRN +*-------------------------------------- CS.END +SEQ.DETECT >PSTRING "Querying terminal capabilities...\e[999;999H\e[6n" +SEQ.INIT >PSTRING "\ec\e[2;%dr" +SEQ.RESET >PSTRING "\ec" SEQ.INV >PSTRING "\e[7m" SEQ.NORM >PSTRING "\e[0m" -MSG.TOPBAR >PSTRING "\e[H\e[7mA2osX Edit:%S\e[K\e[0m" +SEQ.CEOL >PSTRING "\e[K" +MSG.TOPBAR >PSTRING "\e[1;1H\e[7mA2osX Edit:%S\e[K\e[0m" +MSG.STATUSBAR >PSTRING "\e[%d;1H\e[7mPress Ctrl-A For Help Length:%D Col:%d Line:%D\e[K\e[0m" +MSG.STATUSBAR.H >PSTRING "\e[%d;1H\e[7mPress any key to exit this screen%S\e[K\e[0m" +MSG.STATUSBAR.F >PSTRING "\e[%d;1H\e[7mFind:%S\e[K\e[0m" +MSG.STATUSBAR.R >PSTRING "\e[%d;1H\e[7mReplace:%S\e[K\e[0m" +MSG.STATUSBAR.S >PSTRING "\e[%d;1H\e[7mSave:%S\e[K\e[0m" MSG.NEWFILE >PSTRING "(new file)" +MSG.GOTOXY >PSTRING "\e[%d;%dH" +MSG.HELP >PSTRING "Commands:" + >PSTRING "---------" + >PSTRING " Ctrl-A : This help screen" + >PSTRING " Ctrl-B : Mark begining of block" + >PSTRING " Ctrl-C : Copy block to clipboard" + >PSTRING " Ctrl-D : Delete marked block" + >PSTRING " Ctrl-E : Mark end of block" + >PSTRING " Ctrl-F : Find a string..." + >PSTRING " Ctrl-G : Go to start of current line" + >PSTRING " Ctrl-L : Go to end of current line" + >PSTRING " Ctrl-N : Find next" + >PSTRING " Ctrl-O : Page up" + >PSTRING " Ctrl-P : Page down" + >PSTRING " Ctrl-Q : Quit" + >PSTRING " Ctrl-R : Replace found string with..." + >PSTRING " Ctrl-S : Save file to disk" + >PSTRING " Ctrl-T : Go to top of file" + >PSTRING " Ctrl-V : Past clipboard" + >PSTRING " Ctrl-W : " + >PSTRING " Ctrl-X : Cut block to clipboard" + >PSTRING " Ctrl-Y : " + >PSTRING " Ctrl-Z : Undo previous change" + .HS 00 +EscChars >PSTRING "DBAC" +EscAscii .HS 04080A0B15 +hFile .BS 1 +TmpChar .BS 1 +TmpLen .BS 2 +TmpCount .BS 2 +TmpIndex .BS 2 +BUF.LOffset .BS 2 +BUF.COffset .BS 2 +BUF.TmpLine1 .BS 2 +BUF.TmpLine2 .BS 2 +bNotRepaint .BS 1 +bSelected .BS 1 *-------------------------------------- .DUMMY .OR 0 DS.START -bCANCEL .BS 1 -hFileName .BS 1 -hBuffer .BS 1 -FileLen .BS 2 -cPos .BS 1 -rPos .BS 2 -bInsert .BS 1 +PromptBuffer .BS PromptBufferMax+1 +PromptMode .BS 1 +bCancel .BS 1 +bInit .BS 1 bSaved .BS 1 +bEscMode .BS 1 +EscBuffer .BS 16 +hFileName .BS 1 +hFind .BS 1 +hReplace .BS 1 +hBuffer .BS 1 +hBufferBackup .BS 1 +hClipBoard .BS 1 +FileLen .BS 2 +ScreenW .BS 1 +ScreenH .BS 1 +ScreenX .BS 1 +ScreenY .BS 2 +CurX .BS 1 +CurY .BS 1 +FileX .BS 1 +FileY .BS 2 +SelStart .BS 2 +SelEnd .BS 2 DS.END .ED *--------------------------------------