	.TITLE	SUPER_INDEX	GENERATION
	.SUBTITLE	DATA STORAGE AREA
	.ENABLE	DEBUG
	.PSECT	IMPURE_DATA,RD,WRT,NOSHR,NOEXE,LONG,CON,GBL
ARG1:	.LONG	0
ARG2:	.LONG	0
OUTPUT_LINE:
	.BLKB	132
OUTPUT_STRING:
	.LONG	0,0
NUMBER:	.LONG	0
LINE_COUNT:
	.LONG	0
CHAR_COUNT:
	.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
VM_ARG:	.LONG	2
	.ADDRESS	ARG1,ARG2
REWIND_ERROR:
	.ASCID	/INDEX-F-Error Rewinding Super Index Scratch File/
READ_ERROR:
	.ASCID	/INDEX-F-Error Reading Super Index Scratch File/
	.PAGE
	.SUBTITLE	INITIALIZATION CODE
	.PSECT	CODE,RD,NOWRT,SHR,EXE,CON,GBL
	.ENTRY	DUMP_SUPER_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 FILE
	BLBS	R0,1$
	PUSHR	#^M<R0>
	PUSHAL	REWIND_ERROR
	CALLS	#1,G^LIB$PUT_OUTPUT
	POPR	#^M<R0>
	$EXIT_S	R0
