Mini-Unix/usr/source/s7/nroff2.s

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

/
/

/ nroff2

casead:
	inc	ad
	jsr	pc,skipcont
	tst	nlflg
	bne	1f
	jsr	pc,getchar
	cmp	r0,$'r	/right adj, left ragged
	bne	0f
	mov	$2,jfomod
	br	1f
0:
	cmp	r0,$'l	/left adj, right ragged
	bne	0f
	clr	jfomod
	clr	ad
	br	1f
0:
	cmp	r0,$'c	/centered adj
	bne	0f
	mov	$1,jfomod
	br	1f
0:
	clr	jfomod	/left and right adj
	inc	ad
1:
	rts	pc

casebr:
	jsr	pc,rbreak
	rts	pc

casecc:
	clr	-(sp)
	br	0f
casec2:
	mov	pc,-(sp)
0:
	jsr	pc,skipcont
	jsr	pc,getchar
	cmp	r0,$'\n
	beq	2f
	tst	(sp)
	bne	1f
	mov	r0,cc
	br	2f
1:
	mov	r0,c2
2:
	mov	r0,ch
	tst	(sp)+
	rts	pc

casece:
	jsr	r5,number; 0
	jsr	pc,min
	mov	r0,-(sp)
	jsr	pc,rbreak
	mov	(sp)+,ce
	rts	pc

casefi:
	jsr	pc,rbreak
	inc	fi
	rts	pc

casein:
	jsr	pc,skipcont
	tst	nlflg
	beq	1f
	mov	in1,r0
	br	2f
1:
	jsr	r5,number1; in
	jsr	pc,min
2:
	mov	r0,-(sp)
	jsr	pc,rbreak
	mov	in,in1
	mov	(sp)+,in
	tst	nc
	bne	1f
	mov	in,un
	jsr	pc,setnel
1:
	rts	pc

caseli:
	jsr	r5,number; 0
	jsr	pc,min
	mov	r0,lit
	mov	frame,litlev
	cmp	nl,$-1
	bne	0f
	jsr	pc,newln1
0:
	rts	pc

casell:
	jsr	pc,skipcont
	tst	nlflg
	beq	1f
	mov	ll1,r0
	br	2f
1:
	jsr	r5,number1; ll
	jsr	pc,min
2:
	mov	ll,ll1
	mov	r0,ll
2:
	jsr	pc,setnel
	rts	pc

casels:
	jsr	pc,skipcont
	tst	nlflg
	beq	1f
	mov	ls1,r0
	br	2f
1:
	jsr	r5,number1; ls
	dec	r0
	jsr	pc,min
	inc	r0
2:
	mov	r0,-(sp)
/	jsr	pc,rbreak
	mov	ls,ls1
	mov	(sp)+,ls
	rts	pc

casens:
	inc	nls
	rts	pc

casers:
	clr	nls
	rts	pc

casena:
	clr	ad
	rts	pc

casene:
	jsr	r5,number; 0
	jsr	pc,min
	jsr	pc,need2
	rts	pc

casenf:
	jsr	pc,rbreak
	clr	fi
	rts	pc

casepn:
	jsr	pc,skipcont
	bne	1f
	jsr	r5,number1; pn
	jsr	pc,min
	mov	r0,npn
1:
	rts	pc
casebp:
	mov	ilistp,-(sp)
	clr	-(sp)
	jsr	pc,skipcont
	bne	1f
	jsr	r5,number1; pn
	jsr	pc,min
	mov	r0,(sp)
1:
	jsr	pc,rbreak
	mov	(sp)+,r0
	beq	0f
	mov	r0,npn
0:
	bne	2f
	tst	nls
	bne	3f
2:
	mov	(sp),r0
	jsr	pc,eject
3:
	tst	(sp)+
	rts	pc

casepl:
	jsr	pc,skipcont
	tst	nlflg
	bne	1f
	jsr	r5,number1; pl
	mov	r0,pl
	rts	pc
1:
	mov	$66.,pl
	rts	pc

casesp:
	mov	pc,-(sp)
	br	0f
casesp1:
	clr	-(sp)
0:
	mov	r0,-(sp)
	tst	nb
	bne	0f
	jsr	pc,rbreak
