MiniUnix/usr/source/s7/nroff3.s
/
/
/ nroff3
skipcont:
/ mov r2,-(sp)
0:
jsr pc,getchar
/ mov r0,r2
/ jsr pc,alph2
/ beq 0b
1:
cmp $' ,r0
bne 1f
jsr pc,getchar
br 1b
1:
/ mov (sp)+,r2
mov r0,ch
tst nlflg
rts pc
rbreak:
jsr pc,rbreak1
clr totout
rts pc
rbreak1:
clr trap
tst nb
beq 1f
rts pc
1:
cmp nl,$-1
bne 1f
jsr pc,newln1
rts pc
1:
tst nc
bne 1f
tst pendw
bne 4f
tst wch
beq 4f
jsr pc,setnel
jsr pc,movword
nop
1:
clrb *linep
clr nls
inc totout
tst lastl
bmi 1f
mov ne,lastl
br 0f
1:
mov ll,lastl
0:
tst op
bne 0f
mov po,r0
jsr pc,space
0:
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:
clr nwd
clr ne
mov in,un
jsr pc,setnel
jsr pc,newline
cmp nl,hnl
ble 0f
mov nl,hnl
0:
tst trap
bne 3f
mov ls,r2
dec r2
clr r0
jsr pc,findt
cmp r1,r2
bgt 1f
mov r1,r0
jsr r5,nlines; newline
br 3f
1:
mov r2,r0
jsr r5,nlines;newline
3:
/ clr pendb
clr spread
rts pc
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
0:
mov $3,r0
add nms,r0
add ni,r0
jsr pc,space
rts pc
1:
mov lnumber,r1
sxt r0
mov ndf,-(sp)
dvd (sp)+,r0
tst r1
beq 1f
inc lnumber
br 0b
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 nms,r0
jsr pc,space
inc lnumber
2:
rts pc
newline:
mov $'\n,r0
jsr pc,putchar
tst op
beq 1f
inc dnl
rts pc
1:
tst x.5
beq 1f
mov $032,r0
jsr pc,putchar
1:
inc nl
cmp nl,pl
blo 3f
newln1:
clr nl
clr hnl
clr ejf
mov $ilist,ejl
tst donef
beq 2f
tst nc
bne 1f
tst wch
bne 1f
jmp done1
1:
tst ndone
jne done1
inc ndone
clr donef
cmp frame,$stk
bne 2f
inc nflush
2:
inc pn
tst npn
beq 1f
mov npn,pn
clr npn
1:
cmp pn,pto
ble 2f
jsr pc,flush
jmp place
2:
tst stop
beq 2f
cmp pn,pfrom
blo 2f
jsr pc,flush
/ mov sp,r1
/ sys signal; 2; 1f
mov ttyid,r0
sys read; char; 1
1:
/ mov r1,sp
/ sys signal; 2; place
2:
/ cmp numbmod,$1
/ bne 3f
/ mov $1,lnumber
3:
clr trap
jsr pc,findnl
tst r1
beq 4f
mov [mlist-nlist](r1),r0
mov frame,-(sp)
jsr pc,cont1
cmp (sp)+,frame
beq 4f
inc trap
/ inc nlflg
rts pc
4:
tst ejf
beq 5f
cmp ilistp,ejl
beq newline
5:
rts pc
findnl:
mov $nlist,r1
1:
mov (r1),r0
tst r0
bpl 2f
add pl,r0
inc r0
2:
cmp nl,r0
beq 4f
3:
tst (r1)+
cmp r1,$nliste
bne 1b
clr r1
rts pc
4:
tst [mlist-nlist](r1)
beq 3b
rts pc
number:
jsr pc,skipcont
number1:
clr -(sp)
mov r1,-(sp)
mov r3,-(sp)
clr r3
clr -(sp)
1:
jsr pc,getchar
cmp r0,$'+
beq 2f
cmp r0,$'-
beq 2f
mov r0,ch
1:
jsr pc,atoi
beq 3f
mov r0,r3
inc 6(sp)
br 3f
2:
mov r0,(sp)
br 1b
3:
tst 6(sp)
bne 1f
mov $1,r3
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
tst (sp)+
rts r5
eject:
/ tst ejf
/ bne 2f
inc ejf
mov r0,ejl
tst trap
bne 2f
jsr pc,newline
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
rts pc
1:
tst over
bne 2f
jsr r5,stringfl; linemes
2:
inc over
rts pc
linemes: <Line overflow\n\0>
.even
getword:
clr -(sp)
clr -(sp)
mov pendw,r2
bne 5f
mov $word,r2
clr over
clr wne
clr wch
clr nhyph
clr hypedf
mov $word,wordp
1:
jsr pc,gettchar
bmi 4f
cmpb r0,$'\n
bne 0f
clr wne
clr wch
br 3f
0:
cmpb r0,ohc
bne 2f
inc hypedf
br 1b
2:
cmpb $' ,r0
bne 2f
jsr pc,storeword
br 1b
2:
4:
mov r0,-(sp)
mov $' ,r0
/ bis chbits,r0
jsr pc,storeword
tst spaceflg
beq 2f
jsr pc,storeword
clr spaceflg
2:
mov (sp)+,r0
2:
tst r0
bmi 0f
cmpb r0,$005
beq 6f
0:
inc 2(sp)
jsr pc,storeword
bisb (sp),-1(r2) /add in hyphen
clr (sp)
5:
jsr pc,gettchar
bmi 1f
cmpb r0,ohc
bne 1f
inc hypedf
jsr pc,gettchar
mov $200,(sp)
1:
tst r0
bmi 2b
cmpb $' ,r0
beq 1f
cmpb $'\n,r0
bne 2b
cmpb -1(r2),$'.
beq 0f
cmpb -1(r2),$'!
beq 0f
cmpb -1(r2),$'?
bne 1f
0:
inc spaceflg
1:
add $2,4(sp)
clrb (r2)+
3:
clr pendw
cmp (sp)+,(sp)+
mov $word,wordp
jsr pc,setnel
/ jsr pc,wordout
rts pc
6:
tst (sp)+
tst (sp)+
beq 7f
mov r2,pendw
0:
clr nflush
jsr pc,flushi
rts pc
7:
clr wch
br 0b
setnel:
tst nc
bne 2f
mov $line,linep
mov ll,nel
tst un1
blt 1f
mov un1,un
mov $-1,un1
1:
sub un,nel
clr ne
clr fac
clr fmq
2:
rts pc
storeword:
cmp r2,$eword
bhis 1f
jsr pc,width
add r1,wne
inc wch
movb r0,(r2)+
rts pc
1:
tst over
bne 2f
jsr r5,stringfl; wordmes
2:
inc over
rts pc
wordmes: <Word overflow\n\0>
.even
need:
need2:
mov r0,-(sp)
clr r0
jsr pc,findt
cmp (sp)+,r1
ble 1f
/ mov ilistp,r0
/ jsr pc,eject
mov r1,r0
clr nls
jsr r5,nlines;newline
1:
rts pc
min:
tst r0
bge 1f
clr r0
1:
rts pc
getname:
mov r1,-(sp)
mov r2,-(sp)
mov (r5),r1
mov $namesiz,r2
1:
jsr pc,getchar
tst nlflg
bne 2f
cmp r0,$040
beq 2f
cmp r0,$0176
blos 4f
2:
mov r0,ch
3:
clrb (r1)+
mov (sp)+,r2
mov (sp)+,r1
tstb *(r5)+
rts r5
4:
movb r0,(r1)+
dec r2
beq 3b
br 1b
copyb:
inc copyf
jsr pc,flushi
clr nlflg
clr -(sp)
mov $1,-(sp)
1:
jsr pc,getchar
bmi 9f
cmpb r0,$'\n
bne 2f
mov $1,(sp)
clr nlflg
br 4f
2:
cmpb r0,$'.
bne 9f
cmp (sp),$1
bgt 3f
blt 9f
inc (sp)
br 4f
3:
tst skp
bne 0f
jsr pc,wbfl
mov 2(sp),r1
clr r0
jsr pc,wbt
0:
inc (sp)
br 5f
9:
clr (sp)
4:
mov r1,2(sp)
tst skp
bne 5f
jsr pc,wbf
5:
cmp (sp),$3
bne 1b
cmp (sp)+,(sp)+
6:
clr copyf
rts pc
allocmes: <Out of temp file space.\n\0>
.even
alloc:
mov r1,-(sp)
clr nextb
mov $blist,r1
1:
tst (r1)+
beq 3f
cmp r1,$eblist
blo 1b
2:
mov (sp)+,r1
tst nextb
rts pc
3:
mov $-1,-(r1)
jsr pc,offset
cmp r1,first
blo 2b
mov r1,nextb
br 2b
free:
mov r1,-(sp)
mov r0,r1
beq 2f
1:
jsr pc,blistptr
tst (r1)
beq 2f
cmp (r1),$-1
bne 3f
clr (r1)
2:
mov (sp)+,r1
rts pc
3:
mov (r1),-(sp)
clr (r1)
mov (sp)+,r1
br 1b
offset:
sub $blist,r1
ash $7,r1
add first,r1
rts pc
blistptr:
mov r0,-(sp)
clr r0
sub first,r1
ashc $-7,r0
bic $1,r1
add $blist,r1
mov (sp)+,r0
rts pc
wbt:
jsr pc,wbf
jsr pc,wbfl
rts pc
wbf:
tst woff
bne 0f
mov r1,woff
mov $wbuf,wbufp
0:
mov r0,*wbufp
add $2,wbufp
add $2,r1
bit $377,r1
bne 2f
sub $2,r1
jsr pc,blistptr
cmp (r1),$-1
bne 1f
jsr pc,wbfl
jsr pc,alloc
bne 0f
jsr r5,stringfl;allocmes
jmp done
0:
mov nextb,(r1)
1:
mov (r1),r1
2:
cmp wbufp,$wbufe
bhis wbfl
rts pc
wbfl:
tst woff
beq 0f
mov wbufp,9f
sub $wbuf,9f
beq 0f
mov ibf,r0
sys 0;7f
.data
7: sys seek; woff:..;0
.text
mov ibf,r0
sys 0;7f
.data
7: sys write; wbuf; 9:..
.text
clr woff
mov $-1,roff
0:
rts pc
rbf:
mov ip,r1
jsr pc,rbf0
bne 0f
tst app
bne 1f
jsr pc,popi
rts pc
0:
jsr pc,incoff
1:
mov r1,ip
rts pc
rbf0:
mov r1,-(sp)
bic $377,r1
cmp r1,roff
beq 1f
mov r1,roff
mov ibf1,r0
sys 0;7f
.data
7: sys seek; roff:-1 ;0
.text
mov ibf1,r0
sys read;rbuf;256.
tst r0
bne 1f
tst (sp)+
sez
rts pc
1:
mov (sp),r0
bic $!377,r0
mov (sp)+,r1
mov rbuf(r0),r0
rts pc
incoff:
add $2,r1
bit $377,r1
bne 1f
sub $2,r1
jsr pc,blistptr
mov (r1),r1
beq 5f
cmp $-1,r1
beq 5f
1:
rts pc
5:
jsr r5,stringfl; badmes
jmp place
badmes: <Bad storage allocation\n\0>
.even
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 $177,r1
cmp r1,sufoff
beq 2f
mov r1,sufoff
mov suff,r0
sys 0;7f
.data
7: sys seek; sufoff: -1; 0
.text
mov suff,r0
sys read; sufbuf; 128.
2:
mov (sp),r0
bic $!177,r0
movb sufbuf(r0),r0
mov (sp)+,r1
rts pc
atoi:
jsr pc,atoi1
bne 1f
rts pc
1:
mov r1,-(sp)
mov r0,-(sp)
1:
jsr pc,getchar
cmp r0,$'+
beq 4f
cmp r0,$'-
beq 5f
2:
cmp r0,$'*
bne 2f
jsr pc,atoi1
beq 3f
mov r0,r1
mpy (sp),r1
mov r1,(sp)
br 1b
2:
cmp r0,$'\/
bne 2f
jsr pc,atoi1
beq 3f
mov r0,-(sp)
mov 2(sp),r1
sxt r0
dvd (sp),r0
mov r0,2(sp)
tst (sp)+
br 1b
2:
mov r0,ch
3:
mov (sp)+,r0
mov (sp)+,r1
tst pc
rts pc
4:
jsr pc,atoi1
beq 3b
add r0,(sp)
br 1b
5:
jsr pc,atoi1
beq 3b
sub r0,(sp)
br 1b
atoi1:
clr -(sp)
mov r3,-(sp)
clr -(sp)
clr r3
jsr pc,getchar
cmp r0,$'-
bne 2f
inc (sp)
1:
jsr pc,getchar
2:
sub $'0,r0
cmp r0,$9
bhi 1f
inc 4(sp)
mpy $10.,r3
add r0,r3
br 1b
1:
add $'0,r0
mov r0,ch
bne 0f
mov $' ,ch
0:
tst (sp)+
beq 1f
neg r3
1:
mov r3,r0
mov (sp)+,r3
tst (sp)+
rts pc
findt:
mov r0,-(sp)
mov $-1,-(sp)
mov $nlist,r1
1:
tst [mlist-nlist](r1)
bne 3f
2:
tst (r1)+
cmp r1,$nliste
ble 1b
br 8f
3:
mov (r1),r0
tst 2(sp)
bmi 6f /- traps
beq 4f /all traps
tst (r1) /+ traps
bmi 2b
4:
tst (r1)
bpl 5f
mov pl,r0
inc r0
add (r1),r0
5:
sub nl,r0
ble 2b
cmp r0,(sp)
bhis 2b
mov r0,(sp)
br 2b
6:
tst (r1)
bpl 2b
br 4b
8:
mov (sp),r1
bpl 9f
mov pl,r1
sub nl,r1
9:
cmp (sp)+,(sp)+
rts pc
findr:
mov $rlist,r1
1:
tst (r1)
beq 2f
cmp (r1)+,r0
beq 3f
cmp r1,$rliste
blos 1b
tst numerr
bne 0f
jsr r5,stringfl; 9f
0:
inc numerr
/ clr r1
/ rts pc
cmp numerr,$1
jeq edone
jmp done2
2:
mov r0,(r1)
br 4f
3:
tst -(r1)
4:
add $[vlist-rlist],r1
rts pc
9: <No more number registers.\n\0>
.even
setn0:
clr -(sp)
clr -(sp)
mov $1,nform
jbr setn1
setn:
mov r1,-(sp)
clr -(sp)
clr temp
jsr pc,get1
cmpb r0,$'+
bne 1f
inc (sp)
0:
jsr pc,get1
1:
cmpb r0,$'\\
bne 1f
3:
jsr pc,get1
jsr r5,switch;esctab
cmpb r0,dolc
bne 1f
jsr pc,seta
br 0b
1:
tst temp
bne 2f
bic $!177,r0
cmpb r0,$'(
bne 1f
inc temp
jsr pc,get1
2:
bic $!177,r0
cmpb r0,$'\\
beq 3b
mov r0,-(sp)
jsr pc,get1
bic $!177,r0
swab r0
bis (sp)+,r0
1:
cmpb 2(sp),$372
beq 5f /exit if called by \k
clr nform
cmp r0,$".v
bne 0f
mov ls,r0
br setn1
0:
cmp r0,$".p
bne 0f
mov pl,r0
br setn1
0:
cmp r0,$".t
bne 0f
clr r0
jsr pc,findt
mov r1,r0
br setn1
0:
cmp r0,$".o
bne 0f
mov po,r0
br setn1
0:
cmp r0,$".l
bne 0f
mov ll,r0
br setn1
0:
cmp r0,$".i
bne 0f
mov in,r0
br setn1
0:
cmp r0,$".$
bne 0f
mov *frame,r0
br setn1
0:
cmp r0,$".x
bne 0f
mov evp,r0
br setn1
0:
cmp r0,$".c
bne 0f
mov iline,r0
br setn1
0:
cmp r0,$".h
bne 0f
mov hnl,r0
br setn1
0:
cmp r0,$".n
bne 0f
mov lastl,r0
br setn1
0:
jsr pc,findr
tst r1
beq 5f
tst (sp)
beq 1f
add [inclist-vlist](r1),(r1)
1:
mov (r1),r0
mov [flist-vlist](r1),nform
setn1:
mov r4,-(sp)
mov $cbuf,r4
tst r0
bge 1f
movb $'-,(r4)+
neg r0
1:
jsr r5,fnumb0;wrc
clrb (r4)
mov (sp)+,r4
mov $cbuf,cp
5:
tst (sp)+
mov (sp)+,r1
rts pc
wrc:
cmp r4,$stk
bhis 1f
movb r0,(r4)+
1:
rts pc
seta:
jsr pc,get1
cmp r0,$'\\
bne 1f
jsr pc,get1
jsr r5,switch;esctab
cmp r0,numc
bne 1f
clr r1
jsr pc,setn
br seta
1:
sub $060,r0
ble 2f
cmp r0,$9.
bgt 2f
cmp r0,*frame
bgt 2f
asl r0
add frame,r0
add $stksiz-2,r0
mov (r0),ap
2:
rts pc
stksiz = 16.
pushi:
clr r0
mov enda,-(sp)
sub $stksiz,(sp)
cmp nxf,(sp)+
blo 0f
jsr pc,setbrk
beq 2f
br pushi
0:
mov nxf,r0
tst (r0)+ /nargs
mov frame,(r0)+
mov ip,(r0)+
mov nspace,(r0)+
clr nspace
mov rchar,(r0)+
clr rchar
mov pendt,(r0)+
mov ap,(r0)+
mov ch,(r0)+
clr ch
clr ap
clr pendt
mov nxf,frame
tst *nxf
bne 1f
add $stksiz,nxf
br 2f
1:
mov r1,nxf
2:
tst r0
rts pc
popi:
cmp frame,$stk
beq 1f
mov frame,r0
mov r0,nxf
clr (r0)+
mov (r0)+,frame
mov (r0)+,ip
mov (r0)+,nspace
mov (r0)+,rchar
mov (r0)+,pendt
mov (r0)+,ap
mov (r0)+,r0
/ cmp frame,litlev
/ bhis 1f
/ clr lit
1:
rts pc
setbrk:
tst noset
bne 2f
mov enda,-(sp)
add $516.,(sp)
bic $777,(sp)
mov (sp)+,0f
sys 0;7f
.data
7: sys break; 0:..
.text
bes 1f
mov 0b,enda
sub $2,enda
clz
rts pc
1:
inc noset
2:
sez
rts pc
collect:
inc copyf
jsr pc,skipcont
clr *nxf
mov nxf,r2
add $stksiz,r2
mov r2,r1
add $18.,r1
mov r1,-(sp)
mov nxf,-(sp)
cmp r1,enda
blo 1f
jsr pc,setbrk
beq 7f
1:
clr quote
cmp r2,2(sp)
beq 9f
jsr pc,skipcont
tst nlflg
bne 9f
mov r1,(r2)+
jsr pc,getchar
cmp r0,$'"
bne 3f
inc quote
2:
jsr pc,getchar
3:
tst nlflg
bne 8f
tst quote
bne 4f
cmp r0,$' /
beq 8f
br 5f
4:
cmp r0,$'"
bne 5f
jsr pc,getchar
cmpb r0,$'"
bne 8f
5:
movb r0,(r1)+
mov enda,-(sp)
sub $4,(sp)
cmp r1,(sp)+
blo 2b
jsr pc,setbrk
beq 6f
br 2b
8:
mov r0,ch
6:
clrb (r1)+
tst nlflg
bne 9f
tst noset
beq 1b
9:
mov (sp),nxf
sub nxf,r2
sub $stksiz,r2
asr r2
mov r2,*nxf
bit $1,r1
beq 7f
inc r1
7:
clr copyf
cmp (sp)+,(sp)+
rts pc