1$:;	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	#SUPER_OUTPUT,STATUS_WORD
;
;	DATA STORAGE ELEMENT IN THE SUPER 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 USED IN ELEMENT! 8
;	----------------------------------
;	!POINTER TO LAST USED IN ELEMENT !12
;	----------------------------------
;	!SYMBOL (NULL PADDED)    !LENGTH !<= ONE BYTE 16-17
;	----------------------------------
;	!31 BYTES LONG                   !
;
;	!                                !
;	----------------------------------
;	LENGTH=48 BYTES
;
;	USED IN ELEMENTS
;	----------------------------------
;	!POINTER TO NEXT USED IN         ! 0
;	----------------------------------
;	!POINTER TO LAST USED IN         ! 4
;	----------------------------------
;	!MODULE NAME(NULL PADDED  !LENGTH! 8-9<= ONE BYTE
;	----------------------------------
;	!31 BYTES LONG                   !
;
;	!                                !
;	----------------------------------
;	LENGTH=40 BYTES
	.PAGE
	.SUBTITLE	BUILD SUPER INDEX SYMBOL TABLE
BUILD_LOOP:
	$GET	RAB=SUPER_INDEX_RAB
	BLBS	R0,1$
	CMPL	#RMS$_EOF,R0	;RAN OUT OF DATA-GO OUTPUT IT
	BNEQ	2$
	JMP	OUTPUT_SUPER
2$:	PUSHR	#^M<R0>
	PUSHAL	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,17(R10),SUPER_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	#64,ARG1
	INCL	SYMBOLS_PROCESSED                                               ;V1.4
	CALLG	VM_ARG,ALLOCATE
2$:	MOVAL	8(R0),8(R0)		;INIT THE USED IN QUEUE
	MOVL	8(R0),12(R0)
	MOVL	4(R10),R9		;GET ADDRESS OF PREDISESSOR
	INSQUE	(R0),(R9)		;INSTALL IN QUEUE
	MOVL	R0,R10			;INSTALL AS SYMBOL BEING EXAMINED
	MOVC3	#32,SUPER_BUFFER,16(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	#64,ARG1
	INCL	SYMBOLS_PROCESSED                                               ;V1.4
	CALLG	VM_ARG,ALLOCATE
	MOVAL	8(R0),8(R0)		;INIT THE USED IN QUEUE
	MOVL	8(R0),12(R0)
	INSQUE	(R0),@SYMBOL_TABLE_QUEUE+4;PUT ON END OF QUEUE
	MOVL	R0,R10
	MOVC3	#32,SUPER_BUFFER,16(R0)	;LOAD THE SYMBOL LENGTH AND STRING
FOUND_SYMBOL:
;	R10 POINTS TO SYMBOL QUEUE ELEMENT
;	NOW SCAN DOWN THROUGH USED IN ELEMENTS FOR THAT SYMBOL
	MOVAL	8(R10),R9		;GET USED IN QUEUE HEADER
	MOVL	R9,R8			;SET UP POINTERS
USED_IN_LOOP:
	MOVL	(R8),R8			;SCAN NEXT USED IN MODULE NAME
	CMPL	R8,R9
	BNEQ	1$
	BRW	ADD_USED_ON_END
1$:	CMPC3	#31,17(R8),SUPER_BUFFER+33
	BLSS	USED_IN_LOOP	;NOT THERE YET
;SYMBOL NOT IN QUEUE OR IS DUPLICATED-ADD NEW ELEMENT TO PRECEEDING CURENT
	MOVL	#64,ARG1
	INCL	HOW_USED_PROCESSED                                              ;V1.4
	CALLG	VM_ARG,ALLOCATE
	MOVL	4(R8),R6		;GET ADDRESS OF PREDISESSOR
	INSQUE	(R0),(R6)		;INSTALL IN QUEUE
	MOVC3	#32,SUPER_BUFFER+32,8(R0)	;LOAD THE SYMBOL LENGTH AND STRING
	BRW	BUILD_LOOP
ADD_USED_ON_END:
;	ADD NEW USED IN ELEMENT ON END OF USED IN QUEUE
	MOVL	#64,ARG1
	INCL	HOW_USED_PROCESSED                                              ;V1.4
	CALLG	VM_ARG,ALLOCATE
	INSQUE	(R0),@12(R10)	;PUT ON END OF QUEUE
	MOVC3	#32,SUPER_BUFFER+32,8(R0)	;LOAD THE SYMBOL LENGTH AND STRING
	BRW	BUILD_LOOP
	.PAGE
	.SUBTITLE	OUTPUT SUPER INDEX SYMBOL TABLE
OUTPUT_SUPER:
	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
	MOVL	R11,R10
	MOVL	#132,LINE_COUNT
	MOVAL	OUTPUT_LINE,OUTPUT_STRING+4
	BITL	#NARROW_FLAG,FLAG_WORD
	BEQL	1$
	MOVL	#80,LINE_COUNT
1$:
OUTPUT_LOOP:
	MOVL	(R10),R10	;NEXT SYMBOL
	CMPL	R10,R11
	BEQL	1001$                                                           ;V1.4
	BRW	1$                                                              ;V1.4
1001$:	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
	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
	JMP	CLEANUP_SUPER                                                   ;**-1
1$:	CVTBL	16(R10),R7
	MOVC5	R7,17(R10),#^A/./,#31,OUTPUT_LINE
	SUBL3	#31,LINE_COUNT,CHAR_COUNT
	MOVL	#31,OUTPUT_STRING
	MOVAL	8(R10),R9	;HOW USED QUEUE HEADER
	MOVL	R9,R8		;WORK ON THE USED IN QUEUE
PRINT_USED_IN_LOOP:
	MOVL	(R8),R8		;GET NEXT HOW USED
	CMPL	R8,R9
	BNEQ	10$
	JMP	DONE_USED_IN
10$:	CVTBL	8(R8),R7	;GET LENGTH
	ADDL3	#3,R7,R6	;ACCOUNT FOR 3 LEADING SPACES
	CMPL	R6,CHAR_COUNT
	BLEQ	1$		;NO OVERFLOW YET
;	NEW ENTRY DES NOT FIT-OUTPUT OLD LINE AND REINIT FOR CONTINUATION LINE
	PUSHAL	OUTPUT_STRING
	CALLS	#1,PRINT_LINE
	MOVC5	#0,NULL,#0,#132,OUTPUT_LINE	;CLEAR OUTPUT LINE
	MOVC5	#0,NULL,#^A/ /,#31,OUTPUT_LINE	;FOR CONTINUATION LINE
						;PUT BLANKS IN SYMBOL
						;LOCATION
	SUBL3	#31,LINE_COUNT,CHAR_COUNT
	MOVL	#31,OUTPUT_STRING
1$:	SUBL2	R6,CHAR_COUNT
	CVTWL	OUTPUT_STRING,R6		;GET NO OF CHRS IN LINE
	MOVC5	#0,NULL,#^A/ /,#3,OUTPUT_LINE(R6)	;LOAD 3 BLANKS
	ADDL2	#3,R6
	ADDW2	#3,OUTPUT_STRING
	ADDW2	R7,OUTPUT_STRING
	MOVC3	R7,9(R8),OUTPUT_LINE(R6)
	BRW	PRINT_USED_IN_LOOP
DONE_USED_IN:
	PUSHAL	OUTPUT_STRING
	CALLS	#1,PRINT_LINE
	BRW	OUTPUT_LOOP
	.PAGE
	.SUBTITLE	CLEAN UP SYMBOL TABLE
CLEANUP_SUPER:
	REMQUE	@SYMBOL_TABLE_QUEUE,R11	;TAKE OFF SYMBOL ELEMENT
	BVS	SUPER_COMPLETE
1$:	REMQUE	@8(R11),R10	;GET USED IN ELEMENT'S
	BVS	2$
	MOVL	#64,ARG1
	MOVL	R10,ARG2
	CALLG	VM_ARG,FREE
	BRB	1$
2$:	MOVL	#64,ARG1
	MOVL	R11,ARG2
	CALLG	VM_ARG,FREE
	BRB	CLEANUP_SUPER
SUPER_COMPLETE:
	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,G^LIB$INIT_TIMER                                           ;V1.4
	CALLG	NULL,DUMP_STATS                                                 ;V1.4
	CLRL	LINES_ON_PAGE
	MOVL	#PARSE_LINES,STATUS_WORD
	CALLG	NULL,CLOSE_SCRATCH
	CALLG	NULL,OPEN_SCRATCH
1$:	RET
	.END
