	.TITLE	ENTRY_INDEX
	.SUBTITLE	DATA  STORAGE AREA
	.ENABLE	DEBUG
	.PSECT	IMPURE_DATA,RD,WRT,NOSHR,NOEXE,CON,GBL,LONG
ARG1:	.LONG	0
ARG2:	.LONG	0
OUTPUT_LINE:
	.BLKB	132
OUTPUT_STRING:
	.LONG	0,0
LINE_COUNT:
	.LONG	0
CHAR_COUNT:
	.LONG	0
NUMBER:	.LONG	0
TREE_QUEUE:
	.ADDRESS	0,0
LEVEL:	.LONG	0
OVERFLOW:
	.LONG	0
RECURSION:
	.LONG	0
	.PSECT	PURE_DATA,RD,NOWRT,SHR,NOEXE,CON,GBL
CODE_1:	.LONG	1                                                               ;V1.4
CODE_2:	.LONG	2                                                               ;V1.4
CODE_3:	.LONG	3                                                               ;V1.4
CODE_4:	.LONG	4                                                               ;V1.4
CODE_5:	.LONG	5                                                               ;V1.4
T1:	.ASCID	/    IS DEFINED IN MODULE /
T1A:	.ASCID	/ ??????/
T2:	.ASCID	/              CALLS ROUTINES /
T3:	.ASCID	/              CALLED BY ROUTINES /
VM_ARG:	.LONG	2
	.ADDRESS	ARG1,ARG2
SUPER_REWIND_ERROR:
	.ASCID	/INDEX-F-Rewind Super Index Scratch File Error/
ENTRY_REWIND_ERROR:
	.ASCID	/INDEX-F-Rewind Entry Index Scratch File Error/
ENTRY_READ_ERROR:
	.ASCID	/INDEX-F-Read Entry Scratch File Error/
SUPER_READ_ERROR:
	.ASCID	/INDEX-F-Read Super Scratch File Error/
	.PAGE
	.SUBTITLE	INITALIZE ENTRY POINT
	.PSECT	CODE,RD,NOWRT,SHR,EXE,GBL,CON
	.ENTRY	DUMP_ENTRY_INDEX,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
	PUSHAL	TIME_COMMAND                                                    ;V1.4
	PUSHAL	CODE_1                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_COMMAND+8                                                  ;V1.4
	PUSHAL	CODE_2                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_COMMAND+12                                                 ;V1.4
	PUSHAL	CODE_3                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_COMMAND+16                                                 ;V1.4
	PUSHAL	CODE_4                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_COMMAND+20                                                 ;V1.4
	PUSHAL	CODE_5                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	CALLG	NULL,G^LIB$INIT_TIMER                                           ;V1.4
	$REWIND	RAB=SUPER_INDEX_RAB	;REWIND THE SCRATCH FILES
	BLBS	R0,1$
	PUSHR	#^M<R0>
	PUSHAL	SUPER_REWIND_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
1$:	$REWIND	RAB=ENTRY_INDEX_RAB
	BLBS	R0,2$
	PUSHR	#^M<R0>
	PUSHAL	ENTRY_REWIND_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
2$:
;	SYMBOL TABLE IS IN AN EMPTY CONDITION
	PUSHAL	DAY_TIME
	CALLS	#1,G^LIB$DATE_TIME	;GET CURRENT TIME FOR HEADER
	CLRL	LINES_ON_PAGE
	MOVL	#ENTRY_OUTPUT,STATUS_WORD
	MOVL	#132,LINE_COUNT
	MOVAL	OUTPUT_LINE,OUTPUT_STRING+4
	BITL	#NARROW_FLAG,FLAG_WORD
	BEQL	3$
	MOVL	#80,LINE_COUNT
3$:
;
;	DATA STORAGE ELEMENT IN THE ENTRY INDEX QUEUE LIST
;	IS AS FOLLOWS
;
;	SYMBOL_TABLE_QUEUE POINTS TO SYMBOL ELEMENTS
;
;	----------------------------------
;	!POINTER TO NEXT SYMBOL          ! 0
;	----------------------------------
;	!POINTER TO LAST SYMBOL          ! 4
;	----------------------------------
;	!POINTER TO FIRST CALLS   ELEMENT! 8
;	----------------------------------
;	!POINTER TO LAST CALLS   ELEMENT !12
;	----------------------------------
;	!POINTER TO FIRST CALL BY ELEMENT!16
;	----------------------------------
;	!POINTER TO LAST CALL BY ELEMENT !20
;	----------------------------------
;	!SYMBOL (NULL PADDED)    !LENGTH !<= ONE BYTE 24-25
;	----------------------------------
;	!31 BYTES LONG                   !
;
;	!                                !
;	----------------------------------
;	!DEFINEING-MODULE NAME    !LENGTH!<=ONE BYTE 56-56
;	----------------------------------
;	!NULL PADDED-EMPTY IF NOT DEFINED!
;
;	!                                !
;	----------------------------------
;	LENGTH=88 BYTES
;
;	CALLS/CALLED BY ELEMENTS
;	----------------------------------
;	!POINTER TO NEXT                 ! 0
;	----------------------------------
;	!POINTER TO LAST                 ! 4
;	----------------------------------
;	!E.P.     NAME(NULL PADDED)!LENGTH! 8-9<= ONE BYTE
;	----------------------------------
;	!31 BYTES LONG                   !
;
;	!                                !
;	----------------------------------
;	LENGTH=40 BYTES
;
	.PAGE
	.SUBTITLE	BUILD ENTRY INDEX SYMBOL TABLE-ENTER ENTRY POINTS