0:
	tst	nls
	bne	2f
	clr	r0
	jsr	pc,findt
	tst	nb
	bne	1f
	tst	trap
	bne	2f
1:
	tst	2(sp)
	beq	1f
	jsr	r5,number;0
	mov	r0,(sp)
1:
	cmp	r1,(sp)
	bge	1f
	mov	r1,(sp)
1:
	mov	(sp),r0
	ble	3f
	jsr	r5,nlines; newline
2:
	cmp	(sp)+,(sp)+
	rts	pc
3:
	add	nl,r0
	cmp	(sp)+,(sp)+
	br	casert1

casert:
	mov	markline,r2
	jsr	pc,skipcont
	bne	0f
	jsr	r5,number1;nl
casert1:
	mov	r0,r2
0:
	tst	r2
	blt	2f
	cmp	r2,nl
	bge	2f
	mov	nl,r1
	mov	r2,nl
	sub	r2,r1
	mov	r1,r2
1:
	mov	$036,r0
	jsr	pc,putchar
	dec	r2
	bgt	1b
	mov	$015,r0
	jsr	pc,putchar
2:
	rts	pc

casesv:
	clr	r0
	jsr	pc,findt
	jsr	r5,number; 0
	cmp	r1,r0
	bge	1f
	mov	r0,sv
	rts	pc
1:
	jsr	r5,nlines; newline
	rts	pc

caseos:
	tst	sv
	beq	2f
	clr	r0
	jsr	pc,findt
	cmp	r1,sv
	bge	1f
	rts	pc
1:
	mov	sv,r0
	clr	sv
	jsr	r5,nlines; newline
2:
	rts	pc

casetr:
	jsr	pc,skipcont
1:
	jsr	pc,getchar
	cmp	r0,$'\n
	beq	1f
	mov	r0,r1
	jsr	pc,getchar
	cmp	r0,$'\n
	bne	2f
	mov	$' ,r0
2:
	movb	r0,trtab(r1)
	br	1b
1:
	rts	pc

caseta:
	clr	-(sp)
	mov	$tabtab,r1
1:
	jsr	pc,getchar
	tst	nlflg
	bne	1f
	cmpb	r0,$'+
	bne	0f
	inc	(sp)
	br	2f
0:
	cmpb	r0,$'-
	beq	2f
	cmpb	r0,$'0
	blo	1b
	cmpb	r0,$'9
	bhi	1b
2:
	mov	r0,ch
	jsr	pc,atoi
	beq	1f
	jsr	pc,min
	dec	r0
	ble	1f
	cmp	r1,$tabtab
	beq	0f
	tst	(sp)
	bne	3f
	cmp	r0,-2(r1)
	bgt	0f
3:
	add	-2(r1),r0
0:
	clr	(sp)
	mov	r0,(r1)+
	cmp	r1,$etabtab
	blo	1b
	tst	-(r1)
1:
	tst	(sp)+
	clr	(r1)
	rts	pc

caseti:
	jsr	r5,number; in
	jsr	pc,min
	mov	r0,-(sp)
	jsr	pc,rbreak
	mov	(sp)+,un1
	jsr	pc,setnel
	rts	pc

caseul:
	jsr	r5,number; 0
	jsr	pc,min
	mov	r0,ul
	rts	pc

casetl:
	jsr	pc,header
	rts	pc

caselt:
	jsr	pc,skipcont
	tst	nlflg
	beq	1f
	mov	llh1,r0
	br	2f
1:
	jsr	r5,number1; llh
	jsr	pc,min
2:
	mov	llh,llh1
	mov	r0,llh
	rts	pc


casehc:
	jsr	pc,skipcont
	jsr	pc,getchar
	cmp	r0,$'\n
	bne	1f
	movb	$200,r0
1:
	mov	r0,ohc
	rts	pc

casetc:
	jsr	pc,skipcont
	jsr	pc,getchar
	cmp	r0,$'\n
	bne	1f
	mov	$014,r0
1:
	mov	r0,tabc
	rts	pc

caselc:
	jsr	pc,skipcont
	jsr	pc,getchar
	cmp	r0,$'\n
	bne	1f
	mov	$'.,r0
1:
	mov	r0,dotc
	rts	pc

