	.NLIST
	TITLE	INIT,<MACRO-11 INIT>,03,02-JUN-80,<BRANT CHEIKES>
	.ENABL	LC

	;	INITIAL SYMBOL DEFINITION

CR=13.	; A CARRIAGE RETURN
LF=10.	; A LINE FEED
TAB=9.	; A TAB

	;	DEFINE THE MACROS
	;	UTILITY MACROS

	;
	;  MACRO CLEAR
	;
	;  CALLED WITH:
	;
	;  CLEAR  AREA, AREASIZE
	;
	;  FUNCTION:  ZEROS THE SPECIFIED AREA.  FOR EXAMPLE, THIS MACRO IS
	;             USED TO ZERO THE FIRQB AND XRB.
	;

	.MACRO	CLEAR	AREA, SIZE, ?CNT
	.ENABL	LSB
	MOV	#<AREA+SIZE>, R0
	MOV	#SIZE, R1
	ASR	R1
CNT:	CLR	@R0
	SUB	#2, R0
	SOB	R1, CNT
	CLR	AREA
	.ENDM	CLEAR

	;
	;  MACRO .CLR
	;
	;  CALLED WITH:
	;
	;  .CLR	BIT
	;
	;  FUNCTION:  CLEARS THE SPECIFIED BIT IN THE USER'S JOB KEY.
	;

	.MACRO	.CLR	BIT
	MOV	#BIT, XRB
	.CLEAR
	.ENDM	.CLR

	;
	;  MACRO SET
	;
	;  CALLED WITH:
	;
	;  SET	BIT
	;
	;  FUNCTION:  SETS THE SPECIFIED BIT IN THE USER'S JOB KEYWORD.
	;

	.MACRO	SET	BIT
	MOV	#BIT, XRB
	.SET
	.ENDM 	SET

	;
	;  MACRO SLEEP
	;
	;  CALLED WITH:
	;
	;  SLEEP  TIME
	;
	;  FUNCTION:  SUSPENDS THE JOB FOR 'TIME' NUMBER OF SECONDS.
	;

	.MACRO	SLEEP	TIME
	MOV	#TIME, XRB
	.SLEEP
	.ENDM	SLEEP

	;
	;  MACRO POS
	;
	;  CALLED WITH:
	;
	;  POS  CHNL
	;
	;  FUNCTION:  RETURNS THE HORIZONTAL POSITION OF THE PRINTHEAD ON
	;	      I/O CHANNEL CHNL.
	;
	;  RETURNS WIDTH OF DEVICE TO R0 AND POSITION IN LINE TO R1
	;  R0 AND R1 ARE CLOBBERED BY THIS ROUTINE.
	;

	.MACRO	POS	CHNL
	MOVB	#CHNL*2, XRB+XRCI
	.POSTN
	MOVB	XRB, R0
	DEC	R0
	MOVB	XRB+2, R1
	.ENDM	POS

	;
	;  MACRO INSTAL
	;
	;  CALLED WITH:
	;
	;  INSTAL  <NAME>
	;
	;  FUNCTION:  INSTALLS THE SPECIFIED NAME WITH THE MONITOR.
	;

	.MACRO	INSTAL	NAME
	CLEAR	XRB, XRBSIZ
	.ENABL	LSB
	BR	20$
10$:	.ASCII	/NAME/
	.EVEN
	.NCHR	LEN,<NAME>
20$:	MOV	#LEN, XRB+XRLEN
	MOV	#LEN, XRB+XRBC
	MOV	#10$, XRB+XRLOC
	.FSS
	.NAME
	.ENDM	INSTAL

	;
	;  MACRO PEEK
	;
	;  CALLED WITH:
	;
	;  PEEK	 ADDRESS
	;
	;  FUNCTION:  RETURNS THE CONTENTS OF THE SPECIFIED ADDRESS IN MONITOR
	;	      MEMORY TO R0.
	;  	      R0 IS CLOBBERED BY THIS ROUTINE.
	;

	.MACRO	PEEK	ADDRES
	MOV	#ADDRES, XRB
	.PEEK
	MOV	XRB, R0
	.ENDM	PEEK

	;  FILE PROCESSOR MACROS

	;
	;  MACRO OPEN
	;
	;  CALLED WITH:
	;
	;  OPEN  FILSPC,FUN,CHNL [,PROT [,MODE]]
	;
	;  FUNCTION:  OPENS THE SPECIFIED FILE ON THE GIVEN CHANNEL WITH
	;	      THE GIVEN PROTECTION CODE AND OPEN MODE VALUE.
	;	      THE FUNCTION SHOULD BE ONE OF THE CALFIP FUNCTION CODES.
	;

	.MACRO	OPEN	FILSPC,FUN,CHNL,PROT,MODE
	CLEAR	XRB, XRBSIZ
	CLEAR	FIRQB, FQBSIZ
	.ENABL	LSB
	BR	20$
