	.TITLE	OPENCLOSE
	.SUBTITLE	ASSEMBLY INITIALIZATION AND COMMENTS
;
;	OPEN/CLOSE FILE CODE
;
;
	$SSDEF
	$TPADEF
	$LBRDEF
	.ENABLE	DEBUG
	.PAGE
	.SUBTITLE	COMMAND FETCH/PARSE/FILE OPEN
	.SUBTITLE	FTECH/PARSE PURE DATA
;
;	OPEN CODE-GET COMMAND LINE AND PARSE IT
;
	.PSECT	PURE_DATA,RD,NOWRT,SHR,CON,GBL,NOEXE,REL
;
;	PURE DATA AREA FOR GETTING COMMAND AND PARSEING IT
;
;		ARGUMENT LISTS
HELP_ARG:.LONG	5
	.ADDRESS	LIB$PUT_OUTPUT
	.ADDRESS	TERMINAL_WIDTH
	.ADDRESS	GET_HELP
	.ADDRESS	HELP_DIR
	.ADDRESS	NULL
TERMINAL_WIDTH:
	.LONG	0
SYNTAX_ERROR:	.ASCID	/INDEX-E-Command Syntax Error/
GETARG:	.LONG	4
	.ADDRESS	INSTR,PROMPT,LENGTH,FORCE
PROMPT:	.ASCID	/File:/
INSTR:	.LONG	1024
	.ADDRESS	STRBUFF
PUTARG:	.LONG	1
	.ADDRESS	LENGTH
	.SUBTITLE	FETCH/PARSE IMPURE DATA
	.PSECT	IMPURE_DATA,RD,WRT,NOSHR,CON,GBL,NOEXE,REL,LONG
;
;	IMPURE DATA AREA
;
ARG_GET_VM:	.LONG	2
	.ADDRESS	ARG1,ARG2
ARG1:	.LONG	0
ARG2:	.LONG	0
STRBUFF:	.BLKB	1024
COMMAND_BUFFER::
LENGTH:	.LONG	0
	.ADDRESS	STRBUFF
FORCE:	.LONG	0
	.PAGE
	.SBTTL	FETCH/PARSE MAIN LINE CODE
	.PSECT	CODE,RD,NOWRT,SHR,CON,GBL,EXE,REL
;
;	CODE
;
NEW_COMMAND:
;	CLEAN UP FILE SPEC AND LIB SPEC QUEUES
;
1$:	REMQUE	@FILE_SPEC_QUEUE,R11
	BVS	2$
	MOVL	#192,ARG1
	MOVL	R11,ARG2
	CALLG	ARG_GET_VM,FREE
	BRB	1$
2$:	REMQUE	@LIB_SPEC_QUEUE,R11
	BVS	RE_OPEN
	MOVL	#192,ARG1
	MOVL	R11,ARG2
	CALLG	ARG_GET_VM,FREE
	BRB	2$
	.ENTRY	OPEN,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
RE_OPEN:CALLG	GETARG,G^LIB$GET_FOREIGN	;GET THE COMMAND
	CMPL	#SS$_NORMAL,R0			;SEE IF COMMAND IS OK
	BEQL	10$
	JMP	2$				;NO-QUIT
10$:
;
;	MOVE COMMAND STRING LOCATION AND SIZE DATA FOR PARSEING
;
	MOVL	LENGTH,PARSE_PARAMETER_BLOCK+TPA$L_STRINGCNT
	MOVAL	STRBUFF,PARSE_PARAMETER_BLOCK+TPA$L_STRINGPTR
	CLRL	FLAG_WORD
	MOVAL	FILE_SPEC_QUEUE,FILE_SPEC_QUEUE
	MOVL	FILE_SPEC_QUEUE,FILE_SPEC_QUEUE+4
	MOVAL	LIB_SPEC_QUEUE,LIB_SPEC_QUEUE
	MOVL	LIB_SPEC_QUEUE,LIB_SPEC_QUEUE+4

;
;	SET UP CALL TO SYSTEM COMMAND PARSEING ROUTINE
;
	PUSHAL	KEY_WORD
	PUSHAL	COMMAND_STATE
	PUSHAL	PARSE_PARAMETER_BLOCK
	CALLS	#3,G^LIB$TPARSE
	BLBS	R0,5$			;CHECK FOR ERROR
	PUSHAL	SYNTAX_ERROR		;OUTPUT ERROR MESSAGE
	CALLS	#1,G^LIB$PUT_OUTPUT	;AND RETRY
	JMP	NEW_COMMAND
;
;	PARSE COMPLETE-CHECK FOR HELP
;
5$:	BITL	#HELP_FLAG,FLAG_WORD
	BEQL	4$
;
;	CALL FOR HELP HERE
;
	CALLG	HELP_ARG,G^LBR$OUTPUT_HELP
	BRW	NEW_COMMAND	;GO BACK FOR ANOTHER COMMAND
4$:	JMP	OPEN_FILES	;GO OPEN FILES FOR INDEX
2$:	CMPL	#RMS$_EOF,R0
	BNEQ	3$
	MOVL	#1,R0
3$:	$EXIT_S	R0
	.PAGE
	.SUBTITLE	PARSING ROUTINE IMPURE WORK AREA
	.PSECT	IMPURE_DATA,RD,WRT,NOSHR,CON,GBL,NOEXE,REL,LONG
;
;	PARSE TABLE AREAS
;
;
;		PARAMETER BLOCK
;
PARSE_PARAMETER_BLOCK:
		.LONG	TPA$K_COUNT0
		.LONG	TPA$M_ABBREV!TPA$M_BLANKS
		.REPT	<TPA$K_LENGTH0-8>
		.BYTE	0
		.ENDR
	.PAGE
	.SUBTITLE	PARSING ROTUINES STATE TABLES
	.PSECT	PURE_DATA,RD,NOWRT,SHR,CON,GBL,NOEXE,REL
