mirror of
https://github.com/A2osX/A2osX.git
synced 2026-04-20 21:16:51 +00:00
1267 lines
21 KiB
Plaintext
1267 lines
21 KiB
Plaintext
NEW
|
|
AUTO 3,1
|
|
.LIST OFF
|
|
.OP 65C02
|
|
.OR $2000
|
|
.TF bin/vi
|
|
*--------------------------------------
|
|
LINEMAXLEN .EQ 1024
|
|
*--------------------------------------
|
|
.INB inc/macros.i
|
|
.INB inc/a2osx.i
|
|
.INB inc/a2osx.api.i
|
|
.INB inc/mli.i
|
|
.INB inc/mli.e.i
|
|
*--------------------------------------
|
|
.DUMMY
|
|
.OR ZPBIN
|
|
ZS.START
|
|
pCmd .BS 2
|
|
pLine .BS 2
|
|
pTBuf .BS 2
|
|
pFILE .BS 2
|
|
|
|
PosX .BS 2
|
|
PosY .BS 2
|
|
ScreenX .BS 2
|
|
ScreenY .BS 2
|
|
|
|
LineLen .BS 2
|
|
|
|
CurX .BS 1
|
|
CurY .BS 1
|
|
|
|
*ScreenT .BS 1
|
|
ScreenH .BS 1
|
|
|
|
Mode .BS 1
|
|
Prompt .BS 1
|
|
|
|
bNumLine .BS 1
|
|
|
|
ZS.END .ED
|
|
*--------------------------------------
|
|
* File Header (16 Bytes)
|
|
*--------------------------------------
|
|
CS.START cld
|
|
jmp (.1,x)
|
|
.DA #$61 6502,Level 1 (65c02)
|
|
.DA #2 BIN Layout Version 2
|
|
.DA #0 S.PS.F.EVENT
|
|
.DA #0
|
|
.DA CS.END
|
|
.DA ID.END
|
|
.DA DS.END
|
|
.DA #64 Stack Size
|
|
.DA #ZS.END-ZS.START Zero Page Size
|
|
*--------------------------------------
|
|
* Relocation Table
|
|
*--------------------------------------
|
|
.1 .DA CS.INIT
|
|
.DA CS.RUN
|
|
.DA CS.SIG
|
|
.DA CS.QUIT
|
|
*--------------------------------------
|
|
J.MODE .DA CS.RUN.CMD
|
|
.DA CS.RUN.INS
|
|
.DA CS.RUN.EX
|
|
*--------------------------------------
|
|
J.CMD .DA CS.RUN.CMD.2INS i
|
|
.DA CS.RUN.CMD.2INSII I
|
|
.DA CS.RUN.CMD.2INSA a
|
|
.DA CS.RUN.CMD.2INSAA A
|
|
.DA CS.RUN.CMD.2INSO o
|
|
.DA CS.RUN.CMD.2INSOO O
|
|
.DA CS.RUN.CMD.2EX :
|
|
.DA CS.RUN.CMD.2EX /
|
|
.DA CS.RUN.CMD.2EX ?
|
|
.DA CS.RUN.CMD.SOL 0
|
|
.DA CS.RUN.CMD.EOL $
|
|
.DA CS.RUN.CMD.NW w
|
|
.DA CS.RUN.CMD.PW b
|
|
.DA CS.RUN.CMD.GL G
|
|
.DA CS.RUN.CMD.LEFT h
|
|
.DA CS.RUN.CMD.RIGHT j
|
|
.DA CS.RUN.CMD.UP k
|
|
.DA CS.RUN.CMD.DOWN l
|
|
.DA CS.RUN.CMD.LEFT
|
|
.DA CS.RUN.CMD.RIGHT
|
|
.DA CS.RUN.CMD.UP
|
|
.DA CS.RUN.CMD.DOWN
|
|
*--------------------------------------
|
|
J.EX .DA CS.RUN.EX.SOF 0
|
|
.DA CS.RUN.EX.EOF $
|
|
.DA CS.RUN.EX.Quit q
|
|
.DA CS.RUN.EX.Read r
|
|
.DA CS.RUN.EX.Write w
|
|
.DA CS.RUN.EX.Quit x
|
|
*--------------------------------------
|
|
L.MSG.NEWFILE .DA MSG.NEWFILE
|
|
L.MSG.LINE .DA MSG.LINE
|
|
L.MSG.NUMLINE .DA MSG.NUMLINE
|
|
L.MSG.LINE0 .DA MSG.LINE0
|
|
L.MSG.NUMLINE0 .DA MSG.NUMLINE0
|
|
L.MSG.CEOL .DA MSG.CEOL
|
|
L.MSG.BLANKLINE .DA MSG.BLANKLINE
|
|
L.MSG.PRINTYXS .DA MSG.PRINTYXS
|
|
L.MSG.CURPOS .DA MSG.CURPOS
|
|
L.MSG.GOTOXY .DA MSG.GOTOXY
|
|
L.MSG.PROMPT .DA MSG.PROMPT
|
|
L.MSG.INSERT .DA MSG.INSERT
|
|
*--------------------------------------
|
|
L.SEQ.SCROLLRGN .DA SEQ.SCROLLRGN
|
|
L.SEQ.SCROLLCURUP .DA SEQ.SCROLLCURUP
|
|
L.SEQ.SCROLLUP .DA SEQ.SCROLLUP
|
|
L.SEQ.SCROLLCURDN .DA SEQ.SCROLLCURDN
|
|
L.SEQ.SCROLLDN .DA SEQ.SCROLLDN
|
|
*--------------------------------------
|
|
L.X.VT.SeqInit .DA X.VT.SeqInit
|
|
L.X.VT.SeqReset .DA X.VT.SeqReset
|
|
L.X.VT.SeqBS .DA X.VT.SeqBS
|
|
L.X.VT.SeqFS .DA X.VT.SeqFS
|
|
|
|
.DA 0
|
|
*--------------------------------------
|
|
CS.INIT clc
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN >KAPI TBufNew
|
|
bcs .99
|
|
|
|
>STYA pTBuf
|
|
|
|
>LDYAI LINEMAXLEN
|
|
>LIBC Malloc
|
|
bcs .99
|
|
|
|
>STYA pLine
|
|
|
|
lda #1
|
|
>KAPI ArgV
|
|
bcs CS.RUN.NEW
|
|
|
|
>LIBC StrDup
|
|
bcs .99
|
|
|
|
>STYA.G pFilename
|
|
|
|
jsr CS.RUN.Open
|
|
bcs .99
|
|
|
|
.1 jsr CS.RUN.ReadLine
|
|
bcs .2
|
|
|
|
>SS
|
|
>PUSHW pTBuf
|
|
>PUSHWI 65535 Append
|
|
>PUSHW pLine
|
|
>KAPI TBufInsL
|
|
>SR
|
|
bcc .1
|
|
|
|
rts
|
|
|
|
.2 cmp #MLI.E.EOF
|
|
bne .98
|
|
|
|
jsr CS.RUN.Close
|
|
bcc CS.RUN0
|
|
|
|
.9 lda #E.SYN
|
|
|
|
.98 sec
|
|
|
|
.99
|
|
|
|
CS.RUN.RTS rts
|
|
*--------------------------------------
|
|
CS.RUN.NEW >LDYA L.MSG.NEWFILE
|
|
>LIBC StrDup
|
|
bcs CS.RUN.RTS
|
|
|
|
>STYA.G pFilename
|
|
|
|
CS.RUN0 jsr X.VT.Init
|
|
bcs .99
|
|
|
|
>LDA.G X.VT.ScreenH
|
|
dec
|
|
sta ScreenH
|
|
|
|
jsr CS.RUN.ResetScrollRgn
|
|
bcs .99
|
|
|
|
>LDYAI 256
|
|
>LIBC Malloc
|
|
bcs .99
|
|
|
|
>STYA pCmd
|
|
|
|
jsr CS.RUN.DrawAll
|
|
bcs .99
|
|
|
|
jsr CS.RUN.UpdCurPos
|
|
bcs .99
|
|
|
|
jsr CS.RUN.LOOP
|
|
pha
|
|
|
|
>LDYA L.X.VT.SeqReset
|
|
>LIBC PutS
|
|
|
|
pla
|
|
sec
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.LOOP >SLEEP
|
|
|
|
jsr .80
|
|
bcc CS.RUN.LOOP
|
|
|
|
.99 rts
|
|
|
|
.80 ldx Mode
|
|
jmp (J.MODE,x)
|
|
*--------------------------------------
|
|
* 0 (zero) move cursor to start of current line (the one with the cursor)
|
|
* $ move cursor to end of current line
|
|
* w move cursor to beginning of next word
|
|
* b move cursor back to beginning of preceding word
|
|
* :0<Return> or 1G move cursor to first line in file
|
|
* :n<Return> or nG move cursor to line n
|
|
* :$<Return> or G move cursor to last line in file
|
|
* j or <Return> [or down-arrow] move cursor down one line
|
|
* k [or up-arrow] move cursor up one line
|
|
* h or <Backspace> [or left-arrow] move cursor left one character
|
|
* l or <Space> [or right-arrow] move cursor right one character
|
|
*--------------------------------------
|
|
CS.RUN.CMD jsr X.VT.GetCh
|
|
bcs .99
|
|
|
|
ldx #CMDs.L-1
|
|
|
|
.1 cmp CMDs,x
|
|
beq .2
|
|
|
|
dex
|
|
bpl .1
|
|
|
|
clc
|
|
rts
|
|
|
|
.2 pha
|
|
txa
|
|
asl
|
|
tax
|
|
pla
|
|
|
|
jmp (J.CMD,x)
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
* i insert text before cursor, until <Esc> hit
|
|
* I insert text at beginning of current line, until <Esc> hit
|
|
* a append text after cursor, until <Esc> hit
|
|
* A append text to end of current line, until <Esc> hit
|
|
* o open and put text in a new line below current line, until <Esc> hit
|
|
* O open and put text in a new line above current line, until <Esc> hit
|
|
*--------------------------------------
|
|
CS.RUN.CMD.2INSO
|
|
|
|
CS.RUN.CMD.2INSOO
|
|
|
|
CS.RUN.CMD.2INSA
|
|
jsr CS.RUN.CMD.RIGHT
|
|
bcc CS.RUN.CMD.2INS
|
|
|
|
rts
|
|
|
|
CS.RUN.CMD.2INSAA
|
|
jsr CS.RUN.CMD.EOL
|
|
bcc CS.RUN.CMD.2INS
|
|
|
|
rts
|
|
|
|
CS.RUN.CMD.2INSII
|
|
jsr CS.RUN.CMD.SOL
|
|
bcc CS.RUN.CMD.2INS
|
|
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.2INS ldx #2
|
|
stx Mode
|
|
|
|
>SS
|
|
>PUSHW L.MSG.PROMPT
|
|
lda ScreenH
|
|
inc
|
|
>PUSHA
|
|
>PUSHW L.MSG.INSERT
|
|
>PUSHBI 3
|
|
>LIBC PrintF
|
|
>SR
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.2EX sta Prompt
|
|
|
|
ldx #4
|
|
stx Mode
|
|
|
|
sta (pCmd)
|
|
|
|
ldy #1
|
|
lda #0
|
|
sta (pCmd),y
|
|
|
|
>SS
|
|
>PUSHW L.MSG.PROMPT
|
|
lda ScreenH
|
|
inc
|
|
>PUSHA
|
|
>PUSHW pCmd
|
|
>PUSHBI 3
|
|
>LIBC PrintF
|
|
>SR
|
|
clv
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.SOL lda PosX
|
|
ora PosX+1
|
|
beq .8
|
|
|
|
stz PosX
|
|
stz PosX+1
|
|
|
|
jsr CS.RUN.SetViewportX
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.8 clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.EOL >LDYA LineLen
|
|
cpy PosX
|
|
bne .1
|
|
|
|
cmp PosX+1
|
|
beq .8
|
|
|
|
.1 >STYA PosX
|
|
|
|
jsr CS.RUN.SetViewportX
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.8 clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.NW
|
|
*--------------------------------------
|
|
CS.RUN.CMD.PW
|
|
|
|
|
|
clc
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.GL
|
|
|
|
|
|
clc
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.LEFT lda PosX
|
|
ora PosX+1
|
|
beq .8
|
|
|
|
>DECW PosX
|
|
|
|
jsr CS.RUN.SetViewportX
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.8 clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.RIGHT
|
|
lda PosX
|
|
cmp LineLen
|
|
lda PosX+1
|
|
sbc LineLen+1
|
|
bcs .8
|
|
|
|
>INCW PosX
|
|
|
|
jsr CS.RUN.SetViewportX
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.8 clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.DOWN >SS
|
|
>PUSHW pTBuf
|
|
>LDYA PosY
|
|
iny
|
|
bne .1
|
|
|
|
inc
|
|
|
|
.1 >PUSHYA
|
|
|
|
>PUSHW pLine
|
|
>KAPI TBufGetL
|
|
>SR
|
|
bcs .8
|
|
|
|
>STYA LineLen
|
|
>INCW PosY
|
|
|
|
jsr CS.RUN.CheckX
|
|
bcc .2
|
|
|
|
jsr CS.RUN.DrawAll
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
*--------------------------------------
|
|
.2 jsr CS.RUN.SetViewportY
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.8 clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.CMD.UP lda PosY
|
|
ora PosY+1
|
|
beq .8
|
|
|
|
>DECW PosY
|
|
|
|
jsr CS.RUN.GetCurLine
|
|
bcs .99 Should NEVER happend
|
|
|
|
jsr CS.RUN.CheckX
|
|
bcc .2
|
|
|
|
jsr CS.RUN.DrawAll
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
*--------------------------------------
|
|
.2 jsr CS.RUN.SetViewportY
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.8 clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.INS jsr X.VT.GetCh
|
|
bcs .99
|
|
|
|
cmp #3
|
|
beq .8
|
|
|
|
cmp #C.SPACE
|
|
bcc CS.RUN.INS
|
|
|
|
sta Prompt
|
|
|
|
jsr CS.RUN.InsChar
|
|
bcs CS.RUN.INS
|
|
|
|
jsr CS.RUN.DrawCurLine
|
|
bcs .99
|
|
|
|
>SS
|
|
>PUSHW pTBuf
|
|
>PUSHW PosY
|
|
>PUSHW pLine
|
|
>KAPI TBufSetL
|
|
>SR
|
|
bcs .99
|
|
|
|
* >STYA LineLen
|
|
jsr CS.RUN.CMD.RIGHT
|
|
bcc CS.RUN.INS
|
|
|
|
.99 rts
|
|
|
|
.8 jmp CS.RUN.2CMD
|
|
*--------------------------------------
|
|
CS.RUN.InsChar ldx LineLen
|
|
cpx #LINEMAXLEN
|
|
lda LineLen+1
|
|
sbc /LINEMAXLEN
|
|
bcs .99
|
|
|
|
* clc
|
|
lda pLine
|
|
adc LineLen
|
|
sta R3
|
|
lda pLine+1
|
|
adc LineLen+1
|
|
sta R3+1
|
|
|
|
sec
|
|
lda LineLen
|
|
sbc PosX
|
|
eor #$ff
|
|
tax
|
|
lda LineLen+1
|
|
sbc PosX+1
|
|
eor #$ff
|
|
|
|
ldy #1
|
|
|
|
.1 pha
|
|
|
|
.2 lda (R3)
|
|
sta (R3),y
|
|
|
|
>DECW R3
|
|
inx
|
|
bne .2
|
|
|
|
pla
|
|
inc
|
|
bne .1
|
|
|
|
lda Prompt
|
|
sta (R3),y
|
|
|
|
>INCW LineLen
|
|
|
|
clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
* :0<Return> or 1G move cursor to first line in file
|
|
* :n<Return> or nG move cursor to line n
|
|
* :$<Return> or G move cursor to last line in file
|
|
|
|
* :x<Return> quit vi, writing out modified file to file named in original invocation
|
|
* :wq<Return> quit vi, writing out modified file to file named in original invocation
|
|
* :q<Return> quit (or exit) vi
|
|
* :q!<Return> quit vi even though latest changes have not been saved for this vi call
|
|
|
|
* :r filename<Return> read file named filename and insert after current line (the line with cursor)
|
|
* :w<Return> write current contents to file named in original vi call
|
|
* :w newfile<Return> write current contents to a new file named newfile
|
|
* :12,35w smallfile<Return> write the contents of the lines numbered 12 through 35 to a new file named smallfile
|
|
* :w! prevfile<Return> write current contents over a pre-existing file named prevfile
|
|
*--------------------------------------
|
|
CS.RUN.EX lda #0
|
|
sta (pCmd)
|
|
|
|
sta R3 CL Ptr
|
|
sta R3+1 CL Len
|
|
|
|
sta R2 Linebox ScrollH
|
|
|
|
>LDA.G X.VT.ScreenW
|
|
dec
|
|
sta R2+1 Linebox Width (:79chars)
|
|
|
|
.1 jsr X.VT.GetCh
|
|
bcs .99
|
|
|
|
cmp #C.DEL
|
|
beq .4
|
|
|
|
cmp #C.SPACE
|
|
bcc .6
|
|
|
|
ldy R3+1
|
|
iny
|
|
beq .1
|
|
|
|
sty R3+1
|
|
|
|
pha
|
|
|
|
.2 dey
|
|
lda (pCmd),y
|
|
iny
|
|
sta (pCmd),y
|
|
dey
|
|
cpy R3
|
|
bne .2
|
|
|
|
pla
|
|
sta (pCmd),y
|
|
inc R3
|
|
|
|
jsr CS.RUN.EX.UPDATE
|
|
bcc .1
|
|
|
|
rts
|
|
|
|
.4 ldy R3
|
|
beq .1
|
|
|
|
dec R3
|
|
|
|
ldy R3+1
|
|
|
|
.5 lda (pCmd),y
|
|
dey
|
|
sta (pCmd),y
|
|
cpy R3
|
|
bne .5
|
|
|
|
dec R3+1
|
|
|
|
jsr CS.RUN.EX.UPDATE
|
|
bcc .1
|
|
|
|
rts
|
|
|
|
.6 cmp #C.CR
|
|
beq .7
|
|
|
|
cmp #3
|
|
|
|
bra .1
|
|
|
|
.7 jsr CS.RUN.EXEC
|
|
bcs .99
|
|
|
|
jmp CS.RUN.2CMD
|
|
|
|
.8 jmp CS.RUN.2CMD
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.EX.UPDATE
|
|
lda R3 CL.Ptr
|
|
sec
|
|
sbc R2 Linebox ScrollH
|
|
|
|
cmp R2+1 Linebox Width
|
|
bcc .1
|
|
|
|
inc R2
|
|
|
|
.1 >SS
|
|
>PUSHW L.MSG.PRINTYXS
|
|
lda ScreenH
|
|
inc
|
|
>PUSHA
|
|
>PUSHBI 2 skip prompt
|
|
|
|
lda R2
|
|
clc
|
|
adc pCmd
|
|
tay
|
|
|
|
lda #0
|
|
adc pCmd+1
|
|
>PUSHYA
|
|
|
|
>PUSHBI 4
|
|
>LIBC PrintF
|
|
>SR
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.EXEC stz Prompt
|
|
|
|
.1 ldy Prompt
|
|
lda (pCmd),y
|
|
beq .8
|
|
|
|
inc Prompt
|
|
|
|
ldx #EXs.L-1
|
|
|
|
.2 cmp EXs,x
|
|
beq .3
|
|
|
|
dex
|
|
bpl .2
|
|
|
|
.8 clc
|
|
rts
|
|
|
|
.3 txa
|
|
asl
|
|
tax
|
|
jsr .7
|
|
bcc .1
|
|
|
|
rts
|
|
|
|
.7 jmp (J.EX,x)
|
|
*--------------------------------------
|
|
CS.RUN.EX.SOF stz PosX
|
|
stz PosX+1
|
|
stz PosY
|
|
stz PosY+1
|
|
|
|
jsr CS.RUN.GetCurLine
|
|
|
|
jmp CS.RUN.SetViewport
|
|
*--------------------------------------
|
|
CS.RUN.EX.EOF >SS
|
|
>PUSHW pTBuf
|
|
>PUSHWI 65535
|
|
>PUSHW pLine
|
|
>KAPI TBufGetL
|
|
>SR
|
|
|
|
>STYA PosY
|
|
|
|
jsr CS.RUN.GetCurLine
|
|
|
|
>STYA PosX
|
|
|
|
jmp CS.RUN.SetViewport
|
|
*--------------------------------------
|
|
CS.RUN.EX.Read
|
|
clc
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.EX.Write
|
|
clc
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.EX.Quit lda #0
|
|
sec
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.2CMD stz Mode
|
|
|
|
lda #0
|
|
sta (pCmd)
|
|
|
|
>SS
|
|
>PUSHW L.MSG.PROMPT
|
|
lda ScreenH
|
|
inc
|
|
>PUSHA
|
|
>PUSHW pCmd
|
|
>PUSHBI 3
|
|
>LIBC PrintF
|
|
>SR
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.Open >SS
|
|
>PUSHW.G pFilename
|
|
>PUSHBI O.RDONLY+O.TEXT
|
|
>PUSHBI S.FI.T.TXT
|
|
>PUSHWZ Aux type
|
|
>LIBC FOpen
|
|
>SR
|
|
bcs .9
|
|
|
|
>STYA pFILE
|
|
|
|
.9 rts
|
|
*--------------------------------------
|
|
CS.RUN.ReadLine >SS
|
|
>PUSHW pLine
|
|
>PUSHWI LINEMAXLEN
|
|
>PUSHW pFILE
|
|
>LIBC FGetS
|
|
>SR
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.Close >LDYA pFILE
|
|
beq .1
|
|
|
|
stz pFILE+1
|
|
|
|
>LIBC FClose
|
|
|
|
.1 clc
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.SetViewport
|
|
jsr CS.RUN.CheckX
|
|
bcc .1
|
|
|
|
jsr CS.RUN.DrawAll
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.1 jsr CS.RUN.SetViewportY
|
|
bcs .99
|
|
|
|
jmp CS.RUN.UpdCurPos
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.CheckX ldx LineLen
|
|
cpx PosX
|
|
lda LineLen+1
|
|
pha
|
|
sbc PosX+1
|
|
pla
|
|
bcs .8
|
|
|
|
stx PosX
|
|
sta PosX+1
|
|
|
|
cpx ScreenX
|
|
pha
|
|
cmp ScreenX+1
|
|
pla
|
|
bcs .1
|
|
|
|
stx ScreenX
|
|
sta ScreenX+1
|
|
|
|
stz CurX
|
|
sec
|
|
rts
|
|
|
|
.1 lda PosX
|
|
sec
|
|
sbc ScreenX
|
|
sta CurX
|
|
|
|
.8 clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.SetViewportX
|
|
ldx PosX
|
|
cpx ScreenX
|
|
lda PosX+1
|
|
tay
|
|
sbc ScreenX+1
|
|
bcs .1
|
|
|
|
stx ScreenX
|
|
sty ScreenX+1
|
|
stz CurX
|
|
|
|
jmp CS.RUN.DrawAll
|
|
*--------------------------------------
|
|
.1 clc
|
|
lda ScreenX
|
|
>ADC.G X.VT.ScreenW
|
|
tax
|
|
lda ScreenX+1
|
|
adc #0
|
|
|
|
cpx PosX
|
|
sbc PosX+1
|
|
bcs .2
|
|
|
|
lda PosX
|
|
sec
|
|
>SBC.G X.VT.ScreenW
|
|
sta ScreenX
|
|
lda PosX+1
|
|
sbc #0
|
|
sta ScreenX+1
|
|
>LDA.G X.VT.ScreenW
|
|
dec
|
|
sta CurX
|
|
|
|
jmp CS.RUN.DrawAll
|
|
*--------------------------------------
|
|
.2 sec
|
|
lda PosX
|
|
sbc ScreenX
|
|
sta CurX
|
|
|
|
clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.SetViewportY
|
|
lda ScreenY
|
|
ora ScreenY+1
|
|
beq .1
|
|
|
|
sec
|
|
lda ScreenY
|
|
sbc PosY
|
|
tax
|
|
lda ScreenY+1
|
|
sbc PosY+1
|
|
bcc .1 PosY > ScreenY
|
|
|
|
bne .80
|
|
|
|
txa
|
|
beq .81 PosY = ScreenY
|
|
|
|
dex
|
|
bne .80
|
|
|
|
>DECW ScreenY ScreenY - PosY = 1
|
|
|
|
>SS
|
|
>PUSHW L.SEQ.SCROLLDN
|
|
>PUSHBI 0
|
|
>LIBC PrintF
|
|
>SR
|
|
bcs .99
|
|
|
|
lda #0
|
|
bra .7
|
|
*--------------------------------------
|
|
.80 >LDYA PosY
|
|
>STYA ScreenY
|
|
jmp CS.RUN.DrawAll
|
|
|
|
.81 bra .8
|
|
*--------------------------------------
|
|
.1 clc
|
|
lda ScreenY
|
|
adc ScreenH
|
|
sta R1
|
|
lda ScreenY+1
|
|
adc #0
|
|
sta R1+1
|
|
|
|
sec
|
|
lda PosY
|
|
sbc R1
|
|
tax
|
|
lda PosY+1
|
|
sbc R1+1
|
|
bcc .8 PosY in window
|
|
|
|
bne .80
|
|
|
|
txa
|
|
bne .80
|
|
|
|
>INCW ScreenY
|
|
|
|
>SS
|
|
>PUSHW L.SEQ.SCROLLUP
|
|
>PUSHBI 0
|
|
>LIBC PrintF
|
|
>SR
|
|
bcs .99
|
|
|
|
lda ScreenH
|
|
dec
|
|
|
|
.7 jsr CS.RUN.DrawLineA
|
|
bcs .99
|
|
|
|
.8 lda PosY
|
|
sec
|
|
sbc ScreenY
|
|
sta CurY
|
|
|
|
clc
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.UpdCurPos
|
|
>SS
|
|
>PUSHW L.MSG.CURPOS
|
|
lda ScreenH
|
|
inc
|
|
>PUSHA
|
|
>LDA.G X.VT.ScreenW
|
|
sec
|
|
sbc #11
|
|
>PUSHA
|
|
|
|
>LDYA PosX
|
|
iny
|
|
bne .1
|
|
|
|
inc
|
|
|
|
.1 >PUSHYA
|
|
|
|
>LDYA PosY
|
|
iny
|
|
bne .2
|
|
|
|
inc
|
|
|
|
.2 >PUSHYA
|
|
|
|
>PUSHBI 6
|
|
>LIBC PrintF
|
|
>SR
|
|
*--------------------------------------
|
|
CS.RUN.GOTOXY >SS
|
|
>PUSHW L.MSG.GOTOXY
|
|
lda CurY
|
|
inc
|
|
>PUSHA
|
|
lda CurX
|
|
inc
|
|
>PUSHA
|
|
>PUSHBI 2
|
|
>LIBC PrintF
|
|
>SR
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.ResetScrollRgn
|
|
>SS
|
|
>PUSHW L.SEQ.SCROLLRGN
|
|
>PUSHB ScreenH
|
|
>PUSHBI 1
|
|
>LIBC PrintF
|
|
>SR
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.DrawAll >LDYA ScreenY
|
|
>STYA R2
|
|
|
|
stz R4
|
|
|
|
lda ScreenH
|
|
sta R4+1
|
|
|
|
.1 >SS
|
|
>PUSHW pTBuf
|
|
>PUSHW R2
|
|
>PUSHW pLine
|
|
>KAPI TBufGetL
|
|
>SR
|
|
bcs .2
|
|
|
|
>STYA LineLen
|
|
|
|
jsr CS.RUN.DrawLine
|
|
bcs .99
|
|
|
|
>INCW R2
|
|
inc R4
|
|
dec R4+1
|
|
bne .1
|
|
|
|
jmp CS.RUN.GetCurLine
|
|
|
|
.2 jsr CS.RUN.DRAWLINE0
|
|
|
|
>INCW R2
|
|
inc R4
|
|
dec R4+1
|
|
bne .2
|
|
|
|
jmp CS.RUN.GetCurLine
|
|
|
|
.99 rts
|
|
*--------------------------------------
|
|
CS.RUN.DrawCurLine
|
|
lda CurY
|
|
*--------------------------------------
|
|
CS.RUN.DrawLineA
|
|
sta R4
|
|
*--------------------------------------
|
|
CS.RUN.DrawLine sec
|
|
lda LineLen
|
|
sbc ScreenX
|
|
sta R3
|
|
|
|
lda LineLen+1
|
|
sbc ScreenX+1
|
|
sta R3+1
|
|
bcc .10
|
|
|
|
clc
|
|
lda pLine
|
|
adc ScreenX
|
|
sta R3
|
|
|
|
lda pLine+1
|
|
adc ScreenX+1
|
|
sta R3+1
|
|
bra .11
|
|
|
|
.10 >LDYA L.MSG.BLANKLINE
|
|
>STYA R3
|
|
|
|
.11 bit bNumLine
|
|
bmi .1
|
|
|
|
>SS
|
|
>PUSHW L.MSG.LINE
|
|
lda R4
|
|
inc
|
|
>PUSHA
|
|
>PUSHW R3
|
|
>PUSHBI 3
|
|
>LIBC PrintF
|
|
>SR
|
|
rts
|
|
|
|
.1 >SS
|
|
>PUSHW L.MSG.NUMLINE
|
|
lda R4
|
|
inc
|
|
>PUSHA
|
|
lda ScreenY
|
|
sec
|
|
adc R4
|
|
tay
|
|
lda ScreenY+1
|
|
adc #0
|
|
>PUSHYA
|
|
>PUSHW R3
|
|
>PUSHBI 5
|
|
>LIBC PrintF
|
|
>SR
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.DRAWLINE0
|
|
bit bNumLine
|
|
bmi .1
|
|
|
|
>SS
|
|
>PUSHW L.MSG.LINE0
|
|
lda R4
|
|
inc
|
|
>PUSHA
|
|
>PUSHBI 1
|
|
>LIBC PrintF
|
|
>SR
|
|
rts
|
|
|
|
.1 >SS
|
|
>PUSHW L.MSG.NUMLINE0
|
|
lda R4
|
|
inc
|
|
>PUSHA
|
|
lda ScreenY
|
|
sec
|
|
adc R4
|
|
tay
|
|
lda ScreenY+1
|
|
adc #0
|
|
>PUSHYA
|
|
>PUSHBI 3
|
|
>LIBC PrintF
|
|
>SR
|
|
rts
|
|
*--------------------------------------
|
|
CS.RUN.GetCurLine
|
|
>SS
|
|
>PUSHW pTBuf
|
|
>PUSHW PosY
|
|
>PUSHW pLine
|
|
>KAPI TBufGetL
|
|
>SR
|
|
bcs .1
|
|
|
|
>STYA LineLen
|
|
|
|
rts
|
|
|
|
.1 stz LineLen
|
|
stz LineLen+1
|
|
|
|
lda #0
|
|
sta (pLine)
|
|
clc
|
|
rts
|
|
*--------------------------------------
|
|
CS.QUIT jsr CS.RUN.Close
|
|
|
|
>LDYA.G pFilename
|
|
cmp #0
|
|
beq .1
|
|
|
|
>LIBC Free
|
|
|
|
.1 >LDYA pLine
|
|
beq .2
|
|
|
|
>LIBC Free
|
|
|
|
.2 >LDYA pCmd
|
|
beq .3
|
|
|
|
>LIBC Free
|
|
|
|
.3 >LDYA pTBuf
|
|
beq .8
|
|
|
|
>KAPI TBufFree
|
|
|
|
.8 clc
|
|
rts
|
|
*--------------------------------------
|
|
CS.SIG sec
|
|
rts
|
|
*--------------------------------------
|
|
.INB usr/src/shared/x.vt.cs
|
|
*--------------------------------------
|
|
CS.END .EQ *
|
|
*--------------------------------------
|
|
MSG.NEWFILE .CZ "newfile"
|
|
MSG.USAGE .CS "Usage : VI filename\r\n"
|
|
.CS " -C command line\r\n"
|
|
.CS " -R : Readonly mode\r\n"
|
|
MSG.CRLF .CZ "\r\n"
|
|
*--------------------------------------
|
|
MSG.LINE .CZ "\e[%d;1H%s\e[K" +CEOL
|
|
MSG.NUMLINE .CZ "\e[%d;1H%5D %s\e[K" +CEOL
|
|
MSG.LINE0 .CZ "\e[%d;1H~\e[K" +CEOL
|
|
MSG.NUMLINE0 .CS "\e[%d;1H%5D ~"
|
|
MSG.CEOL .CS "\e[K" +CEOL
|
|
MSG.BLANKLINE .DA #0
|
|
MSG.CURPOS .CZ "\e[%d;%dH%5D,%5D"
|
|
MSG.GOTOXY .CZ "\e[%d;%dH"
|
|
MSG.PRINTYXS .CZ "\e[%d;%dH%s\e[K"
|
|
MSG.PROMPT .CZ "\e[%d;1H%s\e[K"
|
|
MSG.INSERT .CZ "-- INSERT --"
|
|
*--------------------------------------
|
|
SEQ.SCROLLRGN .CZ "\e[1;%dr"
|
|
SEQ.SCROLLCURUP .CS "\e[%d;%dr"
|
|
SEQ.SCROLLUP .CZ "\eD"
|
|
SEQ.SCROLLCURDN .CS "\e[%d;%dr"
|
|
SEQ.SCROLLDN .CZ "\eM"
|
|
*--------------------------------------
|
|
CMDs .AS "iIaAoO" INS
|
|
.AS ":/?" EX
|
|
.AS "0$wb" CMD
|
|
.AS "G"
|
|
.AS "hjkl"
|
|
.DA #C.BS,#21,#C.VT,#C.LF
|
|
CMDs.L .EQ *-CMDs
|
|
*--------------------------------------
|
|
EXs .AS "0$qrwx"
|
|
EXs.L .EQ *-EXs
|
|
*--------------------------------------
|
|
.INB usr/src/shared/x.vt.id
|
|
*--------------------------------------
|
|
ID.END .EQ *
|
|
*--------------------------------------
|
|
.DUMMY
|
|
.OR 0
|
|
.INB usr/src/shared/x.vt.ds
|
|
|
|
pFilename .BS 2
|
|
|
|
DS.END .ED
|
|
*--------------------------------------
|
|
MAN
|
|
SAVE usr/src/bin/vi.s
|
|
ASM
|