10$:	.ASCII	/FILSPC/
	.EVEN
	.NCHR	LEN,<FILSPC>
20$:	MOV	#LEN, XRB
	MOV	#LEN, XRB+XRBC
	MOV	#10$, XRB+XRLOC
	.FSS
	MOVB	#FUN, FIRQB+FQFUN
	MOVB	#CHNL*2, FIRQB+FQFIL
	.IF	NB	<PROT>
	MOVB	#PROT, FIRQB+FQPROT
	MOVB	#377, FIRQB+FQPROT-1
	.ENDC
	.IF	NB	<MODE>
	MOV	#MODE, FIRQB+FQMODE
	.ENDC
	CALFIP
	.ENDM	OPEN

	;
	;  MACRO CLOSE
	;
	;  CALLED WITH:
	;
	;  CLOSE  CHNL [,RESET]
	;
	;  FUNCTION:  CLOSES (OR RESETS) THE SPECIFIED CHANNEL.
	;

	.MACRO	CLOSE	CHNL, RESET
	MOVB	#CHNL*2, FIRQB+FQFIL
	.IF	NB	<RESET>
	MOVB	#RSTFQ, FIRQB+FQFUN
	CALFIP
	.MEXIT
	.ENDC
	MOVB	#CLSFQ, FIRQB+FQFUN
	CALFIP
	.ENDM	CLOSE

	;
	;  MACRO KILL
	;
	;  CALLED WITH:
	;
	;  KILL  <FILNAM>
	;
	;  FUNCTION:  DELETES THE SPECIFIED FILE FROM THE PUBLIC STRUCTURE
	;

	.MACRO	KILL	FILNAM
	.ENABLE	LSB
	BR	20$
10$:	.ASCII	/FILNAM/
	.EVEN
	.NCHR	LEN, <FILNAM>
20$:	MOV	#LEN, XRB
	MOV	#LEN, XRB+XRBC
	MOV	#10$, XRB+XRLOC
	.FSS
	MOVB	#DLNFQ, FIRQB+FQFUN
	CALFIP
	.ENDM	KILL

	;
	;  MACRO RENAME
	;
	;  CALLED WITH:
	;
	;  RENAME  OLDNAM,NEWNAM [,DEL]
	;
	;  FUNCTION:  RENAMES OLDNAM TO NEWNAM (AND DELETES ANY EXISTING
	;  	      NEWNAM IF DEL SPECIFIED)
	;	      R1-R3 ARE CLOBBERED BY THIS ROUTINE.
	;

	.MACRO	RENAME	OLDNAM,NEWNAM,DEL
	.ENABL	LSB
	BR	15$
10$:	.ASCII	/OLDNAM/
	.EVEN
	.NCHR	LEN, <OLDNAM>
15$:	MOV	#LEN, XRB
	MOV	#LEN, XRB+XRBC
	MOV	#10$, XRB+XRLOC
	.FSS
	MOV	FIRQB+FQNAM1, R1
	MOV	FIRQB+FQNAM1+2, R2
	MOV	FIRQB+FQEXT, R3
	BR	25$
20$:	.ASCII	/NEWNAM/
	.EVEN
	.NCHR	LEN, <NEWNAM>
25$:	MOV	#LEN, XRB
	MOV	#LEN, XRB+XRBC
	MOV	#20$, XRB+XRLOC
	.FSS
	MOV	FIRQB+FQNAM1, FIRQB+FQNAM2
	MOV	FIRQB+FQNAM1+2, FIRQB+FQNAM2+2
	MOV	FIRQB+FQEXT, FIRQB+FQNAM2+4
	MOV	R1, FIRQB+FQNAM1
	MOV	R2, FIRQB+FQNAM1+2
	MOV	R3, FIRQB+FQEXT
	.IF	NB	<DEL>
	MOV	#-1, FIRQB+FQSIZ
	.ENDC
	MOVB	#RENFQ, FIRQB+FQFUN
	CALFIP
	.ENDM	RENAME

	;  I/O MACROS

	;
	;  MACRO SAY
	;
	;  CALLED WITH:
	;
	;  SAY <TEXT>
	;
	;  FUNCTION:  PRINTS 'TEXT' ON KEYBOARD
	;	      R0,R1, AND R2 ARE CLOBBERED BY THIS ROUTINE.
	;

	.MACRO	SAY	TEXT
	.ENABL	LSB
	POS	0
	MOV	#20$, XRB+XRLOC
	TST	R1
	BEQ	30$
	MOV	#10$, XRB+XRLOC
	BR	30$