;		STATE TABLE
;
$INIT_STATE	COMMAND_STATE,KEY_WORD
 $STATE	START
  $TRAN	TPA$_BLANK,START
  $TRAN	'/',OPTION
  $TRAN	'+',START
  $TRAN	<','>,START
  $TRAN	TPA$_EOS,TPA$_EXIT
  $TRAN	TPA$_LAMBDA,GET_DEFAULT_SPEC,,INPUT_FLAG,FLAG_WORD
 $STATE	OPTION
  $TRAN	'GLOBAL',START,       CHECK_CONFLICT,GLOBAL_FLAG,FLAG_WORD,-
						LOCAL_FLAG!GLOBAL_FLAG
  $TRAN	'LOCAL', START,       CHECK_CONFLICT,LOCAL_FLAG, FLAG_WORD,-
						LOCAL_FLAG!GLOBAL_FLAG
  $TRAN	'MERGE', START,       CHECK_CONFLICT,MERGE_FLAG, FLAG_WORD,-
						MERGE_FLAG
  $TRAN	'OUTPUT',GET_OUT_SPEC,CHECK_CONFLICT,OUTPUT_FLAG,FLAG_WORD,-
						OUTPUT_FLAG
  $TRAN	'LIST',  GET_OUT_SPEC,CHECK_CONFLICT,OUTPUT_FLAG,FLAG_WORD,-
						OUTPUT_FLAG
  $TRAN 'SPOOL',START,        CHECK_CONFLICT,SPOOL_FLAG,FLAG_WORD,-
						SPOOL_FLAG!NO_SPOOL_FLAG
  $TRAN 'NOSPOOL',START,      CHECK_CONFLICT,SPOOL_FLAG,FLAG_WORD,-
						SPOOL_FLAG!NO_SPOOL_FLAG
  $TRAN 'NOSOURCE',START,     CHECK_CONFLICT,NO_SOURCE_FLAG,FLAG_WORD,-
						NO_SOURCE_FLAG
  $TRAN 'STATISTICS',START,   CHECK_CONFLICT,STATISTICS_FLAG,FLAG_WORD,-
						STATISTICS_FLAG!GET_ENTRY_FLAG  ;V1.4
  $TRAN 'GET_ENTRY',START,    CHECK_CONFLICT,GET_ENTRY_FLAG,FLAG_WORD,-         ;**-1
						GET_ENTRY_FLAG
  $TRAN 'USED',START,	      CHECK_CONFLICT,USED_FLAG,FLAG_WORD,-
						USED_FLAG!UNUSED_FLAG
  $TRAN 'UNUSED',START,       CHECK_CONFLICT,UNUSED_FLAG,FLAG_WORD,-
						UNUSED_FLAG!USED_FLAG
  $TRAN 'DO_ENTRY',START,     CHECK_CONFLICT,DO_ENTRY_FLAG,FLAG_WORD,-
						DO_ENTRY_FLAG
  $TRAN 'HELP',CHECK_HELP,    CHECK_CONFLICT,HELP_FLAG,FLAG_WORD,-
						HELP_FLAG
  $TRAN	'DO_SUPER',START,     CHECK_CONFLICT,DO_SUPER_FLAG,FLAG_WORD,-
						DO_SUPER_FLAG
  $TRAN 'UNCHANGED',START,    CHECK_CONFLICT,UNCHANGED_FLAG,FLAG_WORD,-
						CHANGED_FLAG!UNCHANGED_FLAG
  $TRAN 'CHANGED',START,      CHECK_CONFLICT,CHANGED_FLAG,FLAG_WORD,-
						UNCHANGED_FLAG!CHANGED_FLAG
  $TRAN 'WIDE',START,         CHECK_CONFLICT,WIDE_FLAG,FLAG_WORD,-
						WIDE_FLAG!NARROW_FLAG
  $TRAN 'NARROW',START,       CHECK_CONFLICT,NARROW_FLAG,FLAG_WORD,-
						NARROW_FLAG!WIDE_FLAG
  $TRAN 'PREPROCESSOR',START, CHECK_CONFLICT,PREPROCESSOR_FLAG,FLAG_WORD,-
						PREPROCESSOR_FLAG
  $TRAN 'OPTIONS',START,      CHECK_CONFLICT,OPTIONS_FLAG,FLAG_WORD,-
						OPTIONS_FLAG
  $TRAN 'CALLING_TREE',START, CHECK_CONFLICT,CALLING_TREE_FLAG,FLAG_WORD,-
						CALLING_TREE_FLAG
  $TRAN 'CALLED_BY_TREE',START,CHECK_CONFLICT,CALLED_BY_TREE_FLAG,FLAG_WORD,-
						CALLED_BY_TREE_FLAG
  $TRAN 'GET_SUPER',START,   CHECK_CONFLICT,GET_SUPER_FLAG,FLAG_WORD,-
						GET_SUPER_FLAG
  $TRAN 'DEBUG',START,	      CHECK_CONFLICT,DEBUG_FLAG,FLAG_WORD,DEBUG_FLAG
  $TRAN	'LIBRARY',START,MOVE_SPEC_TO_LIB
  $TRAN	'LOG',START,         CHECK_CONFLICT,LOG_FLAG,FLAG_WORD,LOG_FLAG
  $TRAN	'NOLIBRARY_FUNCTIONS',START,CHECK_CONFLICT,NOLIB_FLAG,FLAG_WORD,-
				NOLIB_FLAG
  $TRAN 'IMPORT',START,	     CHECK_CONFLICT,IMPORT_FLAG,FLAG_WORD,IMPORT_FLAG   ;V1.3
  $TRAN 'EXPORT',START,       CHECK_CONFLICT,EXPORT_FLAG,FLAG_WORD,EXPORT_FLAG  ;V1.3
  $TRAN 'COMMENT',CHECK_COMMENT_START_1                                         ;V1.3
  $TRAN	'FLOW_CHART',START,  CHECK_CONFLICT,FLOW_CHART_FLAG,FLAG_WORD,-         ;V1.4
						FLOW_CHART_FLAG                 ;V1.4
  $TRAN 'DELETE',START,      CHECK_CONFLICT,DELETE_FLAG,FLAG_WORD,DELETE_FLAG   ;V1.6
  $TRAN	TPA$_LAMBDA,TPA$_FAIL                                                   ;V1.3
 $STATE CHECK_COMMENT_START_1                                                   ;V1.3
  $TRAN '=',CHECK_COMMENT_START_2                                               ;V1.3
  $TRAN TPA$_LAMBDA,TPA$_FAIL                                                   ;V1.3
 $STATE CHECK_COMMENT_START_2                                                   ;V1.3
  $TRAN	'"',CHECK_COMMENT_CONTENTS                                              ;V1.3
  $TRAN TPA$_LAMBDA,TPA$_FAIL                                                   ;V1.3
 $STATE CHECK_COMMENT_CONTENTS                                                  ;V1.3
  $TRAN	'"',START                                                               ;V1.3
  $TRAN	TPA$_EOS,TPA$_FAIL                                                      ;V1.3
  $TRAN	TPA$_ANY,CHECK_COMMENT_CONTENTS                                         ;V1.3
 $STATE CHECK_HELP
  $TRAN TPA$_LAMBDA,,LOAD_HELP_ADDRESS
 $STATE
  $TRAN '=',LOAD_HELP_NEXT_CHECK
  $TRAN TPA$_LAMBDA,START
 $STATE LOAD_HELP_NEXT_CHECK
  $TRAN '(',LOAD_MANY_HELP
  $TRAN TPA$_LAMBDA,LOAD_FILE_NAME
 $STATE	GET_OUT_SPEC
  $TRAN '='
  $TRAN TPA$_LAMBDA,TPA$_FAIL
 $STATE
  $TRAN	TPA$_LAMBDA,LOAD_FILE_NAME,LOAD_OUTPUT_ADDRESS
 $STATE	GET_DEFAULT_SPEC
  $TRAN	TPA$_LAMBDA,LOAD_FILE_NAME,LOAD_DEFAULT_ADDRESS
 $STATE	LOAD_FILE_NAME
  $TRAN	TPA$_BLANK,START
  $TRAN TPA$_EOS,TPA$_EXIT
  $TRAN	'/',OPTION
  $TRAN	'+',START
  $TRAN	<','>,START
  $TRAN TPA$_ANY,LOAD_FILE_NAME,LOAD_CHAR
 $STATE	LOAD_MANY_HELP
  $TRAN ')',START
  $TRAN <','>,LOAD_MANY_HELP,LOAD_BLANK
  $TRAN TPA$_BLANK,TPA$_FAIL
  $TRAN TPA$_EOS,TPA$_FAIL
  $TRAN TPA$_ANY,LOAD_MANY_HELP,LOAD_CHAR
