V6/usr/source/s7/nroff4.s

Compare this file to the similar file:
Show the results in this format:

/
/

/ nroff4

text:
	inc	nflush
	cmp	nl,$-1
	bne	0f
	jsr	pc,newln1
	rts	pc
0:
	clr	ulstate
	jsr	pc,setnel
	tst	ce
	bne	nofill
	tst	fi
	beq	nofill
	tst	pendw
	bne 7f
	tst	pendt
	bne	8f
	inc	pendt
	tst	x
	bne	0f
1:
	jsr	pc,getchar
	bmi	1f
	cmpb	r0,$' /
	beq	3f
	cmpb	r0,tabc
	bne	1f
3:
	inc	x
	br	1b
1:
	tst	nlflg
	bne	6f
	mov	r0,ch
	tst	x
	beq	2f
0:
	jsr	pc,rbreak
	tst	nc
	bne	5f
	tst	wch
	bne	5f
	add	x,un
	clr	x
	jsr	pc,setnel
	tst	trap
	bne	5f
2:
	tst	x
	bne	0b
	tst	nlflg
	beq	2f
6:
	clr	nflush
	clr	x
	clr	pendt
	clr	ch
	mov	$1,r0
	jsr	pc,casesp1
	rts	pc
8:
	tst	x
	bne	0b
2:
	tst	spread
	bne	1f
	tst	pendw
	bne	0f
	tst	wch
	bne	3f
0:
7:
	jsr	pc,getword
		br 4f
3:
	jsr	pc,movword
	bne	2b
	tst	nlflg
	beq	1f
	clr	pendt
1:
	jsr	pc,adjust
	tst	trap
	beq	2b
	tst	nlflg
	beq	5f
4:
	clr	pendt
	tst	pendw
	bne	5f
	dec	ul
	bge	5f
	clr	ul
5:
	clr	nflush
	rts	pc

nofill:
	tst	pendnf
	bne	1f
	clr	over
	jsr	pc,rbreak
	tst	trap
	bne	3f
	tst	nlflg
	bne	6b
	clr	fac
	clr	fmq
	mov	$1000,nwd
1:
	jsr	pc,gettchar
	bmi	0f
	cmpb	r0,$'\n
	beq	1f
	cmpb	r0,ohc
	beq	1b
	cmpb	r0,$005
	beq	4f
0:
	jsr	pc,storeline
	br	1b
1:
	tst	ce
	ble	2f
	dec	ce
	mov	nel,r0
	asr	r0
	bpl	1f
	clr	r0
1:
	add	r0,un
2:
	tst	nc
	bne	0f
	mov	$037,r0
	jsr	pc,storeline
0:
	jsr	pc,rbreak
	dec	ul
	bpl	3f
	clr	ul
3:
	clr	nflush
	clr	pendnf
	rts	pc
4:
	inc	pendnf
	clr	nflush
	jsr	pc,flushi
	rts	pc

adjust:
	mov	r2,-(sp)
	mov	r3,-(sp)
	clr	r2
	clr	r3
	tst	ad
	beq	1f
	mov	nwd,r0
	dec	r0
	ble	1f
	mov	nel,r3
	ble	1f
	dvd	r0,r2
1:
	mov	r3,fac
	mov	r2,fmq
	mov	(sp)+,r3
	mov	(sp)+,r2
	mov	$-1,lastl
	jsr	pc,rbreak1
	clr	spread
	rts	pc

fill:
	mov	fmq,r0
1:
	inc	r0
	dec	nc
	cmpb	(r2)+,$' 
	beq	1b
	dec	r2
	bit	$1,totout
	beq	2f
	inc	fac
	cmp	fac,nwd
	blt	1f
	inc	r0
	br	1f
2:
	dec	fac
	bmi	1f
	inc	r0
1:
	jsr	pc,space
	movb	(r2),r0
	rts	pc

movword:
	mov	wordp,r4
	tst	nwd
	bne	2f
1:
	movb	(r4)+,r0
	cmp	r0,$' 
	bne	1f
	dec	wch
	jsr	pc,width
	sub	r1,wne
	br	1b
