	.TITLE	OUTPUT_TABLE FOR SIMPLE INDEX
	.ENABLE	DEBUG
	.SUBTITLE	STORAGE AREA
	.PSECT	IMPURE_DATA,RD,WRT,NOSHR,NOEXE,GBL,CON,LONG
OUTPUT_LINE:
	.BLKB	132
OUTPUT_STRING:
	.WORD	0,0
	.LONG	0
DESCRIPTER:
	.LONG	0,0
NUMBER:	.LONG	0
CHAR_COUNT:
	.LONG	0
LINE_COUNT:
	.LONG	0
	.ADDRESS	OUTPUT_LINE
	.PSECT	PURE_DATA,RD,NOWRT,SHR,NOEXE,GBL,CON
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
SIZE_TABLE:
	.LONG	9,99,999,9999,99999,999999,9999999,99999999,999999999
ENTRY_SUPER_ERROR:
	.ASCID	/INDEX-F-Error Writeing to Entry Super Index Scratch File/
SUPER_ERROR:
	.ASCID	/INDEX-F-Error Writeing to Super Index Scratch File/
ENTRY_ERROR:
	.ASCID	/INDEX-F-Error Writeing to Entry Index Scratch File/
	.PAGE
	.SUBTITLE	INITIALIZATION CODE
	.PSECT	CODE,RD,NOWRT,SHR,EXE,GBL,CON
	.ENTRY	DUMP_INDEX,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
;                                                                               ;V1.4
;	ACCUMULATE TIME STATS FOR PARSE/BUILD TABLE                             ;V1.4
;                                                                               ;V1.4
	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
                                                                                ;V1.4
	CLRL	LINES_ON_PAGE	;FORCE A NEW PAGE
	MOVL	#INDEX_OUTPUT,STATUS_WORD	;SAY WHAT HEADER TO USE
	MOVAL	SYMBOL_TABLE_QUEUE,R11		;GET ADDR OF SYMBOL TABLE
	MOVL	R11,R10				;WORK ON COPY OF POINTER
	MOVL	#132,LINE_COUNT
	BITL	#NARROW_FLAG,FLAG_WORD
	BEQL	1$
	MOVL	#80,LINE_COUNT
1$:
	.PAGE
	.SUBTITLE	GO CLIMB A TREE
	CMPL	(R10),R11	;SEE IF TREE IS EMPTY
	BEQL	11$		;YES-JUST SNEAK AWAY
	MOVL	(R10),R10	;NO-LOAD UP FIRST SYMBOL
	CALLG	NULL,CLIMB_TREE	;OUTPUT TREE
11$:	;SEE IF DOING GET E.P.
	BITL	#GET_ENTRY_FLAG,FLAG_WORD
	BEQL	5000$		;NO
;	WE ARE DOING GET E.P.
	TSTL	PROGRAM_FLAG	;WAS THIS MODULES NAME DECLARED ??
	BNEQ	5000$		;YES
;	NO-HAVE TO DO PASS THAT INFO ON AT THIS POINT
	LOCC	#0,#31,MODULE_NAME		;FIND LENGTH OF MODULE NAME
	SUBL2	#MODULE_NAME,R1
	CVTLB	R1,ENTRY_BUFFER+32		;LOAD LENGTH
	MOVC3	#31,MODULE_NAME,ENTRY_BUFFER+33	;LOAD MODULE NAME
	MOVC3	#32,ENTRY_BUFFER+32,ENTRY_BUFFER
	INCL	SAVE_ENTRY                                                      ;V1.4
	$PUT	RAB=ENTRY_INDEX_RAB		;WRITE THE RECORD
	BLBS	R0,5000$
	PUSHR	#^M<R0>				;FATAL ERROR
	PUSHAL	ENTRY_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
5000$:	JMP	DUMP_COMPLETE
	.ENTRY	CLIMB_TREE,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
;	IS THERE A LOWER SYMBOL
	CMPL	(R10),R11
	BEQL	1$		;NO
;	OUTPUT LOWER SYMBOL(S) FIRST
	PUSHR	#^M<R10>
	MOVL	(R10),R10
	CALLG	NULL,CLIMB_TREE
	POPR	#^M<R10>
1$:	CALLG	NULL,DUMP_SYMBOL	;OUTPUT THIS SYMBOL NEXT
;	NOW SEE IF THERE ARE ANY HIGHER SYMBOLS TO OUTPUT
	MOVAL	8(R10),R9
	CMPL	8(R10),R9
	BEQL	2$		;NOTHING HIGHER