$END_STATE
	.PAGE
	.SUBTITLE	PARSING ACTION ROUTINES
	.PSECT	CODE,RD,NOWRT,SHR,CON,GBL,EXE,REL
;
;	ACTION ROUTINES
;
;		CHECK TO SEE IF NO CONFLICTING OPTIONS
;
	.ENTRY	CHECK_CONFLICT,^M<>
	BITL	TPA$L_PARAM(AP),FLAG_WORD
	BEQL	1$
	CLRL	R0
1$:	RET
;
;		SET UP POINTER FOR LOADING DEFAULT FILE SPEC
;
	.ENTRY	LOAD_DEFAULT_ADDRESS,^M<>
	MOVL	#192,ARG1			;ALLOCATE ELEMENT FOR OUTPUT
	CALLG	ARG_GET_VM,ALLOCATE		;SPEC QUEUE
	INSQUE	(R0),@FILE_SPEC_QUEUE+4	;INSERT IN END OF QUEUE
	ADDL3	#12,R0,STORE_POINTER
	ADDL3	#8,R0,COUNT_POINTER
	CLRL	@COUNT_POINTER
	MOVL	#1,R0
	RET
;
;		SET UP POINTER FOR LOADING OUTPUT FILE SPEC
;
	.ENTRY	LOAD_OUTPUT_ADDRESS,0
	MOVAL	OUTPUT_FILE_SPEC,STORE_POINTER
	MOVAL	OUTPUT_SPEC,COUNT_POINTER
	CLRL	@COUNT_POINTER
	RET
;
;		SET UP POINTER FOR LOADING HELP OPTION
;
	.ENTRY	LOAD_HELP_ADDRESS,0
	MOVAL	HELP_OPTION,STORE_POINTER
	MOVAL	GET_HELP,COUNT_POINTER
	MOVL	#HELP_LEN,@COUNT_POINTER
	RET
;
;		MOVE CHAR TO FILE SPEC
;
	.ENTRY	LOAD_CHAR,0
	MOVB	@TPA$L_TOKENPTR(AP),@STORE_POINTER
	INCL	STORE_POINTER
	INCL	@COUNT_POINTER
	RET
;
;		LOAD A BLANK CHARACTER
;
	.ENTRY	LOAD_BLANK,0
	MOVB	#^A/ /,@STORE_POINTER
	INCL	STORE_POINTER
	INCL	@COUNT_POINTER
	RET
;
;	MOVE SPEC FROM FILE QUEUE TO LIB QUEUE
;
	.ENTRY	MOVE_SPEC_TO_LIB,^M<>
	REMQUE	@FILE_SPEC_QUEUE+4,R1
	BVC	1$
	CLRL	R0
	RET
1$:	INSQUE	(R1),@LIB_SPEC_QUEUE
	RET
	.PAGE
	.SUBTITLE	COMMAND LINE EVALUATION FLAG DECLARATIONS AND FLAG WORD
;
;		DEFINE OPTION FLAGS
;
	.PSECT	IMPURE_DATA,RD,WRT,NOSHR,CON,GBL,NOEXE,REL,LONG

		GLOBAL_FLAG		==^X1
		LOCAL_FLAG		==^X2
		MERGE_FLAG		==^X4
		OUTPUT_FLAG		==^X8
		INPUT_FLAG		==^X10
		SPOOL_FLAG		==^X20
		NO_SPOOL_FLAG		==^X40
		NO_SOURCE_FLAG		==^X80
		STATISTICS_FLAG		==^X100
		GET_ENTRY_FLAG		==^X200
		USED_FLAG		==^X400
		NOLIB_FLAG		==^X800
		DO_ENTRY_FLAG		==^X1000
		HELP_FLAG		==^X2000
		DO_SUPER_FLAG		==^X4000
		UNCHANGED_FLAG		==^X8000
		CHANGED_FLAG		==^X10000
		WIDE_FLAG		==^X20000
		PREPROCESSOR_FLAG	==^X40000
		OPTIONS_FLAG		==^X80000
		CALLING_TREE_FLAG	==^X100000
		CALLED_BY_TREE_FLAG	==^X200000
		GET_SUPER_FLAG		==^X400000
		NARROW_FLAG		==^X800000
		UNUSED_FLAG		==^X1000000
		DEBUG_FLAG		==^X2000000
		LOG_FLAG		==^X4000000
		IMPORT_FLAG		==^X8000000                             ;V1.3
		EXPORT_FLAG		==^X10000000                            ;V1.3
		FLOW_CHART_FLAG		==^X20000000                            ;V1.4
		DELETE_FLAG		==^X40000000                            ;V1.6
;					==^X80000000                            ;V1.3

		.PAGE
		.SUBTITLE	USER SPECIFIED I/O FILE NAMES STORAGE AREA
;
;		FILE SPEC STORAGE AREAS AND POINTERS
;
STORE_POINTER:	.LONG	0
COUNT_POINTER:	.LONG	0
OUTPUT_FILE_SPEC:	.BLKB	132
OUTPUT_SPEC:	.LONG	0
		.ADDRESS	OUTPUT_FILE_SPEC
FILE_SPEC_QUEUE::
	.ADDRESS	0,0
LIB_SPEC_QUEUE:	.ADDRESS	0,0
;	THE TWO QUEUE'S ABOVE USE ELEMENTS OF SAME FORMAT
;
;	----------------------------------
;	!FORWARD POINTER                 ! 0
;	----------------------------------
;	!BACKWARD POINTER                ! 4
;	----------------------------------
;	! NUMBER OF CHRS IN STRING       ! 8
;	----------------------------------
;	!STRING (132 CHRS MAX)           !12
;
;	!                                !144
;	----------------------------------
;
;	148 BYTES IN LENGTH
		.PAGE
GET_HELP:	.LONG	0
		.ADDRESS	HELP_CALL
HELP_DIR:	.ASCID	?INDEX.HLB?
HELP_CALL:	.ASCII	?INDEX ?
HELP_LEN=.-HELP_CALL
HELP_OPTION:	.ASCII	?                                                    ?
		.ASCII	?                                                    ?
		.SUBTITLE	FILE I/O CONTROL BLOCKS