1:
	dec	r4
2:
	cmp	wne,nel
	ble	1f
	tst	nwd
	beq	2f
	cmp	nel,$4
	blt	1f
	cmp	wch,$5 /don't do 4 char words
	ble	1f
2:
	bit	$2,hyf
	beq	0f
	tst	op
	bne	0f
	clr	r0
	jsr	pc,findt
	dec	r1
	ble	1f
0:
	jsr	pc,hyphen
1:
	clr	nhyph
	mov	wch,-(sp)
1:
	movb	(r4)+,r0
	cmp	r0,$'-
	bne	2f
	movb	(r4),r2
	jsr	pc,alph2
	bne	2f
	bisb	$200,(r4)
2:
	tst	r0
	bpl	2f
	bic	$!177,r0
	mov	r4,r3
	sub	$3,r3
	cmp	r3,$word
	blo	2f
	movb	(r3),r2
	bic	$!177,r2
	jsr	pc,alph2
	bne	2f
3:
	mov	r0,-(sp)
	clr	r0
	jsr	pc,storeline
	mov	(sp)+,r0
	inc	nhyph
2:
	jsr	pc,width
	sub	r1,wne
	jsr	pc,storeline
	dec	wch
	bne	1b
	tst	nel
	blt	1f
	inc	nwd
	tst	(sp)+
	clz
	rts	pc
1:
	mov	linep,r3
1:
	tst	nhyph
	bne	2f
	tst	nwd
	beq	3f
	cmp	wch,(sp)
	beq	4f
2:
	movb	-(r3),r0
	bne	2f
	dec	nhyph
	bne	5f
	tst	nwd
	beq	6f
5:
	tst	nel
	ble	2f
6:
	cmpb	-1(r3),$'-
	beq	3f
	movb	$'-,(r3)
	dec	nel
	inc	ne
	br	3f
2:
	dec	nc
	tstb	(r3)
	beq	1b
	jsr	pc,width
	sub	r1,ne
	add	r1,nel
	inc	wch
	dec	r4
	add	r1,wne
	br	1b
3:
	inc	nwd
4:
	mov	r4,wordp
	bicb	$!177,(r4)
	tst	(sp)+
	sez
	rts	pc


width:
	mov	r0,-(sp)
	cmpb	r0,$014
	bne	0f
	mov	$1,r1
	br	3f
0:
	cmpb	r0,$013
	bne	0f
	movb	eschar,r0
0:
	bic	$!177,r0
	cmp	r0,ohc
	beq	2f
	tst	r0
	beq	2f
	cmp	r0,$0177
	beq	2f
	cmp	r0,$010
	bne	1f
	mov	$-1,r1
	br	3f
1:
	cmp	$' ,r0
	bgt	2f
	mov	$1,r1
	br	3f
2:
	clr	r1
3:
	mov	(sp)+,r0
	rts	pc
setwd:
	mov	column,-(sp)
	clr	column
	mov	r2,-(sp)
	clr	-(sp)
	jsr	pc,*(r5)
	mov	r0,r2
1:
	jsr	pc,*(r5)
	bmi	0f
	cmpb	r0,r2
	beq	2f
0:
	tst	nlflg
	bne	2f
	jsr	pc,width
	add	r1,(sp)
	br	1b
2:
	mov	(sp)+,r0
	jsr	pc,setn0
	mov	(sp)+,r2
	mov	(sp)+,column
	tst	(r5)+
	rts	r5

header:
/headin:
	clr	nls
	jsr	pc,skipcont
	mov	$'',r2
	tst	op
	beq	1f
	jsr	pc,wbfl
1:
	jsr	pc,alloc
	bne	0f
	rts	pc
0:
	mov	nextb,r1
2:
	mov	r1,headp
	jsr	pc,getchar
	bmi	3f
	cmpb	r0,$'\n
	beq	2f
	mov	r0,r2
1:
	jsr	pc,getchar
	bmi	3f
	cmpb	r0,$'\n
	beq	2f
