A2osX/BIN/EDIT.S.txt
2019-05-24 17:26:07 +02:00

546 lines
10 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
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/EDIT
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.I
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPTR1 .BS 2
ZPPTR2 .BS 2
BufPtr .BS 2
BufPtrBackup .BS 2
ClipboardPtr .BS 2
hMem .BS 1
TmpByte .BS 1
TmpLen .BS 2
TmpCount .BS 2
TmpIndex .BS 2
SelLen .BS 2
BUF.LOffset .BS 2
BUF.COffset .BS 2
BUF.TmpLine1 .BS 2
BUF.TmpLine2 .BS 2
bNotRepaint .BS 1
bSelected .BS 1
ZS.END .ED
*--------------------------------------
PromptBufMax .EQ 64
PromptModeHelp .EQ 2
PromptModeFind .EQ 4
PromptModeReplace .EQ 6
PromptModeSave .EQ 8
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.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.SCROLLUP .DA SEQ.SCROLLUP
L.SEQ.SCROLLDN .DA SEQ.SCROLLDN
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.STATUSBAR.E .DA MSG.STATUSBAR.E
L.MSG.NEWFILE .DA MSG.NEWFILE
L.MSG.GOTOXY .DA MSG.GOTOXY
L.MSG.HELPLINE .DA MSG.HELPLINE
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 clc
rts
*--------------------------------------
CS.RUN >PUSHBI 0
>LDYA L.SEQ.DETECT
>SYSCALL printf Send Query for term W & H
bcs CS.RUN.RTS
.1 >SYSCALL GetChar
bcs CS.RUN.RTS
jsr CharIn
>LDA.G ScreenW Wait for Response from terminal for W & H
beq .1
lda #1
>SYSCALL ArgV
bcs .2 No arg, new file....
>SYSCALL RealPath
txa
>STA.G hFileName
jsr LoadFile
bcc .3 if CS, Failed to load file, keep name, but new file....
.2 >LDYAI 1 buffer size = 0 (+ 1 for ending 0)
>SYSCALL GetMem0
bcs CS.RUN.RTS
txa
>STA.G hBuffer FileLen already set to 0
.3 lda #$ff
>STA.G bSaved
jsr SCRN.Init
.9 bcs CS.RUN.RTS
CS.RUN.LOOP >SYSCALL GetChar
bcs CS.RUN.RTS I/O eror
.1 jsr CharIn
>LDA.G bCancel
bpl CS.RUN.LOOP
>PUSHBI 0
>LDYA L.SEQ.RESET
>SYSCALL printf
lda #0
sec
CS.RUN.RTS rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT ldy #hBuffer
jsr .8
ldy #hBufferBackup
jsr .8
ldy #hClipBoard
jsr .8
ldy #hFileName
.8 lda (pData),y
beq .9
>SYSCALL FreeMem
.9 rts
*--------------------------------------
CharIn tax
>LDA.G bEscMode
asl
txa
bcc .1 Not in ESC mode
cmp #'['
beq .8
ldy #EscBuffer
lda (pData),y
inc
sta (pData),y
clc
adc #EscBuffer
tay
txa
sta (pData),y
cmp #64
bcc .8
jsr CharIn.Esc
bcs .8 Not translated, exit
.1 cmp #C.ESC
bne .2
lda #$ff
>STA.G bEscMode
inc
>STA.G EscBuffer
.8 clc
rts
.2 pha
>LDA.G PromptMode
tax
pla
jmp (J.PROMPT,x)
*--------------------------------------
CharIn.Esc >STZ.G bEscMode
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 TmpByte
ldy #EscBuffer+1
.4 lda (pData),y
cmp #';'
beq .5
and #$0f
pha
lda TmpByte
asl
asl
clc
adc TmpByte
asl
sta TmpByte
pla
clc
adc TmpByte
sta TmpByte
iny
bra .4
.5 phy
lda TmpByte
ldy #ScreenH
sta (pData),y
dec Remove 2 (top & status bar) for viewportH
dec
ldy #ViewPortH
sta (pData),y
dec
ldy #ViewPortHm1 Remove 1 more to store offsert to last line of viewport
sta (pData),y
ply
stz TmpByte
iny
.6 lda (pData),y
cmp #'R'
beq .7
and #$0f
pha
lda TmpByte
asl
asl
clc
adc TmpByte
asl
sta TmpByte
pla
clc
adc TmpByte
sta TmpByte
iny
bra .6
.7 lda TmpByte
ldy #ScreenW
sta (pData),y
sec
rts
*--------------------------------------
LoadFile >PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
>LDA.G hFileName
>SYSCALL GetMemPtr
>SYSCALL LoadTXTFile
bcs .9
stx hMem
iny
bne .1
inc Add 1 for \0
.1 >SYSCALL GetMem
bcs .98
>STYA ZPPTR2
txa
>STA.G hBuffer
lda hMem
>SYSCALL GetMemPtr
>STYA ZPPTR1
stz TmpLen
stz TmpLen+1
ldy #0
ldx #0
.2 lda (ZPPTR1),y
beq .8
cpx #C.CR
bne .3
cmp #C.LF
beq .4
.3 jsr PutBytePtr2
.4 tax set previous char
iny
bne .2
inc ZPPTR1+1
bra .2
.8 >LDYA TmpLen
>STYA.G FileLen
lda #0
jsr PutBytePtr2 set ending \0
jsr .98
clc
rts
.98 pha
lda hMem
>SYSCALL FreeMem
pla
sec
.9 rts
*--------------------------------------
PutBytePtr2 sta (ZPPTR2)
inc ZPPTR2
bne .1
inc ZPPTR2+1
.1 inc TmpLen
bne .8
inc TmpLen+1
.8 rts
*--------------------------------------
SaveFile >PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.CREATE+O.WRONLY
>LDA.G hFileName
>SYSCALL GetMemPtr
>SYSCALL FOpen
bcs .9
pha
>PUSHW.G FileLen
>LDA.G hBuffer
>SYSCALL GetMemPtr
>PUSHYA
pla
pha
>SYSCALL FWrite
bcc .1
tax
pla
phx
>SYSCALL FClose
pla
sec
rts
.1 pla
>SYSCALL FClose
.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 USR/SRC/BIN/EDIT.S.BUF
.INB USR/SRC/BIN/EDIT.S.CTRL
.INB USR/SRC/BIN/EDIT.S.SCRN
*--------------------------------------
CS.END
SEQ.DETECT .AZ "Querying terminal capabilities...\e[999;999H\e[6n"
SEQ.INIT .AZ "\ec\e[7h\e[2;%dr" \e[?6h
SEQ.RESET .AZ "\ec"
SEQ.SCROLLUP .AZ "\e[%d;%dH\eD"
SEQ.SCROLLDN .AZ "\e[%d;%dH\eM"
SEQ.INV .AZ "\e[7m"
SEQ.NORM .AZ "\e[0m"
SEQ.CEOL .AZ "\e[K"
MSG.TOPBAR .AZ "\e[1;1HA2osX Edit:%s\e[0m"
MSG.STATUSBAR .AZ "Press Ctrl-A For Help Length:%5D,Col:%3d,Line:%5D"
MSG.STATUSBAR.H .AZ "Press any key to exit this screen:\e[0m"
MSG.STATUSBAR.F .AZ "Find:%s\e[0m"
MSG.STATUSBAR.R .AZ "Replace:%s\e[0m"
MSG.STATUSBAR.S .AZ "Save:%s\e[0m"
MSG.STATUSBAR.E .AZ "Error:%h\e[0m"
MSG.GOTOXY .AZ "\e[%d;%dH"
MSG.HELPLINE .AZ "%S\e[K"
MSG.HELP >PSTR "All commands: (* = Not yet implemented)"
>PSTR "------------"
>PSTR " Ctrl-A : This help screen"
>PSTR " Ctrl-B : Mark beginning of selection"
>PSTR " Ctrl-C : Copy selection to clipboard"
>PSTR " Ctrl-D : Delete selection"
>PSTR " Ctrl-E : Mark end of selection"
>PSTR " Ctrl-F : * Find a string..."
>PSTR " Ctrl-G : Go to start of current line"
>PSTR " Ctrl-L : Go to end of current line"
>PSTR " Ctrl-N : * Find next"
>PSTR " Ctrl-O : Page up"
>PSTR " Ctrl-P : Page down"
>PSTR " Ctrl-Q : Quit"
>PSTR " Ctrl-R : * Replace found string with..."
>PSTR " Ctrl-S : Save file to disk..."
>PSTR " Ctrl-T : Go to top of file"
>PSTR " Ctrl-V : Past clipboard at cursor position"
>PSTR " Ctrl-W : Erase current line"
>PSTR " Ctrl-X : Cut block to clipboard"
>PSTR " Ctrl-Y : Go to end of file"
>PSTR " Ctrl-Z : * Undo previous change"
.HS 00
*--------------------------------------
MSG.NEWFILE .AZ "(new file)"
EscChars >PSTR "DBAC"
EscAscii .HS 04080A0B15
*--------------------------------------
.DUMMY
.OR 0
DS.START
PromptBuf .BS PromptBufMax+1
PromptBufPtr .BS 1
PromptMode .BS 1
bCancel .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
FileLen .BS 2
hClipBoard .BS 1
ClipBoardLen .BS 2
ScreenW .BS 1
ScreenH .BS 1
ViewPortH .BS 1
ViewPortHm1 .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
*--------------------------------------
MAN
SAVE USR/SRC/BIN/EDIT.S
ASM