;
;	FILE I/O AREA
;
		.ALIGN	LONG
OUT_FILE:	$FAB
		.ALIGN	LONG
OUT_RAB::	$RAB
		.ALIGN	LONG
TEMPLATE_NAME:	$NAM	ESA=EXP_STR,ERR=255,RSA=RES_STR,RSS=255                 ;V1.9
OUT_NAME:	$NAM	ESA=EXP_STR,ESS=255,RSA=RES_STR,RSS=255                 ;V1.6                                       
RES_STR:	.BLKB	256                                                     ;V1.6
EXP_STR:	.BLKB	256                                                     ;V1.6
		.SUBTITLE	PURE DATA AND ERROR MESSAGES
		.PSECT	PURE_DATA,NOEXE,CON,GBL,RD,NOWRT,REL,SHR
NOINFILE:	.ASCID	/INDEX-E-No Input File/
NOOUTFILE:	.ASCID	/INDEX-E-No Output File/
IN_OPEN_ERROR:	.ASCID	/INDEX-E-Open Input File Error/
IN_CONNECT_ERROR:.ASCID	/INDEX-E-Connect Input File Error/
OUT_OPEN_ERROR:	.ASCID	/INDEX-E-Open Output File Error/
OUT_CONNECT_ERROR:.ASCID	/INDEX-E-Connect Output File Error/
OUT_MERGE_ERROR: .ASCID	/INDEX-W-Merge File Not Found New File Created/
DEF_IN_NAME:	.ASCII	/.FOR/
DEF_IN_NAME_SIZE=.-DEF_IN_NAME
DEF_OUT_NAME:	.ASCII	/.LIS;0/
DEF_OUT_NAME_SIZE=.-DEF_OUT_NAME
		.PAGE
		.SUBTITLE	OPEN FILE CODE
		.PSECT	CODE,EXE,CON,GBL,RD,NOWRT,REL,SHR
OPEN_FILES:
;
;	OPEN INPUT FILE AS REQUIRED
;
	BITL	#DO_SUPER_FLAG!DO_ENTRY_FLAG,FLAG_WORD	;SEE IF INPUT FILE NEEDED
	BEQL	6$
	JMP	NO_INFILE	;NO FILE REQUIRED
6$:	BITL	#INPUT_FLAG,FLAG_WORD	;SEE IF INPUT FILE SPECIFIED
	BNEQ	7$			;YES
	PUSHAL	NOINFILE		;NO-ERROR MESSAGE
	CALLS	#1,G^LIB$PUT_OUTPUT
	JMP	NEW_COMMAND
7$:	MOVL	FILE_SPEC_QUEUE,R11	;GET ADDRESS OF SPEC QUEUE ELEMENT
	MOVL	INCLUDE_STACK,R10	;GET POINTER TO 0 LEVEL INCLUDE FRAME
	$FAB_STORE	FAB=INCLUDE_FAB(R10)-		;UPDATE INPUT FILE CONTROL
			DNA=DEF_IN_NAME-	;BLOCKS
			DNS=#DEF_IN_NAME_SIZE-
			FAC=<BRO,GET>-
			FNA=12(R11)-
			FNS=8(R11)-
			FOP=<SQO>-
			MRS=#132-
			ORG=SEQ-
			RFM=VAR-
			SHR=<GET>
	$RAB_STORE	RAB=INCLUDE_RAB(R10)-
			FAB=INCLUDE_FAB(R10)-
			RAC=SEQ-
			RSZ=#132-
			UBF=INPUT_BUFFER-
			USZ=#132
2$:	MOVL	INCLUDE_STACK,R11
	CLRB	INCLUDE_TYPE(R11)
	CLRB	INCLUDE_DEFFERED_EOF(R11)
	$OPEN	FAB=INCLUDE_FAB(R10)			;OPEN INPUT FILE
	BLBS	R0,1$				;CHECK FOR EROR
	PUSHAL	IN_OPEN_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	JMP	NEW_COMMAND
1$:	$CONNECT	RAB=INCLUDE_RAB(R10)
	BLBS	R0,NO_INFILE
	PUSHAL	IN_CONNECT_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	$CLOSE	FAB=IN_FILE
	JMP	NEW_COMMAND
NO_INFILE:
	BITL	#GET_ENTRY_FLAG,FLAG_WORD	;SEE IF OUTPUT FILE NEEDED
	BEQL	7$
	JMP	NO_OUTFILE
7$:	MOVL	FILE_SPEC_QUEUE,R11
	MOVC3	#<OUT_NAME-TEMPLATE_NAME>,TEMPLATE_NAME,OUT_NAME                ;V1.9
	MOVC5	#0,NULL,#0,#256,EXP_STR		;ZERO NAME STRINGS              ;V1.9
	MOVC5	#0,NULL,#0,#256,RES_STR		;ZERO RESULT STRINGS            ;V1.9
	$FAB_STORE	FAB=OUT_FILE-		;SET UP DEFAULT OUTPUT INFO
			DNA=DEF_OUT_NAME-
			DNS=#DEF_OUT_NAME_SIZE-
			FAC=<BRO,PUT>-
			FNA=12(R11)-
			FNS=8(R11)-
			FOP=<SQO,TEF,MXV,NAM>-                                  ;V1.6                         
			MRS=#132-                                               ;**-1
			NAM=OUT_NAME-                                           ;V1.6
			ORG=SEQ-
			RAT=CR-
			RFM=VAR-
			SHR=NIL
	$RAB_STORE	RAB=OUT_RAB-
			FAB=OUT_FILE-
			RAC=SEQ-
			RSZ=#132-
			RBF=OUTPUT_BUFFER-
			USZ=#132
;	CHECK FOR NON DEFAULT OUTPUT FILE
	BITL	#OUTPUT_FLAG,FLAG_WORD
	BEQL	4$
	MOVL	#OUTPUT_FILE_SPEC,OUT_FILE+FAB$L_FNA	;LOAD NEW ADDR
	MOVB	OUTPUT_SPEC,OUT_FILE+FAB$B_FNS		;SIZE
	BRB	14$
4$:	BITL	#INPUT_FLAG,FLAG_WORD
	BNEQ	15$
	PUSHAL	NOOUTFILE
	CALLS	#1,G^LIB$PUT_OUTPUT
	CALLG	NULL,CLOSE
	JMP	NEW_COMMAND
15$:	;SEE IF EXTENTION SPECIFIED ON DEFAULT FILE NAME-IF SO-GET RID OF IT
	LOCC	#^A/./,8(R11),12(R11)
	BEQL	14$			;NONE SPECIFIED
	SUBL2	R11,R1	;GET BYTE COUNT
	SUBL2	#12,R1
	MOVB	R1,OUT_FILE+FAB$B_FNS	;SET REVISED SIZE