0:
	cmpb	r0,r2
	bne	3f
	mov	$004,r0
3:
	jsr	pc,wbf
	br	1b
2:
	mov	$004,r0
	jsr	pc,wbf
	mov	$004,r0
	jsr	pc,wbf
	clr	r0
	jsr	pc,wbt

/headout:
	clr	-(sp)
	mov	headp,r2
	jsr	r5,headseg; width
	mov	r0,-(sp)
	jsr	r5,headseg; width
	mov	r0,-(sp)
	jsr	r5,headseg; width
	mov	r0,-(sp)
	tst	op
	bne	1f
	mov	po,r0
	jsr	pc,space
1:
	mov	headp,r2
	jsr	r5,headseg; putchar
	mov	llh,r0
	add	6(sp),r0
	sub	2(sp),r0
	asr	r0
	sub	4(sp),r0
	mov	r0,-(sp)
	tst	4(sp)
	bne	1f
	tst	2(sp)
	beq	2f
1:
	jsr	pc,space
2:
	jsr	r5,headseg; putchar
	mov	llh,r0
	sub	(sp)+,r0
	sub	(sp)+,r0
	sub	(sp)+,r0
	sub	(sp)+,r0
	add	(sp)+,r0
	tst	-10(sp)
	beq	1f
	jsr	pc,space
	jsr	r5,headseg; putchar
1:
	jsr	pc,newline
	cmp	nl,hnl
	ble	0f
	mov	nl,hnl
0:
	mov	headp,r0
	jsr	pc,free
	rts	pc

headseg:
	clr	-(sp)
1:
	mov	r1,-(sp)
	mov	r2,r1
	jsr	pc,rbf0
	jsr	pc,incoff
	mov	r1,r2
	mov	(sp)+,r1
	tst	r0
	beq	1f
	bmi	0f
	cmpb	r0,$004
	beq	1f
	cmpb	r0,$'%
	beq	2f
0:
	jsr	pc,*(r5)
	add	r1,(sp)
	br	1b
2:
	mov	$'%,r0
	jsr	pc,findr
	mov	[flist-vlist](r1),nform
	mov	pn,r0
	clr	r1
	jsr	pc,fnumb
	add	r1,(sp)
	br	1b
1:
	mov	(sp)+,r0
	tst	(r5)+
	rts	r5

space:
	jsr	r5,nlines;putchar
	rts	pc

nlines:
	mov	r0,-(sp)
1:
	dec	(sp)
	blt	1f
	mov	$' ,r0
	jsr	pc,*(r5)
	br	1b
1:
	cmp	(r5)+,(sp)+
	rts	r5

decimal:
	jsr	pc,decml
	tst	(r5)+
	rts	r5

decml:
	mov	r2,-(sp)
	mov	r3,-(sp)
	jsr	pc,decml1
	mov	(sp)+,r3
	mov	(sp)+,r2
	rts	pc

decml1:
	mov	r1,-(sp)
	clr	r2
	mov	r0,r3
	dvd	$10.,r2
	mov	r3,-(sp)
	mov	r2,r0
	beq	1f
	jsr	pc,decml1
	mov	r1,2(sp)
1:
	mov	(sp)+,r0
	add	$'0,r0
	jsr	pc,*(r5)
	add	(sp)+,r1
	rts	pc

roman0:
	jsr	pc,roman
	tst	(r5)+
	rts	r5
roman:
	tst	r0
	beq	decml
	mov	r2,-(sp)
	mov	r3,-(sp)
	cmp	ro,$2
	bne	1f
	mov	$cones,onesp
	mov	$cfives,fivesp
	br	2f
1:
	mov	$ones,onesp
	mov	$fives,fivesp
2:
	jsr	pc,roman1
	mov	(sp)+,r3
	mov	(sp)+,r2
	rts	pc
