Files
2026-03-27 21:20:40 +01:00

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