14$:	BITL	#SPOOL_FLAG,FLAG_WORD			;SEE IF SPOOL WHEN DONE
	BEQL	1$
	BISL	#FAB$M_SPL,OUT_FILE+FAB$L_FOP		;SET SPOOL BIT
1$:	BITL	#DELETE_FLAG,FLAG_WORD			;CHECK FOR DELETE OUTPUT;V1.6
							; FILE                  ;V1.6
	BEQL	71$                                                             ;V1.6
	BISL	#FAB$M_DLT,OUT_FILE+FAB$L_FOP		;SET DELETE BIT         ;V1.6
71$:	BITL	#MERGE_FLAG,FLAG_WORD			;MERGE OUTPUT TO        ;V1.6
							;EXISTING FILE          ;**-1
	BEQL	2$
	BICL	#FAB$M_MXV,OUT_FILE+FAB$L_FOP
	BISL	#FAB$M_CIF,OUT_FILE+FAB$L_FOP
	BISL	#RAB$M_EOF,OUT_RAB+RAB$L_ROP
2$:
	$CREATE	FAB=OUT_FILE
	BLBS	R0,3$
	PUSHAL	OUT_OPEN_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	JMP	NEW_COMMAND
3$:	CMPL	#RMS$_CREATED,R0
	BNEQ	5$
	PUSHAL	OUT_MERGE_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
5$:	$CONNECT	RAB=OUT_RAB
	BLBS	R0,NO_OUTFILE
	PUSHAL	OUT_CONNECT_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	BISL	#FAB$M_DLT,OUT_FILE+FAB$L_FOP
	$CLOSE	FAB=OUT_FILE
	JMP	NEW_COMMAND
	.PAGE
	.SUBTITLE	CHECK FOR OTHER PROCESSING OPTIONS
	.SUBTITLE		OPTIONS IN EFFECT
	.SUBTITLE		DO ENTRY POINT CROSS REFERENCE
	.SUBTITLE		DO SUPER INDEX OUTPUT
NO_OUTFILE:
	REMQUE	@FILE_SPEC_QUEUE,R11	;REMOVE USED INPUT FILE SPEC-MAKE NEXT
					;SPEC AVAILABLE
	BVS	1112$
	MOVL	#192,ARG1
	MOVL	R11,ARG2
	CALLG	ARG_GET_VM,FREE
1112$:	BITL	#OPTIONS_FLAG,FLAG_WORD	;OUTPUT OPTIONS IN EFFECT?
	BEQL	1$
	MOVL	#OPTIONS_OUTPUT,STATUS_WORD
	CLRL	LINES_ON_PAGE
;
;	INSERT OPTINS IN EFFECT CODE HERE
;
1$:	BITL	#DO_ENTRY_FLAG,FLAG_WORD	;OUTPUT SUPER INDEX
	BEQL	2$
	MOVL	#ENTRY_OUTPUT,STATUS_WORD
	CLRL	LINES_ON_PAGE
	CALLG	NULL,DUMP_ENTRY_INDEX
	CALLG	NULL,CLOSE
	JMP	NEW_COMMAND
2$:	BITL	#DO_SUPER_FLAG,FLAG_WORD
	BEQL	3$
	MOVL	#SUPER_OUTPUT,STATUS_WORD
	CLRL	LINES_ON_PAGE
	CALLG	NULL,DUMP_SUPER_INDEX
	CALLG	NULL,CLOSE
	JMP	NEW_COMMAND
3$:	RET
	.PAGE
	.SUBTITLE	FILE CLOSE PROCESSING
	.ENTRY	CLOSE,^M<>
	BITL	#DO_ENTRY_FLAG!DO_SUPER_FLAG,FLAG_WORD	;SEE IF INPUT FILE
	BNEQ	1$
	$DISCONNECT	RAB=IN_RAB
	$CLOSE	FAB=IN_FILE
1$:	BITL	#GET_ENTRY_FLAG,FLAG_WORD		;SEE IF OUTPUT FILE
	BNEQ	2$
	$DISCONNECT	RAB=OUT_RAB
	$CLOSE	FAB=OUT_FILE
2$:
11$:	REMQUE	@FILE_SPEC_QUEUE,R11
	BVS	12$
	MOVL	#192,ARG1
	MOVL	R11,ARG2
	CALLG	ARG_GET_VM,FREE
	BRB	11$
12$:	REMQUE	@LIB_SPEC_QUEUE,R11
	BVS	13$
	MOVL	#192,ARG1
	MOVL	R11,ARG2
	CALLG	ARG_GET_VM,FREE
	BRB	12$
13$:	RET
	.PAGE
	.SUBTITLE	OPEN SCRATCH FILES
	.SUBTITLE	DATA AREAS
	.PSECT	IMPURE_DATA,RD,WRT,NOSHR,CON,GBL,NOEXE,REL,LONG
;
;	SUPER INDEX SCRATCH FILE
;
	.ALIGN	LONG
SUPER_SCRATCH_FAB::
	$FAB	DNM=<SYS$SCRATCH:SUPER.TMP>-
		FAC=<BRO,DEL,GET,PUT>-
		FOP=<CBT,SQO,TMD>-
		MRS=64-
		ORG=SEQ-
		RFM=FIX-
		SHR=NIL
	.ALIGN	LONG
SUPER_INDEX_RAB::
	$RAB	FAB=SUPER_SCRATCH_FAB-
		RAC=SEQ-
		RBF=SUPER_BUFFER-
		RSZ=64-
		UBF=SUPER_BUFFER-
		USZ=64
;
;	ENTRY POINT INDEX SCRATCH FILE
;
	.ALIGN	LONG
ENTRY_SCRATCH_FAB::
	$FAB	DNM=<SYS$SCRATCH:ENTRY.TMP>-
		FAC=<BRO,DEL,GET,PUT>-
		FOP=<CBT,SQO,TMD>-
		MRS=64-
		ORG=SEQ-
		RFM=FIX-
		SHR=NIL
	.ALIGN	LONG
ENTRY_INDEX_RAB::
	$RAB	FAB=ENTRY_SCRATCH_FAB-
		RAC=SEQ-
		RBF=ENTRY_BUFFER-
		RSZ=64-
		UBF=ENTRY_BUFFER-
		USZ=64
	.PSECT	PURE_DATA,NOEXE,CON,GBL,RD,NOWRT,REL,SHR
