	.TITLE	STATISTICS DUMP/REINIT ROUTINE
	.ENABLE	DEBUG
	.SUBTITLE	IMPURE DATA STORAGE AREA
	.PSECT	IMPURE_DATA,RD,WRT,NOSHR,GBL,CON,LONG,NOEXE,NOPIC
STRING:	.WORD	0,0
	.ADDRESS	LINE
LINE:	.BLKB	132
	.PAGE
DESCRIPTER:
	.LONG	0,0
	.SUBTITLE	PURE DATA STORAGE AREA
	.PSECT	PURE_DATA,RD,NOWRT,SHR,GBL,CON,NOEXE,NOPIC
CODE_1:	.LONG	1
CODE_2:	.LONG	2
CODE_3:	.LONG	3
BLANK_LINE_ARG:
	.LONG	1
	.ADDRESS	BLANK_LINE
BLANK_LINE:
	.ASCID	/ /
LINE_ARG:
	.LONG	1
	.ADDRESS	STRING
TITLE_1_ARG:
	.LONG	1
	.ADDRESS	TITLE_1
TITLE_1:
.ASCID	-
?                             CLOCK TIME  CPU TIME    BUF. I/O DIR. I/O P. F.?
TITLE_2_ARG:
	.LONG	1
	.ADDRESS	TITLE_2
TITLE_2:
.ASCID	/                              ALLOCATED  IN USE     TOTAL ASSIGNS/
TITLE_A:.ASCII	/COMMAND PROCESSING          /
TITLE_B:.ASCII	?PARSE/SYMBOL TABLE BUILD    ?
TITLE_C:.ASCII	/OUTPUT SYMBOL TABLE         /
TITLE_D:.ASCII	/CLEAN UP                    /
TITLE_E:.ASCII	/TOTAL                       /
TITLE_F:.ASCII	/SYMBOLS PROCESSED           /
TITLE_G:.ASCII	/HOW USED PROCESSED          /
TITLE_H:.ASCII	/SYMBOLS TO SUPER SCRATCH    /
TITLE_I:.ASCII	/SYMBOLS TO E.P. SCRATCH     /
TITLE_J:.ASCII	/ 64 BYTE ELEMENTS           /
TITLE_K:.ASCII	/128 BYTE ELEMENTS           /
TITLE_L:.ASCII	/192 BYTE ELEMENTS           /
TITLE_M:.ASCII	/256 BYTE ELEMENTS           /
TITLE_N:.ASCII	/LONGER ELEMENTS             /
TITLE_O:.ASCII	/REQUESTS FOR MORE VM        /
TITLE_P:.ASCII	/REQUESTS TO FREE VM         /
TITLE_Q:.ASCII	/BYTES OF VM STILL ALLOCATED /
	.PAGE
	.PSECT	CODE,RD,NOWRT,SHR,NOVEC,GBL,CON
	.ENTRY	DUMP_STATS,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
	BITL	#STATISTICS_FLAG,FLAG_WORD	;SEE IF OUTPUT WANTED
	BNEQ	1$
	BRW	CLEAN_UP			;NO