;	OUTPUT ALL HIGHER VALUES
	PUSHR	#^M<R10,R11>
	MOVL	R9,R11
	MOVL	8(R10),R10
	CALLG	NULL,CLIMB_TREE
	POPR	#^M<R10,R11>
2$:	RET			;DONE
	.ENTRY	DUMP_SYMBOL,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
;	DUMP SYMBOL FOUND IN R10
	BITL	#GET_ENTRY_FLAG,FLAG_WORD	;IS THIS FOR E.P. XREF
	BNEQ	1030$
	BRW	30$				;NO
;	YES	OUTPUT AS APPROPRIATE TO SUPER AND ENTRY FILES
1030$:	BITL	#SYMBOL_FLAG_ENTRY_POINT,24(R10);IS IT AN ENTRY POINT??
	BNEQ	1031$
	RET	;NO-SKIP IT
;	LOAD SUPER INDEX WITH SYMBOL NAME & THIS MODULE NAME
1031$:	MOVC3	#32,28(R10),SUPER_BUFFER
	LOCC	#0,#31,MODULE_NAME		;FIND LENGTH OF MODULE NAME
	SUBL2	#MODULE_NAME,R1
	CVTLB	R1,SUPER_BUFFER+32		;LOAD LENGTH
	MOVC3	#31,MODULE_NAME,SUPER_BUFFER+33	;LOAD MODULE NAME
	BITL	#SYMBOL_FLAG_DEFINED_ENTRY_POINT,24(R10)
			;WAS IT DEFINED HERE
	BNEQ	40$				;YES ONLY OUTPUT ENTRY NAME

	INCL	SAVE_SUPER                                                      ;V1.4
	$PUT	RAB=SUPER_INDEX_RAB		;WRITE THE RECORD
	BLBS	R0,40$
	PUSHR	#^M<R0>				;FATAL ERROR
	PUSHAL	ENTRY_SUPER_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
40$:	MOVC3	#64,SUPER_BUFFER,ENTRY_BUFFER	;COPY FOR ENTRY POINT BUFFER
	BITL	#SYMBOL_FLAG_DEFINED_ENTRY_POINT,24(R10)
			;WAS IT DEFINED HERE
	BNEQ	41$				;YES
	MOVC5	#0,NULL,#0,#32,ENTRY_BUFFER+32	;NO-CANCELL MODULE NAME
41$:	INCL	SAVE_ENTRY                                                      ;V1.4
	$PUT	RAB=ENTRY_INDEX_RAB		;WRITE THE RECORD               ;V1.4
	BLBS	R0,42$                                                          ;**-1
	PUSHR	#^M<R0>				;FATAL ERROR
	PUSHAL	ENTRY_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
42$:	RET
;	CHECK TO SEE IF WE WANT TO OUTPUT THIS SYMBOL
30$:	BITL	#GLOBAL_FLAG,FLAG_WORD		;DO WE CHECK FOR GLOBALS ?
	BEQL	10$
	BITL	#SYMBOL_FLAG_GLOBAL,24(R10)	;YES-IS IT GLOBAL??
	BNEQ	11$
	RET			;NO-TRY NEXT SYMBOL
10$:	BITL	#LOCAL_FLAG,FLAG_WORD		;DO WE WANT LOCALS
	BEQL	11$
	BITL	#SYMBOL_FLAG_GLOBAL,24(R10)
	BEQL	11$
	RET
11$:	BITL	#USED_FLAG,FLAG_WORD		;IS IT A USED VARIABLE
	BEQL	12$
	BITL	#SYMBOL_FLAG_USED,24(R10)
	BNEQ	13$
	RET
12$:	BITL	#UNUSED_FLAG,FLAG_WORD		;UNUSED VARIABLE
	BEQL	13$
	BITL	#SYMBOL_FLAG_USED,24(R10)
	BEQL	13$
	RET
13$:	BITL	#UNCHANGED_FLAG,FLAG_WORD	;VALUE NOT CHANGED
	BEQL	14$
	BITL	#SYMBOL_FLAG_CHANGED,24(R10)
	BEQL	14$
	RET
14$:	BITL	#CHANGED_FLAG,FLAG_WORD		;VALUE MODFIED
	BEQL	15$
	BITL	#SYMBOL_FLAG_CHANGED,24(R10)
	BNEQ	15$
	RET
15$:	BITL	#IMPORT_FLAG,FLAG_WORD                                          ;V1.3
	BEQL	16$                                                             ;V1.3