SCRATCH_ERROR:
	.ASCID	/INDEX-F-Error opening scratch files/
	.PAGE
	.SUBTITLE	OPEN SCRATCH FILES CODE
	.PSECT	CODE,EXE,CON,GBL,RD,NOWRT,REL,SHR
	.ENTRY	OPEN_SCRATCH,0
	$FAB_STORE	FAB=ENTRY_SCRATCH_FAB-
		FAC=<BRO,DEL,GET,PUT>-
		FOP=<CBT,SQO,TMD>-
		MRS=#64-
		ORG=SEQ-
		RFM=FIX-
		SHR=NIL
	$FAB_STORE	FAB=SUPER_SCRATCH_FAB-
		FAC=<BRO,DEL,GET,PUT>-
		FOP=<CBT,SQO,TMD>-
		MRS=#64-
		ORG=SEQ-
		RFM=FIX-
		SHR=NIL
	$RAB_STORE	RAB=ENTRY_INDEX_RAB-
		RAC=SEQ-
		RBF=ENTRY_BUFFER-
		RSZ=#64-
		UBF=ENTRY_BUFFER-
		USZ=#64
	$RAB_STORE	RAB=SUPER_INDEX_RAB-
		RAC=SEQ-
		RBF=SUPER_BUFFER-
		RSZ=#64-
		UBF=SUPER_BUFFER-
		USZ=#64
	$CREATE	FAB=SUPER_SCRATCH_FAB
	BLBC	R0,1$
	$CONNECT	RAB=SUPER_INDEX_RAB
	BLBC	R0,1$
	$CREATE	FAB=ENTRY_SCRATCH_FAB
	BLBC	R0,1$
	$CONNECT	RAB=ENTRY_INDEX_RAB
	BLBC	R0,1$
	RET
1$:	PUSHR	#^M<R0>
	PUSHAL	SCRATCH_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
	.PAGE
	.SUBTITLE	CLOSE DOWN SCRATCH FILES
	.ENTRY	CLOSE_SCRATCH,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
	$DISCONNECT	RAB=SUPER_INDEX_RAB
	$CLOSE		FAB=SUPER_SCRATCH_FAB
	$DISCONNECT	RAB=ENTRY_INDEX_RAB
	$CLOSE		FAB=ENTRY_SCRATCH_FAB
	RET
	.PAGE
	.SUBTITLE	POP INCLUDE LEVEL
	.ENTRY	POP_INCLUDE_LEVEL,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
	MOVL	INCLUDE_LEVEL,R10
	MOVL	INCLUDE_STACK[R10],R11	;GET THE INCLUDE FRAME
	TSTB	INCLUDE_TYPE(R11)	;IS IT LIBRARY
	BNEQ	50$			;YES
;	CLOSE DOWN REGULAR FILE
	$DISCONNECT	RAB=INCLUDE_RAB(R11)
	$CLOSE	FAB=INCLUDE_FAB(R11)
	BRW	100$
50$:;	CLOSE DOWN LIBVRARY FILE
	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#1,G^LBR$CLOSE
100$:;	RESTORE ALL OTHER FLAGS,BUFFERS ETC
	CVTBL	INCLUDE_DEFFERED_EOF(R11),DEFFERED_END_OF_FILE
	CVTBL	INCLUDE_INPUT_BUFFER_FLAG(R11),INPUT_BUFFER_FLAG
	MOVC3	#132,INCLUDE_INPUT_BUFFER(R11),INPUT_BUFFER
	TSTB	INCLUDE_LIST(R11)
	BNEQ	101$		;PREVIOUS LEVEL WAS NO SOURCE
	BICL	#NO_SOURCE_FLAG,FLAG_WORD
101$:	DECL	INCLUDE_LEVEL
	RET
	.PAGE
	.SUBTITLE	OPEN NEW ZERO LEVEL FILE
	.ENTRY	OPEN_NEW_FILE,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
	MOVL	FILE_SPEC_QUEUE,R11	;GET ADDRESS OF SPEC QUEUE ELEMENT
	MOVL	INCLUDE_STACK,R10
	$DISCONNECT	RAB=INCLUDE_RAB(R10)
	$CLOSE		FAB=INCLUDE_FAB(R10)
	$FAB_STORE	FAB=INCLUDE_FAB(R10)-		;UPDATE INPUT FILE CONTROL
			DNA=DEF_IN_NAME-	;BLOCKS
			DNS=#DEF_IN_NAME_SIZE-
			FAC=<BRO,GET>-
			FNA=12(R11)-
			FNS=8(R11)-
			FOP=<SQO>-
			MRS=#132-
			ORG=SEQ-
			RFM=VAR-
			SHR=<GET>
	$RAB_STORE	RAB=INCLUDE_RAB(R10)-
			FAB=INCLUDE_FAB(R10)-
			RAC=SEQ-
			RSZ=#132-
			UBF=INPUT_BUFFER-
			USZ=#132
	MOVL	INCLUDE_STACK,R11
	CLRB	INCLUDE_TYPE(R11)
	CLRB	INCLUDE_DEFFERED_EOF(R11)
	$OPEN	FAB=INCLUDE_FAB(R11)			;OPEN INPUT FILE
	BLBS	R0,1$				;CHECK FOR EROR
	PUSHR	#^M<R0>
	PUSHAL	IN_OPEN_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
1$:	$CONNECT	RAB=INCLUDE_RAB(R11)
	BLBS	R0,3$
	PUSHR	#^M<R0>
	PUSHAL	IN_CONNECT_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
3$:	REMQUE	@FILE_SPEC_QUEUE,R11	;REMOVE USED INPUT FILE SPEC-MAKE NEXT
					;SPEC AVAILABLE
	BVS	2$
	MOVL	#192,ARG1
	MOVL	R11,ARG2
	CALLG	ARG_GET_VM,FREE
2$:	RET
	.PAGE
	.SUBTITLE	PUSH INCLUDE LEVEL
	.ENTRY	PUSH_INCLUDE_LEVEL,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
;
;	CALL PUSH_INCLUDE_LEVEL(FILE_DESCRIPTER_STRING)
;
;	INCLUDE SOURCE STRING DESCRIPTER
;
;	GET A POINTER TO STRONG AND DETERMINE WHICH OF THREE TYPES
;	IT IS:
;		SIMPLE FILE
;		LIBRARY FILE WITH SPECIFIED FILE NAME AND LIBRARY ENTRY NAME
;		LIBRARY FILE WITH NO SPECIFIED FILE NAME ONLY ENTRY NAME
;
	CMPL	#11,INCLUDE_LEVEL
	BGTR	500$
	PUSHAL	INCLUDE_NEST_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	$EXIT_S
500$:	MOVL	4(AP),R10	;GET POINTER TO DESCRIPTER
	CVTWL	(R10),R9	;GET LENGTH
	MOVL	4(R10),R11	;GET POINTER
;	INIT ALL COUNTERS STRINGS AND FLAGS
	CLRL	FILE_DESC
	MOVAL	FILE_NAME,FILE_DESC+4
	CLRL	MODULE_DESC
	MOVAL	DESC_NAME,MODULE_DESC+4
	CLRL	LIST_FLAG
	MOVC5	#0,NULL,#0,#132,FILE_NAME
	MOVC5	#0,NULL,#0,#132,DESC_NAME
	MOVAL	FILE_DESC,R8
	MOVAL	FILE_NAME,R7