casenc:
	jsr	pc,skipcont
	jsr	pc,getchar
	cmp	r0,$'\n
	bne	1f
	mov	$034,r0
1:
	mov	r0,numc
	rts	pc

casehy:
	mov	$1,hyf
	jsr	pc,skipcont
	bne	1f
	jsr	pc,atoi
	beq	1f
	jsr	pc,min
	mov	r0,hyf
1:
	rts	pc

casenh:
	clr	hyf
	rts	pc

casenp:
	jsr	pc,skipcont
	tst	nlflg
	beq	2f
	clr	ni
	mov	$1,nms
	mov	$1,ndf
	rts	pc
casenm:
	clr	numbmod
	clr	nn
	jsr	pc,skipcont
	tst	nlflg
	beq	1f
	rts	pc
1:
	inc	numbmod
	jsr	r5,number1; lnumber
	jsr	pc,min
	mov	r0,lnumber
	jsr	pc,skipcont
2:
	jsr	r5,3f; ndf
	tst	ndf
	bne	1f
	inc	ndf
1:
	jsr	pc,skipcont
	jsr	r5,3f; nms
	jsr	pc,skipcont
	jsr	r5,3f; ni
	rts	pc
3:
	tst	nlflg
	bne	4f
	jsr	pc,atoi
	beq	4f
	jsr	pc,min
	mov	r0,*(r5)
4:
	tst	(r5)+
	rts	r5

casenn:
	jsr	r5,number; 0
	jsr	pc,min
	mov	r0,nn
	rts	pc

casear:
	clr	ro
	rts	pc

caseroc:
	mov	$2,ro
	rts	pc
casero:
	mov	$1,ro
	rts	pc

casenx:
	jsr	pc,skipcont
	jsr	r5,getname; nextf
	inc	nx
	jsr	pc,nextfile
	inc	nlflg
	clr	ip
	clr	ap
	clr	nspace
	clr	pendt
	mov	$ilist,ilistp
	rts	pc

casepo:
	jsr	pc,skipcont
	tst	nlflg
	beq	1f
	mov	po1,r0
	br	2f
1:
	jsr	r5,number1; po
	jsr	pc,min
2:
	mov	r0,-(sp)
/	jsr	pc,rbreak
	mov	po,po1
	mov	(sp)+,po
	rts	pc

caseig:
	inc	skp
	jsr	pc,copyb
	rts	pc

casern:
/	inc	lgf
	jsr	pc,skipcont
	jsr	r5,getname;bname
	beq	2f
	jsr	pc,findmn
	beq	2f
	mov	oldptr,-(sp)
/	inc	lgf
	jsr	pc,skipcont
	jsr	r5,getname;bname
	beq	1f
	jsr	pc,findmn
	jsr	pc,clrold
	mov	(sp),r1
	tst	-(r1)
	mov	(r1),(sp)
	bic	$77777,(sp)
	mov	bname,(r1)
	bis	(sp),(r1)
1:
	tst	(sp)+
2:
	rts	pc

caserm:
/	inc	lgf
	jsr	pc,skipcont
	jsr	r5,getname;bname
	beq	1f
	jsr	pc,findmn
	jsr	pc,clrold
1:
	rts	pc

caseas:
	inc	app
caseds:
	inc	ds
	br	casede
caseam:
	inc	app
casede:
	tst	op
	beq	1f
	jsr	pc,wbfl
1:
/	inc	lgf
	jsr	pc,skipcont
	jsr	r5,getname; bname
	bne	1f
	clr	r1
	br	6f
1:
	clr	skp
	jsr	pc,finds
	beq	7f
	tst	ds
	beq	0f
	tst	skp
	bne	5f
	jsr	pc,copys
	br	5f
0:
	jsr	pc,copyb
5:
	jsr	pc,wbfl
	jsr	pc,clrold
	tst	newptr
	beq	0f
	bis	$100000,bname
	mov	bname,*newptr
0:
	mov	r1,-(sp)
	mov	apptr,r1
	beq	0f
	mov	$004,r0
	jsr	pc,wbt
0:
	mov	(sp)+,r1
6:
	clr	app
	clr	ds
	rts	pc
7:
	tst	macerr
	bne	0f
	jsr	r5,stringfl; 8f