TABLE_BUILD_LOOP:
	$GET	RAB=ENTRY_INDEX_RAB
	BLBS	R0,1$
	CMPL	#RMS$_EOF,R0	;RAN OUT OF DATA-GO OUTPUT IT
	BNEQ	2$
	JMP	CHECK_UNDEFINED
2$:	PUSHR	#^M<R0>
	PUSHAL	ENTRY_READ_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
1$:	MOVAL	SYMBOL_TABLE_QUEUE,R11	;GET QUEUE HEADER
	MOVL	R11,R10			;WORK WITH COPY OF POINTER
FIND_SYMBOL_LOOP:
	MOVL	(R10),R10		;CHECK NEXT SYMBOL
	CMPL	R10,R11			;SEE IF COMPLETED SCAN AND NOT HERE
	BNEQ	111$
	JMP	ADD_SYMBOL_ON_END
111$:	CMPC3	#31,25(R10),ENTRY_BUFFER+1
	BLSS	FIND_SYMBOL_LOOP	;NOT THERE YET
	BNEQ	1$			;NOT IN QUEUE-MUST INSERT
	JMP	FOUND_SYMBOL		;FOUND SYMBOL IN TABLE
;	SYMBOL NOT IN TABLE-INSERT PRECEEDING CURRENT ELEMENT
1$:	MOVL	#88,ARG1
	INCL	SYMBOLS_PROCESSED                                               ;V1.4
	CALLG	VM_ARG,ALLOCATE
2$:	MOVAL	8(R0),8(R0)		;INIT THE CALL/CALLED BY QUEUES
	MOVL	8(R0),12(R0)
	MOVAL	16(R0),16(R0)
	MOVL	16(R0),20(R0)
	MOVL	4(R10),R9		;GET ADDRESS OF PREDISESSOR
	INSQUE	(R0),(R9)		;INSTALL IN QUEUE
	MOVL	R0,R10			;INSTALL AS SYMBOL BEING EXAMINED
	MOVC3	#64,ENTRY_BUFFER,24(R0)	;LOAD THE SYMBOL LENGTH AND STRING
	BRW	FOUND_SYMBOL		;GO HANDLE USED IN BLOCK
ADD_SYMBOL_ON_END:
;	SYMBOL NOT IN TABLE-ADD ON END
	MOVL	#88,ARG1
	INCL	SYMBOLS_PROCESSED                                               ;V1.4
	CALLG	VM_ARG,ALLOCATE
	MOVAL	8(R0),8(R0)		;INIT THE CALL/CALLED BY QUEUES
	MOVL	8(R0),12(R0)
	MOVAL	16(R0),16(R0)
	MOVL	16(R0),20(R0)
	INSQUE	(R0),@SYMBOL_TABLE_QUEUE+4;PUT ON END OF QUEUE
	MOVL	R0,R10
	MOVC3	#64,ENTRY_BUFFER,24(R0)	;LOAD THE SYMBOL LENGTH AND STRING
FOUND_SYMBOL:
;	R10 POINTS TO SYMBOL QUEUE ELEMENT
;	NOW SEE IF ENTRY POINT HAS BEEN DEFINED YET
	TSTB	56(R10)
	BEQL	2$
	JMP	TABLE_BUILD_LOOP	;YES-DONE ENTERING ENTRY POINT
2$:	TSTB	ENTRY_BUFFER+32		;IS NEW ENTRY A DEFINEING ONE??
	BNEQ	1$
	JMP	TABLE_BUILD_LOOP	;NO
1$:	MOVC3	#32,ENTRY_BUFFER+32,56(R10);LOAD DEFINEING MODULE NAME
	BRW	TABLE_BUILD_LOOP	;GET NEXT ENTRY POINT
	.PAGE
	.SUBTITLE	SCAN LIST OF ENTRY POINTS FOR UNDEFINED NAMES
CHECK_UNDEFINED:
	BITL	#NOLIB_FLAG,FLAG_WORD	;SEE IF CHECK HAS TO BE DONE
	BNEQ	1$
	JMP	DO_CALL_CALLED_BY
1$:	MOVAL	SYMBOL_TABLE_QUEUE,R11
	MOVL	R11,R10
2$:	MOVL	(R10),R10	;GET NEXT TEST SYMBOL
	CMPL	R10,R11		;END TEST
	BNEQ	3$
	JMP	DO_CALL_CALLED_BY
3$:	TSTB	56(R10)		;CHECK DEFINEING MODULE NAME
	BNEQ	2$		;DEFINED-PROCEED TO NEXT
	LOCC	#^A/$/,#31,25(R10)	;FIRST SCANN FOR PRESENCE OF
					;DOLLAR SIGN
	BNEQ	100$			;FOUND	$ DUMP IT
