Add original unix v6
This commit is contained in:
@@ -0,0 +1,485 @@
|
||||
/
|
||||
/
|
||||
|
||||
/roff3 -- runoff
|
||||
|
||||
skipcont:
|
||||
jsr pc,getchar
|
||||
mov r0,r2
|
||||
jsr pc,alph2
|
||||
beq skipcont
|
||||
1:
|
||||
cmp $' ,r0
|
||||
bne 1f
|
||||
jsr pc,getchar
|
||||
br 1b
|
||||
1:
|
||||
mov r0,ch
|
||||
rts pc
|
||||
|
||||
rbreak:
|
||||
tst nc
|
||||
ble 4f
|
||||
clrb *linep
|
||||
inc totout
|
||||
mov ls,r0
|
||||
dec r0
|
||||
jsr r5,nlines; nline
|
||||
tst pl
|
||||
beq 4f
|
||||
cmp nl,bl
|
||||
bne 1f
|
||||
3:
|
||||
jsr pc,eject
|
||||
1:
|
||||
tst nl
|
||||
bne 3f
|
||||
mov ma1,r0
|
||||
jsr r5,nlines; newline
|
||||
bit $1,pn
|
||||
bne 1f
|
||||
jsr r5,headout; ehead
|
||||
br 2f
|
||||
1:
|
||||
jsr r5,headout; ohead
|
||||
2:
|
||||
mov ma2,r0
|
||||
jsr r5,nlines; newline
|
||||
dec skip
|
||||
bge 3b
|
||||
3:
|
||||
mov po,r0
|
||||
jsr pc,space
|
||||
jsr pc,donum
|
||||
mov un,r0
|
||||
jsr pc,space
|
||||
jsr pc,jfo
|
||||
mov $line,r2
|
||||
1:
|
||||
movb (r2)+,r0
|
||||
cmp $' ,r0
|
||||
bne 2f
|
||||
jsr pc,fill
|
||||
tst nc
|
||||
bne 1b
|
||||
br 3f
|
||||
2:
|
||||
jsr pc,putchar
|
||||
dec nc
|
||||
bgt 1b
|
||||
3:
|
||||
jsr pc,newline
|
||||
clr nwd
|
||||
clr ne
|
||||
mov in,un
|
||||
4:
|
||||
jsr pc,setnel
|
||||
rts pc
|
||||
|
||||
jfo:
|
||||
tst jfomod
|
||||
beq 1f
|
||||
mov fac,r0
|
||||
add fmq,r0
|
||||
beq 1f
|
||||
clr fac
|
||||
clr fmq
|
||||
mov nel,r0
|
||||
cmp jfomod,$1
|
||||
bne 2f
|
||||
asr r0
|
||||
2:
|
||||
jsr pc,space
|
||||
1:
|
||||
rts pc
|
||||
|
||||
donum:
|
||||
tst numbmod
|
||||
beq 2f
|
||||
dec nn
|
||||
blt 1f
|
||||
mov $5,r0
|
||||
add ni,r0
|
||||
jsr pc,space
|
||||
rts pc
|
||||
1:
|
||||
clr r0
|
||||
cmp lnumber,$100.
|
||||
bge 1f
|
||||
inc r0
|
||||
cmp lnumber,$10.
|
||||
bge 1f
|
||||
inc r0
|
||||
1:
|
||||
add ni,r0
|
||||
jsr pc,space
|
||||
mov lnumber,r0
|
||||
jsr r5,decimal; putchar
|
||||
mov $2,r0
|
||||
jsr pc,space
|
||||
inc lnumber
|
||||
2:
|
||||
rts pc
|
||||
|
||||
|
||||
newline:
|
||||
mov $'\n,r0
|
||||
jsr pc,putchar
|
||||
inc nl
|
||||
rts pc
|
||||
|
||||
nline:
|
||||
mov nl,r0
|
||||
beq 1f
|
||||
cmp r0,bl
|
||||
beq 1f
|
||||
jsr pc,newline
|
||||
1:
|
||||
rts pc
|
||||
|
||||
number:
|
||||
jsr pc,skipcont
|
||||
number1:
|
||||
mov r1,-(sp)
|
||||
mov r3,-(sp)
|
||||
clr r3
|
||||
clr -(sp)
|
||||
clr -(sp)
|
||||
1:
|
||||
jsr pc,getchar
|
||||
cmp r0,$'+
|
||||
beq 2f
|
||||
cmp r0,$'-
|
||||
beq 2f
|
||||
sub $'0,r0
|
||||
cmp r0,$9.
|
||||
bhi 3f
|
||||
inc (sp)
|
||||
mpy $10.,r3
|
||||
add r0,r3
|
||||
br 1b
|
||||
2:
|
||||
mov r0,2(sp)
|
||||
br 1b
|
||||
3:
|
||||
add $'0,r0
|
||||
mov r0,ch
|
||||
mov (sp)+,r0
|
||||
bne 1f
|
||||
mov $1,r3
|
||||
mov r3,r0
|
||||
1:
|
||||
mov (r5)+,r0
|
||||
beq 1f
|
||||
mov (r0),r0
|
||||
1:
|
||||
mov (sp)+,r1
|
||||
cmp r1,$'-
|
||||
bne 1f
|
||||
sub r3,r0
|
||||
br 2f
|
||||
1:
|
||||
cmp r1,$'+
|
||||
bne 1f
|
||||
add r3,r0
|
||||
br 2f
|
||||
1:
|
||||
mov r3,r0
|
||||
2:
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
|
||||
eject:
|
||||
tst pl
|
||||
beq 1f
|
||||
tst nl
|
||||
beq 1f
|
||||
mov pl,r0
|
||||
sub nl,r0
|
||||
sub ma4,r0
|
||||
sub hx,r0
|
||||
jsr r5,nlines; newline
|
||||
bit $1,pn
|
||||
bne 2f
|
||||
jsr r5,headout; efoot
|
||||
br 3f
|
||||
2:
|
||||
jsr r5,headout; ofoot
|
||||
3:
|
||||
cmp numbmod,$1
|
||||
bne 3f
|
||||
mov $1,lnumber
|
||||
3:
|
||||
mov ma4,r0
|
||||
jsr r5,nlines; newline
|
||||
clr nl
|
||||
inc pn
|
||||
1:
|
||||
cmp pn,pto
|
||||
ble 1f
|
||||
jsr pc,flush
|
||||
jmp place
|
||||
1:
|
||||
istop:
|
||||
tst stop
|
||||
beq 2f
|
||||
cmp pn,pfrom
|
||||
blo 2f
|
||||
jsr pc,flush
|
||||
/ mov sp,r1
|
||||
/ sys signal; 2; 1f
|
||||
clr r0
|
||||
sys read; garb; 1
|
||||
1:
|
||||
/ mov r1,sp
|
||||
/ sys signal; 2; place
|
||||
2:
|
||||
rts pc
|
||||
|
||||
|
||||
storeline:
|
||||
cmp linep,$line+linsiz
|
||||
bhis 1f
|
||||
movb r0,*linep
|
||||
inc linep
|
||||
jsr pc,width
|
||||
add r1,ne
|
||||
sub r1,nel
|
||||
inc nc
|
||||
1:
|
||||
rts pc
|
||||
|
||||
getword:
|
||||
mov $word,r2
|
||||
clr wne
|
||||
clr wch
|
||||
clr nhyph
|
||||
clr hypedf
|
||||
mov $word,wordp
|
||||
clr -(sp)
|
||||
1:
|
||||
jsr pc,gettchar
|
||||
cmp r0,$'\n
|
||||
beq 3f
|
||||
cmp r0,ohc
|
||||
bne 2f
|
||||
inc hypedf
|
||||
br 1b
|
||||
2:
|
||||
cmp $' ,r0
|
||||
bne 2f
|
||||
jsr pc,storeword
|
||||
br 1b
|
||||
2:
|
||||
mov r0,-(sp)
|
||||
mov $' ,r0
|
||||
jsr pc,storeword
|
||||
tst spaceflg
|
||||
beq 2f
|
||||
jsr pc,storeword
|
||||
clr spaceflg
|
||||
2:
|
||||
mov (sp)+,r0
|
||||
2:
|
||||
jsr pc,storeword
|
||||
bisb (sp),-1(r2) /add in hyphen
|
||||
clr (sp)
|
||||
jsr pc,gettchar
|
||||
cmp r0,ohc
|
||||
bne 1f
|
||||
inc hypedf
|
||||
jsr pc,gettchar
|
||||
mov $200,(sp)
|
||||
1:
|
||||
cmp $' ,r0
|
||||
beq 1f
|
||||
cmp $'\n,r0
|
||||
bne 2b
|
||||
cmpb -1(r2),$'.
|
||||
bne 1f
|
||||
inc spaceflg
|
||||
1:
|
||||
add $2,2(sp)
|
||||
1:
|
||||
clrb (r2)+
|
||||
3:
|
||||
tst (sp)+
|
||||
mov $word,wordp
|
||||
tst nc
|
||||
bne 1f
|
||||
jsr pc,setnel
|
||||
1:
|
||||
rts pc
|
||||
|
||||
setnel:
|
||||
mov $line,linep
|
||||
mov ll,nel
|
||||
sub un,nel
|
||||
clr ne
|
||||
clr fac
|
||||
clr fmq
|
||||
rts pc
|
||||
|
||||
storeword:
|
||||
jsr pc,width
|
||||
add r1,wne
|
||||
inc wch
|
||||
movb r0,(r2)+
|
||||
rts pc
|
||||
|
||||
need:
|
||||
mov r0,r3
|
||||
mpy ls,r3
|
||||
mov r3,r0
|
||||
need2:
|
||||
add nl,r0
|
||||
cmp r0,bl
|
||||
ble 1f
|
||||
jsr pc,eject
|
||||
1:
|
||||
rts pc
|
||||
|
||||
min:
|
||||
tst r0
|
||||
bge 1f
|
||||
clr r0
|
||||
1:
|
||||
rts pc
|
||||
|
||||
getname:
|
||||
mov r1,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov (r5)+,r1
|
||||
mov $18.,r2
|
||||
1:
|
||||
jsr pc,getchar
|
||||
cmp r0,$041
|
||||
blt 2f
|
||||
cmp r0,$0176
|
||||
ble 4f
|
||||
2:
|
||||
mov r0,ch
|
||||
3:
|
||||
clrb (r1)+
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
4:
|
||||
movb r0,(r1)+
|
||||
dec r2
|
||||
beq 3b
|
||||
br 1b
|
||||
|
||||
copyb:
|
||||
mov (r1),r1
|
||||
jsr pc,flushi
|
||||
clr nlflg
|
||||
mov $1,-(sp)
|
||||
1:
|
||||
jsr pc,getchar
|
||||
cmp r0,$'\n
|
||||
bne 2f
|
||||
mov $1,(sp)
|
||||
clr nlflg
|
||||
br 4f
|
||||
2:
|
||||
cmp r0,$'.
|
||||
bne 9f
|
||||
cmp (sp),$1
|
||||
bgt 3f
|
||||
blt 9f
|
||||
inc (sp)
|
||||
br 4f
|
||||
3:
|
||||
dec r1
|
||||
clr r0
|
||||
inc (sp)
|
||||
br 4f
|
||||
9:
|
||||
clr (sp)
|
||||
4:
|
||||
tst skp
|
||||
bne 5f
|
||||
jsr pc,wbf
|
||||
5:
|
||||
cmp (sp),$3
|
||||
bne 1b
|
||||
tst (sp)+
|
||||
tst skp
|
||||
bne 6f
|
||||
mov r1,nextb
|
||||
6:
|
||||
rts pc
|
||||
|
||||
popi:
|
||||
cmp ilistp,$ilist
|
||||
beq 1f
|
||||
sub $2,ilistp
|
||||
mov *ilistp,ip
|
||||
1:
|
||||
rts pc
|
||||
|
||||
wbf:
|
||||
mov r0,char
|
||||
mov r1,offb
|
||||
mov ibf,r0
|
||||
sys seek; offb:..;0
|
||||
mov ibf,r0
|
||||
sys write; char;1
|
||||
inc r1
|
||||
cmp ibf1,ofile
|
||||
bne 1f
|
||||
mov $-1,ofile
|
||||
1:
|
||||
rts pc
|
||||
rbf:
|
||||
mov ip,r1
|
||||
mov ibf1,nfile
|
||||
jsr pc,rdsufb
|
||||
tstb r0
|
||||
bne 2f
|
||||
jsr pc,popi
|
||||
rts pc
|
||||
2:
|
||||
inc ip
|
||||
rts pc
|
||||
|
||||
alph:
|
||||
movb (r0),r2
|
||||
alph2:
|
||||
cmp r2,$'A
|
||||
blo 1f
|
||||
cmp r2,$'Z
|
||||
blos 2f
|
||||
cmp r2,$'a
|
||||
blo 1f
|
||||
cmp r2,$'z
|
||||
bhi 1f
|
||||
2:
|
||||
sez
|
||||
rts pc
|
||||
1:
|
||||
clz
|
||||
rts pc
|
||||
|
||||
rdsufb:
|
||||
mov r1,-(sp)
|
||||
bic $77,r1
|
||||
cmp r1,sufoff
|
||||
bne 1f
|
||||
cmp nfile,ofile
|
||||
beq 2f
|
||||
1:
|
||||
mov r1,sufoff
|
||||
mov nfile,ofile
|
||||
mov nfile,r0
|
||||
sys seek; sufoff: -1; 0
|
||||
mov nfile,r0
|
||||
sys read; sufbuf; 512.
|
||||
2:
|
||||
mov (sp),r0
|
||||
bic $!77,r0
|
||||
movb sufbuf(r0),r0
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
Reference in New Issue
Block a user