Add original unix v6
This commit is contained in:
@@ -0,0 +1,566 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ roff1 -- text formatter
|
||||
|
||||
.globl ttyn
|
||||
nop = 000240
|
||||
signal = 48.
|
||||
|
||||
ibuf: /init code in ibuf+obuf
|
||||
cmp sp,$end
|
||||
bhi 1f
|
||||
jsr r5,string; emes1
|
||||
sys exit
|
||||
1:
|
||||
clr r0
|
||||
jsr pc,mesg
|
||||
sys signal; 1; place
|
||||
sys signal; 2; place
|
||||
jsr pc,makebf
|
||||
sys open; suffil; 0
|
||||
bes 1f
|
||||
mov r0,suff
|
||||
sys seek; 20; 0
|
||||
bes 1f
|
||||
mov suff,r0
|
||||
sys read; suftab; 2*26.
|
||||
1:
|
||||
clr r0
|
||||
mov (sp)+,argc
|
||||
dec argc
|
||||
bne 1f
|
||||
jmp place
|
||||
1:
|
||||
tst (sp)+
|
||||
mov (sp),r4
|
||||
cmpb (r4)+,$'+
|
||||
bne 2f
|
||||
jsr r5,pnum; pfrom
|
||||
br 3f
|
||||
2:
|
||||
cmpb -1(r4),$'-
|
||||
bne 2f
|
||||
cmpb (r4),$'s
|
||||
bne 0f
|
||||
inc stop
|
||||
br 3f
|
||||
0:
|
||||
cmpb (r4),$'h
|
||||
bne 0f
|
||||
clr slow
|
||||
br 3f
|
||||
0:
|
||||
jsr r5,pnum; pto
|
||||
3:
|
||||
dec argc
|
||||
bgt 1b
|
||||
2:
|
||||
mov $nop,get1a
|
||||
mov $ibuf,ibufp
|
||||
mov $ibuf,eibuf
|
||||
mov sp,argp
|
||||
jsr pc,topbot
|
||||
clr r0
|
||||
1:
|
||||
movb r0,trtab(r0)
|
||||
inc r0
|
||||
cmp r0,$128.
|
||||
bne 1b
|
||||
jsr pc,rbreak
|
||||
jsr pc,istop
|
||||
jmp loop
|
||||
makebf:
|
||||
sys stat; bfn; stbuf
|
||||
bec 2f
|
||||
sys creat; bfn; 400
|
||||
bec 1f
|
||||
2:
|
||||
incb bfn+8
|
||||
cmpb bfn+8,$'z
|
||||
blos makebf
|
||||
jmp place
|
||||
1:
|
||||
mov r0,ibf
|
||||
sys write; sufbuf;128.
|
||||
sys open; bfn;0
|
||||
mov r0,ibf1
|
||||
rts pc
|
||||
|
||||
string:
|
||||
mov (r5)+,r1
|
||||
mov r1,r2
|
||||
mov r1,0f
|
||||
1:
|
||||
tstb (r1)+
|
||||
bne 1b
|
||||
sub r2,r1
|
||||
mov r1,1f
|
||||
mov $1,r0
|
||||
sys write; 0:..; 1:..
|
||||
rts r5
|
||||
|
||||
emes1: <Too many files.\n\0>
|
||||
xxx:
|
||||
.even
|
||||
obuf=ibuf+512.
|
||||
.=ibuf+1024.
|
||||
loop:
|
||||
clr nlflg
|
||||
jsr pc,getchar
|
||||
cmpb r0,cc
|
||||
beq 2f
|
||||
movb r0,ch
|
||||
jsr pc,text
|
||||
br loop
|
||||
2:
|
||||
jsr pc,control
|
||||
jsr pc,flushi
|
||||
br loop
|
||||
|
||||
mesg:
|
||||
tst r0
|
||||
bne setsame
|
||||
jsr pc,ttyn
|
||||
movb r0,ttyx+8.
|
||||
sys stat; ttyx; stbuf
|
||||
mov stbuf+4,0f
|
||||
mov 0f,1f
|
||||
bic $22,0f
|
||||
sys chmod; ttyx; 0:..
|
||||
rts pc
|
||||
setsame:
|
||||
sys chmod; ttyx; 1:..
|
||||
rts pc
|
||||
|
||||
pnum:
|
||||
mov r4,ibufp
|
||||
mov $37777,eibuf
|
||||
jsr r5,number1; 0
|
||||
mov r0,*(r5)+
|
||||
clr ch
|
||||
rts r5
|
||||
|
||||
flushi:
|
||||
clr ch
|
||||
tst nlflg
|
||||
bne 1f
|
||||
jsr pc,getchar
|
||||
br flushi
|
||||
1:
|
||||
rts pc
|
||||
|
||||
gettchar:
|
||||
tst ul
|
||||
ble getchar
|
||||
tst ulstate
|
||||
beq 3f
|
||||
tst bsc
|
||||
bgt 1f
|
||||
tst ulc
|
||||
bgt 2f
|
||||
clr ulstate
|
||||
br 3f
|
||||
1:
|
||||
dec bsc
|
||||
mov $010,r0
|
||||
rts pc
|
||||
2:
|
||||
dec ulc
|
||||
mov $'_,r0
|
||||
rts pc
|
||||
3:
|
||||
jsr pc,getchar
|
||||
cmp r0,$'0
|
||||
blt 1f
|
||||
cmp r0,$'9
|
||||
ble 2f
|
||||
cmp r0,$'A
|
||||
blt 1f
|
||||
cmp r0,$'Z
|
||||
ble 2f
|
||||
cmp r0,$'a
|
||||
blt 1f
|
||||
cmp r0,$'z
|
||||
ble 2f
|
||||
1:
|
||||
tst ulc
|
||||
bgt 3f
|
||||
rts pc
|
||||
3:
|
||||
mov $1,ulstate
|
||||
mov r0,ch
|
||||
br gettchar
|
||||
2:
|
||||
inc bsc
|
||||
inc ulc
|
||||
rts pc
|
||||
|
||||
getchar:
|
||||
mov ch,r0
|
||||
beq 1f
|
||||
clr ch
|
||||
rts pc
|
||||
1:
|
||||
tst nlflg
|
||||
beq 1f
|
||||
mov $'\n,r0
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,get1
|
||||
cmp r0,$'\\
|
||||
bne 2f
|
||||
jsr pc,get1
|
||||
jsr r5,switch; esctab
|
||||
br 3f
|
||||
2:
|
||||
cmp r0,$033 /prefix
|
||||
bne 3f
|
||||
jsr pc,get1
|
||||
jsr r5,switch; pfxtab
|
||||
3:
|
||||
cmp r0,$'\n
|
||||
bne 3f
|
||||
inc nlflg
|
||||
clr column
|
||||
3:
|
||||
mov r1,-(sp)
|
||||
jsr pc,width
|
||||
add r1,column
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
|
||||
esctab:
|
||||
.byte 'd, 032 /hlf (down)
|
||||
.byte 'u, 035 /hlr (up)
|
||||
.byte 'r, 036 /flr (reverse)
|
||||
.byte 'x, 016 /SO (extra chars)
|
||||
.byte 'y, 017 /SI (normal characters)
|
||||
.byte 'l, 0177 /delete
|
||||
.byte 't, 011 /hor tab
|
||||
.byte 'a, 0100 /at sign
|
||||
.byte 'n, 043 /number sign
|
||||
.byte '\\, 134 /backslash
|
||||
.byte 0, 0
|
||||
|
||||
pfxtab:
|
||||
.byte '7, 036 /flr
|
||||
.byte '8, 035 /hlr
|
||||
.byte '9, 032 /hlf
|
||||
.byte '4, 030 /brs
|
||||
.byte '3, 031 /rrs
|
||||
.byte '1, 026 /set hor tabs
|
||||
.byte '2, 027 /clr hor tabs
|
||||
.byte 0,0
|
||||
pfxtab1:
|
||||
|
||||
switch:
|
||||
mov r1,-(sp)
|
||||
mov (r5)+,r1
|
||||
1:
|
||||
cmpb (r1)+,r0
|
||||
beq 1f
|
||||
tstb (r1)+
|
||||
bne 1b
|
||||
cmp r1,$pfxtab
|
||||
ble 0f
|
||||
cmp r1,$pfxtab1
|
||||
bgt 0f
|
||||
mov $037,r0
|
||||
0:
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
1:
|
||||
movb (r1)+,r0
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
|
||||
get1:
|
||||
tst nspace
|
||||
ble 1f
|
||||
dec nspace
|
||||
mov tabc,r0
|
||||
rts pc
|
||||
1:
|
||||
mov r1,-(sp)
|
||||
4:
|
||||
tst ip
|
||||
beq 5f
|
||||
jsr pc,rbf
|
||||
br 6f
|
||||
5:
|
||||
tst nx
|
||||
bne 0f
|
||||
mov ibufp,r1
|
||||
cmp r1,eibuf
|
||||
bne 3f
|
||||
0:
|
||||
mov ifile,r0
|
||||
bne 2f
|
||||
1:
|
||||
jsr pc,nextfile
|
||||
2:
|
||||
clr nx
|
||||
sys read; ibuf; 512.
|
||||
bes done
|
||||
tst r0
|
||||
beq 1b
|
||||
mov $ibuf,r1
|
||||
add r1,r0
|
||||
mov r0,eibuf
|
||||
3:
|
||||
movb (r1)+,r0
|
||||
mov r1,ibufp
|
||||
1:
|
||||
cmp r0,$011 /tab
|
||||
bne 6f
|
||||
mov (sp)+,r1
|
||||
mov $tabtab,r0
|
||||
inc nspace
|
||||
1:
|
||||
tstb (r0)
|
||||
beq get1
|
||||
cmpb column,(r0)+
|
||||
bge 1b
|
||||
movb -(r0),nspace
|
||||
sub column,nspace
|
||||
br get1
|
||||
6:
|
||||
get1a: br 7f
|
||||
tst r0
|
||||
beq 4b
|
||||
7:
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
|
||||
nextfile:
|
||||
mov ifile,r0
|
||||
beq 1f
|
||||
sys close
|
||||
1:
|
||||
tst nx
|
||||
beq 2f
|
||||
mov $nextf,0f
|
||||
br 3f
|
||||
2:
|
||||
dec argc
|
||||
blt done
|
||||
mov *argp,0f
|
||||
add $2,argp
|
||||
3:
|
||||
sys open; 0:..; 0
|
||||
bes done
|
||||
mov r0,ifile
|
||||
rts pc
|
||||
|
||||
done:
|
||||
jsr pc,rbreak
|
||||
jsr pc,eject
|
||||
jsr pc,flush
|
||||
place:
|
||||
sys signal; 2; 1
|
||||
mov $1,r0
|
||||
jsr pc,mesg
|
||||
sys unlink; bfn
|
||||
sys exit
|
||||
|
||||
rts pc
|
||||
|
||||
putchar:
|
||||
cmp pn,pfrom
|
||||
blt 2f
|
||||
clr pfrom
|
||||
bic $!177,r0
|
||||
beq 2f
|
||||
movb trtab(r0),r0
|
||||
cmp r0,$'
|
||||
bne 1f
|
||||
inc nsp
|
||||
2:
|
||||
rts pc
|
||||
1:
|
||||
cmp r0,$'\n
|
||||
bne 1f
|
||||
clr nsp
|
||||
clr ocol
|
||||
br 2f
|
||||
1:
|
||||
tst nsp
|
||||
beq 2f
|
||||
tst slow
|
||||
bne 4f
|
||||
jsr pc,dsp
|
||||
cmp nsp,r1
|
||||
blt 4f
|
||||
mov $011,3f+2
|
||||
cmp r1,$1
|
||||
bgt 8f
|
||||
mov $040,3f+2
|
||||
dec nsp
|
||||
br 9f
|
||||
8:
|
||||
sub r1,nsp
|
||||
9:
|
||||
mov r0,-(sp)
|
||||
3:
|
||||
mov $011,r0
|
||||
jsr pc,pchar1
|
||||
mov (sp)+,r0
|
||||
br 1b
|
||||
4:
|
||||
mov r0,-(sp)
|
||||
mov $' ,r0
|
||||
jsr pc,pchar1
|
||||
mov (sp)+,r0
|
||||
dec nsp
|
||||
bne 4b
|
||||
2:
|
||||
cmp r0,$026
|
||||
blt 2f
|
||||
cmp r0,$037
|
||||
beq 3f
|
||||
bgt 2f
|
||||
mov r0,-(sp)
|
||||
jsr r5, switch; unpfx
|
||||
cmp (sp)+,r0
|
||||
beq 2f
|
||||
mov r0,-(sp)
|
||||
mov $033,r0 /prefix
|
||||
jsr pc,pchar1
|
||||
dec ocol
|
||||
mov (sp)+,r0
|
||||
2:
|
||||
pchar1:
|
||||
cmp r0,$011
|
||||
bne 1f
|
||||
jsr pc,dsp
|
||||
br 2f
|
||||
1:
|
||||
jsr pc,width
|
||||
2:
|
||||
add r1,ocol
|
||||
movb r0,*obufp
|
||||
inc obufp
|
||||
cmp obufp,$obuf+128.
|
||||
beq flush
|
||||
3:
|
||||
rts pc
|
||||
|
||||
dsp:
|
||||
clr r1
|
||||
1:
|
||||
add $8.,r1
|
||||
cmp ocol,r1
|
||||
bgt 1b
|
||||
sub ocol,r1
|
||||
bne 2f
|
||||
mov $8.,r1
|
||||
2:
|
||||
rts pc
|
||||
|
||||
|
||||
unpfx:
|
||||
.byte 032, '9
|
||||
.byte 035, '8
|
||||
.byte 036, '7
|
||||
.byte 031, '3
|
||||
.byte 030, '4
|
||||
.byte 026, '1
|
||||
.byte 027, '2
|
||||
.byte 0,0
|
||||
|
||||
flush:
|
||||
mov obufp,r0
|
||||
sub $obuf,r0
|
||||
mov r0,0f
|
||||
mov $1,r0
|
||||
sys write; obuf; 0:0
|
||||
mov $obuf,obufp
|
||||
rts pc
|
||||
|
||||
control:
|
||||
jsr pc,getchar
|
||||
mov r0,-(sp)
|
||||
jsr pc,getchar
|
||||
swab r0
|
||||
bis (sp),r0
|
||||
mov $contab,r1
|
||||
1:
|
||||
mov (r1)+,(sp)
|
||||
bic $100000,(sp)
|
||||
cmp r0,(sp)
|
||||
bne 4f
|
||||
mov (r1),(sp)
|
||||
tst -(r1)
|
||||
bpl 3f
|
||||
jsr pc,flushi
|
||||
cmp ilistp,$iliste
|
||||
bgt 5f
|
||||
mov ip,*ilistp
|
||||
add $2,ilistp
|
||||
mov (sp),ip
|
||||
br 5f
|
||||
3:
|
||||
jmp *(sp)+
|
||||
4:
|
||||
cmp (r1)+,$-1
|
||||
bne 1b
|
||||
5:
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
contab:
|
||||
<ad>; casead
|
||||
<bp>; casebp
|
||||
<br>; casebr
|
||||
<cc>; casecc
|
||||
<ce>; casece
|
||||
<ds>; caseds
|
||||
<fi>; casefi
|
||||
<in>; casein
|
||||
<ix>; caseix
|
||||
<li>; caseli
|
||||
<ll>; casell
|
||||
<ls>; casels
|
||||
<na>; casena
|
||||
<ne>; casene
|
||||
<nf>; casenf
|
||||
<pa>; casepa
|
||||
<bl>; casebl
|
||||
<pl>; casepl
|
||||
<sk>; casesk
|
||||
<sp>; casesp
|
||||
<ss>; casess
|
||||
<ta>; caseta
|
||||
<ti>; caseti
|
||||
<tr>; casetr
|
||||
<ul>; caseul
|
||||
<un>; caseun
|
||||
<he>; casehe
|
||||
<hx>; casehx
|
||||
<fo>; casefo
|
||||
<eh>; caseeh
|
||||
<oh>; caseoh
|
||||
<ef>; caseef
|
||||
<of>; caseof
|
||||
<m1>; casem1
|
||||
<m2>; casem2
|
||||
<m3>; casem3
|
||||
<m4>; casem4
|
||||
<hc>; casehc
|
||||
<hy>; casehy
|
||||
<n1>; casen1
|
||||
<n2>; casen2
|
||||
<nn>; casenn
|
||||
<ni>; caseni
|
||||
<jo>; casejo
|
||||
<ar>; casear
|
||||
<ro>; casero
|
||||
<nx>; casenx
|
||||
<po>; casepo
|
||||
<de>; casede
|
||||
<ig>; caseig
|
||||
<tc>; casetc
|
||||
<mk>; casemk
|
||||
bnames: .=.+100.
|
||||
-1; -1
|
||||
Reference in New Issue
Block a user