1$:	CLRL	LINES_ON_PAGE
	MOVL	#STAT_OUTPUT,STATUS_WORD
	CALLG	BLANK_LINE_ARG,PRINT_LINE	;PRINT 2 BLANK LINES
	CALLG	BLANK_LINE_ARG,PRINT_LINE
	CALLG	TITLE_1_ARG,PRINT_LINE		;TIME TITLE LINE
	CLRQ	TIME_TOTAL
	ADDL2	TIME_COMMAND,TIME_TOTAL
	ADWC	TIME_COMMAND+4,TIME_TOTAL+4
	ADDL2	TIME_PARSE,TIME_TOTAL
	ADWC	TIME_PARSE+4,TIME_TOTAL+4
	ADDL2	TIME_OUTPUT,TIME_TOTAL
	ADWC	TIME_OUTPUT+4,TIME_TOTAL+4
	ADDL2	TIME_CLEANUP,TIME_TOTAL
	ADWC	TIME_CLEANUP+4,TIME_TOTAL+4
	ADDL3	TIME_COMMAND+8,TIME_PARSE+8,TIME_TOTAL+8
	ADDL2	TIME_OUTPUT+8,TIME_TOTAL+8
	ADDL2	TIME_CLEANUP+8,TIME_TOTAL+8
	ADDL3	TIME_COMMAND+12,TIME_PARSE+12,TIME_TOTAL+12
	ADDL2	TIME_OUTPUT+12,TIME_TOTAL+12
	ADDL2	TIME_CLEANUP+12,TIME_TOTAL+12
	ADDL3	TIME_COMMAND+16,TIME_PARSE+16,TIME_TOTAL+16
	ADDL2	TIME_OUTPUT+16,TIME_TOTAL+16
	ADDL2	TIME_CLEANUP+16,TIME_TOTAL+16
	ADDL3	TIME_COMMAND+20,TIME_PARSE+20,TIME_TOTAL+20
	ADDL2	TIME_OUTPUT+20,TIME_TOTAL+20
	ADDL2	TIME_CLEANUP+20,TIME_TOTAL+20
	.MACRO	GEN_TIME_STAT	TITLE,DATA_BLOCK
	MOVC5	#0,NULL,#^A/ /,#132,LINE
	MOVL	#79,STRING
	MOVAL	LINE,STRING+4
	MOVC3	#28,TITLE,LINE			;LOAD THE TITLE
	MOVL	#11,DESCRIPTER
	MOVAB	LINE+29,DESCRIPTER+4
	$ASCTIM_S	,DESCRIPTER,DATA_BLOCK,CODE_1		;ELAPSED TIME
	MOVL	DATA_BLOCK+8,R0
	CLRL	R1
	CLRQ	DATA_BLOCK
	ASHQ	#5,R0,R0
	ADDL2	R0,DATA_BLOCK
	ADWC	R1,DATA_BLOCK+4
	ASHQ	#2,R0,R0
	ADDL2	R0,DATA_BLOCK
	ADWC	R1,DATA_BLOCK+4
	ASHQ	#2,R0,R0
	ADDL2	R0,DATA_BLOCK
	ADWC	R1,DATA_BLOCK+4
	ASHQ	#1,R0,R0
	ADDL2	R0,DATA_BLOCK
	ADWC	R1,DATA_BLOCK+4
	ASHQ	#5,R0,R0
	ADDL2	R0,DATA_BLOCK
	ADWC	R1,DATA_BLOCK+4
	ASHQ	#1,R0,R0
	ADDL2	R0,DATA_BLOCK
	ADWC	R1,DATA_BLOCK+4
	MOVAB	LINE+41,DESCRIPTER+4
	MOVL	#11,DESCRIPTER
	$ASCTIM_S	,DESCRIPTER,DATA_BLOCK,CODE_1		;CPU TIME
	MOVL	#8,DESCRIPTER
	MOVAL	LINE+53,DESCRIPTER+4
	PUSHL	#1
	PUSHAL	DESCRIPTER
	PUSHAL	DATA_BLOCK+12
	CALLS	#3,G^OTS$CVT_L_TI
	MOVL	#8,DESCRIPTER
	MOVAL	LINE+62,DESCRIPTER+4
	PUSHL	#1
	PUSHAL	DESCRIPTER
	PUSHAL	DATA_BLOCK+16
	CALLS	#3,G^OTS$CVT_L_TI
	MOVL	#8,DESCRIPTER
	MOVAL	LINE+71,DESCRIPTER+4
	PUSHL	#1
	PUSHAL	DESCRIPTER
	PUSHAL	DATA_BLOCK+20
	CALLS	#3,G^OTS$CVT_L_TI
	CALLG	LINE_ARG,PRINT_LINE
	.ENDM
	GEN_TIME_STAT	TITLE_A,TIME_COMMAND
	GEN_TIME_STAT	TITLE_B,TIME_PARSE
	GEN_TIME_STAT	TITLE_C,TIME_OUTPUT
	GEN_TIME_STAT	TITLE_D,TIME_CLEANUP
	GEN_TIME_STAT	TITLE_E,TIME_TOTAL
	CALLG	BLANK_LINE_ARG,PRINT_LINE
	.MACRO	SYMBOL_STAT	TITLE,DATA
	MOVC5	#0,NULL,#^A/ /,#132,LINE
	MOVL	#39,STRING
	MOVAL	LINE,STRING+4
	MOVC3	#28,TITLE,LINE			;LOAD THE TITLE
	PUSHL	#1
	MOVL	#10,DESCRIPTER
	MOVAL	LINE+29,DESCRIPTER+4
	PUSHAL	DESCRIPTER
	PUSHAL	DATA
	CALLS	#3,G^OTS$CVT_L_TI
	CALLG	LINE_ARG,PRINT_LINE
	.ENDM
	SYMBOL_STAT	TITLE_F,SYMBOLS_PROCESSED
	SYMBOL_STAT	TITLE_G,HOW_USED_PROCESSED
	SYMBOL_STAT	TITLE_H,SAVE_SUPER
	SYMBOL_STAT	TITLE_I,SAVE_ENTRY
	CALLG	BLANK_LINE_ARG,PRINT_LINE
	CALLG	TITLE_2_ARG,PRINT_LINE
	.MACRO	GEN_VM_STATS	TITLE,DATA
	MOVC5	#0,NULL,#^A/ /,#132,LINE
	MOVL	#61,STRING
	MOVAL	LINE,STRING+4
	MOVC3	#28,TITLE,LINE
	MOVL	#10,DESCRIPTER
	MOVL	#LINE+29,DESCRIPTER+4
	PUSHL	#1
	PUSHAL	DESCRIPTER
	PUSHAL	DATA
	CALLS	#3,G^OTS$CVT_L_TI
	MOVL	#10,DESCRIPTER
	MOVL	#LINE+40,DESCRIPTER+4
	PUSHL	#1
	PUSHAL	DESCRIPTER
	PUSHAL	DATA+12
	CALLS	#3,G^OTS$CVT_L_TI
	MOVL	#10,DESCRIPTER
	MOVL	#LINE+51,DESCRIPTER+4
	PUSHL	#1
	PUSHAL	DESCRIPTER
	PUSHAL	DATA+8
	CALLS	#3,G^OTS$CVT_L_TI
	CALLG	LINE_ARG,PRINT_LINE
	.ENDM
	GEN_VM_STATS	TITLE_J,ELEMENT_64
	GEN_VM_STATS	TITLE_K,ELEMENT_128
	GEN_VM_STATS	TITLE_L,ELEMENT_192
	GEN_VM_STATS	TITLE_M,ELEMENT_256
	GEN_VM_STATS	TITLE_N,ELEMENT_LARGE
	CALLG	BLANK_LINE_ARG,PRINT_LINE
	PUSHAL	ALLOCATE_VM
	PUSHAL	CODE_1
	CALLS	#2,G^LIB$STAT_VM
	PUSHAL	FREE_VM
	PUSHAL	CODE_2
	CALLS	#2,G^LIB$STAT_VM
	PUSHAL	VM_INUSE
	PUSHAL	CODE_3
	CALLS	#2,G^LIB$STAT_VM
	SYMBOL_STAT	TITLE_O,ALLOCATE_VM
	SYMBOL_STAT	TITLE_P,FREE_VM
	SYMBOL_STAT	TITLE_Q,VM_INUSE
CLEAN_UP:
	MOVC5	#0,NULL,#0,#<SAVE_ENTRY+4-TIME_COMMAND>,TIME_COMMAND
	CLRQ	ELEMENT_64+8
	CLRQ	ELEMENT_128+8
	CLRQ	ELEMENT_192+8
	CLRQ	ELEMENT_256+8
	CLRQ	ELEMENT_LARGE+8
	RET
	.END	