;	REGESTER ALLOCATION
;	R11	POINTER TO INPUT STRING
;	R10	POINTER TO INPUT STRING DESCRIPTER
;	R9	NUMBER OF CHRS IN INPUT STRING
;	R8	OUTPUT STRING CHR COUNTER
;	R7	OUTPUT STRING POINTER
1$:	MOVB	(R11)+,R0	;GET CHR
	CMPB	#^A/ /,R0	;IFF BLANK-SKIP
	BEQL	10$
	CMPB	#9,R0		;DIITO FOR TAB
	BEQL	10$
;	LOOK FOR "(" OR "/"
	CMPB	#^A/(/,R0	;START OF LIBRARY MODULE ??
	BNEQ	2$
	MOVAL	DESC_NAME,R7
	MOVAL	MODULE_DESC,R8
	BRB	30$		;GO GET MODULE NAME
2$:	CMPB	#^A?/?,R0	;START OF SWITCH??
	BEQL	70$
	MOVB	R0,(R7)+	;LOAD CHR
	INCL	(R8)		;BUMP COUNTER
10$:	SOBGTR	R9,1$		;REPEAT UNTILL DONE
	BRW	100$
20$:	MOVB	(R11)+,R0	;GET NEXT MODULE CHR NAME
	CMPB	#^A/ /,R0	;IFF BLANK-SKIP
	BEQL	30$
	CMPB	#9,R0		;DIITO FOR TAB
	BEQL	30$
;	LOOK FOR CLOSEING ")"
	CMPB	#^A/)/,R0
	BEQL	69$
	MOVB	R0,(R7)+
	INCL	(R8)
30$:	SOBGTR	R9,20$
	BRW	100$
69$:	DECL	R9
	BEQL	100$
	MOVB	(R11)+,R0	;SEE IF FOLLOWING CHR IS "/"
	BEQL	100$
	CMPB	#^A/ /,R0
	BEQL	69$
	CMPB	#9,R0
	BEQL	69$
	CMPB	#^A?/?,R0
	BNEQ	100$
70$:	;NEXT NON BLANK CHR MUST BE EITHER N (NO LIST) OR L (LIST)
	DECL	R9
	BEQL	100$
	MOVB	(R11)+,R0
	CMPB	#^A/ /,R0
	BEQL	70$
	CMPB	#9,R0
	BEQL	70$
	CMPB	#^A/N/,R0	;IS IT /NOLIST
	BNEQ	100$
	INCL	LIST_FLAG	;SET NOLIST FLAG
100$:	TSTL	FILE_DESC	;WAS A FILE SPECIFIED
	BNEQ	150$		;YES
	TSTL	MODULE_DESC	;WAS A LIB MODULE SPECIFED
	BEQL	101$
	JMP	SEARCH_LIBS		;YES MUST SEARCH FOR CONTAINING FILE
;ERROR CONDITION-NO FILE AND NO MODULE SPECIFIED
101$:	PUSHAL	INCLUDE_SYNTAX_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	$EXIT_S
150$:	TSTL	MODULE_DESC	;LIB SPECIFIED
	BEQL	149$
	JMP	SPECIFIED_LIB	;FIND MODULE IN SPECIFIED LIBRARY
;	INCLUDE FILE NOT A LIBRARY
;	OPEN STRAIGHT FILE
149$:	INCL	INCLUDE_LEVEL
	MOVL	INCLUDE_LEVEL,R10
	MOVL	INCLUDE_STACK[R10],R11
	$FAB_STORE	FAB=INCLUDE_FAB(R11)-		;UPDATE INPUT FILE CONTROL
			DNA=DEF_IN_NAME-	;BLOCKS
			DNS=#DEF_IN_NAME_SIZE-
			FAC=<BRO,GET>-
			FNA=FILE_NAME-
			FNS=FILE_DESC-
			FOP=<SQO>-
			MRS=#132-
			ORG=SEQ-
			RFM=VAR-
			SHR=<GET>
	$RAB_STORE	RAB=INCLUDE_RAB(R11)-
			FAB=INCLUDE_FAB(R11)-
			RAC=SEQ-
			RSZ=#132-
			UBF=INPUT_BUFFER-
			USZ=#132
	CLRB	INCLUDE_TYPE(R11)
	CVTLB	DEFFERED_END_OF_FILE,INCLUDE_DEFFERED_EOF(R11)
	CLRL	DEFFERED_END_OF_FILE
	CVTBL	INPUT_BUFFER_FLAG,INCLUDE_INPUT_BUFFER_FLAG(R11)
	CLRL	INPUT_BUFFER_FLAG
	MOVC3	#132,INPUT_BUFFER,INCLUDE_INPUT_BUFFER(R11)
	MOVC5	#0,NULL,#0,#132,INPUT_BUFFER
	CLRB	INCLUDE_LIST(R11)
	BITL	#NO_SOURCE_FLAG,FLAG_WORD
	BNEQ	151$
	TSTL	LIST_FLAG
	BEQL	152$
	BRB	1151$
151$:	INCL	INCLUDE_LIST(R11)
1151$:	BISL	#NO_SOURCE_FLAG,FLAG_WORD
152$:	$OPEN	FAB=INCLUDE_FAB(R11)			;OPEN INPUT FILE
	BLBS	R0,153$				;CHECK FOR EROR
	PUSHR	#^M<R0>
	PUSHAL	INCLUDE_OPEN_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
153$:	$CONNECT	RAB=INCLUDE_RAB(R11)
	BLBS	R0,104$
	PUSHR	#^M<R0>
	PUSHAL	INCLUDE_CONNECT_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
104$:	RET
SPECIFIED_LIB:
;	OPEN THE EXACTLY SPECIFIED LIBRARY
	INCL	INCLUDE_LEVEL
	MOVL	INCLUDE_LEVEL,R10
	MOVL	INCLUDE_STACK[R10],R11
	MOVB	#1,INCLUDE_TYPE(R11)
	CVTLB	DEFFERED_END_OF_FILE,INCLUDE_DEFFERED_EOF(R11)
	CLRL	DEFFERED_END_OF_FILE
	CVTBL	INPUT_BUFFER_FLAG,INCLUDE_INPUT_BUFFER_FLAG(R11)
	CLRL	INPUT_BUFFER_FLAG
	MOVC3	#132,INPUT_BUFFER,INCLUDE_INPUT_BUFFER(R11)
	MOVC5	#0,NULL,#0,#132,INPUT_BUFFER
	CLRB	INCLUDE_LIST(R11)
	BITL	#NO_SOURCE_FLAG,FLAG_WORD
	BNEQ	151$
	TSTL	LIST_FLAG
	BEQL	152$
	BRB	1151$
151$:	INCL	INCLUDE_LIST(R11)
1151$:	BISL	#NO_SOURCE_FLAG,FLAG_WORD
152$:	PUSHAL	LBR_TYPE
	PUSHAL	LBR_FUNC
	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#3,G^LBR$INI_CONTROL
	BLBS	R0,153$
	PUSHR	#^M<R0>
	PUSHAL	INCLUDE_LIB_INI_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