;	MUST CHECK LIST OF KNOWN FORTRAN ROUTINES
;	SET UP POINTER TO TABLE OF DESCRIPTERS
;	AND COUNTER
	CVTBL	24(R10),R6		;GET LENGTH OF STRING
	MOVAL	LIBRARY_POINTER_TABLE,R9
	MOVL	#NUMBER_OF_LIBRARY,R8
;	NOW LOOP
10$:	CVTWL	(R9),R7			;GET LENGTH
	CMPC5	R7,@4(R9),#0,R6,25(R10)	;COMPARE TWO STRINGS
	BEQL	100$			;ITS A HIT
	ADDL2	#8,R9			;ADVANCE TO NEXT DESCRIPTER
	SOBGTR	R8,10$
;	ITS A MISS
	BRW	2$			;CONTINUE TO NEXT SYMBOL
100$:
;	REMOVE THIS ELEMENT FROM TABLE
	REMQUE	(R10),ARG2
	MOVL	4(R10),R10	;LOAD PREDISESSOR AS CURRENT ELEMENT
;	AND RETURN TO FREE STORAGE
	MOVL	#88,ARG1
	CALLG	VM_ARG,FREE
	BRW	2$
	.PAGE
	.SUBTITLE	LOAD CALL/CALLED BY QUEUES
DO_CALL_CALLED_BY:
	$GET	RAB=SUPER_INDEX_RAB
	BLBS	R0,1$
	CMPL	#RMS$_EOF,R0	;RAN OUT OF DATA-GO OUTPUT IT
	BNEQ	2$
	JMP	DO_ENTRY_OUTPUT
2$:	PUSHR	#^M<R0>
	PUSHAL	SUPER_READ_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
1$:	BITL	#NOLIB_FLAG,FLAG_WORD
	BEQL	4$
;	CHECK TO SEE IF SYMBOL ACTUALLY EXISTS IN E.P. TABLE
	MOVAL	SYMBOL_TABLE_QUEUE,R11
	MOVL	R11,R10
3$:	MOVL	(R10),R10	;CHECK NEXT SYMBOL
	CMPL	R10,R11		;SEE IF DONE
	BEQL	DO_CALL_CALLED_BY;DONE-NOT HERE-FORGET IT
	CMPC3	#32,SUPER_BUFFER,24(R10)
	BNEQ	3$	;NOT YET
;	SYMBOL IS LEGAL E.P.-PUT IT IN THE TABLE
4$:	MOVAL	SYMBOL_TABLE_QUEUE,R11	;GET QUEUE HEADER
	MOVL	R11,R10			;WORK WITH COPY OF POINTER
	CLRL	R8			;FLAG FOR GETTING CALLED/CALLING
;	NOW SCAN DOWN THROUGH USED IN ELEMENTS FOR THAT SYMBOL
LOCATE_SYMBOL_LOOP:
	MOVL	(R10),R10
	CMPL	R10,R11
	BEQL	DO_CALL_CALLED_BY
;	CHECK ON MODULE NAME = SYMBOL TABLE NAME
	CMPC3	#32,24(R10),SUPER_BUFFER+32
	BNEQ	100$	;NO-NOT CALLS ENTRY
;	LOAD SYMBOL ALPHABETICALLY IN CALLS QUEUE FOR THIS SYMBOL
	MOVAL	8(R10),R6	;GET CALLS QUEUE HEADER
	MOVL	R6,R7
10$:	MOVL	(R7),R7		;GET NEXT
	CMPL	R7,R6
	BEQL	50$		;ADD ON END
	CMPC3	#31,9(R7),SUPER_BUFFER+1
	BLSS	10$		;NOT THERE YET
;	ADD TO PREDICESSOR
	MOVL	#40,ARG1
	INCL	HOW_USED_PROCESSED                                              ;V1.4
	CALLG	VM_ARG,ALLOCATE
	MOVL	4(R7),R6	;GET PREDISESSOR
	INSQUE	(R0),(R6)	;AND INSTALL IT
	MOVC3	#32,SUPER_BUFFER,8(R0)
	INCL	R8		;BUMP COUNTER
	BRB	100$
50$:	;ADD TO END
	MOVL	#40,ARG1
	INCL	HOW_USED_PROCESSED                                              ;V1.4
	CALLG	VM_ARG,ALLOCATE
	INSQUE	(R0),@12(R10)	;ADD TO END
	MOVC3	#32,SUPER_BUFFER,8(R0)
	INCL	R8
100$:;	CHECK ON E.P. NAME=SYMBOL
	CMPC3	#32,24(R10),SUPER_BUFFER
	BNEQ	200$	;NO NOT CALLED BY
	MOVAL	16(R10),R6	;GET CALLED QUEUE HEADER
	MOVL	R6,R7
110$:	MOVL	(R7),R7		;GET NEXT
	CMPL	R7,R6
	BEQL	150$		;ADD ON END
	CMPC3	#31,9(R7),SUPER_BUFFER+33
	BLSS	110$		;NOT THERE YET