10$:	.ASCII	<CR><LF>
20$:	.ASCII	/TEXT/<CR><LF>
25$:	.EVEN
30$:	MOV	#128., XRB+XRLEN
	MOV	#25$, R2
	SUB	XRB+XRLOC, R2
	MOV	R2, XRB+XRBC
	.WRITE
	.ENDM	SAY

	;
	;  MACRO PROMPT
	;
	;  CALLED WITH:
	;
	;  PROMPT <TEXT>
	;
	;  FUNCTION:  PRINTS 'TEXT' ON KEYBOARD WITHOUT A CR/LF FOLLOWING.
	;	      USED TO PROMPT FOR INPUT ON SAME LINE.
	;

	.MACRO	PROMPT	TEXT
	.ENABL	LSB
	BR	30$
10$:	.ASCII	/TEXT/
20$:	.EVEN
30$:	MOV	#128., XRB+XRLEN
	MOV	#10$, XRB+XRLOC
	MOV	#<20$-10$>, XRB+XRBC
	.WRITE
	.ENDM	PROMPT

	;
	;  MACRO INPUT
	;
	;  CALLED WITH:
	;
	;  INPUT BUFADD, PSECT
	;
	;  FUNCTION:  READS DATA FROM TERMINAL INTO DATA BUFFER AT BUFFER
	;	      ADDRESS BUFADD (CREATED BY INPUT) WITH LENGTH 128.
	;	      BYTES.  INPUT THEN RETURNS TO PSECT.
	;

	.MACRO	INPUT	BUFADD, PSECT
	.PSECT	$BUFR$
BUFADD:	.BLKB0	128.
	.EVEN
	.PSECT	PSECT
	CLEAR	XRB, XRBSIZ
	MOV	#128., XRB+XRLEN
	MOV	#BUFADD, XRB+XRLOC
	.READ
	.ENDM	INPUT

	;
	;  MACRO ERRMSG
	;
	;  CALLED WITH:
	;
	;  ERRMSG  #ERR
	;
	;  FUNCTION:  PRINTS ERROR MESSAGE NUMBER ERR ON THE KEYBOARD.
	;

	.MACRO	ERRMSG	ERR
	MOVB	#UU.ERR, FIRQB+FQFUN
	MOVB	ERR, FIRQB+FQERNO
	.UUO
	MOV	#128., XRB+XRLEN
	MOV	#28., XRB+XRBC
	MOV	#FIRQB+4, XRB+XRLOC
	.WRITE
	.ENDM	ERRMSG

	;
	;  MACRO HEADER
	;
	;  CALLED WITH:
	;
	;  HEADER  NAME,VERSION,TITLE
	;
	;  FUNCTION:  PRINTS A STANDARD SYSTEM PROGRAM HEADER ON THE KEYBOARD.
	;

	.MACRO	HEADER	NAME,VERSIO,TITLE
	MOVB	#UU.ERR, FIRQB+FQFUN
	MOVB	#0, FIRQB+FQERNO
	.UUO
	BR	GO
HDR1:	.ASCII	<CR><LF>/NAME   VERSIO   /
HDREND:	.EVEN
HDR2:	.ASCII	<CR><LF>/TITLE/<CR><LF><LF>
HD2END:	.EVEN
GO:	PRINTR	HDR1, HDREND
	PRINT	FIRQB+4, 28.
	PRINTR	HDR2, HD2END
	.ENDM	HEADER

	;
	;  MACRO PRINT
	;
	;  CALLED WITH:
	;
	;  PRINT  #ADDRESS, #LENGTH
	;
	;  FUNCTION:  PRINTS CONTENTS OF BUFFER AT ADDRESS WITH LENGTH
	;	      LENGTH ON THE KEYBOARD.
	;

	.MACRO	PRINT	ADDRES, LENGTH
	CLEAR	XRB, XRBSIZ
	MOV	#128., XRB+XRLEN
	MOV	#LENGTH, XRB+XRBC
	MOV	#ADDRES, XRB+XRLOC
	.WRITE
	.ENDM	PRINT

	;
	;  MACRO PRINTR
	;
	;  CALLED WITH:
	;
	;  PRINTR  ADDRESS, LABEL
	;
	;  FUNCTION:  PRINTS CONTENTS OF BUFFER AT ADDRESS DELIMITED BY LABEL
	;	      ON THE KEYBOARD.
	;

	.MACRO	PRINTR	ADDRES, LABEL
	PRINT	ADDRES, <LABEL-ADDRES>
	.ENDM	PRINTR

	.LIST