0:
	inc	macerr
	cmp	macerr,$1
	jeq	edone
	jmp	done2
/	br	6b
8: <Too many string/macro names.\n\0>
	.even

findmn:
	mov	$contab,r1
1:
	mov	(r1)+,r0
	bic	$100000,r0
	cmp	bname,r0
	beq	2f
	cmp	(r1)+,$-1
	bne	1b
	clr	r1
2:
	mov	r1,oldptr
	rts	pc

finds:
	jsr	pc,findmn
	clr	newptr
	clr	apptr
	clr	aplnk
	tst	app
	beq	0f
	tst	oldptr
	bne	5f
0:
	mov	$contab,r1
1:
	tst	(r1)+
	beq	2f
	cmp	(r1)+,$-1
	bne	1b
1:
	inc	skp
	clr	r1
	rts	pc
2:
	jsr	pc,alloc
	beq	1b
	tst	oldptr
	bne	3f
4:
	tst	-(r1)
	bis	$100000,bname
	mov	bname,(r1)+
	mov	nextb,(r1)
	br	6f
3:
	tst	diflg
	bne	4b
	mov	nextb,(r1)
	tst	-(r1)
	mov	r1,newptr
	br	6f
5:
	tst	-(r1)
	bmi	1f
	clr	app
	br	0b
1:
	tst	(r1)+
	clr	oldptr
	mov	ip,-(sp)
	mov	(r1),ip
1:
	jsr	pc,rbf
	tst	r0
	bne	1b
	mov	ip,r1
	mov	r1,apptr
	tst	diflg
	bne	0f
	jsr	pc,incoff
0:
	mov	r1,nextb
	mov	(sp)+,ip
6:
	clr	app
	mov	nextb,r1
	rts	pc

clrold:
	mov	oldptr,r0
	beq	1f
	mov	(r0),-(sp)
	clr	(r0)
	tst	-(r0)
	bmi	0f
	clr	(sp)
0:
	clr	(r0)
	mov	(sp)+,r0
	beq	1f
	jsr	pc,free
1:
	rts	pc

caseda:
	inc	app
casedi:
/	inc	lgf
	clr	ditf
	jsr	pc,skipcont
	jsr	r5,getname; bname
	beq	1f
	tst	op
	bne	3f
	inc	diflg
	jsr	pc,finds
	beq	3f
	mov	r1,op
	jsr	pc,clrold
/	mov	blss,sblss
/	mov	alss,salss
/	clr	blss
/	clr	alss
	clr	dnl
	br	3f
1:
	tst	op
	beq	3f
	clr	r0
	jsr	pc,pchar1
	jsr	pc,wbfl
/	mov	sblss,blss
/	mov	salss,alss
	clr	op
3:
	clr	app
	clr	diflg
	rts	pc

caseev:
	jsr	pc,skipcont
	tst	nlflg
	beq	2f
	cmp	evp,$elist
	ble	5f
1:
	sub	$2,evp
	mov	*evp,-(sp)
	br	3f
2:
	jsr	pc,atoi
	beq	6f
	cmp	r0,nev
	bgt	6f
	tst	r0
	blt	6f
	cmp	evp,$eliste
	bgt	6f
	mov	r0,-(sp)
	mov	ev,*evp
	add	$2,evp
3:
	cmp	(sp),ev
	beq	4f
	mov	$1024.,r3
	mpy	ev,r3
	mov	r3,8f
	mov	$1024.,r3
	mpy	(sp),r3
	mov	r3,9f
	mov	ibf,r0
	sys	0;7f
.data
7:	sys	seek; 8:.. ; 0
.text
	mov	ibf,r0
	sys	write; block; 1024.
	mov	ibf1,r0
	sys	0;7f
.data
7:	sys	seek; 9:.. ; 0
.text
	mov	blocksize,0f
	mov	ibf1,r0
	sys	0;7f
.data
7:	sys	read; block; 0:..
.text
4:
	mov	(sp)+,ev
5:
	rts	pc
6:
	jsr	r5,string;9f
	rts	pc
9: <Cannot do "ev".\n\0>
.even

caseif:
	clr	-(sp)
	jsr	pc,skipcont
	jsr	pc,getchar
	cmp	r0,$'!
	bne	1f
	inc	(sp)
	br	2f