153$:	PUSHAL	DEF_DNS
	PUSHAL	CRE_OPT
	PUSHAL	FILE_DESC
	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#4,G^LBR$OPEN
	BLBS	R0,154$
	PUSHR	#^M<R0>
	PUSHAL	INCLUDE_LIB_OPEN_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
154$:	PUSHAL	INCLUDE_RFA(R11)
	PUSHAL	MODULE_DESC
	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#3,G^LBR$LOOKUP_KEY
	BLBS	R0,155$
	PUSHR	#^M<R0>
	PUSHAL	INCLUDE_LIB_LOOKUP_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
155$:	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#1,G^LBR$SET_MOVE
	RET
SEARCH_LIBS:
;	SCAN LIBRARIES IN ORDER FOR WANTED MODULE
;	ORDER OF SEARCH IS
;		DECLARED LIBRARIES IN ORDER OF APPEARANCE IN COMMAND LINE
;		PROCESS/GROUP/SYSTEM DECLARED LOGICAL NAME FORT$LIBRARY(FIRST
;			OCCOURANCE ONLY)
;		SYS$LIBRARY:FORSYSDEF.TLB
;
	INCL	INCLUDE_LEVEL
	MOVL	INCLUDE_LEVEL,R10
	MOVL	INCLUDE_STACK[R10],R11
	MOVB	#1,INCLUDE_TYPE(R11)
	CVTLB	DEFFERED_END_OF_FILE,INCLUDE_DEFFERED_EOF(R11)
	CLRL	DEFFERED_END_OF_FILE
	CVTBL	INPUT_BUFFER_FLAG,INCLUDE_INPUT_BUFFER_FLAG(R11)
	CLRL	INPUT_BUFFER_FLAG
	MOVC3	#132,INPUT_BUFFER,INCLUDE_INPUT_BUFFER(R11)
	MOVC5	#0,NULL,#0,#132,INPUT_BUFFER
	CLRB	INCLUDE_LIST(R11)
	BITL	#NO_SOURCE_FLAG,FLAG_WORD
	BNEQ	151$
	TSTL	LIST_FLAG
	BEQL	152$
	BRB	1151$
151$:	INCL	INCLUDE_LIST(R11)
1151$:	BISL	#NO_SOURCE_FLAG,FLAG_WORD
152$:;	SET UP TO LOOP THROUGH LIST OF LIBRARIES
	MOVAL	LIB_SPEC_QUEUE,R11	;GET POINTER TO QUEUE HEADER
	MOVL	R11,R10			;SET UP TO SCAN QUEUE
200$:	MOVL	(R10),R10		;GET NEXT ENTRY
	CMPL	R10,R11			;ARE WE DONE
	BEQL	300$			;YES-TRY NEXT OPTION
	MOVAL	12(R10),DESC_ARG+4	;SET UP TO TRY AND OPEN THIS LIB
	MOVL	8(R10),DESC_ARG
	PUSHAL	DESC_ARG
	CALLS	#1,OPEN_LIB		;ATTEMPT TO OPEN
	BLBC	R0,200$			;NOPE-TRY NEXT
	RET				;DONE-RETURN
300$:					;TRY "FORT$LIBRARY"
	PUSHAL	FORT_LIB
	CALLS	#1,OPEN_LIB
	BLBC	R0,350$			;NOPE-NOT THERE
	RET
350$:
	PUSHAL	SYS_LIB
	CALLS	#1,OPEN_LIB
	BLBC	R0,400$			;OOPS-NOT TO BE FOUND
	RET
400$:	PUSHAL	INCLUDE_UNK_MOD
	CALLS	#1,G^LIB$PUT_OUTPUT
	$EXIT_S
;	CALL OPEN_LIB(FILE_NAME_DESCR)
;	MODULE_DESC THE DESCRIPER OF MODULE TO BE FOUND
	.ENTRY	OPEN_LIB,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
	MOVL	INCLUDE_LEVEL,R10
	MOVL	INCLUDE_STACK[R10],R11
	PUSHAL	LBR_TYPE
	PUSHAL	LBR_FUNC
	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#3,G^LBR$INI_CONTROL
	BLBS	R0,153$
	CLRL	R0
	RET
153$:	PUSHAL	DEF_DNS
	PUSHAL	CRE_OPT
	PUSHAL	@4(AP)
	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#4,G^LBR$OPEN
	BLBS	R0,154$
	CLRL	R0
	RET
154$:	PUSHAL	INCLUDE_RFA(R11)
	PUSHAL	MODULE_DESC
	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#3,G^LBR$LOOKUP_KEY
	BLBS	R0,155$
	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#1,G^LBR$CLOSE
	CLRL	R0
	RET
155$:	PUSHAL	INCLUDE_INDEX(R11)
	CALLS	#1,G^LBR$SET_MOVE
	MOVL	#1,R0
	RET
	.PSECT	IMPURE_DATA
DESC_ARG:	.LONG	0,0
FILE_DESC:	.LONG	0
	.ADDRESS	FILE_NAME
MODULE_DESC:	.LONG	0
	.ADDRESS	DESC_NAME
FILE_NAME:.BLKB	132
DESC_NAME:.BLKB	132
LIST_FLAG:.LONG	0
	.PSECT	PURE_DATA
INCLUDE_UNK_MOD:
	.ASCID	/INDEX-F-INCLUDE Unknown Module Name/
INCLUDE_LIB_LOOKUP_ERROR:
	.ASCID	/INDEX-F-INCLUDE Unable To Find Module In Library/
INCLUDE_LIB_OPEN_ERROR:
	.ASCID	/INDEX-F-INCLUDE Unable To Open Library File/
INCLUDE_LIB_INI_ERROR:
	.ASCID	/INDEX-F-INCLUDE Library File Initialization Error/
INCLUDE_SYNTAX_ERROR:
	.ASCID	/INDEX-F-INCLUDE File Specification Syntax Error/
INCLUDE_NEST_ERROR:
	.ASCID	/INDEX-F-INCLUDE Nested Too Deep/
INCLUDE_OPEN_ERROR:
	.ASCID	/INDEX-F-INCLUDE Open File Error/
INCLUDE_CONNECT_ERROR:
	.ASCID	/INDEX-F-INCLUDE Connect File Error/
FORT_LIB:	.ASCID	/FORT$LIBRARY/
SYS_LIB:	.ASCID	/SYS$LIBRARY:FORSYSDEF.TLB/
LBR_TYPE:	.LONG	LBR$C_TYP_TXT
LBR_FUNC:	.LONG	LBR$C_READ
CRE_OPT:	.REPEAT	20
		.LONG	0
		.ENDR
DEF_DNS:	.ASCID	/.TLB/
	.END