roman1:
	clr	r2
	mov	r0,r3
	bne	.+4
	rts	pc
	mov	r1,-(sp)
	dvd	$10.,r2
	mov	r3,-(sp)
	mov	r2,r0
	inc	onesp
	inc	fivesp
	jsr	pc,roman1
	mov	r1,2(sp)
	dec	onesp
	dec	fivesp
	clr	r2
	mov	(sp)+,r3
	dvd	$5.,r2
	cmp	r3,$4
	bne	1f
	movb	*onesp,r0
	jsr	pc,*(r5)
	add	r1,(sp)
	tst	r2
	beq	2f
	inc	onesp
	movb	*onesp,r0
	dec	onesp
	br	3f
2:
	movb	*fivesp,r0
3:
	jsr	pc,*(r5)
	add	(sp)+,r1
	rts	pc
1:
	tst	r2
	beq	2f
	movb	*fivesp,r0
	jsr	pc,*(r5)
	add	r1,(sp)
2:
	dec	r3
	blt	1f
	movb	*onesp,r0
	jsr	pc,*(r5)
	add	r1,(sp)
	br	2b
1:
	mov	(sp)+,r1
	rts	pc

abc0:
	jsr	pc,abc
	tst	(r5)+
	rts	r5
abc:
	mov	r2,-(sp)
	mov	r3,-(sp)
	mov	r0,r3
	bne	0f
	mov	$'0,r0
	jsr	pc,*(r5)
	br	1f
0:
	dec	r3
	jsr	pc,abc1
1:
	mov	(sp)+,r3
	mov	(sp)+,r2
	rts	pc
abc1:
	clr	r2
	dvd	$26.,r2
	mov	r3,-(sp)
	mov	r2,r3
	beq	1f
	dec	r3
	jsr	pc,abc1
1:
	cmp	ro,$2
	beq	1f
	add	$'a,(sp)
	br	2f
1:
	add	$'A,(sp)
2:
	mov	(sp)+,r0
	jsr	pc,*(r5)
	rts	pc

fnumb0:
	jsr	pc,fnumb
	tst	(r5)+
	rts	r5
fnumb:
	mov	ro,-(sp)
	mov	nform,ro
	bne	0f
	mov	(sp),ro
	br	1f
0:
	dec	ro
1:
	tst	ro
	bne	1f
	jsr	pc,decml
	br	2f
1:
	cmp	ro,$2
	bgt	1f
	jsr	pc,roman
	br	2f
1:
	sub	$2,ro
	jsr	pc,abc
2:
	mov	(sp)+,ro
	rts	pc

/wordout:
/	tst	index
/	beq	1f
/	mov	wch,0f
/	beq	1f
/	mov	indid,r0
/	sys	write; word; 0:..
/	mov	indid,r0
/	sys	write; 8f; 1
/	mov	indid,r0
/	jsr	r5,numb; pn
/	mov	indid,r0
/	sys	write; 8f; 1
/	mov	nl,char
/	inc	char
/	mov	indid,r0
/	jsr	r5,numb; char
/	mov	indid,r0
/	sys	write; 9f; 1
/1:
/	rts	pc
/8:	011 /tab
/9:	<\n\0>
/	.even
/numb:
/	mov	r2,-(sp)
/	mov	r3,-(sp)
/	mov	*(r5)+,r3
/	mov	r0,r1
/	jsr	pc,numb1
/	mov	(sp)+,r3
/	mov	(sp)+,r2
/	rts	r5
/numb1:
/	clr	r2
/	dvd	$10.,r2
/	mov	r3,-(sp)
/	mov	r2,r3
/	beq	1f
/	jsr	pc,numb1
/1:
/	add	$'0,(sp)
/	mov	(sp)+,char
/	mov	r1,r0
/	sys	write; char; 1
/	rts	pc

setstr:
	clr	-(sp)
	clr	-(sp)
0:
	jsr	pc,get1
	bmi	3f
	bic	$!177,r0
	cmpb	r0,$'\\
	bne	1f
4:
	jsr	pc,get1
	jsr	r5,switch;esctab
	cmpb	r0,dolc
	bne	2f
	jsr	pc,seta
	br	0b