1:
	mov	r0,ch
2:
	jsr	pc,atoi
	beq	1f
	tst	r0
	bgt	5f /true
	br	6f /false
1:
	jsr	pc,getchar
	cmp	r0,$'e
	bne	1f
	bit	$1,pn
	bne	6f
	br	5f
1:
	cmp	r0,$'o
	bne	1f
	bit	$1,pn
	beq	6f
	br	5f
1:
	cmpb	r0,$'n
	beq	5f
1:
	tst	(sp)+
	rts	pc
5:
	tst	(sp)
	bne	1b
2:
	clr	column
	jsr	pc,getchar
	bmi	0f
	cmpb	r0,$' /
	beq	2b
0:
	mov	r0,ch
	inc	nflush
	br	1b
6:
	tst	(sp)
	beq	1b
	br	2b

casewh:
	clr	-(sp)
	jsr	pc,skipcont
	jsr	pc,getchar
	cmp	r0,$'x
	bne	1f
	mov	$-1,r0
	jsr	pc,findt
	add	nl,r1
	sub	dnl,r1
	mov	r1,r0
	br	2f
1:
	mov	r0,ch
	jsr	pc,atoi
	beq	4f
2:
	mov	r0,(sp)
	jsr	pc,skipcont
	jsr	r5,getname; bname
	tstb	bname
	bne	1f
	clr	bname
1:
	mov	(sp),r0
	jsr	pc,findn
	tst	r1
	beq	1f
	mov	bname,[mlist-nlist](r1)
	br	4f
1:
	mov	$mlist,r1
2:
	tst	(r1)+
	beq	3f
	cmp	r1,$mliste
	bgt	4f
	br	2b
3:
	mov	bname,-2(r1)
	mov	(sp),[nlist-mlist-2](r1)
4:
	tst	(sp)+
	rts	pc

findn:
	mov	$nlist,r1
1:
	cmp	(r1),r0
	beq	3f
2:
	tst	(r1)+
	cmp	r1,$nliste
	bne	1b
	clr	r1
	rts	pc
3:
	tst	[mlist-nlist](r1)
	beq	2b
	rts	pc

findm:
	mov	$mlist,r1
1:
	cmp	(r1),bname
	beq	3f
2:
	tst	(r1)+
	cmp	r1,$mliste
	bne	1b
	clr	r1
	rts	pc
3:
	sub	$[mlist-nlist],r1
	rts	pc

casech:
	clr	-(sp)
	jsr	pc,skipcont
	jsr	pc,atoi
	beq	2f
	jsr	pc,findn
	br	3f
2:
	jsr	r5,getname; bname
	tstb	bname
	beq	1f
	jsr	pc,findm
3:
	tst	r1
	beq	1f
	mov	r1,(sp)
	jsr	pc,skipcont
	jsr	pc,atoi
	beq	2f
	mov	r0,*(sp)
1:
	tst	(sp)+
	rts	pc
2:
	jsr	pc,getchar
	tst	nlflg
	bne	1b
	mov	*(sp),r0
	beq	1b
	bgt	0f
	add	pl,r0
	inc	r0
0:
	sub	nl,r0
	ble	1b
	dec	r0
	ble	1b
	cmp	dnl,r0
	bge	0f
	mov	dnl,r0
0:
	sub	r0,*(sp)
	br	1b

casemk:
	jsr	pc,skipcont
	beq	1f
	mov	nl,markline
	rts	pc
1:
	jsr	r5,getname; bname
	mov	bname,r0
	beq	2f
	jsr	pc,findr
	beq	2f
	mov	nl,(r1)
2:
	rts	pc

casetm:
	inc	copyf
	jsr	pc,skipcont
	mov	$bname,r1
1:
	jsr	pc,getchar
	bmi	1b
	movb	r0,(r1)+
	tst	nlflg
	bne	2f
	cmp	r1,$ename
	blo	1b
	movb	$'\n,-1(r1)
2:
	clrb	(r1)
	jsr	r5,stringfl; bname
	clr	copyf
	rts	pc