;	CONDITIONS FOR AN IMPORTED VALUE                                        ;V1.3
;	GLOBAL AND USED                                                         ;V1.3
;	CALLED BY ARG AND USED                                                  ;V1.3
;	FUNCTION VALUE RETURN                                                   ;V1.3
;	CALLING ARGUMENT USED                                                   ;V1.3
	BITL	#SYMBOL_FLAG_USED,24(R10)	;ALL CASES ARE USED             ;V1.3
	BEQL	17$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_CHANGED,24(R10)	;IF IT IS CHANGED-IT            ;V1.3
						;IS AN EXPORT EVEN IF           ;V1.3
						;IT IS ALSO USED BEFORE         ;V1.3
						;CHANGE                         ;V1.3
	BNEQ	17$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_GLOBAL,24(R10)	;GLOBAL AND USED                ;V1.3
	BNEQ	16$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_CALLED_BY_ARG,24(R10);CALLED BY AND USED           ;V1.3
	BNEQ	16$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_CALLING_ARG,24(R10);A USED CALLING ARG             ;V1.3
	BNEQ	16$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_ENTRY_POINT,24(R10);IS IT AN ENTRY POINT NAME      ;V1.3
	BEQL	17$                                                             ;V1.3
	BITL	-                                                               ;V1.3
	#<SYMBOL_FLAG_CALL_ENTRY_POINT!SYMBOL_FLAG_DEFINED_ENTRY_POINT!-        ;V1.3
	SYMBOL_FLAG_STATEMENT_FN>,24(R10)                                       ;V1.3
	BEQL	16$                                                             ;V1.3
17$:	RET                                                                     ;V1.3
16$:	BITL	#EXPORT_FLAG,FLAG_WORD                                          ;V1.3
	BEQL	18$                                                             ;V1.3
;	CONDITIONS FOR AN EXPORTED VALUE                                        ;V1.3
;	GLOBAL AND CHANGED                                                      ;V1.3
;	CALLED BY ARG AND CHANGED                                               ;V1.3
;	CALLING ARG AND CHANGED                                                 ;V1.3
;	FUNCTION ARG                                                            ;V1.3
;	DEFINED ENTRY POINT AND CHANGED                                         ;V1.3
	BITL	#SYMBOL_FLAG_FN_CALLING_ARG,24(R10)                             ;V1.3
	BNEQ	18$	                                                        ;V1.3
	BITL	#SYMBOL_FLAG_CHANGED,24(R10)                                    ;V1.3
	BEQL	19$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_GLOBAL,24(R10)                                     ;V1.3
	BNEQ	18$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_CALLED_BY_ARG,24(R10)                              ;V1.3
	BNEQ	18$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_CALLING_ARG,24(R10)                                ;V1.3
	BNEQ	18$                                                             ;V1.3
	BITL	#SYMBOL_FLAG_DEFINED_ENTRY_POINT,24(R10)                        ;V1.3
	BNEQ	18$                                                             ;V1.3
19$:	RET                                                                     ;V1.3
18$:                                                                            ;V1.3
	;HAVE PASSED ALL TESTS-OUTPUT THE SYMBOL                                ;V1.3
;	IS IT TIME TO ACCUMULATE SYMBOL FOR SUPER INDEX??
	BITL	#GET_SUPER_FLAG,FLAG_WORD
	BEQL	20$
;	NUMBERS(LABELS) NOT WANTED
	CMPC5	#1,#^A/A/,#0,#31,29(R10)
	BGTR	20$
;	COPY THE INFORMATION TO SUPER INDEX BUFFER
	MOVC3	#32,28(R10),SUPER_BUFFER	;COPY THE SYMBOL LENGTH AND
						;NAME TO THE BUFFER
	LOCC	#0,#31,MODULE_NAME		;FIND LENGTH OF MODULE NAME
	SUBL2	#MODULE_NAME,R1
	CVTLB	R1,SUPER_BUFFER+32		;LOAD LENGTH
	MOVC3	#31,MODULE_NAME,SUPER_BUFFER+33	;LOAD MODULE NAME
	INCL	SAVE_SUPER                                                      ;V1.4
	$PUT	RAB=SUPER_INDEX_RAB		;WRITE THE RECORD
	BLBS	R0,20$
	PUSHR	#^M<R0>				;FATAL ERROR
	PUSHAL	SUPER_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
