/
//////////////////////////////////////////////////////////////////////
/   Copyright (c) Digital Equipment Corporation 1984, 1985, 1986.    /
/   All Rights Reserved. 					     /
/   Reference "/usr/src/COPYRIGHT" for applicable restrictions.      /
//////////////////////////////////////////////////////////////////////
/
/roff3 -- runoff
.data
sccsid3: <@(#)roff3.s	3.0	4/22/86>
.even
.text


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	lseek;0; offb:..;0	/actually lseek
	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	lseek;0; sufoff: -1; 0	/actually lseek
	mov	nfile,r0
	sys	read; sufbuf; 512.
2:
	mov	(sp),r0
	bic	$!77,r0
	movb	sufbuf(r0),r0
	mov	(sp)+,r1
	rts	pc
