New Full Screen Editor

This commit is contained in:
Rémy GIBERT 2016-01-04 08:25:43 +01:00
parent 4b5aa17180
commit 3c93b13921
4 changed files with 1588 additions and 91 deletions

239
BIN/EDIT.S.BUF.txt Normal file
View File

@ -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

551
BIN/EDIT.S.CTRL.txt Normal file
View File

@ -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

436
BIN/EDIT.S.SCRN.txt Normal file
View File

@ -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

View File

@ -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
*--------------------------------------