;	ADD TO PREDICESSOR
	MOVL	#40,ARG1
	INCL	HOW_USED_PROCESSED                                              ;V1.4
	CALLG	VM_ARG,ALLOCATE
	MOVL	4(R7),R6	;GET PREDISESSOR
	INSQUE	(R0),(R6)	;AND INSTALL IT
	MOVC3	#32,SUPER_BUFFER+32,8(R0)
	INCL	R8		;BUMP COUNTER
	BRB	200$
150$:	;ADD TO END
	MOVL	#40,ARG1
	INCL	HOW_USED_PROCESSED                                              ;V1.4
	CALLG	VM_ARG,ALLOCATE
	INSQUE	(R0),@20(R10)	;ADD TO END
	MOVC3	#32,SUPER_BUFFER+32,8(R0)
	INCL	R8
200$:	CMPL	#2,R8	;DONE YET
	BEQL	210$
	JMP	LOCATE_SYMBOL_LOOP
210$:	JMP	DO_CALL_CALLED_BY
	.PAGE
	.SUBTITLE	BASIC ENTRY POINT CALLS/CALLED BY LISTING
DO_ENTRY_OUTPUT:
	PUSHAL	TIME_PARSE                                                      ;V1.4
	PUSHAL	CODE_1                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_PARSE+8                                                    ;V1.4
	PUSHAL	CODE_2                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_PARSE+12                                                   ;V1.4
	PUSHAL	CODE_3                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_PARSE+16                                                   ;V1.4
	PUSHAL	CODE_4                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_PARSE+20                                                   ;V1.4
	PUSHAL	CODE_5                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	CALLG	NULL,G^LIB$INIT_TIMER                                           ;V1.4
	MOVAL	SYMBOL_TABLE_QUEUE,R11	;INIT THE WHOLE PRINTOUT
	MOVL	R11,R10
BASIC_OUTPUT_LOOP:
	MOVL	(R10),R10	;NEXT ENTRY POINT
	CMPL	R10,R11
	BNEQ	11$
	JMP	TRY_CALLING_TREE