20$:	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE	;CLEAR THE OUTPUT STRING
	CLRL	OUTPUT_STRING			;AND INIT ITS DESCRIPTER
	MOVAL	OUTPUT_LINE,OUTPUT_STRING+4
	CVTBL	28(R10),NUMBER
	MOVC5	NUMBER,29(R10),#^A/./,#31,OUTPUT_LINE
						;LOAD THE SYMBOL NAME
	MOVW	#31,OUTPUT_STRING
	SUBL3	#31,LINE_COUNT,CHAR_COUNT
	MOVAL	16(R10),R9			;POINT TO HOW USED
	MOVL	R9,R8				;QUEUE HEADER FOR THIS
						;SYMBOL
	.PAGE
	.SUBTITLE	HOW USED LOOP
HOW_USED_LOOP:
	MOVL	(R8),R8				;GET NEXT HOW USED
	CMPL	R8,R9				;SEE IF DONE WITH THESE
	BNEQ	1$
	BRW	HOW_USED_DONE
1$:	MOVAL	SIZE_TABLE-4,R0			;SET UP TO COMPARE
	MOVL	#1,R6
2$:	CMPL	(R0)[R6],8(R8)
	BGEQU	3$
	AOBLEQ	#9,R6,2$
3$:	;R6 CONTAINS NUMBER OF DIGITS NEEDED TO HOLD LINE NUMBER
	SUBL3	#5000,12(R8),R0		;GET HOW USED TOKEN
	MOVAQ	MNEMONIC_POINTER_TABLE[R0],R7;GET POINTER TO HOWUSED
					;STRING DESCRIPTER
	CVTWL	(R7),R5			;GET NUMBER OF CHRS
	ADDL2	R6,R5			;ADD IN SIZE OF NUMBER
	ADDL2	#4,R5			;ACCOUNT FOR LEADING SPACES AND
					;DASH BETWEEN NUMBER AND MNEMONIC
	CMPL	R5,CHAR_COUNT		;SEE IF ENOUGH ROOM LEFT TO PUT IN
	BLEQ	4$			;YES
;	NOT ENOUGH ROOM-OUTPUT CURRENT LINE AND REINIT
	PUSHAL	OUTPUT_STRING
	CALLS	#1,PRINT_LINE		;PRINT THE FULL LINE
	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE	;CLEAR THE OUTPUT STRING
	MOVC5	#0,NULL,#^A/ /,#31,OUTPUT_LINE	;BLANK OUT SYMBOL NAME ON
						;CONTINUATION LINE
	SUBL3	#31,LINE_COUNT,CHAR_COUNT
	MOVL	#31,OUTPUT_STRING
4$:	ADDL3	#3,R6,DESCRIPTER	;LOAD DESCRIPTER
	CVTWL	OUTPUT_STRING,R0	;GET STARTING ADDR
	MOVAB	OUTPUT_LINE[R0],DESCRIPTER+4	;OF NUMBER
	PUSHAL	DESCRIPTER
	PUSHAL	8(R8)
	CALLS	#2,G^OTS$CVT_L_TI		;CONVERT NUMBER WITH LEADING BLANK
	ADDW2	R6,OUTPUT_STRING
	ADDL2	#3,OUTPUT_STRING
	SUBL2	R6,CHAR_COUNT
	SUBL2	#3,CHAR_COUNT
;	NUMBER IS IN-NEXT PUT IN DASH
	CVTWL	OUTPUT_STRING,R6
	MOVB	#^A/-/,OUTPUT_LINE[R6]
	INCW	OUTPUT_STRING
	DECL	CHAR_COUNT
	INCL	R6
;	COPY IN THE HOW USED MNEMONIC
	CVTWL	(R7),NUMBER
	MOVC3	NUMBER,@4(R7),OUTPUT_LINE[R6]	;COPY THE STRING MNEMONIC
	ADDW2	NUMBER,OUTPUT_STRING
	SUBL2	NUMBER,CHAR_COUNT
	BRW	HOW_USED_LOOP
	.PAGE
	.SUBTITLE	INNER(HOW USED) AND OUTER (SYMBOL) LOOP TERMINATION
HOW_USED_DONE:
;	HOW USED FOR THIS SYMBOL IS COMLETE-OUTPUT CURRENT LINE
;	AND TRY NEXT SYMBOL
	PUSHAL	OUTPUT_STRING
	CALLS	#1,PRINT_LINE		;PRINT THE FULL LINE
	RET
DUMP_COMPLETE:
	CLRL	LINES_ON_PAGE	;FORCE A NEW PAGE
	MOVL	#PARSE_LINES,STATUS_WORD	;SAY WHAT HEADER TO USE
;                                                                               ;V1.4
;	ACCUMULATE STATS FOR OUTPUT                                             ;V1.4
;                                                                               ;V1.4
	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
	CALLG	NULL,G^LIB$INIT_TIMER                                           ;V1.4
	RET
	.END