2:
	cmpb	r0,numc
	bne	1f
	clr	r1
	jsr	pc,setn
	br	0b
1:
	tst	2(sp)
	bne	5f
	bic	$!177,r0
	cmpb	r0,$'(
	bne	1f
	inc	2(sp)
	jsr	pc,get1
	bic	$!177,r0
	cmpb	r0,$'\\
	beq	4b
5:
	mov	r0,-(sp)
	jsr	pc,get1
	bic	$!177,r0
	swab	r0
	bis	(sp)+,r0
1:
	mov	$contab,r1
1:
	mov	(r1)+,(sp)
	bic	$100000,(sp)
	cmp	r0,(sp)
	beq	2f
	cmp	(r1)+,$-1
	bne	1b
	br	3f
2:
	mov	(r1),(sp)
	tst	-(r1)
	bpl	3f
	clr	*nxf
	jsr	pc,pushi
	mov	(sp),ip
3:
	cmp	(sp)+,(sp)+
	rts	pc

copys:
	inc	copyf
	jsr	pc,skipcont
	bne	2f
	jsr	pc,getchar
	bmi	0f
	cmpb	r0,$'"
	bne	0f
1:
	jsr	pc,getchar
	tst	nlflg
	bne	2f
0:
	jsr	pc,wbf
	br	1b
2:
	clr	r0
	jsr	pc,wbt
	clr	copyf
	rts	pc

setrpt:
	inc	copyf
	inc	raw1
	jsr	pc,get1
	dec	copyf
	dec	raw1
	mov	r0,r1
	jsr	pc,get1
	cmpb	r0,$006
	beq	1f
0:
	movb	r0,rchar
	movb	r1,nspace
	cmpb	r1,$377
	bne	1f
	clr	nspace
1:
	rts	pc

setfield:
	clr	npad
	mov	r1,-(sp)
	mov	r2,-(sp)
	mov	r3,-(sp)
	mov	r4,-(sp)
	clr	r4
	clr	-(sp)
	jsr	pc,width
	sub	r1,column /start
	mov	column,-(sp)
	mov	$tabtab,r0
1:
	tst	(r0)
	beq	4f
	cmp	(sp),(r0)+
	bge	1b
	mov	-(r0),2(sp)
	sub	(sp),2(sp) /h
	mov	$fbuf,r2
1:
	jsr	pc,getch1
	bmi	0f
	cmpb	r0,padc
	bne	2f
	jsr	pc,width
	sub	r1,column
	inc	npad
	mov	r2,-(sp)
	add	$2,r2
2:
	cmpb	r0,fc
	beq	3f
	cmpb	r0,$'\n
	bne	0f
	mov	$012,r4
	clr	nlflg
	br	3f
0:
	movb	r0,(r2)+
	cmp	r2,$efbuf-6
	blo	1b
3:
	tst	npad
	bne	0f
	inc	npad
	mov	r2,-(sp)
	add	$3,r2
0:
	movb	r4,(r2)+
	clrb	(r2)+
	jsr	pc,width
	sub	r1,column
	mov	npad,r1
	asl	r1
	add	sp,r1
	mov	(r1),-(sp)
	sub	column,(r1) /-s
	mov	(sp)+,column
	add	2(r1),(r1) /h-s
	mov	(r1),r1
	mov	r1,r2
	sxt	r0
	div	npad,r0
	mov	$014,r3 /unpaddable sp
	tst	r2
	bpl	1f
	neg	r0
	neg	r1
	mov	$010,r3
1:
	mov	(sp)+,r2
	movb	$006,(r2)+
	movb	r0,(r2)+
	movb	r3,(r2)
	tst	r1
	beq	0f
	incb	-1(r2)
	dec	r1
0:
	tstb	-(r2)
	bne	0f
	movb	$377,(r2)
0:
	dec	npad
	bgt	1b
	mov	$fbuf,cp
4:
	cmp	(sp)+,(sp)+
	mov	(sp)+,r4
	mov	(sp)+,r3
	mov	(sp)+,r2
	mov	(sp)+,r1
	rts	pc