11$:
;	BASIC ENTRY POINT LISTING HAS THE FORM
;	LINE 1		symbol [IS DEFINED IN MODULE (xxxxxx|?????)
;	LINE 2			CALLS ROUTINES
;	LINE 3			list of routines called
;	LINE 4			IS CALLED BY ROUTINES
;	LINE 5			lis of routines called by
;
;	INSERT PRECEEDING BLANK LINE
	MOVB	#^A/ /,OUTPUT_LINE
	CLRL	OUTPUT_LINE+1
	MOVL	#1,OUTPUT_STRING
	MOVAL	OUTPUT_LINE,OUTPUT_STRING+4
	PUSHAL	OUTPUT_STRING
	CALLS	#1,PRINT_LINE
;	FIRST LINE-GET THE SYMBOL
	CVTBL	24(R10),R9	;GET THE LENGTH
	MOVC3	R9,25(R10),OUTPUT_LINE	;PUT THE SYMBOL
	MOVAL	OUTPUT_LINE,OUTPUT_STRING
	MOVL	R9,OUTPUT_STRING	;INIT THE DESCRIPTER
	CMPC3	#32,24(R10),56(R10)	;DEFINES SELF
	BEQL	1$			;YES
;	NO-MUST OUTPUT DEFINEING MODULE NAME
	MOVL	OUTPUT_STRING,R6
	CVTWL	T1,R7			;GET TITE LENGTH
	MOVC3	R7,@T1+4,OUTPUT_LINE(R6);STORE THE TITLE
	ADDL2	R7,OUTPUT_STRING
	ADDL2	R7,R6			;UPDATE CHR COUNTER
	CVTBL	56(R10),R7		;GET MODULE NAME LENGTH
	BEQL	2$			;EMPTY MODULE NAME-NOT DEFINED
	MOVC3	R7,57(R10),OUTPUT_LINE(R6);COPY DEFINEING MODULE NAME
	ADDL2	R7,OUTPUT_STRING
	BRB	1$
2$:	CVTWL	T1A,R7			;GET THE ?????
	MOVC3	R7,@T1A+4,OUTPUT_LINE(R6)
	ADDL2	R7,OUTPUT_STRING	;UDATE STRING LENGTH
1$:	PUSHAL	OUTPUT_STRING
	CALLS	#1,PRINT_LINE		;OUTPUT LINE 1
;	SEE IF ANY CALLS
	MOVAL	8(R10),R0
	CMPL	8(R10),R0
	BNEQ	1011$
	JMP	200$			;NO-CALLS QUEUE IS EMPTY-SKIP THIS SECT
1011$:	PUSHAL	T2			;YES-PRINT SECOND TITLE
	CALLS	#1,PRINT_LINE
	MOVAL	8(R10),R9		;GET CALLS QUEUE HEADER
	MOVL	R9,R8
	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE
	MOVC5	#0,NULL,#^A/ /,#12,OUTPUT_LINE	;INIT THE OUTPUT LINE
	MOVL	#12,OUTPUT_STRING
	MOVAL	OUTPUT_LINE,OUTPUT_STRING+4
	SUBL3	#12,LINE_COUNT,CHAR_COUNT
101$:	MOVL	(R8),R8	;NEXT CALL
	CMPL	R8,R9
	BNEQ	111$
	JMP	150$
111$:	CVTBL	8(R8),R7	;GET LENGTH OF CALLS-SYMBOL
	ADDL3	#3,R7,R6	;ACCOUNT FOR 3 LEADING BLANKS
	CMPL	R6,CHAR_COUNT	;SEE IF ROOM LEFT
	BLEQ	102$		;YES
	PUSHAL	OUTPUT_STRING	;LINE IS FULL-PRINT IT
	CALLS	#1,PRINT_LINE
	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE
	MOVC5	#0,NULL,#^A/ /,#12,OUTPUT_LINE
	MOVL	#12,OUTPUT_STRING
	MOVAL	OUTPUT_LINE,OUTPUT_STRING+4
	SUBL3	#12,LINE_COUNT,CHAR_COUNT
102$:	CVTWL	OUTPUT_STRING,R6;GET OFFSET TO START STORE
	MOVC5	#0,NULL,#^A/ /,#3,OUTPUT_LINE(R6)	;INSERT BLANKS
	ADDL2	#3,OUTPUT_STRING
	ADDL2	#3,R6
	SUBL2	#3,CHAR_COUNT
	MOVC3	R7,9(R8),OUTPUT_LINE(R6)	;OUTPUT THE SYMBOL
	ADDL2	R7,OUTPUT_STRING
	SUBL2	R7,CHAR_COUNT
	BRW	101$				;GET NEXT SYMBOL
150$:	PUSHAL	OUTPUT_STRING	;LINE IS FULL-PRINT IT
	CALLS	#1,PRINT_LINE
;NOW WORK ON CALLED BY SECTION
200$:	MOVAL	16(R10),R0
	CMPL	16(R10),R0
	BNEQ	211$
	JMP	BASIC_OUTPUT_LOOP			;NO-CALLS QUEUE IS EMPTY-SKIP THIS SECT
211$:	PUSHAL	T3			;YES-PRINT THIRD TITLE
	CALLS	#1,PRINT_LINE
	MOVAL	16(R10),R9		;GET CALLS QUEUE HEADER
	MOVL	R9,R8
	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE
	MOVC5	#0,NULL,#^A/ /,#12,OUTPUT_LINE	;INIT THE OUTPUT LINE
	MOVL	#12,OUTPUT_STRING
	MOVAL	OUTPUT_LINE,OUTPUT_STRING+4
	SUBL3	#12,LINE_COUNT,CHAR_COUNT
201$:	MOVL	(R8),R8	;NEXT CALL
	CMPL	R8,R9
	BNEQ	212$
	JMP	250$
212$:	CVTBL	8(R8),R7	;GET LENGTH OF CALLS-SYMBOL
	ADDL3	#3,R7,R6	;ACCOUNT FOR 3 LEADING BLANKS
	CMPL	R6,CHAR_COUNT	;SEE IF ROOM LEFT
	BLEQ	202$		;YES
	PUSHAL	OUTPUT_STRING	;LINE IS FULL-PRINT IT
	CALLS	#1,PRINT_LINE
	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE
	MOVC5	#0,NULL,#^A/ /,#12,OUTPUT_LINE
	MOVL	#12,OUTPUT_STRING
	MOVAL	OUTPUT_LINE,OUTPUT_STRING+4
	SUBL3	#12,LINE_COUNT,CHAR_COUNT
202$:	CVTWL	OUTPUT_STRING,R6;GET OFFSET TO START STORE
	MOVC5	#0,NULL,#^A/ /,#3,OUTPUT_LINE(R6)	;INSERT BLANKS
	ADDL2	#3,OUTPUT_STRING
	ADDL2	#3,R6
	SUBL2	#3,CHAR_COUNT
	MOVC3	R7,9(R8),OUTPUT_LINE(R6)	;OUTPUT THE SYMBOL
	ADDL2	R7,OUTPUT_STRING
	SUBL2	R7,CHAR_COUNT
	BRW	201$				;GET NEXT SYMBOL
250$:
	PUSHAL	OUTPUT_STRING	;LINE IS FULL-PRINT IT
	CALLS	#1,PRINT_LINE
	BRW	BASIC_OUTPUT_LOOP
	.PAGE
	.SUBTITLE	GENERATE CALLING TREE
TRY_CALLING_TREE:
	BITL	#CALLING_TREE_FLAG,FLAG_WORD	;AS CALLING TREE ASED FOR
	BNEQ	1$				;NO
	JMP	TRY_CALLED_TREE
1$:	CLRL	LINES_ON_PAGE			;SET UP FOR NEW PAGE AND TITLE
	MOVL	#CALLING_OUTPUT,STATUS_WORD
	CLRL	LEVEL				;LEVEL IS ZERO
	MOVAL	TREE_QUEUE,TREE_QUEUE		;INIT TREE RECURSION CHECK QUEUE
	MOVL	TREE_QUEUE,TREE_QUEUE+4
	MOVAL	SYMBOL_TABLE_QUEUE,R11		;SET UP FOR SCANN FOR TOP LEVEL
						;MODULES
	MOVL	R11,R10
CALLING_TOP_LEVEL_LOOP:
	MOVL	(R10),R10			;NEXT SYMBOL PLEASE
	CMPL	R10,R11				;CHECK FOR DONE
	BNEQ	1$
	JMP	TRY_CALLED_TREE			;DONE THIS TREE-TRY NEXT
1$:	MOVAL	16(R10),R9			;SEE IF ANY CALLED BY
	CMPL	16(R10),R9
	BNEQ	CALLING_TOP_LEVEL_LOOP		;NOT A TOP SYMBOL
;	FOUND A ROOT MODULE-START FROM HERE
;	CALL RECUSRIVE ROUTINE TO OUTPUT THIS SYMBOL AND ALL BELOW IT
	CALLG	NULL,SCAN_CALLING_SYMBOL
	BRW	CALLING_TOP_LEVEL_LOOP
	.ENTRY	SCAN_CALLING_SYMBOL,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
;
;	ARGUMENTS PASSED
;	R10 POINTS TO NEW SYMBOL TO OUTPUT AND WHOS CALLING ROUTINES TO OUTPUT
;	LEVEL CURRENT CALLING LEVEL
;	TREE_QUEUE	QUEUE OF SYMBOLS IN LINE TO MAIN ROUTINE-TO CHECK
;			FOR RECURSION
;
;	OUTPUT THE SYMBOL WITH LEADING DOTS
	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE	;CLEAR THE LINE
	CLRL	OUTPUT_STRING
	MOVAL	OUTPUT_LINE,OUTPUT_STRING	;INIT THE DESCRIPTER
	CLRL	OVERFLOW			;CLEAR OVERFLOW FLAG
	MULL3	#4,LEVEL,R6			;GET NUMBER OF DOTS
			;EACH LEVEL DOWN IN CALLING TREE-INDENT BY 4 LOCATIONS
			;FILLING IN WITH DOTS
	BEQL	1$	;IF LEVEL ZERO-SKIP NEXT PART
	CVTBL	24(R10),R7;GET LENGTH OF SYMBOL
	ADDL2	#3,R7	;ACCOUNT FOR POSSABLE FLAGS
	ADDL3	R6,R7,R8;GET TOTAL LENGTH REQUIRED
	CMPL	R8,LINE_COUNT;SEE IF TOO LONG
	BLEQ	2$	;NO -LENGTH OK
	SUBL3	R7,LINE_COUNT,R6	;GET NUMBER OF DOTS
	INCL	OVERFLOW	;SET THE OVERFLOW FLAG
2$:	MOVC5	#0,NULL,#^A/./,R6,OUTPUT_LINE	;FILL IN THE DOTS
1$:	CVTBL	24(R10),R7	;SYMBOLLENGTH
	MOVC3	R7,25(R10),OUTPUT_LINE(R6)	;FILL IN THE SYMBOL
	ADDL3	R6,R7,OUTPUT_STRING		;UPDATE THE DESCRIPTER
	ADDL2	R7,R6				;UPDATE R6 FOR FLAG INPUTS
;	CHECK FOR OVERFLOW
	TSTL	OVERFLOW
	BEQL	3$
	MOVB	#^A/*/,OUTPUT_LINE(R6)
	INCL	R6
	INCL	OUTPUT_STRING
3$:
;	CHECK FOR UNDEFINED ENTRY POINT
	TSTB	56(R10)
	BNEQ	4$	;DEFINED
103$:	MOVB	#^A/?/,OUTPUT_LINE(R6)
	INCL	R6
	INCL	OUTPUT_STRING
4$:
;	CHECK FOR RECURSION
	CLRL	RECURSION
	MOVAL	TREE_QUEUE,R9	;SCAN TREE QUEUE FOR THIS SYMBOL
	MOVL	R9,R8
5$:	MOVL	(R8),R8
	CMPL	R8,R9
	BEQL	6$
	CMPC3	#32,8(R8),24(R10)
	BNEQ	5$
	INCL	RECURSION
	MOVB	#^A/#/,OUTPUT_LINE(R6)
	INCL	OUTPUT_STRING
6$:	;OUTPUT THE COMPLETED LINE
	PUSHAL	OUTPUT_STRING
	CALLS	#1,PRINT_LINE
	TSTL	RECURSION	;WAS THE SYMBOL RECURSIVE ??
	BEQL	10$		;NO
	RET			;YES-DON'T BOTHER TRYING TO GO DEEPER
10$:	;DOES THIS SYMBOL CALL ANY ONE?
	MOVAL	8(R10),R6
	CMPL	8(R10),R6
	BNEQ	11$		;YES
	RET			;NO
;	PUSH CURRENT SYMBOL ON TREE STACK AND CALL TO GET NEXT LEVEL
11$:	MOVL	#40,ARG1	;GET AN ELEMENT FOR TREE
	CALLG	VM_ARG,ALLOCATE
	INSQUE	(R0),@TREE_QUEUE+4
	MOVL	R0,R9		;INSERT IN QUEUE AND COPY SYMBOL
	MOVC3	#32,24(R10),8(R9)
	INCL	LEVEL
	MOVL	R6,R7		;SET UP TO SCANN FOR CALLS SYMBOLS
12$:	MOVL	(R7),R7		;NEXT SYMBOL
	CMPL	R6,R7
	BEQL	100$
	MOVAL	SYMBOL_TABLE_QUEUE,R11
	MOVL	R11,R10
13$:	MOVL	(R10),R10
	CMPL	R10,R11
	BEQL	12$
	CMPC3	#32,8(R7),24(R10)
	BNEQ	13$
	CALLG	NULL,SCAN_CALLING_SYMBOL
	BRW	12$
100$:;DONE AT THIS LEVEL-BACK UP EVERYTHING BY ONE
	DECL	LEVEL
	REMQUE	@TREE_QUEUE+4,R0
	MOVL	R0,ARG2
	MOVL	#40,ARG1
	CALLG	VM_ARG,FREE
	RET
	.PAGE
	.SUBTITLE	CALLED BY TREE
TRY_CALLED_TREE:
	BITL	#CALLED_BY_TREE_FLAG,FLAG_WORD	;AS CALLING TREE ASED FOR
	BNEQ	1$				;NO
	JMP	CLEAN_UP
1$:	CLRL	LINES_ON_PAGE			;SET UP FOR NEW PAGE AND TITLE
	MOVL	#CALLED_BY_OUTPUT,STATUS_WORD
	CLRL	LEVEL				;LEVEL IS ZERO
	MOVAL	TREE_QUEUE,TREE_QUEUE		;INIT TREE RECURSION CHECK QUEUE
	MOVL	TREE_QUEUE,TREE_QUEUE+4
	MOVAL	SYMBOL_TABLE_QUEUE,R11		;SET UP FOR SCANN FOR BOTTOM
						;LEVEL MODULES
	MOVL	R11,R10
CALLED_TOP_LEVEL_LOOP:
	MOVL	(R10),R10			;NEXT SYMBOL PLEASE
	CMPL	R10,R11				;CHECK FOR DONE
	BNEQ	1$
	JMP	CLEAN_UP			;DONE THIS TREE-EXIT
1$:	MOVAL	8(R10),R9			;SEE IF ANY CALLS
	CMPL	8(R10),R9
	BNEQ	CALLED_TOP_LEVEL_LOOP		;NOT A TOP SYMBOL
;	FOUND A BOTTOM MODULE-START FROM HERE
;	CALL RECUSRIVE ROUTINE TO OUTPUT THIS SYMBOL AND ALL ABOVE IT
	CALLG	NULL,SCAN_CALLED_SYMBOL
	BRW	CALLED_TOP_LEVEL_LOOP
	.ENTRY	SCAN_CALLED_SYMBOL,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
;
;	ARGUMENTS PASSED
;	R10 POINTS TO NEW SYMBOL TO OUTPUT AND WHOS CALLED ROUTINES TO OUTPUT
;	LEVEL CURRENT CALLING LEVEL
;	TREE_QUEUE	QUEUE OF SYMBOLS IN LINE TO MAIN ROUTINE-TO CHECK
;			FOR RECURSION
;
;	OUTPUT THE SYMBOL WITH LEADING DOTS
	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE	;CLEAR THE LINE
	CLRL	OUTPUT_STRING
	MOVAL	OUTPUT_LINE,OUTPUT_STRING	;INIT THE DESCRIPTER
	CLRL	OVERFLOW			;CLEAR OVERFLOW FLAG
	MULL3	#4,LEVEL,R6			;GET NUMBER OF DOTS
			;EACH LEVEL UP IN CALLED TREE-INDENT BY 4 LOCATIONS
			;FILLING IN WITH DOTS
	BEQL	1$	;IF LEVEL ZERO-SKIP NEXT PART
	CVTBL	24(R10),R7;GET LENGTH OF SYMBOL
	ADDL2	#3,R7	;ACCOUNT FOR POSSABLE FLAGS
	ADDL3	R6,R7,R8;GET TOTAL LENGTH REQUIRED
	CMPL	R8,LINE_COUNT;SEE IF TOO LONG
	BLEQ	2$	;NO -LENGTH OK
	SUBL3	R7,LINE_COUNT,R6	;GET NUMBER OF DOTS
	INCL	OVERFLOW	;SET THE OVERFLOW FLAG
2$:	MOVC5	#0,NULL,#^A/./,R6,OUTPUT_LINE	;FILL IN THE DOTS
1$:	CVTBL	24(R10),R7	;SYMBOLLENGTH
	MOVC3	R7,25(R10),OUTPUT_LINE(R6)	;FILL IN THE SYMBOL
	ADDL3	R6,R7,OUTPUT_STRING		;UPDATE THE DESCRIPTER
	ADDL2	R7,R6				;UPDATE R6 FOR FLAG INPUTS
;	CHECK FOR OVERFLOW
	TSTL	OVERFLOW
	BEQL	3$
	MOVB	#^A/*/,OUTPUT_LINE(R6)
	INCL	R6
	INCL	OUTPUT_STRING
3$:
;	CHECK FOR UNDEFINED ENTRY POINT
	TSTB	56(R10)
	BNEQ	4$	;DEFINED
103$:	MOVB	#^A/?/,OUTPUT_LINE(R6)
	INCL	R6
	INCL	OUTPUT_STRING
4$:
;	CHECK FOR RECURSION
	CLRL	RECURSION
	MOVAL	TREE_QUEUE,R9	;SCAN TREE QUEUE FOR THIS SYMBOL
	MOVL	R9,R8
5$:	MOVL	(R8),R8
	CMPL	R8,R9
	BEQL	6$
	CMPC3	#32,8(R8),24(R10)
	BNEQ	5$
	INCL	RECURSION
	MOVB	#^A/#/,OUTPUT_LINE(R6)
	INCL	OUTPUT_STRING
6$:	;OUTPUT THE COMPLETED LINE
	PUSHAL	OUTPUT_STRING
	CALLS	#1,PRINT_LINE
	TSTL	RECURSION	;WAS THE SYMBOL RECURSIVE ??
	BEQL	10$		;NO
	RET			;YES-DON'T BOTHER TRYING TO GO DEEPER
10$:	;DOES THIS SYMBOL CALLED BY ANY ONE?
	MOVAL	16(R10),R6
	CMPL	16(R10),R6
	BNEQ	11$		;YES
	RET			;NO
;	PUSH CURRENT SYMBOL ON TREE STACK AND CALL TO GET NEXT LEVEL
11$:	MOVL	#40,ARG1	;GET AN ELEMENT FOR TREE
	CALLG	VM_ARG,ALLOCATE
	INSQUE	(R0),@TREE_QUEUE+4
	MOVL	R0,R9		;INSERT IN QUEUE AND COPY SYMBOL
	MOVC3	#32,24(R10),8(R9)
	INCL	LEVEL
	MOVL	R6,R7		;SET UP TO SCANN FOR CALLED BY SYMBOLS
12$:	MOVL	(R7),R7		;NEXT SYMBOL
	CMPL	R6,R7
	BEQL	100$
	MOVAL	SYMBOL_TABLE_QUEUE,R11
	MOVL	R11,R10
13$:	MOVL	(R10),R10
	CMPL	R10,R11
	BEQL	12$
	CMPC3	#32,8(R7),24(R10)
	BNEQ	13$
	CALLG	NULL,SCAN_CALLED_SYMBOL
	BRW	12$
100$:;DONE AT THIS LEVEL-BACK UP EVERYTHING BY ONE
	DECL	LEVEL
	REMQUE	@TREE_QUEUE+4,R0
	MOVL	R0,ARG2
	MOVL	#40,ARG1
	CALLG	VM_ARG,FREE
	RET
	.PAGE
	.SUBTITLE	CLEAN UP SYMBOL TABLE
CLEAN_UP:
	PUSHAL	TIME_OUTPUT                                                     ;V1.4
	PUSHAL	CODE_1                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_OUTPUT+8                                                   ;V1.4
	PUSHAL	CODE_2                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_OUTPUT+12                                                  ;V1.4
	PUSHAL	CODE_3                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_OUTPUT+16                                                  ;V1.4
	PUSHAL	CODE_4                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_OUTPUT+20                                                  ;V1.4
	PUSHAL	CODE_5                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	MOVL	ELEMENT_64+4,ELEMENT_64+12                                      ;V1.4
	MOVL	ELEMENT_128+4,ELEMENT_128+12                                    ;V1.4
	MOVL	ELEMENT_192+4,ELEMENT_192+12                                    ;V1.4
	MOVL	ELEMENT_256+4,ELEMENT_256+12                                    ;V1.4
	MOVL	ELEMENT_LARGE+4,ELEMENT_LARGE+12                                ;V1.4
OUTTER_LOOP:
	REMQUE	@SYMBOL_TABLE_QUEUE,R11
	BVS	TABLE_EMPTY
;	REMOVE ALL CALL ELEMENTS
CALLS_LOOP:
	REMQUE	@8(R11),R10
	BVS	CALLS_EMPTY
	MOVL	#40,ARG1
	MOVL	R10,ARG2
	CALLG	VM_ARG,FREE
	BRB	CALLS_LOOP
CALLS_EMPTY:
CALLED_LOOP:
	REMQUE	@16(R11),R10
	BVS	CALLED_EMPTY
	MOVL	#40,ARG1
	MOVL	R10,ARG2
	CALLG	VM_ARG,FREE
	BRB	CALLED_LOOP
CALLED_EMPTY:
	MOVL	#88,ARG1
	MOVL	R11,ARG2
	CALLG	VM_ARG,FREE
	BRB	OUTTER_LOOP
	.PAGE
	.SUBTITLE	RESET SCRATCH FILES
TABLE_EMPTY:
	PUSHAL	TIME_CLEANUP                                                    ;V1.4
	PUSHAL	CODE_1                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_CLEANUP+8                                                  ;V1.4
	PUSHAL	CODE_2                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_CLEANUP+12                                                 ;V1.4
	PUSHAL	CODE_3                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_CLEANUP+16                                                 ;V1.4
	PUSHAL	CODE_4                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	PUSHAL	TIME_CLEANUP+20                                                 ;V1.4
	PUSHAL	CODE_5                                                          ;V1.4
	CALLS	#2,G^LIB$STAT_TIMER                                             ;V1.4
	CALLG	NULL,DUMP_STATS                                                 ;V1.4
	CALLG	NULL,G^LIB$INIT_TIMER                                           ;V1.4
	CALLG	NULL,CLOSE_SCRATCH
	CALLG	NULL,OPEN_SCRATCH
	RET
	.END
