2.9BSD/usr/src/ucb/m11/exec.lst

exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02
table of contents

    2-   1		assembly options
    3-   1		globals
    5-   1	mcioch - i/o channel assignments
    7-   1	start of program
    8-   1	output file initialization
   10-   1	pass initialization
   11-   1	end of pass routines
   12-   1	end of program cleanup
   15-   1	system macro handlers
   16-   1	init/read/write routines
   18-   1	messages
   19-   1	i/o tables
   22-   1	cross reference handlers
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 1


      1					
      2					; @(#)exec.m11	1.2 3/26/82
      3					;this is the key to the bob bowering assembler that has been modified for
      4					;unix by brent byer
      5					;symbols for ddt have been added by forrest howard, who also fixed various
      6					;bugs
      7						.title	exec	-  assembler exec
      8					
      9						.ident	/01aug5/
     10					
     11						.mcall (at)ndebug,sdebug
     12						.mcall (at)jeq,jne
     13						.mcall	(at)always,ct.mne,xmit,putkb,putkbl,putlp,genswt
     14						.mcall	(at)genedt
     15						.mcall	(at)error,scanw
     16						.mcall	(at)st.flg
     17	000000					always
     18	000000					ct.mne
     19	000000					st.flg
     20					
     21					
     22						.macro	strcpy	from,to ,?loop
     23						mov	r0,-(sp)
     24						mov	r1,-(sp)
     25						mov	from,r0
     26						mov	to,r1
     27					loop:
     28						movb	(r0)+,(r1)+
     29						bne	loop
     30					
     31						mov	(sp)+,r1
     32						mov	(sp)+,r0
     33						.endm
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 2
assembly options

      1						.sbttl		assembly options
      2					
      3					;the following macro causes assembly options to be
      4					;printed on the loader map and any implications
      5					;(second argument) to be defined.  options are
      6					;selected by equating them to zero.
      7					
      8						.macro	ldrmap	mne,implies
      9						.if df	mne
     10						.list
     11						.globl	mne
     12						.nlist
     13						.irp	x,<implies>
     14						.globl	x
     15					x=	0			;invoke implications
     16						.endm
     17						.endc
     18						.endm	ldrmap
     19					
     20					
     21					;the following group enables functions
     22					
     23	000000					ldrmap	rsx11d,<dflgtb>		;rsx11d "features"
						.globl	rsx11d
     24					
     25	000000					ldrmap	debug		;debug version
						.globl	debug
     26	000000					ldrmap	pdpv45		;pdp-11/45 instructions
						.globl	pdpv45
     27	000000					ldrmap	id.spc		;i- & d-space capability for unix
     28	000000					ldrmap	dblbuf		;tran'd input
     29					
     30					;the following group disables functions
     31					
     32						.iif df	x40&x45,	xfltg=	0
     33					
     34	000000					ldrmap	xbaw		;no bells and whistles
     35	000000					ldrmap	xswit,xcref	;no switches
     36	000000					ldrmap	xrel,xedpic	;abs output only
     37	000000					ldrmap	xmacro,xsml	;all generated code (macro, rept, etc.)
     38	000000					ldrmap	xsml		;system macros
     39	000000					ldrmap	x40		;pdp-11/40 features
						.globl	x40
     40	000000					ldrmap	x45		;pdp-11/45 features
     41	000000					ldrmap	xfltg,xedfpt	;floating point evaluation
     42	000000					ldrmap	xedabs		;ed.abs
     43	000000					ldrmap	xedama		;ed.ama
     44	000000					ldrmap	xedpic		;ed.pic
     45	000000					ldrmap	xedfpt		;ed.fpt
     46	000000					ldrmap	xedlsb		;ed.lsb
     47	000000					ldrmap	xedpnc		;ed.pnc
     48	000000					ldrmap	xedlc		;ed.lc
     49	000000					ldrmap	xedcdr		;card reader format
     50	000000					ldrmap	xzerr		;"z" errors
     51	000000					ldrmap	xlcttm		;no lpt listing format
     52	000000					ldrmap	xlcseq		;sequence numbers
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 2-2
assembly options

     53	000000					ldrmap	xtime		;no time & date on header
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 3
globals

      1						.sbttl		globals
      2					
      3					;globals defined in assembler
      4					
      5						.globl	srchi
      6						.globl	prop1,	endp1,	prop2,	endp2
      7						.globl	bksiz
      8						.globl	symlp,	symhp
      9						.globl	setlc,	seted
     10						.globl	uc.set, um.set
     11					
     12					
     13						.globl	pass
     14					
     15						.globl	putkb,	putkbl,	putlp
     16					
     17						.globl	dnc,	movbyt,	savreg,	xmit0
     18					
     19						.globl	linbuf,	errcnt,	openo,	openc
     20						.globl	chrpnt,	prosw, absexp
     21					
     22						.globl	xctpas
     23					
     24					
     25					;globals defined in mcexec
     26					
     27						.globl	pagnum,	linnum
     28						.globl	inicor, iargv
     29					
     30						.if ndf	xtime
     31						.globl	dattim
     32						.endc
     33						.if ndf	xsml
     34						.globl	finsml,	inisml,	smlnam, smlfil
     35						.endc
     36						.globl	getic,	hdrttl,	putoc,	getsrc
     37						.globl	io.eof,	io.eoi,	io.tty,	io.err
     38					
     39						.globl	ioftbl,	cnttbl,	buftbl,	ioltbl,	chrtbl
     40						.globl	exttbl,	bintbl,	lstflg, chntbl
     41						.globl	$wrsys, $wrbfp, $wrcnt, $brksy, $brkad
     42					
     43						.globl	symovf, macovf
     44					
     45						.globl	errrol,crfrol
     46						.globl	xctprg
     47		000001			errrol=	1
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 4
globals

      1						.mcall	(at)param
      2					
      3						.mcall	$creat, $open, $close, $exit, $read, $write, $break
      4						.mcall	$seek, $indir, $time, $fork, $wait, $exec
      5					
      6									;init sectors
      7					
      8					
      9	000000					entsec	implin
     10						.blkw
     11	000002					xitsec
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 5
mcioch - i/o channel assignments

      1						.sbttl	mcioch - i/o channel assignments
      2					
      3					.macro	genchn	zchan,zlnk,zbuf,ztype,zext,zlen
      4						setchn	cmo,	cmo,	cmo,	0,	,80.
      5						setchn	src,	src,	src,	0,	m11,	132.
      6						setchn	lst,	lst,	lst,	,	lst,	512.
      7						setchn	obj,	obj,	obj,	1,	obj,	42.
      8						.if ndf	xsml
      9						setchn	sml,	sml,	sml,	0,	sml,	80.
     10						.endc
     11						.if ndf xcref
     12						setchn	crf,	crf,	crf,	,	xrf,	512.
     13						.endc
     14					.endm	genchn
     15					
     16						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
     17						.if nb	<zlen>
     18						param	zbuf'len,	zlen
     19						.endc
     20						.endm
     21					
     22	000000					genchn
		000120			cmolen=	cmolen
		000204			srclen=	srclen
		001000			lstlen=	lstlen
		000052			objlen=	objlen
		000120			smllen=	smllen
		001000			crflen=	crflen
     23					
     24						.globl	objlen
     25					
     26		000000			tmpcnt=	0
     27						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
     28						.list
     29					zchan'chn=	tmpcnt
     30						.nlist
     31						.globl	zchan'chn
     32					tmpcnt=	tmpcnt+2
     33						.endm
     34					
     35	000000					genchn
		000000			cmochn=	tmpcnt
		000002			srcchn=	tmpcnt
		000004			lstchn=	tmpcnt
		000006			objchn=	tmpcnt
		000010			smlchn=	tmpcnt
		000012			crfchn=	tmpcnt
     36					
     37		000014			maxchn=	tmpcnt			;just to preserve the count
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 6
mcioch - i/o channel assignments

      1						.macro	serror	xxx ; was: .macro serror number,message
      2						mov	xxx,r0		; was:  jsr	r0,serror
      3									; was: .asciz	\message\
      4						jmp	serror		; new: no return
      5									;.even
      6						.endm	serror
      7					
      8					.macro .asclc, str
      9						.nlist
     10					
     11						.irpc x, ^%str%
     12					
     13						.if ge ''x-101
     14							.if le ''x-132
     15								.byte ''x+40
     16							.iff
     17								.byte ''x
     18							.endc
     19						.iff
     20						.byte ''x
     21						.endc
     22					
     23						.endm
     24					
     25						.byte	0
     26					
     27						.list
     28					.endm
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 7
start of program

      1						.sbttl	start of program
      2					
      3						.globl	start,	fin
      4					
      5					
      6	000000				start:				;start of program
      7	000000	012667	000002'			mov	(sp)+,iargc	;store arg. count
      8	000004	010667	000004'			mov	sp,iargv	;store pointer to arg. vector
      9	000010	005016				clr	(sp)
     10	000012	012702	000124'			mov	#dattim,r2	;set date and time
     11	000016					$time
     12	000020					call	cvtim		;convert to ascii 
     13					
     14	000024					call	xctprg		;clean up core
     15	000030					call 	inip0		;output file processing
     16	000034					call 	inip1
     17	000040					call	prop1	;pass one
     18	000044					call 	finp1
     19	000050					call	endp1	;clean up
     20	000054					call 	inip2
     21	000060					call	prop2	;pass 2
     22	000064					call	endp2
     23	000070					call 	setdn		;finished, control not returned
     24					
     25	000074	012700	000006			mov	#objchn,r0
     26	000100					call	zwrite
     27	000104					call	zclose
     28						
     29	000110	012700	000004			mov	#lstchn,r0	;output any remaining listing
     30	000114					call	zwrite
     31						
     32						.if ndf xcref
     33	000120	016702	000740'			mov	crfpnt,r2
     34	000124	001432				beq	9$
     35	000126	012700	000012			mov	#crfchn,r0
     36	000132					call	zwrite		;dump out any remaining output
     37	000136					call	zclose		;close cref tmp. file
     38	000142	012700	000004			mov	#lstchn,r0
     39	000146	005767	000000C			tst	ioftbl+lstchn
     40	000152	001007				bne	81$
     41	000154	016767	000000C	000000C		mov	cnttbl+crfchn,cnttbl+lstchn
     42									;set up to recycle (i hope)
     43	000162	005267	000000'			inc	lstflg
     44	000166					call	openo
     45	000172	012702	000004		81$:	mov	#lstchn,r2	;set up name of listing file in linbuf
     46	000176					call	src.ap
     47	000202					$exec			;cref will do the rest!!
     48	000204	000244'				crfrun
     49	000206	000074'				crefav
     50						; execl("macxrf", "macxrf", "-flags", "fred.xrf", "fred.lst", 0);
     51						;	meaning of flags arg:
     52						;	"-"	m11 invoked with -cr only: do the standard stuff
     53						;	"-am.." other letters added as extra cr flags invoked.
     54						;
     55					
     56					
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 7-2
start of program

     57					
     58	000210	000415				br	$$exit
     59						.endc
     60					
     61	000212	005767	000012'		9$:	tst	lpflag		;spooler requested?
     62	000216	001412				beq	$$exit		;no, leave
     63						
     64	000220	012700	000004			mov	#lstchn,r0	;yes, close listing channel
     65	000224	010002				mov	r0,r2		;copy for src.ap
     66	000226					call	zclose
     67	000232					call	src.ap		;put name of lst file into linbuf
     68	000236					$exec			; take it away, LPR!
     69	000240	000006'				lprrun
     70	000242	000000'				lpargs
     71					
     72	000244	005000			$$exit:	clr	r0		;leave r0 set corectly
     73	000246	005767	000000G			tst	errcnt
     74	000252	001401				beq	1$		;no problems
     75	000254	005200				inc	r0		;return 1
     76	000256				1$:
     77	000256					$exit			;that's all, folks!
     78					
     79					
     80					
     81	000260					entsec	dpure
     82	000000	000006'			lpargs:	lprrun
     83	000002	000000G				linbuf
     84	000004	000000				0
     85					
     86	000006				lprrun:	.asclc	/usr/ucb/bin/lpr
     87						.even
     88					
     89					
     90					
     91	000030					entsec	mixed
     92					
     93	000000				argc:	.blkw	1
     94	000002				iargc:	.blkw	1
     95	000004				iargv:	.blkw	1
     96	000006				argv:	.blkw	1
     97	000010	000000C			symlp:	<^pl xpcor>
     98	000012	000000C			symhp:	<<<^ph xpcor>+63.>&^c63.>-2
     99					
    100	000014					entsec	impure
    101					
    102	000000				lstflg:	.blkw	1
    103	000002				lttflg::	.blkw	1
    104	000004				crfpnd:	.blkw	1
    105	000006				no.flg:	.blkw	1
    106	000010				u.flag::	.blkw	1		; user wants UNIX style line numbers
    107	000012				lpflag:	.blkw	1
    108	000014				mx.flg::	.blkw	1		; if set, do macro expansion ONLY
    109	000016				xx.flg::	.blkw	1		; debug switch
    110	000020				my.flg::	.blkw	1		; and also show the pre-xpnd srce lines
    111	000022				sx.flg::	.blkw	1		; if set, generate more local syms syms
    112	000024				pdp10::		.blkw	1		; check for model dependencies in
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 7-3
start of program

    113										; the instruction set
    114	000026					entsec	mixed
    115	000014				crefil:	.blkw	30			; name of cref file: /fred.xrf/
    116	000074	000244'			crefav:	.word	crfrun
    117	000076	000000C				.word	crflag+1
    118	000100	000014'				.word	crefil
    119	000102	000000G				.word	linbuf
    120	000104	000000				.word	0
    121	000106	   055	   055		crflag:	.ascii	/--/
    122						.blkw	5
    123	000122	000000C			crap:	.word	crflag+2
    124					
    125	000124					xitsec
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 8
output file initialization

      1						.sbttl	output file initialization
      2					
      3	000260				inip0:				;initialize things
      4	000260	012700	000000			mov	#cmochn,r0	;set up cmo
      5	000264					call	zopen
      6	000270	012767	000001	000000C		mov	#1,chntbl+cmochn	;it is file handle #1
      7	000276					call	inip0z		;set up argc & argv
      8	000302	005367	000000'		1$:	dec	argc		;any more arguments?
      9	000306	002467				blt	9$		;no, return
     10	000310	016700	000006'			mov	argv,r0		;yes, get pointer to next arg.
     11	000314	012001				mov	(r0)+,r1	;  into r1
     12	000316	010067	000006'			mov	r0,argv		;store back new argv
     13	000322	005701				tst	r1
     14	000324	001766				beq	1$		;ignore null pointers (maybe, first one)
     15	000326	122127	000055			cmpb	(r1)+,#'-	;is switch indicated?
     16	000332	001403				beq	3$		;yes
     17	000334	014067	000026'			mov	-(r0),srcnam	;no , last name will be prefix
     18	000340	000760				br	1$
     19	000342				3$:	;here is hack for explicit name switch
     20	000342	121127	000156			cmpb	(r1),#'n
     21	000346	001011				bne	33$
     22	000350	126127	000001	000141		cmpb	1(r1),#'a
     23	000356	001005				bne	33$
     24	000360	062701	000003			add	#3,r1		;move past na:
     25	000364	010167	000030'			mov	r1,esrcnam
     26	000370	000744				br	1$
     27	000372	012702	000000G		33$:	mov	#linbuf,r2	;point to dest. for switch
     28	000376	010203				mov	r2,r3		;make copy
     29	000400	005022				clr	(r2)+		;zap initially
     30	000402	010267	000000G			mov	r2,chrpnt	;copy pointer here for arg.
     31	000406	112100			4$:	movb	(r1)+,r0	;get char.
     32	000410					call	mk.up		;make upper case
     33	000414	003406				ble	55$		;null or :
     34	000416	110023				movb	r0,(r3)+	;ok, store
     35	000420	020302				cmp	r3,r2		;max. of 2 chars.
     36	000422	103771				blo	4$
     37	000424	112100			5$:	movb	(r1)+,r0	;store rest of arg. in linbuf
     38	000426					call	mk.up		;check it and make upper case
     39	000432	002002			55$:	bge	6$		;neg. indicates :
     40	000434	012700	000040			mov	#40,r0		;replace with space
     41	000440	110022			6$:	movb	r0,(r2)+
     42	000442	001370				bne	5$		;continue till null
     43	000444	016700	000000G			mov	linbuf,r0	;restore switch name into r0
     44	000450				7$:	call	prosw		;process the switch
     45	000454	001312				bne	1$		;continue if no error
     46	000456				8$:	serror	#swcerr
     47					
     48	000466				9$:
     49	000466	005767	000026'		19$:	tst	srcnam		;must be at least one filename
     50	000472	001664				beq	$$exit		;or we are just a no-op.
     51	000474					return
     52					
     53					.globl	cttbl			; defined in misc.m11
     54					
     55	000476				mk.up:
     56	000476	042700	177600			bic	#^c177,r0
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 8-2
output file initialization

     57	000502	122760	000100	000000G		cmpb	#ct.lc,cttbl(r0)
     58	000510	001002				bne	1$		; if lower, make upper
     59	000512	162700	000040			sub	#40,r0
     60	000516	122700	000072		1$:	cmpb	#':,r0		; if input is a colon,
     61	000522	001001				bne	2$
     62	000524	005400				neg	r0		; return MINUS COLON !!!
     63	000526	005700			2$:	tst	r0		; else return input
     64	000530					return
     65						
     66	000532					entsec	impure
     67	000026				srcnam:	.blkw	1
     68	000030				esrcnam: .blkw	1
     69	000032					xitsec
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 9
output file initialization

      1	000532					genswt	no,no.set
      2	000532	005267	000006'		no.set:	inc	no.flg		;indicate no object output
      3	000536					return
      4					
      5	000540					genswt	uc,uc.set	; revert to bad old DEC upper case rules
      6	000540					genswt	um,um.set	; revert to bad old Harvard upper case rules
      7					
      8	000540					genswt	sx,sx.set
      9	000540	005267	000022'		sx.set:	inc	sx.flg
     10	000544					return
     11					
     12	000546					genswt	u,u.set
     13					
     14	000546	005267	000010'		u.set:	inc	u.flag
     15	000552					return
     16	000554					genswt	xx,xx.set
     17	000554	005267	000016'		xx.set:	inc	xx.flg
     18	000560					return
     19	000562					genswt	mx,mx.set
     20	000562					genswt	my,my.set
     21	000562					genswt	lt,lt.set
     22	000562				mx.set:	
     23	000562					call 	no.set
     24	000566					call	lt.set
     25	000572	005267	000014'			inc	mx.flg
     26	000576					return
     27	000600				my.set:
     28	000600	005267	000020'			inc	my.flg
     29	000604	000766				br	mx.set
     30					
     31	000606					genswt	10,setten
     32	000606				setten:
     33	000606	005267	000024'			inc	pdp10
     34	000612					return
     35	000614				lt.set:
     36	000614	012767	000001	000002'		mov	#1,lttflg
     37	000622					call	ls.set
     38	000626	112777	000157	000122'		movb	#'o,@crap		; tell cref to go on stdout, too.
     39	000634	005267	000122'			inc	crap
     40	000640					return
     41					.if	ne,mk.symbol
     42	000642					genswt	ns,ns.set
     43					
     44	000642	005267	000000G		ns.set:	inc	out$ym
     45	000646					return
     46					
     47						.globl	out$ym
     48					.endc
     49						.globl	fixtit
     50						.globl	ed.gbl, eddflt
     51	000650					genswt	xs,xs.set
     52	000650				xs.set:				; obsolete
     53	000650					call	absexp		; so that -xs:3 wont genrerate a 'bad switch'
     54									; error.
     55	000654					return
     56					
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 9-2
output file initialization

     57	000656					genswt	ha,ha.set
     58	000656					genswt	de,de.set
     59	000656				ha.set:
     60	000656	005267	000000'			inc	veritas				; reinstate addf #12,3,fr1
     61	000662	012767	000166'	000146'		mov	#harvid,vernam
     62	000670					call	um.set
     63						;	harvard .psect attrib scheme uses same defaults as UCB,
     64						;	but uses them wrong.  The 'veritas' flag tells when to misuse
     65						;	them.  See 'psect' in xlat.m11
     66						;
     67	000674	052767	000000G	000000G		bis	#ed.gbl,eddflt
     68	000702	000167	000000G			jmp	fixtit
     69	000706				de.set:
     70	000706					call	uc.set
     71	000712	012767	000203'	000146'		mov	#decid,vernam
     72						;
     73						; incomprehensible but true DEC default attribute patterns
     74						;
     75	000720	012767	000052	000000G		mov	#insflg!pattrs,psdflt
     76	000726	012767	000172	000000G		mov	#insflg!cattrs,csdflt
     77	000734	012767	000132	000000G		mov	#insflg!aattrs,asdflt
     78	000742	052767	000000G	000000G		bis	#ed.gbl,eddflt
     79	000750	000167	000000G			jmp	fixtit
     80					
     81	000754					genswt	dp,dp.set
     82	000754					genswt	da,da.set
     83	000754					genswt	dc,dc.set
     84						.globl	psdflt,asdflt,csdflt,psarol	; in xlat.m11:  .psect atribs
     85					
     86	000754				da.set:
     87	000754	012746	000000G			mov	#asdflt,-(sp)
     88	000760	000405				br	dx.set
     89	000762				dc.set:
     90	000762	012746	000000G			mov	#csdflt,-(sp)
     91	000766	000402				br	dx.set
     92	000770				dp.set:
     93	000770	012746	000000G			mov	#psdflt,-(sp)
     94	000774				dx.set:
     95	000774					call	gsarg
     96	001000	001443				beq	9$
     97	001002					scanw	psarol
     98	001012	001407				beq	10$
     99	001014	156776	000000C	000000		bisb	symbol+2,@(sp)
    100	001022	146776	000000C	000000		bicb	symbol+3,@(sp)
    101	001030	000761				br	dx.set
    102	001032				10$:	error	45,a,<illegal .psect attribute>
    103	001110				9$:
    104	001110	005726				tst	(sp)+
    105	001112					return
    106					
    107	001114					genswt	ls,ls.set
    108	001114					genswt	lp,lp.set
    109					
    110	001114	005267	000012'		lp.set:	inc	lpflag		;note spooler request
    111	001120	112777	000154	000122'		movb	#'l,@crap
    112	001126	005267	000122'			inc	crap
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 9-3
output file initialization

    113	001132	005267	000000'		ls.set:	inc	lstflg		;note lst file req.
    114	001136	012702	000004			mov	#lstchn,r2	;set up to add buffer for lstchn
    115	001142	016700	000010'		addbuf:	mov	symlp,r0	;get cur. free loc.
    116	001146	010062	000236'			mov	r0,cnttbl(r2)	;that's where our byte count will go
    117	001152	005720				tst	(r0)+		;now point to our buffer
    118	001154	010062	000252'			mov	r0,buftbl(r2)
    119	001160	066200	000174'			add	ioltbl(r2),r0	;allow for length of buffer
    120	001164	010067	000010'			mov	r0,symlp	;new free loc.
    121					
    122	001170					return
    123					
    124					.if ndf xcref
    125	001172					genswt	cr,cr.set
    126	001172					genedt	crf
    127						.globl	ed.crf,edmask,gsarg,cpopj
    128	001172				cr.set:	
    129	001172	005767	000004'			tst	crfpnd
    130	001176	001056				bne	2$
    131	001200	005267	000004'			inc	crfpnd		;note pending cref
    132	001204	052767	000000G	000000G		bis	#ed.crf,edmask	; so .enabl/.dsabl crf will work.
    133	001212				1$:
    134	001212					call	gsarg
    135	001216	001413				beq	3$
    136	001220					scanw	crfrol
    137	001230	001412				beq	9$
    138	001232	116777	000000C	000122'		movb	symbol+4,@crap
    139	001240	005267	000122'			inc	crap
    140	001244	000762				br	1$
    141	001246				3$:
    142	001246	012702	000012			mov	#crfchn,r2	;set up buffer for it
    143	001252	000167	177664			jmp	addbuf
    144					
    145	001256				9$:
    146	001256					error	55,a, <illegal cref argument>
    147	001334				2$:
    148	001334					return
    149					
    150						.macro	gencrf	name,char
    151						entsec	crfsec
    152						.even
    153						.rad50	/name/
    154						.word	cpopj
    155						.word	char
    156						.endm
    157	001336					gencrf	s,'s
    158	000006					gencrf	sy,'s
    159	000014					gencrf	sym,'s
    160	000022					gencrf	r,'r
    161	000030					gencrf	re,'r
    162	000036					gencrf	reg,'r
    163	000044					gencrf	m,'m
    164	000052					gencrf	ma,'m
    165	000060					gencrf	mac,'m
    166	000066					gencrf	p,'p
    167	000074					gencrf	pe,'p
    168	000102					gencrf	per,'p
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 9-4
output file initialization

    169	000110					gencrf	pst,'p
    170	000116					gencrf	c,'c
    171	000124					gencrf	cs,'c
    172	000132					gencrf	cse,'c
    173	000140					gencrf	sec,'c
    174	000146					gencrf	pse,'c
    175	000154					gencrf	e,'e
    176	000162					gencrf	er,'e
    177	000170					gencrf	err,'e
    178					
    179	000176					xitsec
    180					
    181					.endc
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 10
pass initialization

      1						.sbttl	pass initialization
      2					
      3	001336				inip1:			;init for pass 1
      4	001336	012700	000004			mov	#lstchn,r0
      5	001342					call	openo
      6	001346					call	srchi		;init the symbol table & rolls
      7	001352	000407				br	inip2f		;set source for pass
      8					
      9	001354				inip2:				;init for pass 2
     10	001354	005267	000000G			inc	pass
     11	001360	005767	000004'			tst	crfpnd
     12	001364	001402				beq	inip2f
     13	001366					call	crfset
     14	001372				inip2f:	call	setlc
     15						.globl	mx.2 , mdepth
     16						.globl	mac.er
     17	001376	005067	000000G			clr	mx.2
     18	001402	005067	000000G			clr	mdepth
     19	001406					call	seted
     20	001412	016767	000004'	000006'	inip0z:	mov	iargv,argv	;init count & pointer to args.
     21	001420	016767	000002'	000000'		mov	iargc,argc
     22	001426	005367	000000'			dec	argc
     23	001432	062767	000002	000006'		add	#2,argv
     24	001440					return
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 11
end of pass routines

      1						.sbttl	end of pass routines
      2					
      3	001442				finp1:				;finish of pass
      4	001442	012700	000002			mov	#srcchn,r0
      5	001446					call	zclose
      6	001452					return
      7					
      8					
      9					
     10	001454				openo:				;open output file
     11	001454					call	savreg
     12	001460	010002				mov	r0,r2		;copy r0 (chn. #)
     13	001462	020027	000004			cmp	r0,#lstchn	;is it list channel?
     14	001466	001011				bne	1$		;no
     15	001470	005767	000002'			tst	lttflg		; <<< REEDS june 1981
     16	001474	001403				beq	100$		; <<<
     17	001476	012700	000001			mov	#1,r0		; <<< use standard output if -lt flag in use
     18	001502	000437				br	7$		; <<<
     19	001504				100$:
     20	001504	005767	000000'			tst	lstflg		;yes, is listing enabled (-ls) ?
     21	001510	001441				beq	9$		;no, ignore
     22	001512	020027	000006		1$:	cmp	r0,#objchn	;is this object channel?
     23	001516	001003				bne	11$		;no
     24	001520	005767	000006'			tst	no.flg		;were we told to withhold obj. o/p ?
     25	001524	001033				bne	9$		;yes, ignore
     26	001526				11$:	call	src.ap		;set up name in linbuf
     27	001532	012767	000000G	000320'		mov	#linbuf,$crtnm	;  and pointer to name
     28	001540				2$:	$indir	
     29	001542	000316'				$crtsy
     30	001544	103016				bcc	7$		;ok
     31	001546	012701	000000G			mov	#linbuf,r1	;no good, complain
     32	001552	105721			3$:	tstb	(r1)+		;find end of filename
     33	001554	001376				bne	3$
     34	001556	005301				dec	r1		;back up over null
     35	001560	012700	000153'			mov	#ncmsg,r0	;append rest of msg.
     36	001564	112021			4$:	movb	(r0)+,(r1)+
     37	001566	001376				bne	4$
     38	001570					putkb	#linbuf
     39	001600					return
     40					
     41	001602	010062	000124'		7$:	mov	r0,chntbl(r2)	;store file handle
     42	001606	010200				mov	r2,r0		;restore r0 with chn. #
     43	001610					call	zopen
     44	001614				9$:	return
     45	001616				src.fp:
     46	001616	016701	000026'			mov	srcnam,r1	;transfer file name from src prefix
     47	001622	005767	000030'			tst	esrcnam
     48	001626	001402				beq 1$
     49	001630	016701	000030'			mov	esrcnam,r1
     50	001634				1$:
     51	001634	012700	000000G			mov	#linbuf,r0	;and store in linbuf
     52	001640	005046			nam.fp:	clr	-(sp)		;clear "." flag
     53	001642	112120			2$:	movb	(r1)+,(r0)+	;transfer a byte
     54	001644	001414				beq	4$		;move on if done
     55	001646	126027	177777	000056		cmpb	-1(r0),#'.	;not null, was it a "." ?
     56	001654	001406				beq	3$		;yes, set flag and cont.
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 11-2
end of pass routines

     57	001656	126027	177777	000057		cmpb	-1(r0),#'/	;no, was it / ?
     58	001664	001366				bne	2$		;no, continue
     59	001666	005016				clr	(sp)		;yes, clear flag
     60	001670	000764				br	2$		;continue
     61	001672	010016			3$:	mov	r0,(sp)		;flag with adr. past period.
     62	001674	000762				br	2$
     63	001676	010001			4$:	mov	r0,r1		;copy adr. past terminating null
     64	001700	012600				mov	(sp)+,r0	;restore period flag (adr.)
     65	001702	001001				bne	5$		;if set, move on
     66	001704	010100				mov	r1,r0		;use this adr.
     67	001706	005300			5$:	dec	r0		;back up pointer to null or period.
     68	001710					return
     69					
     70	001712				nam.ap:	call	nam.fp		;move to period
     71	001716	000402				br	ap.ext
     72					
     73	001720				src.ap:	call	src.fp		;find period.
     74									; and plop appropriate ext. in
     75					
     76	001724	105720			ap.ext:	tstb	(r0)+		;period here?
     77	001726	001003				bne	1$		;yes, assuming non-null is a period
     78	001730	112760	000056	177777		movb	#'.,-1(r0)	;no, put one in
     79	001736	016201	000222'		1$:	mov	exttbl(r2),r1	;get pointer to ext.
     80	001742	112120			2$:	movb	(r1)+,(r0)+	;store the ext. at end of name
     81	001744	001376				bne	2$
     82	001746				7$:	return
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 12
end of program cleanup

      1						.sbttl	end of program cleanup
      2					
      3	001750				setdn:				;clean up
      4	001750	012701	000115'			mov	#finmsg,r1	;set for final message
      5	001754	012702	000000G			mov	#linbuf,r2
      6	001760					call	movbyt		;move into linbuf
      7	001764	016701	000000G			mov	errcnt,r1
      8					; ***	beq	1$		;don't bother if successful
      9	001770					call	dnc		;print in decimal
     10	001774	105012				clrb	(r2)
     11					
     12	001776	005767	000014'			tst	mx.flg
     13	002002	001014				bne	1$
     14	002004	005767	000002'			tst	lttflg		; <<< REEDS june 81
     15	002010	001405				beq	100$		; <<< REEDS june 81
     16	002012					putlp	#linbuf		; <<< REEDS june 81
     17	002022	000404				br	1$		; <<< REEDS june 81
     18	002024				100$:	putkbl	#linbuf		;list to kb & lp
     19					
     20	002034				1$:	return
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 13
end of program cleanup

      1	002036				serror:				;"s" error
      2	002036					call	putkb
      3	002042					call	mac.er			;maybe caused by macro explosion
      4	002046	012700	000001			mov	#1,r0
      5	002052					$exit
      6					
      7					; symovf:	serror	217,<symbol table overflow>
      8	002054				symovf:
      9	002054						serror	#symerr
     10	002064				macovf:		call	mac.er
     11	002070						serror	#macerr		; no return: exit sys call
     12					
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 14
end of program cleanup

      1	002100				getic:				;get input character
      2	002100	005370	000236'			dec	@cnttbl(r0)	;any chars left in line?
      3	002104	002406				blt	4$		;  no
      4	002106	005005				clr	r5
      5	002110	157005	000110'			bisb	@chrtbl(r0),r5	;yes, fetch next
      6	002114	005260	000110'			inc	chrtbl(r0)	;bump count
      7	002120					return
      8					
      9	002122	005760	000074'		4$:	tst	ioftbl(r0)	;file initted?
     10	002126	001417				beq	5$		;no, do so
     11	002130					call	zread		;read and wait
     12	002134	016005	000074'			mov	ioftbl(r0),r5	;get condition flags
     13	002140	042705	177747			bic	#^c<io.eof!io.err>,r5	;clear extraneous
     14	002144	001755				beq	getic		;branch if nothing special
     15	002146	032705	000010			bit	#io.eof,r5
     16	002152	001416				beq	9$		;  error, exit
     17	002154	012705	000040			mov	#io.eoi,r5	;in case not source
     18	002160	020027	000002			cmp	r0,#srcchn	;is it src.?
     19	002164	001011				bne	9$		;no
     20	002166				5$:	call	getsrc		;open next source file
     21	002172	012705	000040			mov	#io.eoi,r5	;in case unsuccessful
     22	002176	005767	000000C			tst	ioftbl+srcchn	;winner?
     23	002202	001402				beq	9$		;no
     24	002204	012705	000010			mov	#io.eof,r5	;set end-of-file
     25	002210	052705	100000		9$:	bis	#100000,r5	;set flag bit
     26	002214					return
     27					
     28						.globl	err.by		; array holds file name for error printer
     29	002216				getsrc:
     30	002216	105067	000000G			clrb	err.by
     31	002222	005067	000006'			clr	fileln		; start unix line numbers over
     32	002226	012700	000002			mov	#srcchn,r0	;use source chn.
     33	002232	010046				mov	r0,-(sp)
     34	002234	010146				mov	r1,-(sp)
     35	002236	010246				mov	r2,-(sp)
     36	002240	010002				mov	r0,r2		;copy chn. #
     37	002242					call	zclose		;close current source input
     38	002246	005367	000000'		1$:	dec	argc		;any left?
     39	002252	002520				blt	7$		;no
     40	002254	016700	000006'			mov	argv,r0		;point to next arg.
     41	002260	012001				mov	(r0)+,r1
     42	002262	010067	000006'			mov	r0,argv
     43	002266	005701				tst	r1		;ignore null pointer
     44	002270	001766				beq	1$
     45	002272	121127	000055			cmpb	(r1),#'-	;switch?
     46	002276	001763				beq	1$		;yes, ignore
     47	002300	016700	000000C			mov	buftbl+srcchn,r0	;point to dest. of name
     48	002304	010067	000326'			mov	r0,$opnnm	;set up pointer to name
     49	002310					call	nam.fp		;transfer name & find period.
     50	002314	005046				clr	-(sp)		;clear retry indicator
     51	002316	105710				tstb	(r0)		;was ext. specified?
     52	002320	001003				bne	13$		;yes, try it as is
     53	002322	010016				mov	r0,(sp)		;no, save adr. of null
     54	002324					call	ap.ext		;append default ext.
     55	002330	005067	000330'		13$:	clr	$opnmd		;set up mode as "read"
     56	002334					$indir			;indirect to dirty area
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 14-2
end of program cleanup

     57	002336	000324'				$opnsy
     58	002340	103030				bcc	3$		;if ok, move on
     59	002342	005716				tst	(sp)		;prepared to retry w/o ext.?
     60	002344	001404				beq	14$		;no, not found!
     61	002346	105076	000000			clrb	@(sp)		;yes, remove ext.
     62	002352	005016				clr	(sp)		;just one retry
     63	002354	000765				br	13$
     64	002356	012701	000000G		14$:	mov	#linbuf,r1	;store msg. in buffer
     65	002362	016700	000326'			mov	$opnnm,r0
     66	002366	112021			15$:	movb	(r0)+,(r1)+
     67	002370	001376				bne	15$		;store file name
     68	002372	005301				dec	r1		;back up pointer
     69	002374	012700	000140'			mov	#nfmsg,r0
     70	002400	112021			2$:	movb	(r0)+,(r1)+
     71	002402	001376				bne	2$
     72	002404					putkb	#linbuf
     73	002414	012700	000001			mov	#1,r0		;indicate error status
     74	002420					$exit			;and die
     75					
     76	002422	010067	000000C		3$:	mov	r0,chntbl+srcchn	;store file handle.
     77	002426	052767	000002	000000C		bis	#io.opn,ioftbl+srcchn	;denote open
     78	002434	005077	000000C			clr	@cnttbl+srcchn	;beware of dos "feature"
     79	002440	005726				tst	(sp)+		;flush retry indicator
     80	002442	016701	000326'			mov	$opnnm,r1
     81	002446	012702	000000G			mov	#err.by,r2
     82	002452					call	movbyt
     83	002456	105012				clrb	(r2)
     84	002460	016700	000000'		4$:	mov	argc,r0		;get arg. count
     85	002464	016701	000006'			mov	argv,r1		;and vector ptr.
     86	002470	005300			5$:	dec	r0		;any left?
     87	002472	002410				blt	7$		;no
     88	002474	123127	000055			cmpb	@(r1)+,#'-	;yes, but is it switch?
     89	002500	001773				beq	5$		;yes
     90	002502	005005				clr	r5		;no, note another file to go
     91	002504				6$:
     92	002504	012602			10$:	mov	(sp)+,r2
     93	002506	012601				mov	(sp)+,r1
     94	002510	012600				mov	(sp)+,r0
     95	002512					return
     96	002514	010605			7$:	mov	sp,r5		;note no more files
     97	002516	000772				br	6$
     98					
     99	002520	027060	000236'	000174'	putoc:	cmp	@cnttbl(r0),ioltbl(r0)	;any room left?
    100	002526	002007				bge	5$		;no
    101	002530	110170	000110'			movb	r1,@chrtbl(r0)	;yes
    102	002534	005260	000110'			inc	chrtbl(r0)
    103	002540	005270	000236'			inc	@cnttbl(r0)
    104	002544				4$:	return
    105	002546	032760	000002	000074'	5$:	bit	#io.opn,ioftbl(r0)	;open?
    106	002554	001773				beq	4$		;no, return
    107	002556					call	zwrite		;yes, dump buffer
    108	002562	000756				br	putoc		;try again
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 15
system macro handlers

      1						.sbttl	system macro handlers
      2					
      3						.if ndf	xsml
      4					
      5	002564				inisml:				;init sml file
      6	002564	012700	000010			mov	#smlchn,r0	;open 'er up
      7	002570	005760	000074'			tst	ioftbl(r0)
      8	002574	001031				bne	finsml
      9	002576					call	zopen
     10	002602	016701	000032'			mov	smlnam,r1	;get pointer to name prefix
     11	002606	012700	000034'			mov	#smlfil,r0	;point to destination of complete string
     12	002612	010067	000326'			mov	r0,$opnnm	;make copy for system call
     13	002616	012702	000010			mov	#smlchn,r2	;set up channel #
     14	002622					call	nam.fp		;transfer name to smlfil & find period.
     15	002626	105710				tstb	(r0)		;ext. specified?
     16	002630	001002				bne	1$		;yes
     17	002632					call	ap.ext		;no, supply default
     18	002636	005067	000330'		1$:	clr	$opnmd		;for reading
     19	002642					$indir	
     20	002644	000324'				$opnsy
     21	002646	103404				bcs	finsml
     22	002650	010067	000000C			mov	r0,chntbl+smlchn
     23	002654	010600				mov	sp,r0		;flag good (non-zero) return
     24	002656					return
     25					
     26	002660				finsml:				;close out sml file
     27	002660	012700	000010			mov	#smlchn,r0	;  and release it
     28	002664					call	zrlse
     29	002670	005000				clr	r0		;signal that we're through
     30	002672					return
     31					
     32					
     33	002674					.data
     34					.globl	veritas
     35	000000				veritas:	.blkw				; harvard retrocomat in effect
     36					;
     37					
     38	000002					entsec	impure
     39					
     40	000032				smlnam:	.blkw	1
     41	000034				smlfil:	.blkw	20		;macro filename (.sml) goes here
     42					
     43	000074					xitsec
     44					
     45						.endc
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 16
init/read/write routines

      1						.sbttl	init/read/write routines
      2					
      3						.globl	zread,	zwrite
      4					
      5	002674				zinit:				;init a device
      6	002674	052760	000001	000074'		bis	#io.ini,ioftbl(r0)	;flag as in use
      7	002702					return
      8					
      9	002704	052760	000002	000074'	zopen:	bis	#io.opn,ioftbl(r0)
     10	002712	016060	000252'	000110'		mov	buftbl(r0),chrtbl(r0)
     11	002720	005070	000236'			clr	@cnttbl(r0)
     12	002724					return
     13					
     14	002726				zread:				;read a line
     15	002726	010046				mov	r0,-(sp)
     16	002730	010146				mov	r1,-(sp)
     17	002732	010001				mov	r0,r1
     18	002734	016067	000252'	000312'		mov	buftbl(r0),$rdbfp
     19	002742	016067	000174'	000314'		mov	ioltbl(r0),$rdcnt
     20	002750	016060	000252'	000110'		mov	buftbl(r0),chrtbl(r0)
     21	002756	016000	000124'			mov	chntbl(r0),r0	;get file handle
     22	002762					$indir	
     23	002764	000310'				$rdsys
     24	002766	103004				bcc	1$		;ok
     25	002770	052761	000020	000074'		bis	#io.err,ioftbl(r1)
     26	002776	000406				br	8$
     27	003000	010071	000236'		1$:	mov	r0,@cnttbl(r1)	;store count of chars. read
     28	003004	001003				bne	8$
     29	003006	052761	000010	000074'		bis	#io.eof,ioftbl(r1)	;eof if none
     30	003014				8$:
     31	003014	012601				mov	(sp)+,r1
     32	003016	012600				mov	(sp)+,r0
     33	003020					return
     34	003022				zwrite:				;write a line
     35	003022	010046				mov	r0,-(sp)
     36	003024	010146				mov	r1,-(sp)
     37	003026	010246				mov	r2,-(sp)
     38	003030	010002				mov	r0,r2
     39	003032	032760	000002	000074'		bit	#io.opn,ioftbl(r0)	;only if open
     40	003040	001460				beq	9$
     41	003042	016001	000252'			mov	buftbl(r0),r1
     42	003046	017000	000236'			mov	@cnttbl(r0),r0
     43	003052	001446				beq	4$		;and non-zero count
     44	003054	005762	000266'			tst	bintbl(r2)	;binary?
     45	003060	003427				ble	59$		;  no
     46	003062	010246				mov	r2,-(sp)
     47	003064	062700	000004			add	#4,r0
     48	003070	010041				mov	r0,-(r1)
     49	003072	012741	000001			mov	#1,-(r1)
     50	003076	010046				mov	r0,-(sp)
     51	003100	060100				add	r1,r0
     52	003102	005046				clr	-(sp)
     53	003104	112102			51$:	movb	(r1)+,r2
     54	003106	060216				add	r2,(sp)
     55	003110	020100				cmp	r1,r0
     56	003112	103774				blo	51$
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 16-2
init/read/write routines

     57	003114	005416				neg	(sp)
     58	003116	112611				movb	(sp)+,(r1)
     59	003120	105061	000001			clrb	1(r1)
     60	003124	012600				mov	(sp)+,r0
     61	003126	160001				sub	r0,r1
     62	003130	052700	000001			bis	#1,r0
     63	003134	005200				inc	r0
     64	003136	012602				mov	(sp)+,r2
     65	003140	010067	000306'		59$:	mov	r0,$wrcnt	;store byte count
     66	003144	010167	000304'			mov	r1,$wrbfp	;and buffer adr.
     67	003150	016200	000124'			mov	chntbl(r2),r0	;get file handle
     68	003154					$indir	
     69	003156	000302'				$wrsys
     70	003160	103003				bcc	4$
     71	003162	052762	000020	000074'		bis	#io.err,ioftbl(r2)	;error
     72	003170	005072	000236'		4$:	clr	@cnttbl(r2)	;clear count initially
     73	003174	016262	000252'	000110'		mov	buftbl(r2),chrtbl(r2)	;point to beg. of buffer
     74	003202	012602			9$:	mov	(sp)+,r2
     75	003204	012601				mov	(sp)+,r1
     76	003206	012600				mov	(sp)+,r0
     77	003210					return
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 17
init/read/write routines

      1	003212				zclose:				;close file
      2	003212	032760	000002	000074'		bit	#io.opn,ioftbl(r0)	;is file open?
      3	003220	001411				beq	1$		;no
      4	003222	010046				mov	r0,-(sp)	;yes, save r0
      5	003224	016000	000124'			mov	chntbl(r0),r0	;get file handle
      6	003230					$close			;close
      7	003232	012600				mov	(sp)+,r0
      8	003234	005060	000074'			clr	ioftbl(r0)
      9	003240	005070	000236'			clr	@cnttbl(r0)
     10	003244				1$:	return
     11					
     12	003246				zrlse:				;close and release file
     13	003246					call	zclose		;be sure it's closed
     14	003252	005060	000074'			clr	ioftbl(r0)	;clear device table
     15	003256					return
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 18
messages

      1						.sbttl	messages
      2					
      3	003260					entsec	imppas
      4	000000				pagnum:	.blkw			;page number
      5	000002				linnum:	.blkw	2		;line number
      6	000006				fileln::	.blkw	1		; true line number in file
      7	000010					entsec	mixed
      8					
      9					
     10						.if ndf	xtime
     11	000124	   060	   060	   055	dattim:	.ascii	/00-xxx-00 /
     12	000136	   060	   060	   072	datti1:	.ascii	/00:00/
     13	000143	   072	   060	   060	datti2:	.ascii	/:00/
     14						.even
     15						.endc
     16					
     17	000146					entsec	dpure
     18					
     19					;endp1m:	.asciz	/end of pass/
     20	000030	   155	   141	   143	macerr:	.asciz	/macro text overflow/
     21	000054	   163	   171	   155	symerr:	.asciz	/symbol table overflow/
     22	000102	   142	   141	   144	swcerr:	.asciz	/bad switch/
     23	000115	   145	   162	   162	finmsg:	.asciz	/errors detected:  /
     24					
     25	000140	   040	   156	   157	nfmsg:	.asciz	/ not found/
     26	000153	   040	   055	   040	ncmsg:	.asciz	/ - can't create/
     27					
     28						.even
     29					
     30	000174					entsec	mixed
     31	000146	000150'			vernam::	1$		; addr of default logo
     32	000150	   125	   103	   102	1$:	.asciz	/UCB m11 v1.2 /
     33	000166	   110	   141	   162	harvid:	.asciz	/Harvard m11 /
     34	000203	   104	   105	   103	decid:	.asciz	/DEC Macro-11 /
     35						.even
     36					
     37	000222					xitsec
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 19
i/o tables

      1						.sbttl	i/o tables
      2					
      3						.list	meb
      4									;i/o flags
      5		000001			io.ini=	000001			;initted
      6		000002			io.opn=	000002			;opened
      7		000004			io.tty=	000004			;device is tty
      8		000010			io.eof=	000010			;eof seen
      9		000020			io.err=	000020			;error encountered
     10		000040			io.eoi=	000040			;end of input
     11		100000			io.out=	100000			;output device
     12					
     13	003260					entsec	impure
     14	000074				ioftbl:	.blkw	maxchn/2	;i/o flag table
     15					
     16	000110					entsec	dpure
     17	000174				ioltbl:				;i/o length table
     18						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
     19						.list
     20						.word	zbuf'len
     21						.nlist
     22						.endm
     23	000174					genchn
	000174	000120				.word	cmolen
	000176	000204				.word	srclen
	000200	001000				.word	lstlen
	000202	000052				.word	objlen
	000204	000120				.word	smllen
	000206	001000				.word	crflen
     24					
     26					
     27						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
     28						.list
     29						.if nb zext
     30					zchan'ext:	.asclc	zext
     31						.endc
     32						.nlist
     33						.endm
     34					
     35	000210					genchn
	000210					setchn	cmo,	cmo,	cmo,	0,	,80.
						.if nb 
					cmoext:	.asclc	
						.endc
	000210					setchn	src,	src,	src,	0,	m11,	132.
						.if nb m11
	000210				srcext:	.asclc	m11
					
						.irpc x, ^%m11%
					
						.if ge ''x-101
							.if le ''x-132
								.byte ''x+40
							.iff
								.byte ''x
							.endc
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 19-2
i/o tables

						.iff
						.byte ''x
						.endc
					
						.endm
					
						.if ge 'm-101
							.if le 'm-132
								.byte 'm+40
							.iff
	000210	   155						.byte 'm
							.endc
						.iff
						.byte 'm
						.endc
					
					
						.if ge '1-101
							.if le '1-132
								.byte '1+40
							.iff
								.byte '1
							.endc
						.iff
	000211	   061				.byte '1
						.endc
					
					
						.if ge '1-101
							.if le '1-132
								.byte '1+40
							.iff
								.byte '1
							.endc
						.iff
	000212	   061				.byte '1
						.endc
					
					
	000213	   000				.byte	0
					
						.endc
	000214					setchn	lst,	lst,	lst,	,	lst,	512.
						.if nb lst
	000214				lstext:	.asclc	lst
					
						.irpc x, ^%lst%
					
						.if ge ''x-101
							.if le ''x-132
								.byte ''x+40
							.iff
								.byte ''x
							.endc
						.iff
						.byte ''x
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 19-3
i/o tables

						.endc
					
						.endm
					
						.if ge 'l-101
							.if le 'l-132
								.byte 'l+40
							.iff
	000214	   154						.byte 'l
							.endc
						.iff
						.byte 'l
						.endc
					
					
						.if ge 's-101
							.if le 's-132
								.byte 's+40
							.iff
	000215	   163						.byte 's
							.endc
						.iff
						.byte 's
						.endc
					
					
						.if ge 't-101
							.if le 't-132
								.byte 't+40
							.iff
	000216	   164						.byte 't
							.endc
						.iff
						.byte 't
						.endc
					
					
	000217	   000				.byte	0
					
						.endc
	000220					setchn	obj,	obj,	obj,	1,	obj,	42.
						.if nb obj
	000220				objext:	.asclc	obj
					
						.irpc x, ^%obj%
					
						.if ge ''x-101
							.if le ''x-132
								.byte ''x+40
							.iff
								.byte ''x
							.endc
						.iff
						.byte ''x
						.endc
					
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 19-4
i/o tables

						.endm
					
						.if ge 'o-101
							.if le 'o-132
								.byte 'o+40
							.iff
	000220	   157						.byte 'o
							.endc
						.iff
						.byte 'o
						.endc
					
					
						.if ge 'b-101
							.if le 'b-132
								.byte 'b+40
							.iff
	000221	   142						.byte 'b
							.endc
						.iff
						.byte 'b
						.endc
					
					
						.if ge 'j-101
							.if le 'j-132
								.byte 'j+40
							.iff
	000222	   152						.byte 'j
							.endc
						.iff
						.byte 'j
						.endc
					
					
	000223	   000				.byte	0
					
						.endc
						.if ndf	xsml
	000224					setchn	sml,	sml,	sml,	0,	sml,	80.
						.if nb sml
	000224				smlext:	.asclc	sml
					
						.irpc x, ^%sml%
					
						.if ge ''x-101
							.if le ''x-132
								.byte ''x+40
							.iff
								.byte ''x
							.endc
						.iff
						.byte ''x
						.endc
					
						.endm
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 19-5
i/o tables

					
						.if ge 's-101
							.if le 's-132
								.byte 's+40
							.iff
	000224	   163						.byte 's
							.endc
						.iff
						.byte 's
						.endc
					
					
						.if ge 'm-101
							.if le 'm-132
								.byte 'm+40
							.iff
	000225	   155						.byte 'm
							.endc
						.iff
						.byte 'm
						.endc
					
					
						.if ge 'l-101
							.if le 'l-132
								.byte 'l+40
							.iff
	000226	   154						.byte 'l
							.endc
						.iff
						.byte 'l
						.endc
					
					
	000227	   000				.byte	0
					
						.endc
						.endc
						.if ndf xcref
	000230					setchn	crf,	crf,	crf,	,	xrf,	512.
						.if nb xrf
	000230				crfext:	.asclc	xrf
					
						.irpc x, ^%xrf%
					
						.if ge ''x-101
							.if le ''x-132
								.byte ''x+40
							.iff
								.byte ''x
							.endc
						.iff
						.byte ''x
						.endc
					
						.endm
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 19-6
i/o tables

					
						.if ge 'x-101
							.if le 'x-132
								.byte 'x+40
							.iff
	000230	   170						.byte 'x
							.endc
						.iff
						.byte 'x
						.endc
					
					
						.if ge 'r-101
							.if le 'r-132
								.byte 'r+40
							.iff
	000231	   162						.byte 'r
							.endc
						.iff
						.byte 'r
						.endc
					
					
						.if ge 'f-101
							.if le 'f-132
								.byte 'f+40
							.iff
	000232	   146						.byte 'f
							.endc
						.iff
						.byte 'f
						.endc
					
					
	000233	   000				.byte	0
					
						.endc
						.endc
     36					
     37						.even
     38	000234	000000			nulext:	.word	0
     39					
     40					
     41	000236					entsec	mixed
						.psect	mixed	con
     42	000222				exttbl:
     43						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
     44						.list
     45						.if nb zext
     46						.word	zchan'ext
     47						.iff
     48						.word	nulext
     49						.endc
     50						.nlist
     51						.endm
     52					
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 19-7
i/o tables

     53	000222					genchn
	000222					setchn	cmo,	cmo,	cmo,	0,	,80.
						.if nb 
						.word	cmoext
						.iff
	000222	000234'				.word	nulext
						.endc
	000224					setchn	src,	src,	src,	0,	m11,	132.
						.if nb m11
	000224	000210'				.word	srcext
						.iff
						.word	nulext
						.endc
	000226					setchn	lst,	lst,	lst,	,	lst,	512.
						.if nb lst
	000226	000214'				.word	lstext
						.iff
						.word	nulext
						.endc
	000230					setchn	obj,	obj,	obj,	1,	obj,	42.
						.if nb obj
	000230	000220'				.word	objext
						.iff
						.word	nulext
						.endc
						.if ndf	xsml
	000232					setchn	sml,	sml,	sml,	0,	sml,	80.
						.if nb sml
	000232	000224'				.word	smlext
						.iff
						.word	nulext
						.endc
						.endc
						.if ndf xcref
	000234					setchn	crf,	crf,	crf,	,	xrf,	512.
						.if nb xrf
	000234	000230'				.word	crfext
						.iff
						.word	nulext
						.endc
						.endc
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 20
i/o tables

      1	000236					entsec	mixed
						.psect	mixed	con
      2	000236				cnttbl:				;pointer to counts
      3						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
      4						.list
      5						.if nb ztype
      6						.word	zbuf'buf-2
      7						.iff
      8						.word	0
      9						.endc
     10						.nlist
     11						.endm
     12	000236					genchn
	000236					setchn	cmo,	cmo,	cmo,	0,	,80.
						.if nb 0
	000236	000000C				.word	cmobuf-2
						.iff
						.word	0
						.endc
	000240					setchn	src,	src,	src,	0,	m11,	132.
						.if nb 0
	000240	000000C				.word	srcbuf-2
						.iff
						.word	0
						.endc
	000242					setchn	lst,	lst,	lst,	,	lst,	512.
						.if nb 
						.word	lstbuf-2
						.iff
	000242	000000				.word	0
						.endc
	000244					setchn	obj,	obj,	obj,	1,	obj,	42.
						.if nb 1
	000244	000000C				.word	objbuf-2
						.iff
						.word	0
						.endc
						.if ndf	xsml
	000246					setchn	sml,	sml,	sml,	0,	sml,	80.
						.if nb 0
	000246	000000C				.word	smlbuf-2
						.iff
						.word	0
						.endc
						.endc
						.if ndf xcref
	000250					setchn	crf,	crf,	crf,	,	xrf,	512.
						.if nb 
						.word	crfbuf-2
						.iff
	000250	000000				.word	0
						.endc
						.endc
     13					
     14					
     15	000252				buftbl:				;pointers to buffers
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 20-2
i/o tables

     16						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
     17						.list
     18						.if nb ztype
     19						.word	zbuf'buf
     20						.iff
     21						.word	0
     22						.endc
     23						.nlist
     24						.endm
     25	000252					genchn
	000252					setchn	cmo,	cmo,	cmo,	0,	,80.
						.if nb 0
	000252	000146'				.word	cmobuf
						.iff
						.word	0
						.endc
	000254					setchn	src,	src,	src,	0,	m11,	132.
						.if nb 0
	000254	000300'				.word	srcbuf
						.iff
						.word	0
						.endc
	000256					setchn	lst,	lst,	lst,	,	lst,	512.
						.if nb 
						.word	lstbuf
						.iff
	000256	000000				.word	0
						.endc
	000260					setchn	obj,	obj,	obj,	1,	obj,	42.
						.if nb 1
	000260	000516'				.word	objbuf
						.iff
						.word	0
						.endc
						.if ndf	xsml
	000262					setchn	sml,	sml,	sml,	0,	sml,	80.
						.if nb 0
	000262	000602'				.word	smlbuf
						.iff
						.word	0
						.endc
						.endc
						.if ndf xcref
	000264					setchn	crf,	crf,	crf,	,	xrf,	512.
						.if nb 
						.word	crfbuf
						.iff
	000264	000000				.word	0
						.endc
						.endc
     26					
     27	000266					entsec	impure
						.psect	impure	con
     28	000110				chrtbl:				;char pointer table
     29						.blkw	maxchn/2
     30					
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 20-3
i/o tables

     31					
     32	000124				chntbl:			;channel <--> file handle table
     33						.blkw	maxchn/2
     34					
     35	000140					entsec	mixed
						.psect	mixed	con
     36					
     37	000266				bintbl:
     38						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
     39						.list
     40						.if nb ztype
     41						.word	ztype
     42						.iff
     43						.word	0
     44						.endc
     45						.nlist
     46						.endm
     47					
     48	000266					genchn
	000266					setchn	cmo,	cmo,	cmo,	0,	,80.
						.if nb 0
	000266	000000				.word	0
						.iff
						.word	0
						.endc
	000270					setchn	src,	src,	src,	0,	m11,	132.
						.if nb 0
	000270	000000				.word	0
						.iff
						.word	0
						.endc
	000272					setchn	lst,	lst,	lst,	,	lst,	512.
						.if nb 
						.word	
						.iff
	000272	000000				.word	0
						.endc
	000274					setchn	obj,	obj,	obj,	1,	obj,	42.
						.if nb 1
	000274	000001				.word	1
						.iff
						.word	0
						.endc
						.if ndf	xsml
	000276					setchn	sml,	sml,	sml,	0,	sml,	80.
						.if nb 0
	000276	000000				.word	0
						.iff
						.word	0
						.endc
						.endc
						.if ndf xcref
	000300					setchn	crf,	crf,	crf,	,	xrf,	512.
						.if nb 
						.word	
						.iff
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 20-4
i/o tables

	000300	000000				.word	0
						.endc
						.endc
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 21
i/o tables

      1						.macro	setchn	zchan,zlnk,zbuf,ztype,zext,zlen
      2						.if nb	<ztype>
      3						entsec	impure
      4						.list
      5					
      6						.blkw	3
      7					zbuf'buf:	.blkw	<zbuf'len+1>/2+2
      8						.nlist
      9						.endc
     10						.endm
     11					
     12	000302					genchn
	000302					setchn	cmo,	cmo,	cmo,	0,	,80.
						.if nb	<0>
	000302					entsec	impure
						.psect	impure	con
					
						.blkw	3
	000146				cmobuf:	.blkw	<cmolen+1>/2+2
						.endc
	000272					setchn	src,	src,	src,	0,	m11,	132.
						.if nb	<0>
	000272					entsec	impure
						.psect	impure	con
					
						.blkw	3
	000300				srcbuf:	.blkw	<srclen+1>/2+2
						.endc
	000510					setchn	lst,	lst,	lst,	,	lst,	512.
						.if nb	<>
						entsec	impure
						.list
					
						.blkw	3
					lstbuf:	.blkw	<lstlen+1>/2+2
						.nlist
						.endc
	000510					setchn	obj,	obj,	obj,	1,	obj,	42.
						.if nb	<1>
	000510					entsec	impure
						.psect	impure	con
					
						.blkw	3
	000516				objbuf:	.blkw	<objlen+1>/2+2
						.endc
						.if ndf	xsml
	000574					setchn	sml,	sml,	sml,	0,	sml,	80.
						.if nb	<0>
	000574					entsec	impure
						.psect	impure	con
					
						.blkw	3
	000602				smlbuf:	.blkw	<smllen+1>/2+2
						.endc
						.endc
						.if ndf xcref
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 21-2
i/o tables

	000726					setchn	crf,	crf,	crf,	,	xrf,	512.
						.if nb	<>
						entsec	impure
						.list
					
						.blkw	3
					crfbuf:	.blkw	<crflen+1>/2+2
						.nlist
						.endc
						.endc
     13					
     14					
     15	000726					entsec	mixed
						.psect	mixed	con
     16	000302				$wrsys:	$write
	000302	104404				104400 +	4
     17	000304				$wrbfp:	.blkw	1
     18	000306				$wrcnt:	.blkw	1
     19					
     20	000310				$rdsys:	$read
	000310	104403				104400 +	3
     21	000312				$rdbfp:	.blkw	1
     22	000314				$rdcnt:	.blkw	1
     23					
     24	000316				$crtsy:	$creat
	000316	104410				104400 +	8.
     25	000320				$crtnm:	.blkw	1
     26	000322	000644			$crtmd:	.word	0644
     27					
     28					
     29	000324				$opnsy:	$open
	000324	104405				104400 +	5
     30	000326				$opnnm:	.blkw	1
     31	000330				$opnmd:	.blkw	1
     32					
     33	000332				$brksy:	$break
	000332	104421				104400 +	17.
     34	000334				$brkad:	.blkw	1
     35					
     36	000336					xitsec
	000336					entsec	.text
						.psect	.text	con
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 22
cross reference handlers

      1						.sbttl	cross reference handlers
      2					
      3						.if ndf	xcref
      4					
      5	003260				crfset:				;cref switch processor
      6	003260	005767	000000G			tst	pass
      7	003264	001424				beq	9$
      8	003266	012700	000012			mov	#crfchn,r0
      9	003272					call	openo
	003272	004767	176156			jsr	pc,openo
     10	003276	032767	000002	000000C		bit	#io.opn,ioftbl+crfchn	;successful?
     11	003304	001414				beq	9$		;no
     12	003306					strcpy	#linbuf,#crefil
	003306	010046				mov	r0,-(sp)
	003310	010146				mov	r1,-(sp)
	003312	012700	000000G			mov	#linbuf,r0
	003316	012701	000014'			mov	#crefil,r1
	003322				64$:
	003322	112021				movb	(r0)+,(r1)+
	003324	001376				bne	64$
					
	003326	012601				mov	(sp)+,r1
	003330	012600				mov	(sp)+,r0
     13	003332	010667	000740'			mov	sp,crfpnt	;yes, flag non-null
     14	003336				9$:	return
	003336	000207				rts	pc
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 23
cross reference handlers

      1						.globl	crfdef,	crfref,	rolndx,	r50unp
      2					
      3						.nlist	meb
      4						.if df	xcref
      5					crfref:	crfdef:	return
      6						.iff
      7					
      8						.globl	symbol
      9					
     10	003340	005267	000002'		crfdef:	inc	crfdfl		;cref definition
     11	003344	005767	000740'		crfref:	tst	crfpnt		;any cref output at this time?
     12	003350					jeq	9$		;  no
	003350	001002				bne	64$
	003352	000167	000272			jmp	9$
	003356				64$:
     13	003356	005767	000000G			tst	pass
     14	003362					jeq	9$		; experiment
	003362	001002				bne	65$
	003364	000167	000260			jmp	9$
	003370				65$:
     15	003370	005767	000000'			tst	pagnum		;started yet?
     16	003374					jeq	9$		;  no, forget it
	003374	001002				bne	66$
	003376	000167	000246			jmp	9$
	003402				66$:
     17	003402	032767	000000G	000000G		bit	#ed.crf,edmask	; cref might be turned off for a while
     18	003410					jeq	9$
	003410	001002				bne	67$
	003412	000167	000232			jmp	9$
	003416				67$:
     19	003416					call	savreg
	003416	004767	000000G			jsr	pc,savreg
     20	003422	026767	000746'	000000'	1$:	cmp	crfpag,pagnum	;new page?
     21	003430	103011				bhis	2$		;  no
     22	003432	012701	000002			mov	#cr.pag,r1	;yes, send flag
     23	003436					call	putxrf
	003436	004767	000312			jsr	pc,putxrf
     24	003442	005267	000746'			inc	crfpag
     25	003446	005067	000750'			clr	crflin
     26	003452	000763				br	1$
     27					
     28	003454	026767	000750'	000002'	2$:	cmp	crflin,linnum	;new line number?
     29	003462	103007				bhis	3$		;  no
     30	003464	012701	000003			mov	#cr.lin,r1
     31	003470					call	putxrf
	003470	004767	000260			jsr	pc,putxrf
     32	003474	005267	000750'			inc	crflin
     33	003500	000765				br	2$
     34					
     35	003502	005767	000000G		3$:	tst	symbol		;ignore null symbols
     36	003506					jeq	8$
	003506	001002				bne	68$
	003510	000167	000134			jmp	8$
	003514				68$:
     37	003514	012701	000236'			mov	#crftyp,r1
     38	003520				4$:	
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 23-2
cross reference handlers

     39	003520	126721	000000G			cmpb	rolndx,(r1)+	;map roll number to cref type
     40	003524	001375				bne	4$
     41	003526	162701	000000C			sub	#crftyp+1-cr.sym,r1
     42	003532					call	tstreg
	003532	004767	000120			jsr	pc,tstreg
     43	003536	005767	000742'			tst	xxxreg
     44	003542	001402				beq	44$
     45	003544	112701	000025			movb	#25,r1
     46	003550				44$:
     47	003550	005067	000742'			clr	xxxreg
     48	003554					call	putxrf
	003554	004767	000174			jsr	pc,putxrf
     49	003560	012702	000726'			mov	#crfsym,r2	;point to where symbol gets unpacked to
     50	003564					call	r50unp		;unpack the symbol
	003564	004767	000000G			jsr	pc,r50unp
     51	003570	012702	000726'			mov	#crfsym,r2	;point to beginning of unpacked symbol
     52	003574	112201			5$:	movb	(r2)+,r1	;get symbol char.
     53	003576	120127	000040			cmpb	r1,#space	;space is end
     54	003602	001405				beq	55$
     55	003604					call	putxrf		;non-space - output it
	003604	004767	000144			jsr	pc,putxrf
     56	003610	020227	000000C			cmp	r2,#crfsym+6	;max. of 6 chars.
     57	003614	103767				blo	5$
     58	003616	016701	000002'		55$:	mov	crfdfl,r1	;set "#" bit
     59	003622	105767	000000G			tstb	opclas
     60	003626	100002				bpl	6$		;branch if no "*"
     61	003630	052701	000002			bis	#2,r1
     62	003634	052701	000020		6$:	bis	#cr.sym,r1	;set terminator
     63	003640					call	putxrf		;send it
	003640	004767	000110			jsr	pc,putxrf
     64	003644					call	ckvtc		;see if vt needed
	003644	004767	000126			jsr	pc,ckvtc
     65	003650				8$:
     66	003650	005067	000002'		9$:	clr	crfdfl
     67	003654					return
	003654	000207				rts	pc
     68					
     69	003656				tstreg:
     70	003656	005067	000742'			clr	xxxreg
     71	003662					call	savreg
	003662	004767	000000G			jsr	pc,savreg
     72	003666	026727	000000G	000000G		cmp	rolndx,#symrol
     73	003674	001026				bne	1$
     74	003676	012704	000000G			mov	#regrol,r4
     75	003702	016403	000000C			mov	<^pl rolbas>(r4),r3
     76	003706	016401	000000C			mov	<^pl roltop>(r4),r1
     77	003712	116402	000000C			movb	<^pl rolsiz>(r4),r2
     78	003716				4$:
     79	003716	020301				cmp	r3,r1
     80	003720	002014				bge	1$
     81	003722	021367	000000G			cmp	(r3),symbol
     82	003726	001007				bne	2$
     83	003730	026367	000002	000000C		cmp	2(r3),symbol+2
     84	003736	001003				bne	2$
     85	003740	005267	000742'			inc	xxxreg
     86	003744	000402				br	1$
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 23-3
cross reference handlers

     87	003746				2$:
     88	003746	060203				add	r2,r3
     89	003750	000762				br	4$
     90	003752				1$:
     91	003752					return
	003752	000207				rts	pc
     92					
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 24
cross reference handlers

      1	003754	005367	000734'		putxrf:	dec	vtcnt
      2	003760	012700	000012			mov	#crfchn,r0	;reset channel #
      3	003764	005701				tst	r1
      4	003766					jne	putoc
	003766	001402				beq	64$
	003770	000167	176524			jmp	putoc
	003774				64$:
      5	003774					return
	003774	000207				rts	pc
      6						;jmp	putoc
      7					
      8		000144			vtini=100.
      9					
     10	003776	005767	000734'		ckvtc:	tst	vtcnt
     11	004002	100401				bmi	1$
     12	004004					return
	004004	000207				rts	pc
     13	004006	012767	000144	000734'	1$:	mov	#vtini,vtcnt
     14	004014	012701	000013			mov	#vt,r1
     15	004020	012700	000012			mov	#crfchn,r0	;reset channel #
     16	004024	005701				tst	r1
     17	004026					jne	putoc
	004026	001402				beq	64$
	004030	000167	176464			jmp	putoc
	004034				64$:
     18	004034					return
	004034	000207				rts	pc
     19						;jmp	putoc
     20	004036					entsec	impure
						.psect	impure	con
     21	000726				crfsym:	.blkw	3
     22	000734				vtcnt:	.blkw
     23	000736				crfflg:	.blkw
     24	000740				crfpnt:	.blkw
     25	000742				xxxreg::	.blkw
     26					
     27					
     28					
     29						.globl	opclas,	errrol
     30					
     31		000401			cr.ver=	001+<001*400>		;type 1, version #1
     32		000002			cr.pag=	002			;new page
     33		000003			cr.lin=	003			;new line
     34		000020			cr.sym=	020			;symbol
     35					
     36		000001			errrol=	1			;dummy roll
     37					
     38	000744					entsec	impure
						.psect	impure	con
     39	000744				crfver:	.blkw			;version flag
     40	000746				crfpag:	.blkw
     41	000750				crflin:	.blkw
     42					
     43	000752					entsec	implin
						.psect	implin	con
     44	000002				crfdfl:	.blkw			; "#" and "*" flags
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 24-2
cross reference handlers

     45					
     46	000004					entsec	dpure
						.psect	dpure	con
     47	000236				crftyp:
     48						.irp	x,<sym,mac,pst,sec,err,reg>
     49						.iif ndf x'rol, .globl  x'rol
     50						.byte	x'rol
     51						.endm
						.iif ndf symrol, .globl  symrol
	000236	   000G				.byte	symrol
						.iif ndf macrol, .globl  macrol
	000237	   000G				.byte	macrol
						.iif ndf pstrol, .globl  pstrol
	000240	   000G				.byte	pstrol
						.iif ndf secrol, .globl  secrol
	000241	   000G				.byte	secrol
						.iif ndf errrol, .globl  errrol
	000242	   001				.byte	errrol
						.iif ndf regrol, .globl  regrol
	000243	   000G				.byte	regrol
     52						.even
     53					
     54	000244				crfrun:	.asclc	/usr/ucb/bin/macxrf
     55						.even
     56	000270					xitsec
	000270					entsec	.text
						.psect	.text	con
     57					
     58						.endc
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 25
cross reference handlers

      1					.if ndf xtime
      2					
      3						.globl	dnc, movbyt
      4					
      5					;called with:
      6					;	r0 - high-order word of 32-bit # seconds past 1jan70 gmt
      7					;	r1 - low-order word
      8					;	r2 - destination adr. of ascii (19 bytes)
      9					
     10		061160				gmtsec = $timdf*3600.
     11					
     12					
     13	004036				cvtim::
     14	004036	162701	061160			sub	#gmtsec,r1	;adjust for deviation
     15	004042	005600				sbc	r0
     16	004044	071027	070200			div	#8.*3600.,r0	;form # 8-hour units
     17	004050	010146				mov	r1,-(sp)	;save remaining hours, minutes & seconds
     18	004052	010001				mov	r0,r1		;now form days
     19	004054	005000				clr	r0
     20	004056	071027	000003			div	#3,r0
     21	004062	072127	000003			ash	#3,r1		;and hours
     22	004066	010146				mov	r1,-(sp)	;saving hours
     23	004070	112767	177777	000754'		movb	#-1.,nmonth	;begin month ticker
     24	004076	012767	000105	000752'		mov	#69.,nyear	;epoch starts in 1970
     25	004104	105267	000752'		1$:	incb	nyear
     26	004110	004767	000220			jsr	pc,yearl	;returns length of that year in r1
     27	004114	160100				sub	r1,r0
     28	004116	100372				bpl	1$
     29	004120	060100				add	r1,r0
     30	004122	012767	000034	000340'		mov	#28.,$feb
     31	004130	020127	000556			cmp	r1,#366.	;is this leap year?
     32	004134	001002				bne	21$
     33	004136	005267	000340'			inc	$feb		;yes
     34	004142	012701	000336'		21$:	mov	#montab,r1
     35	004146	105267	000754'		4$:	incb	nmonth
     36	004152	162100				sub	(r1)+,r0
     37	004154	100374				bpl	4$
     38	004156	064100				add	-(r1),r0
     39	004160	005200				inc	r0		;form day of month
     40	004162	010001				mov	r0,r1		;put # days into r1 for conversion
     41	004164					call	dnc
	004164	004767	000000G			jsr	pc,dnc
     42	004170	112722	000055			movb	#'-,(r2)+	;store dash
     43	004174	116701	000754'			movb	nmonth,r1
     44	004200	006301				asl	r1		;form offset into asciz table
     45	004202	006301				asl	r1
     46	004204	062701	000270'			add	#mo.tab,r1	;form adr. of string
     47	004210					call	movbyt
	004210	004767	000000G			jsr	pc,movbyt
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 26
cross reference handlers

      1	004214	112722	000055			movb	#'-,(r2)+
      2	004220	016701	000752'			mov	nyear,r1	;print out year modulo 100
      3	004224					call	dnc
	004224	004767	000000G			jsr	pc,dnc
      4	004230	112722	000040			movb	#40,(r2)+
      5	004234	012600				mov	(sp)+,r0	;get partial hours
      6	004236	012601				mov	(sp)+,r1	;get initial remainder
      7	004240	010046				mov	r0,-(sp)	;save
      8	004242	005000				clr	r0		;form hours
      9	004244	071027	007020			div	#3600.,r0
     10	004250	062600				add	(sp)+,r0
     11	004252	010146				mov	r1,-(sp)	;save # seconds
     12	004254	010001				mov	r0,r1		;set up for conversion
     13	004256	020127	000012			cmp	r1,#10.
     14	004262	002002				bge	6$
     15	004264	112722	000060			movb	#'0,(r2)+
     16	004270				6$:	call	dnc
	004270	004767	000000G			jsr	pc,dnc
     17	004274	112722	000072			movb	#':,(r2)+
     18	004300	012601				mov	(sp)+,r1	;restore # seconds
     19	004302	005000				clr	r0
     20	004304	071027	000074			div	#60.,r0		;form # minutes
     21	004310	010001				mov	r0,r1
     22	004312	020127	000012			cmp	r1,#10.
     23	004316	002002				bge	7$
     24	004320	112722	000060			movb	#'0,(r2)+
     25	004324				7$:	call	dnc
	004324	004767	000000G			jsr	pc,dnc
     26	004330	105022				clrb	(r2)+
     27	004332	000207				rts	pc
     28	004334	012701	000555		yearl:	mov	#365.,r1
     29	004340	032767	000003	000752'		bit	#3,nyear
     30	004346	001001				bne	8$
     31	004350	005201				inc	r1
     32	004352	000207			8$:	rts	pc
     33					
     34					
     35					
     36	004354				entsec	dpure
						.psect	dpure	con
     37					
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 27
cross reference handlers

      1	000270	   152	   141	   156	mo.tab:	.asciz	/jan/
      2	000274	   146	   145	   142		.asciz	/feb/
      3	000300	   155	   141	   162		.asciz	/mar/
      4	000304	   141	   160	   162		.asciz	/apr/
      5	000310	   155	   141	   171		.asciz	/may/
      6	000314	   152	   165	   156		.asciz	/jun/
      7	000320	   152	   165	   154		.asciz	/jul/
      8	000324	   141	   165	   147		.asciz	/aug/
      9	000330	   163	   145	   160		.asciz	/sep/
     10	000334	   157	   143	   164		.asciz	/oct/
     11	000340	   156	   157	   166		.asciz	/nov/
     12	000344	   144	   145	   143		.asciz	/dec/
     13					
     14	000350				entsec	mixed
						.psect	mixed	con
     15					
     16	000336	000037			montab:	31.
     17	000340	000034			$feb:	28.
     18	000342	000037				31.
     19	000344	000036				30.
     20	000346	000037				31.
     21	000350	000036				30.
     22	000352	000037				31.
     23	000354	000037				31.
     24	000356	000036				30.
     25	000360	000037				31.
     26	000362	000036				30.
     27	000364	000037				31.
     28					
     29					
     30	000366				entsec	impure
						.psect	impure	con
     31					.even
     32	000752				nyear:	.blkw
     33	000754				nmonth:	.blkb
     34					.even
     35					
     36	000756				xitsec
	000756					entsec	.text
						.psect	.text	con
     37					
     38					.endc
     39					
     40		000000"				.end	start
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 28
symbol table

AATTRS= 000130   	ABSEXP= ****** g 	ADDBUF  001142r     002	
AP.EXT  001724r     002	ARGC    000000r     006	ARGV    000006r     006	
ASDFLT= ****** g 	BINTBL  000266rg    006	BKSIZ = ****** g 	
BPMB  = 000020   	BSSFLG= 000004   	BUFTBL  000252rg    006	
B.IDF = 000001   	CATTRS= 000170   	CHNTBL  000124rg    010	
CHRPNT= ****** g 	CHRTBL  000110rg    010	CKVTC   003776r     002	
CMOBUF  000146r     010	CMOCHN= 000000 g 	CMOLEN= 000120   	
CNTTBL  000236rg    006	CPOPJ = ****** g 	CR    = 000015   	
CRAP    000122r     006	CREFAV  000074r     006	CREFIL  000014r     006	
CRFCHN= 000012 g 	CRFDEF  003340rg    002	CRFDFL  000002r     012	
CRFEXT  000230r     005	CRFFLG  000736r     010	CRFLAG  000106r     006	
CRFLEN= 001000   	CRFLIN  000750r     010	CRFPAG  000746r     010	
CRFPND  000004r     010	CRFPNT  000740r     010	CRFREF  003344rg    002	
CRFROL= ****** g 	CRFRUN  000244r     005	CRFSET  003260r     002	
CRFSYM  000726r     010	CRFTYP  000236r     005	CRFVER  000744r     010	
CR.LIN= 000003 g 	CR.PAG= 000002 g 	CR.SET  001172r     002	
CR.SYM= 000020 g 	CR.VER= 000401   	CSDFLT= ****** g 	
CTTBL = ****** g 	CT.ALP= 000040   	CT.COM= 000001   	
CT.EOL= 000000   	CT.LC = 000100   	CT.NUM= 000020   	
CT.PC = 000271   	CT.PCX= 000010   	CT.SMC= 000200   	
CT.SP = 000004   	CT.TAB= 000002   	CVTIM   004036rg    002	
DATTIM  000124rg    006	DATTI1  000136r     006	DATTI2  000143r     006	
DA.SET  000754r     002	DC.SET  000762r     002	DEBUG = 000000 g 	
DECID   000203r     006	DEFFLG= 000010   	DE.SET  000706r     002	
DFGFLG= 000200   	DFLGTB= 000000 g 	DNC   = ****** g 	
DP.SET  000770r     002	DX.SET  000774r     002	EDDFLT= ****** g 	
EDMASK= ****** g 	ED.CRF= ****** g 	ED.GBL= ****** g 	
ENDP1 = ****** g 	ENDP2 = ****** g 	ERN45 = ****** g 	
ERN55 = ****** g 	ERRBTS= ****** g 	ERRCNT= ****** g 	
ERRREF= ****** g 	ERRROL= 000001 g 	ERR.A = ****** g 	
ERR.BY= ****** g 	ERR.XX= ****** g 	ESRCNA  000030r     010	
EXTTBL  000222rg    006	FF    = 000014   	FILELN  000006rg    011	
FIN   = ****** g 	FINMSG  000115r     005	FINP1   001442r     002	
FINSML  002660rg    002	FIXTIT= ****** g 	FT.ID = 000001   	
FT.UNX= 000001   	GETIC   002100rg    002	GETSRC  002216rg    002	
GLBFLG= 000100   	GMTSEC= 061160   	GSARG = ****** g 	
HARVID  000166r     006	HA.SET  000656r     002	HDRTTL= ****** g 	
IARGC   000002r     006	IARGV   000004rg    006	INICOR= ****** g 	
INIP0   000260r     002	INIP0Z  001412r     002	INIP1   001336r     002	
INIP2   001354r     002	INIP2F  001372r     002	INISML  002564rg    002	
INSFLG= 000002   	IOFTBL  000074rg    010	IOLTBL  000174rg    005	
IO.EOF= 000010 g 	IO.EOI= 000040 g 	IO.ERR= 000020 g 	
IO.INI= 000001 g 	IO.OPN= 000002 g 	IO.OUT= 100000   	
IO.TTY= 000004 g 	LBLFLG= 000002   	LF    = 000012   	
LINBUF= ****** g 	LINNUM  000002rg    011	LPARGS  000000r     005	
LPFLAG  000012r     010	LPRRUN  000006r     005	LP.SET  001114r     002	
LSTCHN= 000004 g 	LSTEXT  000214r     005	LSTFLG  000000rg    010	
LSTLEN= 001000   	LS.SET  001132r     002	LTTFLG  000002rg    010	
LT.SET  000614r     002	MACERR  000030r     005	MACOVF  002064rg    002	
MACROL= ****** g 	MAC.ER= ****** g 	MAXCHN= 000014   	
MDEPTH= ****** g 	MDFFLG= 000004   	MK.SYM= 000001   	
MK.UP   000476r     002	MONTAB  000336r     006	MOVBYT= ****** g 	
MO.TAB  000270r     005	MX.FLG  000014rg    010	MX.SET  000562r     002	
MX.2  = ****** g 	MY.FLG  000020rg    010	MY.SET  000600r     002	
M.IDF = 000007   	NAM.AP  001712r     002	NAM.FP  001640r     002	
NCMSG   000153r     005	NFMSG   000140r     005	NMONTH  000754r     010	
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 28-2
symbol table

NO.FLG  000006r     010	NO.SET  000532r     002	NS.SET  000642r     002	
NULEXT  000234r     005	NYEAR   000752r     010	OBJBUF  000516r     010	
OBJCHN= 000006 g 	OBJEXT  000220r     005	OBJLEN= 000052 g 	
OPCLAS= ****** g 	OPENC = ****** g 	OPENO   001454rg    002	
OUT$YM= ****** g 	OVRFLG= 000020   	PAGNUM  000000rg    011	
PASS  = ****** g 	PATTRS= 000050   	PDPV45= 000000 g 	
PDP10   000024rg    010	PROP1 = ****** g 	PROP2 = ****** g 	
PROSW = ****** g 	PSAROL= ****** g 	PSDFLT= ****** g 	
PSTROL= ****** g 	PUTKB = ****** g 	PUTKBL= ****** g 	
PUTLP = ****** g 	PUTOC   002520rg    002	PUTXRF  003754r     002	
REGFLG= 000001   	REGROL= ****** g 	RELFLG= 000040   	
ROLNDX= ****** g 	RSX11D= 000000 g 	R50UNP= ****** g 	
SAVREG= ****** g 	SCANW = ****** g 	SDEBUG= ****** g 	
SECROL= ****** g 	SERROR  002036r     002	SETDN   001750r     002	
SETED = ****** g 	SETLC = ****** g 	SETTEN  000606r     002	
SHRFLG= 000001   	SMLBUF  000602r     010	SMLCHN= 000010 g 	
SMLEXT  000224r     005	SMLFIL  000034rg    010	SMLLEN= 000120   	
SMLNAM  000032rg    010	SPACE = 000040   	SRCBUF  000300r     010	
SRCCHN= 000002 g 	SRCEXT  000210r     005	SRCHI = ****** g 	
SRCLEN= 000204   	SRCNAM  000026r     010	SRC.AP  001720r     002	
SRC.FP  001616r     002	START   000000rg    002	SWCERR  000102r     005	
SX.FLG  000022rg    010	SX.SET  000540r     002	SYMBOL= ****** g 	
SYMERR  000054r     005	SYMHP   000012rg    006	SYMLP   000010rg    006	
SYMOVF  002054rg    002	SYMROL= ****** g 	TAB   = 000011   	
TMPCNT= 000014   	TSTREG  003656r     002	UC.SET= ****** g 	
UM.SET= ****** g 	U.FLAG  000010rg    010	U.SET   000546r     002	
VERITA  000000rg    003	VERNAM  000146rg    006	VT    = 000013   	
VTCNT   000734r     010	VTINI = 000144   	X     = 000002   	
XCTPAS= ****** g 	XCTPRG= ****** g 	XMIT0 = ****** g 	
XS.SET  000650r     002	XXXREG  000742rg    010	XX.FLG  000016rg    010	
XX.SET  000554r     002	X40   = 000000 g 	YEARL   004334r     002	
ZCLOSE  003212r     002	ZINIT   002674r     002	ZOPEN   002704r     002	
ZREAD   002726rg    002	ZRLSE   003246r     002	ZWRITE  003022rg    002	
$BRKAD  000334rg    006	$BRKSY  000332rg    006	$CRTMD  000322r     006	
$CRTNM  000320r     006	$CRTSY  000316r     006	$FEB    000340r     006	
$OPNMD  000330r     006	$OPNNM  000326r     006	$OPNSY  000324r     006	
$RDBFP  000312r     006	$RDCNT  000314r     006	$RDSYS  000310r     006	
$TIMDF= 000007   	$WRBFP  000304rg    006	$WRCNT  000306rg    006	
$WRSYS  000302rg    006	$$EXIT  000244r     002	..Z   = ****** g 	
..ZBUF= ****** g 	
<. ABS.>	000000	   000	   130
<      >	000000	   001	   050
<.TEXT >	004354	   002	   153
<.DATA >	000002	   003	   150
<.BSS  >	000000	   004	   150
<DPURE >	000350	   005	   150
<MIXED >	000366	   006	   150
<ERRMES>	000000	   007	   150
<IMPURE>	000756	   010	   150
<IMPPAS>	000010	   011	   150
<IMPLIN>	000004	   012	   150
<SWTSEC>	000120	   013	   150
<CNDSEC>	000000	   014	   150
<CRFSEC>	000176	   015	   150
<EDTSEC>	000006	   016	   150
<LCTSEC>	000000	   017	   150
exec	-  assembler exec	UCB m11 v1.2 23-oct-82 16:02 page 28-3
symbol table

<PSASEC>	000000	   020	   150
<PSTSEC>	000000	   021	   150
<ROLBAS>	000000	   022	   150
<ROLSIZ>	000000	   023	   150
<ROLTOP>	000000	   024	   150
<XPCOR >	000000	   025	   150
errors detected:  0