caserd:
	jsr	pc,skipcont
	jsr	r5,getname; bname
	tst	iflg
	bne	1f
	tst	quiet
	bne	2f
	tstb	bname
	beq	5f
	jsr	r5,string; bname
	jsr	r5,string; 3f
1:
	jsr	pc,collect
	inc	tty
	jsr	pc,pushi
	beq	6f
	mov	$-1,ip
	rts	pc
2:
	bic	$10,ttym
	mov	ttyid,r0
	sys	stty; ttys
	jsr	pc,flush
5:
	jsr	r5,string;4f
	br	1b
6:
	jmp	rdtty2
3:	<: \0>
4:	<\0> /bell
	.even

caseaf:
	jsr	pc,skipcont
	bne	3f
	jsr	r5,getname;bname
	mov	bname,r0
	beq	3f
	jsr	pc,findr
	jsr	pc,skipcont
	jsr	pc,getchar
	mov	$4f,r2
1:
	cmpb	r0,(r2)+
	beq	2f
	inc	r2
	tstb	(r2)
	bne	1b
2:
	movb	(r2),[flist-vlist](r1)
3:
	rts	pc
4:
.byte '1,1
.byte 'i,2
.byte 'I,3
.byte 'a,4
.byte 'A,5
.byte 0,0

casenr:
	jsr	pc,skipcont
	bne	5f
	jsr	r5,getname; bname
	mov	bname,r0
	jsr	pc,findr
	mov	r1,0f
	beq	5f
	jsr	pc,skipcont
	bne	5f
	jmp	7f
.data
7:	jsr	r5,number1; 0:..
	jmp	8f
.text
8:
	bne	1f
	clr	r0
1:
	mov	r0,*0b
	jsr	pc,skipcont
	bne	5f
	jsr	pc,atoi
	beq	5f
	mov	r0,[inclist-vlist](r1)
5:
	rts	pc

casefl:
	jsr	pc,rbreak
	jsr	pc,flush
	rts	pc

casexh:
/	tst	x.5
/	bne	1f
	inc	x.5
	rts	pc
/1:
/	clr	x.5
/	rts	pc

caseso:
	jsr	pc,skipcont
	tst	nlflg
	bne	1f
	jsr	r5,getname; nextf
	tstb	nextf
	beq	1f
	sys	open; nextf; 0
	bes	1f
	mov	ifp,r1
	cmp	r1,$ifle
	bhi	1f
	mov	r0,-(sp)
	jsr	pc,flushi
	mov	ifile,(r1)
	mov	(sp)+,ifile
	mov	ioff,[offl-ifl](r1)
	add	$2,ifp
	clr	ioff
	inc	nx
	inc	nflush
	tst	(r1)
	bne	1f
	jsr	pc,savebuf
1:
	rts	pc

caseeo:
	clr	r0
	br	1f
caseec:
	jsr	pc,skipcont
	jsr	pc,getchar
	cmpb	r0,$'\n
	bne	1f
	movb	$'\\,r0
1:
	movb	r0,eschar
	movb	r0,eschar+1
	rts	pc

casest:
	4

caseem:
	clr	em
	jsr	pc,skipcont
	bne	1f
	jsr	r5,getname;bname
	beq	1f
	mov	bname,em
1:
	rts	pc

casefc:
	mov	$4,fc
	mov	$' ,padc
	jsr	pc,skipcont
	bne	1f
	jsr	pc,getchar
	bmi	1f
	movb	r0,fc
	jsr	pc,skipcont
	bne	1f
	mov	ch,r0
	bmi	1f
	cmpb	r0,fc
	beq	1f
	movb	r0,padc
1:
	rts	pc

casepi:
	tst	toolate
	bne	1f
	jsr	pc,skipcont
	jsr	r5,getname;bname
	beq	1f
	sys	42. /pipe
	jes	place
	mov	r0,pipin
	mov	r1,outid
	sys	fork
	br	2f
	jes	place
	mov	$1,r0
	sys	close
	mov	pipin,r0
	sys	close
1:
	inc	toolate
	rts	pc
2:
	clr	r0
	sys	close
	mov	pipin,r0
	sys	41. /dup
	mov	outid,r0
	sys	close
	sys	exec;bname;args
	jsr	r5,string;9f
	sys	exit
args: bname;0
9: <exec failed\n\0>
.even